Slender Clubライブ一例目終了

昨日は湘南鎌倉総合病院から品川プランスホテルで開催されている Slender Club Tokyo in 2018へのライブ症例中継の日です

これまで僕自身はこの病院からもたくさんのライブを全世界に向けて飛ばしてきましたので、特に緊張することも慌てることもありません そういう意味では、よく議論になっているライブ中継の欠点、つまり — 術者やスタッフが緊張してしまい、普段の実力を出せなくなり、その結果、患者さんに不利益となる — ということからは僕自身そしてコメディカルも含めたスタッフは無縁です

逆にこのようなライブでは会場におられるたくさんの全世界の expertsの貴重な意見を真摯に聞ける、その結果 より良い治療を行える可能性が高まる、そのような利点が際立ってきます

まあそんなこんなで自分の割当分の患者さんは無事成功裏に二例治療することができました 特に一例目の方は非常に危険が予想される患者さんであり、あまり調子に乗って(つまりライブという環境の中で他の人の行け、行けという意見に押されて)攻めすぎると危険な事態に陥る、そのようなことが僕の誰よりも多くPCIをしてきた人生の経験から感じていました 結果は、押しすぎずある妥協点で終了し、手技は成功し、治療の目的は達成し、かつ無事に終了しました

ここいら辺のPCIというかどんな治療にも共通するであろう真実をどれぐらいの人々、特に若い先生方に理解して頂けるは? 言葉では伝えにくいものがありますね もうかれこれ 30年ぐらい前になりますが、そう昭和の終わりに、日本のとても偉い方が腹部臓器の悪性腫瘍となられ、某国立有名大学の外科の教授が根治手術をされたのですが、明らかにその手術は限界を越えたものだったと思います もちろん僕は腹部外科手術に詳しくありませんので、間違っていたらばすみません 何れにしてもその方は手術を契機に亡くなられました そんなことをどうしても思い出します

さてさてそんなことを考えながら本日は朝から昼のdutyまで懸案のプログラミングにとりかかっています 昨日来「あれ? 何で?」ということがあり、その疑問にすっかり取り憑かれ、どうすればこの疑問を解消できるか? そんなことに悩みながら座長をしたりしていたのです

結果的に解決しました これまであまり深く考えずに慣習に則ってやってきたからこんな事態に直面したのですね 反省です こんなことはこれまで jQueryを使い始めてから、ですから 10年ぐらい前から何回も何回も知っている筈のことだったのです 分かりやすくプログラムで書きますね

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 
<script> 
$('#btn').on('click', function() { 
    if (!confirm('本当にブログに飛びますか?')) { 
        return false; 
    } else { 
        location.href='http://www.kamakuraheart.org/wordpress/'; 
    } 
}); 
</script>
</body> 
</html>

これは勿論動作します しかし、次のプログラムは動作しません

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<script> 
$('#btn').on('click', function() { 
    if (!confirm('本当にブログに飛びますか?')) { 
        return false; 
    } else { 
        location.href='http://www.kamakuraheart.org/wordpress/'; 
    } 
}); 
</script>
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 

</body> 
</html>

何故でしょうか <script></script>の位置に注目して下さい jQueryが対象としているオブジェクトは ‘#btn’ですが、それは DOMでは <button></button>の中で id = ‘btn’として指示されているものです

つまり、この作動しないプログラムでは、jQueryが id = ‘btn’というオブジェクトを探しに行っても、未だ DOMの中に読み込まれていないので、jQueryは分からないのです もちろんhtmlも上から順番に読み込まれます

では次のプログラムはどうでしょうか?

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<script> 
jQuery(document).ready(function() {
  $('#btn').on('click', function() { 
      if (!confirm('本当にブログに飛びますか?')) { 
          return false; 
      } else { 
          location.href='http://www.kamakuraheart.org/wordpress/'; 
      } 
  });
}); 
</script>
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 

</body> 
</html>

これはきちんと作動します 何が変わったのでしょうか? jQueryによるプログラム(スクリプト)全体が jQuery(document).ready(function() {})で括られていますね これが意味するところは、htmlのプログラム全体が読み込まれて DOM解析が終了するまで jQueryに待ちなさい、ということを指示しているのです

実はこんなこと jQueryを使うに際しては当たり前のことです ですから、いちいち jQuery(document).ready(function() {})でくくるのは面倒なので </body>タグの直前に jQueryスクリプトを書くように推奨されているのです こんなことすっかり忘れてしまい、これまで慣習で</body>タグの直前に jQueryスクリプトを書いてきたのですが、それを<head></head>に書いた所、プログラムが動作しなくなり、とても焦ったのです 全く何やっているのだか 解決に数時間を要しました こんなことだから時間がいくらあっても足りませんね

着実に前に進んでいますね

MitraClipを行う、というのは僕のアメリカ人の中でもとても古い友人の一人であるの Ted Feldman先生とのつながりが大きいのです

かれこれ 30年ぐらい前にあの PTMC Ioue Balloonがアメリカで認可された時に、その PIをされていた彼が当時の在籍場所 Chicago Universityで PTMCの全米Workshopを開催されたのです この時には Chicago Universityからライブも飛ばされました そして、その時には日本から井上 寛治 先生と僕が Facultyとして呼ばれ僕は How to perform Brockenbrough Technique. などというものを講演したのです そして、その時にあの Tejas Patel先生とも初めてお会いし、その後の長いつきあいが始まったのですよ

そもそも Tedと知り合うきっかけとなったのはもう今ではどちらが先か分からないのですが、Tedの Chicagoの自宅にもお邪魔し、奥様や子供さんともお会いしたこともあるのです 今からやはり 30年近く前に初めての外国人Facultyとして鎌倉ライブにもお呼びしたのです その時には多分第一回の鎌倉ライブであり、横浜市教育会館に 2時間の衛星中継ライブを飛ばしたような

時期は暮でしたので忘年会シーズン そこにもTedを連れていき日本の忘年会はこんなだということを彼にも体験してもらいました 彼はとてもびっくりし早速奥様にその時の楽しいことをたくさんたくさん話されたそうです

そして Tedがその後 MitraClipの全米PIをされたのです 彼はMitraClipの発展と共に大きくなりました 今でもとても親しい友人です そんなことがあるので僕と MitraClipとの付き合いは実は 10年間以上になるのです

この間 ずっとずっと影に潜んでいました そして今ようやく Operatorの一人として浮き上がらんといているのです でもねえ 体力的にまた知力的にも辛いなあ まあ気張らずに出来る範囲でできるだけ頑張ります

それにしても患者さんは劇的に改善します ある意味TAVIが労作性狭心症に対するPCIだとすれば、MitaClipは急性心筋梗塞に対するPCIのようなものです ふふふ楽しい世界が広がりつつあります

まだまだとても疲れる手技です

MitraClipが保険償還下で限定施設でこの 4月から開始され、本日までに 4例の MitraClip治療を当院では行ってきました

その内の、3例で Main Operatorとしてこの新しい手技に挑んできました 幸い僕が行ってきた患者さん達は、とても順調に回復され、しかも回復というよりも、何というか、「えーっ、こんなにもお元気になるのだ」と驚きの結果になっています

もっとも Main Operatorというのは MitraClipではあまり意味がありません、全ての手技は Sonographerの指示に従って行われますので自分自身の判断でどうこう、ということは無いのです ここはTAVIやPCIとは全く異なります

それでも Main Operatorとして Brockenbrough法による心房中隔穿刺、そしてその後のクリップ挿入などの手技には直接関わる訳です 結果的に手技の最初から最後まで立ち尽くしで緊張を強いられます

未だまだ慣れない手技ということもあり、また重症困難例が蓄積されていた、ということもあり手技には一例あたり 5時間ぐらいかかるのです その間、術者としてずっと立ちっぱなしで、しかもクリップ操作のために無理な態勢でしかも、動けない、というのはとても肉体にも精神にも負荷となります 正直、一例終わった時には、もう体中ぐったりです 本当に疲れ切ってしまい exhausted という表現がピッタリなのです

でも、このような最新医療に自ら携わることができる、そのような環境にこの生まれて 30年、ゼロから僕が最初の職員として作ってきたこの病院、そのような環境にいることに誇りを持ちましょう とても大変ですし、未だまだ不完全です でも僕は出来る限り前に進んで行きます

何だか MitraClipという単なる心臓の最先端医療ではありますが、それは単なる医療にとどまらず、僕の人生観にも大きな影響を及ぼしつつあります 未だまだ自分には成長の余地がありますね

行きつけのカフェで

本日は土曜日 午前中にカテ二件に参加し、12:30自転車で病院の裏側に向かいました ここは「藤沢市村岡」という地名ですが、とにかく長い上り坂が続きます

頑張って登りきり、いつも遠くから見ていた小高い林の場所まで登りました そこた誰も居ない場所ですが、なかなか良い見晴らしでした

しばし休んでから今度は下り坂を自転車飛ばしました そして 13:00に行きつけの「深沢」にある「栄和堂」というブック・カフェに入りました 頼んだのはコーヒー一杯のみ

そして、MacBook Proを開いて JTVT2019のプログラムに取り掛かりました 色々なことがありなかなか取り組めないでここまで時間が過ぎてしまいました もう本気にならないとやばいのです

しかし、またまた訳の分からないエラーに1.5時間悩まされました それは画面の切り替えにおいて、セッション変数が保持されない、というエラーです 原因は2つ以上ありそうなのですが、やっと一つを潰し、変則手で一つ何とかしました 最初の 1.5時間悩んだエラーの原因は、session_start()を最初に書かなかったからであり、これは僕のミスです

しかし、変則手の方は未だに良く分かりません $_SESSION変数に書き込んこだものの一部しか次のページに引き継がれないのです 今までこんなこと見たことありません ブラウザの問題かと色々なブラウザ試みたのですがどうもそうではありません $_SESSION変数の容量の問題でしょうか? でもそんなに大きなデータをセッションに溜め込んではいません 未だに分かりません原因が

変則手で解決したのは仕方なく $_POSTで渡し、渡されたページでは再度 MySQLを起動してデータをデータベースから読み込むというものです まあこれで動作するので良いと言えば良いのですが・・・

何だかすっきりしませんねえ

雨があれば晴れ間もありますね

昨日夕方の便で千歳に飛びました 札幌東徳洲会病院に到着したのは 18:30ぐらいだったのですが、19:00過ぎより院内の Auditoriumにおいて僕による FFRの講演会をしました

今回の講演会はスポンサーは無く、自主的なものです 内容は 3月初めに FRIENDSという学会で行ったものをさらに updateしました その後本日のTAVI症例の検討会を行い、部屋に入ったのは22:00過ぎでした

それからプログラミングの修正を行い、そして就眠 今朝は 5:30AMに覚醒し、シャワー浴びてから 7:00AM頃には出勤しました

そして本日のTAVI三例の内、僕に最初の二例の植え込みを行わせて頂きました バッチリです 知らなかったのですが、二例目は札幌東徳洲会病院で去年の4月06日に第一例のTAVIを行ってから 150例目だったのです

札幌東徳洲会病院TAVI150例記念

150例目といっても淡々と過ぎていきました でも色々ある中で少しは心が慰められました

どうして自分の人生は順調でないのか?

つくづく嫌になります

どうして自分の人生は順調に進んで行かないのか? 世の中の何が悪くてつまづきばかりなのか?

— そんなこと決まっているだろ おまえが悪いからうまくいかないんだよ

何をどうして行けばいいのだろうか?

— 決まってるだろ 自分の生き方を変えるんだよ

でも今更自分を変えることなんてできない

— じゃあ 今の自分を受け入れて自分の人生も受け入れなさい

 

ばっかみたい やってらんないよ あーあ こうしてずるずると時間が過ぎて何事もそのまま進んでいくんだなあ そうしてまた一つ歳とっていくんだ

JTVT2019現在のデータベース構造

まだまだ refineせねばならないと思いますが、現段階での Database DDLを記録しておきます

 ###############################################################################################
 ### SQL for JTVT2019 
 ### Based on this DDL, the program is constructed.
 ### Programmed by Shigeru SAITO, MD, FACC, FSCAI, FJCC
 ### on March 4th, 2018.
 ### revised on April 12th, 2018
 ###
 ### DB Name : jtvt2019
 ###############################################################################################

CREATE TABLE IF NOT EXISTS `hp_tbls` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `hp_code` VARCHAR( 11 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `hp_name` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `zip_code` VARCHAR( 7 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `ken_name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `hp_address` VARCHAR( 256 )CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `country_code` TINYINT( 2 ) NOT NULL DEFAULT '1',			/* Country Code; By using this code , 1: JAPAN*/
                              /* interface such as feet or lb can be aplied. >10: feet/lb */
  PRIMARY KEY (`id`),
  UNIQUE(`hp_code`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `dr_tbls` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `kanji_sirname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `kanji_firstname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',	
  `english_sirname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `english_firstname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',	
  `hp_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `hp_name`  VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `job_kind` TINYINT( 2 ) NOT NULL DEFAULT '1',
  `email` VARCHAR( 128 ) NOT NULL DEFAULT '',
  `dr_pwd` VARCHAR( 512 ) NOT NULL DEFAULT '',
  `clue` TINYINT( 1 ) NOT NULL DEFAULT '1',
  `hint` VARCHAR( 512 )NOT NULL DEFAULT '',
  `login_date` DATE NOT NULL DEFAULT '0000-00-00 00:00:00',
  `ip` VARCHAR( 15 ) NOT NULL DEFAULT '000.000.000.000',
  `dr_url` VARCHAR( 60 ) NOT NULL DEFAULT '',
  `is_active` BOOLEAN NOT NULL DEFAULT '0',
  `is_usable` BOOLEAN NOT NULL DEFAULT '1',
  `is_deleted` BOOLEAN NOT NULL DEFAULT '0',
  `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE(`email`),
  INDEX(`email`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `login_logs` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `dr_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `login_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `login_ip` VARCHAR( 15 ) NOT NULL DEFAULT '000.000.000.000',
  PRIMARY KEY(`id`),
  INDEX(`dr_tbl_id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `abstract_tbls` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `hp_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `dr_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `submission_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `abstract_topic1` tinyint( 2 ) NOT NULL default '0', /* TAVI, MitraClip, etc  */
  `abstract_topic2` tinyint( 2 ) NOT NULL default '0', /* Complications, etc  */
  `abstract_title` VARCHAR( 200 ) NOT NULL DEFAULT '',
  `abstract_content` VARCHAR( 2000 ) NOT NULL DEFAULT '',
  `is_selected` BOOLEAN NOT NULL DEFAULT '1',
  `is_deleted` BOOLEAN NOT NULL DEFAULT '0',
  `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `last_access_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `time_slot_tbls` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `begin_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
    `end_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',	
  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `dr_role_tbls` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `dr_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `time_slot_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `session_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
  `role_kind` tinyint( 2 ) NOT NULL default '0',
  `is_active` BOOLEAN NOT NULL DEFAULT '0',
  `is_usable` BOOLEAN NOT NULL DEFAULT '1',
  `is_deleted` BOOLEAN NOT NULL DEFAULT '0',
  `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `session_tbls` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
  `session_typing_japanese` VARCHAR( 100 ) NOT NULL DEFAULT '',
  `session_typing_english` VARCHAR( 100 ) NOT NULL DEFAULT '',
    `session_sub_title_japanese` VARCHAR( 100 ) NOT NULL DEFAULT '',
  `session_sub_title_english` VARCHAR( 100 ) NOT NULL DEFAULT '',
  `session_begin_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
    `session_end_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',	
  `session_objective_japanese` VARCHAR( 300 ) NOT NULL DEFAULT '',
  `session_objective_english` VARCHAR( 300 ) NOT NULL DEFAULT '',
  `is_deleted` BOOLEAN NOT NULL DEFAULT '0',
  `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

 

DCより帰国して

さて水曜日夕方には鎌倉まで戻ってきました ということは、二泊四日のアメリカ行きということになります 今回もインタペ界の世界の錚々たるメンバーと同席し、辛い英語の洪水の中で有意義な討議をしました もちろん僕もそれなりに発言しましたよ

さて、この間色々と演題登録システム構築する中で、不思議な事に気づきました

以前は入力フォームの内容正当性チェックするためには、いちいち JavascritpないしjQueryを用いてプログラムを書かねばなりませんでした

たとえば、email入力に対して、emailとしては明らかにおかしもの 例として saito*shigeru.com などですが、これはサーバーに飛ばす前に frontendて弾いて欲しいですよね

またカラの値が入ってはいけない入力ボックスもありますね そんなのは当然カラで入力されれば弾く必要があります

実際このようなプログラムの塊、それを人は Libraryとか Pluginとか呼ぶのですが、そのようなものは今でもインターネット探すとたくさん無償で公開されています

しかし、時代は急速に変化しつつあるのです、htmlの現在の規格 html5となり、フーォームでの入力に対して required という属性をつけることができるようになったのです 簡単ですね

ところがこれが動作しないことがあることに気づきました それは formの入力ボタンに

<input class=”btn btn-primary” type=”button” value=”Submit” onClick=”submit();”/><などとするとダメなのです

これを

これだとうまく行きます
<input type=”submit” value=”SUBMIT” />

面白いというか気をつけねばなりませんね ちなみに

<button type=”submit”>Submit</button> でも良い気がするのですが、これだと入力ボックスの中で改行できなくなりこれもダメなのですよ ややこしいったらありゃしない

これから Washington DCへ

東京Valvesが終了し、そのまま Vmax 7.0m/Secという大変な大動脈弁狭窄症に対するTAVIを無事終了し、MitraClipも無事終了 そして札幌東徳洲会病院心臓センターでのTAVIそして島原でのライブ、そして昨日鎌倉自宅に戻り、今朝は今成田に向かっています

半公式の文書作成などNEXの中で行いながら Amazon-Kindleでプログラミング関係の書籍をどんどん購入

その多くが完読できぬまま終わってしまうのですが・・・ それでも僕の唯一の知識の源泉ですから仕方ありません そうしないと自分の世界がどんどん縮まっていきますよね それを何とか食い止め、あわよくば自分の世界を広げるためには新たな勉強が必要ですよね

うわーいっ

本日は非常に重症なご高齢の方のTAVIを行いました 本当に本当に危険が予想され、それに対して対策立て、そして皆の協力で何事も無かったかのように大成功しました

患者さんもとてもお元気です

そして、TAVI治療の後、いよいよ今月より保険償還が認められるようになった MitraClipの鎌倉での市販後第一例の治療を行いました これも最終的にとてもうまく行き、本当に嬉しいです 記念の写真です

MitraClip第一症例