大学の編入学申請書類を出そうと動いたら、実はもう遅過ぎた。
そこで、担任に言われた。「お前なんか大学受ける資格ねぇよ」と。
この台詞を引き出した瞬間、自分でやってしまった事の数々が脳裏を過った。提出しろと言われてた(これ以外の)書類を未だに出してなかったり、保護者懇談について担任に親が来る当日になって「今日来ます」と言ってしまったり。
どうしてだろう、と考えてみるが、今の精神状態で答えが出るとは思えない。だが保留しても、どうにもならないのは明白だ。
私は……ようやく自覚したのかもしれない。自分すら信用できないことに。
1年ぐらい、ゆっくり考える時間が欲しかった。今になって、留年した奴のことを羨ましく思う。
そう思うことが、もうダメなのか。
といってもメインじゃない。新しい機能(特に CSS 関連)の実験材料として。
今のところは安定している。SVG も表示させたりしてみた。きちんと表示はしてくれるのだが、如何せん発展途上の機能だからか、激重。まともにスクロールもできない。
他の部分に関しては、かなりパフォーマンスが良くなっている。特筆すべきはやはりレンダリングだろう。すっぴんの Firefox 1.0.4(rv:1.7.8)と比べれば差は歴然としている。あくまで体感速度なのだが、ざっと二割ぐらいは高速なのではないだろうか。実にキビキビとしている。Firefox に関しては、Phoenix 時代(0.5)以来のユーザなのだが、これは 0.6.1 から 0.7 になった時に感じた体感速度の違いとよく似ている。今回の方が変化は小さいが。
もずはっく日記にもあった、input 系ボックスにおける日本語表示の不備(アンダースコアが見えない)問題も改善されている。
オプションダイアログはすっきりとした印象。縦も良かったが、横も悪くない。
まともに実装された CSS のカウンタ機能も使ってみた。このページのような日記系には向かないが、何かの論文とかまとまった静的文書には都合のよいプロパティだといえる。TeX から XHTML へのコンバート後に適用する時に用いると便利。
その他機能も随時利用してみる予定。
ふと CSS を使って動的に生成される(例えばマウスホバーでポップアップとして出現する)脚注(footnote)を実現するにはどうすればよいか、実装しつつ考えた。
まず、前提条件。
IE を除外したのは、どうしても JavaScript を使わなければならない状況に陥る可能性が高かったから。あと、CSS2 の機能をフル活用するという目論見もあった。
早速、実装開始。まずは、どういうマークアップ構造にするかを決定する必要がある。ふと頭に浮かんだのは ruby 要素。よく考えてみれば、かなりおあつらえ向きなのがわかる。ruby 要素をサポートしてない UA では、その子孫要素は素のテキストとしてレンダリングされる。これならアクセシビリティも良い。更に、rp という括弧などをテキストノードとする、レンダリングされない要素もある。つまり、レンダリングされてしまう = ruby 関連要素をサポートしていない状況ではきちんと役目を果たすのだ。
構造は ruby 要素のそれと同じようにすると決めた。次は、そのマークアップを実際にはどうするかだ。
これも簡単だった。rp 要素と rb 要素の意味を調べたところ、p は parentheses、つまり丸括弧、b は body の略であった。そこで、class を parentheses と body にした span 要素を用いて、以下のような構造をでっち上げた。
<span class="footnote"> <span class="parentheses">(</span> <span class="body">脚注テキスト</span> <span class="parentheses">)</span> </span>
あとは、スタイルを定義しなければならない。以下、その実装。
.footnote { font-size : 80%; } .footnote:before { content : "*"; color : #c30; vertical-align : 50%; cursor : pointer; } .footnote > .parentheses, .footnote > .p /* 省略表現 */ { display : none; } .footnote > .body { display : none; cursor : text; } .footnote:hover > .body, .footnote:focus > .body { display : block; background-color : #eee; border-style : solid; border-width : 1px; position : absolute; width : auto; height : auto; z-index : 5; }
で、この文にあると思われるアスタリスクマークがその実例(IE では丸括弧つきで表示される)。
結構うまくいっているように見えるが、この方法にはデメリットもある。当然ながら、マウスポインタの下に表示させることができないのだ。よって、親要素 border-box の右端付近にあるアスタリスクをポイントしても、ポップアップが出るのは親要素 border-box の左端になる。これではポップアップとはいえない。
だが、今のところ「JavaScript を使わない」という制限により、この状態を回避する手段がない。よって、実装としては行き詰ってしまったのである。
尚、span 要素に title 属性を指定して、UA レベルでポップアップを出させる方法もあるが、これははっきり言って拡張性もないし title 属性の意味を取り違えているしでよろしくない。
いい方法があるのだろうか……。
これから地獄。
教科数は少ないものの、クソ苦手なロボット工学やら制御系やらでは、忌まわしき運動方程式がわんさか出てくる。解るわけねーだろが。
個人的に気付いていること。私は物理空間で起こっている事象に全く興味がないのだ。ボールがどういう軌道を描こうが、現象のモデリングをどうやろうが、そんなことはどうでもいいと思っている。
では、何に興味があるか?
人工言語。それこそ私が最も興味を持っている事柄だ。勿論、コンピュータ言語の分野になる。エスペラントに興味はない。
今マイブームなのは Lisp だ。例えば Scheme の簡潔さに心奪われ、Common Lisp の重厚さに目を見張り、Emacs Lisp のもたらす恩恵を享受している。決して最高だとはいえないが、しかし大きな可能性を秘めていることは間違いない。
それにしても、去年と今年でこれほどプログラミング系の講義が無くなるとは思わなかった。最後に教わったのは3年の時の C++。それ以降、言語に触れる講義は無くなった。悲しい。
2年の時は凄かった。メモリ内のデータがステップ毎にどう変化していくかをトレースし続けたあの頃が懐かしい。ポインタの概念は解っていても、ポインタ変数の使い方がよくわからず四苦八苦していた記憶がある。レポートは回を重ねる毎に厚みを増してゆき、口頭試問も加わっててんやわんやだった。
けど、今思えば、やってよかった。
力がつく、とはこの事だ。お陰で他のプログラミング言語についても理解しやすくなった。C++ も、オブジェクト指向を自分のものにした後は早かった。
もっと、言語を知りたい。そう思う今日この頃。
sl
コマンドsl
コマンド、ご存知だろうか?
これは、ls
コマンドのジョークだ。余計なことは言わない。とにかくインストールして sl と打ち込んでみるべし。さすれば一時の安らぎを得られる……だろう。多分。
試しに Vine Linux で apt-cache search ^sl$
とやってみたら、在った。Vine Plus の RPMS.plus カテゴリに。故に apt-get
で簡単にインストールできてしまう。拡張パッチを当てていないものだが、試してみるには十分だ。
あー、こういうの大好き:-)。
Mozilla Firefox 1.1 のアルファ版、Deer Park Alpha 1 が登場した。エンドユーザは絶対にダウンロードしないように。人柱を買って出るなら別だけど。
因に、1.1 で加わった新機能は既に和訳済みで、Deer Park Alpha 1 の新機能 というページで見ることができる。
個人的には CSS 関連のサポート追加が嬉しい。以下、その一覧。
-moz-outline-radius もあるが、これは非標準なので今後に期待。
あとは、何と言っても SVG のサポート。これだ。Opera には既に実装されている(先を越された)機能だが、これを例えば object 要素による方法などで文書に埋め込めるようになったら、それはそれで凄いことになる。拡大しても綺麗な画像……。CSS 側から background-image として埋め込めたらどうなるだろう。それこそ、今までドットの呪縛に囚われていた背景が、柔軟性を兼ね備えた拡張性を与えられ、更なる進化を遂げるだろう。
待ち遠しい……。先行きは、明るい。
先週、工学実験でやったのが Scheme。確かに、この Lisp 派生も良いものになっている。GIMP の script-fu で使われているわけだ。
その時に let
式が登場していた。局所変数を定義する式だ。だが、落し穴(というか言語仕様)の盲点に気づかなかった。
それは、変数のスコープが let 式の評価式以後であるという点だ。以下のようなコードの場合を考えてみる。
(define (test x) (let ((a x) (b a)) (+ a b)))
この関数はエラーになる。何故なら、let
の変数定義部で a を定義し、その a を用いて b を定義しているからだ。そう。先も述べたように、a や b のスコープは、(+ a b)
という評価式以後より始まる。だから a を用いて b を定義することができないのである。多分、C 系の言語を使っている人間が陥りやすい罠なのだろう。
では、それを解消するにはどうすればよいのだろう? 勿論、対応策が存在する。let*
式を使うのである。
let*
式は、let
式と殆ど同じ意味を持つ。但し、変数のスコープが若干変更される。変数定義直後から開始される のである。先の例を書き直して示そう。
(define (test x) (let* ((a x) (b a)) (+ a b)))
この関数はエラーにならない。スコープ範囲が変更されることで、(b a)
という式が正当になるのだ。つまり、a のスコープ範囲が (b a)
からになる、ということだ。
このエラーで30分も時間を潰されてしまった。……悔しい。
ついに出た。Netscape 最新バージョン。
しかし……。どうも Firefox を常用している人々の評判はそれほど芳しいものではない。インターフェースがごちゃごちゃし過ぎだとか、やたら動作が重いだとか。そういう評価をよく目にする。
だが、IE の Trident エンジンに切替えられる機能がデフォルトでくっついてるというのはいいかもしれない。……デザインチェックという点では。個人的にはそれ以外に使い道がない。
だったら Lunascape2 でいいじゃねーかという突っ込みはオッケー。最近は Firefox にもブランド力がついてきたし。
XUL 版や JavaScript 版があるぐらいだから、Ajax 版があったっていいだろうな。つーかそれなら IE でも Opera でもオッケーだし。まだ Wiki にも登録されてないし。
今度作ってみるか。
TeX いいよ TeX。Knuth 先生ありがとう。
Word なんか TeX に比べれば屁だ。HTML とかのマークアップ言語を書いたことがあるならすぐに覚えられる。Vine Linux に標準装備されてる pLaTeX + Emacs + YaTeX + Xdvi で、楽々組版。レポートだろうが論文だろうが書籍だろうが簡単編集。便利過ぎて涙がでる。出力結果も綺麗だし。
今書いてる輪講のテキストも TeX 組み。目次も脚注も参考文献も楽々挿入。
嗚呼、もうワープロソフトには戻れない。
こうなると、最早 Windows で作業を行う意味が二つしかなくなった。一つは IE でのデザインチェック。もう一つはゲーム。
残りの作業は全部 Linux で完結する。文書書きもプログラミングもウェブブラウジングも画像編集も。Emacs と Firefox と GIMP で。
行入力演算子 <>
について。
ファイルハンドルを記述せず <>
だけを用いた場合、まず @ARGV
に要素があるかどうかを確認し、無ければ $ARGV[0] = "-";
を実行する。それから $ARGV[0]
から順に配列要素をファイル名として open
し、<>
が呼び出される度に一行ずつ読み込んでゆく。ファイル終端にくると $ARGV[1]
を open
して……。
因みに "-"
を open
関数のファイル名として与えると、標準入力のファイルハンドルを返す。
……最近知ったよこの事実。
Mozilla Firefox を 1.0.4 にアップグレード(13:00 現在)。Vine Linux の apt-get で。
といっても、あんまり変わってないのだが。
Mozilla Firefox 1.0.4 リリース。セキュリティアップデートなので出るまで結構早かった。
今日は体育大会。所謂休日。ウチの大会は大分アバウトで、ぶっちゃけ何にも出なくていい。しかし朝と昼に点呼がある。でも、それでさえ代返でオッケー。故に休日。
だからこうしてゆっくり文章を書いていられる。極楽。
Vine Linux の Emacs パッケージには入ってなかったから、適当に検索して見付けて導入してみた。
あー、確かに便利だ。
でも、いまいち使い勝手はよろしくない。個人的には、shell のように Tab でプロパティや値を補完して欲しいのだが、それが M-Tab、更にはミニバッファにフォーカスを移してウィンドウを分割して……。改造しなければなるまい。
しかも、A CSS editing mode for Emacs というサイトで配布されていたものは、bottom
プロパティが欠落してしまっている。自分で書き足せばいいが。
あとは、デフォルトのインデントが変だ。それは配布サイトのドキュメントにも書かれているように (setq cssm-indent-function #'cssm-c-style-indenter)
を設定してやれば問題なくなる。
xyzzy 用の css-mode も改造しようかな……。
個人的には嫌いなんだよ。font ヒンティング。
描写がもっさりするとか、メモリを喰うとかの問題もあるけれど、やはり一番イヤーって思うのは一番最初にそれを見た時。
つまり、Firefox を起動させた時。
個人的には、画素一つ一つが紡ぐシンプルな文字が好きなのだ。なのに Firefox は GTK2+ に fontconfig まで使っていて、UI に至るまでヒンティングの嵐。どうにかならんものかと検索をかけてたら、あっさりと pref 名が見付かった。例えば pref.js
なんかに user_pref("fonts.xft.enabled", false);
を追加してやればいい。個人的にはそのまま about:config
から入力したけれど。そうすれば xft を使わなくなり、結果的にヒンティングが行われなくなるという寸法。しかしこれ、Firefox 側できちんとフォント設定をやり直さないと微妙なことになるかもしれない。
こうして生まれたヒンティング無しの Firefox 描写領域。ああ、たまらない……。落ち着くんだよな、こっちの方が。
現在地点を示す、左上の stratum 領域。スタイルを変えた。たったこれだけの変更なのに、IE のバカタレがヘナチョコレンダリングをやりやがるから時間をかけてしまった。見た目とは裏腹に、様々なテクニックが使われていたりする。それをさりげなく見せるのが……って、自分で言っちまったら意味ないか。
まずは次のプログラムを御覧あれ。
prog REVERCE_STR(input s : strinct on Γ) : string; var r : string; begin r := ε; while s > ε do r := head(s) ◊ r; end-while halt(r); end.
といっても、これは、ある一冊の本でしか通用しない言語だ。Pascal 風というだけあって、代入が :=
だったりする。
実用的ではないのはおわかりいただけるだろう。ε などというものを使っているぐらいなのだから。エディタで入力するには使い勝手が悪過ぎる。Γ もそうだ。
しかし、ここでそういったことは問題にならない。そもそものコンセプトからして実用を前提にしていないからだ。この言語は、計算可能性の検証用なのである。これが今、情報数理 III でやっている事柄だ。因に、上のソースは課題プログラムの完成形(恐らく)。
この言語の仕様はかなり特化したものになっている。ある意味で面白いが、何と言うか……。うん。読み難い。
それも C や Lisp に慣れてるからだろうな。この前やった Prolog も、結構読み難かったし。
言語 | ステータス | 備考 |
---|---|---|
C | 使用 | よく使う。でもバッファオーバーフローはどうにかならんかな。 |
C++ | 使用 | まだ STL の機能が使いこなせてない……。 |
JavaScript (ECMAScript) | 使用 | クロージャという概念をこの言語で覚えた。プロトタイプベース、というのもイイと思う。でも不当に低く評価されがち。添え物的なヘナチョコスクリプトを書いてるだけだと思われていて……。一体この言語を使っている人間の内どれだけがまともにオブジェクト指向プログラミングをこの子でやった事があるんだろうか? 無論、XUL と組み合わせてバリバリ拡張を書いてる人は大概いいソースを書いてる。 |
Lisp (Common Lisp, Emacs Lisp) | 使用 | でも関数をちょっと書いたぐらい。まだメジャーモードを書けるまでには至ってない。 |
Perl | 使用 | 必須。これが分からないとどうしようもない。ちょっとした仕事をやらせるのにも、大きなものを書くにも便利。文法が汚い、と言われるらしいけど、個人的にはそうとも思えない。そりゃ、あのコンテストに出品されたような作品は別だけどさ。 |
Prolog | 使ったことはある | 面白いけどデバッグが面倒。型チェックがないのが辛い。Perl だって strict プラグマ使えるのに。 |
Java | 見たことある | ぶっちゃけ全然興味ない。 |
Pascal | 見たことある | 使おうとは思わない。 |
Ruby | 見たことある | 面白そう。でも後回し気味。資料が揃ってるからやりやすいかも。 |
PHP | 見たことある | 結構変な文法、かも。それを言ったら Lisp はどうなんだよと言われそうだけど。 |
Bash Shell Script | 使用 | いじっただけ。でも使い勝手がいい。 |
Z80 アセンブラ | 使ったことはある | 昔、演習で。高級言語の有難さを身にしみて感じた。 |
D | 見たことある | まだ使う予定はなし。興味はある。 |
C# | 見たことある | そのうち使うときが来るのだろうか? |
B | 聞いたことはある | どんなのかは知らん。 |
Cobol | 見たことある | ……ノーコメント。 |
Fortran 77 & 90 | 見たことある | 流石に 77 は……ねぇ。 |
HTML | 昔、使用 | 「人工言語」だからいいんだよ。マークアップ言語なわけだし。 |
XML | ベースになってる | XHTML / RDF / RSS / FORF / SVG / XUL / OASYS / XSL など。 |
つーか疲れた。もうこれまで。
「プログラミング作法」(Brian W. Kernighan, Rob Pike 著 福崎俊博 訳 アスキー)読了。……というか、これが輪講のテキスト。今日は1章が終わる。
本に対する賛美はいくらでも見付かる(それだけの良著)から省略。
あ-、第三章のマルコフ連鎖アルゴリズム、自分で実装してみようかな……とりあえずは ECMAScript で。