実は既に今年度の授業が全て終了 (3学期は授業がない) して、期末テスト2日分が終わっていたりするわけだけど、期末テストの期間に入ると、既に休みに入った気分になって微妙に困る。あーむしろ英語ライティングで脅されてる (謎) のに何もやらずに試験に臨むとかアホすぎる。そういえば中間でうけそびれたやつって期末でとらないとヤバイんジャマイカ……

いろいろなことがぼーっとしてるせいで遅れてる。遅れてる。願書請求とかやってなかったとか。あぶねー。12月なのに過去もやってねー。

あー XML 名前空間とか試験にでませんか。でも XML 全般が出るなら XML Schema とか、既に古いけど健在な DTD ももっとちゃんとやっとくべきじゃないか。いや待てよ、XSLT もまだしらない要素とか、知っていても使ったことがない要素があるな。そういえば RDF のクラスのヒエラルキーとか理解できてないな。あーこれ冬休み中にやっとく鹿。って、いやだから受験科目じゃありませんから! 残念。

  1. トップ
  2. life
  3. 期末テスト

ちょっと触った感じではいい感じ。ソースがそこそこ綺麗に書ける。大規模になったときはわからないけども。全部オブジェクト、と考えていいのかな。以下 Io (プロトタイプベース) と Ruby (クラスベース) と ECMAScript (プロトタイプベース) のコード片を比べてみる。

foo := Object clone
foo test := method(x,
x
)
write(foo test("test"))
foo = Object.clone
def foo.test(x)
x
end
print(foo.test("test"))
foo = new Object;
foo.test = function (x) {
return x;
};
WScript.Echo(foo.test("test"));

ECMAScript は標準出力の方法を定めていないので、ここでは WSH の cscript から実行していることにしてみる。

パッと見た感じ殆ど同じ。Io の場合、スロットに新しく代入するときは := (=setSlot) で = (=updateSlot) は既に存在するスロットを更新する。updateSlot はチェインを辿って見つけたスロットに代入し、該当するスロットがなければ例外になる。と思う。setSlot はレシーバに新しいスロットを作る。ついでに、Io のトップレベルで使われる関数のように見えるものもメソッドで、このメソッドのレシーバは見えない Lobby というもの。全てメッセージ。素敵だ。Ruby も関数のように見えるものは self を省略しただけ。ただ、Io の場合は他の言語では制御構造に見えるものもメッセージ。if とか for とか while も Lobby のメソッド。素敵すぎ!

上のやつは違うみたいだ。Lobby の proto には Object が入ってるから実際には Object に定義されてるメソッドみたい。リファレンスにも getSlot とかは Object に書いてある。

Ruby はクラスベースだからホントは比べにくいと思うけど、とりあえず特異メソッド定義としてみる。特異メソッドは属するところがそのオブジェクト自身になる (普通のメソッドはそのオブジェクトのクラスに属してる) からちょっとプロトタイプっぽい。foo.clone で特異メソッドも引き継げるしね。

ECMAScipt はソレっぽい。ECMAScript の = は常にレシーバにスロットを作るっぽい。自動的にチェインを辿って該当するスロットに代入する方法はないぽい?

関係ないけど、Io のインタプリタを ck から実行すると、実行が終わったあとに全ての出力がクリアされちゃう。ついでに起動するときになんか表示してる半透明ウィンドウが全部フラッシュする。

放り込んだらそのまま動くとか書いてあったので、Linux Binaries をダウンロードして XREA にうぷろーど&実行権限付与。んで適当に foo.io とか作って実行権限とかやってみたけど必要なライブラリが足りないといわれて動かなかった。無念。

ムカツクから鯖上で build できんのかとやってみたけどリソース制限にひっかかって無理だった。もうめんどい。適当にローカルで弄ってよう。

って。ああああああ。新しい鯖だと動く。 s101 で ioServer を動かしてみたらできた。何も苦労せずにできた。泣けるよ。ひどく泣けるよ。

正規表現が標準で使えないのは痛すぎる。やばすぎる。

  1. トップ
  2. prog
  3. Programming Language Io

先日駅で延長コードだけひっかけられて持っていかれたので、仕方なく新しいのを買おうと思った。近くで売ってそうなところを見てみた。唯一あったとこ (ツタヤ) で 760 円だった。ぼったくりだろコレ。オス・メスプラグがそれぞれ 100円 & コード 1m で 760 円もいくわけない……ついでに今まで使っていたやつは前に買ったヘッドフォン (3k ぐらい) についてきたやつ。コードが 760 円もしたら笑える。

  1. トップ
  2. life
  3. 延長コード

C-RET 前の行でしたあとは、前の行の空白を保持してインデントする。

C-RET (C-j) で前の行のインデントを保持して改行はできるんだけど、タブとスペースが混じっている場合スペースがタブに変わっちゃうのが微妙に困る。 (自分だけで使うなら全く困らないけど、タブ幅が違う環境に持っていくと困る)

; 前の行の空白状態を保持するように。
(defun indent-relative ()
(interactive "*")
(delete-horizontal-spaces)
(insert (save-excursion
(goto-bol)
(skip-chars-backward " \t\n")
(goto-bol)
(looking-at "^[ \t]*")
(buffer-substring (match-beginning 0) (match-end 0)))))

cmds.l に定義されている indent-relative() を .xyzzy か siteinit.l で再定義。弊害あるかもしれない。

  1. トップ
  2. soft
  3. xyzzy で前の行のインデントを保持して改行する。

改変版のほうを使っているんだけど、indent-current-buffer とかでインデントしたとき異様に遅い (カーソルが動くのが見える) ……こういうものなのかな。部分的に一括してインデントしたいときは Mark & indent-region してみてる。むー。

てか .lc 消して試してみたら同じ速度だなぁ……バイトコンパイル効いてない? 再ダンプしてなかった。 .lc 消したらむしろありえない。

  1. トップ
  2. soft
  3. xyzzy ruby-mode

DNA をデジタル化して CD か何かに記録するサービスとかやったら面白そうなのに。どっかの研究所で。

ある意味究極の個人情報だから色々めんどくさそ。

むしろ、何かこう、適当にサンプル与えるとどんどんデジタル化する機械って作れないのかな。

  1. トップ
  2. web
  3. DNA checksum
  1. トップ
  2. life
  3. DNA checksum

ここ最近気になっていたのでちゃんと解消しておこう。基礎が出来てなきゃダメダメ。

まず重要なのは、属性にはデフォルトネームスペースが適用されないのにされると勘違いしていたこと。属性と要素では属する partition が違う。接頭辞がない属性がよくある (たとえば XHTML とか) せいで完全に勘違い。

同じように見える属性でも厳密には違う場合が存在する。見た目的には接頭辞がついている属性と、付いていない属性では差がある。

<f:foo xmlns:f="http://example.com/foo">
<f:far attr="ex"/>
<b:baz xmlns:b="http://example.com/baz">
<b:bar f:attr="ex"/>
</b:baz>
</f:foo>

この例で attr="ex"f:attr="ex" は属している名前空間は同じにも関わらず展開すると異なる。これも partition の違い。

partition には三つあって、一つは全ての要素が属するとこ。あとは属性の属する partition で、一つはグローバルな属性が属する (上の例では f:attr) とこ、もう一つは要素ごとの別々な属性が属する (上の例で attr) とこ。かなーりややこしい!

partition の種類は三つ。一つは要素が属する partition で、これは特に問題にならないでそのまんま。属性は残りの二つのどちらかに属するんだけどこれが面倒くさい。違いは名前空間にグローバルかローカルか。接頭辞をつける属性は名前空間にグローバル。接頭辞をつけない属性は要素名を経由する (ローカル)。たぶんこれは展開された名前とかを見るとわかりやすいと思う。

<f:far attr="ex"/> の attr="ex"
{http://example.com/foo}far@attr
f:far に属している attr という感じ。 far を経由して認識 (っていうのかな) される。
<b:bar f:attr="ex"/> の f:attr="ex"
{http://example.com/foo}@attr
b:bar は関係なく、名前空間 URI がそのまま属性の名前にくっつく

接頭辞をそのまま名前空間の URI に置き換える (ようは展開することなんだけど) だけでだいぶイメージしやすいと思う。

一般的な XML では (XHTML とかじゃなくて) 普通接頭辞をつけることになりそう? この辺わかってない。むしろ要素ごとに別々の意味をもつ要素を定義できるかっつうとできないような。

バカすぎるスペルミスを修正。

気になっていたことを一つ試したのでメモ。<f:foo f:attr="a1" attr="a2"/> としたときエラーになるか、ということと、実際 XPath からはどちらにもアクセスできるのかということ。結果的にはエラーにならないし、XPath からはどちらにもアクセスできる。f:foo/@f:attr = 'a1', f:foo/@attr = 'a2'

XML Schema についてで なぜ属性宣言を避けるべきか ってのがあった。これは XML 名前空間の partition を理解していればひっかかりにくい (ひっかかっても直ぐに気付ける) とこだなぁ。

  1. トップ
  2. web
  3. XML の属性の名前空間

404 : :first-letter と動的擬似クラス

そんなわけでそういう修正をしてみた。

#content .section h2:first-letter {
color: #09f;
}
#content .section h2 a:hover:after {
content: "";
line-height: 0;
}

空文字でも効果があるみたい。ようは content の指定でスタイルの指定しなおし (?) が働けばいいらしい。

line-height: 0 は何か知らないけど高さが変わって、後続するやつが全部ピコピコするのをなくすため。

関係ないけど擬似ずっと模擬って読んでいた。アフォすぎ!

  1. トップ
  2. web
  3. :first-letter & :hover on Gecko
  1. トップ
  2. soft
  3. :first-letter & :hover on Gecko