トップ 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2014-08-20

_ Flameで3G通信

Flameを買ったのでFirefox OS用に何か作って遊ぼうと思っていたのだが、OS無しのFirefoxで遊び始めてしまったのでそちらはお預けにした。

でも、せっかくFlameがあるのだから使ってみようと思った。

手元にはOCNモバイルONEのマイクロSIMがあるので(非常用のNexus5に入れている)、それを使ってみようとしたのだが、規格が違うのはだてではなくそのままでは入らない(適当に入れたら認識されないし、しかも取り出せなくなってびびった。結局、少しずつ浮かせながらどうにか取り出した)。Flameには3G用と2G用の2つのSIMスロットがあるのだが、どちらも標準SIMなのだった。

しょうがないのでアマゾンで適当にアダプタを選んで買った(普通にビックカメラとかで売っているのかと思ったら、このての自己責任商品は置かないみたいだな)。

SIMアダプター Micro SIM Adaptor MicroSIM→SIMカード変換アダプタ(黒)

買ったときはなんと80円弱だったので切手代と手間賃を差し引くと10円くらいしか利幅がなさそうな妙な商品だ。でも問題なくマイクロSIMがFlameの3G用ソケットで使えた(SIMを支えるためだと思うが付属シールがあるのだが、後で取り出すときにくっついて取れなくなると嫌なので使わなかった)。

OCNモバイルONEはapnパッチでも出てこないので携帯ネットワーク設定画面でカスタム設定を選択してAPN、ユーザー/パスワード、認証方式を設定して無事動作を確認。設定画面には他にもプロトコルとローミングプロトコル(IPv4かIPv6かを設定できる)という欄があったが、これらは未定義のままで動作した。

で、WiFiをオフにしてちゃんと通信できることを確認したところで、一度データ通信接続をオフにして、しばらくWiFiを使っていて、これを書こうと設定画面のデータ通信を開いたら、設定値がすべて初期化されていてびびる。オフにすると消えてしまうのか! でも、試しにWiFiをオフにしてデータ通信をオンにしてみたら、ちゃんと通信できた。認証情報を隠すために設定値を見せないようにしているのか、単なる表示上のバグかはわからないが、使えるのだから問題ないだろう。

それにしてもやはりFlameは開発者用デバイスであって、(日本の製品水準からは)コンシューマ用とは思えない。

悪い点は

・重い

・厚い

までは良いとして

・タッチパネルがひっかかる

少なくとも手元のHTC ONE、iPod touch、Nexus5のどれよりも触り心地が悪い。指がうまく滑らずひっかかるし(ちょっと表面が粗いように感じる)、えらく汚れる。

のがあまり嬉しくない。あと、今となっては3Gは遅い。

でもなんとなく憎めないのであった。黒に橙という組み合わせがきれいだからだろう。


2014-08-19

_ Firefoxを使うデスクトップアプリケーションのメモ

Firefoxの開発者用資料は、MDNにまとまっていはいるのだが、微妙に情報が古かったり持って回っていたり新しい情報もあるのだが最初に古い情報(ただし現在でも問題なし)がメインにあったりして、決して読みやすくはない。というか、実感として読みやすくなかった。

でも、オープンな情報としては悪いできではない。不足しているものは利用するものが補えば良いだけかも知れない。

というわけで、先週に学んだことをまとめておく。

・Geckoの組み込み

Embedding Mozillaが入口なのだが、どうも壮大な廃墟っぽい。

・XULRunner

そこでさらにいろいろ見ていくと、組み込みをうまく行うためのフレームワークとしてXULRunnerというものを見つけられる。

具体的にはXULRunnerというブートローダーを利用してJavaScriptのコードを動かし、必要に応じてC++で記述したコンポーネントを組み込むためのフレームワークとなっている。ある意味Firefoxはそのインスタンスだ。

独自にWidgetを提供していることが理由なのだろうが、XULはHTMLとは異なるしネイティブなコントロールを指定するようになっている。XULの簡単な例

が、コンポーネントを作るためにSDKを揃えようとしても、SDKのタールボールのビルドに失敗したりドキュメントと実際のライブラリの組み合わせが異なっていたりしてうんざりしてくる。

結局、わかったことはビルド済みXULRunnerを使えば話が早いということと、したがってJavaScriptでコードを書くのは簡単だが、ライブラリやヘッダがうまく構成できないのでC++のコンポーネントを作るのは至難の技だということだった。

・XPCOM

しかしよくよく見ていくと組み込み用APIはCOMそっくりのXPCOMというものでできている。thisポインタをスタックトップに置いた呼び出しということはABIが規定されているのだから最悪ヘッダファイルが無くても問題ないし、dylib(so)との結合なら最低限のエントリポイントさえわかればどうにかなる。が、面倒くさいうえに、サンプルに合わせて作ろうとすると、えらく回り道となってすっかり嫌になった。

XPCOM。ここは能書きだからまあいいのだが、COM同様にIDL(インターフェイス定義言語)を使ってインターフェイスのバイナリデータを作る必要がある(ちょっと微妙でCOMがIDLで生成するのは主としてヘッダとスタブでTypeLibはほぼおまけなのだが、XPCOMの場合はTypeLibの生成のほうがメインとなるようだ)。

でそのためのツールがxpidlなのだがここは罠になっている。確かにある時期までxpidlというツールがあったのだが、今はまともに動かない。

まともに動くxpidlはPythonによるpyxpidlというスクリプトなのだった。

でしばらく格闘してみたがやはりヘッダがどこにあるのかわからなかったり、突然、すべてのチュートリアルの内容を反故にするようなバージョンアップによるインターフェイスの変更が(10年くらい前に)あったりしてうんざりだ。

このあたりはMLベースで開発を進める昭和なコミュニティの問題点としか言いようがない。MLの内容はなかなかサーチエンジンに引っかからないし情報はリアルタイムには良いかも知れないけど10年後に調べるのには向いていない。

そう考えるとWikiが一番のような気がするのだけど。

・js-ctypes

では自前のC/C++というかネイティブコードコンポーネントを利用するにはどうすれば良いかというと、libffiの出番なのだった。MozillaのJavaScript用libffiバインディングがjs-ctypesだ。

というところまでようやくたどり着いて(SDKをビルドするのと自前コンポーネントを作ろうと試行錯誤している時間がやたらと長く、しかもそれは結果的に捨て時間となったわけだが)、FireRubyにたどり着いた。

_ XULRunnerの実行

たとえばJavaのServletコンテナであれば、アプリケーションディレクトリにWEB-INFというディレクトリがあり、その中にweb.xmlという定義ファイルを置き、classesというディレクトリの下にclassファイルをパッケージディレクトリに配置し、jarは直接WEB-INFへ置くといった決まりがある。

XULRunnerも同様に決まりがあって、以下のようにする。ディレクトリ名はおそらく定義ファイル内にも記述するので変えられるように思えるが、変える必要はないのでそのまま使えば地雷を踏む必要もない。

/appname
  application.ini  …… アプリケーションのメタデータ
  chrome.manifest …… chrome(外枠ウィンドウ)の定義位置を示す
  /chrome
     chrome.manifest ……コンテンツの位置を示す
     /content
         main.xul …… DOM定義
         main.js  …… アプリケーションそのもの
  /default/preferences
             prefs.js …… 設定ファイル(たとえばjavascript.options.strictにtrueを設定するなど)

上記の形式で作成し、XULRunnerにapplication.iniのフルパス名を与える。するとmozillaのウィンドウが作成されてmain.jsに制御が移る。

main.jsがロードされる時点ではwindowオブジェクトとdocumentオブジェクトはあるが、まだDOMは構築されていないのでDOMの諸要素に対してイベントハンドラを設置したりはできない。また、windowのloadイベントが呼ばれた時点ではウィンドウが非表示のためalertを呼び出すことはできない。

ただXULRunnerはFirefoxと同時に配布されるようなプログラムではないので別途インストールが必要となる。

XULRunnerの代わりにFirefoxを使うこともできる。その場合は以下のように実行する。

firefox-bin -app (application.iniのフルパス名)

consoleオブジェクトのログを参照できるようにする方法などはDebugging a XULRunner Applicationを参照。-jsconsoleオプションを使う。


2014-08-12

_ ロートの果てしなき逃走

以前書店で見かけてなんとなく買ったまま放置していた果てしなき逃走を読了。

果てしなき逃走 (岩波文庫)(ヨーゼフ ロート/Joseph Roth/平田 達治)

オーストリア将校の主人公が第一次世界大戦でロシアの捕虜になってシベリアに送られる。第二次世界大戦後の日本人だけじゃないんだな。

シベリアで脱走してユダヤ人の隠者にかくまわれてそこで暮らすうちに、故郷に帰りたくなり出発するものの、ウクライナで白軍に捕まる。赤軍のスパイと間違わられたのだ。隠者との別れは美しい。

が、その白軍は赤軍によって殲滅されたため、救出される。救出されたもののオーストリア人なので非常に立場が微妙だ(が、隠者に匿われていたおかげでロシア人の身分証明書も持っている)。重要なのはそこで赤軍の該当小隊の隊長が美人で主人公が惚れてしまったことにある。かくして赤軍に仲間入りしてロシア各地を転戦する。元々オーストリアの兵学校で将校としての軍略を叩きこまれていたわけで、あっという間に頭角をあらわしたからだ。隊長はプチブル意識を革命への傾倒で押し込めて頑張って無理しているタイプで、読めば読むほど意識高い系ってこういうことだよなぁと世界を変えたい欲も含めて感じるのだが、100年たって共産革命家が産業革命家になって化けて出て来たのかぁととても興味深い。

革命が終わると主人公は無為にぶらぶらする生活へ移り、一方隊長は次は文化の革命へと邁進する。結局破局して主人公は黒海のほうへ進み、そこで無口な女性と結婚する。

ここまでがえらく波瀾万丈なのだが、全体の1/4より少ない。はてこの後どうなるのかと不思議になる。

そこへフランス人の女性、弁護士、秘書がやって来る。主人公のことをGPU(チェカーかも)の手先と信じ込んでいる。が、曖昧に描写されたアバンチュールがある。

主人公はこっそりモスクワのオーストリア大使館へ行き自分がオーストリア人で帰国したい旨を告げる。そのまま妻に別れを告げることもできずにオーストリアへ送り返されてしまう。

そして延々と続く貴族的な生活が始まる。

1920年代において、あれだけ壊滅的にダメージを受けたのにオーストリアの貴族は優雅だし、その後転身した先のパリにも上流社会というものは(戦勝国だということ以上にいろいろと)維持されている。目端が利くもの(黒海で出会った秘書)はアメリカを見物して来ている。

ロシア時代の生活を脚色したノンフィクションが売れて金が手に入る。森の隠者へ送ると返事が来る。隠者のところに置いてきた妻がやって来た(ロシア人としての戸籍では隠者の弟ということになっていたのだ)、一緒に生活している、お前も戻ってこないか。

主人公は徹底的に孤立している。おしまい。

読めば読むほど、味わえば味わうほど、妙に現在に通じるものがあって不思議な感じになる。もちろん1920年代の次に来るものは、作者のロート(ユダヤ人)にとってあまりにも嬉しくないものだし、それを予期しているようにはまったく思えないが、それでも主人公のここじゃない感は作家の感覚だろうし、それは読者に与えられるものだろうし、実に奇妙だ。

最初の1/4まではおもしろく、残りは苦痛だ(読みことそのものは文章がうまいので楽しい)。


2014-08-11

_ [と[[

なんとなく買ってしまったFlameだが(理由はいろいろあるけど)、Firefox OS 1.3ではさすがに意味がないので、2.1にしてみた。

が、どうもCygwinの人間が出したPRを精査せずに取り込んだらしくて、OSXでアップデートしようとすると/cygdrive/c/tempが見つからないというようなエラーとなる。

最初、普通にWindowsを使おうと思ったのだが、Flameガイドからリンクされているツール(shallow flash script)が#!/bin/bashだったから、いちいちバッチファイルなり他のスクリプトなりに変換するのも面倒なのでOSXを使うことにしたのだった。

そうしたら、上記のエラーとなる。なぜだ。

で、スクリプトを見ると(ということをしたくないからOSXを使ったのだが)

if [[ `uname`="CYGWIN"* ]]; then
  cp -r $TMP_DIR /cygdrive/c/tmp
fi &&

みたいな行がある。しょうがないので直してPRしようと思ったら、おれがエラーになっている間に修正PRが出ていた(で、今は直っている)。

このifの後ろの[]が、一番、プログラミング言語とシェルスクリプトの違いが出ている点だと思う。

そして大抵のシェルプログラミングの本だと、必ず空白を入れろというような説明になっている。そのため(理屈がないし、不自然だから)必ずバグの原因となる。

その点でなるほどと納得したのが、シェルスクリプト高速開発手法入門の説明だった。

フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 (アスキー書籍)(上田 隆一/後藤 大地/USP研究所)

シェルのifが条件式として取るのは、シェルコマンド(内部コマンド含む)で、戻り値が0なら真とみなす。

コマンドなので、当然[はコマンドであり、[がコマンドということは条件式はそのコマンドに対する引数となる。良く使う構文は4引数で[ 左項 演算子 右項 ] で、Unixのコマンドということはargvに格納されるのだから、空白で区切るのは当然のことなのだ。

$ which [
/usr/bin/[
$
さらに
$ type -a [
[ はシェル組み込み関数です
[ は /usr/bin/[ です
[ は /usr/bin/X11/[ です
$ type -a [[
[[ はシェルの予約語です
$ 

([[はbashのビルトインコマンド(shには無いと思った)なので上の"CYGWIN"*のようなグロッビングがサポートされているので、あまり考えずに常に[[を使っても良いように思う)

$ uname
Linux
$ [ `uname` = "Lin"* ]
$ echo $?
1
$ [[ `uname` = "Lin"* ]]
$ echo $?
0
$ 

_ シェルの空白

シェルの空白といえば
$a=32
$echo $a
32
$b = 48
b: command not found
$

というのも当然といえば当然だが、実に気に食わない動きだ。

コマンドと空白で区切った引数で記述できる=最小の実装の組み合わせで効果を得るというそれがUnixだといえることではあるけれど、そろそろこれやめにして、プログラミング言語のREPLにならんものかなぁ。irbでObjectの未定義メソッドはなんでもかんでもsystemに与えるようにすればそれなりに使えるかな?

本日のツッコミ(全2件) [ツッコミを入れる]

_ shiro [tclのreplがデフォルトで、トップレベルで未定義コマンドが出てきたらexecを試みるようになってた覚えが。でもシ..]

_ arton [tclだからありがたみが乏しいからなのか、UnixのDRY主義(いずれにしても最終的にはコマンドを組み合わせることに..]


2014-08-09

_ チョコレートドーナッツ

妻に誘われてシネパレスでチョコレートドーナッツ

以前何か聞かされたような気がするが、まったく覚えていなかったので、完全に事前知識0で観る。

いい映画だった。ざらっとした手触りで初期の手持ちカメラで街をうろちょろ撮影していたころのスパイクリーや、幸福な記憶を8mmのぼやけた映像のカットバックや場合によっては背景への合成で技巧的に示すところではパリステキサスのヴェンダースの記憶が甦る。悪いはずがない。

1979年というクレジット。

始まると侏儒かな? と思わせるバービー人形のようなものを持った年齢不詳の人間が歩いている。さっぱりわからないまま(何しろ事前知識が0なので、この後、バービー人形がいきなり口を開けて襲い掛かって来てもおかしくはない)場面が変わり、少なくとも衣装倒錯している3人の美女っぽいクィアーのステージに変わる。口パクだと気づくまで風変りなまま続く。

あまり大したことはない場末のバーだということがわかる。カウンターにまじめそうなおっさんが腰かけ、3人のうちの1人とアイコンタクトを交わす。

はて、最初の侏儒とどう関係するのかさっぱりわからないまま、控室にシーンが変わり、3人が色目を使ってどうだとか、ピノキオやらのジョークを言っている。と、そこに先ほどカウンターに腰かけた男が訪ねてくる。

次のシーンは車の中で、頭を与えている(おお、はじめて利用できたぞ。ルーリードのワイルドサイドを歩けで覚えた言い回しだ)ところになる。

Transformer(Lou Reed)

警官がやって来て、一触即発の事態となる。男は自分は検察局の人間で、もし発砲したら5秒で終身刑となる、お互いに見なかったことにしようと取引する。

テンポは良く、すべては映画として流れる。

大音量でテレグラムサムが流れている。アパートの廊下。

Slider(T-Rex)

そこに先ほどの歌手が帰ってくる。人形が廊下に落ちているので拾い、思い切ってドアをたたく。やつれた女が出てくる。人形を渡し、子供がいるなら、こんな大音量は耳に悪いと忠告する。だまれおかま野郎とののしられる(が、言葉はマザーサッカーだった)。

男、部屋に戻る。広いベッドがある。音が相変わらず流れている。

朝になる。ブノアが家賃を取りに来て男を起こす。12ドルしかなく、明日払うと言って追い返す。相変わらず大音量で音楽が聞こえる。

ドアが開いたままだ(夜の間に女が外から来た男と出ていくシーンがあった)。

たまりかねて中へ入ってスィッチを切る。振り返ると仰天する。

ベッドの上にダウン症の子供がいて人形にしがみついている。

ここで初めて冒頭の侏儒がそうではなくダウン症の子供だったことがわかった。腹が減ったという。

行きがかり上、部屋へ連れていきとりあえず飯を食わそうとする。喋れるか? というような会話がどうにか続き、子供の名前はマルコとわかる。男の名前はルディとわかる。何が食いたいかと尋ねるとドーナッツと答える。太るし体に良くない、と言って結局冷蔵庫の中にあったチーズと引き出しから取り出したクラッカーを出す。子供はなかなか手を出さない。

困った末、ルディは昨晩の男が別れ際に渡した電話番号に公衆電話から電話する。友人がそれを見つけてからんでくる。このシーンで本気で子供に何かしてやりたくなったことが示される。

ポールはルディに家庭局にまかせろと言う。ルディはこういう子を施設に入れても良いことは何一つない。見た目や母親はこいつが選択したことじゃないんだ(という説明はこの後の裁判の時に明らかになる)。

その後は転げる石のように事態は進む。

検察官(ポール)は、元は生命保険のセールスマンだったが、大志を抱いて法律を勉強して、今の地位についた。離婚した理由は明らかではないが、性癖がからむのかも知れない。惚れた弱みもあってルディのマルコを育てたいという意志を尊重することにする。

二人は麻薬所持で監獄に入れられた母親から入所中のマルコの親権を得てポールの家で生活を始める。

途中、ルディが自分語りを歌で示すシーンがあり、その歌が良い。実際に良いだけでなく脚本上も良いためにポールは口パクではなく自分の声で歌うことを勧める。まずはデモテープを作れ。金も時間もないよ。

最初の食事のシーンでポールはたまたま家にあったチョコレートドーナッツを出す。マルコが嬉しそうに食べる。ドーナッツは体に悪いという持論を引っ込めて見守るルディ。

ポールはマルコのために部屋を整えて、豚のぬいぐるみとか適当におもちゃを用意して気に入るかどうかどきどきしている。マルコは泣き出す。嬉しかったのだ。ルディが嬉しいなら泣いていいぜと抱きしめる。

ポールはルディにオープンリールのテープレコーダをプレゼントする。早速デモテープを作る。テープを発送するために、ルディがキスしながら封筒に入れているのを見てマルコが聞く。何してるの? 幸運のキスだ。お前もしてみろ。このテープが当たりになるぜ。

ポールのいる事務所の人間関係が見えてくる。秘書はポールに気がある。上司はポールをかっている。が、顔つきからしてどう見てもホモフォビアだ。秘書がポールを昼食に誘うのをみて安心するところが実に気持ちが悪い。1979年だ。

医者に連れていき、目がほとんど見えていないことを知ってメガネを作る。そして学校にマルコを入れる。教師はルディとポールの関係(ポールは公的にはルディをいとことして紹介しているのだが、relationshipという言葉がダブルミーニングなことが何度か示される。そういうものなのか)ことをマルコが二人のパパとして絵を描いたことから恋人同士であることを知っている。が、それはそれという考え方の持ち主だ。

結局、上司がポールを値踏み(この時点では好意的であり出世のための糸口を用意している。が、その一方で誰かを引き上げることは自分に対するリスクにもなるのだから、当然といえば当然)するために、パーティに呼ぶ。そこでポールとルディの関係に気づく。

翌日、警察がやって来てマルコを「保護」し、ルディは監獄に入れられる。ポールは馘首される。

裁判になる。裁判官は女性。証言を集めていくと、二人がマルコをまじめに愛情をもって育てていることがわかる(教師や保護官の黒人女性が好意的な証言をする)。しかし検察側の弁護士により、ハロウィンの時の仮装にもかかわらずルディがマルコの前で女装したという事実(子供への悪影響の無考慮)と、元から持っていた(古さから母親の子供のころからの持ち物を唯一のおもちゃとして与えたからだろうと想像できる)バービー人形がマルコのお気に入り(=女性的な趣味の押しつけ)という論理が組み立てられてしまい、マルコは「保護」されてしまう。

法律家でもあるポールはルディの励ましもあって、闘争を決意する。マルコのような本物の弱者のためであり、自分たちのような差別された存在のためである。

ルディのデモテープを聞いたクラブのオウナーだかフロアマネージャだかから電話が入る。まずは週2日の契約で歌手として仕事を得る。

最終的に黒人の弁護士のもとへたどり着く。白人の弁護士からは相手にされなかった(負けることがわかっている裁判という面もあるはず)からだろうとか、いろいろ言われるが、弁護士も乗り気になる。このシーンは何気ないが、実に映画としてうまい。お互いの立場が映像としてうまく示されている。この作家は相当勉強しているのではなかろうか。

ここまで見た時点で、裁判長(非常に尊敬されているらしい)は女性、最後にたどり着いた辣腕弁護士が黒人ということで、2つのマイノリティが70年代末には認められていることを示しているのかも知れない。

弁護士と二人は、過去の判例から麻薬中毒の親が親権を回復した例などを見つける。合衆国憲法は、特別扱いによる権利の毀損を認めていないからだ。であれば、同性愛者ということが理由で親権を取り上げて良いわけはない。

裁判はあっけなく片がつく。破棄されたのだ。上司が手を回して、マルコの母親と司法取引の一種だと思うのだが、親権の回復を申し立てれば早期釈放することにしたからだ。当然、本当の親のほうが強い。ここでルディがそんな麻薬中毒の女がどうしたと言うのだが(最初の頃の女性のマルコに対するネグレクトを知っているこちらの立場からはその通りではあるのだが)あまり感じが良いことではないなと思った。

早速母親はマルコを廊下に追い出す。さすがに目の前でするわけにはいかない。

マルコはそのまま街へ出ていく。冒頭に繋がる。

裁判官や元の上司や最初の裁判の弁護士などにポールからの手紙が届く。新聞記事の切り抜きが入っている。マルコという子供が3日間放浪したすえ橋の下で凍え死んでいるのが発見された。

みなさんはご存知ないかも知れませんが、本当に良い子だったのですよ。その子に対して愛情をもって接する家庭で育つ権利が認められていればこういう不幸は起きなかったのではないでょうか。良く考えてみてください。

何か所か特に素晴らしいシーンがある。おもちゃや本を並べた棚の前でマルコが立ちすくむシーン。ルディが歌うシーン、チョコレートドーナッツを食べるシーン。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|

ジェズイットを見習え