lubuntuでSDを使う

SDをユーザーの領域に

古いnoteのメインのSSDの容量が小さくて、データをあまり入れる余裕がないので、SDカードをデータの保存用に使うことにした。 SDカードを挿入すると、/mediaの下にmountされて使うことができるようになるが、SDに保存していることを意識せずに使いたかったので、/homeのユーザーのdirectoryの下にマウントすることにした。ユーザーの権限などの問題に少し苦労したので、メモしておこう。

まず、idでユーザーのuidを調べる。そして、/etc/fstabにそのuidなどを用いて

/dev/mmcblk0p1 /home/name/data auto defaults,user,uid=1000,gid=1000 0 0

などと記述する。オプションの指定は、通常のuserでもmount,umountができるようにして、そのときのownerとgroupをuidとgidで指定したユーザーにするという意味である。これをやっておかないと、rootになってしまって、通常のユーザーが書き込みをできなくなってしまった。

Read more...

lxdeを使いやすく

pcmanfmのアプリケーション設定
lxdeのファイラーであるpcmanfmで、ファイルを開くときのアプリケーションを指定するには、プロパティを開いて開くアプリケーションを設定すれば良い。例えば、自分で作ったスクリプトなどで処理したいときなどには、その部分でカスタマイズを選択して設定すれば、自由度が高くなる。このときの設定がどこに保存されるのか調べてみたら、~/.local/share/applicationsにあることが分かった。この中身を変更すれば、設定を変えることもできる。これまで、いちいちターミナルを立ち上げてやっていた作業を、ダブルクリックだけでできるようにしてみた。作業効率はかなり良くなった気がする。

Read more...

時間を含むプロット

Rでの日付や時刻のプロットの仕方
dayが12/12のような日付を表す文字列のベクトルのときには、as.Date(day)としてプロットすると、軸を日付にしたプロットをすることができる。体重などの記録をプロットするときにも、利用していた方法である。今回、さらにtimeが12:12のように時刻を表す文字列のベクトルが与えられているときに、日付と時刻を考慮してプロットする必要だ出てきた。このときには、strptime(paste(day,time),"%m/%d %H:%M")とすると、時間に変換されるので、プロットすることができる。

Read more...

noteのhdd

止まったhdd
計画停電があったので、測定用に使っているnote pcの電源を落としたのだが、停電後に起動しようと思ったら、立ち上がらない。症状からしてhddが死んでいるようだったので、確認してみたら、やはりhddが回っていなかった。再インストールは非常に面倒なのでやりたくないし、一部のデータを取り出したいと思って、いろいろと試してみた。冷凍庫でしばらく冷やしたがダメで、最後には、軽く衝撃を加えてみた。すると、なんとか回り始めてくれた。sftpで必要なデータをbackupしていたが、一番重要なデータの部分が壊れているようで、そこだけはエラーが起こってしまう。まあ、世の中こんなものだろう。まだしばらくhddは回ってくれると期待して、しばらく様子をみよう。

Read more...

Rで複数のファイルの読み込み

assignとget

Rを使って、いくつかのファイルを連続してデータフレームに取り込むときには、例えばdfにデータフレームの名前を、flにファイル名を入れておいて、

eval(parse(text=paste(df,"<-read.table('",fl,"',header=TRUE)",sep="")))
としていた。これは非常に汚いやり方だが、うまく動くので良しとしていた。しかし、もっとスマートな方法があることに気がついた。assignを使って、
assign(df, read.table(fl,header=TRUE))
とするのである。すると、以前は
eval(parse(text=paste("attach(",df,")",sep="")))
としていた部分も
attach(get(df))
のように、すっきりと書ける。
Read more...

RでOSの判定

PlatformとSysを使って
Rは様々なOSの上で動くが、OSによって使っている作図デバイスが違う。LinuxではX11で、windowsはwindowsという名前で、MacOSXはquartzというドライバを使う。この中のどれを使っているかによって、使うべきコマンドが違うので、OSの種類を調べる必要がある。 OSの種類は、.Platform$OSで調べることができる。windowsやunixという文字列が返ってくるので、区別ができる。しかし、Macもunixとなってしまって、区別できない。一方、.Platform$GUIとするとMacだと"AQUA"となった。LinuxだとX11となった。Windowsはまだ調べていないが、これを使うと3つが区別できそうだ。 もう1つは、Sys.info()[1]と使う方法である。Macだと"Darwin"、Windowsだと"Windows"、Linuxだと"Linux"となる。これでも良さそうだ。でも他のunixはどうなるんだろう。

Read more...

rubyでファイルの読み込み

どのmethodを使用するか

rubyを用いてファイルからデータ読み込んで処理することがしばしばある。データを読んで、行毎に分けて、その後の処理をするという感じである。その際には、これまでは

open("filename","r"){|f|f.read}.split(/\n/).method

というような書き方をすることが多かった。単純にopenで開けると、閉じる作業をするべきである。フロックで処理すれば、自動的に閉じてくれるので、ブロックを使うようにしている。しかし、readとかsplitとかが面倒なと感じていた。よくよく考えると、IOはEnumerableなので、適切なmethodを使えば、もっとすっきりと書くことができることに気がついた。例えば、

open("filename","r"){|f|[*f]}
open("filename","r"){|f|f.to_a}
open("filename","r"){|f|f.map}
open("filename","r"){|f|f.grep(reg)}

などを使うと、返すobjectは違うが、ほぼ同等のことができる。今後は、こんな感じで書くように心がけよう。

Read more...

Rの変数の取扱い

変数と環境

普段グラフを書くためにRを使っているが、そのためのプログラムは比較的単純なので、バグに苦しむことは少ないが、少し複雑なプログラムを書いていたら、バグに大変苦しめられた。その要因はいくつかあるのだが、一つは変数の有効範囲の問題だった。

例えば、あるプログラムの中で、関数を定義した場合に、変数のスコープがどうなるかを実験してみよう。以下のようなプログラムを動かすとどうなるだろうか。

a<-1
b<-function(){print(a);a<-2}
b()
print(a)

functionの中では、当初はaが定義されていないが、外のaの値を取ってくるので、エラーは起こらず、1が表示される。しかし、次の代入は関数内のスコープをもつ変数に代入されるので、関数の外では1のままとなるのである。読み込めるのに書き込めないというややこしい状況になる。

functionの中と外でスコープを一致させるためには、以下のようにすると良い。代入と取り出しを書くのが長くなるが、環境を指定することができるようになる。すると、関数の外でもaの値が更新されて2となる。ちなみに、evalで環境を指定するという方法もある。

e<-new.env()
assign("a",1,envir=e)
b<-function(){print(get("a",envir=e));assign("a",2,envir=e)}
b()
print(get("a",envir=e))
Read more...

グラフから数値の読み取り

g3dataを使ってみた
グラフから数値を読み取りたいときに、グラフの図のファイルから自動的に数値を抽出してくれるソフトがあれば便利である。linuxの場合には、g3dataというものがあるようなので、それを使ってみた。まず、座標軸を決めるために、縦軸と横軸について二点ずつ指定する。そして、読み取りたい点を指定すると、その座標を計算してくれる。 まあ、それなりに使えるが、座標の設定が面倒である。このくらい自動でやってくれるようなソフトを自分でも書けるのでは無いかと思ったが、面倒なので、今回は見送った。 最近のデータなら良いが、古いグラフだと、スキャナーで取り込むときに、少し回転したり、歪んだりしていることがあるが、これをどう補正するのかは、非常に難しい気がする。

Read more...

LinuxのPCの入れ替え

新しいCPUと古いCPU
測定用に使っているPCが故障しているというので、いろいろといじっていたのだが、CPUのFANが回ってないことを発見した。そのFANは12Vで三ピンのもので、GNDと12Vラインに加えて、シグナルラインがあるので、修理は簡単では無さそうだと感じた。 ホコリを飛ばした後で分解してみると、NTCと書かれた素子があり、その抵抗を測定したら、テスターでは測れなかった。調べたら負の温度係数を持つサーミスタのようなので、これが壊れたのが原因だと推測した。試しにその部分を短絡してつないでみたら、FANがすごい勢いで回りだした。温度が高くなったと思って、全力で冷やそうとしているのであろう。数キロオームの抵抗をつないだら、適切な回転数になったので、起動を試みた。 しかし、なぜか立ち上がらない。マザーボードの設定がおかしくなったかもと思って、電池を外して初期化したりしていたら、PCは立ち上がるようにな ったのだが、FANがまた回らなくなってしまった。 仕方がないので、PCそのものを別のに置き換えることにした。OSのインストールは面倒なので、HDDをそのまま移してしまうことにした。元のPCはpen4だったのだが、dualcoreのPCにHDDを移植したら、起動の途中で止まってしまう。仕方がないので、別のpen4のPCに載せ替えたら、ようやく動くようになった。Linuxの場合には、HDDの移植で大抵は立ち上がると思っていたのだが、世代が違い過ぎると、立ち上がらないようだ。 LANの設定などがまだ不完全なのだが、まあそれはまた後日やろう。

Read more...