BigDog

将来はこんなんが街中をかっぽするようになるのだろうか。 動きが動物っぽくてキモイのだが。

Erlang入門 その2

erlangプログラムをコマンドラインから動かす Erlang入門のサンプルに以下を追加して、標準出力に出るようにしてみる。 Erlangでは、コマンドラインからの引数は文字列のリストではなくアトムのリストであることに注意。 今回は"1423"といったように引数を1…

Erlang入門

Erlang本を入手したので学んでみる。 インストール debianだとパッケージが用意されている。 # apt-get install erlang erlang-manerlang-manは以下のようにモジュールを調べられるようになる。 $ erl -man lists 基本 _や大文字で始まるのが変数。_は/dev/n…

スピンロックとmutexの速度比較

スピンロック(spin lock)とは ロックを取得できるまでループし続ける。そのためロックを取得できないとCPUを占有し続けるので、競合が多く発生する状況下では一般的なmutexに比べて不利になる。 ただしロックの確認作業はmutexより早い。 詳しくは: スピンロ…

JavaとC#の違い

C#を急遽学ばなくなったのでC#に追加されているキーワードを軸にJavaとの違いについてまとめてみた。Javaを知っているプログラマにとっては、ざっと読めばC#の特徴について短期間で学べるのでは無いかと期待する。 尚、C#については熟練しているわけではない…

Binary Hacks

Binary Hacks ―ハッカー秘伝のテクニック100選作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸出版社/メーカー: オライリー・ジャパン発売日: 2006/11/14メディア: 単行本(ソフトカバー)購入: 23人 クリック: 383回この商品を含むブログ (223件) を見…

Emacs21でflymake

flymakeとはバックグラウンドでシンタックスチェックを行いエラー箇所をハイライトしてくれるとっても便利なやつです。Emacs22だと標準で入っているらしいのだが、Emacs21を使っているので手動で入れる。 flymake.elを取ってくる 最初CSVから最新のものをと…

CppUnitを使ってみる

以前はC++で開発することが良くあったのだが、昔と違って今はC++版UnitTestもあって良い時代になったもんだね。というわけで使ってみる。まずインストール。 debian 4.0では下記でインストールできた。 apt-get install libcppunit-dev libcppunit-doc Test …

Thread Local Heap

GC VM

スレッドごとにローカルヒープを持たせて、そのスレッドでnewされるオブジェクトはまずそこに入れましょうという話。 GCはスレッドローカルに行えるので、全スレッドを止める時間を最小限に出来る。ただしWrite Barrierで外部から参照されるのを検地する必要…

Pinned Object

GC VM

コンパクションを採用しているGCでは、GCの際にオブジェクトの再配置が発生する。 ネイティブメソッドをコールしている最中など、オブジェクトが再配置されては困る場合、そのオブジェクトをPinnedとしてマークする。 ただし、再配置できないオブジェクトが…

Write Barrier

GC VM

オブジェクトの更新を検知する仕組み。世代別GCでold領域からyoung領域を指すオブジェクトを探す為などに利用される。 Card Marking 領域をnバイトで区切り(Card)、そのCard内に存在しているオブジェクトに書き込まれたことをビットフラグの配列などに記録し…

GCに関連する技術をつまみ食い的に調べてみた。

Tomcat5.0でルートページをサーブレットに

http://example.com/ とかドキュメントルートでサーブレットに飛ばす方法。 http.confの設定 Apache mod_jk + Tomcat なので、http.confに以下を追加。 片方だとダメ。これですべてのリクエストがTomcatへ渡る。 (というかそれならTomcatをポート80にあげれ…

コマンドラインでsvn使う

SVNサーバのセットアップはこちら インポートする この時、インポートしておきたいファイル以外は消しとく。 svn import svn+ssh://<host-name>/var/svn/okogeimportは特定ディレクトリ以下のディレクトリやファイルを1度にリポジトリに対してmkdirやaddするためのコマ</host-name>…

Screenでヒストリ・コピー・ペースト

1. C-a [でコピーモードにする。 カーソルで、画面の上まで行くとスクロールしてくれる。 C-u で上スクロール。C-dで下スクロール 2. この後、returnかspaceキーでコピー開始もう一回押すとコピー終了 3. C-a ]でペースト関連 screenメモ - 玲瓏庵

GNU Automake

automakeはMakefile.amからMakefile.inを生成する。 Makefileはビルドやインストールなどの手順を記述したmakeコマンド用のスクリプトである。 Makefile.am bin_PROGRAMS = okoge okoge_SOURCES = main.c 試す 以下をbootstarapという名前でスクリプトにして…

GNU Autoconf

Autoconfとは autoconfはconfigure.inからconfigureなどを生成する。 configureは、環境を調べconf.hを生成するスクリプトである。 これにより、環境に対しての依存度の低いプログラムを開発することが可能になるのである。 configure.inはたとえば次のよう…

Smalltalkでmapcar

Lispのmapcarの真似事。ただ、Lispのmapcarはリストを複数個取ることが出来るんだよね。 !Vector defineMethod: input! mapcar: fn |result| result := Vector new. self do:[:el|result add: (fn value: el)]. ^result. ! ! {1.2.3} mapcar: [:el|el+3].! {…

Smalltalkの動的配列をブロックを使って実装する。

{1.2.3} とあったらこれをパーザで次のように展開するようにする。 [|r| r:=Array new. r add:1. r add:2. r add:3. r] value.実行結果 {{'a','b'}.{1+2}.4}! => {{'12'}.{3}.4}

dot-qmailでMLに転送設定

MLはToかCcにそのアドレスが入っていないと受け付けてくれないことが良くある。そこで、.qmailファイルで以下のようにすることでヘッダを加工してから転送するようにする。 | formail -a "Cc:MLのアドレス" | forward MLのアドレスformailはメールのヘッダを…

Emacs: GNU GLOBAL使う

GNU GLOBALとは GNU GLOBALはソースコードにタグ付けを行い、ソースコード中のシンボルの参照先、参照元に移動することができる。etagsとはエディタに依存していない点で異なる。 GNU GLOBALの機能 対象言語 C, C++, Yacc, Java, PHP4 サポートしているエデ…

screenメモ

WindowsのリモートデスクトップのCUI版みたいなもん。 1つのターミナルで複数セッション立ち上げて切り替えたりできるので便利。 $ screen or C-a C-c 新規セッション C-a [space] セッション切り替え C-a ? ヘルプ $ screen -ls screenプロセス一覧 $ scre…

javaのDiffライブラリjava-diffを使う。

コレクションの差分を取るライブラリである。(LGPL) クラスリスト Diff 差分を作る。第1引数から第2引数のコレクションを比較し、第2が第1から削除されているか追加されているかを計算する。 Difference 差分を表す 実にシンプルだ。 Differenceの要素 D…

Serializableの注意点と対策

Javaに搭載されているオブジェクトの直列化機能のSerializableは、大変便利なのだが注意すべき点が沢山ある。 クラスをSerializableにするときは、その基底クラスもSerializableにする。基底クラスがSerializableになってないかつデフォルトコンストラクタが…

RMI: RemoteExceptionがウザイときに握りつぶす方法

あとからリモート化したときとか。 ちょっと回りくどい。もうちょっとスマートにできんもんか・・・ え、握りつぶすなって? 呼び出し元が100以上あったりするともう・・・。 // 元のインタフェース interface Hoge { void fuga(); } // 後から作った公開…

HISTORYパターン

目的 オブジェクトの更新履歴を保存する。更新履歴から過去のオブジェクトを取り出すことができる。 動機 ネットワーク管理などの業務アプリケーションにおいて、日々どのような業務を行いどのように業務状態が変化していったかを記録することは良くあるが、…

Javaのsubversionライブラリ SVNKitを試す その3

その2はこちら 日付を元にファイルを取得する。 基本的な流れは以下の通り。 SVNRepository.getDatedRevision()を使用して、リビジョンを取得。 SVNRepository.getFile()で1のリビジョンを指定してファイルを取得。 簡単なのでサンプルは省略。 日付範囲を指…

Javaのsubversionライブラリ SVNKitを試す その2

その1はこちら 主なパッケージ org.tmatesoft.svn.core.io 低レベルなAPIはこちら org.tmatesoft.svn.core.wc コマンドラインのsvn相当のことをしたければこれ org.tmatesoft.svn.core.javahl javaHL(nativeのSVNライブラリ)のpure java実装 今回はアプリケ…

postgresでレプリケーション / バックアップ

SQL

Windows 2003 ServerでPostgreSQLを運用しないといけなくなったのだが、どうもWindowsだとpgclusterもpgpoolも未サポートらしい。とりあえずレプリケーションはRAID1に頼ることにするか。。。それだとHDD以外の故障の時に困るのだが、一応windowsもサポート…

デザイン力の磨き方

先日、知り合いのwebデザイナさんに飲み屋でデザイン力の磨き方について尋ねたら ひたすらサイトを見る(多い日は1日20サイトは見るらしい) たくさん作る なんだそうで。2.は努力しかないということで、1.についてはそれらしいサイトを探してみました。 …