これから一泊で韓国です

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

湘南モノレール大船から江ノ島駅までの中間点に「湘南深沢」という江ノ島モノレールの駅があります その駅から自宅に向かって数分の距離に「深沢」という交差点があり、その交差点周辺にはかつてダイエー系のスーパーがありましたが、既に潰れています しかし、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班の村上部長の義理のお兄さんだったのです いやあ驚きました 世の中広いようで狭いのですねえ

もうすぐ開始です

東京駅より日本橋に向けて歩いて 10分 Credoと大きくビルに書かれた 19階建ての新しい大きなビル 上の方には Bank of Americaとか Merill-Lynchとか大きな文字がかかれていて「何だこれはアメリカの銀行集団ビルか?」と思える様相です

何れにしてもそこの 15階、これが一般の人々は 5階までしか上がれない構造なのですが、その入口を探すのも一苦労でした その 15階に理研の「革新知能統合研究センター」というのがあり、そこに天才たちがどうやら集まっており、集会室らしき壁の黒板には多分議論した跡なのでしょうか 理解不可能な複雑な数式が並んでいました

理研での Python勉強会

その中の広い会議室 これがスクール形式で僕は楽ちんな机がある席の前から二列目に座席を確保したのです もうすぐはじまるでしょう 参加者の会話を聴いていると「京都から新幹線で今ついた」とか言っておられる方もいらっしゃります 身なりは登山する人みたいです まあ僕ひどく汚い身なりですから人のことは言えません 楽しみです

さあ出発

今朝は朝からたくさんの外来患者さんを診察し、たくさんの入院オーダーも切りました お一人PCIをやることになっていましたが、今日はこれからの勉強会に出席せねばならない(正確には したい)ため、部下に任せて自転車でまず早めに自宅に戻りました

EuroPCR2017最初のライブ Main Arenaで

そして、自宅からバス停まで歩き、なかなか来ないバスをひたすら待ち、ようやく大船駅から 17:39発の東海道線に乗り、今電車で東京駅増まで向かっています これから 理研の賢い先生方による Python関連の講義を受けるため日本橋にあるという理研AIPというところに出かけるのです

楽しみだなあ

JAL vs ANA

日本に主要航空会社として現在 JALと ANAがありますが、この日本国政府の方針に関しては、大賛成です 今のところ大成功と思います

多分国民の皆、JAL派か ANA派のどちらかに分類されると思います 僕はと言えば、一般的に ANA派です やはり民間航空会社の雄として応援したい、そんな気持ちもあります 一方 JALはこれまでずっと国からの補助によりようやく立ち直り、大きな改革を行い全く違った会社として生まれ変わりました 多分今でも政治家などの不当な利益供与の誘いなどがあるのでしょう でもそんな中で一つの民間会社として立ち上がりつつあるようです

最近 JALに搭乗すると驚くのは国内線で Internet Accessが無料で行えるのです 電源が座席に無い、など不満はありますが、 ANAでは Internet Accessは有料であり、国内線で接続しようなんて誰も思いません

それが、今現実に Blogをここで書いているように JALでは無料で接続できるのです この一つを持って何だか JAL派に転向してしまいそうです 現金なものですね

くくくくく 僕は進むぞ 進むぞ ついについに来ましたよ 何がですかって?

もこれこれ これの抽選に通ったのです 絶対に参加するぞ なんてったって日本を代表する頭脳集団「理研」ですよっ その人達と同じ部屋で空気を吸えるだけで僕も賢くなりそうですから へへへへ はははは へへへへへへ

Python勉強会 理研

本日の勉強会

本日は勉強会「みんなのPython勉強会 #24」に参加してきました 最終的には参加者の総数は優に 100名を超えたと思います 三人のその道のプロが講演をされました もちろん講演は MacBook Proを駆使したもので、Powerpointはほんの一部でしか使用していませんでした

内容は#1 Geopython, #2 Web API, #3 Git/GitHubでした まあ Geopythonというのは様々な地理的データを色々なデータベースと組み合わせて可視化するものであり、その動作エンジンに Python特に Pandasを用いるものです 確か、以前に Rを用いた同様のシステムの本を読み勉強した記憶がありますが、すっかり内容は忘れました まあ、一般の方々からすれば Google Earthを思い浮かべれば大きな間違いは無いと思います

演者は東大理学部博士課程を終了したまあ頭の良い方で、今は起業され二名の会社のCEOとしてGeographical Programを開発されている方です

二番目は驚いたのですが、昨日 59歳となられた方であり、この方も社員8名の会社を起こしております そして SNSと Webを結びつけさらに電話で自動音声化するプログラムのための APIを開発されているのです 社員は、日本に彼含めて三名、一人は東京(彼)ですが、もう一人は京都の山奥、もう一人は何処か忘れましたが少なくとも数時間では到達できない場所、一名は韓国、一名はロシア、二名がマレーシアのジャングルの中、一名がインドネシア これで会社を日本でつくり、ビジネスをしているのです 何しろ officeが存在せず、いわゆる remote officeというもので自宅なんでしょうか どこでもよくインターネットで繋がってビジネス開発、プログラム作成をしているのです

59歳ですよ しかも、彼はまあ以前から Pythonをいじっていたらしいですが、Python Web Frameworkである Djangoは未だ一年しか経験が無い、とそのように言っておられました そして皆に「59歳の僕でもプログラム書けるのだから皆是非ともプログラム書いて下さい」です かっこいいよね

3題目は、Git/GitHubの話であり、正直僕は知っていることなのであまり聞かずに話題として出てきた slackにかまけていました

結局、19:00から終わったのは 21:20くらい、それから地下鉄麹町駅まで歩き、有楽町線で有楽町に出ました 有楽町は未だたくさんのサラリーマンがおられ、自然と足は駅ガード下の飲み屋さんに サラリーマンばかりの飲んだくればかりの集団 皆タバコ吸っています そこに一人で入りました そして食べたというか飲んだというか それがこれです

有楽町駅

何しろ有楽町駅ですよ あの「有楽町で逢いましょう」の有楽町駅ですよっ 歳が分かってしまいますね

酒や「はないち」

いやあ風情ありますね 昭和の風情です 有楽町駅ガード下です 値段はとても安い ここで摂った本日の夕食がこれです

本日の夕食
やはり日本酒に限ります

それはそうと今回たくさん新幹線に乗ったのですが、重大な事実が判明しました やはり、列車の旅と言えばその間に飲むお酒です ところが、JR東海管轄の駅、新幹線の中から日本酒などが無くなり、あるのはビール、酎ハイそしてワインだけなのです どういうことでしょうか? 日本酒やウィスキーを排除するというのは これは誰か調べて欲しいものです 山陽新幹線これは JR西日本管轄ですが、そちらには今でも置いているのです JR東海は何かあったのでしょうか?

まあこの有楽町で呑んだのは一人で40分間ぐらい そのまま山手線経由で東京モノレールに乗り、今は羽田空港第2ターミナルのエクセル東急ホテルに入っています 明朝は 6:25AM発の ANA便で千歳に移動せねばなりません そして、明日夜に鎌倉に戻り、金曜日は鎌倉で外来診療の後、小倉ライブに

土曜日小倉ライブで術者した後、鎌倉に戻り、その数時間後にフランクフルト経由でパリ そして EuroPCRで様々な役割です

全く休みがありません 流石にきついですねえ それでもプログラムの勉強は続けたいし、TAVIももっともっと深く知りたいし 所詮人間は頭脳で生きている動物なのです

やったあ

やったあ 新幹線フォームへの階段を10Kg以上のバッグを担いで駆け上りようやく新幹線に間に合った甲斐がありました 現在 18:45

ついに本日の main eventである 「みんなのPython勉強会 #24」に入り込むことができました 参加人数は多分 50名以上

驚いたのは僕ぐらいの年齢の方もチラホラおられるのです 僕は参加者皆 20歳前後のオタクっぽい人ばかりだと思っていたのですがこれは意外ですねえ 今まで参加したプログラマの集会とは大分趣が異なります

これから 19:00 – 21:00ここで勉強です

みんなのPython勉強会 #24

ああ ゾッとした

今朝は大変な思いをしました 今朝はTAVI 3件の予定ですが、その中の一例を検討している時に、自分の MacBook Pro Late 2016を例の Type C connectorで VGA端子につなげたのです そして OsirixMDを立ち上げた途端、Osirixの modeが勝手にかわり、これは大変と Osirixを shutdownして 再度立ち上げたのです

そうしたらば、何と Databaseが消えている!!!

自分の Macにはこれまで全世界で行ってきたそれなりの症例、bifurcation, LMT, DCA, Rota, たくさんのCTO、それに TAVI, MitraClip, Watchmanその他諸々が 400GBぐらいのデータして蓄えられているのです

それがそれが消えた!!!??

どうしようかと思いました そしてTAVIに入るにあたり、この動揺した精神状態をどうするか? こんな状態でTAVIに入れば患者さんに不利益

そこでとった行動は、「まず忘れよう、いざとなれば自分の過去を清算するつもりで、全てのデータ無くなってもいいさ」と思いを改めました これにより心は平静となりTAVIに臨み、そして素晴らしい結果で患者さんも眠りから醒め(当院では Conscious Sedation局麻でTAVIを行っています)、とてもお元気

これを確認して、そして再び Macに立ち向かい、自分で設定していた色々なことを思い出しました そもそも Osirix Databaseは自分の場合、~/直下においていたのを忘れていました

そして、それを Open Databaseで開いたところ、見事にありましたねえ 素晴らしいですねえ 何も消えていなかったのです ああ良かった

Huffman Code解読テスト

以前 そう 2012年に Visual C++で書いたテストプログラムです 基本的に標準的な C++ですので、MacOS XCodeでも動作する筈でしたので、少しのみ改変してテストしました

// JPEG_Analysis.cpp : programmed by S. SAITO, MD, FACC, FSCAI, FJCC
// created at 5:00AM on August 20th Monday 2012
// modified and tested for XCode on May 6th Sunday 2017
//

#include <iostream>

typedef unsigned char u_char;  // u_char型の宣言
typedef struct {
    int HuffBit;  // ハフマン符号のビット長
    int HuffCode; // ハフマン符号
    int HuffVal;  // ハフマン符号の意味する値
} HUFFTAB;  
// これでHUFFTABという型を宣言した

void outbit(const int& hc, const int& hb) {
// 16 bitsの長さ hbのハフマン符号 hcを左詰めで出力する
    
    int mask = 0x0001;
    for (int i=hb; i>0; i--) {
        mask <<= (i-1);
        if ((mask & hc) != 0) {
            std::cout << '1';
        } else {
            std::cout << '0';
        }
        mask = 0x0001;
    }
    std::cout << std::endl;
};

int main(int argc, char* argv[])
{
    u_char BITS[16];  
    // それぞれのビット長のハフマン符号がいくつあるか
    // 常に16バイトなので静的に配列確保した
    
    // データのセット 実際のプログラムではファイルから読み込む
    for (int i=0; i<16; i++) {  // データをセット
        BITS[i] = 0x00;
    }
    BITS[0] = 0x01; BITS[1] = 0x05; BITS[2] = 0x01;
    BITS[3] = 0x01; BITS[4] = 0x01; BITS[5] = 0x01;
    BITS[6] = 0x01; BITS[7] = 0x01;
    
    int huffElementNo = 0;
    for (int i=0; i<16; i++) {
        huffElementNo += BITS[i]; 
        // これでハフマン符号語の総数を求める
    }
    //
    // ハフマンテーブル領域の動的確保
    HUFFTAB *ht = new HUFFTAB[huffElementNo];
    // これでハフマン表の領域が確保された
    
    int code = 0;  // ハフマン符号初期値は0である
    int huffElement = 0;  // 配列のカウンター
    for (int i=0; i<16; i++) { 
        // これでBitS[]配列全体を走査する
        for (int j=0; j < BITS[i]; j++) {
            ht[huffElement].HuffBit = i+1;
            ht[huffElement].HuffCode = code;
            ht[huffElement].HuffVal = 0;  
            // とりあえずdummyで0を入れておく
            huffElement++;
            code+=1;  
            // 次のハフマン符号のために1 bit足す
        }
        code <<= 1;  
        // 次のビット数のハフマン符号のために、左に1 bitシフト
    }
    
    for (int i=0; i < huffElementNo; i++) {
        std::cout << "Bit = " << ht[i].HuffBit << " ::: Code = " << " ";
        outbit(ht[i].HuffCode, ht[i].HuffBit);
    }
    
    char ch = NULL;
    while (ch != 'e') {
        std::cin >> ch;
    }
    return 0;
}

きちんと動作しました この例では結果は

Bit = 2 ::: Code =  00
Bit = 2 ::: Code =  01
Bit = 2 ::: Code =  10
Bit = 3 ::: Code =  110
Bit = 4 ::: Code =  1110
Bit = 5 ::: Code =  11110
Bit = 6 ::: Code =  111110
Bit = 7 ::: Code =  1111110
Bit = 8 ::: Code =  11111110

と出力されました

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では離散コサイン変換という高周波成分をカットするような圧縮も行われているのですが、直流成分の圧縮には、このハフマン符号化が用いられているのです