phpMyBackupProによるSQL backup dataの文字化け

ついに見つけたツール phpMyBackupProは非常に優れたものです。完璧に SQLでバック・アップが可能なのです。本当に素晴らしいと思います。しかも、フリーでダウンロードできるのです。

ただ、日本語には対応していません。このため、backupしたデータの日本語が文字化けしてしまい、そのままでは使い物になりません。データベースには UTF-8の文字コードでデータが蓄積されているので、phpMyBackupProそのもののデータ読み書きを UTF-8にすれば良いわけです。少しプログラムを見ていくと、どうやら Latinという文字コードがdefaultとして設定されているのです。まあ、どうやらイギリスで開発されているプログラムなので、かの国ではそれが標準なのでしょう。しかし、日本語対応させようと思えば、SJISあるいはEUC-Jという文字コード、そして現在の流れとしては UTF-8に対応せねばなりません。

そもそも Latinという文字コードでは一文字が 1Byte = 8 bitsであらわされます。これに対して、UTF-8では基本的に 3Bytes = 24 bitsで一文字があらわされます。日本語では、文字の数が何万とあるので、情報量として3Bytes必要なのです。

phpMyBackupProで同様の悩みをかかえて、それを解決された方がおられるのでは? と探したところ、やはりありましたね。ここ(A)です

実は、もっと有望な解説も見つけました。それはここ(B)です。このサイトでは、何と日本語化した phpMyBackupProをダウンロードできるようにしていました。しかし、その versionが 2.1とあり、現在の version 2.3よりも古いのが少し気になります。

そこで、(A)を参考に、functions.inc.phpをエディタで開いて、その 636行目に以下の文を発見しました

        // select db
        @mysql_select_db($db);

ここに 2行を追加しました:

        // select db
        @mysql_select_db($db);
		$sql = "SET NAMES utf8";		// utf8に設定する
		$res= mysql_db_query($db,"$sql");

この簡単な追加により、見事に日本語データが文字化けせずにきちんと backupされ、downloadできるようになりました。もっとも、未だテスト段階ですので、このパソコンのローカルに設定した偽装インターネット環境での確認です。

そのようにしてダウンロードした SQL文を用いて、サーバー・データが破壊されても、再構築が完璧にできるか否かを検証したところ、問題がおこりました。

きちんと SQL文では日本語が文字化けせずにダウンロードできているのに、何故か SQL文を実行して再構築すると、データベース上のデータが文字化けするのです。これは変です。 SQL文を読んでもきちんと

DEFAULT CHARSET=utf8

と設定されているのです。そこで吐き出された SQL文を最初から見ると何とその最初に

# http://www.phpMyBackupPro.net

### used character set: Latin ###
set names Latin;

というのを発見しました。折角データをutf8で設定しているのに、肝心の書き込み段階で Latinに設定されているのです。これが原因でした。
それで、この部分の Latin -> utf8に変更したところ、見事に完全データ復旧ができるようになったのです。素晴らしいです。もう少しテストしてからサーバーに実際に uploadしてみます。何はともあれ、今度のサーバー障害により色々なことを学びました。失敗から多くを学び、発展させることができました。

ついに見つけたか

これまで PHP, MySQLを用いて Web上にデータベースを構築してきましたが、そのバック・アップには少し困っていました。

MySQL自体にバック・アップのためのコマンドを持っていますが、それを作動させるためには、コマンド・ラインから起動したりせねばなりません。つまり、まあだいたい LAMPでサーバーを構築していますから、L=Linux, A=Appache, M=MySQL, P=PHP or Perlなので、OSであるLinuxのシェルを直接起動できる権限を有していないとなりません。しかしながら、我々の用いているレンタル・サーバーでは当然のことながらこれは不可能です。
また、PHPより Sytem()コマンドなどで直接MySQLのコマンドを発行することもできますが、それも大概のレンタル・サーバーでは危険な命令語として、禁じられ、潰されています。
となると、最近のレンタル・サーバーには最初からインストールしてある、phpMyAdminという秀逸のツールを用い、その上でデータベースを選択し、エキスポート・コマンドによる SQL dumpを得る、それしか現実的な選択は無くなります。
もちろんこれでこれまでバック・アップしてきたのです。しかし、そこには問題があります。

  1. phpMyAdminを用いればデータベースの全てにアクセスできてしまうので、万が一操作を間違えば全てのデータベース消失という危険な事態になりかねない
  2. 従って、この操作権限を行使するためには、プログラミングについて相当の知識が無いといけない
  3. phpMyAdminの実行を自動スケジュールすることは困難である
  4. phpMyAdminの実行を自動化することも困難である

これらの問題点から 知らない人々からは「どうしてバック・アップを私たちにさせてくれないの?」 などという非難を浴びつつ、そんなこと説明するためにはどれだけたくさんの知識をあらかじめ教授せねばならないの? と、そんな非難を自分の中で噛み潰してきたのです。

次の解決法としては、PHPでデータベースにアクセスするプログラムを書き、データのみをテーブル毎にダンプして、それをバック・アップすることです。もちろんこのプログラム作成はそれ程大変な作業ではありません。しかし、問題点としては、データというものの概念の中に、データ同士の関係、という重要な意味がある、ということなのです。特に MySQLなどの SQLデータベースは、関係データベースと称されるように、個々のテーブルに蓄えられたデータの互いの関連が重要な意味を持っているのです。

このPHPによるデータ・バック・アップでは、個々のテーブルデータをダウンロードすることはできますが、関係そのものを記録することは困難です。そのためには、 SQLにより記述したデータベース構造が必要なのです。 phpMyAdminを用いれば、SQL dumpが可能ですので、個々のテーブルデータのみならず、SQLで記述したデータ構造をもダンプできるのです。従って、データベースから全てが消失してもデータベースの完全復旧が可能なのです。

先日の、サーバー・データ消失事件においても、僕がこの SQL dumpをしていたためにデータ復旧が可能だったのです。これに反して、”Where is Dr. Saito?”で用いていたデータベースでは、このバック・アップがされていなかったため、未だに復旧できていないのです。

前置きはさておいて、ついに見つけました。素晴らしいバック・アップ・ツールを しかも完全にフリーなのです。その名前は、phpMyBackupProです。試みにこれをダウンロードしてローカルにインストールしました。素晴らしい、の一言です。しかし、大きな問題が一つ、それは データの中の日本語が文字化けしているのです。

まあ、これはMySQLにアクセスする部分でUTF-8を指定するようにプログラムを書きなおせば済むでしょう。何しろ、この優れたツールは全て PHPで記述された膨大なプログラムなのです。ですから、その部分をエディタで探して、UTF-8指定を入れればいいでしょう。チャレンジしましょう。

TRIbune

私たちは、iPhone用のあるアプリを待っていました。
TRI (経橈骨動脈的冠動脈インターベンション) の開発者であり、私の長年の友人の一人でもある キムニー先生は iPhone用のこのアプリの開発に多大なエネルギーを費やされてきました。
誰しも知っているように、TRIはTRIを愛し、かつ云われの無い圧力に屈せず戦おうとする多くの人々の力によって発展し、世界中に広まってきました。TRIは、冠動脈あるいはその他の血管インターベンションの一つの方法にしか過ぎず、かつ他と違う点は血管への導入部位のみであります。しかしながら、初めからTRIは世界を変革する内なる力を有していました。当時若かった私たちはその力に完全に魅了されたのでした。
TRIの技術は、これまでの冠動脈インターベンションとは異なる方法で広まっていきました。少人数で開催したライブデモンストレーションやそこでの議論、インターネットを用いたメールあるいは掲示板、そしてインターネット上のホームページやブログ、これらを用いてきたのです。これらを用いることにより、私たちを分断しかねない時間的、地理的、言葉の違い、あるいは文化などなどの幾多の違いによる垣根を乗り越えることができたのです。
本日、キムニー先生から、彼が AppStoreに「TRIbune」と呼ぶアプリをついにアップロードしたと聞いてとても嬉しいのです。
このアプリは、オランダ・アムステルダムの OLVG病院で1992年8月12日にTRIの第一例が行われたことを記念し、そしてそれを忘れないために、TRIを愛し、その普及に努めたいと願う全ての人々へ送られた彼からの贈り物です。
このアプリを用いることにより、TRIにまつわる色々な情報を皆で共有することができます。どうぞ使って下さい。
このレポートの最後に彼からのメールをつけておきましょう。

滋こんにちは

ついにAppStoreで僕のAppが入手できるようになったよ。
このニュースを君の有名なブログに掲載してくれない? そうすれば、アプリの改良のために意見をたくさん聞けるから

よろしくね

Ferdinand

iPhone App: TRIbune

We were waiting for the launch of an App for iPhone.

Dr. Ferdinand Kiemeneij, who is the inventor of transradial coronary intervention (TRI) and one of my best friends for many years, has been spending hist lot of energy for the development of this application for iPhone.

As everybody knows, TRI has been developed and distributed around the world through the many people’s contribution, who love TRI and are brave to fight against unreasonable offending pressure. TRI is just only one method for coronary or other-field intervention and different from the other methods only in terms of the access site. However, it, from the beginning, involved an intrinsic power to change the world. We, who used to be still young, were completely fascinated by this power.

The style of the propagation of the technique of TRI has been different from the way in the traditional coronary intervention. We utilized small-party live demonstration and/or discussion, Internet mailing list or bulletin board, and Internet Web Site or Blog frequently. These kinds of communication provided the power for us to overcome any borders separating us due to differences in time, geographical, linguistic, cultural, and so on.

Now, I am very pleased to hear from my friend Ferdinand the news that he finally uploaded his application “TRIbune” in AppStore.
This application is a gift from the inventor of TRI, Dr. Kiemeneij to everybody, who loves and is willing to promote TRI, in order to memorize and congratulate for the 20 years’ Anniversary of TRI, which started on August 12, 1992 at OLVG Hospital in Amsterdam, Holland.
By using this application, we can update any knowledge surrounding TRI. Enjoy it!

At the end of this blog report, I attach the content of his mail:


Dear Shigeru,

I am happy to inform you that my App is available in the AppStore. 

Could you post this news on your famous blog? That would be of great help.
Please give feedback and criticism.

Best regards,

Ferdinand

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を用いました

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

緊急出動

本日札幌東徳洲会病院での外来終え一息ついていると、7月1日に新築移転開業した札幌徳洲会病院で緊急患者さんの話が飛び込んできました。緊急カテーテルそして必要あれば冠動脈インターベンションという段取りのため、応援に東病院より出動することにしました。
東病院との距離は自動車で25分ぐらいであり、千歳に向かう高速の道沿いにあります。もともと札幌徳洲会病院は白石区の中央に位置していましたが、手狭となりまた古くなったため、現在の地に新築移転したのです。大きな建物であり、今後の発展が期待されます。
既に部下の山崎君と、士反君がカテを開始していました。全く新しいカテ室で、スタッフの皆が未だ慣れていない状態で手技に入っていく、そのワクワク感に心が躍ります。24年前全てを捨てて鎌倉に入った時もこんなだったな、そんな感傷に浸ってしまいます。
あの時は未だ38歳でした。再び新規に開拓する話も出ています。新たな開拓地に挑むのは男として魅力的です。しかし、今この年でその元気があるでしょうか?
鎌倉に来て、ここまで色々なシステムを作り、患者さんも増やし、そして現在の色々なプロジェクトが走っているのです。そのようになるまで15年はかかったのです。今から15年経てば、とても現役を続けていられる年齢では無くなります。もちろん、これまで培ったノウハウがあり、そこに至るには15年はかからないでしょう、それでもその半分7-8年はかかるでしょう。
人生はやり直しがきかない、そして振り返ってばかりでは仕方ありません。前に進むしかありませんが、問題はどのように方向を決めて前に進むかでしょう。未だ迷える歳です。

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

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

今や過去の遺物

Amazon中古で、今やレアとなった書物 CG出版社「文書データ圧縮アルゴリズム入門」という本を入手しました。幸いなことにとても安かったのですが、もう入手できないでしょう。全体で 250ページほどの小さな本ですが、中身は濃く、ハフマン符号化から始まり、算術符号化、それらの適応型符号化、そしてLZ77など、これらについてのアルゴリズム解説のみならず、全て C言語によるプログラムが惜しげもなく記載されているのです。
これらの特に算術符号化に関しては、現在アメリカのある会社による許し難い特許の網により、使用することはできず、ましてやプログラムを書籍に掲載することなど不可能なのです。
この本の出版は 1994年であり、未だ特許宣言前の時代だったのでしょう。もちろん本の中にプログラムが印刷されているので、それを打ち込めば現在のパソコンでもコンパイルできると思います。でも面倒です。
この本には最後にあの昔懐かしい 3.5インチ フロッピー・ディスクがついているのです。そこで、懐かしき外付けフロッピー・ディスク・ドライブである Panasonic CF-VFDU03を探してもらいそれをつけました。このドライブはかつて 15年以上前に当時使用していた Panasonic Let’s Noteラップトップ・パソコンの外付けドライブとしてついてきたものであり、今では貴重な外付けドライブなので保管してあったものです。
しかし、残念かな、このフロッピーは読み取れませんでした。当時、フロッピーのフォーマットには、2DDと2HDというものがあり、さらには当時全盛の PC-9801あるいは CP/Mなど OSも色々だったので、それで現在の Windowsでは読み取れないのでしょう。試しに MacBook Proでも試みましたが、駄目でした。とても残念ですね。
ちなみに、ネットで、この外付けドライブを検索したところ、流石に今や入手できないようです。アメリカ国内では、何と 180ドルで売られてもいるようですが、肝心の写真が間違っており、何と外部電源アダプタの写真でしたから信用できませんね。

知らなかった

何とこんなことも知りませんでした 今 NAUSICA AMI試験監査用インターフェースを作成しているのですが、そこで発行する SQLで例えば 病院毎にかつ、登録日順に並び変えるという、ごく普通の操作をすることに対して これは ORDER BY句に複数指定すれば良いだろう、ということは容易に想像つきます そこで自然に

SELECT * FROM `pt_tbl` ORDER BY `hp_id` AND `registration_date`;

としたのですが、これはとんでもない結果を返します きっと、二つの項目を合成して並び替えするのです
正解は

SELECT * FROM `pt_tbl` ORDER BY `hp_id`, `registration_date`;

なのです。こんなとも知らなかったとは驚くべしでした

羽田空港帰還

今朝早く長崎に飛び、島原まで行き、ライブデモンストレーションを行い、そして今羽田空港に戻ってきました。信じられない日程ですが、やれば可能なのですね。これで、自分の行動範囲の自由度がまた広がりました。

島原は激しい雨でしたが、発つ頃には空も明るくなりし、雨も上がりました。本日は夏祭り、皆 とても楽しんでおられることでしょう。恒例の花火も 20:30より打ち上げられていることでしょう。雨があがってとても良かったです。