液晶の修理
また壊れた
久々に秋葉に行って、部品を買ってきた。以前修理した液晶のディスプレイを修理するために、トランジスタを買ってきた。以前と同様に、2SC5707が壊れたので、その代わりに2SC3709Aを買って、入れ替えると、一応うまくバックライトが点灯した。しかし、直ったと思って組み立て終わって、もう一度チェックすると、また同じ症状になってしまった。一度取り替えた2SC5707がもう一度壊れているので、その原因が別にあるのだろう。トランジスタを取り替えると、しばらくはうまくいくが、また壊れる。今回もそれを再現したのだと思う。その原因を見つけないと、根本的な修理にはならないのだが、どうやってみつけようか。部品取り用の基板もあるので、あやしい部品を総とっかえしてみようかな。
2010/6/15追記 昨晩、もう一度動かしてみたら、普通にバックライトが点灯した。おかしいな、また壊れたはずなのに。どこかに浮いた半田でもあるのかな。もうしばらく様子を見ることにしよう。
impressiveでプレゼン
netbookで
これまで、プレゼンテーションが必要なときには、prosperで準備して、pdfに変換してacroreadで表示していた。知人がimpressiveというプレゼンテーションツールを使っていて、興味を持ったので試してみた。インストールはaptitude impressiveでできるが、日本語が表示できない。poppler-dataを入れると、表示できるようになる。しかし、非力なPCの場合には変換に時間がかかってしまう。ubuntuのレシピで工夫の仕方が紹介されていた。まず、
impressive --geometry 1024x768 -o presen presen.pdf
とすると、presenというフォルダに各ページがpngとして展開される。そして、実行するときには、
impressive -t none -c memory -g 1024x768 presen
とすると、変換に時間がかからなくなるので、快適に使うことができるようになる。しばらく使ってみることにしようかな。
引数の最後のカンマ
methodの引数と配列
rubyの引数を取るmethodでは、引数をカンマで区切って、丸括弧で囲む。
def test(*a) puts a.class end
などとすると、引数の数が可変になり、それが配列として受け取ることができる。このような場合に、引数を一行ごとに書いて、
test( 1, 2, 3, )
などとしたくなるのだが、これだと最後のカンマの後に引数が無いのでエラーが起きてしまう。仕方がないので、これまでは
test( 1, 2, 3 )
と書いていたが、多少不便な点があった。例えば、2を除く時には行ごとコメントアウトすれば良いのだが、3を除くときには、少し書き換えなければいけない。これを回避する方法を見つけた。
test(*[ 1, 2, 3, ])
と書くと、3を消すときも、一行コメントアウトすれば良いことになる。配列だと、最後のカンマは無視してくれることを利用している。しかし、引数を配列にしてから、もう一度展開するのは二度手間な気がする。そうするならば、初めから配列を引数にすれば良いのだが、必ず配列を渡すのも面倒な時もある。しばらくはこの書き方でいくことにしよう。
引越し完了
! tdiaryの更新
本日、Webサーバーの更新が行われた。rubyは1.8.5になったので、新しいtdiaryにした。見た目はほとんど変えていないが。ようやく基本的な設定が終わって、昔のデータも移し終えた。ユーザー権限では、apacheが作成したデータを書き換えられないので、細かい設定がうまくいかずに苦労した。新しいプラグインも使えると思うので、何か面白いものがないか探してみようと思う。少しずつスタイルを調整していこう。
tdiaryの引越し
webサーバーの更新
もうすぐ、このblogを動かしているサーバーが更新される。rubyも1.6から1.8になるようなので、新しいtdiaryを入れようと計画している。しかし問題なのは、データの移行である。まだtdiaryのデータ構造を理解していなので、この記事を投稿したときに、どのファイルのサイズが変化するか調べてみよう。
2010/5/30追記 201005.td2のサイズが変わったので、このバイナリが本文を記録しているファイルらしい。
Wineのfont
ttf-mscorefonts-installer
久しぶりにWindows用のソフトを使わざるを得なくなったので、仕方なくwineでインストールした。いざソフトを起動すると、いくつかのフォントが無いと言われた。aptitude searchでfontとmsで検索すると、ttf-mscorefonts-installerというものが見つかったので、インストールしてみたら、フォントが無いというエラーは無くなった。これでwineでうまく動くと良いな。
AVRのwait
ループは無視か
久々にAVRをいじって、制御用の装置を作っている。tiny2313をつかっているのだが、waitをかけるのに苦労した。昔はひたすらループを作っておいて、適当な時間になるように調整したら、うまくいった気がするのだが、なぜか数マイクロ秒しかかからない。コンパイラが最適化してしまってうまくいかないのかな。仕方が無いのでタイマーを使おうとしたが、割り込みを禁止していたので、うまく動かない。いろいろと調べていたら、ウェイトをかけるルーチンがあるようだ。
#define F_CPU 1000000 /* 1MHz */ #include <util/delay.h>
と宣言しておくと、_delay_us(100)とすると、マイクロ秒単位でwaitが指定できる。_delay_msも使えるようだ。これを使ったら、思ったとおりの挙動をしたが、装置の完成にはもう少し調整が必要なようだ。
rubyとpythonのnumeric
数値に関するコマンドの違い
数値に関するpythonとrubyコマンドをまとめてみた。通常の演算を除くと、意外に少ないが、これ以外にもいろいろとあると思う。
python | ruby |
n=9999999999L | n=9999999999 |
0177 | 0177 |
0xff | 0xff |
3+4J | Complex(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 |
rubyとpythonのstring
文字列に関するコマンドの違い
文字列に関するpythonとrubyコマンドをまとめてみたが、文字列操作はややこしく、表では表しきれていない部分も多い。
python | ruby 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="""first | s="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'} |