A Day in the Life

アドベントカレンダーを電子書籍で読めるサービスを作った

f:id:secondlife:20140111143236j:plain

QiitaAdventarATND のアドベントカレンダーがオフラインの電子書籍で読みたい、と思ったので作った。例えば寿司アドベントカレンダーなら、URLを入れて変換すると、readlistsを裏側で叩いて、こんな感じに生成される。

生成後は readlists の機能を使って、iPhone や iPad に送ったり、dropbox に epub を保存したり、その他いろいろな方法で、様々なデバイスで読むことが出来る(※なお readlists の kindle に送る、は一部文字がおかしくなるのでオススメしない)。また Qiita のアドベントカレンダーは、HTML の要素の関係で必要の無い要素も混じってしまっていて、ちょっとごちゃっとしてしまっているが、これは Qiita チームが HTML の構造を綺麗にしてくれれば解決するので勝手に期待!!1

どうぞご利用下さい。なおこのサービスのソースコードはこちら。

サービスの裏側のこと

当初、readlists-anonymous というライブラリを作っていて、これを公開すればいいや、と思ってたのだけど、CUI じゃほぼ誰も使わなさそうなので Web サービス化した。

作ってみたものの飽きそうなWebアプリはherokuで動かしておく - はこべブログ ♨ でも書かれてるとおり、自分の VPS や自宅サーバに作ると何かのタイミングで動かなくなる未来が見えていたのと、最近の heroku 事情はどうなんだろうと使ってみたかったので、と思って heroku でホスティング。

このサービスは裏で readlists を http 叩いていてネットワークIO待ちが発生し、トータルの処理時間に数十秒かかるんだけど、いちいち worker 化するのもめんどうだよなぁ、と思っていたところ、Web サーバに Thin 使って EventMachine 使えるようにしておくと、EM::defer 使ったバックグランド処理が楽に書ける とのことなのでソレで*1。データは消えても問題ないので、memcached(heroku だと今は MemCachier) plugin に進捗の状態なども入れて管理。簡単ワイワイ

また heroku でどうやれば良いんだろう、という問題解決がオフィシャルサイトのドキュメントにかなり載っているため、ググって stackoverflow 見るより、オフィシャルを見た方が素早く解決して素晴らしい感じ。その他も heroku でハマることは一つも無く、サクサク作って行けた。しかも0円、無料です。

Web のデザイン周りは、Twitter Bootstrap, Bootswatch, Font Awesome とそれを CDN でホスティングしてくれる Bootstrap CDN で。favicon も無いと寂しいので、Icon Generator でとりあえず感あふれる favicon を作った。デザインの抽象化・再利用のエコシステムもできあがっていて、大変便利な時代が来てることは知っていたけど、いざ自分が使ってみると便利さが実感できた。

readlists-anonymous のこと

サービスの裏側で使ってる readlists-anonymous はコマンドラインのツールもついているので、

$ gem install readlists-anonymous
$ readlists-anonymous -t example-title http://example.com/ http://test.example.com/
* Created anynymous readlists
share-url: http://readlists.com/8ddbbc9e/
public-edit-url: http://readlists.com/8ddbbc9e2a52458ea0104afed343cb81/
Add http://example.com/
Add http://test.example.com/
...

みたいに、CUI から自分の好きな URL を readlists に登録して使うことも出来る。どうぞご利用下さい。

*1:この方法だと Web サーバの再起動時に処理が止まってしまうので、実行中断時の処理をキチンと入れないとなんだけど入れて無い

撮影機材iPhone 5s/iPhone 5s back camera 4.12mm f/2.2

関連するかもエントリー

Ruby で並列実行処理を簡単に書く
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティブスレッドの実行は一つのため、マルチコアを生かした処理をかんたんに書くのがいささか面倒だったりしますね。で、 parallel というライブ...
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティ...
Ruby の http ライブラリの通信を表示する http-dump を作った
f:id:secondlife:20140110170809p:plainRuby 上で http を叩いた通信見たい時に、毎回同じ事をやってるので抽象化して http-dump というライブラリを作った。https://github.com/hotchpotch/http-du...
f:id:secondlife:20140110170809p:plainRuby 上で http を叩いた通信見たい時に、毎回同じ事をやっ...
Ruby on Rails が簡単というのはウソ
Ruby on Rails が簡単というのはウソ綺麗に手順を踏んでやる場合には Ruby 初心者は躓くところが多い && 最初の学習コスト高いというのは納得。なおWebエンジニアの場合、こんな感じなのかな。たぶん。Windows だといろいろうまくいかないので Mac 買う or...
Ruby on Rails が簡単というのはウソ綺麗に手順を踏んでやる場合には Ruby 初心者は躓くところが多い && 最初の学習コスト高...