Scalaを使って関数のASTにアクセスするには、以下のようにすればいいらしい。

pre>>
scala> def f = print("hello")
f: Unit

scala> scala.reflect.Code.lift(f).tree
res3: scala.reflect.Tree = Select(Select(Select(Ident(Field(line4$object,PrefixedType(ThisType(RootSymbol),Class(line4$object)))),Field($iw,PrefixedType(ThisType(Class(line4$object)),Class($iw)))),Field($iw,PrefixedType(ThisType(Class($iw)),Class($iw)))),Method(f,PolyType(List(),List(),PrefixedType(ThisType(Class(scala)),Class(scala.Unit)))))
<<--

posted by genki genki on Wed 28 Apr 2010 at 06:54 with 0 comments

長いこと不安定だったので一時期 mod_proxy_balancer + mongrel_cluster
に逃げていましたが、
@yuumi3
から2.2.11で直ったよという情報をいただいたので passengerに戻してみました。

今のところは安定している感じです。

posted by genki genki on Wed 28 Apr 2010 at 02:14 with 0 comments

普段のコミットログから作業日報的なものを生成したい場合、
以下のようなコマンドでそれらしいものが出力できます。

pre>>
% git log --author=takiuchi --format="%ad %s" --date=short
<<--

posted by genki genki on Wed 21 Apr 2010 at 08:46 with 0 comments

git svnを使っていると、何度conflictを解決しても SVNに
"Your file or directory '***' is probably out-of-date"
と冷たく拒まれることがあります。
これを解決するには、XXXXにSVNのHEADに相当するコミットハッシュを指定して以下を実行します。

pre>>
% git checkout -b merging
% git checkout trunk
% git reset --hard
% git svn fetch
% git rebase trunk merging # コンフリクトするので解決してコミット
% git checkout -b merging2
% git checkout trunk
% git merge merging2
% git svn dcommit
<<--

結構面倒です。git-svnが賢くなってくれることに期待します。

posted by genki genki on Thu 15 Apr 2010 at 03:14 with 4 comments

git svn rebaseを行って conflict が発生した場合、
(no branch) になってしまいます。

この場合、手動でconflictを解決してcommitしたあと、

pre>>
% git log -1 --pretty=oneline
<<--

でコミットのハッシュを確認し、git checkoutでmerge先のブランチに
移動してから git merge <commit hash> すればokのようです。

posted by genki genki on Wed 14 Apr 2010 at 08:16 with 2 comments

厳守してるわけじゃないですが、なんとなくこんなリズムでコードを書くようにしています。

  • 朝はデバッグ
  • 午後はテスト、ドキュメントを書く
  • 夜は新しいコードを書く

朝は脳が冴えていて、前日仕込んだバグが嘘のようによく取れます。

午後は眠くなるので、あまり脳を使わないテストやドキュメントを書きます。
単調な作業への反動でいいアイディアをひらめいたりします。Yakです。

夜は創造の時間です。新しいことに取り組みます。行き止まりだと思っていたところに道が開けます。

posted by genki genki on Mon 12 Apr 2010 at 18:33 with 0 comments

Valgrindを使うとメモリリークの検出などを行うことができて便利ですが、
OSやライブラリに起因するメモリリークのレポートが大量に出てくると邪魔なため、backtraceのパターンを指定して抑制(suppress)することができます。

例)valgrind.supp

pre>>
{

Memcheck:Leak
fun:malloc
fun:_nc_table_insert_n
fun:token_table_add
fun:notify_register_check
fun:notify_register_tz
fun:tzsetwall_basic
fun:localtime
fun:ctime
}
<<--

funはbacktrace上の関数名を示しますが、全体をマッチさせる場合、
呼び出し経路ごとに異なったパターンになるため、
沢山登録する必要が出てきてしまいます。

最新のValgrind(valgrind-3.6.0.SVNで確認)では、
"..." 記法によって中間のパターン指定を省略することが
できるようになりました。
これを使用すると、先程の例は以下のように書き直せます。

pre>>
{

Memcheck:Leak
fun:malloc
...
fun:localtime
}
<<--

localtime関数を呼び出したあとに、内部のmalloc呼び出しで
発生したメモリリークを全部一括で抑制できます。便利ですね。

posted by genki genki on Mon 5 Apr 2010 at 14:32 with 0 comments

残念ながら現時点のSVNのtrunkを使っても、SnowLeopardにValgrindをインストールしようとすると configure時にエラーが出ますが、以下のパッチをあてることでインストールできるようになるようです。

方法:

pre>>
% svn co svn://svn.valgrind.org/valgrind/trunk -r 11100 valgrind
% cd valgrind
% wget "http://bugsfiles.kde.org/attachment.cgi?id=36999" -O thepatch
% cat thepatch | patch -p0
% ./autogen.sh
% ./configure
% make

make install

<<--

これでokです。

posted by genki genki on Mon 5 Apr 2010 at 10:18 with 0 comments

このブログシステムは長いことapache2/passengerで運用してきましたが、
頻繁にrubyプロセスが暴走してアクセスできなくなるということが発生していたので、apache2/mod_proxy_balancer/mongrel_clusterの構成に変えてみました。

しばらく様子見です。

posted by genki genki on Sat 3 Apr 2010 at 21:30 with 0 comments

CUDA 3.0がリリースされましたが、今回からOpenCL SDKも同梱されて /Developer/GPU Computing/OpenCL にインストールされるようになりました。

CUDA ("C"ディレクトリの中身)はmakeでsampleが普通にビルドできたのですが、OpenCLの方は以下のようなエラーが出ます。

pre>>
src/oclUtils.cpp: In function ‘void oclPrintDevInfo(int, _cl_device_id*)’:
src/oclUtils.cpp:282: error: ‘CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV’ was not declared in this scope
src/oclUtils.cpp:283: error: ‘CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV’ was not declared in this scope
src/oclUtils.cpp:290: error: ‘CL_DEVICE_REGISTERS_PER_BLOCK_NV’ was not declared in this scope
src/oclUtils.cpp:294: error: ‘CL_DEVICE_WARP_SIZE_NV’ was not declared in this scope
src/oclUtils.cpp:298: error: ‘CL_DEVICE_GPU_OVERLAP_NV’ was not declared in this scope
src/oclUtils.cpp:302: error: ‘CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV’ was not declared in this scope
src/oclUtils.cpp:306: error: ‘CL_DEVICE_INTEGRATED_MEMORY_NV’ was not declared in this scope
make: *** [obj/release/oclUtils.cpp.o] Error 1
<<--

これらの定数はSDK同梱のcommon/inc/cl_ext.h の中で定義されているのですが、どうやら
/System/Library/Frameworks/OpenCL.framework/Headers の方を参照してしまっているようで、こちらには定数が定義されていないようです。

posted by genki genki on Fri 2 Apr 2010 at 04:10 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
memogittipssvnvalgrindお知らせ106ASTblogbugcudalifemacmongrelopenclPassengerrubyScalasdk
Comments rssrss
瀧内元気 瀧内元気: MacOS版は以下にあります genki/ViMouse 01/16 05:40
dsjf dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これでも出... 01/08 23:23
瀧内元気 瀧内元気: おお、チェックしてみます。thx! 12/24 05:23
overisland overisland: Reeder for iPhone もこの UI を実装していますね。 12/24 05:13
瀧内元気 瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 http:... 12/01 12:20
tkawa tkawa: http://devcenter.heroku.com/articles/rails31_herok... 12/01 10:47
瀧内元気 瀧内元気: どもー。いまはgithubに置いてあります https://github.com/genki/irb... 07/10 08:31
ともち ともち: こんにちは! すばらしいプログラムをありがとうございます。しかし、merbiのドメイン、切れているみ... 07/10 02:30
Services from s21g
YOMU Web小説リーダー
Web小説を音声で楽しむ読み上げリーダー
補助探
公開されている補助金・助成金情報を集約し、条件に合う制度を探しやすくするサービスです。
jotter.me
個人開発者のためのホスティング一体型ノートサービス
ハンドミラー
iPhone向けの手鏡アプリ
ツイプロ(twpro)
Twitterプロフィールの高速検索エンジン