« 2008年6月 | トップページ | 2008年8月 »

2008.07.30

HotCocoaがMacRubyリポジトリに入ってた

RubyKaigiでの衝撃のデモからしばらくして、もうすっかり忘れてたぜ。 いつのまにかHotCocoaのページがmacruby.org上にできてた。

コードはhttp://www.macruby.org/trac/browser/MacRuby/trunk/lib/hotcocoaから見ることができる。 いくつかファイルがあるけれど、キモはmappings/のところ(たとえばmappings/window.rb)。

RubyCocoaでもこれを導入することはできると思うんだけど、ほしい人はどのくらいいるだろう? このへんのAPIのRuby向け整理とゆーか再定義をはじめてしまうと、収集つかなくなりそうで怖いって気持ちもあるんだよね。 細かい変更を素早く追っかけ続ける必要がでてくるわけで。 自動生成するアプローチもあるだろうけど、ぜったい罠がありそう。

|

第2回 「詳解 Objective-C 2.0 読書会」行ってきた

勉強会強化月間のトリ。 内容は、記録のページに書いたのでそちらを見てください。

今回は他言語(主にJavaやC++)と相対してという角度でのObjective-Cがいろいろ聞けて、自分としてはとてもおもしろかった。 自分はいわゆるオブジェクト指向な言語ってRuby→Objective-Cと、ユルめのしかまともに経験してないからね。 「idだけ使って、クラス指定しないで書くほうが書きやすいんじゃ」というのがいちばんのヒット。そういう考え方もあるかも。

ふりかえり。

  • KEEP
    • 開催する
  • PROBLEM
    • メモをあとで見ると、意味がわからないのがけっこーある
    • 自分しゃべりすぎ
    • AirMac設置失敗(新居さん、いろいろやってもらったのにすみません)。もっと身につけてからにしよう。
    • 2時間はちょっと短い。
  • TRY
    • 質疑の記録をきちんととる。結果的に他の人の話す時間もつくれるし。
    • 平日でも会場は3時間確保する。お金で解決するならそれでokという富豪的アプローチ。

次回の日程は現在調整中。

やっぱりこの本て理論的というか座学というか、読んだら「はいok!」というものじゃないんだよね。手をばりばり動かすのと組み合わせるといい感じになりそうなんだけど、やっぱヒレガス本3版かなあ。 とりあえずヒレガス本の写経を夏の宿題(休みじゃないが)としてみることにする。

|

2008.07.27

MacPortsでインストールしたソフトウェアを依存関係を考えつつリストする

再インストールするときなどに使うため、MacPortsでインストールしたプログラムをリストアップしておきたい。これには、

 % port installed

 % port installed active

とすればよい。

だけどこれだけではvariantを指定してカスタマイズしているときに、インストールがうまくいかないことが起きるに決まっているので、依存関係を考慮してもう少し賢いリストを作りたい。

ということで書いてみた

使いかたはファイル中のusageにあるように実行すればよい。

 % port installed active | grep -v '^The'| port-deps-tsort.rb
 libart_lgpl @2.3.20_0
 libiconv @1.12_0
 ncursesw @5.6_1
 ncurses @5.6_0 => ncursesw
 expat @2.0.1_0
 gettext @0.17_3 => libiconv,ncurses,expat
 glib2 @2.16.4_0+darwin_9 => gettext,libiconv
   :
 rb-redcloth @3.0.4_0 => ruby
 rb-gnomecanvas @0.17.0-rc1_0 => ruby,libgnomecanvas,rb-glib2,rb-gtk2
 subversion-python25bindings @1.5.0_1+no_bdb => expat,neon,apr,apr-util,subversion,python25,gettext,libiconv,serf,cyrus-sasl2
 rb-rote @0.3.4.r189_0 => ruby,rb-redcloth,rb-syntax,rb-rake
 %

というように、依存関係で上からインストールしていけば良いように順序を整理して出力する。 MacPortsのレジストリを見ているので、depends_runやdepends_buildは考慮されないけれど、実際問題としては問題にならないと思ってる。

ちょっと内部的な話を書くと、rubyのtcktkライブラリを使ってtclで書かれたMacPorts Registry APIを実行している。すごいよ、Ruby/Tk!

はじめはObjective-C用のMacPortsFrameworkをRubyCocoa経由で使おうとしたのだけどSEGVするので断念した。

|

2008.07.24

第2回「詳解Objective-C 2.0」読書会は、7/28(月) 池袋で

いちおう告知。

  • 開催日:2008-07-28(月)
  • 時間:19:00 - 21:00(現地集合)
  • 会場:銀座ルノアール マイスペース 池袋西武横店 8号室

詳しくは第2回読書会のページを参照のこと。 会場内のネットワークがいまいち不安だ。ページによってライブドアしか使えないように読める。まあ聞いてみりゃいいんだけど。

|

vim用補完辞書 for Cocoa

vimでのobjcの補完について。とりあえず辞書補完がいちばん準備が簡単なのでつくってみた。

  • cocoa-vimdict-20080724.tar.gz
    • cocoa.dict (辞書: メソッド、クラス、定数、関数など16,177件)
    • docset-vimdict.rb (辞書作成に使ったスクリプト)

スクリプトは原理的にはCarbon, CoreFoundationなど他のAPIにも流用できるはずです。

":"が辞書中の単語区切りと見なされないように、

 autocmd FileType objc setlocal iskeyword+=:

とかしておかないと、まともに使えないので注意。 まだあんまり使ってないけど、自分としてもビミョウな感じ。感想とか改善案をいただけるとうれしいです。

やっぱりもう少し賢く候補を絞り込むとか、候補表示時にクラスなどのメタデータが表示できるとかがいいよなあ(辞書ファイルのパスとかいらない…)。 もちっとデータ整備して自分で関数書かかないとダメかなあ。

補完辞書のための単語抽出の手段

いくつか考えてみたことをメモ。

まず、ドキュメントからアプローチする方法。 利点としてはドキュメントがあるシンボルは有用なものだろうという期待ができること、欠点としてはドキュメントがないとシンボルが抽出できないこと。

もう一方としてはヘッダファイルなど実際のコードから抽出する方法。 利点としては実際のコードからシンボルを収集するので漏れが少ない、欠点としては不要なものを排除するのがたいへん。

手段として検討してみたのは以下のもの。

今回はdocsetutilを使う方法をとった。

最終的な落とし所は、ハイブリッドで

  • Appleの分はドキュメントを使う
  • 現在のプロジェクト、利用しているサードパーティフレームワーク・ライブラリはコードから

というのが良さそうと思っているのだけど、道は遠いね。

|

2008.07.22

Chris Hanson - LLVM terminology

最近とりあげることの多いLLVM(というかclang)について、簡潔な説明が"Chris Hanson - LLVM terminology"にあがってた。 Cocoa勉強会で自分も似たような話をしたけれど、こちらのほうがまとまっていてわかりやすい。

かなりてきとーだけど、英語のままよりアクセシビリティが上がると思うので訳しておく。訂正等歓迎。

LLVM terminology (LLVM用語集)

I thought the proper terminology was worth pointing out, since I've seen — and heard — some misuses lately.

私は適切な用語を示す必要があると考えています。ここのところ誤用を目(もしくは耳)にするようになったからです。

LLVM is the Low-Level Virtual Machine and the project surrounding it.

LLVMは低レベルの仮想マシンで、LLVMプロジェクトの中心になります。

LLVM-GCC is a compiler that uses GCC for its front-end and LLVM for its back-end.

LLVM-GCCはGCCをフロントエンドに、バックエンドをLLVMとして利用するコンパイラです。

Clang is the C language family front-end that is part of the LLVM project. It's a parser, semantic analyzer, and code generator — in other words, a compiler front-end that uses LLVM for its back-end.

Clangは、C言語系のフロントエンドで、LLVMプロジェクトの一部です。Clangは、パーサ、構文解析、コードジェネレータで、言い換えると、LLVMをバックエンドとして利用するコンパイラフロントエンドです。

The Clang Static Analyzer is what people have been trying out lately, to find subtle bugs in their and other projects. It's a great tool.

Clangの静的解析は、人々が最近挑戦しているもので、彼ら自身や他のプロジェクトの微妙なバグを見つけることができます。これはすばらしいツールです。

I just thought this was important to mention, because people have been referring to "LLVM" instead of "LLVM-GCC" in reference to the compiler included in Xcode 3.1, and people have been referring to "Clang" instead of "the Clang Static Analyzer" in reference to what they've been using to find bugs in their projects.

私は以上のことに言及する価値があると考えています。人々が"LLVM"という語をXcode 3.1に含まれるコンパイラ"LLVM-GCC"のこととして言及していて、"Clang"という語をプロジェクトのバグを見つけるのに使う"the Clang Static Analyzer"のこととして言及しているからです。

よけいなお世話だけど訳注

フロントエンド・バックエンドという組み合わせで見ると、

フ\バGCCLLVM
GCCふつうのGCCLLVM-GCC (Xcode3.1で登場)
Clang(存在しない)コンパイラとしてのClang

ということになる。LLVMはその名のとおり仮想マシンでコンパイラではない。コンパイラが生成したバイトコードを実行するものだ。

the Clang Static Analyzerにはこの機能名のようなものしかなく、最近急激に利用者が増えている(コンパイラとしての利用はごく少数のまま)のが混乱を助長している。 ぼくは静的解析の際に実行するコマンド名をとって、"clang scan-build"と書くようにしているけれど、これは正式な呼称とかではないので注意。 誰か早く名前をつけて…

|

2008.07.21

VimM (Vim Movement) 行ってきた

なんだか勉強会強化月間。VimMに行ってきた。

30分ほど遅刻。ホントごめんなさい。 13:55に渋谷についた時点で遅刻なのに、なぜか勘違いしてNHK方面に向かい迷ったりしてた。

当日の発表

Hashさんのは遅刻してほとんど聞けず。ごめんなさい。

taku-oさんのプラグイン講座。tlibライブラリを使った別ウィンドウを持つプラグインの書き方。vimスクリプト書くにも、ライブラリが充実していきそうで期待。 "#"による名前空間がなんか新しい。

mootohさんによる、Vimソースコード解説。なんか自分も読めそうな気になるところがオソロシイ。gdbでattachしてbtという、実装の分析テクニックとか。 Vim Hacking Guideの予感。

suzutomoさんによる、キーバインディングこだわり講座。パームレストから離れずに済むようにするための工夫あれこれ。C-[でなく、escを使ってる人が会場で意外と多かった。 自分はC-[しか使わないけど、returnとC-Mは半々くらいの気がする。

ujihisaさんによる、小指の長さから自分がVimに向いているかどうかを判定する方法。 Vim四天王の話とかおもしろすぎ。 キーバインディングとか操作は、人によってこだわりがあって面白いな。 emacsだと、他人のは全然使えないという話は聞くけど、vimもそういう方向に?まあ既にそうなってる気もしなくはない。

kei-os2007さんによる、vimスクリプトでのBrainf*ck実装。接頭辞による可視性の制御とかおぼろげにしか理解してなかったので参考になる。発表後のVimperatorがインパクト大。

という感じでいろいろおもしろかったです。ありがとうございました。

これから誰かがつくらなければならないもの

飲み会のときに出たもののうち、自分がどうにかできそうなもの。

  • vimのobjcでの補完
  • 色がたくさん使える端末エミュレータ
  • Safariのビュー分割機能

最後のSafariのビューは、Cocoaプログラマ的にはNSSplitViewを追加する方向で実装できそうだけど、JavaScriptでHTMLのフレームを生成するようにしたほうが安定する気がする。

|

2008.07.20

RubyCocoa 今日のコミット - 1.8.7残作業

  • 1.8.7以降の環境で、NSArray#slice!の動作をRubyのArray#slice!とあわせるように(r2214-r2216)

1.8.7対応の残り。なんか先月ぐらいから、SF.netのsubversionサーバが調子悪いように思う。

|

2008.07.19

CotEditorのソースコードにscan-buildをかけてみた

clang scan-buildによるObjective-Cプログラムの静的解析を、Cocoa製のテキストエディタCotEditor 0.9.4に対して実行し、その結果について(ぼくが)確認しました。その結果を"CotEditor 0.9.4にclang scan-buildで静的解析をかけてみた"というページにまとめました。CotEditorでは、あまり問題が見つからなかったので面白くはないかもしれません。

コードの誤読などあるかもしれませんが、なんらかの参考になればと思います。

感想にも書きましたが、elseのないifについて、通らないパスがありうるということで未初期化などの指摘が多くなる傾向があると思いました。アプリケーションのロジック的には必ずいずれかを通るとわかっていても、現在のscan-buildはそこまで考えたりはしません。逆にそういったパスにも対応しておくことで、防衛的プログラミング的なコードになるので、アプリケーションが堅牢になる可能性もあります。可読性は低下しがちになりますが。

checker-62でIBOutletが考慮されてmissing -deallocが判定されるようになったなど、短期間で改善が進んでいるようです。

|

第29回 Cocoa勉強会に行ってきた

書くの忘れてた…先週7/12は新宿でCocoa勉強会でした。

当日の二次会含む雑談がおもしろかったので、それを中心に報告。次回は9月の予定だそうで。

iPhone

発売日翌日ということもあって、iPhone関連の話題が多かった。

  • 持ってきていたのは5人くらい
    • 勉強会当日に近くの電器屋で買ってきた人も
    • ほとんど新規回線で契約したみたい
  • アプリ
    • つくったもののデモ
    • AppStoreでいくらで出すかの相談
    • こんなのつくったら面白くね?という妄想会議
  • 初期のころ、iPhoneアプリはウィジェットをDashcodeでつくることを想定していたにちがいない!(という妄想)
    • 自分とU氏のふたりだけで盛り上がる…あまり賛同は得られず

LLVM/clang

意外と反響があって、発表したかいがあったなあというとこ。

  • LLVM/gccフロントエンド/clangフロントエンドについて説明
  • 静的解析ってどのくらい効果あるかわからんよね
  • OpenCLにはLLVMの動的最適化の効果ありそう
    • gccの最適化はGPUにはあまり効果がないかも。OpenGLもそういう理由でLLVMが導入されたのでは
  • リークさがしには、leaks+Instrumentsがオススメ
  • clangでObjC2.0コンパイルできる?→まだサポートしない機能があったはず

その他

iPodの容量は小さすぎる!という悩みについて

  • 自宅のライブラリにネットワーク越しにアクセスできるようにする(touchならできる?)
  • MacBook/Pro/Airを閉じてもスリープしないように改造して、それをiPod代わりにする
  • あきらめてShuffleにする(全部持ち歩けないというアキラメ)
    • Shuffleたくさん持ち歩けばいいんじゃね?

もちろん、ジョークだよ。

SyncMLは暗黒らしい。

|

2008.07.16

最近のMacPorts関連の行動

いろいろやった(やってもらった)ので、まとめて報告。

starruby-0.3.0(野良&MacPortsWiki-JP)

やってもらった話。

ruby/SDLを利用した、ゲーム開発ライブラリのstarrubyの新バージョン 0.3.0 が先日リリースされた。from_kyushuの人から「更新していいですか?」とのメールをもらったので、ぜひぜひお願いしておいた。MacPortsWiki-JPのrb-startrubyも更新されてた。ありがとうございます!

rsdlがインストールできない件の報告ももらいました。ぼくがしこんだPortfileのバグです。修正しました。申し訳ないです。

enscriptがconfigureでこけるのを修正(本家)

rabbitでMacについてるenscriptを使おうとしてでてくる警告を消したいので、インストールしようとしたところエラー。

tracを検索したら#13855#15513が見つかった。

  • #15513は内容も#13855と重複していたのでduplicateとしてクローズ
  • nomaintainerだったのでとくに相談もせず修正をコミットした後、#13855に「直したから試して」とメッセージを→確認されてチケットはクローズされた

修正はconfigureスクリプトで環境変数CCを無視するようにする、というもの。これが一番簡単に直せる。いまいちな修正方法だけれど、スマートに解決するより、利用できない状況を解決するほうが重要。あとで検索してみたらgentooも似たような対応したみたい

suversion 1.5のport treeがあると、svn syncが失敗する件(本家)

この話ね。今日、チケット#15868がバグとして受け入れられた。

どう対応するかはこれから議論て感じ。方法はともかく、修正するつもりはあるみたいなのでひと安心。

Ruby 1.9のライブラリをどうするかの議論(本家)

ここ10日間くらいに出てきた話。

  • perlやpythonのように、rb-*/rb19-*/rb18-*みたいにわける?
  • #15912 どっちかを選んでインストールできるようにしようぜ(たぶんこの変更ではまずいはず)というPortGroup ruby 1.0の変更の提案

などなど。まだ結論はでていない。

重要だとは思うんだけど、おれの中では優先度あんま高くないので、ここ2、3日の動きが追えてない。こないだの日曜日あたりから、Florianがもういろいろ動いてるもよう。ちょっと心配。

だれかフォロー出来る人がいたら、チェックお願いします。

|

2008.07.13

第29回 Cocoa勉強会でclangの静的解析の話をしてきた

とりあえず自分の資料は「clangでObjective-Cプログラムを静的解析」として公開しとく。clangのscan-buildコマンドで、Objective-Cプログラムを静的コード解析してメモリリークなどのバグが見つけられたりするという、マユツバなようで本当の話。

水曜日あたりにStepwise経由で"Noodlings » New Tool On The Block: The LLVM/Clang Static Analyzer"を見て、おもしろそうなので発表することに。cfe-dev MLにやたらと"static analyzer"という語が飛び交っているのには気づいていたけれど、ちゃんと読んでなかったので、ここまで動作するものだとは思っていなかった。

なかなか面白いので、手元にObjective-C/Cocoaのプログラムある人は試してみるといいと思うよ。

PDFでスライドを公開しても反応が薄いよう(前回のSIMBLはけっこー自信あったのに)なので、HTML資料をちゃんと書いてからスライドつくることにした。資料はさくっと書けたので、スライドはRabbit製にしてみた。ちょうど今、MacPortsパッケージのほうをいろいろ構成いじってるので、その検証も含めて。

手元のRuby 1.8.7-p22とRuby-Gnome 0.17.0-rc1だとアレなので、テーマ中に

 GC.disable

といれるという大冒険。これで問題なく動いた。

てきとーPortfile

バイナリのcheckerをダウンロードすればすぐ使えるけれど、そんなときでもPortfile

 # $Id: $
 PortSystem      1.0
 
 name            clang-checker
 version         60
 revision        0
 categories      devel
 maintainers     kimuraw
 description     LLVM/Clang Static Analyzer
 long_description LLVM/Clang Static Analyzer
 homepage        http://clang.llvm.org/StaticAnalysis.html
 master_sites    http://keeda.stanford.edu/~kremenek/checker/
 use_configure   no
 build           {}
 destroot        {
     xinstall ${worksrcpath}/ccc-analyzer ${destroot}${prefix}/bin
     xinstall ${worksrcpath}/clang ${destroot}${prefix}/bin
     xinstall ${worksrcpath}/scan-build ${destroot}${prefix}/bin
     xinstall ${worksrcpath}/sorttable.js ${destroot}${prefix}/bin
 }
 distname        checker-${version}
 worksrcdir      ${distname}
 checksums       md5 78b2d77f4a12d4f09ecec7bf69e8504a \
                 rmd160 acebdae2755447cdbb21881ef86d84effc01c1f0 \
                 sha1 daaf5d2d508e7b390ed4fdafd4b3c7c3088d8f66

|

2008.07.10

第1回 「詳解 Objective-C 読書会」行ってきた

無事終えることができました。内容は、記録のページに書いたのでそちらを見てください。

以下は個人的なあれこれ

  • MLに10人くらい集まって4-5人で開催できればよいか→24人参加でたいへんなことに
  • 当日の朝、MacBook壊れる。現地に早めにいって、交換しようとしたらプラスドライバ忘れる
  • 仲見世がいつもより混んでた気がする。
  • iPhone人気はびみょーらしい
  • ノープランなわりに、読書会はまともに行うことができた(みんな、ありがとう!)
  • 広島から来た人、1名(仕事のついでかなんかみたいだったけど、すごいよ!)
  • 読書会は予想以上に集中力使う。
  • バックグラウンドのいろいろな人がいるので、見解がおもしろい。人集まったらこうでなくちゃね。
  • 小銭とOAタップの用意を先にお願いしておいたのがよかった
  • ヒレガス本の営業をしてきた
  • どぜう、ネギ、ネギ、どぜう、ネギ、ネギ、ネギ(いや、好きだけどね>ネギ)

次回は平日の夜に開催してみる予定。チャットがあるといいよね、という案がでて、確かにそうだと思うので、次回はAir Mac用意してみるよ。少なくとも会場内はネットワークつながるように。

なんとなく月2回の開催で、前半→土日、後半→平日、という組み合わせにしたらよいかな〜といった感じ。どっちかは来られるだろう、ということで。(全部参加することが可能だとは最初から思っていない&とにかくはやく通読したい)

|

2008.07.08

MacPortsのport syncがsubversionのエラーで失敗する

自分のsources.confには、svnで管理しているport treeが4つばかり(本家開発用、rabbit用、野良用、自分用)書いてあるのだけど、土曜あたりから

 This client is too old to work with working copy

というエラーで、port syncが失敗するようになった。手元のsubversionは1.5に更新済みだったので、なんだかわからない。

macportsのソースコードを調べてみると、 /Library/Tcl/macports1.0/macports_autoconf.tclにsvnのパスが書いてあって、そっちを優先するようになっているらしいことがわかった(baseのmacports1.0/macports.tclの1317行あたりを参照)。

このファイルを編集して"/opt/local/bin/svn"にしたら直った。

チケットを#15868として登録して、「そもそもmacportsのmake時のsvnコマンドのパスを記憶するのっておかしくないか?」と言っておいた。なんか雰囲気的にスルーされそうな予感。

|

MacBookのHDDが死んだ -> Time Machineに感謝しきり

日曜の朝、メールを受信していてなんか遅いなーと思ったら、「カツーン、カツーン」と不吉な音がして、システムが応答しなくなってしまった。

内蔵HDDが壊れたみたい。

買ってきた新しいHDDと内蔵のを交換して、システム再インストール〜Time Machineから吸い出しておおむね復活。

あんま意識しないで外付けにTime Machineしてたけど、すげえ役にたった。みんな使うべきだよ!復元の入力がTime Machineになるだけで、「移行アシスタント」でMacを乗り換えするときと同じようなもん。らくちん。

Time Machineとは別に、数日おきくらいにrsyncでのバックアップもとっているけれど、こっちは今回まったく使わなくて済んだ。

復旧の手順

また壊れたときのためにメモ。自分は/Usersを別パーティションにして、fstabでマウントしているのでひと手間多め。

事前に必要なもの

  • 工具(小さめのプラスドライバと星形のドライバ)
  • Leopardのインストールディスク
  • Time Machineのバックアップデータの入った外付けディスク
1. 内蔵ディスクを交換

バッテリのところを開けて、ふつーに交換するだけ。MacBookは素人でも簡単。(iBook G3のときはとても無理そうだったので店にお願いした)

2. システムを再インストール

Leopardのインストールディスクから、システムを再インストール。交換した内蔵ディスクはフォーマットされていないので、インストーラの「ユーティリティ」メニューからディスクユーティリティを起動してパーティション作成とフォーマット。

インストール自体は特に注意することもなし。10.5.3 Comboアップデータが外付けにとってあったので、それを適用。

3. Time Machineからデータ復旧

初回起動の「ようこそ」の手順のときに、「Time Machineからデータを復元」みたいな選択肢が出てくるので、それを選ぶ。/Usersを別パーティションにしているとき、ユーザの移行ができないっぽい(Firewireでの「移行アシスタント」のときもそうだった。別の起動ディスクのとき、fstab読まないからだろう)ので、ユーザは除外して、ほかのApplicationsやLibraryとネットワーク設定を移行。

ホームディレクトリのファイルは、システム起動後にTime Machineから復元。ユーザは環境設定から新規追加。

バックアップ対象外(Time Machineの領域が足りなかったので)にしていた、/usr/localや/opt/localは、別のバックアップやインストール記録のメモから復旧中。

iTunesのライブラリもサイズ大きいからバックアップから外していた。iPodから復元できるみたいなので、そのうちやるつもり。最悪の場合は再度リッピングでもいいやという感じ。

なぜかSafariのRSSリーダの未読がすごい数になっていた。なんかリセットされた?まあSafariはバックアップみたいなもんで、ふだんはLDR使ってるから気にしないことに。

改善点

以下のことをやってみる。

  • fstabをやめる。アカウントの詳細でホームディレクトリを変更した。/Usersというパスでも使いたいので、/Users/usernameをシンボリックリンクに。
  • /usr/localや、/opt/localになにをインストールしたかわかるように。MacPortsについては、port installed activeで定期的に一覧を出力して、そのテキストをバックアップすればだいぶマシになるはず。

改善の成果は次になにか起きたときにわかる予定。そりゃなんにも起きないほうがいいけれど、そうもいかないことは毎度まいど思い知らされる。

|

2008.07.05

roteをRake 0.8系で使えるように

roteという静的HTML作成ツールを使っている(参考:はてなブックマーク - タグ rote)。rake一発でページ生成できるし、autolinkrelなどのフィルタが便利なので自分のサイトなどでも使っているのだけど、Rake-0.8.1で動かなくなっていた。

roteのフォーラムのほうに該当するトピックを見つけたので、修正するパッチを投げておいた。(ファイル添付できないのか?)

  • ruby-1.8.7-p22, rake-0.8.1
  • roteのrake testがすべて成功(redcloth, bluecloth, syntaxが必要)
  • 自分のサイトをrake clobber && rakeして、svnリポジトリの内容と比較。修正前のrote-0.3.4とRake-0.7系の組み合わせでの出力と差異がないことを確認

までは検証済み。

|

2008.07.04

提案: rubyのarchはシステムのマイナーバージョンを無視したい>MacPorts

rubyの拡張ライブラリは、archdir/sitearchdir/vendorarchdirにインストールされるわけだけど、archにシステムのマイナーバージョンが含まれているために、rubyをインストールしたときのシステムバージョンによって、拡張ライブラリのインストール場所がばらばらになってしまう。

残念なことになっている例。

 % ls /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin*/
 /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.0/:
 RMagick.bundle        sqlite3_api.bundle
 
 /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.2.2/:
 gconf2.bundle         gnomevfs.bundle         rsvg2.bundle
 gnome2.bundle         libart2.bundle          rubycocoa.bundle
 gnomecanvas2.bundle   rbart.h                 uconv.bundle
 gnomeprint2.bundle    rcovrt.bundle
 
 /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.3.0/:
 cairo.bundle          rb_cairo.h              starruby.bundle

すると、以前にインストールしたのにrequireで失敗したりするわけだが、納得いかないのだよ。そんなんメジャーバージョンだけ使えばいいじゃん、と思うわけ。Apple提供のMac OS X添付のrubyは昔からそんなふうになってる。

 % uname -r
 9.4.0
 % /usr/bin/ruby -rrbconfig -e 'puts Config::CONFIG["arch"]'
 universal-darwin9.0

なので、MacPortsのlang/rubyもそうしちゃおうぜ、という提案をしました

問題点などあれば指摘してください。反対がなければ、日曜くらいにはコミットしちゃうつもり。

2008.07.05(土) 追記:コミットしました

思いのほか賛成が多かったので(みんな早く言えよ!こういうの気にするおれが神経質なんだと思ってたよ)、今日コミットしました(r38064)。日本時間だと17時ごろに次のPortIndex更新が走ると思うので、ユーザの人たちはもうしばしお待ちください。

以下、更新の手順。自分がやった例なので、もちろんみなさん好きなようにしてください。zshで作業してるので、(2)とかは動かないシェルがあるかも。

 # (0) rubyを@1.8.7-p22_3に更新する
 % sudo port sync
 % sudo port -n upgrade ruby
 # (1) MacPortsでインストールした、現在利用中(active)の
 #     Rubyライブラリっぽいものを抽出
 % port installed active | grep rb- | cut -c3- | cut -d\  -f1 | tee rb-ports.txt
 rb-actionmailer
 rb-actionpack
 rb-actionwebservice
 rb-activerecord
   :
 # (2) (1)の結果のうち、拡張ライブラリ(.bundle)を持つportを抜き出し
 % (for port in `cat rb-ports.txt`; do port contents ${port} | \
    grep -q '\.bundle' && echo ${port}; done) | tee rb-ports-with-bundle.txt
 rb-atk
 rb-gconf
 rb-gdkpixbuf2
 rb-glib
   :
 # (3) (2)のリストについてportを強制再インストール
 % sudo port -nf upgrade `cat rb-ports-with-bundle.txt`
   :

対象のportのリスト(作業中に作成する.txtファイル)は、必要に応じて編集してください。rb-gnomeとかは、たぶん抜いとかないとメンドウだと思います。

すると、

 % ls /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin*/
 /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9/:
 RMagick2.bundle*        gtk2.bundle*            rbgtk.h
 atk.bundle*             libart2.bundle*         rbgutil.h
 cairo.bundle*           pango.bundle*           rbpango.h
 gconf2.bundle*          rb_cairo.h              rbpangoversion.h
 gdk_pixbuf2.bundle*     rbart.h                 rcovrt.bundle*
 glib2.bundle*           rbatk.h                 rsvg2.bundle*
 gnome2.bundle*          rbatkversion.h          sqlite3_api.bundle*
 gnomecanvas2.bundle*    rbgcompat.h             starruby.bundle*
 gnomeprint2.bundle*     rbglib.h                uconv.bundle*
 gnomevfs.bundle*        rbgobject.h

になってすっきり。

これで、

  • rubyのno_doc variantを復活させたい
  • archdirをメジャーバージョンだけにする

という、以前からの個人的な要求が解消できた。コミッタになるって素敵。

|

2008.07.03

第1回「詳解Objective-C 2.0」読書会は、7/6(日) 浅草で

こちらにも告知。

HMDTで宣伝してもらえたおかげ(mkinoさん、ありがとうございます)か、順調に参加者が集まりつつあります。日程を調整した結果、今週末に第1回の読書会を行うことになりました。

  • 開催日:2008-07-06(日)
  • 時間:14:00 - 17:00(現地集合)
  • 会場:東京都立産業貿易センター 台東館(浅草) 2階 会議室A

詳しくは第1回読書会のページや、告知のメールを参照のこと。

MLでいちいち言うのもヘンなのでこっちに書いとくけど、「詳解Objective-C 2.0」読んでて疑問とかあれば、MLに質問投げてぜんぜん構わないです。せっかく人が集まってるんだから、オフラインの読書会に限定せず活用しましょう。

|

RubyCocoa 最近のコミット

最近の作業の記録。

  • 10.5でのプロジェクトテンプレートのインストール先を/Library/Application Support/Developer/3.0/Xcode/から/Library/Application Support/Developer/Shared/Xcode/に変更(r2211

MacRubyのほうで、Xcode 3.1でテンプレートがないという報告が2週間くらい前にあったのを思い出したのでこちらも。すでにインストールしている場合は重複して複数の場所にインストールされるけれど、とくに問題はないもよう。選択肢としてはそれぞれ一つだけ表示される(Xcode 3.0での確認)。10.5ではOS付属のXcodeToolsについてるテンプレートから変更ないはずなので、気にする必要ないっちゃないのかもしれないけれど。

  • kvc_writerを同名の属性について複数回呼び出すと、kvc_writerによって定義されたsetterの実行が無限ループするのを修正(r2212

これは、Eloyが再現コード用意してくれていたので、準備ができたらひたすら調べるだけだった(つっても2時間くらいかかった)のだけど、その再現コードを動かせるまでが大変だった。git用意して、test/spec入れて、rucolaは最新のリリース版の0.0.3ではダメでtrunkから取ってきたりとか。

いやまあ、バグ入れたのは自分だから仕方ないんだけどさ。修正自体はたった1行で済んだりすると、ちょっと拍子抜けるよね。

|

その名は"iphoneruby"

Rubyforgeで探し物をしていたら"iphoneruby 0.1.0 Released"というリリースアナウンスを見かけた。iPhone上で使えるRuby、もしくはRubyのサブセット的なものかなあ、iPod touchでメモリ足りなかったらしいのは、どう回避できたのだろう、と思って見てみたら、

  • RubyベースのXcode/Objective-C向けのテスティングフレームワーク
  • Objective-Cクラスのスケルトン作成

といった、iPhoneアプリ開発をサポートするツール群らしい(README.rdocより)。

その名前はズルすぎる。

|

2008.07.01

RubyKaigi2008行ってきた

RubyKaigi2008に行ってきました。チケットをくれたRuby札幌の前田さん、ありがとうございました。また、スタッフ・スピーカー・参加者のみんなに感謝を!今年もすてきなRubyKaigiでしたよう。

ぜんぶ書いてから公開しようとすると終わらなそうなのでとりあえず(去年のは書きかけで塩漬けになってるのを見つけた)。ときどき更新するかもしれません。

セッション

この1年で地図のたくさんの領域に色が塗られたけれど、白いところもまだまだ。つーか、あとどんだけあるわけ?みたいな。ワクワクはなくならないね。

2

そのたいろいろ

通信環境

会場内にたくさんの無線アクセスポイントが設置されていて、快適でした。自分の使った範囲では問題まったくなし。もしかして自分が知らないだけで2008年的には当たり前なのかもしんないけど、これはすごいことだと思うのです。

(Reject){1,2}Kaigi

見たかったのだけど、体力的にいっぱいだったので早めに帰宅。帰りのTXで爆睡した。

感想など見てまわると、やっぱり見るべきだったと後悔。ちくしょう。

多目的ホール

サブセッションを聞いたり、ブースを見るほかにも、テーブル席ではしゃべり放題っぽい雰囲気がいい感じ。何人か初対面の人と話すことができて、いろいろ刺激になった。もっと自分から話しかけるよう努力しよう。

コード書きたくなる

「コードを書きたくなるカンファレンスは良いカンファレンス」というのをいくつか見かけたけど、ホントそんな感じ。でも、会期中に現地でばりばり書いてしまうのはやっぱもったいないよーな気もする。作業すげー進むんだけどさ。

来年は1日くらいは、マシンを持っていかない、というのを試してみよう。

英語

ふだんは、MLのやりとりに必要な読み書きが(相手の歩み寄り込みで)できればいいや、という程度。聞く・話すだと、技術系の話題なら聞いていてもなんとかついていけるけど、話すほうはダメダメ。

でも他に機会もないから、現状であんまし不満はないんだよなあ。

RubyCocoaは生き残った、そしてここまで来た

感傷的な個人的な話。思えば遠くへ来ちゃったものだ。Laurentのセッションのほかにも、LTやいくつかのセッションでも名前あがったりとなかなか存在感があったように思う(LaurentのはMacRubyのインパクトがすごかったけど)。

なんか不思議な感じ。

ChangeLogに自分の名前しかない期間を調べてみると、答えは2004/11-2006/03だ(Laurentの別ブランチでの並行があったはずだけど、それは調べてない)。その前はふじもとさんばっかりだったりするわけ。オープンソースソフトウェアって生き残ることも重要なのだね。機能の追加はともかく、最新の環境でコンパイル・実行が可能な程度にはメンテナンスしてたことにも意義があったんだと思ってる。

|

« 2008年6月 | トップページ | 2008年8月 »