マイブーム@技術と生活

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

開発ツール 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

 

 

開発ツール Mono インストール

環境:
Windows 10 Pro (32ビット)
IIS
CGIASP.NET
PHP

 

インストール:

http://www.mono-project.com/download/ より
mono-4.2.1.102-gtksharp-2.12.30-win32-0.msi
gtk-sharp-2.12.30.msi
を入手

 

ハローワールド:

http://www.mono-project.com/docs/getting-started/mono-basics/

Mono コマンドプロンプトで操作する

・コマンドアプリケーション
mcs hello_console.cs
mono hello_console.exe

・ウィンドウズアプリケーション
mcs hello_win.cs -pkg:dotnet
mono hello_win.exe

ASP.NET アプリケーション
xsp4 --port 9000
http://localhost:9000/hello.aspx


Gtk# アプリケーション

mcs hello_gtk.cs -r:"C:\Program Files\Mono\lib\gtk-sharp-2.0\pango-sharp.dll"
-r:"C:\Program Files\Mono\lib\gtk-sharp-2.0\atk-sharp.dll"
-r:"C:\Program Files\Mono\lib\gtk-sharp-2.0\gdk-sharp.dll"
-r:"C:\Program Files\Mono\lib\gtk-sharp-2.0\gtk-sharp.dll"
-r:"C:\Program Files\Mono\lib\gtk-sharp-2.0\glib-sharp.dll"

mono hello_gtk.exe

 

開発ツール Node.js インストール

■ 環境
Windows 10 Pro (32ビット)
IISASP.NETCGIPHP

■ インストール
http://nodejs.org/  より、node-v5.1.0-x86.msi を入手

 

■ Node.js ウィンドウからプログラム作成と実行

f:id:sato7411:20151123145941p:plain

 

■ Node.js コマンドプロンプトからプログラム作成と実行

f:id:sato7411:20151123152452p:plain

f:id:sato7411:20151123151047p:plain

f:id:sato7411:20151123152138p:plain

 

Visual Studio Code からプログラム作成と実行
空のフォルダを指定して、新しいファイル(app.js)を追加するか、app.js があるフォルダを開く([ファイル]-[フォルダーを開く])。
デバッグ]、[デバッグの開始]で、[環境の選択]にて[Node.js]を選択すると、[アプリケーションの起動構成ファイルをセットアップしてください]のメッセージが出て、launch.json が作られる。必要に応じて、起動ファイル "program": を変更する。

f:id:sato7411:20151124023119p:plain

 

■ Node.js その他
json ファイル: アプリの構造を記述
インテリセンス機能は [ctrl] + [space] とあるが、今のところ、自動的に候補が現れる
Node.js は非同期処理を行う。同期処理はデリゲートで書く

[表示]-[コマンド パレット]、Extensions: Install、EJS language support をインストール

[ファイル]-[基本設定]-[ユーザー設定]、// Place your settings in this file to overwrite the default settings を編集
"editor.tabSize": 2,
"editor.insertSpaces": true

 

W3C オートモーティブ ワーキンググループ会合

英語の勉強のために、日本語訳しています。(作成中)

 

W3C オートモーティブ ワーキンググループ会合
シュトゥットガルト(ドイツ)
2015年4月23日

参加者
Adam Abramski (インテル、米国カリフォルニア)
Paul Boyes (OpenCar、米国シアトル)
Hvald Walter (T-Systems、ドイツ)
William Han、Jenny Jeon (OBIGO、韓国)
Shinjiro Urata (ACCESS、日本)
Justin Park (LGエレクトロニクス、韓国)
Osamu Nakamura、Ted Guild、Bernard Gidon、Kaz Ashimura (W3C
Adam Crofts、Kevin Gavigan (ジャガー・ランドローバー、イギリス)
Peter Winzell (三菱、日本)
Wonsuk Lee、Jonathan Jeon (韓国電子通信研究院 ETRI)
Tatsuhiko Hirabayashi (KDDI、日本)
Dave Jensen (電話参加)
An Qing (電話参加、アリババ、中国)
Joel、Hoffman (コンサルタント
Gabriel Kepeklian (Vedecom、フランス)

司会
Adam、Paul

議事録
ted、kaz

 

目次
1. はじめに
2. ビジネスグループ VS ワーキンググループ
3. KDDIACCESS 車載 API とデータ仕様の実装
4. 仕様の詳細
5. JLR によるセキュリティ・プレゼンテーション
6. グループ参加の拡大
7. 月次報告
8. 次回会合
9. 仕様上の次の課題

次回課題のまとめ

---

はじめに

adam: 自己紹介から始めて、次に、ビジネスグループとワーキンググループの違いについて説明します。
予定表は、メールで伝えた、フィードバックを元に作成したものから、少し変更しています。
ワーキンググループの作業により、車載 API 仕様に、現在までに多くの追加情報がありました。
仕様の状況をレビューします。
用途と必要事項については、より詳細に説明します。
仕様に準拠していることを確認するためのテストを一式、用意しなければなりません。
セキュリティと個人情報保護について検討します。
車載 API を早期に実装した KDDIACCESS によるプレゼンテーションを行います。前回は、JLR から、彼らのケースにおける実装の実現可能性を明らかにしたプレゼンテーションがありました。
仕様を公開します。公開せず検討しなければならない項目もまだあります。
いつでも気軽に発言してください。
私は Adam Abramski です。2011年からワークショップに参加しています。
携帯電話の分野から来て、車載インフォテイメントに移り、GENIVI アライアンスを始めました。
携帯電話でウェブ分野の仕事を多くしていました。
GENIVI アライアンスは、エキスパートグループと呼ばれるものを持っており、信号仕様について作業していた韓国グループがあります。
初期に作業し標準化を行うことに関心があります。インテル社では、自動車業界の TIER1 や OEM 向けのプロジェクトマネージメントをしています。

paul: Paul Boyes です。2013年から GENIVI アライアンスに参加しました。軍事や医療のソフトウェア開発を行っていました。現在は OpenCar 社に勤務しています。

willian: Obigo 社の William Han です。現在は、技術分野での経験を元に、事業開発を行っています。

jenny: Obigo 社の Jenny Jeon です。

jade: Obigo 社の Jade Moon です。我々は、ここ数年、ブラウザ開発を行っています。BMW と共同で IVI ブラウザを開発し、GENIVI アライアンスに参加しています。

shinjiro: Shinjiro Urata です。ACCESS 社に勤務しています。昨年、KDDI 社と共同で、ブラウザと最新車載 API を実装しました。

< Paul Boyes > 2014年10月の JLR 社による仕様調査のプレゼンテーションのリンクです。
https://lists.w3.org/Archives/Member/internal-autowebplatform/2014Dec/att-0000/JLR_to_W3C_Presentation_presented_at_genivi.pdf

justin: Justin (Jeon Seon) Park です。LGE 社に勤務しています。様々な製品に向けてウェブOSプラットフォームを製作しています。標準化作業に貢献したいです。

osamu: Osamu Nakamura です。慶応大学で W3C のために働いていて、サイトマネージャーを担当しています。自動車産業に関心があります。

adam: JLR 社の Adam Crofts です。

kevin: Kevin Gavigan です。JLR 社に勤務しています。ビジネスグループとワーキンググループに参加しています。

peter: Peter Winzell です。三菱電機に勤務しています。ローマでのワークショップより閲覧しています。今回が初参加です。ソフトウェア開発を行っていて、IVI において VOLVO 社と共同で開発しています。地域の大学と R&D を行い、そこで標準実装を行う予定です。セキュリティに関心があります。

ted: Ted Guild です。2名で技術コンサルタントを担当しています。

bernard: Bernard Gidon です。フランスの W3C に勤務しています。ヨーロッパ、中東、アフリカの事業開発を担当しています。自動車産業については、知識がある程度です。

wonsuk: ETRI の Wonsuk Lee です。IoT/WoT に非常に関心があり、SysApps の仕様策定の経験があります。

jonathan: ETRI の Jonathan Jeon です。

<kaz> オートモーティブ・ワーキンググループのために W3C スタッフが Ted に連絡しました。

tatsuhiko: KDDI 社の Tatsuhiko Hirabayashi です。車載 API の実装時の発見について、ワーキンググループと情報を共有したいと思います。

---
ビジネスグループ VS ワーキンググループ

...

---

KDDIACCESS 車載 API とデータ仕様の実装

(2頁: 戦略的イノベーション創造プログラムSIP科学技術振興機構

urata: 国家プロジェクトです。

(3頁: ACCESS について)
(4頁: Netfront Browser NX)

urata: Netfront Browser NX は、HTMLベースのユーザーインターフェイスを持ち、任天堂ソニーで採用されています。

(5頁: 戦略的イノベーション創造プログラムSIP科学技術振興機構

urata: 府省横断による戦略的イノベーション創造プログラムです。次世代 ITS を研究しています。
http://www8.cao.go.jp/cstp/siryo/haihu114/siryo1-5.pdf

(7頁: 戦略的イノベーション創造プログラムSIP科学技術振興機構

urata: KDDIZMPACCESS が参加しています。3年間のプロジェクトです。2種類の実験を行いました。車載 API の実装と、検知データの収集です。

(8頁: 目標)

urata: 車載 API 実装の実験の目標は、API の実現可能性を評価することです。

(9頁: ハードウェア)

urata: プラットフォームとして、トヨタ社のプリウスを使いました。

(10頁: 車載情報端末向け SoC である R-car H2、ルネサスエレクトロニクス社)

(11頁: ZMP社、カートモ UP プロ、車載CANデータ計測、CAN:コントロールエリアネットワーク)

urata: OBD2 準拠のデータロガーです(OBD:車載式故障診断)。Bluetooth で送受信が可能です。

(12頁: システム概要)

urata: R-car H2 上に Netfront NX ブラウザとデータモニタリングを実装しました。CAN データの取得方法は理解していませんが、パケットに変換したデータを使っています。

(13頁: ソフトウェア構成)

urata: 2つの要素で構成されています。車載 API 対応コードとデータモニタリングです。

(14頁: 車載 API 対応コード)

urata: 車載 API 対応コードの中には、いくつかの階層があります。ウェブアプリケーションは、この対応コードへメッセージを送ります。

(15頁: サポートしている API

urata: subscribe() 関数は機能します。
JSON 通信が原因で、get() 関数にいくつか問題がありました。
JSON RPC です。(JSONJavaScript オブジェクト通知の遠隔操作呼出し規格)
たくさんの get() を実行したとき、他方からの返信を識別しませんでした。
たくさんの get() はキューに置かれます。しかし、各関数との関係があいまいで、識別しませんでした。

(16頁: サポートしているデータ)

urata: 9種類のデータをサポートしています。

(映像)

urata: 本映像は、市販のトヨタプリウスで実験して撮られたものです。実際の車の中の様子です。車速、エンジン回転数、ハンドル角度、など。

urata: 遅延の問題がありますが、動作しています。

(19頁: 結果)

(20頁: 遅延)

urata: 遅れについて説明します。
1.8-2.0秒の遅延です。
OBD2 ポートからデータモニタリングの受信スレッドまでは0.7秒です。
受信スレッドからウェブアプリケーションまでは1.1秒です。
後者は比較的簡単に改善可能です。
前者を改善するには、より良いメカニズムが必要です。

(21頁: 次の課題)

本年、車載 API を本実装します。データ種類のサポートを増やします(元データが OBD2 なので 20-30 種類くらいまで扱います)。性能を向上します。

(22頁: 車載 API の考察)

作成中。

 

ネットワーク仮想化、ホワイトボックススイッチ

【ネットワーク仮想化】

ルータースイッチングハブ
ファイアウォール、負荷分散装置(ロードバランサー)、VPN
をソフトウェアで表現し構築する

VMware NSX

 

【ホワイトボックススイッチ】

(参考 http://www.publickey1.jp/blog/15/post_255.html

ソフトウェアを搭載していないスイッチングハブ
パケット転送を行う ASIC、Broadcom 社がマーケットリーダー
スイッチの制御を行う CPU、PowerPCx86、ARM
スイッチ向け Linux ディストリビューション、Cumulus Linux
オープンコンピュートプロジェクトに準拠したネットワークOS、OcNOS

 

Intel Data Plane Management Kit
高速データパケット・ネットワークアプリケーションを開発するための、インテル x86 プロセッサ向けのプログラミング・フレームワーク

 

Dell Open Networking
http://en.community.dell.com/techcenter/networking/w/wiki/7463.dell-open-networking

 

Open Compute Project
http://www.atmarkit.co.jp/ait/spv/1503/11/news119.html

 

医療保険制度改革関連法(2015年5月)

国保の安定化

今年度より
公費負担を毎年3400億円に拡充(今年度は約1700億円)
「財政安定化基金」を設置
「保険者努力支援制度」を設ける
国保の保険料総額は約3兆円、被保険者は約3400万人 

 2018年度から
国保の運用はこれまで市町村が行ってきたが、都道府県が財政運営の責任主体となる
「地域保険医療計画」を策定
国保事業費納付金」を決定

 

後期高齢者支援金の全面総報酬割の導入

協会けんぽ健康保険組合が負担してきた後期高齢者医療制度の見直し
医療費16.0兆円、公費7.0兆円、支援金6.2兆円
保険者は後期高齢者医療広域連合、被保険者は75歳以上(一定の障害がある場合は65歳以上)の高齢者
現在の後期高齢者支援金の按分「加入者割(3分の2)」「総報酬割(3分の1)」
2015年度「総報酬割(2分の1)」、2016年度「総報酬割(3分の2)」、2017年度はすべて

 

③負担の公平化

「入院時の食事代の段階的引き上げ」
食材費相当分、調理費相当分、対象者数約70万人
1食当たり
現行、260円
2016年度、360円
2018年度、460円
低二、210円、据え置き
低一、100円、据え置き
難病・小児慢性特定疾患、据え置き
小児慢性特定疾患:14疾患群704疾病

 「紹介状なしの大病院受診時の定額負担の導入」
2016年度より
紹介状なしで特定機能病院および500床以上の病院を受診する場合
選定療養として患者に定額負担を求める
5000円〜1万円程度

 「標準報酬月額上限の引き上げ、一般保険料率上限の引き上げ」
2016年度より
標準報酬額(健康保険料の算定の基礎となる所得)
全47等級 → 全50等級
1000分の120 → 1000分の130

 

④その他

2015年度より
協会けんぽの国庫補助率を据え置き 

2016年度より
予防・健康づくりのインセンティブの強化
保険者がヘルスケアポイントを付与
特定健診などの実施率における、後期高齢者支援金の加算・減算制度を、2018年度から指標の達成状況に応じて段階的に減算する仕組みにする
「データヘルス」の活用による予防・健康づくりの充実
全国のレセプトや健診データを集積した「ナショナルデータベース(NDB)」の充実 

2016年度より
「患者申出療養の創設」