isseium's blog

田舎に住むWebエンジニアのブログ

貧弱な環境でそれっぽいことをしようとしたら unicorn がロックしてたのでメモ

個人レベルで運用している某Rais製サービスにて,大量アクセス(といってもちょっと強めのF5連打くらい)があったときに nginx が 「504 gateway timeout 」やら 「 502 bad gateway 」を吐いてサービス停止することがありました.

nginx や unicorn に精通しておらず,何が原因がわからないまま,サービス停止時は再起動を行うという対処でごまかしていましたが,このたび原因を究明できた(とおもう)のでメモしておきます.

システムアーキテクチャ

タイトルにある "それっぽい" というのは,フロントエンド層とAPI層とDB層をわけた構成です.(これはいわゆる3層アーキテクチャといっていんですかね?) 趣味開発なので,そこまでする必要はなかったのですが,将来マルチデバイス対応を考えるとロジックをAPI層でやらせたかったし,加えて,どこからか好奇心がわいてきてそのようなアーキテクチャを採用しました.

通常,これらの層ごとにサーバを用意すると思うのですが,趣味開発ということもあり経済的に厳しかったので,1つのサーバに全部載せで運用していました.( = 貧弱な環境).

このような感じです.

f:id:isseium:20131031021843j:plain

nginx + unicorn に関する自分の見解

Rails のデプロイ環境には,nginxとunicornを採用しました.ここ周辺の知識に自信がなかったので,まずは"王道パターン"ということで採用しました.

私の認識ですと,unicorn は,1プロセスは1リクエストしかさばけず,unicorn のプロセスより多い数のリクエストがあるとキューとして溜まっていくと考えています.(誤っていたらご指摘ください)

f:id:isseium:20131031021851j:plain

貧弱環境での挙動

これを,さきほどの貧弱環境で動作させますと,同じサーバ内ですがフロント層からAPI層へのアクセスをわざわざHTTPを使うことになります. つまり1アクセスあると2つのunicornプロセスを使うということですね.

f:id:isseium:20131031021859j:plain

デッドロック

通常であれば,この構成でも非効率ではありますが徐々にアクセスを処理していく...と思っていたのですが,1. のアクセスが同時にすべてのunicornをつかんだときにデッドロックが起きるんですね. はい,これが原因不明のサービス停止の原因だったと思います.

f:id:isseium:20131031021906j:plain

暫定対応

というわけで,暫定対応としまして unicorn を 2つのグループにわけて起動しまして,片方をフロント層専用,もう片方を API層専用としました.これで,同時につかんだとしても処理が流れていくと思います.

f:id:isseium:20131031021933j:plain

※図の「API専用」と「Front専用」は逆でした...すみません

今後の課題

いまはフロント側から2つ以上のAPIを叩くことがないシンプルなサービスですが,この状況が変わればまたここでデッドロックが発生しそうです.フロント層とAPI層を別サーバで運用するのが手っ取り早いかな...

車を魅せつけるアプリ「Carblow」をリリースしました!(8/26追記: Android版もリリースしました)

( 8/26追記: Android版もリリースしました! )

地方は車社会ということもあって,車が好きな若者って多いですよね.

毎週のように洗車したり,こだわりの改造をしたり,そんな愛車をたくさんFacebookTwitterにうpしたいけど,ちょっと他人の迷惑を考えてしまう....

そんな車好きな人が心置きなく車を魅せつけられるアプリ「Carblow」をリリースしました.

f:id:isseium:20130825164516p:plain

iPhone版ダウンロードはこちら

Android版ダウンロードはこちら

特徴

"車を魅せつける" ことに特化したシンプルな写真ストリーム

自分の車をみせつけたい人が絶え間なく利用する Carblow は,非常にシンプルな写真ストリームが特徴です!思う存分,みせつけましょう.

f:id:isseium:20130825165220p:plain

f:id:isseium:20130825165247p:plain

今後は,アーリーアダプタで,車好きで雨が好きなサークルの代表である Y くんの助言を得ながら,より車を魅せつけられるアプリに仕上げていきたいと思っています.

開発的な話

地域をITでちょっと幸せにしたい、そんな志をもった開発チーム Cheekit(チイキット)で一緒に活動している @whitech0c0 と, やる気スイッチの開発者である @otukutun と作りました.

Trunk (幹,カバン)という Instagram ライクな画像管理API を独自に設計・開発し,クライアントは各自が顧客価値を考えて提供するというスタイルで行いました.

「地方の若者の車ニーズ」に対する価値提供を考えたのが,今回の Carblow になります. @otukutun からもきっとなんらかのアプリが近々リリースされるはずです!

ストリーム系APIの開発はもちろん,AWS や Chef などはじめてづくしでいい経験と知見がたまりました.CGM系アプリということもあり,Apple の審査も 4回目で通り,こちらもいい経験でした.

「観光ビジネス未来白書(2013年版)」を読んだ

観光 × XX という形で,観光に関わる所々の事情について,XX ひとつにつき「現状」と「未来」に見開き1ページでまとめられている.

「未来」の部分は,紙面の都合上,細かな根拠やデータが示されていないものの,観光の未来を述べている一意見として注視したい.この部分は,数値を所々の統計手法を使って未来予想する!という形ではなく,著者の経験による部分が多く含んでいると考えられる.

興味深かったデータをいくつか挙げます

インバウンドビジネス

訪日外国人の平均旅行支出額は13万円であり,その内訳は,宿泊費4.5万,飲食費 2.8万,交通費 1.5 万,娯楽費 4,000円,買い物第 40,000円 となっている.

また旅行者が実施したことは,「日本食を食べること」「ショッピング」「繁華街町歩き」が上位となっている.

エコツーリズム

日本の18歳〜25歳の学生を対象とした「若年層の旅行性向調査・分析(観光庁, 2011)」によると,国内旅行の目的は「自然景観を見る・触れる」が最も高いので,エコツーリズムが若者向けにいいのではないかと,提案している

ペンションビジネス

  • 2000年代前半から急激に市場規模が縮小している.他の観光とは比ではない.
  • 農村部のペンションはグリーンツーリズム要素を取り込み,農山漁村の生活を満喫できる体験を提供していくとよいのでは,と提案している

農業体験ビジネス

  • 右肩上がりの市場
  • 農業体験から農村体験へ高度化
  • 親子向けはそろそろ頭打ち
  • 外国人向けのリーチが少ない
  • 参加者の不満は農家のホスピタリティ

観光情報ビジネス

  • 消費購買モデル(AISASの法則, AISCEASの法則)に基づいて,旅行行動を簡単にまとめている
  • 今後重要となるのは,リアルタイム情報とカスタマイズされた情報
  • 旅行前は,利用者の嗜好を把握して,観光地を知る,学ぶ,探す,比較する,予約するなどワンストップサービスの提供が望まれる
  • 旅行中は,スマホ・タブレットを中心に,リアルタイム情報が必要.ルートガイドやスポット情報,渋滞予想,見所,クーポンなどなど
  • 受入側(観光地側)はデジタルサイネージの活用も考えられる
  • 観光客の行動履歴を収集し,マーケティングに役立てる仕組みが必要
  • 旅行後は,その写真や日程を整理して,簡単に記録できるような仕組みがほしい

観光まちづくり

  • 地域資源を活用した一貫したテーマ作りが重要
  • 一過性のブームで終わらせない努力と工夫が必要
  • 他地域との連携は必須
  • 地域全体で,立場や業種を超えて協力する姿勢がひつよう.地域のファンをつくる.

まとめ

統計の出典が参考になる.興味を持った統計出典元はあとで調査したい. 著者らの未来予想のしかたは,統計の活用方法のひとつとして参考にしたい.

観光は様々な分野と関わっており,大きな市場であると全体を通じて再認識した.

「データサイエンティスト養成読本」を読んだ

データサイエンティスト養成読本を読んだので読書感想文を書きます.

次のような章立てになっている.それぞれに3〜5章くらいの小さい章がある構成です.

  • データサイエンティストの仕事術
  • データ分析実践入門
  • マーケティング分析本格入門
  • Fluentd 入門
  • データ分析のためにこれだけは覚えておきたい基礎知識

データサイエンティストの概要をつかむにはよいと思うが,複数人の内容をまとめているということもあって,内容が重複したり,粒度にばらつきがある.

Rや各種ライブラリ,統計技法を用いた実践例もあるが,この本だけでは理解は厳しい.

個人的におもしろいと思ったのは,次の3つ.

データサイエンティストの仕事術の第1章「データサイエンティストに必要なスキル」

まずは,データ分析・解析の歴史を振り返り,1960年代からマーケティングやビジネス面もまじえて紹介されている. 次に,データマイニングのプロセスである「CRISP-DM」「SEMMA」「KDD」を紹介している. データマイニングの世界のプロセスを知らなかったのでためになった. 大学の研究もこのプロセスを取り入れつつすすめていきたいと思った.

データ分析実践入門 第5章「データマイニングに必要な10のアルゴリズム」

タイトルのとおり,10のアルゴリズムが紹介されています. データマイニングで使われている技術キーワードを知るにはとてもいいと思いました. 当然ですが,この本では概要の概要しか触れられていないので,使いこなすのは無理です. 紹介されているアルゴリズムは次の通り

  • C 4.5: 集合を特徴をもとに分割して決定木を作るためのアルゴリズム
  • k-means: クラスタリングでもっとも有名なアルゴリズム
  • SVM: 画像の特徴点などの説明変数がが膨大なデータでも高速計算できるアルゴリズム
  • アプリオリアルゴリズム: アソシエーションルール分析のために使われるアルゴリズム
  • EMアルゴリズム: 複雑な対象において最適解を求めるアルゴリズム
  • ページランク: Google のやつ
  • アダブースト: アンサンブル学習のひとつ.(よくわからなかった)
  • k-近傍分類: まる暗記型の分類機
  • ナイーブベイズ: クラスを予測するための手法.軽量で性能もよいため,よく使われる.
  • CART: 2分木によってクラス,連続地,生存期間などを予測できる手法.

マーケティング分析本格入門 第1章 「Rによるマーケティング分析」

統計をマーケティングにどう活かしているかがわかるいい例でした. 対象集団を分類するために,消費行動アンケートをとり,主成分分析を用いたあとに,クラスタリングし,セグメントを洗い出し,セグメントに突き刺さるように戦略を立て,さらには分析・評価するところまで書かれていて,ひととおりの流れがわかりました. 定性的研究や実践よりの研究にも役立つと思いました.

番外: マーケティング分析本格入門 第2章 「mixiにおける大規模データマイニング事例」

データサイエンティストの養成という意味では広告領域に焦点をあてていて,内容も少し技術よりでしたが,mixiのインタレスト広告の裏側が知れて,インタレスト系広告に関わっていたエンジニアとしては非常におもしろかったです. hiveやmahoutを使ってるんですね!

前職のところもどんどんこういう記事を書いていけば,エンジニアから魅力的な現場だと思われると思うんですけどね!

まとめ

データサイエンスの概要をつかむにはいい内容だと思いました. 深い知識が必要なく,数式やソースコードもほとんどでてこないのでスラスラ読めます(理解しているかは別です)ので,グループでの勉強会の導入にはいいのではないでしょうか.

ホワイトボードシートを買ってみた

ホワイトボードって議論には必須のアイテムですよね!

研究室にもう少しホワイトボードを増やしたいたかったのですが,意外と場所をとりますし,値段もそこそこするのであきらめていました.

  • 壁に穴をあけずにかけられる(マグネットじゃないやつ)
  • あまり高くない

こんなものがないかなーと思っていたところ,こんな記事が!!

「壁面に貼ってホワイトボードとして使えるシートが発売」

日立マクセルは、壁面に貼ってホワイトボードとして使用できるシート「このシート ホワイトボード?」を発売する。発売日は6月25日。価格はオープン。

(中略)
接着剤を用いることなくガラス、コンクリート、木、鉄などの平らな壁面に貼ったり、はがしたりすることができる。

(後略)



http://news.mynavi.jp/news/2013/05/02/104/index.html

ぐぐったら yodobashi.com で売ってました.

値段が高いのかなーと思っていたら,80cm * 60cm が 12枚 はいって 2280円 ! 25枚入りならさらにお得に 3580円!ホワイトだけじゃなくてクリアもある!

さっそくホワイトだけポチりました.

yodobashi.com はじめて使いました.2日で届きました!送料無料!ポイントもつく!お得ですね!

使用方法はこんな感じで記載されてます

さっそく研究室の壁に使ってみました この壁が...

こんな感じに!

当然,書ける!

まだ使い始めなので,デメリットは思い浮かばないですが,結構よさそうです! 追加で買ってしまおうかなー!と思っちゃいました.

使っているうちにデメリットがわかってくると思うので,追記していきたいと思います!

最後に,この商品,まだ出始めたばかりか,情報が少なすぎるんですよね. マクセルさんの公式Webサイトも写真も小さいし,ハメコミっぽいし,なんだか利用イメージが浮かばない. もう少し宣伝にお金かけても... と思いました.

※1... このブログがきっかけに売りあげあがったら,2,3本贈ってくれるとうれしいなぁー(ぉ

※2... 買ってから見つけたけど文房具のセーラーさんから先にでてた!売上3万個! http://sailorshop.jp/SHOP/31-3800-000.html

開発コンテスト24で,毎朝がちょっと楽しみになる「まごコール」を作りました

クックパッドさんの第4回 開発コンテスト24にて「まごコール」をつくりました.

今回のコンテストのテーマは,「年をとった自分が使うサービス」ということで,自分が年をとったらなにが課題かなーと考えたところ,

孫の声が聞けないなんて嫌だ!

と考え,孫の声が聞けるサービスを作りました.

まごコールとは?

通信手段が発達した現代において,孫と祖父母は,いつでもやりとりができるのですが,時間が合わなかったり,いつでもできると思うとなかなか連絡はしないものですよね.

また,子供である孫や恒例である祖父母は,パソコンやスマホを自由に使えないことが多いです.

そこで,我々は,シンプルで普及率の高いデバイス「電話」をインタフェースにした音声メッセージングサービス「まごコール」を開発いたしました.

使い方

お孫さんは,まごコールに電話をかけます.するとメッセージを録音できます.

翌日8時に,祖父母の電話番号にメッセージが届けられます!

プレゼン資料

※資料に,お手元の端末で実行できる方法を記載しておりますが,一定の時間をすぎると使えなくなる仕組みになっており,このブログを閲覧時点ではすでに使えない可能性があります.ご了承下さい.

技術的な話

電話(IVR・録音など)関連は,Twilio を利用しています.

初めて使ったのですが,APIやライブラリが揃っていて使いやすいですね!そして,課金しなくてもある程度試せるがいいですね!最終的には2000円課金しました!

学部時代に,Asteriskを利用したうんぬんということを研究室のサーバにボードを設置して〜インストールして〜などとしていましたが,Twilioはそういう部分をすべて雲の上の世界として使えるのでいいですね!

その他,プログラマブルな部分は,PHP を利用しました.

誰と作ったの?

大学の後輩である @endlessbaum くんと,某盛岡市内の大型書店内にある喫茶店で作りました.

順を追って話すので,少し長くなりますが,当初はこの開発コンテスト24にて,「岩手にもクリエイターがたくさんいるぞ!」とPRしたくて,岩手非公式会場を運営しようと思っていました.今月初頭に,岩手県立大学に利用許可申請をしたのですが,開催日である6/15は「大学編入試験」で立入禁止日で,許可が下りませんでした.

先月,同大学で行われたハッカソンイベント「たきざワッカソン」の参加状況をふまえると,20〜30名規模で開発コンテスト24に挑める絶好の機会だったのに... と落胆し,モチベーションが低くなっていました.

そのまま,15日を迎えたのですが,前日夜にhuluでフリンジにはまってしまい 起床時間が10時で,うぉおおおっと.

Facebook 上を見ると, @endlessbaum くんがまだテーマも決まらず悩んでいるようだったので,近くの喫茶店でやろう!とお声がけしまして,一緒にやりました.

開発を一緒にしたこともなく,研究室も違いますし,なかなかコンテキストが違って大変だったのですが,徐々にすりあわせをして開発を完了しました!

コンテストを終えて

残念ながら賞はいただけませんでしたが,楽しかったです.

今年で3回目の参加で,毎回作る楽しみを味わえていいと思います. 当日までテーマがわからないのがいいですね!

サーバログをみると,クックパッドさんが審査のためにきちんと使っていただいていました.多くの作品を審査をしていただいた運営の皆様,大変ありがとうございました.

来年は,ぜひ岩手非公式会場を運営してカレーを配給したいと思います!

Fitbit Flex 開封の儀

半年くらい前に @spesnova が持ってた fuel band と,その他の活動量計について教えてもらい,とても興味を持ちました. 調べてみると,fitbit がどうやら新しい物をだすということでずっと待っていました.

4月下旬に,Amazon.com にて注文できるようになったのですぐにポチッっと. しかし,fitbit本家サイトでの予約者を優先するとのことでなかなか発送されず...

先輩である @otukutun は Jawbone UP 購入し,うらやましく見ていました.

また,5月上旬頃には,ソフトバンクが夏から Fitbit Flex を月額490円で日本独占提供するとの報道があったり,Gizmode が 米ギズFitbit Flex 使用レビュー、これは微妙かもしれない... という記事があったり,悩みましたがこのまま購入することを決めました.

とまぁ,そこそこ待った結果,本日6月8日にアメリカから到着しました.

f:id:isseium:20130608095642j:plain

腕につけるとこんな感じ

f:id:isseium:20130608100344j:plain

主なパーツはこんな感じです. fitbit 本体(写真下部の小さいやつ),リストバンド2本,充電器,BluetoothUSBアダプタ

リストバンドは,注文時にもサイズを選んだような気がしますが,大小の2種類のサイズが含まれています.日本人男性なら小さい方でも十分つけられると思います.

f:id:isseium:20130608103250j:plain

説明書は一切ありません.まずはWebサイト見に行けということです.

f:id:isseium:20130608095939j:plain

Webサイトに行くと,アプリをインストールしろと言われます.

f:id:isseium:20130608111031p:plain

評価が若干低いのが気になりますが,ダウンロードします.

f:id:isseium:20130608111116p:plain

アカウントがないので,「Get started」を選択します.

f:id:isseium:20130608111131p:plain

いろいろと情報を入力します(email, パスワードも入力します.スクショ忘れました)

f:id:isseium:20130608111212p:plain

ホーム画面です.Fitbit Flex と連携するために,「Set up now」を選択します.

f:id:isseium:20130608111247p:plain

製品選択画面です.Fitbit Flex を選択します.

f:id:isseium:20130608111258p:plain

ここから Fitbit Flex のセットアップと取扱説明がはじまります. 説明書がなくても,ここで充電の仕方やLEDの表示の意味などが自然な形で理解できてとてもよいと感じました.

f:id:isseium:20130608111315p:plain

Fitbit 本体をリストバンドから取り出せと言われます.

f:id:isseium:20130608111318p:plain

ごめんなさい.スクリーンショット撮るのわすれたのですが,まずは充電しましょうと促され,充電ケーブルへの接続の仕方と,充電中のLEDの意味を説明されます.

充電中のLEDは,チャージ量に応じてLEDランプ(5つ)の数が増えていくそうです. 公式サイトによると3時間くらいでフルチャージできるとのこと. 使った感じだと,充電量1から充電量4までは1時間足らずでした.

f:id:isseium:20130608114028j:plain

サイズあるから選んでねーと書いてます.

f:id:isseium:20130608111415p:plain

リストバンドに fitbit を入れてねーと書いてます.

f:id:isseium:20130608111441p:plain

リストバンドを腕につけてねーと書いてます.

f:id:isseium:20130608111453p:plain

ここでなにやらBluetooth通信がはじまり,アプリに連携設定されます.

f:id:isseium:20130608111459p:plain

で,最後に "2回タップすると 1万歩 への達成状況みられるよ" という説明があります.

f:id:isseium:20130608111510p:plain

実際にタップした様子

ということで,今日から運動したいですね. 使用していく上でおもしろい体験や機能があれば,またブログにまとめられればと思いますー.

追記(7/5)

iPhoneを日本語設定していると,Fitbitのアプリ一覧に「Flex」がでてこないそうです.(takaさんコメントありがとうございました!)

「設定」-> 「一般」 -> 「言語」 で,「英語」を選択してからセットアップしてください. 設定後であれば,言語を日本語に戻しても使えます!