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

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

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

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

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

cssを用いて formを横並びで表示するには?

<form></form>は基本的に縦にしか並びません 何というのでしょうか ブロック要素と呼ぶのでしょうか

これを cssを用いて横並びに表示するのはどうすれば良いか、色々と検索したところここにヒットしました ありがたいことです それで早速用いました こんな感じです

<div style="display:inline-flex;">
  <form method="post" action="action1.php" class="form-inline text-left" style="margin-right: 0.3em;">
    <button type="submit" class="btn btn-sm" name="session" value="<?= $row['id'] ?>">Chair追加</button>
    <input type="hidden" name="role_kind" value="1"/>
    <input type="hidden" name="sessionNo" value="<?= _Q($row['sessionNo']); ?>"/>
  </form>
  <form method="post" action="action2.php" class="form-inline text-left">
    <button type="submit" class="btn btn-sm" name="session" value="<?= $row['id'] ?>">Chair追加 (Role数)</button>
    <input type="hidden" name="role_kind" value="1"/>
    <input type="hidden" name="sessionNo" value="<?= _Q($row['sessionNo']); ?>"/>
  </form>
</div>

これによりこんなふうに表示されて、2つのボタンが並びます

formを横並び表示する

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

とてもとても寂しいのです 何故かと言えば、あの行きつけの安らぎの場所「ブックスペース栄和堂」がこの 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があると感じました

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

今日は数ヶ月ぶりの日曜日

いやあ久しぶりにゆっくりと休んでいます 本当に何ヶ月間も休みが無かったのです そんな中今日は朝からゆっくりと日曜日です 「日曜日には何をするか?」ですか、決まっています ネットで本日休店でないことを確認して、自宅近くの「ブックスペース栄和堂」にいるのです

残念ながらこの店は 10月25日をもって閉店するそうです なんでも大家さんが建て替えを決定したとのことです まあそうは言いましても目の前には広大な JR大船工場跡地が広がり、そこは未だ原っぱのままです 数年内に鎌倉市役所などの公共施設と何処かの大学が移転してきて、近くには JRの新駅もできるという噂です そうなれば、この地域は鎌倉で一番地価も上昇する土地となるでしょう そんな予測もあって立ち退きになるのかも知れません そらには目の前のボーリング場も先日の台風に被害を受け、台風の後は営業を中断しているとのことでした ここも立ち退きになるのかも知れませんね 時代はどんどん変わっていきますね

そうそうそして今日はその栄和堂で 12:30より籠もっているのです 例によってプログラミングをしながら本(Kindle)を呼んだり僕の大好きな「まったりとした」時間を過ごしています 今読みかじっている本はこれです

はじめてのLISP関数型プログラミング

LISPというコンピューター言語はほとんど FORTRANに次ぐ古くから開発された言語です しかし、その独特の表現 – カッコの羅列 のためになかなか素人には馴染みがないもので、僕にとっても例外ではありませんでした

しかし、LISPは古くから純粋関数を用いた関数型プログラミングを提唱し、その流れをいくつかの言語、特に現代の Web開発では必須の言語である Javascriptにもその系譜がつながっているのです

関数型ブログラミングの中で特徴的なのは Closureやらラムダ計算 (λ計算)、あるいは無名関数というもの、そして方法論としての monadoとかいう言葉です これらを知っているか知らないでいるか、そこには多分 ずっと日本国内にとどまっているか あるいは外国を渡り歩いているか それぐらいの違いがあるのです

もっともこの本の中のある一文を引用すると「しかしラムダ計算を知っていることで見栄を張ることはもちろん、関数型プログラミングの本質に迫れます。」ということも事実なのです 少なくとも僕は見栄を張りたいですねっ

いるかの棲む闇

本日は前から楽しみにしていた あの HorliX開発者の Air様と 7:30AMより病院でお会いしました この才能豊かな天才的 Software (+ Hardware) Engineerとは以前、僕のブログに掲載していた DICOM Viewerの C++で書いた Windows用プログラムを見つけられ、それで継がりができたのです

前からお会いしたいと思っていたのですが、なかなか僕も時間がとれずついに本日となりました

実際のAir様とお会いしました!! (わざと顔はぼかしてあります)

お会いして色々なお話をしました 技術的レベルは彼がエベレストの頂点近くにいるとすれば、僕はようやく鎌倉の六国見山頂上ぐらいにいるレベルでしょう それほどに知識、経験、頭脳、根性、反骨心 それら皆が数段上なのです 何しろ僕は自分のことを「壮年は過ぎたアマチュア・プログラマ」と謳っているぐらいですから・・・

まずはご出身について伺いました 何と彼は新潟県のご出身でその後、筑波大学理工学部物理学科を出られたそうです この時点で既に物理学、特に電磁力学などの素養と、プログラミングの素養、そしてハードウェアを操る素養を身につけられたようです そして卒業後は技術系会社に就職され、そこで実地での開発仕事を行われ、そこでも高度なプログラミング能力を否が応でも披露することになったようです そしてその頃より当時日本国政府が音頭を取り、某国立大学の当時教授が旗印となり鳴り物入りで立ち上げた「日本国統一電子カルテ構想」にも関わるようになったようです そう あの「開いたイルカ」プロジェクトです 僕が勝手に描いている物語かもですね

そうそうご存知無い方も、「開いたイルカ」を英語に置き換えたものを検索すればこれが何かはすぐに分かるかと思います このイルカさんが棲んでおられる場所は相当に闇かもですよっ

僕自身のことを言わせて頂けば、電子カルテについても以前より興味があり、そこの基本的データ表現には MML (Medical Markup Language)という XML (eXtensive Markup Language)と本質的に同一のものすごく冗長なデータ記述言語が用いられ、それが故にどの電子カルテもデータに関しては互換性を保てる、そのようなことは知っていました そして、何と東京の産婦人科の開業医の方が御自分一人で Java言語を用いて電子カルテシステムを構築し、それを皆に公開していることも知っていました そこに持ち上がったのが「開いたイルカ」プロジェクトです でも僕から見ればこのプロジェクト最大の問題はその中心となっておられた錦の御旗の先生ご自身があまりプログラミングに詳しくなく、実際には一行のコードも書けないのではないでしょうか? その結果起こったことは、錦を担ぎ上げ、それで商売するソフトウェアの方々が増えてきたのです その中には北海道の某技術工業系大学の先生方もおられました その方々はもちろんコードをご自身でかける方々でしたが、やはり中心の先生がグイグイと技術的に引っ張れないとこのようなプロジェクトはどうなるのでしょうかねえ

結果的にこの「開いたイルカ」プロジェクトは今は落日でしょうか その一方で例えば湘南鎌倉総合病院の属する徳洲会では既に全国統一大規模電子カルテシステムが稼働し、そこから big dataも収集できるのです この電子カルテは「開いたイルカ」プロジェクトとは関係ありません 徳洲会がこのような状況ですから、「開いたイルカ」のシェアはどんどん低下し、結果的に開発力もどんどん低下し、やれることは政治的な圧力を加えることのみでした

そして何と Air様はそのような圧力の真っ只中に放り込まれ、一時は「Air死亡」という噂を流して自分の身を守らねばならない程に追い込まれたということです 恐ろしいですねえ 国家権力をバックにえばるのはやめて欲しいですねえ

そうそうそのようなことも影響してでしょうか、Air様は何とその後 某大学医学部の入学試験を受験され、見事通過し、その後6年間 その大学で医学生として学び、医師国家試験にも合格し、その後、某診療科で有名な某公立病院で某診療科医師として研修され、さらにいくつかの国家資格を取得されました 現在でもその診療科医師として活動されています

何で僕自身が自らの言葉でこのようなことを言えるのでしょうか? 実は先にも言いましたように電子カルテシステムについては以前より興味がありました そのため、わざわざ京都にも出かけ、その方面の会合にも参加し、勉強してきました そして、ある時 呼びかけがあり、手を挙げた人のみが某国立大学別邸に集まり、電子カルテの会合を持ったのです そこには錦さんや、その他の 何でしょうか取り巻きでしょうかねえ そのような方々が 10名ぐらい集まられ、特に参加に関して制限が無く、事前に申し込んであれば参加できたので参加した僕なんかは、ものすごい疎外感を感じました そして、「あー これは決して開いた ものではない、ガチガチに外を排除するものだ」と感じたのです この時の僕の感覚はとても鋭かったですねえ 今から 5年前の 2013年のことでした

さて Air様はその一方でエンジニアとして活動も再開され、HorliXの開発に入ったのです

ものすごいですねえ 壮絶な人生でカッコいいですねえ ちなみに年齢は僕より 18歳若いです 羨ましいな

久しぶりにTAVIを行いました

本日は朝から札幌東徳洲会病院心臓センターで三件のTAVIがあり、その中の一例を治療させて頂きました

北海道地震の被害からも立ち直りTAVIが本格的に再開されたのです 僕が治療させて頂いたのは、ご高齢の方でしたが、かなり高度な大動脈弁狭窄症であり、治療してよかったと思います 9:30AMよりTAVIのセッションが開始となり、合計で三例の治療を終わったのは 14:00でした 縦に三例を4.5時間半で入れ替えなども含んでする、というのは相当に早いですよね 入れ替え時間を含め、麻酔も含めて一例 1.5時間ということになります 素晴らしいですね

長期間の海外出張で、しかも西に東にですので、相当に体のリズムが狂ってしまいましたが、徐々に回復です とは言っても色々なメールには応答できていません 頭が回りません

頭のリハビリには Javascriptの勉強をしています Javascriptと言っても、正確には ECMAScript20151 というもので、別名 ES6と呼ばれている言語仕様のものです 現在ではほとんどのブラウザ上にこの ES6は実装されていますし、node.jsにも実装されています

言語仕様は非常に先進的なものであり、これまでのプログラミングの大きな考え方 (= パラダイム)を変更するほどのインパクトがあります 際立って紹介されているのが、アロー演算子とか Promiseとかいうものです Promiseに関しては未だ勉強を開始していません 現在はアロー演算子の習得にかかっています

/*jslint node: true */
/*jshint esversion: 6 */
"use strict";

const ary = [1, 4, 7, 9, 32, 43];
let reducer = (accumulator, initialValue) => accumulator + initialValue;
let result = ary.reduce(reducer);
console.log(result);

ここで、最初の2つのコメント欄が無いと、jslintという文法チェッカーでエラーを吐かれます

このプログラムは、配列の合計を求めるという他愛もないものですが、重大なパラダイムシフトがあるのです とっても難しいのですよ

ヘルシンキから神戸 そして WSL

WSLという言葉をご存知でしょうか Windows Subsystem for Linuxのことです

Microsoftは数年前より急速に Open Softwareに舵を切り替え、その代表として WSLという仕組みを開始したのです これは Windows10というこれまで Microsoftを支えてきた OSの中に Linuxという Open Softwareの OSをシームレスに走らせる仕組みです

もちろんこれまでに Windows10の上では、VirtualBoxや、VMWareといった有名な仮想マシン、あるいは Dockerなどのコンテナと呼ばれる仮想マシンの小型版がフリーで走っていました しかし、VirtualBoxや VMWareは Windows10の中に新たにコンピューターシステムを立ち上げるもので、マシンに対する負荷が大きいものでした

これに対して WSLというのは Windows10 OSの上に Linuxの APIを emurateする型で Linux OSを立ち上げるものです ここいら辺に関しては僕も知識がいい加減であり間違ったことも言っていると思いますので、それぞれが調べて下さい 何れにしても WSLを立ち上げたのです

その方法はネットで検索すると色々出てきますが、僕の場合、このサイトに従いました 少なくとも 2018/SEP/13の最新 Windows10 version 1803においてはこれで正しくインストールできます

とは言うもののこのサイトの後ろ半分に書かれている内容はかなり高度なものであり難解です とりあえず僕はここまで つまり、<Hyper の設定 for WSL>という部分まで行い結果的にこのような画面となりました

Linux (Ubuntu) on Windows10
Linux (Ubuntu) on Windows10 on MacOS

さて昨日は成田空港から羽田空港に移動し、伊丹空港に飛び、それから神戸の高橋病院に入りました そこで三例のPCIを行わせて頂きました

楽しく過ごしました

こっ こっ こっ これは素晴らしい

javascriptは関数型言語として捉えるとものすごく先進的な言語であるらしいのです もっとも ECMA Script 6 (ES6)あるいは  ECMAScript2015とも呼ばれるもの以降の話のようですが・・・

てなわけで少しだけ勉強しようと思っているのですが、何はともあれ javascript実行環境が無いと練習できません もちろんそのような意味では各種Browserには javascriptが内蔵されているのでそこで consoleを叩けば良いのですが、なかなか面倒ですよね

あるいは $node としてnode.jsを立ち上げその中で実行するのもありですが、これは文ごとでの実行となり今一つですよね

ところが VSCodeでは簡単に実行できることが分かりました もちろん node.jsがインストールされていないと駄目なのでしょうかね なかなか素晴らしいですよ

我ながら役立つこともあるのですね

2014年にこのブログに uploadした Qtでの DIB class に関する C++のコードに対して それから 4年経ってコメントがありました  Thanks というものです これは外国からのコメントでした

正直この頃は Qtで何とか C++により DICOM Viewerを作ろうとしていたのでしょうね いやあ その頃のことは忘れてしまいました その後、僕は急速に Script言語による Web programmingに傾倒して行き C++なんて忘れてしまいました ああ

でも Internetのつながりとは大きいですね

本日は Dockerのお勉強

Dockerというのは今話題の何と言ったらばいいのでしょうかね 自分でそんなに理解していないので表現できないのだけど、とにかくイメージとしては 「自分自身のパソコン上で Linuxを自在に走らせることを可能にする」ものです

例えば、自分の MacOSの上で少しの手間で Linux上で走る Web Serverやら SQL databaseを走らせ、MacOSではその Web Serverやら MySQLと通信してあたかも仮想のインターネットが自分の MacOS上に形成されるのです

自分で Webのプログラム組む時にテストとして 仮想インターネット環境を作らねばならず、この目的では 以前より使用されていた XAMPとか 今も盛んに使用されていて自分も使っている MAMPがあるのですが、そんなことせずに(多分)そのような環境を作ることができるのです しかも、それで動作すれば、そのファイル(イメージ)を持ち込めば世界中どのマシンでも動くらしいのです

うーん自分でも良く分からないので説明できないのですが・・・

これまで何冊かの書籍を Kindleで購入してきたのですが、どうも今ひとつピント来ず、またサンプルが動作しないのでつまづいてきました

今回、「Docker/Kubernetes実践コンテナ開発入門」という書籍を Kindleで購入して少し読み始めました

Docker書籍

この書籍は Just Publishedであり、昨日 download可能となりました それでテストしているのですが、なかなかこの書籍は書かれている内容が Docker初心者には理解し難いものがあり、色々とテストしてようやく最初のサンプルプログラムが走りました

#! main.go -- go言語でサーバーを立ち上げるためのプログラムを書く

package main

import (
  "fmt"
  "log"
  "net/http"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    log.Println("received request")
    fmt.Fprintf(w, "Hello Docker from DOCKER/KUBERNETTES BOOK!!")
  })

  log.Println("Server was started.")
  server := &http.Server{Addr: ":8080"}
  if err := server.ListenAndServe(); err != nil {
    log.Println(err)
  }
}

このGO言語で書かれたプログラムは port番号8080で Web Serverを立ち上げるものです なんだか色々と難しいことが書いてあるけど、やってるのは もともと GO言語のライブラリとして用意されている fmt, log, net/http といったライブラリを読み込んでそのライブラリに既に用意されている命令を呼び込んでいるたけです

そしてこれをコンパイルするために用意されている Dockerfile という拡張子無いファイルが重要なのです

FROM golang:1.9

RUN mkdir /echo
COPY main.go /echo

CMD ["go", "run", "/echo/main.go"]

このファイルを同じフォルダに Dockerfile という拡張子の無いファイル名で置くのです

このファイルでは書いてある通りに、 goloang version 1.9という既に定義されている色々な仕掛けを読み込み、それから Dockerが作成した特殊環境 Conatinerの中に /echo というフォルダを作成し、それからそのフォルダにさっき、compileした main.goという実行形式をコピーし、それから go して run してサーバーを立ち上げろ ということなのです

しかし、ここまで理解するのに色々とハマりました まず第一に、これらのファイルをどこに配置すれば良いのか、その説明が本には無いのです

仕方なく、僕は 文書フォルダの中に DOCKERKUBERNETES-BOOKというフォルダを作成し、そこに2つのファイル Dockerfileと main.goを置きました そして

$cd Documents/DOCKERKUBERNETES-BOOK

として current folderをこのフォルダに移動させそこで terminalより 以下の Docker commandsを打ちました

$docker image build -t example/echo:latest . // 実は最後のピリオドが重要です これが current directoryを表しているのですよ

これにより コンテナの中で go言語で書かれたサーバー立ち上げプログラムがコンパイルされてサーバーが立ち上がりました しかし、一発で立ち上がればいいのですが、main.goの中で typo (打ち間違い)が当然あります その時にeditorで何回もさっきの image buildを行っても エラーが出るのです

何回見直して typoを修正しきってもエラーを吐くのです これにはまいりました インターネットで原因を調べても良く分かりません

ふと思いついて ひょっとしてコンパイルされたイメージがコンテナの中に既に存在するのでエラーになるのでは? と思いました あたりでしたね

 

$docker image build --no-cache -t exmaple/echo:latest .

とすれば再びビルドして新たなイメージを作り直します

またこのようにしてできたイメージは

$docker container run example/echo:test

として簡単にスタートできますね そしてこのWeb Serverに外部から port 9000でアクセスさせるためには まず走っている イメージ-サーバーを停止せねばなりません

$docker ps

により走っているイメージプロセスを表示させます その最後に nameというタグがありますので、そのネームを用いて

$docker stop [nameの部分に表示される名前] //この名前は dockerが不規則に作成しているものです

としてそのプロセスをまず停止します それから再度 port forwardingしながら WEb Serverを立ち上げるために 再度以下のコマンドによりサーバーを立ち上げます

$docker container run -d -p 9000:8080 example/echo:latest

こうすることにより dockerで走っているサーバーの 8080 portがメインマシン ここでは僕の macOSですがこの port 9000と繋がります( = port forwarding) 結果的にはこの macOSでブラウザから localhost:9000とすれば、メッセージが表示されるのです

フーッ ここまで来るのに一時間使いましたね