macportsでインストールしたパッケージのvariantsを後で変更したくなることがありますが、そのような場合には --enforce-variantsオプションが利用できます。

例)

   1  % sudo port upgrade --enforce-variants git-core +svn

posted by Png genki on Mon 29 Mar 2010 at 05:40

git submodule update を行ったときに

   1  fatal: reference is not a tree: dfae...

というようなエラーが出ることがありました。 これを解決する方法は、 submoduleのディレクトリに移動し、

   1  % git reset --hard

で親ディレクトリに戻り、コミット & push

あとは普通に git submodule update をすればok.

posted by Png genki on Sun 28 Mar 2010 at 18:48

thor のメリット

thor は rake に比べて、

  • タスク定義が Ruby メソッド
  • コマンドライン引数が簡単に扱える

というメリットがあり、お気に入りです。 前者はもしかすると 「いやいや task の方が DSL 風で...」 と人によるかもしれませんが、 後者が強力なのは異論がないでしょう。 例えば、Rails の db:create を例にすると、 環境を指定するのに rake では仕方なく RAILS_ENV を使っていますが、 もし thor であれば

   1  class Db < Thor
   2    desc "create ENV", "Create database for specified env"
   3    def create(env = 'development')
   4      ...

のように、引数の処理もデフォルト値の指定も、 ruby コードそのままで非常に直感的です。

complete usage

でも、しばらく使っていると、 上記の desc 部分(usage, descprtion)のうち、 前者の usage がメソッド定義と被っていて少しイライラしてきます。 そこで、get_args を利用して usage を補完するように改良してみました。

http://github.com/maiha/thor/tree/complete-usage

これにより、以下のように記述できます。

   1  class Db < Thor
   2    desc "Create database for specified env"
   3    def create(env = 'development')
   4      ...

   1  % thor list
   2  thor db:create ENV = "development"  # Create database for specified env

もちろん、従来の記法も利用可能です。 ユーザを増やして本家に取り込んでもらうと思うので、 よかったら使ってみてください。 バグ報告も大歓迎です。

インストール

で、こういう野良 github アプリはどうするんですかね? とりあえず適当に clone して、complete-usage ブランチの lib で、 gems/thor-0.13.4/lib とかを直接差し替えるのが一番早い、 かも?です。 あと、もちろん get_args のインストールも必要になります。

   1  % gem install get_args

posted by Png maiha on Sun 28 Mar 2010 at 16:13

Firefoxのセキュリティポリシーの変更によるものなのかと思いますが、MacOSのFirefoxでGoogle Waveを使っている時に、 外部からのペーストが出来なくなたようです。 Wave内でコピーしたテキストなどはペーストできます。

TerminalでコピーしたものをWaveに貼り付けたりすることが結構あったので、 非常に不便ですね。 一応ChromeやSafariでは、まだ外部からのペーストができるようです。

posted by Png genki on Tue 23 Mar 2010 at 01:39

CUDA kernelの引数で渡せるデータのサイズは sizeof(void*)*16 が上限で、それを超えるとエラー701(Launch exceeded resources)が発生します。

回避するためには、値渡しをしているものをメモリオブジェクト経由で渡すようにするか、そもそもメモリオブジェクトを17個以上使っている場合は、デバイスアドレスのポインタの構造体を用意し、その構造体をメモリオブジェクト経由で渡すと良いようです。

一方、OpenCLにはkernel引数のサイズに制約がないので使い易いです。 OpenCLのkernelで気を付けるべき点としては、kernel引数をfloat3* で受けると、cpuデバイスでは動くものが、gpuデバイスの場合おかしな挙動をするようになったりするので、避けた方が良さそうです。

posted by Png genki on Mon 22 Mar 2010 at 16:13

autotoolsによるパッケージのconfigure時に、ar (ARで指定できる) のオプションは、

   1  % ./configure AR_FLAGS={ar_options_go_here}

という感じに指定します。アンダースコアが入るのが紛らわしいですね。

posted by Png genki on Fri 19 Mar 2010 at 08:43

N x Mのグリッドがあったとします。 自明ですが、マス目の数は N*M 個です。

これを K 個の長方形に分割することを考えるとき、 K 個の長方形の面積の差が高々 min(N, M) であり、各々の長方形の周の長さの和が最小となるような分割を行うアルゴリズムを求める。

posted by Png genki on Thu 18 Mar 2010 at 06:45 with 1 comment

Ohm を使っていると色々と不満な点が見えてきます

  • @attributes を得る手段がない (#attributes が column_names を返す)
  • create!, save! がない
  • first, all がない
  • ...

これは AR 脳というよりも、ARの洗練されたAPIと比べてしまうと、 Ohm の未成熟さが浮き彫りになってしまうためだと思います。

ohm-arfreaks

そこで、ARのメソッドをOhm上で使えるようにしたラッパーを作成しました。

http://github.com/maiha/ohm-arfreaks

インストール

   1  % gem install ohm-arfreaks

   1  require 'ohm'
   2  require 'ohm-arfreaks'   # これを追加
   3  
   4  class Video < Ohm::Model
   5    attribute :url
   6    set       :tags
   7  end
   8  
   9  Video.create!(:url=>"a")
  10  Video.first.attributes
  11  => {:url=>"a", :tags=>[]}

以下のメソッドが利用可能です (0.1.0 現在)

  • self.primary_key
  • self.columns
  • self.column_names
  • self.content_columns
  • self.columns_hash
  • self.create!
  • save!
  • self.first
  • self.last
  • self.count
  • self.delete_all
  • new_record?
  • attributes

ARと比べると使えるメソッドは少ないですが、 これだけでも随分Ohmが快適になると思います。

backup

例えば、redis はどこに DB を作っているかわかり辛いので 時々バックアップが欲しくなるのですが、 昔懐かしのar_fixtures plugin 相当のことは以下のコードでできるようになります。

   1  File.open("videos.yml", "w+") do |f|
   2    hash = Video.all.inject({}){|h,v| h[v.id]=v.attributes;h}
   3    f.print hash.to_yaml
   4  end

posted by Png maiha on Tue 16 Mar 2010 at 19:16

あるアプリでは「Target terminated too early to collect data」というエラーが出てLeaksを使ってのメモリ使用状況を見ることができないのに、別のアプリだとそのような状況は起きず困っていたのですが、解決したのでメモしておきます。

@k_katsumiさんからは下記のadhocでget-task-allowの値が問題かもというのと、オーガナイザで実機を再認識するのが良いというのをアドバイスを頂いたのですが、残念ながら解決しませんでした...

実機デバッグでの注意点
http://numata.designed.jp/ja/2009/03/iphone-5.html

実機でInstrumentsが使えなくなったときの対処法
http://d.hatena.ne.jp/iphone_dev/20080825/1219649967

それで、色々調べてまわったのですが、よい方法が見つからず困っていたところ

You are not running the application through Xcode when you do this. Start the application manually, then bring up Instruments and connect to your device.
http://stackoverflow.com/questions/2032834/memory-footprint-of-an-app-on-iphone

というコメントでした。この中ではActivity Monitorについての話だったのですが、Leaksも同じかも!と思ってぐぐったらありました!

Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial
http://www.mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

上記の方法だと、xCodeは関係なく、iPhoneとInstrumentsでメモリ使用状況を見ることができます。yay! 多少、ステップが増えるのですが、出来ないよりは全然マシ!ということでよしとします。 (もしかしたら、同じapp名?のリリース版(購入したapp)とデバッグしようとしているappの二つあるのが原因なのかもですが...)

posted by Png satoko on Mon 15 Mar 2010 at 08:24

以下のサイトに手頃な文量で要点がまとまっているので参考になりました。

公式ドキュメントは以下にあります。

SCons本が欲しい今日この頃。 達人出版会 に期待したい。

posted by Png genki on Mon 15 Mar 2010 at 06:16