2013-07-01 (月)
*ハッカソン的なやつ
この時期になると,新卒の新入社員も含めてエンジニア全員でご飯食べる日があるのですが,今年はエンジニア決起集会という名のハッカソンらしいです.
何かネタ考えようと思ったけど,半日でできそうなネタってけっこう難しいです.加えて,仕事で使ってない言語とフレームワークなのも悩む.Java,Scala,Ruby,AS3,Objctive-Cあたりはここ1年で仕事の開発で使った言語なので,HaskellかGoあたりが良さそう.
会場に行くまで何やるか決めてなかったのだけど,前に話してたネタがあったので,3人チームでやる.Androidアプリ作りたい気もしたけど,せっかくGoやる気になってたのでサーバサイドを書く.
Go + Revelで写真投稿サイトのようなものを作っていました.
Go
2年ぶりに触る.ちょっと触ったことはあるけど,意味のあるプログラム書くのは今日が初めてです.
Goは1.1になってるのか.ずっと前に入れたやつを消して入れなおす.GOPATHとかの環境変数が必要になったっぽいので設定.
Revel
Revelはわりと素直なMVCなWebフレームワークで,Playとかを使ったことあるなら簡単に使えます.というかPlay Frameworkによく似ています.
インストールにhgとかいるのか.
revel runコマンドで起動すると,ファイルを弄るたびに自動的にコンパイルされる上に,Goのコンパイルは早いので,スクリプト言語感覚で実装できて良いですね.かつ,型があるので安心して書ける.
自動再読み込みしてコンパイルエラーになるときは,前の状態で動いていてほしい時がほとんどなので,どうにかならないかな.ブラウザ上でエラーとか見れなくても良いので.
マルチパートのPOSTとかもよしなにやってくれる.routesのmethodを「*」にしておくとダメっぽいので,ちゃんと書いとく必要あるようです.
GoでRedis
GoからRedis使ってみたけど,redisクライアントをどれ使うかで結構悩んだ.
http://redis.io/clients を見るとGoの実装も並んでるのでこの中から選ぶ.あまり考えずに,上から見ていって簡単に使えそうなのを探す.
- Go-Redisはbyteにするのだるい.放置されてそう.
- redigoはお勧めされてるけど,普通のコマンド使いたいだけなのにSend/Receiveするのは煩雑な気がしたので,見送る.
- radixもお勧めされてて,とてもシンプル.コマンドは文字列を直に書かないといけないのと,Cmdのエラー時にどう動くのか分からなかったので避ける(後で見なおして,Replyから値をとるときにエラーが取れるのに気づいた.でもいろいろ足りない気がする.float返す命令はstringで受けるの?とか,PubSub無さそうとか)
- Tideland CGL Redisは他と設計方針違う感じがしたので念のためスキップ.
- godisはベースはradixに似ている.基本的なコマンドはメソッド用意されてるし,Reply周りもパッと見では困ること無さそう.あと名前がそれっぽい.ただ,放置されてそう.
というわけで,今回はgodisを使ってみた.実際どれが良かったのかわからない.
Goのtemplate
Goのtemplateも使ってみたけど,ぐぐって出てくる情報は古いのが混ざってて,探しにくい.リストはrangeで処理すれば良いことは分かった.
ただ,Revelで使うときviewsの下に壊れたhtmlテンプレートが一つでもあると,全部止まってしまうのは試行錯誤してるときに,ちょっと不便だった.
他
使い慣れない言語とフレームワークで5時間でどうにかするのはギリギリだなと思ったけど,やっぱりギリギリでした.RevelもGoも素直だったおかげでなんとかなりました.
ピザたくさん食べました.余ったピザを貰ってきたので,帰って冷凍庫に詰め込むのに一苦労...
新卒の新入社員と話をしたり.