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

   1  scala> def f = print("hello")
   2  f: Unit
   3  
   4  scala> scala.reflect.Code.lift(f).tree     
   5  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 Png genki on Wed 28 Apr 2010 at 06:59

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

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

posted by Png genki on Wed 28 Apr 2010 at 02:16

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

   1  % git log --author=takiuchi --format="%ad %s" --date=short

posted by Png genki on Wed 21 Apr 2010 at 08:47

gem push によって、 gem の公開が大変簡単になりました。 しかし、敷居の低さは油断に繋がるもので、 近い将来、誰もが一度は秘匿性のあるファイルを誤って公開してしまい、 パニックになることでしょう。

今回、皆さんを出し抜く形になってしまい甚だ恐縮ではございますが、 一足先に体験させて頂きましたので、 その対処法を報告致します。

手順

  1. gem yank
  2. support staff への報告

1. gem yank

gem の新機能である yank コマンドを利用すると、 指定したバージョンの gem の公開を停止することができます。 例えば、foo-0.0.1 gem の場合、以下を実行します。

   1  % gem yank foo -v0.0.1 

この機能は rubygems1.3.6 にはまだ含まれて居ませんので、 "Unknown command yank" と言われた場合には、 以下のコマンドで gem を最新のものにアップグレードする必要があります。(1.3.7以降で、gemcutterも0.5.1以降であれば不要なはずです)

   1  gem update --system
   2  gem install gemcutter

2. support staff への報告

これで、gemcutter の index からは削除され、 gem search および install の対象からは除外されたのですが、 ホームページ上からは依然としてダウンロードが可能な状態になっています。 完全に削除しない理由は、

  • その gem に依存関係を持つ gem が存在し得る
  • 重要な gem (例えば rails) が突然なくなると困る

というポリシーからのようです。 でも、 「パスワードみたいに本当に致命的な場合は、 個別に判断するのでとりあえず連絡下さい」 という方針のようなので、 以下の問い合わせフォームから削除を嘆願します。

http://help.rubygems.org/discussion/new

これは基本的に公開BTSなので、下のほうにある

[x] This is a private discussion, don't let the public see

を忘れずにチェックして、private なメッセージにして投稿しましょう。 これで数日中には完全に削除されるはずですので、 support staff に感謝の気持ちを伝えて作業完了です。

[おまけ] unyank

yank を取り消す(undo)機能も存在しています。

   1  % gem yank foo -v0.0.1 --undo

この yank / undo の一連の操作を覚えておくと、 「もしかしてセキュリティーホールがある?」 「新バージョンでエンバグしてる?」 なんて時には速攻で yank して、 「やっぱ気のせい」 という場合は undo で戻せるので、とても便利です。

参考

Removing a published RubyGem

posted by Png maiha on Fri 16 Apr 2010 at 19:06 with 1 comment

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

   1  % git checkout -b merging
   2  % git checkout trunk
   3  % git reset --hard <XXXX>
   4  % git svn fetch
   5  % git rebase trunk merging  # コンフリクトするので解決してコミット
   6  % git checkout -b merging2
   7  % git checkout trunk 
   8  % git merge merging2
   9  % git svn dcommit

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

posted by Png genki on Thu 15 Apr 2010 at 03:24

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

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

   1  % git log -1 --pretty=oneline

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

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

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

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

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

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

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

posted by Png genki on Mon 12 Apr 2010 at 18:41

ちまたで話題のXperiaに機種変更して1週間ちょっとたったので、現在インストールしているアプリを簡単にまとめてみます。

最初は手当たり次第インストールしてたんですが、1週間経つと使うアプリ/使わないアプリがちょっと見えてきた感じです。

あ、Xperiaを1週間使った感想は、

  • そこそこの操作性の良さがある
  • そこそこの電池の持ち(「まぁ、こんなもん違うかなぁ...」という感じ)がある
  • 標準アプリはイケてない
    • Timescapeとか
    • Mediascapeとか
    • 電話帳とか

って感じです。

それでは、インストールしているアプリのまとめをどうぞ!

「ケータイ」の機能系

IMoNi

  • 作者: egg
  • 言語: 日本語
  • 概要:
    • i-modeのメールの送受信ができる.
    • i-mode.netへの加入が必須

My docomo checker

  • 作者: meloncake
  • 言語: 日本語
  • 概要:
    • docomoのさまざまな利用料が一目でわかる.

QRコードスキャナー

  • 作者: ZXing Team
  • 言語: 日本語(英語を直訳した感じ)
  • 概要:
    • アプリ名そのまま, QRコードをスキャンするアプリケーション

Gmail系

Gmail Notifier

  • 作者: Jonas Larsson
  • 言語: 英語
  • 概要:
    • 新着メールが来るたびにお知らせしてくれる

Gmail Unread Count

  • 作者: Alexander Blom
  • 言語: 英語
  • 概要:
    • GMailの未読数をアイコンのところに表示する

地図系

My Tracks

  • 作者: My Tracks Team at Google
  • 言語: 英語
  • 概要:
    • GPSのロギングをして、地図上にログを表示する
    • GPXやKML形式でエクスポート可能

乗換案内

  • 作者: ジョルダン
  • 言語: 日本語
  • 概要:
    • 経路検索や時刻表検索などの乗換検索アプリでおなじみ機能の他に、運行情報を閲覧する機能がついている

外部サービス系

twicca BETA

  • 作者: R246Design
  • 言語: 日本語
  • 概要:
    • 機能が豊富なTwitterクライアント
    • ユーザにカラーラベルをつけられるのが地味に便利

NewsRob

  • 作者: Mariano Kamp
  • 言語: 英語
    • Google Readerに登録している記事が読めるニュースリーダ
    • 他のアプリに記事のURLを渡したりできる

Google Goggles

  • 作者: Google
  • 言語: 英語
    • カメラで撮影した画像を使って検索できる
    • 「Googleさんすげええ!!」と思わず言うてしまうアプリ

その他

ジョルテ

  • 作者: JOHO SPACE
  • 言語: 日本語
  • 概要:
    • 月表示・週表示どちらでも使えるシステム手帳
    • 週の開始曜日を設定可能

UltraChron Stopwatch Lite

  • 作者: The Spinning Head
  • 言語: 英語
  • 概要:
    • ラップを記録することができるストップウォッチ
    • 音声読み上げも

Task Manager

  • 作者: Rhythm Software
  • 言語: 英語
  • 概要:
    • 実行中のプロセスをkillできる
    • auto killの設定もできたり(きちんと動いているかは謎...)

AndExplorer

  • 作者: LYSESOFT
  • 言語: 日本語
  • 概要:
    • シンプルなファイルマネージャ

EasyTether

  • 作者: Mobile Stream
  • 言語: 英語
    • PCとXperia本体をUSBケーブルで繋いでテザリングのために必要なアプリ
    • 操作が簡単
    • Windows7でも使えた

ついでに、Xperia特集な感じのもののリンクを載せておきます。 Xperia購入を考えている方は参考までに。

Xperiaのまとめ記事

posted by Png y_tsuda on Sun 11 Apr 2010 at 14:04

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

例)valgrind.supp

   1  {
   2     <insert_a_suppression_name_here>
   3     Memcheck:Leak
   4     fun:malloc
   5     fun:_nc_table_insert_n
   6     fun:token_table_add
   7     fun:notify_register_check
   8     fun:notify_register_tz
   9     fun:tzsetwall_basic
  10     fun:localtime
  11     fun:ctime
  12  }

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

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

   1  {
   2     <insert_a_suppression_name_here>
   3     Memcheck:Leak
   4     fun:malloc
   5     ...
   6     fun:localtime
   7  }

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

posted by Png genki on Mon 5 Apr 2010 at 14:42

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

方法:

   1  % svn co svn://svn.valgrind.org/valgrind/trunk -r 11100 valgrind
   2  % cd valgrind
   3  % wget "http://bugsfiles.kde.org/attachment.cgi?id=36999" -O thepatch
   4  % cat thepatch | patch -p0
   5  % ./autogen.sh
   6  % ./configure
   7  % make
   8  # make install

これでokです。

posted by Png genki on Mon 5 Apr 2010 at 10:25