| @技術/プログラミング

Jekyllを使いだしてから気がつくと一年経ってました。いろいろ便利に使えており気に入っております。

PygmentでコードをシンタックスハイライトしたりLSIで関連記事表示したりと結構手を入れてはいたんだけど、いわゆる世間の一般のブログにあるようなカテゴリ一覧表示機能と、カテゴリごとの記事アーカイブ機能がなくて、それを若干不便に思っておりました。

ググってみたところ、プログラマー向けなブログツールなだけあっていろんな方法が出てきました。以下そのまとめ。

カテゴリ一覧

JekyllのLiquid (テンプレート言語) には {{ "{{ sites.categories " }}}} みたいタグがあるんだけど、こいつが意図したとおりに動かない。普通のRuby使いの感覚からすると site.categories ってカテゴリを沢山持った配列になってそうな気がするんだけどこれが違う。

<ul>
{{ "{{ for category in sites.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

↑みたいな感じのコード書くと何も表示されない。 site.categoires はHashで、{ "カテゴリ名" => カテゴリ内の記事一覧 } みたいな構造になってる。LiquidでHashのキーを取りだす方法が分からず、どうにもこうにもいかなかったので他の人が作っているプラグインを利用することにした。

↑のファイルを JEKYLL_ROOT/_plugins にコピーする。(_plugins というディレクトリがなければ作る)。そんでテンプレートを変更する。↑のやつを↓みたいにする。

<ul>
{{ "{{ for category in sites.iterable.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

2行目のところが変更点です。これでカテゴリ一覧表示ができるようになる。

カテゴリごとの記事一覧

カテゴリごとの記事一覧を表示する方法だけど、こういうのを発見した。

ここの generate_categories.rb を使えばカテゴリ内の記事一覧を作成できる。こんな感じ。

これもさっきのと同じように、JEKYLL_ROOT/_plugins にファイルをコピーする。そんでLiquidテンプレートを書き換えるんだけど詳細はプラグイン内の記事をご確認くだしあ。

| @WWW

IMG_0109

先々週になるけど、福岡に新しくできた アラタナ研究所 のレセプションに行った。研究所の所長であらせられる @rytich さんに招待してもらった。

なんと同研究所には熊本にいた頃からお会いしてみたいと思っていた @shunsuk さんもお勤めであり、お目にかかってご挨拶することができた。

@shunsuk さんのブログ「 で写真が見られるけど、パーティションが全面ホワイトボードのオフィスはとてもかっちょよい。ホワイトボードに↑の落書きを施した後、他の人が書いたのを見てたらウェブアプリケーションのスキーマを書いたとおぼしき走り書きが目にとまった。前の職場で一人でプログラム書いてた頃が無性に懐かしくなった。ああでもない、こうでもないと考えながら、作っては壊し、作っては壊しを繰り返してプログラムを書いていくのがとても楽しかったことを思い出した。

レセプションの最後に若くてイケメンな株式会社アラタナの濱渦社長が「九州から面白いサービスを作っていきましょう」とスピーチしていたけど、すごく楽しそうで羨ましかったし、自分もなんかしなきゃと焦ってしまった。

何はともあれアラタナ研究所オープンおめでとうございます。

| @技術/プログラミング

ポータルシットをLokkaに置き換えたくていろいろやってる。ポータルシットの過去記事をYAMLでエクスポートし、それをLokkaのDBに取り込む作業をやってる。TDD BootCampに参加したので、テストファーストしながらの作業。RSpecでテストコードを書き、ログが正しくインポートできることを確認する。テスト終了時 after(:all) フックで、取り込んだログを削除してる。コードはこんな感じ。ちなみにLokkaはDataMapperをORMに採用してるので以下はDataMapperでの話。

after(:all) do
  Category.all.destroy
  Entry.all.destroy
end

しかしこれでは AUTO INCREMENT の値がリセットされず、テストを繰り返す度に AUTO INCREMENT の値が増えていってうざかった。

DataMapperの機能で AUTO INCREMENT 値をリセットするのってないのかなと5秒くらい探してみたけど見つからなかったので、SQLを直接実行する方法を採用した。

ちなみにRDBMSに採用してるのはSQLite3。SQLiteでは UPDTE sqlite_sequence SET seq=0 WHERE name='テーブル名'; みたいなコードで AUTO INCREMENT 値を任意の値に設定できるみたい。

最終的な after(:all) フックはこんな感じ。

  after(:all) do
    Category.all.destroy
    Entry.all.destroy
    Entry.repository.adapter.execute('update sqlite_sequence set seq=0 where name="entries";')
  end

テスト実行後にはすべてのデータがデータベースから削除されて、AUTO INCREMENT の値もリセットされる。人畜無害なテストコード万歳。

| @Mac/iPhone

お小遣い管理にはCha-Chingを使っていたんだけど、Mac版はずーっとベータ版のままで正式版が公開されず、iPhone版もMac版とは完全な同期を取れないという致命的な欠陥があるため(PayeeとTransaction Titleがごちゃ混ぜになるとか)、iComptaというソフトを使ってみることにした。

iCompta

二週間くらい試用してみたけどわりといい感じだったのでiPhone版とMac版を買ってみた。

Cha-Chingは画面がMac Likeで、iSightで写真を撮ってレシートの内容を保存とか、お金の動きを入力するのが楽しくなる仕掛けがたくさんあった。しかしある期間でいくら収入があっていくら支出したのかが一目で確認できなかった。グラフ表示とかもできない。とりあえず赤字になってないことくらいは分かるんだけど、収入と支出の割合みたいのが分からないので、「今月使いすぎたかもなー」というような使い方ができなかった。

それに対してiComptaはお金の動きがある度にその時点での財産を表示してくれるし、チャートや円グラフも表示してくれて、「どのカテゴリーにいくら使ったか」がわかりやすい。例えば一ヶ月にどれだけ「外食」に金を費やしたかとか、ガソリンにいくら使ったかとか。

またTransactionごとにそのときの残高を表示してくれるので、お金の動きを追いやすい。

正直、見た目のMacっぽさとか入力する気を起こさせるという点ではCha-Chingの方が優れていると思うけど(iComptaは会計ソフト度満点というか、グラフの描画とかがWindowsのアプリケーションっぽい)、いまんところ確実にiPhoneとシンクできてデータを欠損しないのでしばらくこっちを使ってみることにします。

| @散財

しょうみな話、iPadとか友達が沢山いてみんなで遊んだときの写真とかいま撮ったばかりの写真を友達に見せる機会がたくさんある人のためのデバイスで、休みの日は一人で映画館にこもって一日で三本映画見たり、Twitter見ながら松屋でフレッシュトマトカレー食べたり、写真撮るにしても人物写真とか皆無で朽ち果てた建物とかの写真ばかり撮ってる僕には必要ないデバイスですよね。、

| @技術/プログラミング

CakePHP、ちょこっと使ってみるだけのつもりだったんだけど、結構深くつきあってしまった。三つほどCakePHPでサイトつくりました。一つは社内用のウェブアプリケーションで、一つはまだ正式リリース前のものだけど、最後の一個はページビュー5000/日くらいあるサイトで実際に動いてます。ついこの前まで無職だったのに。スゲー。

PHPで素人がつくったサイトは危ないみたいな記事がこの前(というか定期的に)はてブでホッテントリに入ってた(る)けど、セキュリティのこととか分からない初心者こそCakePHPとかでサイトつくった方が楽だし安全だと思った。難しいことはフレームワークがやってくれるので。Bakeすればものの数分でウェブアプリケーションが出来てしまう。もちろんどんなフレームワークにも脆弱性がないわけじゃないだろうから100%安心というわけじゃないけど、少なくとも素人が自分でなんかやるよりも安全だと感じる。

とはいえ、フレームワークで万事オッケーなわけでもなかったりする。ちょこちょこっとカスタマイズするみたいのがフレームワークは難しい。特にCakePHPは規約がすごく重視されるから、データベースへのクエリでちょっと変わったことしようとすると結構難しくなる。というかはまる。サイト内検索をつくろうとして結構苦労した。土台が出来上がるまでは速いんだけど、そこからブラッシュアップさせていくときに結構停滞してしまう。それでも自分で一からつくるよりはかなり迅速に作れるんだけど、規約に縛られるのが窮屈に感じることもないではないですね。

で、タイトルの件なんだけど、真面目にエロサイトを作ってみた【プログラマ編】|ASTRODEO という記事がおもしろかった。はてブで1200以上ブックマークされますが1ゲットは僕です。すごいでしょ。いや僕は全然すごくないですね。書いてある内容がすごい。

確かにエロとかスクレイピングとかまぁきわどい内容ではありますが、僕はCakePHPでこんだけのことをやったということに素直に驚いた。

例えばCakePHPには hasAndBelongsToMany というのがある。ブログ記事があったとして、これが一つのカテゴリーを持つ場合は、 Post テーブルと Category テーブルを結びつけてやるだけでOKなんだけど( Post は一つの Category に所属し、 Category は複数の Post を持つ)、 Tag のような複数持てるし複数に所属する概念のモデルが存在する場合、 hasAndBelongsToMany じゃないとデータの整合性というか組み合わせをきちんと保つことが出来ない。

で、自分はこういうのの組み合わせは手が空いてる人に頼んで人力でやってもらったんだけど、このエロサイトの場合は、動画と動画の関連性の判定をプログラムにやらせてる。150件そこそこのデータの整合性を保つのも大変なのに、10000件とかそれ以上のデータを、しかも自動処理で関連づけるってまじすげーと思った次第です。

エロコンテンツなのに年齢確認がないとか著作権がらみの問題とかスクレイピングでよそのサイトに負荷かけるとかいろいろあるけど、僕は率直にこういうサイトをつくったのはスゲーなと思いました。こんなことまで出来るんだー、っていう素直な驚き。読んでて楽しかったしわくわくした。

今後もCakePHPを使い続ける分からんけど、自分もなんかおもしろいもんつくってみたいなーってすごく触発されました。

蛇足

はてブのコメント欄に「技術的には大したことない」みたいなコメント書いてる人が何人かいるけど、ほんとに大したことないんですかね。データベースを保存用と参照用で分けたり、スクレイピングしてきたデータの保存処理とか結構難しいと思うんだけど。これをすごいって感じるのはピヨピヨプログラマーだけなのかな?

| @音楽

12月27日、Kenny Dopeが熊本でDJやったので聞いてきました。写真とかは撮っちゃダメだって張り紙してあったので撮ってない。

Kenny Dopeは7inchのドーナツ盤(Mazel - Midnight ThemeのRemix)を一枚持ってるだけでMasters At Workの曲も全然聞いたことなかったんだけど、ただ外タレの大物だっていうことだけは知ってて、野次馬根性丸出しで出かけてきました。

クラブとかもう5年くらい行ってないしあんま知ってる曲かかんないだろうなーと思ってたけど、低音ズンドコなHip Hopの合間にTighten UpとかAin’t No Moutain High EnoughとかThat’s What Friends Are Forみたいな激烈盛り上がるソウルのクラシックを、オリジナル盤ではないマイナー盤でかけてくれて楽しかったです。時代が変わっても、場所が変わっても、やっぱり70年代とか80年代の音楽には良いものが多かったってことでしょう。ソウルとか聞かなそうなギャルもAin’t No Moutain High Enoughで大ハッスルしてました。

Kenny Dope御大はブース前の客が手を伸ばしてくるのでうざそうにしてて終始不機嫌ぽかったですが、ここぞという曲のときには巨体を揺らして踊ってました。あとDJは全員MacBook持ち込んでて、TraktorみたいなのでDJやってた。交代するときに大事そうにMacBook持って現れた御大はなかなかかわいかったです。

実家に帰ってきてからクラブ行ったの初めてだったのですが、車で来てるので酒は飲めないし爆音で難聴は悪化したっぽいし帰りの運転は死ぬほど眠くてふらふら運転だったし、しばらくクラブは良いかなって思いました。とはいえたまには良いもんですね。おしゃれな人のファッションを眺めたり踊ってる女の子を眺めたりと楽しかったです。