忘れたときに備えた記録

トップ 最新 追記
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|

2006-08-04(Friday)

拡張スーパーpre記法

HsbtDiary経由

ソース例を書いておくときに便利そう。素敵。

Tags: メモ

2006-08-06(Sunday)

基底クラスのメソッドへのsuperで、パラメータの数が異なる場合

基底クラスではパラメータなしで定義されているメソッドを、派生クラスでパラメータを必要とするメソッドとしてオーバーライドする。

この場合、派生クラス側で基底クラスのメソッドをsuperで呼ぶときには、suepr()としてパラメータが無いことを明示する必要がある。

サンプル

#!/usr/bin/env ruby
class Base
   def mt
      puts "method of base"
   end
end

class Sub < Base
   def mt(str)
      puts "method of sub"
      puts str
      begin
         super
      rescue => e
         p e
         super()
      end
   end
end

Sub.new.mt("hoge")

実行結果

method of sub
hoge
#<ArgumentError: wrong number of arguments (1 for 0)>
method of base
Tags: Ruby

2006-08-07(Monday)

BumpTop 3D Desktop Prototype

スラッシュドットジャパンより。

ネタ元のスレッドでは使い勝手が悪そうだという意見が多いし、実際に改善の余地も多々あるんだろうけど、一度試してみたくなるような魅力を感じる。WindowsVistaのAero Glassなんかがさらに発展したらこんな風になるんじゃなかろうか。楽しみだなぁ。

メソッドのパラメータにハッシュ値を渡す

パラメータにハッシュ値を渡す場合、パラメータの最後に限り'{'と'}'を省略できるという話。

サンプル

#!/usr/bin/env ruby
def test1(s)
   p s
   puts s.class
end
def test2(s1, s2)
   p s1
   puts s1.class
   p s2
   puts s2.class
end

test1("a"=>"b", "c"=>"d")
test2("a"=>"b", "c"=>"d")

結果

{"a"=>"b", "c"=>"d"}
Hash
./test.rb:14:in `test2': wrong number of arguments (1 for 2) (ArgumentError)
        from ./test.rb:14
Tags: Ruby

2006-08-15(Tuesday)

MathMLライブラリ

バージョン1.0に向けて、ライブラリを完成させよう!とか思い立って作業を始めたのがもう結構前の話。

そもそも僕にとっての完成した状態のMathMLライブラリとは何ぞや?というところでえらい時間をかけてはまってしまったのだけど、何とか実装作業が進んできた。で、とりあえず第2段階的なところに着たので現状をまとめてみようかと。

  1. 記号コマンドについて、LaTeXの標準のものと、amssymbパッケージに用意されているもの全てに対応する
  2. MathMLの各要素を表現するクラスの基底クラスとして、XMLの要素をあらわすクラスを用意して、これに対応する ここまで終了
  3. 与えられたTeXソースの解析について、現在はdupしたソース文字列の先頭から順に正規表現で調べていき、終わった部分をsliceメソッドでザクザク削除している処理を、StringScannerを使うようにする
  4. 完全なnewcommand/newenvironment命令を実装する
  5. APIを整理して、ライブラリの使用者が新しい命令と環境をRubyで作れるようにする(MathMLライブラリに対するプラグイン)

XMLの要素を表すクラスとしては、REXMLを使おうかとも思ったのだけど、今後も色々と使っていく上でどうにも不満があったので、「EasyXML : 安易な実装によるXMLライブラリ」というものをでっち上げてみた。 できるだけシンプルな実装になるように心がけてみた結果、REXMLを使うよりも2倍ほど早い。 ライブラリの方はとりあえずリポジトリにだけ置いてあって、https://svn.hinet.mydns.jp/trunc/easyxml で参照できます。(追記 : 改名しました)

Tags: MathML

EasyXML

ふと気になってぐぐったら、同じ名前を3つも見つけてしまった。

  1. http://www2.wbs.ne.jp/~kanegon/easyxml/readme.txt
  2. easyXML
  3. @IT:連載:.NETで簡単XML

3つ目のは@ITの連載のタイトルぽいからちょっと違うかな。名前変えようかな。

バグも見つかったので、リポジトリのほうはeasyxml追加前に巻き戻してしまった。

EasyXML 改め EimXML

結局改名して、EimXMLとした。読み方は「あいむ・えっくすえむえる」とかかな。たとえダサダサでも、独特な名前の方が良いよね。

https://svn.hinet.mydns.jp/trunc/eimxml で参照できます。


2006-08-18(Friday)

LaTeX の構文解析の単位

今までずっと、

\begin{document}
$
%
$
\end{document}

が問題なく変換されるのに

\begin{document}
$

$
\end{document}

だと空行でエラーになるのが不思議だった。

それがさっき、MathMLライブラリの\begin...\endの変換処理に関して、次のソースを変換する実験していて理由が分かったような気がした。

\begin
%
{document}
\end{document}

これだとエラーにならないのだけど、

\begin

{document}
\end{document}

こうするとエラーになるのだ。そして、その際に出たエラーメッセージがこれ。

! Paragraph ended before beginwas complete.

つまりLaTeXは、空白行を区切りとした段落をひとつの単位として構文解析をしていたわけだ。

ちなみにMathMLライブラリは、数式環境しか扱わないためそもそも段落の概念が無いので、空白行もただの空白として扱う。だから、MathMLライブラリに通しても問題なく変換できるが、LaTeXにかけるとエラーになるような記述が存在することになる。

将来、LaTeX全体を再実装するような時に困りそうなのでメモ。

Tags: メモ

2006-08-19(Saturday)

定数の可変性

Arrayな定数を代入した変数を操作する処理を書いてふと気づいたことなんだけど

ソース

#!/usr/bin/env ruby
VAR = [1, 2, 3]
VAR << 4
p VAR

結果

[1, 2, 3, 4]

てな感じで、定数オブジェクトを変化させることは可能だった。意外だったのでメモ。

Tags: Ruby

2006-08-20(Sunday)

MathMLライブラリの進捗状況

  • 字句解析にStringScannerを使うようにした
  • 新しい命令や環境を、Rubyを使って実装し、プラグインとして追加できるようにした

とりあえずここまで終了。http://svn.hinet.mydns.jp/trunc/mathml からダウンロードできるます。

残っている作業は、\newcommandと\newenvironmentを使えるようにすることだけ。

Tags: MathML

LaTeX のパラメータの適用範囲

newcommand命令のパラメータがどういう風に適用されるのか知りたくて、調べてみた。

\documentclass{jarticle}

\newcommand{\ONE}{12345}
\newcommand{\ROOT}[1]{\sqrt#1}
\begin{document}
$\sqrt\ONE$

$\ROOT{12345}$
\end{document}

この例では、混合の中に入るのは最初の1文字だけになる。つまり、パラメータは{...}で囲っていないものとして扱われるわけ。

Tags: メモ

2006-08-23(Wednesday)

MathMLライブラリ更新

MathMLライブラリの最新版を公開しました。

今回の目玉はマクロ機能を組み込んだことと、Rubyで実装したコマンドや環境を追加できるようにしたことで、これで大抵のLaTeXソース(の数式部分)が通るようになるはずです。

詳しいドキュメントは後で作るとして、とりあえずマクロの追加の仕方をば。

#!/usr/bin/ruby
require "mathml"

include MathML::LaTeX

MACRO = <<'EOS'
\newcommand{\R}[1]{\mathbb R^{#1}}
\newenvironment{vvmatrix}{\left|\begin{Vmatrix}}{\end{Vmatrix}\right|}
EOS

TEX1 = <<'EOS'
x\in\R
EOS

TEX2 = <<'EOS'
\begin{vvmatrix}
1&0&0\\
0&1&0\\
0&0&1
\end{vvmatrix}
EOS

# 数式パーサ
p = Parser.new

#マクロの読み込み
p.macro.parse(MACRO)

puts p.parse(TEX1)
puts p.parse(TEX2)

それと、今回からMathMLの各要素をあらわすクラスの基底クラスとしてREXMLまたはEimXMLのクラスを使うようになりました。eimxml.rbをmathml.rbと同じディレクトリに入れておくと、

  • REXML版より動作が速くなる
  • キレイに整形される

という効果があります。


2006-08-30(Wednesday)

MathMLっていらない子?

MathMLを使ってWebページ中に数式を埋め込んでブラウザで表示できるという事について何度か発表する機会に恵まれたのだけど、最近になって急に、本当にMathMLは使ってうれしいものなのか、という疑問に囚われた。

Webページなどで数式を各方法として、これまでの発表では次の3つを挙げてきた。

  1. LaTeXの数式を直接、文中に書き込む(「ax^2+bx+c=0の解はx=\frac{-b\pm\sqrt{b^2-4ac}}{2a}」 とか)
  2. 数式を描いた画像を用意して、それを文中に貼り付ける(WikiPediaなど)
  3. MathML

ここでいつも浮かぶのが、LaTeXの数式を直接文中に埋め込むのは論外として、例えば数式を描いた画像を用意してそれを文中に貼り付ける方法に対して、MathMLを使う方が便利なのかとか、有利なのかという疑問だ。

例えば、最初の頃の発表で「与えられた数式に対して画像を作る手間が大変だ」という話をしてしまったのだけど、CMSを使えば、生成からファイル管理、埋め込みまで全部自動でやってくれる。WikiPediaで使われているMediaWikiなんかがそれ。だから画像生成の手間はそれほど気にするべきことじゃない。

他には「手元でレンダリングすることで、必要に応じて拡大縮小ができます」と言っているけれど、これもAjaxとかで解決できそうな話だ。例えばページに[大きくする]ボタンを用意しておいて、それがクリックされたらサーバ側に拡大して描画しなおした数式画像を要求しつつ、本文側はスタイルシートの書き換えか何かで手元で大きくしてしまう。GoogleMapの衛星写真の拡大縮小処理の、数式版みたいな感じ。

そういうシステムを作るのが最初は大変そうだけど、逆に言えば一度作られてしまうと、その時にはもうMathMLは(ブラウザで数式を表示するという目的に限れば)いらなくなってしまう気がする。つまりMathMLは、そのようなシステムができるまでの過渡的なものではなかろうかと。

じゃあ何か他にMathMLのメリットはないのかなと考えてみる。

とりあえず思いついたのが、RSSにMathMLを埋め込むというもの。RSSリーダでAjaxなシステムを動かすよりは、MathMLのレンダリングをする方が簡単なんじゃないかなと思ったわけ。サービス型のリーダ(例えばGoogleReader)だと、リーダ自体がAjaxで動いているので、その上でさらに数式の画像を拡大する処理まで動けるようにするのはいかにも大変そうだ(案外これもあっさりと出来てしまったりして)。

とにかく早速埋め込んでみたのが、これ。RSSの仕様をまだ良く知らないので、間違った書き方をしているかもしれない。

試しにGoogleReaderとSage(Firefox用のRSSリーダ)で読み込んでみたら、うまく表示されなかった。MathML関連のタグを無視して、"12"とだけ表示されてしまう。RSSの書き方が悪かったのかも知れないけれど、これはHTMLに直接MathMLを埋め込んだ場合と同じ現象なので、もしかしたらXHTML+MathMLのようにRSS+MathMLというのを新たに作らないといけないのかも知れない。だとすると、ちょっと面白そうなテーマではあるなぁ。

もちろん、実は画像形式と比べて非常に有利な点がすでに存在するけれど、単に僕が知らない/気づいていないという可能性もある。

未知の技術に対する物珍しさやRubyプログラミングの練習として始めた事だけど、更に続けるならこの辺もっと考えなければいけないなということで、メモしてみたお話。どっとはらいヽ(´ー`)丿

Tags: MathML