«前の日記(2006年09月18日) 最新 次の日記(2006年09月20日)» 編集

Matzにっき


2006年09月19日 [長年日記]

_ fontconfig

先日来の問題は要するに今までよりも積極的に埋め込みビットマップフォントを使うようになった ということらしい。で、ビットマップフォントとアウトラインフォントでウェイトが ずいぶん違うのが気持ち悪い(ボールド好き)。

などとぐちぐち言っていたが、どのXMLファイルを設定したらよいのか途方に暮れていたら、 武藤さんのところに ヒント(というか解答そのもの)が。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <match target="font" >
  <edit mode="assign" name="embeddedbitmap">
   <bool>false</bool>
  </edit>
 </match>
</fontconfig>

こいつを.fonts.confに入れて元通り(ちょっと違うような気もするけど)。

_ StGIT

先日断念したQuiltをGITをバックエンドとして実装したもの。 これはいい。Quiltではできなかった以下のことができる

  • うっかりパッチセットを作り忘れてても後から対応できる
  • upstreamとのマージを明示的に行うコマンドがある
  • マージした結果、空になったパッチセットを自動で削除できる
  • 矛盾解消を行うコマンドを設定可能

これを使えば、ネットにつながらない時でも自由にハックして、 その結果を(パッチセットごとに名前を付けて)保存できる。 また、ネットにつながった時に、upstreamとマージして、 パッチセットごとにコミットできる。

StGITの導入方法は以下の通り。

  • .gitを導入する。私は以前にtailorで インポートしていた.gitを使ったけど、gitを直接使ってimportしても良いだろう
  • stg initコマンドを実行

ローカルで編集する場合には(個別の修正ごとに)

  • stg newでパッチセットを作る
  • 編集が終ったらstg refreshでチェックイン

upstreamからマージするためには

  • stg pop -aで全パッチセットを一回取り除く
  • stg newでマージ用パッチセットを作る
  • cvs updateで取り込んでくる
  • stg refresh
  • stg commit

upstreamにコミットするためには

  • stg pushでパッチを当てる
  • コンフリクトがあれば(Rubyの場合、ChangeLogが絶対コンフリクトする)、編集
  • cvs ci -m ...
  • stg refresh
  • stg commit

で、これだとちょっと手順が繁雑なので以下の三つのシェルスクリプトを作った。

stgnew
パッチセットの名前を考えるのが面倒な時に時刻からパッチセット名を作りstg newするスクリプト
stgpull
upstreamからマージする一連の手続きを一度に行うスクリプト
stgpush
手元の変更をupstreamにコミットするスクリプト。ChangeLogのdiffからcvs logを抽出する機能付き。

各スクリプトの実装は宿題とする...なんてね。反響が大きければ公開しよう。 それぞれ小さなスクリプト(stgnew4行、stgpull13行、stgpush28行)だけどね。

_ [Ruby] Symbol as String (2)

で、StGITのおかげでRubyをハックしたい気持ちが増大した。

で、今回はStringのサブクラスとなったSymbolについて。 いろいろな選択肢があり得たのだが、さんざん考えた結果、

  • SymbolはStringのサブクラス
  • Hash的にはSymbolとStringは同一視される(互換性については申し訳ない)
  • Symbol#hashおよびSymbol#eql?はSymbolに対して高速に実行されるように最適化
  • Symbolに対する操作の結果はString。これはSmalltalkでもそうであった。

とした。 全体にSqueakの動作に近づいたことになるのかなあ。


«前の日記(2006年09月18日) 最新 次の日記(2006年09月20日)» 編集