読者です 読者をやめる 読者になる 読者になる

トライやる・ウィーク

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

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

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

 

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

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

さすがに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ファイルでもちゃんと読み込めるようになった。めでたしめでたし。

 

 

 

VB6のコメント消すプログラム作った 続き

細かいバグ修正しつつ、コメント跡地の広大な空白は邪魔ということで削除するよう手を入れた。

 

せっかくだし今風のプログラミングに慣れておきたくて「テストコード書いてプロダクトコード書いてコミット」の繰り返しでプログラムを成長させていこうと気合いれたが、テストコード書くのがだんだんめんどくさくなって崩壊orz

手持ちのVB6なソースを通してVB6でビルドかけてエラーでなけりゃOK、領域に突入である。

そんなんでもとりあえず動くからいいか。

github.com

 

 

 

 

VB6のコメント消すプログラム作った

実際に仕事で使用しているソースコードを通してコメント消したソースでEXEできる。

これでコメント消す前後のソースそれぞれビルドしてEXEをバイナリ比較して同じならOK・・・と思ったがVB6は同じソースでもEXE作るたびにバイナリレベルで異なるものを吐き出しやがるので、この確認方法が使えない。

とりあえず、ビルドが通っているのだから必要なメソッドは消えていないんでいいとしよう。

 

それはさておき、コメント消すプログラム自体のコードができたので自省する。

github.com

 

①フォームアプリケーションである必要はあったか?

 ・ファイル選択さえできればコンソールアプリケーションでもよかった

②メソッドの命名がちょっとアレ

 ・proc()だのDeleteComment2()だのひどいものだ。VS優秀だから後で修正しよ。

③Program.csにつらつらとメソッド書くのはどうかな?

 ・なんとなーくVSがデフォルトで作ったクラスに自分でメソッド足すのちょっと気分悪い。別クラスに動かすかな。

 

追記:あかんわー。ちょっと込み入ったコードにぶち込んだらバグでたー。もうちょっと考え直し。