最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。
今までは WikiPage について
という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。
クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。
JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。
サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。
依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。
JSON 関連では JSON、JSON::Syck、JSON::PC などがあるが今回はインストールのしやすさを考えて pure Perl モジュールとして実装されている JSON を採用することにした。
Visitor クラスで解析木を無名ハッシュ/無名配列のツリーに変換して、JSON モジュールに流しこめば OK。
use JSON; my $json = JSON->new(pretty => 1); my $js = $json->objToJson($tree);
WiKicker のフレームワークにはフォーマット別に出力を切り換える機構があるので、これに JSON を追加して application/json で送るようにして完成。
ちなみに残念ながら JSON 1.07 は Perl 5.005_03 では make test が fail するので、NaneyOrgWiki では使えない。
Google Maps が ID を取得しないでも簡単に自分のサイトに貼れるようになった。 Google Maps で表示される HTML コードをページに埋め込めば、好きな場所の地図を貼ることができる。 これは嬉しい。
早速 nDiki でも貼りたい。
しかし WiKicker という WikiEngine をベースとした DiKicker を使っている nDiki では、現在のところ直接 HTML コードを使えるようにしていないのである。
「HTML タグ付けを許すのは嫌」というスタンスできたのだが、他のサービスを貼るという魅力にはやはり勝てないな。 HTML 直書きを許すのは大局的にはデータ活用性などで好ましくない部分もあるが、各種サービスを活用できないで利用価値が下がるのは本末転倒なので、わかった上で使うということで。
ということで nDiki で HTML タグ付けブロック機能を有効に設定。
ちなみに現行では HTML::Scrubber ベースで、使えるタグ・属性に制限をつけるフィルタしか用意してなかった。これだと Google Maps のコードがそのまま貼れない。 ということで「DiKicker」および「書く人が限定されているような Wiki」での利用を想定した無制限にスルーするフィルタモジュールを新規追加。
これで Google Maps を貼れるようにした。
では早速。
11月9日から「Twitter ステータスを nDiki サイドバーに表示」しているのだが、それで使っているスクリプトにちょっと手を加えて「最近のさえずり」という nDiki ページを自動生成/更新するようにした。
サイドバーは RSS フィードと同じく最近の20件を表示するのに対し、最近のさえずりページには数日分表示するようにした。
ここ最近は Twitter のステータスをとりまとめて、ライフログ的に nDiki に上げているのだが、今までは Twitter Web ページやサイドバーの部分から手作業でコピーして日時やリンクを整形していたので面倒であった。
今回の(30分毎に)自動更新するページは最初から WiKicker / DiKicker 用の Wiki 文法で出力している。 なので、これからはこの自動生成ページから必要なものだけを抜き出して貼り付ければよい。 これで楽ちんになるはず。
ほぼ自分用。自己満足。
パケ・ホーダイを契約してから、MovaTwitter・RTM・モバイル Gmail などで携帯電話を活用するようになった。そんななか、決定打がないのが、ノートアプリケーション。電車の中などの隙間時間に、この nDiki の 下書きなどはケータイでできるようにしたい。
Google ドキュメントが使えればいいが、前年ながらまだiモードでは使えない。 メールベースでやる手もあるが、メモには良いものの再編集を繰り返したいようなものに難がある。
ということで自前でプライベート Wiki を立てそこに書き込んでみることにした。
使う WikiEngine はいつも通り自作の WiKicker。
書き込んだテキスト内のキーワードを nDiki へ自動リンクさせることができるので、パーソナルナレッジベースとして自分にとっては一番便利。書式も同じなので、Wiki に書いた下書きを、そのまま nDiki で使える。
肝心のケータイからの書き込みだが Ajax 等凝った技術を使っていないおかげで、問題なく FOMA 端末(D703i)からiモードで読み書きできた。WiKicker は UTF-8 でページを出力しているが、網側か端末側の処理かは知らないが今のところ問題なし。
なお認証は簡単に Basic 認証で済ますことにした。 安全とは言えないがそれほど重要なデータを置くわけではないしいいかな。 cookie は必要ないし WikiEngine に手を入れなくてもよいので、すぐできるのはコレ。
ユーザ名とパスワード付きのトップページ URL を端末でブックマークしておけば1発でアクセスできる。
これでケータイ(と PC)から使えるプライベート Wiki を設置できたわけだが、なにぶんもともとケータイをサポートしている WikiEngine ではないため、長いページの分割機能などはないのがちょっと不安。PageName で生成される URL が長くなった時の振る舞いもちょっと不安。
そこで Google Mobile Proxy (http://www.google.co.jp/gwt/n) 経由で Wiki を使うことにした。 ページを携帯端末向けに変換してくれる proxy で、Basic 認証もできるしフォーム の POST もできる。
Google Mobile Proxy 経由で見たページ内のリンク先も全て自動的に proxy 経由になるので、 PC 向け Web ページの URL を書いておけばそのまま携帯電話で見ることができる。
安全のためか、比較的短い一定時間立つと認証の再確認画面が表示されてしまうが、ユーザ名とパスワードを入力すれば、セッションは継続される。 テキスト編集に時間がかかってしまうと POST する時にひっかかってしまい認証の再入力がちょっと面倒だが、再認証が通れば POST リクエスト自体は有効で書き込みがロストすることはないようだ。
しばらくはこれで読み書きしてみよう。
ソフトウェア開発の見える化としてソフトウェアかんばんの良さは実感しているのだが、分散開発ではさすがに「情報カードで」というわけにいかず実行しにくい。
今回の分散開発プロジェクトに向けていろいろ考えた結果、Google ドキュメントのスプレッドシートを使ってソフトウェアかんばんを遠隔共有してみようと思う。
TRICHORD を使ってみたいのだけれど予算の問題が。 検討したのは以下。
スプレッドシートだとカードっぽさが薄れるが、共有・同時編集という点では安心して使えるし最大行数的にも OK。 一番運用しやすそうだということでこれでいくことにした。
以下のようにスプレッドシートを作る。
列 | 内容 |
A | カード番号をつける。 |
ストーリーカードは S番号。タスクカードは S番号T番号とする。 | |
B | カード作成日を書く。 |
C | ストーリーカードの時にストーリー名と作成者名をかく。 |
D | タスクカードの時にタスク名と作者名をかく。 |
E | 期日をかく。 |
F | TODO の時に @ とかく。DOING に移行した時は @ を消す。 |
G | DOING の時に @ と開始日、担当者の名前を書く。DONE に移行した時は @ を消す。 |
H | DONE の時に @ と終了日、担当者の名前を書く。 |
I | 備考欄 |
TODO、DOING、DONE 列は1列にまとめることもできるが、ちょっとは「かんばん」っぽくなるかと思って分けることにした。
ほぼ日手帳使用再開したんで、GTD をサポートしているツールを久しぶりに書き出してみる。 今後は以下の体制で。
RHODIA No11 | inbox |
Remember The Milk (RTM) | inbox (携帯電話からメールで入力)、次の行動リスト(リピートものと買い物リスト) |
システム手帳 | いつか/もしかしたらリスト(願望系) |
Gmail | 外出先参照ファイル (KB ラベル) |
Google カレンダー | 時間を決めたスケジュール (マスター) |
ThinkingRock (TR) | inbox、次の行動リスト、プロジェクトリスト、いつか/もしかしたらリスト、tickler file |
ほぼ日手帳 | 時間を決めたスケジュール(コピー)、tickler file、次の行動リスト(Personal なものを ThinkingRock からプリントアウトしたものを挟み込む) |
キャプチャツールとしてのRHODIA No11 は使用開始(記事)以来3年ほど経つが健在。手書き時のキャプチャはこれ。 移動中で片手で入力したい時はケータイから Gmail フィルタ経由で Remember The Milk (RTM) 受信箱へ。
これらは ThinkingRock (TR) の inbox に投入される。PC に向かっている時は直接 TR へ。
基本は TR 上。階層化したプロジェクトの下に直接アクションを書いておけるのが非常に便利。それと次の次の行動を一緒にプロジェクト上に inactive として作成しておくと、前の行動を完了にすると同時に自動的に ASAP にしてくれる機能がある。これのおかげで思いついた先々の次の行動を積んでおけるのでグッド。
Personal なアクション・自宅がコンテキストなアクションについては、PC レスで参照したいので今のところデイリーで TR から PDF エクスポートして A4 で印刷し手帳に挟み込んでいる。これは工夫の余地あり。
ケータイから参照できるようにするため、買い物リストは RTM に。
ルーチンワークなどのリピート系も RTM。
TR に全面的に移す予定。一部まだシステム手帳に残っている。
これも TR に全面的に移す予定。一部まだシステム手帳に残っている。
Google カレンダーがマスター。
という点で紙ベースより便利。
アポイントメント等の重要項目は、手書きでほぼ日手帳と同期する。 これはミーティングや自宅など PC レスでさっと確認できるようにしたいため。 同期の手間の削減と、同期漏れをないようにするのが課題。
Someday/Maybe については、指定した期日に再度通知させたい場合はやはり TR に入れておくことにしよう。 ただ、行きたい場所リストや願望的なリストは紙で眺めた方がよさそうなので、これはしばらくシステム手帳に。
これはそれぞれ適宜。 システム手帳に書いておいてもほとんど参照しなかった。 ケータイ用プライベート Wiki (記事)も結局使わなくなった。 TR の Reference も多分使わない。
外出先で参照する可能性のあるメモは、Gmail 上に KB (knowledge base の意で) ラベルをつけて置くようにしている。 ケータイから参照するのにはまずはこれで。
tickler については今までほぼ日手帳/ダイアリーのリマインドしたい日にメモしておくことで実現していた。これは継続。
TR の Someday/Maybe からの Tickle on も確実に inbox に入れてくれるという点で良さそげなので、一部使ってみることにする。
などの数年スパンで固定的あるいは逆に差し替えがおきるものについては、綴じ手帳だと融通がきかないのでやはりシステム手帳を潰せないんだよなあ。 これも今後の課題。
naney.org メールサーバの移転に次いで、Web サーバの移転作業。
現行 Web サーバと Unison でファイル同期している Web コンテンツを、さくらのレンタルサーバへ Unison でファイル同期。
nDiki 用に DiKicker (WiKicker) を make install。
%bash $perl -MCPAN -e mkmyconfig $perl -MCPAN -e shell o conf makepl_arg PREFIX=/home/naney/local/WiKicker o conf mbuildpl_arg --install_base=/home/naney/local/WiKicker o conf commit notest install CGI::SpeedyCGI $tar zxvf WiKicker-0.420.tar.gz $cd WiKicker-0.420 $export PERL5LIB=$HOME/local/WiKicker/lib/perl5/site_perl/5.8.9 $perl Makefile.PL PREFIX=$HOME/local/WiKicker $make $make install
以前きっちり Module::Install で Makefile.PL を作っておいたおかげで、比較的スムーズにインストールできた(自画自賛)。
ちょっとはまったところは CGI::SpeedyCGI の make test を実行する(される)と SSH 接続がサーバ側から切られてしまうという現象にあったところ。 テスト用に大量にスクリプトが起動されるの検出して自動的に kick されたのだろうか。
さくらのレンタルサーバでは .htaccess Options が使えないようなので削除。 ExecCGI や MultiViews が有効になっているようなので問題なし。
Perl 5.005_03 用に書いてあったスクリプトについて、Perl 5.8.9 で文字化けしないように utf8 まわりを修正。
1時間毎に実行したい処理を列挙するシェルスクリプトを1つ作って、コントロールパネルから1時間毎に実行するように設定。
現行サーバでは任意の crontab を設定できたので、1時間毎はちょっと物足りない。 おいおい負荷にならない範囲で、外部から定期的に HTTP アクセスして処理を定期的に実行できるようにもするかな。
まだ動いていないスクリプトもあるけれど(大きいところだと NaneyOrgWiki (Wiki))現行サーバの解約日もせまっているので、サーバ移転させてしまうことに。
VALUE-DOMAIN で DNS サーバ設定を変更し www.naney.org でさくらのレンタルサーバにアクセスできるように A レコードを変更。
今のところ特に重い等もなく順調。 現行サーバでは深夜非常に重くなる時間帯があったのだが、それが無くなるのが嬉しい。 また容量が100MB*1から10GB*2になったので心理的にセーブしなくて良くなった。
年内に移行できて良かった良かった。
[ さくらのレンタルサーバ プレミアム ]
先日セットアップして走らせている Redmine、基本的にはうまく機能しているのだが Wiki を編集した後に[保存]ボタンを押した場合や、ガントチャートで表示する月数を変えて[適用]を押した場合、Web ブラウザ上でページが真っ白になってしまう現象に遭遇している。
なんでかなあと、script/server を再起動したところうまく動くようになった。良かった良かった。 Ctrl+Z して bg して SSH 抜けて mlterm 落としたら再発。 ああバックグランド実行にしたのが良くなかったのかな。
/usr/local/redmine/bin/ruby script/server webrick -d -e production
と -d でデーモンとして起動するようにしたら、この変な現象は起きなくなった。 めでたしめでたし。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。