これから一泊で韓国です

今日は日曜日 実は昨日土曜日心穏やかな時間がありました

湘南モノレール大船から江ノ島駅までの中間点に「湘南深沢」という江ノ島モノレールの駅があります その駅から自宅に向かって数分の距離に「深沢」という交差点があり、その交差点周辺にはかつてダイエー系のスーパーがありましたが、既に潰れています しかし、Yamakaストアというスーパーが未だ頑張り、すごいことに湘南ボーリングというボーリング場が元気に頑張っています このYamakaストアの向かい、自宅から歩いても 10分かからない距離なのですが、そこに以前より一軒家の本屋さんがあったのです しかし本屋さんは今厳しいですよね ご多分にもれずこの本屋さんも店を閉じてしまったのです いきさつの詳細はもちろん知らないのですが、バス停でバスを待ちながらその本屋さんを見ていると、何だかいつの間にか喫茶店に変わっているのです 喫茶店といってもコンセプトが「本」と「Cafe」という感じです なかなか良い感じなのですが、中に入るのは少し気恥ずかしい感じがして、できてもう一年以上経つのにかかわらず一回も訪れて無かったのです それに何時も外から見てそんなにお客さんが入っているようには見えないのです

土曜日仕事を昼過ぎに片付け、自転車で早めに帰宅する途中 このCafeを訪れることに決めました 丁度店の前に自転車スペースがあり、そこに自転車をとめてヘルメットを持ちながら Cafeに入りました 最初何となく勇気が必要でしたが、店に入ると僕ぐらいの年齢のご主人でしょうか? が一人おられ「何になさりますか?」と聴いて来られました 見れば各テーブルには電源があり、また Free Wi-Fiも整備され、壁には色々な本が並べられ自由に閲覧可能でした そしてバックには 1980 – 90年代のジャズが軽くかかっているのです

すっかり馴染んだ空気となりました そして、壁の一角にある本が目についたのです それは「Webサービスのつくり方」という本でした そして、その本に付箋がついていて、「当店主人の兄の書いた本です」と記載があるのです この本の著者は 和田 祐介という方であり、Web programming 特に Perl programmerとして有名な方です 何とそんな方が身近な場所に住んでおられるのに驚きました

そして、よく見ると壁に並べられたたくさんの書籍はあらゆる分野のものですが、その中でも Web Programming関係の本が多くあるのです

結局一人でその Cafeで 2時間ぐらいゆったりと過ごしたのです また訪れるつもりです

そして今日は朝遅くまで寝坊しました 本日 20:00発の便でソウルに飛びます 明日は早朝から韓国のある病院でTAVIのプロクターです 明日の最終便で戻る予定です また忙しい時が始まります

Dive in Python

ついに思い切って参加しました しかも今回は会場が東京駅前の理研です 理研の AIPセンターです ちなみに AIPは何か?と言えば、「革新知能統合研究センター」のことで、AIP = Advanced Intelligence Projectのことだそうです

Stapy x 理研AIP

今回の研究会の中心は OSS (Open Source Software) = 基本的にソースコードを GitHubなどでインターネット上に公開しながら有志がインターネットで参加してし協同で優れたソフトを早く開発していくというもの このOSSの代表作が Linuxであり、また それこそ 統計ソフトRもそうですし、多数存在します

今日の開催場所理研 AIPというのは、東京駅八重洲口歩いて数分の場所に存在する巨大な奇麗で新しいビルの15階にあります 流石東京だと思わせるビルです

Coredo日本橋ビル

内容は OSSとして開発されているPandasという Pythonの数値計算の有名なライブラリに日本人として唯一開発に参加されている方の講演とか、日本で開発され、全世界に広がっている深層学習のためのPython Frameworkである CHAINERの開発に参画されている方の講演、そして Scikit-Learnによる Pythonでの機械学習のお話、そして理研の教授であられる先生による講演などとても難しいお話が並びました

本日のスタッフ

結局全てが終了したのは 9:15pm頃であり、全く休憩無しでした 終了し、すぐに消え去ろうとしたところ、懇親会(ビアバッシュ)入り口で「齋藤先生」と突然声をかけられました えっ えっ 何とこの StaPyの毎回の研究会運営の中心であられる岸さまでした

そして驚くことに、何と岸さんは EP班の村上部長の義理のお兄さんだったのです いやあ驚きました 世の中広いようで狭いのですねえ

DHT解析

先に挙げた BITS配列

BITS配列 = [0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]

この 16 bytesのバイト配列が意味するのは、BITS[0]から BITS[15]までの 16の配列の値つまり、順に 0, 3, 1, 1, 1,・・・・・, 0, 0が、それぞれ、1 bitの Huffman Code ( = ハフマン符号)が 0個、 2 bitsの Huffman Codeが 3個、 3 bitsの Huffman Codeが 1個、 4 bitsの Huffman Codeが 1個、・・・・、15 bitsの Huffman Codeが 0個、 16 bitsの Huffman Codeが 0個ある、ということを示しています

そして、規約により、Huffman Codeは 0 (Zero)から開始する、と決められていて、また Huffman Codeの bit数を増やす場合には、その bit列をの最上位 bitに 1を置いて、一桁増やすことになっています これにより、一意に codeが決定されるのです

例えば、Huffman Codeが 01であったとすれば、この codeの bit数を一つ増やすには、 101とすれば良いわけです。このようにすれば、 bit列を順番にテストしていった時、bitを順番に見れば、決して重複しないことが分かりますでしょうか? ここが Huffman Codeの本質なのです。またそれであるからこそ、Huffman木という良くアルゴリズムの教科書で見る有名な「木」構造が決定されるのです。

さて、ここまで理解したところで、先の BITS配列から Huffman Codeを作りましょう

まず、1 bit Huffman Codeは 0個なので、これは該当しません 次に、2 bits Huffman Codeが3個なので、Zeroから始まるので、00, 01, 10ということになります 次に 3 bits Huffman Codeが 1個なので、これは 110ということになります 次の 4 bits Huffman Code 1個は、1110 以下、 5 bits -> 11110, 6 bits 0> 111110, 7 bits -> 1111110, 8 bits -> 11111110, 9 bits -> 111111110, 10 bits -> 11111111110, 11 bitsから 16 bitsまで無し

ということになります ここまで宜しいでしょうか? 非常に分かりにくい話ですが現在皆さん方が恩恵を受けておられる JPEGや MPEGなどの基礎の基礎なのです もちろん、通常の JPEGや MPEGでは離散コサイン変換という高周波成分をカットするような圧縮も行われているのですが、直流成分の圧縮には、このハフマン符号化が用いられているのです

bitstring packageについて – 追記02

非常にややこしい話なのですが、bitstring classでのアドレス表記は、あくまでも bit addressなのです ですから、通常 binary editorや、我々がプログラム書く時に使用する hex addressいわゆるバイト・アドレスにするためには、ここでの表記を 8で割らねばならないのです もちろん 8というのは 1 byteの bit数ですね

何はともあれ必要なのは Binary Editor

Binary Editorとして Windows上では 超有名ソフト Starlingというのがあります これはもちろん Free Softwareなのですが秀逸の出来なので、僕も以前 DICOM解析の時には随分とお世話になりました

さて、MacOSですが、 Xcodeでもできるという話なのですが、どうやったらば binaryとしてファイルを開けるか分かりません Web検索かけてもなかなかヒットしないのです それで、色々探すと、0XEDというソフトが良い、というのが書かれています しかし実際に立ち上げてみると、肝腎の binary 部分の検索ルーチンにバグがあり、うまいこと DICOM tagを検索できません

困り果て、これは Windowsで開発せねばならないかな? と思い始めた時に、最後にヒットしたのが HexFiendというソフトです あまり魅力的なインターフェースではないのですが、きちんと使えるソフトですので、これを用いていくことに決めました

少しだけ進展 – Pydicom

少しだけ進展しました DICOM-XA解析において、何が必要か? それがなかなかつかめなかったのです 自分で C++でプログラム書いてから既に数年が経過し、色々な知識が消え失せているのです
それでも少しずつ進みましょう

IDLE

これで IDLEに入りました

>>>import dicom #これで pydicom module読み込み

>>> df = dicom.read_file("XA1.dcm")
# これにより XA1.dcmという DICOM-XA fileをdf というオブジェクトに読み込み

>>>pixel_bytes = df.PixelData
#これにより XA1.dcmの中の画像データ部分を pixel_bytesというバイト配列に読み込みしました

あとはここから 1 byteずつ読み出してそれを JPEG Lossless decodingに渡せば良いはずです

Shift + 右クリニック

Windows10の話です Parallelsの上で Windows10を走らせていると、Finderでは見える Directoryが Command Promptでは見えなかったりします

これは何故かと言えば、Windows10 on Parallelsでの Home Directoryのパスが Macの本来のパスと異なるからです

例えば Mac

~/Documents/Python_Script

が Windows10 on Parallelsでは

\\Mac\Home\Documents\Python_Scripts

となるからです ややこしいのは、 Windows10 on Parallelsの Documents Folderwにおいて

C:\Users\****\Documents\Python_Script

としても全く別の Folderを指していることになり、肝腎のファイルが出てきません

では、どうやってややこしい

\\Mac\Home\Documents\Python_Scripts

を簡単に分かるかと言えば、Windows10 on Parallels上で、そのファイルを ファインダ上で、Shift + 右クリックすれば良いのです そうするねと Context Menuに “バスのコピー”という項目が出るので、それを選択すれば 見事に本当のパスが出てきます

これは便利ですねえ

何をやってるんだか

さて、浮気性の僕が今取り憑かれているのが、Pythonを用いてグラフィック系のものを作りたい、具体的には最終目標が DICOM XAの再生ですが、そのようなものです

そして、何やら自分の MacBook Proの Document Folderを見ていたところ、 Python Scriptというフォルダを見つけたのです もちろん、他ならぬ自分で作成しているフォルダなのですが、すっかりその存在を忘れていました このフォルダ実に 2015年に自ら作成しているので、履歴として、その頃も Pythonに一時期ハマっていたことになりますが、すっかり忘れていました ひどいですね これは知識のあるいは知能の退化というものでしょうか

まあ、仕方ないそんな自分を受け入れるしか道は無いのだから

僕の前に道はない
僕の後ろに道は出来る
ああ、自然よ
父よ
僕を一人立ちさせた広大な父よ
僕から目を離さないで守る事をせよ
常に父の気魄(きはく)を僕に充たせよ
この遠い道程のため
この遠い道程のため

これは高村 光太郎の書いた詩です 自分の世代だと中学ぐらいの教科書に載っていたと思います そして、これは

この道を行けばどうなるものか、危ぶむなかれ
危ぶめば道はなし 踏み出せばその一足が道となる
迷わず行けよ 行けばわかる

というのはあのプロレスのアントニオ猪木が用いた言葉として有名ですが、もともとは 一休宗純という禅僧の言葉だと言われています しかしこれも

此の道を行けば どうなるのかと
危ぶむなかれ 危ぶめば 道はなし

ふみ出せば その一足が 道となる 
その一足が 道である
わからなくても 歩いて行け 行けば わかるよ

という 清沢 哲夫『無常断章』「道」という詩人の作である可能性もあるようです あっと Pythonの話が何でこんな話になるのでしょうかね

さて今は、アメリカ西海岸で会議に参加し、ずっと英語に浸かりっぱなしです とっても辛いですが、既に 24時間経過 相変わらずひどい時差ボケです ずっと自分に負荷がかかっていますが、この会議では世界のPCIをひっぱってこられ、現在も第一線で活躍されている先生方、超有名な先生方が一同に集まっています 僕もその中のアジアから唯一の人として参加しているのは光栄です 何とか自分の存在を出せています ということで Pythonの話は後で

浮気者

今週も忙しかったなあ

17日月曜日、Slender Clubも終了し、安らげるかと思えば午前外来に引き続き、午後は慢性完全閉塞などのPCI二例、その後 病棟新入職員歓迎会が大船の居酒屋さんで開催され、当然のことながら立場上も参加せねばなりません

でも偉かったですねえ、心に決めて一滴もアルコールを飲みませんでした

翌日は朝から二例のTAVI、そう言えば最近僕は自らTAVIせずに、口先介入ばかりしています まあこれも若い人のためには仕方無いことでしょう

そして、何だか疲れ切り、水曜日19日は、本当はその前日夜から函館に入る予定がキャンセルとなり、急遽時間ができたので、溜まっていた仕事を片付けることができました そして、夜の便で札幌に入ったのです

20日木曜日は札幌でTAVI 2例の proctoringをしました、とても高齢の方お二人であり、しかもお一人は急速に心不全が進行し、胸が真っ白に近くなっていました もうTAVIをせねば限界の方でした という訳でとても high risk症例だったのです それでも、二例バッチリうまく決めることができました

もっとも僕は Proctoringですので、手出しはしません、口出しも最小限で、危険回避の時のみです それでうまく行ったのはとても嬉しいですね

本日金曜日 21日は、たくさんの外来患者さんの診療してから、少し危険な症例で、僕がずっと10年間以上も外来で間歇的に診てきた患者さんのPCIをしました その後、慢性完全閉塞に対するPCIの院内 Proctoringをしました そして今に至るのです

ここまで読んでも何が浮気者か分かりませんね

実は、ある方に引きづられて Pythonを勉強しているのですが、丁度良い書籍が Kindleで出たので、それを見ながら codeを打ち込んでいます ここで問題となるのが、Editorです

これまで、 Unix/Linus標準の Vi/Vim、恋するエディタと称される Sublime Text3、GitHub渾身のエディタ Atomとつまみ食いしてきました そして、今は以前使ってみてすぐにやめた Visual Studio Code (通称 VS Code)に浮気しているのです これは、あの Microsoftが作り、毎週のように upgradeしている Open sorce productでする 特徴は多くの plug inが開発されているのです

何が便利かと言えば、 .pyとファイル名をつければ、そのファイルを Python実行ファイルと認識し、カラーリングしてくれるのみか、Terminal (Bash)も内包しているので、すぐに実行できるのです これは便利ですねえ とても便利です

もちろん Vimや、Sublime Textあるいは Atomでも同様のことはできるのですが、VS Codeは何しろ軽い、そして分かりやすいのです これでようやく自分の気持も「さあいざ Python」という感じになってきました もっとも浮気性なので何時まで持つかな?

この土日相当に悩んだぞ

この土日は、久しぶりにプログラミング・モードに入りました 日本循環器学会で配布されていたプログラム閲覧用Appに触発されたのです

昨年の鎌倉ライブHomePageは PHP/JavaScript/jQuery/CSS/html/MySQLを組み合わせて何とか付け焼き刃で作りました

それなりに使えるものであり、未だ HomePageは残してあります

しかし、これは本当に付け焼き刃なので、もう少しきちんとしたものを作りたい、そのためには Laravelを勉強しよう!!と思ったのですが、既に挫折しました とにかく PHP以外に学んだり、覚えたり、あるいは流儀に馴染んだり、そのようなことが多すぎます もう僕の脳みそは新たなものを取り入れる余地があまりありませんので、これは辛いのです

そこで、考え方を方向転換しました 「折角使えるようになっているPHP/JavaScript/jQuery/CSS/html/MySQLなのだから、そのまま推し進めよう」と思ったのです そして「余力が出れば Laravelなりを学べば良い」と思ったのです

それで、昨年のプログラムを見直しました こんな風体にしたかったのです

デモスクリーン

もちろん、下の大きなアイコンは navigatorであり、このアイコン集はどのページにも出現し、スクロールしても消えません このようなものを作りたいのです

これには、Bootstrapの navibar/dropdownコンポーネントを用いればそんなに難しくなくできる、ということは自分で分かっていました そして実装したのですが、どうしても

こんな風にDropdownしたいんだ!!!!

こんな風に(dropdownする)動かないのです いや、動いたり動かなかったり、と厄介なバグです

そしてついに原因をつかみました jQuery Libraryが version3.xであると動かないのですが、1.xや 2.xであれば動作したのです これには驚きました ちなみに 3.xでも動いていた時には次のようなコードを書いていたからです

<script src="http://code.jquery.com/jquery.js"></script>
<script>
	if ( !window.jQuery ) {
		document.write( '<script src="js/jquery3-1-0.js"><\/script>' );
	}
</script>

つまりこれであれば、on-lineであれば、CDNを読みにいっていますが、この読んだ先には、jQuery 1.xがあったからなのです

うーん時間潰しました