2008年10月30日木曜日

TextMate Bundle アップデート

Subversionでアップデートできますよ

cd /Applications/TextMate.app/Contents/SharedSupport/Bundles
svn co http://macromates.com/svn/Bundles/trunk/Bundles/GetBundle.tmbundle/
TextMateを起動(再起動)してBundleのGet Bundleからインストールやアップデートをかけられます

2008年10月22日水曜日

Objective-Cのコメントの書き方

Cと一緒

んなことたぁ分かってます

ドキュメント自動生成ツール

やっぱJavaDocのようなものは便利なわけで、Objective-CというかCocoaでもできないかなぁと探してます。以下はObjective-C対応のもの

  • HeaderDoc Appleのオープンソース。 多言語対応。
  • Doxygen 多言語対応
  • nudoc Objective-CとNuという言語に対応?

他にもKDocや、ドキュメントジェネレーターツールならDoxygenのサイトにもたくさん載ってるけど、まずは一番気になるHeaderDocを試してからだな。DoxygenはHTMLテンプレートを自由に変更できるなら見た目をもっと綺麗にして使いたいと、思った事を...すまないと思う!(ジャックバウアー)。

HeaderDoc8がサポートする言語

  1. Bourne shell (and Korn and Bourne Again)
  2. C Headers
  3. C source code
  4. C shell
  5. C++ headers
  6. Java
  7. JavaScript
  8. Mach MIG definitions
  9. Objective C/C++ headers
  10. Pascal
  11. Perl
  12. PHP

ADCがHeaderDocを使ってドキュメントを作成しているのなら、Cocoaアプリのクラスリファレンスは統一感が出るから使かおう。まだどんなアプリを作るかは考えてないけどw

追記:HeaderDocを試してみた

Xcodeのウィンドウとヘルプの間にある変なマークからHeaderDocを挿入するスクリプトがあるので試してみた。出力された例をSafariで確認できた。フレームで2つに別けられ、左がTOC(Table of contents)がコンテンツという感じだけど、APIリファレンスのようなデザインではない。配色は落ち着いてていい感じ。まだ試してないけど、他のクラスへのリンクとか、各ファイルの一覧とかは作成されるのかなぁ?。CSSはtoc.htmlにまとめて書かれていたり、spanのstyle属性でフォントが指定されている。テンプレートがあるならAPIリファレンスっぽいデザインに変えるのはCSSだけでもできそうな感じはするけど、提供されてるかは調べてない。日本語は普通に表示された。

Cocoaでテーブルを表示する時

NSTableDataSource

ADC:NSTableDataSource Protocol Reference
Interface Builder上で配置したテーブルビューを利用するには、NSTableDataSourceという決まり事を守る必要がある(protocol)。実際には2つの必須インスタンスメソッドを実装すればいい。

  1. 行数を返すnumberOfRowsInTableView
  2. 指定した行のオブジェクトを返すtableView

追記

CocoaのDelegationも参照

2008年10月21日火曜日

Objective-Cに文字列結合演算子はない

そいつは面倒だ... でも仕方が無い。NSStringは変更不可能なので、NSMutableStringを使った方が結合は楽かも。

NSMutableString* string = [NSMutableString string];
[string appendString:@"I"];
[string appendString:@" am"];
[string appendString:@" a Mac.\n"];

C言語でオレオレ型

//緯度経度用の構造体を使う場合
struct laglng {
   float lat,
   float lng
}
struct latlng point;
point.lat = 31.11f;
point.lng = 128.1344f;

//型を作ってしまう
typedef struct {
   float lat,
   float lng
} latlng;

latlng point;
point.lat = 31.11f;
point.lng = 128.1344f;
知らない事を知るのは楽しい

Cocoaのマルチバイト文字列

@""はNSStringのインスタンス

But,@"日本語"とはできない。

NSString* jpString;
jpString = [NSString stringWithCString:"日本語"
     encoding:NSUTF8StringEncoding];
とする。使いづらっ!ローカリゼーションの機能もあるけど、日本語をばりばり使う場合ってこれしかないのかなぁ...

日本語関連定数

  • ASCII : NSASCIIStringEncoding
  • Shift_JIS : NSShiftJISStringEncoding
  • EUC-JP : NSJapaneseEUCStringEncoding
  • UTF-8 : NSUTF8StringEncoding
  • UTF-16 : NSUnicodeStringEncoding

2008年10月10日金曜日

sshでMercurialをする時に最初に躓くところ

こんなエラーが出る

hg clone ssh://dopin@dopinsxanadu.com/hg/dev/
remote: abort: There is no Mercurial repository here (.hg not found)!
abort: no suitable response from remote hg!

確実に.hgは存在するのに!と思っていました。がしかし、これ、/hg/devは/hg/devではなく、$HOME/hg/devを指すようです。オイラが意図していたところにアクセスするには

hg clone ssh://dopin@dopinsxanadu.com//hg/dev/
と、もう一つスラッシュをつけてやらんないかんようでした。なるほどね。

2008年10月3日金曜日

Javaのプライベート変数にアクセス

将来の自分用に?メモ。あまりJavaをやる気はないけれど。 Javaは接着剤つけてねじ止めされてるような感じですね。ちょっと手間です。
String str = "string";
Field fld = str.getClass().getDeclaredField("value");
fld.setAccessible(true);
System.out.println(fld.get(str));
リフレクションを使ってプライベート変数を参照。

Pythonのプライベート変数にアクセス

Pythonのアクセス権で、privateにしたいものは最初に__(アンダーバーを2つ)付けて命名する。他の言語ではアンダーバー1つというコーディング規約があると思うけど、Pythonでは__がプライベート宣言になるので、言語レベルで命名規約になってます。

PHP出身のミーはプライベート変数にはアクセスできないと思い込んでました(PHPでもやり方があるかもしれないけど。PHP5以降の話ね。PHP5より以前はアクセス権なんてないから)。でもPythonはアクセスできるようです。

電化製品でいうと、使用者が触っていい部分(ボタンとか)がpublicで、触ると感電したりして危ないから隠されている部分がprivateだと考えると分かりやすいです。 Pythonはprivateな部分を金庫に保管するようなほど堅牢な作りはしていません。不慮の事故を避けるためにプライベート変数があるためで、確信犯的にプライベート変数にアクセスできるようになっているとマニュアルに書いてあります。 Pythonマニュアル 9.6プライベート変数 プライベート変数にアクセスする場合は自己責任でという感じですね。

プライベート変数に実際にアクセスしてみる。

_クラス名__プライベート変数
例: private
class Foo:
  def __init__(self):
    self.__privateVar = "How could you!!";
  def __privateMethod(self):
    print "Don't touch me";

if __name__ == '__main__':
  f = Foo();
  f._Foo__privateMethod();
  print f._Foo__privateVar;
#実行結果
Don't touch me
How could you!!

2008年10月2日木曜日

Macでバックスラッシュを入力する方法

普通に正規表現で¥dとかやっても全然マッチしなかったので、よそからバックスラッシュをコピペしたら動きました... キーボードで入力する方法
alt(option) + ¥