2011年12月 のアーカイブ

2011年案件まとめ

2011年12月31日

2011年にやった案件をリストアップしてまとめてみた。
詳細は公開出来ない案件もあるので、傾向を見るためのメモ。

断続的に続いたり、複合的に絡みあっている案件のカウントは大体だが、ざっとこんな感じ。今年は継続的な案件が多めだった。

php案件が多いのは毎年の傾向。扱ったデータベースでは

という具合。

ということで、2012年も相変わらずのペースで、特に好き嫌いなく、出来ることであれば何でもやっていこうと思うので、これからもよろしくお願いします。

本年はありがとうございました。


本当にちょっとした小ネタ。
いまさらながらFlashLite1.1を動的生成するという作業があった。本当にいまさらなんだけど、さてさて…とネットをざっと見た感じ、swfmill0.2系にパッチをあてるインストールの記事が上位にあったので最新情報を書いてみることにした。
情報は常にアップデートされるべきだとは思うけど、追い続けられるわけでも無いから、気づいた誰かが新しい記事を書いていけばいいんじゃないかな。

現時点の最新バージョンは、0.3.2です

swfmillというのは、swfファイルからXMLファイルを作成したり、逆にXMLファイルからswfファイルを作成してくれるツール。

基本的な流れは、AdobeFlashなりで元になるswfファイルを作成。それをswfmillを使ってXMLファイルに変換。そのXMLの中身を変更して再度swfを作成という風。
XML中に、画像はbase64のエンコード文字列で、テキストはそのままテキストで記述出来る。最新版のドキュメントを見ると外部の画像やフォント、swfファイルも指定できるみたい。

0.2系ではパッチがあった

ざっと検索して出てくる日本語の記事は、まだ0.2系だった頃の内容のようだ。FlashLite1.1の内部文字コードはCP932なのだけど、swfmillではUTF-8がデフォルトで文字コードを変更できないので対応パッチをあてましょうという事が書いてある。
最新版の0.3.2でも

#swfmill swf2xml test.swf test.xml
error : xmlEncodeEntitiesReentrant : input not UTF-8

とエラーが出た。これはパッチの登場か?と思いきや

#swfmill -help

swfmill 0.3.2
    XML-based SWF processing tool

usage: swfmill [<options>] <command>

<command> is one of:
    swf2xml <in> [<out>]
        convert from SWF to XML.
        <in> is a single SWF file, or 'stdin'
        <out> is a single XML file, or (by default) 'stdout'

    xml2swf <in> [<out>]
        convert from XML to SWF.
        <in> is a single XML file, or 'stdin'
        <out> is a single SWF file, or (by default) 'stdout'

    simple <in> [<out>]
        convert from a movie definition file to SWF.
        <in> is a single XML file, or 'stdin'
        <out> is a single SWF file, or (by default) 'stdout'
        (for details, see README)

    xslt <xsl> <in> [<out>]
        transform <in> to <out> as described by <xsl>.
        <xsl> is the XSLT stylesheet,
            and can use the swft: extension.
        <in>  must be some XML (depends on <xsl>)
        <out> is either SWF (when it ends in .swf)
            or XML, by default on 'stdout'

<option>s are:
    -h print this help and quit
    --version print the version number and quit
    -v verbose output
    -V extra-verbose debugging output
    -d dump SWF data when loaded (for debugging)
    -e specify text encoding in SWF (for SWF 5 and earlier only;
           default: UTF-8).
    -n deactivate libxml network access

Please report bugs at https://github.com/djcsdy/swfmill/issues

と、ありがたいことにエンコーディングのオプションが実装されていた。

ということで

#swfmill -e cp932 swf2xml test.swf test.xml

で、無事にXMLファイルが作成された。めでたしめでたし。ちなみにXMLファイルのエンコードはUTF-8になる。

まぁこれだけの話です

以上、最新版ではパッチあてなくても平気ですよ、というお話でした。
正直、現時点でFlashLiteやFlashの動的生成に需要がそんなにあるのか?という部分はあるけれど、だからこそ気づいたことを書いて公開しておこうかなと思った次第。ちょっとでも役に立てば嬉しいです。


スマートフォン用サイトを、jQueryMobileを使って開発している時にはまった事柄のメモ。分かってしまえばなんでも簡単。

$(document).ready()の代わりに使うというイメージ?

ブラウザ上にページが表示されるタイミングで色々と細工をしたいという場合、jQueryを使うならば

$(document).ready(function(){
//処理
});

なんて風にする。
ありきたりな手法だ。

jQueryMobileでは、それの代わりに

$(ページのセレクタ).live( "pageshow", function(){
//処理
});

といった具合に記述する、といった約束みたいなのだけど、これがうまく動かなかった。

うまくいかないというのは具体的にどういうことか

「うまくいかない」というのは便利な言葉で、それは具体的にどういうことですか?という質問をしなくてはならず、場合によってはうまくいかなくてイライラしている人を怒らせてしまったりもする。
思ったように動かないということだけは分かるんだけど、もうちょっと情報が欲しいということは珍しいケースではない。

今回は、A.html からB.html に遷移して、B.htmlのページが表示されるタイミングで動いて欲しかったわけなんだけど…動いてくれなかったわけです。

B.htmlのソース中に

$(ページのセレクタ).live( "pageshow", function(){
  alert('hogehoge');
});

と書いておけば、B.html のページが表示されるタイミングでアラートダイアログがあがるハズ…なんだけどあがらない、という。

ページをリロードすると動く

見出しの通り。

何故かページをリロードすると動いてくれるということに気づいた。最初は動いたり動かなかったりするんだよなぁ…という具合だったわけで、色々やっていくうちに「どうやらリロードすると動くみたいだ」と。何事も粘り強く続けることが肝心だ。

ということは

jQueryMobileは、ajaxを使って遷移先のページのソースを読み込んで表示する仕組みだ。
なので、javascriptの評価もページのソースを読み込む前にしておかないといけないんじゃないか?と考えた。

リロードしたら動くというのは、つまりそのページがjQueryMobileとして最初のページなので、その場合だけソース読み込み後にjavascriptが評価されているんじゃないか?と。

つまり

$(ページのセレクタ).live( "pageshow", function(){
//処理
});

は、該当ページ中に書くのではなく、遷移前のページに書いておく必要があるということ。実際それで問題無く動いた。
遷移の流れは複数になったりするので、それぞれのページの動作を1つの外部ファイルにまとめて、常にそれを読み込むようにした。
当然のことながら、ページのセレクタはhtmlファイルを跨いで遷移する全部のページを一意にしておかないとおかしなことになる。

分かってしまえば、すごく簡単な話。

WAPっぽいですね

EZweb初期のマークアップ言語はchtmlでは無く、WAP(Wireless Application Protocol)というものだった。
これはchtml何かと違って、1ファイルに複数ページが書けるもので
 ページ遷移時に読み直しをしないでもいける=通信が遅くてもそこそこ大丈夫
という仕様だった。

jQueryMobileも何となくその手法に近くて、それを利用することでアプリケーションっぽい動作が出来るわけなんだけど、それが1ファイル内完結の仕組みではなく、全体として1つのアプリケーションを構成するようになっています、ということみたいだ。

繰り返すけれど、分かってしまえば何てことはない。ただちょっと頭の切り替えをしないとおかしな感じで躓きますね、という話。