Category Archives: プログラミング言語

Titanium Mobileメモ:インストールする!

0
Filed under Android, iOS SDK, iPhoneアプリ, プログラミング言語, 仕事ツール
Tagged as , , , , , , ,

以前から気になっていたTitaniumの検証をしておかないと!とテストしてみました。
結果、Android(HTC EVO)、iPhone 3GSで動作できるところまで出来たので、作業でつまずいたところをメモしておきます。
今回参考にしたのは、最近発売された「Titanium Mobileで開発するiPhone/Androidアプリ
」です。

Titanium Mobileで開発するiPhone/Androidアプリ (Smart Mobile Developer)

著者/訳者:北尾 雅人

出版社:翔泳社( 2011-06-10 )

定価:

Amazon価格:¥ 7,259

大型本 ( 352 ページ )

ISBN-10 : 4798123986

ISBN-13 : 9784798123981



今回のブログエントリの作業では33ページまでしか必要ない感じですが、概要とかわかるのでいいかもしれません。
巻末にある「付録1 モダンなJavaScriptコーディングの第一歩」とか、とても気になりますね!私みたいに、JavaScriptでOOPとか出来るの?みたいな人には良さそうな雰囲気です。
ちなみに、私の開発環境はMac OS X 10.6.7です。

Titaniumをインストール

まずは、Titaniumをインストールします。有料プランもありますが、基本的にはそれはサポートレベルの違いですので、ほとんどの方はまずは下記リンク先の「Communityライセンス」で使うことになります。

インストールが完了したら起動してみると、サインアップの手順が出てきますので、メールアドレス等登録しましょう。

iOS SDKをインストール

iPhoneアプリを開発するならiOS SDKが必要となりますが、私は既にその辺りの環境は整備しているのでここはスキップ。
この辺りを知りたい人は「Titanium Mobileで開発するiPhone/Androidアプリ」でいうところの12ページ、13ページを見ると分かると思います。

Android SDKをインストール

Androidアプリを開発するならAndroid SDKをダウンロード擦る必要があります。私は未インストールでしたのでインストールしました。

上記サイトからzipファイルをダウンロードして展開し、そのフォルダ(android-sdk-mac_x86)を適当な場所に配置します。
次に今配置したフォルダ内のtools/androidを起動します。これがSDKインストール管理アプリとなっています。
様々なバージョンのSDKや、サードパーティのライブラリをここでインストールしたり、アンインストールすることが出来るようです。
どのバージョンをインストールかは、「Titanium Mobileで開発するiPhone/Androidアプリ」を参考にして、SDK、1.6〜3.2を入れてみました。
サードパーティカテゴリ内にあるGoogle APIs by Google Inc., Android APIもいれ、Goole Market Licensing package, Goole Market Billing packageも入れておきます。
まだAndroid周りの知識がないので、正直どの程度必要かとか判断できませんが、とりあえず入れておきます。
が!!!ここが注意するところですが、このインストールには非常に時間がかかります。結構大きなファイルをダウンロードしてインストールするので、数十分〜数時間かかることもありそうです。
Android SDK周りのインストールは時間に余裕がある時にやるとよいでしょう。

Android SDKインストールの仕上げ

最後にここが重要なのですが、先ほど実行したtools/androidと同じ場所にadbというプログラムがある必要があります。Titaniumがここにadbがあるという前提で動作しているためです。
しかし、tools/以下にadbは無く、toolsと同じ階層にあるplatform-tools/以下にadbはあります。
ということで、ここでシンボリックリンクを貼っておきます。
tools/以下に移動して、次のようにコマンドを実行するとシンボリックリンクが作られます。

$ ls -s ../platform-tools/adb .
 
$ ls -al adb
lrwxr-xr-x  1 User staff 21  6 18 22:55 adb -> ../platform-tools/adb

Komodo Editもインストールしてみた

Titanium Developerにはソースエディタ機能はありません。
どのエディタで編集してもいいのですが、せっかくですので「Titanium Mobileで開発するiPhone/Androidアプリ」のp19で紹介されているテキストエディタもインストールしてみました。

シンタックスをハイライトしてくれたりするらしい、オープンソースのIDE的エディタです。
また、次のファイルをKomodo Editに追加することによってコード補完等ができるようになるようです。

ダウンロードした圧縮ファイルを展開します。
Komodo Editの『Komodo』メニューの『Preferences..,』を選び、出てきたダイアログの左カラムで『Code Intelligence』を選び、下部にある『API Catalog』項目の『Add Catalog』ボタンを押し、先ほどダウンロードしたファイルのcixファイルを選択します。
これで大丈夫らしいです。

続く…

以上でインストールは完了です。
ちょっと長くなったので、今回はここまで。


[AD]

↓この雑誌にもTitanium特集が組まれています!

WEB+DB PRESS Vol.61

著者/訳者:西岡 祐弥 濱田 章吾 横山 彰子 浜本 階生 ミック uupaa 塙 与志夫 はまちや2 大沢 和宏 中島 聡 矢野 りん 中島 拓 浦嶌 啓太 角田 直行 佐々木 一 倉井 龍太郎 深町 英太郎 岩永 賢明 高橋 健一 柴田 博志 井上 誠一郎 大谷 弘喜 荻野 淳也 原 悠 増井 俊之

出版社:技術評論社( 2011-02-24 )

定価:

Amazon価格:¥ 12,547

大型本 ( 200 ページ )

ISBN-10 : 4774145440

ISBN-13 : 9784774145440


↓ちょっとしたAndroidアプリ開発の実機テスト用にこういう端末が格安であるのはいいですね!Cortex A8だから悪くないはず。

lipo:複数アーキテクチャ向けライブラリを結合するコマンド

1
Filed under iPhoneアプリ, トラブルシューティング, プログラミング言語, 仕事ツール
Tagged as , , , , ,

Odd merge signphoto © 2008 Jason McHuff | more info (via: Wylio)

iOS Static Libraries

iOS Static LibrariesというiOSアプリ向けにビルドされた便利ライブラリ群があります。
ちょっと必要なライブラリが含まれていて、自分でビルドするよりも便利ですし、iOS SDKがバージョンアップされたらきちんと更新されているので便利に使わせてもらっています。
先日、iOS Static Librariesの、iOS SDK 4.3向けのビルドがリリースされました。
しかし、これがちょっと曲者で、現在iOSデバイスはARM V6かARM V7の二つがあり、今回のビルドバーションは、ARMアーキテクチャ向けに二つのビルドがなされているのです。
ARM V6というのはiPhone 3G以前で使われていたものなので、対応機種を3GS以降に絞るならARM V7のみに対応したビルドを行えばいいのですが、まだ3Gも無視できない状況ですので、これをなんとかしないといけません。
そして、Xcodeのビルド設定的には一つにマージされている方が便利なのです。
マージって、、なんかツールがあるのか?設定でどうにか回避できるものなのか?と調べてみたところ、偶然、lipoというコマンドを知ることが出来ました。

lipoコマンド

man lipoによると、次のような説明があります。

The lipo command creates or operates on “universal” (multi-architecture) files.

まさに複数アーキテクチャ対応のユニバーサルファイルを生成するためのツールだと分かります。
そして、これはiOSアプリを開発できる環境ならインストール済みであることも分かりました。
例として、前述したiOS Static Librariesについて調べてみます。
ARM V6用のライブラリ libcurl.a について下記のコマンドで調べてみます。すると、ちゃんとターゲットアーキテクチャを調べることが出来ることが分かります。

1
2
3
$ lipo -info libcurl.a
input file libcurl.a is not a fat file
Non-fat file: libcurl.a is architecture: armv6

そして、ユニバーサルファイルを作る例ですが、例えば、ARM V6用、V7用のlibcurl.aが、./armv6/libcurl.a と、 ./armv7/libcurl.a にある場合には、次のようにして生成できます。出力先は ./fat/ とします。

1
lipo -arch armv6 ./armv6/libcurl.a -arch armv7 ./armv7/libcurl.a -create -output ./fat/libcurl.a

直感的でわかりやすいですね!

armv6/armv7ユニバーサルライブラリをつくる

というわけで、今回の目標である「iOS Static Librariesのarmv6/armv7ユニバーサルライブラリをつくる」シェルスクリプトを載せておきます。
まず、準備として次のようなファイル配置にしておきます。

workディレクトリ直下で実行したら、work/lib以下にユニバーサルライブラリファイルが生成されると思います。また、処理対象は”*.a”ファイルのみ、とします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
echo 'makefat.sh -- start!'
 
RootV6='./iPhoneOS-V6-4.3'
 
for lib_armv6 in `find $RootV6 -name "*.a" -print`
do
	lib_armv7=`echo $lib_armv6 | sed "s/V6/V7/g"`
	echo $lib_armv6
	echo $lib_armv7
	lib_fat=`echo $lib_armv6 | sed "s/iPhoneOS-V6-4.3\///g"`
	echo $lib_fat
 
	lipo -arch armv6 $lib_armv6 -arch armv7 $lib_armv7 -create -output $lib_fat
done
 
echo 'makefat.sh -- end!'

one more lipo

lipoは複数アーキテクチャのユニバーサルライブラリをから特定のアーキテクチャパートを削除することも出来たりするようです。
両方対応版のライブラリのみが提供されている環境で、不要なアーキテクチャを削除すれば、ビルド後の実行ファイルサイズが小さくなったりすると思うので、そういう用途にも使えそうですね。


[AD]

↓リンカーとかプログラムをきっちりやろうとしたら外せない部分。去年出たらしいこの本、面白そうですね。

リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)

著者/訳者:坂井 弘亮

出版社:CQ出版( 2010-08-01 )

定価:

Amazon価格:¥ 3,024

単行本 ( 303 ページ )

ISBN-10 : 4789838072

ISBN-13 : 9784789838078


↓もうすぐ発売されるWEB+DB PRESS plusシリーズ。気になるタイトルです!!

良いコードを書く技術 -読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus)

著者/訳者:縣 俊貴

出版社:技術評論社( 2011-04-09 )

定価:

Amazon価格:¥ 2,462

単行本(ソフトカバー) ( 240 ページ )

ISBN-10 : 4774145963

ISBN-13 : 9784774145969


↓こういうのじっくり読んでみたいなぁ〜。

プログラミングコンテストチャレンジブック

著者/訳者:秋葉 拓哉 岩田 陽一 北川 宜稔

出版社:毎日コミュニケーションズ( 2010-09-11 )

定価:

単行本(ソフトカバー) ( 316 ページ )

ISBN-10 : 4839931992

ISBN-13 : 9784839931995


↓結局まだ読んでいない数学ガールシリーズ最新作はアルゴリズムへ突入!

数学ガール/乱択アルゴリズム (数学ガールシリーズ 4)

著者/訳者:結城 浩

出版社:SBクリエイティブ( 2011-02-26 )

定価:

Amazon価格:¥ 2,052

単行本 ( 480 ページ )

ISBN-10 : 479736100X

ISBN-13 : 9784797361001


svnの差分があるファイルをリストアップしたらawkが面白いことを知った

0
Filed under Subversion, プログラミング言語, 仕事ツール
Tagged as , , ,

svn diff

subversionで変更一覧を見るには次のコマンドを入力します。

1
$ svn diff

これで、ファイル名に続いて差分がdiff形式で表示されます。
しかし、変更箇所の詳細は不要で、変更ファイルのファイル名だけが欲しい、という状況になり、一覧を調べるのに何か便利なコマンドがないかと調べて、awkと組み合わせてリストアップするコマンドを見つけました。

1
$ svn diff | awk '/^Index/ {print $NF}'

参考サイト:http://www.02.246.ne.jp/~torutk/subversion/intro.html

エイリアス化

これを毎回入力するのは面倒なので次のように .bash_profile に書いて、エイリアス登録。

1
alias svn_diff_list='svn diff | awk "/^Index/ {print $NF}"'

awk導入

上記コマンドの後半はawkによる文字処理。
awkって名前は知っているけど、自分で使ったこと無いので、これを機にちょっと調べてみた。
awkの面白さが分かりやすかったのがこのページ(http://x68000.q-e-d.net/~68user/unix/pickup?awk)
ls -alで出てくる情報を空白区切りとみなして、5列目、9列目のみ表示したい場合には次のようなコマンドでOKなのだ!

1
$ ls -al | awk '{print $5,$9}'

おー!!これは面白い!!!
んで、そのなかでも、例えば、adminという文字列がある行のみ表示したい場合には、次のように正規表現で指定すれば、行を抽出できる。

1
$ ls -al | awk '/admin/ {print $5,$9}'

ちなみに正規表現にマッチした行をすべて表示するには次のような感じ。

1
$ ls -al | awk '/admin/ {print;}'

awk、奥が深いらしいのですが、導入はこれで十分ですね!あとは、必要に応じて調べればいい!


[AD]

↓AWKの項目もある!ちなみにAWKとは、作者3人の名前の頭文字。エイホ(Aho)、ワインバーガ(Weinberger)、カーニハン(Kernighan)。そう、あのカーニハンですよ!

言語設計者たちが考えること (THEORY/IN/PRACTICE)

出版社:オライリージャパン( 2010-09-27 )

定価:

Amazon価格:¥ 18,038

大型本 ( 536 ページ )

ISBN-10 : 4873114713

ISBN-13 : 9784873114712


↓awkを本格的にプログラム言語として勉強するならこれが良さそう。

sed & awkプログラミング 改訂版 (A nutshell handbook)

著者/訳者:Dale Dougherty Arnold Robbins

出版社:オライリー・ジャパン( 1997-10-01 )

定価:

Amazon価格:¥ 4,428

大型本 ( 461 ページ )

ISBN-10 : 4900900583

ISBN-13 : 9784900900585


↓256倍シリーズのAWK本。

AWKを256倍使うための本 (Ascii 256倍)

著者/訳者:志村 拓 鷲北 賢 西村 克信

出版社:ASCII( 1993-08 )

定価:

単行本 ( 277 ページ )

ISBN-10 : 4756101623

ISBN-13 : 9784756101624


Objective-Cの既存のクラスを拡張する仕組み

2
Filed under iPhone, Objective-C, プログラミング言語
Tagged as , , , , , ,

Objective-Cには「カテゴリ」という機能があり、それについて調べたときのメモをまとめました。

その名は「カテゴリ」

ネットに転がっているソースを見ていて、それまで見たことなかった書き方があったときにはそれをどうやって調べたらいいのか、なかなか手こずります。その書き方そのものの名を知らないからです。
今回の例で言うと「カテゴリ」という機能のことで、下記のような感じで書かれていたら、それはカテゴリ機能を使っているのです。

1
@inteface NSString (HogeHoge)

このカテゴリ機能を活用すると、既存のクラスをちょっと機能拡張したい時に無駄なクラスを作る必要がなくなります。
例えば、文字列を扱うクラス NSString をに機能を追加したいことはよくあるのですが、NSStringの中身に応じたハッシュ値(MD5)を出力できるようなメソッドを追加する、という例に説明してみます。
MD5の機能実装の参考にしたのはこちらのサイト。関数の中身は全く同じです。

ざっくりしたカテゴリの書き方と使い方

まず、カテゴリ定義の書き方。
NSStringにMD5の機能を追加する場合、ファイル名は、NSString+MD5.h, NSString+MD5.m とするのがマナーのようです。
また、後述するソースを見ると分かるのですが、定義部は @inteface NSString (MD5)、実装部は @implementation NSString (MD5) という感じにして、あとは通常のクラス定義と同じように書きます。
次に使い方ですが、#import “NSString+MD5.h” として一緒にビルドすれば、そのソース内でNSStringインスタンスは全てMD5カテゴリの機能を持つことが出来ますので、下記のようなコードでMD5値を出力させることが出来ます。

1
2
NSString* strTest = @"テスト文字列";
NSLog( @"original[%@], MD5[%@]", strTest, [strTest MD5String] );

NSString+MD5 コード全容

1
2
3
4
5
6
7
//  NSString+MD5.h
 
#import <Foundation/Foundation.h>
 
@interface NSString (MD5)
- (NSString*) MD5String;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//  NSString+MD5.m
 
#import "NSString+MD5.h"
#import <CommonCrypto/CommonDigest.h> // for CC_MD5
 
@implementation NSString (MD5)
- (NSString *) MD5String
{
  const char *cStr = [self UTF8String];
  unsigned char result[CC_MD5_DIGEST_LENGTH];
  CC_MD5( cStr, strlen(cStr), result );
  return [NSString stringWithFormat:
    @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
    result[0], result[1], result[2], result[3], 
    result[4], result[5], result[6], result[7],
    result[8], result[9], result[10], result[11],
    result[12], result[13], result[14], result[15]
    ];  
}
@end

iOS SDKのMD5関数についての説明

おまけとして、上記のソースの内容を説明します。
MD5への変換関数 CC_MD5はiOS SDKにC言語ライブラリが用意されています。(リファレンスはこちら

CC_MD5は、次のように定義されています。

1
2
extern unsigned char*
CC_MD5(const void *data, CC_LONG len, unsigned char *md);

data が元になるデータのポインタ。
len がdataの長さ。
md がMD5計算の結果を格納する出力用バッファへのポインタで、CC_MD5_DIGEST_LENGTHの長さが必要なので、予め用意しておきます。本当はCC_MD5_DIGEST_LENGTHの長さに合わせて、出力部分を対応できるよう書いておく必要がありますが、CC_MD5_DIGEST_LENGTHは、そうそう16から変わることはないので、出力部分を固定で16要素並べてstringWithFormatで出力させています。

クラスの機能分割、という視点

カテゴリについての詳しい説明は、「Dynamic Objective-C」という書籍にも3ページに渡って説明されているのですが、こちらでの視点はチョット違う。

Dynamic Objective-C

著者/訳者:木下 誠

出版社:ビー・エヌ・エヌ新社( 2009-03-27 )

定価:

単行本(ソフトカバー) ( 456 ページ )

ISBN-10 : 4861006414

ISBN-13 : 9784861006418


そのセクション名は「カテゴリ ―動的なメソッドの追加によるクラスの拡張」となっていながらも、最初の段落の説明は次にように書かれている。

Objective-Cには、カテゴリと呼ばれる機能がある。クラスが持つメソッドを、名前の通りカテゴリごとに分類するための機能だ。これを使うことで、大きなクラスでもコーディングしやすいように分割することができる。

そもそもカテゴリとは、クラス実装を分割するための仕組み、だというのだ。
なるほど、そう考えるとカテゴリが「カテゴリ」という名前の由来もわかるし、ウェブに転がるサンプルのファイル名がHOGEHOGE-FOO.hとかハイフン繋ぎになっているモノがあるのも理解できる。
MVCモデルでクラスを分けても大きくなってしまうクラスはあるし、その場合にはカテゴリを使った機能分割も視野に入れていいかもしれない。
その他にもObjective-Cの深いところをじっくり説明してくれている「Dynamic Objective-C」はおすすめ書籍です!

カテゴリで出来ないこと

後から知ったのですが、カテゴリ機能で「クラスのインスタンス変数の追加」は出来ないようですね。
これ、結構重要なポイントだと思います。

参考サイト:『kuro’s blog : Objective-C:カテゴリで「できること」と「できないこと」』


[AD]

↓「CHAPTER09 カテゴリ」とカテゴリについて章を割いて説明されているようです!

詳解 Objective-C 2.0 改訂版

著者/訳者:荻原 剛志

出版社:ソフトバンククリエイティブ( 2010-12-17 )

定価:

大型本 ( 608 ページ )

ISBN-10 : 4797361786

ISBN-13 : 9784797361780


↓昨年8月に亡くなった今敏が1985年〜1986年に連載していたマンガ!面白そう!

OPUS(オーパス)上(リュウコミックス) [コミック]

著者/訳者:今 敏

出版社:徳間書店( 2010-12-13 )

定価:

コミック ( 193 ページ )

ISBN-10 : 4199502211

ISBN-13 : 9784199502217


↓PS3もXbox360も持っていないけど、これは面白そう!

キャサリン 特典 サントラCD付き - PS3

キャサリン 特典 サントラCD付き - PS3

定価:¥ 7,538

Amazon価格:¥ 14,000

カテゴリ:Video Game

発売日:2011-02-17