2010年
5月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

セットアップ日記


2010年05月06日 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がいろいろな名前を持っているので、自由だけど画一的では無いとも言える。

2010年05月07日 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値をすでに指定してあれば不要な気がする。 あと、まとめるべきものとしては、まずは文字列と数かな。

2010年05月08日 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はバッククォートが無いようだ。

2010年05月09日 rubyとpythonのnumeric

_ 数値に関するコマンドの違い

数値に関するpythonとrubyコマンドをまとめてみた。通常の演算を除くと、意外に少ないが、これ以外にもいろいろとあると思う。
pythonruby
n=9999999999Ln=9999999999
01770177
0xff0xff
3+4JComplex(3,4) (require "complex")
oct(314)314.to_s(8)
hex(314)314.to_s(16)
int('111',8)'111'.to_i(8) or '111'.oct
int('111',16)'111'.to_i(16) or '111'.hex
これで、もっともよく使う四つのオブジェクトの概要がなんとなく分かったので、あとはフロー制御を覚えれば、pythonで簡単なプログラムを書けるようになるかな。それとファイル操作も必須かな。

2010年05月10日 AVRのwait

_ ループは無視か

久々にAVRをいじって、制御用の装置を作っている。tiny2313をつかっているのだが、waitをかけるのに苦労した。昔はひたすらループを作っておいて、適当な時間になるように調整したら、うまくいった気がするのだが、なぜか数マイクロ秒しかかからない。コンパイラが最適化してしまってうまくいかないのかな。仕方が無いのでタイマーを使おうとしたが、割り込みを禁止していたので、うまく動かない。いろいろと調べていたら、ウェイトをかけるルーチンがあるようだ。
#define F_CPU 1000000 /* 1MHz */
#include <util/delay.h>
と宣言しておくと、_delay_us(100)とすると、マイクロ秒単位でwaitが指定できる。_delay_msも使えるようだ。これを使ったら、思ったとおりの挙動をしたが、装置の完成にはもう少し調整が必要なようだ。

2010年05月11日 Wineのfont

_ ttf-mscorefonts-installer

久しぶりにWindows用のソフトを使わざるを得なくなったので、仕方なくwineでインストールした。いざソフトを起動すると、いくつかのフォントが無いと言われた。aptitude searchでfontとmsで検索すると、ttf-mscorefonts-installerというものが見つかったので、インストールしてみたら、フォントが無いというエラーは無くなった。これでwineでうまく動くと良いな。


2010年05月30日 tdiaryの引越し

_ webサーバーの更新

もうすぐ、このblogを動かしているサーバーが更新される。rubyも1.6から1.8になるようなので、新しいtdiaryを入れようと計画している。しかし問題なのは、データの移行である。まだtdiaryのデータ構造を理解していなので、この記事を投稿したときに、どのファイルのサイズが変化するか調べてみよう。

_ 2010/5/30追記

201005.td2のサイズが変わったので、このバイナリが本文を記録しているファイルらしい。