C#で文字列式を演算する

文字列の式を演算したいと思う場合が結構あります。

DataTable.Compute()メソッドで実現できることが分かったので、実装して見ました。

以下が作成したメソッドです。string型の拡張メソッドになっています。
public static T Calc<T>(this string s, params object[] args) {
 using (DataTable dt = new DataTable()) {
  s = string.Format(s, args);
  object result = dt.Compute(s, “”);
  var converter = TypeDescriptor.GetConverter(typeof(T));
  return (T)converter.ConvertFromString(result.ToString());
 }
}

以下のように使うと、(2+4)/2の数値演算を行い、3を返します。
var value = “({0} + {1}) / 2″.Calc<double>(2,4);

以下のように使うと、2>=4の論理演算を行い、falseを返します。
var value = “{0} >= {1}”.Calc<bool>(2,4);

簡単ですね。

ランダム・モーション

こんな言葉があるのかないのか分かりませんが・・・
生後6週間の赤ちゃんを観察しているとこの言葉を思いつきました。
元気な子なので常に手足を動かしているのですが
手足の関連性がまったくない動きをします。
プロのドラマーでもここまでランダムに手足を動かすことはできないでしょう。
はたして彼女は自分の意志で手足を動かしているのでしょうか?
装置の試運転をするときに「適当に動かしといてや」と言われることがありますが
あのランダム・モーションで多軸ロボットを動かすことが出来たらさぞかし面白いと思います。

プログラムを書く

こんにちはMTJです。

プログラムをする上で、何をどこまで知っていなければいけないのか
とは常々考える問題です。

例えば自分たちの仕事なら、プログラムの事より機械に詳しくないと仕事
自体が進みません。
只上記の事はプログラムミングの知識ではありません。
C#ではメモリの管理やポインタなども行う事が無いので
アドレスうんぬんなどはほとんど触ることが無い部分です
実際自分もプログラムをしてますが、ほとんどメモリ空間など
を意識したことはありません。

もちろんHTML5などのプログラマーもほとんど考えることは
ないでしょう。

しかし、C++やマイコンのプログラムなど機械に近いような
プログラムを行う人は意識しなければ完成もしないのではないのでしょうか。

結局、プログラムというと覚えることはかなり多岐にわたってしまい
近道をするためには先人達のしていることをとりあえず覚える、
覚えたうえでそちらについて詳しく調べるという行動が必要だと感じて
います。

只、その覚えるという行動が浅くなってしまうと、その先まで浅くなっていってしまう
泥沼感があるのが痛い点です。

34インチウルトラワイドモニタ

DELLが販売している34インチウルトラワイドモニタU3415Wがほしくてたまらない。

仕事ではデュアルモニタを使用しているが、つなぎ目が気になる、輝度や色相の差が気になる。 解像度も現状の2つのモニタを足したサイズよりも大きい。ウルトラワイドでも(多分)見やすい曲面スクリーン。

しかし、金額が10万円! 高すぎるよ。

外部記憶装置

ルドルフ・シェーンハイマー博士より
「生命とは動的平衡にある流れである」

すべての細胞は常に破壊され再生される。
お腹の不要な脂肪でさえ常に「新しい」脂肪なのだ。
厳密に言うと「一秒前の私と今の私は別人」となる。

脳細胞も例外ではない。

脳細胞も破壊と再生を繰り返すのであれば人はどうやって物事を記憶するのか?
呆けた人でも昔のことは覚えている。
何でや、おかしいやん。古い記憶ほど先に消えるはずやのに…。

いつの日か人の記憶のメカニズムが解明されたら「外部記憶装置」が登場するでしょう。
人はその外部記憶装置と自分の脳を接続して膨大なデータを検索する。
生きている間に使ってみたい…。

違い

こんにちは MTJです。

作成するソフトで、制御に近いソフト、データベースなどネットワークに近い物など様々な物がありますが、
データベースなど複数のクライアントから1つのデータに対してアクセスするものに関しては意識する部分が
かなり異なっていると感じました。

普段装置とのソフトを作成しているのでいつもは気にしない部分、ファイルの排他処理などの部分で
様々な事に躓きました。
今回思ったことは1つのファイルに追記していく方式でなく、何時~何時という感じで
ファイルを区切り、1つ1つのファイルを結合することで1つの期間とするようなファイル
の持ち方にすることで、上書き中のファイルにアクセスすることで失敗などが発生しなかったのではないか
と思いました。

ここら辺は経験量によるものだと思います。

親子

先日、息子(小学生)の日曜参観日に行ってきました。

算数の授業で、図形の面積を求める問題について、複数の解き方があるのでクラス全員で
色々な解き方を出し合う授業でした。

授業を見ながら自分ならどう解くかを考えていると、息子もほぼ同じ方法で解いていました。

息子は嫁よりも自分に似ているが、計算の仕方まで同じとはビックリです。

現地立上げ調整

毎度の事ながら、我々ラダーマンの現地立上げ調整は時間との闘いです。
メカ設計の遅れ、電気設計の遅れ、部材納期の遅れ、メカ組立の遅れ、メカ配管配線の遅れ、メカ調整の遅れ・・・。遅れという遅れがラダーマンの持ち時間を減らします。
ここでぶつけたら一巻の終わり。立会に間に合わなくなる。
追い詰められて普段以上の能力を発揮する人。または、押し潰されてしまう人。
ラダーマンはゴキブリのような人間でないと務まりません。

デスクトップPC

こんにちはmtjです。

昔からPCを使用していると何度もPCパーツの進化に振れることがあります。

例えばHDDなんかも今や1TBは当たり前、さらには高速のSSDまである状態です。
CPUも今は8コアは当たり前(自分はAMDCPUを主に使用します)

さらにはヒートシンクなども無しで運用可能な低TDPな物も多く出ています。
チップ内蔵グラフィックスも進化していて今やタブレットでもかなりのゲーム、
動画などが視聴可能です。

自分はタブレットよりはデスクトップPCをよく使用します、主に用途はゲームなのですが
動画処理ソフトも使用し、動画処理ソフトはCUDAに対応しているのでGPUにも左右されています。
最近はゲームの方の進化よりもパーツの進化が早いので、20万でも出せばしばらく運用できて
ストレス無く稼働可能な環境が手に入ります。
数年前なら20万でノートPCが手に入る状態です。

用途がゲーム、動画編集しかないので重要なのは基本的にGPUです、なのでCPUはAMDでも
何も問題ありません、処理スコアなどを測定しない限りは気にならない物だと思います。

以前も書いた通り、現在のパーツは低電力、高性能に向っているような気がします。
CPUのコアも倍々に増えているわけでなく落ち着いてきたような感じです。
デスクトップで低消費が進めば、タブレットも高性能になっていき、SSDも安くなれば
ますますタブレットが使いやすくなると思います。

Surface pro3の時も思いましたが、あの小ささでストレス無く動くのには驚きました
発熱量が多いので持っていると熱いですけど。

この先のデスクトップの販売戦略がどうなっていくのかは少し期待している所です。

10年前のソフト

保守のために自分が10年前に作成したソースコードを読んだのですが、非常に読みづらい。
.NET Frameworkは出始めのバージョン1.1です。

.NET Frameworkの機能も貧弱だったので仕方が無い所もあるものの、名前の付け方や実装の方法が.NETの作法から外れていたり古くさかったり、残念なソースコードになっていました。

10年の間に.NETも自分も成長したのだと、ポジティブに考えることにします。