沖縄Rails Hackathon に行ってきました

地域Rubyiestコミュニティのminami.rb、okinawa.rb、shibuya.rbの共催で行われた 沖縄 Rails Hackathonに参加してきました。

11/17 に各地でアイデアソン。
11/23、11/24に沖縄でハッカソンという日程。

今回僕は大阪ミナミ(難波周辺)の地域Rubyiest コミュニティ minami.rb からチームBentenの一員として参加。

沖縄だけでも移動、本選、観光含めると4泊5日という長い日程なのでダイジェストでお送りします。

イデアソン 11/17 大阪 弁天町

あいにくの雨模様の中弁天町市民学習センターに集合。いかにも大阪市らしいわかりにくい建物の和室が会場。当日外ではブラスバンドの演奏会があったらしくBGMで津軽海峡冬景色が流れてた。そんな中チーム分けを行い, @satomicchy と @to_uedaのチーム酔っ払い。僕(@yalab)、@meltedice 、@murase_syuka のチームBentenとなった。
その後何を作るかをチーム毎に話し合いあーだこーだ言い合った結果チームBenten はリアルタイム動画チャット(Skypeみたいなの)を作る事に決定。チャットが作りたかったかというとそうでも無くて「僕達は良いプロダクトを作りたいわけじゃない。最新の技術を使いたいだけだ」をスローガンに要素技術を詰め込んだ結果 ActionController::Live と WebRTC 辺りかなとなりそれを使うと出来上がるものが動画チャットかなと。当日はとりあえず edge rails でプロジェクトを作り、中央リポジトリhttps://github.com/Minamirb/benten に作り各自がフォークするところまでやってタイムアップ。その後参加者全員で kyoto.rb 主催の livecoding#11 へ参加したんだけどそれはまた別の話。

もくもく 11/18から11/21 自宅とかカフェとか

「もくもくする」と言った時に一般の方からは「タバコ?」と聞かれたりする今日この頃。IT系(の一部) の人の間では「黙々と勉強やコーディングを行う」事を略して「もくもくする」と言う。アイデアソンからハッカソンまでの一週間はもくもくの期間。僕たちのチームはさっそく pull request ベースで開発をはじめた。ソーシャルコーディングの勉強にもということでやりとりは英語。その辺の軌跡は github の pull request を参照。Benten チームでは無いけどもくもくの最中に @to_ueda が rails のバグを踏み。 rails チームへpull request を送るなどといった事も。残念ながらマージはされなかったものの rails の安定化に一つ貢献ができたわけでもうすでに有意義なハッカソンになった。

移動日 11/22 大阪 -> 沖縄

@satomicchy は21日に移動したり @murase_syuka は 23日に移動したりと各自の都合で勝手に現地へというやり方だっったので僕は22日に移動しました。初のLCC(Peach)で初沖縄へ。早めに関西国際空港へ移動したりしたので特にトラブルも無く搭乗。さすがに席は狭いけど1.5h程度だし値段を考えれば全然アリだなという感想。そして那覇空港で @satomicchy、@to_ueda と合流しレンタカーを借りて一路宿へ。

この日は栄市場で沖縄そばをいただきスーパーで買い物をして宿へ戻る。宿ではスーパーで買ったオリオンビール泡盛を飲みながらやはりコードをひたすら書いた。

ハッカソン1日目 11/23 沖縄IT津梁パーク

ハッカソン初日はとりあえず会場に集まってもくもくコードを書きまくった。以上。
会場から帰宅してからもやっぱりコードを書きまくったり。というのもやはりしかしながらどうして明日までに動くものを作らなければいけないというプレッシャー。僕はすでに Ajax で文字を投稿し ActionController::Live でライブストリームでその文字を流す部分の実装を終える事ができたのでわりと余裕。 ActionController::Live についてはいくつか(も)ハマったのでこの辺は別エントリーで解説することにする。

ハッカソン2日目 11/24 沖縄IT津梁パーク

2日目にして最終日。この日は 14:00 まで最後の詰めとプレゼン資料の作成をして 14:00 からはそれぞれのチームの発表。発表の内容などは公式サイトにだいたい載ってるのでそちらを。Rails ハッカソンであるにも関わらずまったく Rails、もっと言えば Ruby すら使わなかった ScreenX が優勝など緩さ全開ではあったものの書くチーム Edge にを使ってみてたりアニメーションでプレゼン受けを狙ってたりいろいろとおもしろかった。この日はハッカソン終了後懇親会も行った。泡盛をgokgok飲みつつ島唄を合唱したりとなんしかすごかった。

観光 11/25 いろいろ

ハッカソンは既に終わったけれどせっかくの沖縄だし観光もしないとね(そのために3連休を選んでる)ということで観光へ。 minami.rb では @meltedice が行きたいところがあるからと別行動。それ以外のメンバーと okinawa.rb の @yasulab が参加。前日に夜なべして @to_ueda がピックアップしたスポットを巡る。オリオンビールの工場を見学したりすごく雰囲気のいいお店でランチしたり、泡盛の倉を見学しようとしたら残念ながら時間が合わなかったり、海岸線を通ってビーチへ行ったり、のぼり窯を見て焼き物や琉球ガラスを見たりとにかく前日までは雨が降ったり止んだりとぐずついた天気だったけどこの日はすごく快晴で海もとても綺麗ですごく良かった。

最終日 11/26 沖縄 -> 大阪

いよいよ最終日。大阪で終電に間に合わなくなる事を危惧して僕は一足早めの15:40の飛行機で帰ることにしていた。ということで @meltedice に空港まで送ってもらって一旦荷物を預けた後、国際通りへお土産を買いにいった。途中ものすごい雨と風に襲われたりもしたけれどなんとかお土産やの中でしのいだり、食堂でランチをしながらしのいだり、カフェでチャイーを飲みながらしのいだりして結局傘を買わずにねばった。結局悪天候のため30分ほど飛行機が飛ぶのが遅れたのだけど、特に目立ったトラブルもなく無事帰宅。前日はわりとよく眠れたし、飛行機でもしっかり寝れたので思ったより疲れを残さないまま帰宅。ということで今ブログを書いていたりする。

感想など

期間も長かったためいろいろ思うところはあるので思いついたところから書く。チームとしてのハッカソンの成果としては pull request ベースでやった開発は得るものが多かったんじゃないかと思う。個人的な成果としては ActionController::Live が苦労はしたけど思い通りに動かすことができて良かった。

他コミュニティとの絡みとしては以前 yokohama.rb とやった伊東のハッカソンの時のように同じ部屋に寝泊まりしてやるスタイルのほうがよかった。それと懇親会は最後にやるんじゃなくて最初にやったほうがコード書いてる最中に気軽に質問にいけたりできたんじゃないだろうか。

LCC を使うと意外に沖縄へも気楽にいける値段だったことも大きな収穫だった。

沖縄そばは美味かった。大阪で食べるよりもはるかにおいしくて、多分現地の気候と水のせいだと思う。

1週間程度だったとは笑いあり涙あり、かつ新技術を触ってみたり知り合いが増えたり体重が増えたりとても楽しかった。

最後にすでに張ってるものもあるけど各種リンクを張っておく。

[android][scala] Scala で Android アプリを作成する環境を作る

Ubuntu 11.10 リリースということで思い切ってクリーンインストールした結果、Scala + sbt で Android アプリを作る環境も作り直すことになりましたので、その時のメモを公開します。

JDK をインストール

$ sudo apt-get install openjdk-6-jdk

Scala をインストール

$ cd /tmp
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final.tgz
$ sudo tar -C /opt -zxvf scala-2.9.1.final.tgz
$ cd /opt
$ ln -s scala-2.9.1.final scala
$ echo 'export SCALA_HOME=/opt/scala' >> ~/.zshrc
$ echo 'export PATH=$PATH:$SCALA_HOME/bin' >> ~/.zshrc
$ source ~/.zshrc
$ scala -version
Scala code runner version 2.9.1.final -- Copyright 2002-2011, LAMP/EPFL

Android SDK をインストール

$ cd /tmp
$ wget http://dl.google.com/android/android-sdk_r13-linux_x86.tgz
$ sudo tar -C /opt -zxvf android-sdk_r13-linux_x86.tgz
$ echo 'export ANDROID_SDK_HOME="/opt/android-sdk-linux_x86"' >> ~/.zshrc
$ echo 'export PATH="$PATH:$ANDROID_SDK_HOME/tools"' >> ~/.zshrc
$ source ~/.zshrc
$ sudo /opt/android-sdk-linux_x86/tools/android
[Available Packages] 
↓
[Android Repository] のすべてのSDK、[Third party Add-ons] のGoogle API をチェック
↓
[Install Selected]
↓
[All accept] 
↓
[Install] #だいぶ時間かかります
$ sudo mkdir -p /opt/android-sdk-linux_x86/.android/avd
$ sudo chmod 777 /opt/android-sdk-linux_x86/.android/avd
$ android avd
[Virtual devices]
↓
[New]でEmulatorを作成する。作成したEmulatorは[Start]で起動しておく

sbt のインストール

$ cd /usr/local/bin
$ sudo wget http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.11.0/sbt-launch.jar
$ sudo vi /usr/local/bin/sbt
java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@" 
$ sudo chmod 755 /usr/local/bin/sbt
$ sbt about | grep This
[info] This is sbt 0.11.0

android-plugin のインストール

$  curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
$ ~/bin/cs n8han/giter8
$ cd /tmp
$ git clone https://github.com/jberkel/android-plugin.git
$ cd android-plugin
$ sbt publish-local

sample アプリを作る

$ cd /tmp
$ ~/bin/g8 jberkel/android-app -b sbt-0_11
Template for Android apps in Scala

package [my.android.project]: com.android.test
name [My Android Project]: Test
main_activity [MainActivity]: #ブランクのままEnter
api_level [10]:                    #EmulatorのAPIレベルに合わせる
$ cd test
$ sbt
> android:package-debug
> android:start-emulator #Emulator 内で Hello world と表示するだけのアプリが立ち上がれば成功

Android アプリを Scala で作っててうれしい点というのはまず何といっても Scala が使える点でありEclipse を使わなくてもいい点です。
ただ、Android 端末はなんといってもモバイル端末でメモリもCPUもそれほど潤沢ではないので速度的な問題で関数型言語の恩恵はなかなか受けられません。Better Java として Scala を使っている感じです。

とはいえ数値化されにくい「書いていて気持ちいい」という点でJavaを使うより生産性が高いように思います。この辺は僕がrubyプログラマだからというのもあるでしょうけど。

あと emacs の ensime なんかが意外に強力ですし一度やってみられてはいかがでしょうか?

minami.rbの第9回勉強会で発表してきました。

一応僕も共同主催者だったような気がする大阪のミナミ(難波周辺をこのように呼ぶ)を中心に活動している地域rubyコミュニティ minami.rb の第9回勉強会が10/1に浪速区民センターでありまして、そこでgitのtipsについての発表を行なってきました。


発表資料「gitの使い方あれこれ」: http://www.slideshare.net/yalab/git-9518230


ちなみに宣伝ですが minami.rb は rails を中心としてその周辺技術(git、coffee-script、jQuery、デザイン、SQL...etc)をなんでもやろうというコミュニティです。レベル的にはrailsでscaffold やってみたんだけどそこから先に進めないぐらいの人が対象です。中の人のレベルは様々ですが...。


大阪周辺にお住まいでRailsに興味をお持ちの方は是非一度いらしてください。


minami.rb のMLへ参加したいというかたは rudeboyjetあっとまーくgmail.com までご連絡ください。

[android][scala] レッッツVOAリリース

レッッツVOAというAndroidアプリをリリースしました。

https://market.android.com/details?id=org.yalab.bourbon&feature=search_result

概要

レッッツVOAとは VOA News というアメリカのニュースサイトの英語初心者向けコンテンツ Special English(http://www.voanews.com/learningenglish/home/) で英語の勉強をするためのアプリケーションです。
スクリプトを読みながらリスニングができ、単語をタップすると英辞郎 on the web(http://www.alc.co.jp/)で単語の意味を調べる事ができます。

その他

レッッツVOAはBeta版です。今後も機能追加をしていきます。
具体的に考えていることとして

  • フォントサイズの変更
  • オンライン辞書の選択
  • ブックマーク機能
  • Special English 以外の記事も扱う

などを予定しています。

またレッッツVOAscala で書かれており、完全なソースコードgithub で公開しております。
https://github.com/yalab/bourbon
ソースコードのライセンスはGPLですので、勝手にcloneして配布したり売ったりしても問題ありません。しかしその際は変更点を含む全てのコードをGPLライセンスで公開する義務が発生しますのでご注意ください。

不具合などを発見された場合はまたは何かしらの要望がある場合はこの記事にコメントいただくか、あるいはTwitterで @yalab までご連絡ください。

RailsHackathon に行ってきました

2011年06月25日 〜 26日の日程で静岡県の伊東で開催された Yokohama.rb と Minami.rb の合同RailsHackathon に行ってきました

Hachathon って何と言うかたはggrks

Minami.rb 側の行程表は以下のような感じ

1日目

10:30 新大阪駅ホーム集合
10:50 新幹線乗車 移動中もハッカソンです!ということでみんなコード書いたりお弁当を食べたり
14:30 伊東駅到着先に高速バスで移動していた @fukajun に迎えに来てもらい宿へ移動
14:50 宿到着
  旅館の廊下
15:00 先にチェックインしていた Yokohama.rb の部屋で自己紹介などをする。ここからは自由行動、地元スーパーに買出しに行ったりコードを書いたりお風呂にはいったり
18:00 夕食開始
19:00 再び自由行動。僕はこの時間の間にお風呂にはいったりコードを書いたりうろうろしたり
23:00 品評会開始(ustも行ったけど録画はしてません。あしからず)
00:15 品評会終了宴会開始
  すげー量のお酒があった...主にMinami.rbが持参
02:30 Tiger & Bunny の ust 配信を視聴(部屋が暗くなったため半数が討ち死にする)
03:30 (@yalab討ち死に)

2日目

08:30 朝ご飯
09:30 朝のお散歩
10:00 チェックアウト
10:30 東海館見学 ここで不幸にもはぐれた人がいたり前日の深酒がたたってふらふらになる人がいたりとなかなかのおもしろい事象が発生する
  東海館正面
12:00 見学終了
13:00 伊東駅で昼食
13:40 Yokohama.rb とわかれる
13:50 熱海駅へ移動
14:20 MOA美術館見学
16:30 見学終了バスで熱海駅へ移動
16:50 自由行動で熱海の商店街でお土産を買う
17:10 新幹線乗車 途中浜松駅でひかりに乗り換える
20:00 京都組が京都駅でおりる
20:30 新大阪到着
20:40 大阪駅到着、大阪組焼肉へ、のち解散

以下感想などを散文的に

Minami.rbとしては2回め、Yokohama.rb との共同開催ははじめて(というかYokohama.rb とのイベント自体が初)のハッカソンだった。
しかし前回と比べるとアイデアソンからの一週間のコミットがとても多くてわりと驚いた。Github で公開リポジトリにしてると「おお、なんかみんなけっこうコミットしてるやん」て感じで変に競争意識も芽生えていい感じということがわかった。


当日の顔合わせはしかしながら予想通りそれなりによそよそしい感じはした。
とはいっても宴会を越えた後次の日にはなんかやっぱり仲良くなっていたりでやっぱりいっしょに何かやるってのはいいことだね。


今回の事をきっかけに Yokohama.rb にも rails ブームが訪れたりしないからしら。


2日目の観光も古い建物とか美術品とかを堪能できてなんかとてもよかった。


毎日がハッカソンならいいのに...


ちなみに僕のチームの作品「がぞちず」はもう少し継続して開発してそのうちサービスとして公開しようとは思います。(時期未定)


最後にですがこんな素晴らしいイベントを実施していただいた @dan5ya @1syo @satomicchy にあらためてお礼を申し上げます。ありがとうございました!

[scala] Scalaで画像を保存

scalaには実はファイルを書き込むAPIが存在しない。さらにscalaはバイナリデータを扱うのが苦手だったりで、画像の保存一つに偉い悩んでしまった。いろいろやった結果以下の感じに落ち着いた

import java.net.URL
import java.io._

val url = "http://www.google.com/images/logos/ps_logo2.png"
val stream = new URL(url).openStream
val buf = Stream.continually{ stream.read }.takeWhile{ -1 != }.map{ _.byteValue}.toArray
val file = new BufferedOutputStream(new FileOutputStream("google.jpg"))
file.write(buf)
file.close