どうにもいらつく(やりなおし)

ソースコード部分見やすくするためにはてな記法を使うことにした。


お仕事で見ているコード。言語はC#

class Person
{
 public string Address { get; set; }
 public string Name { get; set; }
 public int Age { get; set; }
 public string Profession { get; set; }
 public string GetCSV()
 {
  const string comma = ",";
  string result;
  result = Address + comma;
  result += Name + comma;
  result += Age.ToString() + comma;
  result += Profession;
  return result;
 }
}


GetCSV()は自分自身の内容をCSV形式で吐き出すメソッド。
もちろんちゃんと動く。動くのだが読んでいてイラつく。
①最初の項目(Address)とそれ以外の項目でresultへの代入が違う(=,+=)
②最後の項目(Profession)とそれ以外の項目で末尾のcommaの有無が違う
③commaの登場回数が多い。constにしてるだけマシだが。

最初に書いた人、なんでこんなコードにしたんだろう?


<追記したんご>
↑のコードはVB6で書かれていたのをC#に移植したものらしいのだが、VB6のコードを確認したところ、
①各項目をCollectionにAdd
②Collectionを配列に変換
③Join()で連結
というまっとうな方法になっていた。
なんで後発言語のC#のほうがへんなコードになったんだろう?

<さらに追記>
こんなこと気にしててはいけないのだろうか。だめなのだろうか?だめといわれても治らないでしょうが。

どうにもいらつく

お仕事で見ているコード。言語はC#

 

class Person
{
public string Address { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Profession { get; set; }

public string GetCSV()
{
const string comma = ",";
string result;
result = Address + comma;
result += Name + comma;
result += Age.ToString() + comma;
result += Profession;
return result;
}
}

 

GetCSV()は自分自身の内容をCSV形式で吐き出すメソッド。

もちろんちゃんと動く。動くのだが読んでいてイラつく。

①最初の項目(Address)とそれ以外の項目でresultへの代入が違う(=,+=)

②最後の項目(Profession)とそれ以外の項目で末尾のcommaの有無が違う

③commaの登場回数が多い。constにしてるだけマシだが。

 

最初に書いた人、なんでこんなコードにしたんだろう?

 

 

<追記したんご>

↑のコードはVB6で書かれていたのをC#に移植したものらしいのだが、VB6のコードを確認したところ、

①各項目をCollectionにAdd

②Collectionを配列に変換

③Join()で連結

というまっとうな方法になっていた。

なんで後発言語のC#のほうがへんなコードになったんだろう?

 

<さらに追記>

こんなこと気にしててはいけないのだろうか。だめなのだろうか?だめといわれても治らないでしょうが。

清一色の上がり判定を考えてみる。

色がそろっているのは所与として。

まずは雀頭を選抜。残った牌から面子(順子・刻子)を抜くのを再帰で。きれいになくなったら上がり。

あとは七対子判定を特別につければOKかな。

 

あくまで上がってるか否かだけ。役は関係ないのでこれでいいか。

 

flash麻雀チンイツ麻雀ゲーム「BAMBOO麻雀」を楽しく遊ぶために。

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はどうしているのか調べてみたところで冒頭のツイート。

 

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