お待ちかねの鶴薗さんの連載は、今日と明日で半分ずつお届けします。Webサイトにはすべてアップされていますので、すぐに御覧になりたい方はそれを御覧下さい。それから、PDFも用意してくれていますので、そちらもいいですね。実は、鶴薗さんの原稿のPDFは、鶴園さん自身が用意してくれているものなんです。それから、読者の谷津さんからJBuilder情報をいただきましたのでそちらも記事にしました。
あと、Knowledgeg Base関連で記事はいろいろあるのですが、今日は今年最後の講義で大学に行っておりましたので、執筆は明日に行います。講義の1つはプログラミングを教えているのですが、まったくの素人向けでもありますので、講義自体は簡単なものです。ま、だけど、いかにもな練習問題は解かせていますが、レポートは悩まないと行けないような問題にしましたところ、ちょっとハードルを高くし過ぎたみたいでした(笑)。今年からの講義なので、来年はちょっとレベルを調整しないといけません…。たとえば、forでループをくむということは分かっても、forの入れ子ループということにはなかなか頭が行かないみたいです。講義では説明しているのですが、ある問題を解くのに、その入れ子をしないといけないということがあるのだけど、その事実をだまっていてさせてみたら、やっぱりできない子はできないです…というかまったくそういうことに頭が向かなかったというのです。それから、たとえば演算子とか基本はしつこくやったけど、「counter++;」だけを書けばいいということもまったく思い付かなかったと言っていました。forステートメントはちゃんと書いているのですけどね。「forの3つ目のセクションと同じことでしょ」と言っても、唸っていました。もちろん、何も言わずともできるやつもいるのですが、なんというかプログラムって独特の思考が必要なのはやっぱりそうなんでしょうね。これらの質問を投げかけた学生は、練習問題とかそこそこちゃんとできていたんですよね。ただ、やはり数学的な思考がかけているのは確かでした。やっぱり文系の学生は、算数レベルでも論理的に考えるのは厳しいみたいです。だけど、今時理系も文系もないとは思うのですが…来年は、少し工夫をしたいと考えています。
(新居雅行 msyk@mdonline.jp)
デジタルハリウッドは、「MacOS Xにおける最新Java開発環境」と題したセミナーを、2002年2月1日(金)19:00〜21:00、東京・御茶の水のデジタルハリウッド東京校で開催する。アップルコンピュータとボーランドが協力している。定員は120名で受講は無料だ。Mac OS Xの概略や、Mac OS Xの実行環境、そして、開発環境としてProject BuilderやBorland JBuilderのデモなどを行う予定である。クロスプラットフォームの開発環境に興味のある人や、Javaプログラマ、開発者を対象としている。問い合わせはメールアドレス(tokyo@dhw.co.jp)まで。
関連リンク:デジタルハリウッド
カテゴリ:イベント
「Cocoaはやっぱり!出張版」の「7. UNIXコマンドの実行」の記事をすべてまとめたPDFファイルは、以下のリンクからダウンロードできます。
◇鶴薗賢吾のCocoaはやっぱり!出張版》7. UNIXコマンドの実行
http://mdonline.jp/figs/02/006/MDOnline%202002.01.pdf
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
――――今回のテーマ
今回のテーマは、UNIXコマンドの実行です。AppleのサイトにあるサンプルプログラムのMoriarityの説明をしながら、CocoaアプリケーションからUNIXコマンドを実行する方法について解説を行っていきます。このサンプルは、Appleサイト内の以下のURLにありますので、まずはダウンロードしておいてください。
◇Moriarity
http://developer.apple.com/samplecode/Sample_Code/Cocoa/Moriarity.htm
この解説は、以下の環境を前提にしていますので、ご確認ください。
// ソース:MoriarityController.h/@interface MoriarityController
@interface MoriarityController : NSObject <TaskWrapperController>
{
IBOutlet id findTextField;
IBOutlet id resultsTextField;
: 省略
BOOL findRunning; // 現在実行中
TaskWrapper *searchTask; // タスクラッパー
}
- (IBAction) sleuth : (id) sender; // アクションメソッド
: 省略
@end
// ソース:TaskWrapper.h/@protocol TaskWrapperController
@protocol TaskWrapperController
- (void) appendOutput : (NSString *) output; // 結果の出力
- (void) processStarted; // 初期化
- (void) processFinished; // 終了処理
@end
// ソース:TaskWrapper.h/@protocol TaskWrapperController
@interface TaskWrapper : NSObject
{
NSTask *task; // 実行するコマンド
id <TaskWrapperController> controller; // コントローラ
NSArray *arguments; // コマンドのパラメータ
}
- (id) initWithController : (id <TaskWrapperController>) controller
arguments : (NSArray *) args; // 初期化
- (void) startProcess; // コマンド実行開始
- (void) stopProcess; // コマンド実行中止
@end
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
――――MoriarityControllerの詳細
では、詳細の説明に入っていきます。ユーザーがSleuthボタンをクリックすると実行されるsleuth : メソッドからです。
// ソース:MoriarityController.m/メソッド:sleuth
- (IBAction) sleuth : (id) sender {
if ( findRunning ) { // コマンド実行中
[ searchTask stopProcess ]; // 実行中止
: 省略
}
else { // コマンド未実行時
: 省略
searchTask = [ [ TaskWrapper alloc ]
initWithController : self
arguments : [ NSArray arrayWithObjects :
@"/usr/bin/locate",
[ findTextField stringValue ],
nil ] ]; // 初期化
[ searchTask startProcess ]; // コマンド実行
}
}
// ソース:MoriarityController.m/メソッド:processStarted
- (void) processStarted {
findRunning = YES;
[ resultsTextField setString : @"" ]; // テキストフィールドのクリア
[ sleuthButton setTitle : @"Stop" ]; // Sleuthボタンのタイトル変更
}
// ソース:MoriarityController.m/メソッド:appendOutput
- (void) appendOutput : (NSString *) output {
[ [ resultsTextField textStorage ]
appendAttributedString : [ [ [ NSAttributedString alloc ]
initWithString : output ] autorelease ] ];
[ self performSelector : @selector(scrollToVisible:)
withObject : nil
afterDelay : 0.0 ];
}
- (void) scrollToVisible : (id) ignore {
[ resultsTextField scrollRangeToVisible :
NSMakeRange( [ [ resultsTextField string ] length ], 0 ) ];
}
// ソース:MoriarityController.m/メソッド:processFinished
- (void) processFinished {
findRunning = NO;
[ sleuthButton setTitle : @"Sleuth" ]; // Sleuthボタンのタイトル変更
}
// ソース:MoriarityController.m/メソッド:initWithController
- (id) initWithController : (id <TaskWrapperController>) cont
arguments : (NSArray *) args {
self = [ super init ]; // スーパークラスによる初期化
controller = cont; // コントローラを記憶
arguments = [ args retain ];
// コマンドとコマンドに渡すパラメータを記憶
return self;
}
// ソース:MoriarityController.m/メソッド:startProcess
- (void) startProcess {
[ controller processStarted ]; // コントローラの初期化
// 実行準備
task = [ [ NSTask alloc ] init ]; // 生成と初期化
[ task setStandardOutput : [ NSPipe pipe ] ]; // 標準出力変更
[ task setStandardError : [ task standardOutput ] ]; // 標準エラー変更
[ task setLaunchPath : [ arguments objectAtIndex : 0 ] ];
// コマンド設定
[ task setArguments : [ arguments subarrayWithRange :
NSMakeRange( 1, ([arguments count] - 1) ) ] ];
// パラメータ設定
// 標準出力からのデータを受け取るための通知設定
[ [ NSNotificationCenter defaultCenter ]
addObserver : self
selector : @selector(getData:)
name : NSFileHandleReadCompletionNotification
object : [ [ task standardOutput ] fileHandleForReading ] ];
[ [ [ task standardOutput ] fileHandleForReading ]
readInBackgroundAndNotify ];
[ task launch ]; // コマンド実行
}
関連リンク:Cocoaはやっぱり!
カテゴリ:Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
BorlandのJava開発ツールJBuilder 6では正式にMac OS Xに対応しているが、米Borlandのサイトでは、このバージョンのフリー版であるJBuilder 6 Personalが公開され、ダウンロードができるようになっている。Mac OS X版があり、ダウンロードし圧縮を解答すると、InstallAnywhereによるインストーラで、対話式にインストールができる。インストーラでは日本語の表示も出てくるので、JBuilder側では日本語対応についてはある程度は考慮しているということであろう。ただし、Mac OS X 10.1.2でも、Swingの動作の問題は日本語環境では存在するので、まだ、実用になるとは言えない部分もあるが、現状でも少し我慢をすれば、日本語をソースに入力したりができることが、MDOnline読者の谷津さんより教えていただいた。
JBuilderの初期状態では日本語の文字列をソースに打ち込んでも文字化けしてしまう。そこで、ToolsメニューのEditor Optionsを選択し、ダイアログボックスでDisplayのタブをクリックすると、そこでフォントを選択できる。システムに存在するすべてのフォントが出てくるわけではないのだが、その中には日本語の表示が可能な「Osaka-mono」を指定する。そうすれば、ソースでいちおう日本語が表示される。エンコーディングの設定は
/Developer/Applications/JBuilder6/JBuilder.framework/bin/jdk.config
というファイル記述できる。以下のような箇所があるので、vmparamの行の#を抜いてコメントをはずし、最後の部分をEUC_JPなどと記述すれば良い。なお、このファイルのこの部分は、シフトJISコードで記載されている。
# +-----------------------------------------------------+
# | |
# | デフォルトのファイルエンコーディングで問題がある |
# | 場合は、次の行のコメントを外してください。 |
# | |
# | |
# +-----------------------------------------------------+
#vmparam -Dfile.encoding=ISO8859_1
ただ、こうすれば、まったく問題がないわけではなく、やはり時々文字が消えたり化けたりはするようだ。また、動作が重たくなる問題もあるので、JBuilderをスムーズに使えるというところまでは行かないだろうけど、試用してみる分にはある程度は利用できるだろう。
さて、そのJBuilderであるが、Windowsでのおなじみの動作と特に大きな違いはないようだ。ただし、メニューは最初から、Mac OS Xの形式となっているため、メニューバーにメニューが出てくる。JBuilderのウインドウにはツールバーが並ぶがそちらにはメニューは出てこない。なお、メニューや画面メッセージなどは英語である。Personal版なので、各種ウィザードも利用できないものとなっている。また、同様にMac OS Xのパッケージ生成についても機能的には見られない。
JBuilder自体は、/Developer/Applicationsディレクトリにインストールされる。そして、JBuilderのアプリケーションはパッケージではあるが、そのアプリケーションは単なるローンチャのようで、実体は同じフォルダにあるフレームワークとしてまとめられているようである。
いずれにしても、Pure Java系のプログラマには待ち望まれるツールであるだけに、早く日本語で問題なく利用できるようになって、日本語版の出荷を実現してもらいたいところだ。
関連リンク:JBuilder 6 Personal
カテゴリ:Java, 開発ツールその他
――――この原稿は、MacWIRE様に掲載していただくための原稿で、MDOnline読者様向けにはすでに周知の事実も含まれていますが、あらかじめご了承ください。
Macintosh関連の開発情報や技術情報をお届けしている有償の日刊メールマガジン「Macintosh Developer Online(MDOnline)」で、2002年1月第3週にお届けした内容のダイジェストを紹介しよう。
まずは、Appleが2002年度の第一四半期の業績を発表した。営業での大きな赤字はないものの、経費を大きく削っての収支であることが伺える内容であった。
2002/1/17●Appleが2002年度第一四半期の決算を報告、経費を削り利益は黒字を達成
WebObjectsの最新版Ver.5.1が到着したのでさっそく使ってみた。また、アップルコンピュータで、WebObjects 5.1についての説明会が開催され、EJBを使った開発がどのようなものかが実際に示され、それを詳しく記事でお届けした。
2002/1/18●WebObjects 5.1に関する説明会が開催、EJBでの実際の開発をデモ
2002/1/16●WebObjects 5.1にさっそくアップデート、諸問題はとりあえず解決している模様
2002/1/19●WebObjects 5.1のアップデータはADCメンバサイトでダウンロード可能
Apple関連ソフトウエアのアップデート等もいくつかった。AirMac 2.0.1のリリース、Mac SO Xの北欧・アジア系言語リソースのアップデート、そして、Windows版のAirMac BaseStationの管理ツール、Mac OS X Server 10.1.2へのアップデータが登場した。
2002/1/18●AirMac 2.0.1がリリース、旧タイプのベースステーションのファームウエアも更新
2002/1/18●Mac OS Xの北欧系言語、韓国語、中国語の言語機能をソフトウエア・アップデートで配付
2002/1/18●KBase》Mac OS X Serverの10.1.2のアップデータが公開
2002/1/16●KBase》Windows向けのAirMac Base Stationの管理ツールが公開
Metrowerks社からは、同社のMac OS向けに開発されてきているアプリケーションフレームワークPowerPlantが、Adobe SystemsではWindows向けのアプリケーション開発でも使われていることが発表された。つまり、Windows向けのPowerPlantがあり、これを利用して、Mac OSとWindowsの両対応を効率的に実現しているということである。Metrowerksはこうしたテクノロジーのライセンス提供できることをアピールするものだ。
2002/1/15●Adobe SystemsはWindows向けのPowerPlantを使ってMac/Win両対応
連載コーナの「Java Watch on the X」では、前の週から引き続いて、Mac OS XでのPure Javaアプリケーションを、パッケージ形式で構築するときにさまざまな設定を説明している。実行に必要なクラスパスやメインクラスの設定、ライブラリを追加して実行したい場合の対処法などを説明した。
2002/1/15●Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(3)実行時に必要な情報
2002/1/17●Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(訂正)クラスパス
2002/1/17●Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(4)ライブラリについて
2002/1/17●Java Watch on the X》4 - アプリケーションをパッケージとしてビルドする(5)その他の実行時の情報
★MDOnlineは、ローカスが発行するオンライン情報メディアで、日刊のメールマガジンを中心に、Macintoshの開発情報や技術情報をお届けしている。過去の記事はWebサイトですべて参照できるようになっている。Mac OS Xの話題を積極的に取り上げるとともに、Knowledge Baseの公開情報を要約するなどAppleからの情報をフォローし、開発ツールやシステム関連ユーティリティなどのサードパーティ情報も扱う。購読料は有償で、年間8,000円、半年5,000円、1か月1,000円(消費税込みの基準価格、支払い方法により金額が増減する)。購読はWebページから申し込むことができ、郵便振替、クレジットカード(QQQシステム)、WebMoneyやBitCash(プリペイドカードやクレジットカードでのオンライン購入)での支払いに対応している。
Macintosh Developer Online
カテゴリ:MDOnline Digest