入門gitを入手しました。Pragmatic Version Control Using Git の日本語訳です。
git は cvs, svn などと若干概念が違うところがあるので難しいと感じるところもあるが、この本でだいぶ使い方がわかるようになると思います。手元でpatchをこねていく時にもバージョン管理できるので、使いこなせばcvs, svnとかよりも便利だと感じるところも多いですね。git-svnなどを使えば、mainのrepositoryはsvnのままで手元ではgitを使うとかもできるので、プロジェクトではsvnをつかいつつ自分だけgitを使うとかもできるので移行していきやすくなってますね。
advancedな内容はあまり書かれてませんが、入門として読むのには最適ではないかと。
Thursday, August 13, 2009
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 とかしてちょっと待つというのがよかったようなかんじ。
デモ用にノートもっていったけど、カメラもっていくのを忘れてしまったので写真はなし。
デモ・ライトニングトークで、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用のをリンクしようとしてできないというエラーになる。
必要なパッケージをインストールしたら depot_toolsをcheckout
depot_toolsを入手したらgclientでrepositoryからチェックアウト
hammerでビルド
調べた結果、これが原因
結局次のような *.so をLD_PRELOADしてやればよいかんじに
これで一部のfontが変なのはなおるが、resolveできなくてweb browseできない問題が。 これは/etc/nsswitch.confの次の設定のせいっぽい
ディスカッションでは 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をみてください。
そういえば 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のほうはいくつかのチームにわかれて作業していました。けっこうできていてよかったです。
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
今年は、午後の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東京オフィスにて開催しますので時間のある人は申しこんでください。
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 *)としてしか見せていない場合です。例えばこんなかんじ。
単純な場合なら examine でダンプしちゃうのが簡単ですね。
もし
デバッグ情報つきライブラリがつくれない/入手できない、でもopaque typeの中をみたいという場合は、型情報を含むオブジェクトをつくってロードしてみるとよいかと
static linkされている場合だとどうでしょう。
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が近いので電車でいくのでもいいのかも。
大きな地図で見る
今晩は hariさん、jinmeiさんと一緒に Little Sheep Hot Potで食事をしました。なんか6人以上でないと予約できないらしく、混んでいて30分ほど(?)待ちました。モンゴリアン火鍋とかで、スパイスのきいたスープで羊肉などをしゃぶしゃぶ風に食べるかんじです。スープベースを人数分たのんで、いれる具をいくつか頼む形式でした。スープがけっこうおいしかったです。大勢でいくと予約もできるし、いろいろな具をためせるのでよさそうです。
San Mateoは混んでいて駐車場所をみつけるのが大変でした。San Mateo Stationが近いので電車でいくのでもいいのかも。
大きな地図で見る
Wednesday, March 4, 2009
ネット業界滋賀県人会
社内に滋賀県にゆかりのある者からなる「近江っ子クラブ」があります。私も忍者市になりそこねた甲賀出身なので、そのメンバーです。
ちょうどMountain Viewにいっている時に新年会があったのですが、そこでネット業界関係者な滋賀県人があつまる会があるという話がでてました。
で、「ネット業界滋賀県人会2009 Spring」が3月4日にあるというのでいってきました。場所は恵比寿の個室ダイニング 囲。
大きな地図で見る
だいたい滋賀の琵琶湖沿い南部から東部の人がおおかったみたい。琵琶湖線ぞい。実家が数十mくらいしか離れてない人とかもいたみたい。甲賀の人はいなかったような? 市町村合併でいろいろかわったけど今はこうなっているのか
しかし、名刺もカメラも忘れてしまっていたのが悔やまれるなー。
ちょうどMountain Viewにいっている時に新年会があったのですが、そこでネット業界関係者な滋賀県人があつまる会があるという話がでてました。
で、「ネット業界滋賀県人会2009 Spring」が3月4日にあるというのでいってきました。場所は恵比寿の個室ダイニング 囲。
大きな地図で見る
だいたい滋賀の琵琶湖沿い南部から東部の人がおおかったみたい。琵琶湖線ぞい。実家が数十mくらいしか離れてない人とかもいたみたい。甲賀の人はいなかったような? 市町村合併でいろいろかわったけど今はこうなっているのか
しかし、名刺もカメラも忘れてしまっていたのが悔やまれるなー。
Subscribe to:
Posts (Atom)