LINQの遅延評価がマイナスに働くケース

LINQに限らず遅延評価はパフォーマンスに対してプラスに働く、という説明が多いように思うが、劇的にマイナスに働くケースがあった。 商品の名前の先頭に応じてグループ分けし、残ったデータに対して同様にグループ分けする以下のようなコード IEnumerable<T> left = .... var sub1 = left.Where(l => l.StartsWith("AB")) left = left.Where(l => sub1.All(s => s.ID != l.ID)) var sub2 = left.Where(l => l.StartsWith("A") left = left.Where(l => sub2.All(s => s.ID != l.ID)) var sub3 = left.Where(l => l.StartsWith("B") left = left.Where(l => sub3.All(s => s.ID != l.ID)) ... このような分類が20弱続くケースで、1分たっても応答が返ってこない。 leftの型をIListとし、left = left.Where(l => sub1.All(s => s.ID != l.ID)).ToList()のように即時評価に書き換えると1秒せずに返ってくる。 デバッグ実行すると、left = left.Where(l => sub1.All(s => s.ID != l....

<span title='2020-05-30 00:00:00 +0900 +0900'>May 30, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

GROUP BY省略時の弊害(MariaDB)

MariaDB 10.4 にて SQLでSELECT句に集計関数のみを指定する場合、GROUP BYは指定しなくても実行できる。 が、ヒットするレコードがない場合に全データnullのデータが1件返されてしまう。 GROUP BYに指定すれば0件が返されるので、明らかにヒットする場合を除いてGROUP BYは明示的に指定したほうがよさそう。

<span title='2020-05-25 00:00:00 +0900 +0900'>May 25, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

ストレージ廃棄前のデータ消去処理

2020/5/22時点で自分が行っている処理。 参考文献は以下 https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%AE%8C%E5%85%A8%E6%B6%88%E5%8E%BB https://bizgate.nikkei.co.jp/article/DGXMZO3867874007122018000000 HDD Wipe Out等の専用ツールを使用する。設定は、たいていのツールで既定の設定で十分と思われる。上記Wikipediaにもあるが、最近のHDDは微細化が進んでいるため残留磁気による復旧の難易度は相当高いとのことなので、規定値以上に何度も書き込みをする必要はないと考える。 SSD ドライブ全体に対してBitLockerによる暗号化フォーマットを実施する。 SSDには寿命を延ばすための処理がファームウェアに組み込まれており、OSからフォーマット、削除を実施してもその通りに実施されているとは限らない。ドライブ全体の暗号化が無難 その他Flashメモリ(USB,SDカード等) Windowsによる(クイックでない)完全フォーマット。現時点ではSSDほど独自の処理は行われていないので、これで十分と考える。 ちなみに、消去処理には機器の寿命を縮める副作用はある。上記処理後に以下のツールで寿命が来ていないか確認している HDD, SSD: CrystalDiskInfo で黄色や赤の表示がされないか その他Flash: [CheckFlash]の初期値で実行してエラーが検出されないか

<span title='2020-05-22 00:00:00 +0900 +0900'>May 22, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

Ubuntuのオンラインアカウント

Ubuntu 20.04で確認 設定に「オンラインアカウント」という設定がある。これにGoogleアカウントの設定もあり、設定したところGoogle Driveを参照できた! ローカルストレージをみると増えていっている様子はなく、閲覧、編集時に都度撮ってくる方式と思われる。素晴らしい。 私はWindows, Mac, Linuxを使っており、(ブラウザ経由ではなく)どの環境でも使えるオンラインストレージのアプリを使おうと思うとDropbox一択だと思っていた。 UbuntuであればGoogle Driveも3つのOS環境で利用できそうだ。 5/20 追記 KeePassのファイルをGoogleDriveからKeePass2で開いて保存したところ、ファイルが破損してしまった。KeePassXCでは読み取り専用でしか開けない。現時点では読み取り専用でしか使えないようだ。

<span title='2020-05-20 01:00:00 +0900 +0900'>May 20, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

Ubuntu 電源ボタンでシャットダウン

家族が出入りする場所にパソコンがあり、誤って電源ボタンを押してONになってしまった場合に、ログオンせずに電源ボタンでシャットダウンできないかと考えた。 逆に誤ってシャットダウンする危険性はあるが、それは自分が気をつければ良いと判断。 Ask Ubuntuにズバリの回答があり、これを適用したところ意図した動作を実現できた。 sudo nano /etc/acpi/events/power event=button/power action=/sbin/poweroff sudo service acpid restart https://askubuntu.com/questions/1000393/how-to-configure-the-power-off-button-to-just-power-off-instantly-in-ubuntu-17-1#answer-1081407

<span title='2020-05-20 00:00:00 +0900 +0900'>May 20, 2020</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41