Category Archives: 開発

Spcium_icon_48

Spcium Version 1.2.6.704

Spciumの新しいバージョンにをリリースいたしました。以下の機能を追加いたしました。

  • 複数解像度の対応
  • 動作の安定性向上

まずは以下のSpciumのWinodws用インストーラーをダウンロードし、接続したいWindowsマシンにインストールしてください。Windowsのバージョンは7以降で動作いたします。

SpciumInstall_1.2.6.704.zip

Windows版のインストール時には、デバイスソフトウェアのインストール警告メッセージが2回表示されますが、それぞれ「インストール」を選択してください。

上記の手順ののちに、Android版のSpciumを起動してください。

Android版のSpciumは以下のURLからダウンロードできます。

Android版Spicum Google Playページ

ファイルパスをNSStringからNSURLへ変換する際のありがちな修正ミス

最初に正解を書くとNSStringのファイルパスからNSURLを正しく生成するのは以下のコードです。

Continue reading

VHDネイティブブートによるテスト環境の構築

とりあえずメモ書き。

1.仮想ディスクの作成。
1.VHD作成
diskpart起動後
create vdisk file=<“file name.vhd”> maximun=<N(MB)> [type={fixed|expandable}]
60GBの容量可変VHDを作る場合には。
create vdisk file=hogehoge.vhd maximun=61440 type=expandable

もしくはdiskmgmt.mscを起動して操作VHDの作成から作る。

2.差分VHDの作成
create vdisk fike=<”file name.vhd”> parent=<”parent vdisk file.vhd”>
parentパラメータで指定する親VHDは相対パスが使えない。絶対パスで指定する必要がある。このため親VHDの位置は移動できないので注意。
また、親VHDには必ず読み取り属性をつけておくこと。


2.OSインストールの準備
1.imagexの準備
WAIKに含まれるimagexが必要になるが、googleで検索すると落ちてるのでWindows7用のを拾ってくる。

2.仮想ディスクのマウント
diskmgmt.mscを起動もしくはdiskpartを起動して仮想ディスクをマウントする。

3.仮想ディスクにOSイメージを展開する。
仮想ディスクをマウントしたドライブをF:
OSのインストールディスクの入ったドライブがL:
とすると。
imagex /apply L:\sources\install.wim <N> F:
でOSのインストールイメージが仮想ディスクに展開される。
<N>は展開するOSによって異なる。
Windows 7×64 Ultimate = 4
Windows 7×86 Ultimate = 5

Windows 8×64 Enterprise =1
Windows 8×86 Enterprise =1
数字はimagex /info L:\sources\install.wimでIndexの数字を調べるか、通常のインストール時に並んでる順番になるようなので起動して調べる。

3.VHDのブートマネージャーへの登録。
1.ブートマネージャーへの登録
面倒くさいのでカレントのコピーを作成する。
bcdedit /copy {current} /d “VHD Boot1”
すると
“エントリ {8369a389-19cb-11e2-95b1-e28627bcdf8d}は正常に作成されました。”と固有の値が表示されるので、このIDをコピーしておく。

次に、VHDの登録をする。
bcdedit /set {GUID} device VHD=[C:]\foo\bar.vhd
bcdedit /set {GUID} osdevice VHD=[C:]\foo\bar.vhd

2つのコマンドが正常に終了したらbcdedit [Enter]でエントリが追加されてるか確認する。

4.運用方法について。
sysrepしてからイメージを他のPCに持っていく方法もあるが、検証目的と言うことであれば、インストール直後の環境が必要になる場合がほとんどなので、下記のようにVHDを管理する。
親:OSのインストールイメージを展開したVHD
子:セットアップ完了直後のVHD
孫:それ以降。
2-3.で作成したOSインストールイメージが入ったVHDを仮にWin000.VHDとする、
create vdisk fike=Win010.vhd parent=Win000.VHD
で、親Win000.VHDの差分としてWin010.VHDを作成する。
Win010.VHDを3-1,2.の方法でブートマネージャに登録し、通常通りセットアップを行い、インストール直後の状態までセットアップを行う。
この状態で、孫VHDを作成する、
create vdisk fike=Win011.vhd parent=Win010.VHD
で、Win010.VHDの差分VHDを作成する。
Win010.VHDをブートマネージャに登録したとき同じように、Win011.VHDもブートマネージャに登録する。
bcdeditで登録したいセクションのGUIDを確認し。
bcdedit /set {GUID} device VHD=[C:]\foo\bar.vhd
bcdedit /set {GUID} osdevice VHD=[C:]\foo\bar.vhd
で上書き登録ができる。
descriptionを変更したい場合には
bcdedit /set {GUID} description “disply name”
で変更できる。

Win011.VHDにWindowsUpdateやドライバ類のインストールが終わった状態でバックアップを取っておけば、以降はWin011.VHDのみ差し替えれば初期環境に戻る。
また他の試験を行いたい場合にはWin012とでもしてブートマネージャに登録を行えば他への影響が避けられる。

5.問題点
1.休止状態が使えない。
2.VHDを置いておくドライブに起動ディスク以外を指定するとなぜか起動しない。
3.VHDの世代管理とファイル名管理が面倒くさい。
4.bcdedtを使ってブートマネージャに登録するのが結構手間。

Polylineを良い感じに間引きする

八王子防犯マップ for Android にて、市境を表示する機能を追加したところ、市境のpolylineデータが8000ポイント以上になり、アプリがもっさり動作になってしまいました。

そのため、良い感じに間引いてくれるアルゴリズムを探したところ、douglas-peuckerアルゴリズムを利用するのが一般的のようです。
手頃な実装がないかと探すと、C#のサンプルをCodeProject内に発見。


A C# Implementation of Douglas-Peucker Line Approximation Algorithm


上記を参考に、ちょっとしたフィルタプログラムを書いて地点数を1/10程度にまで間引いたところ、描画速度は劇的に改善しました。表示品質も、拡大するとガクガクするけれど、目安としては十分に思える物に見えます。

device-2012-11-27-131122

地図アプリなどで、いろいろと応用できそうです。

というわけで、上記の内容が果たしてうまくいったかは、八王子防犯マップ for Android をインストールして試してみてください。

en_app_rgb_wo_60