iPhone特定の条件でデバックを行う

Xcode4.2において、ブレークポイントを設定して、特定の条件のみ処理を止めたいときの設定

サンプルコード

いつも通りブレークポイントを設定します。
その後右クリックで「Edit Breakpoint」を選択します。
 Conditionに「i==50」と設定すれば、iの値が50の時だけBreakpointを有効にできます

設定項目
  • Condition
    • 数式を指定
  • Ignore
    • 指定した回数はスルーする (2を指定すると3回目に止まる)
  • Action
    • 以下の詳細な動作を登録できる。デフォルトは何もしないで止まるだけ
      • ActionScript
      • Capture OpenGL Frame
      • Debugger Command
      • Log message 
        • %B メソッド名、%H カウントなど指定可能
      • Shell Command
      • Sound
  • Option
    • 一時停止しないで次に進む

SSHで公開鍵方式でパスワードなしでログインする

クライアントPCで秘密鍵、公開鍵を作成します

$ ssh-keygen -t rsa
※パスワードを2回入れます
そして~/.ssh/id_rsa と ~/.ssh/id_rsa.pub が作成されます

それをサーバ側にscpしてサーバ側の.ssh/authorized_keysに追加します。
scp ~/.ssh/id_rsa.pub [アカウント]@[ホスト名]
ssh [アカウント]@[ホスト名] cat id_rsa.pub >> .ssh/authorized_keys

ポートスキャンをコマンドで行う

macのutilitiesにポートスキャンを行うコマンドがあるみたい。

/Applications/Utilities/Network\ Utility.app/Contents/Resources/stroke

使い方はそのまんまですね。


$  /Applications/Utilities/Network\ Utility.app/Contents/Resources/stroke -h
stroke address startPort endPort

アドレス、開始Port番号、終了Port番号って所でしょうか。

iPhone KVCで値が変更したら通知を受ける

iPhone開発において、ある値が変更されたら通知を受ける仕組みがある。
例えばネットワークに接続中かどうかのフラグがあり、それが変更するたびに、インジケータをまわす、止めるを制御したいなどなど

  • NetWorkManagerクラス
NetWorkManager.h
@property (nonatomic, readonly, getter=isNetworkAccessing) BOOL networkAccessing;

NetWorkManager.m

- (BOOL)isNetworkAccessing {
return [_requests count] = 0;
}

- (void) requestXXX {
NSRequest* reqeust;
// 省略
[self willChangeValueForKey:@"netWorkAccesing"];
[_requests addObject:request];
[self didChangeValueForKey:@"netWorkAccesing"];
}

  • ObserverReciveSampleクラス
ObserverReciveSample.m
- (id)init{
// 省略

// キー値監視の登録
_netWorkManager = [[[NetWorkManager* alloc] init];
[netWorkManager addObserver:self forKeyPath:@"networkAccessing" options:0 context:NULL];
}

- (void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context {
// networkAccessingキーの場合
if ([keyPath isEqualToString:@"networkAccessing"]) {
// ネットワークアクティビティを更新する
[UIApplication sharedApplication].networkActivityIndicatorVisible = _netWorkManager.networkAccessing;
}
}

今回は明示的にwillChangeValueForKeyやdidChangeValueForKeyをしていますが、それを指定しない場合、以下のように監視する方法もあるみたいです。
※上記の場合だと、パラメータが存在しなくても動作します。



+ (BOOL)automaticallyNotifiesObserversForKey:(NSString*)key {
if ([key isEqualToString:@"networkAccessing"]) {
return YES;
}
return [super automaticallyNotifiesObserversForKey:key];
}





サーバが重たいと感じたら

WEB+DBPressの内容を自分なりに理解するためのメモ


1.ロードアベレージを確認
$ uptime
13:13 up 3 days, 2:18, 2 users, load averages: 3.35 3.18 2.27

(ロードアベレージが低い)
netstat -i

続きは今度

~/.ssh/configを設定してみる

~/.ssh/configにいろいろ設定すると、ssh hostnameが楽になる。

今の環境はssh dev_host_01の名前解決ができない。

$vim ~/.ssh/config
Host dev_host_01
HostName XXX.XXX.XXX.XXX

これで、IPを入力しなくてもなんとかなると。

そして他にもUserなど指定したりもできるみたい。
Host dev_host_01
HostName XXX.XXX.XXX.XXX
User user_name

Perlの正規表現で記号を削除

別に正規表現でなくても良いのだが、文字列から記号を削除したい場合に、どのようなアプローチがあるのか、検討してみた。

便利そうなUnicodeのブロックを使ってみる
¥p{Latin}で数字となるが、
ローマ数字なども含んでいるので使えない

sub nomalize {
my $str = shift;
$str =~ s/[^0-90-9a-zA-Za-zA-Z\p{Han}\p{Katakana}\p{Hiragana}]//g;
return $str;
}

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...