2010年3月31日水曜日

[linux][xterm] コマンドプロンプトからウィンドウのタイトルを変える方法

以前、-title で xterm のタイトルが設定できない、という記事をポストしました。

コメントアウトすべき、とした
> echo -n "\033]0;${USER}@${HOSTNAME}:${PWD}"; echo -n "\007"
を xterm の起動済みのウィンドウの中で実行すると、
タイトルを動的に変更できます。

例えばウィンドウのタイトルを"NEW-TITLE"に変更したい!
と思ったときには以下のコマンドを実行すればOKです。
> echo -n "\033]0;NEW-TITLE"; echo -n "\007"


という備忘メモでした・・。

2010年3月10日水曜日

Objective-C:カテゴリで「できること」と「できないこと」

Objective-C のカテゴリについて「できること」「できないこと」をまとめました。

<<できないこと>>
  • 同じクラスの別のカテゴリに宣言されているメソッドを確実にオーバーライドすること
    =>クラスの @interface セクションで明示的に宣言されているメソッドの再定義を避けるべき
    リンク順で呼ばれる関数が変わってしまう・・・
  • クラスのインスタンス変数の追加
  • 既存のカテゴリと同名のカテゴリの追加
  • 同じクラスに定義されている同名のメソッドの呼び出し
<<できること>>
  • クラスへのインスタンスメソッド追加
  • クラスへのクラスメソッド(スタティックメソッド)追加
Appleの「Object C 言語」には「カテゴリの使い方」として以下のような例が挙げられています。
  • 関連するメソッドをグループ化する簡単な方法を提供します。異なるクラスで定義した類似のメソッドを、同じソースファイルにまとめることができます。
  • 複数の開発者がクラス定義に取り組むような大きなクラスの管理を簡素化できます。
  • 非常に大きなクラスについて、インクリメンタルコンパイルのメリットがある程度得られます。
  • よく使用するメソッドについて、参照の局所性を向上するのに役立ちます。
  • 個々のアプリケーションに合わせてクラスを異なるように設定することが可能となり、同じソースコードのさまざまなバージョンを維持する必要性をなくします。
「既存 API の上書きを行わない」ということに注意していれば、それなりに便利に使えるのでしょう。
既存 API の上書きについて、ruby のクラス再定義に近いのかと思いましたが、ruby が「後勝ち」を保証しているのに対し、objective-c では「未定義」となっているので注意が必要です。
ruby は alias を駆使してオリジナルの API を呼ぶための方法が提供されている点も大きな違いです。


2010年3月7日日曜日

iPhoneアプリ開発(その4):Interface Builder を使って view 作成

iPhoneアプリ開発(その4):Interface Builder を使って view 作成

Interface Builderでviewを新規作成し、xcodeのコードとつなげる手順。

  1. Interface Builderのメニューから[File]-[New]を選択し、表示されたダイアログで[View]を選択してから[choose]ボタンで完了
  2. 表示された空のviewに必要な部品を配置し、メニューから[File]-[Save]を選んでxxx.xibファイルを保存する(このとき表示される「Would you like to add "xxx.xib" to "xxx.xcodeproj"」というダイアログでは追加先プロジェクトを選択して[Add]ボタン押下)
  3. 追加したviewに対応するViewControlerを追加する(xcodeに戻って、メニューから[File]-[New]で表示されるダイアログ中のUIViewController subclassを選択)
  4. RootViewController.h/mに新しいViewControllerを追加する

    RootViewController.h

    #import "XXXViewController.h"
    @interface RootViewController : UITableViewController {
    XXXViewController* *xxxViewController;
    }
    @property(nonatomic,retain) XXXViewController* *xxxViewController;
    @end

    RootViewController.m

    @synthesize xxxViewController;
  5. RootViewと新しいViewの画面遷移を実装する

    RootViewCotnroller.m:root view => xxx view

    	View2ViewController *xxxViewController = [[View2ViewController alloc] initWithNibName:@"XxxView" bundle:nil];
    [self.navigationController pushViewController:xxxViewController animated:YES];
    [xxxViewController release];
  6. View Controller Identityの設定(xxx.xibを選択してInterface Builderの"File's Owner"を選択した上で、メニューから[Tools]-[Identify Inspector]を起動して、"class"のドロップダウンからXxxViewControllerを選択する)
  7. View Connectionの設定([Tools]-[Connection Inspector]を選択して、"New Referencing Outlet"をドラッグして"File's Owner"にドロップする。表示された"view"を選択すればOK)
こんな感じです。
参考にしたblog:
http://icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/




2010年3月3日水曜日

ターミナル上で改行を含む文字をコマンド引数に渡す方法

ターミナル上で改行を含む文字をコマンド引数に渡す方法
改行を含む文字列、例えば
aaa
bbb
ccc
を echo コマンド一発で表示したい場合。
> echo "aaa\
ここまで入力して[RETURN]キー押下すると、
> echo "aaa\
?
という状態になります。末尾の'\' が重要。 同じことを繰り返せば、所望の振る舞いになります。
> echo "aaa\
? bbb\
? ccc\
?"