インターネットを通じたつながり

今朝は体調不良 もう歳かな それでも本日 TAVI二件、その後 MitraClip 1件あります まあそろそろ体調も戻り、またTAVIに関しては若手に完全に任せますので良いでしょう 全力を MitraClipに傾けますよ

それはそうと今朝メールを開けると「ぎぎ」としました 僕のこのプログにコメントが投稿されていたのです いやあとても感激しました この方はかなり高度なプログラミング知識と技術をお持ちの医療関係者だと推察します その方が、ご自身で開発されている DICOM Viewerである Horlixにおいて、ある種の DICOM-USフォーマットが読み込みできないために(しかもこれが Philipsなのです: 実際この Philips machineの DICOM-USは変です 当院でも読み込めない事例が発生しています!!)、 DICOMで検索しておられて僕のこのブログにヒットされ、そしてコメントを頂いたのです

とてもとても僕なんて足元にも及びません そんな方からのコメント「ぎぎ」とすると共に感激です 思わずこんな返信してしまいました

ちなみに僕の DICOM Viewer開発苦労話はここにまとめてあります

 

air様

コメント頂きありがとうございます Githubなども見させて頂きました また、OpenDolphin関係のページも見させて頂きました 世の中にはすごい方がおられるものだ、とただただ感心するのみです
私なんかは既に 68歳ともなり、頭脳はどんどん硬くなると共に処理能力が劣る一方です そんな自分でも Z80 assemblerでプログラミングの真似事を始めた20歳台の頃の、わくわくした思い、それを取り戻したくて、かつ謎であった DICOM-XA それに取り組んだのは既に 10年以上の前のことでした
しかし、自分の能力がとても足りず JPEG規格書を読んでもなんのことかさっぱり理解できない状態が続きました 自分の患者さんに引退された工学部教授がおられ、その方の教え子に信号処理を専門にやられている研究員の方がおられたので、その方をご紹介して頂き、直接 JPEG規格書と DICOM規格書から DICOM-XAが JPEG losslessで圧縮されていることを掴み、そのHuffmann Code解読プログラムをなんとか書くことを開始しました それでも何がなんだ最初はさっぱり分からず、随分と苦労して慣れない C++ (VisualStudio)を用いてプログラム書き始めました
最後にはようやく DICOM-XAで動画を Windows上で動かすことに成功しました
それができるともうそれ以上進むのは自分では無理だと達観してしまい、DICOMの世界から離れてしまい、今は Osirixの単なるユーザーになっています
Osirixが高額でありしかもひどいことには、MacBook Proの USB-C端子4つの内2つが自然故障して、修理に出したところ、logic board交換となり、それと共に Osirixのライセンス切れてしまい、またまた 100K円の支払い発生するという理不尽を経験して、Horosともめぐり逢いました
そしてその Horosより派生させ、さらに改良を加えられている Horlixをご紹介頂き感激しています
でも正直、自分でも Webのプログラムを Githubに蓄えたりしていますが、 air様の Horlixに関して、どのように実行ファイルを作成すれば良いのかその手順すら理解できない自分です
開発などでお忙しいでしょうが、どうぞ今後共お時間のある時で結構ですので、ご指導宜しくお願いします

齋藤 滋

gitの upgrade

特に Web開発では compilerでなく script言語を使用することが多いので、プログラムの更新にあたっては更新ログを記録し、いざとなれば元にもどせるようにするために gitを用いることが一般的ですね

gitはもう何年間も使用しているのですが、未だに使いこなしているとは言い難いものがあります そもそも gitはコマンドラインでのコマンドの一つですが、web serviceと連携してそのデータベースが無料の Web databaseにも記録されます そのようなサービスを提供している有名なものとして githubそして sourcetreeがありますね

前者は自分のソースコードを公開するならば無償で uploadできますが、後者はソースコードを公開しなくても無償で uploadできます

何れにしても使いこなしてなんぼ の世界ですが・・・・

さて、最近その git commandに非常に危険な脆弱性が発見されたらしいのです それで git commandの upgradeを試みました 自分の MacBook Pro OSX High Sierraに入っているgitは Apple gitでありシステムに最初から入っているものでした

$git –version

とすると git version 2.7.1と大分古いバージョン番号が戻ってきました

それを upgradeするためには、git commandをreplaceせねばなりません それで調べました もちろん homebrewを用いるのです ありましたね ここです

いやあ助かりました これで僕の gitは version 2.17.1とずいぶんと上がりました

何だコリャ そして 素晴らしい

相変わらず神経痛で悩んでいます 眠れない 痛い 時間との勝負でしょうか

ところで今朝突然ひどい話に気が付きました MacOS High-Sierraとなって新しいディスク formatである APFSが導入されました この APFSは SSDに対して最適化されていることは有名ですが、HDDに対して使うなとは書いていません

僕は調子に乗って 外付け portable 3TB HDDを APFSで formatしてそれを TimeMachine backup diskの一つとして使用してきたのです 流石に 3TBですから何回 backupしても余裕がありました

昨晩一晩かけて残り 100GBぐらいになっているので TimeMachie backupしたところ、今朝気がつくと「エラー」となっているのです そして 「MacOSジャーナリングでないと TimeMachineのバックアップはできません」などとエラー表示しているのです

なになに 今更なんだ これまで何回もバックアップしているのに途中ではそんなエラー出てこない

まあ仕様ならば仕方ないと諦め このdiskを MacOS Journalingで formatしようとしたのですが、できない!!! 何と APFSで formatされた diskは APFSでしか formatできないのです

困りました Parallelsで Windows10を立ち上げ Windowsによりこの diskを formatしようとしたのですが 何しろ認識すらできません さあ困りました 3TB HDDがゴミになるのでしょうか

それで Googleさんと相談したところ、見つけましたここを そして救われました

世の中奇特で優秀な方がおられるのですね それにしても Appleはもう少し user friendlyになって欲しいなあ

こんな馬鹿なことで1週間潰した

さて、今から本格的にプログラム書こうと思っているのが、2019年に学会長を行うように指示されといるとある学会があるのですが、そのいわゆる学会プログラムやその他諸々を handlingするソフトの開発なのです 当然のことながら Smart Phone/Tablet/PCの全てに対応するように “Responsive Web Design”で開発するのです DBは慣れている MySQLを使用し、言語もこれも慣れている PHPを使用します

こんものいちなり書けないのでテスト・プログラムを作成し、local web serverでテスト繰り返すのですが全く作動しないのです

「えーーっ、なんでぇーーー こんな筈は無いはずだあ」と一週間悩んだのです 少しずつ修正しながらテストするのですが全く僕の意図を無視して動作しないのです

まあこんな感じです

// ここれはフロントエンドで SQLに探索語を渡す Ajax通信のルーチン
    $( document ).ready( function () {
      $( "#search_results" ).slideUp();
      $( "#search_term" ).keyup( function ( e ) {
        e.preventDefault();
        ajax_search();
      } );

      function ajax_search() {
        $( "#search_results" ).show();
        var search_val = $( "#search_term" ).val();
        $.post( "dr_role_find_backend.php", {
          search_term: search_val
        }, function ( data ) {
          if ( data.length > 0 ) {
            $( "#search_results" ).html( data );
          }
        } );
      }
    } );

 

そして受け取る方は、PHPとMySQLです

 session_start();
 session_regenerate_id(true);
 require_once('../utilities/config.php');
 require_once('../utilities/lib.php');	
 charSetUTF8();
 //接続
	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());
 }

 $hp_name = strip_tags(trimBothEndSpace(mb_substr($_POST['search_term'], 0, 100)));	// 前後のspaceなど削除し、文字数を100文字に制限する
 $hp_name = strtoupper(mb_convert_kana($hp_name, 'ashK'));		// 半角英字大文字に変換する

 $stmt = $pdo->prepare("SELECT * FROM `hp_tbls` WHERE `hp_name` LIKE :hp_name ORDER BY `hp_name` ASC;");
 $stmt->bindValue(":hp_name", '%'.$hp_name.'%', PDO::PARAM_STR);
 $flag = $stmt->execute();
 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
 
 if (!$flag) {
   		$infor = $stmt->errorInfo();
     exit($infor[2]);
 }

 

これで、検索語として病院名の一部を入力すれば、DBより検索してくれる筈なのです

しかし、しかし動作しない 本当にこの解決に一週間かかり、先程やっと解決しました

色々な問題があったのです まずは

trimBothEndSpace(mb_substr($_POST['search_term'], 0, 100))

という関数ですが、(1) mb_substrの引数を何時の間にか消去してました つぎに(2) trimBothEndSpaceという関数ですが、これは自作関数なのですが、それをlib.phpに作成してあり(ある筈)、それを読み込んで使用するのですが、何と lib.phpの中にこの関数を書いていなかったのです

この2つのバグのために、phpそのものが走らず結果的に echoで途中経過を出そうと思っても出せない そんな事態に陥っていたのです 本当に大変なバグ退治でした これも Ajax通信によるプログラムだからのことです 本当に非同期通信というのは難しいです これが解決してうまく動作しているデモ画面です

うまく Ajax通信が動作しているところ

Dockerの何回目かの勉強

これまで何回も Docker習得に挑み、挫折してきました 挫折すると暫く、そうですね数ヶ月間 Dockerのことは忘れ、またブーメランのように戻ってくるのです さあ今度はどうでしょうか また挫折するのかな?

そもそも Dockerとは Container-baseの仮想コンピューターシステムです 何と言えばいいか、例えば自分の MacBook Proの上に、たとえば Linux serverを何個も同時に動かしたりできるのです これは現代コンピューターサイエンスのもっとも進んだ利用なのだと思います

何れにしても目標としては、自分の MacBook Proの上に、Linux Web + PHP + MySQL (つまりいわゆる LAMP: L = Linux, A = Apache Web Server, M = MySql database server, P = PHP or Python programming language)を構築し、それを使用して Web program開発をすることなのです 現在はこの目的のために MAMPを利用しているのです

実はアメリカから帰国する前に「やったあ できた」と思ったのですが、その後検討すると Chromeでしか作動しない、FireFoxや Safariでは動作しない、http://localhost:8080/ではアクセスできない などの問題点があり、これではプログラム開発できません

それでゼロ点に回帰してやり直すことにしました 本日はこんなこと学びました

MacBook Proの bash terminal上で

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

と入力し、Enterを押す そうすると

linuxkit-025000000001:~#

という待受になりこの時点で Linuxが Dockerコンテナの中で作動しだすが、ここで exitと入力すると あれあれ不思議 bash terminal上にこの Docker container上で動作する Linuxが遊び心でこんな素敵な画面を出力するのです

Welcome to LinuxKit

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""___/ ===
          {                       /  ===-
           ______ O           __/
                          __/
              ___________/

linuxkit-025000000001 login: root (automatic login)

Welcome to LinuxKit!

NOTE: This system is namespaced.
The namespace you are currently in may not be the root.
login[483]: root login on 'ttyS0'
linuxkit-025000000001:~#

このままだと終了しないので、Ctrl-a kと入力することにより、Macbook Proの terminal bashに復帰します

こんなことですが、Dockerの始めの一歩でした 是非とも皆様方試みて下さい

ちなみにこのクジラの絵ですが、Dockerの trade markですクジラが貨物船のようにコンテナを積み込んでいる模式絵なのです 面白いですね

本当のやったあ

この前の投稿ではタイトルが「やったあ」となっていますが、そのタイトルは実はこの投稿に対するものなのです

それと言うのも、このアメリカでの時差ボケの最中に解決したこと一つ それは Dockerで LAMPサーバーを Macbook Proの中に立ち上げることに成功したのです

といっても結構スキルの必要な作業であり、それを探すというのも一つの才能なのです 僕はサーチして このページに行き着きました いやいやありがたいことです

ただ、その記載の中に一箇所誤りがあり、そもそも良く理解していないので、何が誤りか検出するのに20分ぐらいを費やしました それは

./db/Dockerfile

DBサーバの設定ファイルです。
DockerHubにあるmysql:5.6を使用しています。

FROM mysql:5.6
MAINTAINER docker-db

COPY ./my.cnf /etc/mysql/my.cnf ※1

ここに一箇所誤りがあるのです それは簡単な話ですが、※1を削除せねばならない、ということです

それに気づいて修正したところ、見事に

docker-server$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
dockerserver_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
dockerserver_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8080->80/tcp

というふうに mysqldとphpが立ち上がりました 感謝感謝です

久々の Pythonネタ

Bokehという Pythonのライブラリの勉強を少しだけしました APIとかの変更が行われており、解説Blogでも 2016年のものではもう動作しません

最新のマニュアルを参照せねばなりません その結果こんなのできました

from bokeh.plotting import figure, output_file, show
x = []
import numpy as np
x = np.arange(0.1, 3.0, 0.1)

y0 = [i**2 for i in x]
y1 = [10**i for i in x]
y2 = [10**(i**2) for i in x]

# output to static HTML file
output_file("log_lines.html")

# create a new plot
p = figure(
   tools="pan,box_zoom,reset,save",
   y_axis_type="log", y_range=[0.001, 10**11], title="log axis example",
   x_axis_label='sections', y_axis_label='particles'
)

# add some renderers
p.line(x, x, legend="y=x")
p.circle(x, x, legend="y=x", fill_color="white", size=8)
p.line(x, y0, legend="y=x^2", line_width=3)
p.line(x, y1, legend="y=10^x", line_color="red")
p.circle(x, y1, legend="y=10^x", fill_color="red", line_color="red", size=6)
p.line(x, y2, legend="y=10^x^2", line_color="orange", line_dash="4 4")

# show the results
show(p)

これでできるグラフは下記のようになります

グラフ

しかもこのグラフ動くのです すごいですねえ

さて続き

そうそう 2月02日には治験薬剤溶出性ステントのために、Ferdinandが鎌倉に来られました 植え込み終了後、鎌倉でお食事、そして土曜日、日曜日と過ぎ、再び2/05には Ferdinandを鎌倉にお迎えし、外来終了後に治験DES植え込み、そして火曜日はTAVI、水曜日 つまり2/07にはメールでT-Siteから修理が上がってきた、との連絡があり、その日夕方の便で札幌東徳洲会病院に入り、治験DES植え込み予定でありましたので、急いで T-Siteに行き、修理終了した MacBook Proを受け取りました もちろん3年間の Apple Careに加入してあるので、修理代金は無償でした

結局、本社工場でも修理できず、Logic Boardが交換されたのでした つまり中身が真っさらとなった、ということです 結局SSDのデータ全てが消失したのです この日札幌には古い Macと新しいのと二台を持ち込みました 重い重い

そして札幌で治験DES植え込みしてから、部屋で TimeMachineでrecoveryしたのです これには10時間かかりましたよ その後、さらに新しいファイルをHDよりリカバーし、結局マシンは修理以前の状態に戻りました

本日は緊急症例に対してPCIを自らしたのですが、以前苦労して治験を行いつい最近承認されたDESの市販後初めての本邦植え込みをしました 全く世の中には治験を軽んじる人や会社が多くて困ったものです ばっかみたい

最近は Pythonもどんどん Version Upしていて現在の最新版は 3.6.4です すごいですねえ

すごく大変な一週間

とてもとても忙しくその忙しさは我を忘れるほどのものでした

先週の土曜日2月3日にそれは始まります どうもMacBook Pro2016年版の調子が悪いとここ数ヶ月間思っていました その症状というのは(1)明らかに速度低下している (2)4つあるUSB Type C portsの内の少なくとも2つでは充電できない (3)それと一つは重なるもののその他の一つの portではそもそも USB Type Cを接続しても認識できない といったものでした

これがソフトのトラブルなのかハードのトラブルなのかそれは分かりませんが、何れにして「故障」であると考えていました 問題は何時修理に出すか? なのでした だってその間この Mac使用できなくなり、それは業務に大きな支障を来すことが予想されるからです

もちろん複数の Backupをとっています 一つは重要ファイル 僕の場合 ~/Documents/, ~/Sites, ~/Osirix Data/, ~/Pictures/, ~/Music/, ~/各種講演/ なのですが、それをファイル単位というかフォルダー単位での backup、そして次ぎに CCC (Carbon Copy Cloner)での起動可能な backup、そして TimeMachineでの backupなのですが、それを行っています

そういう訳で思い切って 2/03に藤沢にある湘南T-Siteのに中の「カメラのキタムラ」そこが、Appleの authorized 修理センターにもなっているのでそこに提出しました

かっこいいお兄さんが相手をして下さったのですが、一時間ぐらいかけてようやく「故障」と認定してくれ、結局そこでは修理できないとのことで、Appleの正規工場に配送となりました

 

ということでこの続きはまたね

いやはや大変です

さて購入後1年2ヶ月ぐらいしている MacBook Proですが、全て Type C connectorになっていて何ともやりにくく、またKeyboardもペチャペチャとキーを打つ度に気に入らない音がするし、何しろキーを打ちにくい

おまけに何時の頃からか 4つある Type Cが一つ、二つと反応しなくなってきたのです 最初は電源供給できなくなり、その内 USBを認識しなくなりなのです

土曜日に思いあまり湘南T SiteにあるApple正規修理代理店カメラのキタムラに持ち込みました お兄さんは小一時間調べ僕が指摘した症状を確認、当然のことながら原因特定できませんでした

それで結局 Apple修理工場に運ばれることになりました こんなだったらば、Appleと直接やり取りした方が早かった

それで本日は backup filesを以前使用していたMacBook Proにコピーして、さらにアプリもupgradeしてもう夜遅くなりました うーん大変です