TrackMeのWebインターフェイスを日本語化、バグ修正

EMONSTER等のGPS内蔵WindowMobile端末向けにTrackMeというアプリケーションがあります。端末内でGPSログを保存することはもちろん、リアルタイムでサーバーに位置情報を送信することもできます。このサーバー用のPHPスクリプトも上記ページで公開されており、自前のサーバーで運用することもできます。自動リロードで常に端末の現在位置をGoogleMapsで表示するモードなどもあり、サイバーです。バックエンドにMySQLを利用しており、テーブル構成などをのぞけば、色々と応用が広がりそうです。

■日本語ランゲージ定義の追加

で、そのスクリプトによるWeb画面はマルチランゲージ対応されているのですが、残念ながら日本語の設定はありません。中を覗いてみたところ、定義ルーチンが独立していて簡単に追加できそうだったのでサクっと作業してみました。下記の2ファイルを更新すれば使えるようになると思います。

一応、開発者の人に送ってみるつもりですが、自前でパッチ当てしたい人向けに貼っておきます。

index.php (818行目辺りに赤字部分を追加)

$html .= "                        <select name=\"language\">\n";
$html .= "                            <option value=\"english\""; if($language == "english") { $html .= " SELECTED"; } $html .= ">English</option>\n";
$html .= "                            <option value=\"italian\""; if($language == "italian") { $html .= " SELECTED"; } $html .= ">Italian</option>\n"; //trackmeIT
$html .= "                            <option value=\"german\""; if($language == "german") { $html .= " SELECTED"; } $html .= ">German</option>\n";
$html .= "                            <option value=\"spanish\""; if($language == "spanish") { $html .= "SELECTED"; } $html .= ">Spanish</option>\n";
$html .= "                            <option value=\"french\""; if($language == "french") { $html .= "SELECTED"; } $html .= ">French</option>\n";
$html .= "                            <option value=\"dutch\""; if($language == "dutch") { $html .= "SELECTED"; } $html .= ">Dutch</option>\n";
$html .= "                            <option value=\"japanese\""; if($language == "japanese") { $html .= "SELECTED"; } $html .= ">Japanese</option>\n";
$html .= "                        </select>$display_language_text<br>\n";
$html .= "                        <select name=\"units\">\n";
$html .= "                            <option value=\"imperial\""; if($units == "imperial") { $html .= " SELECTED"; } $html .= ">Imperial</option>\n";
$html .= "                            <option value=\"metric\""; if($units == "metric") { $html .= " SELECTED"; } $html .= ">Metric</option>\n";
$html .= "                        </select> $display_units_text<br>\n";

language.php (356行目辺りに赤字部分を追加)

(↑ 他の言語定義が並んでいる部分 Italian Language Data)
       $speed_metric_unit_balloon_text      = "km/h";
       $distance_metric_unit_balloon_text   = "chilometri";
       $height_metric_unit_balloon_text     = "metri"; 
     }
   elseif($language == "japanese")
    {
        $title_text                          = "TrackMe Display";
        $trip_button_text                    = "軌跡表示";
        $location_button_text                = "リアルタイム更新ON";
        $location_button_text_off            = "リアルタイム更新OFF";
        $filter_button_text                  = "更新";
        $filter_none_text                    = "全て表示";
        $filter_photo_comment_text           = "写真、コメント付きポイントのみ";
        $filter_photo_text                   = "写真付きポイントのみ";
        $filter_comment_text                 = "コメント付きポイントのみ";
 
       $filter_last_20                      = "最新20ポイントのみ";
        $filter_daterange                    = "日時範囲指定";
        $footer_text                         = "軌跡データ生成:";
        $incomplete_install_text             = "インストールが正しく終了しませんでした。ファイルinstall.php、database.sqlはまだTrackMeフォルダに存在します。これらを削除するまで地図表示は有効になりません。";
        $no_data_text                        = "DB内の1つ以上のTrackMe テーブルにデータがありませんY。Windows MobileデバイスでTrackMeアプリケーションを実行し、軌跡データを生成する必要があります。";
        $database_fail_text                  = "DBとの接続が切断され、表示が中断されました。";
        $trip_none_text                      = "なし";
        $trip_any_text                       = "全て";
        $display_options_title_text          = "表示オプション";
        $display_header_text                     = "ヘッダーを表示";
        $display_showbearing_text                = "方向矢印を表示";
        $display_crosshair_text              = "中心の十字マークを表示";
        $display_clickcenter_text            = "クリックした位置を中心にする";
        $display_overview_text               = "ミニマップを表示";
        $display_language_text               = "表示言語を選択";
        $display_units_text                  = "表示単位を選択";
        $display_button_text                 = "設定を保存"; 
        $startdate_text                                          = "開始:"; 
        $enddate_text                                            = "終了:"; 
        $trip_title                                                      = "Trip:"; 
        $filter_title                                            = "フィルタ:"; 
        $date_title                                                      = "日付:";
        $tripsummary_title                                       = "Trip 概要";
        $tripstatus_title                                        = "現在位置";
        $summary_time                                            = "トータル時間:";
        $summary_photos                                          = "写真数:";
        $summary_comments                                        = "コメント数:";
        // Public Display Information
        $user_button_text                    = "ユーザ切替";
        $showconfig_button_text                          = "設定";
&#
160;       $showconfig_button_text_off                      = "設定";
        // Private Display Information
        $page_private                                        = "ページの表示にはユーザ名とパスワードのよる認証が必要です。";//trackmeIT
        $trip_data                                                   = "ユーザ名:"; //trackmeIT
        $login_text                          = "ユーザ名";
        $password_text                       = "パスワード";
        $login_button_text                   = "ログイン"; 

        // Balloon Fields Information
        $user_balloon_text                   = "ユーザ";
        $trip_balloon_text                   = "Trip";
        $time_balloon_text                   = "時間";
        $speed_balloon_text                  = "速度";
        $altitude_balloon_text               = "高度";
        $total_time_balloon_text             = "累積時間";
        $avg_speed_balloon_text              = "平均速度";
        $total_distance_balloon_text         = "移動距離";
        $point_balloon_text                  = "ポイント";
        $comment_balloon_text                = "コメント";
        $speed_imperial_unit_balloon_text    = "mph";
        $distance_imperial_unit_balloon_text = "miles";
        $height_imperial_unit_balloon_text   = "feet";
        $speed_metric_unit_balloon_text      = "km/h";
        $distance_metric_unit_balloon_text   = "km";
        $height_metric_unit_balloon_text     = "m";
    }
    else
    {

(↓ 以降、デフォルトの英語表記のデータ Defaults English Data)

 

■ユーザ選択がリセットするバグの修正

リアルタイム表示のON/OFFをすると、ユーザ選択がリセットされてしま現象が出たので、場当たり的対応してみました。

index.php (305行目辺りの赤字部分を追加)

$html .= "                      function livetrack()\n";
$html .= "                      {\n";
$html .= "                              if(document.getElementById(\"last_location\").value == \"$location_button_text\")\n";
$html .= "                              {\n";
$html .= "                                      location=\"index.php?ID=$ID&last_location=yes\";\n";
//$html .= "                                            document.getElementById(\"last_location\").value = \"$location_button_text_off\";\n";
$html .= "                              }\n";
$html .= "                              else\n";
$html .= "                              {\n";
$html .= "                                      location=\"index.php?ID=$ID\";\n";
//$html .= "                                            document.getElementById(\"last_location\").value = \"$location_button_text\";\n";
$html .= "         &
#160;                    }\n";
$html .= "                      }\n";

「僕の彼女はサイボーグ」は既視感の連続だった

予告にそそられて観てきました。以下、ネタバレ有り。

■それなんて○○?

散々既出の、「それってサイボーグじゃなくてアンドロイドじゃん!」って突っ込みはさておき、、、結論からいうと、どのシーンもアニメやゲームでお目にかかったことがあるような気がするシチュエーションばっかで、新鮮味にかける感じでした。例えば、人間世界のことがわかっていないアンドロイドがやらかすボケとして、ペットのイグアナを鍋料理しちゃうとか、香水飲むとか読めまくりでした。冒頭のマネキンも読めた。基本プロットも、感情をもたないロボットが色々ボケをかましつつ愛着を醸し出しておき、最後に比較的ベーシックな行動原則(プログラム)に基づいて(人間から見たら)ものすごい自己犠牲的な行動を取って、人間が勝手に感動する、みたいな。それなんてマルチ?な感じ。自分を守って壊れたロボットを、将来科学者になって復元する、って流れも偽ドラえもん最終回とか、ジュブナイルとかで既出。最後に視点が変えて物語をなぞるのもKeyあたりが良くやる手法だし、、、なんか既存の比較的マニアックな世界で使い古されたネタを、一般人向けにかき集めてみました、的な評価ですね。オタク的にw。

■韓流的なギトギト感にため息

あと脚本、監督が韓国人なワケですが、全体にデレシーンとかギトギトに濃ゆくていかにも韓流ドラマな感じでちょっとウっときました(と韓流ドラマをちゃんと観たこともないσ(^^)が書いてみる)。セリフもクサいし、顔の表情が無駄に大げさな印象。そこまで顔の筋肉酷使してしゃべるヤツいたらキモいわ、って位(^^;)。やっぱり今後も韓流ドラマは観ないだろうなと改めて思ったりw。

■ある意味、子供に見せられない

未来から来たばかりのアンドロイドちゃんは服や靴を万引きしたり、店員を電気ショックで気絶させたり、主人公を巻き込んで食い逃げしたりとやりたい放題。主人公も食い逃げ楽しんじゃったり。過去シーンで子供時代の自分も駄菓子屋でお菓子盗んでたり。なんつーか、全般的に脱法行為が平然と行われすぎな映画です(^^;)。

■SFXはまぁ邦画なり…

CGは災害シーンとかそれなりだったけど、一番の山場である、下半身ちぎれたアンドロイドが這って主人公を助けに行くシーンで、露出するメカがショボすぎて萎えましたねぇ。あそこだけはもう少し頑張って欲しかった。むしろ少年時代にタイプリープしたシーンはCGは使ってなかったかも知れないですが、舞台美術としては結構よくできてた印象。駄菓子やの品揃えが良すぎなのが気になった位。

■あの結末は一体…

最後の未来の主人公が死んでから後のシーンはまるまるいらなかったんじゃないですかね?とってつけたよう。博物館に展示される位までは良かったかな(これもありがちな終わり方ですが。オーガンとか)。冒頭の2007年に現れた方が、時間的により未来から来てたんだろうなというのは途中で気付きましたが、まさかそっくりさんとは。てことは、学生の誕生日パーティをみて、ケーキに顔を突っ込ませる習慣を、アンドロイドは学習してないということになる気がするんですが、そこんとこどうなんですかね?で、最後にアンドロイドを失った時間に生身ちゃんが来て一緒に暮らしていくことになったら、主人公が苦労して科学者になってアンドロイドちゃんを蘇らせようとするモチベーションが著しく低下して、タイムパラドックスが生じる気も。まぁ、パラレルワールド的時間観の方で捉えるならアリですが。

一般人的な感覚だと、アンドロイドちゃんはいなくなったけど、クリソツで生身の彼女ができて良かったね、ってことになるんですかね?一般作としては、アンドロイドとくっつくとかいうオチは許容されないのかぁ?

■公開時期が微妙だったかも

無差別銃乱射や女子校立てこもり事件、そして地震と、本来理不尽は犠牲者を出していた未来から、それを回避すべくアンドロイドが送られてきて、実際サクっと救ってしまうワケですが、ちょうど現実に秋葉原の事件、四川大地震、そして今日も岩手、宮城の地震で死者が出たこのタイミングに観るとちょっと切ないですね。

■結論

まぁ、貴重な国産SFに投資という意味では、丸損ではなかった気がします。でもまぁやっぱり日本で作れる実写SFってこんなもんだよなぁ、という印象。サイボーグ(=改造人間)とアンドロイド(=人造人間)をとりちがえてる時点で、すでに科学的考証なんかも期待はしちゃいけないんだろうなという予感はしてましたけども…

過去と未来が循環するタイムリープものとか、すごく長いタイムスパンで伏線がつながる話自体は基本的にすごく好きなんですけどね。マルチも知らないような一般人なら、そこそこ新鮮な邦画SFとして楽しめるのかも知れません。

CyberNavi用定額通信ユニットWS022IN到着

WS022IN

5月下旬予定から延びましたが、WILLCOMのCyberNavi専用定額データ通信ユニットWS022INが到着しました。

ウィルコムプラザに入荷日がわかったら連絡もらう約束してたのに音沙汰なし。2chで既に注文した人がいると聞き、ググったらWILLCOM STOREの注文ページを発見。二日で届きました。

\500~\1,500の従量プランが良いか\1,000の固定プランにするか基準が不明確で決めかねていたんですが、注文サイトに「月8時間程度までなら従量がお得」という目安が提示されていたので、迷わず定額。経理上楽な年額一括払いにしました。

端末価格も当初噂されていた\6,000程度から、期間限定割引で\3,980(事務手数料別)と割安感がある値段でゲット。SmartLoopを使っていて感じるメリットからすればコストパフォーマンスは良いと思います。

開封してみて驚いたのは、各所に出ていた写真から想像していたよりも随分小さい筐体だった点。ほとんどWSIMを基準にしているようなサイズですね。左上は比較用の去年もらったSmartLoopロゴ入りUSBメモリ。ちなみにWSIMのセット方法を記した説明書きは無し。機械が苦手な人は悩むかも知れません。実際には先端の黒いパーツを引っ張ると開くようになっています。

自宅駐車場では受信OK。実はこれを見越して今月から携帯電話の方のパケットパックを外してホワイトプランに変更してたんですが結局月の半分はそっちでパケット通信してしまいました。パケ代いくらになったかなぁ。ともあれ、これでそれを気にせずSmartLoopを最大更新頻度設定で使いまくれます。

ただ、新型ではアルバムジャケットを登録できない関係でCDからのダイレクト録音を使わなくなったので、CDDBのための接続は不要になってしまい、本当にSmartLook専用って感じですね。

入手に苦労したマクロスFサントラ『娘フロ。』

昨日が発売だったんですが、すっかりAmazonに予約したつもりで危うく買い逃すとこでした。AmazonのBD予約ランキングが絶好調っぽいので、サントラも売れるだろうなぁ、と思ってたんですが、案の定でした。

当日になって慌てて横浜駅周辺に走ったんですが、ヨドバシ、ソフマップ、HMV、ゲーマーズ、とらのあなと全滅。意外に近場のTSUTAYAに残ってました。こういう時はアニオタがあんまり来ないとこが逆に穴場ですねw。

で、これがやはり良い出来。菅野よう子のサントラももちろん、シェリルやランカの歌もイイカンジ。シェリルのシングルは既に買ってあったんですが、こっちに収録してあるのはライブ版というか歓声が入ってたりします。ホールエフェクトも入ってるのかな?ちょうど新調したばかりのサイバーナビで聴くとかなり気持ち良いです。ガソリン高のご時世につい遠回りしたりアクセル踏んじゃいそうになって困るくらい(笑)。

やはりマクロス。劇中歌にも手抜きませんね。マクロス7の時にFire BomberのCD売り上げもそれなりにあったみたいなので、やはりここは手堅くってことでしょうか。我々視聴者にとっても良いことです。今後も色々展開してほしいですね。

本編は作画が大変残念なことになっていて、いまだにBDどうしようか決心がつきませんが(^^;)。メカと音楽がいいだけにねぇ。これで5.1chとかならそっちでBD買う意義が高まるんだけどなぁ。

実家のお風呂に防水ワンセグテレビ設置

実家の父親が半身浴かなにかをすると決意したらしく、風呂場でテレビを観られるようにしたい、と行ってきました。

で、7インチクラス/ワンセグで4万程度、10~12インチクラス/12セグで15万~20万コース、という見積もりを出したところ、前者でという返事。

購入したのはLogitecのLTV-1S700WPです。特徴としては、

  • 7インチ
  • ロッドアンテナの他に延長ケーブル付き小型アンテナ付属
  • バッテリーで3時間駆動
  • 壁掛け用ホルダー同梱

といったもの。他の家電メーカーの製品が3.5インチや4インチクラスなのを考えるとコストパフォーマンスは高め。実は同じ中身と思われるEVERGREENの機種だと更に\5,000ほど安いんですが、風呂場に黒モノはあわない気がして、Logitecの方を選びました。

実際つけてみたところ、ロッドアンテナは論外でしたが、ケーブル付きアンテナを窓の外に出してやったら意外とまともに受信しました。ダメだったらEXEMODEのリピータータイプのブースターを買おうと思ってましたが悩ましいところです。バッテリーを充電しに風呂場から脱衣所などに持って出る度にアンテナ線を付け外しすることを思えば、脱衣所にブースターを設置してロッドアンテナ受信する方が使い勝手は良いでしょう。ただ、脱衣所と隣接するダイニングにアンテナ線は来ておらず、リビングからとか2Fの部屋から外壁づたいにアンテナ線自体を引っ張ってこないとならず結構大がかり。また、ウチの家族のことだから、ブースターの電源とか入れっぱなしにするだろうしなぁ(消費電力スペックは約0.15A(DC12V)と蛍光灯以下ですが)。当面はブースターという選択肢は黙っておくかw。

7インチという画面サイズはワンセグの解像度からしたらやや大きすぎで、アラも目立ちますが、ケータイなどと比べ視聴距離は離れるし、眼鏡外してたりするので、やはり大きいに越したことはないかなという印象です。