Entries from 2009-01-01 to 1 year

おのこもすなる Objective-C といふものを (ry

Objective-C で hello world は以下のように書ける。 #include <stdio.h> int main(void) { puts("hello world"); return 0; } これをコンパイルするには以下のようにする。 gcc -Wall tokuhiro.m実行結果は以下のとおり hello worldC と同じなので簡単ですね (ぉ参考:</stdio.h>…

C++ でヘッダファイルだけでグローバル変数を定義する方法

今日、会社で出た話。C言語だとグローバル変数を (宣言ではなく) 定義するには、必ずソースファイル内を書かなければいけなくて面倒だけど、C++ なら簡単。テンプレートクラスを使えば、ヘッダファイルだけでグローバル変数を定義できる。以下、参考。 なの…

mysql と drizzle の負荷テストツール「skyload」が凄い!

tmaesakaさんがやってくれました。ずいぶん前からSQLのベンチマークを測定するのに使いやすいプログラムないかなーと思ってました。個人的にはmysqlslapというのを使ってたのですが、幾らか気に入らない所があったりコマンドラインオプションが複雑で毎回 --…

[MySQL] INFORMATION_SCHEMA から動的にテーブルを作るテストケースが動かなくて、はまってた件

lower_case_table_names=2 の環境のみ (= Win32, OSX) の話なんですが。大文字を含む名前をもつテーブルの INFORMATION_SCHEMA を読んじゃうと、以後 mysqld を再起動するまで同名の CREATE TABLE できなくなるという...バグとしては5月に報告されていたら…

C++ を書いていて boost に依存したくない理由

「boost 等、他の重たいライブラリに依存しない」boost 重いと思ったことないけど,そういう領域はあるんやろうなぁ はてなブックマーク - HISAMATSUのブックマーク / 2009年7月3日 おもしろい点だと思うので、こちらでフォロー。自分で使うプログラムを書い…

Atom のハイパースレッディングの効果

DELL の Inspiron Mini 9 を使っていて C++ のコンパイルに時間がかかるからハイパースレッディングの効果がどのくらいあるのかなーと思って試してみた。 コマンド 所要時間 (秒) make 30.825 make -j 2 22.501 おー速くなる速くなる。37% の速度向上。他の…

innodb_flush_logs_at_trx_commit のベンチマーク

binlog の設定等によって大きく変わると思うので要注意ですが、テストによっては、これぐらい差が出ます。 hdparm -W trx_commit 秒 0 0 25.492 0 1 281.078 1 0 24.138 1 1 67.051 測定環境は MySQL 5.1.35; linux 2.6.18; x86_64。テーブルのスキーマは、 …

INSERT したら STDERR かどっかのファイルに write(2) するだけのストレージエンジンがほしい

別に、MySQL のストレージエンジンじゃなくて UDF でもいいんですが*1。理由は、トリガーのオーディティングとかロギングとかデバッグとかで、ログをはきたいから。MyISAM みたいな non-transactional なストレージエンジンにログを INSERT していってもいい…

svn レポジトリの参照先を変える方法

2009年7月6日追記: 以下は svn switch あるいは svn switch --relocate が使えない場合の話です。Subversion のレポジトリが移行したときに、手元に co してあるソースをそのまま、レポジトリの URL だけを書き換えたいことって結構ある。 #運用サーバへの…

プロトコルハンドラをイベントドリブンに書く場合に O_NONBLOCK をセットするかしないか。または、それらを多重化する場合の方針について

まず、イベントドリブンなプロトコルハンドラを実装する側の事情を説明すると、O_NONBLOCK をセットすると、複雑なプロトコルの実装 (あちこちで write(2) を呼んでるとか) にあたって、いちいち select(2)->poll(2) のステップをふまなくても、返り値が EWO…

DBD::Pg でリクエスト並列化

PerlからPostgreSQLに非同期アクセスする方法 - iakioの日記 - postgresqlグループ を見てほぉぉと思って、IRC で話したりしながら適当に書いてみた。たぶんこんな感じ。動かしてないけど。 use DBD::Pg qw(:async); # send queries for my $dbh (@dbh_list)…

Re 分散ストレージの収束する方向 (のうち Pacific 関連の話)

id:frsyuki さん & id:hirose31 さん、クラウドコン優勝おめでとうございます! (参考: Interop Tokyo 2009のクラウドコンでグランプリいただきました!! - (ひ)メモ) Pacific はリゾルバがボトルネックになるが、Consistent Hashing + double-hash-space…

MySQL の XA Transaction と Pacific

Kazuho@Cybozu Labs: Pacific という名前の分散ストレージを作り始めた件 に関連した話。そういえば MySQL には XA Transaction 機能があるわけだけど、これ使うと Pacific の複数の MySQL node に 2-phase commit できたりするんだろうかとちょっと思った。…

Tokyo Cloud Developers Meetup #02 に参加して

講演は ustream で見て、懇親会だけ参加してきた。かな〜り勉強になった。GAE Data Store 関連でよくわからないことがあったので、2点質問をした。Q. entity を更新してから index を更新していると言うが、それだと unique secondary index はサポートでき…

Perl5 でネコ演算子Range Check

Perl 5 で、ある値が範囲内に入ってるか確認したいことってあるわけで。たとえば、 my $t = time; if ($min <= $t && $t < $max) { ... }みたいな冗長なコードは書きたくない。じゃあどうするかなって言うと、 if (grep { $min <= $_ and $_ < $max } time) …

Thrift のインストール

Thrift をインストールしようとして autotools まわりではまっちゃった場合は、autoconf 済の source tarball が instant.thrift-rpc.org からダウンロードできるらしい。thrift-users ml でそういう話が流れてた。Web 上には見当たらないけどw

linux で NCQ が有効かどうかを確認する方法

dmesg の (depth \d+/ の数字が 0 じゃなければ NCQ 有効。 Linux NCQ (SATA native command queueing) support is enabled automatically, if your SATA drive supports it. At boot, you will see a line in dmesg (or kernel log) like ata2.00: ATA-7, m…

afp (Apple Filing Protocol) のパケットサイズ調整

クライアントの調整Mac OS X の AFP クライアントには、サーバに対するネットワーク遅延をチェックし、その結果を基にパケットサイズを選択する機能が備わっています。そのために、クライアントは、AFP 接続を開始するために最初にサーバに送信するパケット…

DNS移行の際の旧ネームサーバの取り扱いについて

キャッシュサーバーの実装がおかしいとか言ってる人がちらほらいるんですが、NSレコードのTTLが切れている場合には必ず「上位のネームサーバーから再問い合わせすべき」なんですかね。ドメイン移管時なんかを除いてはほぼ確実に同じNSレコードが返ってくるで…

風水と記数法

「幸せを呼ぶサーバー風水術」、登場 | スラド の件、目次が http://www.watch.impress.co.jp/akiba/hotline/20090425/image/sstj11.html にあるんだけど、記数法が「道(タオ)の叡智」によって、1, 6, 8, 9, 11, 16, 18, 19, 61, 66, 68, 69,...みたいにな…

Ptrace と TOCTOU 攻撃

帰国して、ようやく 404 Blog Not Found:perl - Shibuya.pm #11:The Catcher in the INT 80h が読めるようになった id:kazuhooku です。弾さんのスライドは、FreeBSD 特有の事情と、その問題をカバーしようとするための努力について解説していて、とてもおも…

今回の shibuya.pm で一番困ったこと

M○SQL Conference & Expo 参加中のため、アメリカから shibuya.pm 関連のブログエントリを読んでいるわけですが。一番困るのは発表者の皆さんが shellcode (あるいはそれっぽいもの) をブログに貼りまくってること。ホテルのインターネット回線 (LODGENET) …

MySQL Conference & Expo にやってきた

着いたら Oracle Conference になってたぉ参考: 米Oracleが米Sunを74億ドルで買収へ - Enterprise Watch Watch 他

SSD がコモディティになっても状況はかわらない

脊髄反射。 Oracle や MySQL など近年の RDBMS はインデックスのデータ構造にB木 (の変種) を採用していますが、その理由はここにあります。SSD がコモディティになると状況は変わる(中略)二次記憶上での検索用のインデックスにはこれまで B木のようなディス…

データフォーマットはテキストであるべきか、バイナリであるべきか

404 Blog Not Found:デバッグより重要なもの 2009-04-02 あたりの議論は正直よくわかんないけど、以下、駄文。データフォーマットとしてバイナリを推す派 vs. テキスト派の対立ってのは、別に最近始まったことじゃないわけで。この問題について自分が一番印…

Discard request と SSD コントローラと OS の対応状況

8月版 ブート時間の短縮にかけるカーネルアスリートたち(2/2) − @IT - SSDドライブの耐用年数を増やすセクタ破棄リクエスト関連の話。OCZ の Vertex シリーズのコントローラは、TRIM command に対応してるっぽい。よくわかんないけど。で、linux の状況は…

perl golf

$ perl -le'for$i(@a=(0..9,A..F)){print map"$i$_ ",@a}' 16進数のテーブルを表示するワンライナーを考える - すぎゃーんメモ printf %c 使って perl -e'printf"%02X%c",$_,$_+1&15?32:10for 0..255' と書いた方が2バイト短いかなと思いました。まだ縮むん…

呼び出し元のコンテキストで eval する方法

String::TT なんかがそうですけど、呼び出し元の変数を使いたい、ということがときどきあります。たとえば、 sub hello_to_alice { my $user = "Alice"; say_hello(); # "Hello to Alice!" と言ってほしい } って書きたいとか、そういうケースですね。結論か…

C で split をどう書くかという、昭和時代の自転車置き場の議論

でまあというわけで split/join とかしたい時は 99% 速度なんて気にしてないという法則から、普通に vector かえす split がとりあえずあったりいいんじゃないかなぁとか思うわけです。 split/join - はじめてのにき(2009-03-17) C++ の場合であれば 100% 同…

セキュアな XS ローダー

perl のプロセス内でサンドボックスを作ろうと思うと、少なくとも以下の2点が必要です。 オプコードの制限 DynaLoader::dl_install_xsub を利用したネイティブコード注入 このうち、オプコードの制限については、ops モジュールで行うことが可能です。一方…