Introduction to Favmemo for Immature Engineers

Introduction to Favmemo
 for Immature Engineers
                 2012/09/23

                  @a_bicky
自己紹介
• Takeshi Arabiki
   ‣   社会人2年目の底辺 Web エンジニア

   ‣ Twitter & はてな: @a_bicky & id:a_bicky

• 興味など
  機械学習、自然言語処理、R

• ブログ
  あらびき日記 http://d.hatena.ne.jp/a_bicky/
Favmemo のこれまで
背景
•   きっかけ(2010年9月末)
    twilog の fav 版が欲しい!存在しないなら自分で作ろう!!

•   モチベーション
    1. Web 開発に必要な知識の習得
    2. 機械学習のサービス適用(全然やれてない)
    3. 社会貢献
    4. お小遣い稼ぎ(あわよくば)
略歴
•   2010年10月31日: リリース(最初は年間100円の Domainking のレンタルサーバ)
    Twitter のお気に入りをタグで管理するサービス Favmemo をリリースしました! - あらびき日記


•   2010年11月2日: @ropross さんにより類似サービス favolog リリース
    “類似” と表現すると失礼?とりあえず存在価値が一気に低下・・・


•   2010年11月9日: MASHUP AWARDS 6 に応募
    Favmemo の機能を追加して MASHUP AWARDS 6 に応募してみた - あらびき日記


•   2011年12月28日: リニューアル(10月の時点でさくら VPS に移行)
    Favmemoリニューアルしました!! - あらびき日記


•   2012年8月末: Twitter で話題になりユーザ数が6倍程度に増加
    cf. http://favstar.fm/users/daaahlia/status/240459122556936192
    リニューアル時にデモページを設けたのが良かったかも。腐女子層が多い?
現状
•   登録ユーザ数約3,250(2012年9月22日現在)




            ※ PV には XMLHttpRequest によるリクエストも含む
         (タグの更新リクエストは含めない方が PV としては良いかも)
Favmemo の特徴
構成
•   LAMP on さくら VPS
    Linux のディストリビューションは Debian
    P は PHP(Dotdeb リポジトリのものをインストール)
    さくら VPS 移行時に nginx を使ってみようとしたけど Evernote との連携部
    分で動かない部分があったので見送り

•   規模の割には比較的 JavaScript 多め(但し発狂しそうな程汚いコード)
    ページ遷移が大嫌いなので・・・
    jQuery を使用
    UI 周りはそのうち Twitter Bootstrap とか使いたい
ページ遷移がない
 一度ログインしてしまえば基本的にページ遷移がない




↑ index.php の内容はこれだけ
1. XHR で /updatedb.php にリクエストを送り、新しいツイートをデータベースに取り込む
※ Chunked transfer encoding によってツイートの取り込み状況を表示
cf. jQueryの$.ajaxで通信途中のresponseTextを取得する - あらびき日記
2. XHR で /get_favs.php からツイートやタグ一覧の情報を取得してページの内容を書き換える
※ 1回目の SELECT 文には何秒もかかっているのでスキーマや設定などを見直す必要あり
ページ遷移がない!
更新部分のみ XHR で取得




    XHR で /get_favs.php の結果を取得し、この部分のみを更新する
    ・AutoPager 機能では下にツイート(li 要素)を追加
    ・検索やタグの選択によって表示項目が変わる場合は innerHTML を書き換える
    (jQuery history プラグインによって履歴を管理しているので「戻る」も可能)
ページ遷移がない!!
「設定」などはポップアップウィンドウを表示




ポップアップウィンドウの内容は pages.min.js で管理(通信が発生しないので高速に開ける)
※ JavaScript に HTML をガンガン記述していて気持ち悪いのでもっと良い方法を考えたい
(せめて MVC な感じに書き換えたい)
ページ遷移がない!!!
タグの編集結果などは「タグ一覧」にリアルタイムに反映




  JavaScript で数を増やしたり順番を変えたり(地味に大変)
  ところで、運営者自身タグ付けしてないのがバレバレ…


  今はタグ名を base64 エンコードなどによって ID として有効な文字に変換したものを ID
  として付与し、変更のあったタグの li 要素を ID で取得して数を書き換えている
  ※ タグ名をキー、ツイートの数を値とした連想配列に情報を保持しておいて、毎回タグ一覧を一新
  する方が楽でいいかもしれない
Evernote 連携
MASHUP AWARDS 6 に応募するためだけに導入
•     Evernote にエクスポートするためだけに Favmemo を利用しているユーザもいるらしい

•     Evernote との OAuth 認証には window.open で新しいウィンドウを表示
      ※ 以前は iframe を使っていたけど Evernote 側がクリックジャッキング対策としてヘッダに
      X-Frame-Options: SAMEORIGIN を付けるようになって使えなくなった
      認証が完了したら以下のような感じの完了ページを出すことで再度 Evernote へのエクスポートを
      試みてウィンドウを閉じる


    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript">
        window.opener.retry();
        window.close();
    </script>
    </head>
    </html>
マルチアカウント対応
要望があったので導入(2012年7月末)

•   ログインしているアカウント情報(Twitter ID と screen_name)を cookie で管理
    別アカウントで OAuth 認証を済ませた後に cookie にアカウント情報を保存することで、
    別タブで開いている Favmemo のアカウント情報も更新される




    アカウント情報を JSON 形式で保存




•   今まで PHP で $_SESSION としていた部分を $SESSION (= $_SESSION[$user_id]) に変える
    程度の改修(リクエストの際 QueryString に screen_name を付与してアカウントを判別)
開発環境とか
開発環境とか
•   Mac の VMware Fusion にサーバとほぼ同じ構成の Debian をインストール
    /etc/hosts に 172.16.199.5	

 favmemo.local みたいに記述して favmemo.local でアクセスでき
    るようにしている。Twitter のコールバック URL も favmemo.local にしてある。


•   JavaScript のデバッグは Firebug + FirePHP
    今は Chrome のディベロッパーツールの方が秀逸な気がするので FirePHP 相当のものを探
    し中(webug は使い物にならなかった)


•   画像の作成は Inkscape
    最初は Ubuntu で作成したので Mac で開くとフォントの違いから表示が乱れる。設定を
    いじるのも面倒なので今も Ubuntu の Inkscape で編集。そろそろ Mac で編集したい。
    Ajax で使う「読み込み中」を意味する画像の作成は次のサイトがオススメ
    Preloaders.net - AJAX loading GIF and APNG spinners, bars and 3D animations generator

•   エディタは Emacs
    WebStorm とか試してみたいかも
動作確認とか
•   Mac の Safari, Firefox, Chrome, Opera で確認
    古いバージョンでは確認しない。IE は VMware Fusion にインストールしてある Windows
    の IE9 で IE7 と IE8 も確認(開発者ツールのドキュメントモードを使用)。IE6 はもう確
    認していないから悲惨なことになっていそう。


•   テストは全然できてない!
    ユニットテストという言葉すら知らない時に開発したので PHP 側のテストはほとんどな
    い(一部 PHPUnit を使用)。
    JavaScript のユニットテストは皆無(Jasmine とか使おうかと…)。
    リニューアル時に結合テストのため Selenium (WebDriver) を使おうとしたけど、エミュ
    レートできない動作があって断念(調査不足?)
Favmemo のこれから
主なTODO
•   フレームワークの使用
    FulePHP か Ruby on Rails を使いたい(メンテナンス性の向上と後学のため)
    同時にデプロイ方法の変更とかテストの導入とか。これが終わったらβ版に昇格?


•   自動ログイン機能の実装

•   モバイル対応
    ブラウザに対応させるか、Titanium を使ってアプリをリリース


•   検索ボックスのクエリ補完・推薦
    Trie の実装とか。自然言語処理の勉強として


•   広告の最適化
    amazon の広告を自然言語処理・機械学習的な要素を取り入れて CTR 向上したらおもし
    ろそう(お金   けが目的じゃないので自前でアルゴリズムを考えたい)
まとめ
まとめになってないけど…

•   Favmemo は自己満的サービスだけど最近ユーザが増えた

•   ページ遷移は嫌い

•   フレームワークを使って大幅にリファクタリングしたい

•   そのうち機械学習のサービス適用とかしてみたい

•   まだいろいろやりたいことはあるのでゆるゆると続けていきたい
1 of 21

Recommended

とある Perl Monger の働き方 by
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
15.5K views46 slides
Mojolicious::Liteを使ってみよう by
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようcharsbar
4.4K views11 slides
WordPress中級者への道!テンプレートタグはどう動くのか!? by
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?Shinichi Nishikawa
5.3K views53 slides
Mojolicious+redisでチャットを作った by
Mojolicious+redisでチャットを作ったMojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったTetsuya Tatsumi
3.8K views33 slides
4時間まったりWordPressテーマ作成講座 by
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座Shinichi Nishikawa
4.3K views66 slides
え?まだMAMPで消耗してんの? by
え?まだMAMPで消耗してんの?え?まだMAMPで消耗してんの?
え?まだMAMPで消耗してんの?Takayuki Miyauchi
7.4K views19 slides

More Related Content

What's hot

「Webサービスのつくり方」 のつくり方 by
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方Yusuke Wada
8.2K views63 slides
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」 by
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」タカシ キタジマ
10.4K views27 slides
第3回WordPress Cafe プラグイン紹介 by
第3回WordPress Cafe プラグイン紹介第3回WordPress Cafe プラグイン紹介
第3回WordPress Cafe プラグイン紹介foom_in
21.1K views47 slides
Cpi mega mix by
Cpi mega mixCpi mega mix
Cpi mega mixRyuji Egashira
1.7K views47 slides
WP-CLI (WordBench Sendai 20140628) by
WP-CLI (WordBench Sendai 20140628)WP-CLI (WordBench Sendai 20140628)
WP-CLI (WordBench Sendai 20140628)Kazue Igarashi
6.4K views24 slides
VCCW + Wordmove でデプロイが劇的に簡単になった話 by
VCCW + Wordmove でデプロイが劇的に簡単になった話VCCW + Wordmove でデプロイが劇的に簡単になった話
VCCW + Wordmove でデプロイが劇的に簡単になった話タカシ キタジマ
7.1K views34 slides

What's hot(20)

「Webサービスのつくり方」 のつくり方 by Yusuke Wada
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
Yusuke Wada8.2K views
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」 by タカシ キタジマ
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
Word bench長崎01「オリジナルテーマで学ぶwordpressの基本」
第3回WordPress Cafe プラグイン紹介 by foom_in
第3回WordPress Cafe プラグイン紹介第3回WordPress Cafe プラグイン紹介
第3回WordPress Cafe プラグイン紹介
foom_in21.1K views
WP-CLI (WordBench Sendai 20140628) by Kazue Igarashi
WP-CLI (WordBench Sendai 20140628)WP-CLI (WordBench Sendai 20140628)
WP-CLI (WordBench Sendai 20140628)
Kazue Igarashi6.4K views
VCCW + Wordmove でデプロイが劇的に簡単になった話 by タカシ キタジマ
VCCW + Wordmove でデプロイが劇的に簡単になった話VCCW + Wordmove でデプロイが劇的に簡単になった話
VCCW + Wordmove でデプロイが劇的に簡単になった話
Mojoliciousでつくる! Webアプリ入門 by Yusuke Wada
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
Yusuke Wada22.2K views
Vagrantと網元で開発環境を作ってみよう by Takuma Morikawa
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみよう
Takuma Morikawa4.3K views
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜 by Yuji Nojima
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
Yuji Nojima68.4K views
初心者でもすぐできる Wordpress バックアップのススメ by Seiichiro Mishiba
初心者でもすぐできる Wordpress バックアップのススメ初心者でもすぐできる Wordpress バックアップのススメ
初心者でもすぐできる Wordpress バックアップのススメ
Seiichiro Mishiba7.4K views
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0 by Yuki Okamoto
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
ノンプログラマーのためのWordPressプラグイン開発超入門v1.0
Yuki Okamoto7.1K views
WordPressでウェブサービスを作ろう! #wbNagoya by Shinichi Nishikawa
WordPressでウェブサービスを作ろう! #wbNagoyaWordPressでウェブサービスを作ろう! #wbNagoya
WordPressでウェブサービスを作ろう! #wbNagoya
Shinichi Nishikawa48K views
WordPressってブログじゃないの? by tokumotonahoko
WordPressってブログじゃないの?WordPressってブログじゃないの?
WordPressってブログじゃないの?
tokumotonahoko3.4K views
レスポンシブ・イメージのWordPressへの実装と4.4 by Toru Miki
レスポンシブ・イメージのWordPressへの実装と4.4レスポンシブ・イメージのWordPressへの実装と4.4
レスポンシブ・イメージのWordPressへの実装と4.4
Toru Miki16.5K views
WP-CLIとWordPress公式ディレクトリを活用した爆速サイト構築術 ーインストールからデザイン、ページ作成までを10分でー by タカシ キタジマ
WP-CLIとWordPress公式ディレクトリを活用した爆速サイト構築術 ーインストールからデザイン、ページ作成までを10分でーWP-CLIとWordPress公式ディレクトリを活用した爆速サイト構築術 ーインストールからデザイン、ページ作成までを10分でー
WP-CLIとWordPress公式ディレクトリを活用した爆速サイト構築術 ーインストールからデザイン、ページ作成までを10分でー
今から始めよう!WordPressで作る女子ウケ★スマホサイト by rie05
今から始めよう!WordPressで作る女子ウケ★スマホサイト今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト
rie053.7K views
Word camposaka imaigo_slideshare by Go Imai
Word camposaka imaigo_slideshareWord camposaka imaigo_slideshare
Word camposaka imaigo_slideshare
Go Imai2K views
JS と Canvas で作るシューティングゲーム by sairoutine
JS と Canvas で作るシューティングゲームJS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine2.5K views
WordBench京都版 _sハンズオン by Hidetaka Okamoto
WordBench京都版 _sハンズオンWordBench京都版 _sハンズオン
WordBench京都版 _sハンズオン
Hidetaka Okamoto2.3K views

Similar to Introduction to Favmemo for Immature Engineers

あにみた!(PHPカンファレンス用資料) by
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)Hiroyuki Ishiyama
3.4K views44 slides
Practical migration from JSP to Thymeleaf by
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Toshiki Iga
1.1K views70 slides
⑮jQueryをおぼえよう!その1 by
⑮jQueryをおぼえよう!その1⑮jQueryをおぼえよう!その1
⑮jQueryをおぼえよう!その1Nishida Kansuke
11.2K views66 slides
Voicepic@FukuiMASeminar by
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
1.4K views33 slides
はじめませんか? Jetpack by
はじめませんか? Jetpackはじめませんか? Jetpack
はじめませんか? JetpackYutaka Hoshino
1.2K views51 slides
20090704rubyist九州 by
20090704rubyist九州20090704rubyist九州
20090704rubyist九州koki_h
1.2K views24 slides

Similar to Introduction to Favmemo for Immature Engineers(20)

あにみた!(PHPカンファレンス用資料) by Hiroyuki Ishiyama
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)
Hiroyuki Ishiyama3.4K views
Practical migration from JSP to Thymeleaf by Toshiki Iga
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
Toshiki Iga1.1K views
⑮jQueryをおぼえよう!その1 by Nishida Kansuke
⑮jQueryをおぼえよう!その1⑮jQueryをおぼえよう!その1
⑮jQueryをおぼえよう!その1
Nishida Kansuke11.2K views
はじめませんか? Jetpack by Yutaka Hoshino
はじめませんか? Jetpackはじめませんか? Jetpack
はじめませんか? Jetpack
Yutaka Hoshino1.2K views
20090704rubyist九州 by koki_h
20090704rubyist九州20090704rubyist九州
20090704rubyist九州
koki_h1.2K views
自分用プラグインのススメ by Hidetaka Okamoto
自分用プラグインのススメ自分用プラグインのススメ
自分用プラグインのススメ
Hidetaka Okamoto884 views
リモートデバッグツール Weinerをつかってみた by Masakazu Muraoka
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka1K views
2014.07.09 WordBench Tokyo LT by Yutaro Miyazaki
2014.07.09 WordBench Tokyo LT2014.07.09 WordBench Tokyo LT
2014.07.09 WordBench Tokyo LT
Yutaro Miyazaki1.6K views
続・Twitter bootstrap入門 #html5j by Toshiaki Maki
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki6.3K views
Javaで1から10まで書いた話(sanitized) by Tokuhiro Matsuno
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno12.4K views
Chrome-eject がこの先生きのこるには by Yosuke HASEGAWA
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
Yosuke HASEGAWA13.6K views
Prejob wordpress v2_1121 by Shohei Aoyama
Prejob wordpress v2_1121Prejob wordpress v2_1121
Prejob wordpress v2_1121
Shohei Aoyama708 views
Prejob wordpress v2_1121 by Shohei Aoyama
Prejob wordpress v2_1121Prejob wordpress v2_1121
Prejob wordpress v2_1121
Shohei Aoyama385 views
Browser oh browser browser by Teppei Sato
Browser oh browser browserBrowser oh browser browser
Browser oh browser browser
Teppei Sato2.4K views
ブラウザだけで学ぶWebアプリ開発 by schoowebcampus
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
schoowebcampus5.2K views

More from Takeshi Arabiki

開発の心得 by
開発の心得開発の心得
開発の心得Takeshi Arabiki
5K views18 slides
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜 by
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜Takeshi Arabiki
10.9K views31 slides
Introduction to Japanese Morphological Analysis by
Introduction to Japanese Morphological AnalysisIntroduction to Japanese Morphological Analysis
Introduction to Japanese Morphological AnalysisTakeshi Arabiki
16.8K views25 slides
R による文書分類入門 by
R による文書分類入門R による文書分類入門
R による文書分類入門Takeshi Arabiki
30.7K views59 slides
Rのデータ構造とメモリ管理 by
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
15.2K views22 slides
HTML5 Canvas で学ぶアフィン変換 by
HTML5 Canvas で学ぶアフィン変換HTML5 Canvas で学ぶアフィン変換
HTML5 Canvas で学ぶアフィン変換Takeshi Arabiki
8.9K views29 slides

More from Takeshi Arabiki(17)

クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜 by Takeshi Arabiki
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜
Takeshi Arabiki10.9K views
Introduction to Japanese Morphological Analysis by Takeshi Arabiki
Introduction to Japanese Morphological AnalysisIntroduction to Japanese Morphological Analysis
Introduction to Japanese Morphological Analysis
Takeshi Arabiki16.8K views
R による文書分類入門 by Takeshi Arabiki
R による文書分類入門R による文書分類入門
R による文書分類入門
Takeshi Arabiki30.7K views
Rのデータ構造とメモリ管理 by Takeshi Arabiki
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
Takeshi Arabiki15.2K views
HTML5 Canvas で学ぶアフィン変換 by Takeshi Arabiki
HTML5 Canvas で学ぶアフィン変換HTML5 Canvas で学ぶアフィン変換
HTML5 Canvas で学ぶアフィン変換
Takeshi Arabiki8.9K views
Rのスコープとフレームと環境と by Takeshi Arabiki
Rのスコープとフレームと環境とRのスコープとフレームと環境と
Rのスコープとフレームと環境と
Takeshi Arabiki3.2K views
twitteRで快適Rライフ! by Takeshi Arabiki
twitteRで快適Rライフ!twitteRで快適Rライフ!
twitteRで快適Rライフ!
Takeshi Arabiki8.4K views
RではじめるTwitter解析 by Takeshi Arabiki
RではじめるTwitter解析RではじめるTwitter解析
RではじめるTwitter解析
Takeshi Arabiki23.6K views
Rデータフレーム自由自在 by Takeshi Arabiki
Rデータフレーム自由自在Rデータフレーム自由自在
Rデータフレーム自由自在
Takeshi Arabiki24.3K views
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜 by Takeshi Arabiki
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
Takeshi Arabiki9.5K views
はじめてのまっぷりでゅ〜す by Takeshi Arabiki
はじめてのまっぷりでゅ〜すはじめてのまっぷりでゅ〜す
はじめてのまっぷりでゅ〜す
Takeshi Arabiki2.3K views
TwitterのデータをRであれこれ by Takeshi Arabiki
TwitterのデータをRであれこれTwitterのデータをRであれこれ
TwitterのデータをRであれこれ
Takeshi Arabiki13.5K views
Twitterのデータを取得する準備 by Takeshi Arabiki
Twitterのデータを取得する準備Twitterのデータを取得する準備
Twitterのデータを取得する準備
Takeshi Arabiki2.8K views

Introduction to Favmemo for Immature Engineers

  • 1. Introduction to Favmemo for Immature Engineers 2012/09/23 @a_bicky
  • 2. 自己紹介 • Takeshi Arabiki ‣ 社会人2年目の底辺 Web エンジニア ‣ Twitter & はてな: @a_bicky & id:a_bicky • 興味など 機械学習、自然言語処理、R • ブログ あらびき日記 http://d.hatena.ne.jp/a_bicky/
  • 4. 背景 • きっかけ(2010年9月末) twilog の fav 版が欲しい!存在しないなら自分で作ろう!! • モチベーション 1. Web 開発に必要な知識の習得 2. 機械学習のサービス適用(全然やれてない) 3. 社会貢献 4. お小遣い稼ぎ(あわよくば)
  • 5. 略歴 • 2010年10月31日: リリース(最初は年間100円の Domainking のレンタルサーバ) Twitter のお気に入りをタグで管理するサービス Favmemo をリリースしました! - あらびき日記 • 2010年11月2日: @ropross さんにより類似サービス favolog リリース “類似” と表現すると失礼?とりあえず存在価値が一気に低下・・・ • 2010年11月9日: MASHUP AWARDS 6 に応募 Favmemo の機能を追加して MASHUP AWARDS 6 に応募してみた - あらびき日記 • 2011年12月28日: リニューアル(10月の時点でさくら VPS に移行) Favmemoリニューアルしました!! - あらびき日記 • 2012年8月末: Twitter で話題になりユーザ数が6倍程度に増加 cf. http://favstar.fm/users/daaahlia/status/240459122556936192 リニューアル時にデモページを設けたのが良かったかも。腐女子層が多い?
  • 6. 現状 • 登録ユーザ数約3,250(2012年9月22日現在) ※ PV には XMLHttpRequest によるリクエストも含む (タグの更新リクエストは含めない方が PV としては良いかも)
  • 8. 構成 • LAMP on さくら VPS Linux のディストリビューションは Debian P は PHP(Dotdeb リポジトリのものをインストール) さくら VPS 移行時に nginx を使ってみようとしたけど Evernote との連携部 分で動かない部分があったので見送り • 規模の割には比較的 JavaScript 多め(但し発狂しそうな程汚いコード) ページ遷移が大嫌いなので・・・ jQuery を使用 UI 周りはそのうち Twitter Bootstrap とか使いたい
  • 9. ページ遷移がない 一度ログインしてしまえば基本的にページ遷移がない ↑ index.php の内容はこれだけ 1. XHR で /updatedb.php にリクエストを送り、新しいツイートをデータベースに取り込む ※ Chunked transfer encoding によってツイートの取り込み状況を表示 cf. jQueryの$.ajaxで通信途中のresponseTextを取得する - あらびき日記 2. XHR で /get_favs.php からツイートやタグ一覧の情報を取得してページの内容を書き換える ※ 1回目の SELECT 文には何秒もかかっているのでスキーマや設定などを見直す必要あり
  • 10. ページ遷移がない! 更新部分のみ XHR で取得 XHR で /get_favs.php の結果を取得し、この部分のみを更新する ・AutoPager 機能では下にツイート(li 要素)を追加 ・検索やタグの選択によって表示項目が変わる場合は innerHTML を書き換える (jQuery history プラグインによって履歴を管理しているので「戻る」も可能)
  • 11. ページ遷移がない!! 「設定」などはポップアップウィンドウを表示 ポップアップウィンドウの内容は pages.min.js で管理(通信が発生しないので高速に開ける) ※ JavaScript に HTML をガンガン記述していて気持ち悪いのでもっと良い方法を考えたい (せめて MVC な感じに書き換えたい)
  • 12. ページ遷移がない!!! タグの編集結果などは「タグ一覧」にリアルタイムに反映 JavaScript で数を増やしたり順番を変えたり(地味に大変) ところで、運営者自身タグ付けしてないのがバレバレ… 今はタグ名を base64 エンコードなどによって ID として有効な文字に変換したものを ID として付与し、変更のあったタグの li 要素を ID で取得して数を書き換えている ※ タグ名をキー、ツイートの数を値とした連想配列に情報を保持しておいて、毎回タグ一覧を一新 する方が楽でいいかもしれない
  • 13. Evernote 連携 MASHUP AWARDS 6 に応募するためだけに導入 • Evernote にエクスポートするためだけに Favmemo を利用しているユーザもいるらしい • Evernote との OAuth 認証には window.open で新しいウィンドウを表示 ※ 以前は iframe を使っていたけど Evernote 側がクリックジャッキング対策としてヘッダに X-Frame-Options: SAMEORIGIN を付けるようになって使えなくなった 認証が完了したら以下のような感じの完了ページを出すことで再度 Evernote へのエクスポートを 試みてウィンドウを閉じる <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> window.opener.retry(); window.close(); </script> </head> </html>
  • 14. マルチアカウント対応 要望があったので導入(2012年7月末) • ログインしているアカウント情報(Twitter ID と screen_name)を cookie で管理 別アカウントで OAuth 認証を済ませた後に cookie にアカウント情報を保存することで、 別タブで開いている Favmemo のアカウント情報も更新される アカウント情報を JSON 形式で保存 • 今まで PHP で $_SESSION としていた部分を $SESSION (= $_SESSION[$user_id]) に変える 程度の改修(リクエストの際 QueryString に screen_name を付与してアカウントを判別)
  • 16. 開発環境とか • Mac の VMware Fusion にサーバとほぼ同じ構成の Debian をインストール /etc/hosts に 172.16.199.5 favmemo.local みたいに記述して favmemo.local でアクセスでき るようにしている。Twitter のコールバック URL も favmemo.local にしてある。 • JavaScript のデバッグは Firebug + FirePHP 今は Chrome のディベロッパーツールの方が秀逸な気がするので FirePHP 相当のものを探 し中(webug は使い物にならなかった) • 画像の作成は Inkscape 最初は Ubuntu で作成したので Mac で開くとフォントの違いから表示が乱れる。設定を いじるのも面倒なので今も Ubuntu の Inkscape で編集。そろそろ Mac で編集したい。 Ajax で使う「読み込み中」を意味する画像の作成は次のサイトがオススメ Preloaders.net - AJAX loading GIF and APNG spinners, bars and 3D animations generator • エディタは Emacs WebStorm とか試してみたいかも
  • 17. 動作確認とか • Mac の Safari, Firefox, Chrome, Opera で確認 古いバージョンでは確認しない。IE は VMware Fusion にインストールしてある Windows の IE9 で IE7 と IE8 も確認(開発者ツールのドキュメントモードを使用)。IE6 はもう確 認していないから悲惨なことになっていそう。 • テストは全然できてない! ユニットテストという言葉すら知らない時に開発したので PHP 側のテストはほとんどな い(一部 PHPUnit を使用)。 JavaScript のユニットテストは皆無(Jasmine とか使おうかと…)。 リニューアル時に結合テストのため Selenium (WebDriver) を使おうとしたけど、エミュ レートできない動作があって断念(調査不足?)
  • 19. 主なTODO • フレームワークの使用 FulePHP か Ruby on Rails を使いたい(メンテナンス性の向上と後学のため) 同時にデプロイ方法の変更とかテストの導入とか。これが終わったらβ版に昇格? • 自動ログイン機能の実装 • モバイル対応 ブラウザに対応させるか、Titanium を使ってアプリをリリース • 検索ボックスのクエリ補完・推薦 Trie の実装とか。自然言語処理の勉強として • 広告の最適化 amazon の広告を自然言語処理・機械学習的な要素を取り入れて CTR 向上したらおもし ろそう(お金 けが目的じゃないので自前でアルゴリズムを考えたい)
  • 21. まとめになってないけど… • Favmemo は自己満的サービスだけど最近ユーザが増えた • ページ遷移は嫌い • フレームワークを使って大幅にリファクタリングしたい • そのうち機械学習のサービス適用とかしてみたい • まだいろいろやりたいことはあるのでゆるゆると続けていきたい