12月, 2011

執筆ツールとしてWikiServerを使ってみる

投稿者:アールケー開発 この記事は 2011年12月25日 に公開されました。

ここ最近、どうも執筆ツールとしてテキストエディタがしっくりこない気持ちになっていました。新しいテキストエディタや他のソフトがないものかと検討してみたのですが、意外にWikiが良いかもしれないと思えてきました。

私の仕事は、主にソフトウェアの開発と書籍や連載記事の執筆です。他にも講演やセミナーで講師をするときなどは、その資料の作成や原稿の執筆などもあります。ソフトウェアの開発で使用するツールも常にもっと良いものがないかと定期的に探してみては、新しいツールを試してみるということを行っていますが、今日は執筆に使用するツールを検討してみました。

まずは、テキストエディタ。なんだかんだで同じエディタをずっと使っているのですが、今日、読み終えた仕事術に関する書籍により、複数のマシンで同期がとれないのはどうにも効率が悪いということに気がつきました。私のメインの執筆マシンはMac Proなのですが、全体の3割程度はMac Book Airで書いています。そうすると、この2台の間だけでも同期が必要で、以前は、ファイルサーバーにファイルを置いて、それを編集するという方法をとってきました。しかし、この方法は、同期はとれるのですが、編集履歴が残らないので、間違った操作をしたときに、復活できないという弱点があります。気をつけていても、疲れていると操作ミスをしてしまい、誤ってファイルごと削除してしまい、書き直しになったこともあります。

次に行った方法はSubversionのリポジトリで管理するという方法です。これはなかなか快適だったのですが、ファイル名に日本語を使ったときに、文字によっては誤作動するという問題が起きました。この問題はMac版だけで起きる問題で、ファイルシステム上でのUnicodeの合成文字などの扱いに起因しているようです。ファイル名の付け方を気をつければ良いのですが、あまりこういった制限は設けたくないというのが本音です。

次に試したのが、ECMを使う方法です。エンタープライズで使われるものを選択したのですが、これも最初は良かったのですが、日本語のプレビューが文字化けするという問題や検索で日本語のヒット率が悪いなどの問題が起きました。そして、フォルダやファイルといったファイルシステムの考え方が色濃く出ているシステムだったので、ドキュメント中心で使うには、どうも使い勝手が悪いように思えてきました。

そして、現在、試しているのがWikiを使った方法です。Wikiを使うと自動的にバージョン管理してくれるので、間違った操作をしたときも戻せる上、保存と同時に同期されている点も扱いやすいです。ただ、弱点がないわけでもなく、特にテキストの整形関連の機能は皆無なので、テキストエディタとの併用は続いています。関連する資料などをリンクできる点などはテキストファイルベースでやっていたときよりも便利です。ファイルを添付できることも便利ですが、書籍の原稿で使う画像ファイルの場合は大量になるので、Wikiには向かないと思いました。原稿で使う画像ファイルは当面はSubversionのリポジトリ管理にしようと思っています。

▲ページトップへ戻る

MOSADeN ONLINE 第24回の記事を入稿しました

投稿者:アールケー開発 この記事は 2011年12月25日 に公開されました。

MOSADeN ONLINE 第24回の記事を入稿しました。今回は、iOSでキャプチャしている映像の中で変化があったときに、それを知るための方法についてです。27日にMOSA会員限定で公開されます。iOS 5.0ではこんなに簡単に検出できるのかと私自身は驚愕しました。

http://www.mosa.gr.jp/mosaden/

▲ページトップへ戻る

アドレスブックの保存先を明確にしたい

投稿者:アールケー開発 この記事は 2011年12月17日 に公開されました。

アドレスブックをiCloudと統合したときに、iCloudに統合されたデータのバックアップもかねて、iCloudに保存されない、ローカルのMac内に保存されたデータを明確にしたいと思い、その方法を探してみました。

以前であれば、アドレスブックのグループ一覧が表示される領域に、「このMac内」と「iCloud」というように分かれていたはずなのですが、新しいMacをセットアップしてみるとそれが見当たらず、iCloudと統合後はすべてiCloudに保存されるようになっていました。

「すべての連絡先」のみ表示されている

「すべての連絡先」のみ表示されている

探してみると、次のようにすれば表示されることがわかりました。

  1. アドレスブックを起動して、「アドレスブック」メニューから「環境設定」を選択する
  2. 「一般」タブをクリックして表示する
  3. 「デフォルトアカウント」を「この Mac 内」に変更する
「このMac内」と「iCloud」が分かれて表示されている

「このMac内」と「iCloud」が分かれて表示されている

▲ページトップへ戻る

MOSADeN Online 第23回の記事をアップしました

投稿者:アールケー開発 この記事は 2011年12月15日 に公開されました。

お知らせです。MOSADeN Onlineの第23回の記事をアップしました。16時にMOSA会員限定で公開になります。今回は、iOSデバイスから外部ディスプレイを使用する方法についてです。iOS 5ではミラーリングだけではなく、アプリから独自のビューコントローラを外部ディスプレイに表示することもでき、Apple TVを使えばAir Play越しもできます。

MOSADen Online はこちら

▲ページトップへ戻る

The Problem if you don’t know the forward class declaration of the Objective-C

投稿者:アールケー開発 この記事は 2011年12月1日 に公開されました。

I had received the question about the forward class declaration of the Objective-C and this is the answer.

If you want to declare the forward class declaration, you can write following:

@class MyObject;

The member variable of the Objective-C class needs the class name is declared before the variable is appeared. In this case, you can write the “#import” in the header file and read the declarations. For example, this code:

#import "Cocoa/Cocoa.h"

#import "MyObject.h"

@interface MyObjectB : NSObject {

MyObject    *_myObject;

}

@end

This code could be error when you write the following code in the “MyObject.h” file.

#import "Cocoa/Cocoa.h"

#import "MyObjectB.h"

@interface MyObject : NSObject {

MyObjectB   *_object;

}

@end

Following errors will be occurred when you complie abobe code.

Complie MyObject.m

Expected specifier-qualifer-list before "MyObject"

Compile MyObjectB.m

Expected specifier-qualifier-list before "MyObjectB"

The meaning of these errors are:

  • The declaration of the “MyObject” is not appeared in compling “MyObject.m” file (The “MyObject.m” file imports the “MyObject.h” file).
  • The declaration of the “MyObjectB” is not appeared in compling “MyObject.b” file (The “MyObjectB.m” file imports the “MyObjectB.h” file)

Why the complier says the declration is not appeared? The declration is imported with “#import”.

You can know the reason by thinking how the preprocessor works. The preprocessor does following.

“MyObject.h” file

  1. Imports “Cocoa/Cocoa.h” file.
  2. Imports “MyObjectB.h” file (The “MyObject” class is not declared at this point)
  3. Try to imports the “MyObject.h” file at the line “#import “MyObject.h”", but the file is imported only one time when you use the “#import” so the line “#import “MyObject.h”" will be ignored.
  4. The line “MyObject *_objct;” is appered but the class declration of the “MyObject” class is not appered so the compiler will stop.

“MyObjectB.h” file

  1. Imports “Cocoa/Cocoa.h” file.
  2. Imports “MyObject.h” file (The “MyObjectB” class is not declared at this point)
  3. Try to imports the “MyObjectB.h” file at the line “#import “MyObjectB.h”", but the file is imported only one time when you use the “#import” so the line “#import “MyObjectB.h”" will be ignored.
  4. The line “MyObjectB *_objct;” is appered but the class declration of the “MyObjectB” class is not appered so the compiler will stop.

To avoid this problem, you can use the “@class”. Above code can be written following.

“MyObject.h” file

#import "Cocoa/Cocoa.h"

//#import "MyObjectB.h"

@class MyObjectB;

@interface MyObject : NSObject {

MyObjectB   *_object;

}

@end

“MyObjectB.h” file

#import "Cocoa/Cocoa.h"

//#import "MyObject.h"

@class MyObject;

@interface MyObjectB : NSObject {

MyObject    *_myObject;

}

@end

There is the foward protocol declration:

@protocol ProtocolName;

Either you write the protocol declation before or after the class declation, the compiler reports error. You can avoid this problem by using the foward protocol declaration.

The sample code is available.

RecursiveImport

▲ページトップへ戻る