DC4

お腹が痛い人を集計するPonpetterをリリースした。

通勤中に腹痛に襲われる事はよくあると思うのですが、
世の中には一体どれくらいお腹が痛い人が存在するのか気になり集計するWebアプリを作成しました。

Ponpetter

f:id:Yasun:20150315123956p:plain

http://ponpetter.herokuapp.com/

構成

  • Heroku
  • Redis (Redis To Go)
  • Sinatra
  • Thin
  • Eventmachine
  • WebSocket
  • React.js
  • newrelic
  • Travis-ci
    ...

ソース https://github.com/yassun/ponpetter

開発中のトピック

Redis To Go

Heroku上でRedisを使用するためのアドオンです。
無料プラン(nano)を使用する場合でもクレッジカードの登録が必須でした。   nanoはサイズが5MB、コネクション数が最大10となってます。

今回はスケジューラ用のコネクションを必ず確保したかったので、 Webアプリ起動時にスレッドを起動して常駐させる作戦をとりました。

Tweet集計スケジューラ

通常Heroku上でスケジューラを使用する場合はHeroku Schedulerを使用します。 ですが、スケジューラ利用時間もDynoの利用時間に加算されるため750時間の無料時間を超える可能性がありました。

その回避策として、Webアプリ起動時に別スレッドで動き続けるループをEventmachineEM::deferで作成し、 そこから集計スケジューラを呼び出しました。

HerokuのSinatraにバックグラウンドワーカーを詰め込んで節約

NewRelicを使用してHerokuのアイドル状態を回避

NewRelicのAvailability monitoringにサイトURLを指定することにより定期的にリクエストが来るためアイドル状態になる事を回避できます。

NewRelicの導入方法については公式を参照 https://devcenter.heroku.com/articles/newrelic#ruby-installation-and-configuration

Websocket

Heroku上でWebsocketに対応したアプリを作成する方法については公式にfaye/websocketを用いた詳細な解説とサンプルアプリがあったのでそちらを参考にしました。

https://devcenter.heroku.com/articles/ruby-websockets
https://github.com/heroku-examples/ruby-websockets-chat-demo

React.js

最初はjQueryで実装していたのですが、せっかくなので最近話題のReact.jsに変更しました。 ページ構成要素も少ないので簡単に対応できました。 グラフ描画やwebsocketの接続等のsetStateで変更させない部分について等、 まだまだセオリーが掴めてないです。

Travice CI

phantomjsのバージョン問題でReact.jsのテストが失敗する事象にとてもハマりました。

後日、解決策をQiitaに書きました。
Travis Ci上でReact.jsのプロジェクトをPhantomJSでテストした場合にFailする現象

まとめ

こんなにお腹が痛い人がいるとは思いませんでした。
かぐや姫の御門登場時にすごい勢いで増えてウケました。
よろしければトイレでツイートしてみてください!

最近作ったRubotyのPlugin等

しばらく前ですが、Slackに音也(Ruboty)を導入しました。

f:id:Yasun:20150228191545p:plain

そこで作成したPlugin達の紹介。

ruboty-romaji

日本語をヘボン式または訓令式 のローマ字に変換してくれるやつ。

f:id:Yasun:20150228191807p:plain

https://github.com/yassun/ruboty-romaji

ruboty-instagram

instagramから指定したキーワードで画像を検索してくれるやつ。

f:id:Yasun:20150228191836p:plain

https://github.com/yassun/ruboty-instagram

ruboty-xa

文章に草を生やしてくれるやつ。

f:id:Yasun:20150228191852p:plain

https://github.com/yassun/ruboty-xa

ruboty-qanda

Docomo の知識Q&A APIを利用して質問に回答してくれるやつ。

f:id:Yasun:20150228191906p:plain

f:id:Yasun:20150228191918p:plain

https://github.com/yassun/ruboty-qanda

ruboty-kinkakuji

金閣寺の写真が見れるやつ。

f:id:Yasun:20150228192059p:plain

出社を自動化した。

毎朝Webシステムの出社ボタンを押すのが辛かったので自動化しました。

ruby gem の Thormechanize を使用して出社ボタンを実行するスクリプトを実装し、

AppleScriptでこんな感じのウインドウを表示させてそのスクリプトを実行するようにしました。

f:id:Yasun:20150207134327p:plain

上記スクリプトAutomatorで実行できるようにし、

f:id:Yasun:20150207135450p:plain

システム環境設定 > ユーザーとグループ > ログイン項目を開いて、先ほど作ったAutomatorを指定すると完成。

退勤が自動化できていないのが課題。

2014年振り返り

Perl

前年から引き続きPerl書いてました。

PerlでWebアプリをリリースした。

仕事ではバッチ系の処理が多かったのですが、 プライベートでmojoliciousやRedisを使ったWebアプリを作成しました。
スマホ対応をやってみたりとしたのですがあまり人が集まらず早々に閉鎖しました。
後述するLTのネタとかに繋がったので良かったです。

ダークソウル2のマッチングサイト

iPhoneアプリをリリースした。

仕事ではあまり触れない分野に挑戦しようとcocos2d-xに挑戦しました。
途中心が折れそうになりましたがなんとかリリースまで辿り着けて良かったです。

まさかの指がシリーズ化。

cocos2d-xでゲームをリリースしてみた。

LTに登壇した。

初めて社外でLTをしました。
今後も積極的に参加したいです。

Gotanda.pm #2 でLTしてきました。
#chibapm 5でLTしてきました。
Genesis Lightning Talks vol. 48

ISUCONに挑戦した。

ISUCON4予選にGo(?)で参加しました。
初参加でしたがとても楽しめました。

ISUCON4予選に参加しました。

RubyRailsを始めた。

RubyRailsを始めました。とても楽しいです。

Rails、Ruby関係で最近読んだ本まとめ。
RailsでYasubeeFriendsを作った。
Rails4.1で世界の写真を表示するやつを作った。

草活動を始めた。

f:id:Yasun:20141231185321p:plain

いい感じで習慣化してきました。
この調子で続けて行きたいです。

社内スタートアップ的な事をして失敗した。

社内で新規サービスの立ち上げに携わりました。
そして色々あって失敗しました( ˘ω˘)
とても貴重な経験をすることが出来ました。
ぐぬぬ

まとめ

来年もがんばるぞい。