MOSA Multi-OS Software Artists

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

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

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

2006-06-20

目次

  • MOSA理事コラム          第2回    林 伸夫
  • 「Wonderful Server Life」      第7回  田畑 英和
  • 藤本裕之のプログラミング夜話 #93
  • 高橋真人の「プログラミング指南」  第91回
  • ニュース・解説                小池 邦人

MOSA理事コラム   第2回
          林 伸夫=インフォメーション・コンシェルジェ

MOSA会員の皆様、こんにちわ。

MOSA副会長の一人、林 伸夫です。
かつて、「日経パソコン」、「日経MAC」の編集長をしているころは、現在MOSAの中心メンバとして活躍されている皆様に新鮮な情報をたくさん提供していただき、とにかくホットで濃い記事を載せさせてもらっていました。あの頃は、本当にお世話になりました。
実は私事ですが、この4月で宮仕えを卒業、今度はメディアを離れ、ユーザの立場に転じて情報発信をしていこうと模索中です。これまではマックの話ばかりを記事にしていてはとやかく言われることもありましたが、今度はイチユーザー、開発者としてモノを言うわけですからかなり色濃くMacユーザー色を出していこうかと、いろいろ画策中です。
とは言うものの、人生行路をいきなり180度転換したり、あるいは非連続にQuantum Leapするのはことのほか難しく、結局は日経パソコン・オンライン(http://pc.nikkeibp.co.jp/)などにこれまでと同じ路線でコラムを持たせてもらうなど、元の木阿弥生活が続いてしまっています。本当だったら今ごろはセイシェル辺りでのんびり充電期間を取っているはずだったのですが。

■プログラミング、五十の手習い

しかしながら、せっかくフリーになり、自分でコントロールできる時間が増えたのですから、これまで表層だけかじってきたプログラミングの世界をじっくり探訪してみたいという強い欲求もむらむら湧いてもいます。これまでも雑誌編集部の仕事を支える小さなユーティリティをハイパーカードで作ったり、AppleScriptでワークフローの自動化スクリプトを作ったりしてきました。
WebObjectsを使った編集管理システムをすご腕のプログラマに作ってもらったこともありますが、本当はこんな仕組みを、一部でもいいから自分の手で作れるようになってみたい、と夢見ているのです。ああ、そういえば、あの編集管理システムはすごかった。一言で説明すると、1日200本以上の書評をデスク5人、編集長1人(それは私でした)でガシガシ作り上げるシステム。取り上げる書籍の選択から原稿の発注、筆者の進捗管理、そしてバージョン管理まで含んだ査読プロセスの管理まで。このシステムを作ってもらって以来、私はWebObjectsのとりこになってしまいました。

さて、大枠を作ってもらった上でなら、一部の機能を拡張するなどはある程度やれます。しかし、自分で設計したものを自分でまるまま作ってみたい。皆さんに使っていただけるウイジェットの一つくらい、是非、モノにしてみたいと五十の手習い、挑戦中です。
しかし、本当に年には勝てないもので、あの、長い長いObjective-CのCocoa APIが覚えられない。とにかくAPIリファレンスに戻っては、あれなんだっけ、と一つずつ探索、見つけ出してはコピーペーストの繰り返し。だれだっけか、「あんなもの指が覚えちゃってますよ」って言っておられる方がいらっしゃったのですが、本当にそんな人の100倍、いや1000倍も能率が悪いのです。もっと早く本気になっていれば良かったかなと、後悔する毎日です。

■Windows APIがCocoaからシームレスに扱える日

ところで、BootCampが出たことでアップルがどんな形でWindows環境をLeopardに統合していくか、興味津々の方も多いでしょう。今回はちょうどいい機会が私に与えられました。最近、私がBootCampについて考えていることをご紹介し、開発者の皆さんにとってこれがどんな意味があるのか、少しだけ、考察してみたいと思います。

先日は朝日新聞のコラムで「BootCampというソフトをアップルが出した結果、これからはMacがWindows機としても使える」といった趣旨の説明がされていました。う〜〜ん、全くの素人さんにこのような説明をされてしまっては、大いなる誤解がまん延してしまうのでは、と心配です。確かにBootCampでWindowsをインストールすれば、MacをWindows機として使うこともできますが、そんな使い方で本当にMacユーザーは幸せになるのでしょうか? 真っ白でツルツルの極上仕上げのWindowsマシンを使うのも楽しいかも知れません。でも、Macが素晴らしいのは、筐体の素晴らしさはもちろんですが、ゴージャスなMac OS Xが使えるところにあります。Mac OS Xが動いていないMacなんてMacではありません。

BootCampをアップルがリリースしたのには、Vista登場まではIntel Core Duo搭載のMacでWindowsは動かないと思われていた世間の目を覚ましてやろうという意図が感じられます。しかも、その仕掛けの中にはUSBやFireWire、そしてネットワークドライバもちゃんと用意できていますよということをこの目でみてもらおうという意味もあったでしょう。
それら要素技術が揃っているという技術デモを行った後、次に見せてくれるのはなにか? それは、Mac OS Xの中にどうマイグレーションさせてくるのかというマジックだと思えます。8月のWWDCでは、そのマジックがお披露目されることでしょう。
私はCocoaからダイレクトにWindows APIが呼べる世界、そんなMacらしいマイグレーションが実現するのではと想像しています。

既に商品化一歩手前まで行っているParallels Desktop for Macをみれば明らかなように、Mac OS Xを使いながら、その中でWindowsアプリが動くのは当たり前、Steve Jobs CEOはそんなことで満足する人ではありません。CocoaからWindows APIに直接アクセスできる仕掛けがLeopardには用意されるのではないかという気がしてなりません。

どうです? 面白くなってきたでしょ? MacのアプリでWindows特有の機能が組込めるのです。たとえば、動画再生ソフトでWindows Media DRMを扱える、Macの業務アプリにWindows向けにしか用意されていない個人認証デバイスが使えるとか、そんなアプリをCocoaで開発できるようになるかも知れません。これまでWindowsを用意しなければできなかったような、あれやこれやがMacのアプリケーションの中で使えるようになるのではないか、WindowsアプリのデータをMac側にドラッグ・アンド・ドロップできるようになるのでは、と見ています。

だって、そうじゃなきゃ、WWDCで発表する意味無いでしょ? ブートするときにMacかWinを切り替える機能が付きました、だけじゃたくさんの開発者の前で説明することって、全然ありませんよね。

林伸夫(はやし・のぶお)

■プロフィール
 1949年10月14日、山口県生まれ。1972年大阪大学基礎工学部制御工学科(現情報科学科)卒。富士通、スイングジャーナル社を経て、1982年日経マグロウヒル社(現日経BP社)入社。91年3月日経パソコン編集長、91年10月日経BPシステムラボ室長兼務、92年6月パソコン局開発長、92年10月より日経MAC編集長。98年3月パソコン局次長兼務。99年3月からパソコン局主席編集委員、2000年4月からブックレビュー社編集統括ディレクター兼務、2001年3月から編集委員室主席編集委員、2004年1月から編集委員室主任編集委員、2005年1月から編集委員室編集委員。2006年4月、フリーに。

 ユーザーのためのパソコン情報誌「日経パソコン」の創刊企画に参加し、同誌創刊からのメンバー。誌面を通じて、ビジネスマンがパソコンをどう使うかを啓蒙。特に同誌のソフト評価では「コンピューターに詳しくない」一般のビジネスマンにとって、パソコンはどうあるべきかというテーマを追及、「日経パソコン評価委員会チーフ」を務めてきた。連載記事、特集記事などを通じてパソコン通信、パソコン教育、デスクトップ・パブリッシング、マルチ・メディアなど、パソコンの新しい利用分野を積極的に紹介してきた。

93年4月には「創造的ビジネスのためのマッキントッシュ活用誌」を旗印に「日経MAC」創刊も手がけた。その後、編集委員室編集委員として、デジタル化、ネットワーク化が我々の社会生活をどう変えて行くのかを、一般ビジネスマンに向けて分かりやすい語り口で解説するなど、幅広く活躍。

 2006年4月、フリーに転身後、迷えるインターネットユーザー、Macユーザーに役立つ情報提供サービスを模索中。

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

 さて、今回はMac OS X Serverの初期設定の解説です。インストールが完了した後はシステムの基本的な設定を行うことになります。Mac OS Xでもインストール後に設定を行いますが、設定項目がかなり違いますし、できれば事前にどのような設定項目があるかを確認してから設定を行うのがよいでしょう。
 また、初期設定前の(ようするにインストール前ということなのですが)準備もあります。できることなら、これから構築するMac OS X ServerをDNSサーバに登録しておきましょう。これは、初期設定中にDNSサーバを参照して自動的に設定が行われる項目があるからです。さらにサービスによってはDNSの逆引きを必要とするものもありますので、DNSサーバに登録するさいには正引きと逆引きの両方を設定しておくのがよいでしょう。つまり、サーバに割り当てるIPアドレスとホスト名をあらかじめ決めておく必要があるということです。
 自由に設定ができるDNSサーバがない場合は、これから構築するMac OS X ServerでDNSサービスを稼働させるという方法もあります。

□リモートで初期設定
 初期設定の方法ですが、インストール方法が何通りかあったように、初期設定の方法も何通りかあります。リモートインストールの方法を解説してきましたので初期設定もまずリモートで実行する方法を解説することにします。

リモートインストールには「サーバアシスタント」を使用しましたが、初期設定をリモートで行う場合にも「サーバアシスタント」を使用します。ネットワーク上にインストールが完了したマシンがある場合「サーバアシスタント」で検出して、リモートで初期設定を実行することができます。これを行うには「サーバアシスタント」を起動すると「ようこそ」画面が表示されますが、ここで「リモートサーバを設定する」を選択します。
 そうすると、画面上にインストールが完了して初期設定待ちのマシンの一覧が表示されます。インストール時に表示された一覧ではMACアドレスが表示されましたが、初期設定の一覧ではMACアドレスが表示されずIPアドレスからマシンを特定することになります。インストールのときと同様に1台のマシンを設定する場合にはリストには1台しかマシンが表示されませんが、複数台のマシンを設定する場合にはリストからマシンを特定する必要があります。
 マシンを特定する方法ですが、リモートインストールを行っているのであればすでにMACアドレスを調べてあるはずですので、あとはarpコマンドを使って特定のMACアドレスに対応するIPアドレスを調べることができます。arpコマンドを”-a”オプション付きで実行すればネットワーク上のマシンのMACアドレスとIPアドレスの対応表を表示することができますので、ここからMACアドレスを手がかりにして、初期設定を行うマシンのIPアドレスを調べることができます。

・arpコマンドの実行例
% arp -a

 マシンが特定できれば、次に特定したマシンの「適用」チェックボックスを選択しパスワードを入力します。パスワードはリモートインストールのときと同様に、マシンのシリアル番号の最初の8桁を使用します。

さて、これでいよいよ初期設定が開始できます。Mac OS X Serverの初期設定では次のような項目の設定を行います。

・言語
 サーバのデフォルトの言語を英語、日本語、フランス語、ドイツ語から選択します。
・キーボード
 言語で日本語を選択した場合には「ことえり」が選択可能になります。
・シリアル番号
 Mac OS X Server(つまりソフトウェア)のシリアル番号を入力します。もしサイトライセンスを使用しているのであれば「登録名」と「登録組織名」も入力します。
・管理者アカウント
 「名前(long name)」、「ユーザ名(short name)」、「パスワード」を入力して、管理者アカウントを作成します。ここで入力したパスワードはrootユーザのパスワードとしても使用されます。Mac OS X Serverの場合はデフォルトでrootユーザが有効になります。初期設定を行ったあとは管理者アカウントとrootユーザのパスワードは個別に管理されます。
・ネットワーク名
 「ホスト名」、「コンピュータ名」、「ローカルホスト名」を設定します。ただしホスト名は冒頭で解説したようにDNSサーバを参照して動的に設定が行われますので、直接入力するのはコンピュータ名とローカルホスト名の2つです。コンピュータ名は「システム環境設定」の「共有」パネルで設定するコンピュータ名と同じものです。ローカルホスト名はいわゆるBonjourで使用される名前になります。

さて、今回はまずは初期設定の前半部分を解説しました。次回は引き続き初期設定について解説したいと思います。

つづく

藤本裕之のプログラミング夜話 #93

 えっと、実を言うと今回からマウスカーソルの形を臨機応変、その場の状況によって変える仕掛けについて書こうと思っていたのだが、仕事をしててちょっとぎょっとするような問題に行き当たったのでそれについて書いてみたい。一応テストプログラムも書いて、バグレポートをAppleに送っちゃったんだけど、モサ伝タカハシ編集長の助けもあって、これが全然バグではなく、ちゃんとドキュメントされているMac OS Xの仕様であることを知ってまたびっくり。で、大変勝手ながらこの場をお借りしてバグでないものにバグレポ送ったことをアップルの人とかに謝りつつ(読んでないって)、この問題の存在を広く世に知らしめ、ひいては世界の平和と人類の幸福に寄与したいと、こう思う次第である(ちょっと嘘入ったけど)。

まず、症状をご説明しよう。どこでもいいがテキトーにフォルダを作り、その中に「ふじもと.txt」というファイルを作る。ここ、大事ね、「ふじもと. txt」。「こいけ.txt」ぢゃダメ……ってこたないか、症状が出ない(あ、だからダメなのはふじもとの方が。ややこしいな)。このファイルの存在をCocoa を使って確認しようとすると、「こいけ.txt」は「あるよ」と正しい答えが出るんだけど、「ふじもと.txt」は「おめぇに食わせるタンメンはねぇ!」と言われてしまうんである。そんな馬鹿な、と思うでしょ。おれもそう思うがそんな馬鹿なんである。
 なんぢゃこりゃあああ、とにわかに松田優作化して、なにが起こってるのか確かめるためにテストプログラムを書いてみた。あとでMOSAのサイトにでも置いてダウンロードできるようにしてもらうつもりだが、以下のようなことを行うプログラムである。

(1)セーブパネルを表示してユーザ(ちうかテスタというか)にファイル名とその保存位置を尋ねる。プログラムでは「ブ」で始まるファイル名をつけてみてくれ、と書いてあるが、上に書いたようにひらがなの「ふじもと」でも同じことが起きる。ユーザが指定した場所に指定した名前でテキストファイルを作成する。つまり「ふじもと」と入力されれば「ふじもと.txt」を作るわけね。なおこの時、このファイル名に対して、

BOOL result = [filename isEqualToString: filename];

とやれば、「こいけ」だろうが「ふじもと」だろうが結果はYESであります。当たり前だけどさ。

(2)NSFileManager の directoryContentsAtPath: というメソッドを使って、今作ったファイルを含むディレクトリの一覧を取る。この結果は NSArrayで戻されるので、それを全部ユーザに開陳する。この一覧にはちゃんと「ふじもと.txt」が入ってるのを見せるわけ。種も仕掛けもございません、と。

(3)さぁお立ち会い。NSArray のメソッド、containsObject: を使って「ふじもと.txt」の存在をチェックする。パラメータとして渡す文字列は(1)でファイルを作ったときに使ったフルパスから lastPathComponent で切ってきて、

BOOL exist = [filesArray containsObject: filename];

これを実行すると、小池さんはいるけど俺はいなくなってしまうのだ(いや、漢字で書けばいるんだけど)。ちなみに一覧のNSArray を以下のように変更可能にして、上のコードを実行する直前にfilenameを(ダブるのを承知で)足してやると、なぜかそれは見つかってYESが返ってくる。

NSMutableArray* alterArray = [fileArray mutableCopy];
[alterArray addObject: filename];
BOOL exist = [alterArray containsObject: filename];  // これはいつもYES

ということはこれは単に文字コードの問題ではないわけで、いったいどーなっておるのだ、と……、いったい全体なにが原因なんだろうか? ちうかどういう風にバグったらこんなことが起こるのか、それすら皆目見当がつかないではないの。な、オレならずともバグレポ出したくなるでしょう?
 そういうわけで次回はこの問題の種明かし編。いや、知ってた人にとってはなぁにを今ごろこんなことで騒いでるんだという噺家も知れないが……落語をやってどうする、話かも知れないが、上のプログラムを実行してみてオレと同様クビをひねったあなたには驚愕の事実がいま明るみに(ちとワイドショウ入ったな)!
(2006_06_15)
【編集部より】
・テストプログラムはこちら
http://www.mosa.gr.jp/htmdocs/article/document/COMPAREBUG.zip

高橋真人の「プログラミング指南」第91回

UNIXとしてのMac OS X

〜Perlについて(37)〜

 こんにちは、高橋真人です。早速始めましょう。
 では、前回保留にしておいたmap、grep、sortの利用によるデータ加工の部分を説明しますが、その前に、map、grep、sortの各演算子がリストを順に受け渡す処理においてどのような役割を持つかを、以前説明した内容に基づいて整理してみます。

sort: 指定したルールに基づき、リストを並べ替える
grep: 指定した条件に合う要素だけを抽出する
map: リストの各要素に対して指定した処理を加える

 これらの役割を今回のスクリプトの中でどのように利用しているかを見ていきます。まず、処理の全体構造は以下のようになっています。(<>は、あとで説明に使うための番号付けです)

map {<<1>>} sort {<<2>>} map {<<3>>} grep {<<4>>} map {<<5>>} <>;

 既に説明しましたように、このスクリプトでは、ファイルから読み込んだ各行を要素とするリストを構築し、後ろから順に各演算子に渡していきます。以下、(後ろから)順に演算子のブロックの処理を解説します。

<<5>>:
{ [(split /\t/)] }


 この処理は極めて単純です。以前にも紹介したsplit演算子がリストの要素(元のファイルでは各行に該当)をタブ文字を区切りとしてさらにリストに分解しています。式の周囲を角カッコで囲んでいるのは連載の89回で説明した無名配列の生成です。(丸カッコは、あってもなくても同じです)
 これによって、リストの各要素はそれぞれが無名配列となります。元のデータを基準に考えますと、0番めの「管理ID」から、6番めの「使わない」までがそれぞれ無名配列中の要素として収まるわけです。

<<4>>:
{ $_->[6] =~ /False/ }

 前段の<<5>>で無名配列に納められた要素は、grepのブロック中では$_で表されるリファレンス経由で参照されることになります。よって、$_->[6]という式によって6番めの「使わない」が表されることになります。この書き方は、今回のスクリプトにおいてキモとなる部分ですので、連載89回をしっかり理解して充分に慣れてください。
 grepは「要素の抽出」ですから、ここでは「使わない」がFalseであるもののみを拾い出しています。裏を返せば「使わない」がTrueのものを捨てているわけです。
 ところで、ここではTrueかFalseかを見るのに正規表現を使っていますが、これは当時の私の技量の「問題点」でして(笑)、今の私でしたら、$_->[6]ne ‘True’ と書いていたことでしょう。正規表現よりも単純な文字列比較の方がずっと高速ですから、必要以上に正規表現を使うのは処理を遅くします。ちなみに、$_->[6] eq ‘False’ でもよいのですが、万が一TrueもFalseも入っていないケース(例えば空欄など)も想定すると、「Trueでない」を判断した方がベターかと思います。

<<3>>:
{
     $_->[6] = substr($_->[0], 0, 2);
     $_->[7] = $_->[5];
     $_->[7] =~ tr/亜-熙//d;
     if (length($_->[7]) < 1) {
          $_->[8] = 1;
     } elsif ($_->[7] =~ /A-Z/) {
          $_->[8] = 2;
     } else {
          $_->[8] = 3;
     }
     $_ ;
}


 上から順に解説します。
 前段で使って役割を終えた6番めの要素に0番めの要素の先頭2文字を入れています。このブロック全体が、次の段のsortを行うための準備をしているのですが、私が仕事で実際に扱ったデータでは管理IDは二重構造になっていまして、先頭2文字での並べ替えが必要な理由があったのです(たぶん・笑)。
 次に、新たに7番めの要素を追加します。ここにはまず5番目の要素をコピーし、次に漢字をすべて取り去ります。
 その結果、文字列の長さが0になった場合(つまり、すべてが漢字だったということ)は、8番めの要素(新規追加)に1を、全角アルファベットを含んでいる場合には2を、それ以外は3を入れています。
 7番目の要素に関しては、この処理のあとは一切使用していないので、本来ならここはローカル変数として処理すべきでしょうね。

<<2>>:
{
     if ($a->[6] ne $b->[6]) {
          $a->[6] cmp $b->[6];
     } elsif ($a->[8] ne $b->[8]) {
          $a->[8] <=> $b->[8];
     } elsif ($a->[8] == 1 and $b->[8] == 1) {
          $a->[2] cmp $b->[2];
     } else {
          $a->[5] cmp $b->[5];
     }
}


 既に説明したように、前段の仕込みの結果に基づいて各要素をソートします。以前にも説明したかと思いますが、各要素の比較において、文字列の場合にはcmp演算子、数値の場合には<=>演算子を使っています。(連載86回参照)

 さて、残るは最後のクライマックス(大げさ・笑)となるファイルへの書き出しですが、既に行数も大幅にオーバーしておりますので、次回をご期待ください。

ニュース・解説

 今週の解説担当:小池邦人

● Carbon ドキュメント & サンプル & SDK ナビゲーション(2006/06/16)

【開発環境】

ビルゲイツ氏が引退を表明したというニュースが大々的に流れている今日この頃ですが、皆さん、WWDCの参加登録手続きは完了していますか? 早期割引の締め切りは6月22となっていますので、参加予定の方は御注意ください。MOSAでも引き続きWWDCツアー参加者を募集していますので、こちらもお早めに!

http://www.mosa.gr.jp/htmdocs/article/event-wwdc2006tour.php

以前紹介した、インテルCPUの仮想化技術を使いMac OS Xで別OS(LinuxやWindows XPなど)を起動することができる「Parallels Desktop for Mac」の正式版がついに発表になりました。今から一ヶ月以内に購入すれば、$79.99が$49.99に割引きされるようです。WWDCにおいて、Apple社が自社製の同技術を発表するのを恐れているような値付け作戦ですね(笑)。それはさておき、Parallels Desktop自体は大変良くできていて面白いソフトのようです。興味のある方はぜひお試しください。

http://www.parallels.com/en/download/mac

【テクニカルドキュメント】

前回から6月16日の期間中、Apple社のDocumentationサイトには新規ドキュメントがひとつも登録されませんでした。ただし、デベロッパ向け読み物は2つ登録されています。「Empowering Your Carbon Application with the VoiceOver Accessibility Interface」は、珍しくCarbonネタです(笑)。
VoiceOver AccessibilityインターフェースをCarbonアプリケーションで活用するための詳しい解説ですが、VoiceOver自体が日本語に対応していない現実がありますので、今ひとつやる気が起きないのも事実です。「Developing Games on Mac OS X Using Third-Party Game Engines」については、前号の木下さんの記事も参照してください。なにやら最近、Apple社はゲーム関連に力を入れてますね。何かあるのでしょうか?

「Empowering Your Carbon Application with the VoiceOver Accessibility
Interface」(読み物)

http://developer.apple.com/ue/accessibility/voiceoverincarbon.html

「Developing Games on Mac OS X Using Third-Party Game Engines」(読み物)

http://developer.apple.com/games/gameenginesonmac.html

前回から6月16日の期間中、新規テクニカルノートと新規テクニカルQ&Aはひとつも登録されませんでした。そろそろWWDCも近いですし、何やら新製品発表間近の噂も流れていますので、関連技術者が忙しいのでしょう…。

http://developer.apple.com/technicalnotes/index-rev-date.html

http://developer.apple.com/technicalqas/index-rev-date.html

【サンプルソースコード】

前回から6月16日期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが2つ登録されました。どちらも初めての登録です。
「Test64BitMultiprec」では、64Bit整数値などの演算方法について幾つかのアプローチを紹介しています。

「Test64BitMultiprec」(AltiVec関連)(初版)
「RecentItems」(Carbon関連)(初版)

http://developer.apple.com/samplecode/index-rev-date.html

【デベロップメント SDK】

前回から6月16日の期間中、Apple社のSDKサイトには新しいSDKがひとつも登録されませんでした。

http://developer.apple.com/sdk/

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

 

MOSA Developer News   略称[MOSADeN=モサ伝]
      記事投稿受付 http://www.mosa.gr.jp/topics/mdn-toukou.html
Apple、Mac OSは米国アップルコンピュータ社の登録商標です。またそのほかの各製品名等はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA  http://www.mosa.gr.jp/
Copyright (C)2006 MOSA. All rights reserved.