uconvの場所
古いrubyに無理して入れたtdiaryだが、異常を表示するようになった。Uconvが無いと言われるのだが、これはなぜだろうか。インストールしたときに書いた部分も表示できなくなっているので、どう対処しようかと思っていたが、updateで一日ごとに探して行ったら、12/15のところにあった。良く見ると、このとき書き換えたのはupdate.rbで、今回エラーが起きているのは、index.rbである。つまり、index.rbでrbuconvが読み込まれていないのでエラーが出ていたわけである。そこで、update.rbとindex.rbの両方がrequireしているtdiary.rbにrequire ‘rbuconv’を書き換えることにした。今のところこれで動くようになった。月が変わるところでuconvを使うのかな。
ローカル変数
pythonとrubyの変数の違い
rubyでは、グローバル変数は使わないのが原則らしい。通常の変数はすべてローカルになる。例えば、
a=1 def f(b) return a+b end print f(1)
とすると、aはf()の中では宣言されていないので、エラーが出る。しかし、pythonでは取扱いが違うらしい。
a=1 def f(b): return a+b print f(1)
とすると、2を表示する。つまり、aはグローバル変数として取り扱われて、f()の中でも有効なのである。このどちらの方が便利なのか、意見が分かれるとは思う。
texlive-science
TeXの化学式
そろそろ、学生が卒業論文や修士論文を書き始める季節になってきた。TeXを使って論文を書く人も多いと思うが、化学系で面倒なのが、化学式である。これまで、rubyを使って、化学式らしい部分を自動で変換していたが、便利なstyファイルがあることを教えてもらった。mhchemというもので、Debianの場合にはtexlive-scienceに入っている。ヘッダーに
\usepackage[version=3]{mhchem}
と書いておいて、\ce{H2O}などと書くと、それが化学式として出力される。/usr/share/doc/texlive-science-doc/latex/mhchem/mhchem.pdfに、詳しい説明がある。イオンでまぎらわしい時には、\ce{CrO4^2-}とする。結晶水の点はピリオドで記述するようだ。
texlive-scienceに入っている他のものとしては、sciposterというのが気になった。ポスターを作るときには、posterクラスを自分で修正したものを使っていたのだが、こちらの方が便利そうだ。いつか使ってみるかもしれない。
TeXに便利なツールができてくるのはうれしいことなのだが、それに取り残されている自分が悲しくなる。
CGIとruby
CGIを動かすために
あまり時間が取れなくて、なかなかhomepageの作成がはなどらないが、少しずつ進めている。今日はCGIを動かせるようにした。.htaccessに
Options ExecCGI AddHandler cgi-script cgi
と記述すると、CGIが動かせるようになる。しかし、どこかでエラーが生じている。ruby1.8用に書いたscriptで、IO.readを使っていたが、これがサーバーのruby1.6.4では動かないのが原因だということが分かった。代わりにopen(“formula.dat”){|f| f.read}と書くとうまく動いた。
変則的なデータ
rubyのsplit
データを処理するプログラムをrubyで書いていて、うまく動かないので調べてみたら、文字列をsplitするときに、予想と違う挙動をすることに気がついた。
"1,2,3,".split(/,/)
とすると、[“1”,“2”,“3”,""]となると思っていたのだが、[“1”,“2”,“3”]となっている。リファレンスを調べると、要素の最大数を第二引数に指定しないと、最後は無視されるようだ。さらにその数字に負の数を指定すると、要素の数はいくらでも取れるらしい。つまり、
"1,2,3,".split(/,/,-1)
とすると、私が期待する結果が得られる。 このことを知らなかったということは、これまで扱ってきた文字列は、比較的素直なものだけだったのだろう。
pythonの学習
pythonの返り値
pythonの本を読んでいたら、新しいことを知った。C言語はどんな文でも、値を返す。これはperlやrubyでも同様であろう。pythonも当然そうだと思っていたのだが、違うらしい。例えば、
print a=1
とすると、invalid syntaxと言われてしまう。つまり、式とステートメントには明確な区別があるのである。まだまだpythonは知らないことが多い。
やっとtdiaryを動かせた
ruby1.6.4でtDiary2.0.4
過去に、tdiaryは、ruby1.8.5とruby1.6.8で動かしたことがあった。1.6.8では、それほど苦労しなかったが、今回は1.6.4である。まず、uriが無いと言われるので、手元のPCのruby1.8の/usr/lib/ruby/1.8/の中のuri.rbとuri/をtdiary.rbと同じ場所に置いたらなんとか動くようになった。過去のデータを移動するために、.td2をすべてコピーしてくると、一応の体裁は整った。
しかし、実際に日本語を書き込もうとしたら、uconvが無いと言われる。今度はrbuconvをtdiaryのところに置いて、update.rbにrequire ‘rbuconv’を加えたら、書き込みも出きるようになった。
9年前のrubyをいまさら使わないといけなくなるとは思ってもいなかった。
新しいhomepage
homepageの構築
ようやく、あたらしい環境でhomepageを作れるようになった。しかし、サーバーのrubyは1.6.4と古く、まだうまくtdiaryを動かすことができない。とりあえず、homepageを少しずつ作り始めた。まずは、昔のhomepageの中から、価値のありそうなデータを引っ越して、それから徐々に新しい形にしていこうと思う。同じものを作っても面白くないし。
canonのプリンター
amd64でのプリンターの設定
以前、debianでcanonのプリンタードライバーが32bitしか対応していなくて、amd64では使えなかったことがあった。今回は、canonのMP640というプリンターに挑戦することになった。
まずは、ドライバーをcanon europeから取得する。
i386用のドライバーをtarで展開して、強引にインストールする。
sudo dpkg -i --force-architecture cnijfilter-common_3.20-1_i386.deb sudo dpkg -i --force-architecture cnijfilter-mp640series_3.20-1_i386.deb
そして、cupsの設定で、ppdを/usr/share/ppdから選んで設定する。今回は、これで無事印刷することができた。
新しい職場のネットワーク
aptitudeのproxy
PCを新しいネットワークにつないでみたところ、IPはDHCPで取れているのに、ブラウザでは何も見れない。おかしいと思っていたら、proxyをかまさないといけないらしい。ブラウザはメニューから設定できたが、問題になったのが、aptitudeの設定だ。結局/etc/apt/apt.confに以下の二行のような感じで書いたらうまくいった。
Acquire::http::Proxy "http://proxy.ac.jp:8080/"; Acquire::ftp::Proxy "ftp://proxy.ac.jp:8080/";