マイブーム@技術と生活

仕事や生活に関わる技術的なことを記述します。

開発ツール Express

参考: http://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm

■ ハローワールド

ファイル:app.js
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});
// app.get('/index.htm', function (req, res) {
//    res.sendFile( __dirname + "/" + "index.htm" );
// })

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

 

■ GETメソッド

ファイル:index.htm
項目入力を作成
フォームの送信先を action="http://127.0.0.1:3000/process_get" にする

ファイル:app.js
public ファイルの公開(ブラウザで直接URLを指定して表示できるファイル)
index.htm の表示
process_get の表示(応答)
サーバーの listen

■ POSTメソッド

ファイル:index.htm
項目入力を作成
フォームの送信先を action="http://127.0.0.1:3000/process_post" にする

ファイル:app.js
urlencodedParser の用意
public ファイルの公開(ブラウザで直接URLを指定して表示できるファイル)
index.htm の表示
process_post の表示(応答)
サーバーの listen

 

■ ファイルアップロード

ファイル:index.htm
ファイル名を選択(input type="file")
フォームの送信先を action="http://127.0.0.1:3000/file_upload" にする
また、enctype="multipart/form-data" で、POST

ファイル:app.js
bodyParser の用意
multer の用意(ファイルアップロードのモジュール)
public ファイルの公開(ブラウザで直接URLを指定して表示できるファイル)
index.htm の表示
file_upload の応答(POST)
 保存先のファイル名を用意
 readFile( path, function () { writeFile( file, data, function () {
   結果表示
     });
 });
サーバーの listen

 

■ クッキー

ファイル:app.js
cookieParser の用意
/ の表示時に、req.cookies で、クライアントから送られたクッキーを取得
サーバーの listen

 

MySQL

参考:https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/
参考:http://atmarkplant.com/nodejs-mysql-basic/

package.json - "dependencies": { - "mysql": "^2.5.4"

npm install

ファイル:app.js
var express    = require("express");
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'mysql001.db.com',
  user     : 'laa0397',
  password : 'abcdef',
  database : 'laa0397-db'
});
var app = express();
connection.connect(function(err){
  if (!err) {
    console.log("Database is connected ... nn");    
  } else {
    console.log("Error connecting database ... nn");    
  }
});
app.get("/control/mysql_responds", function(req,res) {
  connection.query('SELECT * from co_person', function(err, rows, fields) {
    connection.end();
    if (!err)
      console.log('The solution is: ', rows);
    else
      console.log('Error while performing Query.');
    });
});
app.listen(3000);
→ 更にプール接続に変更する

 

HTTPS

ファイル:bin/www

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('/var/www/html/homepage/keys/server.rsa'),
  cert: fs.readFileSync('/var/www/html/homepage/keys/server.crt')
};
var server = https.createServer(options, app);
 

■ ルーティング / ビュー / パブリック

ファイル&フォルダ:
  routes / index.js、users.js
  views / index.ejs
  public
render を実行すると、ビューに置かれ編集した HTML を表示する
send を実行すると、データを送信する

 

■ ボタン押下

ファイル:views / index.ejs
<input name="like" id="like" value="Like" type="submit" /> <input name="count" id="count" value="0" type="text" readonly />
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
  $('#like').click(function(){
    $.post(
      '/test',
      {name:"ABC", email:"abc@yahoo.com"},
      function(data){
        $('#count').val(data);
      }
    )
});
</script>

ファイル:routes / index.js
/* Button click. */
var count = 0;
router.post('/test', function (req, res) {
    count += 1;
    res.send(String(count));
    console.log('works');
});

 

■ 空きメモリ量

ファイル:views / index.ejs
空きメモリ量<span id="freemem"></span><br>
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
  setInterval(function() {
    $.get(
      '/freemem',
      function(data){
        $('#freemem').text(String((Number(data)/1024/1024/1024).toFixed(3))+' GB');
      }
    )
  }, 300);
</script>

ファイル:routes / index.js
/* Memory information. */
const os = require('os');
router.get('/freemem', function (req, res) {
    res.send(String(os.freemem()));
    console.log('freemem');
});

 

■ HTTP プロキシ(HTTPS プロキシ)

ファイル:proxy.js

var http = require('http');
var httpProxy = require('http-proxy');
var url = require('url');

var proxy = httpProxy.createProxyServer({});
var server = http.createServer(function(req, res) {
  if (req.headers == null || req.headers.host == null || req.url == null) {
    // do nothing
  }
  else {

    var hostname = req.headers.host.split(":")[0];
    var pathname = url.parse(req.url).pathname;

    if (hostname == 'example.com' || hostname == 'apache.example.com') {
      proxy.web(req, res, { target: 'https://localhost:8443', secure: false });
    } else if (hostname == 'node.example.com') {
      proxy.web(req, res, { target: 'https://localhost:8124', secure: false });
    } else {
      res.writeHead(404);
      res.end();
    }
  }
});
server.listen(80); 

 

(作成中)

パナマ文書

租税回避地を利用しての節税を放置したままで、来年4月の消費税率10%への増税は、ありえないと思いますが、どうでしょう。経過を見守りたいと思います。

 

2016年5月10日午前3時、公開日

[予想]
日本の多くの大企業、会社経営者、が名前を連ねる。宮内氏かな。

[実際]
公開のウェブページ: https://offshoreleaks.icij.org/
国で探す(Search by country)と管轄で探す(Search by jurisdiction)があって、
前者にて、人名、会社名、住所、を入力して、検索する。

 

2016年5月、やばそうな情報

Kazuhiko ASAKAWA、AIJ投資顧問
SOKA GAKKAI, INC. (opencorporates から Panama 所在で見つかる)、創価学会
NHK GLOBAL INC.
パナマップ: http://153.120.36.84/

ダウンロードした csv をテキスト検索(Bunkyo)

東京都文京区白山1-33-16 パークコートプレイス 801、1F ネオスタンダード、2F澤田こどもクリニック、3F NiCT、4F NiCT、5F 医療法人社団 同友会、6F NiCT、7F NiCT、8F空き、9F 日本ビル管理保証(株)、9F Grace international Ltd.、PH T.S Investment Ltd.、KIYOTSUGU KAWASAKI
東京都文京区弥生2-4-22、リサーラ東京(有)、MUTO KAZUHITO、塚本和子
東京都文京区白山4-33-21 ライオンズマンション白山 303、TSUSHIMA KOJI
東京都文京区本郷3-15-2 本郷二村ビル、OZAKI SHIGERU
東京都文京区白山5-22-1 コロナビル 2F (〒112-0001、Shiroyama Ichilhara Building)、YASUHIKO ONO
東京都文京区千駄木3-36-8 シルバーパレス千駄木 601、TAKATOSHI KUWAHARA
東京都文京区小石川4-16-13 小石川パークタワー 1705、YASUSHI KINOSHITA、http://www.kinoshita.com/
東京都文京区本郷4-9-25 真成館ビル 604、JASC 日本資産証券化センター、柳川 勇夫、YATSUKI MATSUMI
東京都文京区大塚3-3-14 茗荷谷パークホームズ 901、Hisako Akutagawa
東京都文京区本郷4-12-16 トーア文京マンション 305、WATARU YOSHIKOSHI
東京都文京区音羽1-14-2 三井音羽ハイツ 1303、Masaru Yamamoto
東京都文京区西片2-25-8 モンテベルデ本郷西片 703、Shiro Otomo

2016年5月28日午後10時

来年4月の消費税率10%への引き上げについて、2019年10月まで2年半延期

 

(作成中)

平成28年度診療報酬改定

病床機能報告制度

・電子レセプトへの病棟情報の記録について
  入院基本料、又は、特定入院料・その他、にかけて記録する(DPC以外)

・病床機能報告用マスター ファイル仕様説明書

・病床機能報告用マスターファイル(サンプル)(Zipファイル)

 

 診療報酬改定に伴う各種マスターの仕様変更

・医科診療行為マスター

1 項目の変更
(1) 項番 65 が「入院基本料区分(最大バイト2)」から「予備(最大バイト2)」に変更
(2) 項番 117 が「予備(最大バイト3)」から「点数表区分番号(最大バイト30)」に変更
(3) 項番 118 が「予備(最大バイト3)」から「非侵襲的血行動態モニタリング加算(最大バイト1)に変更
(4) 項番 119 が「予備(最大バイト3)」から「凍結保存同種組織加算(最大バイト1)」に変更

2 フラグの変更
(1) 項番 22 の「看護加算」に「68:夜間75対1看護補助加算」と「69:夜間看護体制加算」が追加
(2) 項番 23 の「麻酔識別区分」に「7:臓器移植術加算・~」の追加と「8:術中経食道心エコー連続監視加算」の変更
(3) 項番 24 の「入院基本料加算区分」でコードの変更
(4) 項番 42 の「上限年齢」に「AE:生後90日」が追加
(5) 項番 46 の「処置乳幼児加算区分」に「5:6歳未満乳幼児加算(処置)が算定できる診療行為」等の変更、追加
(6) 項番 63 の「包括逓減区分」に「108:皮膚灌流圧測定」と「109:シャトルウォーキングテスト」が追加
(7) 項番 70 の「地域加算」に「7:7級地地域加算自体」が追加
(8) 項番 72~81 の「施設基準」でコードの変更

3 コメントコードの追加
(1) コード番号 840****** (コメントパターン 40)、標準負担額経過措置(精神)入院 年 月 日
(2) ADL 区分に係る定型コメントコード(コメントパターン 20)

・その他

食事療養標準負担額・生活療養標準負担額のコード変更
医薬品マスターの収載内容一部変更
未コード化特定機材コードの取扱い

 

記録条件仕様の変更及び記録方法

・包括評価対象外理由レコード

GRレコードの追加、出来高算定理由コード(別表●)の追加
平成28年10月診療分から記録

・病床機能報告の記録

SIレコードを使い、数量データは省略、点数は0を記録する

・その他

国保連固有情報レコード
平成24年3月診療以前分の取扱い
未コード化特定器材の記録に係る文言
日計表レコードの削除
その他文言修正
記録要領と合致していない設定の変更(調剤、SHレコード)

 

 

Gmail (仕事用)を使っていて、iPhone 6 で見たメールの添付ファイルを、ノートPCに移動

仕事のメールは Gmail を使っています。外出のときは自分の iPhone 6 でメールを確認します。ノートPCを持ち歩くことはあるのですが、ポケット Wifi はみんな持ち出し済みで、無いことが多いです。作業上、誰かにメールで送って貰ったファイルを、ノートPCに移動しなければならないときがあります。

ご存じのように、iPhone 6ChromeGmail を見ていて、その添付ファイルを、iPhone 6 に保存して加工する、なんてことはできません。特に、zip ファイルは拡張子を zi に変えて添付します。充電用に持ち歩いている Lightning ケーブルで iPhone 6 をノートPCに接続しても、写真ファイルしか扱えません。お金のかかるテザリングは契約しません(例え最初の1年間が無料だったとしても)。

そこで Lightning-USB メモリを購入しました。

Logitec、USB memory for Lightning 16GB、LMF-LGU316GWH

 

iPhone 6Gmail からノートPC 】

iSmartCopy アプリをインストール。Gmail アプリをインストール(Chrome では不可でした)。メールの添付ファイルをタップ。全画面に表示されたら再度タップ。右上ボタン(アクションボタン)から「iSmartCopy で開く」を選択。iSmartCopy で開いたら、「完了」、「編集」、そのファイルを選択、「移動」、外部ストレージ、「この場所に移動」。以上で、ノートPCのUSBポートに接続して、ファイルを参照できました。

SafariChrome でダウンロードした exe ファイル等を、「次で開く」、iSmartCopy を選べば、iSmartCopy の iPhone ドライブへ保存できます。そのファイルを外部ストレージに移動(またはコピー)し、ノートPCのUSBポートに接続して、ファイルを参照できました。

  

【 ノートPCから iPhone 6Gmail

ノートPCからUSBメモリにコピー(または移動)。iSmartCopy の外部ストレージフォルダでファイルをタップ。全画面に表示されたら再度タップ。右上ボタン(アクションボタン)から「Gmail」を選択(無ければ、その他から追加)。メールの宛先や件名を書いて、右上ボタン(送信ボタン)を押せば、ファイルを添付してメールが送信できました。

 

(追記2016.03.12)

上記方法だと、ファイルを1個しか添付できませんでした。また、文章を、他のアプリからコピーして、メール本文へ貼り付けることができませんでした(バグでしょうか)。

iSmartCopy の外部ストレージフォルダで、「編集」、複数ファイルを選択します。下のメールボタンを押して、iPhone メールで Gmail へメールを出します。そのメール転送して、本当のメールを作成します。

 

(2016.05.02、iPhone で撮った写真を PC に移動)

覚え難いのでメモ。iSmartCopy アプリの外部ストレージのフォルダを選択。下の+ボタンを押し、ライブラリを選択。フォトアルバムやカメラロールからコピーしたい写真を選択する。

開発ツール Electron: 導入

Electron を使えば、標準的な JavaScript で、OS のコントロール API を使ったデスクトップアプリケーションが作れます。ウェブサーバーの代わりにデスクトップアプリケーションで構築した Node.js の実行環境の1つです。

Electron はユーザーインターフェイスGUI)ライブラリを持つ JavaScript ではありません。代わりに、Electron は、ウェブページをGUIとして使います。JavaScript で制御する最小構成の Chromium ブラウザです。

 

主プロセス

Electron では、package.json の main スクリプトを実行するプロセスを主プロセスと呼びます。主プロセスで実行するスクリプトは、ウェブページを作り、GUI を表示します。

 

描画プロセス

Electron はウェブページを表示するために Chromium を使い、Chromium のマルチプロセス機能を利用します。Electron の各ウェブページは自身のプロセスで動作し、それらは描画プロセスと呼ばれます。

通常のブラウザでは、ウェブページはアクセスが制限された環境で動作しており、コンピュータのリソースへのアクセスは許可されていません。しかし、Electron では、ウェブページで、 io.js の API を使って OS の下層レベルの操作が行えます。

 

主プロセスと描画プロセスの違い

主プロセスは、BrowserWindow インスタンスを作り、ウェブページを表示します。各 BrowserWindow インスタンスは自身の描画プロセスでウェブページを表示します。BrowserWindow インスタンスが破棄されたとき、その描画プロセスも停止します。

主プロセスはすべてのウェブページとそれらの描画プロセスを操作できます。各描画プロセスは独立していて、自分の中で表示しているウェブページのみ操作できます。

ウェブページでは、GUI に関する OS のコントロール API を呼び出すことは許可されていません。ウェブページで OS の GUI を操作することは、大変危険で、容易にリソースをリークするためです。ウェブページで GUI の操作を行いたい場合は、主プロセスと通信する必要があります。

Electron では、主プロセスと描画プロセスの通信を行うために、IPC モジュールを提供します。また、RPC 形式の通信を行うリモートモジュールもあります。

 

最初の Electron アプリケーションを作成する

Electron アプリケーションは、通常、次のような構成です。

your-app/
├── package.json
├── main.js
└── index.html

package.json の形式は Node のモジュールと全く同じです。main 項目に指定されたスクリプトが、アプリケーションの起動スクリプトであり、主プロセスで実行されます。package.json の例は次のようになります。

{
  "name"    : "your-app",
  "version" : "0.1.0",
  "main"    : "main.js"
}

main.js はウィンドウを作り、システムのイベントを処理します。main.js の例は次のようになります。 

var app = require('app');  // アプリケーションの起動・終了を制御するモジュール
var BrowserWindow = require('browser-window');  // ブラウザを起動するモジュール

// サーバーに障害を報告する
require('crash-reporter').start();

// ウィンドウのグローバルな参照を保存する。そうでなければ、JavaScript
// ガベージ・コレクション(GC)を実行したときに、ウィンドウが勝手に閉じてしまう
var mainWindow = null;

// すべてのウィンドウが閉じられたとき、アプリケーションを終了する
app.on('window-all-closed', function() {
  if (process.platform != 'darwin') {
    app.quit();
  }
});

//  Electron がすべての初期化処理を完了し、ブラウザウィンドウを作る準備ができたときに、
// 呼び出される
app.on('ready', function() {
  // ブラウザウィンドウの作成
  mainWindow = new BrowserWindow({width: 800, height: 600});

  // アプリケーションで index.html を表示する
  mainWindow.loadUrl('file://' + __dirname + '/index.html');

  // DevTools を開く
  mainWindow.openDevTools();

  // ウィンドウが閉じたときに呼び出される
  mainWindow.on('closed', function() {
    // ウィンドウの参照を削除する。マルチウィンドウのアプリケーションを作っている場合は、
    // 通常、配列にウィンドウを格納しているので、
    // ここで、それら要素を削除する
    mainWindow = null;
  });
});

最後に、index.html は、表示するウェブページです。

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using io.js <script>document.write(process.version)</script>
    and Electron <script>document.write(process.versions['electron'])</script>.
  </body>
</html> 

 

作成したアプリケーションを実行する

 

(作成中)

 

T90CHI-3775、エイスース、Windows 10 タブレット

ASUS TransBook T90Chi (Windows 10)を買いました。使い方のノウハウを書きます。使っていて、いろいろ不満もあるかもしれませんが、値段が3万円ですから、投資効果は抜群です。

 1.仕様概要
重さ:337g、725g w/ キーボード
CPU: Atom Z3775 (4コア、1.46GHz)
メモリ:2GB
eMMC:64GB
ディスプレイ:1280x800

2.セットアップ
Windows 10 Pro にアップグレードしました。
マウスは別購入で Bluetooth を使います。
メモリが2GBなので Edge は反応が悪く、Chrome を使います。
外では、au Wi-Fi 接続ツール、を利用します。

 3.ディスプレイの角度が悪く、見難い
キーボードの下に本を入れて調節します。

 4.時々、ELECOM Laser Mouse (Bluetooth)の調子が悪い
「デバイスの削除」を行って、再度、ペアリングします。
ダブルクリックが反応し難いので、クリック+Enter を使います。
2016.08.13 追記:コントロールパネル、デバイスマネージャー、Bluetooth、ハードウェア変更のスキャン、で復帰
2016.09.09 追記:「設定」デバイスBluetooth、ELECOM Laser Mouse を「デバイスの削除」。再度ペアリングで回復
2016.11.16 追記:キーボードとマウスの電源スイッチは、Win10 立ち上げ後に ON にする

 5.時々、キーボードがクラッシュし、キーが押しっぱなしになる
未解決。PCを再起動する。マウスとの相性が悪いでしょうか。


Wifi が機能しない → 「設定」Wi-Fi のオンオフで回復。
     → 2016.12.03 コントロールパネル、ネットワーク接続、「Wi-Fi」を削除
      それから自動的にインストールされて回復した。

 

2017.10.14
電源が頻繁に途切れるので、ACアダプターを買い換え。スマホ用の5V、2Aで良い。

 

2021.03.17
Office Mobile が入っている。このままでは, Microsoft Office が使えない

 

2021.08.21
他PCで Microsoft アカウントのパスワードを変更した場合は、
設定、共有エクスペリエンス、アカウント、今すぐ修正する、
から新しいパスワードを入力する

 

 

開発プロジェクトのひな型作成

参考: http://michaelcrump.net/creating-and-debugging-console-apps-with-vscode/

 

【インストール】

参考: http://yeoman.io/learning/index.html

npm を使うために Node.js コマンドプロンプトから
① YEOMAN インストール
    npm install -g yo bower grunt-cli gulp
ASP.NET ジェネレータのインストール
    npm install -g generator-aspnet


参考: https://azure.microsoft.com/ja-jp/documentation/articles/web-sites-create-web-app-using-vscode/

Win コマンドプロンプトから
① DNVM (.NET Version Manager) インストール
    @powershell -NoProfile ...
② DNX (.NET Execution Environment) ダウンロード
    dnvm upgrade

MySQL のアプリケーションパスが原因で、Node.js コマンドプロンプトのパス設定が失敗していると思われる。なので、Win コマンドプロンプトから

 

【プロジェクト作成】

Node.js コマンドプロンプトから
yo aspnet

f:id:sato7411:20151129182020p:plain

 

【ビルド】

Win コマンドプロンプトから
dnu restore
dnu build
dnx ConsoleApplication

  

【参考・その他】

Building Projects with Yeoman
http://docs.asp.net/en/latest/client-side/yeoman.html
Visual Studio Code を使ってUbuntuC# コンソールアプリをデバッグhttp://troushoo.blog.fc2.com/blog-entry-248.html