ラベル 技術情報 の投稿を表示しています。 すべての投稿を表示
ラベル 技術情報 の投稿を表示しています。 すべての投稿を表示

2011年10月18日火曜日

トップページに掲載されている自転車の情報を知るには

たくさんの方々から投稿をいただき、MyBike.JPのトップページはいつも色彩豊かなバイクで飾られています。トップページの写真はユーザの投稿に応じて随時変更されており、このサイトを訪れる一つの楽しみになっています。

機械的に取得することが出来るとライブ壁紙やダウンロードが容易になるのでは?という意見を何度かいただき、夏前から試験的にAPIを実装していました(本業多忙のため夏の間は一時中断していましたが…)。

試行錯誤を重ね、写真URL、トップページの自転車およびオーナ情報が取得できるAPIを、先週から試験的に公開しています。


前者はトップページ画像の正式なURLにリダイレクトを行います。後者は自転車およびオーナの情報をJSON形式で返します。

とてもシンプルなAPIですが、これから様々なAPIへ拡張することへの第一歩であり、フィードバックを得るための足がかりとしたいと考えています。ご意見・ご要望はハッシュタグ#mybikeをつけてtweet, もしくはinfo@mybike.jpまでお問い合わせください。

これからも使いやすく気の利いたサイトを目指して開発を進めます!
Enjoy riding!

2011年10月15日土曜日

ストレージ障害から復旧しました

13日の晩から15日にかけて、画像へのアクセスを伴う各種処理が停止していました。画像(写真)の入出力に伴うソフトウェアが、仕様変更により処理が行えなくなったことが原因です。当該の時間にご覧になったユーザのみなさま、ご利用のユーザのみなさま、ご迷惑をおかけしまして誠に申し訳ございませんでした。




MyBike.JPは様々なソフトウェアスタックを利用して開発しています。利用しているソフトウェアは、ネットワークサービス周りのnginxやMongoDBといったミドルウェア、開発言語のPythonはもちろんのこと、これらに付随するライブラリまで多岐に渡ります。

ソフトウェアは不定期にアップデートがあるため可能な限り追従していますが、利用しているソフトウェアの仕様変更による不整合、開発環境とプロダクション(本番)環境の差異により、不具合が発生した形となりました。

ストレージシステムには分散ファイルシステム(MongoDB GridFS)を採用しており、Python製のストレージドライバ(django-storages)を使用して読み書きを行なっています。このストレージドライバは別途ライブラリ(django-mongodb-engine)を利用します。

今回、ライブラリのバージョン変更に伴う仕様の変更により、ストレージドライバとの整合性がとれなくなり、ストレージそのものへアクセスを行うことが出来なくなったことが問題です。

新旧のソフトウェアの違いは次のようになります。

旧新
django1.2.51.3.1
django-mongodb-engine0.3.00.4.0
django-storages1.1.3 + mybike patch 11.1.3 + mybike patch 2


django-mongodb-engineのバージョンアップに伴いデータベースへのアクセス方法が変更されたため、ストレージ障害が発生したというわけです。

これまで書いたとおりソフトウェアのバージョンアップはリスクを伴いますが、セキュリティホールの修正、メンテナンス性の向上など、サイトを運営し続ける上で様々なメリットがあります。もちろん障害を起こして良いわけではありませんが、リスクを取らずに硬直化するよりも、可能な限り前進する姿勢でいたいと考えています。

いろいろご迷惑おかけしましたが、今後ともどうぞよろしくお願いします!

2011年3月6日日曜日

盗難情報の投稿にCAPTCHA認証を追加しました

MyBike.JPの盗難車量への情報提供は誰でも気軽に行えることが特徴でしたが、先月末より悪質な書き込み=SPAMの投稿が目立ったため、CAPTCHA認証を追加しました。

非ログイン状態で盗難情報ページへアクセスすると、左下にreCAPTCHAのフォームが現れます。投稿時には、この中の文字を読み取って正しくフォームに入力する必要があります。



残念ながら今のところ重要な手がかりとなる情報は寄せられていませんが、少しでも盗難車の発見の力となれれば幸いです。

2011年1月27日木曜日

nginxのGridFSブリッヂ

ここ数日サイトが非常に重たい状態となっておりご迷惑をおかけしております。エラーレポートが(メールで)送られてくるので問題は把握していたのですが、解決までに時間がかかってしまっています。

アプリケーション的、システム構成的、両面からのアプローチを検討し、2つの対策を行いました。


  • アプリケーションの見直し

  • システム構成変更による改善



アプリケーションの見直しは、モバイル対応を行った際に変更した部分が関係すると考え、その点を中心に見直しを行いました。いくつか問題点があったため変更を行いリリースしています。

もう一点、システム構成を変更して、保存された写真の提供方法を改善しました。

写真の提供方式について少し掘り下げて解説したいと思います。

旧方式ではnginxからFastCGIによりdjangoへ接続し、そこからMongoDB GridFSのファイルを取得していました。pythonで処理が行えるためプログラミング的にデバッグがやりやすい、加工等の処理が行い易いというメリットがありますが、反面、一度画像データをバッファリングする必要があり、メモリを圧迫する状況となっていました。



GridFSへのアクセスパスを効率的なものに変更できないか探したところ、nginxからMongoDB GridFSへブリッヂできるnginx-gridfsというライブラリを見つけました。

これはAPL / GPLで提供されるnginxの拡張モジュールで、nginxがHTTP経由で受け取ったリクエストに応じ、GridFS内のファイルを取得し、レスポンスすることができます。nginx内でも画像データのバッファリングは行っていると考えられますが、少なくともpythonプロセスでメモリを浪費することはなくなります。



パフォーマンス障害は深刻な問題だったため早急に対応を行う必要があり、構成変更前後でのベンチマークは取得していませんが、体感値ではずいぶんと高速化した印象です。

機能強化ももちろん必要ですが、ユーザが快適に利用出来ることも同じように重要です。時間は限られており様々な要望にすぐ答えることは難しいのですが、ユーザの体験を大事にして、便利で使いやすいサイトを目指して今後も改善を続けたいと思います。

2011年1月26日水曜日

MyBikeのタグ設計

MyBikeでのソーシャルタグの設計、採用しているフレームワークであるDjangoの特性について、BeProudさんの勉強会で話してきました。発表資料をslideshareで公開したので興味のある方は御覧ください。



日本語の名寄せなど課題は残っていますが、少しずつ改善していきたいと思います。

2011年1月17日月曜日

MyBike Studyを開催しました

去る1/16に、BeProudさんのオフィスをお借りして、MyBike.JPのデベロッパミーティング「MyBike Study」を開催しました。今回は主にWebアプリケーションデベロッパの集まりで、MyBike.JPの内部構造、開発やバグ修正のフローなどの共有が目的です。

(後ほど資料を入れるかも)

システム構成の紹介を済ませた後は、環境構築、開発のハンズオン。

開発環境はほぼ全員Macを使っているのですが、構築者はずの環境構で画像ファイルのバリデーションエラーが発生したり、非同期タスクがクラッシュしたりとトラブルが続きました。しかし結局、PIL=Python Imaging LibraryのJpeg supportが無効になっていた(コンパイル後にはsupportedと表示されるのに!)ことが原因とわかり、開発に進むことが出来ました。

作業内容はチケット(作業内容や課題が書いてあります)の中から興味のあるものを自由に選びます。

Pythonに不慣れなエンジニアもいたのですが、つまずくところをフォローしながら進めると数時間後にはiPhone / Android用のビュー、国内モバイル3キャリア用のビューのプロトタイプが動くようになりました!

この成果は二月の上旬リリースを目標に作業を進めています。お楽しみに!

Enjoy coding!

2011年1月11日火曜日

製造者別フレーム登録数

製造者別に自転車(フレーム)の登録数はきっと重要な統計情報なので、毎日バッチで取得しています。運用開始から一週間ほど経った現在、登録数はどうなっているでしょうか?上位15件を公開します。

             name              | count 
-------------------------------+-------
Cannondale | 35
LOOK | 27
GIANT | 27
Specialized | 27
TREK | 27
ANCHOR | 20
Colnago | 18
TIME | 16
Panasonic | 15
Cervélo | 14
Pinarello | 14
RIDLEY | 11
Ravanello | 11
Bianchi | 11
ORBEA | 11


Cannondaleはダントツトップ。その他に、Specialized, TREKも上位にランクインしており、アメリカ勢が強いと言えそうです。台湾GIANTは孤軍奮闘ながら3位に位置しているのは世界最大の自転車メーカとしての意地(?)でしょうか。

日本やイタリア、フランスなど、その他の国も上位につけており、個人的には意外と散らばったなという印象です。