2012-01-01から1年間の記事一覧

フィボナッチで各種言語をベンチマーク

AWK、Ada、Bash、Boo、C、C#、C++、Clojure、D、Erlang、Forth、Fortran、Go、Groovy、Haskell、Io、Java、JavaScript、Lisp、Lua、OCaml、Objective-C、PHP、Pascal、Perl、Pike、Prolog、Python、R、Ruby、Scala、Scheme、Smalltalk、Tcl でフィボナッチ数…

Runtime#freeMemory() は正しい値を返さない

Runtime#freeMemory() に関して勘違いしていたのかも。 public class Memory { public static void main(String[] args) throws Exception { Runtime runtime = Runtime.getRuntime(); java.util.List<Object> list = new java.util.LinkedList<Object>(); for (int i = 0; i </object></object>…

赤ちゃんがうまれました

goto でスコープを抜けるとクラスのデストラクタが呼び出されない現象に遭遇

C++

ここ一週間ほど仕事でハマった現象。以下サンプル。 class Foo { public: Foo() { puts("constructor"); } ~Foo() { puts("destructor"); } }; int main(int argc, char *argv[]) { int flag = 0; L0: if (flag++ == 0) goto L1; else goto L2; L1: { Foo fo…

Facebook への不正アタック

IT

Facebook から時々以下のようなメールが届く。Facebook なんてめったにアクセスしないので放っておいたんだけど、今日確信した。 これって不正ログインが試みられた証拠なんじゃないの。Google は二段階認証を設定しているので、初めての機器でログインしよ…

Labels as Values による Compiled goto でインタプリタを高速化

Android のインタプリタは C で実装されたバージョンとアセンブラで実装されたバージョンがあって、どちらもインストラクションを goto で処理するように実装されている。ずっと気になっていた C の goto の仕組みを調べてみた。単純化したのが以下の擬似コ…

C 言語における最適化を抑止する

C 言語の最適化抑止について調査した。ローカル変数のアドレスを関数外部にリークさせた場合、volatile がなくても最適化が抑止されるのではないか、という仮説を証明するためだ。環境は以下のとおり。 Ubuntu 12.04 LTS gcc 4.6.3 検証するコードは以下のと…

乱数とサイコロ

IT

疑似乱数生成機のアルゴリズムが線形合同法*1の場合、以下のようなサイコロの目の求め方は不適切だという。 int n = rand() % 6 + 1; 概念的には以下のように行う必要があるらしい。 int n = rand() / (RAND_MAX / 6 + 1) + 1; これなら、たまたま偶数や奇数…

TinyMT の使い方メモ

IT

Mersenne Twister の Tiny 版 TinyMT を調べたのでまとめておきます。 事前準備 パラメータを生成するために NTL というライブラリが必要です。今回は Ubuntu で行うのでライブラリがインストールされているかどうか確認して、なければ apt-get でインストー…

Hex Editor Neo の不具合と改修

PC IT

バイナリエディタ比較 - satosystemsの日記で紹介した Hex Editor Neo 5.13 に不具合があった。 上が不具合修正前、下が不具合修正後。p にカーソルを当ててるつもりが r に当たってしまう。ダンプ部分が全体的に 1 バイトずれている。この不具合を見つけた…

C 言語のマクロで関数をオーバーライド

マクロで関数をオーバーライド。 #include <stdio.h> void foo() { printf("foo\n"); } #define foo() printf("FOO\n") int main(int argc, char *argv[]) { foo(); #undef foo foo(); return 0; } 上記を実行すると: FOO foo と表示される。ポイントは undef の使い</stdio.h>…

main メソッドがなくてもコードが実行できる裏技が Java 7 で封じられた

class Test { static { System.out.println("Hello"); } } こんな main メソッドのないクラスをコンパイルして以下の要領で実行すると: java Test Java 1.6 までなら: Hello Exception in thread "main" java.lang.NoSuchMethodError: main という具合に s…

DrRacket にイースターエッグが存在した

PC

日付を 7/2 にした状態で DrRacket を起動すると、Robby のアイコンが現れ、クリックするとダイアログが表示される。

Eclipse CDT で参照を解決できない

単純なコードだと問題がなかったんだけど、ソケットを使用するコードで以下のように sys/socket.h に定義されているはずの定数が CDT 上では解決できない。Windows の CDT は GNU C という環境が定義されていて、cygwin を参照するようになっている。インク…

あまり知られていないと思われる Java のインスタンスイニシャライザの紹介

スタティックイニシャライザというのは Java をやってる人なら何度も使ったことがあると思う。Java を 10 年以上やっていて「インスタンスイニシャライザ」というものがあることを先日知った。 public class Test { int i; { // このブロックがインスタンス…

ThreadLocal というクラスを発見した

以下のような感じで使用する。 public class ThreadLocalTest { // これがスレッドローカル変数の原資 private static int num = 0; // 実体はひとつしかないが、スレッド毎に異なる値を返す変数 private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>(</integer></integer>…

static final の命名規約

Java をやってる人なら、定数フィールドの名前はすべて大文字で命名する、というのは常識的なことだと思う。Java 言語仕様には以下のように記載されている。ただ、ここでは final にしか触れていない。Java Code Conventions には以下のように記載があり:fi…

Galaxy Tab の充電完了時の挙動がどうなのかと

Galaxy Tab の充電が完了すると、 音がなり 画面が点く という挙動をする。画面はその後点きっぱなし。オフの状態からなのでロック画面。この挙動を変更する設定は存在しない。

Checkstyle の阻害

Java のソースコード静的解析ツール「Checkstyle」。導入しているチームは結構多いと思う。僕が思う Checkstyle を使用する阻害のひとつが、以下の警告。「最初の一文はピリオドで終わらなければなりません。」そのせいで、日本語のドキュメントにもかかわら…

C におけるデバッグ出力のジレンマ

「開発中にデバッグログを出力したい。でもリリース時には出力したくない」、というような要求はかなりの頻度である。こんな感じでやることになるだろう(デバッグとリリースを切り分ける #ifdef は省略)。 #include <stdio.h> #include <stdarg.h> #define debug1(fmt, ...) p</stdarg.h></stdio.h>…

Galaxy Nexus 交換

Galaxy Nexus を購入した時点ではバージョンが 4.0.1 で、その後アップデートが降ってくるものの、必ずアップデートに失敗するという状況が続いていた。アップデートが降ってきた後、アップデートしてくださいというようなダイアログが出てくるんだけど(ハ…

南無阿弥陀仏

南無阿弥陀仏の意味を妻から教わった。中国語では「南无阿弥陀佛」と書き、発音は「なむぉあみとぅぉふぅー」と読む。仏教はインドに由来していて、中国に伝わった際に発音に漢字が当てられ、それが日本に伝わり音が訛ってしまったため、本来の発音は中国語…

関数合成とオブジェクトサイズとパフォーマンスに関して

日曜日、第2回 スタートHaskell2 に参加してきました。partake.in一番印象的だったのが、Haskell をはじめて 1 ヶ月か 2 ヶ月ぐらいの方が、臆すことなく数十分の枠でプレゼンしていたことでした。 僕は Haskell は 2008 年からなので、えーと足掛け 4 年半…

バイナリエディタ比較

PC IT

バイナリエディタを検討したので、メモを残しておきます。世の中には実に多くのバイナリエディタが存在しますが、今回検討したのは、Windows で動作する構造体編集機能を持つものです。目的としては、動的構造体定義が行えるかどうかという検証で、今回取り…

Scheme で read

Scheme の入出力ライブラリ関数の中でも read は異彩を放っている。read-char がテキストを一文字ずつ読み込むのに対し、read は S 式をひとつずつ読み込む。以下は指定したファイルから S 式を読み込む関数。 (define extract-sexp (lambda (filename) (wit…

Scheme の手続きを動的に #2

今日はふたつ賢くなった。ひとつはScheme の #() と '#() が違うものだということを前回のエントリのコメントで教えていただいた。いくつかの処理系で #() を評価させて試してみたところ、以下のようになった。 Ypsilon 0.9.6-update3 (R6RS) > #() error: i…

Scheme の手続きを動的に

やりたいことはすごい簡単なんだけど、やり方がわからない。 (define op #(+ - * /)) (define calc (lambda (kind lhs rhs) ((vector-ref op kind) lhs rhs))) (calc 0 1 2) 手続きをベクタとかリストに持っておいて、それを取り出して実行したい。Gauche だ…

VMware Player でアンダースコアが入力できない場合

ずばりの解決方法が載っていた。 VMware playerのゲストOSでアンダーバーを表示する方法 – サイクリングと仕事メモ Ubuntu 10.04 ホストに Windows XP ゲストだと問題なかったんだけど、Ubuntu 12.04 ホストに Windows XP ゲストだと、同じイメージなのに問…

中国語をマスターしたものの、なんでマスターできたかわからない

知らない単語が出て来ても心配いりません。お姉さんに一々聞かなくても知っている単語を手がかりに意味を調べたり、前後の文脈で理解出来るようになります。 自己記述言語 - 言語ゲーム 元のエントリとは全然関係ないんだけど、中国語を勉強して 3 ヶ月目ぐ…

msysgit のコンテキストメニューを削除

Git

以下ブログで情報をもらった。MsysGitのシェル拡張をアンインストールする - namutakaの日記以下は msysgit のコンテキストメニュー。アイコンのないのが msysgit、アイコンのあるのが TortoiseGit のそれぞれ Git 操作メニュー。ずらっと出ているのは許容で…