So-net無料ブログ作成
検索選択

VMWareで仮想シリアルポート同士を接続 [その他]

RS232Cの開発でシリアルポートが必要になったけど、
ノートPCなんでシリアルポートがない。
USB-RS232C変換ケーブルもない。

VMWareのゲストOSにシリアルポートを2個追加して、同じ名前付きパイプを設定すると
仮想PC内のシリアルポート同士で送受信できるようになった。

開発環境のノートPCでは、COM2とCOM3が追加された。
ss001.png
ss002.png

未使用のシリアルポート(COMポート)の削除 [その他]

USBのシリアル変換を使用して、いろいろな機器と接続していると
なんだかんだで、COMポートが増えていた。
COM1がずっと使用状態になって、割り当てできなかったりと不便だったので
次の方法で未使用のCOMポートを削除した。

コマンドプロンプトを管理者として実行して
次のコマンドを実行するとデバイスマネージャが開くので

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

メニューの[表示]-[非表示のデバイスの表示]を押すと、現在使用していないデバイスが表示される。

デバイスマネージャのポートのツリーを開いて現在使用していないポートを右クリックして削除する。
このとき、ドライバーソフトウェアは削除しない。

参考URL
Windowsで増えすぎた未使用COMポートを削除する方法
http://airvariable.asablo.jp/blog/2013/02/24/6730209

WinMergeのJSONプラグインを作成してみた [その他]

JSONファイルが何かと便利!と色々使ってみてるけど、
元データとの比較が面倒だったりしたのでWinMergeのJSONプラグインを作成したときのメモ。

JSONファイルを整形して比較する。
整形には、JavaScriptのJSONを使用する。
WinMergeのプラグインは、VBScriptで作成されている。
WinMergeのプラグインで、JavaScriptは動くのか?(動いた!)
でも、JSONを使用すると「'JSON' は宣言されていません」と出る。
json2.jsを使用すれば出来た!

json2.js
https://github.com/douglascrockford/JSON-js

作成したプラグインと、json2.jsをMergePluginsフォルダに入れます。

ファイル名:CompareJsonFiles.sct
<scriptlet>

<implements type="Automation" id="dispatcher">
	<property name="PluginEvent">
		<get/>
	</property>
	<property name="PluginDescription">
		<get/>
	</property>
	<property name="PluginFileFilters">
		<get/>
	</property>
	<property name="PluginIsAutomatic">
		<get/>
	</property>
	<method name="UnpackFile"/>
	<method name="PackFile"/>
</implements>

<script language="JavaScript" src="json2.js"></script>
<script language="JavaScript">
function getJson(filename) {
	return jsonParse(adoLoadText(filename, "utf-8"));
}
function jsonParse(text) {
	try {
		var obj = JSON.parse(text); 
		return JSON.stringify(obj, null, "    ");
	} catch(e) {
		return e.message;
	}
}
function adoLoadText(filename, charset) {
	var stream, text;
	stream = new ActiveXObject("ADODB.Stream");
	stream.type = 2;
	stream.charset = charset;
	stream.open();
	stream.loadFromFile(filename);
	text = stream.readText(-1);
	stream.close();
	return text;
}
</script>

<script language="VBS">

Option Explicit

Function get_PluginEvent()
	get_PluginEvent = "FILE_PACK_UNPACK"
End Function

Function get_PluginDescription()
	get_PluginDescription = "Json形式のファイルを整形し比較をする。"
End Function

Function get_PluginFileFilters()
	get_PluginFileFilters = "\.json$"
End Function

Function get_PluginIsAutomatic()
	get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
	Dim fso
	Dim foDst
	
	Set fso = CreateObject("Scripting.FileSystemObject")
	
	Set foDst = fso.OpenTextFile(fileDst, 2, True)
	foDst.Write(getJson(fileSrc))
	foDst.Close
	
	Set foDst = Nothing
	Set fso = Nothing
	
	pbChanged = True
	pSubcode = 0
	UnpackFile = True
End Function

Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
	PackFile = False
End Function

</script>
</scriptlet>


WinMergeのプラグインは、JavaScriptでも良いんじゃないのかな?

SQLite3へ大量のCSVを一括で取り込む [その他]

SQLite3へCSVファイルを取り込むためのスクリプトのメモ

次の必要なファイルを同じフォルダに配置する。
・sqlite3.exe
・CSVを取り込む先のテーブル(CSV_DATA)が作成されたDB(Sample.sqlite3)
・csv_import.bat
・INPUTフォルダを作成し、取り込む対象のCSVファイルを入れる。

*sqlite3.exeは http://www.sqlite.org/ から sqlite-shell-win32-x86-3090200.zip をダウンロードする。
*CSV_DATAテーブルの内容は、DATETIME型、後はREAL型が100個。

csv_import.batを実行すると、OUTPUTフォルダにINPUTフォルダ内のCSVファイルを結合した
merge.csvが作成され、それをDBに取り込む。

・csv_import.bat
@ECHO OFF

ECHO DB内のCSVデータを削除
sqlite3 Sample.sqlite3 "delete from CSV_DATA"

ECHO CSVを結合
mkdir .\OUTPUT
type .\INPUT\*.csv > .\OUTPUT\merge.csv

ECHO CSVをDBに取込
sqlite3 -separator , Sample.sqlite3 ".import ./OUTPUT/merge.csv CSV_DATA"

ECHO.
ECHO 処理が完了しました。
ECHO 終了するには何かキーを押してください...
PAUSE > NUL


・取り込むCSVファイルの内容
数値データは、100個あります。
2015/12/01 00:00:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:01:00,     0,     0.2,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:02:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:03:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:04:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   657,     0,     0,     0,     0,     0
2015/12/01 00:05:00,     0,     0.2,     0,     0,     0,     0,     0,     0,   661,     0,     0,     0,     0,     0
2015/12/01 00:06:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:07:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:08:00,     0,     0.4,     0,     0,     0,     0,     0,     0,   827,     0,     0,     0,     0,  1000
2015/12/01 00:09:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:10:00,     0,     0.4,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000


プロセス毎のCPU使用率、メモリ使用量のログを取得する [その他]

プロセス毎にCPU使用率や、メモリ使用量のログを取得したい。
パフォーマンスモニターでログを取得しても良かったけど
1日に1~2回程度で良いので長期間ロギングをする。

WMICというコマンドを使用する。
batファイルに次のコマンドを書いて、タスクスケジューラで実行させた。
@ECHO OFF
SET logDate=%date:~0,4%%date:~5,2%%date:~8,2%
WMIC /OUTPUT:C:\PROLOG\PROLOG_%logDate%.log PROCESS GET /FORMAT:LIST

出力されたログファイルの内容は、色々な項目がある。
WorkingSetSize:物理メモリ使用量
PageFileUsage:ページングファイルの使用量

ExcelのVLOOKUPで見つからない場合は空白にしたい [その他]

資料を作ったりするときにExcelをよく使います。
このとき、VLOOKUP関数がすごく役にたつのだけど
一覧から見つからないときは、0を返したりするので、
IFで判断して空白に変えたりとがんばってました。

でも、これだけで、VLOOKUPで見つからない場合0ではなく、空白を返すことが出来ます。
参考URL
http://officetanaka.net/excel/function/tips/tips48.htm

VLOOKUP関数の最後に &"" を付け加えるだけ。

具体例
=VLOOKUP(A1,$F$1:$K$100,3,FALSE)&""

HPから発売されるミニPCが欲しくなった [その他]

HPが発売するミニPC「HP Pavilion Mini 300-100jp」の画像を見て欲しくなった。
四角くなくて、丸っぽい形が気に入りました。
7月17日から発売する見たい。

HP Pavilion 300-130jp
Core i3 / 4GB メモリ / 500GB
\69,800.

HP Pavilion 300-150jp
Core i5 / 8GB メモリ / 1TB
\89,800.

http://h50146.www5.hp.com/directplus/personal/desktops/dp_pavilion_mini300_15sum/
HP Pavilion 300.jpg

SQL Serverで一度に実行できるSQLコマンドの最大文字数 [その他]

VB.netでUPDATEを一度に実行したかった。
1回ずつUPDATEしても良かったけど、この方法だと件数が多いとかっこ悪いので
セミコロンで区切ってUPDATE文をつなげてってしてる時にふと
「CommandTextの最大文字数ってどれぐらいだっけ?」と思ったので調べてみた。

しらべて見たけど、あってるかどうか分かりません。
試してみたら良いんだけど・・・

デフォルトの設定だと
1行に8000バイト
全体で256MB

SQLCommand ExecuteNonQuery Maximum CommandText Length?
http://stackoverflow.com/questions/21390537/sqlcommand-executenonquery-maximum-commandtext-length

SQL Server 2014の最大容量仕様
https://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=ja&ie=UTF8&prev=_t&rurl=translate.google.co.jp&sl=en&tl=ja&u=https://technet.microsoft.com/en-US/library/ms143432.aspx&usg=ALkJrhhi6lQodxNfsELJM6lZ5Z0bM35P2w

ソースコードのハイライトにgoogle-code-prettifyを使う [その他]

ブログ内のソースコードを張り付ける為にSyntaxHighlighterを使っていたけど
配布元のページに繋がらなくなって、ソースコードがきれいに表示されなくなっていた。
(5/8日現在では見れるようになってたので、この記事内のソースはSyntaxHighlighterです)

そこで、google-code-prettifyを使ってみます。

SyntaxHighlighterの追加とよく似ているのでざっと説明。
[テンプレート管理]-[HTML編集]の[HTMLの追加]を押す。
</head>の前に次を追加。
<style type="text/css">
/* Pretty printing styles. Used with prettify.js. */
.prettyprint { font-size: 12px }

/* SPAN elements with the classes below are added by prettyprint. */
.pln { color: #000 }  /* plain text */

@media screen {
  .str { color: #080 }  /* string content */
  .kwd { color: #008 }  /* a keyword */
  .com { color: #800 }  /* a comment */
  .typ { color: #606 }  /* a type name */
  .lit { color: #066 }  /* a literal value */
  /* punctuation, lisp open bracket, lisp close bracket */
  .pun, .opn, .clo { color: #660 }
  .tag { color: #008 }  /* a markup tag name */
  .atn { color: #606 }  /* a markup attribute name */
  .atv { color: #080 }  /* a markup attribute value */
  .dec, .var { color: #606 }  /* a declaration; a variable name */
  .fun { color: red }  /* a function name */
}

/* Use higher contrast and text-weight for printable form. */
@media print, projection {
  .str { color: #060 }
  .kwd { color: #006; font-weight: bold }
  .com { color: #600; font-style: italic }
  .typ { color: #404; font-weight: bold }
  .lit { color: #044 }
  .pun, .opn, .clo { color: #440 }
  .tag { color: #006; font-weight: bold }
  .atn { color: #404 }
  .atv { color: #060 }
}

/* Put a border around prettyprinted code snippets. */
pre.prettyprint { padding: 2px; border: 1px solid #888 }

/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L5,
li.L6,
li.L7,
li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 { background: #eee }
</style>
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>


で、ソースコードの表示は
<pre class="prettyprint">
ここにソースコードを張り付ける
</pre>


自動で言語を判定して、ハイライトしてくれるみたいですが指定する場合は
<pre class="prettyprint lang-vb">

cssでフォントサイズを指定しないとIEでは文字が小さくて読みづらかった。
cssの追加は外部ファイルではなく、ヘッダーに直接かいてみたら上手く行った。

リモートデスクトップ「Brynhildr」の自動更新? [その他]

モニターが接続されていないパソコンがあって
それに接続するためにリモートデスクトップの「Brynhildr」をインストールしています。

このソフトのバージョンが最新になったので、とりあえず更新しようと思ったけど
モニターの切替が大変になっていたのでBATファイルを作って対応してみた。

・BATファイルを作成する。
upd_brynhildr.bat
timeout /T 30
xcopy D:\tool\brynhildr110\*.* D:\tool\brynhildr\ /Y
start D:\tool\brynhildr\brynhildr.exe


・一度、BrynhildrをクライアントPCでも良いのでServerModeで起動して
brynhildr.iniを作成しておく。

・brynhildr.iniを開いて、boot=1とする。
これをすると、どのモードで実行するか聞いてこないでServerModeで起動する。

・brynhildr.iniを含めてbrynhildr110.zipを作成する。

・古いバージョンのBrynhildrでサーバーに接続して、brynhildr110.zipとupd_brynhildr.batを転送する。

・サーバーでbrynhildr110.zipを解凍して適切な場所に配置して、BATファイルを実行する。

・30秒以内にBrynhildrを終了させて、サーバーから切断しておく。

・30秒後にサーバーに最新のBrynhildrで接続すると、接続できた!

もう少し調べたら・・・
exeと同じ位置にnewフォルダを作成して、そこに最新のexe、dllを入れると自動で更新してくれるとか?

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。