P_BLOG 使ってた頃から過去記事タイトルを一覧表示する機能は自分で自分の記事を読み返すときに重宝していて、この機能が欲しかったので作った。過去記事を全部一覧表示すると重いので一年分ずつ表示するようにした。便利。
ソースコードは以下。
ちなみにテストはありません。悪しからず。
P_BLOG 使ってた頃から過去記事タイトルを一覧表示する機能は自分で自分の記事を読み返すときに重宝していて、この機能が欲しかったので作った。過去記事を全部一覧表示すると重いので一年分ずつ表示するようにした。便利。
ソースコードは以下。
ちなみにテストはありません。悪しからず。
Lokka 、データベースはずっと SQLite で使ってたけど仕事で MongoDB を使っているため SQL 力の弱まりを感じてきたので MySQL に変えてみた。SQLite3 から MySQL への移行は意外と面倒くさくて、以下の Redmine の手順を参考にやってみた。
- Strip out PRAGMA lines
- Strip out BEGIN TRANSACTION; lines
- Strip out COMMIT; lines
- Strip out DELETE FROM and INSERT INTO the sqlite_sequence table
- Replace AUTOINCREMENT with AUTO_INCREMENT
- Replace DEFAULT ‘t’ and DEFAULT ‘f’ with DEFAULT ‘1’ and DEFAULT ‘0’
- Replace ,’t’ and ,’f’ with ,’1’ and ,’0’
- Replace “ with ` except in string values (otherwise it replaces all quotes in your text)
↑の通りにやっておおむねうまくいったんだけど、なんか過去の記事を編集して更新すると、updated_at
カラムだけじゃなく created_at
まで更新されてしまうっぽい。SQLite で使ってるときにはそんなことなかったんだけどなぁ。これは問題な気がする。DataMapper のバグかな。土日で余裕があったら調べてみる。
ここにはっつけるコードのシンタックスハイライトには Google Code Prettify をこれまで使ってたんですけど、どうもいまいちでした。有名な SyntaxHighlighter も好きになれなかった。はてなブログのように綺麗なシンタックスハイライトさせたい! ということで作った。
かなりシャレオツな感じにシンタックスハイライトできるようになったと思います。拾ってきた Monokai スタイルの CSS を当てています。
裏側で使っているのは Python の Pygments。JavaScript オンリーで色付けするやつよりもこいつの方が圧倒的に綺麗でした。なのでこのプラグインを使うには Python と Pygments が必要です。Heroku では動くんでしょうか。動作未確認です。
HTML の pre タグのクラス名を lexer として Pygments に渡します。Ruby のコードを書くのであれば以下のようにします。
<pre class="ruby">
<code>
class Book
def off
"all your book is 10 yen"
end
end
</code>
</pre>
JavaScript で pre タグを探してサーバーにコードの中身と pre タグのクラス名を投げると、Pygmentize された HTML が返ってくるようになっております。そいつを JavaScript で拾って pre タグの中身を入れ替え。
当初は
```ruby
class Book
def off
"all your book is 10 yen"
end
end
```
みたいな感じで GitHub 風にしたいと思っていて、以下のような JavaScript を書いていたんですが JavaScript 力が低すぎて断念。
$('.body').each(function() {
var Pygmentize = function(lexar, snippet) {
var result;
$.ajax({
type: 'POST',
url: '/pygmentize',
async: false,
data: {
lexar: lexar,
snippet: snippet
},
}).done(function(data) {
result = data;
});
return result;
}
var entryBody = $(this).text();
entryBody = entryBody.replace(/```(.+?) ([sS]*?)```/g,
function(whole, lexar, snippet) {
return Pygmentize(lexar, snippet);
}
);
$(this).html(entryBody);
})
※Ajax なのに async: false
とかしててイマイチ感ありますね。
とはいえ、汎用性の高い pre タグのクラス名を拾ってくる、という形での実装にしたので、 Markdown でなくても HTML でも Textile でもハイライトできるので結果オーライとします。
ちなみに Kramdown でクラス名を指定したいときは以下のようにするみたいです。
> hogehoge
{: .hoge }
9月1日からシニアエンジニアを拝命しました。シニアエンジニアには 30days/Sqale の刺身☆ブーメランさんやインフラエンジニアの @lamanotrama さんなんかがいて、自分のような職業エンジニア歴の短い人間が同じ肩書きで仕事して良いのかと不安もあるんですけど、技術責任者の mizzy さんには業務内容の他、 Lokka のプラグイン作ったりバグを見つけて pull request 送ったりしてたことを評価して頂き、晴れてシニアエンジニアとなることができました。
ちなみに選考は刺身さんが書いてる前回の様子(シニアエンジニアになりました - 刺身☆ブーメランのブログ / @kyanny’s blog)からさらにラディカルになっていて、応募(pull request で行います)からレビュー、結果の発表まで GitHub のプライベートリポジトリで行われました。ジットハブ、本当に便利ですね。
シニアエンジニアの名前に恥じないよう、多くの人に喜んでもらえるサービスを提供するとともに、「所詮ペパボ」とか言われないよう、技術力を高めていきたいと思います。
im.kayac.com、パスワードか秘密鍵設定してないとスパム通知が沢山来ることが分かったので、パスワード認証と秘密鍵認証に対応させました。
隙あらばメール通知やりたいんだけど、一プラグインの中でメール送信の仕組みを持つの無駄が多そう。Lokka本体もしくは別のプラグインとしてメール送信の仕組みあった方が良さそう。WordPressキラー路線を突き詰めるんだったらお問い合わせフォームみたいのがいるだろうし、だとしたらどうやってもメール送信のことは無視できない。
というか既にメール送信系は誰かが作ってたりして。(もう布団の中なので調べてません)
Lokka はデフォルトだと Akismet が有効になっていてコメントが承認制になっていると思うのですが、なかなかコメントに気がつかないことが多いので、コメントが投稿されたときに im.kayac.com 経由で iPhone に通知が届くようにしました。 im.kayac.com 、初めて使ったけど便利ですね。
足りない機能とかあったらご連絡・ pull request いただけると幸いです。
このサイトはさくらVPSで動いてたんですけど(Herokuにデプロイするとなぜか Application Error
が出るのでHeroku使うのはやめました)、3月にさくらVPSの新プランが発表されて、旧プランからメモリとディスク容量が100GBに増えた新プランに引っ越した(借りかえた)ので、旧プランの契約が終わる5/31までにサイトをどっかに移動させないといけませんでした。新さくらVPSで動かそうかとも思いましたが、EC2のマイクロインスタンスが一年間ただで使えるのでEC2を使ってみることにしました。
EC2とは言えインスタンスを立ち上げたらあとは普通のLinuxなので必要なパッケージをインストールして環境構築しました。Lokkaを bundle install
するときに、このサイトでは必要ない PostgreSQL がないとかでエラーが出るのがだるかったけど、デプロイを Capistrano で自動化していたので思ったよりあっさりと移行できました。よかったよかった。