RealBasic University

このコラムはStone Table Softwareのオーナーであり、またREALbasic Developerの編集者でもあるMarc Zeedar氏により書かれたものを、著者の許可を得て翻訳したものです。この翻訳はHREM Researchにより提供されています。この日本語版へのご意見はRBU-Jまでご連絡下さい。

URL: http://www.applelinks.com/rbu/015/
INDEXに戻る

個人用のプログラミング

もしあなたがこの数週間の我々の最初の REALbasic のプロジェクトを勉強してくれば、Macのプログラミングがどんなに簡単であるかだけでなく、その力の恩恵もまた少し判っただろうと思います。

今や、あなたはREALbasic のプログラマーですが、REALbasic であなたは何をしようとしているのでしょうか? 誰もがシェアウェアを書くことに興味を持っている訳ではありませんし、プログラミングの真の専門家になろうと思っている訳ではないでしょう。何人かの人はゲーム、あるいは、彼らの毎日の仕事で手助けになる簡単なツールをただ単に作りたいだけでしょう。

驚くかもしれませんが、世界中で80%のソフトウェアは販売されてはいません。そうなのです:あなたが買う包装箱に入った shrinkwrap や CD はソフトウェア世界のほんの一部なのです。多くのソフトウェアは社内で使うために作られているのです:すなはち、ひとつの会社の特有の状況のための特別なアプリケーションなのです。(Y2Kに対する騒動を覚えていますか?本当の問題は市販のソフトウェアではなく、日付に問題のある社内用のアプリケーションだったのです。)

我々は同様の状況にあると思います。もしあなたが繰り返しのある仕事をしているならば、REALbasicがあなたの人生を容易にするとうことが判るでしょう。私も「社内用」タイプのプログラムを幾つも作りました。それらは見かけが悪く、完成されていない、荒削りのものですが、それらはちゃんと機能しました。そして、それらは私に多くの時間を節約させてくれました。あなた方を勇気付けるために、それらの幾つか紹介します。それによりREALbasic がどのようにあなたの人生の一部となるかが判ると思います。

例1:Pantone 変換

私は印刷所でのグラフィックデザイナーとして働いています。デザインでは、私達はPantoneという会社によってつくられたカラー表示システムを使います。Pantoneの色は国際的な標準になっています:すなわち、もしあなたがニューヨークやナイロビで Pantone 485 を指定するならば、あなたは同じ鮮明な赤を手に入れることができるでしょう。

しかしながら、フルカラーの印刷には、多くはスポットカラー(特別な混同インク)は使わずに、プロセスインク(シアン、深紅色、黄色、および黒色、もしくはCMYK)を使います。四つのプロセスインクを様々なパーセンテージに組み合わせることによって、あなたはどんな色でも作ることができます。しかしながら、あなたがPantoneのスポットカラーに合わせようとするときには、この色の合成の正確さは変化します。

Pantoneはそのカスタムカラーに対するプロセスカラーの最も良い割合を計算しています、そしてその計算値をカラーガイドに印刷しています。残念なことに、私の職場にあるカラーガイドはパーセントの数値ではなく、任意に前もって決められたパーセントに対応する文字コードを使用しています。例えば、o = 0%、i = 34%、そしてz = 100%というように。プロセスカラーは四つで、四つの文字コードは四つの色の組み合わせを指示します(例、"ozit"はC=34、M=100、Y=0そしてK=76)。

そう、"ozit"を翻訳することは十分に楽しい(?)ことです。それらの文字を数値に変換するためのテーブルが本の最初にあります。しかし、Pantoneはそのあふれる知恵で、世界で使われている標準的なCMYKの順序とは別のものを発明しました:彼らのテーブルはYMCKの順序になっているのです。私の全てのMac ソフトウェアはCMYKの順序の数値を必要としますので、私はPantoneのガイドの中の比率を求めようとすると非常に混乱したものです。一つの色の数値を求めるためだけに数分掛かりました。

いずれにせよ、だいぶ前に、私はこの馬鹿げたシステムと奮闘しているときに、突然REALbasicに思い当たりました。(これはREALbasicの始まりでした。)私はそれと葛藤し、4文字の並びを入力して、それをそれぞれの正しいパーセントに変換するプログラムを20分以内で完成しました。それは私が馴染んでいる CMYK の順序でそれらの色を表示します、そしてそれからは Pantone の変換チャートで混乱することはなくなりました。非常にスマートです!

(「おや、PhotoshopはPantoneカラーからプロセスカラーに自動的に変換しますよ!」と考えているスマートな諸君、その通りです。しかしながら、私がこのプログラムを書いた時には、異なったプログラムは異なった色の組み合わせを用いており、カラー調整を困難にしていました。今日、全てのプログラムはPantone社の指針に従っているようで、殆どこのプログラムのお世話にはなりません。でも、プログラムはまだ問題なく働きます。)

例2:Z/Web

長い間、私は自分のウェブサイトを運営しようとしましたが、あまりうまくいきませんでした。私がしようとしたことはサイトを定期的に更新することでした - 変化のないサイトほど退屈なものはありません。しかし、どのような内容を日々作り出すことができるでしょうか?私は遂にあるアイディアを思いつき、1999年の8月にZ/Webが誕生したのです。

これは本質的に今ではウェブログ(短い、頻繁な投稿を時間の逆順に並べたもの)として知られているものです。私が選んだ主題は本と映画のミニ論評でした。(それから、サッカーを追加しました。)これにより、私が望んだように、殆ど毎日新しいことを投稿することが可能となりました。そして、たとえ私のオンラインジャーナルに誰も興味をもたなかったとしても、それは私にとっていい記録になります。(私は先週観た映画を思い出せないことが嫌いなのですが、私はそれをウェブ上で確かめることができます ;-)

初め、Z/Webは一週間に2,3個の投稿だけでした。そして手で最新の情報に更新することは簡単でした。(私は速いのが好きなのでGoliveを起動するために10分間も待つのは我慢ができません-- 私はBBEditを使って手入力していました。)しかし、古いものが追加されていくにつれて、全てのものを見失わないようにするのは読者と同様に私にとっても徐々に厄介になってきました。サイトが必要としていることは、記録を簡単に読むための方法です:アルファベット順のリスト、月ごとのリスト、全ての完全な投稿のリストなどです。

ウェブログや既存のソフトウェアについて何も知らずに、私は自然に私の良き友、REALbasic、に助けを求めました。それにどれ位の時間が掛かるかは全く判りませんでした -- 私はいろいろと試みました。そして、ついに私の Z/Web の全ての更新のデータベースとして働く自分用のプログラムをREALbasicで作成しました。それにより投稿の編集や追加が可能で、さらにサイトへのアップロードを容易にするために、1つのボタンを押すことにより全てのものをHTMLに変換することができます。


[クリックすれば拡大されます]

実にスマートな点は、そのプログラムは全ての記録のページを自動的につくり出し、そして全ての間のリンクを維持するということです。言わせてもらえれば、それは本当に巧妙なものです。

まず最初に、それは時間の逆順に並べた今月の投稿を含んでいるメインのページ-- index.html --を作ります。もし現在の月の投稿が20以内であれば、以前の月の投稿を含めて表示し、月の最初で少しの項目しかないときにもホームページが貧弱に見えないようにしています。

実際には、メインページは Z/Webによって完全に作られているのではありません:それは前もって作られたテンプレートのページを使い、そしてそれに新しいリストを併合しています。このようにすることによって、私のプログラムを再コンパイルをしないで(テンプレートを変更することによって)、ページのヘッダーやフッターを簡単に変更することができます。

また、Z/Web は全ての投稿へのリンクを含む記録のページ-- news.html --も作成します。記録それ自体は幾つかのフォーマットで作成されます。それらはアルファベット順のリストで、それぞれのアルファベットの文字に対して1つのHTMLのページがあります。ページの最初にそれぞれの項目がタイトルで表示されているテーブルを含んでいますので、あなたは希望する項目へ素早くジャンプすることができます。

さらに、記録に含まれているのは一ヶ月の投稿が1つのファイルになっている各月ごとのページおよび投稿する全てを含む完全なリストです。後者は完全な投稿ではなく、単にそのタイトルで、アルファベット順のファイルの中に保存された全ての投稿にリンクしています。

これら全ては複雑にみえますが、ユーザーの見地からすれば、"publish" ボタンをクリックするだけでそれらのすべてのページが数分の間に作成されます。ほとんどのページは変化しませんので、アップロードしなければならないのは新しい月のリスト、index.html、news.html、completelist.html とアルファベット順の変化のあったファイルだけです。(別のFTPプログラムを使う代わりに、やがてはZ/Webが変化したページを自動的にアップロードするようにしようと考えています。)

では、この処理どのように実行されるのでしょうか。このプログラムはデータベースの中の全ての項目を保存しているデータ構造を持っています。私はタイトルや日付などによってソートするための複数のルーチンを作りました。作る必要のあるそれぞれのタイプのページのために別々のルーチンがあります。"Publish" 機能はそれらを一巡して、それぞれのページを文字列変数内に作成します。投稿はそのページの種類に適切なようにソートされ、それからページに1つずつ付け加えられます。投稿それ自体はいつも同じ形式ですので、私は投稿内容をパラメーターとして受け入れ、HTMLとしてフォーマットされた文字列を出力するルーチンを作りました。最後に、HTMLページがディスクに保存されます。

例3: DVD DB

私は映画が大好きです、そして友人がいつも借りたいと思っているDVDをかなり持っています。友人と私の両方にとって楽なように、私は自分のウェブサイトに私のDVDのリストを置いています。(注意:これは大きなテーブルで、読込むには少々時間が掛かります。)

このリストをアップデートするのは複雑であるように見えますが、私にとっては簡単です:私はここでもデータベースの維持を助け、そしてHTMLを作成するプログラムをREALbasicで作りました。最も困難な部分はそのデータベースに付け加えるための情報を見つけることでした。

DVD DBは1つのデータベースからHTML形式でいろんな種類のリストを作り出すことが可能です。DVD DBで他と異なるところは、データベースのためのフォーマットとしてXMLを使ったことです。これは私が自分用のXMLインタープリタを作らなければならなかったことを意味します:それは、興味ある挑戦でした。私のXMLインタープリタは基本的なもので、すべてXMLの機能を持ってはいませんが、他のプログラムでも十分に使えると思います。

XML データファイルから、プログラムは様々な範疇によって分類された映画の複数の HTML ファイルを作成します。

例4: RBU

私はこのコラムのためにHTMLをどのように作ろうかと考えました。答えはまたREALbasicでした。私はRBU Glossary と RBU Converterの2つのプログラムを作りました。

RBU Glossary は RBU 用語集のぺージを管理します:それぞれの用語は単純なテキストファイルのデータベースの項目です。RBU Glossaryは自動的それぞれの定義を適切に作成し、そしてリンクされた目次をそのページの最初に付け加えたHTMLファイルを作り出します。単純かつ巧妙で、ほんの数時間でできました(多分、デバッグのためにもう数時間かかったでしょう)。

RBU Converterはもう少し複雑なプログラムです。私はボールドとイタリック体などの幾つかの基本的なHTMLタグを付け加えながらZ-Write もしくは BBEeditでコラムの基本のテキストを書きます。私はまた <head> や <TT> のような幾つかの特殊なタグも付け加えます。それらはRBU Converterによってサイズと色の属性をもった複雑なFONTタグには転換されます。

現実のプログラムはむしろうんざりするようなものです。でも、ここにそのテキストへの作用を示します。始めのイメージは処理前で、次のイメージはHTMLに完全に変換された後のものです。


ところで、HTML の手作業のタグ入力は完全な手入力ではありません:私は、自分が使う多くの共通する HTML コマンドに対するボタンを持つ次のような One Click パレットを作りました。

見かけは極度によくありませんが、それは正しく機能します。OneClickはMac OS Xの下では動作しません(もちろん、ネイティブアプリとして)ので、私はすぐにそれらのボタンをREALbasicプログラムとして作り直さなければならなくなるでしょう。

RBU Converterに関して変わったことは、私が以前のプログラムでの経験から学んだことです。私はRBU Converterをより順応性のあるものにしました:それは基本の構成としてのテンプレートを使うだけでなく、HTML の始めと終わりのタグは別のテキストのファイルになっています。これはRBUの見え方をRBU Converterを再コンパイルせずに変えることができるということを意味しています。

結論

私は自分自身を吹聴するためではなく、REALbasicのようなツールがどれほど有益であるかということを示すために上のプログラム例を詳しく述べました。

私のシェアウェアを出している経験から、最初にプログラムを作ったときとほとんど同じ時間をその改良やプログラムを公表するための仕事(説明書やウェブのページ、新聞発表などに作成)に費やすということが判りました。個人用のプログラムのいい点は、それらは自分で使うものなので、バグがあっても、不完全でも、また見かけが悪くてもいいということです。それは多くの時間を節約します -- 上のちょっとしたプログラムはその後の多くの時間を節約することによって十分に採算が取れています。

RBU からの調査: あなたはREALbasic をどのような種類のプログラムに作るのに使っていますか?あなたはどのような種類のものを作りたいのでしょうか?

次週

我々はこの種の即席のプログラミングの例としてFast FingerとCount Emailsという2つ のプログラムを作ります。

Letters

今週はREALbasicに含まれるものとよく似たヘルプシステムを作りたいと思っているPhilip Mobleyさんから手紙を頂きました。彼は次のように書いています:

私はこのためにはを本当に簡単な方法があると思います、しかし、私はまだそれを理解していないし、これを行なうための解説も見つけることができていません。

私は"RB Library Reference"と本当にそっくりな動きをする参照ウィンドウを作りたいのです。小さな三角形、データの複数の"ページ"、そして他のページにリンクしているキーワード...基本的に全部 =)

そですね、これが単純だというあなたの考えは正しくありません!これは出来ないことはありませんが、かなり複雑です。

あなたがしようとしていることは私がZ-Writeのヘルプシステムで行なったことといくぶん似通っています。それは多くのステップが必要です。

1.まず最初に、あなたはデータ(テキスト)を保存するフォーマットを決めなければなりません。例えば、Z-Writeでは、ヘルプファイルはアプリケーションのリソースフォークに保存された通常のHTMLのファイルです。これはZ-WriteがHTMLをどのように翻訳するのかを知る必要があるということを意味します。これはあなたの目的には必要のないことでしょう。しかし、複数のフォーマットでヘルプファイルを作り直す必要がないので、私にとってはこれは最適だったのです。

テキストファイルはどのようなセクションがあるか(もし、セクションのリスト中にフォルダーが欲しいのならば)、テキストの実際のページ、そしてどの項目が他のページへリンクしているか(そして、それらがリンクしているセクション)を示す何らかの手段が必要です。

あなたは、例えば、自分の特別なファイルフォーマットを決める、あるいはちょうどHTMLのようにファイルをマークする特別なコードをもつ単なるテキストファイルを使うこともできるでしょう。例えば、フォルダー名を*F foldername*、そしてデータのページを*P pagename*として表すことができるでしょう。*L linkname*は他のページへのリンクを表すでしょう。それはデータがロードされたときに、特別なフォーマットを解釈し、適切にデータを読込むあなたのプログラムしだいです。

2.次の問題は実際のインターフェースです。ここであなたはREALbasicを使ってウィンドウを作り、そして必要なコントロールをそれに付け加える必要があります。例えば、あなたはフォルダーとページのリストを表示する階層構造のリストボックスおよびテキストを表示する大きな文字入力欄が必要になるでしょう。検索機能や「次へ・戻る」の矢印などの他のコントルールを追加してもいいでしょう。

3.最後に、あなたがしなければならない3つ目は、これを実現するための全てのコードを書くことです。あなたはテキストファイルを解剖(翻訳)して、ヘルプシステムのデータ構造に変換する初期化ルーチンを書かなければなりません。その後、ページのリストをリストボックスにロードします。それから、ユーザーがリストボックス中の名前をクリックした時、実際にデータの適切なページを表示(文字入力欄にロード)します。最後に、ユーザーがページ内のリンクされたキーワードをクリックしたときに、それを処理するルーチンを用意しなければなりません。

私が言ったように、これは容易なことではありません:これは洗練された、複雑なインターフェイスです。良いニュースは、もし、あなたがヘルプモジュールをカプセル化できれば、あなたは同じシステムを多くのプログラムで再利用することができるということです。これは私が自分のヘルプシステムで行なったことです:私は自分の全てのプログラムで同じモジュールを使っています。(実際、私はもっとポータブルにするためにそれを書き直している途中です。そして、私は今後のRBU プロジェクトの1つにこれを含めるつもりです。)

RBU の新しい機能

このコラムとそして過去の全てのRBUコラムの上部に、特別な"Print this article"リンクがあるのに気が付きましたか。これは印刷用にフォーマットされたコラムへのリンクです。もし、あなたが自分のハードディスクに保存したければ、ウェブブラウザーの"Save as web archive"使うか、あるいはJim Walker氏の PrintToPDF を使い、PDFファイルとして印刷することができます。


RBU-Jの通知サービス!コラムが発表されるたびに日本語版REALbasic Universityのお知らせの emailがあなたに届きます。登録・削除は ここ から。

INDEXに戻る