2012-12-10
■ [ruby][mac] MacRubyでアプリ作ってみた
ニコニコのコメントファイルを表示するだけのアプリを作った。
Retina MBP (13inch) に乗り換えてから、にこぷれの動画再生がカクカクすることがあって困っている。 仕方ないのでflvはVLCで再生して、コメントは別の方法で読むことにしたというわけ。
コメントは単純なXMLなので、Nokogiriで適当にパースすればテキストに変換できる。
# coding: utf-8
require 'nokogiri'
xml = Nokogiri::XML(ARGF.read)
start_time = if (thread = xml.at("thread"))
Time.at(thread[:server_time].to_i)
else
first_chat = xml.at("chat")
raise "chat not found" unless first_chat
Time.at(first_chat[:date].to_i)
end
xml.search("chat").each do |chat|
bsp = false
number = chat[:no]
date = Time.at(chat[:date].to_i)
time = date - start_time
min = time / 60
sec = time % 60
text = chat.text
if text =~ %r{\A/press show .* (.*?) @ (.*)}
bsp = true
text = "<#{$2}> #{$1}"
end
printf "%02d:%02d %s%s\n", min, sec, (bsp ? "" : " "), text
end
これをlvで見るのでもいいのだが、なんとなく単独のウィンドウで表示したくなって、MacRubyを使ってみることにした。
MacRubyについては、以下を上から順にやればだいたい雰囲気がわかる。
ファイルの読み込みAPIなどはRubyがそのまま使えるため、そんなに新しいことを覚えなくていいのがありがたい。 Nokogiriなどgemも使えるようだが、XCode上で使ってみたらなぜかNokogiri::XML("")がCレベルのエラーになったので、とりあえず正規表現に逃げてしまった。
今までだったらSinatra+ブラウザとかで実装してたと思うけど、ものによってはMacRuby使ったほうが簡単そう。
■ [javascript] Ember.jsで遊んでみた
Ember.jsはいわゆるJavaScript MVCフレームワークの一つ。 Ember.jsはその中でもわりとヘビーウェイト・高機能なやつで、モデル間やモデル・ビュー間でデータの依存関係を指定して、片方が変化したら従属する方に勝手に変更が反映されるような機構が備わっている。
という話を聞いて最初に思いついたのが、太陽・地球・月が回転するというデモ。月の位置は地球の位置に依存していて、地球が動いたら月も自動的に移動する、というやつ。 で出来たのがこちら。
リポジトリにはファイルがたくさんあるが、ほとんどはstarter kitに入っているもので、編集したのは app.js と index.htmlだけ。
描画はRaphaelJSを使っている。こういう小さいものを作る時にとても便利なライブラリだ。
ページのホスティングはgithub pagesを使っている。 今回のようにgithub pagesがメインのときは、「git push origin master」せずに「git push origin gh-pages」だけすることで、gh-pagesブランチのみにすると分かりやすくていい。
Ember.jsについては、Ember.js Advent Calendar 2012がとても参考になる。