!kiyoka.blog.2010_05 RSSPLAIN

Related pages: !kiyoka.blog.list
1551555444444444444444444444444444444444444444444444444444444444333044455255555555555555555555555555555555555550555555555555555555555555555555555055555555555555555550555555555555555055555555555555555555055555555555555555555550555555555555555555555555555555505555555555555555555055555552555555505
1

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

5

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

5

kiyoka.blog_header 

1

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

5

5

 

5

 

4

kiyoka.2010_05_28[Nendo] 末尾再帰最適化をどう実装するか

4

私がRubyで書いているLisp方言、 Nendoについて。

4

 

4

最新のNendo version 0.3.2ではまだ末尾再帰最適化がサポートされていない。

4

これは無限ループが記述できないということを意味する。

4

whileやuntilといった、無限ループ構文はNendoの初期化スクリプトでマクロで定義されているが、Nendoのプリミティブにループという概念が無いため、ただの再帰呼び出しに変換してある。つまり無限ではなく、いつかはスタックオーバーフローするということである。

4

無限ループが書けないと何が困るかというと、デーモン化したとき、肝心のメインループ(普通は無限ループ)が書けないとか、無限ストリームを読み込む tail -f のようなものも書けない。

4

 

4

さて、どうやって無限ループを実現するかを考えはじめているのだが、まだまとまっていない。

4

案としては、継続をサポートするという正統派な方法と、Rubyのwhileと同様にプリミティブなループ構文を用意してSchemeからは遠ざかるという案だ。

4

しかし、何とかしてSchemeと同様の末尾再帰最適化を実現して、Schemeのライブラリをなるべく簡単にポーティングできるようにしたい。

4

継続を実現する具体策としてはRubyのcallccがあるが、例外等との絡みで安全性が低いというのをどこかで読んだことがあるので、できればそのまま使わないほうが良いだろう。

4

(それに、今ちょっと調べた範囲ではJRuby 1.5.0とRubinius 1.0が callccを完全にサポートしていないみたいだ。callccの優先順位は非常に低いということか...)

4

 

4

なんてぼんやり考えたのだけど、R5RSを再度確認したら末尾呼び出しになる箇所はこんだけあるよと書いてある。多い!

4

つまり、これらの箇所をループに最適化せよということか。

4

うわー、めんどくせー。

4

 

4
 (if <式> <末尾式> <末尾式>) 
4
 (if <式> <末尾式>) 
4
 (cond <cond 節>+) 
4
 (cond <cond 節>* (else <末尾列>)) 
4
 (case <式> <case 節>+) 
4
 (case <式> <case 節>* (else <末尾列>)) 
4
 (and <式>* <末尾式>) 
4
 (or <式>* <末尾式>) 
4
 (let (<束縛仕様>*) <末尾本体>) 
4
 (let <変数> (<束縛仕様>*) <末尾本体>) 
4
 (let* (<束縛仕様>*) <末尾本体>) 
4
 (letrec (<束縛仕様>*) <末尾本体>) 
4
 (let-syntax (<構文仕様>*) <末尾本体>)
4
 (letrec-syntax (<構文仕様>*) <末尾本体>) 
4
 (begin <末尾列>) 
4
 (do (<繰返し仕様>*) 
4
   (<テスト> <末尾列>) 
4
  <式>*)
4

 

4

たぶん、上の式を全て lambdaにコンパイルして 最終的には lambda の末尾呼び出しだけを解析して最適化すればいいのだろうが、今のNendoはそうなっていない。

4

if と let と lambda くらいだけで勘弁してほしい。たぶんそれで実用レベルにはなるだろう。

4

それともいっそ named letだけが末尾再帰最適化の対象になるとわりきるとか。Clojure も recur という予約語を使って再帰呼び出しを明示した場合のみ最適化されるわりきった仕様だったっけ。

4

そして、マニュアルの注意書きで逃げると。 ^_^;

4

Nendoの用途から考えると本気でがんばる部分じゃない気がしてならないので。

4

もうちょっと考えてみよう。

4

 

4

ちなみに今のNendoは次のようにマクロ展開される。これを全部最適化対象にするのは骨が折れるのでやりたくない。

4
case, cond, and, or → if ( Rubyのifで実現 )
4
let*, named let → let ( Rubyのlambdaで実現 )
4
begin → begin ( Rubyのbegin,endで実現 ) 
4
lambda → lambda ( Rubyのlambdaで実現 )
4
lterecはプリミティブ ( Rubyのlambdaで実現 )
4

 

4
 1-1211550382Aga9
4

処理系の実装って本当に地道な作業が多いなあ。

4

やっぱり、named letだけ最適化するというあたりが落としどころかな。

4

Nendoの場合は、一番めんどくさい作業であるライブラリ開発をRubyに丸投げしているので、だいぶ楽できているとは思うのだが、それでも大変な作業だ。

4

それを考えると、Gaucheのライブラリまで含めたの整備状況は凄いよなあ。(最適化も凄いけど)

4

 

3

追記: 先程、Ruby 1.9.1でcallccを試してみたら 実行速度が非常に遅かった。もし、callccを使うとしたら、例えば、named letの内側の末尾再帰呼出しだけをcallccでジャンプに置きかえる位が現実的かも。

3

 

3

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2010_05_27[Nendo] Nendo 0.3.2 リリース

5

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

2

rubygems_icon_128

5

チュートリアルと、リファレンスマニュアルはまだ書きかけです。

5

Nendo.Tutorial 

5

Nendo.ReferenceManual 

5

 

5

今回から、Nendoで記述されたユーザースクリプトをRubyにコンパイルする機能が入りました。

5

Lispの一番重い処理であるコンパイルステップ(マクロ展開など)が処理済みのRubyのソースコードが出力されます。

5
 [コマンド例]
5
nendo -c script.nnd > script.rb
5

 

5

あとは、script.rb に実行権限を付ければ普通のRubyスクリプトとして実行できます。

5
chmod +x script.rb
5
./script.rb
5

 

5

これで、頻繁に利用するコマンドラインツールをNendoで書いてもストレスなく使えるものが作れます。

5

ちなみに、Nendoで開発しているStowspecというコマンドラインツールでは以下のような結果になりました。

5

起動時間だけが分かるように、stowspecスクリプトのmain関数の入口で (exit 0) するようにしています。

5

 

5
 うちにある一番速いマシン(Sumibi.orgの漢字変換サーバ)での計測結果。
5
 スペック: AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
5
$ time ./stowspec
5
2.147 secs                                                                                                                      
5
$ time ./stowspec
5
2.156 secs                                                                                                                      
5
$ nendo -c ./stowspec > stowspec.rb  
5
$ time ./stowspec.rb
5
0.315 secs                                                                                                                      
5
$ time ./stowspec.rb
5
0.315 secs                                                                                                                      
5

 

5

ちなみに、ソースコードの行数はかなり膨らんでいますが、この時間で終わるのはRubyすごいです。

5
$ wc stowspec
5
     576    1924   20576 stowspec
5
$ wc stowspec.rb
5
    6183   20458  531101 stowspec.rb
5

 

5

他にも、vectorが使えるようになったりと、少しずつ言語のコア機能が固まりつつありますが、もうそろそろ、新しいモノ好きの人に試してもらうためのドキュメント整備が必要かなと思っています。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_25[デカ文字][Nendo] デカ文字作成サイト と あんずもじのライセンス調査

5

先日 (kiyoka.2010_05_08[創作心理] 今作りたいもの) で書いた『デカ文字作成サイト』にあんずもじEXTが使えそう。

5

このフォントを使えば、こんな手書き風の文字入り画像が作成できる。

5

 

5
 4637389571_74838ed7e3
5

 

5

ライセンスについては厳密な記述では無いが、一応取扱い方法は書かれている。

5
 [ReadMeあんずもじ.txt]より引用
5
 ::::::::::::::::はじめにお読み下さい:::::::::::::::::
5
         (2007/10月改訂版)
5
 
5
 
5
 フォントを気に入って下さってありがとうございます。
5
 必ず下記をお読みになってからお使い下さい。
5
 使い方の分からない場合、ご使用をお控え下さい。
5

(略)

5
  
5
 ◆素材サイト(バナー作成・ロゴ作成サイトを含みます)にて、
5
  配布用素材にフォントをお使いになる場合には、リンクウェアといたします。
5
  リンク(URL)は http://www8.plala.or.jp/p_dolce/ にお願いします。
5
  リンクは同梱のあんずもじのバナーか、テキストでお願いします。
5
  また、ネット(ホームページやブログ)にてフォントをお使いの際は、
5
  できましたらリンクしていただけると、とても嬉しいです。(強制ではありません)
5

 

5

 

5

この『デカ文字作成サイト』はネタとしてはそれほど面白いというわけでもないが、Nendoの使いやすさの確認とTokyo TyrantEXTの練習という意味合いもあるので作ってみている。

5

実際に作ってみると、Nendoの起動時間が遅すぎるという問題点が明らかになったり、RMagickのAPIを呼ぶ為に必要な機能が足りないことが分かったりした。

5

サイト公開にはにはもう少しかかりそう。

5

追記: 開発中のソースコードはgithubで見れる。(kiyoka's dekamoji at master - GitHubEXT)

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_24[本] 初めての人のためのLISP<増補改訂版> 読了

5
 4798119415  初めての人のためのLISP<増補改訂版>: 竹内 郁雄
5

深い本。

5

この分量で、Lispのミクロで見た視点と、マクロで見た視点(俯瞰した視点)の両方を楽しく見せてくれるすばらしい本だ。

5

マイ処理系を実装しながら読むと、もっとリファクタリングしたくなってくる。

5

例えば、現在のNendoは read eval print loop (通称repl) がRubyで書いてあるのだけど、ちゃんとLispで

5
(loop (write (eval (print))))
5

というコードにしてしまいたいと思った。

5

おそらく、少しのリファクタリングで直せるだろうし、プログラムの見通しも良くなりそう。

5

 

5

本書の話に戻ると、本書はどちらかというと、特定のLispについてではなく、過去の歴史的経緯なども踏まえてLispの本質を伝えようとしている。

5

Common Lispに至る経緯なども知れて良い。

5

あわせて、今のSchemeを知った上で読むと、SchemeがLispの本質を失わず相当スッキリした仕様になっていることも実感できた。

5

やっぱり、自分はCommon Lispよりも、Schemeの方が好みであることも再確認。

5

Lispを使わない人も一読をオススメするぞ。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_18[ハードウェア] PowerPCに失望の連続(3)

5

まだまだやられている。

5

私の開発用Macは今だに、PowerPCなのだが、時代に置いていかれている。

5

最近リリースされた、Rubinius 1.0がPowerPCでは動かせないようだ。

5
 rubinius_logo_black_on_white ← Rubiniusのロゴ
5

Rubiniusのページで配布しているMac OS X 10.5用のバイナリがIntel専用だったので変だなとおもいつつソースからビルドした。

5

PowerPCに対応した最後のXCode 3.1ではビルドが通らない。

5

C++のTR1ライブラリが古すぎるみたい。(gccは4.0.1)

5

要するに、RubiniusがPowerPCを置き去りにしたというよりは、AppleがPowerPCを置き去りにしたのが原因みたい。

5

別にRubiniusが絶対に必要というわけでは無いのだけど、Nendoが動くかどうかだけでも簡単に確認したかったなあ。

5

色々動いてくれるとモチベーションが上がるので ^_^

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_11[本] Hadoop本を読む

5
 487311439X Hadoop: Tom White, 玉川 竜司, 兼田 聖士
5

翻訳者の玉川さんにいただいた本。

5

まだ全部読んでいない。

5

結構、分厚い本だ。

5

ある程度読み進んでは、実際に動かしてみてという繰返しで学習しないと、MapperとReducerの作りかたがパッと思い浮かぶまでにはならなさそう。

5

実際に、14章のケーススタディを読みながら手を動かして実験するのが学習が早そうに感じた。

5

 

5

個人でHadoopを使ってまで実験をしてみたいプロジェクトは無いけれども、そのうち仕事で使う日が来るのかも知れない。

5

プライベートで自然言語処理の実験をやるとすれば、1台のStandalone構成のHadoopで慣れておくというのも先行技術としてはありかな...?

5

プライベートなプロジェクトであっても、お金をかける気さえあれば、Amazon EC2で数十インスタンス起動してみれる時代になったのは感慨深い。

5

Sumibi.orgのような、楽しそうなプロジェクトに手をつける機会が有れば、一度は分散で統計処理を経験しておきたい。

5

その時にまた読み返そう。

5

 

5

COMMENTmamoruk

最近 http://www.umiacs.umd.edu/~jimmylin/book.html 読んでいますが、自然言語処理的にはけっこうおもしろいです。

こんなタスクも Hadoop でできるのかぁ、と。

個人でもできる時代になったのは画期的なことですね。自分もびっくりしています。いい時代になったものです。

5
 1608453421  Data-Intensive Text Processing with MapReduce
5

COMMENTkiyoka

MapReduceを使ったアルゴリズムに特化した本があるんですね。

集計じゃなくて自然言語処理にHadoopを使おうと思ったら必要になりそうな本ですね。

情報ありがとうございます。amazonのリンクも貼っておきます。

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_10[ハードウェア] PowerPCに失望の連続(2)

5

(kiyoka.2010_04_05[ハードウェア] PowerPCに失望の連続) でも一度書いたが、まだまだやられている。

5

私の開発用Macは今だに、PowerPCなのだが、時代に置いていかれそうだ。

5

最近、使いたいけど、PowerPCに対応していないせいで使えなかったオープンソースソフトウェアのリスト。

5
MongoDB
5
KyotoCabinet
5
MacRuby 0.6
5

 

5

特に、MacRubyがMacという名前がついているくせにPowerPCのMacを置き去りにしているのが寂しい。

5

やっぱりオープンソースソフトウェアをいろいろ試したい人は LinuxとIntel(特に64bit)でないとキツいのかな。

5

次に買うノートパソコンはMacでなくてもいいかなぁ。

5

レノボがいいのかな。

5

 

5

COMMENTmamoruk

OSS はユーザ数多いところでないと厳しいですよね……。

Kiyoka さんほどの開発者の人がMac ユーザでなくなってしまうのはさびしいところですが、

なんとかできたらなーと思いつつ、自分もすでに PPC は持ってないのでなんとも言えないです。

5

COMMENTkiyoka

そうそう、作業の費用対効果を考えると、一番普及している流れに乗っかるのが一番なんですよね。

今も、どの機種にするか迷っています。

今後、Windowsでの動作確認とかもしたいことが増えたりすると、Windows機 + VMWareなんかもありかなぁと思ったり、Mac + BootCampでもいいかなぁと迷います。

どのみち、今のパソコンが壊れてどうしようも無い状態にならないと家庭内稟議が通らないのですが (汗;)

でも一度Macに慣れるとMacが使いやすいので、Macをメインにしたい気持ちはまだあります。

5

COMMENTktat

Linux & KVMってのはいかがでしょうか? DualBootは、手元で開発しているものを試したいという要望には耐えないので、あんまり現実的じゃないと思いますけどねー。

5

COMMENTkiyoka

いろいろな機種を見た結果、MacBook Pro 13 inch が安く、メモリもMax 8GBまでいけるのでそれに流れそうです。

仮想化は VMWare fusion 3 とかを購入してしまえばWindows環境の確認とかもなんとかなるかなーと思っています。

メイン環境は使い慣れたMacにしといたほうが後悔が無さそうです。

Nendo+MacRubyを使って、LispでMacのLook&Feedアプリを動かすというミーハーな欲求も満たせるし。

身内にAppleの中の人がいるので安く買えたりしないかなー。

5

COMMENTmamoruk

MacBook Pro 13インチ、ちょうどいいですね。

中の人には社員割引があるのですが、

kakaku.com で探した一番安いところの方が安いかもしれません (^^;

5

COMMENTkiyoka

kakaku.comで探したらけっこう安いところが見つかりますね。

どっちが安いかは、微妙なところですね。

値段は別として、買うことは決まったので、Google日本語入力とかGoogle Chromeとかを試すのが楽しみです。

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_08[創作心理] 今作りたいもの

5

今日時点で作りたいものをリストアップしてみる。

5

こういう心境は数ヶ月もすると簡単に変化する。

5

例えば、もろコンフリクトするライバルプロジェクトや、やる気を無くすほど良く出来たサービスが出てくるので、本当に今日時点でのスナップショット。

5

 

5

better SKK

5

Sumibi.orgと同じ様な統計的アプローチを使うが、連文節変換ではないもの。

5

コード量はSumibiよりもはるかに少なそうな気がする。

5

私が個人的にSKKEXTのキライな所である、大文字小文字を駆使して送りがなを指定する部分を、統計的に解決してほしい。

5

使うキーもずっと減らして基本的にCtrl-Jだけにしたい。

5

 

5

簡易Webデータベース

5

サイボウズデヂエのような簡易データベース。

5

特徴は、NoSQLを使ったラフなデータベースで、WebとExcelを併用使用できるもの。

5

自分では使わないのだけど、業務でよく遭遇する部署ローカルな管理表をWeb化してもっと共有しやすくする。

5

Excelからのインポート部分とExcelとの併用の仕方で一応アイデアがあるのだ。まだWeb上で同様のサービスは発見できていない。

5

 

5

デカ文字生成サイト

5

Nendo言語の使いやすさを試す目的でCGIを少し作ってみたのだけど、既に何が面白いのか自分でも良くわからず、どうしようかと思っているもの。

5

もうひとつひねりが欲しい。

5

(ちなみに、nendo 0.3.1以上のgemをインストールすると、dekamoji.cgiという名前でソースが入っている。dekamoji.cgiのソースEXT )

5

)

5

任意の文字列を画像化してくれるので、こんな画像が作れる。が、2chとかで多用されるだけで今ひとつ平和利用されそうにないなぁ。

5
 4580739153_57b0e8262e_o
5
 ちなみに、『高橋メソッド』を中国語でいうとこうなるそうな。
5

 

5

COMMENTもぎゃ

デカ文字生成サイト、なんか思いつけば面白い物になりそうですね。

ぱっと見て思いついたのは、WEBデザインのタイトル部分として使う方法。

たとえば、 http://oasis.mogya.com/ これの

「検索の多い電源スポット」「駅名や住所を入力して電源スポットを検索することができます」とかは、本当は画像にしたほうが見栄えが良くなるのですけど、プログラマの性(サガ)で、「そんなことしたら気軽に書き換えられないじゃないか!」と思ってしまって、ついついテキストにしてしまいます。

CGIで動的に画像を生成できると、ちゃんとしたデザインでありながら動的に書き換えも可能になって、プログラマが作るサイトのデザインが多少改善されるかも。

・・・実用的かもしれないけれどあんまり面白くないなぁ。なんか思いついたらまた書き込みに来ますw

5

COMMENTkiyoka

デカ文字生成サイトのひねりとしては、手書き風フォントを使うというアイデアもあるのですが、フォントの利用規約が曖昧なものが多く、このような応用にはすっきり使えなさそうです。

正統派路線では、IPAフォントではなくもっと美しいフォントを自腹で買うという方法もあるのですが、かなり高いようなので実現できなさそうです。

今ひとつ良いアイデアが出なさそうなので、いったんサイトを開いてみて、面白い利用のされ方を待つのがいいのかもしれません。

残りの作業としては、key-value-storeの勉強用に完成した画像を蓄積していく部分を実装したらサイトオープン可能な状態です。

ちょうど、Nendo言語のお試しとしては、いいお題になっていることは間違いないのですが...

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_07[SQLite][テスト] 驚愕! SQLiteのテストコードは本体の約679倍

5

SQLite

5

SQLiteのテストコードは4567万8000行! 本体のコードは6万7000行 - PublickeyEXT

5
 軽量なリレーショナルデータベースとして人気のSQLite。そのWebサイトに掲載
5
 されている「How SQLite Is Tested」の内容が、海外のプログラマなどのあい
5
 だで話題になっています。
5
 3月に公開された最新バージョンのSQLite 3.6.23。本体のソースコードは約6万
5
 7200行(67.2KSLOC、Kilo Source Lines of Code:空行やコメントを除いた行
5
 数)なのに対し、テストコードはなんと4567万8300行(45678.3KSLOC)だと紹
5
 介されているのです!これはテストコードが本体の約679倍もの大きさだという
5
 ことになります。
5

 

5

スゲー。SQLiteはオモチャだと思っていたが、この数字を見て考えかたが変わった。

5

これくらいテストコードが充実したプロダクトなら安心してリファクタリングや性能チューニングできそう。

5

見習いたい。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2010_05_01[Nendo] Nendo 0.3.1 リリース

5

私がRubyで書いているLisp方言、 Nendoについて。

5

 

5

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

2

rubygems_icon_128

5

チュートリアルと、リファレンスマニュアルはまだ書きかけです。

5

Nendo.Tutorial 

5

Nendo.ReferenceManual 

5

 

5

あまり、作業が進んでいませんが、一旦区切ってリリースしておきます。

5

現在はおもちゃのCGIサンプルを作りながら少しづつ肉付けしていっています。

5

 

0

comment (disabled)

5