ポインタのサイズは?

アドレスのサイズは、プラットフォーム依存だよー。
Intel Core 2 Duo, MacOS 10.6.5の場合はこんな感じ。

#include <stdio.h>

int main(int argc, char *argv[])
{
	char *p;
	printf( "sizeof(p) = %lu\n", sizeof(p) );
	return 0;
}

実行結果
sizeof(p) = 8

いきなり、プラットフォーム依存デス!
なんて言われると、困っちゃうよね。
サイズを調べるというの言うのは、
格納できる住所の長さを調べているのと一緒だよ。
長ければ、長いほど、たくさんの住所を表現できるの。
4が帰ってきたら2の32乗だし、8が返ってきたら2の64乗かな。
前者が4Gで、後者が16G。
これは、扱える最大メモリサイズをあらわしてるよ。
最大4Gまでしかメモリが使えないよって言われたら、
32bitの環境なんだね、って理解してね。

ポインタってなんですか?

アドレスを格納する変数ですよ。

#include <stdio.h>

int main(int argc, char *argv[])
{
	char *p;
	p = (char *)100;
	printf( "p = %lu\n", (unsigned long)p );
	return 0;
}

実行結果
p = 100

じゃぁ、変数ってなんなの?
という訳で、C言語では値を格納するために入れ物が存在するよ。
その入れ物の場所を、メモリ上の住所、
つまりアドレスって呼ぶの。
*pは、変数名の先頭に*が付いているので、
住所専用のを入れ物だよ、って宣言していることになるよ。

C言語をはじめようと思うよ

まずは、これからはじめるよ。

#include <stdio.h>

int main(int argc, char *argv[])
{
	printf( "hello world\n" );
	return 0;
}

実行結果
hello world

Gitを使ってみました

Gitって知ってますか?知ってますよね!
そう、バージョン管理ソフトの一つです。
(私は、最近、具体的な内容を知ったばかりデス)

普段、会社では、SVNを使ってるので、
Gitとは縁遠いと思っていたのですが、
この度、GitHubに登録することになったので、
WindowsXPにインストールしてみました。
と言っても、XP on bootcamp(iMac)なので、
純粋なWindows環境ではありません。

まずは、msysGitをDLしてインストールしました。
あまり、難しいことは分かりませんが、
コマンドプロンプトじゃない方の設定でインストールしました。
次に、Git Bushを立ち上げます。
私の環境だと、デスクトップにアイコンが存在していたので、
ダブルクリックで起動させます。
あとは、コマンドプロンプトだと思って操作します。

さっそく使ってみましょう!
と言っても、何から始めたらいいのかな?

そんなあなたには、GitHubがオススメ。

まずは、ユーザー登録して新規プロジェクトを追加します。
ここまでは、GitHubのサイトで出来ます。
すると、幾つかのコマンドを入力するように指示されます。
そのコマンドを一つずつ入力すれば良いのですが、
どこに入力するの?
もちろん、Git Bashに入力するのですが、
ここでちょっとまって!

というのも、GitHubのサイト上ですでにプロジェクトは作成済みなのです。
やるべきことは、READMEを追加するところから。
そして、もう一つ!
まだ、ローカルのmsysGitは設定していませんね!

なので、まずはいきなりGUIではなく、
Git Bashを使って追加したプロジェクトをDLしてみましょう。

登録時のユーザ名:user
作ったプロジェクト名:foo
この場合は以下の行が表示されていると思います。
git clone git@github.com:user/foo.git

SSHを使わない読み取り専用パス
git clone git://github.com/user/foo.git

この行以降を、Git Bashに入力することになります。
ですが、ここはぐっと堪えて、順番に行きましょう。
最初は、プロジェクトを配置するフォルダを作成します。
そこに、Git Bashで移動します。
mkdirコマンドや、cdコマンドを使います。
次に、git cloneコマンドを使います。
git clone git@github.com:user/foo.git
これで、GitHubのサイトに表示されていたうちの1つを入力しました。
ここで失敗する場合は、読み取り専用パスを使います。
git clone git://github.com/user/foo.git

次が山場です。
Git guiを使います。
私の環境だと、スタートメニューに追加されたgitに、
git guiが追加されていました。
もしくは、git cloneを実行したら、プロジェクト名と同じフォルダに、
.gitフォルダが出来ているので、それを右クリックしたときのメニューにも、
git guiが表示されるかもしれません。
前者の場合は、「既存のプロジェクトを開く」を選択して、
.gitフォルダが格納されているフォルダを選択しましょう。
後者の場合は、すぐにウィンドウが開くはずです。

その次にやることは、gitの設定。
実は、先ほどのサイトに表示されていた最初の2行くらいは、
この設定を行うコマンドだったりします。
これをGUIを使って行います。

メインメニューの編集 – オプション…をクリック
(私は右側の大域を編集しました)
まずは、ユーザ名と電子メールアドレス。
次に、ファイル内のデフォールトエンコーディングをUnicode(UTF-8)に。
もちろん、これからコミットするソースも同じ文字コードでなければなりませんが、
これで、ブラウザで見ても日本語が正しく表示されるでしょう。

さらにもう一つやるべきことがあります。
それは、認証をSSHで行っているので、公開鍵を作る必要があります。
メインメニューの「ヘルプ – SSHキーを表示」をクリック
ないので作りましょう。
何文字かのキーワードを入力して、鍵を生成します。(2回同じ入力をしましょう)
このキーワードは、後ほど入力を求められるのでお忘れなく。
めでたく生成出来た公開鍵は、クリップボードにコピーします。
ちょうどいい所(左下)に、そういうボタンがありますので使います。
さて、これで公開鍵のウィンドウは閉じます。

次に、どこにペーストしたら良いか?
それは、GitHubのサイトの右上に、アカウントの設定があるはずなので、
まずは、そこをクリックします。
次に、SSH公開鍵が左に表示されているので、クリックします。
すると、公開鍵を追加できるので、適当な名前を付けて、鍵をペーストしましょう。
無事追加できましたか?
これで、SSHによる認証の準備は完了です。

先ほど、読み取り専用パスでgit cloneを行った場合は、
一度、フォルダを削除して、通常のgit cloneで再取得を行ってください。
git clone git@github.com:user/foo.git
ここで必要になるのが、先ほどのキーワードです。
ここまでは、SSHの公開鍵を作るための作業だったので、
SSHによる認証が成功してしまえば、こういった手間は不要になります。

先ほどの続きをしましょう。
READMEというファイルを追加するコマンドがあったはずです。
touch REAMEという行があったなら、
その行から続きをGit Bashに入力します。
そして、git push origin masterを入力した時に求められるのが、
先ほど、公開鍵を使ったときに入力したキーワードになります。

ここから先は、あなたのリポジトリです。
追加、変更、削除といった基本的なコマンドを試して、
git操作の練習をしてみましょう。

では、よいGitライフを!

2011/01/02 一部修正

引っ越したんだけどねー

引っ越す前のブログを見たら、
まだ、毎日のように見に来てるみたいで、
それで、消そうか悩んでます。

そんなこんなで、
カテゴリー分けもしました。
結構地味な作業で、1個1個、手で編集したり。

そんなこんなで、メインブログはこちらです。
おやすみなさい。

performSelectorInBackgroundを使ってみた

うーん、あまり良い例じゃないかもしれませんが、
画像処理で時間が掛かる場合は、
この関数で処理をして、インジケーターを表示します。

こんな感じ。

{	// ボタンが押されたときに呼ばれる関数の中で

	// インジケータを表示  
	[activityIndicator startAnimating];

	// 別のスレッドで処理
	[self performSelectorInBackground:@selector(foo:) withObject:bar];
}

- (void)foo:(id)arg
{
	// 時間の掛かる処理

	// インジケータを止めて非表示
	[activityIndicator stopAnimating];
}

で、これだと、ボタン連打されたら困るねってなります。
先ほど、連打したらアプリが落ちました。
じゃぁ、どうしよー。

ボタンを押して処理が始まるなら、
処理を行っている間はボタンを無効にしましょう。


// 別スレッドを開始する前に
myButton.enabled = FALSE;

// 別スレッドの最後に
myButton.enabled = TRUE;

こんな感じで回避します。
排他とか、面倒なことにならないに越したことないですね。

では、おやすみなさーい!

MacBookのバッテリー

買ってきました。
こないだ、HDDも交換したので、
これでオーバーホール完了です。

大抵は、HDDが急に壊れるか、
バッテリーが徐々にへたって、
常にコンセントから電源を供給しなければならないのですが、
今回の買い増しで、その問題も解決しました。
とは言っても、今使ってるのは、まだへたってないので、
あと数年はMacBookを使い続けれそうです。

ちなみにこのバッテリーは、15,800円でした。

みなさんもよいMacBookライフを!

initWithCGImageの引数

最近は、サンプルコードをいじりながら、
画像データを編集して保存するコードを書いてました。

で、結局、未だにモノクロに変換するだけのコードを書いて、
それのコードとにらめっこしてるのですが、
カメラの持ち方で写真が回転するんだけど、
それって取ったデータの向きはどれも同じで、
表示の時に回転していることに気付いたんですね。

それで、じゃぁ、どーやって保存したら良いんだろう?
ってなった訳です。

	UIImage *effectedImage = [UIImage alloc];
	[effectedImage initWithCGImage:effectedCgImage
							 scale:1.0
					   orientation:image.imageOrientation];
	[effectedImage autorelease];

こんな感じで、オリジナル画像と同じ向きを指定してあげれば、
画像の向き情報が反映されました。

めでたし、めでたし。

警察にいろいろ届けたよ

えっと、今日、お出かけして、
まず、袋に入ったSDカードを見つけたんです。
なんか、あまりにも大切そうに袋に入ってたので、
そのまま警察に届けました。
そしたら、袋(ゴミ)を届けに来たのかと勘違いされて、
ちょっと苦笑されちゃいましたが、
SDカードだと分かっても貰えたので、
持ち主が見つかっても、持ち主がお礼したくても連絡いらないよ、
っていう署名を書いて、警察署を出ました。

それから、お買い物をして、お店からお店に移動してたら、
ケータイが落ちてたので、爆発しないかドキドキしながら
目の前の警察署に届けました。
そこでも、連絡いらないよの署名をしました。

こんな感じで落とし物を届けると、
基本的には警察官の方が書き物をしてくれるので、
そんなに手間じゃないです、5分掛からないです。
拾った場所、時間を聞かれて、あとは署名するだけ。

みなさんも気が向いたら、
落とし物を届けてみてはいかがでしょうか。

InterfaceBuilderを使わない(1)

最近、オライリーの「iPhone SDK」って本を読んでいます。

ずーっと前に買って、放置してたのですが、
表題のように、InterfaceBuilderを使わない場合は、
こんな感じでプロジェクトを作るようです。

プロジェクトを作成する

  1. ファイル – 新規プロジェクト
  2. View-based Applicationを選択
  3. プロジェクト名を入力

グループとファイルの編集

  1. Resourcesフォルダにある”*.xib”を削除
  2. Other Sourcesフォルダの”main.m”を編集
  3. Resoucesフォルダの*.plistの”Main nib file base name”を削除

ちなみに、プロジェクト名に「Untitled」って入れた場合は、
“main.m”はこんな感じ。

int main(int argc, char *argv[]) {
    
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    //int retVal = UIApplicationMain(argc, argv, nil, nil);
    int retVal = UIApplicationMain(
        argc, argv, nil, @"UntitledAppDelegate");
    [pool release];
    return retVal;
}

didFinishLaunchingWithOptionsっていう関数が呼ばれるのを、
この関数の中でブレイクを貼って確認できれば、
次のステップに進める予定です。

めでたし、めでたし。

追記(11/26)
“UntitledAppDelegate.m/UntitledAppDelegate.h”が
プロジェクトに追加されているはずなので、
この辺からコピー&ペーストすると良いと思います。