優先度逆転

Priority inversion occurs when two or more threads with different priorities are in contention to be scheduled. Consider a simple case with three threads: thread 1, thread 2, and thread 3. Thread 1 is high priority and becomes ready to be …

今日の単語: lie

「嘘おっしゃい」、母さんが言う。 「ほんとうのことをお言いでないね」 「拒食症だなんて、こんなに太っておいて」 "Your lie," said Mother. "You do not tell the truth. "You are much too fat to be anorexic." My First Dictionary: Today's word is l…

続・クイックソート

そういえば、同じ値がたくさん入っている列をソートするときに、先日の partition をつかった実装だと、再帰呼び出しのなかで再度おなじ値の比較が走ることになって比較コストがばかにならないなあ… とおもった。 strcmp のように、一回の比較で同じか、小さ…

curry/uncurry 関数の使い方がわかった(かも?)

∧ を再定義する演習に取り組んでいるときに、検算を map で実行しようと考えた。 ∧ を and という名前の関数で定義したとして、これは二引数の(見かけをもったカリー化された、 Bool → Bool → Bool の型を持つ)関数になる。一方、ふたつの Bool 変数の全組…

今日の単語: bough

大枝は木の枝である。 この大枝から、ぼくらはメイ氏の寝室をのぞく。 この大枝から、ぼくらは手錠、皮の拘束具、そして泣き叫ぶ小さな男の子を見る。 A bough is a branch of a tree. From this bough, we can see Mr May's bedroom. From this bough, we c…

クイックソート

「プログラミング Haskell」の第1章に、次の定義のクイックソートが出てくる。 qsort [] = [] qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a | a ← xs, a ≦ x] larger = [b | b ← xs, b > x]この章の例題を解いていて気が付い…

static 宣言の後に extern 宣言しても大丈夫

static int N = 256; extern int N; と書くのは合法 (そして N は static)。 妙だ。 非常にむずがゆい。逆はダメ。 つまり extern int N; static int N = 256; と書くとエラー。

簡易メモリー使用量計測器

リークしてるんじゃない? ということで、簡単に現時点でのメモリー使用量のスナップショットを取りたくなった。Linux なら /proc/[pid]/statm を参照するのが簡単だということでこんな感じのユーティリティーを実装。 #include <unistd.h> // for getpid() #include <memory> </memory></unistd.h>…

今日の単語: healthy

お母さんは競争が健全だとかんがえている。 競争がぼくらのためになるとおもっている。 来月、いちばん伸びた子が、お父さんについていって一緒に暮らせるそうだ。 Mother thinks competition is healthy. She thinks competition is good for us. Whoever g…

ARM の関数呼び出し

ARM の関数呼び出し、正確には関数呼び出しからの戻りかたの処理がおもしろかたのでメモしておく。お試しソースはこれ。: /* fcall.c */ int foo() { return 1; } int simple_call() { const int v = foo(); return v; } int call_twice() { return foo() +…

平衡三進数

まだまだ途中だけれど、とりあえず公開。 随時追記していきます。 ternary.lhs > bt x = tail.fromJust.find ((0==).head) $ iterate (\(x:ts) -> div (x + 1) 3 : mod (x + 1) 3 - 1 : ts) [x] 掛け算 0 を掛けると 0 になり、符号の異なる trit を掛け合わ…

同名のシンボルを持つ同名のライブラリーをリンクしたライブラリーを dlopen したときの名前解決

昨日のエントリーのあとで、では dlopen/dlclose で明示的にリンクしたらどうなるか? という疑問がわいたので引き続いて調査。 (リンカー・ローダーのソースを読まずに動作から確認している…というあたり、弱いなあ)main というアプリケーションが one/li…

同名のシンボルを持つ複数のライブラリーをリンクしたときの名前解決

GOT やリンカー・ローダーの仕組みを考えれば、そうなるかな、と納得はできるんだけれど、たいそうショックを受けたことがら。次のような三つのソースを用意する。 /* a.c */ int puts(const char *str); void foo() { puts("hello"); } void bar() { foo();…

const 宣言できたとしても、すべきでない場合

例として次のような int をラップしているだけの Number クラスを考える。 class Number { int *const v; public: Number() : v(new int(0)) {} ~Number() { delete v; } void set(int value) const { *v = value; } int get() const { return *v; } }; ここ…

今日の単語: agree

ジョディーの頭の中の声はまとまることがない。 彼らは同じことを決していわないのだ。 だれかが殺せといったとしても、ほかはひどい性暴力を喜んでいたりする。 The voices in Jodie's head never agree. They never say the same thing. One tells her to …

関数引数で初期化される変数と戻り値をともにクラスの const メンバーにしたい

C/C++ の関数は複数の値を戻すのが苦手なので、たいていのプログラマーは関数の引数を戻り値を格納する場所として使う方法に染められていく。 /* create new Object and returns its id */ Id object_initialize(/*[out]*/ Object** object); さて、この Id …

初期化リストにおける基底クラスの初期化順序

基底クラスの初期化につづけてメンバー変数の順で初期化されるから注意しましょうという話。テストケースをつくるときに、にかよった設定をするオブジェクトがたくさんあるので、そのベースクラスをつくり、ちょっとした違いを派生クラスでカバーしようと考…

10 進数を平衡三進数に変換する haskell ワンライナー: bt x = aux [] x where aux ts x = let (q, r, y, ts') = (div y 3, mod y 3, x + 1, r - 1 : ts) in if (0 == q) then ts' else aux ts' q

世の中に平衡三進数、あるいは対称三進数、英語で言えば balanced ternary というものがあると知ったのが昨日のこと。(「http://www.amazon.co.jp/gp/product/4622075482/ref=as_li_ss_tl?ie=UTF8&tag=ryohji-22&linkCode=as2&camp=247&creative=7399&creat…

今日の単語:shock

あたらしいカーペットはジョーイをショック状態におとしいれた。 信じられない。 黄色だって? このカーテンと? なんてくs The new carpet sent Joey into shock. It sent him into a state of disbelief. Yellow? With those curtains? What the fu My Fi…

この数値より小さいことをテストする

パフォーマンス調査用のテストケースで if (timeDiff > 200) fail(); のように書かれていたのを assertTrue(timeDiff どうせならテストの結果で expected: but was: と表示されるようにしたいなあ…ってんでつくってみました。 class LessThanEqualTo { priva…

コマンドラインのプリプロセッサー定義で文字列を渡す

$ cc -o hello hello.c -DHELLO="\"hello, world!\"" $ ./hello hello, world!などと、コンパイルオプションで渡した文字列をソースコードで使うにはどうしたらいいか?解答編: #define quote(x) q(x) #define q(x) #x #include <stdio.h> int main() { puts(quote(H</stdio.h>…

例外を捕捉するテストの書き方

例外が送出されることを期待する Java のユニットテストの書き方は、テストメソッドの中に例外を捕捉するコードを書いて、期待する例外を捕捉したら return し、メソッドの末尾では fail を呼び出すような書き方をするのが常道のよう。 public void test001(…

今日の単語: puff

煙がもくもくと煙突から出てきた。 お母さんが入っていて、お客さまがたを受け入れているのだ。 A puff of smoke came from the chimney. Mother is in, and accepting gentlemen callers. My First Dictionary: Today's word is puff

スカイプにサヨナラを

そう、マイクロソフトがスカイプを買収した。おそろしいニュースだ。これでスカイプはダメになるだろう。おしまいだ。どうしてマイクロソフトはなんでも買収しようとして、そしてダメにするんだ?なぜだ? つまり、ぼくらはみんなマイクロソフトがゆっくりと…

ease out: x[n] = (1 - r)^n * (x[0] - p) + p

UI 部品のなめらかな移動はゲームに限らず、 iPod などの iOS や Android などの組み込み製品や最近のデスクトップアプリケーションでもみかけるようになった。数年前、自社の UI フレームワークを移植する仕事をしていたときに、その動きを実現する式が x +…

今日の単語: require

エミリーは手人形をつくるためになにが必要と考えているんだろう? 彼女はなにを望んでいるんだろう? エミリーは子猫、ナイフ、そしてメロン玉をほしがっているのだ。 What does Emily require to make a glove puppet? What does she need? Emily requires…

今日の単語: doubt

お母さんは暫時、疑念をいだいた。 ベッキーを郵便局に置いてきぼりにしてきたことに別の考えが浮かんだのだ。 ひょっとして図書館のほうが逃げきりやすかったんじゃないだろうか。 Mother is having a moment of doubt. She is having second thoughts abou…

今日の単語: apt

なんてぴったりなのかしら、ヘンダーソン婦人は快くおもった。 殺鼠剤という名前はとてもしっくりくる。 How apt, mused Mrs Henderson. How fitting that it should be called rat poison. My First Dictionary: Today's word is apt

sed と正規表現

あるディレクトリーにある共有ライブラリーを列挙して、 $ ls android-ndk-r5/platforms/android-5/arch-arm/usr/lib/lib*.so android-ndk-r5/platforms/android-5/arch-arm/usr/lib/libGLESv1_CM.so android-ndk-r5/platforms/android-5/arch-arm/usr/lib/l…

今日の単語: most

なにかの「大半」といえば、その大きな部分のことである。 ジェイクは死んだ売春婦の大半をなんとか処分したところだ。 Most of something is the larger part of it. Jake has managed to get rid of most of the dead hooker. My First Dictionary: Today'…