2014年5月29日木曜日

デス・スターの重力加速度

Androidのソースを見ていて
"frameworks/base/core/java/android/hardware/SensorManager.java"
に重力加速の定義をみつけました。
9.80665m/s^2となっています。普通です。面白くもなんともありません。
が、その下の行を見ていくと、太陽や水星の重力加速度が定義されています。
何に使うんだろうと物理の公式g=GM/(r^2)を思い出すものの、
どう考えても移住したときぐらいしか使わないよなーと思いつつその先を見てみると
/** Gravity (estimate) on the first Death Star in Empire units (m/s^2) */
public static final float GRAVITY_DEATH_STAR_I    = 0.000000353036145f;
を発見しました。
ああ、開発者の趣味なのね。

2014年5月28日水曜日

Androidのパスワードを忘れたら

Androidのスマートフォンやタブレットで、
プライバシー保護のため[画面のロック]をしているユーザーはかなり多いでしょう。
何桁かの数字やタッチパネルに描く図形なんかで認証しているわけですが、
もしこれを忘れてロック解除できなくなったらどうすればいいのでしょうか?

実は簡単な方法が準備されています。
あらかじめ[Androidデバイスマネージャ]アプリケーションをインストールしておくと、
GoogleのAndroid デバイス マネージャーから指定した数字のPIN認証に変更することができます。
本来このサイトは端末をなくしてしまったときにどこにあるか探したり、
端末に保存されている秘密の情報を全部削除したりするためにあるのですが、
単にロックコードを変えるのにも使えるんですよね。

新しいPINコードを設定するには、
Android端末に設定しているGoogleアカウント(複数設定しているならそのどれか)で
PCのブラウザ等からAndroid デバイス マネージャーへログインし、
いくつかある端末の中からリモート制御したい端末を選び、
[ロック]ボタンをクリックして新しいPINコードと何かメッセージを入力するだけです。
その端末がオンライン状態なら即実施され、
端末は画面ロックされ先のメッセージが表示されます。
私はNexus7(2013-kitkat)で動作確認できています。

ところで[ロック]ボタンがなくて[ロック/データ消去をセットアップ]ボタンがあることがあります。
これは端末側で準備ができていないということを意味します。
失くす前に[ロック/データ消去をセットアップ]ボタンを押しておきましょう。
するとその端末の通知バーにメッセージが現れるので、そこから設定を済ませられます。

[Androidデバイスマネージャ]アプリケーションが使えない端末もありますが、
Avira Free Android Securityなんてアプリケーションもあります。
できることはちょっと違いますが。
常に持ち歩くスマートフォン、落とすリスクはやっぱり無視できません。
自分が泣くだけならともかく、人様に迷惑をかける前に打てる手は打っておきましょう。

2014年5月27日火曜日

Accessのパラメータクエリをカスタムフォームで

先日Microsoft Accessパラメータクエリについて紹介しました。
その際の抽出条件の入力形式はフリーワードでしたが、
選択式の方が便利な場面は多々あります。
作るのはわりと面倒ですが、そうすることも可能です。
ということでちょっとやってみます。
なお使っているのはAccess 2007です。

ここでは[顧客テーブル](顧客IDフィールド(主キー)、顧客名フィールド)、
[取引テーブル](取引IDフィールド(主キー)、顧客IDフィールド)の2つのテーブルに対し、
顧客名を選択して該当取引を抽出し、
[取引クエリ]をデータソースとする[取引フォーム]を開くような、
インターフェイス[顧客選択フォーム]を考えることにします。

メニューの[作成]-[フォームデザイン]で新機フォームを作成し、
そこに[リストボックス]を置くと[リストボックスウィザード]が立ち上がります。
[テーブルまたはクエリの値をリストボックスに表示する]を選択し、
[顧客テーブル]を選び、そのすべてのフィールドを選びます。
このリストボックスは[リスト顧客]と名付けておきます。
またフォームに[ボタン]を置くと[コマンドボタンウィザード]が立ち上がります。
[種類]を"フォームの操作"、[ボタンの動作]を"フォームを開く"とし、
開くフォームには[取引フォーム]を選択します。
その後は多分[特定のレコードを表示する]を選べばいいのでしょうが、
なぜかうまくいかないので[すべてのレコードを表示する]を選んでおきます。
これでできるのが[顧客選択フォーム]です。
最後に[取引クエリ]の取引IDフィールドの"抽出条件"に
[Forms]![顧客選択フォーム]![リスト顧客]
を設定します。
これはパラメータの一種で、[リスト顧客]の値へのフル修飾での参照を示します。
あとは[顧客選択フォーム]を開き、顧客を選択して実行すると
指定した顧客に関する取引のみが[取引フォーム]に表示されます。

あるいはクエリ側に特殊なことをしなくても抽出条件を指定することができます。
[顧客選択フォーム]をデザインビューで開いて、
先に置いた[ボタン]のコンテキストメニュー(右クリックメニュー)でプロパティを開き、
[イベント]タブの[クリック時]プロパティの右にある[...]ボタンを押すと、
Visual Basic for ApplicationsのIDEが開いて
イベント発生時に動作するコードが表示されます。
ここにあるstLinkCriteria文字列変数が条件であり、
ここにSQLのwhere句を書けば抽出条件に採用されます。
これを利用することでより柔軟に抽出条件を指定できます。
例えば[リスト顧客]の[複数選択]プロパティを"しない"以外にした上で、
以下のようなコードを追加することで、各顧客の情報の表示オン/オフを指定できます。
    Dim i As Long
    Dim v As Variant
    
    i = 0
    stLinkCriteria = vbNullString
    For Each v In リスト顧客.ItemsSelected
        If i = 0 Then
            stLinkCriteria = stLinkCriteria & "顧客id=" & リスト顧客.ItemData(v)
        Else
            stLinkCriteria = stLinkCriteria & " or 顧客id=" & リスト顧客.ItemData(v)
        End If
        i = i + 1
    Next v

もし参考のため顧客idの最大値をテキストボックスに表示しておきたいなら、
表示するテキストボックスの[コントロールソース]プロパティまたは[既定値]プロパティを
=DMax("[顧客id]","顧客テーブル")
とすることで対応できますし、
いろいろなことがわりと簡単に実現します。
私はAccessより先にVBでDAOとか使ってた口なので、
Accessが思ったように動いてくれないとイライラするのですが、
Accessというベースがある分、やりやすい部分は確かにあります。
ただし、日本語名のプロパティや関数名に馴染むことは今後もないでしょう。

ところで、これら方法はマクロを利用しているためセキュリティ的に実行できないケースがあります。
もしリボンメニューの下に
セキュリティの警告 データベースの一部の内容が無効にされました
と表示されていたら、その右の[オプション]を押して
[このコンテンツを有効にする]を選択することで実行できるようになります。
ただしこれはAccessを立ち上げるたびにせねばなりません。
いちいち面倒なら永続的に許可する方法もあります。
Accessのメインウィンドウ左上のofficeアイコンをクリックし[Accessのオプション]を押し、
[セキュリティーセンター]タブの[セキュリティーセンターの設定]をクリックし、
[マクロの設定]タブで[すべてのマクロを有効にする]を選択すればそうできます。

2014年5月26日月曜日

Nginxでリバースプロキシ

この前SquidApacheでのリバースプロキシについて書きましたが、
実はリバースプロキシするのに便利なNginx("エンジンエックス"と発音)なるものがあります。
Nginxはウェブサーバ機能を内包していますが、
リバースプロキシとしてだけ使ってウェブサーバはApacheなんて構成も可能です。

Debian系のRaspberry Piにて
"1"ディレクトリにアクセスしたときに"192.168.1.1"へ、
"100"ディレクトリにアクセスしたときに"192.168.1.100"へつながる構成を作って見ます。
すなわち
http://<Raspberry PiのIPアドレス>/1/abc/index.html
へのリクエストが
http://192.168.1.1/abc/index.html
に置き換えられるようなイメージです。
最初に以下を実行します。
# apt-get install nginx
そして設定ファイル"/etc/nginx/nginx.conf"の内容を以下のようにします。
server {
  listen 80;
  server_name <Raspberry PiのIPアドレス>;

  location /1/ {
    rewrite /1/([^/]+) $1  break;
    proxy_pass http://192.168.1.1;
  }

  location /100/ {
    rewrite /100/([^/]+) $1  break;
    proxy_pass http://192.168.1.100;
  }
}
最後に起動して
# /etc/init.d/nginx start
# update-rc.d nginx defaults
これで期待した動作となります。
ただし、リバースプロキシ経由でアクセスされることを前提にコンテンツを作成する必要があるので、
その辺り注意が必要です。

SquidやApacheと比べてNginxの振り分け機能は結構豊富で自由度が高いので、
きっと望みの環境が構築できるでしょう。

2014年5月22日木曜日

Accessのパラメータクエリ

データベースで条件をつけてレコードを抽出する場合、
通常ならSQLでクエリをその場で作って実行してしまいます。
動的に条件が変わるような場合でも文字列操作でクエリを生成します。
ウェブアプリケーションでもみんなそうしているので、
ちゃんと考えておかないとSQLインジェクションされてしまいます。

さて、Microsoft Accessの場合クエリは固定的に定義してしまうので、
その場でチョコチョコ直すのが非常に面倒なのですが、
実はパラメータクエリなる機能があります。
これは抽出条件をパラメータにしておき、
実際に実行する直前にユーザにパラメータを入力してもらうことで
クエリを動的に編集するようになっています。
まあ引数付きストアドプロシージャと理解してもいいのではないでしょうか。

そのパラメータクエリ、結構便利なので使い方を紹介しましょう。
クエリをデザイン ビューで開き、
特定のフィールドの"抽出条件"(あるいは"または"以降)行に
何か入力を促すようなメッセージを[]で囲んで入力するだけです。
"[...]"がパラメータの名前で、
生成時にそれを実際の値と差し替えることができるということです。
パラメータは複数指定でき、デザイン ビューでの同一行はAND、
他の行はORで処理されるので、うまく位置を調整すると細かいこともできます。
なんなら"[...] Or [...]"のように2つのパラメータを1つの枠に書いてOR検索できますし、
"Between [...] And [...]"のように範囲指定することもできます。

クエリを開くと"パラメータの入力"ダイアログボックスが
先の[]で囲んだメッセージと共に現れ、抽出条件をテキストボックスに入力できます。
パラメータが複数あればダイアログボックスが順番に出てきます。
すべてのパラメータが入力できればその条件に従いクエリの結果が表示されます。
そのクエリをレコードソースとするフォーム等を開いた場合も同様の動作となります。

パラメータの入力ダイアログボックスの出現順を制御したり、
各パラメータのデータ型を指定することもでき、
クエリのデザイン ビューでコンテキストメニュー(右クリックメニュー)から
[パラメータ]をクリックすると設定ウィンドウが出てくるので、そこで設定できます。

なお、詳細はMicrosoftのヘルプページを見るといいでしょう。

2014年5月21日水曜日

Androidのスタックサイズ

昔私がアホだった頃、DOSで動くあるプログラムをCで作ったとき、
実行時にエラーが出て動作してくれませんでした。
何のことはない、ローカルスコープで巨大な配列を確保したために
スタックがなくなったというオチです。
C言語の入門書なんかを見ると、大きな配列はmalloc()を使えみたいなことが
理由もなく書いてあるものを見たことがありましたが、今でもそうなんでしょうかね?
まったく本質的ではありません。

当時すでにアセンブラの知識があり、
スタックがどういうものかも理解していましたがCを使い始めたところで、
高級言語が如何にして実行可能プログラムに落とし込まれているかを
意識するところまで達しておりませんでした。
かしこくなった今ではコンパイル後のコードを想像しながらCを使うようになり、
ローカル変数の宣言のならべ順さえも気になって仕方ありません。
これって強迫性障害なのか?

さて、スタックが足りなくならないようにヒープを使うというのは
理屈としてはあっていても思想としては間違っています。
まあ別にどうでもいい話ですが。
ではスタックは増やせるのかというと実は簡単に増やせて、
大昔はcl(MicrosoftのCコンパイラ)に
"/F <スタックサイズ(単位:B)>"オプションをつけて対応したことがあります。
このときの経験からスタックサイズは
コンパイラが決定していると理解し納得したものです。

ところがLinuxでは各プログラムのスタックサイズは実行環境(シェル?)が決定しており、
$ ulimit -s <スタックサイズ(単位:KB)>
で変更可能です。
ただ、もしかしたらgccのオプションに何かあるかも知れません。

ではAndroidアプリケーションではどうなっているかというと、
こちらも実行環境依存です。
dalvik仮想マシンの起動時にオプションで指定できます。
コマンドラインで
# dalvikvm --help
を実行すると出力されるメッセージの中に、
-XssN  (stack size, >= 1KB, <= 256KB)
のような記述があり、
"-Xss"オプションでスタックサイズが指定できることがわかります。
実はこれJavaと一緒なんですね。

それならAndroidアプリケーションは好きなサイズのスタックを
コマンドラインオプションで設定できるかというと、
通常そういうわけにはいきません。
基本的には常にデフォルト値が使用されます。
Androidフレームワークのソースを見ると、
"dalvik/vm/Thread.h"でkDefaultStackSize定数が定義されており、
これがデフォルトのスタックサイズです。
私がチラッとみたところでは、
バージョン4.2で16KB、2.3で12KBになってますね。
もちろん端末メーカーが変更していないことは保証の限りではなく、
すべてにおいて確かな数値とはいえませんので、念のため。

2014年5月20日火曜日

CSI:NYとJETS

以前にも紹介したことがありますが、
海外(アメリカ)ドラマを見ていると、向こうのプロスポーツの話題が出てきたりします。

先日CSI:NYを見ていてNLFのNY JETSの現HC Rex Ryanと
当時のGM Mike Tannenbaumが本人役で出ていることに気がつきました。
出演はほんの少しですが、ストーリー開始直後のクレジットにも名前があります。

このエピソードのアメリカでの初放送は2011年4月のようで、
2010年シーズンの結果と、直後に迫った2011年のドラフトについて
刑事 Flackが物申しています。
曰く、CB CromartieとCB Revisをそろえたことはよく、
RB Woodheadをカットしたのは間違いで、
ドラフトではベイラー大のパスラッシャーを取れ、だそうです。
前半については多くの方の意見と一致すると思います。
では後半はどうでしょうか。
この年は全体1位がQB Newtonで、
ヒントから探すとDT Phillip Taylorのことと思われます。
残念ながらクリーブランドにピックされJETSの番には残っていませんでしたが、
これもしTaylor本人がドラマを見てたら驚いたでしょうね。

なお紹介したエピソードは"CSI:NY season7 #20 絡み合う糸"で、
Huluでも視聴可能です。
2週間無料視聴キャンペーンもやっているので、
この機会にHuluを体験してみてはいかがでしょう。

2014年5月19日月曜日

Apacheでリバースプロキシ

先頃Squidでのリバースプロキシについて書きましたが、
実はウェブサーバのApache単体でもリバースプロキシ出来てしまいます。

リバースプロキシのApacheの設定ファイル"/etc/apache2/httpsd.conf"に以下を加えます。
LoadModule proxy_module libexec/mod_proxy.so
LoadModule proxy_http_module libexec/mod_proxy_http.so
ProxyPass /<ディレクトリ名> http://<ウェブサーバ名>
ProxyPassReverse /<ディレクトリ名> http://<ウェブサーバ名>
HWSProxyPassReverseCookie /<ディレクトリ名>
で、ウェブサーバを再起動します。
すると、任意のウェブブラウザから
http://<リバースプロキシサーバ名>/<ディレクトリ名>
へアクセスしようとしたときプロキシサーバとして働き、実際には
http://<ウェブサーバ名>
へのアクセスへ置き換えられます。
ディレクトリとサーバの対応関係を追加することで振り分けが可能です。
なお応答は逆の経路をたどりきちんとウェブサーバまで届きますが、
ウェブブラウザではプロキシの存在は認識できません。

さて、このリバースプロキシ、見方を変えると内部ネットワークへの侵入なので、
意図しないアクセスが起きないよう十分セキュリティに気を使う必要があります。
またaタグのhref属性などの他ファイルへの参照はリバースプロキシが都合よく書き換えてくれる、
なんてことはないので、
リバースプロキシ経由でアクセスされることを前提にコンテンツを作成する必要があります。
そのあたりきちんと認識してお使いください。
ダイレクトアクセスとリバースプロキシ経由が共に出来るようにするのなら、
別々のコンテンツにするなり、判別して切り替えるなり面倒な作業が発生します。

2014年5月15日木曜日

機械式腕時計で日付を変更してはいけない時間帯

随分前に時計屋さんに行った時の話です。
高級な自動巻き機械式腕時計なんかを扱っている店だったのですが、
そこで衝撃の事実を教えてもらいました。

そういう腕時計で日付表示付きのものはごく一般的で、
竜頭を目いっぱい引いて時刻を調整し、
日付を調整する場合は半分ぐらい引くのが通常です。
そしてその日付の調整は、時刻がだいたい11時から12時の間にはしてはいけないそうです。
どうしても調整するなら時刻をいったん無難な時間に進めるなりしてからやった方がいいそうです。
正確に言うと、日付が変わるころだけ関連する歯車がかみ合わされ、
そのかみ合っているときに日付を無理やり調整しようとすると、
この歯車が結構すぐ壊れてしまうんだそうです。
これはメーカーによらずそういう傾向があるそうですので、特に高い時計では注意しましょう。
10年以上使っている私の腕時計はそのあたりまったく気にせず
結構乱暴に扱っていたのですが、壊れていないのは単なる偶然?

2014年5月14日水曜日

ファイルの暗号化

個人的にファイルを暗号化して保存しておきたい場合、方法はいろいろあって、
最も一般的なのがWindowsの適当なアプリケーションで作るパスワード付きZIPかと思います。
が、もっと汎用的にしておきたい場合に私が使っているのがopensslコマンドです。
UNIX系なら使えないOSはないでしょうし、Windowsもcygwin等で使えます。

いつもの癖で
$ openssl --help
などと実行すればコマンド一覧等が表示されますが、
実はこれ存在しないオプション"--help"に対するエラー表示で、
コマンドを一覧する正しい方法は
$ openssl list-standard-commands
だったりします。
また暗号化に関するコマンドの一覧は、
$ openssl list-cipher-commands
で表示されます。
ちなみに利用可能な暗号アルゴリズムは
$ openssl ciphers
で一覧されます。

さて、他人に秘密裏にファイルを渡したいような場合は公開鍵暗号を使うことも考えられますが、
個人的に保管するためであれば秘密鍵暗号で十分です。
というかそんな用途でわざわざ公開鍵暗号を使うのは面倒でやってられません。
秘密鍵方式にもいろいろありますが、現時点ではAESを使うべきで、しかも主流は256ビットでしょう。
ところでopensslで使えるAESにはecbとcbcがあります。
前者は単純なブロック毎の暗号化ですが、
後者はブロックの暗号結果を次のブロックの暗号化に連鎖的に反映させるモードです。
したがって、暗号方式には"aes-256-cbc"がいいと思います。

実際の暗号化作業ですが、対象は単一ファイルである必要があるので、
"~/secret"ディレクトリを暗号化したい場合は以下を実行します。
$ cd ~/
$ tar jcf secret.tar.bz2 secret/
$ openssl enc -e -aes-256-cbc -in secret.tar.bz2 -out secret.tar.bz2.a8c
途中入力したパスワードは覚えておきましょう。
元に戻すには以下を実行します。
$ openssl enc -d -aes-256-cbc -in secret.tar.bz2.a8c > secret.tar.bz2
$ tar jxf secret.tar.bz2
途中暗号化時に指定したパスワードを要求されます。
忘れたら復号化はあきらめましょう。
なお、暗号化したファイルの拡張子を"a8c"にしているのは
暗号方式に"aes-256-cbc"を利用したことを忘れないようにするためで、
ファイル名は好き勝手につけて構いません。
むしろ何かを類推されないように意味不明なファイル名にした方がいいかもしれません。
ただし自分で判別できなくなると話にならないのでほどほどにしましょう。

2014年5月13日火曜日

Squidでリバースプロキシ

かなり前にVPN網とリモートのローカル網との接続について書きましたが、
他にもリバースプロキシを使う方法があるので一応紹介しておきます。
まあ私の都合には合わないのですが。

さて、企業内LANからインターネットへアクセスする場合などにはプロキシサーバを利用するのが一般的です。
プライベートIPアドレスしか割り当てられないような通信サービスでも
NAT(CGN)の代わりにプロキシが使われたり、透過プロキシを意識せず使っているケースもあります。

プロキシがクライアントから近いところにあってクライアントの要求を代理するのに対し、
リバースプロキシはサーバに近いところにあってサーバへの要求を代理します。
大してかわらないじゃないかとか言われそうですが、
リバースプロキシはサーバ側の負荷軽減・分散、冗長性確保等、運用するにおいて利点があります。

プロキシと言えば私の中ではSquidで、
http_port 80 accel defaultsite=192.168.1.1
cache_peer 192.168.1.1 parent 80 0 no-query originserver
のような設定にしてSquidが受けたリクエストを192.168.1.1に全転送することができますが、
これでは転送先が複数あって振り分けたい場合に対応できません。
また外部用DNSサーバで複数ホスト名にプロキシサーバのIPアドレスに割り振っておいて、
http_port 80 transparent
と設定したsquidでリクエストを全部受け取り、Hostヘッダに書かれたホスト名を
内部用DNSサーバ(またはhostsファイル)で引いて複数マシンに振り分けることは可能です。
ルータがDMZ向けにアドレス付け替えをネットワーク層で行っておりところを、
アプリケーションレベルのセッション層でやっているようなイメージですね。
単一IPアドレスの単一Apacheでバーチャルホスト運用するよりは
サイト毎に別マシンを用意できるのでバックエンドの負荷分散にはなるでしょう。
が、個人的にはあまりそそられませんね。

2014年5月12日月曜日

マリオカート8の特典

いよいよ発売間近となったWiiUマリオカート8。私は買う気満々です。
今回マリオカート8なんとも太っ腹な早期購入特典が付いてきます。
いろいろめんどくさいので詳細は公式サイトを見ていただくとして、
簡単に言えば の6本のソフトのうち遊んでみたい2本の製品版が一ヶ月限定で無料で遊べ、
気に入れば40%offでダウンロード版が購入できるとのことです。

WiiUは販売が苦戦しているので、
インストールベースが増えるのは既存ユーザにもまわりまわってメリットがあり、
新規ユーザ獲得に効果があるこういう施策は悪いことではないのですが、
やっぱり逆アンバサダー的な要素は多分にあり、
私個人にとってはそんなに喜ばしいことでないのは否定しがたい事実です。

これはWiiUの発売初期からのユーザに共通していると思いますが、
WiiUのあまり多くないゲームラインアップでは、
先の6本はすでに遊んでいる、あるいは避けたものである可能性が高いと言うことです。
私のケースでは"New スーパーマリオブラザーズU"と"ピクミン3"は十分遊びこんでおり、
各ミニゲームを一通り遊んで飽きたとはいえ"Nintendo Land"も購入しています。
"ゼルダの伝説 風のタクトHD"は移植元となるGC版を1匹目のボスを倒したあと、
自プレーヤー移動の左スティックとカメラ移動の右スティックを
同時に操るところで遊ぶのを断念した記憶があり、
期待されたWiiリモコン+ヌンチャクの操作にも非対応なので躊躇しておりました。
"The Wonderful 101"にしても発売当時に体験版を遊んで、
背景(プレーする上で意味のない絵)と地形(意味のある絵)の区別が付きにくく、
しかも作り的にテレビレスプレーができない(本当はできるのかも)ということで、
いまいちとの印象があります。
唯一残った"ゲーム&ワリオ"は40%オフでダウンロード版を買うより
Amazonで値引きされたパッケージ版を購入するほうが大幅に安いと言うすごい落とし穴があります。
まあせっかくなので"The Wonderful 101"と
"ゼルダの伝説 風のタクトHD"を選ぼうかとは思っています。
時期をずらせば一ヶ月ずつで多分両方クリアできるでしょう。

ところで初めてWiiUを遊ぶ方にお勧めするとすれば、
まずは"New スーパーマリオブラザーズU"ですね。
ただし買うならAmazonなり中古屋でパッケージ版を買った方が安いかもしれません。
家族みんなであそぶ、あるいはWiiU Gamepadの技術デモが見たいのであれば
"Nintendo Land"も悪くはありませんが、
一人で遊ぶことが目的ならやめた方がいいです。
問題は複数人同時プレーにはWiiリモコンが必要になるので、
新たに買う必要があるのなら素直に
Nintendo Land Wiiリモコンプラスセットを買った方がいいということです。
その他はWiiリモコン+ヌンチャクを持っているなら是非"ピクミン3"を体験してほしいですね。
20時間あればストーリーモードのエンディングまでたどり着けると思います。
プレーハードルの高いゲームではありますが、
最初の低難易度のステージで理解を深めて慣れれば支障はないでしょう。

2014年5月8日木曜日

スマートフォンだけでいいかも

現在P-01Dはデータ通信のみのSIMカードを入れて、
必要なときだけ電源をオンにする運用を続けております。
日本通信のSIMの期限切れを機に、
初期費用無料キャンペーンにつられて楽天のSIMに替えたのですが、
なんだかバッテリーのもちが良くなったような気がしたので試験してみました。
結果は…気のせいでした。やっぱりセルスタンバイは50%です。

ところで、私はP-01Dの無線LANを常にオンにしていて、
これだと丸一日でバッテリーを使い切ってしまいます。
基本的に無線LANが使えるところでは通信速度の面から無線LANを使いますし、
ナビの精度向上のためにも無線LANは有効ですし、
テザリングする場合は無線LANを使わざるを得ないためしょうがないのですが、
よく考えてみると無線LANをオフにすれば、ほぼ使わないという条件があるにしても
最大4日間ぐらいは充電しなくても使えるんですよね。
しかも以前の日本通信SIMだと通信速度が低速固定だったのが、
今の楽天SIMは高速通信分があるので無線LANオフのままでも結構使えます。
ということで、P-01Dを電源入れっぱなし、充電できないときは無線LANオフとし、
死蔵気味のFusion IP-Phone Smartを電話として待ち受けても
十分実用になるような気がしてきました。
遅延が決して小さくないのはこの際おいといて。

そうすると2台持ちの普通の携帯電話のほうはもういらないと。
困るのはSMSですが、最近はSMS付きの単体SIMカードもありますし、
いよいよ10年以上継続契約しているau回線の廃止もありえないことはない状況になります。
間近に迫ったSoftbank iPhone4Sとみまもりケータイ2の
満2年(MNP or 解約)問題と合わせ、悩む日々が続きそうです。

2014年5月7日水曜日

Google Mapsは更新が遅い

AJAXでぐりぐり動くGoogle Mapsをはじめてみたのは2005年でしたか。
それより前にウェブアプリケーションを作った経験があるものとして、
あれだけのことがウェブブラウザ上で実現できるというのは驚きの一言でした。
オフラインでのカーナビゲーションにはMapFan+(Android/iOS)を使っている私でも、
通常はGoogle Mapsのお世話になっています。

さて、手放しでほめたいGoogle Mapsですが大きな欠点があります。
地図の更新が非常に遅いということです。
前々からそのことには気付いてはいたのですが、
どのぐらい遅いのかについては定量的(?)に調べたわけではなく単なる印象なので、
もしかしたら気のせいかとも思ったのですが、
ちょっとしたことをきっかけに測定してみることにしました。
って、わりと近くの高速道路2箇所が2013年末に開通しただけですが。

測定と言っても別に大したことをしたわけではなく、
ほぼ毎日Google Mapsの該当箇所をチェックしただけです。
結果、4ヵ月半で1箇所の地図が更新されました。
あとの一箇所はまだですが、経路検索すると表示されていない道を進むので
地図の表示データだけが古いままなのかもしれません。
なお私は地方に住んでおり、
地方であることで更新が後回しにされている可能性はあるかもしれません。

私の車についているディーラーオプションのカーナビの地図データは7,8年前のもので、
自分が知っている道は脳内補正をかけられるけど、
知らない道は古い地図のせいで迷うという禅問答のような状態になっています。
カーナビがオンラインになっていつでも最新の地図が使えるのは大歓迎と
いいたいところですが、敵は別にいたということで。
原因が地図提供元のゼンリンにあるのか、Google側にあるのか、
きっと後者だろうと推測するのですが、
ストリートビューのデータ取りする暇があるなら地図のメンテを優先してほしい
と思うのは私だけではないはず。

2014年5月6日火曜日

gitでSSLエラー

先日とあるソースコードをダウンロードしようと
$ git clone https://<どこかのサーバ>/<どこかのディレクトリ>/<何かgitファイル>
を実行したところ、
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d while accessing <指定したURL>
と怒られました。
SSL通信時に認証エラー(というか信頼のチェーンの問題)が起こっている模様です。
多分いろんなものをアップデートしていないことが原因なのでしょうが、
めんどくさいのでこれを無視する方法を探すと
$ git -c http.sslVerify=false clone https://<どこかのサーバ>/<どこかのディレクトリ>/<何かgitファイル>
でいけました。
また前もって
$ git config http.sslVerify=false
をしてやってもいいようです。

ちなみに同様のことはwgetだと"--no-check-certificate"オプション、
curlでは"-k"オプション(または"--insecure"オプション)で可能です。
あまりほめられた方法ではありませんが、どうしても必要なときってありますから。

2014年5月5日月曜日

robots.txtって何?

ものぐさなので積極的にすることはないのですが、
事情があってVPSのApacheのログを見たところ
"/robots.txt"へのアクセスが多発しているではありませんか。
そんなファイル存在しないのに。
で、そのアクセス元のユーザエージェントを見ると
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
となっています。
もしやボットが巡回しているのか?
ググッたところビンゴのようです。
さらにログを調べたところどうもいろんなボットからアクセスを受けているようです。
第三者からアクセスされるようなサイトではないんですけどね。

で、"robots.txt"はどう書いておけばいいかというと、
ここの[robots.txt ファイルを作成する]に詳細がありますが、
とにかくボットはくるなという設定にするには
User-agent: *
Disallow: /
でいいようです。
ただしちゃんと言うことを聞いてくれるかどうかはボット次第です。

2014年5月1日木曜日

アイルトン・セナ 没後20年

アイルトン・セナがイモラのタンブレロに消えてから今日で20年。
時が経つのが早いことを実感させられます。
サンマリノGP本戦の放送中に突然画面が変わり、
今宮さん、川井さん、三宅さんの3人が並んで
セナの死を告げた場面は今でも覚えています。
後にドキュメンタリー映画アイルトン・セナ~音速の彼方へ にも収録された有名な場面です。
当時はインターネットもなく、
テレビで知らされる以上の情報を入手する手段はありませんでしたが、
関係者は口を開くことを一切禁止されているようですので、
事故の瞬間何が起こったのかは今後も知ることはできないでしょう。

忘れてはならないのがセナの前日に予選中に亡くなった
ローランド・ラッツェンバーガーです。
翌モナコGPではポールにセナの、
2番手位置にラッツェンバーガーの名前が刻まれていました。
ラッツェンバーガーはマシンにダメージを負ったにも関わらず予選走行を続け、
フロントウィングが脱落してコントロールを失い
コンクリートウォールに激突したようです。

恐ろしいのは最近でも似たような事故が起こっているということです。
やはりマシンが壊れているときに強制的にピットインさせるようなことを
レースコントロールがすべきと感じます。
またここ10年ぐらいはドライバーに大きなダメージがなかったのが
ただ運良かっただけのような事故も特定のドライバーが起こしていますし、
ブロックというより幅寄せみたいな行為も見られます。
マシンが丈夫になったのをいいことに無茶しすぎているようにも思えます。
今シーズンでもハミルトンの斜め走行はフェアと言っていいのか疑問です。
もちろん彼らはレースをしている訳で、
プロドライバーではない私はそれを判断できる立場にはないのですが。
とにかく無茶をしたもの勝ちみたいな風潮はなんとかしてほしいです。

話を戻しますが、私の中でのセナのベストレースは
1993年の雨のドニントン・パークです。
ホンダエンジンを失い非力なマクラーレン・フォードを駆るセナは、
4台をオーバーテイクしオープニングラップを取るとそのまま優勝。
1周目の走りには度肝を抜かれました。
その他にも、レース終盤タイヤ交換したマンセルを押さえて勝った92年のモナコや、
6速ギアホールドで戦い母国GP初優勝となった91年ブラジルなど、
神懸かり的なエピソードはいくらもあります。

セナが亡くなった翌年、日本でも全国各地でセナ展が開催されました。
幸運なことに当時私の住んでいた都市でもあったので2回ほど行きました。
ヘルメットなどレース関係の品はもちろんのこと、
生前に愛用していた時計だとかの展示がありました。
時計はもちろんスポンサーのタグホイヤーで、
私がタグホイヤーを愛用するのに少なからず影響しています。
このときいろいろグッズを買って、
さすがにセニーニャのトレーナーはもう捨てましたが、
Nacionalの青いキャップはまだどこかにあるはずです。
って、どこにしまったかわからないorz