XCodeでgdbコマンドを使うと意外と快適
XCodeのデバッガウィンドウではgdbのコマンドが使えますが(というかモロgdbプロンプトでてます)、大抵のことはXcodeのIDE内でコト足りていたのでこれまであまり使っていませんでした。それでこのお正月に、フト思い立ってデバッグコンソールを使ってみたら意外と快適でした。
単純なことなんですが、一度n(ext)タイプすれば、しばらくは[Enter]キートントンでステップ実行できるのが一番快適。やっぱマウスに手を伸ばすのはリズムが乱れるものだし、クリック位置を間違えたりすることが多くて最初からやり直したりなんてことがなくなります。デバッグ作業も、乗ってくる(?)とリズムが大事だから僕にとっては結構重要。あと、昨日まで知らなかったんですがpo(print-object)コマンドでオブジェクトをプリントすることもできますね。対象のオブジェクトが対応していればの話なんだけれどNS**は大抵対応しているみたいだし、IDE内でスクロールして欲しい値を探すなんてことは今日からはしないかも。
まぁ、なにより"gdbコマンドを使いこなしている感"がちょっと出て、ギークっぽい気分を味わえるところがいいですよ。
uncrustify(viでもやっぱり使うよね)
XCodeでuncrustifyを使う方法も必要なんだけどやっぱvi(m)でも必要かな?なんて思い、試行錯誤の結果
map t !}uncrustify -q -c /path/to/config.cfgブレースブロック単位で変換できるのが小回りがきいた感じでむしろ便利。ためしてみたらperltidyでももちろんできました。キーバインドはもちろんお好みってことで。
訂正(2008/12/24)
}じゃなくて%でしたね。段落じゃいかにも都合が悪い。プログラマだし。
map t !%uncrustify -q -c /path/to/config.cfg
XCodeの環境変数の一覧
以前、Scripting Bridgeついて調べていたときBridge用のヘッダファイルを生成するのにXCodeのビルドフェーズでカスタムスクリプトを追加してScripting Bridge用のヘッダーファイルを生成するというテクニックがAppleのサンプルにあって、それは
UnitTest XCode2.5
先日のエントリで書いた、CocoaのUnitTestについてはLoepard(XCode3)環境でのことだったのですが、同じプロジェクトでTiger(XCode2.5)環境ではうまくいきませんでした。テストターゲットのビルド設定をそれなりにしないと正しく動作しません。
例えばテスト対象としたクラスではキーチェーン操作のためのコードが入っていたりlibcryptoのblowfish系の関数を使ったりしているためSecurity.Frameworkやlibcryptoにリンクする必要があるのですが、これらはテストターゲットでもリンクの必要があります。また、肝心のテスト対象クラスファイルもテストターゲットに追加しないとリンクできませんでした。仕方がないのでリンクのほうはOTHER_LDFLAGSに、テスト対象クラスはテストターゲットの「ソースファイルをコンパイル」にドラッグしました。
uncrustifyをXCodeで便利に使う
perlのモジュールにperltidyっていうのがあってこれが重宝しています。大昔、perlに挫折した理由のひとつにあまりにもコードが汚くなりすぎるっていうのがあったんですが、こいつを使えばいつでも自分好みのコードに整形できて精神的にはとっても安定します。(僕は根がいい加減なくせにコードのインデントには結構こだわるところがあって、2タブじゃないと嫌だとかブレースはGNUスタイルが好きだとかいろいろあるんですが、やっぱりチャランポランな性格ゆえ誰かのコードを拝借してペーストとかしているうちコードスタイルもちゃんぽんになってきてある日思い立って「よし!修正しよう!」とか思ったりもするんですがコミットコメントに「インデントの修正」とか書いていたら嫌がられるだろうなぁなどと思って放置していたりする人間なんです。←長すぎる注釈)
それで、Objective-Cでもこういうモジュールないかなって探してみたらありました。uncrustify。で早速、試してみると結構イイ。*.cfgの内容はまだカスタマイズしていないけどデフォルトで付属していたgnuスタイルでそこそこ満足できるのでこれをベースにカスタマイズする予定です。
後は使い方なんですが、perltidyの場合ほぼ100%viでの編集なんで:%!perltidyで実行していますがObjective-Cの場合はやっぱりXCodeがメイン。いちいちターミナルを開くのもなんだしユーザスクリプトメニューから実行すれば便利です。スクリプトは簡単で、
CocoaのUnitTest
これまでの職歴では大規模開発中心で大抵は発注元の大手ベンダーがチームを作ってテストをすることが多くて単体テストってあまり身近なものじゃなかったんだけれど、今は大規模開発なんて無縁だし、僕が書いたコードをデバグしてくれるのは僕一人という状況だから開発サイクルにうまくテストを組み込むのは必須事項なんです。
さりげなく便利なXCode3のリファクタリング
あまりリファクタリングなんてことを意識したことないんですが、コードを書いている途中であぁ、このメソッド名があまり適切でないなぁなんて思うことはダメプログラマの僕にはしょっちゅうあって、面倒だからそのままでいいやって時もたまにあったりして反省しなきゃいけないんですが、たまにはどうにも我慢がならなくなって「よし、全部変更しよう!」とか思ったりもするわけです。
もう、プログラムなんてスクラッチから書く気がしませんよ
「まるごとPerl!」という本をパラパラめくっていたらGD::Barcodeなるモジュールを発見。仕事でバーコードを出力したいというニーズがけっこうあって、VC++で自作したモジュールを使ったりエクセルExcelやらAccessでmsbcode9.ocxを使っていたのですがPerlでお手軽にバーコードが作成できるならこれも1つのテとしてストックしておくに限ると思い早々にトライ。
心配は、GDの名前が示すとおりlibgd関連のライブラリが揃っていないと動かないのではないかという懸念。一応、仕事でもOSX/RedHat環境があるので最終的にはこちらで作成してもいいのですが、やっぱり手元のWin/ActivePerl-5.10環境で動かしたいというのが本音。
ppmはさすがにCPANほどモジュールが揃っていないのでそこが気に掛かるところ。おそるおそる
ppm install GD::Barcode
としてみると一応成功。依存関係も解決してくれたことを期待しつつテストコード
use strict;
use GD::Barcode;
binmode (STDOUT);
print GD::Barcode->new('EAN13','1234567890123')->plot()->png();(たったこれだけ!いままでの苦労はなんだったんだ!)を実行してみるも、案の定GD::Fontがないよみたいなメッセージ。
あきらめてGD系のパッケージをインストールしようとおもったのだけれど検索してみるとどうもそれらしいのがないみたい。OSXかRedHatでやるかと半ばあきらめつつ一応ググってみたらありました。ppdってサードパーティからも色々あるんですねぇ。
ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GD.ppd前にも書いたけれどperlコミュニティの広がりはちょっと驚き。なにかしようと思うと大抵のものはもう用意されているような気がしますよ。これまでExcel出力とかVC++で面倒なことやっていたのもSpreadsheet::WriteExcelでチョロっとできちゃうし。他にも便利そうなライブラリがてんこ盛り。もう、プログラムなんてスクラッチから書く気がしませんよ。

W400生産終了だって
いつかW400買おうなんて思っていたのだが何気なくKAWASAKIのページをみていたらこの有様だ。251-400クラスのロードバイクが全滅。
今のオートバイ事情ってこんなもんなのかねぇ。ちょっと寂しい。最後の砦はSRかな。これだけはなくなって欲しくないよ。
perlリファレンスのおどろおどろしい世界
仕事でちょっとしたアドレス帳的なデータを扱う必要があって、勉強中のperlでユーザIDをキーにメールアドレスと名前の配列を値としたハッシュを作ろうと思ったのですがいきなり躓きました。単に、CSVからデータを読み込んで突っ込むだけなので大したことない処理だとタカを括ったのですが...最初に書いたのが以下のコード。
Codaがv1.6にバージョンアップ プラグイン機能が追加された
Codaがバージョンアップしてます。新しくプラグインの追加が可能になっています。Objective-C用のAPIも公開されていますが、Plug-in Creatorを使って好きなスクリプト言語でプラグインを作成できる機能がウレシイです。
clippy ホットキーカスタマイズ対応しました
やりかけも気持ちが悪いので体調不良にもめげず一気にホットキー設定まで実装しました。

ホットキーに関しては最初から、HotKeyLib3の存在をチェックしてあったので迷わずこのライブラリを使いました。使ったのはUIインタフェースの部分だけですが、それだけでもずいぶんと手間を省くことができ短期間で完了することができました。ほんとフレームワークとかライブラリとか公開している方が大勢いて助かります。いつか、僕も受けた成果を還元したいと思う次第ではありますが何時になるやら...
objc-appscriptフレームワークはいたれりつくせり
(続き)
で、肝心の使い方なんですがobjc-appscript FrameworkではAppleScript対応アプリを制御するためのGlueクラスが必要になります。このglueクラス作成のためのツールが、binディレクトリに収納されてている、osaglueになります。このosaglueの中身はpythonスクリプトで実行にはpy-appscript/py-osaterminologyのインストールが必要です。objc-appscript/installページにあるとおり最新版を取得してインストールします。これで準備完了。例えば、Mail.appのglueクラスを作成するには、
AppleScriptは敗北か!?
clippyを公開したら思いのほかダウンロードしてくれた人が多くて、ビックリしました。自分としては、ホットキーが固定であること・自動ペーストができないという中途半端な状態でのアップだったので恐れ入るばかりです。とりあえず、この2つのうち自動ペーストについて現在アップデート中です。
リストコントロールのTIPSあれこれ
昨日は久しぶりにMFCでコードを書きました。データを一覧表示するのにリストコントロールのレポート機能を使ったのですが、使い方をもうすっかり忘れてしまっていてずいぶん時間をかけてしまいました。僕がやることなんて大抵いつも同じなのでテンプレート用サンプルを作成しておけば、後々あちこちのプロジェクトを引っかき回すこともないかと考え、テンプレート的サンプルプログラムを作成しました。











最近のコメント
1週 6 days ago
2 weeks 6 days ago
3 weeks 19 hours ago
7 weeks 16 hours ago
7 weeks 4 days ago
8 weeks 3 days ago
8 weeks 4 days ago
11 weeks 4 days ago
11 weeks 4 days ago
17 weeks 5 days ago