✖
libruby.1.dylib うめこむやつ
http://rubycocoa.sourceforge.net/EmbedRubyCocoa の
require 'pathname'
exec = File.join(ENV['TARGET_BUILD_DIR'], ENV['EXECUTABLE_PATH'])
old = Pathname.new('/usr/lib/libruby.1.dylib').realpath
new = '@executable_path/../Resources/libruby.1.dylib'
system("install_name_tool -change '#{old}' '#{new}' '#{exec}'") or exit 1ってうまくいかないようなきがする。Contents/MacOS/APPNAME は otool -L すると libruby にリンクしてなくて、@executable_path/../Frameworks/RubyCocoa.framework/Versions/A/RubyCocoa にリンクしてるし、実際 libruby にリンクしてるのはこっちのほう。install_name_tool の挙動を勘違いしていなければ、たんにこれは指定されたファイルの Mach-O dylib のパスを書きかえるだけだろうから、これだと意図したこと (バンドル内の libruby よむ) ようにならない?
Chemr とかでは結局 standalonefy してあつめられる .bundle とかの libruby.1.dylib へのリンクも一緒に書きかえるようにしてみた。
# in 'package' task
# copy libruby.1.dylib
sh %{rubycocoa standaloneify "build/#{DEFAULT_CONFIGURATION}/#{APPNAME}.app" "image/#{APPNAME}.app"}
system_libruby = Pathname.new("/usr/lib/libruby.1.dylib").realpath
bundle_libruby = "image/#{APPNAME}.app/Contents/Resources/libruby.1.dylib"
linked_binary = "image/#{APPNAME}.app/Contents/Frameworks/RubyCocoa.framework/Versions/A/RubyCocoa"
(Pathname.glob("image/**/*.{bundle,dylib}") + [linked_binary]).each do |l|
sh %{install_name_tool -change '#{system_libruby}' '@executable_path/../Resources/libruby.1.dylib' '#{l}'}
end
cp system_libruby, bundle_librubysudo mv /usr/lib/libruby.1.dylib /usr/lib/libruby.1.dylib_
して起動することを確認してみた。
(たぶん) 完全にスタンドアロンな Chemr と Amalgam
- http://lab.lowreal.net/test/amalgam/Amalgam.2007-11-04.dmg
- http://lab.lowreal.net/test/chemr/Chemr.2007-11-04.dmg
起動バイナリを置きかえて DYLD_LIBRARY_PATH を設定するとかでもいいのかなぁ。この環境変数がどれぐらい強いのかよくわからないけど
マルチログイン系のを GM で書かない理由
使わないときにも実行されるのが嫌
GM で書いたほうがはやく書けるけど、日常的におもくなってストレスたまるほうがいやだな。
GranParadiso はそれでなくても重いし!!!!! というか Safari の UI を RubyCocoa で InputManager とかつかって変更できるなら乗りかえちゃうなとか思った。
>
GranParadiso
CPU つかいすぎだなぁ……あとなんかフォアグラウンドにいるときはより CPU を食う。ActivityMonitor のグラフがやたらのびてるなぁとおもってそっちにスイッチすると隠れようとする。
関係ないけど pmTool も CPU 食いまくるよなぁ。そのせいでバッテリ持たないっていうのはどうなの。
そういえば
id:gyuque さんにカロリーメイトのパチモンをもらったのを忘れていた。というか写真も現像してない。どんだけ coderepos 中心の生活なんだ。へたなネトゲよりたのしいコミット。
id:higepon さんと mayuki さんにもわたったようだ。
あと、昨日の写真でアップロードできそうなのを探したけどみごとに人がうつっててやめた。肖像権こわい。
前半一番後ろに座ってたときのやつがあった。(後半は空気読まず一番前に座ってた)
関連エントリー
- ヘッドフォンにみえるサムネイル がヘッドフォンに見えるって id:mayuki さんに言われたので、ぼーっと眺めてみたら見えてきた。おもしろいなぁ
- スローライフしたい。 throw :life #=> ThreadError : "uncaught throw `life' in thread 0x854b6...
- ✖ 女性一人称の作品を探していたけどおもしろそうなのがない。 雪の夜の話は面白いけど短かい。太宰治はほかに書いてないのかな。いっぱいあって開くの...
- 去年のもろもろ あんまりたいしたことはできなかったなという記憶がある。特にソフトウェア方面がとても薄い。 雑感 写真とった枚数が断トツで多い年だった。そうい...
- Shibuya.jpg id:TAKESAKO さんのお宅にお邪魔しました! カードリーダを忘れないようにしよう……っておもって出掛けたらACアダプタを忘れて戻った...
Shibuya.js
いい空気だよなぁほんと……いごごちがいい。今回は懇親会で Perl hacker なかたがたの Perl よりの話を聴いた。じわじわ Perl の知識が増えておもしろい。
あと、学校辞めてから生き生きしてるよねとか言われたけれど、まじでその通りすぎる。やらなくちゃいけないことはあるんだけど、そういうのさしひいても毎日楽しいもんなぁ。
関連エントリー
- Shibuya.js が Shibuya.js TT #2 の LT まじで普通に GreaseMonkey の入門やるます。
- Shibuya.js 資料 shibuya-js-1-lt.html やー、すっかりきんちょーしてしまい言いたいことがすっ飛んでしまった。まぁいいや。XPath が式で...
- YAPC 初心者ほど YAPC にトーク応募すべき10の理由 トーク応募のページ 理由 懇親会対策 基本的にこういうイベントは懇親会が一番重要といってもいいぐらいだが、コミュ障だと懇親会とかで誰と何を話...
- YAPC::Asia 2013 まずやはり終わって思うのは、LTとしてすら発表しなかったのが反省だな〜 と思った。「今年 Perl 関係でおもしろいことしてないし……」と思...
- Shibuya.js TT #2 お疲れ様でした やー、楽しかった。 「まとめなげーよw」とか突っ込まれましたが気にしない方向でいきたいと思います。少しずつプレゼン技術を磨いてスプーメソッド...
写真の統一感
は、彩度とかコントラストとかではなくて、なんかちょっとそういう要素とは違う部分にあると思うなぁ。フィルタのかかりぐあい。心の。フィルタの状態の統一感ではないかな
機械的に判断できる部分ではなくて、頭に思い浮かべた像が、統一されているかどうか。
GranParadiso
Firebug1.1.0b7 を入れた。うごいている。しかしいままで以上に重い。GranParadiso の重さと相乗効果
はてなのマルチログイン uc.js がないと激しく不便なのでデバッグして Fx3 向けに修正した。tumblr のやつも同じ修正が必要だけど、あんま使ってないのでそのうちでいいや。
ekfloras (blosxom clone) のプラグイン機構
とりあえず module/pluggable を使っていたものの、別にリロードとかできなくていい (CGI なので使い捨て) ので、もっと簡単なプラグインシステムにした。ついでに rubygems への依存もなくなったので、純粋に Ruby がインストールされていればレポジトリからチェックアウトしてすぐ動くようになった。
# プラグインファイルをロードして
# インスタンスの配列を実行すべき順にソートして返す
def load_plugins
Pathname.glob(@opts[:plugin_dir] + "/**/*.rb") do |f|
load f
end
pm = self.class.const_get(:Plugin)
pm.constants.inject([]) {|r,i|
r << pm.const_get(i).new(self)
}.sort_by {|i|
i.priority
}
endみたいにして Ekfloras::Plugin::* をプラグインとみなし、メソッドをよぶ。かなり簡単だけど普通は十分なプラグイン機構だと思う。(ファイル名とクラス名間の名前の制約がなくなるので、てきとーにプラグインんが書けるようになる。逆にこれのせいでリロードとかが実装できない) こんだけ単純だと特にライブラリする必要もないので欲しくなったときに書きなぐればいいのがいい。
(priority メソッドの返り値でソートしているのは、プラグイン同士で実行順に気をつかうようにするため。blosxom だと名前順になっているから、各ユーザがプラグインの仕組みを理解してファイル名を書きかえたりしないといけなかったけど、これでだいたいてきとーにプラグインディレクトリにほうりこんでも動くようになるはず)
ちゃんとインスタンス化してメソッドをよぶようになるので、各プラグイン内のメソッドの名前がコンフリクトしたり、データが共有されることがなくていい。ちゃんとメソッド間ではデータ共有できるし (こんなのあたりまえなんだけど、Ruby 系のプラグイン機構ってこういうあたりまえのことができないのが多いイメージ)
あとは設定かな。設定はできるだけ書きたくないから (blosxom のプラグインのいいところは投げこめば動くことだと思う)、最小設定と、オプションをいくつかとかになるかな。
ekfloras の速度
- #<Ekfloras::Plugin::Meta:0xb7bcc03c>
- #<Ekfloras::Plugin::Paging:0xb7bcbfec>
- #<Ekfloras::Plugin::Comment:0xb7bcc014>
(EntriesCache なし)
ruby 1.8.4 1159 files, 1.212316 sec 1159 files, 1.722761 sec 1159 files, 1.390812 sec 1159 files, 1.353448 sec 1159 files, 1.423345 sec ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux] 1159 files, 1.025227 sec 1159 files, 1.075664 sec 1159 files, 1.202309 sec 1159 files, 1.300395 sec 1159 files, 1.284752 sec
- #<Ekfloras::Plugin::EntriesCache:0xb7c08ae8>
ruby 1.8.4 1159 files, 0.733907 sec 1159 files, 1.166876 sec 1159 files, 1.437776 sec 1159 files, 0.857321 sec 1159 files, 0.906379 sec ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux] 1159 files, 0.315943 sec 1159 files, 0.301194 sec 1159 files, 0.446674 sec 1159 files, 0.254224 sec 1159 files, 0.45789 sec
EntriesCache (エントリをオブジェクト化した状態でマーシャライズしてキャッシュするプラグイン) 入れた ruby1.9 がかなりはやい。
blosxom clone ekfloras
http://coderepos.org/share/browser/lang/ruby/ekfloras
Ruby で blosxom クローンを書いてみた。他の言語と違って blosxom のプラグインの雰囲気をのこしたり、まじめに使うことをちょっと考えたりするように。
テンプレートエンジンに ERB と Erubis どっちもサポートしようとおもって書いていたけど、途中でテンプレートが Erubis 専用になってしまっていることに気付いてめんどくなったのでどっちもやめて (イミフ) 前書いた MiniERB をつかうようにした。(空白圧縮とかしないけど ERB の 2.5 倍ぐらいはやい)
いまどきブログ CGI なんて書いてもだれもつかわないんだけどなぁ。ふつうにどっかのサービスつかったほうがいい。でも blosxom 系のはブログつーるというより他の使いかたをしやすいからおもしろい。
最近の blosxom クローンのまとめ
最近の、であって、僕が書いた、じゃないですよ? (coderepos にあるもののみ)
- Ruby - ekfloras - http://coderepos.org/share/browser/lang/ruby/ekfloras
- Scheme - bloscheme - http://coderepos.org/share/browser/lang/scheme/bloscheme
- Io - IoBlosxom - http://coderepos.org/share/browser/lang/io/ioblosxom
- Zsh - blosxom.zsh - http://coderepos.org/share/browser/lang/shellscript/blosxom.zsh
- Vim - blosxom.vim.cgi - http://coderepos.org/share/browser/lang/vim/blosxom.vim.cgi
(使えそうな順にならんでます)
Lua は付属インタプリタでは実装できない。PHP と Python はやりたいと思わない。VBScript は Windows で CGI 環境つくるのがめんどうくさい。
Haskell と C# (on mono) あたりはやってみたいけど、ここで「やってみたい」とか書いている限りやらないだろう。本当にやってみたいなら既にやっているはずだ。



