yacc入門 (2)
『Rubyソースコード完全解説』の第9章「速習 yacc」に魅入っていました。
... 規則(群)の最後にセミコロンが必要な yacc も存在する。...
筆者はこのセミコロンが嫌いなので本書では常に省略する。(p.239)
ぷはっ、やっぱ『ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道』は「ふつう」だわw。(つまんないという意味ではなく、客層が違うので「ふつう」に端折らず丁寧に書いてある)
勢いで『Rubyを256倍使うための本 無道編』ポチッと買っちゃった。
で、該当の goal posts (ブロック・パラメータ囲み記号s) 部分はここか。
block_var_def : '|' opt_bv_decl '|' { /*%%%*/ $$ = NEW_ITER((NODE*)1, 0, $2); } | tOROP { /*%%%*/ $$ = NEW_ITER((NODE*)1, 0, 0); } | '|' block_var opt_bv_decl '|' { /*%%%*/ $$ = NEW_ITER($2, 0, $3); } ;
(コメントは削った)
super YACC guru の皆さーん、ココがハックするところですよー。
ここの '|' をリテラルから kDO や kEND のようなものに変えて、block_var を paren_args 相当にしなきゃいけないのかな? んー、違うなー、相手は '|' 演算子だからなー。'(' や '{' と一緒にしたらまずいのか。
opt_bv_decl は ";" とか "," みたいだから、とりあえず無視して、block_var を見る……長ぇー。
はてなのオープンソース化
話題が古いって? いいの「遅レス」だから。
これははてなのバグだ。どうするか考えたが、やはり報告すべきと考え、はてなアイデアにバグ報告アイデアを立てた。
それから10時間。家に戻ってきてはてなアイデアを見てみると、すでに再現試験を行い、そのうえで詳細なレポートを上げている人までいて、完全に不具合という共通認識が参加者の間で出来上がってしまっていた。
はてな利用者の底力に驚かされたが、それはもう一方で、はてなそれ自身の対応速度が物理限界に達しているために、やむなくそうなっている部分もあるという証拠だろう。
アイデア (バグ修正・改良含む) の溜まり具合を見て、サービスの増加に対して人が足りてないんではないかと皆が思っていると思う。
もし、はてなの開発スピードに限界が来てるのが真実ならば、近藤さんならやりかねんよな>オープンソース化。
たださんは冗談めかして予言しているが、まぁ、Probably の域に達しているのだろう。(期待度は probably > maybe > perhaps らしい by 英辞郎。maybe == perhaps by Yahoo!辞書)
はてなの収入源:
- はてなポイント (to C)
- 有料オプション (to C)
- 自社技術の OEM (はてな検索 to B)
- データの OEM (はてなキーワード to 現代用語の基礎知識)
- アソシエイト(Amazon, Google, 楽天?)
- (他ツッコミあれば追記)
問題なさそうではある。
追記:
はてなの強みは、莫大な (言い過ぎ?) ユーザー数とそれを結びつける folksonomy 機能というのもある。ソースコード公開して個人サイトを立ち上げられても全く困らないだろう。それどころか API の公開により個人サイトユーザーまで取り込みかねん。
初めての Rast (1)
せっかく前田さんが Ruby on Rails 用の Rast extention を作ってくださったので、Rast をインストール。
$ sudo apt-get install libapr0-dev
Apache Portable Runtime が無かったので入れておく。
Web 上にある deb が 0.1.1 のものだったので 、後学のために作って見た。(参考: 自作パッケージを作りたい - AptGet - Debian GNU/Linux スレッドテンプレ)
$ sudo apt-get install \ build-essential \ devscripts \ dh-make \ lintian $ export DEBEMAIL="babie@..." $ export DEBFULLNAME="foo bar"
環境変数は .bashrc にも付け加えておく
$ tar xvjf rast-0.2.0.tar.bz2 $ cd rast-0.2.0 $ dh_make
パッケージの構成は s : 1つのパッケージとして作成 を選び、debian/control に適当に description を入れて、
$ debuild
fakeroot がないと怒られたので、(スレッドテンプレに付け加えたが、うちの環境だけだったらやだなぁ)
$ sudo apt-get install fakeroot pentium-builder $ export DEBIAN_BUILDARCH=i686
と、ついでに pentium-builder も入れて設定した。
今度は debuild 通った。
$ sudo dpkg -i rast_0.2.0-1_i386.deb
簡単!
さて、テストテスト。
初めての Rast (2)
とりあえず、http://www.netlab.jp/rast/tutorial-ruby.html.ja をこなそうと思ったら、早々に躓いた。
$ ./create.rb ~/tmp/rast/testdb ./create.rb:57:in `create': not supported encoding: utf8 \ (Rast::RastError) from ./create.rb:57
検索したら、たださんが ximapd でエラー出してた やつにぶつかった。
$ dpkg -l | grep icu ii icu 2.1-2.1 International Components for Unicode (non locale data) ii libicu21c102 2.1-2.1 International Components for Unicode (libraries) ii libicu28 2.8-4 International Components for Unicode (libraries)
うーむ、icu は入っているんだけどなぁ。あ、"non locale data" が怪しいな。
追記:
$ sudo apt-get install icu-data icu-i18ndata icu-locales $ dpkg -l | grep icu ii icu 2.1-2.1 International Components for Unicode (non locale data) ii icu-data 2.1-2.1 Data for ICU (source files) ii icu-i18ndata 2.1-2.1 Locale data for ICU (source files) ii icu-locales 2.1-2.1 Locale data for ICU ii libicu21c102 2.1-2.1 International Components for Unicode (libraries) ii libicu28 2.8-4 International Components for Unicode (libraries)
これでどうだっ!
$ ./create.rb ~/tmp/rast/testdb ./create.rb:57:in `create': not supported encoding: utf8 \ (Rast::RastError) from ./create.rb:57
あぼーん。
追記:
8/1に続きを書いた。
あと、横幅調整で適当に改行。