2013/02/26


AppFog というサービスを使えば色んなアプリケーションをクラウド上で動かせるので勉強に持ってこいですね。
AppFog: PaaS for Public and Private Clouds
AppFog

Fast and Easy Select name, size and stack, then launch. Make your apps even more powerful with popul...


https://www.appfog.com/
使える言語も結構多くて
appfog1
いろいろ使えるし、デプロイ先も選べる。AWS とか無料で使わせて貰えてチョーすげー。
appfog1
Java は Jetty じゃなく Tomcat で動いてるらしかったので、clojure 使ってみようと試してみた。
$ lein new hello で新しいプロジェクト作って Tomcat 向けに WEB-INF を作る。 |   project.clj
|   
+--- src
|   |   
|   `--- hello
|           core.clj
|           
`--- WEB-INF
            web.xml
project.clj を以下の様に弄る。 (defproject hello "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [compojure "0.6.5"]
                 [ring/ring-jetty-adapter "0.3.11"]]
  :compile-path "WEB-INF/classes"  
  :library-path "WEB-INF/lib"
  :namespaces [hello.core])
lein deps した際にに WEB-INF/lib に jar を、クラスファイルを WEB-INF/classes に放り込んで欲しいので compile-path と library-path を変える。
Tomcat なので web.xml を用意する。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="hello"
    version="2.5">
  <display-name>hello servlet</display-name>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>hello.core</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
ここまで出来たらもコードを書く。例えば src/hello/core.clj を以下の様に書く。
(ns hello.core
  (:import (java.util Date))
  (:gen-class :extends javax.servlet.http.HttpServlet)
  (:use compojure.core
        ring.util.servlet)
  (:require [compojure.route :as route]))

(defroutes hello
  (GET "/" [] (str "
<!DOCTYPE html>
<html lang=\"ja\">
<head>
    <meta charset=\"UTF-8\">
    <title></title>
</head>
<body>
こんにちわ 世界 " (Date.) "
</body>
</html>"))
  (route/not-found "DanKogai not found"))

(defservice hello)
サーブレットを継承して compojure でルーティングする簡単なやつ。この状態まで来たら動かす準備に入る。AppFog 用のツールを入れる。
$ gem install af 最近、クラウド操作で ruby 使ってる物、かなり多いですね。
入れたら AppFog でアカウントを作って、Java を選び、デプロイ先を選ぶ。無料なので遠慮せずに好きな所に入れればいいです。ドメイン名が気に入らない人は変更出来るので好きなようにどうぞ。最後にプロジェクトのルートで
$ af update myapp (myapp は AppFog で登録したアプリケーション名)
とやればアップロードされ、アプリケーションが起動します。
Posted at by



2012/03/09


VDBIは一日にして出来上がりその日中にXMLRPCプロトコルからJSONRPCプロトコルに変わってしまったという酷いプロジェクトなんだけど、JSONRPCサーバは色んな言語から扱えるのでやってて楽しい。
mattn/vdbi-vim - GitHub

Database client for Vim

https://github.com/mattn/vdbi-vim
最近clojureに興味はあるんだけど、一向にclojure力があがらないので、勉強がてらVDBIのサーバとおしゃべりしてみた。
使ったのは clj-rpc というJSONRPCライブラリ。
zhuangxm/clj-rpc - GitHub

a simple web rpc using clojure and json protocol

https://github.com/zhuangxm/clj-rpc
最初、エンドポイント指定時に :on-witejson に指定しないとデフォルトで clj プロトコル(通信データがJSONじゃなくclojureのコード)になるという罠にどっぷりハマってしまったけど、なんとか動いた。
(ns vdbi-demo
  (:require [clj-rpc.client :as client]))
(def endp (client/rpc-endpoint :server "localhost" :port 9876 :on-wire "json"))
(client/invoke-rpc endp "connect" ["dbi:SQLite:dbname=c:/temp/foo.db" "" ""])
(client/invoke-rpc endp "prepare" ["select * from foo"])
(client/invoke-rpc endp "execute" [])
(let [rows (client/invoke-rpc endp "fetch" [-1])]
  (reduce (fn [rows row]
    (reduce (fn [cols col]
      (print (str col ","))){}, row)
    (println)){}, rows))
1,あいう,
2,かきく,
3,psgix.harakiri,
ちなみにこの clj-rpc は :on-wire をURLのおケツに引っ付けてしまうので、物によっては動かないサーバもあるかも。
あと vimclojure をいれて let vimclojure#FuzzyIndent=1
let vimclojure#HighlightBuiltins=1
let vimclojure#HighlightContrib=1
let vimclojure#DynamicHighlighting=1
let vimclojure#ParenRainbow=1
という設定をvimrcに書いておくとコードが七色になるのでいれるべし。
vimclojure
Posted at by