debianとpdf

pdfの編集
Linuxでpdfに文章を書き込む方法を探してみた.pdfを編集するには,libreofficeなどでもできる.しかし,もっと手軽にできないかと探してみたら,xournalというのを見つけた. インストールはaptで簡単にできる.少し使ってみたところ,編集としては,直線や手書きや文字を追加することはできたが,図形などは無理なようだった.修正液で消すことも出来た.用途は限定されるだろうが,簡単なことを簡単にやるには良さそうだ.

Read more...

cacheとswap

swapをあける

debianでメモリを大量に使う計算をやっていたら,メモリは足りているはずなのに,swapを使い始めた.swapを使っていると計算が遅くなるので,どうにかならないかなと思って調べてみたら,対応の仕方が分かった.このような場合には,メモリをcacheに使っていて,そのせいでswapが出来てしまうようだ.そこでまず,freeでメモリの使用状況を確認してから,cacheを開けるために,以下のコマンドを実行する.

sync
echo 1 > /proc/sys/vm/drop_caches

freeで確認するとcacheが減っているはずである.そして,swapの内容をmemoryに移すために,以下のコマンドを実行する.

swapoff -a && swapon -a

すると,それまで使っていたswapが使われなくってすっきりした.

Read more...

メモリ不足

swapを新たに設定

重い計算をしていたら,メモリが足りなくなったので,メモリを増設しないといけないかなと思っていたが,まずはswapでごまかすことにした.以前はHDDにlinuxをインストールするときに,swapを定義していたが,最近はSSDになり,メモリも増えたので,swapを定義しないようにしている.しかし,メモリ不足になったので,2nd storageであるHDDにswapを作ることにした.フォーマットをし直さないといけないのかと思っていたが,ファイルとしてswapを作ることができるようなので,やってみた.実行したコマンドを並べると,以下のような感じである.

cd /mnt/hdd
su
mkdir swap
dd if=/dev/zero of=/mnt/hdd/swap/swap0 bs=1M count=100000
chmod 600 /mnt/hdd/swap/swap0
/usr/sbin/mkswap /mnt/hdd/swap/swap0
/usr/sbin/swapon /mnt/hdd/swap/swap0
exit

まずはhddにswapのファイルを作り,それをswapとして有効にする.起動時にこれが有効になるようにするには,/etc/fstabに以下を書けば良いようだが,これはまだ実行していない.

/mnt/hdd/swap/swap0 swap swap defaults 0 0
swapを有効にしたことによって,メモリ不足で止まってしまっていたプログラムが無事に動くようになった.しかし,どの程度遅くなったかが問題だ.
Read more...

共用のHDD

ext4で戸惑った

linuxで誰からも使える共通のHDDを設定しようとしたら,少し苦労した.まず,lsblkでHDDの名前を確認して,/etc/fstabに以下のように書いて,ユーザーからマウントできるようにした.

/dev/sda1 /mnt/hdd ext4 rw,noauto,user,exec 0 0

このままだと,ユーザーが書き込めないので,umaskを設定してmountしたら,以下のようなエラーが出た.

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda1, missing codepage or helper program, or other error.

この原因をいろいろと調べていたが,フォーマットをしていないとか,ユーティリティーが入っていないという記述も見つけたが,結局分かったのが,ext4ではumaskの設定が無いからだった.mountしてからrootでフォルダを作って,そのpermissionをgo+rwxにしたら,ユーザーから普通に読み書きできるようになる.結果としては,この方が楽なのだが,やり方が変わるのは面倒でもある.

Read more...

tlpとpowertop

linuxノートの省電力

バッテリーでlinuxのノートを使っていたら,意外に早くバッテリーが切れた.linuxでは省電力の設定がいまいちのようなので,設定してみることにした.

省電力設定ツールの有名なものに,tlpとpowertopがある.tlpはインストールすると,自動起動されるように設定されるが,powertopは自動起動されないので,そこを自分で設定しないといけない.自動起動するには,sudo nano /lib/systemd/system/powertop.serviceなどとして編集して,以下の内容にする.

[Unit]
Description=Powertop startup
[Service] 
Type=oneshot
ExecStart=/usr/sbin/powertop --auto-tune
[Install] 
WantedBy=multi-user.target

そして,シンボリックリンクを sudo cp -s /lib/systemd/system/powertop.service /etc/systemd/system/multi-user.target.wants/として作り, sudo systemctl enable powertop.serviceとする.これを最初にやったときは,設定ファイルの中の綴をミスっていて,うまく行かなかったが,エラーメッセージでそれに気がついて,訂正したらうまく行った.

tlpは,/etc/tlp.confを編集することによって設定を変更することができる.とりあえずは,以下の部分のコメントアウトを外した.

CPU_SCALING_GOVERNOR_ON_AC=powersave
CPU_SCALING_GOVERNOR_ON_BAT=powersave
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0

tlpとpowertopの設定は,多少干渉するような感じだけど,まずはこれで良いか.

Read more...

dvipdfmxのフォント指定

日本語フォントの埋め込み

texで作ったpdfのフォントが見づらいと言われたので,設定を変更してみた.まず,

sudo kanji-config-updmap-sys --ja status

として,現在の日本語フォントの埋め込み設定を確認する.私の環境では,

CURRENT family for ja: noEmbed (variant: )
Standby family : haranoaji
Standby family : ipa
Standby family : ipaex

となっており,埋め込み無しで,3つのフォントの指定が可能であることが分かった.そこで,

sudo kanji-config-updmap-sys --ja haranoaji

と指定してみた.読みやすくなったので,これで良いかな.

Read more...

新しいdebian

bullseye
そろそろdebianの次のversionがreleaseされるのではと調べてみたら,その翌日の8/14にリリースされることがわかった.そして,研究上で使っているMateriAppsのapt sourceがいつ公開されるかなと思って居たら,8/18に公開された.予想していたよりも早かった.新しいOSが出てから半年ぐらい待ってから更新することが多いのだが,今回は早めに更新してみた.DVDのISOをUSBに入れて,そこからbootしてインストールした.まずは英語で入れて,設定などを行った.desktopはlxdeにして,それ以外には以下のようなパッケージを入れた.

CPU: amd64-microcode
editor: emacs emacs-mozc
programming: ruby r-base r-cran-rgl r-cran-gsl r-cran-misc3d maxima
tex: texlive-lang-japanese texlive-latex-extra texlive-publishers
graphics: imagemagick gimp inkscape
mail: thunderbird-l10n-ja
tools: aptitude rsync
printer: cups
japanese: ibus-mozc

MateriAppsのsource listもhttps://sourceforge.net/projects/materiappslive/files/Debian/sources/から入れた.しかし,VESTAはまだ対応していないようなので,しばらく待たないといけない.あと,aptはcontribとnon-freeは追加しておいた. あとは,必要になったときに設定すれば良いかな.

Read more...

Rで数値積分

diffinvを使って
Rで数値積分をする方法を聞かれたので、ついでにここにも書いておくことにする。数値積分をするためには、基本的にはy*dxを足していけば良い。dxを求めるには、diff(x)とすれば良いが、数が一つ減ってしまうので、そのままではyをかけられない。そこで、最初の要素を除いてy[-1]diff(x)として、それを足し上げていくと数値積分となる。つまり、cumsum(y[-1]diff(x))とすれば良い。 この方法では少し誤差が大きいので、せめて台形積分にしてみよう。yのところは、隣り合ったyの値の平均にするために、(head(y,-1)+tail(y,-1))/2として、cumsum((head(y,-1)+tail(y,-1))/2diff(x))とすれば良い。この最初に0を加えるために、diffinv((head(y,-1)+tail(y,-1))/2diff(x))とすると、xと数が同じになって良いだろう。

Read more...

Pade近似

Rで多項式やPade近似
Rで係数cnから多項式の値を求めるためには、例えば以下のようにすれば良い。

cn<- 1/gamma(1:11)
x<- -100:100/10
f<-0
for(i in 0:10)f<-f+cn[i+1]*x^i
plot(x,f,type="l")

しかし、値を求めるためにゼロで初期化したりforループを書いたりが面倒である。そこで、xのべき乗の行列を作って、行列の積を使うとスマートに書ける。

f<-outer(x,0:10,"^")%*%cn

これを使って、Pade近似をいじってみた。Pade近似というのは、関数を2つの多項式の比として近似する方法であり、n次の多項式をm次の多項式で割る場合に[n,m]次のPade近似という。例えば、Taylor展開は[n,0]次のPade近似ということもできる。sin(x)の10次のTaylor展開の係数cnは以下で表される。

cn<-c(0,1,0,-1)/gamma(1:11)

これを[4,6]次のPade近似で表してみよう。pracmaというlibraryを使うと係数が簡単に求められる。

library(pracma)
pq<-pade(rev(cn),,4,6)
pn<-rev(pq$r1)
qn<-rev(pq$r2)
f<-(outer(x,0:4,"^")%*%pn)/(outer(x,0:6,"^")%*%qn)

pracmaでは多項式の係数を逆順にしないといけないことに注意が必要である。libraryを使うのは反則かも知れないので、library無しで、係数を求めるプログラムも書いてみた。

mat<-cbind(diag(1,10,4),-sapply(0:5,function(i)c(rep(0,i),cn)[1:10] ))
pqn<-solve(mat)%*%cn[-1]
pn<-c(cn[1],pqn[1:4,1])
qn<-c(1,pqn[5:10,1])
関数によっては、Taylor展開よりもPade近似の方が、良く合う場合があり、 Rで簡単に使えるようになったので、今後は使ってみよう。
Read more...

ドイツ語のocr

ウムラウトも大丈夫
ドイツ語の書類を読む必要があって、どうしようかと思ったが、スキャナーで取り込んで、OCRにかけて、google翻訳することにした。OCRソフトは、tesseractというのを使うと良いようなので、どのドイツ語対応のtesseract-ocr-deuをaptでインストールした。そして、スキャナで取り込んだpdfをpngに変換する。そして、tesseract -l deu+eng image.png tax-0 txtとしたら、それなりに認識してくれた。嬉しいのは、ウムラウトなどもきちんと認識してくれた点だ。ずいぶん前に別の方法でやった時には、ウムラウトやエスツェットが駄目で、手直しの必要があって苦労した覚えがある。画像が乱れているところは、うまく認識できない場合があったが、gimpで調整したら、読み取れるようになった。やはり、アルファベットは種類が少ないので、OCR向けかな。

Read more...