rubyの配列の作り方

rubyのArray
0から一ずつ増えていく整数を要素とする配列をつくるのに、Rだと0:9、pythonだとrange(0,10)などとすれば、簡単にできる。rubyでどうやるかわからなかったので、a=[];(0..9).each{|e|a<<e}とか(0..9).to_aでつくっていたのだが、実は[0..9]でよいらしい。 rubyを始めて結構たつが、こんなことも知らなかったとは。一行ぐらいで書けることは、調べるよりも書いた方が早いので、適当に書いて済ませてしまっているが、もう一度、一から勉強し直した方が良いのかも知れない。

2010/1/13追記 今、実行してみると、[0..9]は0..9という要素をもつ配列にしかなっていない。おかしいな。どこで上のように勘違いしたのだろうか。

Read more...

新しい言語

goとscala
googleがあたらしい言語を発表したらしい。goというらしいのだが、便利なのだろうか。言語といえば、scalaというのも注目を集めているらしい。両方ともcompile言語で、簡単に書けるらしい。 最近は、ruby以外はめっきり書いていない。cも一年以上書いていない気がする。rubyの欠点はinterpreterなので、実行速度が遅いということである。rubyの一部の機能を制限すれば、compileも可能な気がするのだが、できないものなのだろうか。 実は、今もrubyを使って測定を行っている最中である。最初に同じ測定をやったときには、いろいろなことを手で行わなければならなかったので、大変だった。今ではそのほとんどを適当にやってくれるので、随分と楽になったものである。しかし、rubyで測定をやっている人は少ないのではないかと危惧している。この前、私が書いたwindowsからGPIBをrubyで叩くためのコードを使っている人をネット上で見付けて驚いた。私の書いたコードを誰かが使って少しでも役に立っていれば幸いである。 今後、学習しようと思っている言語として、javaとpythonがあるが、scalaもその候補に加えておこう。goはとりあえず様子見かな。

Read more...

methodの途中の作業

yieldを使う rubyであるメソッドの途中で別の作業をしたいときに、その内容をブロックとして与えて、yieldで実行することができる。ブロックを与えないときには何もしないのかと思いきや、エラーが起こるので、yield if block_given?としておけば良い。 問題なのは、いくつかの操作をメソッドの途中でしたいときだ。ブロックは二つ与えられないしと思っていたら、こんな感じで実現できることに気がついた。 def test puts 0 yield(0) if block_given? puts 1 yield(1) if block_given? puts 2 end test{|i| case i when 0; puts 'a' when 1; puts 'b' end } test{ puts 'a' } test これで、ブロックを付けなくてもエラーが出ないし、場合分けがあるかも意識しないでも良い。 しかし、手続オブジェクトを引数に使うと、複数の手続を指定できるので、素直に書ける。 def test(a=nil,b=nil) puts 0 a.call if a puts 1 b.call if b puts 2 end a=Proc.new{ puts 'a' } b=Proc.new{ puts 'b' } test(a,b) test(a) test() しかし、メソッドを呼び出す前に手続オブジェクトを定義しないといけないので、少し面倒な気がする。間をとって、こんな感じが使い易いのかも知れない。 def test(a=nil) puts 0 a.
Read more...

headerの情報

firefoxのlivehttpheaders
httpでアクセスしていると、headerの情報を見たくなる場合がある。サイトによっては、RefererやUser-AgentやAccept-Languageなどを見ている場合もあるし、Cookieやformのデータをどのようにやりとりしているのかを知る必要があるからだ。おそらくhttpのアクセスを別のプログラムから見ることはできるだろうが、httpsなどでは暗号化されているので、これは難しい。 firefoxにはlivehttpheadersというアドオンがあり、これを使うとheaderを見れるようになる。httpsでもheaderを見れるので、便利である。debian lennyとubuntu jauntyでは、mozilla-livehttpheadersをインストールすると使えるようになる。 今度、httpsでアクセスするときに、どのようなデータがやりとりされているのかを調べてみよう。

Read more...

linuxでxlsx

gnumericでxlsxが読めた。
linuxを使っていて困るのが、msofficeのファイルを扱わないといけない時だ。自分で文章を作るときは、texなどを使うので、officeのお世話になることは無いが、提出はエクセルでとか言われると、従わざるを得ない。このような時には、openofficeをつかっていたが、2007の保存形式にはまだ対応していないようで、そのようなファイルを扱うのは諦めていた。 xlsxファイルを読む必要が出たので、少し調べてみた。すると、xml形式のものをzip圧縮したものらしいということが分かった。実際、unzipしてみるとファイルが出てくる。ソースをいろいろと見てみたが結局よく分からなかった。 xml形式なら、読めるソフトがあるはずだと思って調べてみたら、gnumericでは読めるようだ。xubuntuでは標準でインストールされているようだが、debian lennyには無かったので、インストールして使ってみた。確かに、xlsxを読むことができた。起動も早いし。 これで、openofficeを使う必要が無いかもしれない、と思って調べてみたら、openoffice3.0では2007形式も読めるようだ。lennyの2.4ではまだ未対応のようだけど。

Read more...

linuxのrelease

ubuntu9.10
ubuntuは半年ごとにリリースされる。今月中には9.10が出る予定である。一方、debianは過去のリリースを見ると、大体二年から三年に一度といった感じか。日付は多少間違っているかも知れないけど、リリース日はこんな感じだった。

2009.2.14 5.0 lenny
2007.4.8 4.0 etch
2005.6.6 3.1 sarge
2002.7.19 3.0 woody

windowsは最近よく知らないが、xpからvistaは5年ぐらいあった気がするが、windows7は3年ぐらいなのだろうか。さすがにubuntuのように半年ごとに更新で、一年でサポートが切れると、なかなか管理が大変である。数年ぐらいが適切だろうか。研究室のlinuxマシンはほとんどがdebianだが、まだetchのものが多い。lennyのlxdeにも慣れてきたので、徐々にlennyにしていかなければならない。今日は停電明けだったので、試しに一台をetchからlennyに入れ替えた。videoのキャプチャーの設定はetchと同じように2008/4/25に書いてあるようにしてみたけど、うまく動くかな。

Read more...

totemでyoutube

totemでyoutubeが見られるらしい。
噂を聞いてやってみたが、ubuntu9.04ではうまく動かなかった。いろいろと調べたりして以下のようにすればうまくいくようになることが分かった。 まず、ubuntu-restricted-extrasをインストールする。私の場合はxubuntuだったので、xubuntu-restricted-extrasを入れた。それから、/usr/lib/totem/plugins/youtube/youtube.pyの337行目のurllib.quote(t_param)をt_paramと訂正する。 驚いたのはpluginがpythonで書かれているということだ。つまりtotemをインストールすると、自動的にpythonもインストールされるということだ。rubyもこんな感じになってくれると良いのに。 少しソースを読んでみたが、classの定義のところは、やたらとselfが多い。おそらく最初の方でインスタント変数を定義するときに使っているのだろう。pythonも少しは使えるようになりたいが、rubyを使っているとあまり必要性を感じないのでダメだな。以前perlを使っているときにはなかなかrubyを覚えられなかった前歴があるし。

Read more...

秋月

秋月電子?
秋月といえば、秋葉の電子部品屋を思い出す人が多い。googleでもトップに来るし。世の中には、秋月梨というものがあるらしい。新高と豊水を交配させたものに幸水を交配させたものらしい。というわけで、買ってきて食べてみた。味は爽やかで、甘味は豊水よりも少し控えめという感じで、好感がもてる。しかし、まだそれほど広まっていないようなので、なかなか手に入らないのが残念だ。

Read more...

画面の縮小

短い縦
mini9のLCDは1024x600で、横長である。横幅が多少足りないと思うことがないわけではないが、縦が足りないと思うことは多い。解像度は液晶を変えなければ変わらないが、たんに縮小して、縦に表示できる情報を増やすことができることが分かった。

xrandr --fb 1024x900 --output LVDS --scale 1.5x1.5 --panning 1024x900

とすると、1.5倍に縮小して画面が表示される。文字は小さくなるが、なんとか判別できる。二倍にしたらさすがに読めなかった。

xrandr --fb 1024x600 --output LVDS --scale 1x1

とすれば、もとに戻るが、もう少し簡単にもどらないのかな。縮小しなくてよいのなら、

xrandr --fb 1024x1024 --output LVDS --panning 1024x1024

とすると、画面をスクロールして使えるので便利かも。

Read more...

ubuntu9.04にVESTA

VESTAのインストール
mini9のxubuntuにVESTAをインストールした。2009/4/3に書いたように、lennyと同じようにしたらインストールできた。しかし、

get fences failed: -1
param: 6, val: 0

というエラーっぽいものがでる。まあ、使えているからいいか。また、mini9の画面では小さすぎて、下の方がはみ出して使えない。画面自体をスクロールできるようにできれば良いのだろうが。

2009/9/27追記 一つの解決策を見つけた。画面を横にして使えば、画面の下が使えるということに気がついた。

xrandr -o left

とすればよい。しかし、タッチパッドは横にならないので、操作は難しいけど。使い終わったらnormalにする。

Read more...