タグ

ブックマーク / developer.cybozu.co.jp (14)

  • Kazuho@Cybozu Labs: テストケースの実行にあわせて Apache を起動・終了する方法

    ウェブアプリケーションやライブラリの結合テストを行う段階になると、実際に Apache を起動してテストを実行したくなります。しかし、そのためにいちいち Apache の設定ファイルを修正して httpd を再起動して、とやっていては面倒です。特に複数のプログラムを同時に開発していると、あっちをテストしたらこっちが動かなくなって… なんてなったりして嫌気がさしてきます。 そこで、テストを実行する際に、環境毎に異なる以下のような問題を吸収しつつ、テスト専用に設定された Apache を自動的に起動終了してくれる Perl モジュール:Test::Httpd::Apache2 を書きました。 環境によって、インストールパスが違う (/usr/local/apache/bin だったり /usr/sbin だったり) 環境によって LoadModule の要不要や、ロードするパスが違う 環境によ

    dealforest
    dealforest 2010/09/05
    [Test::Httpd::Apache2]
  • Kazuho@Cybozu Labs: REST におけるトランザクションについて (Re: Web を支える技術)

    といいつつ、ひとつだけ理解できないというか、納得できないところが。トランザクションのところがなんだかRESTっぽくないのがすごく気になる Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ)(山 陽平) - ただのにっき(2010-04-23) 「Web を支える技術」は自分もとてもいいだと思う (教科書としてすばらしいし復習用としても読みやすいのでイイ) のですが、トランザクションの所だけは分かりづらいなと感じました。その原因は、atomic transaction で解決できる課題を例として使っているという点と、トランザクションと更新クエリのレイヤ分割がされていない、という2つの点によるものではないでしょうか。 HTTP 上でトランザクションを表現する必要があるケースのほとんどは、atomic transaction ではなく

  • Kazuho@Cybozu Labs: 監視とは継続的なテストである、という話 (もしくは cronlog とテストスクリプトを組み合わせた監視手法について)

    結論から先に。cronlog を使えば、アプリケーションのテストコードと全く同じ形式で、監視用のスクリプトを書くことができます。プログラマが監視ツールの記法を覚える必要はありません。これは、プログラマが運用も行うケースでは特に有効な手法だと思います。 先週公開した Kazuho@Cybozu Labs: crontab を使って効率的にサービス監視する方法 というエントリで、crontab と拙作の cronlog を用いてサービス監視を書く手法を紹介しました。しかし、挙げた例はいずれも ping や http のテストといった外形監視の手法です。RDBMS とウェブアプリケーションのみから構成されるサービスならそれだけで十分でしょう。 しかし、外形監視だけでは、メッセージキューのような非同期処理の遅延を観測することはできません。また、http のログを監視して、エラーレスポンスや平均応答

    dealforest
    dealforest 2010/01/25
    以上のように、cronlog を使えば、プログラマが使い慣れたテストスートの一部として監視系を書くことができます
  • Kazuho@Cybozu Labs: blockdiff を使ったお手軽ホットバックアップ環境の構築 (Linux, MySQL, etc.)

    一昨日に開催された hbstudy #7 にバックアップの話を聞きに行ってきました。Amanda を中心にした話で、とても勉強になりました。が、設定がめんどくさそうだなぁ、とも。自分の需要にはあわない感じでした。 勉強会が終わったあとで、自作のバックアップスクリプト blockdiff に関する話を何人かの方とさせていただいたのですが、思いのほか反応が良かったので、あらためて紹介したいと思います。 blockdiff は、一言でいうと、パーティションやデータベースのデータファイルの差分バックアップツールです。rsnapshot に似ていますが、rsnapshot ではデータベースのホットバックアップ不可能です。逆に blockdiff はディレクトリ単位でのバックアップには対応していないかわり、ファイルシステムやデータベースを、一貫性を保ちつつ実質無停止で差分バックアップすることができます

  • Kazuho@Cybozu Labs: Writing Hot-deployable servers (introduction of Server::Starter)

    Yesterday at YAPC::Asia 2009, I did a LT introducing verious techniques to write hot-deployable servers, and introduced a perl module called Server::Starter that encapsulates the burden of developing support for hot-deployment within each TCP server program. The presentation slides are on Slideshare.

    dealforest
    dealforest 2009/09/13
    [YAPC::Asia2009][Server::Starter]
  • Kazuho@Cybozu Labs: A Clever way to scale-out a web application (YAPC::Asia 2009 Presentation)

    For couple of months I have been writing middlewares for database shards, and today I made a presentation covering themIt includes the following. Incline - a trigger and queue based distributed materialized view manager Pacific - a set of perl scripts to manage MySQL shards, a MySQL shard can be split into two in less than 10 seconds of write blocking (and no read blocks) DBIx::ShardManager - a

    dealforest
    dealforest 2009/09/13
    [YAPC::Asia2009]
  • Kazuho@Cybozu Labs: Perl のテスト用に MySQL 環境を自動で構築するモジュール Test::mysqld を書いた

    ORM やウェブアプリケーション関連のライブラリなどのテストケースを書くにあたっては、 RDBMS へのアクセスが必要になります。しかし、SQLite のようなスタンドアローンのデータベースと比較すると、サーバ型データベースである MySQL に接続してテストを書くのは、既存の MySQL の権限設定やデータベース名を気にする必要があったりと、いろいろ不便です。そこで、MySQL のインスタンスをテンポラリディレクトリに自動生成し、テストが終わったら削除してくれる Perl モジュール Test::mysqld を書きました。こんな感じで使います。 use DBI; use Test::mysqld; use Test::More; my $mysqld = Test::mysqld->new( my_cnf => { 'skip-networking' => '' }, # TCP接続を

    dealforest
    dealforest 2009/08/05
    [Test::mysqld]
  • 記号でPolyglotプログラミング♪(RejectKaigi2009) | TAKESAKO @ Yet another Cybozu Labs

    RubyKaigi2009の最終日に同じ場所で開催された別のイベント「RejectKaigi2009」にて 「はじめてのRuby1.9プログラミング」と題して、記号Polyglotプログラミングの話をしてきました。 3分という限られた時間でありましたが、貴重な発表の機会を与えてくださりありがとうございます。 取り急ぎプレゼンで披露した記号Polyglotのプログラムを公開しておきます。 ■ hello.pl (という名前ですが、Perlの他にRubyJavaScriptでも実行できるプログラムです) "#{",$/*"}";%#=();$^_^=’?“;">)~${`&&@`{;:+`[[‘,$^_^=’/?")-=^{(=!".=.!,!)&&>’,$^_^=’`-+|{!?“*.((-+({:^(_^’,$^_=”^’+@$@&’^’^.@%@’.’$^_^"";’.$^_^"",’

  • Kazuho@Cybozu Labs: MySQL のトリガーの実用性を確認するために InnoDB の SELECT COUNT(*) を高速化してみる

    最近 RDBMS のトリガーを色々書いているのですが、知らない人にトリガーが何かいちいち説明するのに簡単な例はないかな、というのと、MySQL の処理速度はトリガーによってどの程度変化するか、ということを確認するために、以下のような実験を行ってみました。 InnoDB はしばしば、「SELECT COUNT(*) が遅い!」と批判されます。では、トリガーを使って行数を別のテーブルにキャッシュすればいいのではないでしょうか? 以下のように、極めて小さなテーブル t1 を作り、その行数を t1_cnt にキャッシュしてみることにします。 mysql> create table t1 ( ->   id int unsigned not null primary key auto_increment, ->   v int unsigned not null -> ) engine=innodb

    dealforest
    dealforest 2009/07/06
    「トリガーという機能特有のオーバーヘッドは、少なくともこの場合はない」が、多数の行を更新するような場合は当然注意が必要。
  • Kazuho@Cybozu Labs: 今更 C++ で JSON パーサ「picojson」を書いたわけ

    既に mattn さんが、「Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!」で紹介してくださっています (mattn さん、アドバイス&バグ情報ありがとうございます!) が、いまさら C++ で JSON パーサを作りました。それは、以下の3点を満たすものがなかったから。 ヘッダファイル only boost 等、他の重たいライブラリに依存しない array や object が STL にマッピングされる コードは、coderepos に置いてありますので、よろしければお使いください (picojson.h)。 なお、現時点での制限事項として、 \n や \r, \uXXXX といったエスケープの処理が未実装rev. 34232 で対応しました (含サロゲートペア) 空白文字の判断基準が RFC と異なるrev. 34277 で空白と

  • Kazuho@Cybozu Labs: Pacific という名前の分散ストレージを作り始めた件

    大規模なウェブアプリケーションのボトルネックがデータベースであるという点については、多くの同意が得られるところだと思います。解決策としては、同じ種類のデータを複数の RDBMS に保存する「sharding」 (別名:アプリケーションレベルパーティショニング/レベル2分散注1) が一般的ですが、最近では、分散キーバリューストア (分散 KVS) を使おうとする試みもみられるようになってきています。 分散 KVS が RDBMS sharding に対して優れている要素としては、事前の分割設計が不要で、動的なノード追加(とそれにともなう負荷の再分散)が容易、といった点が挙げられると思います。一方で、Kai や Kumofs のような最近の実装では eventually consistent でこそ無くなってきているものの、ハッシュベースの分散 KVS は、レンジクエリができなかったり (例:

  • 第一回ソーシャルブックマーク研究会に行ってきた | 秋元@サイボウズラボ・プログラマー・ブログ

    参加者のレポート率が非常に高いので出遅れた感があるけども。東工大大岡山キャンパスで土曜日に終日開催された、ソーシャルブックマーク研究会(SBM研究会)を聴講してきた。 はてな、ECナビ、livedoorクリップ(担当違う?)、favgrなど中の人がいっぱい来ていた。土曜日に朝から一日やるという会に100人近い参加者。 全体的によく準備されていて、初回・90人もの参加者・無料ということを考えると素晴らしい運営だった。内容については充実したレポートがいっぱいあるのでそちらをどうぞ。 他の方のレポートでいろいろ書かれているとおり、発表はバラエティもあって良かった。途中、アルゴリズムの詳細に入ったようなところは難しくて寝そうになったけれど。 ひとつ気になったのは、Yahoo!ブックマークもYahoo!みんなのトピックスの名前も出なかったところ。(曖昧な状態のときに言われてたら申し訳ない。) 実際は

    dealforest
    dealforest 2008/07/17
    れびゅー
  • 書評: ハイパフォーマンスWebサイト | 秋元@サイボウズラボ・プログラマー・ブログ

    いただいたもの ハイパフォーマンスWebサイト / Steve Souders 著, 武舎 広幸、福地 太郎、武舎 るみ 訳 YSlow for Firebug ページのチューニングを助言してくれるFirefoxアドオンで紹介したYSlowの作者Steve Soudersさんによる、ブラウザクライアント側でのパフォーマンスチューニングを中心にしたtips。 スケーラブルWebサイト(Flickrのウェブサイトスケール技術について解説した)と同じ訳者による翻訳。スケーラブルWebサイトも面白かったので期待して読んだ。 YSlowと同時期にYahoo!から出された、ブラウザでの読み込みとレンダリング完了までの高速化についての最初の13個のtipsにAjaxの1個を加えた14個が、今回のの内容になっている。 ウェブで発表された際にも、かなり細かいところまでブログやプレゼン資料で説明され

    書評: ハイパフォーマンスWebサイト | 秋元@サイボウズラボ・プログラマー・ブログ
    dealforest
    dealforest 2008/05/04
    ハイパフォーマンスwebサイト
  • 秋元@サイボウズラボ・プログラマー・ブログ: Blueprint CSSデザインのためのオープンライブラリ

    via del.icio.us/popular Blueprintは、複数人で開発されているCSSライブラリだ。 マルチカラムレイアウトを簡易なclass指定で実現するのが目玉機能らしい。 ブラウザ間のデフォルトスタイルの違いをリセットしたり、印刷用のスタイルを提供したりという機能も。 Yahoo UI libraryのCSSセットと共通するところが多いと思ったが、マルチカラムの指定方法はこちらのほうが直感的かなとも思う。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「である」調です。(参考)記事の内容が古くて役に立たなくなっている、という場合にはコメントやツイッターでご指摘いただければ幸いです。最新の状況を調べて新しい記事を書くかもしれません

  • 1