COMP関連12ページ目の日記です

ビデオ圧縮  2012-02-06 14:10:58  COMP FAMILY
半年前にPCを買い換えたとき、目的の一つに「家族のビデオを圧縮する」ことがあった。

家族のビデオは、miniDV テープで撮ってあったものを、デジタルデータのままPCで吸出し、NAS に置いてある。
しかし、LAN の伝送速度の問題で気軽に見られず、データ容量を小さくしたい、という目的だった。

#保存容量の問題ではない。miniDV テープ1時間分のデータ容量は、およそ 10GByte 。
 1TByte の NAS を使っているので、100本は入るが、そんなに撮ってない。

その後、Picasa にアップロードしてしまったほうが気軽に見れることが判明し、結局再圧縮は行わず。

---

大学の先輩から、「大学祭のビデオを発掘したので公開する」というメールが来た。
公開、といっても、もちろん関係者のみ。
先輩のサーバーに、パスワードつきでおいてあるから、見たい人はダウンロードするように、との通達。

メールには、「事実上のバックアップ要請」とも書いてあった。
つまり、間違って消えたときに備えて、みんなで分散して持っていろと。

気軽にダウンロードに行って驚いた。
1本 7G の mpeg2 データが、 7本置いてある。しかも、個人サーバーなので転送速度は遅め。

ダウンロードのために PC をつけっぱなしにはしたくない。
幸い低消費電力サーバーがあるので、 wget にダウンロード指示を出しておいて、ほったらかし。


2日後、全部ダウンロードできていたので、内容を「少しだけ」見てみる。
もう、20年も前の画像だ。自分たちが若くて驚いた、初公開時の comet が懐かしかった、という感想はさておき、20年置いておかれた VHS ビデオなので、画質は悪い。時々同期が狂って縦スクロールする。未編集なので、灰色画面が5分続くところもあったりする。

まぁ、このままおいておく必要もないだろう。圧縮してみる。


Freemake Video Converterを使って圧縮。
mpeg4 ビデオ、H.264 圧縮にしてみる。

2時間のビデオが、20分ほどで圧縮完了した。
どうせ元画質が悪いのだからと圧縮率を上げたら、7G が 700M ほどに縮んだ。1/10 だ。

---

気をよくして、家族ビデオの圧縮に取り掛かってみる。

まずは、SD 画質時代のもの。(DVフォーマット)
DV フォーマットは、MotionJPEG に類似の方法で記録されているため、圧縮率はそれほど高くない。

家庭用ビデオ画像で、特に動きが激しかったりもしないので、「標準設定」で圧縮してみる。
…2.5% に縮んだ。縮みすぎて笑った。

HD 画質のものも圧縮してみる。(HDVフォーマット)
こちらも同じ miniDV カセットを使う(つまり、同じビットレートだ)が、mpeg2 圧縮。
もともと圧縮されているので、それほど圧縮は利かない。とはいえ、20% 程度になった。

しかし、HD 画質だと、圧縮に時間がかかる。
i3 の 3GHz で、大体実時間。

SandyBridge だから、QuickSyncVideo 対応ソフトがあれば、劇的に速くなるはずなのだけど、「圧縮したいものが多すぎて困る」ほどではないので、このままでいいや。

この記事単体へ


名前 内容

Android版ChromeのUserAgent  2012-02-09 16:57:07  COMP
Android 版の Chrome が発表になった。


最近、仕事でスマホ用の WebSite を作っているが、「スマホであること」の確認に、UserAgent を利用している。

UserAgent なんて、偽装可能だけどね。
仕事で作っている以上、動作保障しないとならないので、「スマホの標準ブラウザ」以外では見られないようにしているだけ。
偽装して見られても構わないが、動作保障はしない。そういうスタンスを明確にするための UserAgent 制限。


さて、Android の Chrome は「標準ブラウザ」ではないが、気になったので UserAgent を調べてみた。

Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7

ちなみに、以下が「標準ブラウザ」のもの。

Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30


標準では「Version/4.0」とあるところが、Chrome では「CrMo/16.0.912.75」となっている。
CrMo は Chrome Mobile の略だろう。…クロームモリブデン鋼ではない、と思う。
PC 版の Chrome は、ちょうど今日 ver.17 が出たところだから、少し古いバージョンとなっている。



Google としては、Android と Mobile の両方の文字列が入っているものは、スマートフォンだと考えてほしい、とアナウンスしている
Chrome も、ちゃんとその作法に従っていた。


ということは、このブラウザでサイトが見られることが保障されないといけない?
まぁ、ベータだとわかっているブラウザだから、まだいいか。

---

目立った動作の違いとしては、スマホ用の meta タグで「拡大動作の禁止」をしているにもかかわらず、拡大できてしまう。
CSS で重ねて表示しているものが、大きくずれて表示されることがある。
…という程度は、すぐに気づいた。

CSS は、PC 版の Chrome とも、Android 標準ブラウザとも、iPhone のブラウザとも違う、ということ。

すぐに気づく程度の「非互換性」がまだある、ということだ。
まぁ、ベータ版という位置づけなので…ね。

google のことだから、今後の頻繁なアップデートで解消されるだろう。

この記事単体へ


名前 内容

経験した中で最大のバグ  2012-02-22 11:30:31  COMP
知人と与太話をしているときに、「自分が経験した、最も恐ろしいバグ」の話になった。

僕がこういうときにする話は決まっている。
プログラムを知らなくても、技術話がわかる人には鉄板でウケる。

生々しい話でもあるし、企業秘密でもある。
ゆえにネット上で公開などはしていなかったのだが、もう時効だと思うので(20年も前の話だ)ちょっと書いてみよう。

---

自分が経験した、と言っても、自分がいた部署の、別チームのプログラムの話。
だから、僕は直接的にはかかわっていない。


まず、「一番恐ろしいバグ」というのは、完成間近のプログラムを一晩エージングテスト(動かし続けて問題が出ないか調べる)しておいて、朝来たら止まっている、というものだ。

画面がブラックアウトしていたら完璧。
どこで、どんな原因で止まったかわからない。

しかも、状況確認の仕組みを備えてもう1度エージングをしたら、…今度はいつまでたっても止まらない。
確実に止まる、ということがわかっているが、その条件がわからず、再現できないのだ。


大抵、エージングテストと言うのは完成間近にならないとやらない。
完成間近なのに、原因不明で、致命的な状況が生じていることだけはわかる。
そして、原因究明がいったいいつになるのかわからない。タイムスケジュールが見通せない。

さぁ、行軍ラッパの音は高らかに鳴った。デスマーチの始まりだ。

---

しかし、これより恐ろしいバグ、と言うのが存在したのだ。

さんざんエージングも行って、停止しないことが確認された。
少なくともそのつもりだった。

開発部隊の手を離れ、品質保証部隊がチェックする。
ここでも、エージングテストや、想像もつかないような操作でバグが出ないかがチェックされる。

それらの多くの関門を潜り抜け、出荷されたと言うのに…市場に出回ってから「止まりました」報告が次々あがってくる。
これは、悪夢以外の何者でもない。

すでに開発機材がつなげられていない機械なので、何が起きているかは、本当に、まったくわからない。
この状況に比べれば、「朝来たらブラックアウト」のほうが、山のように情報があった感じがする。

使用者に平謝り、当面はリセットで凌いでもらうことにして、すぐに原因を究明、修正バージョンを作る、という作業になる。

まずは停止条件の再現をしたいのだが、この作業を「ノーヒント」で行わなくてはならない。
エージングなら散々したし、思いつく限りの過酷な操作もやったはずなのに、これ以上どんな条件があるのか?

とりあえず、最初の行動は頭を抱え込むことだ。

---

そして、これから記すのが、自分の経験で最大のバグ。

使用者に平謝りして、リセットを試みてもらうも…再起動しない!
「当面しのぐ」ことができなくなる。いったんは全商品を回収して、返金に応じなくてはならない。

数千万の金を掛けて開発しているのに、評判はがた落ち、修正して再発売しても、買ってもらえるかわからない。

プログラムは ROM に焼かれているし、いったい「再起動しない」っていうのはどういう状況なんだ?
上司から、原因の徹底究明が言い渡される。



まず、原因は割込みルーチン内にあった。

とあるスイッチが何回押されたか、と言うカウントは、「絶対に」取りこぼしてはいけないことになっている。
そこで、このスイッチは割込み信号を起こすようになっており、カウントは割込みルーチン内で行われる。


割込みルーチン、というのがどういうものか、プログラマでない人にもわかるように解説する必要があるだろう。
通常、サブルーチン(プログラムのひとまとまり)と言うのはプログラムの中から呼び出される。

しかし、外部からの操作に対して、現在実行中のプログラムがどのような状況であっても、必ず処理しないといけないような場合がある。
このときに、「割込み」が発生し、実行中だったプログラムは「ひとまず」停止、サブルーチンが呼び出される。


割込みルーチン内では、実行中だったプログラムが、あとで問題なく作業を続けられるように、「割込み時の状態」を保存することからはじめる。

割込みルーチン内で「破壊」してしまうレジスタ(変数みたいなもの)などを保存し、作業終了後に元に戻してから「割込み終了」するのだ。
この作法を守らないと、プログラムはおかしな動作をすることになる。

--

このとき使用していた CPU は NEC の V60 だった。
この CPU は非常に…信じられないほどの高機能で、「指定アドレスから始まる、指定された終端文字をもった文字列が、別に指定されたアドレスから、指定されたサイズまでのメモリ内の、どこに存在しているか検索する」などの動作が、1命令で完了した。

#と思う。少なくとも文字列操作命令はあったが、記憶によるものだから、少し違うかも。

さて、V60 の文字列操作命令、非常に高機能だが、「暗黙のうちに、2つのレジスタを破壊する」という問題があった。文字列だから、ソース側とディスとネーション側で、2つのポインタが必要になるためだ。

CPU インストラクションには書いてあったが、問題となった割込みルーチンでは、割り込み冒頭の「状態保存」で、暗黙に破壊されるレジスタを保存していなかった。
にもかかわらず、割込み内で文字列操作命令を使用した。

そのため、割込み終了後にプログラムの動作がおかしくなり、「暴走」したのだった。

---

暴走したのはよいとして、なぜリセットまで効かなくなったのか?

このプログラムを動作させていた基盤には、プログラムのデッドコピーを防ぐ仕組みがあった。

この基盤では、プログラムの ROM は、CPU から直接呼び出されるようにはなっていない。
間に、スクランブル回路が入っているのだ。

スクランブル回路は、入ってきたデータに対して一定のビット演算を施し、出力する。
この回路が、データバスに挟まっていた。

スクランブル回路の中には、小さな PROM が入っていた。
PROM とは、一度だけ書き込める ROM だ。ここにキーが書き込まれていて、ビット演算の内容を制御している。


つまり、基盤から ROM を抜き取ってコピーしても、スクランブルが掛かっているので他の基盤で動作させることができない。
スクランブル回路は、一般には市販されないカスタム IC だった上、プログラムごとにキーが変更されるので、動作が推定できない。


しかも、ここからがすごい。
スクランブル回路だけ取り出されて、散々実験されて動作を推定されるのを避けるために、スクランブル回路には「正しい手順でアクセスしないと自爆する」仕組みが付けられていた。

#スクランブルは、状況によって解除したりもできた。
 (ROM からのデータ読み込みでスクランブルが解除されるのはよいが、メモリマップド I/O の読み込みでビット演算されてしまうのは余計なお世話)
 そのため、スクランブル回路自体にアクセスして、動作を変更できた。

自爆、といっても本当に爆発するわけではない。PROM の内容を破壊してしまうのだ。
こうなると、正しいキーが失われるので、外部からの動作推定は不可能になる。

---

まとめると、つまりはこういうことなのだ。

V60 の命令インストラクションには癖があり、「暗黙の」レジスタ破壊が起こることがある。
しかし、それに気づかなかったプログラマが、割込みルーチン内で破壊されるレジスタを保存しなかった。

該当レジスタは「たまたま」あまり使用されておらず、割込み時の破壊が問題とならなかった。
しかし、絶妙なタイミングで割り込みが起きた場合だけ、割込み後にプログラムがうまく復帰できず、暴走してしまった。

そして、暴走したプログラムは、スクランブル回路に「おかしな方法で」アクセスしてしまった。
スクランブル回路は異常を感じ、自爆。基盤は2度と起動しないようになった…



原因はわかった。
報告を聞いて、原因究明を命じた上司は、責任者を探すように命じた。

責任者は、破壊されるレジスタを保存しないような割込みルーチンを書いた奴だろう。
実際、返金で億単位の損害が出てしまったのだ。誰かが責任を取らなくてはならない。


この割込みルーチンは「絶対に取りこぼしてはいけない」重要信号を扱うものだった。
信頼性が重要なので、はるか以前に書かれたルーチンが使い続けられていた。
(いくつものプログラムで使われていたにもかかわらず、いままで「たまたま」問題が出なかったのだ)

最初に使われたプログラムはどれか?
古いプロジェクトの資料が引っ張り出され、調査されたところ…
プログラムを書いたのは、原因究明を命じた上司だった。


このことが上司に伝えられると、それまでこの件に対して厳しかった上司の態度は一変。


「まぁ、人間だから間違えることもあるよな。ははは…」

…そして、問題は有耶無耶のうちに葬り去られたのでした。


#製品は再発売されたが、悪評がついてしまったためほとんど売れませんでした。

この記事単体へ


名前 内容

【SP】 組み込み系でエージングテストのバグが出ると大変ですよね。同じ苦労をした事があります。 (2012-03-07 06:04:04)

スマホとPCの見分け方  2012-03-02 15:24:33  COMP
ちょっとした Hack。

ガラケーとかフィーチャーフォンとか呼ばれているものでは、IP アドレスを見ることでPCと見分けが可能だった。
しかし、スマホでは WiFi アクセスが可能なため、見分けることができない。

一応、UserAgent で見分けることはできる。
でも、UserAgent なんて偽装も簡単だ。


そこで、こんな方法を考えてみた。

if(typeof(ontouchend)=='object') スマホ用の処理 ;

単純明快。

typeof( ~ )

に、メソッドを書いている。本来は window.ontouchend だが、javascript の規約に従い、window は省略可能。

onTouchEnd メソッドは、PC にはないが、Android / iPhone には存在する。
onTouchStart でも、onTouchMove でも、onTouchCancel でもいいが、End が一番文字数が少ないので、これを使用した。

で、メソッドが存在すれば、typeof( ) で object という文字列が帰るので、スマホであることを確認できる。
存在しなければ undefined という文字列が帰るので、PCであることが確認できる。


IP アドレスチェックのように、サーバー側 CGI で完結する仕組みではない。
でも、これで「特別な」パラメーターを送る、など工夫すればよい。

---

問題点:
IP アドレスに比べれば、やっぱり偽装は可能だ。
でも、UserAgent よりは偽装しにくいだろう。

UserAgent を使えば、スマホとタブレットを見分けることも可能だが、上記の方法は区別できない。
UserAgent と同時に使って、偽装されていないか確認するなど、その程度の使い方にとどめるのがよいと思う。


この記事単体へ


名前 内容

D/A とガジェット  2012-03-12 13:08:31  COMP
ちょっと昔話。OldGoodComputer ミニ。

僕は、Mac の OS としては System6 が一番好きだった。
知っている人がほとんどいない古いものだが、知っている人には「それなりに」賛同してもらえる。

Mac は、よく「Window システムの元祖」的に言われる。
まぁ、それはそうなのだが、Mac の Window というのは、最初はそんなにたいしたものではなかった。

だって、マルチタスクじゃないんだから。
Window が出ている、と言っても、1つのアプリケーションだけだ。
アプリケーションが複数の Window を開くことはあるかもしれないが、画面が Window だらけでごちゃごちゃ、と言うような事態にはならなかった。


マルチウィンドウシステムを初心者にいじらせると、間違えて「現在使用しているのとは違う」アプリの Window をクリックしてアクティブにしてしまい、見ていたウィンドウが裏に回って消えたことで混乱する、ということになりやすい。

System6 では、このようなことは起こらなかった。
だってマルチタスクじゃないんだから。

これが、僕が System6 が好きな理由だ。
Mac が目指した「文房具としてのコンピューター」、初心者でも気軽に使えるものだった。



…蛇足ながら付け加えておけば、System6 はマルチタスクではなかったが、マルチジョブに「できた」。

デフォルトでは、本当にシングルタスク、シングルジョブである。
でも、Multi Finder を使うと、複数のアプリケーションを同時に起動できた。(マルチジョブ)

マルチジョブ状態でも、動作しているプログラムは1本だけ(シングルタスク)で、ユーザーがタスクを切り替えると、別のプログラムが動き始めた。

実は、CPU が非力な時代はこちらのほうが効率がよかった。


System7 以降は、OS が一定のタイミングででタスクを自動的に切り替えていく「マルチタスク」になった。
同時に、先にあげた「アクティブウィンドウ以外をクリックして混乱」という現象が起きるようになり、初心者向けではない「パソコン」になってしまった。

---

さて。
Jobs は、Mac を「文房具」として設計した。
オフィスのデスクに置かれた、新しい文房具。コンピューターを知らない人でも気楽に使える。

その後、Sculley によって Jobs は Apple から追放。
Sculley が Mac を「再設計」させる過程で、より普通の PC になった。

Windows は、最初から Mac を真似ていた。
…というと語弊があるか。Gates だって alto の存在は知っていた。

でも、Windows は Alto を真似したものではなく、Mac を真似したものだ。
そして、System7 と同じ失敗をしていた。

おそらく、Gates はこの失敗を理解していた。
でも、どうすればうまくできるのかはわかっていなかったように思う。

---

Jobs が Apple に復帰してからは、多くの人が知っているだろう。
iPhone で、GUI を「一新」した。

iPhone の GUI は、 System6 と非常によく似ている。
画面は、1つのアプリケーションが占有する。間違って別のウィンドウをアクティブにしてしまう心配は無い。


iPhone 以前、Gates は、スマートフォン向けにも Windows を提供していた。
Windows といっても、PC との互換性は無いものだが、小さな画面で、タッチパネルで操作するには…ずいぶんと使いづらいものだった。

しかし、iPhone 以降、スマートフォン向け Windows は GUI が一新され、iPhone 風になった。
そして、普通の PC 向けの Windows も、次の Windows8 で同じ GUI に統一されることになった。


つまり、ここに来てやっと、自分が「一番使いやすかった」と思っている、System6 に、時代が追いついてきたことになる。
いや、追いついてきたのではなく、ぐるっと一周回ってきたのかな。

ただ同じ地点に着たのではなく、螺旋階段のように上のステップに移っているが。
今度は、ちゃんとしたマルチタスクだ。

---

ところで、System6 には、デスクアクセサリ( D/A )という仕組みがあった。
シングルタスクの System6 で、「ちょっとだけ」違う仕事をさせるための、小さなプログラムのことだ。

D/A は、アプリの起動中でもいつでも呼び出せた。
標準では電卓とか、時計とか、スケジュール帳とか、メモ帳とかが用意されていたけど、サードパーティ製の高機能な D/A なんかもあった。

D/Aは、いつでも呼び出せるようにするため、特殊な形式でプログラムする必要があった。
でも、System7 になってからは、マルチタスクになったため D/A は無くなった。
同等機能のプログラムが「アプリケーション」として用意されていたので、問題は無かったけど。


今は、画面が広いので、こうした「ちょっとしたツール」は、デスクトップガジェットとして表示しっぱなし、と言うものが多い。

ガジェットも、普通のプログラムとは仕組みが違う、という点では D/A と似ている。
ガジェットは、HTML と Javascript でできている。つまり、小さな WEB ページみたいなものなのだ。

(ガジェット、という仕組みを最初に提唱したのは Mac OS X だが、その元は「OS と WEB ブラウザの融合」を図った WinXP + IE に行き着く。
 さらに、XP + IE で OS と WEB ブラウザが融合したのは、WEB ブラウザは将来 OS になる、という Netscape の野望を逆から攻めるためだ)


D/A の「いつでも動かせる」と言う仕組みは、マルチタスクと言う形に進化し、D/A は発展的に消滅した。
同じことが、今起ころうとしている。

Windows8 では、HTML + Javascript で、「普通の」アプリケーションを作ることができる。
ガジェットだけが特別な時代は終わり、発展的に消滅するのだ。


でも、これはちょっと話が違う。
「常に画面の隅にあって便利」というものが、「画面はアプリケーションが占有」というコンセプトにしたがって、1つの画面に広げられてしまうのだ。

ちょっと時間を確認するために、画面を切り替えて時計を探さなくてはならない。
ちょっと天気予報を確認するために、画面を切り替えて時計を探さなくてはならない。


すでにマイクロソフトは、ガジェットの「消滅」に向けて準備をしている。

公式に用意されていたガジェットライブラリのページはすでに閉鎖されており、再インストールなどで「今まで使っていた便利なガジェット」を失うと、もう入手することが出来ない、と言う可能性がある。

(そういう問い合わせが、Q&A ページに多数掲載されている。
 ガジェット作者のページで配布されている場合なども、人気があるがジェットほどマイクロソフトのライブラリページを紹介するリンクが多いため、公式ページが埋もれてしまって探せない、という悲劇が起きている)


さて、ガジェットは本当に「発展的に消滅」できるのだろうか?
それとも、誰かが「Windows8 で無理やりガジェット表示」するようなハックアプリを作ることになるのだろうか?

この記事単体へ


名前 内容

windows8  2012-03-17 17:49:59  COMP
先日、Windows8 でのガジェットの扱いを心配(?)するような記事を書いた

あの時点で、Windows8 に興味はあったが、じつはまだ使っていなかった。
で、現在この日記は、Windows8 (Consumer Preview版)のデスクトップ版 IE10 から書いてみている。

Metro スタイルは、一部の人が強烈に心配するほどには悪くない。
もっとも、これは当然に好みの問題が入る。

僕は、先日書いたように Mac の System6 が好きだった。Metro は System6 に似ている。


7 以前の Windows では、一部のソフト…ゲームとか、動画再生ソフトでは、「全画面表示」に対応している。
この場合、起動後に「全画面表示」を選ぶ形になるが、必ず全画面で使う、と分かっている人には、自動で全画面にするような設定ができるソフトもある。

Metro は、最初から全画面にしか対応していないソフトが作れる、というだけの話だ。
全画面表示なので、ウィンドウをクリックすることで別アプリに切り替え、と言う方法は使えないが、そこは伝統の(?) alt + tab で切り替えればよい。


あいかわらずデスクトップ画面はあって、マルチウィンドウのほうが使いやすいようなソフトは、そこで使えばよい。
過去の遺産もここで使える。特に問題はない。

で、デスクトップ内では、あいかわらずガジェットがつかえた。
これはこれでいいのかな… 全画面表示がしたい場合は画面端にガジェットがあるのは邪魔なのかもしれない。

でも、常に見たい情報ってあると思うのだけどな。どうなんだろう。
画面端に「チャーム」(メニュー項目)を出すことができるけど、このチャームにガジェットを埋め込む API 、とかが作られれば解決する問題かも。


デスクトップに関しても、強烈に心配したがるユーザーは「Explorer までリボンインターフェイスになった」とか、「スタートメニューがなくなった」などと騒いでいるのだが、使ってみればそれほど問題なし。

リボンインターフェイスは、「縮小」して最上列だけ表示していれば、普通のメニューとたいして変わらない。
あれは、最大化した時に「初心者がわかりやすいように」メニューを展開しているだけの話だ。

Explorer は、Windows7 では、この「最上列」すら表示していなかった。(alt を押すと出てきたけど)
この、必要以上の表示の縮小は混乱を招いていたので、元に戻ったのは歓迎。

スタートメニューの位置には、「スタート画面」に戻るための機能がある。
いちいち画面切り替えが発生して面倒だ、という人がいるが、ラウンチャがほしいのなら、タスクバーに登録すればすむ話。
(Quick Launch つかってもいいしね)

今だって、よく使うソフトはいちいち「スタートメニュー」を開かないで起動できるようにしてあるでしょ?


時々しか使わないプログラムなら、画面切り替えが発生してもそんなに面倒ではないし、どうしても、というのなら、誰かが「スタートメニュー」互換のラウンチャを作るだろう。それを、タスクバー左端に置いておけばよい。

あとは、起動時にデスクトップから始まるような設定があれば、何の違和感もなく Windows7 から乗り換えられるように思う。
(Windows XP からの乗り換えは、多少戸惑うかもしれない。でも、それは Metro の問題ではなく、XP から Vista への変更が大きいためだ)

---

ところで、これは「デスクトップ版」IE10 から書いている、と書いた。
Metro 版 IE10 では、なぜか家庭内 LAN に置いたWEB サーバーが見えないのだ。

サーバーの log を見ても、アクセス自体が来ていない。
外部サイトは見られる。google chache とかを読み込ませると、表示はできるようなので、HTML の書き方が悪い、とかではないようだ。(先に書いたように、アクセス自体来ていないので、HTML 以前の問題なのだけど)

デスクトップ版では見られるのだから、PC の設定はおかしくないと思うのだが…原因はまだ特定できていない。

この記事単体へ


名前 内容

Windows8 と Wii と AtEase  2012-03-19 14:23:51  COMP
しばらく使ってみていて、気づいた。

Windows8 のスタート画面は、 Wii のチャンネル一覧画面と同じなんだ。

四角い「アイコン」がたくさん並んでいて、ポイントすれば起動できる。
起動しない状態でも、「アイコン」に簡単な情報表示が出来る。
アイコンが増えると横スクロールで対応する。


Wii で数多く並ぶチャンネルは「どれも同じ扱い」なのだが、1つだけ特別扱いがある。
それが、「ディスクドライブチャンネル」だ。

これを選んだときだけ、ディスクからゲームを起動する。
過去の遺産である、ゲームキューブのゲームもここで遊ぶことが出来る。


Windows8 でスタート画面に数多く並ぶアイコンは「どれも同じ扱い」なのだが、1つだけ特別扱いがある。
それが「デスクトップ」だ。

これを選ぶと、見慣れたデスクトップが表示される。
過去の遺産である、Windows7 までのアプリもここで使うことが出来る。

---

同じく、気がついた。

Windows8 の操作感は、なんか MacOS System 7 の「AtEase」に似ている。

AtEase は Finder (OS 起動直後にデスクトップを表示し、ファイル管理などを行うソフト。Windows の Explorer にあたる)の替わりに使うソフトだった。

話を続ける前にいくつか解説しておく必要がある。

「ダブルクリック」という操作には、激しく指を動かさなくてはならないが、その間手のひらを動かしてはならない、という相反する動作を求められる。慣れるまでは非常に難しい操作だ。

Alto にはこんな操作は無かった。ダブルクリックは、Mac 開発チームの発明だ。

初代 Mac を作った人たちは、ファイルを選択するために「クリック」を使うなら、ファイルを開くにはどうすればよいか? という点で悩んだ。
Mac の元になった Apple 社のマシン、「Lisa」では、「ファイルを選択して、メニューから「開く」を選ぶ」という操作だった。しかし、これは余りにも面倒だ。

そこで生まれたのが「ダブルクリック」という発明だ。
そう、「プログラムの実行」を、「ファイル操作」の一部として行おうとしたからこんなことになったのだ。


また、MacOS は System6 までシングルタスクだった。当然、1アプリが画面を占有していた。

System7 では、マルチタスクになり、ウィンドウをクリックすることでアプリケーションを切り替えられるようになった。
しかしこれは、初心者に対する混乱を招いた。パソコンに慣れていない初心者にとって、マルチウィンドウは「不便」なのだ。


これを前提として以下の話を読んでほしい。


AtEase 環境では、起動すると画面いっぱいに四角く整列したアイコンが並ぶ。
シングルクリックでプログラムを起動できる。

MacOS System7 はマルチタスクだが、AtEase を使っていると、「1アプリが画面を占有する」状態になる。
複数アプリを同時起動して切り替えることは可能だが、マルチウィンドウではない。

しかし、AtEase にはファイル管理を行う機能は無い。
ファイルを管理したければ、一端 AtEase を終了して、今までなら最初に起動されていた「Finder」をわざわざ起動しないといけない。


Windows8 では、起動すると「スタート画面」に四角く整列したアイコンが並ぶ。
シングルクリックでプログラムを起動できる。

Windows8 はマルチタスクだが、Metroアプリを使っていると、「1アプリが画面を占有する」状態になる。
複数アプリを同時起動して切り替えることは可能だが、マルチウィンドウではない。

しかし、スタート画面にはファイル管理を行う機能は無い。
ファイルを管理したければ、今までなら最初に起動されていた「デスクトップ」をわざわざ起動し、Explorer を使わないといけない。

---

さて、Wii のチャンネル一覧のような、MacOS の AtEase のような、Windows8 のスタート画面。

多くの人が「初心者向けすぎて仕事に使えない」とか「デスクトップ PC に適さない」とか言うが、そんなことは Microsoft だってわかっている。

幸いなことに、スタート画面は AtEase のように「完全に Explorer を置き換える」ようなものではない。
スタート画面から、デスクトップが呼び出せるのだ。

そして、デスクトップは、ほぼ Windows7 と同じように動作する。


最初に、「デスクトップだけ特別」と書いたけど、実はこれは面白く書くためにちょっと嘘が入っている。
本当は、Metro アプリだけでなく、従来アプリもスタート画面に置く事ができる。

この場合、従来アプリを起動すると、自動的にデスクトップ画面に切り替わる。
実は、Explorer は (Win8 CP 版では)最初からスタート画面に入っている。


だから、先日(はじめて使った直後に)書いたように、「最初からデスクトップが起動するオプションがあればいい」なんてことは無い。

デスクトップが起動しても、きっと最初にやることは「目当てのアプリを起動する」ことだからね。
じゃぁ、やっぱ最初はスタート画面でいい。そこに、よく使うアプリを置いておけばいい。


「Windows 8 は余りにも新しすぎて戸惑う」と言うような声も聞かれるが、先に書いたように、AtEase や Wii のチャンネル一覧など、過去の知恵を導入し、悪かったところはちゃんと解消している。

実のところ、上に挙げていない Windows Mobile (旧CE) の悪いところも対策されているし、よく出来ていると思う。


使わないで期待するのも、使わないで批判するのも嫌なので使ってみたら、案外普通の OS だった、ということろか。

この記事単体へ


名前 内容

仮想ソフト変更  2012-03-23 15:47:01  COMP
先日書いたとおり、Windows8 を試してみています。
インストールは仮想環境に行っています。

Oracle VirtualBox にインストールすることを薦める記事を読んだので、そうしていました。
VirtualBox は、Windows8 のインストールに対応していて、設定を適切に行ってくれます。

なるほど、手間要らず。簡単インストール。


…でも、インストール後の「VirtualBox の挙動」が不安定。
それに、3D 、2D のグラフィックアクセラレーションを ON にしても、Direct3D を使っているような画面描画が非常に遅い。

画面サイズを自由に選べないのも不満。
自分のデスクトップと同じサイズに出来ないから、必ずウィンドウ表示になってしまって、「画面隅にマウスを持っていく」という多用する操作が面倒なんだよね。

#画面隅にマウスを持っていく、は Windows8 では多用する操作。
 でも、この操作をするとPyroを思い出してしまう…


というわけで、VirtualBox にはさようなら。

VMWare Player を試してみる。
Windows7 のインストールには対応しているが、Windows8 には非対応。

「Windows7 としてインストールできる」と薦める記事もあるけど、ここは「インストールなし」で仮想マシンを作成後、Windows8 のインストールディスク(のイメージ)から起動するのが吉。

VMWare Tools を(ホストマシンに)インストールしろ、と言われるので、インストール。
この間、Windows8 の仮想マシンへのインストールは平行して進む。

Tools のインストールが終わると、仮想マシンウィンドウの下に「仮想マシンに Tools をインストールしろ」という指示が出る。
でも、OS インストール中なのでここはぐっと我慢。

Windows8 のインストールが終わったら、仮想マシン Windows 下の「Tools インストール」のボタンを押す。
すると、仮想マシン上は、インストール CD が挿入された状態になる。

あとはインストールプロセスに任せる。


詳しくは知らないが、Tools は一種のハイパーバイザドライバのようだ。
ゲスト OS 上には、普通のデバイスドライバのふりをして組み込まれる。

しかし、実際にはホスト OS との間に「穴」をあけ、一部の処理を仮想マシンではなく、ホスト側で行うようにしてしまう。

たとえば、Direct3D の処理。
最初に書いたように、VirtualBox では非常に遅かった。これは、ビデオカードの機能を、ソフトで「仮想的に」実現しているためだ。

でも、ハイパーバイザドライバを使って「ホスト側に載っている本物のビデオカード」で処理すれば、本当の速度が出せる。


VMWare では、画面解像度もかなり自由に選べる。
ホスト側の実画面と同じにして、最大化してしまえば、仮想化ではなく「普通に」Windows8 を使っている感覚を体験できるだろう。


---

Windows8 CP を試している人は多いようだが、文句を出している人は2つのパターンに集約されるように思う。

・スタートボタンが無くなった
・使うのに Microsoft アカウントが必要になったのが気持ち悪い


試せるようになる前は「Metro が使いにくそう」もあったのだけど、デスクトップを使えば今までと変わらない、と気づいて、Metro に対する批判は影を潜めたようだ。

替わりに、そのデスクトップで最大の変化である、「スタートボタンが無くなった」が大きく言われるようになった。



使い慣れていたものが無くなる、と言う不満はわかるが、しばらく使っていると気にならなくなると思うのだけどなぁ。

大体、スタートボタンが導入されたときは、非難轟々だったのだが、覚えている人はどれくらいいるだろう?

Win3.1 のときは、「プログラムマネージャ」からプログラムを起動していた。
これは一種のランチャだが、ここに登録していないプログラムは起動できなかった。


Win95 になったとき、プログラムマネージャは無くなり(実はこっそり残してあったが、それはまた別の話)、替わりに「スタートメニュー」という、新たなランチャが用意された。

プログラムマネージャは、アイコンを使い、グラフィカルな2次元配置でプログラムを管理した。
しかし、スタートメニューは「上下に並ぶ」だけで、使いにくかった。
これが、スタートメニューが批判された主な理由だ。

(注:どちらも、プログラムをまとめて階層化はできる。)


スタートメニューは基本的な構造が変わらないまま XP まで受け継がれ、Vista で大幅に変更された。
「上下に並ぶだけで使いにくい」という批判に対し、「よく使うプログラムだけ表示」になったのだ。

そしたら、今度は「勝手に位置が変わるので使いにくい」と批判された。


今回、ふたたび「皆が使いやすいといっていた」プログラムマネージャの形式…2次元管理にもどった。
(階層化がなくなったことは残念だが、Live Tile という新しい便利さも提供されるのでやむなし)

そしたら、やっぱり批判されている。
ユーザーは常に無いものねだりをするものだ。


ちなみに、「スタートボタンが無くなった」と言われているが、「見えなくなった」と考えたほうがよい。
今まであったところにマウスカーソルを持っていくと、ちゃんと「スタート画面」が開くのだから。表示が無いだけで機能は残っているのだ。

---

Microsoft アカウントについては、気持ち悪ければ使わないでもよい。

でも、使っているといろいろなメリットがある。
今回、仮想マシンを変えるにあたり、詰まるところ「別のマシンに再インストール」を行ったわけだが、同じアカウントを使っていると設定なんかを自動的に移行してくれる。


Google のアカウントなんかもそうだが、一人で複数台の PC やガジェットを持つようになると、そのデータの同期は重要問題だと思う。

ネットワークを使って自動的に同期される、と言うのはひとつの理想形。

「今までどおり使えればいいんだ」といってMicrosoft アカウントを作らないのもありだと思う。
でも、その場合は今までどおりにしか使えない。新たな便利は享受できない。そういうことだ。



この記事単体へ


名前 内容

スマホ購入  2012-05-07 16:07:07  COMP GEAR
4月25日、子供を迎えに保育園に行ったとき…

次女のロッカーの引き出しに、オムツのストックが何枚あるかを毎日記録しています。
翌朝には、規定枚数入れておく必要があるためです。

この日も枚数を調べていつものように携帯に記録を…と思ったら、携帯の画面が点きません。
おや? とおもってよく見ると、後ろからなにか「びよーん」と飛び出しています。

…スライド式携帯の、画面とキーボードをつなぐフィルム基盤が飛び出しているのでした。

後ろから電線が飛び出して故障、なんて漫画みたいな壊れ方をするとは思いませんでした。


壊れた、とわかって軽くパニック。
もう一度フィルム部分つなげば戻るかな?
とか、画面が表示されていないだけで、うまくすればデータ吸いだせるかな? とか。

とりあえず子供の帰る支度をしながら考える。
冷静になると、絶望的だとわかってくる。

フィルム基盤だから、単純には接続できない(後で見たら、思った以上の線数が入っていたし)。
キーボード側には分厚い電池が入っているし、画面に対して送る信号が多いので、おそらくメイン基盤は画面側。
ということは、「画面が出ない」だけではなく「電源が供給されない」ので、データを取り出すのは無理。

---

家に帰ってからは子供の相手で忙しい。
翌日調査。

同じ壊れ方は、同機種購入者の多くが経験している。
早い人では1ヶ月で壊れている。
フィルム基盤が曲げ伸ばしされる構造なので、疲労を起こして折れるようだ。

発売から2年経つが、今でも「新規に」購入した直後に壊れた、という報告がネット上に挙がっている。
しかし、ショップに持ち込んでも、ドコモ・シャープの認識としては「同様な報告は他になく、使い方が悪い」ので有償修理、とのことのようだ。

僕の場合2年使って月賦払いは終わった(やっと終わって、これからは月額料金が安くなる、と喜んだばかりだった)。
2年も使うと、修理しても他の部分で不具合が出そうだし…

しかし、月額780円で使っていると、スマホに乗り換える気がしない。
スマホ以外の選択肢を見ると…こちらは、ドコモの「スマホに乗り換えて欲しい」思惑もあって、本体代金に対する補助が少ない。機種も少ないので選択肢の幅も無い。

他社への乗り換えも含め、じっくり検討…

1日悩んで出た答えは、ドコモのままでスマホ購入。
ただし、できればパケホーダイプランには入らない。


仕事柄ほとんど家にいるので、WiFi が使えれば十分。
外出時は通信を SP モードメールに限れば、パケット料金は加算されない。

これなら、今までと月額料金は余り変わらない。

この場合、ねらい目の機種は GALAXY NEXUS。
Android 4.0 (ICS と呼ばれる。開発コードネームである、Ice Cream Sandwitch の略。)を搭載するフラッグシップモデルなのに、1万円程度まで値段が下がっている。

#普及のために google が補助金出してるから。

ただ、仕事でこの機種借りているのだけど、互換性が悪くて動かないソフト多いんだよね。
google 製のソフトですら、異常終了したりする。

互換性を気にするなら、あえて 2.3 を購入したほうが良い。
(ちなみに、3.0~3.2 はタブレット用の OS になっていて、携帯電話用は 2.3 の次が 4.0 になる。4.0 は 3系列の機能も取り入れたため大きく内部が変化しており、それが先に書いた互換性の悪さの原因)

---

27日、考えていても仕方が無いので買いにいってみる。
翌日から G.W. に入ってしまって、子供の相手で購入どころでなくなるだろう。


家に一番近いヤマダ電機へ…行ったら、半月ほど閉店してビルの工事をしていたのが「新装オープン」の当日だった。

人がごった返していて、とてもゆっくり選べる雰囲気ではない。
携帯コーナーに行ったら、キャリアごとではなく、メーカーごとに機種が並んでいる。

スマホは事実上同じものを、3キャリアに降ろしている形だから、この方が「MNP で安いですよ」感が出せるようだ。

で、ゆっくり見て回ろうとすると、端末メーカーの法被を着た人が「ご案内しましょうか?」とよってくる。
かわしても、すぐに別のメーカーの人が…今度はキャリアの人が…

で、買うのやめて別の店へ。

---

少し離れたノジマ電機に行くと、ヤマダの新装オープンを意識してか、「他店徹底対抗」と書いたビラがたくさん貼ってあった。

ヤマダでは、GALAXY NEXUS は売り切れだった。
ノジマでは、売り場に最初から置いてすらいなかった。

でも、「徹底対抗」を謳うだけあって、総じて安くなっていた。
特に安かったのは Xperia acro (SO-02C) と、Lumix phone (P-02D)。で、両方「実質0円」。


少し考えて、Panasonic P-02D を購入。
決め手は、最後のアルファベットがこちらのほうが「後」だったから、という単純なもの。

(ドコモの規則では、ハイフンの前はメーカー名、最後のアルファベットが発売年度。ただし、年度は冬が頭。数字は年度内の「ドコモ内での」整理番号。発売順とは多少前後する場合もある)


実質0円って、どういう計算ですか、とお決まりで聞いてみる。
ドコモの「月々割り」を適用するのは当然で、それに加えてノジマ側の指定するコンテンツサービスに入ることが条件。
(このサービスを薦める「販売奨励金」が端末代金の残りに充てられる)

サービスは入るだけで、翌月解約でも可? と聞いてみる。
一応、加入月と翌月は無料なので、その次の月までは入っていて欲しい、とのことだけど、調べる方法が無いので解約されてもわからないそうだ。

それならいいでしょう、と購入を決定。

---

指定された時間に行くと、処理は終わっていたけど、店員が最後の通信確認をやり忘れていた。

目の前で確認して、受け取り。
…後で気づいたが、つまり「指定したサービス」に登録されていない。
これは店員のミスなので、知ったことではない。

---

というわけで、いまさらスマホユーザーに。

仕事で使っていたから「知っているつもり」だったけど、自分が使うつもりになると案外わかっていなかった、と気づく。

AU の IS05 のステータスバーのインターフェイス使いやすかったのだが、あれは標準では無いのか…
似たのを探す。有料ならあるみたいなのだけど、金払ってから「思っていたのと違う」のはイヤなので、とりあえず無料で。

じゃぁ、妥協してこれとこれを組み合わせて…とか。

子供の相手をしながらなので少しづつ環境を整え、やっと満足できるようになったところ。

この記事単体へ


名前 内容

ダライ・ラマとは関係ありません  2012-05-09 16:22:30  COMP
スマホなんて買わないぞ、とずっと決めていたのに、買ってしまったのでいろいろいじっている。

買わないと決めていた理由のひとつは、いじりたくなっちゃうから、というものでもあった。
だいたい、スマホブームの前に一度買っているからね。
「いじり倒していて仕事がはかどらない」のがもう一度持つのをためらっていた理由なのだ。

---

自分の使い方は、かなり偏っている。
これは「普通の人と同じ設定では使いにくい」と言うことに他ならない。

まず、僕はほとんど家にいる。自宅で仕事をしているからだ。
目の前にパソコンはあるし、WiFi だってつなぎ放題の環境だ。

この状況で「スマホは持ち歩ける PC だから便利ですよ」とか言われても便利そうに思えないし、「パケット使い放題で5千円」と言われても安いと思えない。


というわけで、スマホを使うとして、基本設定は次のようになる。

・WiFi で接続して、自動同期 ON。WiFi はスリープしない設定。
・屋内で使うので画面の明るさは一番くらい状態で固定。
・画面のロックの解除。電源 ON ですぐ使えるのが望ましい。
 (ロック解除のソフトを導入した。標準ではできない)

生活していれば、もちろん外出しないでも無い。
一番多い外出は、保育園の送り迎え。家から 1km 程度の外出だ。

この間も、メールは受け取りたい。
SP モードメールは通信料無料だからこの通信は構わないのだが、他の通信が勝手に発生すると困る。

このときの設定は次のようになる。

・3G で接続して、自動同期 OFF。
・バックグラウンドで勝手に通信されないように、他のアプリの終了をよく確認。
・画面の明るさは「自動」に。
・画面ロックの設定。人に勝手に使われないように。


この方法、バックグラウンドアプリの確認、というのが面倒くさい。
購入して3日ほどで、ポリシーは次のように変わった。

・WiFi も 3G も、通信は全部 OFF。
・メールが届いたことはわかるので、届いたら手動で本文取得。

しかし、「メールが届いたことがわかる」のは、画面を見たときだけ。
SPモードメールでは、本文取得後にしか音を鳴らす設定が無い。

---

さて、ここで Llama の出番だ。時速 45km/h で走る、らくだのようなラマ…
ではなくて、Android 用の「Location Profile」ソフト。

このソフトを見つけて3日。
かなり癖の強いソフトで使いこなすのに苦労するが、入れていたほかのソフトがいくつか不要になるほど強力なソフトだった。

Profile は、海外の携帯で使われる概念。
日本では「モード」だろう。マナーモード、ドライブモード、オリジナルモードを作れる機種も多かった。

Llama は Location Profile のソフトだ。
場所によって異なるモードに設定するソフト、と考えてよい。

でも、本当は「場所によって」ではない。それは一番の特徴ではあるけど、「状況によって」かなり自由に設定を変更したり、ソフトを起動したりできる。

基本的な使い方は、次のとおりだ。

・携帯電話基地局の ID を使って、荒く「位置情報」を取得。
 それにより設定を変更する。


携帯電話なので、通話用の通信は必ず行っている。
これを使って位置を把握するので、WiFi や GPS を起動するのと違って、電池を余計に消費したりはしない、というのがミソ。

でも、携帯電話基地局からの電波は、半径 2km くらい届く。
家から外出するときでも 1km 程度の僕は、これでは精度不足。

大丈夫。Llama は、他の方法でも位置を取得できる。
GPS、WiFi、Bluetooth …いろいろな方法で、指定した場所に居るかどうかを調べられる。

僕の場合、家では WiFi をつなげっぱなしにするのが前提なので、WiFi で調べる。

でも、週に何度かは、遠くまで外出するのだ。
そんなときに WiFi が付けっぱなしだと、無駄に電池を使ってしまう…。


これも大丈夫。
2段階で考えればよいだけの話。

・基地局で「近所」を調べて、近所なら WiFi を ON にする。
 (近所でなければ、WiFi は OFF にする)
 
・WiFi で「自宅」を調べて、自宅に居れば自宅用の設定に切り替える。
 (自宅でなければ、外出用の設定に切り替える)


さて、夜になったら僕は、携帯電話で目覚ましをセットして枕の下に入れる。
音量は小さめだが、振動するようにしてある。

これで、同室で寝ている家族を起こさずに、自分だけ起きることができる。

ついでに言うと、寝ている間にメールなどで起こされたくない。
つまり、寝るときの設定はこうだ。

・WiFi も 3G も、通信は OFF。(緊急電話は受け付ける)
・音量は 0 。だけど、アラーム用の音量だけは小さめ、バイブレーションも入れる。

…さて、この設定をしてみたら、困ったことが起きた。

WiFi を OFF にしたため、「自宅」に居ることがわからなくなり、外出時の設定になってしまうのだ。

大丈夫。Llama では、この程度の状況は考慮してある。

Llama は、変数を持つことができる。変数には文字列を入れられるので、「同じ」か「違う」の判断ができる。(数としては扱わないので、大小の判断はできない)

変数を使って状態遷移を作る。
WiFi で自宅であることを確認したときには、設定変更とともに、変数に「自宅」をセットする。
WiFi が切断され「外出した」と判断しても、変数が「自宅」で無い場合は、外出の設定に切り替えない。

この状態でなら、変数に「夜」をセットした上で、WiFi を切断しても「外出」とは判断されない。
Llama では時間による判断もできるので、夜になったら変数を「夜」にして、夜の設定にするようにした。

---

さて、Llama がすごいのは、実はここからだ。

外出時に sp モードメールが届くと、通知領域に「メールが届いた」というメッセージが表示されるが、音などは鳴らしてくれない。
これを解決しよう。

Llama では、通知領域に特定アプリがメッセージを出した、ということを条件に、動作を行うことができる。

ちなみに、この機能を使うには、本体の「設定」から「ユーザー補助」に入り、Llama に権限を与えなくてはならない。
(ちゃんとソフト内で説明されるのだが、この設定を行わないで「うまくいかない」と悩んでいる人がネット上に山ほどいる)

まずは、sp モードが通知したら、音と振動で伝えるようにしてみた。
本文の取得は手で行う必要があるが、これだけでも、十分実用になりそうだ。


でも、もっと設定したくなった。

Llama では、Android で別のアプリと通信するための「Intent」を送信できる仕組みがある。
spモードメールのアプリが使用する Intent がわかれば、自動的にメール問い合わせを実行できるのだが…

調べてみると、データの一部に日付を入れないといけない、とのこと。
Llama では、さすがにそこまではできない。

かわりに、「spモードメールBOX2 Free」と言うソフトを使えばよい、とわかった。
このソフトは、spモードメールアプリの各種機能へのショートカットを作成できるもので、メール問い合わせも実行できる。

Llama からはショートカットの実行機能もあるので、組み合わせればこうなる。

・WiFi 接続していないときに、spモードが通知領域にメッセージを出したら…
・3G 接続を開始する。
・(接続が完了するまで)1分ほど待って、spモードメール BOX2 の「メール問い合わせ」を呼び出す。
・(ダウンロードが完了するまで)1分ほど待って、3G 接続を切断する。

この場合、メール着信音は spモードメールが出すので、先に書いた「通知があったら音と振動で知らせる」という設定は不要になる。


ついでに、「アプリケーションがアクティブになったら」という条件も作れるので、spモードを起動したら 3G 接続を行い、終了したら切断する、という動作も作っておいた。

返信しようとすると、3G 接続を開始する。
接続には30秒程度はかかるが、返信を書いている間に接続が終わるだろう。
そして、送信してアプリを終了する(もしくはバックグラウンドにする)と、接続終了。

ここまでやって、やっと「今までの携帯電話」と同じように、設定を気にせずにどこにでも持ち歩いて使えるようになった。



ちなみに、先に書いた「ロック画面の解除」だが、Llama 単体で解決できる。
しかも、場所で自動化できる Llama のほうが便利だ。
(入れていたソフトも、WiFi を感知して自動で解除したのだが、夜 WiFi を OFF にすると当然ロックがかかってしまっていた)

このためにインストールしていたソフトは、削除した。


完全なる余談だが、外出時に画面をロックしたまま「携帯電話をなくした」時のために、ロック画面には僕の連絡先を表示している。

HP-200LX は、持ち主を表示する機能が標準であったのだけど、Android では工夫しないとできないのね。
(Lock Screen Message というソフトを使っているが、これは「アラーム用のメッセージ領域に、表示したいメッセージを書き込む」ためのソフト。こうすると、ロック画面にメッセージが表示できる)

---

さて、Llama ではこれだけのことができてしまう、と言うことはご理解いただけただろうか?

設定はと言うと、非常に難しい。
プログラム言語ではないが、それに近い論理性を持っている。

矛盾した設定をかくと、うまく動かない。

先に書いたとおり、「WiFi で自宅位置を調べる」が「夜になると WiFi を切る」なんていうのは矛盾した設定だ。
変数も使って、うまく矛盾を解消してやる必要がある。


その上、説明はほとんど英語だ。
…英語は苦手だ、と言う人は、ロシア語やフランス語、スロベニア語で表示することはできるが、日本語は今のところ翻訳されていない。
(翻訳ボランティア募集はしている)

そして、この説明は「フレンドリーな文体を心がけてくれ」と翻訳者に要求している。
実際、英語もかなりくだけた、フレンドリーな文体だ。

つまり、読む側に「ネイティブ」な能力を要求する。
英語が苦手な人には、かなりハードルが高い。


日本語の情報では、このページが一番まとまっているように見える。

が、ページをまとめた人はプログラマでは無いようで、プログラムの知識が必要となる部分では翻訳が怪しい。
単純に、くだけた英語の翻訳に失敗しているところもある。
(Noisy contacts は、「うるさい連絡先」ではなく、「目立たせたい連絡先」だろう)

さらにいえば、Android 特有の「癖」も随所に顔を出す。
WiFi polling 間隔を設定すると、WiFi は暗黙に ON されるようだ、など。
(OFF にして、念のため polling 間隔も「polling しない」にして…とやったら、OFF にならなかった)

---

さて、この複雑なものを理解したうえで…もしくは、少しづつ動作を調べながら設定を行っていると、すぐに設定がごちゃごちゃになる。

矛盾無く設定するのが大切なのに、ごちゃごちゃすると設定の間違い…つまりはバグが増える。ここらへん、まったく「プログラム言語」と同じだ。

一緒に行う設定、たとえば「WiFi を ON にするときは、polling 間隔を 5分に設定して、sleep policy は never sleep にする」などを、サブルーチン化してしまうとよい。
こうすると、複数の条件から同じ「WiFi の ON 」を呼び出していても、設定が分散してミスをすることが減る。


サブルーチン化、と言う機能は Llama には無い。
しかし、Llama では、アプリケーションのショートカットを呼び出すことができる。
そして、Llama で作った「設定」は、ショートカット化して呼び出すことができる。

つまり、まとまった設定を、呼び出し条件無しで登録しておいて、特定条件時に「ショートカットとして呼び出し」すればよいのだ。

---
ここから後日追記。

上記の方法、問題がありました。
Llama はリエントラントにできていませんでした。そのため、ショートカット呼び出しは「GOSUB」ではなく、「GOTO」として作用します。
設定の呼び出しが1つなら問題ないけど、2つの設定(通信設定と画面設定など)を呼び出そうとすると、後の呼び出しが実行されません。

自分の場合、「画面」と「通信」の設定をわけて、状況により使い分けようとしていました。
このような場合は、基本的に「場所」を認識した時点で変数を設定し、その変数を条件として設定を行う、という2段階で考えると良いようです。

その上で、特殊な状況でのみ、ショートカット呼び出しで設定を行う。
この場合、GOSUB でなく GOTO でも十分実用になります。


画面や通信ごとに別の変数を設け、状況ごとにスイッチして…
と言う方法はお薦めしません。

変数の変更によって5回以上、設定が呼び出されると、Llama はエラーを出して、以降の設定を行いません。
これは、設定ミスで延々と呼び出しが続いてしまうことを防ぐために、Llama 側で制限しているようです。


追記終了。
---


これにはさらにおまけがつく。
Llama は、設定を自然な文章にして表示してくれる機能があるが、先に書いたように日本語表示はできない。
しかし、「設定」には名前をつけることができて、日本語でつけても良いのだ。

これで、先に書いた WiFi ON 時に一緒にやることの設定を「WiFi開始」などのわかりやすい名前で表示できる。
こうすれば設定のミスがあっても見つけやすい。


登録した設定が増えると、これだけでごちゃごちゃしてしまう。

しかし、設定は「グループ化」ができる。
大抵は、ある状態に「なったとき」と「終わったとき」が対になるので、同じ対をグループ化しておこう。

先に書いた、サブルーチンとしての設定集は、設定集としてグループ化すればよいし、僕の場合 sp モード関連がたくさんできたので、それもグループ化してある。

グループ同士や、グループ内での設定の並びは、文字コード順だ。
だから、並びを整えてわかりやすくしたければ、先頭に数字をつけると良い。

---

最後にプログラマー向けのアドバイス。

Llama は、非常にプログラム的な設定を行うが、プログラム言語ではない。
GUI を使って、条件と、その条件が満たされたときの「アクション」を選んでいく、と言う設定方法だ。
(条件は複数設定可能で、and / or も設定できる)

でも、その設定は自然な文章として表示される。
なので、組みあがった条件がたくさん並んでいる様は、プログラム言語で組まれているように見える。

そして、これがプログラム言語だとすれば、その制御構造は、awk に非常に良く似ている。
全体を括るループなどは存在せず、「条件」と「処理」だけが列記されている、と言う構造だ。

なので、そのつもりで取り組むと、すぐに理解できるのではないかと思う。

この記事単体へ


名前 内容


戻る
トップページへ

Loading