kiyoka日記。OldType、Sumibi.org、日々の出来事など。
先日、日本語IM飲み会にも行ってきたが、オープンソースの日本語IM関連で活動している人が非常に少なくなっている。
やっぱり統計的アプローチのIMを作るのは実験と評価の繰返しに地道な努力が必要とされるので、フルタイムの本業でやらないと辛いのかも知れないと思う。
さて、来年はOldTypeを『面白い』と言ってもらえるモノにするのが目標。
何なら、CodeReposのshare/docs/oldtype にOldTypeのコンテンツを全てつっこんで、
CodeReposのcommitterは自動的にOldTypeのコンテンツもいじり放題というアイデアもありかな。
ブログではいつも関数型言語の記事ばっかり書いているが、実は仕事ではPHPを使うこともある。
言語は自分では選べないというのはITの世界ではもはや常識である。
言語選択の自由を唱えるRubyのまつもとさんでもその辺は御存知でしょう(笑)
というわけで、少しでもPHPの開発効率の悪さを軽減すべく、flymake modoの設定をおこなってみた。
いろんな所でEmacsのflymakeモードの設定が書かれているが、うまく動かなかった。
動かない理由は『バックスラッシュが全て消えている』のが原因だと思われる。
恐らく、HTML化する時に失敗しているんだろうと思われる。
試しにHTMLソースを見るとちゃんと必要な所にバックスラッシュがちゃんと入っていたよ。
私はCentOS4.4, PHP4, GNU Emacs 22.1.1, php-mode-1.2.0の環境で試した。
(このページのテキストをコピペする場合は、ページタイトル右のPLAIN TEXTというアイコンをクリックして欲しい)
(string-match "22" emacs-version)
(defconst flymake-allowed-php-file-name-masks '(
("\\.php3\\'" flymake-php-init)
("\\.inc\\'" flymake-php-init)
("\\.php\\'" flymake-php-init))
"Filename extensions that switch on flymake-php mode syntax checks")
(defconst flymake-php-err-line-pattern-re '("\\(.*\\) in \\(.*\\) on line \\([0-9]+\\)" 2 3 nil 1)
"Regexp matching PHP error messages")
(defun flymake-php-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
(file-name-directory buffer-file-name))))
(list "php" (list "-f" local-file "-l"))))
(defun flymake-php-load ()
(setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-php-file-name-masks))
(setq flymake-err-line-patterns (cons flymake-php-err-line-pattern-re flymake-err-line-patterns))
(local-set-key "\C-cd" 'flymake-display-err-menu-for-current-line))
(add-hook 'php-mode-user-hook 'flymake-php-load)))
kahua.elの改善パッチをKahuaプロジェクトのメーリングリストに送った。
久々にオープンソースプロジェクトにコードをフィードバックした。
オープンソースを自分の作りたいものに利用させてもらっているのでもっと貢献しないとね。
もっとKahuaフレームワーク本体も改善したい所があるが、ちょっとレベル高いので手が出そうにない。
今一番欲しい機能は、高階タグでエラーが出た時にバックトレースを表示してくれる機能かな。
Kahuaはまだまだデバッグの為の機能が不足している。
Webからのコンテンツ更新はToDoリストの編集と、誤字脱字の編集、
それに画像やYouTubeコンテンツの貼付だけに限れば、通常のページ遷移だけでも良いんじゃ無いかという気がしてきた。
Ajaxにするメリットは強くは感じられないので後回しにしよう。
というわけで、猫のささちゃんにサンタの帽子を被せてみた。
めちゃくちゃいやがって被ってくれなかったので、寝ている間に頭に乗せた。
でも、すぐ気づきガシガシガシ。
おきにいりのオモチャになり、ペロペロ
だっこして寝た(笑)
Prototype.jsをjrunscriptで動かすためのラッパー
bashで関数型プログラミングができるライブラリ集
どちらもちょっとしたモノなので必要になったタイミングで作ればいいか。
Wikiパーサーが出力するデータをSXMLではなくOldType専用の内部フォーマットにした。(フォーマットの詳細は後日書く予定)
SXMLだとKahua側で再度高階タグに変換する時に骨が折れる。
要するにSXMLは構文が柔軟すぎてパース処理が複雑になるわけだ。
わざわざ高階タグに変換する理由は、1行毎に編集ボタンなどのアクションを設けたい場合でも簡単に実装できるから。
Kahuaではアクションはただの関数呼びだしで実現できるので高階タグ形式にしておけば簡単に機能追加ができる。
ところで、内部フォーマットを高階タグにする部分はmatch関数を多用した(自分の今のスキルからすると)かなり高度な実装で、1行あたりの密度が非常に高いコードになっている。
他の言語で実装するとしたらもっと冗長になるんだろうな。
例えば、Rubyとかで書いたらどんな感じになるんだろうか。
Rubyでもそこそこの行数で書けると思うが、(使用するライブラリにもよるが)たぶんもっと長めのコードになると思う。
Schemeは人を選ぶけれども複雑なデータ構造の処理には向いていると思うよ。
簡潔に書ける理由はmatchライブラリが良くできているのと、リスト内包表記が強力なのが一番大きい。
quack.elの defconstを次の様に変更するとよい。
(defconst quack-lambda-char (string-to-char "λ"))
オリジナルは半角で表示されるが、これで全角のラムダが表示されるようになる。
注意点としては、iso-2022-jpで保存しないといけない。
忘れるといけないので2行目に次の様なコメントを入れておいた。
Emacsがこのファイルを開くときに確実にエンコードをiso-2022-jpと認識してくれるので一石二鳥。
;;; quack.el --- enhanced support for editing and running Scheme code
;;; λの表示文字の為、このファイルはiso-2022-jpで保存してください。 (kiyoka)
SXMLから高階タグ関数に変換しようとして、行き詰まった...
;; utility : sxml to highger-order-sxml
(define (sxml->higher-order-tag sxmls)
tt i b big small em strong dfn code samp kbd var cite abbr
acronym sub sup span bdo br body address div a area link img
hr p h1 h2 h3 h4 h5 h6 pre q blockquote ins del dl dt dd
ol ul li form label input select optgroup option textarea fieldset
legend button table caption thead tfoot tbody colgroup col
tr th td head title base meta style script noscript
applet param object embed noembed html @ @@)
(((and (name . _) sxml) . rest) ;; generic node
(if (and (symbol? other) (member other tag-list))
この関数を適用すれば、高階タグ関数にできるだろうと思ったが無理だな。
このS式をどうやって、関数にするんだっけ?evalするだけで良いのか?
oldtype(a4p:3w1wh)> (sxml->higher-order-tag '(div (@ (lineno 1)) (h2 "行指向のWiki記法")))
(div/ (|@/| (lineno 1)) (h2/ "行指向のWiki記法"))
この関数は練習で書いてみたが、Wikiパーサーが返す形式としてはSXMLでは柔軟性が無いのでもっと中間的な形式にする予定。
Kahuaに対応しはじめる。お正月休みを使ってまったりと進める予定。
Wiki Iki
(ソースはwiki-iki.kahua)を参考に簡単なサンプルコードを積み上げながら作る。
Kahuaの何が良いってあんた、S色をちょっとづつ動かしながらWebアプリを作れるのがいい。
誰に興味を持ってもらえるか分からないけど、なにかのキッカケになればと思う。
実際にいろんな所で目にするようになったので、普及しはじめているのかな?
色々調査してみよう。まずはいろんな記事を読んで見ることから。
LiveCoding#5
に参加して、実際にHaskellをコーディングしている所を見るとHaskellも面白そうに感じた。
コーディングをしてコンパイルが通ればほぼ動く、型安全なプログラミングというものを体験してみたいと思った。
私は実際にHaskellで実用的な物を作った事が無いのでまだ、Haskellの良さが分からないレベルだ。
日本語処理に問題があるとか、ライブラリが足りないとか処理系はまだまだこれからと聞いているが今からやっとくのもいいだろう。
猫の避妊手術をしたので、抗生物質を5日間飲んでもらう必要がある。
問題は猫がそんな得体の知れない?物をどうやったら飲んでくれるか。
驚いたことに一日目は白い錠剤を猫の目の前に置いたら... そのまま食べた!
でも、二日目からは美味しくないことが分かってたべなくなった。
そこで、こんな物を作って食べてもらえばうまく行くことがわかった。
大好きなカリカリの餌に、ごはん粒を使って錠剤をくっつける。(ごはん粒とはアイデアがまた昭和だなぁ...)
.emacsとか.vimrcとかまで置いてあって参考になる。
もちろん、RubyやHaskell等のソースコードも多い。(Perlのソースコードが一番多い様だ)
P.S. 早速、コミット権を設定してもらえた。さあ、.emacsファイルとかも登録しよかな。
Emacsから見るとこんな感じ。
ブラウザから見るとこんな感じ。
使いながら必要な機能を追加するのが、無駄が無くて一番効率がいいと思う。
出版された時期を見るとかなり古く、1977年07月だそうだ。
私は図書館で借りて読んだが、ページが色褪せ、茶色がかっている。
自然言語を題材にしているせいかストーリーは全然古くなっていなくて驚く。
ただ、コンピューター言語への喩えとして『フォートランかアルゴルの様だ』というくだりを読むと、さすがに書かれた時期が分かって良い。
ネット上にわかりやすい書評 BABEL-17
を見つけた。興味を持った方は読んでみては?
oxyさん
凄かったね。C++のコード書くの早っ!『世界』を見れた気がする。
次回はLiveCoderになれる様にネタを考えておこう。
見栄えのするプログラムが作れた方が良いのでJavaScriptとかを練習しとくかな。
そうそう、こういうイベントで実際に手を動かして何かを作りだしている人達から創作の力をもらう事が多い。