2010-01-01から1年間の記事一覧
GAE/Jで永続化層にJDOを使ってきたのですが、GAE/Jを良く知る為にLow Level APIも試してみたい。そこで、AspectJを使って永続化層をうまく切り替えられないものかな、と。ある永続化層を選択した場合のみweavingされるようなadviceを定義できれば、例えばJav…
AspectJでは、pointcutやadviceを記述する際にJavaを拡張した記法を用いますが、AspectJ5からはAnnotationを用いてpointcutを定義し、advice側でもAnnotationを用いてpointcutを指定することができます。具体的には、以下のようなコードになります。 @Aspect…
非同期と継続と私 - 技術日記@kiwanamiを読んでいて、関数呼び出しを非同期化するのに、(funcall cc n)を(deferred:call cc n)に変更するだけで簡単にできるのが羨ましかったのでちょっと作ってみました(というだけです…)。 実装 @Retention(RetentionPolic…
GAE/JでRestlet(server-side)を使い、JSONをやり取りするようにしてみました。使用したRestletのバージョンは、Version 2.1 Snapshot (testing)です。 jarファイル RestletにはGAE/J版が用意されているので、それをダウンロードし、配備します。配布されてい…
前回のエントリで、以下のように記述しましたが、NGでした。 openDatabaseにpostVerを指定し、changeVersion(preVer, postVer, callback)を呼ぶと、currentVersionと引数が違う、というエラーが出る current version of the database and `oldVersion` argum…
HTML5のclient-side databaseはバージョン管理されています。Asynchronous database APIでは、このバージョンが変わった際に実行するハンドラを登録する仕組みが提供されています。 The changeVersion() method allows scripts to atomically verify the ver…
以前のエントリで書きましたが、SQL-based database APIの一部のメソッドの実行は非同期となります。非同期のメソッドをテストする為に、QUnitを使ってみました。 QUnit QUnitは、jQuery自体のコードやプラグインのテストに使われている、JavaScript用のテス…
以前iPod Touchを買ったのですが、普段ほとんど外に持ち出さず、自宅内のWebブラウザとして使ってました。が、ふと(今作っている)時間簿Webアプリケーションの入力インターフェースとして使えるのではないかと思い立ち、どうせやるならということでHTML5のAP…
オブジェクトの永続化の際にキーの自動生成あたりで躓いてしまい、Unit Testを書くことに。 普通に書いて動かしてみたら、 java.lang.NullPointerException: No API environment is registered for this thread. at com.google.appengine.api.datastore.Data…
「プロセス毎のswap使用量を計測するパッチを読む その6」の続き。 カーネルコードを追える部分、追えない部分が分かってきたので、残りのパッチエントリは簡単に見て最後とします。 @@ -648,11 +653,11 @@ static int copy_pte_range(struct mm_stru pte_t …
「プロセス毎の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使用量を計測するパッチを読む その4」の続き。 copy_one_pte copy_one_pte関数の続き。前回はページエントリがスワップページであった場合でしたが、今回は物理ページ上にあるかどうかは関係ない部分の処理となります。mm/memory.c /* * …
「プロセス毎のswap使用量を計測するパッチを読む その3」の続き。 copy_one_pte copy_one_pte関数の続き。前回は、コピー対象のページがスワップエントリである場合、コピー元のスワップページの参照カウントをインクリメントする、というところまででした…
「プロセス毎のswap使用量を計測するパッチを読む その2」の続き。 ページテーブル Linuxのページ変換テーブルは以下の要素で構成されています。 ページ変換テーブル ページグローバルディレクトリ(page) ページアッパーディレクトリ(pud) ページミドルディ…
「プロセス毎のswap使用量を計測するパッチを読む その1」の続き。 パッチエントリ mm_types.h Index: mm-test-kernel/mm/memory.c =================================================================== --- mm-test-kernel.orig/mm/memory.c +++ mm-test-…
「show per-process swap usage via procfs」の続き。パッチの内容を追っていきながら、kernelのソースコードを読んでみたいと思います。 パッチエントリ mm_types.h Index: mm-test-kernel/include/linux/mm_types.h =====================================…
Linux Kernelのコードを読んでみようと思ったものの、さすがにgrepのみで読んでいくのはつらそうなので何かツールを探してみたところ、CScopeというツールがありました。 CScopeは、Cで書かれたソースコードからDBを作成し、それをVimやEmacsから利用するこ…
任意のプロセスのページがどの程度swapoutしているかを知りたくて調べてみたのですが、残念ながら明確な答えを見つけられませんでした。ただ、/proc/(PID)/statusにRSS等の情報を出力する仕組みを利用して、同ファイルにswap使用量を追記するpatchを見つけた…
原題は「Slack」で、ロープなどの「ゆるみ」「たるみ」の意味でした。 基本的にゆとりの無い人間なのですが、書いてある内容が本質であることは何となく理解できているつもり。ただ、それを状況によってすぐ曲げてしまったり、見ないふりをしてしまうのが良…
『実践するドラッカー[思考編]』だと勘違いしていたのが本書。タイトルにあるように、ドラッカーの160の英知をドラッカーの著書からの引用を主体としてまとめあげられています。『実践するドラッカー[行動編]』もそうですが、原書から重要な項目を抜き出して…
『実践するドラッカー[思考編]』を読んでいたので、本書を書店で見つけ、あまり迷いなくこの[行動編]を購入しました。これを書くにあたり、先に[思考編]をまとめておこうと思って自宅を探したところ、持っていたのは[思考編]ではなく別のドラッカー本である…
カーネルにあててみたいpatchがあり、VmWare(Ubuntu8)上で使用しているカーネルのバージョンだとそれが適用できない為、カーネルをバージョンアップしました。 手順自体はかなりシンプルなのですが、それでも色々と調べながら進めたので、メモとして残してお…
一度AspectJを使い出すと、アスペクト側に切り出したい処理を色々と思いつきます。GAE/Jのアプリの中でアスペクトに切り出したいと最初に思いつくのは恐らく、PersistenceManagerを取得する処理でしょう。トランザクションの部分とともに、アスペクトを用い…
前回から大分時間が空きましたが、少し余裕がでてきたので、GAE/Jでアプリケーションを作って遊んでおります。作っていく中でunit testを書いたりするのですが、どうせ遊びならこのあたりも好き勝手に書いてみたいと思うわけです。前回のエントリにあるよう…