タグ

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

  • Kazuho@Cybozu Labs: なんとなくリフレクション in C

    « MySQL の ORDER BY を高速化 | メイン | C++ で自動型変換 » 2008年06月25日 なんとなくリフレクション in C++ C++ はとてもいい言語なのですが、リフレクションがありません。昨夜、1年ぶりくらいに C++ でリフレクションしたい熱に感染したのですが、ちょっとググった範囲では良いものが見つからなかったので、作ってみました (単に作りたかっただけという説も)。こんな感じで使います。 #include "reflection.hpp" struct Foo { int i; std::string s; }; // リフレクション情報を定義 namespace reflection { template <> struct def<Foo> : public def_base<Foo> { def() { REFLECTION(i); REFLECTI

    f99aq
    f99aq 2008/10/12
    map で持ってるのか
  • Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践

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

    f99aq
    f99aq 2008/07/12
  • Kazuho@Cybozu Labs: MySQL のクエリ最適化における、もうひとつの検証方法

    « メッセージキュー事始め with Q4M | メイン | フレンド・タイムライン処理の原理と実践 » 2008年06月09日 MySQL のクエリ最適化における、もうひとつの検証方法 EXPLAIN を使用して MySQLSQL を最適化するというのは、良く知られた手法だと思います。しかし、EXPLAIN の返す結果が、かならずしもアテになるわけではありません。たとえば、以下のような EXPLAIN を見て、このクエリが最適かどうか、判断ができるでしょうか。私には分かりません。 mysql> EXPLAIN SELECT message.id,message.user_id,message.body FROM message INNER JOIN mailbox ON message.id=mailbox.message_id WHERE mailbox.user_id=2 OR

    f99aq
    f99aq 2008/06/15
  • Kazuho@Cybozu Labs: Parallel::Prefork - Perl でマルチプロセスなサーバを書く方法

    « Q4M (Queue for MySQL) 0.3 リリース | メイン | Q4M Version 0.4 で高速なクローラを書いてみた » 2008年04月04日 Parallel::Prefork - Perl でマルチプロセスなサーバを書く方法 Perl でマルチプロセス処理を行う場合は Parallel::ForkManager を使うというのが定番かと思います。しかし、このモジュールはシグナル処理を前提とした作りになっていない注1ため、シグナルを受信するまで動き続けるようなサーバを書きづらい、という問題がありました。 そこで、Parallel::ForkManager の API は、ほぼそのままに、シグナル処理が可能なプロセス管理モジュールを作ることにしました。それが Parallel::Prefork です。Parallel::Prefork を使うことで、Gracef

  • Kazuho@Cybozu Labs: Q4M Version 0.4 で高速なクローラを書いてみた

    « Parallel::Prefork - Perl でマルチプロセスなサーバを書く方法 | メイン | Japanize for IE バージョンアップのおしらせ » 2008年04月07日 Q4M Version 0.4 で高速なクローラを書いてみた 日、MySQL 5.1 のプラガブルストレージエンジンとして動作するメッセージキューQ4M のバージョン 0.4 をリリースしました。バージョンでは、条件付購読 (conditional subscription) という、特定の条件を満たす行だけをメッセージキューから読み込む機能に対応したのですが、これを使って、クローラを書いてみました。 使い方は以下のとおりです。 # url テーブルを作成 % mysql -p test mysql> CREATE TABLE url ( id int(10) unsigned NOT NULL

    f99aq
    f99aq 2008/04/13
  • Kazuho@Cybozu Labs: Q4M (Queue for MySQL) 0.3 リリース

    « 高速なCometサーバを書いてみた件 | メイン | Parallel::Prefork - Perl でマルチプロセスなサーバを書く方法 » 2008年03月19日 Q4M (Queue for MySQL) 0.3 リリース MySQL 上で動作するメッセージキュー「Q4M」のバージョン 0.3 をリリースしました。今回のバージョンアップで、以下の機能が追加になっています。 メッセージリレー機能 Q4M テーブルに挿入されたメッセージを、別のサーバで動作する MySQL に転送できるようになりました。サーバが落ちたりネットワークが切断された場合でもメッセージの喪失や複製が発生しないように設計されています。 例えば Pathtraq の場合、サービス体と文解析システムは、それぞれ物理的に離れたロケーションで運用されています。そして、両者間の情報交換のために Q4M のメッセージリ

    f99aq
    f99aq 2008/03/25
  • サイボウズ・ラボ二年半の思い出 | 秋元@サイボウズラボ・プログラマー・ブログ

    プロフィールにも書いていますが、2002年から2005年の8月にかけて、Cybozu Corpというアメリカの会社で開発ディレクターを勤めていました。 それ以前は東京の町田にあるそこそこ大きな会社で企業向けのシステムのプログラマーをやっていましたが、主に処遇への不満があってベンチャー企業へ転職することになります。転職と同時に国も移ったわけで、自分としては大きな決断でした。 アメリカでは、サイボウズのグループウェアを英語やその他の言語に国際化する、という仕事をしましたが、ビジネス的にうまくいかず、Cybozu Corpは閉鎖、米国からの撤退が決まりました。そのときに転職してシリコンバレーに残るという選択肢もあったけれど、なんだかたいへんそうなので帰国して、サイボウズ・ラボの立上げに時に拾われることになります。 エンジニアに優しい開発環境・勤務体系を謳うサイボウズ・ラボの条件が良かったこともあ

  • Kazuho@Cybozu Labs: Re: for 文を setTimeout に変換する

    « メッセージキュー事始め in Perl - コマンドラインクライアントを作ってみた | メイン | djbdns にパッチをあてて Anti-DNS Pinning 対策 » 2007年11月08日 Re: for 文を setTimeout に変換する for 文を setTimeout に変換する - IT戦記の件。おもしろい。自分だったらこう書くかなと思いました。 function timeout_for(f1, f2, f3, fe) { var i = typeof f1 === 'function' ? f1() : f1; var rep = function () { if (typeof f2 === 'function' ? f2(i) : (i < f2)) { setTimeout( function () { fe(i); i = typeof f3 == '

  • Javascript で実装した Ruby インタプリタ JSRuby 0.1 リリースしました。 (nakatani @ cybozu labs)

    « MyMiniCity 日語化 | メイン | JSRuby から jQuery を使う ( Javascript 連携 ) » Javascript で実装した Ruby インタプリタ JSRuby 0.1 リリースしました。 あけましておめでとうございます。 1月からサイボウズ・ラボのオフィスが引っ越しました。新年から気分も新しくぶりぶり仕事します。よろしくです。 というわけでちょっとずつ作っていました Javascript で実装した Ruby インタプリタの "JSRuby" を一区切り付けるべくバージョン番号を付けてリリースしました。 JSRuby Project Page (CodeRepos) http://coderepos.org/share/wiki/JSRuby JSRuby Test Page http://labs.cybozu.co.jp/blog/naka

    f99aq
    f99aq 2008/01/14
    すげー
  • Kazuho@Cybozu Labs: ディスクが1回転する間に複数回 fdatasync する方法について

    « Japanize と Pathtraq が Firefox 3 Beta 1 に対応しました | メイン | ウェブアプリケーションにおけるHDDの正しい使い方 » 2007年12月28日 ディスクが1回転する間に複数回 fdatasync する方法について RDBMS のトランザクション速度は HDD の回転数に律速されるというのは、おそらく常識だと思います。たとえば MySQL のドキュメントには、以下のような記述を見ることができます。 もしディスクが OS を 「欺かなければ」、ディスクの回転速度は一般的に最大167 回転/秒で、コミット数も1秒につき167th に制限されます。 MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 13.5.11 InnoDB パフォーマンス チューニング ヒント でもその限界って、ディスクの異なる角度の位置に複数のブロック

    f99aq
    f99aq 2007/12/29
  • CAPTCHA解読ソフトの価格表に見るCAPTCHAのレベル差 | 秋元@サイボウズラボ・プログラマー・ブログ

    via del.icio.us/popular Coding Horrorブログの記事Has CAPTCHA Been “Broken”?(CAPTCHAは破られたか?)では、CAPTCHAの解読ツールに値段をつけて売っている中国の業者の価格表を紹介していて、これが面白い。 CAPTCHA用の文字列画像を作るときは、文字を画像化したり、色をつけたり、線を引いたり、無関係な点や図形を足したり、湾曲させたり、と、いろいろな加工で「人には読めるけど機械には読めない」ように作るわけだが、この価格表では、単純なCAPTCHAで彼らの販売するツールで読み取れる可能性が高いものほど値段が安くなっているし、彼らのツールでは読み取れてない場合も多いような難しいものについては、ツールの値段も高くなっている。 この価格表で図らずも、いろいろな大手サイト(主に英語中国語でのサイト)が使っているCAPTCHA図形

    CAPTCHA解読ソフトの価格表に見るCAPTCHAのレベル差 | 秋元@サイボウズラボ・プログラマー・ブログ
  • TAKESAKO @ Yet another Cybozu Labs: Real UNIX MAGAZINE Day ライトニングトーク

    先日のshibuya.jsに引き続き、 Real UNIX MAGAZINE Day に参加してきました。 以前のプレゼンと重なる部分がありますが、若輩者ながら、昨今のAjaxの技術のGIF89a(ハック)について newtype と oldtype の話を交えながら、ライトニングトークさせていただきました。 前日のshibuya.jsと変わって参加者の年齢層が大きく異なっていたのが面白かったです。 newtype : shibuya.js の参加者層(18才~30才前後がメイン) oldtype : Real UNIX MAGAZINE Day参加者層(和田先生は1931年生まれ) oldtypeの皆様にも満足いただけたようで、少し安心しました。 あと、参加者の皆さんが持ち寄って展示されていたビンテージコーナーは初めて見るものばかりで圧巻でした。

    f99aq
    f99aq 2007/11/05
  • TAKESAKO @ Yet another Cybozu Labs: Shibuya.JS Digest (for John Resig) 発表資料公開しました

    The Future of JavaScript -presented by Mozilla & Shibuya.JS- で、ゲストの John Resig 向けに Shibuya.JS Digest の発表をさせていただきました。 当日のustream中継は約200名ぐらいの方が視聴されていたと聞いています。 画面が小さくてすみませんでした。当日の録画アーカイブもustream上で見れるようになっています。 John Resig と記念撮影 筆談(主にamachang と John Resig と kawaさんの会話) ohn Resig - Speaking in Tokyoによると、 As a side note: Shibuya.JS is the only JavaScript user group that I know about - really anywhere in t

  • 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) { //

  • BitTorrent Conference 2007へ行ってきた | 秋元@サイボウズラボ・プログラマー・ブログ

    BitTorrent Japanというのが設立されていたようで、BitTorrentのクライアント網をビジネス向けコンテンツ配信に使うというエンタープライズ向けのビジネスを日で開始しているようだ。 そのBitTorrent Japanが、プロトコル設計&実装者のBram Cohen氏も呼んで説明会をする、という話が知り合いから来たので、聴きに行ってきた。 BitTorrent Conference 2007 新聞社やオンラインメディアの記者さんたちがたくさんいたので、ニュースでも出ているとは思う。 何をどうやってビジネスにするのか、自分でも疑問だったので、理解した範囲でまとめると、 BitTorrentのネットワークは、BitTorrentユーザのPCや帯域を集めて、コンテンツをユーザの近くにキャッシュでき、その結果巨大なファイルの配布が高速になる。コストも安い BitTorrentユー

  • Kazuho@Cybozu Labs: DBI::Printf - A Yet Another Prepared Statement

    « ウェブサービスのためのMutex - KeyedMutex | メイン | Perl で並列処理 (using マルチプロセス) » 2007年09月28日 DBI::Printf - A Yet Another Prepared Statement JavaC++ のような関数のオーバーロードができる言語では、プリペアードステートメントのプレースホルダが型をもつ必要はありません。しかし、Perl のように数値型と文字列型の区別がない言語で最善を期そうとすると、変数をバインドするタイミングで型を意識してコードを書かなければならず面倒です。 (参考: MySQL の高速化プチBK) だったら、printf のように、プリペアードステートメントのプレースホルダで型を指定できればいいのに、と、もともとは Twitter でつぶやいたネタなのですが、SQLステートメントをキーとしてキャッ

    f99aq
    f99aq 2007/10/03
  • TAKESAKO @ Yet another Cybozu Labs: Linux Conference 2007ストリーミング中継

    現在開催中の Linux Conference 2007 ですが、ストリーミング中継で発表の様子を見ることができるようになっています。 [専用URL] http://www.linux.or.jp:8000/lc2007.ogg(終了しました) [実施期間] Japan Linux Conference 2007開催期間 - 9月13日(木) 午前10時半から午後7時15分まで - 9月14日(金) 午前10時半から午後4時まで ストリーミングは「Ogg/Theora, Vorbis」形式です。自由なソフトウェアの立場としても非常に綺麗なフォーマットです。Linux環境ではmplayerなどで試聴可能だと思います。 自分のWindows環境では VideoLAN VLC media player 0.8.6c をインストールして中継を見ることができました。 2007/9/14 14:43頃

    f99aq
    f99aq 2007/09/14
    Theora 始ま………
  • TAKESAKO @ Yet another Cybozu Labs: LL魂お疲れ様でした[LLSpirit]

    LL魂、参加されたみなさんお疲れ様でした。みなさんのお陰で無事イベントを終了することができました。ありがとうございました。 前半の20枚だけですが、Flickrに写真をアップロードしました。 詳しい感想はのちほど。いろいろ新しい刺激を受けました。 とりいそぎ、Lightning Talksの発表資料(※画像はイメージでしたバージョン)を公開します。 イメージファイト! - 画像に埋め込まれたPHP・XSS攻撃コードと戦う5つの方法 - 11 竹迫良範(Shibuya Perl Mongers) http://wafful.org/mod_imagefight/ImageFight-LL2007.ppt 先日、PHPの攻撃コードが隠された画像ファイルが、大手ホスティングサイトで発見されたとの報道がなされました。GIF,PNG,JPEG,BMP形式の画像ファイルには、PHPのRFI攻撃で使用さ

    f99aq
    f99aq 2007/08/07
  • 市販のプリンターは印刷時に追跡用の隠しコードを描き込んでいるものがある

    どのプリンターで印刷したか、調べたらわかる? プリンターによっては、印刷した際に肉眼では見つけづらい黄色の点を勝手に印字することで、その紙に印字したプリンターのメーカー名や機種名、プリンターのシリアルナンバーや印刷日時ま […] どのプリンターで印刷したか、調べたらわかる? プリンターによっては、印刷した際に肉眼では見つけづらい黄色の点を勝手に印字することで、その紙に印字したプリンターのメーカー名や機種名、プリンターのシリアルナンバーや印刷日時までが読み取れるようになっているらしい。 顕微鏡で拡大したイエロードットの写真 この件自体は、2005年に一度話題になっていた。 スラッシュドット ジャパン | Xeroxプリンタの印刷物に追跡コード HotWired Japan ユーザーの知らぬ間に「追跡コード」も印刷 最初聞いたときは頭の悪い陰謀論みたいな話だ、と思ったけど、これを調べて注意を呼

  • Javascriptでdiffる ( with 形態素解析 ) (nakatani @ cybozu labs)

    Javascript で diff というのはいくつか試された例はあるようですが、まだこれといった決定打は出ていない様子です。 実は diff は見た目ほど軽い処理ではないので、Javascript にやらせるのはこれが結構大変…… diff の計算量は、おおざっぱに言うと比較対象の要素数の二乗に比例し(実際にはそれより小さくすることができるのですが、まあ話のイメージとして)、かつメモリを大量に消費するので、バッチ的な処理に最適化されていない Javascript にはどうしても荷が重いものとなってしまいます。 比較対象の要素数を減らせば当然計算量は減りますが、行単位で比較してもあまり嬉しくない(わざわざ Javascript で処理するということは自然文が対象と思って良いでしょう)。最小の文字単位だとギブアップ。 ということは形態素解析で分かち書きして、単語単位で diff するのが J