Archive for 10月, 2009
シェルを使ってファイルから1行ずつよみこみ、カンマで区切って処理をしたーい。
なんて時に、
while read LINE do // ここでsplitをつかってごにょごにょと・・・・ done < input.txt
ってな感じで、1行を切り分けていた。
ここでごにょごにょと書いたのも、いつもこの部分を忘れてしまい、
あー昔書いたやつをさがして・・・
と見つからず、いろいろと探していたら、もっといいやり方を知った。
まあ、たまにブラウズもいいものだと・・・
では、
while IFS=, read f1 f2 f3 do echo "$f1は1つ目のフィールド" echo "$f2は2つ目のフィールド" done < input.txt
というように、カンマで分割した形で変数にセットしてくれるので、楽だ・・・・
ちなみに、IFSとはInternal field separatorsの略らしい。
さて、昨日発売となったWindows7。開発をしている身としてはいずれバージョンアップするのだから、
今回はすぐにバージョンアップしてしまった。
これを使って、Flex Builderで開発と・・・
特にWindows7だから問題というのは発生しなかったが、
AIRアプリを実行し、Flex Builderのコンソールでログを見ようと、
実行したアプリを上のほうにどかすと・・・・・
ウィンドウが最大化してしまう・・・・・
何度やっても最大化してしまい、ちょうど、
こちらもウィンドウのサイズについてはこちらでいろいろと制御しているので、
それがWindows7になって何か悪さをしているのか・・・・
とかちょっと疑ってしまいました。
ただ、画面が横長で縦の領域が小さいので、ウィンドウを上にずらしているつもりが、
画面上部に移動してしまい、今回の新機能「Windows7のウィンドウの最大化」と間違ってしまっているようです。
んー困った。
横長なので、横に半分はいいが、縦の最大化はやめたい・・・・・
この機能だけ、無効にはできないのでしょうか?
今回はちょっと本の紹介。
携帯電話のタグを記載したマニュアルは最近多いが、
スタイルシートを適用した結果、ドコモ、AU、ソフトバンクでどのように表示されるかを示したリファレンス本である。
非常に細かく記述されており、どのスタイルがドコモ、AU、ソフトバンクで利用できるか、利用できないかの表があり、
また、それぞれのタグでキャリアごとに気をつけなければいけない点も記述されているので、
リファレンスでは見落としがちな注意事項も、きっちりカバーできている。
前半は、一般的な携帯サイトを構築するためのノウハウを記述しているが、後半から実機(とおもわれる)
でのXHTMLの表示ものせてあり、いまどきの携帯サイトをXHTMLで作成するにはぜひ手元に置いておきたい本の一冊だと思われる。
ただ、最初の最初は携帯向けXHTMLの成り立ちなどから記述されており、後半は実際のXHTMLの書き方であり、
ちょっと、前半と後半で読者の対象が異なる気もするが、なんとなくXHTMLのコードを書いていた人には、
基本も学べるのでこれを機に基本を再確認するといいだろう。
補足だが、ドコモ向けのXHTMLの場合、以下からサポートしているスタイル一覧が見れるので、
こちらも併せてみれば、現在ドコモ向けを基準に考えるならば十分だと思う。
flexでは、ResourceManagerという機能を使って文言を別のファイルにして管理が行えます。
したがって、マルチランゲージ対応などもこれを使って行えます。
では、Flex Builderを使ってこのResourceManagerを使って文言を別のファイルにします。
1)Flex Builderのpropertiesファイルに日本語を記述できるようにする。
この設定を忘れると、文字コードがおかしいといわれ保存ができません。
はじめ、Flex Builder日本語版で、propertiesファイルがJavaなどのpropertiesファイルと同じようにしなければ、
日本語を記述できないと勘違いしてしまいましたが、単なるFlex Builderの設定のようです。
(せっかく日本語版なのですから、このあたりのデフォルトもきちんと設定されているとうれしいのですが・・・・)
ウィンドウ>設定 から、一般>コンテンツ・タイプ
で
「テキスト」を開くと、「Javaプロパティー・ファイル」がありますので、そこのデフォルト・エンコーディングを”UTF-8″に変更してください。
2)ソースディレクトリの下に
locale/ja_JP
ディレクトリを作成し、ここに文言ファイルを置きます。
別のディレクトリに配置し、そこをソースディレクトリとして追加してもかまいません。
3)コンパイル時に、ja_JPを使うようにします。
プロジェクトのプロパティで、「Flexコンパイラ」の「追加コンパイラ引数」に以下のように設定します。
-locale ja_JP -allow-source-path-overlap=true -source-path=locale/{locale}
4)実際に文言ファイルを作成します。
ここではファイル名はLBL0001.propertiesにします。
title=これはタイトルです。 desc=ここには説明が入ります。
5)文言ファイルで定義した文言をMXMLで使用する
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
label="{resourceManager.getString('LBL0001','title')}"
>
<mx:Metadata>
[ResourceBundle("LBL0001")]
</mx:Metadata>
</mx>
という感じで利用可能です。
文言だけじゃなく、ちょっとしたシステム設定などにも使えるのではないでしょうか?
かなり以前ですが、HTML_Template_Sigmaを紹介しました(こちら)が、
ここで、HTML_Template_Sigmaがユニークで使えるテクニックとして、
「テンプレートから使われている変数を取得する」
というテクニックがあります。
これを使うと具体的にどのようなことができるかといえば、
テンプレートを変更すると、プログラムの動きを変えるなんてこともできます。
あまり、劇的にやってしまうとテンプレートとプログラムをわける意味がないのですが、
たとえば、一覧表を表示したいときに「フィールドを追加したいなー」とか、どの項目を表示するかは、
実装時には決められない。
なんてことがある。
この時、テンプレートで処理できればなーなどと思ったことはないだろうか?
Smartyなどのテンプレートの場合、テンプレートにどのような出力がされるかはプログラムからはわからない。まあ、このような類のテンプレートの仕組みは私が知る限りは、このHTML_Template_Sigmaしかしらない。
(私はJavaもしくはPHPぐらいしかWEBアプリをつくらないので、それ以外の言語はしらないのだが・・・)
では、HTML_Template_Sigmaでは実際にどのように記述するのだろうか?
たとえば
<table>
<!-- BEGIN LIST -->
<tr>
<td>{fld_id}</td>
<td>{fld_title}</td>
</tr>
<!-- END LIST -->
</table>
のようなテンプレートがある。ここで、表示したい項目は
{fld_id}
{fld_title}
だ。
では、この値をプログラムからはどのように取得するかといえば、
-
$tmpl = new HTML_Template_Sigma();
-
: (途中省略)
-
$vars = $tmpl->getPlaceholderList("LIST");
-
foreach($key as $vars){
-
// $row はテーブルなどから取得した値の配列
-
$value = $row[$key];
-
$tmpl->setVariable($key,$value);
-
}
-
}
などのようにできる。
わざわざ、"fld_"というprefixをつけたのは、ここはフィールドとして自動的に取得していいよという感じのためだ。
このようなことができるとかなり汎用的なテーブル表示の処理が記述できるようになる。
また、このように変化に対応できるようなテンプレートであることを維持するためには、DBの設計などもシンプルでなければならず、これが結果としてあとあと拡張性がよりたかくできるなど、一石二鳥の面もあるのでおすすめだ。


