タグ

ブックマーク / labs.cybozu.co.jp (78)

  • Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践

    « MySQL のクエリ最適化における、もうひとつの検証方法 | メイン | MySQL (InnoDB) に直接アクセスしてタイムライン処理を高速化する話 » 2008年06月09日 フレンド・タイムライン処理の原理と実践 MySQL (InnoDB) に直接アクセスしてタイムライン処理を高速化する話に続きます。 Twitter が注目されるようになって久しい今日この頃ですが、友人の投稿を時系列に並べて表示する、というのは、Twitter に限らず Mixi の「マイミクシィ最新日記」やはてなブックマークの「お気に入り」等、ソーシャルなウェブサービスにおいては一般的な手法です。ですが、この処理 (以下「フレンド・タイムライン」と呼ぶ) は、一見簡単そうに見えて、実装には様々な困難が伴います。記事では、「フレンド・タイムライン」を実現する、プッシュ型とプル型の二種類の手法について、その原

    aki77
    aki77 2008/06/09
    『「フレンド・タイムライン」を実現する、プッシュ型とプル型の二種類の手法について、その原理的な特徴と問題、および実践的なテクニックについて説明したいと思います』
  • Kazuho@Cybozu Labs: メッセージキュー事始め with Q4M

    « YAPC::Asia 2008 で Pathtraq について話してきました | メイン | MySQL のクエリ最適化における、もうひとつの検証方法 » 2008年05月27日 メッセージキュー事始め with Q4M 今日、奥が開発し Pathtraq でも使っているメッセージキュー Q4M について説明する機会があったので、自分の頭を整理しながらスライドに起こしてみました。メッセージキューとはそもそも何か、という所から始まって、Q4M の内部構造と使用方法、さらには、ウェブサービス等でキューを使うべきいくつかのシナリオについても書いてありますので、よろしければご覧ください。

  • Google App Engine SDKを使ってみた | 秋元@サイボウズラボ・プログラマー・ブログ

    [追記] これを書いたあとアカウントが入手できたので、実際にGoogle App Engineのサーバ上で簡単なスクリプトを動かしてみた。 Googleが今晩(米国時間)のパーティーCampFireOneでTech CrunchメンバーやRobert Scobleさんら参加者に対して発表したGoogle App Engine, AmazonがS3+EC2+SQS+SimpleDB等で先行している「スケールする従量制ホスティングサービス」の競合サービスのようだ。 Googleが自社で使っているような大規模展開が可能なサーバ+ミドルウェア群を、外部に提供するということ。まずはPythonGoogle自身も使っている各種ライブラリ、WebフレームワークDjango、を積んでの公開だが、他の言語にも対応していくらしい。 やはりGoogleというか、ディスク500MB、月500万PVまでは無料で使

    Google App Engine SDKを使ってみた | 秋元@サイボウズラボ・プログラマー・ブログ
  • Guess my crime! – 人物写真から犯罪を当てるゲーム | 秋元@サイボウズラボ・プログラマー・ブログ

    よく思いついたなあ、というか、よく実際に作ったなあ、というか。 Guess my Crime!は、犯罪者の写真を持ってきて、その人がどんな罪で捕まったのかを当てさせるというゲームブログ。 正答は顔写真の下に見えないように隠されているだけなので、ゲームといってもたいしたゲーム性はない。それでも話題になるのは、罪を犯した人の外見というのは果たして自分の持っている犯罪者へのイメージと合っているのか、という興味を持つ人が多いからだろう。 とはいえ、写真も罪状も物かどうかわからんけどね。 じゃあこれの日語版を自分でやりたいか、というとそれは無いのだけれど、このサービスの発想自体は何か別のサービスにも転用できそうな気がする。 via del.icio.us/popular この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い

    Guess my crime! – 人物写真から犯罪を当てるゲーム | 秋元@サイボウズラボ・プログラマー・ブログ
  • 秋元@サイボウズラボ・プログラマー・ブログ: Google Social Graph API登場 - 公開情報から人のつながりを探せるように

    Google Social Graph APIに戻って「Googleのウェブ検索」を説明するなら、ウェブにあるページとページのリンク関係を大量に集めて、単語を入れたら関連するページを返す、ということになるだろう。 今日新しく発表されたGoogle Social Graph APIは、リンクの中でも特に「サイトと人、人と人の関係」が書かれたリンクを収集して検索できるようにしたAPIだ。 APIを使ったサンプルがあるのでこれを使ってみる。My Connectionsというサンプルでは、ブログや自分のプロフィールが載ったページのURLを入れる(複数あれば改行で区切る)と、過去にブログやSNSなどで自分が登録した情報から、関係のあるウェブサイトのURLや、知人のページを取得して表示してくれる。 人間関係やサイト間の関係はどこから取っているのか、というと、これはXFNやFOAFといったmicr

    秋元@サイボウズラボ・プログラマー・ブログ: Google Social Graph API登場 - 公開情報から人のつながりを探せるように
  • Kazuho@Cybozu Labs: Tritonn (MySQL+Senna) の join を高速化

    « setlock を使って cron をぶんまわす方法 | メイン | Range Coder の終了処理 » 2008年02月05日 Tritonn (MySQL+Senna) の join を高速化 自分の利用形態において、Tritonn の処理を最適化するパッチを書きました。具体的には、2種類の最適化を行いました。ひょっとするとバグがあるかもしれませんが、興味がある方は、以下のパッチ (tritonn-1.0.9用) とあわせてごらんください。 1. 全文索引内にプライマリキーを格納 SQL クエリを最適化する際、アクセスしたい全カラムを格納したインデックスを作成することで行データへのアクセスを抑止して速度を稼ぐ、というのは定石のひとつです。しかし、MySQL の全文索引 (フルテキストインデックス) では、他のカラムと組み合わせた複合キーを作成することができません。このことが、T

    aki77
    aki77 2008/02/06
    patch
  • Kazuho@Cybozu Labs: setlock を使って cron をぶんまわす方法

    « データベースをコピーするモジュール DBIx::Replicate | メイン | Tritonn (MySQL+Senna) の join を高速化 » 2008年01月30日 setlock を使って cron をぶんまわす方法 事前計算や DB 再構築を手軽に実行するのに cron は便利ですが、タスクのまわし過ぎによるサービスのパフォーマンス低下や実行順序の制御を別途行う必要があります。自分は、そのためのツールとして、daemontools の setlock コマンドがお気に入りです。setlock は、flock を用いて、タスクの待機や実行中止を制御することのできる、とても小回りのきくプログラムです。 1-59/* * * * * /usr/local/bin/setlock -nx /tmp/precompute.lock /usr/local/bin/setlock

    aki77
    aki77 2008/02/04
    cron
  • 秋元@サイボウズラボ・プログラマー・ブログ: 誠実なお店の看板

    via del.icio.us/popular バイク店にかかっていた正直な看板の写真だそうで。 「良いサービスを、安く、早く。3つのうちどの2つでもお選びいただけます」 良いサービスを安く、という場合は時間がかかります 良いサービスを早く、という場合はお代がかかります とにかく安く早く、という場合はサービスの質を落とさせていただきます ソフトウェアの開発も同じことで、3つを同時にいくらでも満たすのは無理。できますと言うエンジニアがいたら詐欺師かダンピングのどっちかだろう。 機能とコストと納期は、x-y-zの三軸に張り付いたゴムの膜みたいなもので、一つをグーッと引っ張ろうとすると、他の二つがつられて短くなっていくものだ。 相手が顧客でも営業でも、それまで無かった新しい制約条件を追加されたときに、「それを実現すると、代わりにこれが犠牲になります」と言えなければ、プロジェクトを制御しているとは

    秋元@サイボウズラボ・プログラマー・ブログ: 誠実なお店の看板
  • Google Chart APIジェネレータ | 秋元@サイボウズラボ・プログラマー・ブログ

    via del.icio.us/popular 弾さんがいくつか作ってた(1), (2)けど、種類の対応を増やしたようなジェネレータが出てた。 折れ線グラフ、棒グラフ、円グラフ、ベン図、散布図を表示するためのGoogle Chart APIのURLを、ページ上で試しながら作ることができる。 タイトルの日語は%u形式にescapeされてしまうのでダメだし、項目名の日語は生で渡されてしまうのでこれも表示はされているけどだめだと思う。 ソースのapp.jsのそれぞれの部分を正しくエスケープするように直せば、日語にも対応できるだろう。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「である」調です。(参考)記事の内容が古くて役に立たなくなっている、という場合にはコメントやツイッターでご指摘いただければ幸いです。最

    Google Chart APIジェネレータ | 秋元@サイボウズラボ・プログラマー・ブログ
  • htmlのテーブルをtracの表にする | 秋元@サイボウズラボ・プログラマー・ブログ

    html2wikiで、HTMLソースからwiki記法への変換ができる。 tracに表を貼りたい場合は、16個のWiki方言を選べるようになっているので、[MoinMoin]形式を選ぶ。 上記リンクで公開されているのは、CPANのHTML::WikiConverterを使っているそうだ。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「である」調です。(参考)記事の内容が古くて役に立たなくなっている、という場合にはコメントやツイッターでご指摘いただければ幸いです。最新の状況を調べて新しい記事を書くかもしれません

    aki77
    aki77 2007/12/17
    『html2wikiで、HTMLソースからwiki記法への変換ができる。』
  • Google Appsメール移行APIがリリース | 秋元@サイボウズラボ・プログラマー・ブログ

    via Digg ついに来たか。他のメールクライアントの既存メールをGmailへ移行させるためのAPIGoogle Apps Email Migration APIだ。 自分のサーバにてAtom形式でメールの生データを生成し、それをこのAPIに伝えることによって、Google Appsがメールデータを読み込み、Gmailのデータとして反映させるという仕組みのようだ。 Javaと.NETについてはクライアントの作り方のチュートリアルが用意されている。GData APIのライブラリを使えば、他の言語でも大差なく作れそうだ。 第一のターゲットはOutlookだろう。日ではそれほど強くないが、アメリカではOutlookのシェアは高く、メールシステムを取りにいこうとする製品はOutlookとのシンクや移行手段を提供することが求められることが多い。 # Share360(サイボウズOfficeの英

    aki77
    aki77 2007/11/29
    『自分のサーバにてAtom形式でメールの生データを生成し、それをこのAPIに伝えることによって、Google Appsがメールデータを読み込み、Gmailのデータとして反映させるという仕組みのようだ。』
  • Webページの本文抽出 (nakatani @ cybozu labs)

    Webページの自動カテゴライズ の続き。 前回書いたとおり、パストラックで行っている Web ページのカテゴライズでは、Web ページの文抽出がひとつの鍵になっています。今回はその文抽出モジュールを公開しつつ、使っている技法をざっくり解説などしてみます。 モジュールの利用は至極簡単。require して analyse メソッドに解析したい html を与えるだけ。文字コードは UTF-8 です。 【追記】大事なこと書き忘れ。モジュールは Ruby1.8.5 で動作確認していますが、特別なことはしていないので、1.8.x なら動くと思います。 $KCODE="u" # 文字コードは utf-8 require 'extractcontent.rb' # オプション値の指定 opt = {:waste_expressions => /お問い合わせ|会社概要/} ExtractCont

    aki77
    aki77 2007/11/05
    スクレイピング
  • PHP Stompライブラリを呼び出す消費者スクリプトを書く | 秋元@サイボウズラボ・プログラマー・ブログ

    消費側はこんな感じで。 <?php /** キューの消費側サンプル */ // ライブラリ読み込み require_once 'Stomp.php'; // ローカルホストのStompサーバに接続 $connection = new StompConnection("localhost"); // TBA: エラー処理。ライブラリ中でdieしてるのでライブラリも要修正 // 接続パスワードは今は何でも通し $handler = $connection->connect("akky", "dummypassword"); // TBA: エラー処理 //print_r($handler); // キューの識別子を与えて、メッセージを受ける $connection->subscribe("/queue/miaumiau"); // 無限ループで受信を続ける while (true) { //

    aki77
    aki77 2007/10/31
    メッセージキュー
  • phpspotの件のまとめ | 秋元@サイボウズラボ・プログラマー・ブログ

    phpspot開発日誌のKJさんからメールがあり、この週末にメールにて議論を行なってきた。お互いのブログに対する考え方が違うという結論についは合意できたので、ここでそれぞれの見解をまとめてこの件については終わりとしたい。 メールでの議論の内容については、KJさんの希望により、非公開とする。 合意の内容は以下のとおり。 議論の結果、お互いのブログの運営で、間違いの指摘に対する考え方が違うことがわかったとし、それぞれの考え方を説明する。 ブログで書かれた間違いの指摘や、その真偽に関する議論についての秋元の考え方は、以下の通り。 秋元は、ブログの間違いの指摘は公開コメントやブログで行い、間違いかどうかの議論などは他のブロガーやブックマーカーも含めて衆目の中全員で検証する、のがいいと思っている。 KJさん側の考え方は、最後に秋元がまとめた時点では以下だが、 KJさんは、ブログの間違いの指摘は(あれ

  • phpspotの件の続報 | 秋元@サイボウズラボ・プログラマー・ブログ

    phpspotの人は正規表現について語らないほうがいいのではを読まれたようで、記事の更新をされたようだが、まさに予想したとおりのphpspotメソッドとなっている。 僕が気づいた範囲での修正箇所は以下のとおり タイトル先頭に「訂正:」を追加 動作確認はしなかったが目視は行なった。目視ではわからなかったという弁明の追加 紹介された元の英語記事へのリンクの削除 ソースコードに取り消し線 以前いろいろ言われた正規表現の解説ページに、注意書きと他サイトの解説へのリンク 問題の指摘はフォームから受付けるという告知 まず、元英文記事へのリンクを消した理由がわからない。元記事が読まれると何か不都合でもあるのだろうか。 元記事の人もコメント欄でいろいろ叩かれているけど、それに答えてスクリプトを手直ししたりしている。一旦何かについて「知っている」と書いたのであれば、それが正しくなるように努力するのが始めた者

  • あなたの時給教えます | 秋元@サイボウズラボ・プログラマー・ブログ

    via del.icio.us/popular 簡単だけど面白いかも。Your salaryは、時給や月給を入力すると、リアルタイムにあなたが稼いでいる金額を見せてくれる。ドルとユーロだけだが、紙幣や硬貨の表示も出てきて直感的。 年/月/週/日/時/分/秒の割合で変換しているだけなので、日円の場合でもおおざっぱにゼロを二つとれば、ドルが100円、セントが1円として読めるだろう。月給40万円なら、4000$/monthlyと入れればよい。 # ブログ一書いてる時間でどれだけ給料が消費されてるかわかる。とか。ああおそろしい 「千円札は拾うな」というがあったけど、ああいうので言ってるようなコスト意識を作業に持たせられる…かな? 気が散って仕方がないかもしれないが。 # あと「千円札を拾わない」のが仕事のやり方として正しいかどうかも知らない。いかにも売れそうなタイトルだとは思った。屋でパラ

    あなたの時給教えます | 秋元@サイボウズラボ・プログラマー・ブログ
    aki77
    aki77 2007/10/18
    『時給や月給を入力すると、リアルタイムにあなたが稼いでいる金額を見せてくれる』
  • phpspotの人は正規表現について語らないほうがいいのでは | 秋元@サイボウズラボ・プログラマー・ブログ

    「実用的なPHP用の正規表現x8」というphpspot開発日誌という記事で、 8 Practical PHP Regular Expressions – Web devlopment blogという、今日del.icio.us/popularに出ていた記事の紹介がされている。このサイトの記事はいつもそうだけど、はてなブックマークでも人気で、既に50名を越えるユーザにブックマークされているようだ。 1 メールアドレスチェック $string = "first.last@domain.co.uk"; if (preg_match( '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $string)) { echo "example 3 successf

    aki77
    aki77 2007/10/17
    『このエントリもphpspotメソッドで対処されそうな気もするけど』
  • GoogleにSEOの何たるかを教えるサイト | 秋元@サイボウズラボ・プログラマー・ブログ

    via del.icio.us/popular これが現在のグーグル。リンクを集めてGoogleでの順位を上げるという意味では、はなはだ心もとないウェブデザインと言わざるを得ない(と作者が思ったかどうかはわからんが)。 魅力的なサイトにして、Googleで上位表示させるためには、もっといろいろな工夫が必要である。 上記のリンク先から青い吹き出しの解説を辿っていけば最後まで見ていける。解説の内容を確認したい人のために、下におおまかな訳をつけておく。 リンクを適切に増やし、コンテンツの場所をGoogleに教えなければならない 毎日新しいコンテンツを増やし、外部からのリンクを増やさないと、Googleは重要なサイトとは思ってくれない S.B.S.F(ソーシャルスパムブックマークファシリテーター)を追加して、ソーシャルなリンクをたくさん獲得しよう 関連するキーワードの密度を上げよう。「サーチ」を9

    GoogleにSEOの何たるかを教えるサイト | 秋元@サイボウズラボ・プログラマー・ブログ
    aki77
    aki77 2007/10/16
    『冗談としても面白い上に、よくできたSEO/ウェブサイトプロモーションの教材でもあるんだけれど』
  • Kazuho@Cybozu Labs: MySQL のウォームアップ (InnoDB編)

    « DBIx::Printf と LIKE 式 | メイン | メッセージキュー事始め in Perl - コマンドラインクライアントを作ってみた » 2007年10月11日 MySQL のウォームアップ (InnoDB編) サーバの起動直後はデータがメモリ上にないためデータベースの応答速度が遅い、というのは良く知られた話かと思います。MySQL の場合、使っているエンジンが MyISAM であれば、各データファイルをあらかじめ cat ... > /dev/null するなりしてバッファキャッシュに載せておけばいいのですが、InnoDB は独自のキャッシュを持っているのでそういうわけにもいかないように思います。 具体的には、パフォーマンスを最大限発揮するためには OS のキャッシュにではなく、InnoDB のバッファプールにデータをロードすべきであるという点。それに、たとえ OS のキャ

  • Amazon Dynamo – スケーラブルなハッシュテーブルWebサービス | 秋元@サイボウズラボ・プログラマー・ブログ

    via O’Reilly Radar Amazonが来週ACMで話すというDynamoというサービスが面白そうだ。 Amazonのウェブサービスは、たとえばS3は「ファイルを置いて、取り出せる」だけだし、EC2はサーバ一台分だけ見ればただのVPSホスティングサービスだ。だけど、必要に応じて支払いを増やすと、好きなだけスケールさせられるし、不要になれば減らすのも簡単なことから、ネットサービスの運営者が固定費について悩まなくて済むようになるという点で便利だし、そんなサービスを提供するにはたいへんな技術力が必要だということはわかる。 Dynamoも同じで、「キーと値のセットを保存して、取り出せる」、とこれだけ。数が少なければスクリプト内の連想配列とシリアライズでも済みそうな機能だけれど、これを複数サーバに分散させて、たいへんな数のキーを突っ込んでも問題なく動作することを保証したサービス、となるら