2017年1月21日土曜日

【VisualStudio】2015 Enterprise参照関数の個数

Visual Studio 2015 Enterpriseでは、関数の上にその関数の参照元関数の個数が
表示される。不要な関数は、一目瞭然。


[Obsolete("試験未実施。使用する場合は、試験を実施して下さい。")]
等をつけておくと、下記のようにビルド時に・・・


使用箇所について、warningが出力される。


下記のように第2引数をtrueにすれば、呼び出し元でコンパイルエラーになる。

[Obsolete("試験未実施。使用する場合は、試験を実施して下さい。", true)]



せっかく作った関数が不要になってしまった場合で、残しておきたい場合は、こうしておく。将来、この関数を使用する時に試験未実施のままリリースしてしまうことが無いようガードがかけられる。

Obsoleteは旧型式の関数(廃止した関数)に対して使用するものなので、本来の意味合いとは異なる。適切な属性があると良いのだが。

2017年1月6日金曜日

【ESXi】【NUC】ESXi6.0から6.5にアップグレード2

参考サイト
http://www.vladan.fr/how-to-upgrade-esxi-6-0-to-6-5-via-cli-on-line/

途中IPアドレスがあべこべになってますが、コピペしているためです。スルーしてください。
参考サイトのうち、一部スキップしています。

1. ブラウザでアップグレード対象のESXiのvSphere Host Client(https://192.168.11.2/ui/#/login等、IPアドレスは読み替えること)にアクセスし、ログイン。

2. [アクション] - [サービス] - [SSHを有効化]の順に選択。

3. tera termを起動し、ESXiのIPアドレスを指定。

4. ユーザ名を指定し、チャレンジレスポンス認証を選択し、OKボタン押下。

5. パスワード入力。

6. 「esxcli network firewall ruleset set -e true -r httpClient」を実行。

7. 「esxcli software profile update -p ESXi-6.5.0-4564106-no-tools -d http://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml」を実行。


8. Update ResultがCompleted successfullyとなっていることを確認。

9. メンテナンスモードへ切り替え。

10.「はい」ボタンを押下。

11.再起動ボタン押下。

12. 再起動後、vSphere Host Client(https://192.168.11.2/ui/#/login等、IPアドレスは読み替えること)にアクセスし、再ログイン。

13. バージョンが6.5.0となっていることを確認し、完了。


2016年12月28日水曜日

【Bluetooth】ドングル・各子機のペアリング一覧


No親機子機子機種別子機メーカOSペアリング
結果
備考
1MM-BTUD43
(CSR)
LBT-PAR500イヤホンELECOMWin7apt-x可能。音飛びほぼ無し。1年以上使用。
2MM-BTUD43
(CSR)
KT-1255キーボードLENOVOWin7×CSRスタックと相性が悪いのか
ペアリング時のキー入力まで進まない。
3MM-BTUD43
(CSR)
IS11-BT05キーボードKKmoon?
(不明)
Win71年以上使用。問題無し。
4MM-BTUD43
(Win10Stack)
LBT-PAR500イヤホンELECOMWin10問題無し。
5MM-BTUD43
(Win10Stack)
KT-1255キーボードLENOVOWin10問題無し。
6MM-BTUD43
(Win10Stack)
IS11-BT05キーボードKKmoon?
(不明)
Win10問題無し。
7MM-BTUD43
(Win10Stack)
SU-3004マウスUHURUWin10問題無し。
8LTB-UAN05C1
(BlueSoleil)
LBT-PAR500イヤホンELECOMWin10通常は問題無し※1。
9LTB-UAN05C1
(BlueSoleil)
KT-1255キーボードLENOVOWin10通常は問題無し※1。
10LTB-UAN05C1
(BlueSoleil)
IS11-BT05キーボードKKmoon?
(不明)
Win10認識しないことがある?※1
11LTB-UAN05C1
(BlueSoleil)
SU-3004マウスUHURUWin10通常は問題無し※1。
12LTB-UAN05C1
(Win10Stack)
LBT-PAR500イヤホンELECOMWin10問題無し。
13LTB-UAN05C1
(Win10Stack)
KT-1255キーボードLENOVOWin10問題無し。
14LTB-UAN05C1
(Win10Stack)
IS11-BT05キーボードKKmoon?
(不明)
Win10問題なし。
15LTB-UAN05C1
(Win10Stack)
SU-3004マウスUHURUWin10問題無し。
16USB-BT40LE
(Win10Stack)
LBT-PAR500イヤホンELECOMWin10問題無し。
17USB-BT40LE
(Win10Stack)
KT-1255キーボードLENOVOWin10問題無し。
18USB-BT40LE
(Win10Stack)
IS11-BT05キーボードKKmoon?
(不明)
Win10問題なし。
19USB-BT40LE
(Win10Stack)
SU-3004マウスUHURUWin10問題無し。
20ASUS
ZenFone 2 Laser
DRC-BTN40イヤホン
・マイク
SONYAndroid
6.0.1
問題無し。
21ASUS
ZenFone 2 Laser
MDR-EX31BNイヤホン
・マイク
SONYAndroid
6.0.1
問題無し。
22ASUS
ZenFone 5
DRC-BTN40イヤホン
・マイク
SONYAndroid
4.4.2
問題無し。
23FREETEL
Priori3 LTE
DRC-BTN40イヤホン
・マイク
SONYAndroid
5.1
音飛びが激しい。親機の処理能力の限界?
24SONY
Xperia Touch G1109
DRC-BTN40イヤホン
・マイク
SONYAndroid
7.0
問題無し。
24SONY
Xperia Touch G1109
KT-1255キーボードLENOVOAndroid
7.0
問題無し。
24SONY
Xperia Touch G1109
T630BKマウスLogicoolAndroid
7.0
問題無し。
※1 スリープから復帰すると稀にライセンスエラーが出てで、Bluetooth機器全て使えなくなる問題がある(BlueSoleil Stackは更新していない)。その場合USBマウス・キーボードを接続して一度Windowsを再起動する必要がある。

◆Windows標準スタックで複数台接続すると音飛び
 Windows標準スタックの場合、ドングルによっては複数台のBluetooth機器を同時に接続するとBluetoothオーディオ機器(LBT-PAR500、DRC-BTN40)は音飛びが起こる場合がある。
  • 複数台接続すると音飛びの起こるドングル
    • BT-Micro4(Planex)(Win8だったかな?標準スタック)
    • LTB-UAN05C1(ELECOM)(Win10標準スタック)
    • MM-BTUD43(SANWA)(Win10標準スタック?CSRも入れてる)
  • 複数台接続しても音飛びの起こらないドングル
    • USB-BT40LE(I-O DATA)(Win10標準スタック)

◆Class1ドングルについて
  • MM-BTUD43
    • MM-BTUD43+CSR Harmony評判悪いイメージがあったが、KT-1255を使わないのであれば、結構使える。
    • ただ、Class1と言っても、屋内で使うにはClass2と大きく変わらなない気がする(直線距離では不明)。10m以上は飛んでいると思うが、音楽聴きながら、10m程度先の別の部屋に入ると結構音が途切れる。
  • LTB-UAN05C1
    • BlueSoleilスタックの場合
      • ペアリングが専用ソフトで面倒だが、Class1(LBT-PAR500用)とKT-1255を使いたいならこれ。3台接続しても音飛びしない。
      • apt-Xは使用できないが、音質はあまり気にしないので問題なし(たぶん聴き比べると差は分かるとは思う)。
      • 飛距離について、MM-BTUD43より少しだけ飛距離はあるように思える。10m程度先の別の部屋に入ったときに稀に途切れる。
      • スリープからの復帰で上述の問題が難点。IS11-BT05キーボードも認識しないことがあり、何度も電源ON⇔OFFを繰り返す必要がある。
      • 4台(LBT-PAR500、SU-3004、KT-1255、IS11-BT05)の機器を同時に使用しても特に問題なし。
      • IS11-BT05は何度も電源ON・OFF繰り返さないと認識されない。
    • Windows10標準スタックの場合
      • 子機の電源ONの際の接続率は良好。マウス・キーボードを使っているだけならBlueSoleilより良い。
      • 3台(LBT-PAR500、SU-3004、KT-1255)同時に使用すると、LBT-PAR500がかなり音飛びする。2台でも稀に起こる。う~ん、発生しないこともあるが…、なんだろう。

◆以下の3点を満たしたかったが…
  • 隣の部屋に移動する程度で、音飛びするのが気になる。なので、Class1ドングル+LBT-PAR500を使いたい。
  • LENOVOキーボード(KT-1255)を使いたい(特にトラックポイント)。
  • キーボード、マウスをBluetooth化したい。

結局どのドングル使ってもダメそう。
  • Class1と言っても屋内なら7m~12m程度しか飛ばない。Class2は2~3m程度。
  • MM-BTUD43(Class1)+CSRスタックはKT-1255との相性が悪く、ペアリングできない。
  • LTB-UAN05C1(Class1)のWindows標準スタックは機器3台あたりで音飛びする。
  • LTB-UAN05C1+BlueSoleilはスタンバイから復帰する時に、稀にライセンスエラーが出る。その際、USBキーボードが必要になる(キーボード・マウスともにBluetoothにしているため、何も操作できなくなり、USBキーボードを接続する羽目になる)。
  • 結論:Class1ドングルのスタックがWindows10標準スタック、CSR、BlueSoleilどれも駄目。
◆Bluetoothマウス(内臓充電池+充電ケーブル)について
乾電池を交換するのは面倒なので、内臓充電池+充電ケーブルのマウスがほしかった。たくさんありそうに思っていたが、以外に選択肢は少ない。今まで使ったのは以下。内臓充電タイプは、どれもUSBマウスには劣る。
  • Logicool Ultrathin Touch Mouse T630(LOGICOOL)
    • ホイールが無いせいで、スクロールが少し使いずらい。違和感がある。
    • 右クリックしずらい。この製品はマウス表面にボタンが無く、裏面にボタンがある。この機構のせいか、右クリックをしようとすると、左クリックになってしまうことがある。これが致命的。
    • 充電しながら、マウス使用できない。
    • 1年近く使ったが、自分は結局慣れずじまい。慣れる人は慣れると思う。
    • デザインや特殊性にこだわったのだろうが、マウスとしては右クリックしずらいというのが致命的。
    • 値段が高すぎ。
  • M-CC1BRWH(ELECOM)
    • 小さい。軽い。
    • 安い。安かろう悪かろう。ホイールが致命的に回しずらい。更にホイールを前回転させても、スクロールされないことが多い。
    • 小さいので、持ち運び用か。
    • 充電しながら、マウス使用できない?試してないが、使いずらいと思う。
  • SU-3004(UHURU)
    • ホイールを早く回しすぎると逆にスクロールすることがある。
    • PCスタンバイからの復帰に少し時間(7~8秒?)がかかる。
    • 充電しながらマウスとして使える。
    • かなり軽い。
    • USBマウスには劣るが、それなりに使える。唯一使い続けられるか?
    • ペアリングの際に、LTB-UAN05C1+Blue Soleilの場合だけ、パスコードが求められる。0000を入力すればペアリングできる。

【C#】ReadOnlyCollection<string>の速度

①List<string>速度測定用ソースコード
var list = Enumerable.Repeat("abcdef", 100 * 1000 * 1000).ToList();
var sw = new Stopwatch();
sw.Start();
var sum = string.Join(",", list);
sw.Stop();
Console.WriteLine("time=" + sw.Elapsed);

①の結果(実行時間)
 1回目:15.3343278秒
 2回目:12.7513260秒

②ReadOnlyCollection<string>速度測定用ソースコード
var list = Enumerable.Repeat("abcdef", 100 * 1000 * 1000).ToList();
var readList = new ReadOnlyCollection<string>(list.ToList());
var sw = new Stopwatch();
sw.Start();
var sum = string.Join(",", readList);
sw.Stop();
Console.WriteLine("time=" + sw.Elapsed);

②の結果(実行時間)
 1回目:13.8123513秒
 2回目:13.2021955秒


◆環境
  • 速度確認した仮想マシン
    • CPU core数:4
    • メモリ:4GB
    • OS:Windows10 Pro x64
    • 仮想マシン:VMWare vShpere ESXi6.5
    • Visual Studio 2015
    • 構成:Releaseでビルド
    • デバッグ情報(ビルドの詳細設定):none
    • Visual Studio ホスティングプロセス:無効

  • ホストPCの性能(参考)
    • CPU:Intel Core i5-4250U(2Core 2HT)
    • メモリ:16GB
    • ドライブ:SSD(ウルトラ II mSATA SSD SDMSATA-512G-G25C)
    • 仮想マシン:VMWare ESXi6.5上の仮想マシン

2016年12月27日火曜日

【C#】ReadOnlyCollection<int>の速度

① List<int>の速度測定ソースコード
var list = Enumerable.Repeat(1, 100 * 1000 * 1000).ToList();
var sw = new Stopwatch();
sw.Start();
var sum = list.Sum();
sw.Stop();

①の結果(実行時間)
 1回目:01.0820459秒
 2回目:01.2269845秒

② ReadOnlyCollection<int>の速度測定ソースコード
var list = Enumerable.Repeat(1, 100 * 1000 * 1000).ToList();
var readList = new ReadOnlyCollection(list.ToList());
var sw = new Stopwatch();
sw.Start();
var sum = readList.Sum();
sw.Stop();

②の結果(実行時間)
 1回目:01.1332304秒
 2回目:01.2619087秒


◆環境
  • 速度確認した仮想マシン
    • CPU core数:4
    • メモリ:4GB
    • OS:Windows10 Pro x64
    • 仮想マシン:VMWare vShpere ESXi6.5
    • Visual Studio 2015
    • 構成:Releaseでビルド
    • デバッグ情報(ビルドの詳細設定):none
    • Visual Studio ホスティングプロセス:無効

  • ホストPCの性能(参考)
    • CPU:Intel Core i5-4250U(2Core 2HT)
    • メモリ:16GB
    • ドライブ:SSD(ウルトラ II mSATA SSD SDMSATA-512G-G25C)
    • 仮想マシン:VMWare ESXi6.0上の仮想マシン


2016年12月23日金曜日

【PowerShell】スクリーンショット2

■フリーソフトが使用できない職場なので、 WinShotも使用できない。仕方なく、 PowerShellでスクリーンキャプチャする。 
少し改良したので再掲
##########################################################################################
# 注意事項
#  ・ドライブ直下のフォルダ(例えばc:\tmpなど)は権限が無いため、
#    本スクリプトでは作成できないことがあります。事前に作成して下さい。
#  ・実行ポリシーが変更されていない場合、(Set-ExecutionPolicy RemoteSigned等)が必要です。
##########################################################################################
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 出力先ファイルパス
$filePath = "c:\tmp\evi\C{0:000}.png"
#$filePath = "c:\tmp\evi\" + $(Get-Date).ToString("yyyyMMdd") + "\C{0:000}.png"

# Jpeg,Gif,Bmp,Pngから選択する。
$fileKind = [System.Drawing.Imaging.ImageFormat]::Png

# スクリーンキャプチャして、Graphicsオブジェクトを生成
$rect = [System.windows.forms.Screen]::PrimaryScreen.Bounds
$bitmap = New-Object System.Drawing.Bitmap($rect.Width, $rect.Height)

$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$zero = New-Object System.Drawing.Point(0, 0)
$graphics.CopyFromScreen($zero, $zero, $bitmap.Size)

# フォルダ作成、フォルダがすでに存在するエラーは非表示。他のエラーも黙らせるので注意。
$dirPath = Split-Path $filePath -parent
New-Item -path $dirPath -type directory -ErrorAction SilentlyContinue

# ファイル名を決定。順に、以下の処理を行う。
# 1000までの数字を生成、ファイル名をフォーマットに従い決定、ファイルが存在するかチェック、最初の1件を取得、変数に格納を行う。
1..1000 | % { $filePath -f $_ }  | Where { (Test-Path $_) -eq $false } | select -First 1 | sv resultFile

# ファイル保存
$bitmap.Save($resultFile, $fileKind)

##########################################################################################
# ファイル作成後処理。フォルダやファイルを開く。必要に応じて、コメントアウトする。
##########################################################################################
$shell = New-Object -ComObject Shell.Application # explorer ieの一覧を取得

#============================================================================
# 拡張子に対する既定のアプリケーションで開く。
#============================================================================
#ii $resultFile

#============================================================================
# ペイントで開く。
#============================================================================
#mspaint $resultFile

#============================================================================
# IEで開く。(毎回新しいウィンドウで開く。)
#============================================================================
#$ieCom = New-Object -ComObject InternetExplorer.Application  # IEで開く。
#$ieCom.Navigate($resultFile)
#$ieCom.Visible = $true

#============================================================================
# IEで開く。初回のみIEを1つ開き、2回目以降はウィンドウを更新する。
#============================================================================
# 対象のウィンドウのみ取得。
$ie = $null
$locationURL = "file:///" + $dirPath.Replace("\", "/")
$shell.windows() | where {($_.LocationURL -like $locationURL + "*") -and ($_.Name -eq "Internet Explorer")} | select -First 1 | sv ie

# オープン済みのIEが取得できなかった場合は、IEを開く。
if ($ie -eq $null)
{
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Width = 700
    $ie.Height = 300
    $ie.Left = 1000
    $ie.top = 300
    $ie.AddressBar = $false
}

# IEで作成したファイルを開く。
$ie.Navigate($resultFile)
$ie.Visible = $true

#============================================================================
# エクスプローラを開く。
#============================================================================
$exp = $null
$locationURL = "file:///" + $dirPath.Replace("\", "/")
$shell.windows() | where {($_.LocationURL -like $locationURL) -and ($_.Name -eq "エクスプローラー")} | select -First 1 | sv exp
if ($exp -eq $null)
{
    Start "explorer " -Args $dirPath -Wait
    $shell.windows() | where {($_.LocationURL -like $locationURL) -and ($_.Name -eq "エクスプローラー")} | select -First 1 | sv exp

    $exp.Width = 700
    $exp.Height = 300
    $exp.Left = 1000
    $exp.top = 0
    $exp.AddressBar = $false
    $exp.Document.SortColumns = "prop:System.DateModified;"
    $exp.Document.CurrentViewMode = 5
    $exp.Document.IconSize = 150
}

$exp.Refresh2()

2016年12月22日木曜日

【ESXi】【NUC】ESXi6.5 USB3(PCIPassThrough)

◆過去3度に渡って誤った情報(NUC+ESXi6.0、ESXi6.5でUSB3.0コントローラを PCI Pass Throughできないという誤った情報) を書いてしまったが、NUC(D54250WYK)にESXiをインストールしてUSB3.0をPCI PassThrough(VM DirectPass I/O)できるか再調査した。

 ⇒ 再調査の結果、実現可能と分かった。


VMDirectPassI/O要件
に記載のある通り、passthrough.map に記載するだけだった。記載内容は、後述。詳細は分かってないのだが・・・。
タイトルはESXi6.5について書いているが、ESXi6.0も可能かもしれない。

◆USB3.0コントローラのPCI Pass Through手順
1. BIOSでxHCI ModeをEnable(下記のSmart Auto⇒Enableにする)にして保存し、PC起動。

2. vSphere Host Clientにログインし、SSHの有効化。

3. tera termでESXiのIPを指定。

4. ユーザ名を指定し、チャレンジレスポンス認証を選択し、OKボタン押下。

5. パスワード入力。

6. /etc/vmware/passthru.mapを編集。

7. 「8086 9c31 d3d0 default」 を記載(ハードウェアによって値は変わる。適宜読み替えること。8086 9c31はintel NUC D54250WYKのxHCI(USB3.0コントローラ)。lspciコマンド、lspci -nコマンドで調べられる。)。

8. ESXiを再起動し、vShpere Host Clientにログイン。
9. [管理]-[ハードウェア]を選択し、下記のようにxHCIを有効にし、再起動。

10. 起動完了したら、再度vShpere Host Clientにログインし、該当PCの設定の編集画面を開き、[その他のデバイスの追加]を選択。

11. PCIデバイスを選択。

12. 画面下部のPCIデバイス1のコンボボックスでxHCIを選択。(保存後再度、下記画面を開き直して、xHCIになっていることを確認する。何故か反映されないことがある。)

◆仮想マシンを起動すると、USB-HDD、TVキャプチャが表示された。


◆肝心の速度
 ①USB3.0 ディスク1(xHCI有効にした後のベンチマーク結果)

 ②USB3.0 ディスク2(xHCI有効にした後のベンチマーク結果)

 ③USB2.0の時の速度は以下。(過去に上記①と同じディスクをUSB2.0で使用していた時のベンチマーク結果)


安定性は、これから検証する。
一時期ESXi、KVM、Xenを行ったり来たりしてたが、USB3.0の安定が確認できたら、今後はESXiで行くと思う。

ESXi4の頃から挑戦してたが、5年越し位でやっとできた・・・(当時は、NUCではなく、ZBoxとかだった。)。つーか3年くらい前からNUC(DC53427HYE)にしたが、ESXi5の頃にはできてたんじゃ・・・。

  • PCのスペック等
    • プラットフォーム:NUC D54250WYK
    • BIOS:WYLPT10H.86A.0042.2016.0704.1441
    • CPU: Core™ i5-4250U Processor
    • メモリ:16GB
    • 内部ストレージ:SSD(ウルトラ II mSATA SSD SDMSATA-512G-G25C)
    • 外部ストレージ:MARSHAL MAL355EU3R(USB-HDD5台(USB3.0))
    • TVチューナ:PX-W3U3(USB2.0 TVチューナ)※
    • ESXiバージョン:6.5.0 (Build 4564106)
※ 録画のみ使用し、視聴はしない(一応リモートデスクトップで視聴可能だが、見れたもんじゃない)。

2016/12/28 追記: 1週間程度使ったがUSB-HDD・USB-TVチューナ特に問題無し。