前回の続き。
ブログのページに写真地図を埋め込んでみる。ブラウザのウィンドウサイズにあった地図表示となるような仕組み(JavaScript)も入れてみたり。そのほかいろんな改善でよりおもしろくなりそう。参考にしたのはこんなところ。
Googleで写真で地図で、というとPanoramioが思い浮かぶものの、Flickr以外に写真データをupする気にならず、この組み合わせのほうが気軽で良い感じ。他方、Flickrにも地図表示があるものの、日本地図の使い勝手が悲しいほどに悪く、なんというかその…。
iPhoneカメラ・Flickr・Googleマップの組み合わせによる「写真地図」をお試し中。
撮影・アップした写真が勝手に地図に表示されるのがおもしろく、ついつい見てしまう。
技術に目新しさはなくとも、組み合わせで化ける一例では、などと思ったりもする。
やり方はFlickrのKMLリンクのURLをGoogleマップの検索キーワードに指定するだけ。
この地図ページ、とにかくURLがながいので、
以下Apache設定で http://shimazu.org/photomap といった感じに短縮化して使っている。
<VirtualHost *>
ServerName www.shimazu.org
ServerAlias shimazu.org
(snip)
Redirect permanent /photomap http://maps.google.co.jp/maps?...
</VirtualHost>
なんと一年ぶりの書き込み。思いつくままに何点か。
サーバ移行しました。willnetというところ。
聞きなれない名前ですが、debianでvpsで国内で、となるとほとんど候補が絞られる感じ。
いまのところいたって順調。
ふと気付くとガジェットコレクタになってました。
身の回りには、iPhone(3G)があり、Android(H-03A)があり、Pocket WiFiがあり、iPad(WiFi 32GB)があり。
いまこの文章もiPadで書いてますが、さくさく入力できて、意外に良い感じ。
最近クラシックホテルにハマり中。
富士屋ホテル、奈良ホテル、金谷ホテル、万平ホテルなど各所を車で訪れては
お茶とか昼食とかで満足し、一泊もせずかえってくる日々。
ゴールデンウィークということで多少余裕ができたこともあり、本ブログに関して、細々と微調整してみました。
さきほど復旧させましたが、この blog のサーバ(blog.shimazu.org)に一時(丸一日くらい?)接続できない状態が続いていたようです。
このサーバは Quantact.com という海外のサーバ運用会社のサービスを利用していて、安い反面、たまにこういうのがあり、少し不便な気もしつつ、安定性強化を理由に値上げされても困るので、難しいところです。
これとは別に自宅サーバもあるので、ツールで自動定期確認みたいなこともできそうですが、止まってそんなに困るわけでもないので、もう少し様子を見たいと思います。
工学系を勉強中の友人から教えてもらった、土木学会による「土木技術者の倫理規定」が実に興味深い。
技術水準の向上により人はいままでにない可能性を有するに至ったが、それは人を幸福にさせる一方で、破滅的な事態を招く要因にもなりうる。時代は、高い技術力と同レベルの倫理観を人々に求めるようになってきている。
これはウェブも同じ。技術の新規性や目先の利益にとらわれない、本当の意味で人に還元できる方法を常に考えていかなくてはならない。
- 「美しい国土」、「安全にして安心できる生活」、「豊かな社会」をつくり、改善し、維持するためにその技術を活用し、品位と名誉を重んじ、知徳をもって社会に貢献する。
- 自然を尊重し、現在および将来の人々の安全と福祉、健康に対する責任を最優先し、人類の持続的発展を目指して、自然および地球環境の保全と活用を図る。
- 固有の文化に根ざした伝統技術を尊重し、先端技術の開発研究に努め、国際交流を進展させ、相互の文化を深く理解し、人類の福利高揚と安全を図る。
- 自己の属する組織にとらわれることなく、専門的知識、技術、経験を踏まえ、総合的見地から土木事業を遂行する。
- 専門的知識と経験の蓄積に基づき、自己の信念と良心にしたがって報告などの発表、意見の開陳を行う。
- 長期性、大規模性、不可逆性を有する土木事業を遂行するため、地球の持続的発展や人々の安全、福祉、健康に関する情報は公開する。
- 公衆、土木事業の依頼者および自身に対して公平、不偏な態度を保ち、誠実に業務を行う。
- 技術的業務に関して雇用者、もしくは依頼者の誠実な代理人、あるいは受託者として行動する。
- 人種、宗教、性、年齢に拘わらず、あらゆる人々を公平に扱う。
- 法律、条例、規則、契約等に従って業務を行い、不当な対価を直接または間接に、与え、求め、または受け取らない。
- 土木施設・構造物の機能、形態、および構造特性を理解し、その計画、設計、建設、維持、あるいは廃棄にあたって、先端技術のみならず伝統技術の活用を図り、生態系の維持および美の構成、ならびに歴史的遺産の保存に留意する。
- 自己の専門的能力の向上を図り、学理・工法の研究に励み、進んでその結果を学会等に公表し、技術の発展に貢献する。
- 自己の人格、知識、および経験を活用して人材の育成に努め、それらの人々の専門的能力を向上させるための支援を行う。
- 自己の業務についてその意義と役割を積極的に説明し、それへの批判に誠実に対応する。さらに必要に応じて、自己および他者の業務を適切に評価し、積極的に見解を表明する。
- 本会の定める倫理規定に従って行動し、土木技術者の社会的評価の向上に不断の努力を重ねる。とくに土木学会会員は、率先してこの規定を遵守する。
(土木学会「土木技術者の倫理規定」より引用)
Amazon でたまにやらかしてしまうのが、同じ本の重複購入。特に技術書は表紙も書名も似たようなものばかりで、読んだかどうか・買ったかどうか、深夜あまり良く考えずにボタンを押し後で後悔することになる。
読んでも開いてもいない本を持ってても意味ないので、以下2冊(種類)をどなたかにお譲りしたいと思ってます。ご希望の方はメールなどでお知らせください。

※どちらも洋書ですが、出てくる単語は日本語圏でもよく使うものばかりで割と読めると思います。
JavaScript の圧縮・難読化ツールの定番 /packer/ で pack したコードを decode するツールを作成。
packer decoder
http://blog.shimazu.org/utils/packer_decoder.html
たとえば
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1.2.5.9(o,\'l\',7(){1.2.5.9(\'i\',\'g\',7(){0 f=1.2.5;0 6=1.2.c;0 d=1.e;0 a=6.8(\'h\');0 b=6.8(\'j\');k("0 3=m"+a.3.n(4));b.3=3})});',25,25,'var|YAHOO|util|value||Event|D|function|get|addListener|||Dom|L|lang|E|click|in|run|out|eval|load|String|slice|window'.split('|'),0,{}))
というコードをツールにかけると
YAHOO.util.Event.addListener(window,'load',function(){YAHOO.util.Event.addListener('run','click',function(){var E=YAHOO.util.Event;var D=YAHOO.util.Dom;var L=YAHOO.lang;var a=D.get('in');var b=D.get('out');eval("var value=String"+a.value.slice(4));b.value=value})});
といったコードが得られる。
#これを Js Decoder にかければインデントもしてくれる。
つくりは簡単だけど、自分的にとても役立っている。
2008/01/24追記
decode前のサンプルコードにミスがあり、decoderで正しく処理できてなかったので、修正。
2010/09/18追記
サーバ移行の影響か、またサンプルコードがおかしくなってたので修正。
本家 にも decode 機能がついた模様。
Firefox 2 や IE 7 で使えるようになったブラウザに組み込めるサイト検索の仕組み「OpenSearch」をこのサイトも対応したのでメモしておく。

以下参考にさせていただいた。
まず、検索URLなどを定義するXMLを作成する。
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>blog.shimazu.org</ShortName>
<Description>blog.shimazu.org</Description>
<InputEncoding>utf-8</InputEncoding>
<Image width="16" height="16">http://blog.shimazu.org/favicon.ico</Image>
<Url type="text/html" method="GET" template="http://blog.shimazu.org/index.php?s={searchTerms}" />
</OpenSearchDescription>
Imageタグの箇所にはBase64形式のデータも格納可能で、[JavaScript] dataスキームURI生成(画像データのBase64変換) にて、「画像URL」の箇所に http://blog.shimazu.org/favicon.ico などと入力すると、
var data = 'data:image/x-icon;base64,'+
'R0lGODlhEAAQALMAAP///+Xl5UBAQL+/v6ampllZWU1NTbOzs2ZmZvLy8oCAgMzMzJmZmebm5gAA'+
'AAAAACH5BAAAAAAALAAAAAAQABAAAARGMMhJqwQ4a323xx0mDB8QAmN5jgSzbGthFALBBZqAYIRw'+
'5wdMIgXCZYgoUjFnAwwEjcyqdijspEYRwSBQJH4lWDZctJglEQA7';
といった感じでBase64変換される。これを使うと以下のようになる。
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>blog.shimazu.org</ShortName>
<Description>blog.shimazu.org</Description>
<InputEncoding>utf-8</InputEncoding>
<Url type="text/html" method="GET" template="http://blog.shimazu.org/index.php?s={searchTerms}" />
<Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,R0lGODlhEAAQALMAAP///+Xl5UBAQL+/v6ampllZWU1NTbOzs2ZmZvLy8oCAgMzMzJmZmebm5gAAAAAAACH5BAAAAAAALAAAAAAQABAAAARGMMhJqwQ4a323xx0mDB8QAmN5jgSzbGthFALBBZqAYIRw5wdMIgXCZYgoUjFnAwwEjcyqdijspEYRwSBQJH4lWDZctJglEQA7</Image>
</OpenSearchDescription>
今回は単に画像URLの指定でXMLを作成し、 http://blog.shimazu.org/utils/opensearch.xml に置いた。
headタグの中に以下linkタグを追加する。
<link rel="search" type="application/opensearchdescription+xml" title="blog.shimazu.org" href="http://blog.shimazu.org/utils/opensearch.xml">
すると、以下のような登録メニューを出せるようになる。

「Meta」サイトバーに「Add to Search Bar」リンクを追加するため、以下スクリプトを追加した。
function installOpenSearch(engineURL) {
if (!engineURL) return true;
window.external.AddSearchProvider(engineURL);
}
(function(){
var E = YAHOO.util.Event;
var D = YAHOO.util.Dom;
E.addListener(this, 'load', function(){
if (typeof window.external == "object" && typeof window.external.AddSearchProvider == "function") {
var ul = D.getNextSibling('sidebarMeta');
if(ul) ul.innerHTML += '<li><a href="javascript:void(0)" onclick="return installOpenSearch(\'http://blog.shimazu.org/utils/opensearch.xml\');">Add to Search Bar</a></li>';
}
});
})();
上記に記載の
typeof window.external == "object" && typeof window.external.AddSearchProvider == "function"
という条件式は、「OpenSearch」対応ブラウザか否かを判別するが、Mozilla Japan – アドオン – Firefox – 検索エンジン に記載のスクリプトを参考にさせていただいた。
おそらくサーバ運用における基本のキなんだろうけど、シリアルコンソール接続をはじめて設定してみて、思いのほかてこずったので、メモしておく(DebianマシンにWindows PCからアクセスする想定)。
/etc/inittab の以下を修正。
■修正前 #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 ■修正後 T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100 #コメントアウトを削除の上、通信速度を変更。
反映のため、以下コマンドを実行。
# init q
/etc/securetty の以下を修正。
■修正前 #ttyS0 ■修正後 ttyS0 #コメントアウトを削除
/boot/grub/menu.lst の以下を修正。
■追加 serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console ■kernel部分に「console=ttyS0,115200n8」を追加 title Debian GNU/Linux, kernel 2.6.18-5-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/hda1 ro console=tty0 console=ttyS0,115200n8 initrd /boot/initrd.img-2.6.18-5-686 savedefault title Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode) root (hd0,0) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/hda1 ro single console=tty0 console=ttyS0,115200n8 initrd /boot/initrd.img-2.6.18-5-686 savedefault
シリアルコンソール接続の範疇ではないが、今回、常用している putty ではなく UTF-8 TeraTerm Pro with TTSSH2 を使用した。カーソルが点滅する設定を解除する方法を念のためメモ。
■修正前 NonblinkingCursor=off ■修正後 NonblinkingCursor=on
また、シリアルコンソール上で起動ログを見ていたところ、ipv6 モジュールが起動しようとして、エラーになっていたので(Etchではデフォルトで機能するらしい)、以下手順で無効化しておく。
/etc/modprobe.d/aliases の以下を修正。
■修正前 alias net-pf-10 ipv6 ■修正後 alias net-pf-10 off
以下に参考にさせていただいたリソースを列挙しておく。