新しいページへ▼ | 古いページへ▼

Windows7のGPSセンサー(Location API)とGoogle Mapsを利用して今いる居場所を割り当てる(未検証)

Ubuntu 9.10とWindows 7が登場してOSいじくりが満足にできてうれしい毎日ですがみなさんいかがでしょうか。自分もWindows7 Pro UPG版を購入して、Ubuntuもマウスが効かないバグにはまりながらもようやくKarmicにアップデートいたしました。特にWindows 7については追加された機能が豊富すぎて訳分からん状態なのです。あとで自分なりにまとめたいですねえ。

Windows 7が提供する新機能の一つに「Location API」というものがあります。Windows ガジェットの「天気」にも、Location APIが使われている形跡が見られ、位置を自動的に検出するオプションがあるようです。GPSを持っていれば、移動中に自分が今いる場所の天気を表示できるというわけです。

位置を自動的に検出するオプション
こんなやつ。GPSは持ってないので恩恵は受けられないのですが…

このLocation APIをJavaScript(JScript)を利用して、GPSから緯度経度を抽出し、最終的にGoogle Mapsを呼び出して自分のいる場所を割り当てるサンプルを作ってみました。ただし、自分はGPSを持っていないのでどうなるかは分かりませんが、抽出された緯度、経度がNumber型であることを仮定した上で作成してしています。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

function loc_get(name0, name1)
{
	var loc0 = document.getElementById(name0);
	var loc1 = document.getElementById(name1);
	var list = [];

	list[list.length] = {};
	list[list.length-1].name = "緯度";
	try { list[list.length-1].value = loc0.LatLongReport.Latitude; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "経度";
	try { list[list.length-1].value = loc0.LatLongReport.Longitude; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "住所1";
	try { list[list.length-1].value = loc1.CivicAddressReport.AddressLine1;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }
	
	list[list.length] = {};
	list[list.length-1].name = "住所2";
	try { list[list.length-1].value = loc1.CivicAddressReport.AddressLine2;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "国";
	try { list[list.length-1].value = loc1.CivicAddressReport.CountryRegion;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "都道府県";
	try { list[list.length-1].value = loc1.CivicAddressReport.StateProvince;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "市町村";
	try { list[list.length-1].value = loc1.CivicAddressReport.City;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	list[list.length] = {};
	list[list.length-1].name = "郵便番号";
	try { list[list.length-1].value = loc1.CivicAddressReport.PostalCode;
	if(list[list.length-1].value == "") list[list.length-1].value = "測定できません"; }
	catch(e) { list[list.length-1].value = "測定できません"; }

	return list;
}

function init(name0, name1, name2, name3)
{
	if(!('\v'=='v')) {
		alert("IEじゃないと動きません。");
		return;
	}

	var loc0 = document.getElementById(name0);

	if(typeof(loc0.Status)=="undefined") {
		alert("Windows 7以降じゃないと動きません。");
		return;
	}

	switch(loc0.Status) {
		case 1:	
			alert("エラーが発生しました。");
			return;
		case 2:
			alert("アクセスは拒否されました。");
			return;
		case 3:
			alert("しばらく待ってから、もう一度押してください。");
			return;
		case 0:
			if(!confirm("サポートしてないようですが、ダメもとで測定してみますか?"))
			return;
		case 4:
			break;
		default:
			alert("この雰囲気…もしや新しいAPIかっ!?");
			return;
	}

	var list = loc_get(name0, name1);
	var str = "";
	var Lat;
	var Long;
	
	// 取得したものをHTMLに戻す
	for (i = 0, j = list.length; i < j; i++) {
		str += list[i].name + ": " + list[i].value + "<br>";
		if (list[i].name == "緯度") Lat = list[i].value;
		if (list[i].name == "経度") Long = list[i].value;
	}

	try { document.getElementById(name2).innerHTML = str; }
	catch(e) { alert(str.replace(/<br>/g,"\n")); }

	if(typeof(Lat) == "number" && typeof(Long) == "number") {
		document.getElementById(name3).src =
		"http://maps.google.com/maps?q=" + Lat + "," + Long +
		"&z=14&iwloc=near&output=embed";
		document.getElementById(name3).style.display = "";
	}

	return true;
}

</script>
</head>
<body>
<form>
<input type="button" onclick="init('loc0','loc1','div0','iframe0')" value="計測">
</form>
<!-- 緯度経度を調べるためのオブジェクト -->
<object id="loc0" width="0" height="0"
 classid="clsid:9DCC3CC8-8609-4863-BAD4-03601F4C65E8"></object>
<!-- 都道府県市町村を調べるためのオブジェクト -->
<object id="loc1" width="0" heihgt="0"
 classid="clsid:2A11F42C-3E81-4AD4-9CBE-45579D89671A"></object>

<!-- 表示に関わるもの -->
<div id="div0"></div>
<iframe id="iframe0" width="640" height="480" src="about:blank" style="display:none"></iframe>
</body>
</html>

動作条件として、Windows 7以降であること(多分)、要ActiveXなのでIEを使って動作させていること、そして、GPSを持っていること(自分は持ってないので検証できないという罠w)。GPSが無くてもWindows 7以降であれば強制的に動作させることも可能です。ただ、GPSがないと「国」だけしか分からないようです。

.html(できれば.htaで)を保存して、IEを立ち上げ、計測ボタンを押すとAPIが動作し、Google Mapsの矢印が表示されるという流れになっています。loc0.Statusが4になればGPSがあっても無くても準備はできたと判断できます。

緯度経度がどのようにWindowsから返されるのかが分からないです。多分Numberで返ってくるだろうと思いますが、0以上のNumberなら動く可能性が高いです。動作検証は自己責任でお願いします…

成功イメージ
うまくいけばこんな感じで動いてくれると思います

(2009.11.10)Sensor APIじゃなくてLocation APIの間違いだったので書き直し。詳しくはここを参照。
http://msdn.microsoft.com/en-us/library/dd464636(VS.85).aspx

  

Microsoft Security Essentials(MSE) 入れてみた

セキュ板 MSSE 簡易まとめ
http://www21.atwiki.jp/20a88e3f44cab94a0416/pages/15.html

Microsoft Security Essentials 1.0 インストール ウィザードへようこそ

Microsoft Windows の検証

ウイルスとスパイウェアの定義の状態 - 更新しています

一応Windows Live OneCareの後継らしい。Avira Antivir(無償版)を使ってたのですが、サクっと消去してしまいました。このソフトを使用するかどうかは、後で普及具合を見て最終的に判断することにします。

しかし…Aviraは日本語版Antivirを出すタイミング悪すぎ!そして遅すぎ!チャンスを逃したというか。日本語化されているというだけで安心できるというユーザが多いですし、「ほー、MSが出している。Avira?何それ?」と、知名度もMS有利。検出精度や速度が余程酷くない限り、ユーザはMS謹製ソフトに流れるでしょうね。

ちなみに略称はJSECTEAMの記事を見てるとMSEでいいようです。

Microsoft Answers
http://answers.microsoft.com/ja-jp/protect/default.aspx

  

Windows7 Pro予約した



ついカッとなってWindows7 Professional版を予約した。\13180也。通常の値段だと27Kするらしい。



  • XPならクリーンインストールという形でアップグレード可能
  • Windows2000でもアップグレード可能?
    If you have Windows XP or Windows 2000, you can purchase Windows 7 Upgrade versions

  • 32bit/64bit版両方ついてくると思っていいらしい
  • メディアは当然DVD
  • WindowsXP ModeはIntel-VTかAMD-Vがないとダメ。Crystal CPUID等で調べることができる


「Windows ありがとう」 キャンペーン NTT-X Store
http://nttxstore.jp/_RH_1153

  

Windows7のハードウェア資源利用


Windows 7: 製品評価

Windows 7 RC ではマルチコア & Hyper Threading で性能が上がる
http://kait-field.spaces.live.com/blog/cns!B90E9B4A3C4DFD66!1002.entry

7は、HTを最後の切り札として使用するようになったそうだ。+100%性能が上がる物理コアをフルに使用し、最大+30%性能が上がらない(実際は+10%位)論理コアを使用しないようにしたということか。個人的にはCore 2 Quadや、Atom 3xx、Pentium Dといったコア間通信のFSB帯域不足によるスイッチング低速化にも気を配ってほしい。また、物理コアを使用するとCPUの消費電力も増加すると予想できるので、従来のHTも平等に使用するモードを残しておいてほしい(処理はトロくなるけど)。それ以外にもCPUのグラフが見難くなるのでGNOMEシステムモニタのような多重グラフ表示もできるようにして欲しい。

Windows 7(Version 6.1)はVistaの細かな改良でかなり使いやすくなっていると思う。現代的ハードウェアの対応(CPUとHDDの仮想化対応、ホモジニアスマルチコアへの対応、UDF2.6)。High DPI(高解像度でも安心)の変更、画面描画方法の変更、アクセス制御方法の変更、IP周りの変更などなど。Windows7の特徴は省力化であろう。

でも別にXPでも生産性はそこそこ向上できるし、また、7の新機能を最大限活用する人がいるのかと問われると、そうそういないだろうと思う。ただし、自分がXPを使用している中では、既にどうしようもない部分がかなりある。

あとはドライバの対応だけが移行の最大のネックだが、これは実際に試してみて全然問題がなかった。Vistaのドライバ流用か、最悪仮想化で動かせばいいのである。発売されたら、多分乗り換えると思う。

よく考えたら、パソコンの速さはすでに単一の指標で見られなくなっている。単一の処理が速いか、もしくは全体の処理が速いか。自分は後者の方がいいけど。

  

Googleのウェブブラウザchrome個人的まとめ

Google Chrome

  • またどこかの業界の残業時間が増えるようだ…
  • Webkitがベースだから別にいいか…あれ、Konquerorさんが苦しそうに訴えている
  • Mozilla、S3のchromeで検索時にバッティングする。さっさと名称変更しろ
  • 速い。…ように見えるだけのようだ。無駄なアニメーションは無用
  • プロセス間で通信するコンパニオン的プロセスの挙動が怪しい。まあグーグルの事だから多分…
  • CPU資源の配分が公平ではなくなりそう。耐障害性に長けるとか言ってるけど…
  • Flashの挙動も怪しい。ニコ厨ざまあwああflvもか…要改善
  • 機能が貧弱
  • 特殊なページはchrome-resource:、chrome-internal:
  • 便利、でも危険
  • BETAが免罪符になる時代。来年になったら本気出す
  

今更ながらNetscape

最近使ってなかったNetscape Navigator 4.8に注目している。

このサイトは見てて崩れる。

Javascriptにありがちなwith({obj: 10})も使える。

ダウンロードはOldVersionなどで入手できる。セキュリティ上ヤバい部分があるらしいので気をつけること。

NN4.8のHTML動的書き込みのやり方

<div id="a" style="position: relative">ID:a</div>

のDIV要素(position:[absolute|relative]必須)に対して、以下のscriptを書く

var d = document["a"].document;
d.open(); // d.open("text/html");
d.write("aaaa");
d.close();

1行目 document["a"].documentは当然document.a.documentでも書けるし、
document.layers["a"].documentとでも書くことができる。

レイヤーのx, y座標などはdocument.aの直下に配置されていて、hoge.styleには置いてない。

clip : [object Rect]
document : 
window : [object Window]
id : a
name : a
left : 0
x : 0
top : 0
y : 0
pageX : 8
pageY : 8
hidden : false
layers : [object LayerArray]
siblingAbove : [object Layer]
siblingBelow : null
parentLayer : [object Window]
src : null
visibility : inherit
above : [object Layer]
below : null
zIndex : 0
bgColor : null

NN4をIE5相当にするNNLegacy.jsを作っていたが、めんどいのでやめた。その代わり、cssを少し直した。下の画像は改善後。

参考:Netscape Navigator 4.x CSSバグリスト
http://cssbug.at.infoseek.co.jp/detail/nn4x.html

  

IE7Proの検索フォーマット設定

IE7Pro - The Ultimate Add-On for Internet Explorer
http://www.ie7pro.com/

Google Japan

http://www.google.co.jp/search?hl=ja&q={KW_UTF8}&ie=UTF-8&oe=UTF-8&lr=lang_ja

Yahoo! Japan

http://search.yahoo.co.jp/search?p={KW_UTF8}&ei=UTF-8&eo=UTF-8

Live Search

http://search.live.com/results.aspx?q={KW_UTF8}

baidu.jp Search

http://www.baidu.jp/s?wd={KW_UTF8}&cl=3&tn=baidujp&ie=utf-8

ALC Translation

http://eow.alc.co.jp/{KW_UTF8}/UTF-8/

日本語サイトを使いたい場合コレで。最近は検索表示が速いbaidu.jpかmooterがオススメ。万人に使えるサイトはやっぱりYahoo! Japanの検索だろう。

  

IE7 Install (Internet Explorer 7 のインストール)

HTA - JavaScript+IEを使ったWindowsアプリケーション

厳密にはJScript Version 5.0以降。XMLHttpRequestが注目され始めたけど、
JavaScriptを使ったWindownアプリケーション作れねーかなと思ったらこれ。HTA。

HTML Applicationの略らしい。
IE5.0から出てきた。
IE5.0はtry-catchが使える。document.getElementByIdが無条件に使える。
つーことはDOM対応。XML取得はXMLHTTPじゃなくて、Microsoft.XMLDOMで可(試してないけど)。
CSSもある程度使えるが、border-cssが使えず、結構厳しめ。
filter系はDirectX使わないやつなら対応。

HTA:APPLICATIONタグ
http://www.geocities.jp/kiaswebsite/hta/hta_application.html

では、簡単なやつ。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<hta:application maximizeButton="no" scroll="no" innerBorder="no" 
contextMenu="no" border="dialog"></hta:application>
<style type="text/css"><!--
* { cursor: default; overflow: hidden; }
body { margin: 0px; padding: 0px; background: ThreeDFace; }
form { margin: 10px; }
input { width: 290px; height: 190px; font-size: 12pt; }
--></style>
<script type="text/javascript"><!--//<![CDATA[
window.resizeTo(320, 240);
//]]>--></script>
<title>HelloWorldApplication</title>
</head>
<body>
<form>
<input id="button1" type="button" value="Hello, World"
onclick="javascript:alert('Hello, World!')">
</form>
</body>
</html>

UTF-8形式、hogehoge.htaとファイル名にして、実行とな。
と、こんな感じに表示されたぞ。

ここでボタンを押すと、

IE5.0の時のHTAではinnerBorder="no"が適用されなかったり、
overflow: hiddenしないと、スクロールバーが出たりするんで注意。
あとHTAの部品はIEの文字サイズに依存するのでこれも注意。

いやはや、これは簡単。
windows.hなんか知らねーけど、JavaScriptなら使えるゼという粋な方には、オススメ。
デメリットは遅い、ソースが常にオープンだけど、手軽に作れるので、オススメ。

  

WLI-PCM-L11Gのドライバーで悩む

無線LANカードのBUFFALO(愛称:バッキャロー) WLI-PCM-L11Gセットを中古で買って
ワイヤレスで遊んでいるが、やたらとBWSVC.exeが動いていることに気づいた。

検索したら、同様の症状が現れている方がいらっしゃった。
CPUぱわあを相当喰う。

これはいかんざき。とばかり。