Perlモジュールのバージョン違いに填まる

自作CMSでJSONを使うことにしました。
最近あまり使っていませんが理屈はわかっています。JavaScriptではevalです。
ではなくて、PerlではJSONモジュールを利用すれば問題ない、はずでした。
結論から言うと、ローカルのテスト環境と、coreserverではJSONモジュールのバージョンが違うためにサブルーチンが見つからないとかいわれて怒られていたのでした。
ローカルの環境では2.21、coreserverは3年前の1.14で、to_jsonやfrom_jsonがありません。幸いなことにJSONhaPurePerlなのでコピーするだけでも動きます。
ということで、ライブラリパスを追加するのですが、pushではダメです。
先に読んでくれないと困るのでunshiftします。

BEGIN{ unshift @INC, (./'; }


これで問題なく動くようになりました。
ちなみに、unshiftではなくてpushを使ってしまっていて、なぜ新しいバージョンを読まないのだろうと数時間悩んだなんて恥ずかしくていえません。
なにはともあれでめたしでめたし。

ActionScriptの記法(コーディングスタイル)に馴染めない

ActoinScriptをいじり始めて半年ぐらいになりますが、まだまだ記法に馴染めません。
特にイベントをいちいち追加しなければならないところなどもどかしく、ボタンなんてクリックするためにあるんだからクリックイベントのメソッドぐらい用意して置けよなんて思うわけです。

btn.addEventListener( MouseEvent.CLICK, btn_onClick );
function btn_onClick( e:MouseEvent ):void{
  trace( e.target.name );
}


一般的なマニュアルではこうなっていますが、いちいち関数名を考える身にもなってくれと、どの道、このイベント以外からは参照しない処理だと、いちいち分けないといけない意味がわからないのです。
つまりこういうこと。

btn.addEventListener(
  MouseEvent.CLICK,
  function( e:MouseEvent ):void{ trace( e.target.name ); }
);


関数名の重複を怖がる必要はなくなりました。
JavaScriptが頭にあると、スクリプトは外部ファイルに置くべきという理屈から、いちいち関数を用意していたと思うのですが、パブリッシュが前提のActionScriptでは不要の作業。
よく考えればどうってこと無いのですが、解説サイトによっては「関数名の重複を避けるためにパッケージ化」しますなどと、むだな手間を掛けているのを見るとうんざり。
無名関数をもっと使いこなしたほうがいい気がします。
それに、処理速度とか、オブジェクト指向だとかそっちのけで、Perl使いとしてはこっちのほうが見やすいのです。
でめたしでめたし。

WordPress3.0を導入してみた

リリースされてからしばらく経ち、特に大きな問題もなさそうなので更新してみました。
少し前の更新ではDBが消えるなど致命的な問題がありましたが、3.0では特にそういったことも無くすんなりと更新が完了。
それほど使いこなしているわけでも無いので、必要な部分をさくっと確認して終わりです。

USB扇風機の不甲斐なさ

最近夏場になると、家電やパソコン売り場で売り場面積を多く占めることの多いUSB扇風機。
1つぐらいは手に入れておいても悪くは無いと、ELECOMのFAN-U16SVというモノを買いました。

結論から言えば地雷です。

2ヶ月もしないうちに壊れて交換してもらい、新しいものは2週間で壊れました。
分解すればわかるのですが、メーカー不明のモーターが入っているだけ。
安くは無いのですが、まぁ地雷という奴です。
ビックで買ったので初回は交換してもらえましたが、次は有償修理だといわれましたので、新しいモノを買ったほうが安くつくことは明らか。
とはいえ、もうこの手のオモチャは買いませんけどね。
どうしても自分で買って地雷かどうかを確認したい方へのリンクを載せておきます。

CentOS5.5でyum一括アップデートしたらPerlがCompress::Zlibでコケるようになった

昨日、yum一括更新を行ったのですが、その後でどうもクローラが正常に機能しなくなりました。
ログを見てみると、Compress::Zlibで以下のようなエラーを吐いていることを確認。(コピペでなくて入力なのでタイポあるかも)

dualvar is only available with the XS version of  Scalar::Util at /usr/perl5/lib/site_perl/5.8.8/Compress/Zlib.pm line 9


つまりはScalar::Utilのせいで動かないらしいです。
そこでCPANからScalar::UtilをiinstallしようとしてもNOT OKになってしまうので、とりあえず

force install Scalar::Utilde


でしのぐことに。
おそるおそるクローラを起動するとエラーを吐かずに正常に機能するようになりました。
でめたしでめたし。

ActionScript3でラジオボタンはデフォで使えても、グループは使えない

コンポーネントにラジオボタンがあります。HTMLではお馴染みフォームの部品のひとつです。これをActionScript3で使おうとしてハマりました。設置したラジオボタンにグループを割り当てて、選択状態のラジオボタンを取得しようと、サンプルコードにあるとおりにコードを用意しました。

var rbGrp:RadioButtonGroup = RadioButtonGroup.getGroup("radioGroup"); 


これをパブリッシュすると以下のようにエラーが出ます。

1046: 型が見つからないか、コンパイル時定数ではありません : RadioButtonGroup。


はて?何がおかしいんだろう・・・と散々悩んだ挙句に、だめもとでライブラリをインポートしなおしてみることにしました。

import fl.controls.RadioButtonGroup; 


このライブラリをインポートするとエラーは発生せず、
rbGrp.selection.value
で選択状態のラジオボタンの値を取得できるようになりました。
ラジオボタンが使えるのに、グループ判定が使えない。このような不完全なオブジェクトが実装されている理由がよくわかりません。せめてundefinedを返せばいいのに、コンパイル(パブリッシュ)エラーですからね。

にっぽつ!の障害情報を一箇所にまとめた

にっぽつ!なコンテンツ、WCG、Folding@home、BOINCは自宅にある1つの鯖で運営されています。
そして自宅の一般的に言われるネット環境はそれほど悪くはないのですが、アクセスが集中するとルータが落ちます。鯖もたまに落ちることがあります。これらの情報は各サイトにて掲載していたのですが、うっかり忘れたり、漏れたりしてしまうわけです。ということで、にっぽつ!にて、一括で管理することにしました。ソースはXMLにあります。このファイルをWCG、Folding@home、BOINCのサイトから呼び出して表示するように調整しました。これで、にっぽつ!のデータを更新するだけで、3つのサイトに行き渡ることになります。

ActionScript3のScrollPaneでハマる

ActionScript3つまりFLASHでのお話です。
HTMLの場合はdivタグのスタイルwidthやheightを設定してoverflow:autoとすれば簡単なスクロール領域を用意できます。
ActionScript3の場合はScrollPaneを使えばいいらしいのです(それがわかるまで自分で大きさやScrollRectを計算してスクロールバーまで自作してこんな機能はflashにないのかと愚痴ってました)が、その内容をあてがうところで躓きました。単純にaddChildすると手前に表示されてScrollPaneが奥になってしまいます。てっきり子供にさえすればコンポーネントが勝手にやってくれるのかと思いましたが違いました。sourceというメソッドがあって、それにオブジェクトを放り込む必要があったのです。
さらに、このScrollPaneのsourceに放り込んだオブジェクトは使い回しができません。ほかの子供になると対象から外れてしまうようです。別のScrollPaneのsourceにあてがってやると一番最後のもののみが表示されます。オブジェクトの単純コピーでは参照になるためかやはりだめで、別の入れ物を用意してやらないとだめのようです。異なる窓で大きさの異なるMovieClipを表示させたかったのに、できませんでした。

Flashにおけるフォーカスの扱い方にハマる

Flashのお話です。
イベント処理を確認していたところ、イベントが発生しない事があったので動作を確認していました。
どうやらコンポーネントにフォーカスが移動すると、stageがイベントを拾わなくなるようです。
stageをクリックするだけではだめで、stageに置いたオブジェクトを選択してもだめでした。
結局、この問題の原因となったListを選択したらフォーカスをstageに移動させるという、いまいちな方法で対処しました。
ざっと検索しても出てこなかったので、この挙動は不具合なのか仕様なのかよくわかりませんでした。