merさんのブログ

[Effective C#] 項目4 #if の代わりに Conditional 属性を使用する

仕事忙しいので現実逃避。

本日は「項目4 #if の代わりに Conditional 属性を使用する」です。

#if なんかは C 言語のプリプロセッサなんかでおなじみなので、よく知っていたのですが、Conditional 属性については全く知りませんでした。

public void ShowFunctionName() {
#if DEBUG
    Debug.WriteLine((new StackTrace()).GetFrame(1).GetMethod().Name;
#endif
}

とか、デバッグ時はスタックトレースが見たいとか、そういうのを書く時があります。書籍ではこの方法は問題が起きる場合があると書いてあります。

[Effective C#] 項目3 キャスト時には is あるいは as 演算子を使用すること

もう飽きてきた。(笑)

本日は「項目3 キャスト時には is あるいは as 演算子を使用すること」です。

C# には C++ ライクなキャストのほかに、is 演算子as 演算子があります。

余談ですが、C# というか .NET Framework には例外は例外的なことに使うというという方針があります。キャスト演算子でキャストに失敗することが予測される場合、それらを例外で処理すべきではないです。

as 演算子は、キャストに失敗した場合 null を返します。is 演算子はキャストできない場合は false を返します。

CustomType custom = (CustomType)Factory.GetObject();
custom.Invoke();

工業的にいえば誰でもできるようにするってのは大事なんだと思うけど

tag: 

ソフトウェア産業というのは建築業がモデルと言われていてですね。

上流設計をしっかりして、テンプレート化して、開発の現場は誰でもいいみたいな感じなんです。でもこれだと、破綻するんですよね。

The Source Code Is the Design で、柴田さんも述べられていますが、

上流の設計から実際のコーディング・デバッグまで、すべての活動がソフトウェア設計活動であり、すべてが重要であると述べられています。しかし、上流設計だけが重要で、それさえできれば、後の実装(コーディング)・デバッグは誰がやってもできると信じて軽視しているソフトウェア開発が多いのではないでしょうか。その結果、レベルの低いプログラマー(作業員?)が大量に投入されて、負債としてのソフトウェアが作られてしまうか、最後にプロジェクトが破綻してしまう結果になるのではないかと思います。

実際には、誰でも開発できるとは思っている人は少ないみたいなんです。ところがどっこい。現実の世界じゃ、開発者をかき集めても望んだスキルレベルの人が集まらない、みたいな感じなんですよね。現場には人事権がない場合が多いですし。

[Effective C#] 項目2 const よりも readonly を使用する

本日で Effective C# の復習も二日目です。

って、項目50 まであるんですな。More Effective C# もあるから、毎日頑張っても三カ月以上かかるのか…。気が遠い。(笑)

まあ、「項目2 const よりも readonly を使用する」です。

// 定数で宣言。
public const int MaxValue = 15;

// readonly フィールドで宣言。
public static readonly int MaxValue = 15;

の違いについてです。(実際には、「項目1 アクセス可能なデータメンバの代わりに常にプロパティを使用すること」の通り、フィールドではなく、static プロパティを使う方がいいと思います)

[Effective C#] 項目1 アクセス可能なデータメンバの代わりに常にプロパティを使用すること

なんか今日から Effective C# の復習でもやってみます。

本日は「項目1 アクセス可能なデータメンバの代わりに常にプロパティを使用すること」です。

これはまあ、超当たり前というか。オブジェクト指向で大事なカプセル化というのは、外からは分からないように処理をはさめるようにすることでもあるので、フィールドを公開してしまうとこれができないというか。

でもまあ、スタイルとして、とりあえずフィールドで、必要が出てからリファクタを利用してプロパティに変更するとかいう手段もあります。

RHEL 5/CentOS 5 ってユーザーに開放するもんじゃないのかも

tag: 

某社のソフトのぜい弱性の調査のためにいろいろと調べものな毎日です。

そんなわけで、今日は PHP のセッションの取り扱いについてです。

Cent OS 5 では、セッションはファイルに記録されるみたいです。

$ ls -l /var/lib/php/
total 84
drwxrwx--- 2 root apache 81920 Jan 6 21:48 session

なので、apache グループで apache が起動していないとだめで、suEXEC のときはセッションが使えなくなります。

というか、恐ろしいのが apache グループならばセッションファイルのリストが取れる (= セッション ID が分かるし、値が取得できる) なんですねぇ。一つでもぜい弱性があるソフトウェアが入っていたら基本道連れです。(例えば PHP code injection とか)

なので、アプリケーションごとに実行ユーザーを変更するってのは当たり前のことっぽいです。ですが、CentOS 5 には FastCGI が入ってないのでしょんぼりです。

ちなみに、Ubuntu だと、

ヘアピン NAT

突然ですが以下のような一般的な構成の時です。

ブロードバンドルーター
192.168.1.1
公開サーバー
192.168.1.2
パソコン
192.168.1.128

んで、サーバーを公開するために、ブロードバンドルーターで DNAT をかけています。

このとき、インターネット側からは、グローバル IP Address でアクセスすれば、DNAT されてサーバーに接続できます。ですが、LAN 内からは難しい。(LAN 内からは DNAT が効かないので、ブロードバンドルーターがパケットを受け取って無反応になる)

単純な解決法だと、LAN 内のパソコンからは 192.168.1.2 でアクセスさせて、LAN 外のパソコンからはグローバル IP Address でアクセスさせる方法があります。

ただし、この問題は結構問題がありまして。

練習と本番

Effective Java 等の訳者である柴田さんの blog に興味深いエントリがありました。

Practice, Practice, Practice

残念ながら、ソフトウェアの開発現場では、本当に仕事の中で練習している人がほとんどではないでしょうか。

本当だったら、仕事で必要な知識は仕事中に覚えるべきで、それじゃ足りないならば、大学などできちんと教育を受けた人を雇うべきだと思うんですよね。

でもまあ、現実の話ですが、柴田さんのように仕事時間外で練習をしている人はいっぱいいるのですよね。そういう人々に追いついて追い越そうと思ったら、仕事時間中だけの練習では絶対に無理です。(天才ならば話は別ですけど)

ASP.NET Web Form vs. ASP.NET MVC in Japan

なにか面白そうなイベントがあったらしくて、そのレポートが公開されていました。

「ASP.NET Web Form」か「ASP.NET MVC」か? .NETによるWebアプリ開発の今を徹底討論

既存の ASP.NET である ASP.NET Web Form と、ASP.NET MVC についての比較です。どちらも長所短所あって、悩むと言えば悩むので、かなり有意義な情報を得られました。

要するに、テスト駆動開発の時は ASP.NET MVC は有利ってことのようだ。層に分けやすさは圧倒的に有利なので。

でも、ASP.NET Web Form でもプレゼンテーション層をもうければ (MVP) 多層化も MVC と同程度にできると思うんだよね。

小野:標準コントロールが生成する物で、我慢できる仕様であればWeb Formの生産性の高さは魅力です。

SQL Server Analysis Services

先日、某社に侵入して Microsoft SQL Server Analysis Services を利用した分析帳票の出し方の講義を受けてきました。

私自身は Microsoft SQL Server は開発用で使っているのですが、Reporting Services はともかく、他のサービスはほとんど使ったことはありません。

そんなわけで、講義を受けてきたわけです。

そのかいもあり、Analysis Services がなんぞや? ってのが分かった気がしました。

Analysis Services にはキューブと言うものを登録でき、クライアントから Analysis Services に接続して分析ができる。一般的なスタイルと違うのは、Analysis Services では事前に多次元集計が行われていること。

なのでまあ、ドリルダウンとかドリルアップとかドリルスルーとかがやりやすい。

要は、分析を行うためのデータベースってことなんですね。分析だけを行うので、結果を見るのは他に対応したクライアントが必要みたい。

クライアントは当たり前と言うか、Microsoft Excel 2007 が圧倒的に使いやすい。

ページ

RSS - merさんのブログ を購読