Dictionaryの列挙順はAdd順じゃないかもだって?
>列挙処理のために、ディクショナリ内の各アイテムは、値とそのキーを表す KeyValuePair<TKey, TValue> 構造体として処理されます。 アイテムが返される順序は未定義です。
「順序は未定義です」
つまり、Dictionaryの各要素を列挙する場合、Addした順に列挙してくれるとは限らないということ???ある日突然「新伊丹」と「稲野」がひっくり返った路線図を吐き出すかもってか???
うーん、これはこまった。というわけで、ちょっと考えよ。
VisualStudioのメソッド抽出
バグを乗り越えて(?)
現在お仕事してる現場関係のグチでおます。特定されない程度にぼかす。
その現場、過去(私が逃亡wしてた時期)にひでーバグを出してた。
「int配列の各要素につき値が0以外なら文字列変換して出力。0ならば空文字を出力。」に対してこんなバグ入りソースを書いてやがった(C#だべ)
foreach(var item in new[] { 1, 2, 3, 0, 5 }) {
if (item != 0)
s = item.ToString();
}
トライやる・ウィーク
朝っぱらから近所を散歩してると「トライやる・ウィーク」なる旗がはためいていた。
わが兵庫県で始まった中学生の職業体験行事が始まったことを知らせるものである。
トライやる・ウィークでいろんなことを学ぶ(将来の私の年金原資である)中学生諸君のことは応援するものである。
それはさておき、もし、自分のいる仕事場(ソフトウェア開発)に職業体験の中学生を受け入れるとしたら、どんな問題があるだろうか?
ぱっと思い当たる問題は「ソースを見られる」こと。
さすがにUSBメモリ持ち込んでソースを持って帰るなんてことはしないだろうが、ソフトウェア開発の職業体験となるとソースを見せて理解させて改修させないと意味がないわけなのだが、自社販売のソフトならともかく他社販売のソフトだとソースを見せることがNGなわけで。
職業体験を受け入れることはできないか。
考え事。
いまのとこ相手にしてるコードが楽しくて泣きそう。現物はもうすこしエグいが薄めて書いた。
-----------------------------------------------------------------------
private bool CalcMethod(J001Form ParentForm){ /*ParentFormは呼び出し元Form*/
/*この辺略*/
if (h[hindex].count_1 >= 15){
if ((decimal)h[hindex].valueA_1 + (decimal)h[hindex].valueB_1 > int.MaxValue)
return false;
h[hindex].sum_1 = h[hindex].valueA_1 + h[hindex].valueB_1;
}
if (h[hindex].count_2 >= 15){
if ((decimal)h[hindex].valueA_2 + (decimal)h[hindex].valueB_2 > int.MaxValue)
return false;
h[hindex].sum_2 = h[hindex].valueA_2 + h[hindex].valueB_2;
}
if (h[hindex].count_3 >= 15){
if ((decimal)h[hindex].valueA_3 + (decimal)h[hindex].valueB_3 > int.MaxValue)
return false;
h[hindex].sum_3 = h[hindex].valueA_3 + h[hindex].valueB_3;
}
/*以下中途returnのない処理が数百行続くが略*/
/*途中ParentFormへのアクセス(I\O)が数行ある*/
return true;
}
-----------------------------------------------------------------------
これの改修を担当することになったのだが
・h[hindex]の連発
・_1,_2,_3
を見てイラッとしてきたんでなんとかしなければと。
いわゆるリファクタリングとなると、ユニットテストとやらを書きたいとこだが、ひっかかってるのは
・引数にフォーム
・フォームのコンストラクタでプロジェクト特有のいろいろなことを裏でやってそう
・メソッドが長大。直すのは上記含む数行なのに。
・直す部分に引数のフォーム関係なくね?
・直す部分だけVisualStudioのメソッド抽出かけることができない(中途returnが邪魔)
etc
とりあえず直す部分の末尾にreturn true;つけてメソッド抽出してから考えよう。
Ich habe HDD (NAS買った)
ドイツ語あってるかしら>タイトル
タイトルに続けてPPAPのドイツ語版をやってみようとおもったが諦めて英語で。
I have a HDD,I have a HDD,Uh RAID 1
I have a HDD,I have a HDD,Uh RAID 1
RAID 1~RAID 1,Uh Raid10 Network Attach Strage!
ま、ハズしたよね。ちゃんとNASのこと話す。
ハズしたPPAP(改)みたくHDD4台のNASはさすがに大仰(3T×4で6TのRAID10は個人で持つにはデカすぎる)なのでAS3102T&3T HDD×2を買う。
さくさくとくみ上げると
!! RAID1な3TのNAS爆誕\(^o^)/ !!
写真やわけのわからんExcelファイルは全部NASにぶち込んでしまおう。
PCを身軽にしてやろう。
PCをバックアップするたびに巨大なドキュメントも一緒にバックアップするのはやめよう。
PCを新調するたびにドキュメントをコピーしなくて済む!
うはっ、夢がひろがりんぐ。
追記
ストレージ系のお買い物をしたときのお楽しみはベンチマーク。
すでにAS3102Tのベンチマークはググればいくらでも拾えるが、自分のとこでも確認したくていそいそとベンチマークをとったなり。
ちなみにPC内蔵HDDのベンチがこれ。NASのほうが速い。
他、いくつかベンチとってた値と比較すると下記のような序列。
内蔵SSD>>>>AS3102T>PCでのファイルサーバー(Core2Duo)>>内蔵HDD>>>>LinkStation(LS-GL)
速いNASを入手したので仕事の速度も速く・・・はならないわな。人間の能力以上には速くはなりません。
ClosedXMLつこうて感想メモ
①Row().Deleteする際はRow内各セルに関連する結合をすべて解除する
private static void RemoveMergedRangeInRow(IXLWorksheet sheet, int row)
{
for (int j = 1; j <= sheet.LastColumnUsed().ColumnNumber(); j++)
{
var vvv = GetMergedRange(sheet, row, j);
if (vvv != null)
{
sheet.MergedRanges.Remove(vvv);
}
}
}
private static IXLRange GetMergedRange(IXLWorksheet sheet, int row, int col)
{
foreach (var ml in sheet.MergedRanges)
{
if (IsInRange(row, col, ml))
{
return ml;
}
}
return null;
}
private static bool IsInRange(int row, int col, IXLRange ml)
{
var ad = ml.RangeAddress;
var r1 = ad.FirstAddress;
var r2 = ad.LastAddress;
var aaa1 = r1.RowNumber;
var aaa2 = r2.RowNumber;
var bbb1 = r1.ColumnNumber;
var bbb2 = r2.ColumnNumber;
return bbb1 <= col && col <= bbb2 && aaa1 <= row && row <= aaa2;
}
②Rows().Deleteメソッドが欲しいなぁ。
上記①めんどくさいし。結合セル丸ごと含む行を一気に削除できれば楽。