めずらしく開発ネタですよ。
System.Addin、
.NET Frameworkに用意されている、アプリケーションにアドインとかプラグイン機構を作りこむためのライブラリ。
めずらしく開発ネタですよ。
System.Addin、
.NET Frameworkに用意されている、アプリケーションにアドインとかプラグイン機構を作りこむためのライブラリ。
System.Net.Sockets.Socketクラスには、ReceiveTimeoutというプロパティが存在する。
Receive開始から指定時間受信データが無いと例外を吐いてくれるらしい。
※この例外が必ずしも出るとは限らないみたいなのと他のと同じSocketExceptionで、困るのはまた別の話。
で、Socket作成して、プロパティ設定して・・・でOKだと思うのが普通。
しかし、このプロパティ、どうやら一度でもタイムアウトを発生してしまうと、0値扱いになるらしく、受信が即終了してしまうことになる。
つまり、タイムアウトをやりたければ、受信前には必ず設定しなきゃならんってことらしい。
多分送信も同じ。
であれば、メソッド呼び出しにタイムアウト値引数を取れるようにしておいて欲しいなって思う。
ってことで、仕事なんですが。
やっと開発案件なのですが。
.NET なのですが。
複数プロセスで連携とかやる羽目に陥っちゃうわけですよ。
ぶっちゃけ、なんでか分からんのですけどね。
マルチスレッドでえぇやん。ってのは本音。
で、プロセス間連携に、WCFを使うことを思い立つわけ。
主に名前付きパイプで実装してみるところまではできるんだけど、落とし穴がでかい。
ま、俺もよく知ってるわけじゃないから、認識を誤ってることがある可能性は否定できないのだが・・・
久しぶりに書く。
たとえばだ。
上書きインストールしたいけれど、実行ファイルがロックされている場合、次回起動時にファイル置換を予約して、再起動を促したりする。
でも、.NETなら、ShadowCopyFiles = "true" した AppDomainSetup を指定して作成した AppDomain を使用すれば、そのAppDomain 内では アセンブリのシャドウコピーが働いて、実行ファイルとかのロックが行われないようになる。
仮に実行ファイルを削除しても、動き続けるプロセスってのが実現できたりする。
※悪用できそうな気がしますが、そういう目的ではありません。
でも、ここであることに気づく。
ASP.NETの場合は、IISとかがAppDomainを用意してくれるからできている。
単体実行ファイルの場合はどうすんの?
さて。
次回があれば続く
漢らしく、環境変数だけでやってやれ。
SET YY=%date:~0,4%
SET MM=%date:~5,2%
SET DD=%date:~8,2%
@REM ゼロを補正
IF "0"=="%MM:~0,1%" SET MM=%MM:~1,1%
IF "0"=="%DD:~0,1%" SET DD=%DD:~1,1%
@REM 曜日計算(ツェラーの公式より)
SET /A PARAM1 = %DD%
SET /A PARAM2 = 26 * ( %MM% + 1 ) / 10
SET /A PARAM3 = %YY%
SET /A PARAM4 = %YY% / 4
SET /A PARAM5 = %YY% / 100
SET /A PARAM5 = 5 + %PARAMC% + %PARAM4%
SET /A WW = ( %PARAM1% + %PARAM2% + %PARAM3% + 2 * %PARAM4% + 5 * %PARAM5% ) %% 7 + 1
ECHO %WW%
@REM Week s m t w t f s
@REM %WW% 1 2 3 4 5 6 7
これで環境変数WWに曜日を表す数値を取得できる。多分。
とある合同勉強会で、Lチカを実施、なんとか点滅までできました。
#位置バレしたくないので、伏せておきます。申し訳ない。
.NET Micro Frameworkってのがあるのを知ってはいたけど見たことはなかった件。
先月、これも別の某所で見る機会があり、興味が湧きまして。
FEZ Cerb40とかいうモジュールを購入。
#これが先々週。
で、とりあえず、動かしてみるべ!ってことで、先駆者のお知恵を拝借しつつ、実施。
まず、これ、モジュールに足を生やさないといけない>半田付けです。
ついでに、水晶振動子をつけるパターンもあるので、手持ちのものを付ける。
あとは、3.3Vが必要だという点。
秋月の3.3V 3端子レギュレータキットがいくつか残っているので、それを使って外部モジュールとして用意。
で、VisualStudioの準備。
一応、先駆者様サイトの手順でOKなんだけど、一つ注意。
ファーム書き換え時に使用する実行ファイルは、VC++2005のランタイムを必要とするので、インストールが必要でござる。
※「アプリケーションを正しく起動できませんでした (0xc0150002)。」とか言われる。
あとは、Lチカプログラムをコピペでうご・・・かない。
ってか、GHI.OSHW.Hardware.FEZCerberus.Pinが無い。
最新バージョンでは、GHI.Hardware.FEZCerb.Pinになってました。
とりあえず、動きますた。
作るのは、GadgeteerプロジェクトでもOKです。
#Gadgeteer.Timerも使えるので、イベントドリブン(っぽい)プログラムが書けます。
当然、デバッグ時に、ブレークポイントも使えます。
まずは第一歩完了です。
しました。
円高とか円安とかって価格に影響しないのね。
ソフトウェア一本分の値段は各国で決まってるわけで、そうなれば、体系変更とか発生しない限りは同じで納得。
収録内容を見れば、安いものだけど、個人の手には余るのよね~Ultimate。
使い倒せるようにいろいろやれたらいいんだけど、時間ねぇってのが正直なところ。
Windows 8も出ることだし、MSDNのメディア送付を申し込んだ。
DVDとはいえ、多分、多量に来ることが予想できるし、置き場所にも困るだろうけど、まぁ、手元にあればいろいろ便利かなぁと。
今のライセンスはあと半年くらいなので、送付回数も最大6回程度だろう。
確か、MSDNのメディアってクロネコだったから不在がちだしメンバーズ登録しとくかな・・・
なんか、MSDNの特典にメトロアプリストアのなんかが追加されたらしい。
登録料がタダになるのかな?
1年間分という中途半端ながら、タダなら使ってみようかなと思う。
Azureと組み合わせたらおもろいだろうな~
デバッグ情報をprintfで書き出そうとしてもバッファが喰っちゃって、挙句の果てにどこかで例外が出て肝心の出力ができてないなんて場合がある。
printfが少なければ、printf呼出し後にfflushしてやればいいんだけど、多いと面倒。
そんなとき、
#define printf(...) ( fprintf(stdout, __VA_ARGS__), fflush(stdout) )
をヘッダなんかに書いておけば、何とかなったりする。
printfの戻り値をチェックしている場合には簡単にやっちゃダメなのと、__VA_ARGS__マクロに対応しているコンパイラだけってのには注意。