HashMapの順序

小一時間はまったのでメモ。

最近Androidの勉強の為にJavaを少し始めました。

SQLITE DBに

select id from hoge order by id;

のクエリをかけて、帰り値をHashMapに格納しても順序が保たれないという現象に遭遇。

order by が効いていないのか?と思ってadbシェル起動してクエリかけるときちんと整列している…

何故か小一時間ばかりハマった結果、HashMapのマニュアル見ると

このクラスはマップの順序を保証しません。 特に、その順序を常に一定に保つことを保証しません。

ですって。マニュアルはちゃんと読もう・・・

GoogleMap API3 地図が表示されない!

ハマってしまったのでメモ…

下記のサンプル(公式サイトから)はもちろん表示できる。

<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=set_to_true_or_false"></script>
<script type="text/javascript">
  function initialize() {
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }

</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

が、DOCTYPEを下記のように追加すると表示されなくなる!

<!DOCTYPE html Public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=set_to_true_or_false"></script>
<script type="text/javascript">
  function initialize() {
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }

</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

GoogleMapAPI3には対応しないdoctype宣言があるのかと調べてみたのだが、
そんな記載は無かった。

何故かと悩んでいたら…
Doctype宣言の仕方で、divのstyleに書かれているheight : **%が反映しないのね…
で、高さ0pxの表示エリアになってしまっていたと…

height: 200pxとか適当な値にしたら表示できました。

緯度経度から2点間の距離を計算する関数

function getDistance($from, $to)
{
	$from[0] = deg2rad($from[0]);	//緯度
	$from[1] = deg2rad($from[1]);	//経度
	$to[0] = deg2rad($to[0]);		//緯度
	$to[1] = deg2rad($to[1]);		//経度
	$R = 6370;	//地球の半径

	$a = $R * cos($from[0]) * cos($from[1]);
	$b = $R * cos($from[0]) * sin($from[1]);
	$c = $R * sin($from[0]);
	$d = $R * cos($to[0]) * cos($to[1]);
	$e = $R * cos($to[0]) * sin($to[1]);
	$f = $R * sin($to[0]);
	$g = $a*$d + $b*$e + $c*$f;
	$h = acos($g/pow($R, 2));

	return round($R*$h, 2);
}

Darwin Streaming Server 6.0.3

CentOS 5.5にDarwin Streaming Server 6.0.3をインストールした時のメモ

adduser qtss
cd /usr/local/src/
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/dss-6.0.3.patch
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/dss-hh-20080728-1.patch
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/Install
patch -p0 < dss-6.0.3.patch
patch -p0 < dss-hh-20080728-1.patch
mv Install ./DarwinStreamingSrvr6.0.3-Source/
cd DarwinStreamingSrvr6.0.3-Source
chmod +x Install
./Buildit
./Install

ポートは1220,7070,554,8000,8001を解放して、

http://hogehoge:1220/で管理画面(?)にアクセス。

MTK_Gmap

携帯向けのGoogleMapをお手軽に呼べるphpライブラリを作ってみました。もちろん動作の保証はしません。
単体でも動く(と思う)のでダウンロードできるよう置いときます。
MTK_Mobileと併用すれば、携帯ブラウザ画面に合わせてフルサイズの地図を表示する事もできます。

機種情報::http://blog.matsukubo.jp/mobileCheck/data.php
ドキュメント::http://svn.matsukubo.jp/samples/MTK/documents/
サンプル::http://svn.matsukubo.jp/samples/MTK/tests/
リポジトリ::http://112.78.197.155/repos/MTK/trunk
ドキュメントとサンプルが含まれてます。

Google Analytics Mobile

携帯向けのサイトにGoogleAnalyticsを設置する際、ちょっと躓いたのでメモを残す。
トラッキングコードはphpで埋め込みます。

まずはプロファイルの追加。
これはいつも通りの作業なので簡単。

そのあと、作成されたプロファイルを「編集」します。

つぎは「ステータスの確認」へ・・・

トラッキングコードの追加手順の箇所で詳細タブを選択。
携帯電話向けサイトをチェック、phpをチェックすると右側にトラッキングコードが二つ表示される。
このトラッキングコードを、ホームページの指定された位置に貼り付けて、ga.phpをダウンロードしてドキュメントルートに設置。

これで完成!

・・・が、全然データを受信してくれない。

そこで下記のようにトラッキングコードを一つにまとめて改造したところ、
しばらくして正常にデータが受信できるようになりました。

<?php
	function googleAnalyticsGetImageUrl() {
		//Global変数をやめて関数内で$GA_ACCOUNT, $GA_PIXELを定義
		$GA_ACCOUNT = "**********";
		$GA_PIXEL = "/ga.php";
		$url = "";
		$url .= $GA_PIXEL . "?";
		$url .= "utmac=" . $GA_ACCOUNT;
		$url .= "&utmn=" . rand(0, 0x7fffffff);
		$referer = $_SERVER["HTTP_REFERER"];
		$query = $_SERVER["QUERY_STRING"];
		$path = $_SERVER["REQUEST_URI"];
		if (empty($referer)) {
			$referer = "-";
		}
		$url .= "&utmr=" . urlencode($referer);
		if (!empty($path)) {
			$url .= "&utmp=" . urlencode($path);
		}
		$url .= "&guid=ON";

		//php.iniのarg_separator.input/arg_separator.outputが
		//「&amp;」ではなく「&」なので、&amp;への変換をしないようにした。
//		return str_replace("&", "&amp;", $url);
		return $url;
	}

	$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
	echo '<img src="' . $googleAnalyticsImageUrl . '" />';
?>
</body>

Google Map Editor

GoogleMapAPI3を使ってMAPエディタを作ってます。

デモ[お遍路マップ(作成中)]
※ルート作成はこちらのHPを参考にさせていただきました。

現在ある機能は
・線の描画・編集(線種変更・ポイントの追加・削除)
・円の描画・編集(線種・塗りの変更・削除)
・マーカーの追加・編集(マーカー種類・タイトル変更・削除)
・グループ機能(レイヤーみたいなもん?)
・Cookie保存・url保存・htmlファイル出力
・undo(「戻る」)機能

【バグとか】
・FireFox3.6.9でしか動作確認してません!
・データ量が多い時に「戻る」や線のポイント変更を行った時の動作が重い・・・

phpで配列を掃除する関数

phpである配列の中から、空文字(空配列)だけを再帰的に取り除く処理をしたかったので作ってみた。

array_cleaning(&$arg, $delete=array());
第一引数にクリーニングしたい対象の配列を参照渡しします。
第二配列に指定した値が含まれていれば、対象の配列からその部分をごっそり取り除きます。デフォルトで、空の配列、null、空白を取り除きます。

function array_cleaning(&$arg, $delete=array()){
	if ($delete==null){
		$delete = array(array(), null, "");
	}

	foreach ($arg as $key => &$val){
		foreach ($delete as $target){
			if ($val===$target){
				unset($arg[$key]);
			}
			continue;
		}

		if (is_array($val)) array_cleaning($val, $delete);
	}
}

・・・これで大丈夫かな?

Caparison Angelus

CaparisonのAngelusをオークションに出すことにした。
TERIAの前進のバンド、Idea of Layで活動する時に買ったギターだ。

実質使ったていたのは1年ぐらい?
その後はずっと放置していたかわいそうなギター。
次のオーナーにかわいがってもらえたら幸せだろうとの思いで出品。

もともとはピックアップ設定にロータリースイッチがついていたが、
不要だと判断してダイレクトスイッチに変更してある。

Angelus FSWもボディだけの抜け殻状態で持ってるから、これも復活させてみようかなー。

Error: NotFound

robot.txtかrobots.txtか?

robot.txtを置いてインデックスさせないよう記述しているのに、某検索エンジンでキャッシュされていた。

ん?robot.txt
それともrobots.txtが正しいの?

正解は・・・
http://www.robotstxt.org/
robots.txtが正しいらしい。

RFCでもない紳士協定的なもんだけど、まっとうな検索エンジンのbotには効果的なので間違えないように覚えておきたい。

月額263円からのレンタルサーバー!ロリポップ!