2010/06/29

RubyCocoa

先日<http://ashplanning.blogspot.com/2010/06/google.html>のコメントの中でちゃらんさんに
RubyCocoa 入門を教えていただきました。
こちらを経由し
Programming - RubyCocoa wiki
ここを読みながら遊んでみました。

# サンプル通りに警告音を鳴らす。
% irb
>> require 'osx/cocoa'
=> true
>> names = Dir['/System/Library/Sounds/*.aiff'].grep(/([^\/]+)\.aiff/){ |i| $1 }
=> ["Basso", "Blow", "Bottle", "Frog", "Funk", "Glass", "Hero", "Morse", "Ping", "Pop", "Purr", "Sosumi", "Submarine", "Tink"]
>> OSX::NSSound.soundNamed(names[0]).play
=> true

# OSX::NSSound のpublic メソッドをみてみた。
>> OSX::NSSound.methods
=> ["objc_class_method", "_ns_enable_override?", "kvc_wrapper_writer", "objc_instance_method_type", 
... 略

# OSX::NSSound を管理している OSX モジュールのメソッドをみてみた。
# ものすごい量に驚いてしまった!
>> OSX::methods
=> ["CFRelease", "CGColorSpaceRelease", "CGRectIntersectsRect", "frozen?", "CFNumberGetTypeID", "CGAffineTransformConcat", "launch_data_dict_lookup", "CGPaletteCreateWithByteSamples", "CGPDFDocumentAllowsCopying", "CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes", "to_a"
... 略

# サンプルにあるテキストクラスの生成
>> str = OSX::NSString.stringWithString 'hello'
=> #<NSCFString "hello">

# 'hello'.methods と同じことをしたつもり
>> str.methods
=> ["upcase!", "to_f", "to_yaml", "lines", "sub", "methods", "send", "replace", "empty?", "squeeze", "crypt", "chr", "gsub!", 
... 略

# RubyのString と同じように扱えるようだ。
>> str.upcase
=> #<NSCFString "HELLO">
>> str.reverse
=> #<NSCFString "olleh">

# class String は OSX::NSCFString 
>> str.class
=> OSX::NSCFString

>> str.object_id
=> 216018122

# OSX::NSCFString を str2 に代入
# さっきの str は OSX::NSString.stringWithString だった。
>> str2 = OSX::NSString
=> OSX::NSString

# メソッドの表示
>> str2.methods
=> ["objc_class_method", "_ns_enable_override?", "kvc_wrapper_writer", "objc_instance_method_type", 
... 略

# send でstringWithStringを設定してみる
>> str2.send(:stringWithString, "hi")
=> #<NSCFString "hi">
# ちょっと感動!

# OSX::NSCFString のクラスは?
>> str2.class
=> Class


あ? Class なんだ。

% irb
>> str = String
=> String
>> str.class
=> Class

これと同等てことかな。

+++ memo +++
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.6.4
BuildVersion: 10F569

% ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

2010/06/27

Blogger Preview

 デザイン->HTMLの編集 画面を表示し
何も編集しないで「プレビュー」をクリックすると
about:blank
になってしまった。まっしろけの画面。はっこれは!? なぜだろう。

Safari の設定を変えて(ポップアップ開く、サイト固有のハックを無効にしない、Runawy JavaScript タイマーを無効にしない、クッキーを常に受け入れる)みたが、やはり about:blank になった。

編集して保存はできたのでよかった。

2010/06/23

launchd.db

一般ユーザが

% launchctl unload -w /System/Library/LaunchAgents/com.apple.midiserver.plist

を実行したとするとその記録はどこにあるんだろうか?

/private/var/db/launchd.db/com.apple.launchd.peruser.XXX/overrides.plist
だった。(XXX は userid)

% cat /private/var/db/launchd.db/com.apple.launchd.peruser.XXX/overrides.plist


一般ユーザの launchctl list の中には
% launchctl unload してもなぜかエラーがかえってきてしまって unload させることができないような agent がたまにある。
そんな場合 overrides.plist に書きこむと確実に unload させることができる。
# 再度ログインしなおすことが必要

+++

as general user

% launchctl list | grep UI

# unload ScreenReaderUI agent
% launchctl unload -w /System/Library/LaunchAgents/com.apple.ScreenReaderUIServer.plist
# => returned error message

# user's id 
% id
uid=XXX(foo) ...

# change directory
% cd /private/var/db/launchd.db/com.apple.launchd.peruser.XXX

# files
% ls
overrides.plist

# look
% cat overrides.plist

# add element
% vi overrides.plit

# logout and login as general user.
% launchctl list | grep UI