inkscpae 0.92.3-7 (in Manjaro) にcrash-snapパッチ適用

Manjaroのinkscape 0.92.3-7 がsnapをonにしているとやたら落ちる。論文用の図を作るにあたってイライラするので修正。Ubuntuのパッケージではパッチがあたっているのでそれを利用する。

ubuntuのレポジトリにあるinkscapeのソースからinkscape_0.92.3-4.debian.tar.xzをダウンロードする。debian/patches/upstream/tunkに入っているcrash-snap-lp1796046.patchを抜き出す。その後Arch LinuxのinkscapeのレポジトリからPKGBUILDとpoppler-fixes-from-master.patchを落としてきて同じディレクトリに入れる。

PKBUILDのsourceに’crash-snap-lp1796046.patch’を追加し、sha256sumsにチェックサムを記述したのちpatch -Np1 -i ../crash-snap-lp1796046.patchをprepare()に追加し、makepkg -sでコンパイルしてパッチを適用したパッケージを作成。sudo pacman -U inkscape*.pkg.tar.xz でインストール。

応物記事訂正

2018年3月号の応用物理学会誌に「金属チェッカーボードフィルムの臨界電磁応答とそのテラヘルツ波応用」の題目で研究紹介を書かせて頂きました。この中の図7の縦軸が間違っておりましたので、お詫びして以下のように訂正いたします。

図7(b), (c)で縦軸の”Amp. trans.”を”Normalized transmission”と訂正いたします。また、そのキャプションの”(b)|t_x|, (c)|t_y|”の部分を”(b)|t_x|^2, (c)|t_y|^2″といたします。(すなわち、引用元の原著論文のデータが正しいものです。)

論文を書くときは細心の注意を払っているのですが、間違いを0にするというのは本当に難しいです。今回はデータに関する部分なのでショックです。こういった記事を書くとき、途中から変な先入観ができてしまい、何度読んでもなかなか間違いを見抜けなくなる、ということがよくあります。期間をあけて見直す、たくさんの人達に読んで貰う、を続けるしかないのでしょうね。

VTK on Julia

JuliaでVTKのデータを扱いたかったのだが、Mohamed Tarek氏によるライブラリが公開されていた。こういうのを作ってくれるのは本当にありがたい。 VTKDataTypes.jlVTKDataIO.jlをPkg.cloneでインストールし、適当に依存関係を解決すれば使える。

たとえばVTKの矩形メッシュ上のデータは以下のようにすると読める:

using VTKDataTypes
using VTKDataIO

data = read_vtk("m000000.vts")

data. point_coordsがメッシュの座標データで、data.point_dataが辞書型のデータになっている。

Juliaのコンパイル with MKL

Juliaというスクリプト言語を数値処理に使いだした。速いし、線形代数ライブラリが整備されており使いやすい。今までMatlabが独占的だった数値計算用のスクリプト言語に新たな風を吹かせている。Intel CompilerなしでもビルドすればIntel MKLが使える。ただし、以下のようにコンパイルする必要がある(Julia v0.6 & Ubuntu 16.04のとき).

    1. Intel MKLをインストールしておく
    2. git で juliaのリポジトリをローカルにクローン
    3. Makefile.userを以下の内容で準備してjuliaのメインディレクトリに置く (最後はインストールディレクトリ)
      override USE_INTEL_MKL=1
      override USE_INTEL_LIBM = 0
      prefix=/home/hoge/julia
    4. そのまますると固有値計算のライブラリであるARPACKがうまくコンパイルできないので、以下をdeps/tools/common.mkに記述:

      ifeq  ($(USE_INTEL_MKL), 1)
      ifneq ($(USEIFC),1)
      USE_BLAS_FFLAGS += -ff2c
      endif
      endif
      

      参考:

    5. source /opt/intel/mkl/bin/mklvars.sh intel64 ilp64としてからmake -j4する
    6. make testallでコンパイル結果をチェックできる。
    7. ただし、cmdlineargs.jlの以下の箇所でエラーがでるが、解決できていない。あまり関係なさそうなので放置中。
      if !is_windows() && VersionNumber(Base.libllvm_version) > v"3.3"
      testdir = mktempdir()
      cd(testdir) do
      rm(testdir)
      @test success(`$exename -e "exit(0)"`)
      end
      end
      
    8. make installする

BST file for Physical Review Applied

Physical Review Applied用のBSTファイルが見つからないため自分で用意した。元ファイルはrevtex付属のapsrev4-1.bst。

修正箇所:

  • string.enquote内のbbl.enquote “{” * swap$ * “}” *をコメントアウト
  • control.titleを#1にセット (逆ポーランドなので’control.title :=のすぐ手前を修正)
  • apsrev4-1_custom.bstと保存し、\bibliographyの手前で\bibliographystyle{apsrev4-1_custom}で呼び出し

Ubuntu 14.04で印刷できなくなる

Ubuntu 14.04でカーネルを3.13.0-59にすると、なぜかAcrobatで印刷できなくなり困った。
また、他のソフトでも両面印刷ができなくなる。使用プリンタはHL-3170CDW。

sudo apt-get remove linux-headers-3.13.0-59 linux-image-3.13.0-59 

上のコマンドで元に戻すことで対応。

qnap TS-220 openssh コンパイル

サーバーとして、qnapのTS-220を使っているのだが、ディフォルトのsshはユーザーログインできない。かわりにipkgでopensshをインストールする場合が多いようだが、もはや保守もされておらず、バージョンが非常に古い。このため、opensshをコンパイルした。コンパイルオプションを見つけるまで時間がかかったのでメモしておく。以下のスクリプトでコンパイルできる。(TS-220はarmなので、それにあわせたコンパイルオプションが必要)

#!/bin/sh
## install Optware QPKG and required packages
#ipkg install gcc make perl sed gawk tar gzip bzip2 zlib mktemp
#export PATH=/opt/bin:/opt/sbin:$PATH

## grab the source
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2a.tar.gz # < heartbleed free
wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz
wget --no-check-certificate http://linux-pam.org/library/Linux-PAM-1.2.0.tar.bz2

## make temporary dir for dependencies (libpam headers and openssl)
## openssl will be compiled statically so you can remove this directory afterwards
DEPDIR=`pwd`/dist
mkdir -p $DEPDIR/usr/include

## we need only the PAM headers, we use QNAP's libpam.so
tar xjf Linux-PAM-1.2.0.tar.bz2
ln -s libpam.so.0 /lib/libpam.so
cp -r Linux-PAM-1.2.0/libpam/include/security/ $DEPDIR/usr/include || exit

## install openssl to DEPDIR
tar xzf openssl-1.0.2a.tar.gz
pushd openssl-1.0.2a
./Configure --prefix=/usr --openssldir=/etc/ssl --libdir=lib zlib no-asm linux-armv4 "-Wa,--noexecstack" || exit
make depend || exit
make || exit
make INSTALL_PREFIX=$DEPDIR MANDIR=/usr/share/man MANSUFFIX=ssl install || exit
popd

## build openssh
tar xzf openssh-6.8p1.tar.gz
pushd openssh-6.8p1
./configure --build=arm --prefix=/opt/openssh-6.8p1 --sysconfdir=/opt/etc/openssh\
 --with-ssl-engine --with-pam --with-md5-passwords --with-pid-dir=/opt/var/run\
 --with-ldflags=-L$DEPDIR/usr/lib --with-cflags=-I$DEPDIR/usr/include
make || exit
popd

## optionally install whole ssh to some dir
## or just copy sshd binary
#cp openssh-6.6p1/sshd ~
make install || exit
 
## optionally cleanup
#rm -fr Linux-PAM-1.2.0* openssh-6.8p1* openssl-1.0.2a* $DEPDIR

 この後に、/opt/etc/init.d/S42sshdを作成。

#!/bin/sh                                                     
                                              
if [ -f /opt/var/run/sshd.pid ] ; then
  kill `cat /opt/var/run/sshd.pid`    
else                                     
  killall /opt/openssh-6.8p1/sbin/sshd   
fi                                       
                                         
rm -f /opt/var/run/sshd.pid             
                                        
umask 077                                
                           
/opt/sbin/sshd

最後に/share/MD0_DATA/.qpkg/autorun/autorun.shに以下の記述を加えると良い。

#!/bin/sh
/opt/etc/init.d/S42sshd start

 参考: http://forum.qnap.com/viewtopic.php?f=11&t=97501 (非armバージョン)

 

LabVIEWでPID

LabVIEW Control Design and Simulation Moduleがあれば
LabVIEW PID Control ToolkitがなくてもPIDのコントローラが作れる。
(もちろん、速い制御は難しいが、温調のようなものなら簡単)
リアルタイムに積分や微分が可能である。
温調を作る場合はAnti reset windupをかけないと
飽和状態における積分動作が効きすぎてしまう。