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

昨日夕方の便で千歳に飛びました 札幌東徳洲会病院に到着したのは 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第一症例

ヘトヘトに疲れ切り

昨日は結局 19:00まで皆で反省会をしました でも、今回のTokyoValves 2018の成功に皆満足でした

自宅に戻るともう 21:00近くです 疲れましたね

さて、コユンババです この曲は凄いです そしてこの演奏も凄いです 是非とも見て下さい 場所はスベインの古都ブルゴスという街の居酒屋でのことです 僕もその内一度行ってみたいものです

あいかわらず無茶苦茶忙しい

この二週間ばかり無茶苦茶忙しく、何時の間にか4月にならんとしていますね

そもそも何でかと言いますと、まずは 3/22から/24と中国上海から自動車で1.5から2時間の蘇州 (中国語では SuZhou)で開催された CIT (China Interventional Therapeutics)という中国最大のインタベ系の学会に相変わらず招聘されていたからです この学会には日本人もかなり参加し、総参加者数は 10,000人にはなると思われる学会です それよりも何よりもその発表の内容レベルが非常に高く、日本循環器学会を完全に追い抜いている気がするのです もちろん CVITもです

もう今さらこの事態に危機感を感じることは失せてしまいました

そして、/24これは土曜日ですが、上海から関西空港に飛び、そのまま大阪宿泊し、翌日日曜日は 6:00AMよりある会合に参加というか主催し、 8:00AMより 日本循環器学会正式プログラムで座長、そして引き続いて Late Breaking Clinical Trialで MitraClipの一年成績を発表し、引き続いて Luncheon Seminarで MitraClipの講演をして、その後 Press Conferenceに出席し、ようやく鎌倉に戻りました

もうこの時点でクタクタです そして、3月29日は夜東京に移動、しかもこれは札幌東徳洲会病院より一旦鎌倉に戻った後、出発したのです 東京のホテルで打ち合わせ後、休み、30日金曜日は 9:00AMより東京駅八重洲南口のJP Towerで TokyoValves 2018の Preparatory Meetingを 13:00までぶっ通しで行い、いよいよ 14:00より TokyoValves 2018が開始されました そこでももちろん主催者として Rolesがあり、そして本日 3月の最後の日には 8:30に JP Towerに行き、本日と明日の Rolesに uploadを行い、いよいよ 9:15AMより本会が開始となりました そして、今までぶっ通しで dutiesの連続 ようやくホテルの部屋で休んでいます

しかし、これから Faculty Dinnerのため再び出かけねばなりません

明日も早朝より夜までびっしりと仕事があります 本当に日曜日も何もありません 疲れますね クタクタです ろくにプログラムにもとりかかれません

SELECTで選択した列数を PDOで PHPに渡すには

これはしばしば行う間違いなのですが、気が付かないと結構しつこいバグの原因となりますね

$sql = "SELECT COUNT(*) FROM `dr_tbl` WHERE `email` = :email AND `conf_id` = :conf_id;";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":email", $_SESSION['email'], PDO::PARAM_STR);
$stmt->bindValue(":conf_id", $_SESSION['conf_id'], PDO::PARAM_INT);
$stmt->execute();
    //$rowCount = $stmt->rowCount();
    //echo 'Executed!'.$rowCount.'<br>';
if ($stmt->fetchColumn() > 0) {	// 既に登録されているので弾く
        // この時 fetchColumn()が戻す値は SQL文で得られた count(*)ということになります
        // この結果 SELECT文から正しい件数を知ることができます

 

二日間バグで苦しみ

どうにも納得行かなかったのです それは、http://www.tri-international.orgのサイトをサーバー移行した時に始まったのです

そもそもこちらの都合でサーバー移行したのではありません サーバー運営会社の意向に沿って移行したのです これまでずっと使用してきた Rental Serverは FirstServerだったのですが、それが時代の移り変わりと共に、Zenlogicという次世代のサーバー環境になったのです 正直僕はここら Cloudとか詳しくないので何が違うのか良く分かりません

この移行の時に、これまでの全データも移行したのですが、問題は MySQL Database Server Dataだったのです これも移行したのですが、それと共に phpMyadminという MySQLサーバーデータ管理の秀逸のソフトがそのままでは作動しなくなり、改めてインストール必要でした そしてこの時に、port 3307にインストールされたのです これが問題だったのです

そもそも現在はMySQL5.1が port 3307で作動し、MySQL5.0が port 3306で作動している、という変な状況が続いているのです だいたい port番号なんて普段意識せずに使っているのですよっ

そしてサーバー移行前のデータは MySQL5.0から MySQL5.1に自動的にコピーされ、一見すると同じデータが2つの DB serverにあるのです

さて、PHPプログラムでは Internetアクセスした時には、

$db_host = '127.0.0.1';
//$db_port = '3307';//コメントアウトしているので port3306のまま
$db_user = '**A';
$db_password = '**B';

という風に 普段は port 3306の MySQL databaseに接続しているのです しかし管理ソフトの phpMyadminは port 3307で接続していたのです 当初は同じDBがコピーされていたので、phpMyadminでいくらデータをいらっても これは 3307接続ですから、PHP programからはその変更は見えません

結果的にわけのわからないことになってしまったのです この portの問題に気づくまでには丸一日かかりました そして現在は $db_port = ‘3307’; この一文を活かしているので、全てが port 3307で作動している MySQLでプログラム全体が動いているのです

いやあこのバグは判明にずいぶんかかりました しかし、僕の頭脳が未だ明晰であることが証明されてある意味嬉しいですね