2015年
6月
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

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2015-06-28 rpi2にubuntu mate

_ usbtmcが使える

raspberry pi 2を使って、測定システムを組もうと思い、OSを調べていたら、新しくubuntu mateというOSが加わっていたので、試してみた。これまで、raspberry piにはraspbianを入れていたが、usbtmcがそのままでは使えないので、kernelをコンパイルし直して使っていた。これがそれなりに面倒だし、kernelが新しくなったら、またコンパイルしないといけない。しかし、ubuntu mateはそのままでusbtmcが使えたので、測定用に適しているのでは無いかと感じた。 ubuntu mateのインストールは、以下のように行った。まず、イメージの圧縮ファイルをdownloadして、解凍する。これを、
sudo dd bs=1M if=ubuntu-mate-15.04-desktop-armhf-raspberry-pi-2.img of=/dev/sdX
などとして書き込む。sdXのところにはmicroSDを指定するようにして下さい。今回は8GBのmicroSDを使ったのだが、ubuntu mateには、partitionの格調をする機能が無いようなので、gpartedを使って拡張する。microSDの二番目のpartitionを選んで、リサイズする。そして、あとはrpi2に挿して起動である。 セットアップの仕方は、ubuntuとかに慣れていれば、それほど難しくないだろう。日本語を入力できるようにするために、ibus-anthyを入れて、あとは必要なr-baseやrubyを入れれば、測定に使えるようになる。ただ、いくつかのパッケージの取得に失敗したので、source.listを少し書き換えたが。 無事usbtmcの制御もできたし、測定用のマシンとしてのセットアップをしよう。

2015-06-29 共用PCの入れ替え

_ debian8のPC

長らく共用のPCとして使っていたnoteが死んだので、別のnoteに入れ替えた。実はそのnoteには、しばらく前にdebian8をインストールしたのだが、起動しようとしたらビープ音が鳴るようになってしまい、電源がおかしいのかなと思って放置してあった。少し調べていたら、どうやらキーボードのどれかのキーが押された状態と認識されており、そのために音がいる可能性があることが分かった。そこで、分解してキーボートのフラットケーブルを外してみたところ、うまく動くようになった。基本的には、外付けのキーボートとマウスを繋いで使うので、これで問題が無い。ftpdやntpの設定をして、共用のPCとして使えるようになった。

debian8のLXDEを少し使ってみたが、windowの移動のときに、遅れて着いてくる感じで、気持ち悪い。単にPCの性能が低いだけかも知れ無いが。


2015-06-30 code golf

_ 久々にrubyでgolfをやってみた。

このサイトのgolfを試してみた。そのNo.902の1 2 32 4 512というものである。具体的には、2のn乗で1から100までの数字から始まるものを順に探して表示するというものである。まず、普通に書いてみたのが、
100.times{|i|r=1;r*=2 until r.to_s=~/^#{i+1}/;p r}
で50bytesである。そのすぐ後に、スペースを取り除けることに気が付き、
100.times{|i|r=1;r*=2until"#{r}"=~/^#{i+1}/;p r}
として、48bytesまでになった。ここから、いろいろな工夫をしてみたが、どうしても48を切ることができなかった。例えば、
1.upto(100){|i|r=1;r*=2until"#{r}"=~/^#{i}/;p r}
1.upto(100){|i|r=1;r*=2until"%s"%r=~/^#{i}/;p r}
1.upto(100){|i|r=1;r*=2until"#{r}"[/^#{i}/];p r}
1.upto(100){|i|r=1;$_="#{r*=2}"until/^#{i}/;p r}
などを作ったが、何をやっても48止まりだった。特に、最後のは1に対する答えが16になってしまうという欠点もあるし。ruby1.8なら、100の代わりに?dを使うという技を使えるのだが。その時、一位の人は46で二位が47だった。10bytesぐらい差をつけられていたら、もう諦めるのだが、数byteとかだと、なんとかなるのでは無いかと思ってしまう。散々考えていたら、昨晩、47に到達した。
($.+=r=1;r*=2until"#{r}"=~/^#$./;p r)until$.>99
というものである。行数を表す組み込み変数$.を使って、初期値の代入と#{}の括弧をなくしたり、最初に1を足すことによって、100の代わりに99を使えるようにして、なんとか1byte減らすことに成功した。これでなんとか二位には追いついたが、一位の46bytesはどうやっているのか、全く見当もつかない。

_ 2015/6/30追記

二位の人は、ruby1.8流のやり方をしていた。これなら、1.9以降でも動く私のscriptの方が上とも言える。一位の人は、これに加えて、補数を求める~演算子を使っていた。なるほど、これなら100を99までで良くなるのでtimesが使えるし、行頭の^も省略できる。