pgCafeMitaka20090723

1,080 views

Published on

2009年7月23日のMitaka.rb & pgcafe Nite!でのライトニングトーク資料です。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,080
On SlideShare
0
From Embeds
0
Number of Embeds
106
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

pgCafeMitaka20090723

  1. 1. 知られざるサンゼロミニッツの裏側 株式会社サンゼロミニッツ 代表取締役 CTO 野々村範之 http://twitter.com/nonomura http://www.facebook.com/nonomura
  2. 2. はじめに <ul><li>今宵は特別編です!! </li></ul><ul><ul><li>プログラマーの方が多いので考えました! </li></ul></ul><ul><ul><li>普段はしない技術に特化したプレゼンです </li></ul></ul><ul><li>サービス概要については… </li></ul><ul><ul><li>この人のブログなどをご参照下さい </li></ul></ul>私が 30min. 社長谷郷です。 http://tanigo.jugem.cc/
  3. 3. 30min. のシステム構成 <ul><li>サーバー 4 台構成 </li></ul><ul><ul><li>開発&本番兼用 Web サーバー 1 台 </li></ul></ul><ul><ul><li>開発 DB サーバー 1 台 </li></ul></ul><ul><ul><li>本番 DB サーバー 1 台 </li></ul></ul><ul><ul><li>本番ブログ記事用 DB サーバー 1 台 </li></ul></ul><ul><li>使用アプリケーション </li></ul><ul><ul><li>CentOS </li></ul></ul><ul><ul><li>Apache + MongrelCluster + Ruby on Rails </li></ul></ul><ul><ul><li>PostGIS ( PostgreSQL の拡張) </li></ul></ul>
  4. 4. ブログ記事解析技術 <ul><li>ブログ記事の位置特定技術 </li></ul><ul><ul><li>ベースの形態素解析には mecab を使用 </li></ul></ul><ul><ul><li>店名、地名などの独自辞書を作成 </li></ul></ul><ul><li>実は人手の要素も大きい </li></ul><ul><ul><li>スパムフィルターを作るのは大変 </li></ul></ul><ul><ul><li>人手でブログを選別することでスパムを排除 </li></ul></ul><ul><ul><li>重複する地名の扱いについて </li></ul></ul><ul><ul><li>学生アルバイトが日々辞書をメンテナンス </li></ul></ul>
  5. 5. 増大する負荷との戦い <ul><li>Rails のページキャッシュを多用 </li></ul><ul><ul><li>ページの更新(キャッシュクリア)は一日二度 </li></ul></ul><ul><ul><li>チューニングする < DB アクセスをさせない </li></ul></ul><ul><ul><li>キャッシュは Googlebot が作ってくれる </li></ul></ul><ul><ul><li>データ修正時は個別にキャッシュを削除 </li></ul></ul><ul><li>Model による仮想カラム </li></ul><ul><ul><li>ブログ記事本文データが大量にたまる </li></ul></ul><ul><ul><li>ブログ記事本文データのみを別サーバー DB へ </li></ul></ul>
  6. 6. Model による仮想カラム詳細 (1) config/database.yml production2: adapter: postgresql database: データベース名 username: DB ユーザー名 password: パスワード host: ここに通常の production と違う DB サーバーを指定 encoding: UTF8 別サーバーに切り出すテーブル app/models/description.rb class Description < Production2 end
  7. 7. Model による仮想カラム詳細 (2) 今までのテーブルのカラムを別サーバーから読むようにする after_save :procsss def description=(description) @description = description end def description if @description.blank? description_obj = Description.find_by_item_id(self.id) return description_obj ? description_obj.description : “” else return @description end end private def process unless @description.blank? description_obj = Description.new( “ item_id” => self.id, “ description” => @description ) description.save() end end
  8. 8. iPhone と Android <ul><li>iPhone </li></ul><ul><ul><li>日本初の GPS 対応アプリケーション </li></ul></ul><ul><ul><li>AppStore 最高位 2 位 </li></ul></ul><ul><ul><li>現在までに国内 10 万ダウンロード </li></ul></ul><ul><ul><li>OS3.0 の Push Notification Services に対応 </li></ul></ul><ul><li>Android </li></ul><ul><ul><li>日本発売の日にアプリをリリース </li></ul></ul>
  9. 9. Ruby による Push Notification Services (1) <ul><li>証明書の書き出し </li></ul>キーチェーンアクセスからプッシュ用の証明書と秘密鍵の p12 ファイルを書き出す 証明書を apns_cert.p12 、秘密鍵を apns_key.p12 とすると openssl pkcs12 -clcerts -nokeys -out apns_cert.pem -in apns_cert.p12 openssl pkcs12 -nocerts -out apns_key.pem -in apns_key.p12 キーファイルからパスフレーズを削除 openssl rsa -in apns_key.pem -out apns_key.pem
  10. 10. Ruby による Push Notification Services (2) device_token = [“ ここに 64 バイトの device token が入る” ].pack(‘H*’) message = ‘{ “ aps” : { “alert” : “30min. タウンニュース 今週末のおでかけ情報を 30min. おでかけアプリの「★ NEWS!! 」でチェックしよう” } }’ notification_packet = [ 0, 0, 32, device_token, 0, message.size, message ].pack(“ccca*cca*”) context = OpenSSL::SSL::SSLContext.new() context.cert = OpenSSL::X509::Certificate.new(File.read(“apns_cert.pem”)) context.key = OpenSSL::PKey::RSA.new(File.read(“apns_key.pem”)) socket = TCPSocket.new(host_name, 2195) ssl = OpenSSL::SSL::SSLSocket.new(socket, context) ssl.connect ssl.write(notification_packet) ssl.close socket.close
  11. 11. 最後に <ul><li>30min. ではエンジニアを募集中です!! </li></ul><ul><li>充実の 30min. データベースを使って </li></ul><ul><li>一緒に新しいサービスを作りませんか? </li></ul><ul><li>[email_address] </li></ul>

×