流石に自社の報道の過ちに気付いたのでしょうか

先日(2012/04/24) NHKニュースで、難治性高血圧症患者さんに対して、高周波アブレーション・カテーテルを用いて腎動脈周囲の交感神経をアブレーションすることによって、某医科大学において、患者さんを治療した、ということが報道されたそうです。僕は知らなかったのですが、結構巷では話題になったそうです。

これが事実であるとすれば、色々な問題があり、またそれを報道した日本の公共放送と自ら位置付けているNHKにも大きな問題だと思われます。

今度、湘南鎌倉総合病院循環器科ではこの治療を正式の治験として開始し、きちんとしたプロトコルの下で、公的機関の監視下で、きちんと治療効果とその安全性を確認しながら患者さんを治療することが決まっています。そして、今度この治療法について講演する機会がありますので、少しこのNHK報道を Webで検索しました。その結果、もう一つの驚くべき事実に遭遇しました。

何と、NHKニュース本体の Webページからこの報道がきれいさっぱり削除されているのです。もちろん、正しくないことを何時までも報道し続けることは問題ですが、それにしても、「間違った事実を報道してしまい、申し訳ありませんでした」ぐらいの、自己反省ぐらいはきちんと記録として残すべきだと思います。

さて、この報道された治療法の何が問題でしょうか?

  1. 既にこの治療法は欧米では行われており、アメリカでも大規模な臨床試験が進行中である
  2. 心臓に対する高周波カテーテル・アブレーションに用いるカテーテルや機械を、この大学では腎臓に対して用いた これは認可外使用であるのみならば、用いる高周波エネルギーが一桁異なり、腎動脈の熱障害による慢性期再狭窄などの長期および短期安全性が担保されない
  3. 少なくとも半年間の動物実験観察を含めた前臨床試験が行われて然るべきであるが、どう考えてもそれが行われた様子は無い
  4. 施行にあたって、倫理委員会承認を得たかはなはだ不明である 仮に承認を受けたとすれば、そのような人体実験もどきの治療を認可する倫理委員会の存在価値は無い

などです。また、同時に指摘すべきは NHK報道の体質、あるいは監査体制はひどいものだと思います。

SQLでグループ毎の要素数で並び変える

NAUSICA AMI臨床試験において、登録症例数で病院名を出力する時に、それぞれの登録数も出力し、さらには登録数で並び変える必要がありました。これに対して、

SELECT DISTINCT `hp_name` FROM `hp_tbl` 
INNER JOIN `pt_tbl`
ON `hp_tbl`.`hp_id` = `pt_tbl`.`hp_id`

このようにすれば登録病院名のみ出力されます。しかし、登録数や登録数での並び変えは困難です正解は

SELECT`hp_name`, COUNT(*) AS 登録数 FROM `hp_tbl` 
INNER JOIN `pt_tbl` ON `hp_tbl`.`hp_id` = `pt_tbl`.`hp_id`
GROUP BY `hp_name`
ORDER BY 登録数 DESC

このようにするのです。

サーバー復旧作業その後

何とかサーバー復旧しました。ひどい話です。突然全てのデータが完全に消失したのです。全てのデータとは

  1. ホームベージのデータ これにはhtml, css, Javascript, jQuery, cgiなどのデータやプログラムが含まれます
  2. 膨大なプログラム群 これにはPHP, Javascript, jQuery, SQLなどで書かれたプログラムがあります
  3. データベースに蓄えられたデータそのもの これはDatabase MySQLの中に格納されたデータです
  4. サーバーの各種設定 これにはデータベース接続、メール、FTPなどのユーザーネームとパスワードがあります

これら全てが一瞬にして無くなったのです。まずは4番から設定に入りました。そして、次に MySQLを開始させました。MySQLといえどもLinux Server上で走るプログラムの一つですのでまず走らせねばなりません。一旦走らせたらば、永久に走り続けるのです。そして、その MySQL上にバックアップしてあった 2012-05-23までのデータを含んだ SQL文を転送し、そしてSQLを実行しました。これでひとまずデータベースがその時点まで復旧しました。3の部分の復旧です。

次に行ったのは、2番です。膨大な主にPHPで書かれたプログラムを uploadしました。もともとサーバー側では PHPの実行プログラム (インタープリーター)が走っていますので、それでもう書いたプログラムが走り始めました。

最後にしたのは 1番です。これでブラウザからアクセス可能となりました。

ここまでの作業は正直それ程時間がかかる作業ではなく、主に uploadにかかる時間に依存します。つまり回線速度に依存しました。だいたい 1時間ぐらいでした。

問題はそれからでした。5-24から6-20までに登録されたデータがあります。この中で重要なものは、無作為割付を含んだ症例です。幸いプログラムが、登録があれば、あるメルアドに「登録がありました」という情報を送るようにしてありました。もちろん個人を同定できる情報は含まれません。このメールは消去せず蓄積していましたので、そのデータを用いて症例登録をすることにしました。

ただ、このためにはデータベースの色々なテーブルを参照しながらデータを作成せねばなりません。とても手作業でできる仕事ではありませんので、そのように PHPでプログラムを書かねばなりませんでした。時差ボケの中、しかもインターネット接続が不安定の中、大変な作業であり、効率の悪いものでしたので、これに 10時間ぐらいがかかってしまったのです。

そしてようやく出来る範囲最大限のデータ復活を成し遂げました。次に行ったのは、それらのデータが復活したことを、登録して頂いた先生方にメールで知らせることでした。これも手作業でできる仕事ではありませんので、プログラムを書かねばなりませんでした。自動的にメールを発信するプログラムは結構難しいのです。それでも2時間ぐらいで完成し、走らせました。

もう少しチューニングが必要かも知れません。何れにしても大変な経験をしました。バックアップを毎日のように取る必要があるかも知れませんね。

本日のライブデモンストレーション

こちらの時刻で 3:00AM頃から、失われたデータの復旧に全力を尽くしました。幸いその後調べると backupが 5月23日までありましたので、幸いでした。そして、その後については、新規症例登録されると自動的に当方にメールで通知が来るようにプログラムを書いていましたので、それを拾って、登録日、登録施設、登録医師、そして BMS/DESの振り分け、そこのデータはありますので、そのデータを backupに追加することにしました。もちろん、これにはプログラムを書かねばならず、また、メールからそのようなデータにするためにも、正規表現を利用して必要部分だけ抽出する必要があったのです。

3:00AMから実に 13:00まで 12時間かかりきりで修正プログラムを書きました。折角なので、記録しておきましょう。

	require_once("**");
	require_once("**");
	$link = mysql_connect($db_host, $db_user, $db_password);
	if (is_null($link)) {
		echo "Cannot open MySQL!";
    	die("MySQL connection failed");
	}
	mysql_select_db($db_name);
	$result = mysql_query('set character set utf8');

	$handle = fopen("****.txt", "r");
	if ($handle) {
		$pt_id = 325;
    while (!feof($handle)) {
        $reg_date = fgets($handle);
        echo $reg_date."<br />";
		$register_no = trim(fgets($handle));
		$hospital = trim(fgets($handle));
		$sql = "SELECT * FROM `hp_tbl` WHERE **` = '".$hospital."';";
		$result = mysql_query($sql);
		$row = mysql_fetch_assoc($result);
		$hp_id = $row['**'];
		echo $hp_id.":".$hospital."<br />";
		$doctor = trim(fgets($handle));
		$sql = "SELECT * FROM `dr_tbl` WHERE `**` = '".$doctor."';";
		$result = mysql_query($sql);
		$row = mysql_fetch_assoc($result);
		$dr_id = $row['**'];
		echo "Doctor ID: ".$dr_id.":".$doctor."<br />";
		$is_des = trim(fgets($handle));
		echo $is_des."<br />";
		if ($is_des =="BMS") {
			$is_des = 0;
		} else {
			$is_des = 1;
		}

		}
		$sql = "INSERT INTO `pt_tbl` (*******) VALUES ('".
		$hp_id."', '".$dr_id."', '".$reg_date."', '".mb_substr($shorten_hp, 0, 15).$register_no."', '1', '".$is_des."');";
		echo $sql."<br />";
		mysql_query($sql);
		$pt_id++;
    }
    fclose($handle);

これによりデータを追加挿入して、さらに、そこから SQLの書き出しを行います。あっ、ここはローカルに作成したデータベースで行い、完全なコピーを作成できる SQL文を書きださせます。そして、そのSQL文を何もデータもテープルも無い、インターネット上のデータベースに読み込ませ、新たなテーブルとデータを作成したのです。

ここまで行なって、そして、ライブデモンストレーションに行きました。

病院は綺麗なスペイン病院 (Hospital de Espanolo)でした。症例は例によって慢性完全閉塞です。患者さんは 70歳の男性で、左冠動脈前下行枝近位部の慢性完全閉塞でした。

これに大して、両側大腿動脈アプローチ 7Frを用い、最初から逆行性に入り、素早く慢性完全閉塞を通過させ、丁度ライブデモンストレーション放映終了3分ぐらい前に手技を終了しました。ほとんど全行程を 45分間の中継時間で見せることができました。

そして、それから再びホテルに戻り、今度はデータを戻したことをそのデータを入れて頂いた先生方に通知メールを出すプログラムを書いたのです。この間、腕も頭も最高回転で使いました。何しろ時間の勝負でしたので・・・

これから夕食に行きます。疲れました。

Salvadorでとんでもない事態に遭遇

先の原発事故では、「想定外の」という言葉が問題となりました。今回、この日本の反対側サルバドールで僕にとっては「想定外の」事態に遭遇することになりました。

時差ボケの中、ここまで四時間かけて出来る範囲で手を打ちました。大変な作業でした。

急性心筋梗塞の再灌流療法として、非薬剤溶出性ステントによる再灌流か、薬剤溶出性ステントによる再灌流かどちらが有効かを明らかにする研究者主導型臨床試験である、NAUSICA AMI臨床試験を皆のご協力により走らせています。この試験においては、無駄を排除し、経費節減を図るために、その登録サイトの全てを私自身がプログラム書いています。言語は、PHP, Javascript, Perl, XHTML, CSSです。

そして、そのサイトを運用するために、信頼のおけるレンタルサーバー会社のサーバーを占有でレンタルし、ドメインも特定非営利活動法人ティー・アール・アイ国際ネットワークから独自に取得して開設しています。

もちろん、データのバックアップも頻回ではありませんが、定期的に行なってきました。まさか、そのレンタルサーバー会社の運用で事故が起こるとは全く想定していなかったのです。しかし、日本時刻 6/20 17:00頃より、サイトにアクセスできなくなった、との一報がもたらされました。

もちろん僕はこのサルバドールです。「まさかそんなことあり得ない」と、思いながらアクセスすると、そのドメイン名は存在しない、とのエラーが返されます。サイトの管理画面にアクセスしようとしても同様です。この時点で考えたことは、ひょっとしてこの tri-international.orgというドメイン名の契約が切れているのでは? と思いました。そこで調査するとその可能性も否定しきれないので、早速契約更新を依頼しました。

しかし、事態はもっと深刻だったのです。数時間前にこんなメールが送られてきました。

【重要】6月20日に発生のサーバー障害についてのご報告

平素は格別のご高配を賜り厚く御礼申し上げます。

この度はご利用いただいているサーバーに、障害が発生し長時間に渡りご利用
いただけない状況となり、誠に申し訳ございません。
また、本件についてのご報告が大変遅くなり重ねてお詫び申し上げます。

本障害では弊社メンテナンス作業において用いる特定の管理プログラムにバグ
があり、お客様データが消失したことが判明いたしました。

消失したデータの復旧作業を進めておりましたが、データの復旧にはなお時間
を要することを確認いたしました。
早期にサービスを復旧させるため、サーバーを初期状態に戻し、現時点で可能
な範囲での復旧作業を実施しサービスを再開することといたしました。

お客様には大変ご迷惑をおかけすることとなり、心苦しく存じますが、何卒
ご了承いただきますようお願い申し上げます。

なお、データの復旧作業は総力をあげ継続しております。

誠に恐縮ではございますが、弊社でのデータ復旧作業とは別にお客様にて以下
に記載のサーバー初期設定方法をご確認いただき、メール送受信ならびに WEB
コンテンツの公開作業をお願いいたします。

   ■発生日時 2012年6月20日 17時ごろより

   ■発生原因 運用管理ツールの不具合

   ■事  象 サーバー上のデータの消失

まさしくガーンと衝撃でした。ということは、データベース上のデータも消失しているに違いない、何しろサーバーを初期化するのだから・・・

早速このパソコンにあるローカルのデータベースを参照しました。最後のバックアップは 5/17でした。ということは、それ以降の登録データが消失しているのです。管理者としては今更ジタバタしても仕方ありません。責任の追求などは後にするとして、とにかく可及的速やかに現状復帰をせねばなりません。早速この MacBook Proを用いて、サーバーデータを uploadしました。このマシンで行うのは初めてでしたので、少し手間取りましたが、何とか復旧しました。そして、 5/17までのデータについてはupdateしました。

念の為に復旧した画面を確認して下さい。

特定非営利活動法人ティー・アール・アイ国際ネットワークのホームページは http://www.tri-international.orgです。

そして、NAUSICA AMI臨床試験サイトは https://www.tri-international.org/ami/です。

失われたデータに関しては、これから個々に対応するしかありません。全く想定外の事態でした。もちろんこの事故に関しては IRBにも報告する義務があります。

本日はこのサルバドールでライブデモンストレーションの術者をせねばなりませんが、全くそれどころではありませんでした。ここまで復旧し、この後ライブデモンストレーションに向けて心を落ち着かせねばなりません。目の前のことに全力を尽くさねば人間として失礼に当たります。もう時差ボケなんて言ってられません。