Saturday, February 28, 2009

フクオカRubyフォーラム2009

フクオカRubyフォーラム2009にいってきた。
羽田から福岡空港に11:30頃。会場までつれていってもらって昼食会。知事をまじえて実行委員会/審査委員のみなさんと。Ruby大賞は、海外から結構応募があって驚いたとか、大賞も結局海外にとられてしまいました とか。自治体のITシステムがベンダーロックインされているのをどうしたらいいかとかそういう話。きれいなインターフェイスをきめて疎結合にしてあればいいんだろうけど、そうじゃないんだろうねえ。
フクオカRubyフォーラム2009はまず主催者と知事の挨拶からはじまり、フクオカRuby大賞の発表。 その後、基調講演。RubyのイベントにGoogleとしてということで、ちょっとawayぎみなんで何の話にするか悩んでたけど、結局 Google Data APIGoogle App Engineで、GoogleのスケーラブルなWebプラットフォームというタイトルにしました。RESTfulなプロトコルをつかうことで、Googleミッションの「世界中の情報を世界中の人がアクセスし、利用できる」ようにしているのがGoogle Data APIで、webアプリケーションの運用・構築をGoogleの強力なインフラ上で簡単にスケールできるようにしているのがGoogle App Engineというかんじのストーリー。Google Data APIについてはちょうどGoogle Data on Railsがあったのでそれを紹介することでちょっとrubyにふれることができた。App Engineはまだpythonのみなのでrubyな人には遠い話なのかもな…「技術のわかる人だけじゃないんで」といわれてたけどわかってもらえただろうか?
その後は、Matzさんの特別講演と受賞者のプレゼンテーション。
フォーラムの後は同じ会場で交流会。

交流会の後、現地の人につれられて屋台のラーメン屋へ。アゴ(トビウオの干物?)、明太イワシとか食べてあと長浜ラーメン+替え玉1。そのあとも芋焼酎とかけっこう飲んでだいぶ遅くなってから西鉄グランドホテルにチェックイン。なんか泊まった部屋はネットもwifiもなくてちょっと困った。
翌日朝7:30頃に起きて朝食くったあと、ネットなくてすることないし昨晩の酒でちょっとだるくて2度寝。10時頃おきてチェックアウトして福岡空港にいってお土産かったりラーメンくったりしたあと羽田へとんで帰宅。

Saturday, February 21, 2009

Release It!

Release It! 本番用ソフトウェア製品の設計とデプロイのためにが発売開始してます。
Ship It!Manage It!に続く第3段。Ship It!は、ソースコード管理やビルド・テストなど開発手法に関する話、Manage It!はプロジェクトのマネジメントはどうすればいいかという話に対して、Release It!では、大規模なシステムを開発・運用する上で考慮すべきことをまとめた本になっています。いわゆる上流工程的な設計をどうするか、実装詳細がシステムにあたえる影響、負荷がかかった時のふるまいがどうなるか、デプロイをうまくやるにはどうしておくべきかなど、ただ単に要求された機能が動作できるシステムを作るだけでなく、安定して運用するために検討しておくべきことがうまくまとめられています。
今回もレビュアーの方々のおかげで、かなりこなれた日本語訳になっています。
装丁も船外活動している宇宙飛行士が「Release It!」というパネルをもっていたりしてかっこいいです。

Thursday, February 19, 2009

Google Summer of Codeアンケート結果

そろそろまた Google Summer of Code 2009がはじまりそうです。月日の経つのは早いものですね。
というわけで去年とったアンケートの結果をまとめてみました。

34 Response
Google Summer of Codeを知っていましたか?
知っていた2784%
知らなかった516%

あなたは?
参加資格のある学生 9 33%
open source/free softwareの開発者 13 48%
(重複あり)
Google Summer of Codeに参加したことがありますか?
学生として申し込んだことがある 2 33%
学生として参加したことがある 1 17%
mentor organizationに所属している/所属していた 1 17%
mentorとして参加したことがある 0 0%
(重複あり)
Google Summer of Codeに参加した人はどこで知りましたか?
Googleのblog 1 8%
mentor organizationでの告知 1 8%
ニュースサイト 4 31%
その他 2 15%
(重複あり)
Google Summer of Codeを参加しようとしなかった人は、その理由はなんですか?
英語の壁 2 8%
申し込みの仕方がわからなかった 0 0%
申し込む開発ネタがなかった 3 13%
open source/free softwareに興味がない 0 0%
$4500もらっても仕方がない 0 0%
結果がだせなくて$4500もらえないリスク 0 0%
気づいた時には締め切られていた 2 8%
開発期間に時間がとれるかどうか不明だった 2 8%
その他 0 0%
(重複あり)
今後、参加してみたいと思いますか?
今のやり方のままでいいので参加したい 10 33%
参加しやすいやり方に変われば参加してみたい 17 57%
参加してみたいと思わない 3 10%

参加しやすいやり方に変われば参加してみたい人はどの点が変われば参加してみたいですか?/参加が増えるとおもいますか?
日本の大学事情にあわせたスケジュールになっていれば 5 24%
日本語で参加できるのならば 0 0%
日本語が通じるmentorがいれば 0 0%
もっと広くアナウンスして見逃さないようにしてくれれば 1 5%
日本 Summer of Code 3 14%
(重複あり)

フリーフォーマット回答から抜粋とその感想は以下のとおり
Google Summer of Codeに参加しなかった理由
自分の能力では恥をかくだけだという不安
やってみないとわからないのでは? 若いうちは恥をかいても得られるメリットがあると思う
特許の懸念があるプロジェクトが多すぎる。ffmpeg等
そのプロジェクトにapplyしなきゃいいんでは?
一緒に開発する友達が居なかった
GSoCは個人でapplyして個人で開発するものです
希望するやり方
行なわれたコミットメントに対して後から支払う
基本的にそうなっていますよ。application通過すれば$500、中間審査にpassすれば$2000、最終審査にpassすれば$2000です。途中でだめだと後はでません。mentor orgには終わった後に最後に支払いがあります。
夏のバカンスシーズンに、いきなり二日以内に答えろとか言ってくるのをやめてくれれば。
(初年度の時はどもかく)スケジュールはだいたいはじまる前に決まっているので、あらかじめ予定をたてておきましょう
その他御意見
問題をもっと明確に定義して,その解決アイディアにお金をはらうようにするといいのではないか(アイデアゴラのように)
問題を明確に定義するのはmentor orgとstudentが協力しあってやりあうことです。GSoCは解決アイデアに金をはらうのではなく、ソフトウェア開発(coding!)に対してです。
私の知っている範囲では、ほとんどのプロジェクトで採用され成功している学生はすでに参加している人です。今まで参加したことがなくて、金に釣られてやってくるような学生には滅多にいい人がいません。SoCに認められるような有名プロジェクトで普段から参加しているような日本人がほとんどいないんですから、こうなるのも自然なことだと感じます。
そうかもしれません…。金についてはバイトできないぶんの補償くらいかなあ。むしろなかなかprojectの中心メンバーとcommunicationしてprojectにはいりこむいいきっかけだと思うんですけどね。GSoCとかに参加しておくほうが就職活動のときにresumeに書けて有利というのがあると思います。(少なくともGoogle SWEにapplyする場合 resume screenはパスしやすくなるような…)
未踏ソフトウェア事業のように、オフラインで行う成果報告会に相当するものがあるといいと思います。
やってるんですけどねー。日本ではfsijがやってますが、日本からの参加者がかなり少ないのであまりもりあがりませんね。もっとアナウンスしたほうがいいのかもしれません。
SoCに参加したいとは思っているのですが,ネタが思いつかなくて躊躇してしまいます.「こういうネタでやってみませんか」という情報が広く伝わると参加しやすくなるのではないかと個人的には思っています.
mentor orgがだしているideas listでは駄目なんでしょうか?
Google DocsでSpreadsheetを使ったFormですが、最近サマリを自動生成する機能がlaunchされたので使ってみました。がサマリだけpublicにする方法がよくわからなかったので、コピペ。

Monday, January 12, 2009

Android Dream phone の kernel module のbuild

ext2.koなんかをつくったりするためのやりかたのメモ。
基本的にはBuilding for Dreamで環境を整える。
kernelだけならkernel/msmrefs/heads/android-msm-htc-2.6.25というrevisionをとってくればよいだけだとおもう。kernel versionがかわっていたら違うrevisionをとってくること。まあkernelのgitだけより全部のmoduleをrepoでとってきたほうがprebuiltにtoolchainなんかもはいっているのでそのほうが楽かも。
実機のkernelがどのversionかはuname -rなどで確認。unamebusyboxにはいってる。
CONFIG_LOCALVERSION_AUTOがセットされおりgit revisionの情報がkernel moduleのversionに追加されているため、git revisionをあわせる必要がある。kernel/scripts/setlocalversionをみればわかるようにgit describeの結果あたりが使われているのでそれがあうようなrevisionにする。git logでcommit logがわかるので、commitの行のhash値をつかってcheckoutしつつgit describeがそれっぽいのになるのにあわせる。
% git checkout commit行のhash値
% git describe
あとは/proc/config.gzをとってきて、必要なconfigをしなおしてmake。gccのバージョンは実機の/proc/versionなどでチェック。CROSS_COMPILEgccなどへのprefixをセットする。
% adb pull /proc/config.gz ./config.gz
% gunzip config.gz
% mv config .config
% vi .config # or make ARCH=arm menuconfigなど
% make ARCH=arm \
 CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
あとはできたext2.koなどをadbでpush。
% adb push fs/ext2/ext2.ko /data/bin/ext2.ko
/sbin/modinfo fs/ext2/ext2.koしてdependsしている*.koもpushするのを忘れないように。dependsしているmoduleがloadされていないとエラーになります。
# insmod /data/bin/ext2.ko
insmod: init_module '/data/bin/ext2.ko' failed (No such file or directory)
# insmod /data/bin/mbcache.ko
# insmod /data/bin/ext2.ko
これでkernelのversionがあがっちゃってもext2.koなんかを自分で作ることができる。

Monday, January 5, 2009

Androidの/etc/resolv.conf

Android Dream PhoneでDebianだと、networkによっては nameserverがみつからなくて困ることがある。Android appなら問題ないけど、debianのプログラムだと/etc/resolv.confをちゃんとつくる必要があるのだ。nameserverの情報はgetpropコマンドでとれるのでchrootする前に次のようなかんじでchrootの中のetc/resolv.confをつくっておけばよい。
getprop | \
 sed -n -e 's/^\[net\.dns.\]: \[\(.*\)\]/\1/p' \
   > etc/resolv.conf

Sunday, January 4, 2009

謹賀新年2009

遅ればせながら、あけましておめでとうございます。今年もよろしくお願いします。
年末年始は実家のほうに帰省していました。
31日: 実家へ移動。
FOMAの/dev/ttyACM0Input/output errorでopenできないのであせる。なんか何度かぬいたりさしたりいろいろ試しているとふいに繋るようになった。条件不明。いったん繋れば安定しているっぽい。
1日: 昼ごろ起きて御節料理。そのあとまた寝て起きたら晩飯。

2日: TV見たりしながらだらだら。
3日: 高校の同窓会へ。
11:30から。すごく久しぶりで懐しい。先生があんまりかわってない。というか、当時は今の我々より若かったみたいな話でみんな驚く。生徒は全体の1/3くらいが来ていたぽい。みんないろいろ活躍してるな。一次会は15:30に終了。
17:00から二次会。19:30ごろから三次会で22:00ごろにおひらき。終電まで余裕と思っていたら、乗り換えで50分待ちで終電になってた。田舎すぎる。
4日: 実家から東京へ。昼ごろに戻ってきていたのでその後明治神宮に初詣など。

Tuesday, December 30, 2008

cdc acm(FOMA対応) on Linux

cdc acm(FOMA対応)を試してみました。 Linux 2.6.28でもcdc-acm自体はv0.26のままなのでcdc-acm-v026.zipがそのまま使えました。すばらし。 ちなみに端末は N906i です。
これで実家かえっても なんとかIP reachableにできそう。

以下、こんなかんじという記録
usb 4-1: new full speed USB device using uhci_hcd and address 7
usb 4-1: configuration #1 chosen from 1 choice
usb 4-1: New USB device found, idVendor=0409, idProduct=0234
usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 4-1: Product: FOMA N906i
usb 4-1: Manufacturer: NEC
usb 4-1: SerialNumber: nnnnnnnnnnnn
cdc_acm 4-1:1.0: CDC Header  1.10
cdc_acm 4-1:1.0: ttyACM0: USB ACM device
this device is FOMA Mobile Phone
cdc_acm 4-1:1.2: CDC Header  1.10
cdc_acm 4-1:1.4: CDC Header  1.10
usbcore: registered new interface driver cdc_acm
cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
pppconfigで適当に設定するとこんなかんじ
pppd 2.4.4 started by root, uid 0
abort on (BUSY)
abort on (NO CARRIER)
abort on (VOICE)
abort on (NO DIALTONE)
abort on (NO DIAL TONE)
abort on (NO ANSWER)
abort on (DELAYED)
send (ATZ^M)
expect (OK)
ATZ^M^M
OK
 -- got it
send (ATDT0570-00-1616^M)
expect (CONNECT)
^M
ATDT0570-00-1616^M^M
CONNECT
 -- got it
send (\d)
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyACM0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9c9d1e90> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <mru 1524> <auth chap MD5> <endpoint [MAC:00:c0:7b:8c:bb:a1]>]
sent [LCP ConfNak id=0x1 <auth pap>]
rcvd [LCP ConfRej id=0x1 <pcomp> <accomp>]
sent [LCP ConfReq id=0x2 <asyncmap 0x0> <magic 0x9c9d1e90>]
rcvd [LCP ConfReq id=0x2 <mru 1524> <auth pap> <endpoint [MAC:00:c0:7b:8c:bb:a1]>]
sent [LCP ConfAck id=0x2 <mru 1524> <auth pap> <endpoint [MAC:00:c0:7b:8c:bb:a1]>]
rcvd [LCP ConfAck id=0x2 <asyncmap 0x0> <magic 0x9c9d1e90>]
sent [LCP EchoReq id=0x0 magic=0x9c9d1e90]
sent [PAP AuthReq id=0x1 user="xxxx" password=<hidden>]
rcvd [LCP EchoRep id=0x0 magic=0x0]
rcvd [PAP AuthAck id=0x1 ""]
PAP authentication succeeded
PPP BSD Compression module registered
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 210.132.186.1>]
sent [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 210.132.186.1>]
PPP Deflate Compression module registered
rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfNak id=0x1 <addr 210.132.186.12> <ms-dns1 202.238.95.24> <ms-dns3 202.238.95.26>]
sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 210.132.186.12> <ms-dns1 202.238.95.24> <ms-dns3 202.238.95.26>]
rcvd [IPCP ConfAck id=0x2 <compress VJ 0f 01> <addr 210.132.186.12> <ms-dns1 202.238.95.24> <ms-dns3 202.238.95.26>]
local  IP address 210.132.186.12
remote IP address 210.132.186.1
primary   DNS address 202.238.95.24
secondary DNS address 202.238.95.26
Script /etc/ppp/ip-up started (pid 5903)
Script /etc/ppp/ip-up finished (pid 5903), status = 0x0

追記 (2009/01/01 22:59): なんか openする時に Input/output error (EIO)になることがおおいな。さしなおして何度もやりなおしているとうまくいくことがあるが…

Linux 2.6.28 on VAIO Type Z

Linux 2.6.28がでていたのでupgradeしてみた。
まだdebパッケージがないので自分でビルド
改善したと気付いたところ

Android Dream Phone で Debian

Android Dream Phone を入手したのでいろいろいじってみた。以下その記録。基本的にAndroid Dev Phone 1と同じだと思う。

wifiでつかえるので、EM OneにWMWifiRouterとかいれておけばそれ経由でどこでも使えるか?と思ったら、現状ではAndroidがAd-hoc使えないみたいでだめげ。PHS300を買うべきなのか?

SDKをダウンロード&インストール。Eclispseに関しては後回し。VAIO Type Zは x86_64 (amd64)なので、Installation Notesに書いてあるとおりia32-libsなどをいれておく必要がある。android-sdk-linux_x86-1.0_r2/toolsにPATHを通したりするsetup scriptを書いた。

とりあえずshellだろうと思い、adb shellしてみるが動かない。adb devicesでdeviceがみつかってない。Developing on Device hardwareに書いてあるようにudev ruleを置いてみるがだめっぽい。いろいろ試した結果、50-android.rulesではなく、z60_android.rulesのようにz60でやらないといけないようだ。これで次のように見えるようになった。
% adb devices
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached 
HTnnnNnnnnnn    device

% adb shell
$
adb pushadb pullでおくりこんだり、とりだしたりできる。

/system/bin/shはとりあえずつかえるけど、微妙にたりないかんじなのでbusyboxをいれた。armelのbusybox-staticパッケージをつかうのが楽。microsdは/sdcardにmountされているけど、ここはVFATでnodev,noexec,fmask=0711などでmountされているので、ここに置いてもbinaryは実行できない。とりあえず/data/binあたりをつくってそこにおくりこむ。
$ mkdir /data/bin
$ exit
% dpkg -x busybox-static_1.10.2-2_armel.deb .
% adb push bin/busybox /data/bin/busybox
% adb shell
$ cd /data/bin
$ ln -s busybox ls
あとは必要なコマンド名でsymlinkをはっていけばよい。busyboxが提供しているコマンドはbusyboxを実行してみればわかる。で、そこにPATHをとおせばOK。

Android MarketにTerminal Emulatorってのがあるので、それをインストールしておけば実機上でもshellにさわれる。

せっかくなのでDebianをいれてみる。課題としてはmicrosdはFAT(symlink、hardlinkできないのでdebian chrootにできない)、defaultのkernelがsupportしているfsはFATとYAFFS(YAFFSは amd64とかには標準ではなさげ)。
とはいっても基本はLinuxなので、ext2.koあたりを作ってinsmodしてやればよい。microsdもpartitionをきってFAT partitionとext2 partitionをつくってやればOK。VAIO Type ZのSD slotにいれてDebian上でcfdisk /dev/mmcblk0とかしてpartitionをきればよい。udevがdeviceファイルをつくるようにいったんぬいて挿しなおし、mkfs/dev/mmcblk0p2をformat。Android上では最初のprimary partition(Androidで/dev/block/mmcblk0p1、VAIO Type Z Debianでは/dev/mmcblk0p1)が/sdcardに自動的にmountされる。2つめのpartitionを手でmountしてやればよい。
Debianのchroot環境は debootstrapでつくる。まずDebian上でfirst stage。
# mount -t ext2 /dev/mmcblk0p2 /mnt
# cd /mnt
# debootstrap --arch armel --foreign --variant=minbase \
     sid . http://ftp.jp.debian.org/debian/
これをAndroidにさして続きを。
$ su
# insmod ext2.ko
# mount -t ext2 /dev/block/mmcblk0p2 /data/sdcard1
# cd /data/sdcard1
# mv dev dev.orig
# mkdir dev
# mount --bind /dev dev
# chroot . bin/bash
# PATH=/usr/bin:/bin:/usr/sbin:/sbin:$PATH
# mount -t proc proc /proc
# ./debootstrap/debootstrap --second-stage
...
#
こんなかんじでだいたいOK。/etc/apt/sources.listを設定すればapt-getもつかえる。

Sunday, December 21, 2008

VAIO Type Z (VGN-Z90S)

自宅のメインノートが長らくLet's note CF-Y2だったのだが、なんか熱がでてthrottleしまくりで遅くて使いものにならなくなってきたので、新しいノートを購入。
大きさ、重さ、画面の広さなどからVAIO Type Zにした。オーナーメードで次のような構成に。
  • VGN-Z90S - Windows Vista Home premium - どうせDebianにしちゃうので無しを選択できるようにしてほしい
  • CPU: Core 2 Duo P9500
  • memory: 4G
  • disk: SSD 64G (128G*2 RAIDも64G*2 RAIDも、もうなかった)
  • display: 1600x900
  • DVD super multi drive
  • Web camera
  • 日本語KB - US配列で使う
  • 大容量バッテリ
というかんじで 12月14日に新宿ヨドバシで購入で 273,800円。ヨドバシもオーナーメード店だからというのでいったのだが、そこで単にそこで申し込めるというだけでwebから購入するのと対してかわらないかんじだった。
納期は12月下旬なので、最悪12月31日 とか言われたけど、12月19日の朝に配送されてきた。 しかし、「ご注文いただいた商品: ワイヤレスLAN IEEE 802.11abgn /Z 他」とかになっているのは いかがなものか。
早速 Debianをインストール。
まず、jigdoで testing snapshotなisoimageを作成。
% jigdo-lite http://hanzubon.jp/debian-cd/daily/unstable/amd64/jigdo-cd/debian-testing-amd64-businesscard.jigdo
Debian mirrorをきいてくるので適当なmirror siteを指定すると、ダウンロードしてきてisoimageを作成してくれる。
debian-testing-amd64-businesscard.isoというファイルが作られるのでこれをCD-Rに書きこみ。
%  sudo nice --18 wodim -eject -v speed=2 dev=/dev/sr0 \
  -data -pad debian-testing-amd64-businesscard.iso
で、CD-RをVAIOのDVD driveにつっこんで起動。
せっかくなので grpahical installerをためしてみた。

とくにトラブルことなくインストール終了。 ちょっとはまったところは
  • Xが1024x768しかでなかった。よく見るとvesaドライバーになっているのが原因だった。intelドライバーとかにすればOK
  • flashはdeb http://www.debian-multimedia.org/ experimental mainからapt-get install flashplayer-mozillaしろ とのこと