英文難易度の低いニュースを集め
たWebアプリ- Twien

Yokohama.pm #10
@dokechin
自己紹介(dokechin)
• たくさんの人を喜ばす(Web)アプリを作りたい人。
(@masuidriveさんのwri.peのようなもの)
• 勉強会の懇親会費くらいはマネタイズしたいと願ってい
る
自己紹介(dokechin)
Twienとは(What?)
http://twien.dokechin.com
アメリカ、カナダ、イギリス、オーストラリアのニュース
サイトから英文難易度の低い順に、128の記事を厳選表
示するキュレーションサイト
どうやって作った
(How?)
動作の仕組み
URL収集

解析

表示

• ツイッターストリーム
• ニュースサイトのRSS
• コンテンツの英文難易度を算出

• 1日1回集計(128記事を選ぶ)
• Mojolicious+Embedly API
使用CPANモジュール
AnyEvent::TwitterStream

XML::Feed
Data::Deduper

Qudo::Parallel::Manager
HTML::ExtractContent
Lingua::EN::Fathom
Teng
Mojolicious
Teng
ノウハウ1
ロードアベレージ問題
ロードアベレージ問題
• ワーカープロセスを起動後しばらくすると、ロードアベ
レージが上昇。
Devel::NYTProf
• Qudoのワーカープロセス起動時に

• CTRL+Cで停止させたあとに、解析。

• HTML::ExtractContent::extractの処理がブロッキングされていた
• ログをみたところ、HTML::ExtractContentにバイナリ(jpgなど)
を食わせていた
ノウハウ2
Mojoliciousで国際化
Mojolicious::Plugin::I18N
Web.pm
package Twien::Web;
use Mojo::Base 'Mojolicious';
use Mojolicious::Plugin::I18N;
sub startup {
my $self = shift;
$self->plugin(I18N => {namespace => 'Twien::I18N'});
・・・
}
ja.pm
package Twien::I18N::ja;
use base 'Twien::I18N';
use utf8;
our %Lexicon = (
'Title' => 'Twien - 中学3年生以下の難易度の英文ニュー
スを集めたサイト(1日1回更新)',
);
1;
テンプレートファイル
% layout 'bootstrap';
% title l 'Title';
<h1><%=l 'Title' %></h1>
ノウハウ3
アプリ認知の問題
プレスリリースに挑戦
ゆーすけべーさんのブログを参考に、ITメディア20社程度
に電子メールを送る
見に来てくれている

メールを送った日
1社も取り上げられない
• インパクトのUXを提供できていない(客観的評価)
学んだこと、思うこと
・広大なCPANモジュールとPerlのアウトブット文化のお
かげで割と簡単にWebアプリをつくることができる(感
謝)
・Webアプリは作っても、それだけでは、認知されない。
プレスリリースなどは必須。
・99,9%は失敗かもしれないが、ノウハウは残るので
ヒットするまで諦めない(次回開発は加速される)
ご清聴ありがとうござい
ました

英文難易度の低いニュースを集めたWebアプリ twien