Monthly Archives: 10月 2010

Objective-CでNSStringプロパティ実装

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

Objective-Cをなんとなく使い続けていたのですが、分かってるようであまり分かっていなかったのがプロパティ
retain/release/autorelease周りとの絡みもあってなんとなくやり過ごしていたのですが、ちょっと切羽詰ってきたので仕切りなおして勉強してみました。

NSStringを持つクラスでテスト

いろいろ調べた結果、とりあえず、下記のようなクラスStringContainerを定義しておけば問題なく使えるっぽいです。(問題見つけたら教えてください!)
まずは、定義ファイル。内部にNSString*のインスタンス変数を二つと、そのプロパティ宣言を行っています。
重要なポリシーは、propertyは内部でコピーする、ということ。下記のページを参考にしています。

1
2
3
4
5
6
7
8
9
10
11
12
13
//  StringContainer.h
#import <Foundation/Foundation.h>
 
@interface StringContainer : NSObject {
	NSString*	str0;
	NSString*	str1;
}
 
// コピーするので、渡すものはautoreleaseしておいてください.
@property (nonatomic,copy) NSString* str0;
@property (nonatomic,copy) NSString* str1;
 
@end

次に実装コードです。プロパティ設定のためのsynthesizeと、デストラクタを定義しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//  StringContainer.m
#import "StringContainer.h"
 
@implementation StringContainer
 
@synthesize str0, str1;
 
-(void) dealloc{
	[super dealloc];
 
	[str0 release];
	[str1 release];
}
 
@end

そして、テストコード。str0とstr1では別の与え方をしてみました。

1
2
3
4
5
6
7
8
// Test.m
// 確保.
StringContainer* scTest;
scTest = [[StringContainer alloc] init];
 
// 各パラメータを設定.
scTest.str0	= [NSString stringWithFormat:@"Default 0[%d]",0];
scTest.str1	= [[[NSString alloc] initWithFormat:@"Changed 1[%d]",11] autorelease];

str0に渡す文字列は、stringWithFormatはクラスメソッドで生成。なので、そこで生成されたオブジェクトはそちらでAutoRelease Poolに入っているようなので、特にrelease/autoreleaseを行う必要はありません。むしろ、それをやると、retain countが0になったときに、二重にreleaseが呼ばれるので、問題となります。
str1に渡す文字列は、alloc, initで生成したもの。ここで生成しているので、ここでautoreleaseしています。代入後に即releaseしても問題有りませんが、ここでrelease/autoreleaseのどちらかを行っていないと、そのメモリは破棄されないので、リークしてしまいます。

これでOKのハズ!

一応、Instrumentsツールを使ってリークを調べたりもしたので、これで大丈夫だと思うのですが、認識に問題があったら誰か教えて欲しいです!!!
たったこれだけのことを自信持ってかけるようになるのに半日かかりました!
AutoRelease Poolというものの存在、クラスメソッドで定義したものがそちらで勝手にautoreleaseされているっぽい、ということ、それらをググって知ったので理解できたのですが、そうでなかったらなかなか辿り着けないのです。
ちなみに、NSArrayも同様な書き方でプロパティ実装できるはずです。


[AD]
↓この本、買いました!ウェブで連載されていたコラムの総集編とiPhone Hackコラムの書き下ろし。読み物として書かれているので、飽きずに読めてる!Objective-Cの実装部分まで踏み込んでいるので、ダイナミック言語としての面白さを知ることができるし、後半ではデザインパターンの実装の話にもなる。

Dynamic Objective-C

著者/訳者:木下 誠

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

定価:¥ 3,360

Amazon価格:¥ 3,360

単行本 ( 456 ページ )

ISBN-10 : 4861006414

ISBN-13 : 9784861006418



↓これも店頭で見ていい!と思って買いました。iPhoneプログラムのコネタ集なんだけど、一つ一つが過不足無く説明とコードが書かれていて、本当にすばらしい!版型もちょっと小さいので、鞄に入れて移動中に気になるところをちょっとずつ読むスタイルもオススメ。

iPhoneSDK開発のレシピ

著者/訳者:高山 恭介 広部 一弥 松浦 晃洋

出版社:秀和システム( 2010-03 )

定価:¥ 2,520

Amazon価格:¥ 2,520

単行本 ( 319 ページ )

ISBN-10 : 4798025798

ISBN-13 : 9784798025797


Mac向けsvnクライアントはRapidSVNで決まり!

5
Filed under Mac, Subversion, 仕事ツール
Tagged as , , , , , ,

subversionクライアント、WindowsではTortoiseSVNがデファクトスタンダードの座を譲りません。いや、実際Explorerと一体化した使い勝手はホント便利ですからね。
翻って、Mac OS Xです。
こちらでもsubversionクライアント環境を整えたいと思い、あれこれ試してみた話です

Mac OS X 10.7 通称Lionでは、現在のRapidSVN(バージョン(0.12とか0.13))は動作しません。Ed Danleyという方が移植しようとしているようですが、すぐには出来なさそうです。Ed、ガンバレ!!自分も余裕があれば是非移植したいのですが、、時間が全くない。。誰かヘ〜ルプ!(2011/08/15更新)

SCPlugin?

SCPlugin、というMac用アプリがあります。これをインストールして、Finderのウィンドウ上部にそのアプリのエイリアスを置いておけばかなり便利です。
ただ、今の状態とか一見して分からない。ここが致命的。
ターミナルで “svn up”とか打っていても、いいんですが、何かいまいちだな、と思っていました。
で、Xcodeからやってみたり、あれこれ試してみたり、みなかったり(有償のものは基本スルー)したところ、RapidSVNが最高じゃないか?というところに落ち着きました!

RapidSVN!

このアプリ、全然その名前が世の中に出てきていない気がするのですが、いやはや、これ、かなりいい感じですよ!

RapidSVNは、オープンソース(GNU GPL v3)なので、無料で使えます。
GUIはwxWidgetsということで見た目は正直100点じゃありませんが、C++で書かれていることもあり、十分な速度と、使い心地を提供してくれます!

RapidSVNの場合、特殊なリポジトリ管理をする、ということではなくて、単にブックマークを管理するという仕組みなので、やるべき設定はとてもシンプル
作業コピーのブックマークを追加するだけでOK。
『ブックマーク(B)』メニューから『既存の作業コピーを追加(A)…』で、すでにSubversion管理されている作業コピーの好きなディレクトリを指定するだけです!
subversionの特徴として各ディレクトリごとに個別管理されている、ということがあるのですが、そのどこにでもブックマークを付けられるのです。

補足(2011/02/07)

2009年にリリースされた最新バージョンの0.12.0では、Subversion 1.6.5用にビルドされていますが、Subversion 1.2.3以上であれば問題なさそうです。
上記オフィシャルサイトのwikiが荒らされてしまったのですが、ちょっと前のページはHistoryから見れますので、詳細を見たい人はそちらか見てください。
あと、Tigris.org内のサイトのほうがいろいろ詳細は揃っていまし、ソースもあります。
2009年Q4に予定されている0.14も出てきていないので開発は止まってしまったかもしれませんが、このプロジェクト内のSvnCppというSubversionのC++ APIライブラリを使ってオリジナルのクライアントをつくってしまうのもありかもしれません!(GPLですが)

差分ツール DiffMerge

差分ツールとして自由に設定できるはずなのですが、私の環境ではFileMergeを指定してもうまくいきませんでした。
そこで、RapidSVNのページでも紹介されていたDiffMergeを設定しました。

ダウンロードしてきたdmgを開き、DiffMerge.appをアプリケーションフォルダにコピーします。
次に、dmg内の CommandLine/diffmerge.sh を /usr/bin/ とかパスが通っているところにコピーします。
これで、ターミナルで下記のように入力すればDiffMergeを使えます。
% diffmerge file1.txt file2.txt
これでDiffMergenのインストールは完了です。
最後にRapidSVNの設定を行ないます。
『RapidSVN』メニューの『Preferences…』を選び、『プログラム』→『比較ツール』を選びます。
そして、/usr/bin/diffmerge.sh を設定し、引数に『”%2″ “%1″』と入力します。
これで差分が見れるようになります。
ただ、日本語が化けるのですが、DiffMergeの設定ではうまくフォント切り替えが出来ませんでした。そこは我慢することにして、作業完了です。(フォントパネルが一瞬で閉じてしまう…。どうにかしてフォント設定できないかな?)

RapidSVNショートカットメモ

最後にRapidSVNでよく使うショートカットをメモしておきます。

  • フォルダ、ファイルを選択して ⌘+U で更新(Update)
  • フォルダ、ファイルを選択して ⌘+↩ でコミット(Commit)
  • フォルダ、ファイルを選択して ⌘+V で元に戻す(Revert)
  • ファイルを選択して ⌘+H でリポジトリの最新(Head)とローカルの差分を見る

[AD]

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

著者/訳者:Mike Mason

出版社:オーム社( 2007-04-21 )

定価:¥ 2,730

Amazon価格:¥ 2,730

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

ISBN-10 : 4274066800

ISBN-13 : 9784274066801


↓Redmine+Subversionを使ってチケット駆動開発!

Redmineによるタスクマネジメント実践技法

著者/訳者:小川 明彦 阪井 誠

出版社:翔泳社( 2010-10-13 )

定価:¥ 3,444

Amazon価格:¥ 3,444

大型本 ( 336 ページ )

ISBN-10 : 4798121622

ISBN-13 : 9784798121628


↓テストの自動化や、継続的開発について書かれており評判も良いみたい。この辺り、自分も知識不足なので本書で学びたい!

継続的インテグレーション入門 開発プロセスを自動化する47の作法

著者/訳者:ポール・M・デュバル スティーブ・M・マティアス アンドリュー・グローバー

出版社:日経BP社( 2009-08-06 )

定価:¥ 3,360

Amazon価格:¥ 3,360

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

ISBN-10 : 482228395X

ISBN-13 : 9784822283957


↓BTキーボードがあれば、ノートで開発していても手元の暑さから開放され、開発の集中力が途切れない!

Apple Wireless Keyboard (JIS) MC184J/A

Apple Wireless Keyboard (JIS) MC184J/A

定価:¥ 6,800

Amazon価格:¥ 8,800

カテゴリ:Personal Computers

発売日:2009-10-31


AutomatorでシェルスクリプトをGUI化

0
Filed under Mac
Tagged as , , , , ,

シェルスクリプトをGUI化(Macアプリ化)

作業環境を整える為に、ちょっとしたコマンドをシェルスクリプトで書くことがあります。
でも、Macで作業していると、それをGUIアプリ化したくなるのは当然の流れ。
実行処理内容は見えなくてもいいけど、入力プロンプトをGUIで出して、そこに入力された文字列をベースに、あとの処理はシェルスクリプトで、ということをやりたいことが多いのですが、それを今回調べてやってみました。
参考にしたページは、こちら↓

Automator で GUI to CUI!

Mac OS Xには、Automatorという自動化ツールが最初からインストールされています。
このAutomatorがかなり強力、というのは想像がついていたのですが、基礎知識がなかったため、ちょっとした処理を行う為にもなかなか面倒で、手を出すこと自体を諦めてしまっていました。
そんな自分のような人のために、道を作っておきます。
今回作るのは「入力プロンプトを出す」→「入力された文字列をbashで処理」というもの。
まずは、Automatorを立ち上げ、新規ワークフローを作成します。
左側のアクション欄から「AppleScriptを実行」というのを右側のエリアにドラッグ&ドロップします。
スクリプトエリアに下記のように入力します。

1
2
3
4
5
6
7
on run {input, parameters}
	tell application "System Events"
		display dialog "入力してください." default answer "" buttons {"OK", "Cancel"}
		set the_answer to text returned of the result
	end tell
	return {the_answer}
end run

続いて、左側のアクション欄から「シェルスクリプトを実行」というのを右側のエリア(「AppleScriptを実行」の下部)にドラッグ&ドロップします。
「シェル」が “/bin/bash” になっていることを確認。
右側の「入力の引き渡し方法」プルダウンを「引数として」に設定します。
さらにスクリプトエリアに下記のように入力します。

1
echo $1 >> ~/test.txt

今回は、引数として渡ってきた入力文字列を、ホームディレクトリのtest.txtに追記していく、という処理を実行しています。

以上で設定は完了です。
Automatorウィンドウ上は下図のようになります。
Read More »

TortoiseSVNアップデートでトラブったら、、

0
Filed under Subversion, トラブルシューティング, 仕事ツール
Tagged as , ,

TortoiseSVNのアップデートについて、ちょっとトラブったのと、それが解決したので、そのメモです。

コンテキストメニューに出てこない!

以前、1.6.9から1.6.10にしたときにコンテキストメニューに全く出てこなくなり、使い物にならなかったので、すぐに1.6.9に戻していました。
で、最近、1.6.11が出て、今回は大丈夫だろうと思ってインストールしてみたのです。
すると、、、やっぱりコンテキストメニューに出てこない!

一度でダメならもう一度!?

でも、すぐに戻すのも悔しいのでネットで検索してみました。
すると、こんな情報を発見!

よくみるとダウンロードページに「インストーラーを2回実行して、2回目のときは『修復』を使え!」とか書かれているようです。

 [TortoiseSVN]バージョンアップしたら日本語パックがチェック通らない!⇒また【修復】で回復。 – Project Note
これは1.6.10のときにRelease Noteに書かれていたようです。
藁をもすがる思いで、もう一度インストーラを起動、そして、Repairを実行してみました。
すると!!なんとうまくいったではありませんか!
マジカヨ!!


[AD]

↓Subversionの本ではこれが評判いいですね!

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

著者/訳者:Mike Mason

出版社:オーム社( 2007-04-21 )

定価:¥ 2,730

Amazon価格:¥ 2,730

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

ISBN-10 : 4274066800

ISBN-13 : 9784274066801


↓TortoiseSVNとRedmineの連携について書かれているようです!

オープンソースによるプロジェクト管理入門

著者/訳者:ファーエンドテクノロジー株式会社

出版社:秀和システム( 2010-02 )

定価:¥ 2,940

Amazon価格:¥ 2,940

単行本 ( 352 ページ )

ISBN-10 : 4798025208

ISBN-13 : 9784798025209