はまったあー

今 もう勉強中 それは、PHPの中でも非常に奥深い関数である、file_get_contents()についてなのです 正直この関数は security領域の境界をさまよう関数であるからでしょうか、インターネットの世界にも情報が非常に少ないのです

これまで Ajaxを用いて画面の書き換えを画面遷移せずに行う方法は存在しない、そのように誤解していましたが、この関数を用いればそんな魔法のようなことが可能となるのです

通常ブラウザでインターネットのあるページを見ている時、我々はリンクとか、ボタンとか押して次の画面に移ります ところが、この次の画面に移る = 画面遷移 する時には、ほとんどの場合 当然のことながら画面全体が書き換わります これは慣れれば当然のこととやり過ごしますし、まあ本のページをめくる、と思えば至極当然のことでしょう

しかし、そのことに満足しなのであれば、「何でいちいち画面全体書き換えるんだよ? 必要部分のみ書き換えればよいだろう?」という疑問に目覚めます

疑問、というのは人間が進歩する重大な動機の一つです これにより人間は次のステップに進むことができるのです

例えば想像して下さい、Ajaxの存在を広く世に知らしめた Google Map これは皆とても日頃お世話になっていますよね、このサービースが公開されるまで、インターネット上の地図ソフトでは、画面から外れたすぐ隣りの場所に移動するためにも、画面全体を書き換えていました ところが、Google Mapではスムーズに地図が移動していくのです 不思議と思いませんか?

この技術は Ajax (Asynchronous Javascript And Xml)という深い技術を用いて成し遂げれているのです ちなみに、Ajaxを使いやすくするために これまた広く普及したのが、jQueryというメタ言語です 実は僕もこの Ajax/jQueryを用いて色々なプログラムを書いていますので、理解はしています しかし、正直プログラムのデバグが非常に困難なのです これはやったことが無い人には分からないと思います 何しろ異次元を行ったり来たりするような感覚なのです

前置きはさておき、この Ajaxを用いねばならない、と誤解していたことが、何と file_get_contents()という関数を用いて行うことができるのです そして、そのテスト・プログラムを書いていてはまったのです それは 以下の2つの文の違いになかなか気づかなかった、ということです 皆様方も挑戦して下さい

 

プログラム A

	$context = stream_context_create(
		array(
			'http' => array(
				'method' => 'POST',
				'header' => implode(
					'\r\n',
					array(
						'Content-Type: application/x-www-form-urlencoded'
					)
				),
				'content' => http_build_query(
					array(
						'name' => $name,
						'msg' => $msg,
					)
				)
			)
		)
	); 

 

プログラム B

	$context = stream_context_create(
		array(
			'http' => array(
				'method' => 'POST',
				'header' => implode(
					'\r\n',
					array(
						'Content-Type: application/x-www-f0rm-urlencoded'
					)
				),
				'content' => http_build_query(
					array(
						'name' => $name,
						'msg' => $msg,
					)
				)
			)
		)
	); 

Aでは動作するのに、Bでは動作しないのです 「え、一体何が違うの?」 新幹線新横浜駅まで移動中のタクシーの中、ずっと悩みました そして、あと1分で新横浜駅到着、パソコン閉じねば、という時点で 「それはね oと0が間違っている」というご指摘を頂きました そうなのです o (=小文字のアルファベット オー)と 0 (=数字のゼロ)を間違って typingしていたのです

これで解決しました 実際の本体テスト・プログラムの掲載は帰りの新幹線の中でも行います とても良く file_get_contents()関数を理解できるものを掲載しますよ 乞うご期待

ということで、今朝は直接自宅から新横浜経由 – 名古屋駅 そして、名鉄特急に乗り換えて 岐阜県の可児市に出かけ、可児スレンダー・ライブデモンストレーションに参加します ライブ治療の後、お薬の講演があり、その後そのまま鎌倉に戻ります というのも、明日はまたまた朝から久しぶりのモスクワ入りだからです それにしても、file_get_contents()関数を少し理解したのがとても嬉しいですね 新しいステージに登った気分なのです

何とも不思議な

日本を10月18日金曜日の0:30AMに羽田より出発し、バンコク経由で、デリーで更に乗り継いで、昨日10月18日金曜日の14:00にアーマダバード空港に降り立ちました 暑い 一年ぶりのアーマダバードということになります

とっても疲れていて、最近の度重なる出張で体はゾンビのようになっていました その中で意識だけが鮮明で、頭脳は高速回転していました しかしながら流石にこのままだと大変なことになる、という予感がしましたので、15:30頃より、寝ました 夕食の19:30にも一度起きたけど、そのまままた寝ました 次に覚せいしたのは 0:00AM頃ですが、また寝ました 最終的に起床したのが、10月19日土曜日の 5:00AMでした いやあ すごく寝ましたねー こんなに長い時間眠りをとったのは何年ぶりでしょうか いや10年ではきかないですね

本日から慢性完全閉塞二例、分岐部二例を含むライブデモンストレーションをTRICO 2013で行わねばなりません 今朝朝食の時に、色々な先生が世界中から参加されているので驚きました 全力を尽くし、恥をかかないようにせねばなりませんが、なんにせよ患者さんに対して良くすることが最大の目標です 残念ながら慢性完全閉塞用ガイドワイヤーがあまり揃っていないような事前情報です その中でやれるだけやるしか仕方ありませんね ここで喚いたりしても、何も事態は変わらないのですから・・・

それにしても不思議なエラーを潰すのに格闘してきました それは、飛行機の中で既に格闘してきたのです 未だに解決していませんが、エラーをバイパスする方法をとりました エラーというのは Ajax通信に関わるエラーであり、しかも、Safari, Chrome, Firefoxとブラウザを試した中で、Firefoxでのみ確認されるものなのです

Firefoxは僕の知る限り一番html標準に近いブラウザだと思うのですが、そのブラウザで走らないと話になりませんので、エラーを回避する道を選びました それにしても Ajax通信のエラー原因特定は本当に難しいですね

再び Ajaxに挑戦

ある臨床試験サイト構築中です その中で、登録症例一覧を出力し、その症例に飛ばす、というインターフェースが必要と感じました

それ自体は簡単なことですが、問題はいわゆるページングです ページングの問題は、ある程度大きなデータを扱うサイトを構築する時には何時も突き当たる難問です CakePHPなどのフレームワークを使用すれば、フレームワークに内在した機能で、簡単に作成できますが、PHPを用いてゼロから構築するとなるとそのような訳には行きません

想像してみて下さい 300件登録されたデータを一枚のページに出力するのは簡単ですが、通信の時間がかかるのと、もっと問題は、探しにくく閲覧しにくい、ということなのです 従って、優しいインターフェースとしては、たとえば、10ページ目20症例分を出力する、というようにページを選択できるようにするのです

もちろん、これをHTML + PHP + MySQLのみで実現するのは難しくありませんが、問題は、ページ切り替えの度に、ページ遷移が起こるので、通信トラフィックが増加するだけでなく、ユーザーから見れば、画面全体が書きなおされるので不愉快です

そこで出てくるのが Ajax (Asynchronous Javascript and XML)という技術です これまでにも何回か紹介していますが、この技術を使います

苦労の末、思い通りのインターフェースが構築できました

重大な security hole発見

第二回湘南TRIマニアック・カンファランス開催に向けて、on-line登録システムを構築してきました といっても、2週間程度の作業でした いよいよそれを昨日公開したのですが、清水先生からのご指摘により重大な security holeの存在に気づきました

今朝早く起きてその原因を探り既に修正しました やはり一人で作業ばかりしていると、なかなか気づかないものです それが人間なのでしょうか しかし、何とかならないかなあ もちろん既にある CakePHPとかZend Frameworkなどを使用すれば多くの問題は解決するのでしょうが、いまさらそれらの Frameworkの規約を勉強するのがめんどうです

だから、一時やりかけた CakePHPも今はすっかりご無沙汰で、ひたすら Javascript/jQuery/PHP/MySQLでプログラムをさらで書いています しかも、クラスなど使用せず、思いっきり古いスタイルのプログラミングに徹しているのです

C++で思い切りクラスを使ってプログラミングするのとは全く対極にある世界です

Ajax

Ajaxを用いて NAUSICA AMI試験の監査ツールを実装しました。Ajaxの仕組みなんてすっかり忘れていたのですが、プログラム書いている内にすぐに回復しました。やはりAjaxを用いると従来の Webページからは信じられないような画面の書き換えが行われ、プログラムを書いた甲斐があります。

その骨子は三つのパートです

  1. 主要画面
    1. ここではデータベースから受け取ったデータを cssを用いて見てくれを整えて出力する
    2. さらに、データを受信するためのボタンをつける
  2. データを受け取る Javascript (Ajax)
    1. ここがAjaxの根幹です
    2. ブラウザの Document Object Model (DOM)を用いてダイナミックに画面を書き換えます
  3. 裏で動くデータ加工プログラム
    1. データベース MySQLに対して SQLを発行してデータを得ます
    2. それを一定の形に加工します
    3. 加工の仕方としては、 JSONや HTMLを用いるのが一般的ですが、 TEXTでも良いのです 今回は HTMLを用いました

    忘れないようにおいおいプログラムを書き記します

またまた羽田空港ラウンジ

今朝も早く起き、札幌に入るため、朝から羽田空港ラウンジにいます。今試みていることは、NASICA AMI試験に絡め、インターフェース改善のために、例の Ajaxを用いてデータベースと遣り取りする部分をコーディングしています。
以前 Ajaxを触ったのは半年以上前なのですっかり忘れておりました。しかし、以前書いたコードを読みながらそのロジックを紐解くと、再び理解できるようになりました。流石に自分で書いたコードなので読み返すことができます。
自分が呆けてしまわない内 (誰だっ、「もう呆けているよ」などと言うのは!)に、以前やりかけ、その難しさにひとまず棚に上げていた DICOM Viewerの作成に再びとりかかりたいのです。今度は万全の準備の下で入るつもりです。コンパイルなどは Qtを用いようかと思っています。以前は VisualStudio C++だったのですが、これだと Windows platformでしか動きませんので・・・ 折角だから MacOsや Linuxでも動けばいいですものね。
しかし、プログラミングしている時はどうしてこんなに楽しいのでしょうか? やはり世界がどんどん広がっていくからですね。