VisualStudioのメソッド抽出

VisualStudio2010でメソッド抽出やってみた。
 
<抽出前>
    string a = "";
    bool b = false;
    a = "";
    if (b)
        a = "true";
    Console.WriteLine(a);

<抽出後>
    string a = "";
    bool b = false;
    a = Hoge(a, b);
    Console.WriteLine(a);
 
private static string Hoge(string a, bool b) {
    a = "";
    if (b)
        a = "true";
    return a;
}
 
Hogeにstringの引数がくっついてるのが納得いかん(コードの書き方に難があるというのはいいっこなし)。
 
VisualStudio2015では納得いく動きになってんだけどね。
 

バグを乗り越えて(?)

現在お仕事してる現場関係のグチでおます。特定されない程度にぼかす。

 

その現場、過去(私が逃亡wしてた時期)にひでーバグを出してた。

 

「int配列の各要素につき値が0以外なら文字列変換して出力。0ならば空文字を出力。」に対してこんなバグ入りソースを書いてやがった(C#だべ)

 
<ソース> 
string s = "";
foreach(var item in new[] { 1, 2, 3, 0, 5 }) {
    if (item != 0)
        s = item.ToString();
    Console.WriteLine(s);
}
</ソース>
<結果>
1
2
3
3
5
</結果>
 
こういうくそバグでもリリースされた後の発覚となると厳しい原因分析があって次期バージョンの確認作業に反映しなければいけないわけ(次期バージョンやらせてもらえるだけでも感謝しないといけない状況でつが)で。。。リリース直前の確認項目に
「変数が初期化されているか」
が追加されることに。
 
リリース直前に?
 
また逃げたくなってきた(をい
 
 
 
 

トライやる・ウィーク

朝っぱらから近所を散歩してると「トライやる・ウィーク」なる旗がはためいていた。

わが兵庫県で始まった中学生の職業体験行事が始まったことを知らせるものである。

トライやる・ウィークでいろんなことを学ぶ(将来の私の年金原資である)中学生諸君のことは応援するものである。

 

それはさておき、もし、自分のいる仕事場(ソフトウェア開発)に職業体験の中学生を受け入れるとしたら、どんな問題があるだろうか?

ぱっと思い当たる問題は「ソースを見られる」こと。

さすがに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 1RAID 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のベンチマークはググればいくらでも拾えるが、自分のとこでも確認したくていそいそとベンチマークをとったなり。

f:id:turkey_pc:20161129211100p:plain

これがNASベンチマークかよ。

ちなみにPC内蔵HDDのベンチがこれ。NASのほうが速い。

f:id:turkey_pc:20161129212558p:plain

 

他、いくつかベンチとってた値と比較すると下記のような序列。

内蔵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メソッドが欲しいなぁ。

 上記①めんどくさいし。結合セル丸ごと含む行を一気に削除できれば楽。

ClosedXMLつこてみた。

あくまでメモ。

C#にてExcelファイルの読み込みをする必要が出てきたのでググったら

↓のようなページが引っかかった。(①)

qiita.com

 

ありがたいとばかりにClosedXML(②)をダウンロード&ビルド。

github.com

 

あとは自分のプロジェクトからビルドしたDLL(\obj\Debug\ClosedXML.dll)を参照するだけ。楽でええやん。

 

とりあえず①のサンプルコード(一列目のセル内容を取得するだけ)をやってみたが残念なことに読み込み部分で例外。

ダウンロードとビルドがおかしかったかと②にくっついてるxlsxファイルを通すとこれはOK。

 

デバグできるかなーと思ったがこれが驚くことに自分のプロジェクトからはDLL参照しているだけなのにClosedXML.dllの例外吐いてる部分が表示されるではないか

ソースがあってバグの発生箇所がわかる。平易なバグみたいなのでちびっと修正。

若干怪しい手持ちのxlsxファイルでもちゃんと読み込めるようになった。めでたしめでたし。