2020年9月10日木曜日

閉域網の電子カルテにJitsiを稼働してみた!

 閉域網の電子カルテにZoom等をオンプレミスで入れるのは、ある程度予算がないとできないので、Jitsiのようなオープンソースのビデオ会議システムは非常に助かる。IE8しかない端末はネックでしたが、Chromeをいれるのは抵抗感があるので、ChromiumベースのMicrosoft Edge がリリースされるのは、丁度いいですね。

工夫すれば、インストールしなくてもインストール済みのWindows 7からコピーしてちょっとしたショットカット等の設定をすれば、ポータルバージョンのように電子カルテシステムへの影響も最小限にできる。しかもPure Debian をいれている古い2011 macmini(弁当箱みたいなパソコン)に稼働しているので新たな投資は0円で済む。三密を避ける少人数が3~4か所から音声と画面の共有でのカンファレンスなら全然余裕でしょうね。
残念なのは、CTやレントゲンの画像の画面共有はmacminiのCPU使用率が50%以下なのに貧弱のクライアントでは綺麗な共有画面が得られませんでした。高画質のカメラが2つオンした場合、macminiのCPUが80%以上上がってしまいました。

2021年2月22日追記:
 
Jitsi.org - develop and deploy full-featured video conferencing
 
 
JITSI.ORG
Jitsi.org – develop and deploy full-featured video conferencing
Free open-source video conferencing for web & mobil

2020年9月1日火曜日

Mongodb タイトルなしの汎用インポートコマンド

 なんだこれ!と思われそうですが、タイトルがないや使えないCSV、しかもカラムが256以下の汎用Mongodbインポートのコマンドとして紹介しようと思います。もっといい書き方あってもいい気がしますが。。。

C:\Users\user\Desktop>mongoimport /db:dpc /collection:mdc01ope256c  /type:csv /file:MDC01_OPE.csv /fields:C001,C002,C003,C004,C005,C006,C007,C008,C009,C010,C011,C012,C013,C014,C015,C016,C017,C018,C019,C020,C021,C022,C023,C024,C025,C026,C027,C028,C029,C030,C031,C032,C033,C034,C035,C036,C037,C038,C039,C040,C041,C042,C043,C044,C045,C046,C047,C048,C049,C050,C051,C052,C053,C054,C055,C056,C057,C058,C059,C060,C061,C062,C063,C064,C065,C066,C067,C068,C069,C070,C071,C072,C073,C074,C075,C076,C077,C078,C079,C080,C081,C082,C083,C084,C085,C086,C087,C088,C089,C090,C091,C092,C093,C094,C095,C096,C097,C098,C099,C100,C101,C102,C103,C104,C105,C106,C107,C108,C109,C110,C111,C112,C113,C114,C115,C116,C117,C118,C119,C120,C121,C122,C123,C124,C125,C126,C127,C128,C129,C130,C131,C132,C133,C134,C135,C136,C137,C138,C139,C140,C141,C142,C143,C144,C145,C146,C147,C148,C149,C150,C151,C152,C153,C154,C155,C156,C157,C158,C159,C160,C161,C162,C163,C164,C165,C166,C167,C168,C169,C170,C171,C172,C173,C174,C175,C176,C177,C178,C179,C180,C181,C182,C183,C184,C185,C186,C187,C188,C189,C190,C191,C192,C193,C194,C195,C196,C197,C198,C199,C200,C201,C202,C203,C204,C205,C206,C207,C208,C209,C210,C211,C212,C213,C214,C215,C216,C217,C218,C219,C220,C221,C222,C223,C224,C225,C226,C227,C228,C229,C230,C231,C232,C233,C234,C235,C236,C237,C238,C239,C240,C241,C242,C243,C244,C245,C246,C247,C248,C249,C250,C251,C252,C253,C254,C255,C256

2020-09-01T19:59:05.061+0900    connected to: localhost

2020-09-01T19:59:05.636+0900    [#####...................] dpc.mdc01ope256c     364KB/1.52MB (23.4%)

2020-09-01T19:59:08.610+0900    [#####...................] dpc.mdc01ope256c     364KB/1.52MB (23.4%)

2020-09-01T19:59:11.610+0900    [##########..............] dpc.mdc01ope256c     696KB/1.52MB (44.7%)

2020-09-01T19:59:14.610+0900    [###############.........] dpc.mdc01ope256c     1012KB/1.52MB (65.0%)

2020-09-01T19:59:17.611+0900    [####################....] dpc.mdc01ope256c     1.30MB/1.52MB (85.3%)

2020-09-01T19:59:20.610+0900    [#######################.] dpc.mdc01ope256c     1.52MB/1.52MB (100.0%)

2020-09-01T19:59:21.348+0900    [#######################.] dpc.mdc01ope256c     1.52MB/1.52MB (100.0%)

2020-09-01T19:59:21.349+0900    imported 4768 documents

Spotfire からMongoDBのデータを分析する(DPC公開データをサンプルに)

MongoDBはスキーマを定義しなくても下記のように簡単にコマンド一行でCSVをインポートできます。

C:\Users\user\Desktop>mongoimport /db:dpc /collection:facilities /type:csv /file:facilities.csv /headerline

2020-09-01T14:49:28.410+0900    connected to: localhost

2020-09-01T14:49:29.428+0900    [#####...................] dpc.facilities       144KB/659KB (21.9%)

2020-09-01T14:49:30.485+0900    [#######################.] dpc.facilities       659KB/659KB (100.0%)

2020-09-01T14:49:30.486+0900    imported 4764 documents

MongoDBシェルで二つのコレクションをJOINさせるのもいいのですが、データのJOINに強いBIツール、Spotfireを使えば、複雑なシェルやSqlを書く必要もなくなります。

MongoDBは普通のSqlを使うデータベースのようにBIツールから接続するには、有償のODBCドライバーもありますが、こちらは無償のBIコネクターを使います。

ただ、このコネクターは、MySQL ODBC Unicode Driverに依存しているのと、Mysqlのドライバーのインストールは、Visual Studio 2015、2017、および 2019 用 Microsoft Visual C++ 再頒布可能パッケージが必要なので、両方も用意しましょう。

MongoDBがインストールされている前提で話を進みたいので、インストールは下記のページを参考してください。個人的にTB単位の外付けSSDをMongoDBを持ち歩くので、ポータルバージョンを使っています。


まず、BIコネクターに下記のコマンドでschema.drdlを作ります。(コレクションが増えた場合、作り直す必要があるようです)

C:\Program Files\MongoDB\Connector for BI\2.14\bin>mongodrdl.exe --host localhost --db dpc --out schema.drdl

そして、下記のコマンドでlocalhost 3307

C:\Program Files\MongoDB\Connector for BI\2.14\bin>mongosqld.exe

うまくリスナーが待機状態になる場合は、下記のようにコマンドプロンプトに吐き出されます。

2020-09-01T17:42:24.887+0900 I CONTROL    [initandlisten] mongosqld starting: version=v2.14.0 pid=66988 host=DESKTOP-T5OEMLV
2020-09-01T17:42:25.168+0900 I CONTROL    [initandlisten] git version: 6fa82d07a176aeee28f685c3f8e8806832c769b0
2020-09-01T17:42:25.168+0900 I CONTROL    [initandlisten] OpenSSL version OpenSSL 1.0.2n-fips  7 Dec 2017 (built with OpenSSL 1.0.2s  28 May 2019)
2020-09-01T17:42:25.168+0900 I CONTROL    [initandlisten] options: {}
2020-09-01T17:42:25.168+0900 I CONTROL    [initandlisten] ** WARNING: Access control is not enabled for mongosqld.
2020-09-01T17:42:25.168+0900 I CONTROL    [initandlisten]
2020-09-01T17:42:25.172+0900 I NETWORK    [initandlisten] waiting for connections at 127.0.0.1:3307
2020-09-01T17:42:25.909+0900 I SCHEMA     [sampler] sampling MongoDB for schema...
2020-09-01T17:42:26.635+0900 I SCHEMA     [sampler] mapped schema for 4 namespaces: "node_memo_demo" (1): ["memos"]; "test" (1): ["test"]; "dpc" (2): ["facilities", "mdc01ope"]

そして、odbcを検索して、ODBCデータソース(64ビット)を起動してください。




システムDSNを追加し、MySQL ODBC Unicode Driverを選んでください。




データソース名、データベース名は自分の環境に合わせて変更してください。
問題がなければ、Testをクリックすれば、接続成功のような表示がされます。

MongoDBのCSVインポートは、下記の記事を参考してください。


Spotfireは画像の感じになります。

データを追加:その他>ODBC~



データソース:ODBC~>mongodb



OKをクリック、また下の窓のOKをクリックして、次のSQLステートメント画面に
select * from facilities を入力して、データソース名を指定してOKをクリックすれば、
施設概要が取り込まれます。




それから、MDC01手術のデータ(mdc01ope)も最初の+>その他>ODBC~の手順から上記と似た手順で取り込みましょう。

両方のデータが取り込まれたら、データキャンパスの画面からJIONさせます。(詳細手順は割愛します)



JOINしたデータは下記の画像のように、施設概要の情報がMDC01の件数や在院日数に結合している形になりました。


あとは、自由に結合した項目を軸にいろいろなビジュアライゼーションが作れます。





【関連するURL等】

MySQL ODBC Unicode Driver

https://dev.mysql.com/downloads/file/?id=497108

mysql-connector-odbc-8.0.21-winx64.msi

のダウンロード 

https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads

mongodb のインストールと関連コマンド

インストール:
Node.js & MongoDB portable 持ち歩くポータブルバージョン for windows

startMongoDB.bat(MongoDBポータルの起動) 
    REM set PATH=%PATH%;%~dp0\bin
    bin\mongod --quiet --bind_ip 127.0.0.1 --logpath %~dp0\log\MongoDB.log --logappend --dbpath %~dp0\data --directoryperdb --install
    net start "MongoDB"
    dir %~dp0

stopMongoDB.bat(MongoDBポータルの停止) 
     net stop "MongoDB" 
     bin\mongod --remove

Mysqlのようにポート3307にサービス
    mongodrdl.exe --host localhost --db dpc --out schema.drdl
    mongosqld.exe


DPC公開データを処理してみよう(テキストエディターの利活用)

 テキストエディターはいろいろありますが、個人的に使い慣れているのはEmEditorのフリーバージョンです。なければ、生きていけないほどではないが、かなり手間をかけてデータを処理しなければならないことは間違いありません。

一つの例として、厚労省DPC公開データの 施設概要表(Excel:533KB)にしてみましょう。これをCSVに吐き出して、MongoDBにいれてみたいと思いますが、タイトルの米印※と改行が邪魔ですね。分析としてはいけてないデータです。(https://www.mhlw.go.jp/stf/shingi2/0000196043_00003.html

なぜなら、CSVに保存しなおすと中身が下記の形になってしまいますから。。。

"告示番号
※1","通番
※2",市町村番号,"都道
府県",施設名,病院類型,"DPC算定病床数
※3","DPC算定病床の入院基本料
※4","DPC算定病床割合
※5",回復期リハビリテーション病棟入院料病床数,地域包括ケア病棟入院料病床数,"精神病床数
※6",療養病床数,結核病床数,"病床総数
※7","平成30年度
提出月数
※8"
10001,10001,01101,北海道,札幌医科大学附属病院,平成15年度DPC参加病院,832,特定機能7対1,94.5%,0,0,42,0,6,880,12
10002,10002,01102,北海道,北海道大学病院,平成15年度DPC参加病院,869,特定機能7対1,92.5%,0,0,70,0,0,939,12
10003,10003,01204,北海道,旭川医科大学病院,平成15年度DPC参加病院,571,特定機能7対1,94.9%,0,0,31,0,0,602,12

では、「正規表現」で置換しましょう。まずは、正規表現 \n※[1-9] を使います。これは改行米印数字を空っぽに置換することになります。


すると、下記の画像のように改行米印数字が消えました。

それから、今度は「正規表現」で置換の抽出方法です。正規表現」(".*)\n(.*") から $1$2 を抽出します。最初の括弧は$1の範囲でダブルクォーテーションと任意の文字.* があてはまることです。$2は二番目の括弧が範囲で任意の文字.*とダブルクォーテーションがあてはまることです。改行\nは括弧ないではないので抽出の対象外となります。



ダブルクォーテーション内、ひとつ以上の改行があれば、もう一回、「すべて置換」をクリックすれば、綺麗なタイトルが得られます。

これで綺麗なデータを下記のコマンドで簡単にMongodbにインポートできます。


C:\Users\user\Desktop>mongoimport /db:dpc /collection:facilities /type:csv /file:facilities.csv /headerline

2020-09-01T14:49:28.410+0900    connected to: localhost

2020-09-01T14:49:29.428+0900    [#####...................] dpc.facilities       144KB/659KB (21.9%)

2020-09-01T14:49:30.485+0900    [#######################.] dpc.facilities       659KB/659KB (100.0%)

2020-09-01T14:49:30.486+0900    imported 4764 documents

雑談:ITのルーツ

  私のITのルーツは、パソコンゲームからでした。IBM PC/XT、PC/ATのごろだったと思います。当時はメモリーのあるところをロックすれば、キャラのHPは殴られても減らなく無敵になったのです。

 初めて買ってもらったパソコンはACERで当時は5万台湾ドルもする高価のものでした。確かにIBMのパソコンは10万台湾ドル以上、当時大卒の初任給は2万台湾ドル弱でした。

 いまでもはっきり覚えましたが、パソコン屋さんが送ってきたあと、「ちょっと起動してみませんか?」と聞かれたら、「起動でなんですか?」と聞き返しました。5.25インチのフロッピーディスクをドライブにいれて、電源をオンにすると、黒い画面に白い文字ができてき、最後 A:> が出た記憶です。

 当時は大学1年生、もちろんインターネットもなくパソコンのコースはあるかどうかもはっきり覚えていません。頼りになるのは、自分にとってものすごく理解しにくい雑誌と自分の独学の根性でした。

 その後、大学のコンピューター関係のサークルに入って、みんなであるパソコン屋のお姉さんにdBase III plusを教えてもらいました。半年後、初めてのITアルバイトとしてこのdBase III plusを使って団子の町工場のための受注帳票ツールを作って8千台湾ドルをもらいました。すごくうれしい体験でしたね。

処理中のファイルを二重処理しないように

 ラズベリーパイやLinux、Macのターミナル、WindowsのUbutuなど、大きな動画ファイルを変換するとき、特にブラウザから処理するプログラムが二重起動されてしまうことを防ぐ。

#!/bin/bash

echo $1

check=`lsof ~/mypath/* 2>&1|awk '{gsub(" ","\\ ",$0); print $0}'|grep -c $1`


if [ $check -lt 1 ]
then

MP4Box -fps 30 -quiet -add "$1" "$1.mp4"
mv "$1" ~/mypath/finished/
rm "$1"
chmod a+w "$1.mp4"

else
 echo "$1 using..."
fi


なお、ファイル名にスペースが入っている場合は、awkのところを修正する必要があるかもしれない。