Thursday, October 8, 2009

Chrome 1周年記念パーティ

Chrome 1周年記念パーティに参加してきました。

Google Chromeがリリースされてもう一年になりますねー。
日本でもChromiumの開発にかかわってるチームがあります。自分がかかわるようになったのはこの春からです。オープンソースなので何やってるかは調べればわかると思いますが、大きなところだとLinux版のSSLまわり(EV署名検証など)とかをやってました。最近 WebKit committerになったばかり。今は WebSocketの実装あたりをやってます。
そういえば最近またSoftware Engineer募集中なので興味のあるひとは応募してみてください。SWEの面接は日本の他の会社の面接とだいぶ違っているので、うけてみるとおもしろいと思います。採用面接ゲリラガイドぽいかんじといえばいいでしょうか。ホワイトボードにプログラムをかいてもらったりします。SWE以外にもEngineering Managerとかも募集中です。
営業よりのTechnical Account Managerも大募集中らしいですよ!

アーティストテーマも最近リリースされたので、そのあたりの紹介もありました。
Chromeマカロンのほうは食べられたけど、Chromeケーキは食べ(られ?)なかったみたいです。

Thursday, August 13, 2009

入門git

入門gitを入手しました。Pragmatic Version Control Using Git の日本語訳です。
git は cvs, svn などと若干概念が違うところがあるので難しいと感じるところもあるが、この本でだいぶ使い方がわかるようになると思います。手元でpatchをこねていく時にもバージョン管理できるので、使いこなせばcvs, svnとかよりも便利だと感じるところも多いですね。git-svnなどを使えば、mainのrepositoryはsvnのままで手元ではgitを使うとかもできるので、プロジェクトではsvnをつかいつつ自分だけgitを使うとかもできるので移行していきやすくなってますね。
advancedな内容はあまり書かれてませんが、入門として読むのには最適ではないかと。

Wednesday, August 12, 2009

第一回html5-developers-jp オフ会

8/12の夜は、ラボエムクアリタ渋谷でのhtml5-developers-jpオフ会に参加してきました。 会場は結婚式二次会とかにもつかうようなところで、geekな集りはあまりそぐわないかんじがしたんですがよいんでしょうか…
デモ・ライトニングトークで、Web Socketsについてちょっと解説とデモをしました。デモするためにVaio ZのDebian/sidに WebKit + Web Sockets patchをあてたGtkLauncherを作り、Web Socketsをつかった簡単なチャットプログラムを動かしてみました。
外部ディスプレイにすぐにだせなくてあせりました。システム|設定|ディスプレイ ではうまくいかなくて、結局 xrandr --auto とかしてちょっと待つというのがよかったようなかんじ。
デモ用にノートもっていったけど、カメラもっていくのを忘れてしまったので写真はなし。

Saturday, June 13, 2009

FSIJ総会

今日は秋葉原ダイビルにてFSIJ理事会および総会。
そういえば snapshot.debian.net は fsijでのdisk 4.3Tがあふれていて、2009年4月あたりのぶんをとりそこねていた。5月最初に気付いて手元では残しているが、次をなんとかしないといけないかんじ。fsijには24台のディスクがはいるやつがあるけどディスクそのものをどう調達しようかなあというところで検討中。全部そろってないとだめで、全部買うと50万くらい? 寄付を募ってみるかとかいう話にもなりそう。などなど

その後の月例会では、chromium/linuxの話をしてみた。普段は Ubuntu/Hardy相当の会社のマシンで開発してたりするけど、前日あたりから手元のvaio Z(Debian/sid)でも開発環境をととのえてみたらいろいろはまった。以下そのまとめ。

とりあえずLinux用のBuild Instructionに従えばよい

vaio zはamd64 archなので64bit用のセットアップが必要(V8あたりが64bitサポートがないため)。
ただしDebian/sidだとbuild/install-build-deps.shはそのままうごかない。まずUbuntuチェックをはずす。そしてlibdirectfb-1.2-0をlib_listに加える必要がある。いくつか/usr/lib32で*.soがないので適当にシンボリックリンクをはる必要もある。はらないとgcc -m32でリンクする時にライブラリみつけるのに失敗して64bit用のをリンクしようとしてできないというエラーになる。
cd /usr/lib32
ln -s libpangoft2-1.0.so.0 libpangoft2-1.0.so
ln -s libgthread-2.0.so.0 libgthread-2.0.so
ln -s libgio-2.0.so.0 libgito-2.0
ln -s libgconf-2.so.4 libgconf-2.so
ln -s libdirectfb-1.2.so.0 libdirectfb-1.2.so
まあこれは install-build-deps.shのバグなのかも?

必要なパッケージをインストールしたら depot_toolsをcheckout
$ svn co \
 http://src.chromium.org/svn/trunk/tools/depot_tools
そしてチェックアウトされたdepot_toolsにPATHを通す。ここに含まれるgclientやgclといったツールを使って開発する。
depot_toolsを入手したらgclientでrepositoryからチェックアウト
$ gclient config \
 http://src.chromium.org/svn/trunk/src 
$ gclient sync
これでsrcディレクトリ以下にチェックアウトされる

hammerでビルド
$ cd src/build
$ hammer app
../sconbuild/Debug/chrome が実行ファイル。しかしそのままだと一部フォントのレンダリングが変…
調べた結果、これが原因
Pango-WARNING **: \
 /usr/lib/pango/1.6.0/modules/pango-basic-fc.so: \
 wrong ELF class: ELFCLASS64
これは install-build-deps.sh でやってるhackが原因というか。このscript、i386で必要なdebをapt-getして、/lib、/usr/lib 以下のをそれぞれ /lib32、/usr/lib32 になるようにパッケージしなおしてインストールするということをしてます。だいたい問題ないけどmoduleのロードパスなどはそのまま/usr/lib以下だったりして、そっちは64bit *.soなのでmodule loadに失敗しているということに。
結局次のような *.so をLD_PRELOADしてやればよいかんじに
/**
 * Copyright (c) 2009 Fumitoshi Ukai
 * All rights reserved.
 *
 * Fix module load path from /lib,/usr/lib to /lib32,/usr/lib32
 *
 * $ gcc -m32 -fPIC -o module_fix.o -c module_fix.c
 * $ gcc -m32 -shared -o module_fix.so module_fix.o -ldl
 * $ LD_PRELOAD=`pwd`/module_fix.so /path/to/chromium/sconsbuild/Debug/chrome
 */
#define _GNU_SOURCE 1
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *dlopen(const char *filename, int flag) {
  void *(*orig_func)(const char *, int) =
    dlsym(RTLD_NEXT, "dlopen");
  char *new_filename = NULL;
  if (strncmp(filename, "/usr/lib/",
              strlen("/usr/lib/")) == 0) {
    int len = strlen(filename) + 3;
    new_filename = malloc(len);
    snprintf(new_filename, len, "/usr/lib32/%s",
      filename + strlen("/usr/lib/"));
  } else if (strncmp(filename, "/lib/",
             strlen("/lib/")) == 0) {
    int len = strlen(filename) + 3;
    new_filename = malloc(len);
    snprintf(new_filename, len, "/lib32/%s",
      filename + strlen("/lib/"));
  }
  printf("dlopen: %s\n",
    new_filename ? new_filename : filename);
  void *p = orig_func(
    new_filename ? new_filename : filename, flag);
  if (new_filename)
    free(new_filename);
  return p;
}

これで一部のfontが変なのはなおるが、resolveできなくてweb browseできない問題が。 これは/etc/nsswitch.confの次の設定のせいっぽい
hosts: files mdns4_minimal [NOTFOUND=return] \
 dns mdns4
この設定だとgetaddrinfo(3)がEAI_NONAMEをかえすのでresolveできないという結果に。 結局mdns4あたりの設定をはずして次のようにしてやればよさげ
hosts: files dns

ディスカッションでは renderer process の sandboxはどういうのがあれば幸せになれるだろうかでもりあがった。chromiumではLinux Sandboxingあたりに情報が。ここにかいてある通り現状では linuxでは no sandboxです。(No sandbox - Where we are currently. A compromised renderer can still get at your X socket so it fails all requrements. )

現状では IMEサポートがまだなので実用的ではないです。
ただ現在鋭意開発中なので、ここに書いてあることはすぐにobsoleteになる可能性があります。詳しくはdev.chromium.orgをみてください。

Thursday, June 11, 2009

App Engine Hackathon

今日は秋葉原富士ソフトにてHachathon。去年はGoogle Developer Day内企画だったけど、それだとHackathon参加しているとセッションが聴けない、逆もしかり ということでHackathonはDeveloper Dayの後日企画として開催。
Geo、Android、Google App Engine、OpenSocialの4分野を2分野づつ二日に分けて、今日はGoogle App EngineとOpenSocialの日。
それぞれ部屋にわかれてHack。Google App Engineのほうはいくつかのチームにわかれて作業していました。けっこうできていてよかったです。

Tuesday, June 9, 2009

Google Developer Day 2009 Japan

今日はGoogle Developer Day 2009 Japan。場所は去年と同じく横浜パシフィコ。
今年は、午後のBreakout sessionの一つ「Java で動かす Google App Engine」でDataStoreをどう使えばいいかについてのtipsについての解説など。
その後Office Hours。App Engine admin consoleの開発エンジニアもきていたのでいくつか要望とかも言っておいた。後は一般開発者の質問などに答えたり。DataStoreがやはりApp EngineでのWebアプリ開発のキモなので、ちゃんと理解しておきたいところ。詳しくはApp Engineデベロッパーガイド(記事も要注目)や、Google I/Oでのセッションなどを見ておくとよいです。
App EngineのOffice Hoursのあとは Google Chrome Office Hours。
その後は、「Life of 新卒エンジニア」を聴いて、デベロッパーソーシャルトークへ。去年はロビーに人があふれて大変だったが、今年は同じ時間にWaveやAndroidのセッションがあったためかそんなに多くなかった。
今年の目玉はなんといってもAndroid開発フォンの配布とWaveの発表かと。しかし、キーノートでAndroidの説明をしたChrisとTomは途中まで英語でプレゼンして最後に日本語とか卑怯すぎるw

Friday, May 1, 2009

google summer intern

今年の夏も Googleではサマーインターンを実施します
Googleのサマーインターンは、Googleのエンジニアと一緒に開発することを経験することができます。期間は8 - 14 週間程度ですが、Googleの東京オフィスで Googleでの開発のやりかたを実際に体験してもらうことになります。プログラミングをいろいろしてみたいという学士、修士、博士課程の学生の皆様は参加してみてください。
とはいっても「インターンシップ中はどういったプロジェクトに携わることが出来るのか?」「一日の具体的なスケジュール・動き方は?」などいろいろ知っておきたいこともたくさんあると思います。そういう人のためにサマーインターンセミナー(説明会)が開催されます。インターンシップのご紹介とエンジニアとのQ&Aセッションをはじめオフィスツアー等をする予定です。5月17日(日)の午後にGoogle東京オフィスにて開催しますので時間のある人は申しこんでください

Sunday, April 26, 2009

Monday, April 20, 2009

opaque typeの表示

今朝は hariさん、jinmeiさんとWunderlich County ParkにHikingへいきました。7:15amにFirst Lutheran Churchに集合してそこから車で Wunderlich County Parkへ。雑談しつつてくてく1時間半ほど山歩き。
Menlo Parkに戻ってCafe Borroneで ブランチを食べました。そこで「opaque typeをdebuggerで見たい時ってどうするのがいいんですかね?」という話がでたので、ちょっと試してみました。
libraryなどで、内部では具体的な型が定義されているけど、使う側にはgenericなpointer(void *)としてしか見せていない場合です。例えばこんなかんじ。
# library側
% cat a.h
void* create_foo();
void set_foo(void* p, int i);
% cat liba.c
#include <stdlib.h>
#include <string.h>
#include "a.h"

struct foo {
  int i;
};

void* create_foo()
{
   void *p = malloc(sizeof(struct foo));
   memset(p, 0, sizeof(struct foo));
   return p;
}
void set_foo(void* p, int i)
{
   struct foo* fp = (struct foo*)p;
   fp->i = i;
}
% gcc -fPIC -o liba.o -c liba.c
% gcc -shared -o liba.so liba.o -lc
# libraryを使う側
% cat b.c
#include <stdlib.h>
#include "a.h"

int main(int argc, char *argv[])
{
  void* p = craete_foo();
  set_foo(p, argc);
  exit(0);
}
% gcc -g -o b.o -c b.c
% gcc -g -o b b.o -L. -la
% LD_LIBRARY_PATH=. gdb b
...
(gdb) break main
Breakpoint 1 at 0x400657: file b.c, line 6.
(gdb) run
Starting program: /tmp/g/b 

Breakpoint 1, main (argc=1, argv=0x7fffb44a6e08 "?\213J??\177") at b.c:6
6   void *p = create_foo();
(gdb) n
7         set_foo(p, argc);
(gdb) print p
$1 = (void *) 0x601010
(gdb) whatis p
type = void *
(gdb) whatis *p
type = void
(gdb) ptype p
type = void *
(gdb) ptype *p
type = void
(gdb) print *(struct foo*)p
No struct type named foo.
(gdb)
というかんじで p の中身をみることができません。defaultではset opaque-type-resolution onですが、liba.soのデバッグ情報がないのでどうしようもないのです。
単純な場合なら examine でダンプしちゃうのが簡単ですね。
(gdb) x/dw p
0x601010  0
(/dwでword(w)を10進(d)で表示)
もしliba.soのデバッグ情報つきが手にはいれば次のようにロードしてやればよいでしょう。
# デバッグ情報つき
% gcc -fPIC -g -o liba.g.o -c liba.c
% gcc -shared -g -o liba.g.so liba.g.o -lc
...
(gdb) info share
From                To                  Syms Read   Shared Object Library
0x00007f3ba9cd3a60  0x00007f3ba9ce9d44  Yes         /lib64/ld-linux-x86-64.so.2
0x00007f3ba9ad2520  0x00007f3ba9ad2648  Yes         ./liba.so
0x00007f3ba978de30  0x00007f3ba987ee88  Yes         /lib/libc.so.6
(gdb) add-symbol-file liba.g.so 0x00007f3ba9ad2520
add symbol table from file "liba.g.so" at
 .text_addr = 0x7f3ba9ad2520
(y or n) y
Reading symbols from /tmp/g/liba.g.so...done.
(gdb) print *(struct foo*)p
$2 = {i = 0}
(gdb) s
set_foo (p=0x601010, i=1) at a.c:18
18  struct foo *fp = (struct foo *)p;
(gdb) s
19  fp->i = i;
(gdb) s
20 }
(gdb) s
main (argc=1, argv=0x7fffb1ef1858 "?\033??\177") at b.c:8
8   exit(0);
(gdb) print *p
Attempt to dereference a generic pointer.
(gdb) print *(struct foo*)p
$4 = {i = 1}
このように p のさしている先を struct foo として解釈できるようになります。またstep実行もできますね。
デバッグ情報つきライブラリがつくれない/入手できない、でもopaque typeの中をみたいという場合は、型情報を含むオブジェクトをつくってロードしてみるとよいかと
% cat atype.c
struct foo {
  int i;
};
struct foo *fooptr;
% gcc -fPIC -g -o atype.o -c atype.c
% gcc -shared -g -o atype.so atype.o -lc
% LD_LIBRARY_PATH=. gdb b
...
(gdb) break main
Breakpoint 1 at 0x400657: file b.c, line 6.
(gdb) run
Starting program: /tmp/g/b 

Breakpoint 1, main (argc=1, argv=0x7fff8bd03668 "?;?\213?\177") at b.c:6
6   void *p = create_foo();
(gdb) n
7   set_foo(p, argc);
(gdb) info share
From                To                  Syms Read   Shared Object Library
0x00007fde83ae5a60  0x00007fde83afbd44  Yes         /lib64/ld-linux-x86-64.so.2
0x00007fde838e4520  0x00007fde838e4648  Yes         ./liba.so
0x00007fde8359fe30  0x00007fde83690e88  Yes         /lib/libc.so.6
(gdb) add-symbol-file atype.so 0x00007fde838e4520
add symbol table from file "atype.so" at
 .text_addr = 0x7fde838e4520
(y or n) y
Reading symbols from /tmp/g/atype.so...done.
(gdb) print *(struct foo*)p
$1 = {i = 0}
(gdb) s
8   exit(0);
(gdb) print *(struct foo*)p
$2 = {i = 1}
(gdb)
この場合はstep実行はできせんがstruct fooとして見ることはできるようになりました。
static linkされている場合だとどうでしょう。
# static library
% ar ruv liba.a liba.o
ar: creating liba.a
a - liba.o
% gcc -g -o b.static b.o liba.a
% gdb b.static
...
(gdb) break main
Breakpoint 1 at 0x400547: file b.c, line 6.
(gdb) run
Starting program: /tmp/g/b.static

Breakpoint 1, main (argc=1, argv=0x7fffedb324a8 "?+???\177") at b.c:6
6   void *p = create_foo();
(gdb) n
7   set_foo(p, argc);
(gdb) print p
$1 = (void *) 0x601010
(gdb) whatis p
type = void *
(gdb) whatis *p
type = void
(gdb) ptype p
type = void *
(gdb) ptype *p
type = void
(gdb) print *(struct foo*)p
No struct type named foo.
(gdb) info share
From                To                  Syms Read   Shared Object Library
0x00007f49e5914a60  0x00007f49e592ad44  Yes         /lib64/ld-linux-x86-64.so.2
0x00007f49e55cfe30  0x00007f49e56c0e88  Yes         /lib/libc.so.6
(gdb) add-symbol-file atype.so 0x800000000000
add symbol table from file "atype.so" at
 .text_addr = 0x800000000000
(y or n) y
Reading symbols from /tmp/g/atype.so...done.
(gdb) print *(struct foo*)p
$2 = {i = 0}
(gdb) n
8   exit(0);
(gdb) print *(struct foo*)p
$3 = {i = 1}

というかんじで適当なアドレスにadd-symbol-fileで型情報付きオブジェクトをロードしてやればよさそうです。

Sunday, April 19, 2009

Little Sheep Hot Pot

4/13からまたMountain Viewに来ています。
今晩は hariさん、jinmeiさんと一緒に Little Sheep Hot Potで食事をしました。なんか6人以上でないと予約できないらしく、混んでいて30分ほど(?)待ちました。モンゴリアン火鍋とかで、スパイスのきいたスープで羊肉などをしゃぶしゃぶ風に食べるかんじです。スープベースを人数分たのんで、いれる具をいくつか頼む形式でした。スープがけっこうおいしかったです。大勢でいくと予約もできるし、いろいろな具をためせるのでよさそうです。
San Mateoは混んでいて駐車場所をみつけるのが大変でした。San Mateo Stationが近いので電車でいくのでもいいのかも。

大きな地図で見る

Wednesday, March 4, 2009

ネット業界滋賀県人会

社内に滋賀県にゆかりのある者からなる「近江っ子クラブ」があります。私も忍者市になりそこねた甲賀出身なので、そのメンバーです。
ちょうどMountain Viewにいっている時に新年会があったのですが、そこでネット業界関係者な滋賀県人があつまる会があるという話がでてました。
で、「ネット業界滋賀県人会2009 Spring」が3月4日にあるというのでいってきました。場所は恵比寿の個室ダイニング 囲。
大きな地図で見る
だいたい滋賀の琵琶湖沿い南部から東部の人がおおかったみたい。琵琶湖線ぞい。実家が数十mくらいしか離れてない人とかもいたみたい。甲賀の人はいなかったような? 市町村合併でいろいろかわったけど今はこうなっているのか
しかし、名刺もカメラも忘れてしまっていたのが悔やまれるなー。

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日: 実家から東京へ。昼ごろに戻ってきていたのでその後明治神宮に初詣など。