-
旧ブログのタグが引き継げていないのでタグを引き継ぐ(なぜか失敗する。DataMapper の挙動怪しい)
-
Production でも SQLite で動いているので変える
- MySQL が妥当なとこだろうけど MongoDB にしてみたら Lokka 用の MongoDB Mapper の開発につながってよさそう。
仕事で勉強したことを趣味グラミングに生かして、趣味グラミングで学んだことを仕事に反映できたらいいと思う。
旧ブログのタグが引き継げていないのでタグを引き継ぐ(なぜか失敗する。DataMapper の挙動怪しい)
Production でも SQLite で動いているので変える
仕事で勉強したことを趣味グラミングに生かして、趣味グラミングで学んだことを仕事に反映できたらいいと思う。
ポータルシットを AutoPagerizable にしました。
pager のない theme だったら単純に theme をいじって次のページへのリンクに rel="next" とか rel="prev" とかつけて、AutoPagerize させたい HTML エレメントに class=" autopagerize_page_element" とか書くだけで AutoPagerizable になるけど、自分で使ってる theme は yayugu/dm-pagination に依存してるので、プラグインをつくってモンキーパッチした。
こんな感じ。
module Lokka
module AutoPagerize
def self.registered(app); end
end
end
module DataMapper
class Pager
private
def link_to(page, contents=nil, rel={})
%(<a href="#{uri_for(page)}" rel="#{rel[:rel]}">#{contents || page}</a>)
end
def previous_link
li 'previous jump', link_to(previous_page, option(:previous_text), {:rel => "prev"}) if previous_page
end
def next_link
li 'next jump', link_to(next_page, option(:next_text), {:rel => "next"}) if next_page
end
end
end
ついでに LDRizable になるように hentry と hfeed の設定もしといた。
Amazon へのリンクを生成する Lokka Plugin を作りました。テストがないのでまだ単独のリポジトリとしては公開していないけど、以下でコードは取得できます。
lokka/public/plugin/lokka-amazon_associate at portalshit · morygonzalez/lokka
いつまで経っても全部テスト書けそうにないのでテストほぼないけどとりあえず単独のリポジトリとして公開しました。
morygonzalez/lokka-amazon_associate
使い方ですが、プラグインを LOKKA_ROOT/public/plugin/ に入れた後、ブラウザで www.example.com/admin/plugins/amazon_associate にアクセスしてご自身の Associate Tag と Access Key ID と Secret Key を入れます。
お使いの Lokka の theme を開いて、本文を表示している部分を associate_link() というヘルパーメソッドに渡します。たとえば entry.haml が
.body
= @entry.body
となっているなら、
.body
= associate_link @entry.body
というようにします。
そんで本文中で以下のように書きます。(P_BLOG の頃に使っていた ISBN/ASIN 変換プラグインと同じように使えるようにしました)
<!-- ISBN=PRODUCTID -->
そのうち画像のサイズとか選べるようにしたいですね。
24時間キャッシュするようにしてるけど、 Earthquake.gem で Growl するプラグインの画像をキャッシュするコードを真似てます。
マジで感謝。

Lokka になくて不便だと感じていたのがスパムコメントの一括削除機能だった。スパムを取得するメソッド、またそれらをまとめて削除するメソッドはあったので、それを呼び出すインターフェースを作ってみた。最初はテストなしで pull request しようとしてたけど Lokka に怒濤のようにテストコードを書いて push している tomykaira さんのブログ記事(lokka コミッタからのお願いをお読みください - tomykaira makes love with codes)を読んで心を入れ替え、本日の Lokkathon でテストコードを書いて pull request してみた。無事 merge して頂きました。
Commit ebd152916587ffd67680d4c034b8ce17956c414c to komagata/lokka - GitHub
P_BLOG の改造とかして地道にコードを公開したりはしてたけど、やっとオープンソースにコミットできた感じがする。もっと頑張っていきたいです。
仕事でunicornを使っているので、ポータルシットをunicornで動かすことにしてみた。
PassengerのおかげでPHP + Apacheでサイトつくるみたいにお気楽にRackなサイトをつくることができたので、ほかのものにはあまり興味なかったんだけど、ものは試しとunicorn導入してみたらLokkaがめっちゃ速く動くようになった。あくまで体感ですが、かなり速いです。まいった。
Lokkaで /article.php?id=数字 なURLへのアクセスをリダイレクトできました。
SinatraではURLの ? 以降のクエリストリングは request.query_string というオブジェクトの中に入るらしい。そういうわけなので次のようなコードでリダイレクト処理してます。
module Lokka
module RedirectArticles
def self.registered(app)
app.get %r{/article\.php} do
unless request.query_string.empty?
/id=(\d+)?/ =~ request.query_string
redirect "/#{$1}", 301
end
end
end
end
end
Sinatra、Lokka越しで初めて本格的に利用させもらってますけど便利ですね。
ポータルシットをLokkaで置き換えました。
Lokkaでリプレースしようと決めたのが2月8日なので(たぶんLokka - portal shit!)、5ヶ月弱要したことになります。
今回こだわったのが、
の4点。
移行スクリプトについては初めてテストファーストで開発してみましたが、なかなか勉強になりました。やたら長いメソッドを書かないように気を付けたり。長いメソッドはテストしにくいですね。あと途中でLokkaの仕様不足が露呈してコードを書き直したりしたんですが、そういうときもきちんとテストを書いているおかげで、一ヶ所変更したらプログラム全体がぶっ壊れるというような事態を避けることができ、大変良かったです。
最初はさくらVPSで運用しようかと思っていましたが、herokuで簡単に使えるのがLokkaの売りなわけですし、heroku使ったことがないのは若干まずいだろと思っていたのでとりあえずherokuで運用することにしました。楽でいいです。失業者が出るレベル。
ただ旧記事(/article.php?id=***)へのアクセスをリダイレクトするつもりで移行スクリプト書いたりしてたんですが、herokuで運用する限りにおいては nginx.conf を編集したりできないのでリダイレクトは実現できなそう。Sinatraで拡張子phpへのアクセスをリダイレクトするという変態的な処理はできないのでしょうか。クエリストリングの扱いがネックになりそう。場合によっちゃ結局さくらVPSで運用するかもです。
加えてherokuは画像のアップロードができないので、画像のアップロード先は別に用意する必要があります。プラグイン使ってAWSをストレージとして利用するとか。JAWS九州の勉強会に二回ほど参加して、Amazonのエバンジェリスト玉川さんの話とか聞いてAWS使わないと来年の今頃は失業してそうな空気を感じ取ったのでそのAWSにも手を出してみたいですね。
Lokka、プラグインが簡単に作れるので本体のロジックにほとんど変更を加えることなくいろいろできて楽しいです。Sinatraベースなので困ったことがあったらSinatraのドキュメントを見ると大体なんとかなりそうな感じがします。リストカット感覚でブログ作ったり消してる人におすすめです。
気がついたらだいぶ時間が経ってる…。2月26日、福岡県コンテンツ・Ruby産業振興センターで行われたスマートフォン開発環境セミナー(仮)に行った。
仕事でスマートフォン開発してないけど、いろいろ面白い話が聞けるかなと思って行ってみた。
発起人のきしださんからiOSとAndroidのスマートフォン開発環境について概要が説明された。スマートフォン向けにアプリケーションを提供するには大まかに二つあって、Objective-CやJavaによるネイティブアプリケーションか、HTML5 + CSS3 + JavaScriptによるウェブアプリケーションか。WebアプリはAppleの審査がないし開発・配布が容易だが(iOS用、Android用にソースを分ける必要がない)、動作が遅いし使いにくい。かといってネイティブアプリにもデメリットはあって、Objective-CやAndroid Javaなどを身につけねばならず、Web系でLLばかりやってる人には取っつきにくい。特にObjective-Cはガベージコレクションがないのでメモリ管理が大変。さらにiOSとAndroidに対応させようとすると両方を学ぶ必要があり、学習コストが高い。ではどうすればいいのか? といった感じでセミナーが始まった。
ゲストスピーカーで最初に話をしたのがTitanium Mobileの開発元、Appceleratorの masuidrive さん。正直なところすっかり洗脳されてしまった。Titanium MobileはiOS・Android両対応のスマートフォン開発環境を提供で、JavaScriptで記述する。位置情報やソーシャルサービスとの連携など、ネイティブアプリにできることのほぼすべてができる。画像操作や高速な処理が必要となるゲーム開発には向かないし、アプリ内課金にいまのところは対応していないが、PC向けWebアプリケーションのモバイルクライアントとしての役割は十分にTitanium Mobileでこなすことができるそう。どうしてもスピードや高度な画像処理が必要なときはそこだけC言語なりJavaなりで記述すればいい。Titanium Mobile上で開発すると、UIのこともあまり考えずに済む。OSごとのUI指針に沿ったUIを自動的に提供してくれるため、ごちゃごちゃぐちゃぐちゃになりがちなAndroidのUIにも共通感・統一感をもたらす。すでに『もぐスナップ』など、実際にTitanium Mobileで作成されたiOSアプリがApp Storeで発売されており、活況を呈している。エトセトラ。
すっかりこのmasuidriveさんのスピーチに魅了されてしまった。
Node.jsなど、嫌がおうにもこれからはJavaScriptの時代がやってくることを印象づけられる勉強会だった。最近はあまりJavaScriptを書いていなかったが、Publickeyとかに書いてあるみたいに、本当にJavaScriptの時代がやってくると感じた。
ブログをリニューアルするにあたり、自分でRailsで簡単なブログを作ろうかとも思ったけど、いろいろ面倒くさいので今のところLokkaを使うつもりでいます。デフォルトデザインがお洒落だし、さくっとデプロイできそうなのもいい。LokkaはSinatraベースなので、気にはなっていたものの何も触れなかったSinatraの勉強にもなるでしょう。開発者の komagata さんのこのブログ記事が印象に残ってる。
何故LokkaはRailsベースじゃないのか - komagata [p0t]
Railsを追いきれる自信が無かったから。Rails文化に引っ張られてアプリが一生完成しない気がしたから。あとアプリとしては問題無いのにベースのRailsのバージョンが低いだけで残念っぽくなってるアプリ(Redmineとか)を見たから。
半年やってみてSinatra面倒クセー!っていっぱいあったけど、(Sinatra本体の)ソースが短いので完全把握できる掌握感は独自のOSS作る上で心強かった。
そう、Railsはバージョンアップが頻繁なため、仕事でRailsを使えないサンデー開発者にはバージョンアップを追いかけるのが大変すぎる。Railsのマイナーアップデートでアプリケーションが依存するgemが動作しなくなりアプリケーション崩壊みたいのを何度か経験した。それが毎週末続くと、「Railsめんどくせぇ」ってなる。 ~/Sites に作りかけのRailsアプリケーションがいくつもあります。
Lokkaを利用して、途中で挫折しないようにブログ移行をしてみようと思います。