— boreal-kiss.com

Archive
2009年2月 Monthly archive

発売はどちらも2009年7-8月予定。先すぎて死ねる。

  • The Essential Guide to Iphone Application Development for Flash Users
    The Essential Guide to Iphone Application Development for Flash Users (Essential Guide)

    Flash専門の感のあったFriendsofEDがとうとうiPhone app本出すらしい。ただし単なるiPhone本ではなくFlashユーザーのため、としているところが一風変わったところか。ここのFlashユーザーのためのPHP本がわかりやすかったので興味はある。Essentialと付いているのでチンカス本の可能性もなきにしもあらず。

  • Cocoa Design Patterns
    Cocoa Design Patterns (Developer's Library)

    Cocoaデザインパターン本。CocoaやObjective-Cを題材にしたデザインパターンの本は存在しないので非常に興味がある。iPhone SDKプログラミング大全の著者、木下誠がダイナミックObjective-C | コラムでObjective-Cを題材にしたデザインパターンのネット解説を行っているがタイトル通りコラムの域を超えておらず、この手の内容は書物としてしっかり読みたい僕としては満足できない。

ちなみにデザインパターンの発祥はCocoaらしい。すげーなCocoa!イマイチしっくりこないけど!

もっとも、正確に言えば、Cocoaがデザインパターンを応用しているのではなく、デザインパターンがCocoaをもとにして作られた訳だが。GoF本では、パターンの実例として、Cocoaの前身である、NEXTSTEPが何度も取り上げられている。また、パターンの1つであるChain of Responsibilityという名前は、明らかにAppKitのResponder Chainから取られていると考えられる。

【コラム】ダイナミックObjective-C (49) デザインパターンで読み解くCocoa

Read More

TheirAges - How old are they?

名前と生年月日を登録するとそのひとの年齢(何年と何日)をトラッキングできるアプリケーションです。 つい忘れがちな恋人の年齢、両親の年齢、ペットの年齢など記録してください。 フォトライブラリの画像をアイコンに登録することも可能です。

Get App

アプリケーションの詳細はこちら。
» TheirAges – How old are they?

Read More

FartMan, The Fart Sound Generator

邦題を付けるなら「おならマン」。デバイスを振るとおなら音が発生する無料アプリケーションです。満員電車で起動させてみてください。

Get App

アプリケーションの詳細はこちら。
FartMan, The Fart Sound Generator

Read More

コーディングの趣味の話なので必ずしも重要ではないが、個人的には大発見。

Problem

インスタンスプロパティ(Objective-Cではインスタンス変数と呼ぶ)の表示名とgetter/setter(Objective-Cではアクセサメソッドと呼ぶ)の表示名を異なるものにしたい。例えば、インスタンス変数をNSStringの”_name”と定義、そのアクセサメソッドは先頭のアンダースコアを除いた”name”で扱いたい。

Recipe

プロパティの定義は普通に”_name”とする。setter/getterを作成する際に以下のような細工をする。@propertyと@synthesizeの書き方が定義されたインスタンス変数と若干異なる(特に@synthesize)。

//TestClass.h
@interface TestClass : NSObject{
	NSString *_name;
}
@property (retain) NSString *name;
 
@end
 
//TestClass.m
@implementation TestClass
@synthesize name = _name;
 
@end

クラス内部でのインスタンス変数への直接アクセス(“_name”)とアクセサメソッド経由のアクセス(“self.name”)が明確に区別できるのが利点。Xcodeの適当な色づけに頼るよりアンダースコアの有無による絶対的な判断の方がしっくりくるという理由もある。

ActionScriptで言うと

上記内容は以下のgetter/setterと同等。ほんとに趣味の問題。

protected var _name:String;
 
public function get name():String{
	return _name;
}
 
public function set name(value:String):void{
	_name = value;
}

Reference

【コラム】ダイナミックObjective-C (102) プロパティ(2) – プロパティの宣言 | エンタープライズ | マイコミジャーナル

Read More

アイコンだったりベクター素材だったりの利用規約でよく見かけていたCreative Commons Licenses 3.0。ちゃんと調べる機会ができたのでメモ。Creative Commons 3.0と表記されている場合は原著作者クレジット表記が最低限必要。その他諸々のライセンス体系はAttributionの内容で異なってくる。知ってしまえば意外と簡単な分類だった。

  • Creative Commons 3.0 Attribution

    原著作者クレジット表記が必要。商用利用OK。改変OK。単に「Creative Commons」とか「Creative Commons Licenses 3.0」と表記されているものはこのライセンスだと考えればよい。

  • Attribution-NoDerivs

    原著作者クレジット表記が必要。商用利用OK。改変NG。

  • Attribution-NonCommercial-NoDerivs

    原著作者クレジット表記が必要。商用利用NG。改変NG。

  • Attribution-NonCommercial

    原著作者クレジット表記が必要。商用利用NG。改変OK。

  • Attribution-NonCommercial-ShareAlike

    原著作者クレジット表記が必要。商用利用NG。改変OKだが頒布する場合の二次創作物のライセンス体系は同じくCreative Commons 3.0 Attribution-NonCommercial-ShareAlikeとしなければならない(いわゆるコピーレフト)。

  • Attribution-ShareAlike

    原著作者クレジット表記が必要。商用利用OK。改変OKだが頒布する場合の二次創作物のライセンス体系は同じくCreative Commons 3.0 Attribution-ShareAlikeとしなければならない。

Read More

興味を持ちつつも全然手を出していなかったGitだったのだけど、さっさと導入しとけばよかったなというのが最初の印象。普段は可能であればGUIを使いたいと思うのだけど、GitはGUI(例えばMacだとGitX)なくてもいいかなと思ってしまうほど操作が直感的だった。非常に好印象。というのも教本がとても読みやすかったからというのがある。

Pragmatic Version Control Using Git (Pragmatic Starter Kit)
Pragmatic Version Control Using Git (Pragmatic Starter Kit)

以前、同じ出版社のSubversionの本を読んだのだが([Books] SubversionとTextMateの本 – boreal-kiss.com)、Subversionの手続きが面倒なのか著者の文体が悪いのかわからないが必ずしもSubversion便利!と思える内容ではなかった。しかし、上記Gitの本はリーズナブルな内容。バージョン管理に関わる観念的な内容を実生活の行動に例えたり、なかなか上手に説明しているなと思う。一般に外国人のたとえ話なんか日本人の心に響くわけないのだけど(例えば[Books]ActionScript 3.0 Design Patterns – boreal-kiss.com)、この本はそれほど悪くなかった。

この本の面白いところは、教本中のソースのダウンロード先が全てGitのリポジトリを使っているところか。まあ当たり前と言えば当たり前だけど、プログラム本にありがちな「出版社のHPにアクセスしてサンプルソースをダウンロードする」という手間のかかる操作がなくてよかった。ということで本もGitもオススメ。

Read More

GeSHi – Generic Syntax Highlighterはプログラムソースを修飾語などにきれいに色付けした状態でhtmlソースとして出力してくれるPHPパッケージ。対応言語が豊富で、ActionScriptやObjective-Cも対応している。GeSHiを使ったWebサービスが見当たらないのはプロジェクトライセンスがGPLのためなのかな。

使い方

  1. sourceforge.netからパッケージをダウンロード。パッケージ全体をPHPが動作する環境に配置する。
  2. パッケージで定義されているGsShiクラスにhtml化したいソースファイルのストリング内容とパースしたい言語を引数に渡してパースさせる。
  3. パース内容を出力させたものがhtml化されたソースコードになる。

ActionScript 3.0の場合

例えばTest.asの中身を表示したい場合、PHPファイルに以下のように記述して実行。

<?php
 
include('geshi.php');
 
//Language
$lang = 'actionscript3';
 
//Raw source code
$path = 'Test.as';
 
$src = file_get_contents($path);
$geshi = new GeSHi($src, $lang);
$geshi->enable_keyword_links(false);
 
echo $geshi->parse_code();
?>

上記PHPファイル実行時の出力内容は以下の通り。Flex Builderと全く同じ見た目が出力される。インデントがちょっと深いぐらい?

package {
	import flash.display.Sprite;
 
	/**
	 * Test.as
	 */ 
	public class Test extends Sprite{
		/**
		 * Constructor
		 */ 
		public function Test(){
			this.init();
		}
 
		protected function init():void{
			trace("Hello");
		}
	}
}
 

Objective-Cの場合

例えばTestAppDelegate.mの中身を表示したい場合、PHPファイルに以下のように記述して実行。

<?php
 
include('geshi.php');
 
//Language
$lang = 'objc';
 
//Raw source code
$path = 'TestAppDelegate.m';
 
$src = file_get_contents($path);
$geshi = new GeSHi($src, $lang);
$geshi->enable_keyword_links(false);
 
echo $geshi->parse_code();
?>

上記PHPファイル実行時の出力は以下の通り。まあアリ?

//
//  TestAppDelegate.m
//  Test
//
//  Created by boreal-kiss.com on 09/02/08.
//  Copyright boreal-kiss.com 2009. All rights reserved.
//
 
#import "TestAppDelegate.h"
#import "TestViewController.h"
 
@implementation TestAppDelegate
 
@synthesize window;
@synthesize viewController;
 
 
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 
    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}
 
 
- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}
 
 
@end
 

その他

パッケージデフォルトだとSpriteやintなんかに変なURLのリンクがくっつくので、以下の設定でキーワードへのURLリンクを無効にしておくとよい。

$geshi->enable_keyword_links(false);

出力された内容をそのままブログなんかにコピー&ペーストしたいのであれば、以下のように出力内容を設定してやるとよい。出力内容がhtmlタグの形で表示される。

//echo $geshi->parse_code();
 
echo '<pre>';
echo htmlspecialchars($geshi->parse_code());
echo '</pre>';
Read More

archivingにより取得したデータをUITextFieldに表示させるようなアプリケーションを、iPhoneシミュレータ(iPhone OS 2.2)で初めて起動させる時、データを表示させたUITextFieldをクリック(エディット用のキーボードが出現する状態)するとなぜかSQL文に関係するエラーがコンソールに表示される。

error compiling query "SELECT value FROM _SqliteDatabaseProperties
WHERE key = ?;": no such table: _SqliteDatabaseProperties

これはアプリケーションの二回目以降の起動では表示されないし、iPhone実機を使ったデバッグでも表示されない。Beginning iPhone Development: Exploring the iPhone SDKの著者の一人であるJeff Lamarcheによると、よくわからんがシミュレーター近傍の問題ぽいので気にするなとのこと。iphonedevbook.com • View topic – Persistence Solution Using Archivingより。

Read More