2006-11-29
C language って検索しにくいんだよ!!
- Reference URI
- http://lowreal.net/blog/2006/11/29/1
- Directory
- /thinking/
- Date
- 2006-11-29 16:32 Edit
C 言語を最初に知ったぐらいの時、C 言語は自分にとって楽しい言語じゃなかった。ポインタを理解していなかったし、そもそもコンピュータの仕組みを理解していなかったし、ついでにいえば「下手すればコンピュータが壊れるコードを書く」みたいなことを思っていたので手を出せなかった。
何か知らないうちに Ruby をいぢって、Ruby の拡張ライブラリを読んだり、ちょっと作ってみたりするうちにポインタを理解していることに気付いて、最近 C 言語のキャストについてふとした拍子に理解して、だんだん C がわかるようになってきた。
機械語は読めないものだっていう先入観があったけど、Binary 2.0 あたりの流れでそうじゃないことに気付いた。読む人が読めば読めるもののようだ。なんとなく画像処理について気付いた時と同じ気持ちになった。
頭が悪くても、ゆっくりやっていれば結構どうにかなるのかもしれない。急ぐ事を強要されているけど、無視してもいい気がしてきた。
Ruby はなんとなくで「できそうなもの」だったから、やる気が沸いたんだよなぁ。C はそのとき「できなさそうなもの」だったからやる気が沸かなかった。Perl もそうだ。PHP はまだ「できそうなもの」だった。
どっかとっかかりがあればいいんだよなぁ。電子回路設計とかってどっから入ればいいんだろう。
2006-11-16
IIrcv - dRuby インターフェイスの時系列通知サーバ
- Reference URI
- http://lowreal.net/blog/2006/11/16/1
- Directory
- /software/
- Date
- 2006-11-16 00:48 Edit
Windows には Ircv というイカしたメッセージを表示するものがあるのですが、Mac だとこれっぽいのがないので作ってみました。Growl だと時系列が乱れたりするのでなんかだめだってときに便利かもしれません。
これを作るにあたりいろいろ学んだので楽しかった。
- Cocoa 全般の構造
- アプリケーションバンドルの作り方
- バンドル内のファイルのアクセス法
- NSLayoutManager の使い方少し
- .icns ファイルの作り方 (/Developer/Applications/Utilities/Icon Composer.app)
- dmg ファイルをコマンドラインから作る方法 (hdiutil create)
- 拡張ライブラリの実装法とドキュメントの書き方
- 拡張ライブラリ rubygems の作り方
- ユーザ入力が必要な実装のテストの書き方
あと言語依存を解決したい。Interface Builder で nib 作って読み込む方法がいまだにわからないのでどうにかしたい。
Universal Binary 云々は確認がめんどい割に面白くないのでやる気がおきない。
2006-11-09
mabinogi のギルド
- Reference URI
- http://lowreal.net/blog/2006/11/09/1
- Directory
- /game/
- Date
- 2006-11-09 16:45 Edit
所属ギルドが解散するらしい。残念だなぁ。
ここ最近ログインしてもコミュニケーションサーバーが重くてギルドチャットがまともに通らないことが多い。直後はしばらく繋がらないから発言できないし。キャラクターチェンジ多いとほぼずっとオフライン扱いになってしまう。直して欲しいな、と書こうと思っていたけどもうどうでもいいな。
大してログインもできないくせにこれから他のギルドに所属するのは面倒くさい。今更知らないギルドに入って相手の考えていることを量りながらチャットするなんてモチベーションは生まれてこないし、そんなに時間がとれない。
そろそろネトゲも卒業ですか。
2006-11-08
オートリロードの設定がめんどいので設定をオートにする試み
- Reference URI
- http://lowreal.net/blog/2006/11/08/1
- Directory
- /environment/
- Date
- 2006-11-08 22:56 Edit
オートリロードでリロードが楽になるのはいいんだけど、リロードさせるために設定をしたりとかするのがすっごいめんどく感じるようになってきたので設定もオートでやろうぜって思った。
Rinda::Ring は UDP で検索したり登録したりしてサービス呼び出せるライブラリで、これを使うと一瞬で上のようなことができちゃってオレスゲー感を味わえます。ちょーLL
まず tuplespace を起動する。以下のスクリプトそのまま。このタプルスペースはサービスの情報を統括してる。
require 'rinda/ring'
require 'rinda/tuplespace'
DRb.start_service
ts = Rinda::TupleSpace.new
place = Rinda::RingServer.new(ts)
DRb.thread.join
次に各種リロードサービスを tuplespace に登録するスクリプト。 こいつらはブラウザとともに常駐して、リロード要求をうけつける。これらはもちろん RingServer と同じホストで動いている必要はない。
以下は例
reloadfx.rb
#!/usr/bin/ruby
require 'rinda/ring'
require 'net/telnet'
class Reload
def reload
telnet = Net::Telnet.new({
"Host" => "localhost",
"Port" => 4242
})
telnet.puts("content.location.reload(true)")
telnet.close
end
end
reload = Reload.new
DRb.start_service(nil, reload)
provider = Rinda::RingProvider.new(:Reload, DRbObject.new(reload), 'Reload')
provider.provide
DRb.thread.join
reloadsafari.rb
#!/usr/bin/ruby
require 'rinda/ring'
require 'net/telnet'
class Reload
def reload
<<-`EOC`
osascript -e '
tell application "Safari"
do JavaScript "location = (location.href);" in document 1
end tell
'
EOC
end
end
reload = Reload.new
DRb.start_service(nil, reload)
provider = Rinda::RingProvider.new(:Reload, DRbObject.new(reload), 'Reload')
provider.provide
DRb.thread.join
でもって、上記サービスをタプルスペースから検索し、リロードメソッドを呼ぶスクリプト
#!/usr/bin/ruby
# reload.rb
require 'rinda/ring'
DRb.start_service
ts = Rinda::RingFinger.primary
ts.read_all([:name, :Reload, DRbObject, nil]).each do |i|
begin
p i[2].reload
rescue Exception => e
puts e.message
puts e.backtrace
end
end
この reload.rb を呼ぶだけで、何の設定もなしに、ネットワーク内のブラウザをリロードする。
新しくブラウザを起動したら同時にそのブラウザ用の Provider を起動すれば、それも何の設定もなしにリロードしてくれるってわけですよ。やばい!
Rinda::Ring さいこう>< DRb は Ruby の宝><
もうちょっといぢってみる。
2006-11-02
Creammonkey のデバッグ改造版をつくった
- Reference URI
- http://lowreal.net/blog/2006/11/02/1
- Directory
- /environment/
- Date
- 2006-11-02 01:10 Edit
Creammonkey 0.8 がリリースされたため、そちらをご利用ください :)
Creammonkey という Safari で userjs を使えるようにするものがあるのですが、userjs を書いている時いちいちメニューから Reload All User Scripts をするのが面倒くさいので改造してみました。
MIT ライセンスらしいのでビルドしたやつを公開。なにぶん Xcode 使ったのも初めてなのでこれでいいのかよくわかりません。ソースを公開したいときとか diff とりたいときってどこまでやればいいのかわからない。
Creammonkey-Debug.zip Original Copyright (c) 2006 KATO Kazuyoshi
Debug というメニュー項目が追加されるので、それをチェックしておけばページリロードのたびに userjs もリロードされます。
