2010-01-31

Clojureコードバトンを受け取った

manjilabさんよりTwitterでお誘いされたので光速で受けました。『プログラミングClojure』を読ん出る最中なのでちょうど良かったです。
自分が書いたのはGitHubのここのページに置いときました。

gist: 291106 - GitHub


さて「Clojureコードバトンっていったい何?」ってことなんですが、もともとはid:higeponさんがSchemeではじめたものらしいです。

Scheme コードバトンまとめページ - ひげぽん OSとか作っちゃうかMona-

コードバトンは、誰かが書いたコードをリレーして各人が好きに書き換えて面白いものに変えちゃおう!って感じの主旨のものみたいです。途中でathosさんがClojureで書き換えて、いろいろバトンが渡り現在に至ると。

噂の「英単語を覚えるスクリプト」をClojureで - athosの日記



今回のお題は「英単語を覚えるスクリプト」。前のmanjilabさんはMac OS Xで英単語をしゃべらせるというVery Coolな機能を書いてるわけで、あえて自分なりに一工夫加えるとなるとけっこう考えてしまう。と思いきや、すぐにアイデア浮かびました(やっぱり12時間睡眠すると頭がすっきりするなぁ)。

このスクリプトは英単語の辞書ファイルを読み込んで表示してくれるんですが、肝心の辞書ファイルを作るのが面倒くさい。じゃぁSmart.fmで学習中のアイテムを引っ張ってきて、このスクリプト用の辞書ファイルにする機能つければ便利じゃね?ということで作ってみました。

まず調査! Smart.fmのデベロッパ向けページを見てみると、ユーザ名を指定してその人の学習中アイテムを取得するAPIがありました。

items studied

いろんな形式でデータが取れるみたいですが、今回はXMLを選択。Clojureでは"Sequences"という概念でいろんなデータの連なりを統一して扱えます。XMLには"xml-seq"というやつが使えそう。いろいろ検索して使い方を調べてなんとかAPIのXMLを読み取れるようにしてみました。

自分が手を加えたのはコマンドラインで”−s”オプションと、smartfm-dictのところですね。一通り書いた後になんとかキレイにしようと思ったんですけど、どうかしら。

勢いで受け取っちゃったコードバトンですが、思いのほか面白かったです。だれか次に受け取ってくれる人は、この記事のコメントかTwitterのほうで話しかけてください! ちょっとでも興味があったら勢いでYou受け取っちゃいなYO!



---
(02/15追記)
私のバトンは@omasanoriさんが受け取ってくれました(感謝!)。さらにコメントを英訳するという試みもされてます(スゴイ。
さらにその先は@tnoborioさんに渡り、ついにSwingでGUI化されました(ぉぉ。今のところ受け取り先募集中みたいです。
tnoborio | Blogger Blog: Clojureコードバトン参加中



プログラミングClojure

2010-01-06

さくらインターネットにインストールしたMercurialをバージョンアップ

しばらくぶりにさくらインターネットにインストールしていたMercurialを使おうとしたら、hg stでエラーメッセージ。調べてみたらさくらインターネットではPythonを2.5.2から2.6.2にバージョンアップしたらしい(お知らせ記事)。

Mercurialもver0.9.5をインストールした時からアップしてなかったので、これを機に1.4に入れ替えることにした。
こちらの記事を参考にやったら結構簡単にできました。感謝。

さくらとPythonとMercurial。 - handlerの日記


これでOKだー、と0.9.5のときに作ったレポジトリのCGIにアクセスしてみたらInternal Server Error。どうやらMercurialのhgweb.cgiもバージョンアップされてたらしいので入れ替えることにする。

Mercurialに同梱されているhgweb.cgiというスクリプトをwww用ディレクトリにindex.cgiと改名してコピーする。実行権限を与えておくのを忘れずに。

cd mercurial-1.4
cp ./hgweb.cgi ~/www/hgtest/index.cgi
cd ~/www/hgtest/index.cgi
chmod +x index.cgi


index.cgiをレポジトリに合わせて書き換えていきます。まずPython pathの設定の行のコメントを外して環境に合わせてパスを設定する。

hgweb.cgi(6-7行)
import sys
sys.path.insert(0, "/home/ユーザ名/local/lib/python/site-packages/")


次にUTF-8の設定を有効にする。日本語を表示させたいならこれが必要。

hgweb.cgi(21-22行)
import os
os.environ["HGENCODING"] = "UTF-8"


最後にホームディレクトリに作ったMercurialレポジトリの位置を指定する。私は~/hgrepos以下にレポジトリをまとめているのでこんな感じになった。

hgweb.cgi(27行)
application = hgweb("/home/ユーザ名/hgrepos/レポジトリ名/", "レポジトリの説明")



蛇足。上記の設定をしたのに500 Internal Server Errorになっちゃう場合は以下のところのコメントを外すと詳細なエラーメッセージをブラウザに表示してくれる。私もちょっとハマりかけたのでこれが役に立った。

hgweb.cgi(13-14行)
import cgitb
cgitb.enable()



以上でバージョンアップは完了。hgweb.cgiも進化しているようでページデザインとかが小奇麗になっている気がする。

iPhone Note App File Sync: shortlog


【関連記事】
サルノオボエガキ: Mercurialをサーバにインストールした
2008年1月の記事。2年ぶりのバージョンアップでした。

2010-01-01

謹賀新年

あけましておめでとうございます。今年もこのブログをよろしくお願いします。

元日の今日を私はPHPを勉強しつつ過ごしてました。実験的にTwitterで記録しながらやってみました。まずは1日でPHPの基礎からTropyクローンを作ることまで目標に実施。結果はこれ。なんとか完成。

元旦からわりと疲れましたが、まぁ1年の滑り出しとしては良いかなーと思います。


ではみなさんが良い一年を過ごせますように!