Windows10 ディスク使用率100%問題解決

Windows7をWindows10にアップグレード移行してから、パソコンが不安定になっていた。
また、softperfect-ramdiskを利用していたが無償化が終了したので利用をやめた。

WindowsUPdate が 不可能だったり、IE11が激重な状態が 続いていた。
IE11、EDGEでの症状。
Webページの閲覧が遅い、ページの要素が多い場合激重
ダウンロードができない、ダウンロードダイアログが出ない。

Ramdisk 使用時に R¥ ドライブとして定義し、TEMP ファイルとして利用していた痕跡が
レジストリに残っているため、正常に初期化できない状態が続いていたことが原因だった。

レジストリを R¥ で検索して該当する部分をすべて 初期値または適切な値に戻したら正常に動作するようになった。
1週間ほど経過したが、現在のところ違和感はない。
電源起動後2分程度でディスク使用率0〜3%に落ち着くようになった。

TEMPファイルやキャッシュファイルが不完全な状態では、重くなるのは当たり前だった。
合わせてcpu使用率も通常10〜20%から、1〜3%に下がった、
TEMP、cache はハードウェアに合わせて手動で定義するものであるという認識が重要。

私の場合はRamdiskが問題だったが、TEMPをシステムドライブ以外のDドライブに移動した人も同じ症状が出る可能性が高い。

参考にしたWebページ
Internet Explorer 11 にて「インターネット一時ファイルが使用するディスク領域として、8から8の値を選択してください。」というエラーが表示されて0MBから変更できない
https://memorva.jp/internet/pc/windows_ie11_ichiji_file_disk_ryouiki_0-8mb.php

Windows 7 のユーザー フォルダ(User Shell Folders)の初期値
http://pasofaq.jp/windows/mycomputer/7usershellfolders.htm

Hebikuzure’s Tech Memo
https://hebikuzure.wordpress.com/2013/04/28/internet-explorer-10-%E3%81%A7%E3%81%AF%E4%B8%80%E6%99%82%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E7%AE%A1%E7%90%86%E6%96%B9%E6%B3%95%E3%81%8C%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84/

X-TEA(エクスティ)  MS Access のaccdbに対応

2015-07-14に、XEADの製品名がX-TEA(エクスティ)に変わりました

2015-07-14 のバージョンより、MS Accessの accdbに対応しました。

サンプルシステムskeleton と 「CONCEPTWARE/受注生産」を、
Derbyデータベースから、accdbにコンバートしました。

skeleton.accdb mfgorder.accdb

X-TEA Driver・Modeler をインストールし、.xeafをクリックすれば ご利用いただけます。

それぞれ、.xeafと.accdbファイルは、同じフォルダ内で動作します。

データベースへの接続文字列がとなっています。 場所を指定したい場合は、
を C:\work\ のように変更してください。

メインDB 接続文字列
jdbc:ucanaccess://\mfgorder.accdb;memory=false


修正例: jdbc:ucanaccess://C:\work\mfgorder.accdb;memory=false

accdbMfgOrder.xeaf起動画面


関連資料は、Githubから、入手できます。
https://github.com/kurokouji/XteaAccdb20150714

従来は、Javaから、Accessへの接続は、JDBC-ODBC ブリッジによりましたが、
Javaのバージョン8からJDBC-ODBCドライバーが削除されました。

X-TEAは、accdbファイルへの接続に、OSSのUCanAccessを使用しています。
http://ucanaccess.sourceforge.net/site.html

UCanAccessは、次のjarに依存しているので、利用上の制限があります。
UCanAccess 2.x.x requires (at least) the following dependencies in your classpath:
•jackcess-2.0.0.jar or later◦commons-lang-2.4.jar
◦commons-logging-1.0.4.jar

hsqldb.jar(2.2.5)

新規にaccdbファイルを作成する場合は、Jackcess.jarに制限があって、
AccessのDB設定について次のページの図のようにしないといけないようです。
http://stackoverflow.com/questions/27893630/unsupported-collating-sort-order-error-updating-access-database-from-java

Accessにより、skeleton.accdb mfgorder.accdbに、他のデータベースからのインポートを行うと、
X-TEA から参照できなくなるようなので、ご注意ください。
現時点では、mdbファイルには対応してません。

制限事項はありますが、スタンドアローンAccessデータベースを、本格的なデータベースサーバーに移行する際に、
便利に使えます。

また、Accessをインストールすることなく、X-TEA から、直接 .accdbを利用できます。

システム開発とデータモデル

データモデルの設計が大切なことは、理解できても実践はなかなか難しい。

システムを長くメンテナンスする機会や運用しつつ再構築する経験を積むことがあれば、
データモデルとプログラムが、相互に関係し、修正の困難さ、容易さを意識することができる。

一般的に、システムエンジニアプログラマは単発でシステムを構築することが多い。
兎にも角にも納期を目標に、依頼先の検収を受けるまでが仕事で、運用に関わるのは別な部署である。

実装手法も、流行のOS、言語、予算に振り回されることが多い。

業務ソフトの構築においては、40年も前から、データモデルを適切に設計すれば、
ノンプログラミングでシステムを構築できることが知られている。

日々の仕事に追われ、全体像をを把握・理解することができない。

成功体験を持たないため、納期に向けて手を動かすしかない。

様々な、業務システム開発のノウハウ本もあるが、データモデルの設計が核心であり、
実際に、ノンプログラミングでの開発を経験することが重要である。

私自身、数年データモデルについて学んできた。
IT勉強宴会の資料
http://blog.benkyoenkai.org/

データモデルを設計すれば、コーディングが不要、コーディングが最小限になることを、
実感することができた。

設計と実装は、車輪の両輪であり、最終的には動いてなんぼ、メンテが楽になってなんぼ。

実際に使える、設計ツール、実装ツールが無くては話になりません。
実装の選択肢を2つ紹介する。どちらもオープンソースソフトウェアです。


渡辺幸三氏のXEAD Driver

http://homepage2.nifty.com/dbc/xeadDriver.html

仕様書(XMLファイル)を記述することで、システムを構築できます。
専用の仕様書エディタ、XEAD Editorを使用しGUIで作業します。
クライアントサーバーシステムに対応
プロトタイプのシステムを短時間で構築するために利用しています。


下地忠史氏のRmenu

http://jocc.co.jp/RmenuDoc/

本格的な、Webアプリケーション構築フレームワーク

サーバーはruby、クライアントはJavascriptで動作します。

画面・帳票といった機能ごとにフォルダを作成し、
フォルダ内にJSONファイルを記述することでシステム構築します。
JSONだけで不可能な機能は、RubyJavascriptを使用することができます。

業務で要望される複雑な画面を作成することも可能です。


どちらのソフトウェアも、データモデルを先に設計することで、
画面・帳票とデータベース間のコーディングの工数を減らすことができます。

サンプル画面は、どちらも同じデータベースに接続しています。
両方を組み合わせての開発が日常です。


データモデルの設計ツールとしては、次のツールをお勧めします。
渡辺幸三氏のXEAD Modeler
http://homepage2.nifty.com/dbc/xead.html

A5:SQL Mk-2
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/


データモデルを設計するだけで、システムが動くそんな体験を多くのエンジニアが
することで、効率的なシステム開発が広がるでしょう。

有償・無償の実装フレームワーク・ツールが存在しています。
自分に合ったツールを見つけて効率的に開発を進めて欲しい。

以前に作成した、スクリプトのJava8対応

https://github.com/kurokouji/jdbcswingquery

XF000から開いたSQL出力のwindowが次の指定では、閉じられなかった。
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


※2015-08-08 追記
「f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);」を
コメントアウトしたら、閉じることができるようになった。


原因がわかったら、問題点を整理してGithubに上げます。

var obj = new JDBCSwingQuery();

/////////////////////////////////
//        JDBCSwingQuery       //
/////////////////////////////////
function JDBCSwingQuery() {
	var importedPackage = new JavaImporter(java.awt, javax.swing, javax.swing.table, java.sql, java.util);
	with (importedPackage) {

	var persistMgr;
	var rs ;
	var model;
	var strsql;

	strsql = setSqlString();				// ダミーのSQLをセットする

	try {
		persistMgr = new PersistenceManager();
		rs = persistMgr.executeSQL(strsql);
		model = new DataModel(rs);
	} catch (e) {
		showMessage(e);
		return;
	}

	//////////////////////////
	// ダイアログ要素の設定 //
	//////////////////////////

	var f = new JFrame() ;
	var table = new JTable();
	table.setModel(model);
	var scrollpane = new JScrollPane(table);

	// コンポーネントの作成
	var queryField = new JTextField(strsql);
	var queryButton = new JButton("Submit");
	var panel = new JPanel();
	panel.setLayout(new GridLayout(2, 1));
	panel.add(queryField);
	panel.add(queryButton);

	// コンテント・ペインの取得
	var cont = f.getContentPane();

	// コンテント・ペインに追加
	cont.add(panel, BorderLayout.NORTH);
	cont.add(scrollpane, BorderLayout.CENTER);

	// JFrame の作成
	f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	 	f.setTitle("JDBCSwingQuery");
	f.pack();
	    f.setVisible(true);

	////////////////////////
	// イベント、再クエリ //
	////////////////////////
	queryButton.addActionListener(function(){
		strsql = queryField.getText();
		try {
			rs = persistMgr.executeSQL(strsql);
			model = new DataModel(rs);
		} catch (e) {
			showMessage(e);
			return;
		}
		table.setModel(model); 
	   });
}
}

/////////////////////////////////
//      PersistenceManager     //
/////////////////////////////////

function PersistenceManager() {
	var importedPackage = new JavaImporter( java.sql);
	with (importedPackage) {
	var conn;
	var stmt;
	var SQL = "";
	try {
		// データベースへの接続

		    java.lang.Class.forName("org.postgresql.Driver");
		    conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/skeleton", "postgres", "password");

		    stmt = conn.createStatement();

		} catch (e) {
		    showMessage(e);
	    }

	    this.executeSQL = function(str){
		try {
			if (stmt.execute(str)) {
				// SQL ステートメントの発行
				SQL = str;
				return stmt.getResultSet();
			} else {
				return stmt.executeQuery(SQL);
			}
		} catch (e) {
			showMessage(e);
			return stmt.executeQuery(SQL);
		}
	}

	    this.dbClose = function() {
		  //データベースを切断する
		  conn.Close();
		  conn = null;
	    }
}
}

/////////////////////////////////
//          DataModel          //
/////////////////////////////////

function DataModel(rset) {
	var importedPackage = new JavaImporter(javax.swing.table, java.util);
	with (importedPackage) {
	var metaData;
	var columnNames;
	var rows;
	var numberOfColumns;
	var numberOfRows;

	metaData = rset.getMetaData();	// ResultSetのメタデータの取得
	numberOfColumns =  metaData.getColumnCount();	// 列数を取得

	columnNames = new Vector();	// 列名を保持するベクトル
	for(column = 0; column < numberOfColumns; column++) {
		 columnNames.addElement(metaData.getColumnLabel(column + 1));	// 列名を取得
//			 showMessage(metaData.getColumnLabel(column + 1));
	}
	rows = new Vector();	// ResultSet全体のデータを保持するベクトル
	while (rset.next()) {
		newRow = new Vector();	// ResultSetの一行分のデータを保持するベクトル
		for ( var i = 1; i <= numberOfColumns; i++) {
			newRow.addElement(rset.getObject(i));	// 各データを取得し追加
		}
		rows.addElement(newRow);	// 各行を追加
	}
	numberOfRows = rows.size();

	showMessage(numberOfRows + "レコード取得しました。");

	//TableModelインターフェースとは
	    //http://www.javadrive.jp/tutorial/jtable/index7.html
	//DefaultTableModel(Vector data, Vector columnNames)
	//DefaultTableModel を構築し、data と columnNames を setDataVector メソッドに渡すことにより、テーブルを初期化します
	model = new DefaultTableModel(rows, columnNames);
	    return model;
}}


/////////////////////////////////
//         setSqlString        //
/////////////////////////////////
function setSqlString() {
	var strSQL = "\
	select * from zt051 ;"
	 return strSQL;
}

XEAD Driver スクリプト関数 Java8対応修正

XEAD DriverがJava8に対応した。
showMessageを使用している場合、スクリプト関数の修正が必要。
修正事項は次の通り、

function showMessage(message) {
	//////////////////////////
	// Javaパッケージの導入 //
	//////////////////////////
	var importedPackage = new JavaImporter(javax.swing, java.util);
	with (importedPackage) {
		//////////////////////////
		// メッセージ表示用関数 //
		//////////////////////////
		javax.swing.JOptionPane.showMessageDialog(null, message);
	}
}

//////////////////////////
// メッセージ表示用関数 //
//////////////////////////
//function showMessage(message) {
//	javax.swing.JOptionPane.showMessageDialog(null, message);
//}

関連情報
2015.04.27 XEAD製品がJava1.8に対応
http://watanabek.cocolog-nifty.com/blog/2015/04/xeadjava18-dc9b.html

ハイブリッドアプリ

2015-04-22 Microsoft主催のセミナーに参加した。

iOS/Android/Windows クロス プラットフォーム モバイル アプリ開発

Visual Studio および Xamarin や Cordova などのクロス プラットフォーム開発ツールの紹介、デモ


VB6やMS Accessなどで作成した業務ソフトリプレースのための開発環境が無償で提供され始めた。

Visual Studio ではじめる iOS/Android/Windows
クロス プラットフォーム アプリ開発
http://www.microsoft.com/ja-jp/dev/campaign/x-platform.aspx


パソコン、タブレット、携帯端末など、利用シーンにあわせて、

ネイティブアプリやWebブラウザ上で動作するWebアプリがあった。

ネイティブアプリは開発ターゲットを限定しなければならず、
ターゲットが変わればそれに合わせ作り直すことになる。


一方、Webアプリでは、ターゲットに関わらずWebブラウザが搭載されていれば
共通のサーバー側のアプリケーション1本で開発がおわる。
ただし、ブラウザの違いによる挙動の違いが生じることを考慮する必要がある。

また、ネイティブアプリは高速で動作するが、Webアプリは速度は求めにくい。

二つの開発方法の中間的な手法として「ハイブリッドアプリ」開発なる方法を知った。


Xamarin、Cordovaを利用する方法が該当する。

Xamarinは、Mono projectにWeb・モバイルのインターフェースを拡張した仕様。

Cordvaは、「Apache Cordova」と呼ばれるオープンソースソフトウェア

Cordvaについては、次の記事が参考になる。
企業向けモバイルアプリ開発の問題が決着か

HTML5によるハイブリッドアプリ開発の「Apache Cordova」とは?IBMやSAPがなぜ注目?
http://www.sbbit.jp/article/cont1/28197


iOS/Android/Windows クロス プラットフォーム モバイル アプリ開発」の
プレゼン資料が次のURL中ほどの学ぶで閲覧できる。

http://www.microsoft.com/ja-jp/dev/campaign/x-platform.aspx


学ぶ
セミナー資料: モバイル アプリ開発の現状と Visual Studio の進化 (PDF: 4.97 MB)
セミナー資料: Cordoba を使った HTML5 ハイブリッド型モバイル アプリの活用ポイント (PDF: 1.94 MB)
セミナー資料: Xamarin を使用した C# によるモバイル アプリ作成 (PDF: 2.04 MB)
自習書: 実践! クロス プラットフォーム モバイル アプリ開発 (PDF: 3.25 MB)
Xamarin/Cordova デモ アプリ実践 Blog: 日本語版 - MyShuttle.biz demo apps from Connect();

XEAD Driver Apache Derby サーバー公開設定

XEAD Driver にデフォルトで同梱されているApache Derbyを複数のクライアントから接続したい場合は
外部から接続できるように「startNetworkServer.bat」を修正する必要があります。

修正が無い場合は、「localhost」の接続のみ受け付けることになります。
スタンドアロンで動作した状態で、自己IP(192.168.1.xxx)で接続にいっても繋がらないので要注意。

org.apache.derby.drda.NetworkServerControlとstart間の引数が修正点です。
2箇所の修正が必要です。
「-h 0.0.0.0 -p 50000」が必要。


startNetworkServer.batの内容

@echo off
 
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
 
@REM   http://www.apache.org/licenses/LICENSE-2.0
 
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
 
CALL "%~dp0derby_common.bat" %*
 
if "%_JAVACMD%"=="" goto end
 
if "%_USE_CLASSPATH%"=="no" goto runNoClasspath
if not "%CLASSPATH%"=="" goto runWithClasspath
 
:runNoClasspath
"%_JAVACMD%" %DERBY_OPTS% -classpath "%LOCALCLASSPATH%" org.apache.derby.drda.NetworkServerControl -h 0.0.0.0 -p 50000 start %DERBY_CMD_LINE_ARGS%
goto end
 
:runWithClasspath
"%_JAVACMD%" %DERBY_OPTS% -classpath "%CLASSPATH%;%LOCALCLASSPATH%" org.apache.derby.drda.NetworkServerControl -h 0.0.0.0 -p 50000 start %DERBY_CMD_LINE_ARGS%
goto end
 
:end
set _JAVACMD=
set DERBY_CMD_LINE_ARGS=

修正は、管理者権限で行います。
設置したサーバーの状況により、ファイヤーウォールの設定もお忘れなく。

コントロールパネル>システムとセキュリティ>Windowsファイヤーウォール>詳細設定>受信の規則
新しい規則で、ローカルポート50000番・TCPを許可してください。

  • 参考Webサイト

Hive の Local Metastore に derby を使う
http://blog.xole.net/article.php?id=744

DBのポート番号やホストアドレスを指定したい
http://alctail.sakura.ne.jp/tip/java_kannrenn/javadb/#tip_4