2011/12/19

Bazaar 導入メモ

Bazaar 2.4.2 を Windows7 にインストールしてみた。

1.6ぐらいの頃に一度WindowsXPに入れてみて、遅くて使えねー、という
評価をしたが、今回格段に速くなっとる。

さて評価。これまで Subversion を使ってきたので、主にそこと違う点。
よくわかってないので間違ってるかもね。

NULL commit 可能。
これだけでも移行する価値がある。
リポジトリの見た目はディレクトリ。
svn はデータベース(的:FSFS)なリポジトリだが bzr は普通のディレクトリに見える。
svn でリポジトリを分けてプロジェクトを複数管理している場合には、あるファイルがどのプロジェクトにあるかを探すために、svn ls svn://host/{$repo} をまわして調べ上げないといけないが、bzr では find で探せる。
Windowsホストの場合、コマンドラインを使わなければ、svn はリポジトリブラウザでURL切り替えて検索、に対して bzr はエクスプローラで検索一発なので、bzr 優位。
→どうもそういうことじゃなくてリポジトリとツリーを同一の場所に置ける、ということみたい。
ローカルリポジトリ上で直接作業可能。
ローカルリポジトリを作業コピーとみなして、その場でコミットとか可能。
チェックアウトすれば svn ぽい。
ブランチ/マージは格段に賢い。
TortoiseBzr のブランチマージ履歴が楽しい。

あと調べないといけないこと:

タグ。
svn ではタグの使い所が難しい、ていうかタグの意味わかってないだろう、という機構なので、ほとんど使ってなかった。bzr ではどうなのか。
リポジトリのマージ。
リポジトリの分割。
アクセス権限関係。
これは svn が出来過ぎているっぽいので妥協点を見つけること。
ネットワーク越しの動作。

2011/11/24

Task と OperationCanceledException

System.Threading.Task.Task クラス。
Task の開始後に CancellationToken を Cancel 状態にした場合は、自分で ThrowIfCancellationRequested() を呼び出さない限り、OperationCanceledException は発生しない。
しかし、Task の開始前に Cancel 状態にした場合は、Task.Wait() で OperationCanceledException が発生する。

Task 開始前に Cancel 状態にならないようにする
または
Wait() を try-catch して、開始前のキャンセルを処理する
のどちらか。

2011/11/15

C# AllocHGlobal と AllocCoTaskMem

この両者、アロケートするだけではパフォーマンス上の差は観測出来なかった。

http://msdn.microsoft.com/ja-jp/library/s69bkh17(v=vs.80).aspx


GlobalAlloc を使用して、プロセスのアンマネージ メモリからメモリを割り当てます。
...
Marshal クラスにはメモリ割り当て API メソッドが 2 つ用意されていますが、AllocHGlobal はその 1 つです。(なお、もう 1 つはMarshal.AllocCoTaskMem です。このメソッドは Kernel32.dll の LocalAlloc Win32 API を公開します。LocalAlloc の詳細については、MSDN ライブラリを参照してください。

どっちやねん、と思ったら、

http://msdn.microsoft.com/ja-jp/library/s69bkh17(v=VS.100).aspx

指定したバイト数を使用して、プロセスのアンマネージ メモリからメモリを割り当てます。

修正されてた。

2011/11/12

Windows7 で Win-U-U が使えなくなったとお嘆きの方へ。

Windows7。
パスの通ったディレクトリにこれだけは置いとく。

Win-U-U-Enter で電源が切れる。


uu.cmd
shutdown -s -t 0

uh.cmd
shutdown -h -t 0

ur.cmd
shutdown -r -t 0
us.cmd
Rundll32.exe Powrprof.dll,SetSuspendState Sleep

ur.cmd とかプログラムメニュー内の URL ファイルに阻害されて、一番上に候補として
上がらないことがある。どうにかならんかな。

2011/11/04

諸君、私はNetBSDが好きだ

generated by http://wids.net/lab/HELLSING/

一部事実に基づく創作であり、実際の NetBSD オペレーティングシステムとはほんの少ししか関係ありません。


諸君、私はNetBSDが好きだ

諸君、私はNetBSDが好きだ

諸君、私はNetBSDが大好きだ



カーネルが好きだ

ユーザランドが好きだ

ブートローダが好きだ

MI-MD構造が好きだ

クロスビルド環境が好きだ



x68k

zaurus

luna68k

amiga

alpha,acorn26,acorn32,cats,evbarm,hpcarm,lyonix,netwinder,shark,hp700,i386,xen,sun2,atari,cesfic,hp300,mac68k,mvme68k,news68k,next68k,sun3,emips,evbmips,ews4800mips,mipsco,newsmips,sbmips,sgimips,algor,arc,cobalt,hpcmips,pmax,amigappc,bebox,evbppc,ibmnws,macppc,mvmeppc,ofppc,prep,rs6000,sandpoint,evbsh3,mmeye,dreamcast,landisk,hpcsh,sparc,sparc64,vax,amd64



この地上に存在するありとあらゆるNetBSDが大好きだ



移植性の高い設計が好きだ

他のOSのコードにNetBSD由来のRCSIDを見つけた時など心がおどる



全くドキュメントに記載されていない#define 定数が好きだ

三週間かかって1にするだけで動作することが分かった時など胸がすくような気持ちだった



i386のブートローダが1文字出力するたびにリアルモードとプロテクトモードを行き来することが好きだ

nop 6個だったところを256個にしたらカーネルが起動した時など感動すらおぼえる



m68k FPEなどもうたまらない

誰一人呼び出したことのなかったコードを正しく実装するのは最高だ



GPLで書かれたのを

BSDライセンスでコードを見ないで再実装した時など絶頂すら覚える



動作するコードが好きだ

謎コミットで動作しないアーキテクチャが増えることはとてもとても悲しいものだ



二条項BSDライセンスが好きだ

山のようなCopyright表示が巻末についていないのは屈辱の極みだ



諸君 私はNetBSDを カーネルが動けば完結する様なNetBSDを望んでいる

諸君 私に付き従うNetBSD好きの諸君 君たちは一体何を望んでいる?

更なるNetBSDを望むか 

糞の様なNetBSDを望むか?

骨董品のようなマシンでもIPv6 Readyだぜヒャッハー!のようなNetBSDを望むか?





NetBSD!! NetBSD!! NetBSD!!





よろしい ならばNetBSD



だが、まともなデスクトップが無いの減り続けるdeveloperに耐え続けて来た我々には

ただのNetBSDではもはや足りない!!

NetBSDを!! 一心不乱の大NetBSDを!!



我々はわずかに小数

NetBSDが移植されていないアーキテクチャに比べれば物の数ではない

だが諸君は一騎当千のカーネルオタクだと私は信じている

ならば我らは諸君と私で総兵力100万と1人の移植大好き集団となる

我らを忘却の彼方へと追いやり、仕様を公開しないメーカーを叩きのめそう

髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう



連中に真のリバースエンジニアリングを思い出させてやる

連中に割り込みアクノリッジサイクルを思い出させてやる

NetBSDには奴らの哲学では思いもよらない締め切りドリブン開発がある事を思い出させてやる

1000人のカーネルオタクの集団で 世界を``Of course it runs NetBSD''で埋め尽くしてやる



目標 iPhone



どこでもNetBSD作戦 状況を開始せよ



征くぞ 諸君

2011/09/01

C# ポインタを一行でポストインクリメントすると遅くなる

2011/02/06 追記: 実行環境下では JIT 最適化で、関係なくなるようだ。

C# では、*p++ は使わないほうがいい。
*p; p++; に分解すること。


Visual Studio 2010 version 10.0.30319.1
.Net Framework 4.0.30319
の話。/unsafe な release ビルド(最適化ON)。

volatile int r;
int[] a;

...

 unsafe {
  fixed (int* a0 = a) {
   int* p = a0;
   ...
   r = *p++;
   ...



の逆アセンブルウィンドウでの結果。

r = *p++;
0000008f mov  eax,dword ptr [ebp-8]
00000092 mov  dword ptr [ebp-10h],eax
00000095 add  dword ptr [ebp-8],4
00000099 mov  eax,dword ptr [ebp-10h]
0000009c mov  eax,dword ptr [eax]
0000009e mov  dword ptr ds:[007716C0h],eax

[ebp-10h]は一時変数。かなり間抜けだ。

r = *p++;



r = *p;
 p++;


に分けると、こうなる。

r = *p;
0000008f mov  eax,dword ptr [ebp-8] 
00000092 mov  eax,dword ptr [eax] 
00000094 mov  dword ptr ds:[005B16C0h],eax 
  p++;
00000099 add  dword ptr [ebp-8],4 

2011/08/26

C# IDeque

IDeque が無いのは納得いかない。
LinkedList<T> があるから実装は簡単だけど、実装がどうこうからインタフェースを切り離したい。
で、こういういかにも後からライブラリデフォルトができそうなインタフェースを手前味噌で決めると命名が大変。

Microsoft.VisualC.StlClr.IDeque<T> はちょっと違うしなぁ。