棚からパルチャギ

日々の雑記、ニュース拾いとか

2007. 09. 25

AS3のリフレクション
AS3で動的にクラスやメソッド名などを取得する方法とか。

クラス名だけならgetQualifiedClassName()で取得できるので簡単なんですが、 メソッドやプロパティを取得するにはdescribeType()で返ってきたXMLオブジェクトから取り出さないといけないので、少し面倒ぽい?
XMLにはE4Xでアクセスできるので参照するだけなら1行で済みそうですけど、あんまり勉強していないのでなんとも。

関連:flash.utils.describeType

2007. 09. 16

conveyorでmailmanのメールリストをRSS出力
xrea鯖ではPlagger動かせなかったので、 PHP版Plaggerな「conveyor」を触ってみたりとか。

とりあえず、Plagger::Plugin::CustomFeed::Mailmanを移植してみました。
conveyor/rhacoともにSVNリポジトリの最新版を使っているので、配信バージョンだと動かないかも…。

conveyor/library/workers以下に配置すれば動作するはず。 Line workersにCustomfeedMailmanとFeedOutを順に追加して一度生成してから、Lineを指定して読み込みをすると、取得対象URLの設定なんかができるようになります。 Workerの選択時に設定項目が表示されなかったりするのは現行バージョンの不具合かと思われます。。。

本家は件名しか取得できていなかったんですが、投稿者とか投稿日時とか全文配信とか欲しいよねーてことで若干豪華になっています。 プラグイン単位で設定を読み書きするような手段がなかったので、取得済み判定はせずに毎回取りに行っているんですが、30分に1回程度しか処理しないので鯖に負担はかけてない…とは思っているんですが。
動作サンプル: Apache-Users ML/ PHP-users ML/ Ethna ML


conveyorの導入手順とか詳しく書こうとも思ったんですが、現行バージョンにはまだ不具合や不安定な部分が残っているので、 本格的に使っていくにはもう少し成熟してからかなー、と思って保留。 色々と触ってフィードバックできれば良いのですが。

xrea鯖で運用する場合は、パーミッション等の問題を回避するためにCGI版で動作させないと悶絶死します。 あとは、conveyorをSVNリポジトリから利用する場合は、workersが本体のtrunkと独立した場所にあるので別途取得したうえで、conveyor/library/workersに配置する必要があるとかがハマリどころかも。

2007. 09. 12

httpd.confで許可したIPアドレス以外はDigest認証
<Directory "/path/to/htdocs">
    AuthType Digest
    AuthName "Authentication Required"
    AuthDigestFile /usr/local/apache2/conf/.htdigest
    Require valid-user

    Order deny,allow
    Deny from all
    Allow from XXX.XXX.XXX.

    Satisfy any
</Directory>
なんか、すぐ忘れるのでメモ。
Apache2.0.61に更新したけど、UserDirが<IfModule mod_userdir.c></IfModule>で囲まれないのは、 メールとか出せば修正されるのかしら。--disable-userdirすると( ゚Д゚)マズーなはずなのに、結構何年も放置されてる気が。

2007. 09. 10

埋め込みアセットクラスをgetDefinitionByName()で参照する
ぐぐるさん頼りでActionScript3についていろいろ調べたネタでも投下していこうかと。

AS3で画像やサウンド(mp3)なんかをEmbedを使ってswfファイルに埋め込む場合、数が多くなると大量の宣言が並んで大変なことになります。 Embedは仕方が無いとして、ロードの部分はなんとか効率良くできないものかなーと思うわけで。

[Embed(source='image0.gif')] private var Image0:Class;
[Embed(source='image1.gif')] private var Image1:Class;
[Embed(source='image2.gif')] private var Image2:Class;
...

var img: Array = new Array();
img[0] = new Image0();
img[1] = new Image1();
img[2] = new Image2();    // ←列挙するのは、なんか美しくない

Embed Generatorなんてツールまであるくらいだから、 これ以外に手法はないのかと思っていたんですが、getDefinitionByName()というメソッドが使えるようです。

import flash.utils.getDefinitionByName;

for (var i:int=0; i<3; ++i) {
    img[0] = new (getDefinitionByName("Sample01_Image"+ i) as Class);
}

こんな感じ。 「Sample01」はアセットを埋め込んだクラス名。
埋め込みアセットクラスの場合は、単純に getDefinitionByName("Image0") のようには参照することができず、 親(?)のクラス名をアンダーバーで繋がないといけないとのこと。 とにもかくにも、これでスッキリしました。
ネタ元:ActionScript 誰かが物凄い勢いで解答するスレ 17

2007. 08. 11

MySQL 5.x のUTF-8対応
結合文字に関連して。 「Appendix 2: 日本語処理における注意事項」によると、Windows Vistaから利用可能になったJIS第3/第4水準の漢字について、 MySQL 5.0では3byteまでのUTF-8しか対応していないため4byte目は格納されませんよ、というお話。地味に怖いです。

バックエンドにMySQLを利用しているシステムでは、そういった文字が入力されないように判定する必要があるかもですね。 これまで代用文字が使われていた地名や人名が、正規の文字で入力されると正しく保存されないわけで。 あと、第3/第4水準の漢字には痛いペンネームに使われそうなカッコイイ漢字が多く含まれているので、 ネトゲのキャラ名に付けたら文字化けしたよヽ(`Д´)ノ みたいなことになりそうな予感w
(追記:結合文字じゃなければ関係なかったぽいです。拡張文字→4byteかと思ってしまった…)

一応、本家のドキュメントにも記載されてました。対応は6.0の予定?
【適当に翻訳】 MySQLはUTF-8の補助文字(4byteのUTF-8)に対応していません。 対応しているのはUnicodeの0面/BMP(Basic Multilingual Plane)だけで、一部の漢字とかは非対応だけど(゚⊿゚)シラネ
バグとして報告されたこともあったけど、却下しました。ぶっちゃけ、(次の文字見るまでは)結合文字なのか判定できないから無理なのです。
最近は携帯関連の仕事ばかりだったので、Vista対応とかあんまし考えてなかったなー。
参考:MySQLの現行UTF-8の問題とその対処方法について
UTF-8-MACとか
仕事でもプライベートでもMacに関わることは殆どないのですが、Macユーザとのデータのやり取りではまったのでめも。
  • Mac OS Xでファイル名に使用されるエンコードは一般的なUTF-8とは異なり、NFD(Normalization Form D)という正規化形式が採用されている (参考:MacWiki - UTF-8-MAC)
  • UTF-8-MACでは、日本語の濁音や半濁音が結合文字として表現される
  • UTF-8-MACに対応したWindows用のFTPクライアントは手持ちのだとNextFTP(4.80)のみ ※FileZilla(2.2.32)、FFFTP(1.92a/UTF-8 私家対応版)、WinSCP(4.0.3)はファイル名破損等でダメ
あと、ファイル名に「:」(コロン)が含まれていたりもしてWindowsマシンでは結構ぐんにょり。

ファイル名に「:」とかありえなくないですかー、みたいなことを遠まわしにはてなで訊いたら、 「というか『/』とNUL以外なら全部使えますが何か?」と言われてショック。 「|」とか「>」とか「*」なんかもファイル名に含められるんですね。 だからどうだというか、やっぱり使えちゃダメでしょと思うわけなのですが…orz

  [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]