ローカル変数

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()の中でも有効なのである。このどちらの方が便利なのか、意見が分かれるとは思う。

Read more...

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に便利なツールができてくるのはうれしいことなのだが、それに取り残されている自分が悲しくなる。

Read more...

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}と書くとうまく動いた。

Read more...

変則的なデータ

rubyのsplit
データを処理するプログラムをrubyで書いていて、うまく動かないので調べてみたら、文字列をsplitするときに、予想と違う挙動をすることに気がついた。

"1,2,3,".split(/,/)

とすると、[“1”,“2”,“3”,""]となると思っていたのだが、[“1”,“2”,“3”]となっている。リファレンスを調べると、要素の最大数を第二引数に指定しないと、最後は無視されるようだ。さらにその数字に負の数を指定すると、要素の数はいくらでも取れるらしい。つまり、

"1,2,3,".split(/,/,-1)

とすると、私が期待する結果が得られる。 このことを知らなかったということは、これまで扱ってきた文字列は、比較的素直なものだけだったのだろう。

Read more...

pythonの学習

pythonの返り値
pythonの本を読んでいたら、新しいことを知った。C言語はどんな文でも、値を返す。これはperlやrubyでも同様であろう。pythonも当然そうだと思っていたのだが、違うらしい。例えば、

print a=1

とすると、invalid syntaxと言われてしまう。つまり、式とステートメントには明確な区別があるのである。まだまだpythonは知らないことが多い。

Read more...

やっと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をいまさら使わないといけなくなるとは思ってもいなかった。

Read more...

新しいhomepage

homepageの構築
ようやく、あたらしい環境でhomepageを作れるようになった。しかし、サーバーのrubyは1.6.4と古く、まだうまくtdiaryを動かすことができない。とりあえず、homepageを少しずつ作り始めた。まずは、昔のhomepageの中から、価値のありそうなデータを引っ越して、それから徐々に新しい形にしていこうと思う。同じものを作っても面白くないし。

Read more...

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から選んで設定する。今回は、これで無事印刷することができた。

Read more...

新しい職場のネットワーク

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/";
Read more...

共用PCの言語

debian gnomeの言語設定
共用のPCとしてdebian lennyのgnomeを立ち上げた。とりあえず日本語を選択していたが、よく考えると外国人も使うことがある。言語を英語に変更しようとしたが、gnomeではどこで設定するのか分からない。いろいろと調べたら、gdmから選ぶことができるようだ。しかし、選択肢に英語が無い。 gnomeの設定ではやり方が分からなかったので、いつものようにターミナルからやることにした。dpkg-reconfigure localesとして、en-USを選択する。日本語もutf8になっていたので、英語もutf8にすることにする。そうすると、gdmでは英語が選択できるようになった。しかし、gdmの表示が日本語のままだし、gnomeが起動するときに少しエラーがでる。困ったので再起動してみたら、今度はうまく行った。gdmを再起動すれば良かったのかな。

Read more...