ハードディスクの検査

fsck
職場で使っているPCのデータの一部が破損しているのを発見した。おそらくハードディスクのエラーだろう。というわけで、checkをしてみた。まず、問題のHDDをunmountしてから、

fsck /dev/hdd1

を実行。いくつかの問題箇所が見つかった。bad sectorは増える傾向があるので、そのHDDは要注意だ。

Read more...

dellのdisplay

ディスプレイの修理
液晶ディスプレイが壊れた。症状から電源系統の故障だろうと判断して、直す気で中を開けてみた。すると、基盤にBENQの文字が。確かdellのだと思って枠を見てみると、DELLの文字。 肝心の修理の方は、一見してよく分からないのだが、陰極管への電圧をつくる回路と、制御系の回路へ電圧を供給するラインが分かれている。それぞれに別の電圧が供給されているようなのだが、その電圧が分からない。回路への供給は5Vだとは思うが、陰極管の方がよく分からない。時間もないし、面倒になってきて、結局捨ててしまった。もっと回路が分かるようになりたいな。

2009/12/6追記 一度はすてようとした基盤だが、救出していろいろと調べた結果、インバーター回路の中の2SC5707というトランジスタが壊れているのが故障の原因らしいことが分かった。検索してみると、このような事例は結構多いようだ。直せるかもしれないが、他の部品は捨ててしまったので、復活は不可能である。結局、四つあるうちの一つしか壊れていないようなので、三つを部品取り用にすることになった。

Read more...

ruby-gslでfitting

Gaussianでfit
たくさんのデータをgaussianでfitする必要があって、どうやってやろうか考えた。グラフソフトを使って、手でするのはデータが多すぎて現実的ではない。Rはプログラムを組めるので、可能ではあるだろうが、gaussianのfitをどうするかまだ知らないので、別の方法を試みることにした。調べてみると、GSLというライブラリがあり、科学計算に用いるいろいろな道具が揃っているらしい。さらに、これがrubyからたたけるらしい。というわけで、rubyでgaussian fitをしてみた。まずは、

aptitude install libgsl-ruby

でインストール。Histogramだとfit_gaussianというmethodがあるようだが、これだとxyデータをそのまま扱えない。いろいろと探していたら、MultiFitでできることが分かった。こんな感じだ。

require "gsl"
x=[0,1,2,3,4,5,6]
y=[0,1,2,3,2,1,0]
gx=GSL::Vector[*x]
gy=GSL::Vector[*y]
guess=[gy.min,gy.max,gx.mean,2]
y0,int,x0,var=GSL::MultiFit::FdfSolver.fit(gx,gy,"gaussian",guess)[0].to_a

いろいろと分からないことが多いが、配列を返してくるので、先頭にあるパラメータを取り出して、これがGSL::Vectorなので、rubyの通常の配列に戻して、結果を得ている。いろいろなデータを試してみると、明らかにピークがあるデータはうまくいくのだが、ピークがあるか無いかわからないようなデータだと、変な値になってしまう。ピークがなさそうなら、強度が0に近い値になって欲しいのだが。あとはこの辺りをなんとかしないと。

Read more...

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...