2008年
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

セットアップ日記


2008年06月02日 るびまゴルフ

_ コードの長さを競うゴルフがあるらしい。

rubyist magazineを読んでいたら、面白いものを見付けた。昔は、マシン語で、1バイト、1クロックを減らすために努力していたのを思い出す。Rubyist Magazine - るびまゴルフ 【第 3 回】では、標準入力から読み込んで、行番号、語数、文字数、内容を表示するものが問題として出ていた。もう締め切られているかもしれないし、どうやって投稿するのかよく分からないが、とりあえず書いてみた。
$><<[$.,split.size,$_.size-1,$_]*" "while gets
46byteだが、どうだろうか。トラックバックの設定をしてみよう。

_ 2008/6/2追記

るびまのサイトにも登録されたようである。しかし、>等はそのまま記述すれば良いようだ。

_ 2008/6/3追記

~/$/とすると、行末のオフセットが帰るので、文字数が表示できるらしい。すると、41byteになる。

_ 2008/6/3追記

私の知るところ、最短は38byteのようだ。byte数は変わらないが、別のversionを作ってみた。
#!ruby -ap
$_=[$.,$F.size,~/$/,$_]*" " 

2008年06月05日 RでGUI

_ Rでもtcltkが使えるようだ。

ruby/tkについて調べていたら、Rでもtcl/tkが使えることが分かった。試しに、基本的なwidgetをつかったプログラムを書いてみた。
require(tcltk)
tt<-tktoplevel()
tkwm.geometry(tt, "200x100")
tkwm.title(tt,"Hello")
tm<-tkmenu(tt)
 tkconfigure(tt,menu=tm)
 tmf<-tkmenu(tm,tearoff=FALSE)
 tkadd(tmf,"command",label="open",
  command=function(){fl<-tkgetOpenFile();cat(tclvalue(fl),"\n")})
 tkadd(tmf,"command",label="quit",command=function(){tkdestroy(tt)})
 tkadd(tm,"cascade",label="file",menu=tmf)
tkpack(tf1<-tkframe(tt),side='left')
tkpack(tf2<-tkframe(tt),side='left')
tkpack(tklabel(tf1,text='hello'))
tkpack(tkbutton(tf1,text='push',
 command=function()tkmessageBox(message="hello!")))
te<-tclVar("entry")
 tkpack(tkentry(tf2,width=10,textvariable=te))
tkpack(tkbutton(tf2,text='push',command=function()cat(tclvalue(te),"\n")))
Rは統計処理ソフトだが、グラフソフトとしても非常に強力だと思っている。しかし、GUIで使うのが困難なので、素人にはなかなか難しい。これに簡単なGUIをつけてみようと思って、rsrubyを使って、ruby/tkでGUIを作ってみたが、Rの処理が終わってしまうと、グラフの再描画が行われないなど、いろいろと問題があった。実は、Rから直接tcl/tkをたたけば、良いものができるかも知れない。問題はRのプログラムには慣れていないことと、作る時間があるかということかな。

2008年06月08日 Rのプログラム

_ Rのプログラムは思ったより組みやすい。

オブジェクト指向だし、変数はローカルだし、慣れればなんとかなりそうある。しかし、癖はある。rubyに慣れていると、括弧とかを省略してしまって、すぐにエラーがでる。 今日は、どんなデータフレームが読み込まれているかを調べる関数を作るのに苦労した。データフレームもローカルなんですね。また、is.data.frameは名前の文字列を入れると、文字列なので、常にFALSEを返してしまうので、evalでごまかした。
data_frame <- function(){
  l<-ls(env=.GlobalEnv)
  r<-c()
  for(i in l){
     if(eval(parse(text=sprintf("is.data.frame(%s)",i)))){r<-c(r,i)}
  }
  return(r)
}

2008年06月11日 Rの正規表現

_ Rの正規表現は面倒だ。

perlやrubyでは、スラッシュでquoteするので、バックスラッシュの取扱いが簡単だが、Rでは、"や'でquoteするので、バックスラッシュを二個重ねないといけないので、厄介だ。 rubyだと、
r.gsub!(/\^\{([^\}]*)\}/){"\",phantom()\^{#{$1} phantom()},\""}
と書けば良いところを、
r<-gsub('\\^\\{([^\\}]*)\\}',"\",phantom()^{\\1 phantom()},\"",r)
というように長くなってしまう。ちなみに、phantom()はV4+とかのときに、エラーがでないようにするためにつけています。

2008年06月12日 R-guiのtkbind

_ ふたつのブラケット

Rのtcltkでbindを使ってみた。tkbindを使えば良いのはすぐに分かったが、
tkbind(widget,"<<ListboxSelect>>",function(){})
でなんとか動いた。ふたつ括弧が必要なのはなぜだろう。ruby/tkのときは一つだったのに。まあ、tcl/tkを理解しないで使っているので、気にしないことにしよう。

2008年06月17日 Rのバグ取り

_ Rのエラーメッセージはわかりづらい。

せめて、行番号くらい出して欲しい。warningに関しても同じことが言える。一応オブジェクト指向なのだが、隠蔽があんまりできない感じだし、やはり長いプログラムを組むにはあまり向かない気がする。長らく発見されずにどこかでエラーが起きて気づかなかったバグが、今日ようやく取れた。まあ、慣れもあるんだろうけど。あまりオブジェクト指向っぽく書けていないのも、バグができる要因なのだろう。グラフを簡単に書けるようにするプログラムを作っていたのだが、書くよりも簡単にコマンドを覚えられる気がする。


2008年06月23日 latexで書類作成

_ 提出書類をplatexで準備

書類のほとんどがwordやexcelで出すように強要される。せめてopenofficeを使って欲しいのだが、世の中はそう簡単には変わらないようである。

Linuxユーザーとしては、これをどのように処理するかが問題なのだが、これまでは最後だけwindowsマシンで処理して提出するという手段でごまかしてきたが、今回はlatexで処理してみた。

まず、windowsマシンで書類をpdfに変換してもらう。これよりあとはすべてlinuxマシンで行うことができる。そして、acroreadでページ毎のpsを作る。このとき、printerの設定をcustomにしておかないとあとでエラーが出た。ps2epsでepsに変換すれば、それらをwatermarkとして背景にして文字を書き込んでいけば良い。

注意しなければいけないのは、watermarkとして文字を書き込んだ場合には、ページが出力されないので、phantomをつかって、何かの文字があるようにしておかないといけない点です。連続したページの場合には、本文として文字を書き込んで、watermarkはthiswatermarkとwatermarkでページの背景を作りわけると良い。

_ 2009.10.12追記

watermark.styはdebian lennyではtexlive-latex-extraに入っているらしい。


2008年06月28日 ROXの設定

_ エディターの設定

acroreadを使っていると、defaultのeditorがなぜかacroreadに設定されてしまった。以前もそんなことがあったので、何か悪さをしているのだろう。起動するアプリケーションは、 .config/rox.sourceforge.net/MIME-types/ に設定ファイルがある。このtext_plainが書き換えられているようだ。/usr/share/rox/Choices/MIME-types/text を参考に、
#! /bin/sh
exec x-terminal-emulator -e sensible-editor "$@"
としたら、無事nanoが立ち上がるようになった。