2011年6月19日日曜日

公開されているデータを取得してみる(データの取得と文字コード変換)

外部に公開されているデータを、Flash(AS3)で取り込んでみる
(東京電力で公開されているデータがあるので、それを取ってくる)



import flash.events.Event;

var url:String = "http://www.tepco.co.jp/forecast/html/images/juyo-j.csv";
var loader : URLLoader;
var request:URLRequest = new URLRequest(url);

getTepcoData();

function getTepcoData()
{
loader = new URLLoader();
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete); //読み終わるのを待つ
}

function onComplete(e:Event)
{
trace(loader.data);
}

まあなんて簡単。
と思いきや、、、、、、。
いろいろ諸問題が発生。。

Flashのtrace出力をみてみると、文字化け。。。
公開データはシフトJIS、FlashではUTF-8を扱うという文字コードの違いに起因します。

ということで、UTF-8へ変換をかけてあげないと、折角データを取り込んでもFlashで表示したりできなくなる。。
文字コード変換については、ByteArrayクラスに、writeMultibyteというメソッドがあるのだが、どうも安定性がわるいらしい。自力で書くのも良いが、既にライブラリとして公開されているので、それを活用することにする。
今回用いたのは、as3jcode
このライブラリは、bytearrayのデータを指定した文字コードに変換する機能を持っている。。

http://d.hatena.ne.jp/lyokato/20100121/1264083565   ←日本語での解説
https://github.com/lyokato/as3jcode ←ソースコードはこちら


URLLoaderのloadメソッドは、TEXTモードで取るとStringで入ってしまうので、
あとで大変。(as3jcodeのIFがByteArrayなので)

loader.dataFormat = URLLoaderDataFormat.BINARY;

としてバイナリで取ってあげると、ByteArrayで取れるので便利。
これを、Jcodeで
Jcode.from_sjis(loader.data)

と、変換してあげると、無事に日本語表示されましたん。


今回はこんな感じになりました。
import flash.events.Event;

var url:String = "http://www.tepco.co.jp/forecast/html/images/juyo-j.csv";

var loader : URLLoader;

var request:URLRequest = new URLRequest(url);

getTepcoData();

function getTepcoData()
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
}

function onComplete(e:Event)
{
trace(Jcode.from_sjis(loader.data));
}


折角なので、これを基にもう少し拡張して行きたいと思います。。

2011年6月14日火曜日

AIR2.6 非同期での書き込みが・・・

OpenAsyncで読み込みは非同期でできるけど、書き込みはなかなか難しそう。
Writeが終わった時のイベントが立たない。。。
COMPLETEが使えるのかとおもったけど、結局発生しない模様。。

WindowsコマンドラインでShiftJis以外の文字コードを使う

コマンドラインは起動すると、普通は文字コードが932(Shift Jis)になっている。
文字コードを変えるコマンドは、

chcp [文字コード]

普段使うのは、
932: Shift Jis
65001: Utf-8
20932: EUC-JP
50222: JIS
51932: euc-jp
くらいですかね。

ここで注意点、Shigt-Jisの状態で先に文字コードをラスターから「MSゴシック」など日本語対応フォントに変えておかないと、もれなく日本語が文字化け表示されます。

Flex SDK を用いて、コマンドライン経由でairパッケージをテストする場合、
文字出力がutf-8なので、この方法は知っておいたほうが特です。。

2011年3月22日火曜日

Processing環境が戻りつつ

震災関連で仕事が多忙を極めてたので、なかなかProcessing関連手を付けられずにいたのですが、
ようやく落ち着きが戻って来て、こちらの作業もできるようになってきたました。

とりあえず一部ですが昔のProcesssingのソースが動くことを確認。
さて、これから開発環境を立て直す必要が。。。
かなり忘れてる。。。。1つ1つ思いだしながらなので、時間がかかってます。

メタセコライブラリが変な件を直すのとProcessing1.2でもBullet動かすのが目標なので、
地道にやっていきます。
あの頃なんで出来てたんだろう。神がかってたのかな自分(汗

2011年3月16日水曜日

バッチファイルあれこれ

最近のバッチファイルはいろいろできるなあと関心。

日付時間をファイル名につける方法(※1)

普通にやると、1ケタの時は十の位にスペースが入るので、

===========================================
>echo %time:~0,2%%time:~3,2%%time:~6,2%
11204 …置換しない場合は、このように先頭に空白文字が含まれる

>set time2=%time: =0% …いったん一時変数に入れて置換する

>echo %time2:~0,2%%time2:~3,2%%time2:~6,2%
011204 …先頭に空白文字は含まれず、必ず数字が入る
===========================================
てな感じにしてやると良い。

で、結局は、
===========================================
set datef=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set time2=%time: =0% …いったん一時変数に入れて置換する
set hh=%time2:~0,2%
set fname=%datef%%time2:~0,2%%time2:~3,2%%time2:~6,2%
===========================================
とすると、ファイル名が自動生成できる。


昔は演算できたのかな?と思うのだけど、
イマドキのバッチファイルは演算が可能(※2)

==============
set /a %a% -2
==============
の用に、「/a」オプションをつけてやることで、演算ができる。

==============
set a=10
set /a %a% -2
echo %a%
==============
→8が表示される。

そのほか、条件文も結構ちゃんと書けます。
条件演算子が不等号ではなく、
-----
EQU - 等しい
NEQ - 等しくない
LSS - より小さい
LEQ - 以下
GTR - より大きい
GEQ - 以上
--------
となるのが、普通と違うところ。要チェックですね。。
等しいは、”==”でも行けるみたいですがね。(※3)


「コマンドプロンプトで1行に複数のコマンドを書くには、&を使う」
==========
dir /? & dir
==========
とかね(※4)


「ファイルの内容を比較して、相違があったら(なかったら)処理をする動作」
 FCの場合だと、2つのファイルがまったく同一なら2行目に「FC: 相違点は検出されませんでした」という文字列が出力される事を利用して、ファイル内容が同一だったら分岐という事を考えます。

=============
FC TEST1.TXT TEST2.TXT>RESULT.TXT
FOR /F "skip=1 tokens=2" %%F IN (RESULT.TXT) DO IF %%F.==相違点は検出されませんでした. ECHO SAM
=============
てな感じ。ECHO SAMの所を処理に置き換えればOK(※5)

(参考文献)
※1:バッチ・ファイル中で日付をファイル名に使用する
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

※2:DOSバッチファイルでの計算(算術演算)方法
DOSバッチファイルでの足し算、引き算、掛け算、割り算の方法。
http://www.ylw.mmtr.or.jp/~jkondou/program/doskeisan.htm

※3:バッチ プログラム中で条件処理を実行します。
http://www.colorconsole.de/console/ja/038.htm

※4:コマンドプロンプトで1行に複数のコマンドを書くには、&を使う
http://d.hatena.ne.jp/ku__ra__ge/20081009/p7

※5:比較したファイルの内容が異なるかどうかで条件分岐させるには
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/fccomp/1-0456.html

2011年3月2日水曜日

復活します。。。

ご無沙汰しております。。。。

米国留学から日本へもどり、職場へ復帰して結構な時間が経つのですが、
ソースコードを扱う機会が出てきたのと、ちょい無償開発とかしてる関係で、こちらも復帰しようかと思っています。

現在公開している、Processing用のメタセコライブラリも、動作の問い合わせなど頂いていますので、
自宅の環境を再構築しつつ、メンテナンス再開していこうと思います。

Processingも1.2となったり、自宅の環境が64ビット化したりと、
開発をしていた頃の状況にもどすにはちょっと時間を要しそうですが、(脳みそも)
別件で行っていたc#を用いた画像処理ちょいコマンドラインツール(バッチファイルでの利用目的)開発など、
何個か公開できるものがあるので、そちらも平行していこうと思っています。

にしても、JBulletがうまく動かない・・・・・。
そこではまってても意味が無いので、BPSGRやメタセコローダの環境だけでも早く元にもどそうかな。。。

ついでなので、Win7環境でのProcessingの開発環境の整え方とかも、
書いていけばいいんだなと思う今日この頃です。
本業もなかなか多忙なので、マイペースになりますが、
今後ともよろしくお願いいたします