MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第330号

2009-02-10

目次

  • 「Wonderful Server Life」    第86回   田畑 英和
  • 小池邦人のCarbon視点でiPhone探求
  • ターミナルの向こうから      第41回  海上 忍 

「Wonderful Server Life」  第86回  田畑 英和

〜「Podcast プロデューサー」編〜

 Podcast プロデューサー編の第2回目です。前回はPodcastの概要を解説し次のような手順で制作を行うことを確認しました。

 収録 > エンコード > 公開

 もっとも収録前には企画などの作業が発生しますし、それなりに露出するにはプロモーション活動も別途必要になってきます。また複雑な編集作業が必要になる場合もあるでしょうが、ここではPodcast制作のためにLeopard Serverで登場した「Podcast プロデューサー」に的を絞って解説していきます。
 まずは収録をしないことには話が始まりませんが、Podcastには大きく分けて音声のみの場合と、ビデオの場合があります。またパソコンの画面をキャプチャして制作する場合もありますがこちらはScreencastとも呼ばれています。

◇まずは収録
 ビデオカメラやテープレコーダ(最近はあまり見かけませんが)を使って収録してから、パソコンにデータを取り込むといったやり方でもかまわないのですが、Podcast プロデューサーを使用する場合はあらかじめ収録用のソフトが用意されています。
 Leopardであれば「アプリケーション」>「ユーティリティ」フォルダに「Podcast キャプチャ」という名前のソフトがインストールされています。このソフトを使って音声、ビデオ、画面キャプチャのPodcast用コンテンツを収録することができます。Macにマイクやカメラが内蔵されていればそれらを利用することもできます。
 「Podcast キャプチャ」はLeopard Serverにもインストールされていますが、このソフトは収録したデータをネットワーク経由でサーバにアップロードする機能がありますので、収録にはクライアントのMac OS Xが利用できます。

 ここまで読んで「Podcastはやらないんだけれどもキャプチャ用のソフトとして使えるかな」と思った方もいるのではないでしょうか。ところがそんなに甘くはありません。起動してみるとすぐ分かるのですが、実際に使用するにはまず認証が求められるのです。

・「Podcast キャプチャ」の起動画面(認証)
http://www.htabata.com/img/MXS105/podcast/Capture_01.png

 ここでやみくもにローカルアカウントで認証しようとしてもダメですし、そもそもサーバのアドレスも指定する必要があります。認証画面にも説明が表示されますが、ここで指定するサーバのアドレスとはPodcast プロデューサーが動作しているMac OS X Serverのアドレスになります。つまり「Podcast キャプチャ」を使用するには、あらかじめサーバ側でPodcast プロデューサーの準備をしておく必要があるということが分かります。

◇やっぱりサーバの設定から
 というわけで、ここは早く収録したいという焦る気持ちを抑えてまずはサーバ側の準備からみていきましょう。「サーバ管理」を使ってPodcast プロデューサーを設定していきます。デフォルトの状態でもサービスを開始することはできるのですが、これでは正しく動作しません。デフォルトのままサービスを開始するとエラーログにxgridに関するメッセージが出力されていることが分かります。
 ここで初めてXgridという言葉を聞く方は「???」となるわけですが、Xgridとは分散コンピューティングのためのサービスです。ネットワーク上の複数のコンピュータで分散して負荷のかかる処理を行う場合に使用します。
 実はPodcast プロデューサーはエンコードのよな負荷のかかる処理をXgridの仕組みを利用することで、ネットワーク上のコンピュータで分散して実行することができるのです。なんだかなかなかPodcastにたどり着けませんが、Xgirdの準備をしないことにはPodcast プロデューサーは使えませんので、まずはXgridの設定から始めて行く事になります。

 Xgridを使うのなら処理用のコンピュータを複数用意しなければいけないかというと必ずしもそうではありません。もちろん本当に負荷を分散させるのであれば用意したほうがよいのですが、とりあえず試しに使ってみるというのであれば1台のサーバをPodcast プロデューサー兼Xgrid用のサーバとして使用することができます。では今回はここまでとなりますが、次回はXgridの具体的
な設定方法について解説します。

◇書籍紹介
 前回に引き続き書籍を1冊紹介しておきましょう。第84回の連載でApple技術者認定資格についてご紹介したときに参考文献(洋書)の紹介もしましたがその日本語版がいよいよ出版されます。今回出版されるのはMac OS X Serverについて解説したアップル認定公式トレーニングシリーズの1冊です。タイトルに第2版とついていますが、これはLeopard Serverを解説した内容になって
います。同じタイトルで第2版がついていない書籍もありますがこちらはTigerServerの内容になっていますので購入するさいには間違えないように注意してください。待望の日本語版が出版されることで認定資格を取得する環境も徐々にではありますが整いつつあります。

「Mac OS X Server Essentials 第2版」
http://www.borndigital.co.jp/book/detail.php?id=160
次回へつづく

小池邦人のCarbon視点でiPhone探求(2009/02/06)

〜 まずはモデルクラスを移植する 〜

今回は、「しんぶんし 3」でImageFileクラスとして定義したモデルクラス(メインデータ構造の定義)を、iPhone用アプリケーションの「Symmetry」へと移植する作業を行いたいと思います。

モデルクラスの話へ入る前に、前回積み残した話題をひとつだけお話します。iPhoneアプリケーションのローカライズですが、日本で開発したものであっても、少なくとも「英語」だけには対応しておきたいところです(Symmetryはそうする予定)。当然、日本語環境でしか意味を持たないアプリ(そんなに多くはない)つまり日本でしか販売を考えていないものなら日本語のみでOKですが、ワールドワイドでの販売を考えている場合には、英語ローカラーズに対応しておけば、それ以外の国での販売にもそこそこ対応できます。当然、フランス語、スペイン語、イタリア語、ドイツ語、ポルトガル語、 ロシア語程度がローカライズできれば、間違いなく販売数増加に貢献するでしょう。

もし、外国人の友達がいれば、そうした人達にちょっとローカライズ作業を手伝ってもらうのが良策ですね(笑)。翻訳が正しいかどうか分からない状況下では、自動翻訳ソフトや無料Webサービスを使うのはやめた方が良いでしょう。みっともない翻訳を掲載すれば、そのアプリケーションの評判まで落としかねません。例えば、アプリケーションの内容解説やユーザインターフェース回り
の簡単な文字列については、有料(わりと低価格)で翻訳サービスを提供しているサイトが幾つかあるようです。筆者は利用したことがないのですが、そうした翻訳サービスをうまく活用することもアリでしょう。ちなみに、以前に「DYS: Translations」というサイトを利用している方の話を聞いたことがあります。

http://www.dystranslations.com/

さて「しんぶんし3」でのモデルクラス ですが、 ImageFileという名称で、以下の様に定義(ImageFile.h)していました。このクラスのインスタンス(メンバー)変数は、すべてプロパティ宣言されています。

#import 
#import 

@interface ImageFile : NSObject 
{
   NSString          *path;
   NSString          *type;
   CGRect            srt;
   unsigned int      flag;
   int               kind;
   int               para;
}

@property(retain)NSString          *path;
@property(retain)NSString          *type;
@property(assign)CGRect            srt;
@property(assign)unsigned int      flag;
@property(assign)int               kind;
@property(assign)int               para;

@end


実際の実装( ImageFile.m)では、各プロパティは@synthesizeディレクティブで宣言しておきます。これにより、プロパティのgetterメソッドとsetterメソッドを用意する必要がなくなります(コンパイラが適切に用意してくれる)。ちなみに、readonlyプロパティの場合はgetterメソッドのみが用意されます。

#import "ImageFile.h"

@implementation ImageFile

@synthesize path,type,srt,flag,kind,para;

// ここに必要なメソッドを実装する!

@end


#importの内容などを書き替えれば、このままの状態でiPhone用ソースコードとして利用してもほとんど問題ありませんが、先を見越してiPhone用に少しだけ改造しておきます。クラス名は分かり易くModelと変えます。よってクラス定義ファイルはModel.hとなります。まずは#import ですが、は不必要となりだけでOKです。Mac用Cocoaアプリケーションでは、CGRect構造体がQuartz.hに定義されているためにimportが必要でしたが、iPhone用アプリで使うUIKitでは、CoreGraphicsフレームワークが常用されるので、特別呼び込む必要がないわけです。また、NSUIntegerはunsigned int、NSIntegerはintと定義されています(現状)。

#import 

@interface Model : NSObject  
{
   NSString      *md_name;
   NSString      *md_type;
   UIImage       *md_image;    
   CGRect        md_rt;
   NSUInteger    md_flag;
   NSInteger     md_kind;
   NSInteger     md_para;
}

@property(nonatomic,retain)NSString    *md_name;
@property(nonatomic,retain)NSString    *md_type;
@property(nonatomic,retain)UIImage     *md_image;
@property(nonatomic,assign)CGRect      md_rt;
@property(nonatomic,assign)NSUInteger  md_flag;
@property(nonatomic,assign)NSInteger   md_para;
@property(nonatomic,assign)NSInteger   md_kind;

- (id)initWithName:(NSString *)name type:(NSString *)type;

@end

プロパティの属性としてnonatomicが宣言されていますが、これはプロパティへのアクセスに対してマルチスレッド環境を想定していないことを意味しています。その代わりに高速なアクセスが約束されます。将来的には、幾つかのプロパティについてnonatomic宣言を外すかもしれませんが、現状はこの状態としておきます。以下が、実際のクラス実装となるModel.mです。とりあえず、
初期化メソッドとしてinitWithName:type:をひとつだけ用意してみました(そのまま使うかどうかは?です)。NSCodingプロトコルに準拠した、encodeWithCoder:とinitWithCoder:の2つのメソッドについては、モデルのアーカイブ化を行う時に実際に実装したいと思います。

#import "Model.h"

@implementation Model

@synthesize md_name,md_type,md_image;
@synthesize md_rt,md_flag,md_kind,md_para;

- (id)initWithName:(NSString *)name type:(NSString *)type
{
   if( self=[super init] )
   {
     self.md_name=name;
     self.md_type=type;
   }
   return self;
}

- (void)dealloc
{
   [md_name release];
   [md_type release];
   [md_image release]; 
   [super dealloc];
}

- (void)encodeWithCoder:(NSCoder *)coder  // アーカイブ・エンコード用
{
   // 後ほど実装する
}

- (id)initWithCoder:(NSCoder *)coder      // アーカイブ・デコード用
{
   if( self=[super init] )
   {
       // 後ほど実装する
   }
   return self;
}

@end


Model.mで注目すべき記述は以下の箇所です。

 self.md_name=name;
 self.md_type=type;


ドット演算子を使って代入していますので、値の代入時にプロパティの属性で定義したretainをsetterメソッドが実行します。これを、md_name=name;と記述すると(記述は可能)md_nameに対してretainは行われず、メッセージ(引数)として渡されたnameがreleaseされると同時に、モデルオブジェクトに蓄えたmd_nameもメモリーから解放されてしまいます。くれぐれも御注意ください。

次回は、作成したモデルオブジェクトを管理し、アーカイブとしてファイルへ保存やメモリーへの読み込みを行うモデルコントローラを用意してみます。これは、Mac用のCocoaアプリケーションであれば「NSDocument」が行う仕事と同じです。

ターミナルの向こうから      第41回  海上 忍

〜 いま敢えて学ぶTerminalのイロハ(8) 〜

・よくお世話になる「ページャ」
 数多あるUNIXコマンドのなかでも特に利用頻度が高いのが「ページャ」です。ページャとは、テキストを画面に出力する機能を備えたコマンドで、「more」と「less」がその代表的存在といえます。
 ページャでは、ファイルの形で存在するプレインテキストのほか、他のコマンドから「パイプ」を経由して受け取ったテキストデータを表示することができます。ソースコードや「README」といったテキストファイルの閲覧はもちろん、「ls」(ディレクトリの内容をリストするコマンド) など大量のテキストを出力するコマンドの結果をバッファリングできるという点が、ページャの
利用頻度が高い理由の1つです。
 その「ls」を例に、ページャの使い方を説明してみましょう。ファイルが大量にあるディレクトリで「ls」を実行すると、画面がスクロールしてしまいますが、lsの結果をページャに引き渡す(パイプ)ことにより、スクロールアウトさせることなく目を通すことができます。lsコマンドの結果(「-l」オプションはファイルの詳細情報を出力する)をページャの「less」にパイプする例は、以下のとおりです。

- - - - -
$ ls -l | less
- - - - -


・moreとless、どちらがいいか
 Mac OS Xに標準装備されているページャは、「more」と「less」の2つです。どちらもページャとしての基本機能を備えていますが、後発の「less」のほうが多機能です。ちなみに、命名は「less is more」とのことで、謙遜した表現になっています。
 moreとlessの決定的な違いは、バックスクロール機能の有無にあります
(moreは非対応)。また、テキストデータを最後まで表示したあと、moreは自動終了してしまうのに対し、lessはユーザが終了の操作(「q」を入力)を行わないかぎり終了しません。データの先頭/末尾へのジャンプも、lessのみに実装された機能です。
 つまり、lessはmoreの上位互換機能を備えています。moreはUNIX草創期からあるコマンドで、その存在と機能を理解しておく必要はありますが、実際にページャとして利用するのはlessで十分です。オンラインマニュアルを表示するコマンド「man」など、いくつかのコマンドは表示/検索をページャに依存しますが、Mac OS Xなど多くのUNIX系OSではlessがデフォルトで設定されています。

・more/lessの使い方

 moreとlessは、テキストファイルを引数として与えるか、パイプで他のコマンドの実行結果を引き渡すかの2通りで実行されます。前者の場合、「less README」などと実行すれば、画面にテキストが表示され、lessの内部コマンド入力待ちの状態となります。
 必ず覚えておきたい内部コマンドは、「SPACE」と「q」の2つです。SPACEを何度か押してページを読み進め、用が済めば「q」(quit)で終了する、という流れが利用の典型パターンです。他の内部コマンドについては、表を参照してください。
 検索機能も、ぜひ覚えておきましょう。使い方は、第37回で紹介した「man」と同じ(manがlessの機能を利用しているので当然です)で、[/]キーを押し画面左下に表示された「/」に続けてキーワードを入力、[enter]キーを押して検索を開始します。ヒットした箇所は反転表示されるので、[n]キーを押して次のヒット位置へと移動し、目的の情報にたどり着きます。

▼▼▼
SPACE、C-v   1画面分下方へスクロール
d   半画面分下方へスクロール
enter、C-n  1行分下方へスクロール
b、M-v  1画面分上方へスクロール
u   半画面分下方へスクロール(lessのみ)
y、C-p  1行分上方へスクロール(lessのみ)
g   データの先頭へ移動(lessのみ)
G   データの末尾へ移動(lessのみ)
/文字列 指定した文字列をカーソル以降で検索
?文字列 指定した文字列をカーソル以前で検索
<   先頭行に移動
 最終行に移動
n   文字列の再検索
h   ヘルプを表示
q   終了
▲▲▲


・日本語テキストを表示する
 Mac OS X Leopardに標準装備の「less」は、UTF-8に対応したバージョン(v394)が採用されているため、日本語テキストを表示することが可能です。以下のコマンドをシェルで直接実行するか、bashの初期化ファイル(「~/.bashrc」など)に記述しておけば、LESSCHARSET環境変数に「utf-8」が定義され、UTF-8エンコードのテキストファイルを適切に表示できます。

- - - - -
$ export LESSCHARSET=utf-8
- - - - -

 しかし、標準装備のlessには、文字コード自動識別機能が装備されていません。EUCやS-JISでエンコードされた日本語テキストを表示する場合には、文字コードを自動識別するためのパッチが当てられたlessを追加インストールすることになります。
 そこでお勧めしたいのが「lv」です。操作方法(内部コマンド)はlessと同じで、かつ文字コード自動識別機能が装備されています。ソースコードの入手とインストールの手順は、以下のとおりです。

○LV Home Page
http://www.ff.iij4u.or.jp/~nrt/lv/index.html

- - - - -
$ curl -O http://www.ff.iij4u.or.jp/~nrt/freeware/lv451.tar.gz
$ tar xzf lv451.tar.gz
$ cd lv451/build
$ ../src/configure; make
$ sudo make install
- - - - -


 これでlvのインストールは完了ですが、出力する文字コードをターミナルの設定にあわせることと、デフォルトのページャとして使用するための設定が必要です。以下に示すコマンドを、~/.bashrcなどのシェル初期化ファイルに記述しておきましょう。次回ターミナルを起動したときから、「less」で「lv」の機能を利用できるようになります。

- - - - -
export LV='-z -la -Ou8'
export PAGER=lv
alias less=/usr/local/bin/lv
- - - - -

◇MOSAからのお知らせと編集後記は割愛します◇

 

 MOSA Developer News   略称[MOSADeN=モサ伝]
        配信停止 mailto:mosaden-ml@mosa.gr.jp
 記事内容に関するご意見 mailto:mosaden-toukou@mosa.gr.jp
      記事投稿受付 http://www.mosa.gr.jp/?page_id=850
Apple、Mac OSは米国アップル社の登録商標です。またそのほかの各製品名等
はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA  http://www.mosa.gr.jp/
Copyright (C)2009 MOSA. All rights reserved.