カラー表

プロンプトの魔術の中で見つけたカラー図表。
f:id:tya_ko_suke:20130511205001p:plain
面白そうなので作ってみました。
f:id:tya_ko_suke:20130511205240p:plain
シェルでechoの文字に色をつける方法
上を参考にして色つき文字をechoで表示するだけの簡単なお仕事です。

echo -e "\033[0;31mテキスト"
#!/bin/sh
echo -e "--------00-----40-----41-----42-----43-----44-----45-----46-----47"
echo -e "30 \e[00;30mNormal \e[30;40mNormal \e[30;41mNormal \e[30;42mNormal \e[30;43mNormal \e[30;44mNormal \e[30;45mNormal \e[30;46mNormal \e[30;47mNormal \e[00m"
echo -e "   \e[01;30mBold   \e[30;40mBold   \e[30;41mBold   \e[30;42mBold   \e[30;43mBold   \e[30;44mBold   \e[30;45mBold   \e[30;46mBold   \e[30;47mBold   \e[00m"
echo -e "   \e[02;30mDark   \e[30;40mDark   \e[30;41mDark   \e[30;42mDark   \e[30;43mDark   \e[30;44mDark   \e[30;45mDark   \e[30;46mDark   \e[30;47mDark   \e[00m"
echo -e "   \e[04;30mUnder  \e[30;40mUnder  \e[30;41mUnder  \e[30;42mUnder  \e[30;43mUnder  \e[30;44mUnder  \e[30;45mUnder  \e[30;46mUnder  \e[30;47mUnder  \e[00m"
#echo -e "   \e[07;30mReverse\e[30;40mReverse\e[30;41mReverse\e[30;42mReverse\e[30;43mReverse\e[30;44mReverse\e[30;45mReverse\e[30;46mReverse\e[30;47mReverse\e[00m"
echo -e "31 \e[00;31mNormal \e[31;40mNormal \e[31;41mNormal \e[31;42mNormal \e[31;43mNormal \e[31;44mNormal \e[31;45mNormal \e[31;46mNormal \e[31;47mNormal \e[00m"
echo -e "   \e[01;31mBold   \e[31;40mBold   \e[31;41mBold   \e[31;42mBold   \e[31;43mBold   \e[31;44mBold   \e[31;45mBold   \e[31;46mBold   \e[31;47mBold   \e[00m"
echo -e "   \e[02;31mDark   \e[31;40mDark   \e[31;41mDark   \e[31;42mDark   \e[31;43mDark   \e[31;44mDark   \e[31;45mDark   \e[31;46mDark   \e[31;47mDark   \e[00m"
echo -e "   \e[04;31mUnder  \e[31;40mUnder  \e[31;41mUnder  \e[31;42mUnder  \e[31;43mUnder  \e[31;44mUnder  \e[31;45mUnder  \e[31;46mUnder  \e[31;47mUnder  \e[00m"
#echo -e "   \e[07;31mReverse\e[31;40mReverse\e[31;41mReverse\e[31;42mReverse\e[31;43mReverse\e[31;44mReverse\e[31;45mReverse\e[31;46mReverse\e[31;47mReverse\e[00m"
echo -e "32 \e[00;32mNormal \e[32;40mNormal \e[32;41mNormal \e[32;42mNormal \e[32;43mNormal \e[32;44mNormal \e[32;45mNormal \e[32;46mNormal \e[32;47mNormal \e[00m"
echo -e "   \e[01;32mBold   \e[32;40mBold   \e[32;41mBold   \e[32;42mBold   \e[32;43mBold   \e[32;44mBold   \e[32;45mBold   \e[32;46mBold   \e[32;47mBold   \e[00m"
echo -e "   \e[02;32mDark   \e[32;40mDark   \e[32;41mDark   \e[32;42mDark   \e[32;43mDark   \e[32;44mDark   \e[32;45mDark   \e[32;46mDark   \e[32;47mDark   \e[00m"
echo -e "   \e[04;32mUnder  \e[32;40mUnder  \e[32;41mUnder  \e[32;42mUnder  \e[32;43mUnder  \e[32;44mUnder  \e[32;45mUnder  \e[32;46mUnder  \e[32;47mUnder  \e[00m"
#echo -e "   \e[07;32mReverse\e[32;40mReverse\e[32;41mReverse\e[32;42mReverse\e[32;43mReverse\e[32;44mReverse\e[32;45mReverse\e[32;46mReverse\e[32;47mReverse\e[00m"
echo -e "33 \e[00;33mNormal \e[33;40mNormal \e[33;41mNormal \e[33;42mNormal \e[33;43mNormal \e[33;44mNormal \e[33;45mNormal \e[33;46mNormal \e[33;47mNormal \e[00m"
echo -e "   \e[01;33mBold   \e[33;40mBold   \e[33;41mBold   \e[33;42mBold   \e[33;43mBold   \e[33;44mBold   \e[33;45mBold   \e[33;46mBold   \e[33;47mBold   \e[00m"
echo -e "   \e[02;33mDark   \e[33;40mDark   \e[33;41mDark   \e[33;42mDark   \e[33;43mDark   \e[33;44mDark   \e[33;45mDark   \e[33;46mDark   \e[33;47mDark   \e[00m"
echo -e "   \e[04;33mUnder  \e[33;40mUnder  \e[33;41mUnder  \e[33;42mUnder  \e[33;43mUnder  \e[33;44mUnder  \e[33;45mUnder  \e[33;46mUnder  \e[33;47mUnder  \e[00m"
#echo -e "   \e[07;33mReverse\e[33;40mReverse\e[33;41mReverse\e[33;42mReverse\e[33;43mReverse\e[33;44mReverse\e[33;45mReverse\e[33;46mReverse\e[33;47mReverse\e[00m"
echo -e "34 \e[00;34mNormal \e[34;40mNormal \e[34;41mNormal \e[34;42mNormal \e[34;43mNormal \e[34;44mNormal \e[34;45mNormal \e[34;46mNormal \e[34;47mNormal \e[00m"
echo -e "   \e[01;34mBold   \e[34;40mBold   \e[34;41mBold   \e[34;42mBold   \e[34;43mBold   \e[34;44mBold   \e[34;45mBold   \e[34;46mBold   \e[34;47mBold   \e[00m"
echo -e "   \e[02;34mDark   \e[34;40mDark   \e[34;41mDark   \e[34;42mDark   \e[34;43mDark   \e[34;44mDark   \e[34;45mDark   \e[34;46mDark   \e[34;47mDark   \e[00m"
echo -e "   \e[04;34mUnder  \e[34;40mUnder  \e[34;41mUnder  \e[34;42mUnder  \e[34;43mUnder  \e[34;44mUnder  \e[34;45mUnder  \e[34;46mUnder  \e[34;47mUnder  \e[00m"
#echo -e "   \e[07;34mReverse\e[34;40mReverse\e[34;41mReverse\e[34;42mReverse\e[34;43mReverse\e[34;44mReverse\e[34;45mReverse\e[34;46mReverse\e[34;47mReverse\e[00m"
echo -e "35 \e[00;35mNormal \e[35;40mNormal \e[35;41mNormal \e[35;42mNormal \e[35;43mNormal \e[35;44mNormal \e[35;45mNormal \e[35;46mNormal \e[35;47mNormal \e[00m"
echo -e "   \e[01;35mBold   \e[35;40mBold   \e[35;41mBold   \e[35;42mBold   \e[35;43mBold   \e[35;44mBold   \e[35;45mBold   \e[35;46mBold   \e[35;47mBold   \e[00m"
echo -e "   \e[02;35mDark   \e[35;40mDark   \e[35;41mDark   \e[35;42mDark   \e[35;43mDark   \e[35;44mDark   \e[35;45mDark   \e[35;46mDark   \e[35;47mDark   \e[00m"
echo -e "   \e[04;35mUnder  \e[35;40mUnder  \e[35;41mUnder  \e[35;42mUnder  \e[35;43mUnder  \e[35;44mUnder  \e[35;45mUnder  \e[35;46mUnder  \e[35;47mUnder  \e[00m"
#echo -e "   \e[07;35mReverse\e[35;40mReverse\e[35;41mReverse\e[35;42mReverse\e[35;43mReverse\e[35;44mReverse\e[35;45mReverse\e[35;46mReverse\e[35;47mReverse\e[00m"
echo -e "36 \e[00;36mNormal \e[36;40mNormal \e[36;41mNormal \e[36;42mNormal \e[36;43mNormal \e[36;44mNormal \e[36;45mNormal \e[36;46mNormal \e[36;47mNormal \e[00m"
echo -e "   \e[01;36mBold   \e[36;40mBold   \e[36;41mBold   \e[36;42mBold   \e[36;43mBold   \e[36;44mBold   \e[36;45mBold   \e[36;46mBold   \e[36;47mBold   \e[00m"
echo -e "   \e[02;36mDark   \e[36;40mDark   \e[36;41mDark   \e[36;42mDark   \e[36;43mDark   \e[36;44mDark   \e[36;45mDark   \e[36;46mDark   \e[36;47mDark   \e[00m"
echo -e "   \e[04;36mUnder  \e[36;40mUnder  \e[36;41mUnder  \e[36;42mUnder  \e[36;43mUnder  \e[36;44mUnder  \e[36;45mUnder  \e[36;46mUnder  \e[36;47mUnder  \e[00m"
#echo -e "   \e[07;36mReverse\e[36;40mReverse\e[36;41mReverse\e[36;42mReverse\e[36;43mReverse\e[36;44mReverse\e[36;45mReverse\e[36;46mReverse\e[36;47mReverse\e[00m"
echo -e "37 \e[00;37mNormal \e[37;40mNormal \e[37;41mNormal \e[37;42mNormal \e[37;43mNormal \e[37;44mNormal \e[37;45mNormal \e[37;46mNormal \e[37;47mNormal \e[00m"
echo -e "   \e[01;37mBold   \e[37;40mBold   \e[37;41mBold   \e[37;42mBold   \e[37;43mBold   \e[37;44mBold   \e[37;45mBold   \e[37;46mBold   \e[37;47mBold   \e[00m"
echo -e "   \e[02;37mDark   \e[37;40mDark   \e[37;41mDark   \e[37;42mDark   \e[37;43mDark   \e[37;44mDark   \e[37;45mDark   \e[37;46mDark   \e[37;47mDark   \e[00m"
echo -e "   \e[04;37mUnder  \e[37;40mUnder  \e[37;41mUnder  \e[37;42mUnder  \e[37;43mUnder  \e[37;44mUnder  \e[37;45mUnder  \e[37;46mUnder  \e[37;47mUnder  \e[00m"
#echo -e "   \e[07;37mReverse\e[37;40mReverse\e[37;41mReverse\e[37;42mReverse\e[37;43mReverse\e[37;44mReverse\e[37;45mReverse\e[37;46mReverse\e[37;47mReverse\e[00m"

vim置換

置換と入力すると痴漢になってドキッとしませんか?w

たまに忘れて調べてしまうvimの置換。
今回使ったものをメモ。

vim -文字列置換
vimの範囲置換

基本形

:s/置換対象文字列/置換文字列/g

慎重なあなたに

:s/置換対象文字列/置換文字列/gc

さらにチキンなあなたに(置換しません)

:s/置換対象文字列/置換文字列/n

豪快なあなたに

:%s/置換対象文字列/置換文字列/g

まとめ

% -> ファイル全体検索
c -> 置換確認
n -> 置換件数確認

補足:範囲指定

:'<,'>s/置換対象文字列/置換文字列/g(ビジュアルモードからコマンドモードに入ると自動で追加)
:開始行,終了行s/置換対象文字列/置換文字列/g

linux プロンプトメモ

プロンプトが異常に長く見にくいので修正。

対象環境:

Mac bash
linux baxh
echo $SHELL で確認。
※cat /etc/shells で使用可能シェルを表示

基本情報
\a     ASCII のベル文字 (07)
\d     "曜日 月 日"のフォーマットによる日付け
       (例 "Tue May 26")
\e     ASCII のエスケープ文字 (033)
\h     最初の"."のところまでのホスト名
\H     ホスト名
\n     改行
\r     復帰
\s     シェル名、$0 のベース名
       (最後のスラッシュの後ろの部分)
\t     24時間制の HH:MM:SS のフォーマットによる時間
\T     12時間制の HH:MM:SS のフォーマットによる時間
\@     am/pm をつけた12時間制のフォーマットによる時間
\u     現ユーザーのユーザー名
\v     bash のバージョン(例 2.00)
\V     bash のリリース番号、バージョンとパッチレベル
       (例 2.00.0)
\w     現在のディレクトリ
\W     現在のディレクトリのベース名
\!     現在のコマンドのヒストリー番号
\#     現在のコマンドのコマンド番号
\$     UIDが0なら#、そうでなければ$
\nnn   8進数nnnに対応する文字
\\     バックスラッシュ
\[     表示されない文字列の開始。端末制御シーケンスを
       プロンプトに埋め込む。
\]     表示されない文字列の終り。
Mac
\h:\W \u\$
tya_ko_suke-no-Macbook:etc user$
linux
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[[01;34m\]\w\[\033[00m\]\$
root@bt:/usr/local/src#

Mac は凄く単純でホスト名に現在のカレントディレクトリ(ディレクトリベース名)にユーザ名。
問題はlinuxでディレクトリを掘っていったり名前の長いディレクトリがあるとき。
/usr/local/srcのようなディレクトリ名が短い場合は大丈夫だとして、2011_0719_RT3070_RT3770_RT...のような長いディレクトリ名があるとディレクトリ名だけで1行埋まってしまって見にくいことこの上ない。
Macの設定に変えてしまうのも手だけれども折角なので解析してみる。

\[\e]0;\u@\h: \w\a\]

最初は端末制御シーケンスをプロンプトに埋め込んでるらしい。
これはX WindowのTerminalのタイトルバーを動的に変更する為の設定らしい
プロンプトの魔術
"\e]2;タイトルバーに表示したい項目\a"でできる。

${debian_chroot:+($debian_chroot)}\

謎の識別子「debian_chroot」調べるとどうやらUbuntuOS特有の機能らしい。
これを記載することでchroot環境になっていることを明示的にプロンプトで示してくれるらしい。
そのうちchrootも試してみよう。
UbuntuなノートPC上にDebian sidのchroot環境を作る
javaサンドボックスみたいな感じがしたけど違うかな?

\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[[01;34m\]\w\[\033[00m\]\$

一気に最後まで。
と言うのもこれ長いように見えるけど色をつけているだけ。
でも気になったのが何故ここにきて\eを\033に置き換えたのか?
この二つは同じ意味なのにわざわざ長い方にしたのは何故?
カラーの設定だと分かりやすくするためなのかな??
”\[\033[カラー設定値m”で設定できる。

\[\033[01;31m\]\u@\h

プロンプトの魔術のカラー設定を参照するとユーザ名とホスト名に対して明るい赤を設定していることがわかる。
ちなみにカラー設定は文字色(フォアグラウンドカラー)、背景色(バックグラウンドカラー)で構成されていて背景色が40(黒)の場合は設定値を省略するのがお作法らしい。

\[\033[00m\]:

lsで表示されるファイルのカラー表示についてを参考にするとコロンを標準色に戻していることが分かる。

\[\033[[01;34m\]\w

ここでは現在のディレクトリパス名を青に設定している。
ちなみに、何回か登場している01は太字設定を意味する。
lsで表示されるファイルのカラー表示について

\[\033[00m\]\$

最後のダラーを標準色に戻している。

と言うわけで無事解析終了。
linuxのディレクトリ名が長すぎるのが問題だったのでディレクトリ表示をなくすように修正。
.bashrcを直接編集source .bashrcで適用で完了。

じゃんけんアプリ

ドキュメント読むのも飽きてしまったしまったので下記参考にしてじゃんけんアプリを作成。

iPhoneアプリ開発入門
→StoryBoardを使って開発

iPhoneアプリを作ってみよう(Xcode4編)第1回:じゃんけんゲーム
スクラッチで開発

StoryBoardの完成図
f:id:tya_ko_suke:20130506195153p:plain

ソースコード

#import "testViewController.h"

@interface testViewController ()

@end

@implementation testViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    kekka.hidden = YES;
    aite_no_te.hidden = YES;
    restart.hidden = YES;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)junkeDidPush:(UIButton *)sender {
    kekka.hidden = NO;
    aite_no_te.hidden = NO;
    int aite_no_te_num = arc4random()%3;
    if(aite_no_te_num == 0){
        aite_no_te.text = @"石";
    }
    else if(aite_no_te_num == 1) {
        aite_no_te.text = @"はさみ";
    }
    else if(aite_no_te_num == 2) {
        aite_no_te.text = @"紙";
    }
    
    int jibun_no_te_num = sender.tag;
    if(jibun_no_te_num == 0) {
        tyoki.hidden = YES;
        paa.hidden = YES;
    }
    else if(jibun_no_te_num == 1) {
        guu.hidden = YES;
        paa.hidden = YES;
    }
    else if(jibun_no_te_num == 2) {
        guu.hidden = YES;
        tyoki.hidden = YES;
    }
    if(aite_no_te_num == jibun_no_te_num) {
        kekka.text = @"あいこ";
    }
    else if(aite_no_te_num == 0 && jibun_no_te_num == 2) {
        kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 1 && jibun_no_te_num == 0) {
        kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 2 && jibun_no_te_num == 1) {
        kekka.text = @"勝ち";
    }
    else {
        kekka.text = @"負け";
    }
    restart.hidden = NO;
}

- (IBAction)restartDidPush:(UIButton *)sender {
    kekka.hidden = YES;
    aite_no_te.hidden = YES;
    restart.hidden = YES;
    guu.hidden = NO;
    tyoki.hidden = NO;
    paa.hidden = NO;
}

@end

Xcodeを起動したところからスタート。

1 プロジェクトの作成

[File]->[New]->[Project...]で新規にプロジェクトを作成

Single View Applicationを選択、[Next]で次へ。
f:id:tya_ko_suke:20130506202251p:plain

Product NameとClass Prefixにjankenと入力。
最初からチェックが入っていると思うけれども、Use StoryBoardsにチェックを入れる。
最初に作ったときはClass Prefixを変えておらず、前に使った残りなのかtestが入っていて全部test〜になってしまった。
Use Automatic Reference Countingは「iOSの技術の概要」によると

Objective-Cのオブジェクトのライフサイクル管理処理を容易にする、コンパイラレベルの機能です。
オブジェクトをいつ獲得、解放するか、開発者が意識して管理する代わりに、ARCがオブジェクトの
ライフサイクル管理に必要な事項を評価し、コンパイル時に、自動的に適切なメソッド呼び出しを挿入します。

というものらしいのでこの文が分からない人はチェックを入れときましょう。
[Next]で次へ。
f:id:tya_ko_suke:20130506202759p:plain

[Create]で次へ。
プロジェクトが生成される。

2 起動画面を作成

2-1 背景の設定

StoryBoard(MainStoryBoard.storyboard)を開く。
f:id:tya_ko_suke:20130506204232p:plain

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からImage Viewを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のImage ViewのImageからDefault.pngを選択。
f:id:tya_ko_suke:20130506204956p:plain

2-2 オブジェクトの配置

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からLabelを選択しJanken View Controllerへドラッグ。
Labelのサイズ変更。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のLabelのText,Color,Fontの値を変更。
f:id:tya_ko_suke:20130506210552p:plain
右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からRound Rect Buttonを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のButtonの値を変更。
f:id:tya_ko_suke:20130506210900p:plain

3 ゲーム画面の作成

3-1 背景の設定

2-1 背景の設定を参照

3-2 起動画面とゲーム画面の接続

起動画面の開始ボタンをクリック。
Controlを押しながらゲーム画面へドラッグ。
ポップアップからModalを選択。
f:id:tya_ko_suke:20130506212849p:plain

3-3 オブジェクトの配置(タイトル、じゃんけんボタン)

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からLabelを選択しJanken View Controllerへドラッグ。
Labelのサイズ変更。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のLabelのText,Color,Fontの値を変更。
右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からRound Rect Buttonを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のButtonの値を変更。
※グー、チョキ、パーの3つ作成
f:id:tya_ko_suke:20130506213332p:plain

3-4 オブジェクトの配置(相手の手、結果)

下記の図のように配置
f:id:tya_ko_suke:20130506215226p:plain

4 じゃんけんプログラムの作成

4-1 ViewControllerとプログラムの紐付け

右上のf:id:tya_ko_suke:20130506220137p:plainをクリック。
CustomClassのClassにjankenViewControllerをセット。
f:id:tya_ko_suke:20130506204848p:plainをクリック。
隣にソースコード(ヘッダファイル)が表示される。

#import <UIKit/UIKit.h>

@interface jankenViewController : UIViewController
@end

@interfaceと@endの間に記載。
【StoryBoradを使う場合】
追加したいオブジェクトを選択し@interfaceと@endの間にContorolを押しながらドラッグ。
ポップアップのNameを変更
【スクラッチ】
下記のソースコード記載後に手動でOutletと紐付け。
jankenViewControllerをクリック後f:id:tya_ko_suke:20130506223010p:plainをクリック。
Outletsからドラッグで紐付けたいオブジェクトと繋げる。

#import <UIKit/UIKit.h>

@interface jankenViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *guu;
@property (weak, nonatomic) IBOutlet UIButton *tyoki;
@property (weak, nonatomic) IBOutlet UIButton *paa;
@property (weak, nonatomic) IBOutlet UILabel *aite_no_te;
@property (weak, nonatomic) IBOutlet UILabel *kekka;

@end

f:id:tya_ko_suke:20130506222929p:plainf:id:tya_ko_suke:20130506223010p:plain

4-2 相手の手表示プログラム作成

ボタンオブジェクトをControlキーを押しながら@interfaceと@endの間にドラッグ。
ポップアップのConnection(Action),Name(jankenDidPush),Type(UIButton)を変更。
それぞれのボタンにjankeDidPushを紐付け。
f:id:tya_ko_suke:20130506224148p:plain
f:id:tya_ko_suke:20130506223010p:plainをクリック。
Received Actionsからボタンオブジェクトにドラッグして接続。
ポップアップはTouch Up Insideを選択。
f:id:tya_ko_suke:20130508222825p:plain

jankenViewController.mを選択。
jankenDidPushメソッドを下記のように編集。

- (IBAction)jankenDidPush:(UIButton *)sender {
    int aite_no_te_num = arc4random() % 3;
    if (aite_no_te_num == 0) {
        _aite_no_te.text = @"グー";
    }
    else if(aite_no_te_num == 1) {
        _aite_no_te.text = @"チョキ";
    }
    else if(aite_no_te_num == 2) {
        _aite_no_te.text = @"パー";
    }
}

arc4random()で生成したランダムな数値の3の剰余を元に相手の手を決定。
後はif文でUILabelの値を書き換える。

f:id:tya_ko_suke:20130508231803p:plain

4-3 自分の手の判断とじゃんけんプログラム

どのじゃんけんボタンを押したかプログラムで判断できるようにボタンに紐付いた値(Tag)を設定する。
StoryBoradのグーボタンをクリック。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のViewのTagに0を設定。
チョキは1、パーは2を設定。
上記でどのボタンを押したかどうか分かるようになったのでじゃんけんプログラムを追加する。
jankenViewController.mを編集。
下記のようにソースコードを編集。

- (IBAction)jankenDidPush:(UIButton *)sender {
    int aite_no_te_num = arc4random() % 3;
    if (aite_no_te_num == 0) {
        _aite_no_te.text = @"グー";
    }
    else if(aite_no_te_num == 1) {
        _aite_no_te.text = @"チョキ";
    }
    else if(aite_no_te_num == 2) {
        _aite_no_te.text = @"パー";
    }
    int jibun_no_te_num = sender.tag;
    if(aite_no_te_num == jibun_no_te_num) {
        _kekka.text = @"あいこ";
    }
    else if(aite_no_te_num ==0 && jibun_no_te_num == 2) {
        _kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 1 && jibun_no_te_num == 0) {
        _kekka.text = @"勝ち";
    }
    else if(aite_no_te_num ==2 && jibun_no_te_num == 1) {
        _kekka.text = @"勝ち";
    }
    else {
        _kekka.text = @"負け";
    }
}
<
Tagは
これで晴れてじゃんけんが出来るようになる。
[f:id:tya_ko_suke:20130508234229p:plain]

iOSアプリ勉強メモ

iOS技術の概要

1 iOSアプリのレイヤー構造

Cocoa Touch(iOSで使用される主要なフレームワークや機能を内包)

Media(グラフィックス、オーディオ、ビデオのフレームワークを内包)

Core Service(アプリケーションで使用される基本サービスを内包)

Core OS(土台となる下位レベルの機能を内包)

 

2 Cocoa Touchレイヤーの機能

自動レイアウト

→ユーザインタフェイス要素の配置に関する制約を定義

参考:Cocoa Auto Layoutガイド

 

ストーリーボード

→画面遷移をグラフィカルに構築できる機能

参考:Xcode User GuideのDesign the User Interface of Your iOS App with Storyboards

 

ドキュメントのサポート

→ドキュメントをiCloudに格納するアプリを簡単に実装可能

参考:iOSドキュメントベースアプリケーションプログラミングガイド

 

マルチタスク

参考:iOSアプリケーションプログラミングガイドのアプリケーションの状態とマルチタスキング

 

プリント

→印刷ジョブの管理など

参考:iOSにおける描画と印刷のガイド

 

UI状態の保存

→UIを前回使ったときの状態に復元する

参考:iOSアプリケーションプログラミングガイドの状態の保存と復元

 

Apple Push Notificationサービス

→通信を伴う通知機能機能

参考:LocalおよびPush Notificationプログラミングガイド

 

Local Notification

→通信を伴わない通知機能

参考:LocalおよびPush Notificationプログラミングガイド

 

Gesture Recognizer

→タップ、スワイプ等のジェスチャーを検知

参考:iOSイベント処理ガイド

 

ピアツーピアサービス

Bluetoothを利用したピアツーピア通信機能

参考:Game Centerプログラミングガイド

 

 

無線LANセキュリティの教科書2013勉強メモ

BackTrack5R3を利用して無線LANクラックのお勉強。

WEPも脆弱性は実践してみて分かった。

通信していなければある程度解読はされないけれど、少しでも通信をしていればものの数分で解読可能w

WPAがお漏らし規格というのも初めて知った。(規格が確定する前にメーカが対応機器を発売。WPA2が正式対応規格)

そもそもEAPの傍流(ぼうりゅう→読めなかった)ということも知った。

無線LANするために認証サーバとか個人には無理だよね。(IEEE802.11x)

そして1番驚いたのはESSIDステルスを使うこと自体が脆弱性になるということ。

隠しているから安全では無く、むしろ自分から発信するから危険。

 

通常はAPから「俺のESSIDはAだよ」という通信を受信してクライアントから接続要求する。

ESSIDステルスを使うとクライアントから「ESSIDがAのひと居ますか−?」という通信を発信する。(自動接続にしていた場合)

家で使うPCならそれでも良いけれども、そのPCもしくはスマホを外で使うとESSIDがすっぱ抜かれる。

それだけならば隠していないときと同じだけれどもリスクが増えることには違いない。

そもそもステルスしてようが、してなかろうが通信していればクライアントの情報からクラックも可能という事実もある。(WEPなら)

 

と、WEPの恐ろしさを身をもって知ることが出来る優良ムック本。

無線LANセキュリティの教科書2013