2016年2月11日木曜日

さらなる通信費削減

500MB/月 まで無料という驚愕の 0 sim を申し込んでみた.
すごい人気で発送が遅れていたようで 2/3 に発注したものが 2/11 にやっと届いた.

←真っ白の SIM カードなんて初めて見たw 狙ったデザインなのかもしれんけど,パッケージの台紙も真っ白だし,まぁコストダウンということなのだろう.
とりあえず速度計測してみた.Zenfone5 の 3G で (LTE は無いので).通信速度はあまり期待していないけどこんだけ出りゃ自分的には十分かな.

ちなみに mio iij の計測結果はこれ.0 sim はだいたい 1/4 といったところか.

自分は大体 800MB/月くらい使っていて ¥0 運用にはならないのだけど,それでも今の¥974/月よりは大分安くなる.
Zenfont5 はデュアル sim 機だから,もう一枚買えば確実に ¥0 にできるんだけど,「一人一枚まで」の一人の定義ってなんだろう? クレカ分けたら買えるんだろうか.

2016年1月12日火曜日

しょっぱなから不幸

あけましておめでたくない事案発生(;´д⊂)

ちょうど 3年前に買った 3TB の HDD が不調になった.
自分は HDD がいっぱいになると大きい HDD に買い換える (このスパンがだいたい 2-3年) というのを繰り返しており,個人持ちの HDD でトラブルが起こったことがないのだが,3TB はなかなかいっぱいにならず買い替えの機会がなく,かつ 3年という短い期間で不調が起きてしまった.

仕方がないので 4TB の WD40EZRZ-RT を購入して,救えるファイルだけコピー中だけど 5% くらい消失.まぁこんだけの被害ですんだと喜ぶべきなのか…

改めてイベントビュアー見てみると去年の 11/29 から disk エラーがちらほら出始めてたみたい.こんときに気づけていたらもうちょっと被害は少なかったかもなぁ(゜ーÅ)ほろり
てかもうちょっと気づけるように通知してくれよ > Windows

と思ったら,タスクスケジューラでイベントビュアーのイベントをトリガにタスクを実行できることがわかった.
タスクスケジューラの新規タスク作成画面で
トリガーの編集
→タスクの開始: イベント時
→ログ: システム
→ソース: disk
操作の編集
→操作: プログラムの開始
→プログラム/スクリプト: msg
→引数の追加: 「/w * "イベントログで Disk エラーを検出"」とか

ってやると,disk エラー時にメッセージボックスが開く.
いまファイルコピー中だけど早速通知されてます(;´д⊂)

2015年11月28日土曜日

Dynabook S38 に Win10 クリーンインストール

Dynabook tab S38 に Win10 をクリーンインストールした.

この場合,多くのデバイスドライバは自動インストールされないんだけど,東芝のサイトに Win8.1/10 ドライバは公開されていない.なので,いろんな機種のドライバを寄せ集めてデバイスを全部認識させてみる.
# 先に書いとくけど Win8.1 のファイルを使うので,Win8.1 を消す前に作業が必要

その前に,デバイスマネージャで不明なデバイスを右クリック→ドライバーソフトウェアの更新→ドライバーソフトウェアの最新版を自動検索します をとりあえずすべての不明なデバイスでやってみる (これで認識するものあるので).

この状態で画像くらいに数が減った.デバイス名としては
ISP Camera Device (は中途半端に認識してるっぽい)
Microsoft ACPI-Compliant System
intel imaging signal processor 2400
Intel(R) Atom(TM) Processor I2C Controller driver
あたりだけど,まぁなんのデバイスのことかはわからない.動かしてみて明らかに使えないデバイスは,カメラ,GPS あたりだけど.

ここで他社タブレットのドライバを拝借してくるw ライセンス的に微妙なのと,PC が壊れても知らないので以下自己責任でどうぞ.
(1) レノボ からドライバを取ってきて実行すると,c:\DRIVERS 以下にドライバが解凍される.
(2) HP Stream 8 からドライバ検索して Broadcom GPS Driver (ファイル名: sp72184.exe) を取ってきて実行すると,c:\SWSetup 以下にドライバが解凍される.あとあと楽なので,c:\DRIVERS の下に移動させる.
(3) Win8.1 の \windows ディレクトリ以下からファイル検索で以下のファイルを探して,c:\DRIVERS 以下にコピーする.
mt9m114.sys, MT9M114_CIFDHA0.cpf, mt9m114.inf, ov5693.inf, ov5693.sys, OV5693_CJAD542.cpf
(4) デバイスマネージャで不明なデバイスを右クリック→ドライバーソフトウェアの更新→コンピュータを参照してドライバーソフトウェアを更新します→c:\DRIVERS を指定して次へ
たまに署名が云々で警告食らうけど,気にしたら負けなのでそのままインストール.
(5) 新たに不明なデバイスが生まれることがあるけど,「ドライバーソフトウェアの最新版を自動検索」か「コンピュータを参照してドライバーソフトウェアを更新」かどっちかで消えるはず

これですべてのデバイスドライバが認識できたヽ(´ー`)ノ
Win10 にして個人的に一番嬉しいのは,Bluetooth テザリングの子機としてスマフォに接続できるようになったので,外に持ち出して使えるヽ(´ー`)ノ

2015年11月24日火曜日

人柱なモノ

Win10 が無料アップグレードでもクリーンインストールできるようになったので,Dynabook S38 に Win10 をクリーンインストールしようとやってみたら,
・内蔵 MicroSD カードスロットからはブートしない→USB ドライブが必要
・セットアップ中はタッチパネルは認識しない→USB キーボード (+マウス) が必要
で一瞬で詰んだ orz

仕方がないので USB-OTG + USB Hub を探してみたら,いいのがあった.
OTG MicroUSB対応 充電ポート付 4ポートUSBハブ DN-12851
これのいいところは,AC アダプタで充電しながら USB Hub が使える可能性があること.大抵の「給電できる USB-OTG ケーブル」は USB 機器に給電はできるけど本体の充電はできない.
まぁ商品説明にもある通り,実際に充電できるかどうかは賭けだけど,切り替えスイッチがついてるから期待できるし,たとえ充電できなくても Hub としては使えるからいいや,とポチッとな.

で今日届いたので試してみた.結果は…

賭けに 月券 禾リ ヽ(´ー`)ノ

見事,本体に充電しながら,Hub に挿したマウスを認識した.
ちなみにスイッチ位置は 1 でいけた.謎なスイッチはここの記事のような抵抗値を切り替えているんだろうと予想していたが,ハブ本体からリレー音がしていたので,もうちょっと高級なことをしているみたい.
これで今週末は S38 にも Win10 入れられる.

ちなみに,Zenfone5 でも試してみたけど,こちらはどのスイッチ位置でも充電と USB Hub 機能は両立しなかった.ざんねん.

2015年11月8日日曜日

(・∀・)デムパ!! が足りない時の対応

自分ではわりと活用している Waypoint Navi,先日の奈良ニュルで問題点が発覚した.
Google ナビはルート探索が終わった後なら,電波が途切れてもそのままルート案内してくれるが (地図データもある程度キャッシュしてるみたい),WpNavi はウェイポイント (WP) 毎にルート探索が発生するので,電波がない地点を WP に設定していると,Google ナビのルート探索で止まってしまいその後ナビが続かなかった.

自力でナビするのは道路データがないと無理だし諦めたヽ(´ー`)ノ
ここのように,ルートの曲率からラリーのコ・ドライバーのような音声案内をするというのはなかなか面白い案だけど,高架の側道に降りる的な微妙な Y 字路の案内は無理なので,実用性は謎.

なので,電波がない状態の非常モードと割りきって音声案内はきっぱりと諦めて,
(1) WP に到達した時点でデータ通信が切れている場合,Google ナビは起動せす,現在地と事前設定したルートの線,それと運が良ければ地図,を表示するだけにする
(2) データ通信が復活したら,自動で Google ナビを開始する
というようにしてみた.これだけでも無いより大分マシだし,路肩に車を止めてスマフォを操作せずとも乗りきれる (はず).

2015年11月1日日曜日

Google V8 搭載 (2015年度版)

メイン PC を Win10 にするついでに,開発ツールを Visual Studio Community 2015 (Express ではない,ほぼフルスペックの VS がタダで使える.いい時代だなぁ(゜ーÅ)ほろり) を入れたら,3年前の Google V8 ソースコードがコンパイルできなかったので,最新版を VSD for GPS に組み込むことにした.
こんだけ期間が開くと API がガラッと変わって,昔やってた AviUtl のプラグイン DLL に V8 を組み込む手法なんかも変えないといけなかったので,再び調べてみた.

サンプルとかでよく見る V8 の実行の流れは以下のようになっていて,
あるクラス::ある関数(){
  Isolate 作成
  Isolate スコープの中 {
    Handle スコープの中 {
      Context 作成
      Cotext スコープの中 {
        JavaScript 初期化 (スクリプトコンパイル等)
        // ↑ここまで初期化処理
        // ↓ここから繰り返しの処理
        JavaScript 実行
      }
    }
  }
}
AviUtl のプラグイン DLL では,初期化処理と JavaScript 実行処理は関数を分けて,それぞれの関数処理が終わるごとに AviUtl に制御を返さないといけない.かと言って単純にそれらを分けてしまうと,初期化関数を抜けた時に Handle スコープを抜ける = Context も破棄されるため,別関数で JavaScript 実行することができない.

なので以下のようにする.
あるクラス::Compile(){
  Isolate 作成→メンバ変数に保存
  Isolate スコープの中 {
    Handle スコープの中 {
      Context 作成→メンバ変数に保存
      Cotext スコープの中 {
        JavaScript 初期化 (スクリプトコンパイル等)
      }
    }
  }
}

あるクラス::Run(){
  メンバ変数に保存した Isolate スコープの中 {
    Handle スコープの中 {
      メンバ変数に保存した Cotext スコープの中 {
        JavaScript 実行
      }
    }
  }
}
要は Isolate と Context はメンバ変数に保存してやれば良い.ただし Context::New は Local<> なので (そのままでは Handle スコープを抜けると破棄されるため) Persistent<> に変換してやる必要がある.(そして Run() 内でメンバ変数の Context を参照するときは,また Local<> に変換する.)
Context 内のグローバルオブジェクトとか,HandleScope を抜けるとどうなるか心配だったが,この方法なら破棄されないみたい.

というわけで hello.cc をちょっと改造して上記のことを実現したソースは以下のとおり.Compile メソッドで生成した JavaScript function の hoge() を,Run メソッドで呼ぶことができている.昔やってた,HandleScope を new で生成するというやばい方法は使わなくて済んだ.
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "include/libplatform/libplatform.h"
#include "include/v8.h"

using namespace v8;

class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
public:
    virtual void* Allocate(size_t length) {
        void* data = AllocateUninitialized(length);
        return data == NULL ? data : memset(data, 0, length);
    }
    virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
    virtual void Free(void* data, size_t) { free(data); }
};

class CScript {
    
    Platform* m_Platform;
    ArrayBufferAllocator m_Allocator;
    Isolate::CreateParams m_CreateParams;
    Isolate* m_Isolate;
    v8::Persistent<v8::Context> *m_Context;
    
  public:
    CScript( char *path ){
        // Initialize V8.
        V8::InitializeICU();
        V8::InitializeExternalStartupData( "." );
        m_Platform = platform::CreateDefaultPlatform();
        V8::InitializePlatform(m_Platform);
        V8::Initialize();
        m_CreateParams.array_buffer_allocator = &m_Allocator;
    }
    
    ~CScript(){
        m_Isolate->Dispose();
        V8::Dispose();
        V8::ShutdownPlatform();
        delete m_Platform;
    }
    
    void Compile( void ){
        // Create a new Isolate and make it the current one.
        m_Isolate = Isolate::New(m_CreateParams);
        {
            Isolate::Scope isolate_scope(m_Isolate);
            
            // Create a stack-allocated handle scope.
            HandleScope handle_scope(m_Isolate);
            
            // Create a new context.
            Local<Context> context = Context::New(m_Isolate);
            m_Context = new Persistent<v8::Context>( m_Isolate, context );
            
            // Enter the context for compiling and running the hello world script.
            Context::Scope context_scope(context);
            
            // Create a string containing the JavaScript source code.
            Local<String> source =
                String::NewFromUtf8(m_Isolate, "function hoge(){ return 'hoge!!!'; }",
                    NewStringType::kNormal).ToLocalChecked();
            
            // Compile the source code.
            Local<Script> script = Script::Compile(context, source).ToLocalChecked();
            Local<Value> result = script->Run(context).ToLocalChecked();
        }
    }
    
    void Run( void ){
        Isolate::Scope isolate_scope(m_Isolate);
        
        // Create a stack-allocated handle scope.
        HandleScope handle_scope(m_Isolate);
        
        // Create a new context.
        Local<Context> context = Local<Context>::New( m_Isolate, *m_Context);
        
        // Enter the context for compiling and running the hello world script.
        Context::Scope context_scope(context);
        
        Local<Function> hFunction = Local<Function>::Cast( context->Global()->Get( String::NewFromUtf8( m_Isolate, "hoge" )));
        if( hFunction->IsUndefined()){
            int a=0;
        }
        
        Local<Value> result = hFunction->Call( context->Global(), 0, NULL);
        // Run the script to get the result.
        
        // Convert the result to an UTF8 string and print it.
        String::Utf8Value utf8(result);
        printf("%s\n", *utf8);
    }
};

int main(int argc, char* argv[]) {
    
    CScript *scr = new CScript( argv[ 0 ]);
    scr->Compile();
    scr->Run();
    delete scr;
    
    return 0;
}

2015年10月26日月曜日

奈良ニュル

通称「奈良ニュル」と呼ばれる道を走ってきた.

奈良ニュルという単語はよく聞くけど,具体的にどの道かはっきり書いてある記事とかが少なくて,断片の情報から判断したルートがこれ.

湖畔の里つきがせ ~ 室生龍穴神社 の道をそう呼んでいるらしい.

湖畔の里つきがせからスタートして少し急カーブの山道が続くけど,それを抜けるとこんな感じの (逆光www),ストレートや緩いカーブがの道がずっと続き,(多分) 信号も 0 なので走ってて非常に楽しいヽ(´ー`)ノ.さすが「ニュル」を名乗っているだけのことはある.

終点の室生龍穴神社前.ここでトイレ休憩して折り返すもよし,そのまま南に突き抜けてプチ酷道ツアーw を楽しむもよし.

今回はそのプチ酷道ツアーを敢行して曽爾高原のすすきを見に行ってみたのだけど,途中の渋滞がひどかったので断念.南から比奈知ダムに寄ってから,伊賀コリドールロードの西セクションを通って帰宅.

今回のドライブは全行程において走りやすい道が多かった.奈良は田舎だけに走りやすい道が多くていいね.

2015年10月24日土曜日

JavaScript 電卓が最強すぎた

世間一般的に JavaScript 電卓というと,Web ブラウザのフォーム・ボタン・JavaScript の学習ネタとしてよく作られているけど,自分が目指しているのはそういう非実用的なものじゃなくて,要は「JavaScript 言語仕様を受け付ける電卓」.UNIX の bc コマンドのようなものと言えばイメージが伝わるかも.

というわけで HTA で書いてみた.実はテキストボックスに入力されたテキストを (キーが押されるたびに) JavaScript で eval() するだけなんで,「学習ネタの JavaScript 電卓」とは比べ物にならないほど簡単w 見た目もまず電卓には見えない.

なんだけど,意外にもこれが非常に使える.
キーボードでスピーディに入力できて = すら押す必要ないし,
入力や結果のコピペが簡単だし,
JavaScript の Math オブジェクトの関数がそのまま使えるし,
そもそも JavaScript が使えるのでループや function 組んで複雑な計算できるし.

あと個人的に欲しかった K(キロ) m(ミリ) Gi(ギビ=1024^3) 等の接頭辞を受け付けるようにしたり
printf() を実装して,例えばループで a[0] ~ a[127] の 128行の文字列を得られるようにしたりとか
仕事上よく使う機能を盛り込んで,「ぼくがかんがえたさいきょうのでんたく」になったヽ(´ー`)ノ

2015年9月21日月曜日

4台中 4台

の車がオープン 2シーターwww
という変態の集まりで雁ヶ原に行ってきた.

今回のお目当てその 1.9氏のおろして 1ヶ月のぴっかぴかの S660.市販車の実車を間近で見るのは初めてだけど,実車は写真よりかっこいい.これでもう少し軽ければ文句無しなんだけどなぁ.

エリと違ってw 流石に幌の作りもしっかりしていて,雨漏り対策も万全そうだった.
今回の目的その 2.¥2,440/本のタイヤ TR968 の性能はいかに? ということで,試してきた.

実は一般道でもアクセルをラフに踏むとスキール音が鳴るので,嫌な予感はしていたのだけど,びっくりするくらい全く食わないwww 10年モノのカッチカチの溝なし RE050 (エリ買った時のタイヤ) よりも食わない感じで,大カウンター大会でまともに走れん.きちんとドリフトコントロールができる人なら楽しめるのかもしれんけど,自分には制御しきれなかった(;´д⊂)

というわけでヘロヘロ動画.最近ガム型カメラ使ってなかったのでフロントフェンダーに貼り付けてみた.

1日走り終わったあとのタイヤ.ブロック飛びなんかはないけど,内側は 2/5くらい減った.食わないくせに減りは早いということで,全くいいとこ無し.

NS-2 のグリップは自分には絶妙に合ってただけに,TR968 のウンコタイヤっぷりには大いに失望した orz

2015年9月13日日曜日

ソロツー,ついでに笠取山分屯基地+ダム

今年も笠取山分屯基地の開放イベントに行ってきた.
と言っても展示物は毎年あまり変わらないので,青山高原までのソロツーのついでみたいなもんだけど.

今年の目玉 AH-1S.飛来してくるところが見れるのかと思ったら,すでに地上に駐機していた.残念.

ペラペラw


機関砲の動作デモをやっていた.
この後帰投するときに飛行展示やるみたいだったけど,目新しい展示は軍用ワンコの訓練デモやってたくらいでそれ以外は目新しい物がなく間が持たなかったので,早々に退散してソロツー再開.
以前から目をつけていた比奈知ダムに行ってみた.


この比奈知ダム,「地域に開かれたダム」を目指しているようで,ダム下にちょっとした公園があり (家族連れも何故か多かった),珍しく下側からダムに接近できる.