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を行わせて頂きました

楽しく過ごしました

こんなの見つけました

Appleのファイル構造に興味を持つようになりました きっかけは HorliX Dataというフォルダを探していて、それが一般に分からない場所に設定されていることを見つけたことにあります

そして、サンドボックス (SandBox)という一般から隠蔽され、自由にアクセスできない領域について知りました やはりこれも Appleがプログラマ向けに公開している文書なのですが、内容難しいですねえ でも、何処かで見た xml文書構造の例を発見しました

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Move</key>
   <array>
      <string>${Library}/AppSandboxQuickStart/MyConfiguration.plist</string>
      <array>
         <string>${Library}/AppSandboxQuickStart/MyDataStore.xml</string>
         <string>${ApplicationSupport}/AppSandboxQuickStart/MyDataStore.xml</string>
      </array>
   </array>
   <key>MigrateScriptsForApplication</key>
   <string>AppSandboxQuickStart</string>
</dict>
</plist>

あれっ、この構造 何処かで見ましたよね そうです albumファイルの構造です あひゃーっですね

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (6)おまけ

先の (5)の記事を書いていて馬鹿なことを考え試しました それは「同じ Apple IDであれば、何回かは別の Macに downloadして走らせることが通常できる」

だとすれば、「やはり Apple IDでインストールする iPadにも同様にインストールできないのか?」

という妄想です

それで試して見ましたが、そもそも iPadに Apple Storeでは HorliXは検索しても出てきません やはり Apple側も macOSと iOSは兄弟のようなものであっても、Application側でプラットフォームを識別してインストールできるかできないかを判定しているのですね

当たり前じゃない いやいやどんな小さな疑問でもそれが前に進んでいく動機となるのですよ

あととても重要な指摘です DICOM dataというのは重要な個人情報です ですから、やはり cloud上にそのままの形式のファイルを uploadするのは問題あるかと思います また、個人の MacBook上に蓄えている場合、その個人MacBookのログインに関しては、慎重にして下さい 簡単なパスワードだけでは危険です

もっとも DICOM Fileの中から個人情報データのみ削除すれば良いと思います 具体的には、生年月日、患者氏名、患者ID この3つを削除すれば良いと思います

DICOM formatでは、.XA ないし .dcmという拡張子のついたファイルから構成されていますが、この一つのファイルの中に、これらの個人情報が全て書き込まれています ちなみに、それらの情報は単なるテキスト・データですので、テキスト・エディタで開けば簡単に読むことができます

ちなみに、僕の MacBook Proの中の一つの .dcm fileを強制的にテキスト・エディタ VS Codeで開いてみましたところ、下記のような xml formatで出力されました

<dict>
  <key>albums</key>
  <array>
    <string>MassyCTO2012</string>
  </array>
  <key>patientID</key>
  <string>Dr SAITO Dr CHEVALIER</string>
  <key>patientUID</key>
  <string>ZEI...A, 40 YEARS OLD  CTO 2012-DR SAITO DR CHEVALIER-********</string>
  <key>patientsName</key>
  <string>ZEI...A, 40 years old  CTO 2012</string>
  <key>stateText</key>
  <integer>0</integer>
  <key>studyInstanceUID</key>
  <string>1.3.46.670589.28.26540597965520120310121759799988</string>
</dict>

この症例が、僕が Chevalier先生を助手として Massy, Franceの CTO courseで治療したということが一発で分かってしまいますね もちろん、それぞれの .XAや .dcmファイルの大部分は圧縮画像データである バイナリで構成されていますので、その部分はテキスト・エディタでは読むことができません

従って、簡単なスクリプト・プログラムを書いて、個人情報部分に ****** などの文字を書き込めば確実に個人情報が削除されますので、たとえあなたの MacBookが盗まれたとしても個人情報漏洩、という観点からは安全となります

簡単なプログラムです その内書いて公開しますね 今はとりかかる時間がありませんので失礼

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (5)HorliXはどのように入手するのか?

HorliXのアイコン – カッコいいね

HorliXの白い天馬のアイコン とてもカッコいいですね さて、一番肝心なことを忘れていました

HorliXはどのように入手するのか? とても簡単です

Macの左上隅の Appleマークから App Storeを選択します そして「検索窓」で HorliXと打ち込みます

そうするとこの様にすぐにヒットしますので、HorliXのアイコンをクリックすれば良いのです あっ、僕は既に10,000円で購入していますので、「開く」という選択ボタンになりますが、あなたの Apple IDでこのソフトを未だ購入しておられない場合には、10,000円のボタンが出てきます 何れにしろ OsiriX MDの二年間ライセンスが 100,000円超と比較するとものすごい安価ですね

ちなみに、隣の DCM Viewerというものがどんなものか良く知りません 開いてみるとこんなでした これは DICOMファイルの色々なことの確認用のソフトであり、いわゆる Viewerとしては動画も見れないものだと思います 胸部レントゲン写真などの静止画精査用のものですね

さて、ここで疑問です 何故  HorliX Dataはログインした個人の /Users/*****/ 配下、つまり ~/ というフォルダの下に無いのでしょうか?

ここからは僕の推測ですので余り信じないで下さいね 見方を変えれば これって、iPadや iPhoneのように MacOSではなく iOSのようにも見えないですか?

そもそも iOSはもともと Unixの派生である OSXという現在の macOSの前身から派生したものです ここらについてはここ とか ここ を読んで下さい 難しい記事ですが、特に後者は秀逸です 流石に Appleが書いた記事ですね

この iOSのファイル構造 この中に /Library/ Container/ というディレクトリがありますが、これって 要するに HorliX Dataが入っているディレクトリですよね

これはこれまで macOSのデータなどは /Application/ というフォルダ (= ディレクトリ)に入ってきたのと比べると随分と異なりますね 何故そうなっているかは知りません しかし、言えることは 確実に iOSに近い、ということです

何でしょうかねえ やはり securityの関係でこうなっているのでしょうねえ

またこの話題はここまでにしておきましょう 真相は Appleしか回答できない筈ですので・・・・

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (4)HorliXに読み込まれた DICOM dataはどうなっているのか?

さてここで疑問があります OsiriXのデータはこれまで「書類」フォルダ つまり Unixの表示であれば ” ~/Documents/”というフォルダに “OsiriX\ Data”という名前で保存されていました

そして HorliXに読み込んでしまえば、この OsiriX\ Dataというフォルダは削除しても大丈夫なのです

あれ? 肝腎のDICOM dataは何処に行ったの? バックアップするにはどのフォルダをコピーすれば良いの? そんな疑問と不安に苛まれませんですか? でも大丈夫安心して下さい 僕が解明しましたのでその情報をここで公開します

でもここから先はターミナルを扱える中級者以上が対象です

ずばり DICOM dataは以下のフォルダに存在します それは、

~/Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data” という名前で

~/Library/Containers/info.phazor.HorliX/Data/Documents/”というフォルダ内に存在します

つまり意外や意外 通常一般人がアクセスする「書類」、「デスクトップ」、「ピクチャ」あるいは「ミュージック」というフォルダには存在しませんです しかも、一般人も時々アクセスする「プリケーション」フォルダにも存在しないのです!!!

どうやってこれが分かったのですか? と疑問に思いませんでしたか? それは自分自身の Unixの知識で解明したのです OsiriXのデータが OsiriX\ Dataというフォルダにあるのであれば、HorliXのデータは HorliX\ Dataというフォルダにあるだろう そのように当たりをつけて検索しました もちろん Unix commandです

$find ~/ -name HorliX\ Data

これでHome folderから検索しましたが出てきません ということはホーム・フォルダには存在しないのですね!!!! 通常個人ファイルはそのユーザーのホームに存在するのですが、そうなっていないのです!!! これは驚愕の事実でした

仕方ないので、検索範囲を拡大したのです

$find / -name HorliX\ Data

このようにして Mac全体から検索かけたのです とても時間のかかる検索であり、ずらずらと大量の結果が出力されますが、その中に先の

find:/Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data

という出力を発見しました 何とこんなフォルダに存在しているのです これは驚きです

ここまでの解明された知識を基としてこの重要なファイル群 (僕の場合、何と 1998年 9月28日のPCI症例データから保持しているのです PCI症例といっても、これまで何万人の治療を行ってきてその中でも印象に残っている症例や症例報告に用いた症例、あるいは外国でのライブで行った症例などの特別な症例だけです 何れにしても、これは僕の人生の一部 何と20年間の僕のカテ人生、といっても本当の僕のカテ人生は、1976年に始まりましたので、40年間余りのカテ人生の半分近い人生 それが詰まっているのです・・・・ 涙 涙 うわーあんっ)をバックアップするにはこのようにします

たとえば外付けHDDの名前を BACKUP2TB とかつけたとするとまずは、この HDDの中に HorliX\ Dataという名前のフォルダを作ります

$ls /Volume/

とこのようにすれば、外付けディスクの名前が分かります この場合、

BACKUP2TB/      Macintosh HD0/     com.apple.TimeMachine.localsnapshots/

にように出力されます これでこの外付けHDDが BACKUP2TBという名前でマウントされていることが確認できますので次にフォルダの作成です

$sudo mkdir /Volume/BAKUP2TB/HorliX\ Data

これでBACKUP2TBディスクの中に HorliX Dataというフォルダが管理者権限でできました でもこれだけではコピーできません 何故ならば権限が与えられていないからです つまり所有者は管理者 rootだからなのです

$sudo chown ***** /Volume/BACKUP2TB/HorliX\ Data/

とすることにより私 つまり *****がこのフォルダの所有者となりました これで初めてバックアップ可能となります その方法は rsyncという Unix commandを使用するのです

$rsync -av --delete /Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data/ /Volume/BACKUP2TB/Horlix\ Data/

と打ち込むのです これで全データがバック・アップされます また、新たなDICOM dataが HorliXデータベースに読み込まれていくと思いますが、時々上記の rsyn commandを走らせば、新たな DICOM dataが追記されていき、もう HorliXより削除したデータは backupの /Volume/BACKUP2TB/から同様に削除されます 便利ですねえ

どうですか? 少し難しかったですか? 何ならばシェルスクリプト書きましょうか? シェルスクリプトであれば、自動的にできますもんね