2010年11月10日水曜日

戻る/進む(unDo/reDo)

戻る/進む を行うショートカット

戻る
⌘ + option + ←

進む
⌘ + option + →

2010年11月9日火曜日

Dropbox に gitレポジトリを作成する

1.
Dropbox フォルダ内に gitレポジトリ用のフォルダを作成する。
cd ~/Dropbox
mkdir repository

2.
上記フォルダ内に、[プロジェクト名].git というフォルダを作成して init する。
cd repository
mkdir ProjectName.git
cd ProjectName.git
git --bare init

--bare
Create a bare repository. If GIT_DIR environment is not set, it is set to the current working directory. *1

裸のリポジトリ(bare repository)
裸のリポジトリとは、通常 .git の拡張子を持つ ディレクトリ で、 リビジョン管理下にあるチェックアウトしたファイルをローカルに持たないディレクトリです。 通常 .git サブディレクトリ に隠れている git の管理ファイル全てが repository.git ディレクトリに直接存在し、 他のファイルは存在せず、チェックアウトもされていません。 通常、公開リポジトリを出版する人は、裸のリポジトリを作成します。*2

3.
既存のソースを追加するためには、そのプロジェクト上で以下のコマンドを実行する。
cd ~/develop/OldProject
git init
git add . // 全てのファイルを追加する
git commit
git push ~/Dropbox/repository/ProjectName.git master
git remote add origin ~/Dropbox/repository/ProjectName.git

4.
ファイルを更新した後、以下のように更新したファイルの addとcommitを行い、さらに ローカルレポジトリ(既存プロジェクト)をリモートレポジトリ(Dropbox に作成したレポジトリ)へ push する。
git add ~/develop/OldProject/oldfile.h // 変更を全て含む場合、git add --a
git commit // コメントを追加する場合は、git commit -m "(コメント入力)"
git push ~/Dropbox/repository/ProjectName.git master //git push origin master でも可

参考:
*1
git-init(1) Manual Page

*2
Chapter11. GIT用語集 裸のレポジトリ

2010年11月6日土曜日

iPhone で Picasa クライアントを作成する準備

Google Date API
http://code.google.com/intl/ja/apis/gdata/index.html

Google Date API にアクセスして、Picasa データを取得する。
iPhone で利用するためには、gdata-objectivec-client を静的ライブラリとして組み込む。

参考資料
BuildingTheLibrary の、Linking to the iPhone Static Library の内容に(ほぼ)従う。
http://code.google.com/p/gdata-objectivec-client/wiki/BuildingTheLibrary

ライブラリの準備
下記場所からダウンロードできるが、ビルドエラーが出る。
ライブラリ名:gdata-objective-client-1.10.0.zip
http://code.google.com/p/gdata-objectivec-client/downloads/list

なので、svn から直接ダウンロードして、iPhone プロジェクトのディレクトリに入れる。
http://code.google.com/p/gdata-objectivec-client/source/checkout
svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdataClient
mv  gdataClient samplePicasa


gdata-objectivec-client をビルドするための準備
1.
gdataClient -> Source -> GData.xcodeproj を開く。
2.
ビルドターゲットを GDataTouchStaticLib に変更する。
 今回作成する静的ライブラリはコレなので、他はターゲットから外す。
3-1.
ターゲット -> GDataTouchStaticLib -> 情報を見る -> ビルドタブ 構成:release を表示する。
設定 -> ベースSDK を、iPhoneデバイス4.0 に変更する。
設定 -> アーキテクチャ を、Standard に変更する。

3-2.
その他のCフラグに以下を追加する。
-DGDATA_INCLUDE_PHOTOS_SERVICE=1
 picasa を利用する場合の設定はこのようになる。それ以外のgdataを利用する場合は、参考 *2 を参照する。



4.
Simulator, Device それぞれReleaseビルドを実行する。
5.
出力されたライブラリを lipo コマンドを使用して統合する。
cd samplePicasa/gdataClient/Source/build
lipo -create Release-iphoneos/libGDataTouchStaticLib.a Release-iphonesimulator/libGDataTouchStaticLib.a -output libGDataTouchStaticLib.a


iPhoneプロジェクトにライブラリを追加する
6.
libGDataTouchStaticLib.a を iPhoneプロジェクトに追加する。
 今回のiphoneプロジェクト名は samplePicasa とする。




7-1.
samplePicasa -> 情報を見る -> ビルド 全ての構成 を表示する。
他のリンカフラグに、-ObjC -lxml2 を追加する。




7-2.
ヘッダ検索パスに、次の2つのパスを追加する。
/usr/include/libxml2 → 再帰的にチェックする。
$(SRCROOT)/gdataClient/Source/build/Release-$(PLATFORM_NAME)/Headers



8.
適当なファイルに #import "GData.h" を追加してビルドが通れば完了。


参考
*1
iPhone開発ガイド 第3章アプリケーションの実行 ビルド環境の設定
*2
Removing Unneeded Code

2010年10月5日火曜日

TCP ACCEPT関数

accept - ソケットへの接続を受ける


struct sockadd_in の実装は以下の通り。
struct sockaddr_in {
    sa_family_t    sin_family; /* address family: AF_INET */
    in_port_t      sin_port;   /* port in network byte order */
    struct in_addr sin_addr;   /* internet address */
};

/* Internet address. */
struct in_addr {
    uint32_t       s_addr;     /* address in network byte order */
};

ここで、inet_ntoa()関数を使用して sockaddr_in 構造体から IP アドレスを表示させる実装は、以下のようになる。
printf("IP = %s\n", inet_ntoa(client.sin_addr));

ただし、次のヘッダーファイルをインクルードしなければ、表示されないので注意!
<arpa/inet.h>
数値としてIPアドレスを操作する機能の定義

参考:
ACCEPT

ソケット(BSD)

TCP

TCPとは、以下のことを言う。
Transmission Control Protocol(トランスミッション コントロール プロトコル、TCP)
セッションという形で1対1の通信を実現し、パケットシーケンスチェックによる欠損パケット再送などのエラー訂正機能などを持ち、データ転送などの信頼性の必要な場面でよく使用される。一方他のトランスポート層プロトコルに比べ、プロトコル上のオーバヘッドが大きい為、比較的低速となる。

サーバー側の実装は以下の手順で行う。
1.
socket(2) でソケットを作成する。
2.
bind(2) を使ってソケットにローカルアドレスを割り当てて、 他のソケットがこのソケットに connect(2) できるようにする。
3.
listen() を使って、接続要求を受け付ける意志と接続要求を入れるキュー長を指定する。
4.
accept(2) を使って接続を受け付ける。

参考:
Transmission Control Protocol(TCP)

LISTEN

2010年10月4日月曜日

ctrl-c で強制終了

無限ループ等で処理が終わらなくなった場合、次のやり方で処理を止める。
ctrl-c
これをすれば、処理は強制終了する。

memset関数で出たwarning

char型配列 buf[] を「0」で埋めるため、以下の処理を書いたら warning が発生した。
memset(buf, 0, sizeof(buf));
warning: incompatible implicit declaration of built-in function ‘memset’
対処方法
→ #include<string.h> しましょう!!!
man memset を見れば、SYNOPSIS(概要)に書いてある。