2009-12-23

Tumblrに乗り換え

テーブルが使えないのが気に入らなかったのでtumblrに乗り換えたが、向こうも別にテーブルが扱えるわけではなかった。

MarkdownというなんかTextileというなんかWiki記法のしょぼくなったようなやつのしょぼくなったようなやつが使えるので、それで試してみたらこういう記法が通じた。

死ぬほど使いにくい。

First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
Content Cell  | Content Cell

Edit 2011-02-14: Tumblrが最近よく落ちるので、こちらにも並行して投稿するようにした。

Wiki記法が無いことは、ScribeFireを使い始めたことで結局関係なくなった。Google Chrome用のAJAXなブログエディタ。TinyMCE Editorを搭載してはいるが、相変わらずテーブルは扱えない。

2009-12-09

gitをgraphvizにかけて集計してみた

集計した。全体図
モジュール名
#includeされている回数
commit
73
parse-options
56
refs
53
diff
47
tag
43
revision
34
tree
34
run-command
34
blob
33
exec_cmd
28
dir
25
quote
25
tree-walk
22
cache-tree
21
string-list
19
object
18
remote
17
xdiff-interface
12
log-tree
12
pkt-line
11
color
11
utf8
11
strbuf
10
attr
10
unpack-trees
8
sigchain
8
transport
7
progress
6
list-objects
6
sideband
4
branch
4
rerere
4
sha1-lookup
4
pack-revindex
4
csum-file
4
walker
4
merge-recursive
4
archive
4
fsck
3
http
3
reflog-walk
3
userdiff
3
graph
3
decorate
3
mailmap
3
reachable
2
patch-ids
2
help
2
wt-status
2
ll-merge
2
bundle
2
bisect
2
grep
2
pack-refs
2
thread-utils
1
hash
1
levenshtein
1

2009-12-08

CRCおぼえがき

(途中から調べずにイメージで書いています。たぶんどこか誤解しています。親切な方はご指摘ください)
  • 送る側の処理
    • D(X)・X^r = G(X)・Q(X) + R(X) が基本の式
    • CRC = R(X)を二進数で表したもの
    • R(X)= (D(X) ・ X^r) ÷ G(X) の余り
    • D(X)=送信したいデータを多項式にしたもの
    • r = G(X)の最高次数
    • G(X)は生成多項式 (方式ごとに異なる。CRC-16やパリティなど)
    • 送るデータはD(X)とR(X)をビット順でくっつけたもの
      • つまり、D(X) ・ X^r + R(X)
多項式を2進数で表すことは、多項式が Σ^r_(i=0) b_i x^i という形で、係数の列 b_i が0か1だけからなるときに可能。b_iを多項式に対応する2進数のiビット目の数とする。つまり、多項式の最高次数はMSBの桁数となる。
  • 受け取る側の処理
    • 届いたデータをまるごと生成多項式G(X)で割る
      • (D(X) ・ X^r + R(X)) ÷ G(X)
    • 余りが0ならOK (誤りが無い)
      • D(X)・X^r = G(X)・Q(X) + R(X) が元の定義
      • D(X)・X^r  + R(X) = G(X)・Q(X) + 2R(X)
      • 余りは 2R(X) になるの?
    • 商は元のデータになる
      • Q(X) = D(X)?

2009-12-07

git.c

git.cからはこう。(拡張子は省略してある)

gitをgraphvizにかけてみた

GithubでGitのGitリポジトリを見つけた。
大元の人がLinusなので、当然C++は一切使っておらず、いくつかのモジュールと、小さいコマンドを沢山平たくおいた構成になっている。
依存関係を適当に集めてgraphvizにかけるとこうなった。

拡張子は省略してある。
左中央のhas_mainというのはmainという文字があったファイルをボックスで囲んである。builtinsはbuiltins-*.cというのをまとめたもの。
そのままではさっぱりわからないので、だんだん小分けして見てみようと思う。

2009-12-03

placement newでBoehm GCのgc_cleanup

Boehm GCに付属のgc_cpp.hでは、gc_cleanupという構造体が提供されている。これは継承するとGC時に自動的にデストラクタを呼んでくれるというもので、非推奨のGC_finalize_allと組み合わせて使うとリソース管理に非常に便利だ。(つまり、終了時に他ライブラリのリソースを開放させることができる)
gc_cleanupを継承するように書き換えることができればいいが、それも面倒な場合がある。
一度スマートポインタ的なものを試した。

逆に不便になった。(というか、スマートポインタを使いたくないからBoehm GCを使っている)
placement newというものを使うとコンストラクタのメモリ確保をフックできるようなので、それで試してみた。
たとえば new (gc_cleanup_alloc<std::vector<int > >()) std::vector<int>() のように使う。
いまのところ問題なく動いている。