htmlのtable
横や縦のつなげ方
texで表を作っていて,左右とつなげたいときには,
\multicolumn{2}{c}{contents}
などとすれば良いが,上下をつなげたいときは,multirowというパッケージを使わないといけないようだ.一方,htmlだと簡単に上下左右をつなげることができる.左右と上下をつなげるには,それぞれ以下のようにする.
<td colspan=2>
<td rowspan=2>
これを使って,光速(299792458m/s)の語呂合わせを考える表を作ってみた.
| 2 | 肉球,憎く,磁極,布告,復刻 | 肉,服,不休,普及
|
| 9
|
| 9 | 食うな,困難,救難,急な | 苦無く
|
| 7 | 無く,泣く,急く | 泣くに,石窟
|
| 9 | 工夫,国,苦痛,苦に,給餌,給付,クジ
|
| 2 | 強いツヤ,によいつえー | 不死,不信,ニシン,自信
|
| 4 | 死後は | よ,し
|
| 5 | 御飯,小屋,碁盤,合板,ゴーヤ,ファイヤー
|
| 8
|
これらの語句をつなぎ合わせると,いろいろなものができるが,その中でましなのは,これかな.
肉食うな,工夫し御飯(脳梗塞)
他の定数もこのような表を作って考えてみようかな.
maximaでTaylor展開
係数の計算
Taylor展開の係数を計算するのが面倒だったので,maximaを使ってやってみた.
どの変数について何次まで展開するかを指定すると,計算してくれる.
具体的な例はこんな感じ.
f(x,r):=1/sqrt(1-2*x*r+r^2);
taylor(f(x,r),r,0,3);
公式をつかって,微分と比較するなら,このようにして確かめられる.
diff(f(x,r),r,3)/3!;
古い装置とのシリアル通信
DTRが制御できない
PCと装置とのインターフェースは,時代とともに徐々に変わって来ているが,長く使われているものとして,RS232Cがある.その通信方法にはいろいろな流儀があるので,特定の装置と通信するのが意外に難しい場合がある.
昔のwindowsからRS232Cを介して制御していた古い装置があるのだが,linux上のwineから動かして使っていた.しかし,wineのversionによっては動かなかったり,クセのある装置である.以前のPCは2017年6月にセットアップしたようだが,そのときも苦労していたようだ.そのシステムもずいぶん古くなってしまったので,別のPCに新しくlinuxを入れて,それから制御しようとしたが,うまくいかない.
今回はオシロを使って,どのような信号が流れているのかを調べてみた.制御できるPCでは,通信の最初にDTR線の電圧がパルス的に変化していたが,うまくいかないPCでは,DTRは最初だけステップ関数的に変化して,二度目以降は動いていないことが分かった.調べてみると,linux kernelは,DTR/DSRフロー制御をサポートしていないという記述を見つけた.この装置を最新のlinux上のwineから動かすのは難しいのかも知れない.
maximaで三角関数の整理
黄金比
maximaで%pi/5を含む三角関数をいじっていて,少し苦労したので,メモをしておく.表示を一行でできるようにdisplay2d:false;とした後で,
exp(%i*%pi/3);とすると,(sqrt(3)*%i)/2+1/2という答えが出てくる.
ところが,exp(%i*%pi/5);では%e^((%i*%pi)/5)と,ほぼそのままの結果しか得られない.そこで,
trigrat(exp(%i*%pi/5)+exp(-%i*%pi/5));
とすると,
%i*(sin((2*%pi)/5)-sin((3*%pi)/5))-cos((3*%pi)/5)+cos((2*%pi)/5)+1
と,三角関数で表してはくれるが,複雑な式になる.少なくとも素直に2*cos(%pi/5)として欲しいのに,なかなかそうなってくれない.
これを改善するためには,load(ntrig);と,パッケージを入れる必要がある.
すると,(sqrt(5)+1)/2と,その値を計算してくれて,黄金比が出てくる.
maximaで三角関数などを思ったように変形するのは,意外に難しい.
ビデオキャプチャをweb配信
PCA-DAV2をdebianで
装置についたカメラをwebから監視したいと思っていたのだが,linuxからビデオキャプチャできる良いものが無かったので,なかなか実現できなかったが,ようやくできるようにすることができた.使ったのはPCA-DAV2というUSBビデオキャプチャで,入手が困難だったが売っているところを見つけてなんとか買うことができた.それをdebian bullseyeからmotionを使ってwebに流すまでの設定についてメモをしておきたい.
まず,そのままだと認識されないので,/etc/modprobe.d/em28xx.confの中にoptions em28xx card=29と記述して,再起動すると認識するようになる.カード番号については,13,40,68という情報もあったが,自分の環境では29が正しいようだ.
次に,そのままだとPALが標準設定になっているので,これをNTSCに変更する必要がある.v4l-utilsをインストールして,v4l2-ctl –set-standard=0とすると,NTSCになる.すると,cheeseなどで画像が見れるようになる.
そして,web配信はmotionを使った.これをインストールしたら,/etc/motion/motion.confを変更して必要な設定を行う.daemonをoffにして,NTSCにするためにnormを1にするのが重要で,あとは自分の環境に合わせて設定する.今回はpicture_outputもmovie_outputもoffにして,保存は行わないようにした.root権限でmotionを実行すると,8081ポートから動画が見れるようになる.
最後に,motionが自動で起動するように,まずはchown motion:motion /var/log/motion/motion.logとしてログファイルの権限を変更する.そして,systemctl start motionとすると,自動起動できるようになる.
まだ,装置が実際に動いているときの動作を確認していないので,なんとも言えないが,便利になると良いな.
rubyの更新
1.8.7から2.7.4へ
10年ぐらい前にセットアップしたPCを更新したら,rubyのversionがかなり違っていて,プログラムを書き換えるのに苦労した.特に,文字コードとしてShift_JISを使っていたので,その部分も面倒だった.正確にはCP932というコードだったので,Shift_JISを指定しても動かなかったが.
主に引っかかった点を,羅列しようと思う.
- requireのフォルダ指定が必要
- jcodeが廃止
- parsedateが廃止されたので,require "date"としてからDate::parse(self).to_timeを使った
- # coding: cp932を指定した.
- CGIのformを取り込むために,CGI.accept_charset="cp932"とした
- ファイルの読み書きで,"w:cp932"などと指定した
大体は以上の変更で動くようになったようだが,今後まだバグが出るかも知れない.
2023/3/30追記
あと,cookieで日本語を使っている場合に,CGI.unescape(ci[0])などとしなければならなかった.
dataの抽出
古いKaleidaGraphから かなり古いKaleidaGraphから数値dataを抽出したいという話を聞いたので,そのデータをもらって,構造を解析してみた.それなりに単純な構造をしていたので,データ抽出プログラムをrubyで書いてみた.それがこんな感じ.
qda=ARGV[0] dat=qda.sub(/\.qda$/i,"_.dat") d=open(qda,"rb"){|f|f.read} n=d[0,16].unpack("n*") c=n[8] # byte size of the last comment n=n[1] # the number of data sz=d[0x200,2*n].unpack("n*") # size of each data tp=d[0x200+2*n,2*n].unpack("n*") # type names=d[0x200+4*n,40*n].unpack("a40"*n).map(&:strip) r=d[(0x200+4*n+40*n)..-1] sz=sz.zip(tp).map{|s,t| a,b="g","" # big endian float a,b="N","Z21" if t==1 # string a,b="G","" if t==2 # big endian 64bit float *data,r=r.unpack(a*s+"n"*s+b*s+"a*") msk=data[s,s] # mask str=data[2*s,s] # string data=data[0,s] # numeric if t==2 # date or time td=r[0,8].unpack("C*")[3] data=data.map{|l|(Time.gm(l>3e9?1904:2000)+l).getutc.strftime("%d-%m-%Y")} if td==0 #date data=data.
グラフソフト
originをwineで
グラフソフトとしては,Rを主に使っている.使い始めた当初は,コマンドや言語の仕様になれずに,多少は戸惑ったが,使い慣れてくると使いやすいと感じるようになってきた.研究用のグラフソフトとしては,Igor ProやOriginなどがあるが,それなりに高価である.多少は安価なKaleidaGraphなども使われているようである.コマンドに慣れる必要はあるが,これらの高価なソフトに勝るとも劣らない機能を,フリーで利用できるのは良いことだと思う.
さて,知り合いがOrigin ProをLinux上で動かしたいということだったので,やってみた.IgorProはWineでほとんど苦労せずに動かすことができるので,Wineで普通に動くかも知れないと予想していたが,そうでは無かった.試したのはOrigin Pro 2023で,インストールまでは普通にできて,立ち上がるものの,クリックなどが一切できない.
Wine hqのページを調べたところ,別のversionの情報があって,
winetricks vcrun2019
とすると良いようだった.しかし,これを実行すると,ハッシュが合わないと言われてうまくインストールできない.これは,microsoftが最近ファイルを更新したためらしい.そこで,
sudo winetricks --self-update
とすると,winetricksが最新のものに入れ替わって,vcrun2019が無事にインストールできるようになる.
その後でOrigin Proを立ち上げると,無事に動くようになった.細かい動作はまだ確認していないが,なんとか使えるようになった.
xautomation
マウス操作の自動化
マウスをクリックする作業を,ある程度の時間をあけて繰り返さないといけないことになった.以前は古いwindowsで,何かソフトを入れてそのようなことをやっていたが,その時に使ったソフトが何か分からなくなったので,今回はlinuxで似たようなことをやってみた.
まず,aptitudeでxautomationを入れる.次に,マウスのクリックする場所の座標をxmouseposを用いて調べる.そして,シェルスクリプトを作って,永久にループするようにして,それを実行すれば出来上がりである.
実際に作ったスクリプトは以下の通りである.
sleep 3600
while true
do
xte 'mousemove 385 210'; sleep 1; xte 'mouseclick 1'; echo r on
date; sleep 10;
xte 'mousemove 485 210'; sleep 1; xte 'mouseclick 1'; echo x on
date; sleep 1
xte 'mousemove 485 235'; sleep 8; xte 'mouseclick 1';echo x off
date; sleep 100;
xte 'mousemove 385 235'; sleep 1; xte 'mouseclick 1'; echo r off
date; sleep 3600
done
これで,後は時間を待つだけのはずだ.
webpへの変換
jpegとwebp
インターネット上の画像形式としては、以前はjpegが多かったと思うのだが、最近はwebpが増えてきたように感じられる。最初にwebpを知ったときには、まだ対応しているソフトが少なくて、表示するためにブラウザーを使ったものである。
少し試してみたところ、imagemagickのconvertでjpgからwebpに変換すると、容量が増えてしまう。一方、gimpのデフォルト設定で変換すると、容量がかなり小さくなる。ただし、losslessを指定すると、imagemagickと同程度になった。試行錯誤していたら、imagemagickで変換するときも、-quality 90という指定をすると、容量が減ることを発見した。
webpを扱えるソフトが増えてきたので、今後はlosslessの必要が無く、容量を小さくしたいときにはwebpを使うのも良いかも知れない。