2010/03/19

c2talkサービス終了

ソーシャルカレンダ c2talk サービス終了

http://www.c2talk.net/contents/archives/70

昨年10月からオフィシャルカレンダの更新がばったり
止まっていたので、ある程度予想はできましたが・・・。

使えるオフィシャルカレンダが充実してたし
なかなか出来の良いソフトだったので残念。

2010/03/13

Cadence SKILL言語

Cadence社のスクリプト言語"SKILL"の日本語でのWikiがありました。

●SKILL備忘録Wiki

http://wikiwiki.jp/aiou/

LISPもどきの言語をCライクにした感じの言語で
いろんな言語にちょっとづつ似てる分、
アタマの中で混ざってなかなかとっさに
文法が思い出せないことが多いです。

これは便利。

Windows XPでのC#の動作の重さを解消する方法 (2)

C#でウィンドウ最小化時のスワップアウトを阻止する方法のつづき。

● WndProcをoverrideすることによって、ウィンドウメッセージ処理をinterruptできる。

http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html

知らなかった・・・。そんなことできるんだ。

● 最小化処理をinterrupt
先のコレ

http://support.microsoft.com/kb/293215/en-us

をC#で実装すると、こう

http://d.hatena.ne.jp/babydaemons/20080507/1210150398

なる。
これでフォームを最小化するだけでスワップアウトが発生するのは
防ぐことができる。

●ただし、

これをやると、最小化時にタスクバーからも表示が消えるので
タスクトレイにアイコンを置いておいて、そこから復帰させる用途じゃないと
そのままは使えない。
まぁ、そこまでしてスワップを避けたいソフトって常駐ソフトぐらいだから
まぁいっか。

2010/03/11

Windows XPでのC#の動作の重さを解消する方法

C#で組んだアプリがどうもなーんかモッサリ動作に感じる原因が
やーっと分かりました。

● フォームを最小化した後、復帰するときにすごく重いことがある。

最小化したフォームを復帰させるとき非常に重たいことがある。
PCがフリーズした状態で徐々にゆっくりフォームが表示されていく
感じ。時々起こるこれが実際以上に体感速度をすごく遅くしてる。

● 原因はフォーム最小化時のスワップアウト

http://d.hatena.ne.jp/NyaRuRu/20051022

Windows XPはフォームを最小化するとプロセスの"working set"を
縮小する。タスクマネージャのプロセスのメモリ使用量をみてると、
フォームを最小化したときに使用量がぐっと減るのが分かる。

http://d.hatena.ne.jp/NyaRuRu/20071010/p1
http://d.hatena.ne.jp/NyaRuRu/20071027/p1

この状態で他のプロセスがメモリを消費すると、簡単にスワップアウトしてしまう。
で、さらにスワップ状態でGCが動いたりすると、とても重たい処理に発展しちゃったり
することがあるらしい。
.netのメモリ消費量の多さとこのへんの動作の重さがが重なって結果的に
とっても重くなってる感じがする。

● で、どうやって回避するか

Firefoxとかのメモリを食うアプリは最小化時のスワップアウトを回避してるらしい。
これ、

http://support.microsoft.com/kb/293215/en-us

によると、WM_SYSCOMMANDメッセージのSC_MINIMIZEコマンド
の処理中にWorking Setの圧縮が行われているそうなので、
ここをinterceptすることでスワップアウトを阻止できるそうだ。
ただ、メッセージハンドラを直接触れない(多分)C#ではこのままの方法は
とれない。

● タスクトレイを使う方法

常駐型のソフトに関してはタスクトレイに常駐させてしまう方法をとることができる。
まずはNotifyIconを使ってタスクトレイにアイコンを配置して、
フォームの方の最小化ボタンはMinimizeBoxプロパティで禁止してしまう。
で、FormClosingイベントでフォームのVisibleをFlaseにするようにする。
VisibleをFalseにした際には問題のスワップアウトは発生しないようで、
これで動作は非常に快適になった。

●で、普通に最小化したいときはどうするのか

最小化ボタンを押したときに最小化前に発生するイベントが無いのが問題。
CloseしたときのFormClosingに相当するものがあればいいんだけど。
Layoutイベントで
this.WindowState==FormWindowState.Minimized
となるときを拾えば最小化前に処理を発生させることはできそうなんだけど、
FormClosingでのe.Cancelに相当するものが無い。
すなわち、最小化前にVisibleをfalseにすることはできても、
その後で発生するMinimizeを止めることができない。

さて、どうしたものか・・・。

Newspaper economics

Newspaper economics
Googleによる「新聞の滅亡は我々のせいではない」という事を示している資料。
色々とスケールに作為的なものを感じましたが、面白い資料でした。ただ、一番面白いと思ったのは下の資料。

mobile phoneによる広告シェア争いこそが正念場ってことでしょうか。消費につながる広告をおさえないとねぇ。

2010/03/02

【ニコニコ動画】工業技術の大誤算1/2


最近ニコニコを目覚ましにしてたんですが、こいつを目覚ましにしたら600メートルの塔から落ちる夢を見て一気に目が覚めました。
いや、湖に沈む夢でなくて良かった…

動画の内容は非常に面白いです。
座礁の原因が船長の泥酔というわかりやすい理由だけではなくシステムの欠点があったとか、ダムの崩壊理由が法律にあったとかエトセトラエトセトラ。
TOYOTA叩きも単に感情のはけ口に終わらずに、きちんとフィードバックされると良いですなぁ。