この10日間 悩み抜いたバグがようやく解決

さて、https://www.kamakuralive.net/ のWeb programを作る段階で、コメコメ部門のポスター発表部分がまだ実装できていませんでした その理由は唯一つ、僕がズルというか楽をしたいからだったのです

既にポスター演題が 20集まっており、それをコメコメ委員の方々が Excel形式で集計してくださっていました しかし、それを Web databaseである MySQLデータベースに読み込まねばなりません 実は既に昨年、 Excel (これはShift-J文字コード) の xlsx形式-> Text形式 (.txt)に変換 -> 文字コードを UTF-8に変換 -> .txtを MySQL databaseに読み込み という部分は作成していました

まあ作成といっても、foreachでループを回して読み込むだけなのですが・・・

今回は折角ですので、自分の勉強のためにもPHPSpreadSheetという Excelファイルを PHPで読み込むライブラリを用いることにしたのです

その部分は案外簡単に Excel file読み込みに成功したのですが、肝腎の MySQL databaseに書き込む SQL文がエラーが出るのです その部分のバグとりが全くうまくいかず 10日間以上を無駄に過ごしてしまいました いや 決して人生において無駄というのは無いでしょう そう思わねばやってらんないよっ

結局その部分を簡略化して出しましょう

try {
  // MySQLサーバへ接続
  $pdo = new PDO( "mysql:host=$db_host;dbname=$db_name_sessions;charset=utf8", $db_user, $db_password );
  // 注意: 不要なspaceを挿入すると' $db_host'のようにみなされ、エラーとなる
} catch ( PDOException $e ) {
  die( $e->getMessage() );
}

for ( $rowNo = 1; $rowNo < 24; $rowNo++ ) {
  $stmt = $pdo->prepare( "SELECT COUNT(*) FROM `doctor_tbls` WHERE `email` = :email;" );
  $stmt->bindValue( ":email", $nnlines[ $rowNo ][ 12 ], PDO::PARAM_STR );
  $stmt->execute();
  $count_same_email = $stmt->fetchColumn();

  if ( $count_same_email < 1 ) { // 既にこのメルアドは登録されているのでスキップ
     $stmt_dr = $pdo->prepare( "INSERT INTO `doctor_tbls` (`english_sirname`, `english_firstname`, `is_male`, `email`, `changed`) VALUES (:enlish_sirname, :enlish_firstname, :is_male, :email, :changed);" ); 
    $stmt_dr->bindValue( ":english_sirname", $nnlines[ $rowNo ][ 1 ], PDO::PARAM_STR );
    $stmt_dr->bindValue( ":english_firstname", $nnlines[ $rowNo ][ 2 ], PDO::PARAM_STR );
    
    if ( $nnlines[ $rowNo ][ 3 ] === 'M' ) {
      $sex = 1;
    } else {
      $sex = 0;
    }
    
    $stmt_dr->bindValue( ":is_male", $sex, PDO::PARAM_INT );
    $stmt_dr->bindValue( ":email", $nnlines[ $rowNo ][ 12 ], PDO::PARAM_STR );
    $stmt_dr->bindValue(":changed", date('Y-m-d H:i:s'), PDO::PARAM_STR);
    
    $flag = $stmt_dr->execute();
    
    if ( !$flag ) {
      echo "<h2 style='color:red;'>Error</h2>";
      $infor = $stmt_dr->errorInfo();
      print_r($infor);
      exit( $infor[ 2 ] );
    }
    
  }
}

これがエラーで書き込めません、色々と試みたのがうまく行きませんので、最後に  print_r($infor)の一行を加えて、SQLエラー出力を行いました

そうすると MySQL error code

SQLSTATE[HY093]

というのが出てくるのです これは検索すると パラメータの数が合わないなのですが、目を更にして見てみてもそんな訳はありません しかし、この 10日間の苦難の末ようやく発見しました

 

VALUES (:enlish_sirname, :enlish_firstname, :is_male, :email, :changed)

この部分で english_ とすべきを enlishとしているのですね このためパラメータの数が合わないため SQL errorとなっていたのです なんだかなあ パカみたい 10日間損した気分 でも自分が招いたものだから仕方ありません

本日はこれから 成田空港に向かいます このエラーを解決したのでポスター・セッション部分のプログラム完成できますね

今週はPCIに明け暮れ、そして行者になった

今週は新たな薬剤溶出性ステント治験や、Impellaを用いたCHIPによる治療、そして外来診療に明け暮れました 本当に忙しく自分の残された貴重な人生としての時間をどんどん費やしてしまいました

本当にこんなことでいいのだろうか? さらには MitraClipによる治療、これは大分と早く治療できるようになり、そんなには自分の人生の貴重な時間を費やしてはいませんが、まあTAVIに関しては既に部下に任しても全く問題ありませんので このような時には関わらないようにしていますし

そして昨日金曜日 11/09は伊勢志摩ライブで術者をさせて頂きPCIをまた行ったのです 何時もは土曜日の朝、あるいは金曜日の遅くに松坂に入るのですが、今年は行者としての修行がありましたので、金曜日午後遅めに松坂に入りました

そしてまずは講演を一つ行い、それから実際の症例治療に移りました 意外にもロータプレーターが必要となりましたが、結果的には満足の行く出来で治療が終了したのです この時点で 16:30ぐらいでしたが、すぐに松坂のホテルに向かい夕食を食べてバタンキューでした やはり疲れが溜まっているのですね

しかししかし結局 2:00AMに覚醒して、それからは一睡もできず本日に至ったのです

さて本日は自分の老境に向いつつある肉体を顧みずに無謀にも行者修行に挑んだのです

ここ伊勢にはものすごい昔から修験者が修行を行う聖域としての山があります 本当の意味での山伏が修行に入る山です その山が現在も残っていて、それは麓のお寺により管理されています その寺は 「伊勢山上 飯福田寺」というお寺であり、まだ40歳前後の住職さんが管理されています 飯福田寺というのはなかなか読めないと思いますが、「いぶたじ」と読みます

僕がこの寺と、その修験の場所を知ったのは、やはり伊勢山に当時は存在していた萎びた蕎麦屋さんに行ったからです それは丁度一年前のことでした

それからこの西暦 701年、つまり 1,300年前に開山した修験の山で少しでも修験者、行者に近付こうと、今日この日を一年間待ったのです

疲れていますね

外来患者さんがたくさん来られとても嬉しいのですが、やはりとても疲れます おまけに火曜日はやはり縦に 3例のTAVI、そして 1例の経皮的僧帽弁接合不全修復システム (MitraClip)です

TAVIにより治療した中のお一人の方は正直、「良くぞここまで生き延びられて、TAVIにより治療できたものだ」とも思う方でした これまで僕自身経験した中で最高値の なんとPeak Aortic Pressure Difference > 180 mmHgだったのです 本当に危ないところだったと思います この方もTAVIにより一瞬にして圧較差 0mmHgとなり、安静時にも感じておられた呼吸苦も全く無くなり、合併症無しでもうすぐ退院です TAVIの威力と、その治療に携わり治療できたことにやり甲斐を感じます そしてここ数年のTAVIの進歩、知識の集約、医学という科学の発展、ディバイスの進化、医術の進化、Heart Teamとしての成熟 それら全てが相まって良い結果が出ているのでしょう

それにしても神経を集中するこれらの治療に僕自身の精神が病んでいかないか心配です でも自分としてはとことんやり切るしか仕方ないと思いますね

本日も外来患者さんの診療に一生懸命でした 何年かぶりに僕を目指していらして下さった患者さんも数名おられました 結局本日の千歳行きの便を 16:00羽田発から 18:00羽田発に遅らせ先程泊まり先に到着しました

そして何時ものように 眼の前の MaxValueで夕食を買い込みました 毎度のことですがメニューは一緒ですね カップ麺、カレーパン、そしてウィンナパン これで〆て 202円でした 安いですねえ

夕食

どうりで

先週末より kamakuralive.net, kamakuraheart.orgなどのサーバーに対する作業がすばやく反映されないとか、うまくいかないことが続きました

そして、先週開催した鎌倉ライブデモンストレーション実行委員会での Webを通じたプログラム更新作業が完全に破綻したのです

どうやらローカルでバグをとったプログラムを updateしたにもかかわらず server上では更新されていないことを掴みました しかも、その過程で明確なエラーが表示されなかったのです

訳が分からず色々なテストプログラムを書いてようやく、その原因の少なくとも1つが、Zenlogic側の FTPがうまく動作しないことによると掴みました そして、それを自ら改善してようやく正常なプログラムを uploadすることができるようになったのです そして本日やはりこんなメールが送られてきました

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
【Zenlogic】FTP接続障害発生のお知らせ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━201

ご利用いただいておりますZenlogicホスティングにおいて、先日実施いたしま
したFTPサーバー(ProFTPd)のバージョンアップの影響により、FTP接続ができ
ない事象が発生しております。
                記 

■日時: 2018年10月26日(金) 20時00分頃 ~

 ※時間は24時間表記です。
 ※上記日時から10月28日(日) 06時00分までの間で順次、FTPサーバー
  (ProFTPd)のバージョンアップを実施いたしましたので、発生日時は
  ご利用サーバーによって異なります。

■対象: Zenlogicホスティングをご利用のお客様

■原因: FTPサーバー(ProFTPd)のバージョンアップの影響によって
     サーバー上に設置されているシンボリックリンクが認識されない

■発生している事象:
 接続先ディレクトリを「www」および「ssl」に設定している場合、FTP接続
 ができない(接続先ディレクトリが見えない/エラーが発生する)

 ※WEBサイトの表示やPHP等のプログラムの動作に影響はございません。

もちろん上の表記ではずいぶんとはしょりました 本当に困りました

CCTで日本国内初の経皮的僧帽弁接合不全修復システム(MitraClip)ライブデモンストレーション

本日は日本のインターベンションの歴史の中でも格別な日でした それは仙台厚生病院より神戸の CCT会場に経皮的僧帽弁接合不全修復システム(MitraClip)のはじめての日本国内ライブデモンストレーションが中継されたのです 非常に手際よい治療が行われました

このような機会に座長の一人として立ち会えたのはとても光栄であり嬉しく思いました

さて CCTではすっかり自分自身は冠動脈のspaceから遠ざかってしまいました しかしながら治験関係の集まりがいくつかありなかなか開放されません 本日はまた鎌倉ライブデモンストレーション実行委員会が夜に開催されますので遅くなりそうです

今は空いた時間で鎌倉ライブデモンストレーショントップページ兼内容作成のためのプログラムの手直しをしています まだ頑張らなければ

今日はハードに

本日は縦に三例の経カテーテル的大動脈弁置換術 (TAVI)を行い、その後 縦に一例の経皮的僧帽弁接合不全修復システム (MitraClip)を行いました 開始が 9:30AM過ぎ、先程終了したのが 17:30でした

何れも結果は素晴らしく、ほとんど無しの PVL (Para-Valvular Leak)そして 左室造影で見ても全く検出できない僧帽弁閉鎖不全となりました

いやあ素晴らしい結果です 多分 一つの Hybrid Catheterization Laboratoryで一日縦に 4例の TAVI/Mitraというのは世界最速ではないでしょうか もちろん早ければいい、というものではありませんが、患者さんにとっては早いに越したことはありませんし、合併症の発症率も低下します

もちろんこれは僕自身の力というよりもチームとしての練度が向上していることにより成し遂げられたことだと思います

今週末は CCTが開催され、そこで僕自身は経皮的僧帽弁接合不全修復システム・ライブデモンストレーション・セッションの座長をせねばなりませんが、それに向けて良い ブースターとなりました

寂しい そして 前に向かって

とてもとても寂しいのです 何故かと言えば、あの行きつけの安らぎの場所「ブックスペース栄和堂」がこの 10月26日より閉店するのです

僕にはこの安らぎのスペースで MacBook Proをひろげて コーヒーとサンドイッチを食べながら Web系のプログラムを書くのが開放された時間だったのです 電源は完備され、また Wi-Fiも飛んでいて しかも雑踏がなく静かに時間を過ごし、色々なことに思いを馳せることができました

最後に先日の日曜日 10/21に訪れました 初めて開店前の 12:00少し前に店に入り、そこから 4.5時間時間を過ごしました 「きっと最後だからたくさんのお客さんで一杯だろう」と思っていたのですが意外にも僕をその 4時間あまりの時間帯には僕を含めて 10名未満のお客さんしかいませんでした

でもお陰様で http://www.kamakuralive.net/ のプログラムはずいぶんと改良され洗練された趣になった(と、勝手に自画自賛している)のです

そして昨日 10月 22日は Chicagoより Tony先生をお招きし、CTO (慢性完全閉塞)に対する経皮的冠動脈インターベンションを合計 4例 + 通常PCI 1例したのです 正直自分の経皮的冠動脈インターベンション体力が以前より絞られてきていますのでCTOを 4例立て続けに治療するのはとても辛いのです

それでも昨日は違いましたねえ 往年の最盛期の僕が戻りましたねえ ワイヤー選択、戦略全てがバッチリでしたし、何より微妙で大胆なテクニックも健在でした

一例が Tonyより proctoringされた ADR (Antegrade Dissection Re-entry; 経順行性乖離腔再疎通)テクニックに関しては正直「邪道」と思っていましたが、実際にやってみるとなかなか面白いし、そのテクニックの中に色々な Tipsがあると感じました

何れにしても新しいことを取り入れようという自分自身の姿勢には我ながら感心しましたよ これが前に向かって ということでした

それぞれにとっての年月

自分も歳をとってきました 思えば、小学生の頃は一日がとても長く「早く明日になあれ」と毎日思っていました 明日になればまた皆の楽しく遊べるし、ご馳走も食べることができるかも知れない そんな期待で時間の流れが何時も遅く感じていました

しかし、この歳になり今はどうでしょうか? 今は、あっと今に一日が過ぎて行きます 結局自分の頭の中で「これぐらいはできる」とか思っていても、実は体力とか智力とかあるいは運気でしょうか 何しろ色々なことが自分のイメージと乖離して、その結果思っていたようにはできていない だから同じことをしながらすぐに明日になってしまう イメージの中では時間は同一に流れていても行った実績としては時間はあって言う間に過ぎていくのです

うーんバリバリで強気に満ちいた 30歳から 40歳ではどうでしょうか? あの頃は「これからの10年間 とっても長い時間が自分にはある どんなにか自分が色々なことを楽しみ、また進化していくのか」そんな期待に満ち溢れていましたよね

でも今となっては、「あと10年? そんな時間自分に残されているのかな?」そんなことを考えてしまいます

実際ある年齢の人の平均余命はプログラマの視点から言えば、これまでの生命予後の積み重ねと理論的考察から年齢を変数とした関数として定義可能な筈です 実際に同様の視点は確率されていて厚生労働省の Home Pageにも見ることができます

これによれば以下のような簡単な式で表されるようですね

平均余命計算式

ところが、この式、ぱっと見れば「おっ 自然対数の底が出てきている なんか科学という匂いがするなあ」と思いませんか?

違うのです 単に eというのは記号に過ぎず、自然対数の底 いわゆるネイピア数とは全く関係ありません 何か当たり前のことしか行っていません 要するに 「ある年齢 x歳の人々の平均余命」 = 「その集団の中で x歳以上の人々の人口 = 定常人口」を「その集団の x歳に達している人口」で割ったものに等しい と述べているのです 何だかこれってあまりおもしろくないですね そりゃあそれにより x歳の人が平均的に何年間生きることができるのか? という問いに答えることはできるでしょうか・・・ うーん 面白くない それにどうも本当にこれであっているのでしょうか? だって「人数」を「人数」で割れば、単位は消失してしまい、どうしたって「年」は出てきません ちなみにこのページでは実際に平均余命を計算しています ここの「平均余命の定義」は解りやすく 以下のようになっています

平均余命の定義を最初に説明します。まず、平均余命は年齢ごとに定まります。x歳の平均余命とは、現在x歳の人が平均してあと何年生きるかを表す数値です。平均と言いましたが、数学的に言うと期待値というものです。

このページで解説されている平均余命の計算は結構ややこしいですね 時間のある方はやって下さい

ところで何でこんなこと考えているか? と言えば 例えば、自分は経皮的冠動脈インターベンションの術者であり、冠動脈領域で治療をすることを天職の一つとしているのですが、こんなことを悩みました 「40歳の患者さんが左冠動脈主幹部を含む重症三枝病変であり、諸事情により冠動脈バイパス手術が困難で危険である時」このような時にも、もちろん患者さんのリスクは賭けるのですが、それだけか自分の医者としての自分の人生全体を賭けたリスクも取ることになるのですが、その時に「この治療で後何年間をその患者さんの人生にもたらすことができるだろうか?」 そんなことも考えます そして、「まだまだこの患者さんは少なくとも平均余命までの時間を得る権利がある」 そんなことも考えます 考えるだけでなく自分の心にとって大きな圧力となります

これが ご高齢の患者さんであれば、どうでしょうか? きっと自分は「今ここで亡くなられるようなリスクは犯したくない、そのかわりあと数年でも長く楽に人生を送って欲しい」と考えます

そして考えました、経カテーテル的大動脈弁置換術(TAVI)の場合にはどうだろうか? TAVIにおいてはこの数年間いや1 – 2年間でけでもディバイスの改良、医学としての知識の蓄積の増大、それぞれの経験の増大に伴い、著しく手技に伴うリスクが減ってきました そして、今や全世界的にも外科的大動脈弁置換術のりクスが低い患者さんに対してもTAVIを行う方向に向かっています その結果TAVIの世界で起きていることは、明らかに適応拡大なのです 適応拡大の中にはこれまでは 80歳以上の方々を対象としてきたTAVIですが、次第により年齢の低い方々も対象とするようになってきました この流れの中でこれまでの議論に立ち戻れば、少なくとも術者としての自分から見れば、TAVIという治療の後に与えられる時間が長くなってきているので、結果的に よりゆっくりとした時の流れが残される、そのようにも解釈できます

何れにしても時間に対する感覚は絶対的なものと信じがちですが、実は相対的なものなのです 大切なことは、そのような自分の見方により変化する時の重みに対して常に時間の流れを大切に考えることかも知れません

睡眠不足

最近極度の睡眠障害に陥っています 意識が興奮状態にある、というかそんなことはなく常に眠たい ひょっとした時にコトっと眠りに陥ることも可能です そんなこと言えばまるで睡眠時無呼吸症候群(SAS)ですね

いや実はそうではなく、色々なことに常に頭をとられ、あれをせねば これをせねば、とか 色々な「あの時ああすれば良かったのでは?」とか。過去に対する後悔と反省 「自分は何をやっているのだろうか」「このまま自分はどうなるのだろうか」とかいう不安

これらの心の暗闇が睡眠を押しつぶし、その圧力の中で覚醒してしまうのです 決まってその直前には夢、決して悪夢ではないのですが、夢を見ています

何時からこんな状態に陥ったのでしょうか? もう数ヶ月あるいは一年二年かも知れません

今朝は仕事で何時もより一時感早起きし、今 新幹線で関西に向かっています きっと午前中で仕事が終わり、その後また鎌倉に戻ります 途中の新幹線で眠れるか?

ストレス? 乗り越える歓び? それとも

そりゃあまあ僕ほど公開の人前でしかも世界中で困難な症例の経皮的冠動脈インターベンションを行い、その多くを成功に導いてきた人間はいませんよ

それは断言します だって実際にこの世界に飛び込んでから既に 37年間もどっぷりです こんなに長くこの魑魅魍魎とした世界で生き延びている人間はいないのです

つい先日もあるアメリカ人の Cardiovascular Interventionalistからメールをいただきました 「友よ、長い友よ、自分はこの世界から抜ける、そしてあるメーカーの幹部になる、それでも友情は変わらないでいて欲しい」という内容でした

もちろん僕の返事は “Absolutely, you are my friend forever.”というニュアンスのものでした

翻って自分には才能が無いためか、この世界で蠢いていることが人生なのです

その反動で今でも色々なところから「これは不可能でしょ」などと思えるCDが送られてきます それはストレスです でも それを乗り越えて行く時の歓びというのは魅力的です うーん これって中毒的自虐的嗜好ですねえ

と言いながら 既に心はプログラミングの世界に ではバイバイ