!kiyoka.blog.2011_06 RSSPLAIN

Related pages: !kiyoka.blog.list
555555512222222222222222222222222222222222222222222220222333333333333333333333033355555555555555555554445555505555555555555555555555555555555505555555555555555555555555555555555555555555555555555555555555555555505
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

1

kiyoka.2011_06_30[プログラミング] 頭の中にプログラムを入れる

2
 3122981549_3b5cde2dd3_m
2
 cc_icon_attribution_small  Creative CommonsEXT Photo by Mario PleitezEXT
2

 

2

いまプロジェクト全体の技術面を把握して設計とコードレビューする立場にいるので、全体像を全部頭に入れながら生活している。

2

意識していてもいなくても、風呂に入っている時、本を読んでいる時など、裏で脳が勝手に処理しているらしい。

2

突然不整合に気づいたり、ぼんやりしていた全体像がクリアになったりする。

2

この脳に入れた状態で生活することを含めて自分の価値なのかも。それを含めて報酬を受けとっていると考えられなくもない。

2

それは明文化されているわけではないけれど、実際はそういう人間が抜けるとプロジェクトはカオスになるわけで、実際問題はそうだ。

2

なんか因果な商売だなあと思う。

2

ちょっと違うけど、SFの短編「記憶屋ジョニィ」を思いだした。ジョニィとは違って記憶するだけではだめなんだけど。(参考:JM (映画) - WikipediaEXTクローム襲撃 - WikipediaEXT)

2
 B001HUN1PS JM(映画化されたもの)
2

この手の話は達人たちがちゃんと言語化してくれているので、自分の状況に置きかえて考えて

2

みると楽しい。まずはポール・グラハム。

2
 頭の中にプログラムを入れるEXT
2
 プログラムを頭の中に入れるのは容易なことではない。プロジェクトを何ヶ月
2
 か放っておいたなら、戻ったときに再び深い理解を取り戻すのには何日もかか
2
 る。そのプログラムに積極的に取り組んでいる場合でさえ、その日その日に取
2
 り掛かるとき頭の中にプログラムをロードするのには30分もかかるかもしれな
2
 い。そしてこれはいい場合での話だ。
2

 

2

この本にも関連するクヌース先生の発言がある。

2
 4274068471 Coders at Work プログラミングの技をめぐる探求
2
 第15章 ドナルド・クヌース
2
 クヌース TeXを開発している間にい膨大なことを学びました。学んだことの1
2
 つは、ソフトウェアが脳のどれほど大きな部分を占めるかということです。こ
2
 れは私が思っていたよりも難しい仕事でした。授業をフルタイムで教えながら
2
 ソフトウェアを書くことはできませんでした。私は授業をフルタイムで教えな
2
 がら本をフルタイムで書くことはできましたが、ソフトウェアは細部への注意
2
 をずっと多く必要としたのです。ソフトウェアが私の頭の大部分を満たしてし
2
 まい、ほかのことが追い出されることになりました。だから私は大規模ソフト
2
 ウェアプロジェクトをやっている人たちには格別の経緯を抱いています。自分
2
 で直面してみるまで、そんなことは想像もしていませんでした。
2

 

2

きっと脳に一度にロードできる情報の限界というものがあるのだろう。

2

今やっているプロジェクトが大規模かというとそれほどでも無いかもしれないが、かなりの事柄を頭に保持していないといけないのは事実だ。

2

 

2

自分でコードを書く事はあまり無くなってしまったけど、コードの細部まで整合を見ていかないといけない。

2

望んでいたわけでは無いが、実際にこういう立場になってみると、案外悪くないと思えるようになった。

2

自分の手でコードは書かないけど、できあがってきたコードを全部見れていて問題があれば修正してもらえる。

2

 

2

そんなわけで、プライベートで大きなプログラムをもうひとつ頭に入れることは無理っぽいなぁ、という感想。

2

解決策は、プライベートでは実現したいことを外部のライブラリやミドルウェアの機能で補ったり、コードを極限まで圧縮できるマクロを使って脳の消費スペースを少しでも抑えてやるしかないかなぁーと考えているところ。仕事柄、自分でコードをゴリゴリ書いて解決するよりも、オープンソースのパッケージを上手く選定して解決するほうが重要なので、実は利害は一致している。

2

まあ、二つ入ったほうがいいのは事実なんだけど、こればっかりはHDDじゃないので増設とかできんしなぁ。

2

 

2

 

0

comment (disabled)

2

2

 

2

 

3

kiyoka.2011_06_26[Sekka] Sekka 0.8.7 リリース

3

SKKライクな日本語入力メソッド Sekka 0.8.7をリリースしました。(リリースノート Sekka.ReleaseNote)

3
 NbpKsE
3

 

3

version 0.8.7

3
gemの依存規則で、Nendoの必須バージョンを0.5.1のみとした。
3
組み合わせ関数を自前で持たず、Nendoのutil.combinationsを使うようにした。
3
memcacehdプロトコルで辞書を保存する機能を廃止した。
3
Tokyo Cabinetの辞書ファイルが壊れている場合、sekka-server起動時に自動修復するようにした。
3

 

3

プラットフォームとして Nendo 0.5.1 を使うようにし、リファクタリングしました。

3

辞書ファイルを自動修復する機能が追加されているのを除いて大きな変更はありません。

3

 

3

次の目標

3

特に目標を立てずに、思いついたことをいろいろトライしていきます。

3

試してみたいことは、漢字だけでなく「しています」等の平仮名キーワードもタイプミス訂正をすると使いやすくなるのだろうかとか、Tokyo Cabinet以外のKVSに対応してみたらどうかとか、興味は尽きません。

3

 

3

将来はタイプミス訂正アルゴリズムは自分で実装せず、曖昧検索を持ったデータベースに全部やってもらったらどうかなどのアイデアもあります。Jaro-Winklerが計算できれば十分なので。

3

なるべくSekkaのコードベースが小さくなるのであれば、それもありかな、と思っています。

3

 

3

 

0

comment (disabled)

3

3

 

3

 

5

kiyoka.2011_06_24[Nendo] Nendo 0.5.1 リリース

5

Nendo 0.5.1をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

リリースの目玉

5

chibi-scheme 0.3のmatchライブラリをポーティングしました。

5

その過程で、let-syntaxとsyntax-rulesの大量のバグが取れました。

5

 

5

Gaucheのmatchライブラリのサブセットです。

5
 参考: Gauche ユーザリファレンス: util.match - パターンマッチングEXT
5

そのmatchを使って、Gaucheのutil.combinationsを動かしました。

5
 参考: Gauche ユーザリファレンス: util.combinations - 組み合わせEXT
5

 

5

let-syntaxのデバッグは本当に大変でした。高い高い壁だった。

5

実装方法の勘違いを正すところから始めて約2ヶ月くらいかかっています。

5

おかげで、自分自身がlet-syntaxを使ったマクロがすらすら書けるようになりました。

5

Scheme力が上がったー。

5

 

5

次の目標

5

例外処理まわりをなんとかしたいです。

4

guard構文をサポートして、nendo.testフレームワークでRubyの例外発生のテストケースを書けるようにしたい。今は、例外が返るテストケースはRSpecで書くか、あきらめるかという状態なので改善が必要。

4

gurad構文とRubyのbegin resucue end構文の折り合いをつけないといけないのでちょっと考える必要があります。きれいに行くかなー。

4
 参考: Gauche ユーザリファレンス: 6.18 例外EXT
5

 

5

しばらく休憩

5

今回はutil.matchのポーティングが重かったので、Nendoの開発は休憩してSekkaのほうに戻ります。

5

その過程で、guard構文が欲しくなるだろうから、ぼちぼちNendo側を対応していきます。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_06_21[本] Coders at Work 読了

5

読んだ。楽しすぎ。

5
 4274068471  Coders at Work プログラミングの技をめぐる探求: Peter Seibel
5

一流プログラマのインタビュー集だ。

5

この本に登場するような一流は私達凡人とは違う世界に住んでいるようだ。業界がそもそも違うというのもある。破天荒。多様。アウトロー。

5

なんか自分の仕事を否定されているようで辛い。

5

SIerでマネージャやっている人は、特に自分の仕事がえらく否定されているように感じるかもしれない。

5

まあ、マネージャにはリーチしない本なので心配に値しないと思うが。

5

 

5

例えば、「ソフトウェアの開発期間を見積れると信じること自体どうかしている」というようなニュアンスの意見が多かったように思う。

5

本を読む時間を正確に予測できないという例を引きあいに出して、その延長線でプログラムも同様であるに違いないという感じで言っているクヌース先生とか。

5

くそマジメに作業時間見積りをせざるを得ない私達はいったいどうすればいいのか… まあ、それは置いといて… ビジネスモデルの問題なので…

5

 

5

C++が酷評されているのは共通しているが、形式的証明に対する評価は人によって違う。

5

まあほんとんどの人が使えないと言っているが…

5

一度は信じてやってみたけど、やっぱりダメだと考えなおしたという話もあって説得力がある。

5

 

5

実践に基づいた意見が多く、2度読んでもたのしいだろう。

5

インタビュアーも造詣が深く、質問が丁寧 ( 悪く言えば粘着係 ) なのも良い。

5

インタビューがどんどん深い話題に降りていけるように誘導している。

5

これインタビューする前に相当予習しているんだろうな。

5

インタビューはこうでなくちゃという見本になっている。

5

 

5

ページ数が多いけど、読み応えあり。オススメです。

5

行儀の良さが求められる業界の人も一度読んでみては?

5

 

5

あわせて読みたい。

5
 4873114713  言語設計者たちが考えること: Federico Biancuzzi, Shane Warden
5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2011_06_15[Nendo][Scheme] matchライブラリが動いた日

5

オレ処理系のNendoについての開発メモ。

5
 SYKjVO
5

 

5

やっとmatchが動いたぞ。

5

chibi-scheme 0.3のmatchを変更無しで動かすことができた。

5

長かったー。let-syntaxの間違った実装を直すところから始めて約3ヶ月かかった。

5

忘れないうちに、Rubyのコードにトランスレートする時の注意点などを、これから数日かけて記事にしていこう。

5

自分で設計したVMに変換するのとは違い、既にターゲット言語が持つレキシカルスコープに乗せるやりかた(騙しかた)は、トランスレータ系の処理系を作っている人の役に立つかも。

5

※ 英語で書ければベストなんだろうけど、そこまでのスキルは無い...

5

 

5

記念にmatchのテスト実行結果を貼っておこう。

5
time ruby -I ./lib ./bin/nendo ./test/match-test.nnd                | tee -a test.log
5
Testing match ...                                                
5
Testing match -----------------------------------------------------------------
5
<match>------------------------------------------------------------------------
5
test any, expects ok ==> ok
5
test symbol, expects ok ==> ok
5
test number, expects ok ==> ok
5
test string, expects ok ==> ok
5
test literal symbol, expects ok ==> ok
5
test null, expects ok ==> ok
5
test pair, expects ok ==> ok
5
test vector, expects ok ==> ok
5
test any doubled, expects ok ==> ok
5
test and empty, expects ok ==> ok
5
test and single, expects ok ==> ok
5
test and double, expects ok ==> ok
5
test or empty, expects ok ==> ok
5
test or single, expects ok ==> ok
5
test or double, expects ok ==> ok
5
test not, expects ok ==> ok
5
test pred, expects ok ==> ok
5
test named pred, expects 29 ==> ok
5
test duplicate symbols pass, expects ok ==> ok
5
test duplicate symbols fail, expects ok ==> ok
5
test duplicate symbols samth, expects ok ==> ok
5
test ellipses, expects ((a b c) (1 2 3)) ==> ok
5
test real ellipses, expects ((a b c) (1 2 3)) ==> ok
5
test vector ellipses, expects (1 2 3 (a b c) (1 2 3)) ==> ok
5
test pred ellipses, expects (1 2 3) ==> ok
5
test failure continuation, expects ok ==> ok
5
test let, expects (o k) ==> ok
5
test let*, expects (f o o f) ==> ok
5
test getter car, expects (1 2) ==> ok
5
test getter cdr, expects (1 2) ==> ok
5
test getter vector, expects (1 2 3) ==> ok
5
test setter car, expects (3 . 2) ==> ok
5
test setter cdr, expects (1 . 3) ==> ok
5
test setter vector, expects #(1 0 3) ==> ok
5
test single tail, expects ((a b) (1 2) (c . 3)) ==> ok
5
test single tail 2, expects ((a b) (1 2) 3) ==> ok
5
test multiple tail, expects ((a b) (1 2) (c . 3) (d . 4) (e . 5)) ==> ok
5
test Riastradh quasiquote, expects (2 3) ==> ok
5
test trivial tree search, expects (1 2 3) ==> ok
5
test simple tree search, expects (1 2 3) ==> ok
5
test deep tree search, expects (1 2 3) ==> ok
5
test non-tail tree search, expects (1 2 3) ==> ok
5
test restricted tree search, expects (1 2 3) ==> ok
5
test fail restricted tree search, expects #f ==> ok
5
test sxml tree search, expects (((href . "http://synthcode.com/")) ("synthcode")) ==> ok
5
test failed sxml tree search, expects #f ==> ok
5
test collect tree search, expects ((p ul li) ((href . "http://synthcode.com/")) ("synthcode")) ==> ok
5
passed.
5

 

0

comment (disabled)

5