NVMe買った。つないだ。

turkey-pc.hatenablog.com

の、続き。

 

気づけば届いてたのでさくさくつなぐ。世間からは周回遅れのNVMeですが私にとっては初体験。

M.2に差すのは向きさえ間違えなければどうってことないのですが固定用のねじがWD Blackにはついてなかったのでベアボーン(DeskMini110)の箱から取り出すことになりました。

↑以外は大きなトラブルなし。起動ドライブの移行は手持ちのAcronisTrueImageであっさり。

順調すぎてたまらん(オチありません)。

 

で、つないだ感想ですが、

①OSのブート速い。Win10のくるくる回るやつが表示される暇なくブート完了してしまう。

②本体が軽くなった。

SATA+ケーブル=48g*1

WD Black=7.2g*2

差し引きで約40gの減量となった。

PC全体が1117g*3のDeskMini110なので4%程。体重70Kgに置き換えると約3Kgのダイエット!!!!!!

 

まだ負荷かけてないので熱がどうなのかはわかりません。とくに夏場はどうなるのか不安ですが、当面はWD Blackに頑張ってもらいましょう。

 

*1:実測

*2:スペックシート

*3:WD Black実装時

NVMe買った。いまさら。

NVMeなSSD

WD Black PCIe SSD | Western Digital(WD)

を購入した(以下WD Black)。

今買いたいNVMe SSDはこれだ!速度と動作温度で見る超高速SSD選び - AKIBA PC Hotline!

によりますと、WD Blackのベンチの数値はあまりよろしくないらしい。SATASSDと首の上げ下げ*1な項目があるとかNVMeの意味はいずこへと思うところがありますが

その分安い!!!!!!

1GBあたり単価45円は「500GB超ので3万以下のNVMe*2」としては最安*3ときたものだ。

安さは力

です。

 

え?安さが力ならSATA SSDでいいじゃんって?

 

違うの。そうじゃないの。正直に言うね。

M.2スロットに何か入れてみたかったの。

(お財布にやさしいかつ実用レベルで)

 

新しい規格を初めて使うときの快感。自作PCやる人はみんなもってるはずなの。SATAPCI-Expressにわくわくしたものなの(昔の人ならPCIAGPにもわくわくしたはず)。使ってみてベンチ取ってわーすごいと思い、実際使ってみて「まぁこんなもん」と思うものなの。それが自作PCのお楽しみの一つ。

 

というわけで購入したWD Blackが我が家に届くのを心待ちにしている。

 

(追記)届いた。

turkey-pc.hatenablog.com

 

 

*1:ほぼ変わらないことの競馬的表現

*2:細かい分類w

*3:価格.com

自転車にカメラつけた。前は失敗、後ろは成功。

自転車にドライブレコーダー替わりのカメラ付けてみんとしてつけるものなり。

 

 

まずは前のカメラ。防水ケースに入れると音がうまく取れないんじゃないかと思い、中華なGoPro付属の豊富なアタッチメントの中から選んたのと自転車用のカメラマウント(Minoura Japan – VC-100)を組み合わせて*1

f:id:turkey_pc:20171106110441j:plain

 

目立たないようにぶら下げにしてみた。

 

が、この取り付け方は失敗。グレーチングにハマった衝撃でカメラが落下して破損orz

 

後ろは中華なGoPro付属の豊富なアタッチメントを組み合わせたところに

アクションカメラ(Full HD) - ACAM-F01TBK

をつけてみました。

f:id:turkey_pc:20171106111053j:plain

こっちのカメラ唯一の長所はカメラ本体に三脚穴が付いているということ*2。中華なGoProで本体に三脚穴があるのはたぶんないんじゃないかなぁ?

 

こちらの方は普通に撮れてました。ではさっそく撮った動画を・・・はてブロは動画直接上げられないのね。めんどくさいから動画はやめとく。

 

*1:VC-100を走行中に使用するのは自己責任

*2:フレームレートがが25や50といった耳慣れない値になっていたり日時の逆さに対応してないとかまぁ短所はある

実装するまで細かいことは考えられない病

https://twitter.coaam/turkey_pc/status/924077426174390272

C#のRandom.Next(int maxValue)のヘルプを見てわいてきた疑問が下記ツイートの件。

 

実際動かすとRandom.Next(0)は常に0を返していました。ヘルプの「指定した最大値より小さい」には反していますが、まぁこれはこれでいいのかなぁと。

 

で、なんでこんなアホなことに気が付いたのかといいますと、乱数を使うプログラムのテストプログラムを書きたかったからです。

乱数が最大値-1,最大値-2・・・・0を順序良く返した場合のテストを書くにはどうしたらいいのか?

ああ、そうだ。Randomクラスに似せてテストに都合のいい任意の値を吐いてくれるクラスを作ればいいんだと。

まあ上記のことはたぶん自動テスト書く人はみんなやってることでしょうが、自分もやってみたくて。 で、書いた。

f:id:turkey_pc:20171028104139p:plain

乱数をInterfaceにして本番用の乱数(RealRandom)とテスト用の乱数(FakeRandom)をそれぞれ実装。

 

FakeRandom.Nextを実装する際に「maxValueが0のときどうしよ?」と疑問が。で、本家のRandomはどうしているのか調べてみたところで冒頭のツイート。

 

境界値なんてバグの温床だからきちんと事前に確認しとけ、と言われるのですが日本語を読んでる段階では境界値に思いをはせることができないおいらです。

コードコピペで失敗した。

twitterに流すほどじゃないこと。

 

Value_A=0;
Value_B=0;
Value_C=0;

If(Obj_A!=null){
 Value_A=Obj_A.Value;
}
If(Obj_B!=null){
 Value_B=Obj_B.Value;
}
If(Obj_C!=null){
 Value_C=Obj_C.Value;
}

 

というコードがあったところに_Dを追加してほしいとのこと。はいはいコピペコピペということで

Value_C=0;

 をコピペしてCをDに書き換える。

Value_D=0;

 

んでもって

If(Obj_C!=null){
 Value_C=Obj_C.Value;
}

をコピペしてCをDに書き換える。

If(Obj_C!=null){
 Value_D=Obj_D.Value;
}

・・・・

さて実行だ。よし、動いた。

・・・・

コードレビューで指摘一件。

やっちゃった。

でもね、ちゃんと動くのよ。実際コードが動く場面ではObj_ホニャがnullになるケースないんで。とはいえ、そんなこと逆ギレしてもしかたないんで反省。

 

開発言語は日々進化する。

などと大げさなタイトルつけましたが内容はショボく中途半端にググったことをメモっただけ。

 

きっかけは拙ツイート

 でした。

Hoge(15,000,000)となっていれば見た目ですぐに引数の誤りが分かるのになぁとツイートしたとこでした。そこに救いの神が約一名

まぢですか?

Hoge(1_500_000)

・・・あかんやないか。

と神を疑い掛けたところで一番疑うべきポイントが頭に浮かんだ。

拙の開発環境が

<marquee>★★★Visual Studio 2010★★★</marquee>

ということである。おもわず変なタグつけちゃったよ(文字流れませんよ?)

 

いまだにVS2010を使ってる事情はさておき(上の会社から指示されたとかそういうこと)、最新環境でならできるのだろうなとググった。

 

"C# 2017 新機能 アンダースコア"でMicrosoft様のサイト引っ掛けることに成功

.NET Framework - C# 7.0 の新機能

https://msdn.microsoft.com/ja-jp/magazine/mt790184.aspx

f:id:turkey_pc:20171012162205p:plain

 

これだぁぁ!!!!!!

 

まさかこんな機能が実装されているとは思わずネタのつもりでツイートしたところ、神のお導きによりここにたどり着くことになろうとは。


 

この例に限らず、開発言語は常にわかりやすく間違えないようにコードを書けるように進歩を続けている。多くのプログラマの要望を少しずつかなえたものである。

プログラマたるもの、よりよき開発言語を用意してくれたMicrosoftに感謝して新しい開発言語を使っていこうではないかと思うものであります。

 

・・・というわけで、そろそろVS2017への移行を考えていただけませんでしょうか?>お偉い人々

名前空間

複数のnamespaceに同じ名前のclassがある場合

①自namespaceにその名前のclassがある場合

自namespaceのclassを使用する場合

名前空間の指定は省略できる(というか普通は省略する)
例 var a = new class1();


他namespaceのclassを使用する場合

クラス名の前に名前空間を指定する
例 var a = new namespace2.class1();
 ※後に出てくるusingによる名前空間の指定による省略はできない

 

②自namespaceにその名前のclassがない場合

usingで使用したい名前空間を事前に指定していない場合

使用したいclassがあるnamespace名を付ける
例 var a = new namespace2.class1();

 

usingで使用したい名前空間を事前に指定している場合

usingで指定した名前空間については記載を省略できる

例 using namespace2;
  (中略)
  var a = new class1();
ただし、他のusingで指定した複数の名前空間に同名classが存在している場合は名前空間の指定は省略できない(ビルドエラーになる)

ビルドエラーになる例

例 using namespace2; //ここにclass1あり

  using namespace3; //ここにもclass1あり
  (中略)
  var a = new class1(); //これはビルドエラー