スキップしてメイン コンテンツに移動

投稿

2010の投稿を表示しています

Clojure + Jettyでウェブアプリケーションを動作させるJarファイル

このところClojureを使ったウェブアプリケーションを書いていて、 そのアプリケーションを単体で動かそうとしたときのまとめを書いておこうと思います。 ウェブアプリケーションをJarファイルにパッケージしたというそれだけのことですが、ClojureでJarアプリケーションを作って動くことに感動したので。 前提としてLeiningenを使いCompojureでウェブアプリケーションを開発しています。 project.cljに以下の行を追加します。 (defproject hoge "1.0.0-SNAPSHOT" :main hoge.core .... src/hoge/core.cljには以下のように記述しました。hoge.web/appというのをCompojureのdefroutesで定義しています。 (ns hoge.core (:use hoge.web compojure) (:gen-class)) (defn -main [& args] (run-server {:port (Integer/parseInt (first args))} "/*" (servlet app))) これで、Leiningenを使いJarファイルを作成します。 lein uberjar 作成された、hoge-standalone.jarがJettyで起動するかを確認します。 java -jar hoge-standalone.jar 8080 Jettyの起動時のログが出力され、ブラウザでhttp://localhost:8080/を見るとアプリケーションとして動作してるかどうかが分かります。 あとは、このJarファイルをサーバへアップし起動すればOKです。 このやりかただとアプリケーション単体でアプリケーションサーバとして動かしているので、既存のウェブアプリケーションサーバに配置したい場合は、warにしてXMLファイルをゴニョゴニョすればいいんだと思います。

携帯セッションを管理するSinatraアプリケーション用プラグイン

Sinatra、Rackアプリケーションで携帯のセッション管理の自動化を行うためのプラグインをgithubに公開しました。 セッション情報をmemcacheに格納し、HTML中に自動的にセッションIDを埋め込みます。 機能 - ボディ内のリンクおよびフォームを解析し、自動でセッションIDのURLに変更します - URL中に含まれるセッションIDをもとにセッションの管理を行います - セッション情報はmemcacheに格納されます 昨年末に作った携帯サイト用の機能を切り出したものです。 MobileSession

WakameTech #1 そろそろ本気でIaaS型クラウドを作る会のプレゼン資料

当日 話しをさせていただいたプレゼンの資料をアップしました。 まもなく公開されるWakame1.0の内部を作るエンジニアとしてのWakameの実際の動きを話させていただきました。 (40人もの前で話すのは初めての経験でしたがなんとかなると思ってたところ、けっこうカミカミで、来ていた友人にもあとで指摘されました、、、) 懇親会での参加者とのクラウド、関数型言語あたりの話が面白かったです。 スライドショーの内容は前提としてあくしゅ代表の山崎さんの資料が先に頭に入ってないと略語だらけであまり分からないかと思います。 [Wakame] IaaSを本気で作る会のスライドをアップしました! | やむにやまれず Wakeme Presen View more presentations from tnoborio . フリーランスとしてですが開発に参加させていただき、また発表の場まで与えていただいたあくしゅさんありがとうございます。

ClojureでCompojureを使わずにサーブレットを書く方法

Clojureでgen-class、proxyを使ってみようと思い、試しにサーブレットを書くとどうなるかを試してみました。 コンパイルにLeiningenを使うためプロジェクトを作ります。 lein new sample-servlet まずはsrc/sample_servlet/servlet.cljを書いてみます。 (ns sample_servlet.servlet (:gen-class :extends javax.servlet.http.HttpServlet)) (defn -servlet [this request response] (.setContentType response "text/html; charset=UTF-8") (let [out (.getWriter response)] (.. out (println "<html><body>hello world</body></html>")))) (defn -doGet [this request response] (-servlet this request response)) 依存関係とクラスファイル生成のオプションを与えたproject.cljファイルを作りました。 (defproject sample-servlet "1.0.0-SNAPSHOT" :description "FIXME: write" :dependencies [[org.clojure/clojure "1.1.0"] [org.clojure/clojure-contrib "1.1.0"] [javax.servlet/servlet-api "2.5"] ] :namespaces [sample_servlet.servlet]) 必要なライブラリを取得しコンパイル。 lein deps lein compile 無事生成されたことが分かります。 % ls -lr

はじめてのiPhone3プログラミング

生徒へのレッスン用と、iPhone3の技術の確認(最近iPhoneアプリを作っていなかったので)のため、以下の本を購入しました。 一年前は全然iPhoneの本もなかった状況でしたがその後雨後の竹の子状態でいろいろと技術書、関連書籍が出てきましたね。 と選び放題の本の中で以下の本がおすすめです。 第1章:ジャングルへようこそ! 第2章:Xcode入門 第3章:基本操作をハンドリングする 第4章:より高度なユーザーインタフェースを作る 第5章:画面の自動サイジングと自動回転を作る 第6章:マルチビュー・アプリを作る 第7章:ツールバーとピッカーを作る 第8章:テーブルビュー入門 第9章:ナビゲーションコントローラーとテーブルビューを作る 第10章:アプリケーションの設定画面とユーザーデフォルトを作る 第11章:SQLiteによるデータの永続化 第12章:QuartzとOpenGLによるドローイングアプリケーション 第13章:タップ/タッチ/ジェスチャーをコントロールする 第14章:ここはどこ? 位置情報を扱う 第15章:さらにクールなアプリを作る 第16章:iPhoneカメラとフォトライブラリをコントロールする 第17章:多言語対応するには? 第18章:iPhoneアプリの次なる道は? あれっ、実際の本と目次が違います。2章は「ティキ神さまを怒らせるな」ですがAmazonで見ると上記の通りで違っていますね。よく見ると15章も本の方は「やってしまった!」です。 内容もこういう感じで砕けていて随所にユーモアが見られます。 ユーモアがあるだけでなく、基本をしっかりと抑えつつ、丁寧な解説がコードごとにあり非常に分かりやすいです。 いくつもiPhone SDKの本を見てみましたがこの本は書いだなと思います。 ちなみに本書と対応しているソースコードがたいへん見つけにくく、フォーラムへの会員登録が必要でした。 今日時点でのソースコードの置き場をリンクして置きます。 Read this BEFORE you download any source code... Latest source archive, Oct 12, 2009, goes with SDK 3.1.2

Fedora 8でRails2.3を入れる

前回Rails 2.3をAmaozon EC2のFedora 8イメージで試そうとしましたが失敗したため、 再度チャレンジしてみましたが、今回はあっけなく最初にgemsをアップデートするだけで解決してしまいました。 ということでEC2にあるFedora 8の"Ruby on Rails Web Starter (AMI Id: ami-22b0534b)"をRails 2.3にする手順は以下の通り。 # gem list *** LOCAL GEMS *** actionmailer (2.2.2) actionpack (2.2.2) activerecord (2.2.2) activeresource (2.2.2) activesupport (2.2.2) cgi_multipart_eof_fix (2.5.0) daemons (1.0.10) fastthread (1.0.1) gem_plugin (0.2.3) mongrel (1.1.5) open4 (0.9.6) rails (2.2.2) rake (0.8.3) 1.3.5に先にアップデート。 # gem install rubygems-update # update_rubygems 前回と違いすんなりインストールされました、、、 # gem update (...略...) # gem list *** LOCAL GEMS *** actionmailer (2.3.5, 2.2.2) actionpack (2.3.5, 2.2.2) activerecord (2.3.5, 2.2.2) activeresource (2.3.5, 2.2.2) activesupport (2.3.5, 2.2.2) cgi_multipart_eof_fix (2.5.0) daemons (1.0.10) fastthread (1.0.7, 1.0.1) gem_plugin (0.2.3) mongrel (1.1.5) open4 (1.0.1, 0.9.6) rack (1.0.1) rails (2.3.5, 2.2.2) rake (0.8.7, 0.8.3) rubygems-update (1.3.5) 無事Railsの最新状態になり

Bloggerでのコードの色付け-Clojure編

Bloggerでソースコードを色付したいと思い調べてみました。 見つけた色付けのコードは以下の二種類。 google-code-prettify http://alexgorbatchev.com/wiki/SyntaxHighlighter デフォルトの状態では両方共Clojureに対応していませんでしたが(まだそこまでのメジャー度ではないわけですね)、SyntaxHighligher用のClojureに対応するJavaScriptコードを以下のサイトで見つけました。 http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/ あとはGoogleサイトのファイルキャビネットを使いちまちまとSyntaxHighligherファイルをアップし、Clojureのコードは本サイト中に埋め込んで完成です。 (ns gomitoban.bot (:use clojure.set clojure.contrib.str-utils) (:require [appengine-clj.datastore :as ds]) (:import (com.google.appengine.api.datastore Query) (twitter4j Twitter) (twitter4j Paging))) (defn setup-tw [username password] (def tw (Twitter. username password))) ファイルキャビネットは初めて使いましたが一括ファイルアップロード機能が欲しいですね。ディレクトリを内部で作ってもファイルのパスはディレクトリを無視するという仕様にはまりました。ちなみに以下のようなファイルをアップしてます。 http://sites.google.com/site/tnoborio/hightlight

Fedora 8でRails2.3が入らず途中までの記憶

AmazonのAMIを使いRails 2.3を入れてみようとしていろいろステップが必要だったので共有します。 Railsライブラリは入りますが最後、Railsを起動で成功していません。 今回は、Fedora 8の"Ruby on Rails Web Starter (AMI Id: ami-22b0534b)"を使いました。 パッケージ管理で最新のFedora 8のパッケージに入っているRailsに更新します。 # yum install rubygem-rails yum listで見てもRailsは2.2のままです。gemでチェックしてみます。 # gem list actionmailer (2.2.2, 2.1.1) actionpack (2.2.2, 2.1.1) activerecord (2.2.2, 2.1.1) activeresource (2.2.2, 2.1.1) activesupport (2.2.2, 2.1.1) cgi_multipart_eof_fix (2.5.0) daemons (1.0.10) fastthread (1.0.1) gem_plugin (0.2.3) mongrel (1.1.5) open4 (0.9.6) rails (2.2.2, 2.1.1) rake (0.8.3) まずはgemsを更新してみます。 # gem update Updating installed gems Updating actionmailer ERROR: While executing gem ... (Gem::InstallError) actionpack requires rack (~> 1.0.0, runtime) Rack 1.0.0が求められるようなのでバージョンを指定して先にインストールします。 # gem install rack -v 1.0.0 Successfully installed rack-1.0.0 1 gem installed Installing ri documentation for rack-1.0.0... Installing RDoc documen

Google App Engineで動く、Clojure + Compojureで作るTwitter Bot

表題のアプリケーションを作ってまして、今日からgithubに公開するようにしました。 http://github.com/tnoborio/gomitoban なぜgomitoban(ゴミ当番)という名前かというと今日は何のゴミ出しの曜日かをTwitter botが親切にも教えてくれるアプリケーションだからです。半分ジョークのような作品ですが、Clojure、Compojure、Google App Engineの勉強に調度良いかと思いはじめてみました。 一昨日やってみたClojureコードバトンでgithubをはじめたこともあって、そこにおいてみようということでスタートさせたプロジェクトです。 まだ未完成なので完了したら告知します。 Compojureやってみようという方の参考になれば幸いです。

Clojureコードバトン参加中

omasanori さんからClojureコードバトンを受け取りました。 コードを見てみてClojureならではのことをやれたら面白いなと思い、Swingを使ったGUI化をメインでやりつつ、途中GUIかCUIかという昨日の切換えのところでマルチメソッドを使ってみました。 ということでフォークして変更を加えたコードバトンの今現在のURLはここです。 http://gist.github.com/297546 やってみて面白かったです。Clojureでさくさく書けるという面白さと、バトンで渡ってきた受け継がれてきたきれいなコードを読んでちょこちょこ追加する腕試し的な楽しさと。 gist.githubははじめて使いましたがウェブ上で編集、フォークができるというのは便利ですね。 といいいつつも、なれているgitの方で結局cloneしcommitしましたが、、、細かい単位でコミットしたいという場合はgitに頼ってしまいます。githubもアカウントとったままだったので鍵を設定したりと今度コードを公開するためのちょうど良い機会になりました。 バトンに関するリンクは以下の通り。 Scheme コードバトンまとめページ - ひげぽん OSとか作っちゃうかMona- バトン、二人前の走者のdeltamさん - サルノオボエガキ: Clojureコードバトンを受け取った Clojureコードバトンにご興味ある方はぜひご連絡( tnoborio )ください。

プログラミングを学びたいひとのためのメールサポートプラン

先週axshさん主催のWakameTechでの発表もなんとか無事終りました。 と言っても参加してもらった友人曰くカミカミだったとのことで発表に関しての課題は残りましたが、、、 また、生徒に対してプログラミングを教えるという活動をやっているのですが、対面だけでなく、メールでのサポートを始めてみようと2月に入ってからメールサポートプランと言うのを用意してみました。 以下は某マッチングサイトに乗っけた内容そのままなのでちょっと口調が違いますがご了承ください。 興味のある方はご連絡くださいませ。 10名限定!業務仕込みのプログラミング入門講座 昨年一年間、企業、個人の方に教えてきましたプログラミング開発のノウハウを 多くの方に低価格でご提供しようと思い2月限定でメニューを一新しました(2010/2/4更新) -- [メールサポートプラン] プログラミング初心者あるいは、すでにエンジニアの方で新しく他の言語を効率的にマスターしたい方向けのコースです 例えば、新しく言語を勉強したいと思って本は買ったけど最初でつまづいてしまっている、分からないところだけを聞きたいという方を対象としています - 一ヶ月間無制限のメールサポート(忙しい方でも気軽にスタートできます) - テキストあるいは、こちらから出す課題に沿って学んでいきます - 対象言語: Java/Ruby/Python - 初回申込費用を除くと6,000円以上かかりません 忙しい方でも気軽にスタートできますし、 プログラミングの楽しさを感じられるお手伝いができれば幸いです

Clojure + Compojure on Google App Engine

プログラミングClojureを購入し、ここ数日Clojureにはまりつつあります。 JVMで動き、Javaのライブラリが使えるという実用性とそのJVM上で優雅に動く関数型言語というイメージです。Scalaも同じようにJVMで動く関数型言語ですがClojureの方がLisp側に傾いています。 で、そんなClojureをCompojureというフレームワークとともにGoogle App Engineで動かしてみようと昨日、今日試してみて成功しましたのでその手順を忘れないうちに書き留めておきます。 参考にしたのは以下のサイト Clojure on Google App Engine Compojureをビルドすると、Clojureを含めたライブラリの依存関係を解決してくれるので最初に取得しておきます。 Compojure 解凍先のディレクトリ内で"ant deps"と"ant"を行うと必要なライブラリ、compojure.jarが生成されます。 これらのライブラリと、その他GAE的に必要なライブラリをディレクトリにまとめ、build.xmlは以下のように編集しました。 <project name="guestbook-clj" basedir="." default="test">   <property environment="env" />   <property name="sdk.dir" location="/Users/tnoborio/lib/appengine-java-sdk-1.3.0" />   <property name="classes.dir" value="war/WEB-INF/classes" />   <property name="lib.dir" value="war/WEB-INF/lib" />   <property name="src.dir" value=&

Wakame開発中

いよいよ明後日になりましたWakameTech #1 WakameTech #1 現在鋭意開発中で、イベントに向けた用意のため今日も新宿にあるaxshに行き開発をしていました。 僕もRubyを使い開発しているWakame内のデータセンタマネージャというモジュールについて話すのでそのための資料を開発の合間合間に作成中。 明日はもうちょいプレゼンの用意をして、なるべく来ていただいた方に分かりやすい説明になるよう頑張ります。

Androidをネットブックで動かす方法

昨年の日経Linux 11月号に執筆した「ネットブックでAndroidを動かす」がネットでも読めるようになっていましたので紹介。 Android徹底解説---内部構造,移植,開発 ネットブックでAndroidを動かす(1) ネットブックでAndroidを動かす(2) ネットブックでAndroidを動かす(3) 執筆中はネットブック用に何度もイメージを作り直しては検証を重ね、ということをやっていて、なかなか思い通りのスケジュールには進められませんでしたがCerevoの中河さん協力のもと無事書き上げることができました。 雑誌に掲載という初めての経験でいろいろと大変でしたが、それを書店で見た時は嬉しかったことを覚えています。

ネットブックへのUbuntuインストール

AcerのネットブックにUbuntu 9.10をインストールしました。 去年入れたときはUbuntu 9.4で、ディスプレイの解像度が低いままだったのと、Wifiが使えずに実用的に使えずそのままにしていました。 今回はそのネットブックに9.10のインストールを試したところ無事にグラフィックの問題とWifiの問題が一気に解決したのでその方法を共有します。 1) USBインストーラの作成 またネットブックにはCD-ROMがついていないので、USBメモリにイメージを入れます。 たまにやるとやり方を忘れてしまいますが、まずはUbuntuのページからisoファイルを取得します。 今回は、 Ubuntu Desktop 日本語 Remix を使用しました。 最初はsyslinuxを使ってUSBメモリのフォーマットを指定したりといろいろいくつか試しましたが成功しませんでした。 最終的にインストーラの作成には、Macに入っているVMware FusionのUbuntu上の作成ソフトから行いました。isoファイルを指定するだけで良いので楽です。 2) Ubuntuのインストール&起動 ブートがUSBから起ち上がるようにしたあとはすんなりインストールを行います。ここは何の問題もありませんでした。 インストール終了し再起動後は、Ubuntuが立ち上りサウンドもOK、Wifiも利用可能という嬉しい検出率です。 3) グラフィックドライバの設定 解像度が1024x600、glxgearsでチェックしてみると20〜30fpsくらいでいちいちウィンドウの切替に待たされます。 これをこのマシンが持っているドライバのpsbを認識させて快適にしたいと思います。 注意点というか僕が失敗したのはカーネルを先にバージョンアップし、そこから作業を始めることでした。そうでないとどのカーネル用のモジュールを作るのかという問題でややこしくなるようです。 なので先に"apt-get update"、"apt-get upgrade"を行い再起動した状態で作業をはじめます。 参考にしたのは以下のページ HardwareSupportComponentsVideoCardsPoulsbo - Ubuntu Wiki

「フリー」

最近読んだ本の中で良かったもの。 オープンソースのWakameに関わっていたり、いくつかウェブサービスを作ってみたりとネットの世界に関わっているものとして興味深く読めました。すでに膨大なフリーのビジネスが存在し、これからも生まれるであろうことが分かるおすすめの一冊です。 これからの自分の仕事の考えに影響を与えましたし、例えば昨日もセミナーをやっている友人にコンテンツをYoutubeに配信してみたらどうかなと、アドバイス?してみました。

フリーランス

久しぶりに書き込んで、ブログを再開しようと思います。 書き込んでない間の変化として、フリーランスになったことと結婚したことがあります。 フリーとしてやっていけるか心配でしたが一年間やってみてなんとかなりました。 最近はアクシュという会社でWakameという、サーバをクラウド化するソフトウェアの開発にどっぷりと協力させてもらっています。 来週はそのイベントでちょっと発表しますのでクラウドにご興味ある方はぜひとも。 WakameTech #1 なるだけこのブログも続けて行こうと思います。