rubyとpythonのstring

文字列に関するコマンドの違い
文字列に関するpythonとrubyコマンドをまとめてみたが、文字列操作はややこしく、表では表しきれていない部分も多い。

pythonruby 1.8 and 1.9
s="2010's"s="2010's" or %Q(2010's)
s='"2010"'s=%Q'"2010"'
s=r'c:\user's='c:\user' or %q(c:\user)
s=u'\u9300's="\u9300"(1.9)
s=u'\U00028b46's="\u{028b46}"(1.9)
s="%dK,%fPa"%(273,1024)s="%dK,%fPa"%[273,1024]
s="""firsts="first
second""""second"
s[2]s[2,1] or s[2].chr(1.8) and s[2](1.9)
s[1:3]s[1...3] or slice(1...3)
len(s)s.size or s.length
int("1")"1".to_i
float("3.14")"3.14".to_f
s.count('0')s.count('0')
s.capitalize()s.capitalize
s.swapcase()s.swapcase
s.upper()s.upcase
s.lower()s.downcase
s.center(10)s.center(10)
s.ljust(10)s.ljust(10)
s.rjust(10)s.rjust(10)
s.strip()s.strip
s.lstrip()s.lstrip
s.rstrip()s.rstrip
s.find('1')s.index('1')
s.rfind('1')s.rindex('1')
s.split(',')s.split(/,/)
",".join(["a","b"])["a","b"].join(",")
s.replace('a','A')s.gsub!(/a/){'A'}
s.replace('a','A',1)s.sub!(/a/){'A'}
pythonでは、シングルクォートとダブルクォートの違いはほとんど無いが、rubyではダブルクォートではバックスラッシュ記法や文字列展開を行うという大きな違いがある。pythonのraw文字列は便利であるが、rubyではシングルクォートに対応するのだろう。しかし、いずれも最後の文字がバックスラッシュだとうまく動かない。pythonのトリプルクォートは、rubyのhere documentに対応するのかも知れないが、rubyのダブルクォートでも改行ができる。rubyのユニコード対応は実質1.9からのようだ。ちなみに、上の例はある元素の中国語です。また、文字列をindexで指定して取り出す場合には、ruby1.8とruby1.9でまったく動作が異なる。1.8は数値になるのでCと同じ感じで、1.9では文字なのでpythonと同じと言えるのだろう。それから、pythonはバッククォートが無いようだ。
Read more...

rubyとpythonのhashとdictionnary

連想配列に関するコマンドの違い
昨日に引き続き、いわゆる連想配列に関するpythonとrubyコマンドをまとめてみた。

pythonruby
d={'a':1,'b':2}h={'a'=>1,'b'=>2}
d['a']h['a']
d.has_key('b') or 'b' in dh.has_key?('b') or h.key?('b') or h.include? or h.member?
d.keys()h.keys
d.values()h.values
d.clear()h.clear
d.copy()h.clone
d.get('c',0)h.fetch('c',0)
d.update(d1)h.update(h1)
len(d)h.size or h.length
del(d['b'])h.delete('b')
d.items()h.to_a
d.popitem()h.shift
連想配列に関しても、rubyはすべてmethodで、pythonはそうではない。こうしてまとめると、rubyのmethodでまだ知らないものがたくさんあることに気づく。例えば、rubyではdefault値を指定するときに、Hash.new(0)を使っていたが、h.default=0でできる。fetchも知らなかったが、default値をすでに指定してあれば不要な気がする。 あと、まとめるべきものとしては、まずは文字列と数かな。
Read more...

rubyとpythonのarrayとlist

配列に関するコマンドの違い
久々にpythonの勉強を再開した。頭がrubyで硬度9ぐらい固いので、なかなかpythonが覚えられないが、クネクネと柔らかくしていかなければならない。今回は、いわゆる配列に関するコマンドをまとめてみた。

pythonruby
l=['0','1','2']a=['0','1','2'] or %w(1 2 3)
l[1]a[1]
l[1:2]a[1...2] or a.slice(1...2)
len(l)a.size or a.length
l.append('3')a.push('3') or a<<'3'
l.pop()a.pop
l.extend(['3','4'])a.concat(['3','4'])
l.sort()a.sort!
l.index('2')a.index('2')
l.reverse()a.reverse!
del(l[1])a.delete_at(1)
del(l[1:2])a.slice!(1..2)
l.insert(1,'0.5')a.insert(1,'0.5')
l.remove('1')a.delete('1')
'3' in la.include?('3')
pythonではリストと呼ぶが、pythonのリストに対する代表的なコマンドを、rubyの配列に対するメソッドと比べてみた。rubyはすべてmethodになっているが、pythonの場合、methodだったりビルトイン関数だったりと、一定していないように感じられる。その意味では、rubyの方が統一的なのだが、rubyでは同じことをするmethodがいろいろな名前を持っているので、自由だけど画一的では無いとも言える。
Read more...

日本語入力ツールバー

uimを非表示にする
OSとしては、debian lennyとubuntu 9.04を主に使っている。デスクトップ環境としては、ともにLXDEを使っているのだが、デフォルトの設定が若干異なっている。例えば、日本語の入力の切り替えには、debianはuimを、ubuntuはscimを使っている。ubuntuでは、日本語入力しないときには、ツールバーが表示されないのだが、debianでは表示される。通常はこれで困らないのだが、全画面表示で使用する時には、これが邪魔になることがある。そのような場合には、

im-switch -s uim-systray

を実行すると、ツールバーがパネルの中に組み込まれて、全画面表示の時には現れなくなる。一度logoutする必要があるが。もとの状態に直したければ、uim-toolbarを指定すればよい。

Read more...

linuxでbinhexの展開

macutils
最近はbase64が浸透してきたが、macユーザーの人の中にはbinhexを使い続けている人も多い。binhexを展開するときに、以前はlinux版のStuffitExpanderを使っていたが、GNUでやりたいとは思っていた。調べてみると、debianにはmacutilsというパッケージがあって、それをインストールすれば、binhexを展開できるらしい。

hexbin -d filename

とすると、data forkだけを取り出せる。拡張子の.dataを変更すれば、OKです。

Read more...

Debian Lenny amd64のjava

sun-java
新しいmain PCは快調なのだが、amd64ということで、cannonのプリンターが使えないという問題が生じている。amd64はまだあまり一般的では無いように感じる。今度は、browserでjavaアプレットを動かそうと思ってつまづいた。 まず、sun-java6-pluginがない。i386ではこれをインストールすると良かったのだが。webで調べてみると、java-gcj-compat-pluginまたはicedtea-gcjwebpluginをインストールすると、良いらしい。まずは前者を入れてみた。しかし、目的のアプレットはうまく動かない。次に後者を試してみた。なぜか、たくさんのフォントをインストールして、結構時間がかかった。しかし、またもやダメだ。しかし、別のアプレットは動くようだ。 ふと思い出して、/etc/apt/source.listにcontribとnon-freeを加えて、aptitude updateをしてから探すと、sun-java6-pluginがあるではないですか。icedtea-gcjwebpluginをremoveしてからsun-java6-pluginをインストールすると、無事にうまく動くようになった。 しかし、たくさん入ったフォントはそのままになってしまった。まあいいか。

Read more...

ajax

Asynchronous JavaScript + XML
htmlを眺めていたら、知らない機能をつかっていた。ajaxというもので、表示されているページとは独立に、サーバーとやりとりをする機能なようだ。つまり、表示されているページのhtml以外のhtmlも読まないと理解できないろいうことになる。ようやくhtmlが多少は読めるようになって来たと思ってきたら、まだまだ複雑であることを思い知らされた。

Read more...

Debian Lennyで書類作成

Wordの書類
久しぶりにWordの書類を出さなければいけなくなった。WindowsとWordを使わなければ書類を準備しなければならない状態はおかしいとは思うが、なかなか改善しない。 2008-6-23にやったのと同じようにlatexで処理しようと思ったが細かいやりかたを忘れてしまった。PCも新しくなったので、必要なものをインストールしなければいけないし。まずは、docからpdfに変換してもらう。これはWindowsを使うしかない。open-officeではずれるし。そして、それをpsに変換する。インストールしては、普通のplatexとwatermarkが使えるようにtexlive-latex-extraをインストールする。 texでは、packageとして、graphicxとwatermarkとgeometryを指定する。geometryは何をしているか分からないけど。当然ページ番号は不要なので、\pagestyle{empty}とする。あとは、\newpageでページを作って、\thiswatermarkでpicture環境を使って必要なものを書いていけば良い。忘れてはならないのが、各ページ毎に、\phantom{}で何かの文字があるように装っておかないと、ページ自体がなくなるという点だ。 概略はこんなものかな。今度またWordの書類が来たときの参考になると良いな。

Read more...

yes

変なコマンド
三台目のPCの入れ替えが終了した。今回はGPIBを使うだけなので、それほど難しくはなかった。問題は、モジュールの組み込み時にgpib_configが実行されないので、起動時に実行するようにしてしまったことだ。まあ、動けばいいか。 いろいろと作業をしていたら、ターミナルに誤ってyesと入力してしまった。すると、yが多量に出力されたので焦ってしまった。manで調べてみると、そうゆうコマンドらしい。なんのためにあるのかよく分からないが。ちなみにnoというコマンドは無いようだ。

Read more...

wineのversion

serial port
測定用の二台目のPCの入れ替えを行った。今回もほぼ前回と同じようにwineでシリアルポートを使えるようにするので、同じことをやっても芸が無いということで、いくつかのversionを試してみた。 まずは25の倍で0.9.50を試したが、新しいバグが出ている。シリアルポートの通信はうまくいっていないようだ。次に0.9.30を試したが、これも症状はほとんど同じ。結局、0.9.25になってしまった。本当はもっと試したかったのだが、compileに数時間かかっているようなので、待つのが嫌になって止めてしまった。 最初にwineでこのソフトを動かしてみたときにversionが0.9.25だったのだが、これは結構良いタイミングで試していたことになる。

Read more...