Cによるsleep sortの実装がないのもどうかと思ったので書いてみた

http://www.yuyak.com/1339 を見て、Cによるsleep sortの実装がないのもどうかと思ったので書いてみた。シンプルですな。 #include <assert.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char** argv) { int values[] = { 1, 9, 5, 3 }; int i; for</unistd.h></stdlib.h></stdio.h></errno.h></assert.h>…

C++0x で sleep sort 書いてみた (was そういえば C++0x での sleep sort ってこんな感じでいいのかな)

GCC 4.6.0 をがんばって OSX に入れたのに std::thread 使えなくて泣きながら修正。こんな感じすね。 #include <cstdio> #include <vector> extern "C" { #include <pthread.h> #include <unistd.h> } int main(int, char**) { int values[] = { 1, 9, 3, 6 }; std::vector<pthread_t> threads; for (auto& v </pthread_t></unistd.h></pthread.h></vector></cstdio>…

Re 常識を覆すソートアルゴリズム!その名も"sleep sort"!

常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte streamを読んで、自分が書くとしたらこんな感じかなーと思った。多重化して select 使う必要ないよねということで。 use Time::HiRes qw(sleep); sub sleep_sort { # create pi…

jailbreakしてるAndroid端末でプロセスを殺すためのワンライナー

% adb shell sh -c `adb shell ps | fgrep PROCNAME | awk '{print "\"echo kill -9 ", $2, "| su\""}'`

ファイルに書かれたら irc とかネットに通知するとかそういうデーモンを作るときは mkfifo するといいんじゃないか

デーモン側をこんな感じで書きます。 use Errno qw(EEXIST); use Fcntl qw(S_IFIFO); use POSIX qw(mkfifo); my $FIFO_NAME = "/tmp/my_messenger.fifo"; if (mkfifo($FIFO_NAME, 0666)) { # ok } elsif ($! == EEXIST) { die "$FIFO_NAME is not a fifo!" u…

スクリプトの並走度を2以上に制限する話

並走度1なら daemontools の setlock でいいんだけど。とりあえずこんなの書いた > https://github.com/kazuho/kaztools/blob/master/semaphorePOSIX Semaphore とか使うと異常終了時のカウントアップができないので強引に flock で。とりあえず困らないレ…

class definition is initialization パターンって言えばいいのかしら。クラスを定義するだけでインスタンスを自動生成する方法

C++

クラスを定義するだけで、そのクラスインスタンスが自動的に作られて登録されたりすると便利ですよね。たとえば、ビルド構成によって組み込まれるモジュールが変わる場合に、そのモジュールを Makefile に含めるだけで自動的サービスクラスが初期化されて登…

Cのコールバック関数をC++のメンバ関数にバインディングする方法

たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。たとえば、コールバック関数をセットする…

minっぽい関数の拡張系

入力としてundefあるいは値を複数受け取り 結果として値の最小値(あるいは値が全てundefの場合はundef)を返す という処理をどう書くのがいいか? 自分が思いつくのは以下のコードだけど、もっといい書き方あるかなぁ(簡潔明快であることが望ましい)。 my…

モジュールがロードできたら、その関数を呼ぶ

って処理を書きたい場合がある*1けど、そういう場合は、 my $access_allowed = eval { require Authen::Libwrap } && host_ctl('tiarra', $sock); みたいな感じでよかったらしい。って id:tokuhirom に教えてもらった *1:たとえば Tiarra (あるいはPerl) か…

Tiarra (あるいはPerl) からhosts.allowとか使ってアクセス制御する話

諸般の事情で、ついに Tiarra ユーザーになったんですけど、Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場 に書いたようにサーバのアクセス制限を hosts_access 使ってやってるので Tiarra についても同様にしたい。Perl の場合は …

alarmをネストする方法

だいたいこんな感じ。結局使わないコードだけど。alarm(0) を呼んでからセットしてるのは、$SIG{ALRM} の差し替え中にシグナルが飛んでくる可能性を考えて。このあたりは自分がセットするシグナルハンドラの仕様によっては、高速化の余地があるはず。 sub cr…

HTTP/1.1 の chunked encoding を使った POST / PUT を避けるべき理由

通信相手のサーバが HTTP/1.1 対応と確認できるまでは 1.0 と互換性のない chunked encoding は使えないし でも確認が取れた接続を使い回す = HTTP/1.1 の持続的接続を使い回して POST / PUT するってことだけど、持続的接続のタイムアウト条件は、TCP 接続…

YAPC::Asia 2010 を終えて (it's time to write code)

今年の YAPC::Asia も大盛況。"Welcome Perl" というテーマにふさわしく、ハッカーの人たちが何をやっているのかに留まらない、幅広い実用的な話を聞くことができました。その好例が峰松さんのLT「基幹システムがperlでどうしてこうなった」 であったり neko…

Apache, Lighttpd, nginx における持続的接続と lingering close の実装について

lingering close がなんであるかについては、Apache Performance Tuning - Apache HTTP Server Version 2.2 を参照。 Apache 2.2.16 と lighttpd 1.4.28 は、必ずアプリケーションレイヤでの lingering close を行う Apache は2秒、lighttpd は5秒 nginx 0.8…

livedoor Reader で覚えておくべき、たったひとつのショートカット

id:gfx に聞かれたので。Shift+Z を2回押すと、トップのバーが消えて画面が広くなる。便利。それだけ覚えてる

TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係)

Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる U…

SSD定点観測

前回の続き。9ヶ月経過。現在のヒットポイントは83/100。あと、データセットが大きくなってきた分I/O負荷が上がってる。一見まだ余裕ありそうだけどSSDなので、書き込みが増えると読み込みがサチる点注意が必要。 $ sudo smartctl -d ata -a /dev/sdc smart…

Disk I/Oの使用率を監視するワンライナー

iostat -x の %util を監視してしきい値を超えたらアラートメール飛ばしたいなぁと思って crontab 書いた。こんな感じ。 */5 * * * * perl -wle 'my $s = `/usr/bin/iostat -xk /dev/sd[abc] 270 2 | tail -4`; print $s if $s =~ m{\s(?:[0-9]{3}|[5-9][0-9…

POSIX::_exit を呼べばグローバルデストラクションは走らない

perldoc POSIX には、 _exit This is identical to the C function "_exit()". It exits the program immediately which means among other things buffered I/O is not flushed.としか書いてないけど、もちろん global destruction も走らない。 use strict…

IPC::Open3 の正しい使い方 (re .pl な config ファイルのコンパイルがとおるかチェックしてみる - TokuLog 改メ tokuhirom’s blog)

http://d.hatena.ne.jp/tokuhirom/20100813/1281666615 の件ですが、IPC::Open3 の使い方が気になったので、勝手に添削 (c) dankogai。 use IPC::Open3; ... my($wtr, $rdr, $err); my @cmd = ($^X, (map { "-I$_" } grep { !ref $_ } @INC), '-c', $file); …

Ubuntu におけるマルチホーム (IP Alias) の設定とデフォルトのソースアドレス

/etc/network/interfaces に auto eth0 iface eth0 inet static address 172.x.y.10 netmask 255.255.255.0 network 172.x.y.0 broadcast 172.x.y.255 gateway 172.x.y.254 auto eth0:0 iface eth0:0 inet static address 172.x.y.11 netmask 255.255.255.0 …

bashで書き込み用パイプを開く方法

exec 5> >(cronolog ...) # fd=5 の出力を cronolog へ echo "hello" >&5 # cronolog へ出力 exec 5>&- # fd=5 を閉じるServer::Starter 経由で起動するプロセスの出力を統計処理したりする場合には便利かも。アクセスログ等の追記なら、http://d.hatena.ne.…

続 KVM (virtio) のI/Oパフォーマンス

測定環境は下記のとおり。 ホスト: Ubuntu 9.10 Server (amd64) CPU: AMD Opteron 2218 x2 チップセット: nVidia MCP55Pro SSD: Intel X25-M 80GB (SSDSA2MH08) Mode (concurrency) KVM Guest KVM Host % Write (1) 320 521 -39% Write (4) 378 467 -19% Wri…

続: XenServer と KVM のネットワークレイテンシ比較

前回のは、どうも KVM を動かしてるハードウェアの問題っぽい。Mac Pro だと再現しなかったので、そっちの環境でベンチマーク。サーバ負荷が前回よりも軽い環境での比較ですし、ホストの負荷も XenServer と KVM で異なるので、絶対値比較には使えないとかも…

ファイルを追記モードで開くとseekできない、という話 (C言語の高水準I/OとかPerlとか)

C言語に初めて触ってから20年のロートルですが今まで知りませんでした。man fopen より。 The fopen() function opens the file whose name is the string pointed to by filename and associates a stream with it. ``a'' Open for writing. The file is cr…

DELL PowerEdge + Linux で CPU 省電力

BIOS のデフォルト設定は「Active Power Controller」なので、省電力On。OS からは変更不可能。この設定を「OS Control」に変更すれば、cpufreq-set コマンドを使って、動的に CPU クロックを観測/変更できるようになる。Linux (Ubuntu 10.04) のデフォルト…

ニフティクラウドのI/Oベンチマーク

試用アカウントをいただいたので (ありがとうございます!) ニフティクラウドの I/O ベンチマーク。例によって randombench。100MB のファイルへの 16KB ランダムアクセス性能 (単位は IOPS, xfs;nobarrier;noatime)。 concurrency 1 4 16 read 1370 1260 14…

Amazon AWS と NIFTY や Rackspace のクラウド (IaaS) は、技術的にどう違うのか

AWS はコンポーネント指向の IaaS 現時点でのクラウドコンピューティングの大勢は、リソースをオールインワンで提供すること。一般ユーザーにとっての SaaS なアプリケーションは、もちろんそうだし、開発者にとっての Google App Engine も然り。Amazon AWS…

gzipとlzopの速度

Core 2 Duo @ 2GHz。単位はMB/s。 ゼロファイル ランダムファイル gzip 64.1 12.9 gzip -1 104 13.2 lzop 307 32.5