楽天のデータSIMカード

現在契約している楽天のデータSIMカード(月額900円)の高速通信容量の変更があり、今まで1G/月までだったのが2G/月までになりました。ありがたい。

このSIMカードを4ヶ月くらい使っていますが、1G/月を越えたことは
無かったので、当分はこのSIMカードで充分みたいです。

C#からEXCELファイルを読み書き

以前にC#などの.netアプリケーションからEXCELファイルの読み書きを行う方法として、Open XML SDKというマイクロソフトが公開しているライブラリについて記載しました。http://www.infortec.co.jp/blog/archives/Item_453

今回、ある案件でEXCELファイルを保存する処理が必要になったためOpen XML SDKを使用してみました。が、とても分かりにくい!使いにくい!

どうもEXCELのファイル形式であるOpen XMLに対する低レベルな実装しか無いようで、なんとも泥臭い。自分でラッパーを作れば使い物になるかも知れないが、そんな時間は無い。

しかたがないので、いつものようにEXCELをCOM参照して開発しようかと思ったが、ネットで調べると、EPPlusというライブラリを発見。

試して見ると、とても使いやすい。雰囲気的には今までのEXCELのCOMオブジェクトを正しく進化させ.netで扱いやすくした感じ。 すばらしい。

[2014.10.22 追記]
残念ながらEPPlusの使用は断念しました。
理由は、EXCEL COMオブジェクトの全機能をカバー出来ておらず、実現出来ない 機能があるからです。
出来なかったのはグラフのデータ系列の色・太さ・マーカ等の変更、グラフの目盛線の表示有無の変更など。
単に自分が探しきれなかったからかも知れませんが、 EXCELであれば、「マクロの記録」を使用すれば必要な機能にたどり着けるので、探す手間も全然違います。
結局は、マイクロソフトが.netで扱いやすいEXCEL制御クラスを用意してくれれば解決する話。なんとかならないのかな~。

スレッドセーフなコレクション

2つのスレッドで1つのコレクションを操作することが良くあります。

たとえば、1つのスレッドで測定値をコレクションに追加し続ける。
もう1つのスレッドでコレクションから測定値を取り出し、画面表示したり、ファイル保存したり。

C#のList<T>などのコレクションクラスはスレッドセーフではないので、
複数スレッドで操作する場合、操作する前にLockを行います。
しかし、Lockをするのはいちいち面倒ですし、間違ってLockせずに使用する不安もあります。

.Net3.0からはSynchronizedCollectionクラスなどスレッドセーフなコレクションが追加されています。
このコレクションを使用すると、AddやRemoveなどの単独操作はスレッドセーフになります。
しかし、ForEachなどの複合操作はスレッドセーフになりません。ですので不安が残ります。

結局、SynchronizedCollectionを内包し、スレッドセーフな操作しか行えないクラスを作成するのが一番良いかと考えています。
実装可能な操作はかなり限定されます。
AddかEnqueue、Clear、DequeueAll(全ての要素を取得してクリアする)、ToList、Count
こんなところでしょうか。
キューの操作しかできないので、クラス名はThreadSafeQueueにします。
スレッド間での複数要素の受け渡し用と割り切れば、役に立つのではないかと思います。

なお、List<T>のようにインデックスによる取得操作は実装できません。
指定したインデックスの要素が別のスレッドでRemoveされている可能性があります。
Dequeueも実装できません。
Dequeueした時には要素が1つも無い可能性があります。
TryGetやTryDequeueにして取得できたがどうかも戻せば良いかも知れません。

画像処理フレームワーク

今月も社内の画像処理フレームワークに色々と機能追加を行いました。
1.別の画像処理シーケンスのサブルーチン呼び出し
2.ビット深度変換
3.円形マスク画像作成
4.濃淡補正に新しい演算方法を追加
5.16bit画像対応
6.値演算関係の機能追加

画像処理を必要とする案件が増えていますので、
社内用に画像処理フレームワークを作成したのは正解でした。
開発速度、品質、コストの全てにメリットがあります。

ギガビット

社内ネットワークが1Gbpsになりました。
実測した所、今までは約90Mbps。新しくなって約400Mbps。

たぶんジャンボ・フレームにするともっと速くなると思いますが、ネットワーク上に100Mbpsの機器も繋がっているので当分はこのままです。

モバイルwifi

モバイルwifiを購入しました。

前から欲しかったのですが2万円近く、高すぎるので買っていませんでしたが、AWR-100TKが6000円台で購入できることをネットで知り、すぐに購入しました。

これに合わせて楽天のLTEsimカードを購入。
月900円で 1GBまでの通信が行えます。

これで、外出先でも安くインターネットが使用できるようになりました。
(電話会社に毎月毎月高い金を払うのはイヤ)

設定はとても簡単ですぐに繋がります。

1ヶ月使った結果、800MBくらいの使用料でしたので、今後仕事での使用量が増えることも考え、どこかのタイミングで3GB(1677円)に変更しようと思ってます。

メソッドに機能を追加するメソッド

今日は.net用の自社ライブラリのお話。

メソッドのデリゲートにログ出力やリトライなどの機能を追加するメソッドを色々と作って使っていました。
以下は使用例。

//ログ出力を追加
Skin.Log(“test”, () => {
Hoge();
});

//リトライを追加
Skin.Retry(5, () => {
Hoge();
});

//メッセージBOX表示を追加
Skin.Msg(“msg”, () => {
Hoge();
});

上記のように1つだけ追加する場合は問題無いが、複数の追加を行う場合以下のようになり非常に分かりにくくなってしまいます。

//メッセージBOXを表示し、リトライを行い、ログ出力をしてから、Hoge()を実行
Skin.Msg(“msg”, () => Skin.Retry(5, () => Skin.Log(“test”, () => {
Hoge();
})));

汚い。特に最後の行の括弧が沢山並ぶのがきもい。
なんとか綺麗に書く方法がないか検討した結果、以下のようにメソッドチェインできるようにしてみました。

//メッセージBOXを表示し、リトライを行い、ログ出力をしてから、Hoge()を実行
new Action(() => {
Hoge();
}).Log(“test”).Retry(5).Msg(“msg”).Invoke();

すっきりしました。けど、追加する順番が逆になり、シーケンスがちょっと分かりにくい。
もう少し良い方法は無いか、今も考えています。

 

OpenXML

OpenXMLというマイクロソフトが公開しているライブラリがあることを知ったのでメモ。

EXCELファイルをプログラムから作成する場合、EXCELをCOM参照して作成していましたが、EXCELがインストールされていないと使用できなかったり、COMなのでC#と相性が悪かったり、あまり使い勝手がよくありませんでした。

OpenXMLを使用すると、EXCELがインストールされていなくてもEXCELファイル(xlsx)が作成でき、マネージドDLLなのでC#での使用も問題ありません。

実際に使用してみないと細かい所までは分かりませんが、機会があれば使ってみたいライブラリです。

Windwos8.1を無償提供

先日の開催された開発者向けカンファレンス「Build 2014」で、9インチ未満の携帯電話、タブレットにWindwos8.1を無償提供するとの発表がありました。

少し前から噂がながれていたので、この発表自体はそんなに驚きませんでしたが、どうも携帯電話、タブレット以外の組み込み機器にも適応されるらしいです。

今までは高くつくためWindowsを入れられなかったような低価格なデバイスでも自由にWindowsが使えるようになり、Andoriodと戦えるようになるかも。

しかし、OSの提供形態がどのようになるのかや、無償提供期間が決まっているのかなど、
まだ分からないところが多く、もうしばらく情報がそろうまで時間がかかりそうです。

NT京都2014

3/22(土)に京都で行われた、ネタモノ系ものづくりの展示・交流会「NT京都2014」を見に行ってきました。(くわしくはNT京都2014のサイトへ

去年の4月頃にこのイベントを知り、次回は是非出展参加したいと思いArduinoをいじりはじめたものの、飽きっぽく忘れやすいため、そんな志はどっかにいってました。


場所は、春日幼稚園で行われており、一部大きな展示物が春日神社境内で設置されています。
幼稚園の屋上から撮った写真。神社にヴィーゼル空挺戦闘車という普段お目にかかれない組み合わせ。
左の建物に見えている黒い塊は、ヒゲキタさんの手作りプラネタリウムです。


黒線の上を自走するロボット。
小型WindowsPCでOpenCVを動かし画像解析で黒線を検知。モータ制御はArduinoで行っていました。
面白いのはカメラが頭、モータ制御されている回転傾斜軸が首のようになっており、黒線を追跡する時に本体タイヤの回転より先に回転傾斜軸の首が黒線に追従しているので、まるで生き物が動いているかのような愛嬌のある動きを見せてくれます。


3軸制御のピッキングロボット。
よく工場などで見かけるロボットですが、この作品は支柱がぐらんぐらんで、
ロボットが動くと惰性でフラフラしながらピッキングを行っていました。
デジタルでありながらアナログな面白みがある動きでした。


UVレジンでのアクセサリ作りです。
写真に写っているのはうちの子(男)です。
うちの子は、こういうこまかい作業が大好きです。

来年こそは出展したいとおもっております。
構想はあるが、時間と根性が足りてません。