rubyでCookieの処理
カンマが面倒だ
最近のwebサイトでは、cookieを使っているものが多くなっている。試しに
require 'net/http'
Net::HTTP::new('www.google.co.jp').start{|h|
puts h.get('/index.html')['set-cookie']
}
として、googleにアクセスすると、
PREF=ID=***:TM=***:LM=***:S=***; expires=Tue, 30-Aug-2011 07:13:47 GMT; path=/; domain=.google.co.jp
となった。***は数字とアルファベットの列だが。このようなcookieを渡されているということだ。PREFに=以下の値を与えているのだが、値に=が含まれても良いようだ。
ここで、困っているのが、有効期限のexpiresにカンマが含まれていることだ。cookieが一つだけのときは問題無いのだが、二つ以上の場合は、上のような書式をカンマでつなぐ。これを分解するときには、カンマでsplitすれば良いはずなのだが、それだとexpiresのカンマでも区切られてしまう。expires=のすぐ後にないカンマで区切れば良いかも知れないが、書式が完全では無いcookieを返すサイトもあるだろうし、いろいろと面倒だ。
例えば、
a=aaa; expires=Tue, 30-Aug-2011 07:13:47 GMT; path=/; domain=.google.co.jp
a=aaa; expires=30-Aug-2011 07:13:47 GMT, b=bbb; expires=30-Aug-2011 07:13:47 GMT
というcookieを解釈する場合、上は一つの値で、下は二つの値が記述してあるが、expiresのすぐあとのカンマを無視するようにした場合、下でも一つの値しか規程していないように解釈してしまう。
rubyには、CGI::Cookie.parse(string)というmethodがあるので、これを使ってみたが、大した処理をしてくれるわけではないようで、ときどき誤った解釈をする。できれば簡単な正規表現で処理したいのだが、真面目に考えると、結構面倒なスクリプトを書かなければいけない気がする。
xubuntu9.04のprosperで日本語
gs-cjk-resourceがポイントらしい
最近、プレゼンテーションはlatexのprosperを使っている。prosperは比較的派手な視覚効果が使えるので、powerpointなんかを使う必要がなくなる。rb->dvi->ps->pdfと変換していて、rubyのソースを書き換えれば良いので、気軽に書くことができるのだが、psの中間ファイルが大きいのが難点である。
しかし、linuxで使うときには、日本語の設定で苦労する。debianのときにはjisftconfig addとすることと、dpkg-reconfigure cmap-adobe-japan1でoptionalを選ぶのが重要だった。普段はdebianで使えれば問題無いのだが、出張中に使おうと思うとnoteに入れているubuntuで動くと便利である。これまで、なかなかうまくいかなかったが、gs-cjk-resourceをインストールすれば良いようだ。2009/7/13の日記ではインストールしていたが、実際にはなぜかインストールされておらず、これを再度インストールしたらうまく行った。つまり、ubuntuのprosperで日本語を使うには、2009/7/13の通りで良いということだろう。
実行できない。
noexec
メインのPCでシェルスクリプトを実行可能にして、実行すると、
bash: ./temp.sh: /bin/sh: bad interpreter: 許可がありません
と出て実行できないことに気がついた。データを保存するためのHDDの中で実行していたのだが、
cat /etc/mtab |grep noexe
とするとそのHDDが出てくるので、noexecとしてマウントされているのが原因と分かった。そこで、/etc/fstabに、execオプションを付け加えてみた。これで動くかな。
mini9のタッチパッドon xubuntu
タッチパッドの細かい設定
昨日は、gsynapticsを使ってタッチパッドの設定を行ったが、
synclientを使うと、さらに細かい設定ができるようだ。これをhalに組み込めば、起動時に反映される。
まず、現在の設定を見るには、
synclient -l
とする。様々なパラメータが出てくるが、trueは1、falseは0に対応しているようだ。これを眺めていると、いくつか疑問が解けた。たとえば、RTCornerButton=2となっており、右上をタップすると、中ボタンが押されたことになる。入力中にいきなり変な文字列がペーストされることがあったが、これが原因のようだ。四つのコーナーにボタンを割り振ることができるので、
RBCornerButton = 3
LBCornerButton = 1
としてみた。すぐ下のボタンを押せば良い気がするのだが、しばらく使い勝手をみてみよう。
ほかに有用なパラメータを探してみたが、RightEdgeを変えると、VertEdgeScrollができる範囲が変わるようだ。VertTwoFingerScrollも試してみたが、よく分からなかった。
TouchpadOffは有用かもしれない。これを1にすると、タッチパッドが使えなくなる。文字入力のときに誤動作を防ぐことができる。これをショートカットに割り当てておけば便利かもしれない。PalmDetectで手のひらで触ったときの誤動作を防げるようだが、これもよく分からなかった。
このあたりのパラメータの意味を書いてあるサイトは無いかな。
ubuntu 9.04のタッチパッドの設定
gsynaptics
ノートを使っていると、キーボードを打つときに、タッチパッドに触れて、カーソルが変な場所に行ってしまって不便なことがある。タッチパッドの設定を変更するには、若干面倒な作業が必要になるようだ。まず、gsynapticsをインストールする。
sudo aptitude install gsynaptics
そして、これを有効にするために/etc/hal/fdi/policy/preferences.fdiを編集して、<device>のところに以下を書き加える。
<match key="input.x11_driver" string="synaptics">
<merge key="input.x11_options.SHMConfig" type="string">true</merge>
</match>
そして、再起動すると、設定が可能になる。lxdeだと、gsynapticsと打って起動するが、gnomeだと、設定のメニューから行けるようだ。とりあえず、タッピングの時間を短くしてみた。偶然触ってしまうときには、ゆっくりだろうと予想しているのだが、しばらく様子をみよう。
dell mini10v
mini10vとmini9の比較
知人がmini10vを購入した。mini9との比較がしたかったので、少し触らせてもらった。やはり画面が大きいのは良い感じである。また、キーボードもファンクションキーの列があるのは安心する。しかし、Fnキーを押さないとファンクションキーとしては働かず、そのまま押すとLCDの光量調整などになってしまう。これは普通は逆なんじゃないかと思う。160GのHDDを積んだ機械だったのだが、若干振動を感じる。通常は気にならないと思うが、mini9に慣れていると少し違和感を感じる。
ACアダプタはmini9とほぼ同じ感じで19V。とりあえず、起動時間の測定。ubuntu8.04でログイン画面まで40秒ほど、パスワードを打ってからは16秒ほど。GNOMEだとこんなもんだろう。その後ubuntu9.04のnetbook-remixを入れてみたが、起動時間はそれほど変わらなかった。
XFCE4やLXDEを試してみようとしたが、netbook特有のランチャーが邪魔をしてうまくいかない。いろいろといじっているうちに、GNOMEも立ち上がらなくなったので、再インストール。10インチあると、ランチャーのメリットはほとんど感じられないので、クラシックスタイルに。netbook-launcherをremoveしようとしたら、ubuntu-netbook-remixも消されそうになったので、それは止めておいた。
今度はアプリケーションの最大化が邪魔になって取り除こうとしたけど、weekly recipeに書いてある方法では、セッションが見つからずに一旦断念したが、「自動起動するアプリ」にあって、働かなくすることに成功。でも、結局maximusをremoveした。
また、ネットワークマネージャーをwicdに入れ替えたが、今回もネットワークが切断されてそのままではうまくいかなかった。前回と同様に手動でネットワークを認識させてインストールした。
最後に苦しんだのが、アプリケーションの一覧である。gnomeのパネルを右側に持ってきていたが、そこに表示されるアプリケーションは、アイコンではなく「・・・」になってしまうのだ。幅を30pixel以上にするとアイコンが出てくることを発見するまでに、いろいろと試行錯誤を用した。
やはり、一つの環境を気に入るようにカスタマイズするのは難しい。
hp mini110
やっとhpからmini110が発売された。
海外ではずいぶん前から発売されていたが、遅ればせながらようやく日本での発売となった。期待していたlinux版は無いようだ。これで購入する可能性はかなり少なくなった。
あと気にくわないのは、ACアダプターのACコネクタが、ミッキータイプだということだ。日本でははやっていないし、かさばるので好きではない。
これらを考慮すると、dellのmini10vの方が勝っていると言えるので、これを買うという選択肢は無くなった。
revtex4
debianとubuntuのrevtex
以前、debian lennyとubuntu jauntyのlatexでrevtex4を使いたくて、revtexを入れたが、依存関係がうまくいかなかった。どうやら、revtexではなく、texlive-publishersを入れれば良いということが分かった。実際にやってみたら、revtex4もうまく動くようになった。lennyでのtexのインストールは今のところこんな感じ。
aptitude -y install ptex-bin xdvik-ja dvipsk-ja prosper
aptitude -y install texlive-publishers okumura-clsfiles
aptitude -y install dvi2ps-fontdata-ja ptex-jisfonts
aptitude -y install dvipdfmx xpdf xpdf-japanese
aptitude -y install ghostscript gs-cjk-resource gv ps2eps
jisftconfig add
dpkg-reconfigure cmap-adobe-japan1 # select optional
jauntyはこの前書いたのに、texlive-publishersを加えた。しかし、インストールすべきパッケージに過不足がある気もする。しかし、とりあえずこれで、presentationの準備と論文書きができる。
2009/7/24追記
eepicをつかうために、texlive-picturesも入れていた。
xubuntu 9.04にlatexをインストール
latex-env
ubuntuでlatexをインストールするのには、latex-env-jaとかを使うと良いという話だったので、aptitudeで探してみたら見つからなかった。私の環境はxubuntuで日本語remixではなかったので、おそらくJapanese Teamによる追加パッケージにあるのだろうと思って、それを使えるようにした。
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/jaunty.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo aptitude update
sudo aptitude upgrade
そして探すと、latex-env-ja等が見つかった。というわけでインストール。
sudo aptitude install latex-env-ja latex-extra-ja
sudo jisftconfig add
sudo aptitude install ghostscript gs-cjk-resource gv
sudo aptitude install adobereader-jpn
こんなもんかな。しかし、debian lennyと同様に、revtexとは相性が良くないようだ。
2009/7/20追記
参考のために、インストールされたパッケージを書いておこう。
latex-env-ja
dvi2ps-fontdata-ja{a} dvipdfmx{a} dvipsk-ja{a} lacheck{a} latex-beamer{a}
latex-env-ja latex-xcolor{a} lmodern{a} pgf{a} prosper{a} ps2eps{a}
ptex-base{a} ptex-bin tex-common{a} texlive texlive-base{a}
texlive-base-bin{a} texlive-base-bin-doc{a} texlive-common{a}
texlive-doc-base{a} texlive-extra-utils{a} texlive-fonts-recommended{a}
texlive-fonts-recommended-doc{a} texlive-generic-recommended{a}
texlive-latex-base{a} texlive-latex-base-doc{a}
texlive-latex-recommended{a} texlive-latex-recommended-doc{a}
texlive-math-extra texlive-pstricks{a} texlive-pstricks-doc{a} tipa{a}
xdvik-ja
latex-extra-ja
cmap-adobe-japan1 dvi2ps{a} jbibtex-base jbibtex-bin jmpost
latex-extra-ja mendexk okumura-clsfiles ptex-jisfonts vfdata-morisawa5{a}
vflib3{a}
Rでfitting
多項式フィット 実験に必要なデータの処理は、rubyとRを使ってやっている。単純な計算はrubyで、グラフなどを扱うときにはRと使い分けている。カーブfittingもRで行うのだが、これが意外に面倒である。Rは統計のためのソフトなので、それほど複雑なfittingは想定していないのであろう。 まだ、Rに不慣れなためということもあるのだが、多項式でのfittingは、次数を変えるためにいちいち書き換えなければならなくて、煩雑に感じる。また、今回は、二変数でfittingしたかったので、さらに複雑になった。結局うまくいったfittingはこんな感じ。
result <- lm( z ~ 1+ x +I(x^2) +I(x^3) +I(x^4) +I(x^5) + y+ I(y*x) +I(y*x^2) +I(y*x^3) +I(y*x^4) +I(y*x^5) + I(y^2)+ I(y^2*x) +I(y^2*x^2) +I(y^2*x^3) +I(y^2*x^4) +I(y^2*x^5) ) ここで、I()はfitting特有の式の解釈をしないために必要になるようです。result$coefで係数を取り出して、もとのデータとの整合性をチェックする。 あとはrubyで計算させれば良いわけだが、fittingに使ったxに関して五次、yに関して二次の式を計算するのに、rubyでは以下のように記述した。
coef=[ [ -1.741370e+00, 7.970617e+00, -4.912943e-01, 3.099862e-02, -6.283200e-04, 5.164492e-06 ], [ -2.927893e-01, 7.592103e-02, -7.253879e-03, 3.186369e-04, -6.577961e-06, 5.171831e-08 ], #y [ -1.592628e-02, 1.488542e-03, -3.180673e-05, -1.340528e-06, 6.018192e-08, -6.055244e-10 ], #y**2 ] sum=0.0 coef.each_with_index{|a,i| sum+=y**i*a.reverse.inject{|s,c| s*x+c} } このとき、injectを二回入れ子にしたら、エラーがでた。当然なのだが、一回目のときに、arrayと数値を計算しようとするためだ。しかし、これを回避する方法も思いついた。
coef=[ [ -1.741370e+00, 7.970617e+00, -4.912943e-01, 3.