ひとまずHOPは終了

9.4以降はlinogramの話なんだけど。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


流して読んだら、最後の締めで、今までのチャプターのテクニックを総動員して書くとエレガントにかけるんだぜ的なことが書いてあって、まぁそうだろうなと思うんだけど、全写経してから、コードを眺めながら本を読まないと面白さが伝わりそうになかったわりに、写経する気力がちょっとない。

というわけで、気が向いたらまた読むことにした。

6章の無限ストリームと8章のParserが特に面白かったな。

perlのinline系のモジュール

pagerankのやつで。

http://clip.livedoor.com/page/http://blog.kzfmix.com/entry/1194761094

言語で持つ必然性はないすな。

確かに僕もInline::OctaveとかStatistics::Rみたいな統計言語パッケージを使えばいいじゃんと思ったのですが。

その場合、OctaveとかRのようなパッケージを導入したり、その言語でわずかばかりでも記述しないといけないのでそれはperlなのかなぁ?とか思ったのです。

でも、実用perlプログラミングでもinlineモジュールに章を割いてるしなぁ。

ProductName 実用 Perlプログラミング 第2版
Simon Cozens
オライリージャパン / 3360円 ( 2006-03-01 )


perlとはCPANを扱うための手段である

と考えれば、Inlineを通して多言語を呼び出すのはプログラ魔法学的には神獣召還あたりになるのかな、それとも女神転生のような多言語神を混在させる世界観そのものかな?

ちなみに、僕はjava神を召還することが多いです。

数字のならび

fortranプログラムのインプットファイルを作るスクリプトを書いてて悩んだ。

数字の並びがこんな風にあった場合に

1,3,4,5,7,9,10,11,12,15

1 3 -5 7 9 -12 15

みたいに変換するという。要するに数値が3,4,5というふうに3つ以上並ぶ場合には3 -5と省略できるようなヒトにやさしいフォーマットなんだけど。これを数列から作り出すのに結構悩んだ。

my @sort = ();
my @b = ()
my @a = (1,3,4,5,7,9,10,11,12,15)
for(@a,null){if($b[-1]+1 == $_ || @b == 0){push 
@b,$_}else{@b>2?push@sort,($b[0],-$b[-1]):push @sort,@b; @b=($_)}}

for (@a,null)ってなんか気持ち悪いけど、とりあえず。

でもこれって再帰でできないのかな。

perlでpagerank

昨日みたらどう書く?のperlのカバレッジが突然あがった(今見たら100%になってる!)のであらーと思ったら、dankogaiさんでした。

というわけで、以前考えてみたものの投げてしまった「組合せ型の最小完全ハッシュ関数」の逆関数PageRankの計算の解答を。

「組合せ型の最小完全ハッシュ関数」の逆関数は再帰で綺麗に。なるほどというか再帰で素直に考えればよいのね。

PageRankの計算はinline::Octaveでやってるけど、perlにはちゃんと行列計算やるライブラリってないのかなぁと。

Test::WWW::Declare

つくるぶガイドブログ: Test::WWW::Declareで宣言的にWebアプリをテストというエントリを読んだ。

ちょうど今Higher-order perlの9章declarative programmingのとこを読んでいてタイミングがよいので後で、ソースを読んでおこう。

HOP 9.2はLocal Propagation Network

引越しもだんだんと落ち着いてきたので、Higher-order Perlを再開。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


9.2はLocal Propagation Network

華氏を摂氏にしたりケルビンに変換するのってどれかひとつが決まればあとは自動的に決定されるわけだが、f2cとかc2fといった変換用のサブルーチンを書かずにネットワークとして表現することで、どちらか一方を決めれば残りが自動的に決まるようにする。

Catalystでrobots.txt

アクセスログをみてたらDrkcoreのrobots.txtへのアクセスが404なのが気になったので、Catalystでrobots.txtを扱う場合にはどうすればいいんじゃろかと調べた。

単にroot以下に配置すればいいらしい。

早速設定した。

plaggerでlivedoorクリップにはてなとdel.icio.usを同期

もともとdel.icio.usを仕事とかプログラム関係のブックマークとして利用してたんだけど、職場のファイアーウォールがyahoo関係を遮断するようになって、そのとばっちりでdel.icio.usが使えなくなって以来、livedoorClipの利用頻度が増えた(一発クリップとか便利だしな)

そういうわけでメインがLDCになってるんだけど、やっぱはてなにもdel.icio.usにも同期させるのが便利でよかろうと、こことかここを参考にplaggerで。

global:
  assets_path: /usr/local/plagger/assets
  timezone: Asia/Tokyo
  log:
    level: error

plugins:
  - module: Subscription::Config
    config:
      feed:
        - http://clip.livedoor.com/rss/clips/fmkz336

  - module: Filter::Rule
    rule:
      module: Deduped
      path: /tmp/dedupe-livedoorclip.db
      compare_body: 1

  - module: Filter::Reverse

  - module: Publish::Delicious
    config:
      username: kzfm
      password: XXXXXX
      interval: 2
      post_body: 1
  - module: Publish::HatenaBookmark
    config:
      username: kzfm
      password: XXXXXX
      interval: 2
      post_body: 1

あとは一日二回適当にcronでまわす。

drkcoreにタグのサジェスト機能を入れた

suggest.js - 入力補完ライブラリを使って編集時のタグを候補から選択できるようにした。

これで編集するのは結構楽になった。

あとコメント機能はどうするかなぁ、、、、悩む。個人的にはこんな風に考えていて、特に問題ないだろと考えていたんだけど、、、、これは、プログラマー的な視点というか、多少なりともWebAPIを使う側のかなり一方的な視点なんじゃないかと思わされる出来事が続いた。

なんつーか、Mosaicの頃から全体のリテラシーとしては対して変わってなくて一部だけがのっぺりと。イノベータとアーリーアダプタだけがどんどん先に行ってて、対数正規分布みたいな形になってんのかなぁ。

結局、コメントも実装しといたほうがいいのかなぁ。その場合はhttp://blog.kzfmix.com/comment/1192876427みたいに名前空間きっといてJSON返すようするかなぁ。うーん、commentもモデルとして捉えればいいかな。

HOP 8章終了

消化できていないところもあるけど一通り読み終わった。

ProductName Higher-Order Perl: Transforming Programs with Programs
Mark Jason Dominus
Morgan Kaufmann / 5692円 ( 2005-03-28 )


  • Parser
  • Lexer
  • 再帰下降parser
  • 左再帰、右再帰
  • バックトラッキング
  • continuation,継続

サンプルのコードで端折ってる部分がいきなり多くなってて動かすのに苦労するとこが少し見受けられた。継続とかもう少し厚いと嬉しかったけど、それでも本書でもっとも分厚い章。