via http://iphone-dev.g.hatena.ne.jp/ktakayama/20081030/1225329982

実機ではリークしなくなった!のですが、シミュレータではリークします。運良く下のサイトにNSIndexPathのリーク?の情報でちょっと安心しました。

ついでに、Leaksの画面コピーも挙げておきます。
(コントロールを押しながらLeaksの赤の山をドラッグすると範囲選択できる) Instruments.png

Refs

メモリリークに関するリンク集
http://d.hatena.ne.jp/moto_maka/20090114/1231881156

posted by Png satoko on Wed 4 Feb 2009 at 13:10

Gemをインストールすると、依存するGemも一緒にインストールする事が出来ますが、 Gemの依存関係は、通常の依存関係の他に、開発環境用の依存関係も設定されています。 開発環境用の依存関係は、そのGemの開発や修正を行うために必要なGemを表しています。 今回は、開発環境用の依存関係をまとめてインストールする方法を紹介します。

   1  % sudo gem install --development gemname

これでOK.

posted by Png genki on Wed 4 Feb 2009 at 03:06

Ruby-1.9.1対応や、1.8.7、1.8.6での動作確認などをする必要がでてきたので、 そんな状況で便利なmultirubyを試してみました。

multirubyはZenTestの一部として公開されているので、 ZenTestが入っていない人はインストールします。

   1  % sudo gem install ZenTest

続いて、以下のような感じでruby-1.8.6 p287をインストールします。

   1  % multiruby_setup mri:svn:tag:v1_8_6_287
   2  % multiruby_setup mri:svn:tag:v1_8_7_72
   3  % multiruby_setup mri:svn:tag:v1_9_1_0

SVNからソースをチェックアウトしてきて、コンパイルが始まります。

終わったら、rubygemsを更新します。

   1  % multiruby_setup update:rubygems

あとは、

   1  % multiruby -S irb

などのようにすると、複数のバージョンのRubyでirbが順番に実行されます。

   1  multiruby -S gem install gemname

のようにして各環境用にGemをインストールします。

See Also

posted by Png genki on Wed 4 Feb 2009 at 02:34

   1  #import <CFNetwork/CFNetwork.h>

としていて、フレームワークの追加で別のプロジェクトからD&DでCFNetwork.frameworkをコピーしてきたのですが、buildエラーが出てしまう。

そうしたら、コピーではなく下記のファイルを追加すればいいと瀧内さんからアドバイス頂きました。

   1  /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/System/Library/Frameworks/CFNetwork.framework

追加すると下記のようにHeadersフォルダが現れ(最初のD&Dのコピーでは表示されなかった)、無事buildが通りました。

CFNetwork.png

posted by Png satoko on Tue 3 Feb 2009 at 12:10

Proc#to_sourceみたいな強力なリフレクション機能がRubyに実装されて欲しいので、言語デザイナーがエキサイト出来るようなゲームを考えてみる。

  1. クラスオブジェクトの取得
  2. メソッドオブジェクトの取得
  3. メソッドカテゴリ
  4. アノテーション
  5. メソッドの実行時呼び出し(Invocation)
  6. クラスの実行時作成
  7. メソッドの実行時作成
  8. メソッドボディの置き換え(Swizzling)
  9. メソッドシグネチャへのアクセス(#parameters)
  10. ASTへのアクセス(ParseTree)
  11. メソッドソースへのアクセス(to_source)
  12. module/mixinのuninclude, unextend, unmixin
  13. 全ての動的修正を元の状態に戻せる

さらにアドバンスドな項目

  • 実行時修正の安全保障(Sandbox)
  • 実行時修正の権限管理機能
  • 実行時修正の履歴管理機能
posted by Png genki on Tue 3 Feb 2009 at 11:03 with 2 comments

Getting ready for Ruby 1.9.1

We are excited about Ruby 1.9.1. Of course, with all the performance improvements, who wouldn’t be? Unfortunately a large number of Ruby libraries and extensions still don’t work on 1.9.1, so Ruby 1.9 cannot be considered production-ready yet.

しばらくは大きなプロジェクトのRuby-1.9.1対応がにぎやかになりそうですね。 安定板のリリースは重要だな。

Merbはまだaction-argsの問題があるけど、 1.9.1でMethod#parametersが出なかったので、 ParseTreeあたりが1.9.1に対応する感じで進化して対応される気がする。 せめてProc#to_sourceがあればripperを使ってなんとか出来たと思うんだけどなー。

posted by Png genki on Tue 3 Feb 2009 at 10:24

iPhone app開発ではデバッグにGDBを使うのですが、全然活用できていませんでした。しかしいちいちNSLogで出力しているのでは割に合わないというので、ちょっと調べて使ってみたらpコマンドが便利だというのが分かりました。

多分GDBをどれだけ流暢に使えるかでiPhone開発速度も全然変わってくるのだなぁというのが所感です。

コマンド p(print)

   1  (gdb) p image
   2  $2 = (UIImage *) 0x14f600

ポインタの場合 *変数とすることで中身を表示:

   1  (gdb) p *image
   2  $2 = {
   3    <NSObject> = {    isa = 0x38a47510  },
   4     members of UIImage:
   5     _imageRef = 0x156270,
   6     _imageFlags = {
   7       named = 0,
   8       imageOrientation = 3,
   9       cached = 0,
  10       stretchable = 0
  11    }
  12  }

その他使うコマンド

  • set
  • next
  • cont
  • quit
  • list

Refs

http://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb3.html
http://www.dev.pei.jp/app/gdb/gdbcmd.html
http://www.madlabo.com/mad/edat/GDB/index.htm#SEC22

posted by Png satoko on Mon 2 Feb 2009 at 15:32

iPhoneの通話中にHomeに戻ってからアプリケーションを起動すると、 以下のような普段の2倍の高さの緑色のステータスバーが表示された状態で アプリケーションが立ち上がります。

ss1

高さが2倍になってるので、 通常のステータスバーの場合と比べて、 やや狭い画面にあわせたデザインにする必要があります。 さらに、通話が中断された場合、緑色のステータスバーが消えて、 通常の高さのステータスバーになるのですが、 この時に、[UIApplication application:willChangeStatusBarFrame:] が呼ばれないという不具合が以下のサイトで報告されていました。

posted by Png genki on Mon 2 Feb 2009 at 04:12

I made a simple plugin to explain a concept of render-filters.

merb_render_filter

In your controller,

   1  class Posts < Application
   2    before_render :set_title1, :only => :show
   3    before :set_title2, :only => :show
   4  
   5    def show(id)
   6      @post = Post.get(id)
   7      display @post
   8    end
   9  
  10  private
  11    def set_title1
  12      @title = @post.title # <= you can access to @post here
  13    end
  14  
  15    def set_title2
  16      @title = @post.title #=> @post is nil!
  17    end
  18  end

Without this plugin, you couldn't access to instance variables from before-filters. Of course you can prepare @post in the first before-filter so that you can access from other before-filters. But why Merb has the action-args? They are ignored in such case. This was the problem I wanted to solve by the plugin.

posted by Png takiuchi on Sun 1 Feb 2009 at 10:19

merbで採用されているジェネレータフレームワークの本命、 templater に、ruby-1.9.1対応のパッチを取り込んで頂きました。

ss

posted by Png genki on Sat 31 Jan 2009 at 19:49