Entries from 2011-01-01 to 1 year

僕が shared_ptr よりも retain() / release() 方式が好きだと思う理由

c++

それは、shared_ptr のようなラッパーよりも、オブジェクト自体が参照カウンタをもっているほうがコードが書きやすいから。たとえば、継承したクラスでオブジェクトの参照カウントをいじることは、shared_ptr では難しい。shared_ptr を使った場合: class B…

[メモ] TCP/IPプログラミングにおけるエラー処理 (RSTパケットの飛ばし方と検出の仕方)

SO_LINGER の秒数を 0 にしてソケットを閉じればいい。Perl で書くなら以下のような感じ。 setsockopt($sock, SOL_SOCKET, SO_LINGER, pack("II", 1, 0)) or die $!; $sock->close() 一方で RST によって切断 (=異常切断された) かどうかはソケットからの読…

nicesort ってのを書いてみた

sleep sort とか環境にやさしすぎて21世紀には不向きだと思うの。なので nicesort なるものを作ってみた。 #! /bin/bash function f() { nice -n "$1" perl -we 'for (1..1000000) {}' echo "$1" } while [ -n "$1" ] ; do f "$1" & shift done wait こんな…

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++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。たとえば、コールバック関数をセットする…