2010年10月30日土曜日

Google App Engineのcronを日付指定で実行

 GAEのcronで「毎月5日の午前4時」のような日付指定を設定したかったのだけど、そういう構文は無いらしい。その代わり、第一月曜とかは可能。なので、

cron:
- description: monthly ranking update
url: /tasks/rank/fetch
schedule: 1st mon,tue,wed,thu,fri,sat,sun of month 04:00
timezone: Asia/Tokyo
のように第1週の7日間に毎日起動して、スクリプトの中で日付を調べて動作する/しないを判断するようにした。
 日本のtimezoneはAsia/Tokyo。JSTとかにするとappcfg.py updateで最後のcorn更新のメッセージで500(server error)を吐く。しかしログに残らず(Admin Logには成功した変更のログしか残らない)、ヒントも無いので原因を見つけにくい。

2010年10月23日土曜日

青空文庫リストDBの再構成

 青空文庫の作家別作品一覧CSVから作家リスト、作品リストを再構成するスクリプトがだいたい出来た。「翻訳者名等」のカラムが曲者で、作者不詳の外国作品等で翻訳者と著者を兼ねる人が居る、編集者もここに入るが翻訳者との区別がつかない等が問題。編集者としての存在は今のところ1作品だけなので無視して、著者と翻訳者しか居ないという前提で矛盾無く扱える手順はできた。
 CSVにはWeb上で公開されている読み仮名などの情報が無いので、各著者、作品毎に青空文庫をスクレイピングして情報を追加した。読み仮名はソートで必要になるし、生誕日がわかれば「今日はどの作家の誕生日」というトピックでお勧め作品のリストアップができる。没年月日も取り込んだけど、これは使わないだろうな。

 スクレイピングは、当初はBeautifulSoupを使っていたが、パースエラーが時々起きる上に、回避手段としてblog等に載っているhtml5libを使う手段が実はhtml5lib側で拒絶されてる事がわかり、lxmlを使う方法に改めた。結果、回りくどいやり方で取り出していた文字列がXPathを使って一発でできるようになり、パースエラー回避以外にもメリットがあった。lxmlはGAE上では使えないようだが、あちらではスクレイピングはしないだろう。

2010年10月20日水曜日

Google App Engine SDKは32bit

64bitのActivePython入れても動かなかったよ。

青空文庫の作品リスト

Amazon以前に青空文庫の作品リストにアクセスできる必要がある。
公開されているzipファイルをgetして展開し、csvをカラムに分解する部分は出来た。

JIS第3水準、第4水準の文字は、csvの中でも作品テキストと同様のマークアップがなされているが、これは後回し。まずはGAEのDatastoreで読み書きできるようにする。

2010年10月18日月曜日

青空文庫とAmazon

 昔、青空文庫のテキストをビューアと一緒にアプリ化して配布するサイトを運営していた事がある。当時、ユーザーから直接あるいはblog等で間接的に指摘されていたのが、「作品を選ぶ判断材料が無い」という事。作家とタイトルがあるだけで、読んでみるまで作品の概要も評判も分からないのである。
 ダウンロード数でソートする程度の事はできていたが、さほどアクセス数の多くないサイトだったので、指標としては当てにならない。おそらく、作家の名前を聞いたことがある程度の理由でダウンロードされた作品がほとんどだろうと思う。

 今、不本意ながら自由に使える時間が倍増したので、この機会に青空文庫タイトルとAmazonをつなぐサービスを作ってみようと思う。ヒントになったのは、今春公開されたカーリルである。カーリルは、図書館横断検索を統一的で使いやすいインターフェースで提供すると同時に、Amazonの持っているイメージやレビューを表示してくれる。自分としては、Amazonのユーザーズレビューが、その本を借りて読むべきか否かを判断する上で大いに役に立っている。カーリル出現以前は、Amazonを見てから図書館のネットサービスで予約するという手順を踏んでいた。これをワンストップの使いやすいインターフェースで実現して見せたカーリルは、私にとって衝撃的だった。

 図書館の蔵書をwebで予約する人は、借りてみるまで自分が求めている本であるかどうかわからない。カーリルがその判断材料をAmazonに求めたように、青空文庫とAmazonとリンクしたサービスがあれば、大量の作品を目の前にして作品選択に迷う人の役に立つのではないかと思う。

2010年4月29日木曜日

FreeBSDからUbuntu

 先週末に自宅サーバのOSをFreeBSDからUbuntu Linux Serverに移行した。このサーバとして使っているFMV LOOX T70Hが素直かと思いきや意外と曲者で、思わぬところで落とし穴があった。

 移行の手順は大まかに、
  1. 母艦のVMwareでLinuxを準備
  2. LOOXのFreeBSDを外付けHDDにバックアップ
  3. MondoRescueでVMwareからLOOXの内蔵HDDへarchive&restore
という3段階で行った。

1. 母艦のVMwareでLinuxを準備

 移行に先立ち、VMware上にUbuntu Serverをインストールしてデータの引越しをある程度進めておいた。rsyncでFreeBSDからLinuxに設定内容やデータをコピー。この段階は割と順調だった。

2. LOOXのFreeBSDを外付けHDDにバックアップ

 移行前のHDDの中身は、使っていなかったHDDを外付けして保存する事にしていた。シングルユーザモードで起動して、sysinstallで外付けHDDにパーティション切ってフォーマットが済んだらdump&restoreである。ところが、最近不安定なFreeBSD 8-STABLEがdump|restoreの最中に突然死してリブート。8.0-RELEASEになってから前触れなくリブートする事が月に数回起きていたが、dump | restoreしたら2回続けて昇天。ちっともstableじゃない8-STABLE。方針変更して8.0-RELEASEのLivefs CDからブートしてみることにした。
 Livefs ISOファイルを焼いたDVDで起動して、Fixitコンソールに入ってdump|resore、のはずだった。ところが、DVDから起動はするのだが、Livefsをマウントする段階でDVDドライブを見失う。DVDドライブが着脱式なのが関係していそうだが、解決法がすぐに見つからなかったので、またまた方針転換。USBメモリにFreeBSD 8.0-RELEASEをインストールして、ここから起動後にdump|restore。なんとか成功。

3. MondoRescueでVMwareからLOOXの内蔵HDDへarchive&restore

 次はLinuxの引越し。VMwareでmondoarchiveを使ってリカバリーISOイメージを作成。sambaで母艦に持ってきてDVDに焼いて、いざLOOXへ。ところが、LOOXのCPUであるPentiumMがPAE無しのため、PAE前提のUbuntu Serverのカーネルでは起動しない。VMwareの上でカーネルをPAE無しに入れ替えて、リカバリーISOイメージ作成、DVD書き込みをやり直した。
 さて、カーネルを入れ替えたおかげでリカバリーDVDで起動はするのだが、いざリカバリーという段階でDVDドライブを見失う。FreeBSDのLivefsと同様の症状らしい。こちらも方針変更して、mondoarchiveのバックアップ先をUSBメモリにしてみたが、こっちはLOOXに挿しても起動の初期段階で死んでしまう。状況はかえって悪くなった。しかたがないので、LOOXの内蔵HDDを外してVMwareに物理ドライブとして接続し、mondoarchiveで作ったリカバリーDVDからリストアした。さすがにVMwareでは素直に動く。
これでやっと引越し完了。HDDをLOOXに戻したら無事に起動した。

 予想していなかったトラブルは、
  1. LOOX T70HではLivefs DVDが役に立たない
  2. PentiumMはPAE無し
  3. mondoarchiveは、動く環境が割と限られる。LVMにしたらリストア失敗。USBでもリストア失敗。
が痛かった。土曜の朝から初めて、終わったのは日曜の朝4時ころ。さすがに力尽きて、最終的な目的だったMotionのセットアップをする前に沈没。
  

2010年3月10日水曜日

AutoItのScriptWriterが雲隠れ



 お気に入りの自動実行アプリ AutoItは最近バージョンアップが活発で、そのせいかインストールされるショートカットがちょっと変。AutoIt用にカスタマイズされたエディタSciTEと一緒にインストールされたScriptWriter(au3record.exe)という操作記録ツールがあるのだが、このショートカットがリンク切れ状態になってしまっている。AutoIt初心者はScriptWriterの吐くスクリプトをベースにして座標やウェイト長を調整するのがお勧めなのだが、ScriptWriterが無くては始まらない。

 SciTEのUpdate Historyによると、
  • Removed au3record from the installer as this is now supplied by the Autoit3 installer.
という事なので、AutoIt本体と一緒にインストールされるらしいのだが、スタートメニューはやはりリンク切れ。どこかにあるはずと思って探したら、Extrasフォルダの下に置いてあった。スタートメニューからは、AutoIt v3⇒Extras⇒Browse ExtrasでExtrasフォルダを開いて、そのまた下のAu3Recordフォルダの中。3月7日にバージョンアップされたのに、まだ治って無かったよ。