daily dayflower

2008-06-21

chumby と日本語

未整理なメモメモ。Flash の知識は貧弱なので間違ってるかも。

フォントについて

Flash には下記の2種類のフォントがある。

  • 埋め込みフォントでグリフが見つからなかった場合にデバイスフォントに fallback するしくみは純正 flash player にはない(ようだ;グリフの存在しない文字の部分は飛ばされる)

埋め込みフォントは,埋め込まれたフォントSWF ファイルの MovieClip でしか使えない。たとえば,

があるときに main.swf から font.swfloadMovie() しても,main.swf「上」の MovieClip の text field は font.swf に埋め込まれたフォントを利用することはできない(ようだ)

(もちろん,loadMovie() した時点で font.swf という MovieClip を main.swf 上に配置できるため,font.swf の MovieClip 上に TextField を作成すると,埋め込みフォントを表示することはできる)

何がいいたかったかというと,たとえば preload.swf に日本語フォントを「_ゴシック」などの名称で埋め込んでおいても利用できないだろうということ。

ちなみにデバイスフォントを使うと普通ギザギザになるけれど,ActionScript を書くことでアンチエイリアスのかかったレンダリングを行うこともできる,らしい。

chumby の諸元

  • FlashLite 3(Flash Player 8 相当の VM
  • chumby のサイトに置ける SWF の最大サイズは約100KB
    • SWF は内的に ZLIB compression で圧縮可(CWF)で圧縮後のサイズ 100KB まで,ということ

chumbyflash player は Gnash などのオープンソースプロダクトを利用したわけではなく,Adobeライセンス契約(Adobe Flash runtimes | Adobe.com)を結んで開発したと思われる。ソースとか公開されてないしね。

chumbyflashplayer.xコマンドラインパラメータは以下。

chumby:~# chumbyflashplayer.x -h
Adobe FlashLite 3.0.4 Release (Version 8,1,55,0)- Chumby Industries
 (version 7 build 6-565 [GCC 4.1.2   Microcross GNU X-Tools(tm)])
Features: Video ALSA DMA ARM-optimizations
Build time: Thu 06Mar2008 1339
2008-06-18 22:45:45 cfgFile /psp/flashplayer.cfg not found
usage: chumbyflashplayer.x -i <filename> [
  -m <32K memory blocks (384 = 12mb)>
  -x [X] <pixels (240)>
  -y [X] <pixels (320)>
  -s [X] <stride (x*2)>
  -n [X] <sound buffers {4..32} (16)>
  -b <samples/buffer for master instance (512)>
  -p [X] <sample rate {5000|11025|22050|44100|8000|16000} (44100)>
  -e [X] <channels {1|2} (2)>
  -k [X] <bytes/channel {1|2} (2)>
  -r [X] (rotate)
  -q [X] <quality {0|1|2} (2)>
  -d name[=value]
  -o <network open debug level {0|1|2} (2)>
  -D [X] (disable screen updates)
  -A [X] (disable audio)
  -u <1K url cache blocks (4096)>
  -a <cache aggression level (5)>
  -S <cache stats write file>
  -I <cache stats write interval (60)>
  -L <message options (3)>
     message options may be a combination of
       1 write to stderr
       2 add timestamp prefix to stderr
       4 write to syslog
 -l <log mask (383)>
      bitmap of values allowed to be displayed
        1=errors, 2=warnings, 4=info, 8=trace, 16=debug,
        32=AS trace, 64=AS debug, 128=realtime debug, 256=video stats
  -M [X] <master_widget>
  -E <cert_list_file>
  -f <frame buffer options {0|1|2} (2)>
  -H <http and malloc options (9)>
     bitmap of options for http:
       1 use curl, 2 report memory usage, 4 verbose memory reporting,
       8 throttle http connection for large transfers,
        16 use localhost as alias for filesystem root (unsafe!)
        64 use verbose mode in libcurl
      additional bits for malloc debugging:
        32 report failed malloc() attempts,
        128 report all chunk allocations, 256 report chunk frees
  -P <preload widget (may repeat)>
  -U (do not load /usr/widgets/preload.swf)
  -T <timing stats file>
  -K <ts quadrant key mapping {0|1} (0)>
  -Y <minimum pump delay in ms (42)>
  -Z <maximum pump delay in ms (83)>
  -z (disregard existing instance)
  -X (turn on mcheck for heap debugging)
  -t <update timing collection run in seconds (0)>
  -R (backtick result display diagnostics)
  -N <asnative & ts debug flags (0)>
  -w <backtick long timeout (10)>
  -W <action when backtick long timeout reached (0=continue, 1=abort backtick, 2=exit flashplayer)>
  -F <signal to send running instance {SIGTERM=15, SIGHUP=1, SIGUSR1=10, SIGUSR2=12)>
     SIGHUP (-F1) triggers processing of events read from /tmp/flashplayer.event
  -g <global heap in mb (0)>
  -G <alternate cfg file or none>
  -j <cache manager options[:cache data dir] (0)>
     bitmap of options:
     1 write cache contents on -S stats file write
  -2 <enable sound hwsync for master instance>
  -3 <do not attempt btplayd start>
  -v (display version information)
  -h (print this message)
] ([X] marks development-only options)
where swf file specified by -i is the main movie to play (master instance)

ldd の結果は下記の通り。

chumby:/usr/bin# ld-2.4.so --list /usr/bin/chumbyflashplayer.x
    librt.so.1 => /lib/librt.so.1 (0x40001000)
    libcurl.so.4 => /lib/libcurl.so.4 (0x40010000)
    libdl.so.2 => /lib/libdl.so.2 (0x4013f000)
    libpng12.so.0 => /lib/libpng12.so.0 (0x4014a000)
    libungif.so.4 => /lib/libungif.so.4 (0x40180000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x4018f000)
    libasound.so.2 => /lib/libasound.so.2 (0x401aa000)
    libstdc++.so.6 => /lib/libstdc++.so.6 (0x40261000)
    libm.so.6 => /lib/libm.so.6 (0x40358000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x403ce000)
    libc.so.6 => /lib/libc.so.6 (0x403e0000)
    /lib/ld-linux.so.2 => ld-2.4.so (0x2a000000)

現状と展望

  • ドイツ人のおっさん(失礼)が Latin なフォントを埋め込んだ RSS リーダー widget を作ったとしても,日本語で表示することはできない(現在も今後も*1
  • フランス人のおっさん(失礼)がデバイスフォントを利用した RSS リーダー widget を作ったとすると,将来的に日本語で表示することができるようになる,と思われる

現状で日本語を表示できる widget を開発するには

  • 巨大 SWFUSB 経由で登録(上記参照)
  • chumby.com にあげる SWF は bootstrap loader として使い,外部に日本語フォントを埋め込んだ SWF を置いておく(see no title
  • 画像化する gateway を立てる(see no title
  • コンテンツごとに埋め込みグリフを限定した SWF を吐く gateway を立てる(全部埋め込んでもいいけど遅くなりそうだし)
  • 小さい日本語ビットマップフォント常用漢字あたりに限定してビットマップ化し SWF に埋め込み自力レンダリング常用漢字あたりに限定しないと無理そうだと試算)

全然関係ないけど,たとえば日本の天気を表示する widget を作るとして,Yahoo! JAPAN 等から情報をもってくるのは権利関係が微妙だったりするんでしょうか。それは無理としても,きっと,livedoor中の人が,……(期待)

*1Chumby Industries, Inc. が flash player を改造して埋め込みフォントでグリフが見つからない場合にシステムフォントに fallback するようにしてくれたらできるかも…… Adobe が認めないかな

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/dayflower/20080621/1213952581