大雪の中

昨日はたくさんお仕事しましたが、午後から大雪 そんな中 夜は長谷に食事に行ったのです 大雪の中タクシーもつかまらず、それでも何とかたどり着けたのです

しかし、問題はその後です タクシー何かもちろんつかまりませんし、呼んでも応答はありません それで決意の上歩くことに決めたのです Google Mapでは徒歩46分と出ていましたが、これはもちろん雪の無い時の話でしょう

結局歩いて帰宅するのに1時間かかったのです

そして今朝出勤も歩いてです これも何時もより時間がかかり 50分間でした 激しい運動でしたね

雪の西安 ホテルの一室で

今 12年ぶりに西安にいます 前回西安を訪問したのは何と 2006年でした その時、西安城都の城壁をレンタ・サイクルで一周したのはとても良い思い出です

さて、西安に飛ぶ飛行機の中で、RAP and BEAT II試験の e-CRFプログラムを作成していましたが、もちろん以前行った RAP and BEAT試験のプログラムを改変しているのです

その過程で訳の分からないエラーに悩まされていました 突然ページが真っ白けになりプログラムが停止するのです 明らかに php programのエラーです 当初は SQLのエラーかと思いそちらをまずデバグしたのですが SQLではなさそうでした

そしてついに先程原因究明しました それは何と

split

(PHP 4, PHP 5)

split正規表現により文字列を分割し、配列に格納する

説明

array split ( string $pattern , string $string [, int $limit = -1 ] )

string を、正規表現によって配列に分割します。

警告

この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。

 だったのです、そう preg_split関数に置換することにより解決しました 丸一日原因究明に使用しました

あけましてお目出度うございます

2018年新年最初の up ですね

昨日3日夕方の飛行機で札幌に入りました 本日から早速TAVIとなります この間、RAP and BEAT II臨床試験のためのデータベースを作成していました もっとも、2年前に行った RAP and BEAT国際臨床試験のデータベースを改変するだけですので、それほどの工程になるとは見込んでいません どうせならば、この2年間の Web技術の変化に併せて、Bootstrap4.0や jQuery3.0を取り込みたいと思うのですが、ここいらへんはテストせねば何とも言えませんね

まずは DDL (Data Definition Language)でデータ構造を見直しました とりあえずここまで見直しました

 ###############################################################################################
 ### SQL for RAP and BEAT II Trial Version 1.0  
 ### Based on this DDL, the program is constructed.
 ### Programmed by Shigeru SAITO, MD, FACC, FSCAI, FJCC
 ### on January 4th, 2018.
 ###############################################################################################

CREATE TABLE IF NOT EXISTS `hp_tbls` (
	`id` INT( 11 ) NOT NULL AUTO_INCREMENT,
	`hp_name` VARCHAR( 128 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
	`hp_login_name` VARCHAR( 32 ) UNIQUE NOT NULL DEFAULT '',
	`hp_pwd` VARCHAR( 32 ) NOT NULL DEFAULT '',
	`hp_dr_email_in_charge` VARCHAR( 128 ) NOT NULL DEFAULT '',
	`hp_address` VARCHAR( 256 )CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
	`is_active_hp` BOOLEAN NOT NULL DEFAULT '0',
	`is_usable_hp` BOOLEAN NOT NULL DEFAULT '1',
	`is_deleted_hp` BOOLEAN NOT NULL DEFAULT '0',
	`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 */
	`random_index` INT( 11 ) NOT NULL DEFAULT '0',
	`is_created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
	PRIMARY KEY (`id`),
	UNIQUE(`hp_name`)
) 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,
	`sirname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
	`firstname` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',	
	`is_male` BOOLEAN NOT NULL DEFAULT '1',
	`birth_year` DATE NOT NULL DEFAULT '0000-00-00',
	`hp_tbl_id` INT( 11 ) NOT NULL DEFAULT '0',
	`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 '',
	`created` DATE NOT NULL DEFAULT '0000-00-00 00:00:00',
	`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',
	`is_pi` BOOLEAN NOT NULL DEFAULT '0',
	`is_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 `pt_tbls` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `hp_tbl_id` INT(11) NOT NULL DEFAULT '0',
  `registration_dr_id` INT(11) NOT NULL DEFAULT '0',
  `registration_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `arbitrary_id` VARCHAR(20) NOT NULL DEFAULT '',
  `is_consent` BOOLEAN NOT NULL DEFAULT '0',
  `consent_date` DATE NOT NULL DEFAULT '0000-00-00',
  `is_dra` BOOLEAN NOT NULL DEFAULT '0',		/* 0: ConventionalRadial Approach */
  														/* 1: Distal Radial Approach */
  ###############################################################################################
  ######################### Beginnin of Screen (1) Case Registration #########################
  ###############################################################################################
  `age` INT(3) NOT NULL DEFAULT '0',					/* Age in year */
  `is_male` TINYINT(1) NOT NULL DEFAULT '1',			/* 0: female, 1: male */
  `bh` INT(3) NOT NULL DEFAULT '0',						/* body height in CM */
  `bw` FLOAT(4,1) NOT NULL DEFAULT '0',					/* body weight in Kg */
  `is_dm` BOOLEAN NOT NULL DEFAULT '0',				/* 0: no diabetes, 1: NIDDM, 2: IDDM */
  `is_ht` BOOLEAN NOT NULL DEFAULT '0',				/* 0: not hypertensive, 1: hypertensive */
  `is_hl` BOOLEAN NOT NULL DEFAULT '0',				/* 0: not dyslipidemic, 1: dyslipidemic */
  `is_hu` BOOLEAN NOT NULL DEFAULT '0',				/* 0: not hyperuricemic, 1: hyperuricemic */
  `is_sm` BOOLEAN NOT NULL DEFAULT '0',				/* 0: not smoker at all, 1: Ex-smoker, 2: Current Smoker */
  `is_fhx` BOOLEAN NOT NULL DEFAULT '0',				/* 0: no family history of ischemic heart disease, 1: positive family history of IHD */
  `ckd` INT(2) NOT NULL DEFAULT '0',				/* 0: no CKD, 1: Stage I Protein+ GFR>=90, 2: Stage II Protein+ GFR>=60 */
  														/* 3: Stage III GFR>=30, 4: Stage IV GFR>=15, 5: Stage V Renal Failure */
  `is_cva` BOOLEAN NOT NULL DEFAULT '0',				/* 0: no CerebroVascular Accident, 1: CVA+ */
  `is_pad` BOOLEAN NOT NULL DEFAULT '0',				/* 0: no Peripheral Vascular Disease, 1: PAD+ */
  `hx_of_omi` BOOLEAN NOT NULL DEFAULT '0',			/* 0: no history of previous old myocardial infarction, 1: history of OMI+ */
  `hx_of_pci` BOOLEAN NOT NULL DEFAULT '0',			/* 0: no history of previous PCI, 1: history of PCI+ */
  `hx_of_cabg` BOOLEAN NOT NULL DEFAULT '0',			/* 0: no history of previous coronary bypass surgery, 1: history of CABG+ */
  `hx_of_heart_d` BOOLEAN NOT NULL DEFAULT '0',		/* 0: no history of any heart disease, 1: history of any heart disease+ */
  `comorbidity` TEXT NOT NULL,							/* Any free TEXT */
  `is_scr1_complete` BOOLEAN NOT NULL DEFAULT '0',	/* Screen (1) is alredy registered? 0: not, 1: finished */
  ###############################################################################################
  ######################### Beginnin of Screen (2) Lab_Cathe #########################
  ###############################################################################################
  `rbc` INT(3) NOT NULL DEFAULT '0',					/* RBC x 10^4 */
  `hb` FLOAT(3,1) NOT NULL DEFAULT '0.0',				/* Hemoglobin g/dl */
  `pl` FLOAT(4,1) NOT NULL DEFAULT '0.0',				/* Platelet x 10^4 */
  `cre` FLOAT(3,1) NOT NULL DEFAULT '0.0',				/* Creatinine mg/dl */
  `is_aspirin` BOOLEAN NOT NULL DEFAULT '1',			/* 0: no aspirin, 1: with aspirin */
  `is_thieno` BOOLEAN NOT NULL DEFAULT '1',			/* 0: no thienopyridine, 1: with */
  `is_p2y12` BOOLEAN NOT NULL DEFAULT '0',			/* 0: no p2y12 inhibitor, 1: with */
  `is_warfalin` BOOLEAN NOT NULL DEFAULT '0',		/* 0: no worfalin, 1: with */
  `is_heparin` BOOLEAN NOT NULL DEFAULT '1',			/* 0: no heparin, 1: with heparin */
  `is_2b3a` BOOLEAN NOT NULL DEFAULT '0',			/* 0: no IIb/IIIa antagnonist, 1: with IIb/IIIa antagnonist */
  `biggest_cath_size` TINYINT(1) NOT NULL DEFAULT '0',	/* 1: 4Fr, 2: 5Fr, 3: 6Fr */
  `is_pci` BOOLEAN NOT NULL DEFAULT '0',				/* 0: diagnostic only, 1: going to PCI */
  `assigned_artery_success` BOOLEAN NOT NULL DEFAULT '0', /* 0: success, 1: failed */
  `final_access_artery` TINYINT(1) NOT NULL DEFAULT '0',	/* 0: right CRA, 1: right DRA, 2: left CRA, 3: left DRA, 4: extra-radial */
  `is_prev_puncture` BOOLEAN NOT NULL DEFAULT '0',	/* 0: no previous puncture of the final access side radial argery */
  														/* 1: previous history of puncture */
  `hitting_ra_times` INT(2) NOT NULL DEFAULT '1',			/* How many hitting of radial artery to successful cannulation */
  														/* 10: failed puncture */
  `spasm` BOOLEAN NOT NULL DEFAULT '0',				/* Spasm during whole procedure 0: nothing, 1: any spasm */
  `arterial_cannulation_time` INT(3) NOT NULL DEFAULT '0',			/* Local to successful arterial cannulation in minutes */
  `proc_time` INT(3) NOT NULL DEFAULT '0',				/* Total procedure time in minutes */
  `radiation` INT(4) NOT NULL DEFAULT '0',				/* Total radiation dose in mGy */
  `contrast` INT(4) NOT NULL DEFAULT '0',				/* Total contrast dye volume in ml */
  `puncture_pain` INT (2) NOT NULL DEFAULT '0',					/* Pain score between 0 and 3, none, slight, much, extreme */
  `is_scr2_complete` BOOLEAN NOT NULL DEFAULT '0',	/* Screen (2) is alredy registered? 0: not, 1: finished */
  ###############################################################################################
  ######################### Beginnin of Screen (3) Outcomes #########################
  ###############################################################################################
  `hemostasis_pain` INT (2) NOT NULL DEFAULT '0',					/* Pain score between 0 and 3, none, slight, much, extreme */
  `to_hemostasis_minutes` INT( 3 ) NOT NULL DEFAULT '0',	/* hemostasis time in minutes to final hemostasis */
  `rao_discharge` BOOLEAN NOT NULL DEFAULT '0',		/* Radial Artery Occlusion at discharge 0: patent, 1: occluded */
  `barc_bleeding` INT(2) NOT NULL DEFAULT '0',		/* Puncture Site Bleeding at dischage */
  														/* 0: type 0, 1: type 1, 2: type 2, 3: type 3a, 4: type 3b, 5 type 3c, 6: type 4, 7: type 5a, 8: type 5b */ 
  `pro_succ` BOOLEAN NOT NULL DEFAULT '1',			/* Procedure Success of Index Procedure (PCI or CAG) 0: failed, 1: succeeded */
  `hand_function` INT(2) NOT NULL DEFAULT '0',	/* 0: no disability, 1: minor disability, 2: moderate disability, 3: need help */
  `any_comment` TEXT NOT NULL, 								/* Any TEXT message */
  `is_anomaly` BOOLEAN NOT NULL DEFAULT '0',	/* if radial artery has anomaly or narrowing, set to 1 */
  `anomaly_comment` TEXT NOT NULL, 		/* describe anomaly */
  `is_scr3_complete` BOOLEAN NOT NULL DEFAULT '0' ,	/* Screen (3) is alredy registered? 0: not, 1: finished */
  ###############################################################################################
  ######################### End of Screen (3) of Case Registration #########################
  ###############################################################################################
  `is_deleted` BOOLEAN NOT NULL DEFAULT '0',
  `is_finalized` BOOLEAN NOT NULL DEFAULT '0',
  `finalized_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `last_access_dr` INT(11) NOT NULL DEFAULT '0',
  `finalized_dr`  INT(11) NOT NULL DEFAULT '0',
  `is_created` 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`),
  UNIQUE(`arbitrary_id`),
  KEY `hp_tbl_id` (`hp_tbl_id`),
  KEY `registration_dr_id` (`registration_dr_id`),
  INDEX (`last_access_dr`),
  INDEX (`arbitrary_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;

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

CREATE TABLE IF NOT EXISTS `random_tbls` (
	`id` INT( 11 ) NOT NULL AUTO_INCREMENT,
	`dra_or_cra` TINYINT( 1 ) NOT NULL DEFAULT '0',		/* 0: randomized to DRA, 1: randomized to CRA */
	PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

これからプログラムの修正にとりかかります

もう既に 12月30日

あっという間に一年間が過ぎて行きます 気がつけば 12月の30日 朝出勤の自転車から見る風景は閑散として人気のあまり無い道路でした

そうですよねえ、巷では既に数日前より年始年末休暇に入っているのでしょう しかし、当院は毎年の如く本日も平常通りの出勤です これって最近社会的に問題となっている「働き方」という観点からは良いとは思えませんね 結果的に職員の家庭や人生が制限されていることになります

とは言っても医療の現場ではまだまだ職員による犠牲の上で成り立っている部分が大きく、テレビや新聞での議論で描かれている理想の医療現場なんて幻想です もっとも官立施設ではそうですないかも知れませんね しかし、そこでは理想の現場を実現するために多額の税金が投入されているのでしょう

まあ愚痴を言うということは歳を取ってきたということの証です ココらへんで止めましょう 本日は午後にでも若い先生方と少し話をしましょう そして明日は大晦日ですね

皆様方 今年一年大変お世話になりました 僕は何とかこの一年間を生き抜くことができました よろしければ新年一年間も同様にお願いします

苦労した甲斐があります

昨日はから本日と雪のためバタバタでしたが、それでも苦労した甲斐はあったようです

本日は医学的理由から三例全例とも自己拡張型ディバイスによるTAVIでしたし、しかも二例は alternative approachによるものでした なかなか難しい症例でしたが、全例素晴らしいできで終了しました 雪の中飛行機の便変更で僕はもちろんのこと鎌倉や札幌のスタッフが振り回されましたが それでもこのような結果であり良かったと思います

今現在 ANA Chitose Loungeで 18:30発の便を待っています この便も5分遅れとの報ですが、まあ飛ぶだけマシですかね

昨日は散々な目に

12/25月曜日は午後無事飛行機が飛び、羽田に戻ることができました 12/26火曜日朝一番から非常に難しいTAVI治療をさせて頂きました ずっとずっと鎌倉の外来や入院でこれまで15年間以上に渡って診療させて頂いてきた患者さんです

色々な病気が背景にあり、ご高齢でもあり、TAVIという治療そのものが非常なリスクを伴います 医師としてTAVIを行うべきか、このまま自然経過に任せるべきか 非常に悩みどころです しかし、最終的にはTAVIにより治療を行わせて頂きました 途中色々な悪魔の洞穴とでも言うべき事態がありましたが、最終的に無事乗り切ることができました

12/27水曜日は朝からずっと外来診療 年末は皆さん方駆け込みもあり患者さんがたくさんになります そして複雑な問題をそれぞれの患者さんが抱えておられ、外来診療も簡単には済みません

そうこうしている内に、木曜日には飛行機で羽田からの便が一杯であるとの情報があり、急遽水曜日夜の便で札幌に入ることにしました 実はこの日は鎌倉で循環器内科関連の忘年会でしたが、それへの出席はキャンセルしました ようやく 20:55羽田発の便をとることができ、羽田空港には 20:00には到着したのですが、何と飛行機出発が 21:40に遅れる、との連絡あり、結局さらに飛行機は遅れ、千歳空港に着陸したのが 23:30でした

結果的に 12/28木曜日 0:30AMに宿にたどり着いたのです そして本日は朝から札幌東徳洲会病院でTAVI三例です これまで色々な思いをかけながらTAVIを推進してきました 今年は本当に大変で色々と考えさせられる年でしたねえ

そうそう一つ忘れない内に、bootstrap4をインストールする方法の中で今一番簡単だと思っている方法

まずインストールする folderに移動する
そこでコマンドラインから

$npm install bootstrap@v4.0.0-beta.2

これを行うだけです もちろん前提としては node.jsがインストールされ、node package manager (npm)が作動することです

本日は

本日月曜日 昨日クリスマス・イブというのに一人で夜札幌に入りました 道は雨のために雪が溶け、はなはだ危ない

夜遅くにこの滑りそうな道を歩けば危険と考え、歩いて一分のラーメン屋さんに入り 魚介系スープ味噌ラーメンというのを食べました その後道路を渡って MaxValueで買い物しようかとも思ったのですが、道をクロスすることが危険と考えそれもやめ、そのまま部屋に入りました

部屋に入ればやることもなく、

$code ~/.bash_profile

として、VisualStudio Codeという Microsoftが OpenSourceで出している近頃僕のお気に入りの 高機能text editorを立ち上げ、.bash_profileを少し整理しました

そして、その後 眠りに落ちました

本日は 7:00AMに札幌東徳洲会病院心臓センターに出勤し、TAVI患者さんのCT dataの解読を行い、そして本日は一人超重症の患者さんのTAVIが臨時であります そのために雪のリスクを賭けて札幌に入りました

ところで、本日午後の便で戻る予定なのですが、天気予報によれば午後から大荒れとなりそうです 間に合うでしょうか?

実はこんなことも知らなかった

金曜日にはこれから始まる globalの薬剤溶出性ステント臨床試験および日本国内治験の Kick Off Meetingが品川で開催されました この師走の忙しい中、日本国内15施設よりお集まり頂き、無事会が終了しました 僕は例によってこの治験の日本国内PIでしたので、色々と準備が必要でした

そして、昨日土曜日は久しぶりに丸一日ゆっくりと過ごし、例によって「ブックスペース栄和堂」で一人コーヒーを飲みながらプログラミングの構想を練っていたのです いや実は node.jsと npmのインストールをしていたのです

そしてその続きを今日も行い、無事 node.jsと npmの最新版がインストールされたことを確認しました

しかし、その過程で いちいち $source ~/.bashrc をしなければ最新版がインストールされないことに気づきました

それで、.bashrc と、.bash_profileについて調べたところ、どうやらログインの時に、.bash_profileが読み込まれ、その上でターミナルを開いた時に、それぞれ .bashrcが読み込まれることが分かりました そこで、.bash_profileで source ~/.bashrcを行えば、目的が達せられることも知りました

何だかここいらへん常識なのでしょうが知りませんでした

ところで、今現在は既に 千歳から札幌東徳洲会病院心臓センターに移動中です 驚くべきことに千歳は雨であり、雪が溶けています 明日の朝はガチガチに凍りつき危ないですね