Antoine.st | 2011-03 |
2011-03-28Tepco usage
東京電力電力供給状況 API というのがあったので、さくっと 作ってみました。結構簡単に作れるもんなんですね。LimeChat 用の スクリプト を参考にさせてもらってます。 LimeChat スクリプトの方は、そのままじゃ動かなかった ( 要認証のプロクシがいるため ) ので、XMLHttpRequest の代わりに ServerXMLHTTPRequest か何かを使うように修正と。結構さくさく動いていい感じです。
2011-03-12Earthquake
東京でも震度 5 強。すごい地震でした。震源地に近い東北の方ではさらに。大丈夫でしょうか、心配です...。 JR 東日本が運行を取りやめるなど、すっかり交通マヒ状態でした。晴海から日比谷までバスで 4 時間。東京メトロはだいぶ回復してて、ありがたいことに終夜運転をやってくれるんだとか。なんとか帰り着きましたんですが、最後にマンションのエレベータが止まっているというオチが。10 階以上を階段で登るとさすがに足がプルプルします...。
2011-03-10Detect Platform Target
.NET のアセンブリが何をターゲットにビルドされているか? ということは、PE の IMAGE_FILE_HEADER 構造体の Machine の値と CLR Header のフラグから判定できます。問題は AnyCPU で、これは、IMAGE_FILE_HEADER.Machine が x86 ( 0x014c ) で、かつ、CLR Header の flags に COMIMAGE_FLAGS_32BITREQUIRED ( 0x00000002 ) が設定されていない場合になります。 ついでに言うと、この flags、つねに COMIMAGE_FLAGS_ILONLY ( 0x00000001 ) が設定されている、とかってのは、この辺の PDF に書いてありました ( 25.3.3.1 Runtime flags )。というわけなんですが、ちゃんとメソッドなりが用意してあるのが .NET Framework のいいところ。 ↓のような感じで取得できます。Assembly.ReflectionOnlyLoadFrom() メソッドでなら、x86 環境で IA64 やら x64 のアセンブリも読み込めます。いい感じ。
2011-03-06Version resource
バージョンリソースを書き換えて、ファイルのプロパティで表示される『著作権』部分を変更する、というサンプル。要 Unicode ビルド。おそらく、バージョンリソースだのなんだのが Unicode なので、W 版が必要なんだろう、ってことなんですが、詳しくは調べてません。最近、わざわざマルチバイトでビルドすることもないですしね。 ここでは『LegalCopyright』を指定してますが、他の文字列を指定することで、別の部分を書き換えることも可能です。どんなのがあるのかは、ここ らへんで確認してください。 struct LANGANDCODEPAGE { WORD wLanguage; WORD wCodePage; } *pLangCodePage; LPCTSTR pFile = TEXT("C:\\sample.exe"); DWORD dwHandle; DWORD dwSize; LPTSTR pTarget; UINT uLen; LPBYTE pBlock; HANDLE hResource; TCHAR subBlock[255]; dwSize = ::GetFileVersionInfoSize(pFile, &dwHandle); pBlock = new BYTE[dwSize]; ::GetFileVersionInfo(pFile, 0, dwSize, pBlock); ::VerQueryValue(pBlock, _T("\\VarFileInfo\\Translation"), (LPVOID *)&pLangCodePage, &uLen); ::wsprintf(subBlock, _T("\\StringFileInfo\\%04x%04x\\LegalCopyright"), pLangCodePage->wLanguage, pLangCodePage->wCodePage); ::VerQueryValue(pBlock, subBlock, (LPVOID *)&pTarget, &uLen); ::ZeroMemory(pTarget, _tcslen(pTarget) * sizeof(TCHAR)); _tcscpy(pTarget, _T("Copyleft :-)")); hResource = ::BeginUpdateResource(pFile, FALSE); ::UpdateResource(hResource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), pLangCodePage->wLanguage, pBlock, dwSize) ; ::EndUpdateResource(hResource, FALSE); delete[] pBlock;
2011-03-02Technical Briefing
なぜか連続で 『テクニカルブリーフィング』 と称するものに行く機会がありました。内容の方は... 微妙な感じで。それよりなにより、わざわざそういう場でやる必要があることなの? って点がかなーり疑問な感じ。おそらく、テキストなり PDF なり、何らかの形でまとめれば 15 分程度で読める内容を、むりくり 1 時間 〜 2 時間のセッションにしてる、としか言えない程度のものでございまして。 わたしも何度かセッションをやる機会がありましたが、『単に読むだけ』 に終わらないように、自分なりに考えて ( おもにデモで ) 楽しめるような内容にしようと心がけてました。もちろん、いろいろな制約があって、『自分がやりたいこと』 ではなくて、『やらなくちゃいけないことをやらされてる』 ってことなんでしょうけどね。 ますます引きこもり度が高くなりそうな今日この頃でした。
|