%!zt! <diary> http://znz.s1.xrea.com/t/ Kazuhiro NISHIYAMA a.k.a. ZnZ Copyright 2012 Kazuhiro NISHIYAMA a.k.a. ZnZ, copyright of comments by respective authors http://znz.s1.xrea.com/t/?date=20120929#p01 2012-10-07T17:03:52+09:00 リーダブルコード読書会 #1 Kazuhiro NISHIYAMA a.k.a. ZnZ リーダブルコード読書会 #1 に参加したときのメモです。 参加者 (敬称略): cuzic, いっぺー, kmdsbng, nayutaya (yuya), znz, muryoimpl 2章まで 14:00 まで p.28 まで (p.24 話にはださなかったけど Vi ではなく Vim のみの機能に見える) p.25 定数の頭に付けている k とは? 話をききながら探してみたら http://www.henshi.net/k/hiki.cgi?GoogleCppStyleGuide#l72 というのを見つけたが理由は書いていなかった。 ハンガリアン記法, WORD の話から 64ビットデータモデル の話に p.25 member_ 見分けたいか? this. を付ける話 IDE での補.. リーダブルコード読書会 #1

リーダブルコード読書会 #1 に参加したときのメモです。

参加者 (敬称略): cuzic, いっぺー, kmdsbng, nayutaya (yuya), znz, muryoimpl

2章まで

14:00 まで p.28 まで

  • (p.24 話にはださなかったけど Vi ではなく Vim のみの機能に見える)
  • p.25 定数の頭に付けている k とは?
  • ハンガリアン記法, WORD の話から 64ビットデータモデル の話に
  • p.25 member_
    • 見分けたいか?
    • this. を付ける話
      • IDE での補完候補が絞れる
    • 全部 return を付ける話 (yuya)
      • 返値を使ってほしくないときは return を書かない
    • self.writer = の self. の話
  • namespace の話
    • C++ の namespace はあまり使ったことがない話
    • rails での名前の衝突の話
      • request, response というモデル名ではまった。
    • 継承関係を考慮したインスタンス変数名の話
      • C++ の private に相当するものが ruby にはないとか
  • return の話
    • return の次の行に間違えて処理を入れてしまわないため
    • JavaScript など return 必須の言語が多いからそっちにあわせている?
  • JavaScript では $ は普通の文字 (変数名などに使える文字の意味)
    • jQuery(function($){...}) の $ の話
    • undefined が代入出来てしまう話
    • (function(){})() の返値は何?

3章,4章

  • Python はメソッド名が大文字始まりも普通なの? (詳しい人がいないので不明)
  • Ruby だと大文字で始まるメソッドは呼び出し方法に制限がある
  • C++ だと標準は全部小文字なのにユーザー定義は大文字始まりを使うことが多い
  • C++ で実体がマクロだとはまることがある話
  • C++ の template が難しい話
    • auto で型推論してくれる話
  • Java だと get は軽量なアクセサを期待する
    • Beans がそうだった。
  • C# の property が Java にも欲しい
    • 破壊的な property の get があってデバッガで見ようとしたら驚いた話 (yuya)
  • インデクサの話
    • Ruby だと Array#[]
    • C++ だと複数引数だと operator()() を使うことが多い (cuzic)
      • ファンクタ、関数オブジェクト
    • 関数が左辺値になれる
      • matrix(m,2)=... とか書ける
    • デリファレンスを繰り返す (a[m][n]...) のが遅いのが嫌なのでネストはしたくない (cuzic)
  • (14:41 p.47 Check は単語としていいの?)
  • 「{」の位置の話
    • 行頭 (yuya)
    • CRuby だと関数定義は行頭で if などは行末
  • 仮引数もすべて final (yuya)
    • すべて final の言語?
    • scala は val と var
    • 1文字しか違わない
    • 関数型言語?
    • immutable を手軽に書きたい
    • mutable だけ明示的に書きたい
  • 4.6 はオススメ
  • 4.7 のコメントは不要なのでは。 (kmdsbng)
    • 処理の粒度がそろっていないからコメントが必要になるのでは。
    • 不適切な粒度でメソッドの抽出をすると逆に読みにくくなるのでは。
    • contact_emails はメソッドの最後まで必要ないので suggested_friends を返すメソッドがあれば良いのでは (cuzic)
  • 変数の寿命は何かうまく可視化したりリファクタリングに使えないか
  • 単語の組み合わせで候補表示できないか
    • take a photo の take は使用頻度が高いので別の単語を提案するとか
      • Google の n-gram?
      • twitter で流れていたプログラマー用辞書の話
  • 手軽なメモの話
    • Google notebook?
    • evernote?
    • 自分にメールするとか
    • todo list
      • 日記の末尾に書いてある
    • iCloud のメモ、リマインダー
    • 一時的な共有はメールの草稿とか
    • push し忘れるとまずいものは svn にしている
    • 一時的なメモはホームディレクトリ直下において積極的に整理

5章,6章

  • p.68 括弧書きで「塊を関数に分割できるならそうしよう。」と書いてある。
    • 塊の粒度が難しい
  • カツカレーの話
    • ピーマンの肉詰めの話
    • 懇親会はココイチ?
  • sprk2012 で永和のコードレビューでリーダブルコードのページ番号で示されるときいた話
  • ネタ
    • 女子高生が Code Complete を読んだら
    • 日経 Linux ? 女子大生が Linux を勉強?
    • 美人 Unix コマンドとか美人単語とか
  • 良い名前が難しい
    • サンプル集があればいいのに
    • 例にあった filter とか
    • 連番になってるクラス名とかひどい
      • 昔の名残? 識別子が6文字までだった頃とか
  • 6.7 (「名前付き引数」コメント) は変数に代入して渡すのでこういうコメントはしたことがないという話
  • (p.78 話には出さなかったが、ナイーブソリューションの意味が分からなくて調べたが、やっぱり意味が分からなかった)

7章

  • (< 小なり, > 大なり)
  • p.84 数直線のように右の方が大きい方が読みやすいと思う話
    • (x > 5) && (x < 10) 派 (yuya)
    • (5 < x) && (x < 10) 派 (その他5人)
  • x を2回書かないといけないのが嫌
    • Python だと 5 < x < 10 とかける
    • Ruby だと Range (5..10) を使う
  • 数学の < > を知る前にプログラミング言語の方を知ったので (yuya)
    • != より先に <> (VB) を知った
  • p.85 ヨーダ記法
    • 良いと思うのに (cuzic)
    • __FILE__ == $0 (znz)
      • $0 == __FILE__ (yuya)
      • 気にしない派 (kmdsbng)
  • 「}」 と else の間の改行を最近は入れるようになった (cuzic)
    • コピペしやすい
    • さっき CRuby はそうだという話があった。
  • Java だと「{」を単独行にする話 (yuya)
  • IDE にあわせるので C# だとスタイルの揺れがない (IDE が Visual Studio しかないので。 Java だと複数のメジャーな IDE がある)
  • p.94 の早めに return はよくするという話
  • (Ruby で) if や case の返値を代入するのは使うか
    • 使う (cuzic, yuya)
    • 思考が止まるので、メソッドに必ず切り出す (kmdsbng)
    • インデントに悩む (のであまり使わない) (znz)
  • do-while を使うか
    • ほぼ使わない
    • p.90 の例は p.91 の1行目にあるように do-while にはバグがある (ので do-while の使用例としては適切ではない)
  • Ruby だと each 系を使うので while 自体あまり使わない
  • begin...end while(false) で goto 代わりの話
  • C言語だとマクロで do{...}while(0) を使う
  • 7.5 「アホくさ。」 = "This is nonsense." の訳
  • return 1個だけという話があるのはなぜか
    • 70s-80s に入り口と出口を1つにするというのがあった。
    • 今の関数のようなものがなくて入り口も出口もバラバラな時代があった(らしい)。 (cuzic)
    • 今は気にしなくて良いのでは。
  • (p.97 話には出さなかったけど、三項演算子 (: ?) って (? :) ?)

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20120612#p01 2012-06-13T01:52:05+09:00 Ubuntu 12.04 で mod_rpaf を使う方法 Kazuhiro NISHIYAMA a.k.a. ZnZ ubuntu (libapache2-mod-rpaf 0.6-2 で確認。) rpaf.conf の「IfModule mod_rpaf.c」を「IfModule mod_rpaf-2.0.c」か「IfModule rpaf_module」に直す。(Debian での修正の rpaf_module の方がおすすめ) 参考: https://bugs.launchpad.net/ubuntu/+source/libapache2-mod-rpaf/+bug/1002571 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=653330 Ubuntu 12.04 で mod_rpaf を使う方法

(libapache2-mod-rpaf 0.6-2 で確認。)

rpaf.conf の「<IfModule mod_rpaf.c>」を「<IfModule mod_rpaf-2.0.c>」か「<IfModule rpaf_module>」に直す。(Debian での修正の rpaf_module の方がおすすめ)

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20120528#p01 2012-05-29T01:41:13+09:00 apache2 のプロセス名が変わっていた Kazuhiro NISHIYAMA a.k.a. ZnZ 概要: Ubuntu 12.04 で apache2 のプロセス名が /usr/sbin/apach に変わっていて、原因は mod_perl で、起動方法で回避したという話。 Ubuntu 12.04 で Zabbix を使って「proc.num[apache2]」(apache2 のプロセス数) を監視してみたら、 redmine 関係のものを移行してきたところで、なぜか 0 になってしまった。 調べてみると pstree での表示や pgrep での検索対象になっている部分のプログラム名「/usr/sbin/apach」に変わっていた。それは /proc 以下だと /proc/$PID/stat で確認できる文字列らしいということまではわかった。 次に原.. apache2 のプロセス名が変わっていた

概要: Ubuntu 12.04 で apache2 のプロセス名が /usr/sbin/apach に変わっていて、原因は mod_perl で、起動方法で回避したという話。

Ubuntu 12.04 で Zabbix を使って「proc.num[apache2]」(apache2 のプロセス数) を監視してみたら、 redmine 関係のものを移行してきたところで、なぜか 0 になってしまった。

調べてみると pstree での表示や pgrep での検索対象になっている部分のプログラム名「/usr/sbin/apach」に変わっていた。それは /proc 以下だと /proc/$PID/stat で確認できる文字列らしいということまではわかった。

次に原因を絞り込むために a2dismod で順番に外して試してみると mod_perl が原因だった。

libapache2-mod-perl2-2.0.5 の src/modules/perl/mod_perl.c には

   /* We need to reset $0 to argv[0] (httpd) since perl_parse() will
    * have set it to '-e'. Being magic-aware ensures that some
    * OS-specific magic will happen (i.e. setproctitle() on *BSDs)
    */

と書いてあった。

argv0 を短い名前に設定すれば良いということで、別のプログラムの起動で runit を使っていたので、 chpst -b argv0 を使うことにした。

起動部分の実体は /usr/sbin/apache2ctl ということは調べていたので、そこに反映させるために /etc/apache2/envvars に「APACHE_HTTPD="/usr/bin/chpst -b apache2 /usr/sbin/apache2"」という設定を追加してみたところ、 /etc/init.d/apache2 の方で「/etc/init.d/apache2: 55: [: /usr/bin/chpst: unexpected operator」というエラーが出ていたので、最終的には以下のように apache2ctl のときだけ設定するようにして解決した。

# set apache2 to argv0 because mod_perl resets argv0.
# (default argv0 is /usr/sbin/apache2)
# and /etc/init.d/apache2 checks [ -x $APACHE_HTTPD ] then
# set only in apache2ctl.
case "$0" in
    *apache2ctl)
        APACHE_HTTPD="/usr/bin/chpst -b apache2 /usr/sbin/apache2"
        ;;
esac

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20120426#p02 2012-04-26T22:16:23+09:00 インストール後の設定 Kazuhiro NISHIYAMA a.k.a. ZnZ [001391]さくらのVPSで「Ubuntu」を利用していますが、回線速度が遅くアクセスに時間がかかります。 に書いてあるような問題があるので、 sudo apt-get install ethtool などで ethtool パッケージをインストールして、 /etc/network/interfaces に「offload-tso off」と書いておくと良いでしょう。 /etc/network/interfaces の設定例としては以下のようになります。 (さくらの6rd(トライアル) の設定も含んでいます。) # This file describes the network interfaces available on your system # and how to activate them. For more information.. インストール後の設定

[001391]さくらのVPSで「Ubuntu」を利用していますが、回線速度が遅くアクセスに時間がかかります。 に書いてあるような問題があるので、 sudo apt-get install ethtool などで ethtool パッケージをインストールして、 /etc/network/interfaces に「offload-tso off」と書いておくと良いでしょう。

/etc/network/interfaces の設定例としては以下のようになります。 (さくらの6rd(トライアル) の設定も含んでいます。)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
	address 49.212.131.XXX
	netmask 255.255.254.0
	network 49.212.130.0
	broadcast 49.212.131.255
	gateway 49.212.130.1
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers 210.224.163.4 210.224.163.3
	dns-search example.jp
	# ethtool
	offload-tso off

auto tun6rd
iface tun6rd inet6 v4tunnel
	address 2001:e41:31d4:83XX::1
	netmask 32
	local 49.212.131.XXX
	endpoint any
	gateway ::61.211.224.125
	ttl 64
	up ip tunnel 6rd dev tun6rd 6rd-prefix 2001:e41::/32
	up ip link set mtu 1280 dev tun6rd

この設定の意味の詳細について知りたい場合は /etc/network/if-up.d/ethtool や man interfaces を見てください。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20120426#p01 2012-04-26T22:06:17+09:00 さくらのVPSに Ubuntu 12.04 LTS をクリーンインストールする方法 Kazuhiro NISHIYAMA a.k.a. ZnZ Precise がリリースされたということで、ベータの頃に試した、さくらのVPSに Ubuntu 12.04 LTS をクリーンインストールする方法を公開しておきます。他の OS でも netboot のインストーラーを用意している OS なら、似たような感じでインストール出来ると思います。 Ubuntu の Server 版とか Debian とかをインストールしたことがある程度の知識を前提としています。 インストールは「VPSコントロールパネル」の「リモートコンソール画面」を使うことを想定しています。「VNCコンソール」を使うなら、シリアルコンソールの設定を忘れた場.. さくらのVPSに Ubuntu 12.04 LTS をクリーンインストールする方法

Precise がリリースされたということで、ベータの頃に試した、さくらのVPSに Ubuntu 12.04 LTS をクリーンインストールする方法を公開しておきます。他の OS でも netboot のインストーラーを用意している OS なら、似たような感じでインストール出来ると思います。

Ubuntu の Server 版とか Debian とかをインストールしたことがある程度の知識を前提としています。

インストールは「VPSコントロールパネル」の「リモートコンソール画面」を使うことを想定しています。「VNCコンソール」を使うなら、シリアルコンソールの設定を忘れた場合でも再インストールからやり直す必要はないかもしれません。(試していないので確認していません。)

まず初期状態の CentOS になっていると仮定します。 失敗したときは再インストールで初期化してここからやり直しです。

最初に現在のホスト名と /etc/resolv.conf で設定されている DNS サーバーの IP アドレスと /etc/sysconfig/network-scripts/ifcfg-eth0 で設定されている IP アドレスとネットマスクとデフォルトゲートウェイをメモしておきます。

次に http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/ から /boot に linux と initrd.gz をダウンロードします。

/boot/grub/grub.conf を以下の内容で置き換えます。 grub とインストーラーの linux カーネルでシリアルコンソールを使う設定が必須です。 忘れてしまって画面が見えなくなった場合は CentOS の再インストールからやり直しです。

 default=0
 timeout=5
 serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
 terminal --timeout=10 serial console
 title ubuntu-installer
 root (hd0,0)
 kernel /linux console=tty0 console=ttyS0,115200n8r
 initrd /initrd.gz

もしくは grub.conf はそのままで grub のメニューから c でコマンドラインに入って、

root (hd0,0)
kernel /linux console=tty0 console=ttyS0,115200n8r
initrd /initrd.gz
boot

で起動しても同じことです。

後は Debian-Installer というインストーラーでのインストールになります。 メモしたネットワークの情報などを使って、普通にインストールするだけです。 インストーラーに必要なカーネルイメージなどはすでにメモリ上に読み込まれているので、パーティションはばっさり消してきり直しでかまいません。 Debian-Installer では「戻る」を使うと expert モードに切り替わります。 そのままインストーラーを終了してしまうとシリアルコンソールが使えない状態なので、途中で一度以上「戻る」を使って expert モードにしておきます。 そして最後に「Finish」でインストーラーを終わる前にシェルを開きます。

インストーラーの中から開いたシェルでは /target にインストール後の / がマウントされています。 そこで /target/boot/grub/grub.cfg の linux 行のオプションに console=tty0 console=ttyS0,115200n8r を追加しておきます。 (正しい手順としては /target/etc/default/grub に追加して chroot /target /usr/sbin/update-grub ですが試していません。)

grub でシリアルコンソールを使う設定が出来たら、シェルを抜けてインストーラーの Finish を選んで再起動します。

再起動してシリアルコンソールの設定に失敗して見えなくなってしまったら、 CentOS の再インストールからやり直しです。 失敗しても grub のコマンドラインに入れたなら、再起動せずにそこでシリアルコンソールを使う設定で起動するという手もあります。

再起動して無事起動出来たら sudoedit /etc/default/grub で GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8r" という設定にして、 sudo update-grub で反映させます。 そして再起動して確認しておきます。

問題なくシリアルコンソールが繋がっていれば後は普通に Linux として使えます。 お疲れ様でした。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20111022#p01 2011-10-29T21:59:32+09:00 nadoka を github に移行 Kazuhiro NISHIYAMA a.k.a. ZnZ nadoka の開発用レポジトリを rubyforge の svn から github の organization に移行しました。 まず organization account 用のメールアドレスを用意してから、 https://github.com/blog/674-introducing-organizations の下の方の「Create a new organization now!」から作成しました。 https://github.com/organizations/new で Organization Name は nadoka で Organization Email に先程作成しておいたメールアドレスを入れて Choose the organization’s plan は Open Source ($0/month) にしました。 次に svn から git への変換を.. nadoka を github に移行

nadoka の開発用レポジトリを rubyforge の svn から github の organization に移行しました。

まず organization account 用のメールアドレスを用意してから、 https://github.com/blog/674-introducing-organizations の下の方の「Create a new organization now!」から作成しました。

https://github.com/organizations/new で Organization Name は nadoka で Organization Email に先程作成しておいたメールアドレスを入れて Choose the organization’s plan は Open Source ($0/month) にしました。

次に svn から git への変換をしました。 http://progit.org/book/ja/ch8-2.html を参考にしました。

すでに git-svn を使っていたので、コミットしたメンバーを調べてみると 3 名でした。

% git shortlog -sn
   163  ko1
    76  znz
     3  naruse
     1  (no author)

次に試行錯誤しやすいようにローカルに svnsync でミラーしました。 以下のシェルスクリプトを2回実行してミラーしました。

% cat svnsync-nadoka-repos-mirror.sh
#!/bin/sh
set -ex
cd $(dirname $0)
DIR=$(pwd)
REPODIR=$DIR/nadoka-repos-mirror
if [ -d "$REPODIR" ]; then
    svnsync synchronize "file://$REPODIR"
else
    svnadmin create "$REPODIR"
    echo '#!/bin/sh' >"$REPODIR/hooks/pre-revprop-change"
    echo 'exit 0' >>"$REPODIR/hooks/pre-revprop-change"
    chmod +x "$REPODIR/hooks/pre-revprop-change"
    svnsync init "file://$REPODIR" svn+ssh://rubyforge.org/var/svn/nadoka
fi

最初に no author は放置して変換できないか試してみました。

% cat nadoka.svn.authors
ko1 = ko1 <ko1@atdot.net>
znz = Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
naruse = NARUSE, Yui <naruse@airemix.jp>
% git svn --authors-file=nadoka.svn.authors clone file://$REPODIR nadoka-git-svn

「Author: (no author) not defined in nadoka.svn.authors file」で止まってしまいました。 no author はコミットされた時期から考えて ko1 に割り当てれば良いとわかったので、そうしました。 「-s」も忘れていたので付け足しました。 Pro Git を参考にして「--no-metadata」も付け足して、変換後のタグやブランチの移動などもしました。

% cat nadoka.svn.authors
ko1 = ko1 <ko1@atdot.net>
znz = Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
naruse = NARUSE, Yui <naruse@airemix.jp>
(no author) = ko1 <ko1@atdot.net>
% git svn clone --authors-file=nadoka.svn.authors --no-metadata -s file://$REPODIR nadoka-git-svn
% cd nadoka-git-svn
% cp -vRf .git/refs/remotes/tags/* .git/refs/tags/
%  rm -Rf .git/refs/remotes/tags
%  cp -vRf .git/refs/remotes/* .git/refs/heads/
%  rm -Rf .git/refs/remotes

この状態で git log や git tag などを見て問題がなさそうなのを確認しました。

次に github のレポジトリを作成しました。 https://github.com/organizations/nadoka/repositories/new で Project Name は nadoka にして Description と Homepage URL は rubyforge を参考にして設定しました。

リモートレポジトリができたところで最初の push をしました。

  • git remote add origin git@github.com:nadoka/nadoka.git
  • git push origin --all

master ブランチと同じ内容の trunk ブランチが出来てしまっていましたが、 git では不要と考えて master と同じなのを確認して削除しました。

  • git diff master trunk
  • git push origin :trunk

push が出来るメンバーを設定するために Developers team を作成して member と repo を追加しました。

2011-10-29 追記: タグが push できていなかったので「git push --tags」もしました。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110914#p01 2011-09-15T00:59:54+09:00 <こういうタイトルの書き方をすると Google Reader では読めない?> Kazuhiro NISHIYAMA a.k.a. ZnZ 日記のタイトルにscriptalert(document.cookie)/scriptが含まれると? という話ですが、どっちにしても元でエスケープしていたものがエスケープ解除されているのはバグと言える気がします。 追記: Google Reader で確認したら読めました。 <こういうタイトルの書き方をすると Google Reader では読めない?>

日記のタイトルに<script>alert(document.cookie)</script>が含まれると? という話ですが、どっちにしても元でエスケープしていたものがエスケープ解除されているのはバグと言える気がします。

追記: Google Reader で確認したら読めました。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110825#p01 2011-08-29T17:22:59+09:00 w3ml を別サーバに移行した Kazuhiro NISHIYAMA a.k.a. ZnZ 32 ビットの Debian lenny の環境から 64 ビットの Debian squeeze の環境への移行した。 事前に調べた感じでは gdbm ファイルの互換性がないらしく、そのままコピーではダメそうだったので、一度 raw.gdbm の中身をファイルに出力して、それを bin/entry --ml=mlname で取り込み直すという方法で移行することにした。 ファイルにダンプするのは簡単に書いた以下のスクリプトを使った。 最初は exit のところを有効にして 1 ファイルでちゃんと出力されるかを確認してから全体を出力した。 % cat w3ml-dump-raw.rb require 'gdbm' GDBM.open(.. w3ml を別サーバに移行した

32 ビットの Debian lenny の環境から 64 ビットの Debian squeeze の環境への移行した。

事前に調べた感じでは gdbm ファイルの互換性がないらしく、そのままコピーではダメそうだったので、一度 raw.gdbm の中身をファイルに出力して、それを bin/entry --ml=mlname で取り込み直すという方法で移行することにした。

ファイルにダンプするのは簡単に書いた以下のスクリプトを使った。 最初は exit のところを有効にして 1 ファイルでちゃんと出力されるかを確認してから全体を出力した。

% cat w3ml-dump-raw.rb
require 'gdbm'
GDBM.open('raw.gdbm', 0644, GDBM::READER) do |r_dbm|
  r_dbm.each_pair do |key, value|
    filename = "%05d.eml" % key
    open(filename, "wb") do |f|
      f.write Marshal.load(value)
    end
    #exit
  end
end

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110820#p01 2011-08-27T16:59:57+09:00 LL Planets Kazuhiro NISHIYAMA a.k.a. ZnZ 今回は事前に gihyo.jp の連載 の連載を見たり、LL Blog をチェックしていたので、チケットを忘れていないか何度もしっかりチェックしたり、会場ではテザリングは自重したりした。 早めに会場に到着したので、少し待っていたら10時になって入場できた。 今回の再入場の目印は節電などの影響を考慮して、うちわということだったが、ちょうど数日前の雨以降気温が下がっていて、あまり必要ではなくなっていたので、微妙な感じになってしまっていた。 メタプログラミングの話は、各言語によってメタプログラミングと言える部分が違っていて、.. LL Planets

今回は事前に gihyo.jp の連載 の連載を見たり、LL Blog をチェックしていたので、チケットを忘れていないか何度もしっかりチェックしたり、会場ではテザリングは自重したりした。

早めに会場に到着したので、少し待っていたら10時になって入場できた。

今回の再入場の目印は節電などの影響を考慮して、うちわということだったが、ちょうど数日前の雨以降気温が下がっていて、あまり必要ではなくなっていたので、微妙な感じになってしまっていた。

メタプログラミングの話は、各言語によってメタプログラミングと言える部分が違っていて、認識の共有が難しそうな感じだった。 でも、共通して言えそうなことは、普通のプログラム中では使うべきではなくて、 Rails のようなライブラリの実装に必要なときだけ使うべきという感じに思えた。

昼休みは一般参加者に知りあいがいなさそうだったので、軽くすませて本を見たりしていた。 昼休み以外の休み時間も含めて、わりと暇だったが、スタッフには知りあいがいたので、ちょっと話をしたり本を見たりしていた。

基調講演はいろいろとおもしろかった。

Node.js とかイベント駆動型プログラミングについてはあまり扱ったことがなかったので、おもしろかった。

JavaScript八面六臂については、JavaScript ばっかりでどれがどのプログラムの話だったかよくわからなくなってしまった。

IPv6 ハッカソンは PHP の filter_var とか IPv6 の Any-IP とかいくつか気になるものがあったので、後で調べておこうと思った。

LT については、最初の発表のゲームが気になったけど、会場だとバッテリー切れが気になるので、帰ってからまたやってみようと思った。 新しい言語を作ったとか、高速化とかの話はおもしろいと思うけど、そんなには興味がないので、まあそれなりだった。

最後の抽選では、確率が高かったこともあって、ボールは拾えて、実践 DNS の本が当たった。 気にはなっていたけど、他の本を読んでいたら読む暇がないかなと思ってまだ買っていない本だったので、非常に良かった。

毎回恒例のエンディングのビデオを流し始めたタイミングで無線 LAN のアクセスポイントが撤去されてしまったらしく、ネットワークが切れてしまったので、本を貰って帰った。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110717#p01 2011-07-22T16:23:45+09:00 2日目 Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 最初は自分の発表ということで、大ホールにいた。 発表資料は http://www.n-z.jp/presen/RubyKaigi2011/ に置いている。 テキストは発表前から置いていて、 RD ファイルの方が rabbit 用で org ファイルの方はしゃべる予定の内容のメモを書いておいていた。 ( 2011-07-22 追記: slideshare にもアップロードした。 ) 準備をそれなりにしっかりしておいたので、だいたい予定通りに出来た。 終わりの部分はどうするのか悩んでいたけど、司会がいるような場の場合はいったん終了して司会が質疑応答に入るようにしてもらった方が良くて、小さ.. 2日目

最初は自分の発表ということで、大ホールにいた。 発表資料は http://www.n-z.jp/presen/RubyKaigi2011/ に置いている。 テキストは発表前から置いていて、 RD ファイルの方が rabbit 用で org ファイルの方はしゃべる予定の内容のメモを書いておいていた。 ( 2011-07-22 追記: slideshare にもアップロードした。 )

準備をそれなりにしっかりしておいたので、だいたい予定通りに出来た。

終わりの部分はどうするのか悩んでいたけど、司会がいるような場の場合はいったん終了して司会が質疑応答に入るようにしてもらった方が良くて、小さい勉強会のようなところだと自分で質疑応答に入るようにした方が良さそうに思った。

発表で内容が完結しているようなものだと質疑応答で質問が出にくいようなので、質問が出やすいようなすきのようなものがある方が良いのかもしれないとも思った。

sekiさんの発表も気になったけど、途中で移動もしにくいので、次の jpmobile の話を聞いていた。 jpmobile は自分専用のメモアプリで一部機能だけ使っていたが、いろいろな機種などに対応するのは大変そうだなあと思った。

午前中はそのままずっと大ホールにいた。

スピーカーは発表がある日の弁当を貰えるということだったので、弁当を貰ってどこで食べようと思っていたら、sekiさんに会ったのでそのまま3階に一緒に移動して、そこで弁当を食べた。 そしてそのまま ゆRuby に参加していたら Lunch の時間が終わってしまって Rails3 レシピブックが買えなかったので、後で買った。

午後は小ホールの発表がある間はずっと小ホールにいた。

LT からは大ホールに移動して、懇親会にも参加した。 LT や闇 RubyKaigi はその場で感想を書いておかないと、多すぎて後から思い出すのは難しいと思った。

懇親会では nagachika さんなど初めて話をできた人もいて良かった。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110719#p01 2011-07-21T10:10:43+09:00 感想追加 Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 他の人の感想などを見て思い出してきたので追記。 sora_h さんの声変わりは以前に何かの ustream 中継を見ていたときに思ったので、今回は変わってないなあと思った。 見た目もちょっと大人っぽくなってるかなと思っていたけど、そんなことはなかった。 あの発表は資料が少なかったのならあきらめて、もう一度始めからとか言わずに、質疑応答の時間たっぷりで良かったんじゃないかと思った。 yhara さんの言っていた他人の作ったもので発表しても良いっていうのは、昔 (ささださんの作った) nadoka さんで発表したのを思い出した。 shugo .. 感想追加

他の人の感想などを見て思い出してきたので追記。

sora_h さんの声変わりは以前に何かの ustream 中継を見ていたときに思ったので、今回は変わってないなあと思った。 見た目もちょっと大人っぽくなってるかなと思っていたけど、そんなことはなかった。 あの発表は資料が少なかったのならあきらめて、もう一度始めからとか言わずに、質疑応答の時間たっぷりで良かったんじゃないかと思った。

yhara さんの言っていた他人の作ったもので発表しても良いっていうのは、昔 (ささださんの作った) nadoka さんで発表したのを思い出した。

shugo さんの発表にあった問題は irb でカンニングしてしまったために不正解扱いにした。2問目の方はひっかかったことがあって覚えていたので、簡単にわかったのに。

takaokouji さんの発表の絵のことについて質疑応答のところで質問してみようかと思ったら時間がなくて無理だったので、後できいた。

shelter とかあのあたりの機能は、現状の module が名前空間と実装の include や extend の機能を兼ねていて複雑なのがさらに複雑になるので、なかなか入らないか、入ってもなかなか使われない気がする。

kosaki さんの発表は非常にわかりやすくて良かった。 NUMA と呼ばれる環境があるのは知っていたけど、どういう問題があるのかとか知らなかったので、勉強になった。 (2011-07-21 追記: Ruby でおきていた問題自体は NUMA は関係なくてマルチコアだかららしい)

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110718#p01 2011-07-20T00:15:59+09:00 3日目 Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 最終日は小ホールには行かずにずっと大ホールにいた。 るりまの質疑応答で /ja/man/html/ をリダイレクトにするということが決まったので、たまたま隣に座っていた shugo さんに apache2 の設定を変更してもらってリダイレクトされるようになった。 ついでに ruby-dev の方で話が出ていた http://www.ruby-lang.org/bugreport.html も経緯を説明して、リダイレクトに変更してもらった。 経緯としては以下の通り。 SEGV のときのメッセージに http://www.ruby-lang.org/bugreport.html という URL が追加された。 http://www.ruby-lang.org/.. 3日目

最終日は小ホールには行かずにずっと大ホールにいた。

るりまの質疑応答で /ja/man/html/ をリダイレクトにするということが決まったので、たまたま隣に座っていた shugo さんに apache2 の設定を変更してもらってリダイレクトされるようになった。 ついでに ruby-dev の方で話が出ていた http://www.ruby-lang.org/bugreport.html も経緯を説明して、リダイレクトに変更してもらった。

経緯としては以下の通り。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110716#p02 2011-07-20T00:06:16+09:00 闇RubyKaigi Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 非常におもしろかった。 紅い巨塔は夜中に IRC でそんな準備をしていたとは知らなかったので、新鮮に楽しめた。 画面が出ないトラブルが多かったけど、そういうときになにか良い対策はあるんだろうか。複数人で参加とかだと一人が作業している間に自己紹介とかしておくという手があるのかもしれない。 闇RubyKaigi

非常におもしろかった。 紅い巨塔は夜中に IRC でそんな準備をしていたとは知らなかったので、新鮮に楽しめた。 画面が出ないトラブルが多かったけど、そういうときになにか良い対策はあるんだろうか。複数人で参加とかだと一人が作業している間に自己紹介とかしておくという手があるのかもしれない。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110716#p01 2011-07-20T00:06:16+09:00 1日目 Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 開場前にプロジェクターの接続チェックが出来るかと思って早めに行ってみたけど、そんなことはなく、普通に開場まで待っていた。 昼はコミッターには弁当が用意されているということだったので、大勢のコミッターで一緒に弁当を食べて、午後の最初のセッションの打ち合わせをちょっとした後、他の話をしていた。 そのときに 1.9.3 の変更点の話に "lazy-sweep" GC を入れた方が良いんじゃないかという話があったのに、話の中で出てこなかったのを質問タイムに思い出したので、言おうと思ったら、既に壇上で議論をするだけの時間になってし.. 1日目

開場前にプロジェクターの接続チェックが出来るかと思って早めに行ってみたけど、そんなことはなく、普通に開場まで待っていた。

昼はコミッターには弁当が用意されているということだったので、大勢のコミッターで一緒に弁当を食べて、午後の最初のセッションの打ち合わせをちょっとした後、他の話をしていた。

そのときに 1.9.3 の変更点の話に "lazy-sweep" GC を入れた方が良いんじゃないかという話があったのに、話の中で出てこなかったのを質問タイムに思い出したので、言おうと思ったら、既に壇上で議論をするだけの時間になってしまっていて、割り込めなくてちょっと残念な思いをした。

その後はずっと小ホールにいて、発表を聞いていたり明日の準備をしていたりしていた。

ツッコミを入れる

]]>
http://znz.s1.xrea.com/t/?date=20110715#p01 2011-07-20T00:02:12+09:00 前日 Kazuhiro NISHIYAMA a.k.a. ZnZ rubykaigi2011 rabbit を MacPorts で入れてうまく動かず、Ubuntu (natty) 環境でもさっぱり動かず、Debian sid の環境で ML に出ていたパッチをあてるとやっと動いたので、この環境を本番で使うことにした。 動かなかった環境での原因の調査は RubyKaigi のあとで。 他には 日本 Ruby 会議 2011 直前特集号 をみて何を見るか予定をたてるなどの準備をした。 前日

rabbit を MacPorts で入れてうまく動かず、Ubuntu (natty) 環境でもさっぱり動かず、Debian sid の環境で ML に出ていたパッチをあてるとやっと動いたので、この環境を本番で使うことにした。

動かなかった環境での原因の調査は RubyKaigi のあとで。

他には 日本 Ruby 会議 2011 直前特集号 をみて何を見るか予定をたてるなどの準備をした。

ツッコミを入れる

]]>