フォルダの中にあるファイルの合計サイズを知りたい。
ということで、いろいろと考えた件のメモです。
C#をもぐもぐしているblog
C#と他の言語で、フォルダ内のサイズを調べられないか調査したときのメモです
とあるシステムで帳票をテンプレートから生成する機能を作ろうと思ったので、
いろいろ調べていると、ThinReportsという便利そうなアプリがあることを知りました。
ある開発者曰く
テストコードはちょっとした修正結果の担保を簡単に取ることができる非常に心強い味方です。
しかし、テストコードをいざC#で書いていると、少し困ったことに遭遇してしまいました。
まず、現在のVisualStudioでは、テスト用のプロジェクトを作成して、対象のプロジェクトを参照します。
そのため、通常はテスト対象のメソッドなりプロパティは、外部から触れるpublicなどに限られてしまい、
privateは外部からアクセスしてのテストはできません。
(* 日本という国は恐ろしいもので、動的参照を用いて参照しているexeやdll内のprivateなメソッドやプロパティ、
フィールドを参照して書き換え、テストするぜヒャッハーな悪用できちゃうような技術を作ってしまう人も居るわけで…)
では、外部からアクセス可能な範囲でテストをしようとするのですが、
通常、publicを避けているのでテストしたいメソッドがprivateだったりして拡張メソッドや困ってしまいます。
(* 先の動的参照によるテストもありますが、動的参照はインテリセンスを殺してしまい、
非常に保守性が低下しがちで、誰も引き継げなくなってしまうという以前に、ナイワーを感じる今日この頃。)
自分自身、このテストの実装という経験や知識が弱いと感じているのですが、
いい資料はないものでしょうか…
windowsでvagrantが正常に動作しない問題の対応策についてのメモです。
以前、WindowsでVagrantのpluginをインストールして使用している際に、
なぜかrubyのエラーが発生してしまい、
vagrant upなどがコケてしまう問題に遭遇していました。
今回もその類でつまづいていたのですが、
どうやら原因は.vagrant.dフォルダまでのパスにあったようです。
◇原因◇
.vagrant.dフォルダまでに半角英数字以外の文字が含まれている。
◇確認方法◇
デフォルトの状態では、以下のフォルダにあります。
%HOMEPATH%
◇その他◇
そもそも、同じMicrosoftアカウントを追加しているのですが、
デスクトップPCとノートPCで、ユーザーフォルダ名が異なるのでしょうか….
ここが疑問で、ノートPCは動くのにデスクトップPCは動かないという
よく分からない罠にハマってしまった訳ですが。
先日行われた2016年10月度の勉強会にて、
RubyやPythonでのbool型チェックが簡単にできないというネタがありました。
そこで、C#ではどうだったかなと思い試してみました。
// 実装
今回は、拡張メソッドでobject型にIsBoolというbool型かどうかを確認できるように実装してみました。
Ref. MSDN 拡張メソッド (C# プログラミング ガイド)
Ref. MSDN is (C# リファレンス)
public static bool IsBool(this object obj)
{
return (obj is bool);
}
さて、これで完成です。
実際に使う場合は、下記のようなコードになります。
object obj = new object();
bool result = obj.IsBool(); // false
// 実行結果
// まとめ
ということで、何もなく実装できてしまいました。
C#では、言語側で“obj is type”で“objがnull以外でtype型と互換性があるかどうか”を
bool型で返してくれるというありがたい機能が実装されているため、問題になりませんでしたが、
他の言語だとこういう問題もあるんだなと改めて言語間の違いを感じました。
わざわざ拡張メソッドなんて定義しなくてもよかったのですが、まぁ、何事も経験だと思いますで…
また、今回の実装によってobject型に対しても拡張メソッドが実装できる、
ということを新たに知ることができました。
今まで試したことがなかったのですが、これならあの忌々しいDBNullチェックも
obj.IsDBNull()
obj.IsDBNullOrNothing()
のように実装できるんですねぇ。
NTT V130をアダプタモードで使用したら、IP電話ができなくなった際のメモです。
* 数日ほど迷ったので、メモ
今回、家のルーターをNEC Aterm WG1800 HP2から、YAMAHA NVR510に変更しました。
その際に、NTT V130で使用しているIP電話が使用不可になりました。
どはまりしたので、解決メモ
# ホスト環境
Windows 10 x64
# Vagrant Version
1.8.4
# 状況
vagrant plugin install vagrant-hostsupdater
などのffiを使用しているプラグインのインストールを実行すると、
vagrant upなどのコマンドを実行しようとすると下記画像のように、
ffiのロードエラーでvagrantが実行できなくなる。
# 解決方法
1. Ruby をインストールする。
2. Ruby2.DevKit をインストールする。
3. Vagrant を再インストールする。
4. 「C:\Users\$ユーザー名$\.vagrant.d」のフォルダを削除する
(2016/08/08 00:06追記)
プラグインのインストールは完了しました。
が、プラグインの実行でコケてます…うーん
行ヘッダに日付を描画、列ヘッダの上にヘッダを追加してそれを結合させてみた話です。
DataGridViewを少し改造してみました!という小ネタです。
Source: https://github.com/223n/HiStudy/tree/master/MergeGridView2
行ヘッダに日付を描画、列ヘッダの上にヘッダを追加してそれを結合させてみました。
プロジェクトには、MergeGridView2とSampleの2プロジェクトが含まれています。
MergeGridView2は、改造したGridView本体があり、
Sampleでは、MergeGridview2を実際に配置した結果です。
CellPaintイベントやPaintイベントをトリガーに、
UpdateHeaderメソッドでは、列ヘッダを描画しており、
UpdateCellメソッドでは、行ヘッダを描画しています。
ところで、この記事を書く際にVisualStudioを更新したり再起動していたのですが、
なんと、メソッド等の1行上に参照数と、参照状況が確認できる機能が自動更新で追加されていたようです。
VB.NETとC#での拡張メソッドの実装方法について
とあるプロジェクトに参加している際に、以下のようなクラスがありました。
CommonExtentionClass
「やべぇ、ちゃんと拡張メソッド使ってやがる!!(VB.NETで)」
という興奮も束の間
Public Shared Function TimeToInt(ByVal pDate As Date) As Integer
それ、拡張メソッドちがうよ… (´;ω;`)
ということで、おさらいも兼ねて、VB.NETとC#での拡張メソッドの実装方法について書いていきます。
参考資料は以下のMSDNをご参照ください。
Ref. 拡張メソッド (Visual Basic) – MSDN