Wednesday, April 14, 2010

WebKit Contributors Meeting

AppleWebKit Contributors Meetingを開催したので、Chromium開発者として参加してきた。場所はCupertinoのApple本社。朝食、昼食がでた。
ちゃんとしたConferenceというよりもかなりad-hocで、当日になってどういうトピックでディスカッションするかを決めて適当に時間・部屋割りするという感じだった。
でたのは
  • Web Inspector
  • better code review tool
  • WebKit2
  • experimental features
  • Loader code
  • releasing WebKit
あたり。あとはWebSocketのプロトコルが新しくなってMD5が必要になったりしているのをどうしようとかいうのを相談したりした。

Monday, March 29, 2010

Sony Xperia X10

Sony Xperia X10をもらった。白と黒があったけど黒のほう。
なんか定額プランもあるぽいので、こちらにDoCoMo SIMをさして使うようにした。i-mode使えないのはいいんだけど、i-modeメールがみられないのがまずいかなあ。とりあえずimoniをいれてみることにした。
Webブラウザがだいぶまともだし、MapsやGmail, Chatとかもできるのがいいね。

Friday, March 12, 2010

DevFest 2010 Japan

DevFest 2010 Japanで「プログラミング言語 Go」というセッションでしゃべってきました。DevFestは、Developer Dayよりもこぶりの開発者向けイベントです。
Go言語が発表されて、Googleから日本語で発表するのはこれが最初だったと思います。まだ使ったことがある人もあまりいないだろうからどういう言語なのかの説明をする必要があると思いました。しかしGetting Startedとか言語仕様とかを説明しても、ざっとやったのだと退屈だろうし、詳細にやるには時間が足りないし、どうしたものかとしばらく考えていました。
新しい言語を使ってみる時には、なにか実際にプログラムを組んでみるのが一番わかりやすいと思ったものの、プログラムの題材でちょうどいいのがないかなあとあれこれ考えているうちに、ふとdevquizの問題をつかえばいいと思いつきました。この問題なら参加者はどういう問題なのかすでに熟知しているわけで、プログラムしようとしているものの仕様とかをいろいろ説明する手間もはぶけます。
実際にコードを書いて、ポイントとなる部分をぬきだして資料をつくってみたところかなり多くなってしまいました。どこを削ろうか当日まで考えていたのですが、当日関係者室で待機していると前のセッションとかで「内容がぬるい」的なことを参加者の人がtwitterしていたりしていたので、じゃあ密度濃く全部やるかと削除するのをやめました。かなり早口ぎみに全部やったので、ついていくのは大変だったかも…。
office hourにも多くの人にきていただきありがとうございました。メインの開発者ではないのでちゃんと答えらないのがあったりしたかと思います。すいません。

当日の プレゼン資料ビデオも公開されています。

Sunday, February 21, 2010

コミュニティLT in Developers Summit 2010

Developers Summit 2010にいってきました。
18-7-E の デブサミオフィシャルコミュニティから選出のLT大会で、Goコミュニティとして発表です。webとかのタイムテーブルとかには載ってなくて、サプライズ企画だったようです。
Goコミュニティとはいっても特にユーザー会とかのコミュニティとかいうわけではなく、Go contributorのひとりとしてです。聞いたところによると今回がGo関係者の日本での最初の発表だとか。会場でもまだ使ったことのある人は少なかった様子。
LTで5分なので言語自体についてはざっと紹介するかんじで、むしろ情熱プログラマー ソフトウェア開発者の幸せな生き方から引用して、開発コミュニティに参加するメリットとDevFest 2010 Japanで Go言語のセッションとOffice Hourをやりますという発表でした。DevFest 2010 Japanは参加するために必要なクイズがおもしろいらしいので、やってみてください。

Monday, January 18, 2010

関西で技術講演会

1月18日は 日帰りで、奈良先端科学技術大学と京都大学で技術講演会をしてきました。
内容は「Googleを支える大規模分散システム」というタイトルで、大規模な分散システムの特徴や、その設計・実装の仕方の説明から、Googleでのシステムインフラ(GFS, Protocol Buffers, MapReduce, Bigtableなど)のoverviewと次世代インフラの目標とChallengeについて簡単に説明しました。
2011年度新卒採用がそろそろなので、興味のある人は応募してみてください。エンジニアのエントリーは2/14締切です。(スケジュール)

技術講演会が終った後は、KMCの例会に顔をだして、久し振りに中央食堂でご飯たべてきました。

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のほうはいくつかのチームにわかれて作業していました。けっこうできていてよかったです。