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

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

PerlのNet::Twitterモジュールがインストールできない

Perlでtwitterに何かをやらかすにはNet::Twitterというモジュールを利用するといいようです。
早速Net::Twitterを入れてみることにしました。
ちなみに、WindowsVistaはActivePerl 5.8.8です。
ppmでは用意されていないので、CPANからインストールします。
しかし、実際に実行してみると、いろいろ足らないからインストールしますよといわれて、言うとおりにインストールしたのですが、あちこちでNOT OKとなってしまいます。

C:\Users\admin>cpan install Net::Twitter
CPAN: Storable loaded ok
Going to read C:\Perl\cpan\Metadata
  Database was generated on Thu, 22 Apr 2010 21:26:57 GMT
install is up to date.
Running install for module Net::Twitter
Running make for M/MM/MMIMS/Net-Twitter-3.12000.tar.gz
CPAN: Digest::MD5 loaded ok
CPAN: Compress::Zlib loaded ok
Checksum for C:\Perl\cpan\sources\authors\id\M\MM\MMIMS\Net-Twitter-3.12000.tar.gz ok
Scanning cache C:\Perl/cpan/build for sizes
Deleting from cache: C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56 (17.6>10.0 MB)
Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56/t/Big-Dummy (Permission denied) at C:/Perl/lib/CPAN.pm line 9
6
Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56/t (Directory not empty) at C:/Perl/lib/CPAN.pm line 966
Can't remove directory C:\Perl\cpan\build\ExtUtils-MakeMaker-6.56 (Directory not empty) at C:/Perl/lib/CPAN.pm line 966
Deleting from cache: C:\Perl\cpan\build\Net-Twitter-3.12000 (17.6>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Sub-Name-0.04 (17.0>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Sub-Identify-0.04 (16.9>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Variable-Magic-0.41 (16.7>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\B-Hooks-EndOfScope-0.08 (16.5>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\namespace-clean-0.14 (16.4>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Scalar-List-Utils-1.23 (16.3>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Devel-GlobalDestruction-0.02 (16.2>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Class-MOP-1.00 (16.0>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Moose-1.01 (15.0>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Data-Visitor-0.27 (12.5>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\DateTime-0.55 (12.4>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\DateTime-Format-Strptime-1.2000 (11.6>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\MooseX-MultiInitArg-0.01 (11.4>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\namespace-autoclean-0.09 (11.4>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Digest-SHA1-2.12 (11.3>10.0 MB)
Deleting from cache: C:\Perl\cpan\build\Encode-2.39 (11.2>10.0 MB)
CPAN: Archive::Tar loaded ok
Net-Twitter-3.12000/
Net-Twitter-3.12000/lib/
Net-Twitter-3.12000/lib/Net/
Net-Twitter-3.12000/lib/Net/Identica.pm
Net-Twitter-3.12000/lib/Net/Twitter.pm
Net-Twitter-3.12000/lib/Net/Twitter/
Net-Twitter-3.12000/lib/Net/Twitter/Role/
Net-Twitter-3.12000/lib/Net/Twitter/Role/WrapError.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/Legacy.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/API/
Net-Twitter-3.12000/lib/Net/Twitter/Role/API/Search.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/API/TwitterVision.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/API/REST.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/API/Lists.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/OAuth.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/RetryOnError.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/RateLimit.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/SimulateCursors.pm
Net-Twitter-3.12000/lib/Net/Twitter/Role/InflateObjects.pm
Net-Twitter-3.12000/lib/Net/Twitter/OAuth/
Net-Twitter-3.12000/lib/Net/Twitter/OAuth/XAuthRequest.pm
Net-Twitter-3.12000/lib/Net/Twitter/API.pm
Net-Twitter-3.12000/lib/Net/Twitter/Search.pm
Net-Twitter-3.12000/lib/Net/Twitter/Core.pm
Net-Twitter-3.12000/lib/Net/Twitter/OAuth.pm
Net-Twitter-3.12000/lib/Net/Twitter/Error.pm
Net-Twitter-3.12000/lib/Net/Twitter.pod
Net-Twitter-3.12000/Changes
Net-Twitter-3.12000/MANIFEST
Net-Twitter-3.12000/examples/
Net-Twitter-3.12000/examples/oauth_webapp.pl
Net-Twitter-3.12000/examples/oauth_desktop.pl
Net-Twitter-3.12000/README
Net-Twitter-3.12000/src/
Net-Twitter-3.12000/src/net-twitter-pod.tt2
Net-Twitter-3.12000/src/build.pl
Net-Twitter-3.12000/t/
Net-Twitter-3.12000/t/22_twitter_insanity.t
Net-Twitter-3.12000/t/20_exceptions.t
Net-Twitter-3.12000/t/unicode.t
Net-Twitter-3.12000/t/lib/
Net-Twitter-3.12000/t/lib/TestUA.pm
Net-Twitter-3.12000/t/13_search.t
Net-Twitter-3.12000/t/99-pod_syntax.t
Net-Twitter-3.12000/t/02_fails.t
Net-Twitter-3.12000/t/51_rate_limit.t
Net-Twitter-3.12000/t/40_nt_subclasses.t
Net-Twitter-3.12000/t/11_useragent.t
Net-Twitter-3.12000/t/50_inflate_objects.t
Net-Twitter-3.12000/t/99-pod_coverage.t
Net-Twitter-3.12000/t/21_wraperror.t
Net-Twitter-3.12000/t/10_net-twitter-regression.t
Net-Twitter-3.12000/t/12_identica.t
Net-Twitter-3.12000/t/01_basic.t
Net-Twitter-3.12000/t/60-api_lists.t
Net-Twitter-3.12000/t/retry.t
Net-Twitter-3.12000/t/geo.t
Net-Twitter-3.12000/t/51_since.t
Net-Twitter-3.12000/t/00_load.t
Net-Twitter-3.12000/t/14_authenticate.t
Net-Twitter-3.12000/t/30_legacy.t
Net-Twitter-3.12000/t/20_generated.t
Net-Twitter-3.12000/t/15_subclass.t
Net-Twitter-3.12000/t/99-pod_spelling.t
Net-Twitter-3.12000/t/lookup_users.t
Net-Twitter-3.12000/META.yml
Net-Twitter-3.12000/Makefile.PL
Net-Twitter-3.12000/inc/
Net-Twitter-3.12000/inc/Module/
Net-Twitter-3.12000/inc/Module/Install.pm
Net-Twitter-3.12000/inc/Module/Install/
Net-Twitter-3.12000/inc/Module/Install/WriteAll.pm
Net-Twitter-3.12000/inc/Module/Install/Fetch.pm
Net-Twitter-3.12000/inc/Module/Install/Win32.pm
Net-Twitter-3.12000/inc/Module/Install/Include.pm
Net-Twitter-3.12000/inc/Module/Install/Repository.pm
Net-Twitter-3.12000/inc/Module/Install/AutoInstall.pm
Net-Twitter-3.12000/inc/Module/Install/Base.pm
Net-Twitter-3.12000/inc/Module/Install/Metadata.pm
Net-Twitter-3.12000/inc/Module/Install/Can.pm
Net-Twitter-3.12000/inc/Module/Install/Makefile.pm
Net-Twitter-3.12000/inc/Module/Install/AutoManifest.pm
Net-Twitter-3.12000/inc/Module/AutoInstall.pm

  CPAN.pm: Going to build M/MM/MMIMS/Net-Twitter-3.12000.tar.gz

*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- Test::More                 ...loaded. (0.94 >= 0.88)
- Carp                       ...loaded. (1.04)
- Digest::SHA                ...loaded. (5.47)
- List::Util                 ...loaded. (1.18)
- Net::Netrc                 ...loaded. (2.12)
- Scalar::Util               ...loaded. (1.18)
- Data::Visitor::Callback    ...missing.
- DateTime                   ...missing. (would need 0.51)
- DateTime::Format::Strptime ...missing. (would need 1.09)
- Encode                     ...loaded. (2.12)
- HTML::Entities             ...loaded. (1.35)
- HTTP::Request::Common      ...loaded. (1.26)
- JSON::Any                  ...loaded. (1.22 >= 1.21)
- LWP::UserAgent             ...loaded. (2.033 >= 2.032)
- Moose                      ...missing. (would need 0.9)
- Moose::Exporter            ...missing.
- Moose::Role                ...missing.
- MooseX::MultiInitArg       ...missing.
- namespace::autoclean       ...missing. (would need 0.09)
- Net::OAuth                 ...missing. (would need 0.2)
- URI                        ...loaded. (1.52 >= 1.4)
- URI::Escape                ...loaded. (3.29)
- Try::Tiny                  ...loaded. (0.04)
- JSON                       ...loaded. (2.17 >= 2.02)
==> Auto-install the 9 mandatory module(s) from CPAN? [y] 

とりあえずそのままYを押して足らないものを入れさせてみましたが、ぜんぜんだめでした。

ちなみに、CentOS5のPerl5.8.8でも同じような現象に。CPAN自体をアップデートしてやり直してもだめ。yumから1つ1つ入れてみようと思って、まず

yum install perl-Moose

を終えても、CPANからはまた入れなおそうとしてしまいます。
Mooseという新しい技術を利用するのもいいのですが、入れること自体がハードルが高いとあまり意味がないですね。別のOSで試すとか、あきらめるしかないのかなぁ。がっかり。

ActionScript3でdrawRectのバグ

ACtionScript3で矩形を描くのにdrawRectがあるけど、よくよく見るとどうもおかしい。
どうも基点にごみが混ざっているようだ。
内部的にはlinetoでやっているのか、基点つまりlinetoだt基点と終点が重なる場所、つまり線でいうところのcapsがsquareになっている。表示を拡縮すると消えるけれど、小さく表示すると露骨にはみ出る。
drawRectは使えないってことなのかなぁ・・・あぁ、めんどくさい。

漫画・アニメの「非実在青少年」も対象に 東京都の青少年育成条例改正案

ITmediaの記事のタイトルをお借りしました。

twitterのリツィートからしったのですが、東京都でトンデモない条例が提出されていた模様。
児童ポルノ禁止法で騒がれたのも、そんなに昔ではない。
この手の「表現の自由を抑制しようとする不当な圧力」はいったいどこから生まれてくるのか。
いったい、「幾つの企業を潰し、幾人の個人を潰そう」というのか。

憲法を理解していない議員を、議員の椅子から引き摺り下ろす権利」は、都民にはないのだろうか?
もちろん、ちゃんと税金払ってますよ?

coreserverのSSL設定でディレクトリ指定が反映されない

coreserverでSSL導入を前提に構築し、問題がなさそうなので独自IPを購入して、そのIPでドメインを割り当て・・・
ると、強制的にディレクトリが作成されてしまう。
NoDir設定が有効にならない。
チェックを入れて保存しても反映されない。
時間を空けて何度か試してみてもだめだったのでサポートに問い合わせてみた。
深夜3時に送信したら、早くも数十分後に回答が。
その後2度やりとりしたけど、
「いただきました症状につきましては、弊社でも把握しており、担当部門からは対応中との報告を受けております。 」
まぁ、おそらく放置プレイなのでしょう。
仕方がないので、public_htmlの下のディレクトリに再構築しなおすしかなかったのでした。
でもこれでとりあえずSSLが導入できるわけですね。
その工程でも問題があったらどうしよう・・・

coreserver(CORE-B)のファイル容量

少し前にも書きましたが、アカウント作成直後ではファイル容量はフルでは使えません。送られてくるメールやページ上では、FTPなら1時間程度とありますが、実際にはほぼ即使用が可能です。
新しく取ったアカウント名ではしっくりこなかったので、アカウントを再取得することにしたので、ファイル容量についてしばらく観察してみました。

およそ4時間でファイル領域が確保されました。概ねこの程度の時間を考えておいたほうが良いようです。
ちなみに確保されるまでは
------------------------------
データ更新中ですので、次回更新をお待ちください。
------------------------------
と表示されます。
これが確保されると
------------------------------
最大ディスク容量 60,000.00 MB
使用済ディスク容量 0.00 MB (1.66 %)
残りのディスク容量 59,999.99 MB (98.34 %)
最大ファイル数 500,000 個
使用ファイル数 5 個
残りのファイル数 499,995 個 (99.99 %)
※ 数時間毎に更新されます。
※ 上限を超えると、CGIなどの書き込みでファイルデータが破壊される可能性があります。不要なファイルを削除して下さい。
------------------------------
となります。

PerlでCGI::Sessionがcoreserverではうまく動かない

Perlでセッション管理の話です。
PHPだとセッションはsession_start()と$_SESSIONで楽に扱えますが、Perlではたまに苦しみます。
さて、今回はローカルのVistaのActivePerlでは正常に動くスクリプトをcoreserverにアップすると挙動が違うのです。
クッキーは更新されているのに、セッションファイルが更新されません。
クッキーがない場合はセッションファイルを作成しているのですが、それ以降の更新が行えません。
また、クッキーだけ残してセッションファイルを削除するとセッションファイルの作成すらしてくれません。
極めつけはアクセスすると1分ごとにセッションファイルが量産されていくのです。
もちろんセッションの有効期限はそんなに短くありません。
どうしてかな~と、いじっているとどうやらリダイレクトが悪さをしているようです。
たとえばログイン処理でログインに成功するとログイン後のトップページへリダイレクトするわけですが、そうすると正常にセッションが更新されません。
リダイレクトをやめて一度ページを表示するなど出力をクローズしておけば期待した動きをしてくれます。

でも、CGI::redirectとCGI::Sessionの相性が悪いという話は聞いたことがありません。自分の開発環境では一度もそういう現象には出くわしたことがありません。
環境が違う点といえば・・・cgiwarpぐらいかな。「CGI::Session coreserver」とかでぐぐっても同じ現象の記事が見つからないので自分の書き方が悪いのかな~

UTF-8とUnicode

文字を扱うときは普段からUTF-8を使用します。Shift_JISやeucはめったに使いません。
さて、UTF-8はUnicodeなのですが、表記の方法で躓きました。
PerlやPHPなどのスクリプトで扱う場合は、たとえば「あ」なら「\xe3\x81\x82」と記述するのですが、「U+xxxx」という表記が必要な自体にでくわしました。
Flashで文字のコードを取得使用とするとこの表記でしか取得できないようで、文字を管理するにはコードで管理したほうが楽なのでこのコードで扱うことに島した。
さてここで問題です。「U+xxxx」の表記ってコレいったいナニ?といろいろ調べていくと、「UCS2」というコード体系だということが判明。Perでこの表記を取得するには以下のとおり。

my $string = 'あ';
&from_to( $string, 'utf8', 'ucs2' );
print unpack('H*', $string );
# 3042


JcodeよりもEncodeのほうがいいらしい?この当たりは試してないのでどちらとも。ただ、日本語に依存するものがないときは基本的にEncodeを使ったほうが安全という話。今回はUTF-8からUCS2なので、下手に日本語環境を考えるとコードが化けたりしかねない。
これで、文字を管理することができるようになりました。
UCS2って今まで気にしなかったコード名です。他にもUCS4とかあるようです。

Flashへのフォント埋め込みは無法地帯?

Flashはいろいろできてとても便利です。
画像や図形、それに肝心の文字。
さて、ここで文字を表示するためのフォントのお話です。

Adobeがライセンスを持っているフォント(FlashやAdobeReaderにバンドルされているもの)は自由に埋め込むことができます。
しかし、Windowsについているフォントや、オフィス系ソフトを入れると入るフォントはライセンス上そのアプリケーションとセットでなければなりません。
そして、そのフォントは商用利用できないことがほとんどです。
つまり、「このフォントを使って何がしを注文できます」と商売はできないということです。

商用フォントであればこれらの制限はないものが多いですが、Flahsへの埋め込みは別です。
Flashへの埋め込みは個人であってもNGなものがほとんどのようです。
静止画テキストであればその文字限定ということで画像と同じ扱いなのか、特に問題はないものの、ユーザが個別に入力できる文字にそのフォントで表示できるようなダイナミックテキストになるとほとんどアウトです。
つまり、フォント情報をフォントとして扱える状態で埋め込むことは配布と同じことになり、ライセンス違反となります。
フォント自体に埋め込めない機能があればいいのですが、パスとして引っ張り出せば回避されますからね。

さて、web上で名刺などをデザインできるサイトがちらほらありますが、アクセスしたパソコンにあるフォントしか表示できなかったり、フォントの都合で出来上がりは見た目と違うと断ってあるサイトはさておき、「パソコンになければサーバからダウンロードします」と露骨にライセンス違反と思われる行為を宣言しているサイトを見つけました。
おそらくフォントを埋め込んだswfを個別に読み込むのでしょう。システムとしては理に適っていますがライセンス的には・・・
ここまで露骨だとある意味ほほえましいですが、フォントベンダーが放置している理由も良くわかりません。相手にするほどでもないというのか、正規の配布ライセンスを持ているのか(フォントサーバ扱いのライセンスになるのでン百万ぐらいするらしい)謎です。

ちなみに埋め込みに関するライセンスを回避するには、フォントとして再利用できない形で表示するのであれば問題ないようです。つまり、フォントデータから自由に「文字を表示」できる状態を用意することが問題で、文字ではない画像で表示するのであればフォントを再利用できない状態であると判断されるとのことです。だって、そうじゃないと校正をFAXやメールに添付して送ることもライセンス違反になっちゃいますからね。

何がいいたいかというと、フォントを利用した何かを転送することが問題なのではなく、フォントの情報そのものが転送されることに問題があるということです。結論として画像でやれと。