Sausalitoで遊ぼう ! ☆Cobalt Appliance Programming 入門☆ 2002 年 9 月 8 日 NTT   DoCoMo Kansai,Inc. Masahiro Watanabe Cobalt Users Conference2002/Summer
Windows マシン、 Unix マシンと Cobalt の違い  Cobalt ServerはUNIXの省スペース性と、Webブラウザを使ったGUIでの簡易な操作を兼ね備えたServer Applianceである。 可( GUI ) 可( CUI ) 不可 遠隔メンテナンス GUI ( LCD コンソールおよび Web ブラウザ) CUI (コマンドラインインターフェース) GUI (ウィンドウシステム) 操作の手段 不要( LCD コンソールあり) 不要(接続可) 要 ディスプレイおよびキーボード Cobalt 一般的な Unix Windows
Sausalitoとはなにか  Sausalito とは、 Cobalt Server のソフトウェアに一貫した操作性を与えるために開発された、新アーキテクチャである。  サーバ管理用デーモン( CCE) 経由でアクセス Perl にてアクセス システムリソースへのアクセス 表示されるメッセージを String ファイルとして独立させ、 String ファイルを言語毎に用意することにより対応(ソースは各国語版同一) 各国版毎に Perl のソースを書き換えてリリース 国際版対応 Sausalito 内の独自認証を利用(ユーザ権限ごとにメニュー構成を変更することが可能) HTTP の BASIC 認証を利用 管理画面の認証方法 XML を使って自動生成されたメニューと、 PHP の UIFC ライブラリを利用して作成した画面から構成 画面ごとに Perl の CGI で作成 管理画面の構成 Sausalito 従来の Cobalt
Sausalitoの特長  1)柔軟な機能拡張が可能 XML を用いたメニュー自動生成処理( Navigation Manager )により、メニューツリーへのメニュー追加が他の既存のメニューに影響を与えずに可能 2)各国語版パッチリリースに要する期間の短縮および信頼性の向上 各国語版間でソースが共通であるため、シンプルなバージョン管理が可能 3)ユーザインターフェースの Look & Feel の統一性の保持が可能 ユーザインターフェース用 API ( UIFC )が公開されているため、サードパーティのアプリケーションにおいても Cobalt オリジナル機能と同一の Look & Feel を実現可能
Sausalitoの特長(つづき) 4)サードパーティのアプリケーションにおいても Sausalito のユーザ認証の利用が可能  サードパーティのアプリケーションにおいても、 Navigation Manager および UIFC を用いることにより、 Sausalito のユーザ認証を利用可能(独自の認証機構を準備する必要がない) 5) Sausalito 対応機種間でのアプリケーションの移植が容易  ハードウェアやシステム情報へのアクセス用の API ( CCE )が提供されていることにより、機種間のアプリケーションの移植が従来に比べ容易であると思われる。
Sausalito版Cobalt Server Sausalito アーキテクチャを採用している Cobalt Server は以下のとおり Sun Cobalt Qube3 NTT DoCoMo MMQUBE2   (OEM 版 Qube3) Sun Cobalt Qube3 Plus  Sun Cobalt RaQ550 SunCobalt Control Station (2002 年 9 月現在) 備考:   Sun Cobalt XTR は部分的に Sausalito が使われている。
Sausalitoの画面構成(ログイン画面) ※  この画面は MMQUBE2 のものである。 test.cobalt*qube.org
Sausalitoの画面構成(ログイン後) ※  この画面は MMQUBE2 のものである。
Sausalito 対応アプリケーション作成の準備 用意するもの Sausalito アーキテクチャのサーバ 管理者権限が必要 IE5 以上が動作する PC Telnet クライアントフト TeraTerm( フリーウェア ) がおすすめ FTP クライアントソフト FFFTP( フリーウェア ) がおすすめ tar,gzip,rpm に対応した圧縮・解凍ソフト ExpLzh( シェアウェア )+tar32.dll がおすすめ テキストエディタ 秀丸 ( シェアウェア ) がおすすめ
Sausalito 対応アプリケーション作成の準備 あるとうれしい予備知識(なくても可?) Telnet および Shell を使ったことがある html のソースを見たり書いたことがある xml について知っている rpm の SPEC ファイルを書いたことがある Perl 、 PHP 、 Awk のソースを見たことがある EUC 、 SJIS コードとは何のことか知っている vi 、 more を使ったことがある ‘ /’  と書いて root と読める
Sausalito のディレクトリ構成(後で使うよ) /usr/ share/locale/ ja/LC_MESSAGES/ ***.mo String ファイル en/LC_MESSAGES/ ***.mo ・・・ sausalito/ constructor/ destructor/ handler/ schema/ ***.pl ***.pl ***.schema ***.pl CCE 関連ファイル (今回は作成しない) ui/ menu/ web/ style/ conf/ libPhp/ bin/ lib/ ・・・ Sausalito システムディレクトリ (ユーザは直接使用しない) ***.xml ***. php ,html,pl ***.xml menu 定義ファイル CGI ファイル Style ファイル
本日のお題 課題1) Sausalito メニューに“ HelloWorld” アプリを追加する 課題2) Sausalito のメッセージを大阪弁に変更する
課題1:メニュー追加   Sausalito メニューに“ HelloWorld” アプリを追加しよう
STEP1:メニューの構造を探ってみる /usr/sausalito/ui/menu の下を覗く [admin admin]$ cd /usr/sausalito/ui/menu [admin menu]$ ls -F VM/  base/  ioffice/  live/  palette/  [admin menu]$ cd base [admin base]$ ls -F addressbook/  carmel/  firewall/  network/  telnet/  wizard/  am/  dhcpd/  ftp/  power/  time/  workgroup/  apache/  disk/  import/  quotastats/  user/  appleshare/  dns/  ldap/  snmp/  webmail/  backup/  email/  maillist/  swupdate/  webstats/  cache/ fileshare/  multidrop/  system/  winshare/ [admin base]$ cd am [admin am]$ ls -F amSettings.xml  amStatus.xml  monitor.xml  monitorLight.xml
STEP2:xmlファイルの構造を推測する ① 既存のxmlファイルを見てみる ソース1: monitor.xml ソース2: amStatus.xml <item id=&quot;base_monitor&quot; label=&quot;[[base-am.activeMonitor]]&quot; description=“[[base-am.activeMonitor_help]]”   > <parent id=&quot;base_administration&quot; order=&quot;80&quot;/> </item> <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=“/base/am/amStatus.php”   > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item>
STEP2:続き ② xmlファイルの構造を推測する (id 属性) item  エレメントの id 属性は自分自身の ID を指しているらしい。 parent エレメントの id 属性は自分の親の ID を指しているらしい。 base_administration base_monitor base_amStatus
STEP2:続き ③ xmlファイルの構造を推測する (order 属性) parent エレメントの order 属性は同じ親に属しているものの間の順序を指しているらしい。 monitor.xml の  parent エレメントの order 属性を  80 から25に変更してみる アクティブモニタのメニューの 場所が移動した。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと!
STEP2:続き ④ xmlファイルの構造を推測する (label,description 属性) monitor.xml の item エレメントの label description 属性を右のよ うに書き換えてみる 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! メニュータイトルとアクティブヘルプが書き換わった! <item id=&quot;base_monitor&quot; label=&quot;base_monitor の Label だよ &quot; description=&quot;base_monitor の description だよ &quot;> <parent id=&quot;base_administration&quot; order=&quot;80&quot;/> </item>
STEP2:続き ⑤ xmlファイルの構造を推測する (url 属性) amStatus.xml  ファイルの item エレメントの URL 属性の URL を左上のロゴのビットマップの URL に書き換えてみる。 ※ URL のドキュメントルートは  /usr/sausalito/ui/web である。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! amStatus.xml クリックすると、ロゴが表示された! <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=&quot;/libImage/topLogo.gif“ > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item>
STEP2:まとめ xmlファイルの構造 amStatus.xml <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=“/base/am/amStatus.php”   > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item> メニューの並び(小さいほど上または、左に表示される。) order parent 自分がぶら下がるメニュー項目 ID id parent メニュー項目クリック時に表示される URL url item アクティブヘルプに表示される文字列(日本語も使用可。 S-JIS で指定する必要がある。) description item メニューに表示される文字列(日本語も使用可。 S-JIS で指定する必要がある。) label item 自分自身のメニュー項目 ID  (すべてのメニュー項目でユニークである必要がある) id item 意味 属性 エレメント
STEP3:メニューツリーを確認する 管理者ログイン時のメニューツリーを知る メニューツリーのTOPはrootである。 ①  ② ③ ④  ⑤ ⑥ ⑦ root root ① base_administration ② base_software ③ base_programs ④ base_personalProfile ⑤ base_updateLight ⑥ base_monitorLight ⑦ base_logout
STEP4: 課題の Hello メニューをチェックする Hello メニューは「プログラム」タブの中にある。 base_programs の子メニューとなる HelloWorld メニューは「 Hello 」メニューの中にある Hello メニューの ID の子メニューとなる。 HelloWorld アプリケーションは「 HelloWorld 」メニューから呼び出される。 base_programs base_hello base_helloWorld
STEP5:Helloメニューを作成する これまでの情報を用いて、Helloメニューを作成する hello.xml helloworld.xml <item id=&quot;base_hello&quot; label=“Hello&quot; description=“Hello メニューです。”  > <parent id=&quot;base_administration&quot; order=“21&quot;/> </item> <item id=&quot;base_helloWorld&quot; label=“HelloWorld” description=“HelloWorld アプリケーションです。 &quot; url=“hello/hello.htm”   > <parent id=&quot;base_hello&quot; order=&quot;10&quot;/> </item>
STEP5:続き どこに XML ファイルを置くか? Sausalito は /usr/sausalito/ui/menu の下のフォルダを再帰的に探索する。 アプリごとにxmlファイル配置のためのディレクトリを分けることが望ましい。 今回は、 ui/menu の下に、 hello というディレクトリを作成し、その中に配置する。 注意: Sausalito は、シンボリックリンクのディレクトリは探索    しないため、実体のディレクトリ内に入れる必要がある
STEP6:hello.htmを作成する メニューからリンクされる HTML ファイルを作成する hello.htm HTML ファイルの配置場所は /usr/sausalito/ui/web/hello/ <HTML> <body> Hello   World アプリケーションの出力です。 </body> </html>
課題1:完成!
課題2:メッセージの書き換え 課題2) Sausalito のメッセージを大阪弁に変更しよう 電源切断手順画面を大阪弁に変更する
STEP1:メッセージのありかを探す /usr/share/locale/ja/LC_MESSAGES/ の下を覗く *.mo というファイルが多数存在する。 これらは String ファイルと呼ばれるものである。 admin admin]$ cd /usr/share/locale/ja/LC_MESSAGES/ [admin LC_MESSAGES]$ ls base-fileshare.mo  base-sys.mo  base-firewall.mo  base-system.mo  base-ftp.mo  base-telnet.mo base-import.mo  base-time.mo  base-lcd.mo  base-user.mo  base-ldap.mo  base-webmail.mo adamnet.mo  base-maillist.mo  base-webstats.mo  base-addressbook.mo  base-memory.mo base-winnetwork.mo  base-am.mo  base-modem.mo  base-winshare.mo  base-apache.mo  base-multidrop.mo  base-wizard.mo  base-appleshare.mo  base-network.mo  base-workgroup.mo  base-backup.mo  gnupg.mo  base-cache.mo  base-power.mo  palette.mo  base-carmel.mo base-power.mo.org  sharutils.mo  base-cce.mo  base-quotastats.mo  swatch.mo  base-dhclient.mo  base-sauce-basic.mo  tar.mo  base-dhcpd.mo  base-services.mo  textutils.mo  base-disk.mo  base-snmp.mo  trueBlue.mo  base-dns.mo  base-ssl.mo  util-linux.mo  base-email.mo  base-swupdate.mo [admin LC_MESSAGES]$
STEP2:Stringファイルとは String ファイルとは、文字列にタグ (ID) をつけて格納したもの。 String ソースファイル (*.po) から生成される。 国際化ライブラリにて使用される。 String ソースファイル (*.po) String ファイル (*.mo) encode decode msgfmt コマンド msgunfmt コマンド
STEP3:Stringソースファイルの書式   msgid:  メッセージの ID をあらわす msgstr:  メッセージの文字列。日本語可。文字コードは          S-JIS を使用する。 msgid “ ユニークな ID1” msgstr “ メッセージ 1”    ( 空行 ) msgid “ ユニークな ID2” msgstr “ メッセージ 2”    ( 空行 )   ・・・・・・ msgid “ ユニークな IDn” msgstr “ メッセージ n”
STEP4:msgfmt,msgunfmtの使い方 msgfmtコマンド 書式:  msgfmt  xxx.po  [  -o  xxx.mo  ] String ソースファイル  xxx.po  から、 String ファイル  xxx.mo  を生成する。  -o オプションが無指定の場合は  message  というファイル名のファイルに出力する。 msgunfmt コマンド 書式: msgunfmt xxx.mo [ -o xxx.po] String ファイル  xxx.mo から、 String ファイル  xxx.po  を生成する。 -o オプションが無指定の場合は、標準出力に出力する。
STEP5:*mo ファイルから *po ファイルを作成 Stringファイルから、Stringソースファイルを作成する [root LC_MESSAGES]#  msgunfmt base-power.mo -o /tmp/base-power.po [root LC_MESSAGES]# head /tmp/base-power.po msgid &quot;askRebootConfirmation&quot; msgstr &quot; サーバを再起動してよろしいですか? &quot; msgid &quot;power&quot; msgstr &quot; 電源 &quot; msgid &quot;powerHelp&quot; msgstr &quot; サーバを再起動できます。 &quot; msgid &quot;reboot“ ・・・・・
STEP6:*po ファイルをPCに転送する STEP5 で生成した base-power.po を FFFTP を利用してPCに転送する。 ASCII モードで転送する。 文字コードは、変換しない。
STEP7:*.po ファイルを編集する msgunfmt コマンドで生成された  *.po ファイルは、文字列が長い場合80文字で改行されているため、文字列を一本にする。
STEP7:続き(関西人用) 文字列をチェックし、変な日本語をすべて大阪弁に書き換える。 編集が完了したら、 base-power-osaka.po というファイル名で保存する。
STEP7:続き(関西人以外用) インターネット上の大阪弁変換フィルタ等を用いて、メッセージを大阪弁に変換する。 例: http://www.yorosiku.net/yan/imode/iosaka.html を用いる。 編集が完了したら、 base-power-osaka.po というファイル名で保存する。
STEP8: 編集後の *.po ファイルをアップする。 編集後の base-power-osaka.po ファイルをサーバにFTPする。 ・ ASCII モードで転送する。 ・文字コードは、変換しない。
STEP9:*.moファイルを作成し入替える 書き換えた、 base-power-osaka.po ファイルを元に、 base-power.mo ファイルを作成し、元のファイルと入替えを行う。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! [root /tmp]# msgfmt base-power-osaka.po -o base-power.mo [root /tmp]# cd /usr/share/locale/ja/LC_MESSAGES/ [root LC_MESSAGES]# mv base-power.mo base-power.mo.org [root LC_MESSAGES]# cp /tmp/base-power.mo . [root LC_MESSAGES]#
課題2:完成!
おまけ1:メニュ内でStringファイルを使う hello.po hello.xml helloworld.xml /usr/share/locale/ja/ LC_MESSAGES/hello.mo *.mo ファイル名 msgid msgid &quot;hellogroup&quot; msgstr &quot;Hello でっせ &quot; msgid &quot;helloworldgroup&quot; msgstr &quot;HelloWorld どすえ &quot; <item id=&quot;base_hello&quot; label=&quot;[[hello.hellogroup]]&quot;  description=&quot;HelloWorld メニューです &quot; type=&quot;monitorOn&quot; > <parent id=&quot;base_programs&quot; order=&quot;21&quot;/> </item> <item id=“base_hello_helloApp” label=“[[hello.helloworldgroup]]”  description=“HelloWorld でっせ。よろしゅうたのむわ” url=&quot;/hello/hello.htm&quot; > <parent id=&quot;base_hello&quot; order=&quot;21&quot;/> </item>
おまけ1:出力結果
おまけ2:日本語文字が化ける場合 S-JIS 漢字中に含まれる 0x5c(\) キャラクターコードをエスケープすることにより回避する。 enadd.pl :漢字中に 0 x 5c が含まれている場合、その前に 0x5c を挿入する。( msgfmt の前に使用 ) endel.pl :漢字中に 0 x 5c が 2 回連続して含まれている場合、 0x5c をひとつ削る。( msgunfmt の後に使用 ) enadd.pl endel.pl #!/usr/bin/perl while(<>){ s/\\\\/\\/g; print; } #!/usr/bin/perl while(<>){ s/\\/\\\\/g; print; }
おまけ3:メニューツリーのrootを変える ログイン後特定のメニューを root にして、 Navigation Manager を立ち上げる http:// サーバ :444/ login.php?target= /nav/cList.php%3Froot= メニュー ID  %3FCommFrame= 追加スクリプト 例 :http://192.168.0.30:444/login.php?target=/nav/cList.php%3Froot=base_administration
おまけ3:結果

More Related Content

PDF
CodeIgniter入門
PDF
PHP勉強会 #51
KEY
Mysql casual fukuoa_vlo_2
PDF
XPagesでRESTを使ってみたら、こんなんだった
PDF
WebAPIではじめるphp入門
KEY
My sql casual_in_fukuoka_vol1
PPTX
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
PPT
フィルタドライバ入門
CodeIgniter入門
PHP勉強会 #51
Mysql casual fukuoa_vlo_2
XPagesでRESTを使ってみたら、こんなんだった
WebAPIではじめるphp入門
My sql casual_in_fukuoka_vol1
XPagesDay2014 [B-3] XPagesでRESTを使ってみたら、こんなんだったPartⅡ
フィルタドライバ入門

What's hot (20)

PDF
XPagesDay 2015 RESTの総復習
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
XPagesで検索してみよう
PDF
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
PDF
R を起動するその前に
PDF
FuelPHPで3種のprofilerを使ってみた
PPTX
PHP AST 徹底解説(補遺)
PDF
OSS開発勉強会-03
PDF
Android4.2徹底解剖!
PDF
はじめてのCodeIgniter
PDF
簡単なTYPO3エクステンションの作成
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PDF
WordBeach @kurudrive
PDF
GNU Make でも使ってみようか
 
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
PDF
Alfrescoのカスタムテーブルの使い方
PDF
FuelPHP Osu Nagoya vol.1
KEY
FuelPHPをさわってみて
PDF
はじめての FuelPHP
XPagesDay 2015 RESTの総復習
15分でCakePHPを始める方法(Nseg 2013-11-09 )
XPagesで検索してみよう
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
R を起動するその前に
FuelPHPで3種のprofilerを使ってみた
PHP AST 徹底解説(補遺)
OSS開発勉強会-03
Android4.2徹底解剖!
はじめてのCodeIgniter
簡単なTYPO3エクステンションの作成
omoon.org の裏側 〜FuelPHP の task 活用例〜
WTM53 phpフレームワーク いまさらcodeigniter
WordBeach @kurudrive
GNU Make でも使ってみようか
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Alfrescoのカスタムテーブルの使い方
FuelPHP Osu Nagoya vol.1
FuelPHPをさわってみて
はじめての FuelPHP

Viewers also liked (9)

PPT
PPT
PPT
UploadTest
PDF
Future Of The Book 09 Sarah Jones
PPT
UpTest
PPT
UpTest
PPT
PPT
Slideshow title
PPT
Digital Technologies Symposium
UploadTest
Future Of The Book 09 Sarah Jones
UpTest
UpTest
Slideshow title
Digital Technologies Symposium

Similar to 1MB (20)

PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PPTX
Cloudstack user group meeting in osaka
PPT
Windows® API Code Pack for Microsoft® .NET Framework
PPTX
HTML5最新動向
ODP
Programming camp Codereading
PDF
Windows PowerShell 2.0 の基礎知識
PPT
Apache Module
PDF
Android Lecture #01 @PRO&BSC Inc.
PDF
G0042 h
PDF
20121217 jawsug-yokohama
PDF
Java/Androidセキュアコーディング
PPTX
HTML5&API総まくり
PPT
使いこなせて安全なLinuxを目指して
PDF
Build 番号の自動更新スクリプトについて #cocoa_kansai
PDF
【学習メモ#1st】12ステップで作る組込みOS自作入門
PDF
PEZY-SC programming overview
PPT
20060419
PPTX
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
PDF
Mac Ports
PDF
LPICレベル1技術解説セミナー(2012/11/11)
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Cloudstack user group meeting in osaka
Windows® API Code Pack for Microsoft® .NET Framework
HTML5最新動向
Programming camp Codereading
Windows PowerShell 2.0 の基礎知識
Apache Module
Android Lecture #01 @PRO&BSC Inc.
G0042 h
20121217 jawsug-yokohama
Java/Androidセキュアコーディング
HTML5&API総まくり
使いこなせて安全なLinuxを目指して
Build 番号の自動更新スクリプトについて #cocoa_kansai
【学習メモ#1st】12ステップで作る組込みOS自作入門
PEZY-SC programming overview
20060419
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Mac Ports
LPICレベル1技術解説セミナー(2012/11/11)

More from arase_utagoe (9)

PPT
Slideshow title
PPT
UpTest
PPT
PPT
PPT
PPT
PPT
Slideshow title
PPT
Slideshow title
UpTest
Slideshow title

1MB

  • 1. Sausalitoで遊ぼう ! ☆Cobalt Appliance Programming 入門☆ 2002 年 9 月 8 日 NTT   DoCoMo Kansai,Inc. Masahiro Watanabe Cobalt Users Conference2002/Summer
  • 2. Windows マシン、 Unix マシンと Cobalt の違い Cobalt ServerはUNIXの省スペース性と、Webブラウザを使ったGUIでの簡易な操作を兼ね備えたServer Applianceである。 可( GUI ) 可( CUI ) 不可 遠隔メンテナンス GUI ( LCD コンソールおよび Web ブラウザ) CUI (コマンドラインインターフェース) GUI (ウィンドウシステム) 操作の手段 不要( LCD コンソールあり) 不要(接続可) 要 ディスプレイおよびキーボード Cobalt 一般的な Unix Windows
  • 3. Sausalitoとはなにか Sausalito とは、 Cobalt Server のソフトウェアに一貫した操作性を与えるために開発された、新アーキテクチャである。 サーバ管理用デーモン( CCE) 経由でアクセス Perl にてアクセス システムリソースへのアクセス 表示されるメッセージを String ファイルとして独立させ、 String ファイルを言語毎に用意することにより対応(ソースは各国語版同一) 各国版毎に Perl のソースを書き換えてリリース 国際版対応 Sausalito 内の独自認証を利用(ユーザ権限ごとにメニュー構成を変更することが可能) HTTP の BASIC 認証を利用 管理画面の認証方法 XML を使って自動生成されたメニューと、 PHP の UIFC ライブラリを利用して作成した画面から構成 画面ごとに Perl の CGI で作成 管理画面の構成 Sausalito 従来の Cobalt
  • 4. Sausalitoの特長 1)柔軟な機能拡張が可能 XML を用いたメニュー自動生成処理( Navigation Manager )により、メニューツリーへのメニュー追加が他の既存のメニューに影響を与えずに可能 2)各国語版パッチリリースに要する期間の短縮および信頼性の向上 各国語版間でソースが共通であるため、シンプルなバージョン管理が可能 3)ユーザインターフェースの Look & Feel の統一性の保持が可能 ユーザインターフェース用 API ( UIFC )が公開されているため、サードパーティのアプリケーションにおいても Cobalt オリジナル機能と同一の Look & Feel を実現可能
  • 5. Sausalitoの特長(つづき) 4)サードパーティのアプリケーションにおいても Sausalito のユーザ認証の利用が可能  サードパーティのアプリケーションにおいても、 Navigation Manager および UIFC を用いることにより、 Sausalito のユーザ認証を利用可能(独自の認証機構を準備する必要がない) 5) Sausalito 対応機種間でのアプリケーションの移植が容易  ハードウェアやシステム情報へのアクセス用の API ( CCE )が提供されていることにより、機種間のアプリケーションの移植が従来に比べ容易であると思われる。
  • 6. Sausalito版Cobalt Server Sausalito アーキテクチャを採用している Cobalt Server は以下のとおり Sun Cobalt Qube3 NTT DoCoMo MMQUBE2   (OEM 版 Qube3) Sun Cobalt Qube3 Plus Sun Cobalt RaQ550 SunCobalt Control Station (2002 年 9 月現在) 備考:   Sun Cobalt XTR は部分的に Sausalito が使われている。
  • 7. Sausalitoの画面構成(ログイン画面) ※  この画面は MMQUBE2 のものである。 test.cobalt*qube.org
  • 9. Sausalito 対応アプリケーション作成の準備 用意するもの Sausalito アーキテクチャのサーバ 管理者権限が必要 IE5 以上が動作する PC Telnet クライアントフト TeraTerm( フリーウェア ) がおすすめ FTP クライアントソフト FFFTP( フリーウェア ) がおすすめ tar,gzip,rpm に対応した圧縮・解凍ソフト ExpLzh( シェアウェア )+tar32.dll がおすすめ テキストエディタ 秀丸 ( シェアウェア ) がおすすめ
  • 10. Sausalito 対応アプリケーション作成の準備 あるとうれしい予備知識(なくても可?) Telnet および Shell を使ったことがある html のソースを見たり書いたことがある xml について知っている rpm の SPEC ファイルを書いたことがある Perl 、 PHP 、 Awk のソースを見たことがある EUC 、 SJIS コードとは何のことか知っている vi 、 more を使ったことがある ‘ /’ と書いて root と読める
  • 11. Sausalito のディレクトリ構成(後で使うよ) /usr/ share/locale/ ja/LC_MESSAGES/ ***.mo String ファイル en/LC_MESSAGES/ ***.mo ・・・ sausalito/ constructor/ destructor/ handler/ schema/ ***.pl ***.pl ***.schema ***.pl CCE 関連ファイル (今回は作成しない) ui/ menu/ web/ style/ conf/ libPhp/ bin/ lib/ ・・・ Sausalito システムディレクトリ (ユーザは直接使用しない) ***.xml ***. php ,html,pl ***.xml menu 定義ファイル CGI ファイル Style ファイル
  • 12. 本日のお題 課題1) Sausalito メニューに“ HelloWorld” アプリを追加する 課題2) Sausalito のメッセージを大阪弁に変更する
  • 13. 課題1:メニュー追加   Sausalito メニューに“ HelloWorld” アプリを追加しよう
  • 14. STEP1:メニューの構造を探ってみる /usr/sausalito/ui/menu の下を覗く [admin admin]$ cd /usr/sausalito/ui/menu [admin menu]$ ls -F VM/ base/ ioffice/ live/ palette/ [admin menu]$ cd base [admin base]$ ls -F addressbook/ carmel/ firewall/ network/ telnet/ wizard/ am/ dhcpd/ ftp/ power/ time/ workgroup/ apache/ disk/ import/ quotastats/ user/ appleshare/ dns/ ldap/ snmp/ webmail/ backup/ email/ maillist/ swupdate/ webstats/ cache/ fileshare/ multidrop/ system/ winshare/ [admin base]$ cd am [admin am]$ ls -F amSettings.xml amStatus.xml monitor.xml monitorLight.xml
  • 15. STEP2:xmlファイルの構造を推測する ① 既存のxmlファイルを見てみる ソース1: monitor.xml ソース2: amStatus.xml <item id=&quot;base_monitor&quot; label=&quot;[[base-am.activeMonitor]]&quot; description=“[[base-am.activeMonitor_help]]”   > <parent id=&quot;base_administration&quot; order=&quot;80&quot;/> </item> <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=“/base/am/amStatus.php”   > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item>
  • 16. STEP2:続き ② xmlファイルの構造を推測する (id 属性) item エレメントの id 属性は自分自身の ID を指しているらしい。 parent エレメントの id 属性は自分の親の ID を指しているらしい。 base_administration base_monitor base_amStatus
  • 17. STEP2:続き ③ xmlファイルの構造を推測する (order 属性) parent エレメントの order 属性は同じ親に属しているものの間の順序を指しているらしい。 monitor.xml の parent エレメントの order 属性を 80 から25に変更してみる アクティブモニタのメニューの 場所が移動した。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと!
  • 18. STEP2:続き ④ xmlファイルの構造を推測する (label,description 属性) monitor.xml の item エレメントの label description 属性を右のよ うに書き換えてみる 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! メニュータイトルとアクティブヘルプが書き換わった! <item id=&quot;base_monitor&quot; label=&quot;base_monitor の Label だよ &quot; description=&quot;base_monitor の description だよ &quot;> <parent id=&quot;base_administration&quot; order=&quot;80&quot;/> </item>
  • 19. STEP2:続き ⑤ xmlファイルの構造を推測する (url 属性) amStatus.xml ファイルの item エレメントの URL 属性の URL を左上のロゴのビットマップの URL に書き換えてみる。 ※ URL のドキュメントルートは /usr/sausalito/ui/web である。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! amStatus.xml クリックすると、ロゴが表示された! <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=&quot;/libImage/topLogo.gif“ > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item>
  • 20. STEP2:まとめ xmlファイルの構造 amStatus.xml <item id=&quot;base_amStatus&quot; label=&quot;[[base-am.amStatusMenuName]]&quot; description=&quot;[[base-am.amStatusMenuDesc]]&quot; url=“/base/am/amStatus.php”   > <parent id=&quot;base_monitor&quot; order=&quot;10&quot;/> </item> メニューの並び(小さいほど上または、左に表示される。) order parent 自分がぶら下がるメニュー項目 ID id parent メニュー項目クリック時に表示される URL url item アクティブヘルプに表示される文字列(日本語も使用可。 S-JIS で指定する必要がある。) description item メニューに表示される文字列(日本語も使用可。 S-JIS で指定する必要がある。) label item 自分自身のメニュー項目 ID  (すべてのメニュー項目でユニークである必要がある) id item 意味 属性 エレメント
  • 21. STEP3:メニューツリーを確認する 管理者ログイン時のメニューツリーを知る メニューツリーのTOPはrootである。 ①  ② ③ ④  ⑤ ⑥ ⑦ root root ① base_administration ② base_software ③ base_programs ④ base_personalProfile ⑤ base_updateLight ⑥ base_monitorLight ⑦ base_logout
  • 22. STEP4: 課題の Hello メニューをチェックする Hello メニューは「プログラム」タブの中にある。 base_programs の子メニューとなる HelloWorld メニューは「 Hello 」メニューの中にある Hello メニューの ID の子メニューとなる。 HelloWorld アプリケーションは「 HelloWorld 」メニューから呼び出される。 base_programs base_hello base_helloWorld
  • 23. STEP5:Helloメニューを作成する これまでの情報を用いて、Helloメニューを作成する hello.xml helloworld.xml <item id=&quot;base_hello&quot; label=“Hello&quot; description=“Hello メニューです。”  > <parent id=&quot;base_administration&quot; order=“21&quot;/> </item> <item id=&quot;base_helloWorld&quot; label=“HelloWorld” description=“HelloWorld アプリケーションです。 &quot; url=“hello/hello.htm”   > <parent id=&quot;base_hello&quot; order=&quot;10&quot;/> </item>
  • 24. STEP5:続き どこに XML ファイルを置くか? Sausalito は /usr/sausalito/ui/menu の下のフォルダを再帰的に探索する。 アプリごとにxmlファイル配置のためのディレクトリを分けることが望ましい。 今回は、 ui/menu の下に、 hello というディレクトリを作成し、その中に配置する。 注意: Sausalito は、シンボリックリンクのディレクトリは探索    しないため、実体のディレクトリ内に入れる必要がある
  • 25. STEP6:hello.htmを作成する メニューからリンクされる HTML ファイルを作成する hello.htm HTML ファイルの配置場所は /usr/sausalito/ui/web/hello/ <HTML> <body> Hello   World アプリケーションの出力です。 </body> </html>
  • 27. 課題2:メッセージの書き換え 課題2) Sausalito のメッセージを大阪弁に変更しよう 電源切断手順画面を大阪弁に変更する
  • 28. STEP1:メッセージのありかを探す /usr/share/locale/ja/LC_MESSAGES/ の下を覗く *.mo というファイルが多数存在する。 これらは String ファイルと呼ばれるものである。 admin admin]$ cd /usr/share/locale/ja/LC_MESSAGES/ [admin LC_MESSAGES]$ ls base-fileshare.mo base-sys.mo base-firewall.mo base-system.mo base-ftp.mo base-telnet.mo base-import.mo base-time.mo base-lcd.mo base-user.mo base-ldap.mo base-webmail.mo adamnet.mo base-maillist.mo base-webstats.mo base-addressbook.mo base-memory.mo base-winnetwork.mo base-am.mo base-modem.mo base-winshare.mo base-apache.mo base-multidrop.mo base-wizard.mo base-appleshare.mo base-network.mo base-workgroup.mo base-backup.mo gnupg.mo base-cache.mo base-power.mo palette.mo base-carmel.mo base-power.mo.org sharutils.mo base-cce.mo base-quotastats.mo swatch.mo base-dhclient.mo base-sauce-basic.mo tar.mo base-dhcpd.mo base-services.mo textutils.mo base-disk.mo base-snmp.mo trueBlue.mo base-dns.mo base-ssl.mo util-linux.mo base-email.mo base-swupdate.mo [admin LC_MESSAGES]$
  • 29. STEP2:Stringファイルとは String ファイルとは、文字列にタグ (ID) をつけて格納したもの。 String ソースファイル (*.po) から生成される。 国際化ライブラリにて使用される。 String ソースファイル (*.po) String ファイル (*.mo) encode decode msgfmt コマンド msgunfmt コマンド
  • 30. STEP3:Stringソースファイルの書式   msgid: メッセージの ID をあらわす msgstr: メッセージの文字列。日本語可。文字コードは          S-JIS を使用する。 msgid “ ユニークな ID1” msgstr “ メッセージ 1”   ( 空行 ) msgid “ ユニークな ID2” msgstr “ メッセージ 2”    ( 空行 )   ・・・・・・ msgid “ ユニークな IDn” msgstr “ メッセージ n”
  • 31. STEP4:msgfmt,msgunfmtの使い方 msgfmtコマンド 書式: msgfmt xxx.po  [ -o xxx.mo ] String ソースファイル  xxx.po  から、 String ファイル  xxx.mo を生成する。 -o オプションが無指定の場合は  message  というファイル名のファイルに出力する。 msgunfmt コマンド 書式: msgunfmt xxx.mo [ -o xxx.po] String ファイル  xxx.mo から、 String ファイル xxx.po  を生成する。 -o オプションが無指定の場合は、標準出力に出力する。
  • 32. STEP5:*mo ファイルから *po ファイルを作成 Stringファイルから、Stringソースファイルを作成する [root LC_MESSAGES]# msgunfmt base-power.mo -o /tmp/base-power.po [root LC_MESSAGES]# head /tmp/base-power.po msgid &quot;askRebootConfirmation&quot; msgstr &quot; サーバを再起動してよろしいですか? &quot; msgid &quot;power&quot; msgstr &quot; 電源 &quot; msgid &quot;powerHelp&quot; msgstr &quot; サーバを再起動できます。 &quot; msgid &quot;reboot“ ・・・・・
  • 33. STEP6:*po ファイルをPCに転送する STEP5 で生成した base-power.po を FFFTP を利用してPCに転送する。 ASCII モードで転送する。 文字コードは、変換しない。
  • 34. STEP7:*.po ファイルを編集する msgunfmt コマンドで生成された  *.po ファイルは、文字列が長い場合80文字で改行されているため、文字列を一本にする。
  • 36. STEP7:続き(関西人以外用) インターネット上の大阪弁変換フィルタ等を用いて、メッセージを大阪弁に変換する。 例: http://www.yorosiku.net/yan/imode/iosaka.html を用いる。 編集が完了したら、 base-power-osaka.po というファイル名で保存する。
  • 37. STEP8: 編集後の *.po ファイルをアップする。 編集後の base-power-osaka.po ファイルをサーバにFTPする。 ・ ASCII モードで転送する。 ・文字コードは、変換しない。
  • 38. STEP9:*.moファイルを作成し入替える 書き換えた、 base-power-osaka.po ファイルを元に、 base-power.mo ファイルを作成し、元のファイルと入替えを行う。 注意:自分で試す場合、ファイルを書き換えるときは、元のファイルを必ず     バックアップしてから行うこと! [root /tmp]# msgfmt base-power-osaka.po -o base-power.mo [root /tmp]# cd /usr/share/locale/ja/LC_MESSAGES/ [root LC_MESSAGES]# mv base-power.mo base-power.mo.org [root LC_MESSAGES]# cp /tmp/base-power.mo . [root LC_MESSAGES]#
  • 40. おまけ1:メニュ内でStringファイルを使う hello.po hello.xml helloworld.xml /usr/share/locale/ja/ LC_MESSAGES/hello.mo *.mo ファイル名 msgid msgid &quot;hellogroup&quot; msgstr &quot;Hello でっせ &quot; msgid &quot;helloworldgroup&quot; msgstr &quot;HelloWorld どすえ &quot; <item id=&quot;base_hello&quot; label=&quot;[[hello.hellogroup]]&quot; description=&quot;HelloWorld メニューです &quot; type=&quot;monitorOn&quot; > <parent id=&quot;base_programs&quot; order=&quot;21&quot;/> </item> <item id=“base_hello_helloApp” label=“[[hello.helloworldgroup]]” description=“HelloWorld でっせ。よろしゅうたのむわ” url=&quot;/hello/hello.htm&quot; > <parent id=&quot;base_hello&quot; order=&quot;21&quot;/> </item>
  • 42. おまけ2:日本語文字が化ける場合 S-JIS 漢字中に含まれる 0x5c(\) キャラクターコードをエスケープすることにより回避する。 enadd.pl :漢字中に 0 x 5c が含まれている場合、その前に 0x5c を挿入する。( msgfmt の前に使用 ) endel.pl :漢字中に 0 x 5c が 2 回連続して含まれている場合、 0x5c をひとつ削る。( msgunfmt の後に使用 ) enadd.pl endel.pl #!/usr/bin/perl while(<>){ s/\\\\/\\/g; print; } #!/usr/bin/perl while(<>){ s/\\/\\\\/g; print; }
  • 43. おまけ3:メニューツリーのrootを変える ログイン後特定のメニューを root にして、 Navigation Manager を立ち上げる http:// サーバ :444/ login.php?target= /nav/cList.php%3Froot= メニュー ID %3FCommFrame= 追加スクリプト 例 :http://192.168.0.30:444/login.php?target=/nav/cList.php%3Froot=base_administration