私はメインのPCのOSとしてはDebian Linuxを,サブとしてubuntu linuxを使っている.次の5月か6月にはDebian 13 Trixieがリリースされる予定であるが,私は未だにDebian 11 bullseyeを使っている.サポートはされているが少し古いOSを私が使い続けているのにはいくつかの理由がある.まず,新しいOSはしばしばバグがあり,私は通常はリリースから数ヶ月経ってからインストールすることが多い.また,物質科学系のソフトのポータルであるMateriAppsが,なかなか新しいOSに対応してくれないので,それらのソフトを使う場合には,対応を待つ必要がある.例えば,Debian 12への正式な対応がリリースされたのは今年の二月であり,OSのリリースから二年弱も経っている.新しいOSがリリースされると,部分的なサポートはされるのだが,使いたいソフトがいつ対応されるのかは分からない.さらに,Debian 12では,プログラム言語のjuliaがaptから外れてしまったので,今回は11のまま使い続けている.しかし,juliaの公式ページを見ると,Linuxに付属するJuliaはバグがある可能性が高いので,公式からインストールするように勧めている.フォルダの構造を変にしたくないので,aptで入れられるものはaptで入れるようにしていたが,juliaに関しては,公式ページの助言に従うべきなのだろう.
電子回路の設計には,kicadを使っているが,Debian 11ではversionが古く,新しいものを使う必要性が出てきたので,そろそろOSごと新しくしようかと思っている.backportsを使う方法もあるが,あと二ヶ月まって,Debian 13にしようかと考えている.それとも,リリースを待たずにtestingの状態でdailyビルドを使っても良いけど,どうしよう.MateriAppsの問題もあるし.
日本語を含む圧縮ファイル
最近は,ユニコードが普及して来たのでトラブルは減ってきたが,まだ時々は日本語の文字コードのために不具合が起こることがある.その一つが,圧縮されたファイル名にシフトJISの日本語が含まれている場合である.少し古いwindowsでは,そのような場合が多いようである.圧縮ファイルを展開するときには,コマンドラインではunzipやunrarなどを,GUIとしてはxarchiverを使っているが,これらでは上記の場合にしばしば問題が起こる.unarを使うと,その問題を解決できるようなので,使ってみた.インストールはaptから簡単にできて,
unar -e shift-jis file.zip
とすると,シフトJISを使っていても,問題無く解凍できる.この問題に時々苦しめられていた私のような人にとっては,このソフトは大変有用である.
tDiary to Hugo
ブログを復活させたかった理由は2つあります.一つは,記録を残して置きたいという理由です.もう一つは,前の前の所属のときのホームページが最近消えてしまったからです.そのブログの内容は前のブログに残っているのですが,それもいずれは消える可能性が高く,それらのデータを新たなところにブログとして公開したかったのです.いろいろな可能性を考えたのですが,静的なブログとして公開することにしたのです.
tDiaryで書いていたブログの内容は,月ごとに202503.td2などというファイルに格納されている.これをHugoで読み取れる形式に変換する必要があったので,変換するrubyのスクリプトを作って,以前のブログの内容を移行した.そのスクリプトの内容はこんな感じ.
Dir.entries(".").grep(/\.td2$/i).sort.each{|fl| open(fl,"r"){|f|f.read}.split(/\n\.\n/).map{|e| title=e.split(/\n/).grep(/^Title:\s*(.+)/){$1}[0] year,month,day=e.split(/\n/).grep(/^Date:\s*(\d{4,4})(\d{2,2})(\d{2,2})/){[$1,$2,$3]}[0] contents=e.split(/\n\n/)[1..-1]*"\n\n" contents=contents.sub(/\n/," <br>\n") str= <<"STRING" --- title: "#{title}" date: #{year}-#{month}-#{day}T13:42:27+09:00 draft: false ---生成したmdファイルを年毎にフォルダに分けて,contentの中に入れれば,dataの移行は完了である.これで,以前のブログが消えても,大丈夫である.ブログ内を検索は,google検索で行えるようにした.公開したばかりの昨日はまだ検索できなかったが,今日にはもう検索できるようになっていた.#{contents} STRING open("%s%s%s.md"%[year,month,day],“w”){|f|f.puts str} } }
静的なブログ
2007年の末から続けていたブログだが,一年以上も更新が止まってしまった.それは,新しく使うことになったサーバーでは,静的なコンテンツしか置けないために,それまでブログとして使っていたtDiaryを動かすことができなかったからである.ようやく,静的なコンテンツとしてブログを再開できる目処がたった.
新たに使ったのはHugoというフレームワークで,ローカルで公開するブログの内容を作って,それをuploadすることによって,静的なブログを実現できる.まずは,インストールしてthemeを選ぶ.今回はwhiteplainを使ってみた.
sudo aptitude install hugo hugo new site SetupDiary git clone https://github.com/taikii/whiteplain.git themes/whiteplainそして,config.tomlを以下のように変更する.
baseURL = "https://www.ipc.shimane-u.ac.jp/weda/SetupDiary/" languageCode = "ja-jp" title = "Setup Diary" theme = 'whiteplain'後半の部分は,HTMLコマンドを有効にするために必要だった.そして,[markup] [markup.goldmark] [markup.goldmark.renderer] unsafe = true
hugo new 2025/20250325.md
などとすると,content/2025/20250325.mdというファイルができるので,これを編集して,ブログの中身を作る.そして,hugoと実行すると,publicフォルダに公開すべきファイルができる.これをサーバーにuploadすれば良いのである.
まだ,見た目などの細かい設定が出来ていないが,少しずつ整理して行こうと思う.
gsでodf
pdfの分割や結合
これまで,pdfを分割したり,結合したりする必要があるときには,imagemagickを使ったり,img2pdfやpdfuniteを使ったりしてきた.一旦画像に変換するかしないかなどの違いはあるが,これらを使う場合には,以下のようにする.
convert *.jpg out.pdf img2pdf -o out.pdf *.jpg pdfunite *.pdf output.pdf
gsを使って,似たようなことができるということなので,やってみた.まず,pdfから一部を取り出すには,次のようにする.
gs -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf -dFirstPage=1 -dLastPage=200 -sDEVICE=pdfwrite in.pdf
次に,pdfを結合するには,以下のようにする.
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf in3.pdfpdfのまま処理するので,ファイルサイズはあまり変わらないかとも思ったら,いろいろとやっていたら二倍ぐらいのサイズになってしまった.サイズが変わらない変換方法があれば良いのに.
pictureとtikz
texで図を作る方法
texでpicture環境を使うと,いろいろな図を描くことができる.それでは手が届かないこともできる環境としてtikzというものがあるようなので,使ってみた.両方が使えるように,最初に次のように宣言する.
\documentclass[a4j,dvipdfmx]{jarticle} \usepackage{color} \usepackage{epic,eepic} \usepackage{tikz}
まず,picture環境では,以下のように単位を指定してから,putコマンドで,座標と配置するものを定義すると,図が描ける.
\unitlength 5mm \begin{picture}(10,10) \put(5,5){\circle{10}} \put(5,5){\makebox(0,0){$O$}} \put(0,0){\color{red} \blacken\path(0,0)(2,2)(2,0)(0,0)} \put(7,5){\color{cyan} \circle*{2}} \put(7,6){\color{magenta} \shade\circle{2}} \end{picture}
一方,tikzでは,tikzpicture環境を使い,デフォルトでは10mm単位なので,必要に応じてscaleを変更して,コマンド,座標,配置するものと指定して,最後にセミコロンをつけて,図を描く.
\begin{tikzpicture}[scale=0.5] \draw (5,5) circle [radius=5]; \draw (5,5) node {$O$}; \filldraw[red] (0,0)--(2,2)--(2,0)--cycle; \shade[left color=yellow, right color=cyan] (7,5) circle [radius=1]; \filldraw[draw=magenta,fill=magenta,fill opacity=0.5] (7,6) circle [radius=1]; \end{tikzpicture}
ここで示した例は,そのほんの一部であるが,グラデーションで色を塗ったり,半透明にしたりと,picture環境ではできないことが,tikzではできる.
最大値の求め方
ファイル毎の表示
それぞれのファイルに書かれている数値の最大値をファイル毎に表示したくて,やり方を考えてみた.awkを使ってやろうとしたけど,絶対値や最大値を求めるのが面倒で,ファイル毎の処理も大変だったので,結局rubyを使ってやってしまった.例えば,こんな感じで一行にした.
ruby -e "puts Dir.entries('.').grep(/harm/).sort.map{|fn|open(fn){|f|f.readlines}[1..-1].map{|l|l.split[3].to_f.abs}.max}"
ファイルの処理を書くのは,rubyでは長くなってしまうし,列を取り出す処理も少し面倒なので,別の言語の方が良いかも知れないけど.
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から動かすのは難しいのかも知れない.