先日訂正したけど、pythonのクラス機構がModula-3から来ているということで、いくつか調べてみた。
1,2つ目のリンクではクラスにメソッドを定義する際には、selfを使う事が書かれている。でも3つ目のリンクではそもそもクラスの話自体が出てこないのはなんでなんだろう...。
で、見た感じだとpythonのようなselfの定義の仕方というより、C++でそのメソッドがどのクラスに屬するのかを定義するのと同じ使い方だった。こうなってくるとますますわからないのはpythonでそもそもクラスのブロック内でメソッドを宣言するのに第一引数としてselfを指定しないといけないのか、わからなくなってきた。
以前見付けた、Python のクラスシステムのように後付けクラス機構で、実装上の制限だからということなんだろうか。
そうなると、PythonチュートリアルでC++ と Modula-3 で見られるクラスメカニズムを混合したものと書かれているけど、全然そうは思えない...。C++やModula-3ではクラスブロックの外でメソッドを定義しているけど(だからselfキーワードが必要なのは理解できる)、pythonはクラスブロックの中でメソッドを宣言しているにもかかわらずselfキーワードを必要としている。ちなみに、selfを抜いてメソッドを定義すると、定義はできるけど使おうとするとエラーを起こす。
pythonのクラス機構は意図してModula-3からとってきたのか、それともそういう形になってしまったのかがわからない。selfキーワード自体はもちろん必要なんだけど、第一引数にわざわざselfなんて書かせるのは格好悪いと思うんだよなぁ。
しかしModula-3はのきなみリンクが切れまくってて探しにくいのなんのって。国内にはModula-3の文法を説明したページなんて全然無いし。
pythonのクラスの概念がModula-3から受け継いだモノで、SmallTalkとは異なる概念であるので、pythonがどういう風に影響を受けているのかとても興味はあるんだけども、突っ込みすぎると泥沼っぽいんでどのくらいまで突っ込もうかなぁ。
Visualizing Data はほんとはキャンセルしようと思っていたけど、間に合わなかった罠orz。とはいえ、グラフとかちょうど役に立ちそうな話があるのでまぁよかったかな。サンプルコードはぱらぱらと見る限りJavaが多いかな。
X Power Tools、今昔の X の仕組みの解説が欲しくて購入。知らないことが多い。
しかしペーパーバックって装丁がチープだなぁ、カバーもついてなきゃ紙も安い。
かんなぎ、話が佳境に入ったーのかーと思ったところで続刊orz、これこのまま話が続かないでちゃんとまとまってくれればアニメの最終回と漫画の最終回が同じ頃とかになるかなぁ。
マルチモニタ環境で正しいはずの設定をすると、XInput経由でポインタ座標の取得をしているgtk+のGtkInput関係でポインタ位置がズレる問題。0.7.7-x以降では、0.7.6-xでの設定方法でうまくいかなくなっていたんだけども、xorg.confの設定の書き方を変えれば回避できた。
このblogで、InputSection節では、セカンドモニタの画面サイズを0x0に指定していた。ただ、0x0にするだけだと、ポインタはずれなくなるけど、今度はタブレットの領域よりも操作できる範囲が小さくなってしまったので、7.6-xの時と同様に、TopとBottomの値を指定することで回避できた。結果的に、stylusのInputSectionは以下の通り。
Section "InputDevice" Driver "wacom" Identifier "stylus" Option "Type" "stylus" Option "Device" "/dev/input/event4" Option "USB" "on" Option "Tilt" "on" Option "Mode" "Absolute" Option "Threshold" "10" Option "Twinview" "horizontal" Option "ScreenNo" "0" Option "BaudRate" "38400" Option "KeepShape" "on" Option "TopX" "0" Option "TopY" "0" Option "BottomX" "50800" Option "BottomY" "45720" Option "PressCurve" "60,10,40,90" Option "TVResolution" "1600x1200,0x0" Option "Vendor" "WACOM" EndSection
あー、やっぱりオプションをパースする処理辺りを勘違いしてたか...orz。まぁ、回避方法はわかったので、当面これで回避。