2008年5月25日日曜日

JSON と JSONP

JSON と JSONP


●JSON(JavaScript Object Notation:JavaScriptオブジェクト表記法)


JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語です。
JSONは単純であるので、特にAjaxの分野で利用が広がりつつあります。
<---- ウィキペディア(Wikipedia)より。


【JSONの使用例】


json.html



<html>
<head>
<title>json test</title>
<script language="JavaScript">
<!--
//XMLHttpRequestオブジェクト生成
function createHttpRequest()
{
//Win ie用
if(window.ActiveXObject){
try {
//MSXML2以降用
return new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
//旧MSXML用
return new ActiveXObject("Microsoft.XMLHTTP")
} catch (e2) {
return null
}
}
} else if(window.XMLHttpRequest){
//Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用
return new XMLHttpRequest()
} else {
return null
}
}
//ファイルにアクセスし受信内容を確認します
window.onload = function()
{
//XMLHttpRequestオブジェクト生成
var xmlHttpObj = createHttpRequest()

//open メソッド
xmlHttpObj.open( 'GET', 'http://localhost/ajax/test/json.php' , true )

//受信時に起動するイベント
xmlHttpObj.onreadystatechange = function()
{
//readyState値は4で受信完了
if (xmlHttpObj.readyState==4)
{
//コールバック
mkHtml(xmlHttpObj)
}
}

//send メソッド
xmlHttpObj.send( '' )
}

//コールバック関数 ( 受信時に実行されます )
function mkHtml(obj)
{
//レスポンスを取得
res = obj.responseText
}
//レスポンスされた文字列をJavaScriptとして実行
eval(res)

//受け取ったJSONを使ってHTML文字列を作成
var html = "名前: " + jsonData.Name + "
住所: " + jsonData.Addr

//DIV へ出力
document.getElementById('list').innerHTML = html
}

//-->
</script>
</head>

<body>
<!-- ここへ出力 -->
<table width=800>
<tr bgcolor="#cccccc">
<td id="list">名前<br>住所</td>
</tr>
</table>
</body>
</html>



json.php



<?php

$fn = "./json.txt";

if(is_file($fn)){
$fhandle = fopen($fn, "r");
while(feof($fhandle) == FALSE){
$str = fgets($fhandle);
echo $str;
}
} else {
print "file open error:".$fn;
}
?>



json.txt




jsonData =
{
"Name":"Tsuchida",
"Addr":"Chiba,Japan"
}


結果表示


json.htmlは、以下の結果を表示します。





名前: Tsuchida
住所: Chiba,Japan



●JSONP(JSON with Padding)



JSON のデータフォーマットにちょっとした記述を加えて JavaScript の関数を呼び出せるようにしたものです。

「クロスドメインの制約」からXMLHttpRequest を使う方法では読込先が他ドメインの場合は使ません。

そこでデータを JSONP の形式にして JavaScriptのソースとしてインクルードしてしまうわけです。

また JSONP は関数呼び出しの形式になっているので,その関数の処理を別に記述することでコールバック関数のように機能します。

<---- [鏡] 入門 JSON 3 -- JSONP とコールバック関数より。


【JSONPの使用例】


jsonp.html




<html>
<head>
<title>jsonp test</title>
<script>
<!--
window.onload = function(){
var req_url = "http://localhost/ajax/test/jsonp.php";
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = req_url;
document.getElementsByTagName("head")[0].appendChild(script);
}

function jsonpData(obj){
var name = obj.Name;
var addr = obj.Addr;
var html = "名前: "+ name +"<br>住所: "+ addr;
document.getElementById("list").innerHTML = html;
}
-->
</script>
</head>

<body>
<!-- ここへ出力 -->
<table width=800>
<tr bgcolor="#cccccc">
<td id="list">名前<br>住所</td>
</tr>
</table>

</body>
</html>


jsonp.php




<?php

$fn = "./jsonp.txt";

if(is_file($fn)){
$fhandle = fopen($fn, "r");
while(feof($fhandle) == FALSE){
$str = fgets($fhandle);
echo $str;
}
} else {
print "file open error:".$fn;
}
?>


jsonp.txt




jsonpData(
{
"Name":"Tsuchida",
"Addr":"Chiba,Japan"
}
);

結果表示


jsonp.htmlは、json.htmlと同じく以下の結果を表示します。






名前: Tsuchida
住所: Chiba,Japan


最後に


JSON と JSONP は似て非なるもの。

JSON はオブジェクトの表記法であり、JSONP は(引数としてJSONを使用するものの)

「関数をコールするソースの生成」です。

似ているのは名称だけですね。


まあ、もっともJSONPが考えられた背景には、XMLHttpRequestの「クロスドメイン制約」があるので

両者が違うのも当り前なのでしょう。

2008年5月24日土曜日

VISTA Home BasicにPostgresをインストールする

postgresのインストールには毎回苦労しているので、今後のことも考えて手順を整理しておく。

事前に準備するもの

(1) postgresの最新バージョン
(2) Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)(vcredist_x86.exe)
(3) Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)((2)とファイル名が同じなのでvcredist_x86_1.exeとした)

事前に準備すること

1.postgresアカウントの作成
参考URL)Home Basicには無い機能についての記述があるので、当該部分については削除したがインストールには問題なし。

1.1 VistaのUAC機能を解除
 (1) [コントロールパネル] → [ユーザーアカウント] をクリック
 (2) [ユーザーアカウント制御の有効化または無効化] をクリックし、[ユーザーアカウント制御(UAC)を使ってコンピュータの保護に役立たせる] のチェックを外す
 (3) PCを再起動

1.2 PostgreSQL用にアカウントを作成・設定
 (1) [コントロールパネル] → [ユーザーアカウント] をクリック
 (2) [ユーザーアカウントの追加または削除] をクリックし、[新しいアカウントの作成] をクリック
 (3) [新しいアカウント名] の入力フォームに「postgres」と入力し、[標準ユーザー] にチェックを入れ、[アカウントの作成] ボタンをクリック
 (4) 再度 [ユーザーアカウントの追加または削除] をクリックし、[パスワードの変更] から任意のパスワードを設定(パスワードはメモしておく)

2.Microsoft Visual C++ 2005のインストール
(参考URL) にも書いてあるように、インストール途中のinitdbでストップします。
回避するために、以下のものをインストールします。

 (1) vcredist_x86.exeのインストール (exeファイルをダブルクリックするだけ。)
 (2) vcredist_x86_1.exeのインストール(exeファイルをダブルクリックするだけ。)

3.postgresql-8.3.1-1.zipの解凍
 エクスプローラからは、解凍しなくともzipファイルの中が見えてしまうので、そこからインストーラを起動してしまいそうになるが、
それではダメなようだ。
 きちんと解凍して、解凍後のインストーラを起動する必要がある。

以上で準備は完了。

postgresのインストールと動作確認

1.postgresのインストール
インストール自体は難しくはないが、Yaskeyを参考にさせて戴きました。
(インストーラはpostgresql-8.3.msiの方を使用する。)

特に、「文字コードの設定」が参考になりました。
(なお、pgAdminⅢのパスワードは、「データベースクラスタの初期化」で設定したものです。)

2.動作確認

動作確認も、Yaskeyを参考にさせて戴きました。

C:\>cd \"Program Files"\PostgreSQL\8.3\bin
C:\Program Files\PostgreSQL\8.3\bin>createdb -U postgres test
Password:(「データベースクラスタの初期化」で設定したパスワード)
<-- 作成結果が表示されない。

C:\Program Files\PostgreSQL\8.3\bin>psql -U postgres -h localhost test
Password for user postgres:(「データベースクラスタの初期化」で設定したパスワード)

psqleditを使う

1.psqleditのインストール
 PostgreSQL用SQLエディタ&実行環境である、psqleditをインストールする。
 と、言っても圧縮ファイルの解凍だけ。

 http://www.hi-ho.ne.jp/a_ogawa/psqledit/index.htmに行き、以下のものをダウンロードする。

 (1) libpq.dll(現在の最新バージョン:libpq820.lzh(84kb))
 (2) psqledit(現在の最新バージョン:Version 3.2.3.0 psqledit_3230.lzh(381kb))

 2つのファイルを解凍し、psqleditを解凍してできたフォルダーにlibpq.dllをコピーするだけで
 インストールは完了。

2.動作確認
 postgresの動作確認で作成したDB、testに接続する。

 (1) psqledit.exeをダブルクリックすると、「PSqlEdit Ver.3.2.3.0 Login」画面が出る。
 (2) 画面中段右にある「ログイン情報の設定」ボタンを押す。
 (3) 「ログイン情報」を次の通り設定する。
   ① USER:postgres
   ②PASSWORD:*****「データベースクラスタの初期化」で設定したパスワード
   ③ DB NAME:test
   ④ HOST:localhost
   ⑤ PORT NO:5432
   ⑥ OPTION:(未設定)

   設定が終わったら、「ADD」ボタンを押し、設定を保存する。
 (4) (1)の画面に戻るので、「OK」を押すとSql実行環境が表示される。
   DBへの接続に失敗した場合は、当該画面の左上に「未接続」が表示される。
   Yaskeyの例で、先程はDBまで作成しているので
   Table作成以降を、このpsqleditで行なって見よう。
   ① addrbook テーブル作成

    create table addrbook (name varchar(50),addr varchar(50), telno varchar(50));

     このSQLをpsqleditに貼付けて実行(Ctrl+R)する。

   ② データ入力

    insert into addrbook (name,addr,telno) values ('Susumu','京都市上京区','080-1234-5678');
    insert into addrbook (name,addr,telno) values ('Humie','静岡市清水区','090-5678-1234');

     同様に、このSQLをpsqleditに貼付けて実行(Ctrl+R)する。


   ③ データの確認

    select * from addrbook;

     この程度なら、手入力して実行(Ctrl+R)する。

     入力データが正しく表示されたら、psqleditの設定は完了。

VistaのUAC機能を設定
 最後に、先程はずした[ユーザーアカウント制御(UAC)を使ってコンピュータの保護に役立たせる] のチェックを元に戻します。

これで完了です。
お疲れ様でした。

2008年5月21日水曜日

昨日の天気

昨日(2008/5/20)の天気には驚かされました。
寝ているときも雨の音が聞こえていたが、目が覚めた5時頃からは
だんだん雨脚が強まり、やがて土砂降りに。
それが出勤時間の7:30頃、土砂降りが一時的に小降りになり、今がチャンスと
駅に向かう。
電車の方も大荒れ状態。進んだり止まったり、止まったり進んだり。
でも、20分程度の遅れで会社に辿り着く。
会社に着いても暫くの間、この大荒れ状態が続いたが、11:00頃であろうか
大雨が止み、風だけが強い状態になる。
それも、昼休みの時間帯(12:00~)には風もなくなって穏やかな天気になる。
全く、すさまじいばかりの天気の移り変わりの一日でした。

2008年5月18日日曜日

利根川の向こうに何がある?

天気予報では、今日は晴れるとのこと。
利根川を渡り取手に行くことにする。
さしたる目的があるわけではないが、とりあえず利根川の向こう側に渡って見たいだけのことである。
途中危険な所もあるので、道路がすいている時間(6:10頃)に自宅を出発。16号線手前の富塚付近を通りかかると、とある民家の庭先に見事な石楠花が咲いている。


16号線を越え、富塚農免農道を走っていると、道端に菖蒲が一面に咲いている場所がある。
付近に民家が見当たらないが、誰が植えたのでかなぁ。
手入れは然程されてなく、雑草も目立つが、立止まり見入ってしまう。
この花を咲かせたのは誰?

この付近からカンナ街道にかけては、自転車や歩行には恐い場所だ。
道路が狭く、今井付近の一部を除き路肩がほとんどない。
その道を、大型のトラックやらダンプやらが猛スピードで走り抜けて行く
のでヒヤリの連続だ。
カンナ街道を左折して、この手賀干拓一の橋に着くとホッとする。
もうあんな猛スピードの車とは、ここでおさらばダ。

手賀干拓一の橋を渡り、右折してから発作方面(写真左側の道を奥の方)に向かうと、釣りをしている沢山の人に会う。
川沿いの道に車で入れるためか、駐車している車もやけに多く感じる。


布佐駅に到着。
布佐高校付近には4,5回来ているが、布佐駅は今回が始めての場所。日曜日のためか、列車時刻が合わなかったのか誰もいない駅でした。
と、馬鹿にしたようなことを言ったが、実は重要な駅であることが後に分る。
駅前の道を左折して、道なりに進むと、今日最大の目標の栄橋だ。
もう橋の向こうは茨城県。

栄橋の中央付近から利根川下流方向を写す。
さすが坂東太郎、素晴らしい景色が目の前に広がる。
(筑紫次郎:筑後川、四国三郎:吉野川とも言うらしいですね。)
布佐駅に向かうのであろうか、自転車でこの橋を渡る人々に出会った。
この辺に住む人々にとって、住所が千葉であれ、茨城であれ布佐駅が重要な生活の中心地になっているように思えた。
若草大橋とは全く異なる光景がここにはある。
この問題は、別途検討したい。

栄橋を渡って左折すると、すぐそこが利根町役場。
日曜日のせいか、人影も無く森閑としている。
中々立派な役場だが、なぜか柳田國男の名前が。
正直、柳田國男と利根町が何故結びつくのか理解できなかった。
(後日、調べたところ、柳田國男は2年ほど利根町に住んでいたとのことです。)



利根町役場の前の通りを、利根川沿いに進むと、利根川と小貝川の合流地点が見えてくる。
1986年(昭和61年)8月の台風10号により堤防が決壊したことで有名になった小貝川だ。
その小貝川が、右方向から利根川に合流しているため、それに沿って進む。(地図的には真北方向)




暫く進むと、小貝川に架かる戸田井橋と奇妙な建築物の北浦川排水機場が見えてくる。

この辺における、水害に対する色々な取組が見えるようだ。
急いで、戸田井橋に向かう。






この付近に来て吃驚したのがこの光景。
戸田井橋から見た小貝川の豊田堰。
先程の北浦川排水機場と豊田堰という巨大な水のコントロール装置と
印旛沼、手賀沼のコントロール装置が、この付近の治水の心臓部だ。



戸田井橋を渡り、左折してサイクリングロードらしい道を進む。
暫く進むと、「海岸から79.5km」の標識付近で、東京芸大の校舎が見えてくる。
全く人が住んでいる気配の無い所を暫く進む。
(ウォーキング中の人には出会うが、雑草だけの単調な道)




漸く進むと、人間の住んでいそうな場所へ
「相野谷川排水機場」と言うらしい。







相野谷川水門!








相野谷川水門を越して暫く進むと、遠くに常磐線鉄橋が見えてくる。
漸く取手に来たな、との実感が湧く。
ただこの鉄橋付近で、千葉側へ橋を渡らなければならないので、慎重にこの堤防から降りる場所を探しながら進む。

鉄橋の手前で、右折して堤防を降りる。
取手駅の直ぐ手前のガードを潜ると、右手に何やら橋に登れそうな箇所が。

そこは、駐輪場。
直ぐ傍に、こんな階段が。。。。。

国道6号線の大利根橋の入口に間違いないので、この階段を登る。
勿論、自転車は引っ張って。




階段を登りつめたところは、もう国道6号線の大利根橋。
長い橋だ!

誰に邪魔されることもなく、一人で堂々とこの橋を渡る。
反対側の歩道を、リュックを背負った男性が一人歩いていただけ。
この景色、一人独占。
なんて贅沢な!


大利根橋の中央付近で。

橋が高く、下を見るのが怖い。








大利根橋を渡り切って、今来た取手方向を写す。
そんなに、橋桁が高いように見えないのだが、
橋の上からは、随分川面が高く見えた。






東我孫子CCに沿って200~300m位ほど走ると、常磐線の鉄橋下を潜るように道が続いている。
ここは、左右共に常磐線鉄橋。







最初の予定では、湖北経由で手賀沼に行くハズだったのだが。
道が全く分からない。
進んでいくうちに、先程通った東京芸大が対岸に見えてきた。
湖北行きの道は、とうに過ぎてしまったらしい。
詳しい地図を持参しなかったことに反省!!!

湖北行きは断念し、布佐駅に目標を変更する。


暫く進むと、先程渡った栄橋だ。








これも、朝方通った利根町役場を対岸から写したもの。

ここから、布佐駅方面に向かい、布佐高校、弁天川に沿って帰宅の途へ。





朝、ここを通ったときに気になったことだが、発作橋付近の下手賀川
の水面の高さだ。
どうも、周りの田圃より水面の方が高いようだ。(写真では分かりにくいと思うが。)
冬時分に比べ、水量も増えているようなので、大雨が降っても大丈夫なのだろうかと、思いながら撮った一枚。



番外編
子鷺か?
白井、印西、我孫子等々の田には、この鳥があちこちにいるが、特徴から子鷺らしい。

利根町から取手に行ったが、印象的なのは、利根町と布佐付近のつながりと、取手市が利根川を挟んだ両岸に広がっていることの2点。
取手のことはさておき、利根町と千葉県のつながりは、もう少し調べる必要あるように感じる。
今日走ったコースは以下を参照ください。

大きな地図で見る

2008年5月17日土曜日

海を見に行こう!


少し霧のかかった朝
小室付近の神崎川左岸






印西市武西付近の大きな田圃
一枚がこれだけ大きいのは初めて見た。

農業効率化の為かな?
この辺の土地が平坦だから、これだけ大きい田圃が作れるんだろうな。
段々畑とか千枚田とか、全く無縁の土地柄だ。
なんて、考えながら自転車を走らせる。


大和田排水機場先の京成本線のガード

花見川沿いに進もうとすると、右岸のこのガードを潜るしか無さそうである。車一台がやっと通れるような狭い道だ。





弁天橋
中々立派な橋です。
それ程交通量は多くないので、橋の上から周りの景色をゆっくり楽しむことができます。

この橋を、右から左に渡り、右折します。



花見川大橋








天戸制水門
花見川大橋の下流100m付近にある。
見難いが、この写真後方に花見川大橋が写っている。















長作制水門








京葉道路





総武線






この辺は橋が多い。
通常は、橋の名前を忘れないよう欄干の名盤を撮影することにしているのだが、花見川に架かる橋は、大半がサイクリングロードの上を通過しているので、橋の名前が記録されていない。













遂に海へ到着!

2008年5月6日火曜日

手賀沼一周



5月に入り、はっきりしない天気が続いたが、連休最終日の今日は、雲ひとつない快晴。
ジッとしておれず、手賀沼に行くことにした。
風が強いので、サイクリングには不向きとは思ったが、この天気には勝てず出掛けることに。
手賀曙橋付近から沼の南側を西へ走る。
西北方面からの風が強く、湖面が波立っている。
まともなアゲンストで中々前に進まない。
北千葉ビジターセンターまでの約6kmが30分も掛かってしまった。

この日は、千葉県の最小湿度9%を記録した日だったそうだ。
写真を見ても、湿度が低かったことが納得できる色をしている。




ここから少し西の、大堀川が手賀沼に流入する付近に「柏ふるさと大橋」がある。ここが手賀沼の西端。(と、勝手に考えているが、間違っていたら指摘してください。)
この橋を北側に渡り、いよいよ進路を反対の東に変える。
写真は、向こう側から手前に橋を渡り切った地点で撮ったもの。
写真の左が、これからの進む方向になる。


北側は、サイクリングロードとして全く整備されていない。
特に、柏ふるさと大橋~手賀大橋の間はほとんどが一般道路である。

手賀大橋を越え、暫く進むと素晴らしい藤棚があり、沢山の人が足を止め、花に見とれていた。



こちらは、藤棚の直ぐ脇の風景だ。
何の株か。菖蒲でかな?
新緑の葉が実に美しい。




手賀沼の畔を自転車に乗りながら考えた。
こんなに自分のためだけに時間を費やしたのは何十年振りだろうかと。
生活のため、子供のため自分の時間なんて持てなかった。
毎日々々、自宅と会社の間を行ったり来たり。
それがどうだ、今は。
毎日、自然の中を駆け回った。
漸く忘れていたものを思い出し、見失っていた自分を取り戻した気がした。
毎日野山を駆け回り、川で遊んだ子供の頃と同じだ。

ただいま作業中

2022/04/13 MySTの翻訳環境作り サイドメニューをプログラムで変換可能にすること 作業の中心場所 – jupyter notebook : g:\jupyter\python pythonをwebでも可能に – g:\webapp\Doc-tools ...