C#の拡張メソッドがおもしろい。2

中央値(メディアン)を計算する拡張メソッドを作成しました。

public static T Median<T>(this IList<T> items) {
    //要素数チェック
    if (items == null || items.Count <= 0) return default(T);
    //ソート
    List<T> sortedItems = new List<T>(items);
    sortedItems.Sort();
    //奇数、偶数による分岐
    if (sortedItems.Count.IsOdd()) {
        return sortedItems[sortedItems.Count / 2];
    } else {
        decimal item1 = Convert.ToDecimal(sortedItems[sortedItems.Count / 2 - 1]);
        decimal item2 = Convert.ToDecimal(sortedItems[sortedItems.Count / 2]);
        decimal center = (item1 + item2) / 2;
        return (T)Convert.ChangeType(center, typeof(T));
    }
}

要素数が奇数の場合は、そのまま中央値を返すので問題無いが、偶数の場合は、中央値2つの平均値を返したいので、一旦decimal型に変換して平均値を計算しています。

しかしこの実装ではdouble型の大きい値の場合にオーバーフローしたり、NaNに対応出来ません。

.netフレームワークのAverage拡張メソッドはどのような実装になっているのでしょう?
調べてみると、型ごとに拡張メソッドが用意されていました。なるほど。

酷暑

夏生まれの私でも最近の酷暑には閉口しています。
水冷のCPUがあるように水を張ったタライに足を浸けて開発を行うのはいかがでしょうか?
えっ、タライって何?
ドリフターズが頭の上に落とすバケツのお化けみたいなヤツですよ。
あぁ、ドリフターズも知りませんか・・・。

社会人になって初めての夏が来ました。

毎朝出社するとき、高校の横を通るのですが、毎朝校門には先生方が遅刻する生徒を待っておられます。しかし、今日は、その先生方がおられませんでした。

学生は、夏休みなのだそうです。去年まで学生だったので、非常に懐かしいです。
社会人は、お盆休みしかまとまった休みがありません。

ちなみに豪雪地帯の地域は、夏休みは短く冬休みが長いそうです。

暑い日が長く続きますが、熱中症や冷房のかけすぎによる体調不良をおこさないように乗り切りましょう。

「第7回けいはんなビジネスメッセ」に出展します。

皆さんいよいよ夏本番と言う暑さがやってきますね。
今年の夏も猛暑が続くのかな…
身体には気を付けて下さいね。
でも九州の豪雨による被害には、毎日驚いています。
去年は東北地震もあり今年は豪雨で、最近天災続きで心配してます。

さて、2012年07月19日木曜日に、場所けいはんなプラザで「第7回けいはんなビジネスメッセ」
環境・エネルギーに出展します。
前回、中小企業総合展で反響を頂きました、簡易電力計S-WATTⅡ!
関西は電力不足と原発問題を抱えています。
是非とも皆様の節電のお手伝いをさせて頂きたいと思います。
よろしくお願いします。

不具合発生!?

現場で不具合が起きた時の、方法について色々試しましたが、私が一番うまく行く方法として、オセロ手法というのがあります。 
まぁ早い話が黒い不具合原因を切り分けて、シロにしていく方法です。この方法はじつは最初は、少しづつしかシロに変わりませんが、不具合の真相に近づくと一気にに早く片付きます。仙人のように最初から不具合があてられればいいのですが、凡人には一つ一つが重要です。
あと、検証方法や手法を不具合解析時に、変えてしまうとよく振り出しに戻る事がよくありました。 
固い信念と順序は何事に置いても重要だと私は思います。

プログラムは難しい・・・

学校にいる時はずっとJAVAをしていたのですが

開発ではC#を使っています、見た目はほとんど同じなのですが

やはり、C#独特の書き方というものを身につけるのが難しい、

ついつい、JAVAでの書き方をしてしまいます

そして焦って作成していると、小さいミスが多くなったり見落としが多くなったりで

C#に慣れることとそういった小さいミスを発見することを頑張りたいと思っております。

C#の拡張メソッドがおもしろい。

最近以下の短い拡張メソッドを作りました。
この拡張メソッドを使用すると、Listや配列の全てのIndexを遅延評価で列挙します。

public static IEnumerable Indexes(this IList items) {
    if (items == null) yield break;
    for (int i = 0; i < items.Count; i++) {
        yield return i;
    }
}

どこで使用するのかというと、
たとえば、コレクションの全ての要素に対して処理を行いたい場合、foreachを
使用しますが、処理内でIndexを使用したい場合、foreachではIndexが分かりません。
(たしかPHPなんかではIndexと要素の両方が使用できたはず)

foreach (var item in items) {
    //Indexが分からない
}

もちろんforを使用すれば良いのですが、パッと見ただけで全ての要素に対して処理している事が分かった方が可読性が高くて良い。なので以下のように使います。

foreach (int i in items.Indexes()) {
    //要素ごとの処理
}

またまた古いPLC

今度はオムロンのC500です。

CX-Programmerはバックアップ、リストア、照合をサポートしていますがC500とPCを接続するケーブルがありません。本体同様、廃盤です。
ソフト会社には保管してあるかもしれませんが設備にはケーブルなど付いていません。
メーカーは専門の社員を派遣して古いPLCからラダーを読み出すサービスを行っているようですがケーブルさえあれば不要のサービスです。

PLCのコネクタとDSUB9ピンのコネクタを接続する図面を公開してくれれば高い費用を払って人を派遣してもらう必要はないのですが・・・。

もうすぐ梅雨の時期ですね。

はじめまして、先月の中旬に入社いたしました TK です。
 
毎年のことですが、またじめじめとした梅雨の時期が到来します。
梅雨の時期は、何もするきが起きないくらいドンヨリとしてしまします。
また、私はこの時期に風邪をひくことが多く、体調管理もより気をつけ
なければなりません。

しかし、新入社員なのにドンヨリはできません。
梅雨明けまで長いですが、体調管理に気をつけたいと思います。

皆様も体調には気をつけて下さい。

中小企業総合展2012in Kansai

皆さんこんにちわ。6月に入り暑くなってきましたね。
さて、2012年5月30日(水)~1日(金)、インテックス大阪にて「中小企業総合展2012in Kansai」参加致しました。
お忙しい中、たくさんのご来場様に弊社のブースに来て頂きました。
お問い合わせも多数寄せられました。本当にありがとうございました。
私達の展示品は新しくなった簡易電力計エスワット2です。実は今回、朝日新聞やラジオでもエスワット2が紹介されて、とても反響が高かったんですよ。
私も驚きました。
たくさんの方が、興味を持って、見てくださいました。実際簡単で使いやすいと思います。
本当に世間のこの夏の省エネや節電の関心は高いですね。
特に関電エリアの私達は、節電に知恵を注がないと。そしてエスワット2が皆様のお役に立てれば嬉しい限りです。
私も暑さに負けず頑張っていきます。