[github]Github Pagesを作りました

Octopressとgithub Pagesを使ったブログ - 0xff.toBlog() この記事を読んで、Github Pagesでblogを書いてみたくなり、作ってみました。 http://masayuki038.github.com/ 以前からOctopressが気になっていたので、ちょうど良いタイミングでした。 ということ…

mvn assembly:assemblyとjava.lang.IncompatibleClassChangeError

mvn assembly:assemblyで作成したファイルをjava -jarで実行すると以下の例外が出る、という事象に悩まされてました。 Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Nati…

JDK6をソースコードからビルド

jvmのgcまわりの挙動を確認する為、CentOS上でJDK6のソースコードを取得してビルドしてみました。基本的な流れは以下のページを参考にしています。「Compile Hotspot JDK from Source Code」 http://konpairu.net/blog/archives/139ビルドするのに色々躓きま…

Mockito+PowerMockでStringのmockを作る

文字列のハッシュ衝突時のテストケースを書くことになりましたが、いつも使っているMockitoはfinal classのmockを作ることができません。調べてみたところ、PowerMockというモジュールを使うことによって、MockitoのAPIを用いてfinal classのmockを作ること…

[java]new Semaphore(0)

とあるコードの中に、以下のような記述がありました。 import java.util.concurrent.Semaphore; ... Semaphore permit = new Semaphore(0); これまで、ミューテックスは1つの、セマフォは任意の数のクリティカルセクションへの進入を許可するもの、と覚えて…

[java][bson]POJOをBSON形式でシリアライズする

JavaのオブジェクトをBSON形式でファイルに保存する為、いくつかの実装を試してみました。 BSONのバイナリに変換できるライブラリ BSONのページのImplementationにJava実装が列挙されている為、今回はこれらを試してみました。 mongo-java-driver bson4jasck…

hbaserb

アプリケーションのログをparseしてHBaseに格納する為に、hbaserbというライブラリを使ってみました。hbaserbからHBaseを操作するのはThrift経由となる為、先にThriftの受け口を起動しておきます。 hbase-daemon.sh start thrifttableもhbaserbで作成するこ…

第5回 MongoDB 勉強会 in Tokyo 〜真夏の大Mongo祭り〜

久々に社外の勉強会に参加してきました。MongoDBはちょっと触った程度であまり知識がなく、しかも勉強会が久々だったこともあり勘違いもあるかと思いますが、感想を書きます。 Play with Mongoid! Rubyで書かれたODM、Mongoidの紹介。ActiveRecord/DataMappe…

[mongodb][java] Java Driverのオブジェクトに変換するmapperを書いてみた

前回JMongoStoreを作った際、HTTP Sessionに格納したオブジェクトをMongoDBに保存する為、JavaのオブジェクトとJava DriverのDBObjectとを相互変換するクラスを書きました。今回、それを別のモジュールとして切り出してmonganezという名前でgithubにアップし…

JMongoStore - a Store class to persistent sessions of Tomcat to MongoDB.

永続化するオブジェクトグラフの構成がある程度固いようであれば、ORMを使ってRDBMSに保存するというアプローチで良いと思いますが、グラフの構成が変動しやすい場合は、変更の都度スキーマ定義を更新することになるので結構面倒です。例えばHTTPSessionのよ…

MongoDBとmorphia

mungbeanはPOJOに何も手を加えなくても保存できそうで良かったのですが、残念ながら現状では複数のPOJOを一度に扱うことができないようです。"Third Party Frameworks and Libs"に戻って、mungbeanと同じくPOJO Mappersカテゴリであるmorphiaというライブラ…

MongoDBとmungbean

sessionに格納するkey-valueのように、保存する要素の変動が多いオブジェクトを簡単に突っ込めるKVSを探していて、MongoDBに行き着きました。が、標準のJava DriverのAPIがイマイチなので、"Third Party Frameworks and Libs"で紹介されているライブラリを使…

成果物のファイル名にプロファイル名を入れたい

Maven2弱者です。 「mvn -P production package」のようにプロファイルを指定して成果物を生成した際、「hoge-0.0.1-production.war」のように成果物のファイル名に指定したプロファイルの名称が入るようにしたいのですが、良い方法が分かりません。 pom.xml…

abstract pointcutとweavingのスイッチ

GAE/Jで永続化層にJDOを使ってきたのですが、GAE/Jを良く知る為にLow Level APIも試してみたい。そこで、AspectJを使って永続化層をうまく切り替えられないものかな、と。ある永続化層を選択した場合のみweavingされるようなadviceを定義できれば、例えばJav…

annotation-style in AspectJ

AspectJでは、pointcutやadviceを記述する際にJavaを拡張した記法を用いますが、AspectJ5からはAnnotationを用いてpointcutを定義し、advice側でもAnnotationを用いてpointcutを指定することができます。具体的には、以下のようなコードになります。 @Aspect…

Asynchronus Method Call Using AspectJ

非同期と継続と私 - 技術日記@kiwanamiを読んでいて、関数呼び出しを非同期化するのに、(funcall cc n)を(deferred:call cc n)に変更するだけで簡単にできるのが羨ましかったのでちょっと作ってみました(というだけです…)。 実装 @Retention(RetentionPolic…

RestletでJSONを扱う

GAE/JでRestlet(server-side)を使い、JSONをやり取りするようにしてみました。使用したRestletのバージョンは、Version 2.1 Snapshot (testing)です。 jarファイル RestletにはGAE/J版が用意されているので、それをダウンロードし、配備します。配布されてい…

How to use of changeVersion その2

前回のエントリで、以下のように記述しましたが、NGでした。 openDatabaseにpostVerを指定し、changeVersion(preVer, postVer, callback)を呼ぶと、currentVersionと引数が違う、というエラーが出る current version of the database and `oldVersion` argum…

How to use of changeVersion

HTML5のclient-side databaseはバージョン管理されています。Asynchronous database APIでは、このバージョンが変わった際に実行するハンドラを登録する仕組みが提供されています。 The changeVersion() method allows scripts to atomically verify the ver…

test for asynchronous code with QUnit

以前のエントリで書きましたが、SQL-based database APIの一部のメソッドの実行は非同期となります。非同期のメソッドをテストする為に、QUnitを使ってみました。 QUnit QUnitは、jQuery自体のコードやプラグインのテストに使われている、JavaScript用のテス…

iPhone/iPod TouchのSafariでオフラインアプリケーション

以前iPod Touchを買ったのですが、普段ほとんど外に持ち出さず、自宅内のWebブラウザとして使ってました。が、ふと(今作っている)時間簿Webアプリケーションの入力インターフェースとして使えるのではないかと思い立ち、どうせやるならということでHTML5のAP…

JUnit Test with JDO

オブジェクトの永続化の際にキーの自動生成あたりで躓いてしまい、Unit Testを書くことに。 普通に書いて動かしてみたら、 java.lang.NullPointerException: No API environment is registered for this thread. at com.google.appengine.api.datastore.Data…

プロセス毎のswap使用量を計測するパッチを読む その7

「プロセス毎のswap使用量を計測するパッチを読む その6」の続き。 カーネルコードを追える部分、追えない部分が分かってきたので、残りのパッチエントリは簡単に見て最後とします。 @@ -648,11 +653,11 @@ static int copy_pte_range(struct mm_stru pte_t …

プロセス毎のswap使用量を計測するパッチを読む その6

「プロセス毎のswap使用量を計測するパッチを読む その5」の続き。 copy_one_pte copy_one_pte関数の最後の数行です。 mm/memory.c page = vm_normal_page(vma, addr, pte); if (page) { get_page(page); page_dup_rmap(page); rss[PageAnon(page)]++; } out…

プロセス毎のswap使用量を計測するパッチを読む その5

「プロセス毎のswap使用量を計測するパッチを読む その4」の続き。 copy_one_pte copy_one_pte関数の続き。前回はページエントリがスワップページであった場合でしたが、今回は物理ページ上にあるかどうかは関係ない部分の処理となります。mm/memory.c /* * …

プロセス毎のswap使用量を計測するパッチを読む その4

「プロセス毎のswap使用量を計測するパッチを読む その3」の続き。 copy_one_pte copy_one_pte関数の続き。前回は、コピー対象のページがスワップエントリである場合、コピー元のスワップページの参照カウントをインクリメントする、というところまででした…

プロセス毎のswap使用量を計測するパッチを読む その3

「プロセス毎のswap使用量を計測するパッチを読む その2」の続き。 ページテーブル Linuxのページ変換テーブルは以下の要素で構成されています。 ページ変換テーブル ページグローバルディレクトリ(page) ページアッパーディレクトリ(pud) ページミドルディ…

プロセス毎のswap使用量を計測するパッチを読む その2

「プロセス毎のswap使用量を計測するパッチを読む その1」の続き。 パッチエントリ mm_types.h Index: mm-test-kernel/mm/memory.c =================================================================== --- mm-test-kernel.orig/mm/memory.c +++ mm-test-…

プロセス毎のswap使用量を計測するパッチを読む その1

「show per-process swap usage via procfs」の続き。パッチの内容を追っていきながら、kernelのソースコードを読んでみたいと思います。 パッチエントリ mm_types.h Index: mm-test-kernel/include/linux/mm_types.h =====================================…

CScope

Linux Kernelのコードを読んでみようと思ったものの、さすがにgrepのみで読んでいくのはつらそうなので何かツールを探してみたところ、CScopeというツールがありました。 CScopeは、Cで書かれたソースコードからDBを作成し、それをVimやEmacsから利用するこ…