programmingの最近のブログ記事

昨日作った 自転車の軌跡 Google Earth 版ですが、すこしフォーマットを変えてみました。

諸般の事情で URL は http://tsuyuguchi.com/masaaki/gps/getdata.cgi?m=kmlall に変更しましたが、MIME type は application/vnd.google-earth.kml+xml を返すように修正し、ブラウザでアクセスすると即 Google Earth が起動するようにしてみました。最初に Google Map 版自転車の軌跡を作って、自分の通ったパスが地図の上で見られるようになったときは、そのわかりやすさにビックリしましたが、Google Earth で見ると勝手に軌跡の場所へグイグィ~と画面が移動していく様子を見ているとさらに感動です。

で、これを作っていて思ったことですが、KML の説明のページにチュートリアルがついているのが、自分の開発にとって大きなプラスだったように思います。これがもし、チュートリアルがなくてレファレンスだけだとしたら、仕事から帰ってきて寝るまでの短時間では絶対にできないです。チュートリアルをざっとみてコピペして、必要のあるところとか気になる箇所をレファレンスで確認してカスタマイズするという流れ、これが重要ですね。つまり、新しいものにチャレンジしようとして技術書を買うときは「なんとかレファレンス」のような網羅的な説明があるものを買うよりも、まずは CookBook や 「すぐできるなんとか」という類のものを買った方がいいのかなと、そんなことを思いました。

時間があったらスタートからゴールまでパスを再生する機能にも挑戦してみたいと思います。

自転車の軌跡を KML に対応させました。 KML は
http://tsuyuguchi.com/masaaki/gps/getdata.cgi?m=kmlall
から取得できます。

この KML を Google Earth に読み込むことで Google Earth でも、私の自転車の軌跡をごらんいただくことができるようになりました。Google Earth のメニューから「追加」→「ネットワークリンク」とたどって開いたダイアログの「リンク」に上記 URL を入力を入力することで KML を読み込むことができます。

参考: KML について

なんだかバッドノウハウのにおいがプンプンするエントリーです。

私のサイトを作るためのローカル開発環境は Windows XP に cygwin を入れたものを使っていますが、 perl は C:\perl にインストールした activeperl を使っています。ですので、perl スクリプトの shebang は #!/perl/bin/perl となります。一方、サーバでは #!/usr/bin/perl ですので、 perl で作った CGI スクリプトをサーバにアップする場合はこれを書き換える必要があるのですが、これが実に面倒だし、よく忘れてしまいいます。

ということで次の Makefile を作りました。

.SUFFIXES: .cgi .release .debug
SED=/usr/bin/sed
CP=/usr/bin/cp
RM=/usr/bin/rm
PSRCS=getdata.cgi
PTMPS=$(PSRCS:.cgi=.debug)
PRELS=$(PSRCS:.cgi=.release)

.cgi.debug:
   $(SED) '1s/usr\/bin/perl\/bin/' < $< > $@ ; \
   $(CP) -p $@ $<

.cgi.release:
   $(SED) '1s/perl\/bin/usr\/bin/' < $< > $@ ; \
   $(CP) -p $@ $<

all: release

debug: $(PTMPS)

release: $(PRELS)

clean:
   -$(RM) $(PTMPS) $(PRELS)  

で、PSRCS にファイル名を設定してこれで make すると #!/usr/bin/perl になり、make debug すると #!/perl/bin/perl になります。以上。

Flickr API で JSONP

| | トラックバック(0) http://tsuyuguchi.com/masaaki/mt/archives/2007/02/03-1944.php のはてなブックマーク件数

Flickr API を使って photoset の一覧を Ajax で表示するものをつくってみたので、以下、まとめ。

まずは Flickr API を利用するための api key を取得する。

次に API の呼び出し方だけど、Flickr API はリクエストパラメータに "format=json" をつけると、こんな感じに、次のフォーマットで返ってくる

jsonFlickrApi( /* JSON */ )

JSON の前後におまけがついて、関数呼び出しのフォーマットで返ってくる。 これすなわち、そのまま responseText を eval できることを意味するわけで、jsonFlickrApi は Ajax リクエストのコールバック関数というわけだ。 JSON におまけをつけるテクニックを JSONP (JSON with Padding) というらしい。

function photoset_init(){
   var url = "http://tsuyuguchi.com/masaaki/Flickr/flickrjson.cgi";
   var pars = "method=flickr.photosets.getList";
   var myAjax = new Ajax.Request(  /* from prototype.js */
      url, 
      {
         method: 'get', 
         parameters: pars, 
         onComplete: showResponse
      });
}

function showResponse( originalRequest ){
   /* call jsonFlickrApi */
   eval( originalRequest.responseText );
}

function jsonFlickrApi( obj ){
   /* ここにいろいろ処理を書く */
}

Ajax の通信はクロスドメインができないので、同じサーバに Flickr API のプロクシとなる CGI が必要になるが、これはただ単に Flickr API サーバとクロスドメイン通信ができない Javascript との間に立って右から左にリクエストを橋渡ししているだけで、特別な小細工は特に必要ない。ひとつ前のエントリはエラー周りで若干小細工してあるけど、たいした行数ではない。

Flickr 本家による説明によると、 format=json のほかにさらに 2 つのパラメータがあって

nojsoncallback=1   -> {...}
jsoncallback=wooYay   -> wooYay({...});

それぞれ JSON データのみ返すように指定できたり、コールバックの関数名を自分で指定できたりもするようだ。

ちょっと実験的にというか CVS の練習も兼ねて CVSNT を PC にインストールしてスタンドアロンで動かしているのですけど、 checkout したファイルを編集して checkin した後も作業ディレクトリから削除できなくて困りました。それでいろいろ調べたら LockServer というのがよく分からないけど checkout したファイルを lock しているということが分かりました。

そもそも LockServer は CVS で管理しているファイルへの操作をアトミック名ものにすることを目的のようですので disable にするのは推奨ではないのでうsが、そこまで厳密に CVS を使うわけじゃないのでとりあえず以下の方法で LockServer を disable にしました。本当はなんかうまいことしたら作業ディレクトリを消す方法があると思う。

% cvs co CVSROOT
% vi CVSROOT\config
LockServer=none の一行を追加
% cvs ci -m "LockServer disabled" config

Scheme その 2

| | トラックバック(0) http://tsuyuguchi.com/masaaki/mt/archives/2007/01/11-0050.php のはてなブックマーク件数

去年作った mygosh.bat を改良。 -A オプションで load path にカレントを通して、かつ引数のファイル(カレントディレクトリ限定)を load して gosh を起動できるようにした。

FOR /F "usebackq tokens=*" %%I IN (`pwd`) DO SET PWD=%%I
gosh -A  %PWD%  -l %1

シンタックスファイル scheme.vim はここから持ってきて、個人的なインデントの趣味として

"set lispwords+=lambda,and,or,if,cond,case,define,let,let*,letrec
"set lispwords+=begin,do,delay,set!,else,=>

の2行の lispwords をコメントアウト。

以上自分メモ。

Scheme

| | トラックバック(1) http://tsuyuguchi.com/masaaki/mt/archives/2006/12/16-2216.php のはてなブックマーク件数

環境を DrScheme から Gauche+gVim に変更。 こっちの方が軽くていいですね。ただ gosh.exe にファイル名を指定するだけだと、display などで出力する内容しか表示されず、ただ書いた内容が正しいことだけを確認したい練習問題などの場合は display を書くのが面倒かつ本質的ではないので、ファイルには手続きの定義のみ書いて、実行はプロンプトからという方針にしました。gosh プロンプトから入力したら S 式の評価値が表示されるのが練習問題に向いていると判断しました。ということで、以下のバッチファイルを作成。

gosh -A  %HOME%\sicp  -l %1

これを mygosh.bat で保存。foo.scm に

(define (bar x) (+ 1 x))

と書いてたとすると、コマンドプロンプトから

mygosh foo.scm

と実行すると、gosh のプロンプトが帰ってくるので

gosh>(bar 4)
5
gosh>

みたいな感じで実行だけプロンプトから入力するという作戦。vim も lisp モードがあるので、特に問題なし。あ、Windows での話です。

テラヤマさんのところで紹介されている amazon アソシエイト URL のブックマークレットが、私の環境では動かなかったので、動くものを作ってみた。詳細の検証はしていないですが、javascript の変数を直接使うところが原因ではないかと思ったので、 HTML の id="ASIN" を取得する方法に変えてみた。

追記(2006/12/12):
別ウィンドウが開かないバージョンを作ってみました。こっちのほうがいいかも。

試してみよう

| | トラックバック(1) http://tsuyuguchi.com/masaaki/mt/archives/2006/12/09-1840.php のはてなブックマーク件数

The Joel on Software の「試してみよう」を試してみた

a:

(define (sum-of-squares numbers)
  (accumulate + 0 (map (lambda (x) (* x x)) numbers)))

b:

#include <stdio.h>
int main(int argc, char **argv)
{
   int i;
   for( i = 1; i < argc ; i++ ){
   printf("%c", argv[i][0] );
}

c:

st

a はラムダ式を使うところまでは思いついたが、引数を 2 つ取るラムダ式を使うことまではひらめかなかった。答えを考えながら map 使うのはちょっとズルいかな~という違和感はあったのだけど、そこで満足してしまった。ラムダ式の何たるかをまだ体得できてないことを実感。 b と c は特筆事項なし。これが MIT の 1 年生の中間テストですから、恐れ入る。

今日見つけたちょっとキモいコード。 i のビットが立ってる数を数えるコード。最終的には i に数が入ります。分岐もループもありません。

i = ((i >> 1) & 0x55555555) + (i & 0x55555555);
i = ((i >> 2) & 0x33333333) + (i & 0x33333333);
i = ((i >> 4) & 0x0F0F0F0F) + (i & 0x0F0F0F0F); 
i = ((i >> 8) & 0x00FF00FF) + (i & 0x00FF00FF); 
i = (i >> 16) & 0x0000FFFF) + (i & 0x0000FFFF); 

最後の行から考えるとちょっと分かりやすいかも。

1 2 3 4 5 6

最近の画像

Zero History - ギブスンの新作が 9 月に発売 -
虐殺器官
ドミニオンのランダマイザアプリ、dominion minion が日本語対応!
ハイペリオンの没落 ~ 完結...でもまだ続く~
ハイペリオンの没落 ~ 完結...でもまだ続く~
ハイペリオン - 長大な叙事詩 SF のスタート -
ハイペリオン - 長大な叙事詩 SF のスタート -
「都市と星」 - 10億年と言われてもよく分からない -
「星を継ぐもの」 - 良い Sci-Fi -
トールサイズのニューロマンサーを買った
虎よ、虎よ! - 主人公フォイルの執念の物語 -

私の本棚

 

自転車走行距離

自転車走行距離

Flickr Photos

FlickrPhotos

なかのひと

Y!ログール

このサイトについて

2015年2月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

アーカイブ

My Update

  • Loading...

その他

あわせて読みたいブログパーツ