いままで一生懸命(というほどでもないけど)\dfrac{\mathrm{d}}{\mathrm{d}t}とかやっていたのですが,\dv{t}一発でいくのですね。。。。
基本的には,\dv[n]{f}{x}のような使い方。
偏微分は\pdv[n]{f}{x}のように。
\dv{x}()も便利そう。
自然には,人智の及ばないところがあることを忘れないように…
いままで一生懸命(というほどでもないけど)\dfrac{\mathrm{d}}{\mathrm{d}t}とかやっていたのですが,\dv{t}一発でいくのですね。。。。
基本的には,\dv[n]{f}{x}のような使い方。
偏微分は\pdv[n]{f}{x}のように。
\dv{x}()も便利そう。
NIから 2023年4月27日に最新の情報が更新されましたが,相変わらずです。
macOS 13 (x86_64)と書いてあるので,intelチップのみの対応と考えられます。
まぁ,おそらくカーソルを合わせておかないと処理が極端に遅くなる問題にも対応できていないと思いますので,しばらくはlinux上で測定を進めます。
linuxもかなり便利になってきて,x11vncなどを使えばデスクトップを共有できるし,smb,最近ではgoogle driveにも対応できるので,しばらくはlinuxで不便は感じないかと。
昨日から今日で測定用のxubuntuをdo-release-upgradeして20.04から22.04にしました。
データを共有するためにsambaをインストール
$ sudo apt install samba
設定ファイル/etc/smb.confに以下を付け加える。
[<ユーザ名>]
path = /home/<ユーザ名>
browsable = yes
writable = yes
guest ok = no
read only = no
もちろん,<ユーザ名>のところは共有したいユーザ名。
最後に,パスワード設定
$ sudo smbpasswd -a username <ユーザ名>
求められるがままにパスワードを設定する。
その後,
$ sudo systemctl restart smbd nmbd
うまくアクセスできたら,起動時に有効になるように,
$ sudo systemctl enable smbd nmbd
あとは,macならFinderでコマンドキー+Kで移動メニューを表示して,smb://<ipアドレス>/<ユーザ名>へ接続。
先ほどのユーザ名とパスワードで接続できます。
Ubuntuにx11vncを入れる場合は,lightdmをインストールして云々とやる必要があるが,xubuntuはそもそもlightdmなのでその必要がない。
x11vncをインストールした後,パスワードファイルを生成する。
$ sudo x11vnc -storepasswd /etc/x11vnc.pass
[sudo] <username> のパスワード:
Enter VNC password:
Verify password:
Write password to /etc/x11vnc.pass? [y]/n y
Password written to: /etc/x11vnc.pass
その後,自動起動のためのファイルを作成。
~$ sudo vi /etc/systemd/system/x11vnc.service
内容はこんな感じ
~$ more /etc/systemd/system/x11vnc.service
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -noxrecord -noxfixes -noxdamage -rfbauth /etc/x11vnc.pass -forever -xkb -loop -shared -repeat -rfbport 5900 -o /var/log/x11vnc.log
[Install]
WantedBy=multi-user.target
起動はsystemctlで。
自動起動するためには,systemctlでenableを指定。
$ sudo systemctl enable x11vnc
Created symlink /etc/systemd/system/multi-user.target.wants/x11vnc.service → /etc/systemd/system/x11vnc.service.
無事リンクが貼られて自動起動の準備ができた模様。
確認する。
$ ls -l /etc/systemd/system/multi-user.target.wants/
合計 0
lrwxrwxrwx 1 root root 40 3月 14 18:48 ModemManager.service -> /lib/systemd/system/ModemManager.service
lrwxrwxrwx 1 root root 42 3月 14 18:48 NetworkManager.service -> /lib/systemd/system/NetworkManager.service
lrwxrwxrwx 1 root root 35 3月 14 18:48 anacron.service -> /lib/systemd/system/anacron.service
lrwxrwxrwx 1 root root 40 3月 14 18:48 avahi-daemon.service -> /lib/systemd/system/avahi-daemon.service
lrwxrwxrwx 1 root root 45 3月 14 18:48 blueman-mechanism.service -> /lib/systemd/system/blueman-mechanism.service
lrwxrwxrwx 1 root root 41 3月 14 18:48 console-setup.service -> /lib/systemd/system/console-setup.service
lrwxrwxrwx 1 root root 32 3月 14 18:48 cron.service -> /lib/systemd/system/cron.service
lrwxrwxrwx 1 root root 40 3月 14 18:48 cups-browsed.service -> /lib/systemd/system/cups-browsed.service
lrwxrwxrwx 1 root root 29 3月 14 18:48 cups.path -> /lib/systemd/system/cups.path
lrwxrwxrwx 1 root root 33 3月 14 18:48 dmesg.service -> /lib/systemd/system/dmesg.service
lrwxrwxrwx 1 root root 39 3月 14 18:48 grub-common.service -> /lib/systemd/system/grub-common.service
lrwxrwxrwx 1 root root 48 3月 14 18:48 grub-initrd-fallback.service -> /lib/systemd/system/grub-initrd-fallback.service
lrwxrwxrwx 1 root root 38 3月 14 18:48 irqbalance.service -> /lib/systemd/system/irqbalance.service
lrwxrwxrwx 1 root root 38 3月 14 18:48 kerneloops.service -> /lib/systemd/system/kerneloops.service
lrwxrwxrwx 1 root root 38 3月 14 18:48 lm-sensors.service -> /lib/systemd/system/lm-sensors.service
lrwxrwxrwx 1 root root 47 3月 14 18:48 networkd-dispatcher.service -> /lib/systemd/system/networkd-dispatcher.service
lrwxrwxrwx 1 root root 36 3月 14 18:48 ondemand.service -> /lib/systemd/system/ondemand.service
lrwxrwxrwx 1 root root 36 3月 14 18:48 pppd-dns.service -> /lib/systemd/system/pppd-dns.service
lrwxrwxrwx 1 root root 36 3月 14 18:48 remote-fs.target -> /lib/systemd/system/remote-fs.target
lrwxrwxrwx 1 root root 33 3月 14 18:48 rsync.service -> /lib/systemd/system/rsync.service
lrwxrwxrwx 1 root root 35 3月 14 18:48 rsyslog.service -> /lib/systemd/system/rsyslog.service
lrwxrwxrwx 1 root root 41 3月 14 18:48 secureboot-db.service -> /lib/systemd/system/secureboot-db.service
lrwxrwxrwx 1 root root 52 3月 14 19:04 snapd.aa-prompt-listener.service -> /lib/systemd/system/snapd.aa-prompt-listener.service
lrwxrwxrwx 1 root root 42 3月 14 18:48 snapd.apparmor.service -> /lib/systemd/system/snapd.apparmor.service
lrwxrwxrwx 1 root root 44 3月 14 18:48 snapd.autoimport.service -> /lib/systemd/system/snapd.autoimport.service
lrwxrwxrwx 1 root root 44 3月 14 18:48 snapd.core-fixup.service -> /lib/systemd/system/snapd.core-fixup.service
lrwxrwxrwx 1 root root 58 3月 14 18:48 snapd.recovery-chooser-trigger.service -> /lib/systemd/system/snapd.recovery-chooser-trigger.service
lrwxrwxrwx 1 root root 40 3月 14 18:48 snapd.seeded.service -> /lib/systemd/system/snapd.seeded.service
lrwxrwxrwx 1 root root 33 3月 14 18:48 snapd.service -> /lib/systemd/system/snapd.service
lrwxrwxrwx 1 root root 31 3月 14 19:21 ssh.service -> /lib/systemd/system/ssh.service
lrwxrwxrwx 1 root root 44 3月 14 18:48 systemd-resolved.service -> /lib/systemd/system/systemd-resolved.service
lrwxrwxrwx 1 root root 36 3月 14 18:48 thermald.service -> /lib/systemd/system/thermald.service
lrwxrwxrwx 1 root root 31 3月 14 19:04 tlp.service -> /lib/systemd/system/tlp.service
lrwxrwxrwx 1 root root 42 3月 14 18:48 ua-reboot-cmds.service -> /lib/systemd/system/ua-reboot-cmds.service
lrwxrwxrwx 1 root root 44 3月 14 18:48 ubuntu-advantage.service -> /lib/systemd/system/ubuntu-advantage.service
lrwxrwxrwx 1 root root 31 3月 14 18:48 ufw.service -> /lib/systemd/system/ufw.service
lrwxrwxrwx 1 root root 47 3月 14 18:48 unattended-upgrades.service -> /lib/systemd/system/unattended-upgrades.service
lrwxrwxrwx 1 root root 36 3月 14 18:48 whoopsie.service -> /lib/systemd/system/whoopsie.service
lrwxrwxrwx 1 root root 42 3月 14 18:48 wpa_supplicant.service -> /lib/systemd/system/wpa_supplicant.service
lrwxrwxrwx 1 root root 34 3月 14 20:14 x11vnc.service -> /etc/systemd/system/x11vnc.service
ちゃんと一番最後にいる。
ここで気付いたのですが,先ほどつくったx11vnc.serviceファイルは/etcじゃなくて/libの下に作るべきだったのかもしれません。
今までGtk+-2.0,gthread-2.0とCで書いていたGPIBを使った測定プログラム,さすがに時代遅れ感が否めないのでGtk+-3.0に書き換えました。
どうせ書き換えるならPythonにしてしまえばいいのですが,細かいことが気になってなかなか踏み切ることができずにいます。
その一つがリアルタイムグラフ表示。
Pythonでグラフといえばmatplotlibなのですが,いまいち遅い。
データ点がふえてきたときに負荷が大きくなる気がしています。
点が増えるたびにnumpyでいちいち丸ごとデータファイルから配列をつくって,プロットしたら測定して。。。を同じプロセスの中でやったら,測定まで遅くならないか心配で。
その点,今はCからパイプでgnuplotを呼び出して,別プロセスでグラフを書かせているので,たとえグラフ処理が遅くなったとしても,測定は別プロセスの別スレッドで回っているので,影響は少ないかと思っています。
それをpythonでやるならsubprocessをimportしてPIPEでgnuplotを呼び出して同じことをすればいいのですが,先人の知恵がないかとぐぐっていると,どうやらGnuplot.pyとかpy-gnuplotとか,そういったパッケージがあることを見つけたので,試してみました。
Gnuplot.pyは古かったので,py-gnuplotをためすことに。
環境としては,macOS BigSurとxubuntu22.04。
それぞれPythonのバージョンは3.10.9と3.10.6。
まずは
$ pip3 install py-gnuplot
でインストール。
% python3
Python 3.10.9 (main, Dec 15 2022, 18:33:08) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pygnuplot import gnuplot
>>> g=gnuplot.Gnuplot()
>>> g.cmd('plot sin(x)')
>>> g.cmd('set xlabel "Temperature [K]"')
>>> g.cmd('replot')
>>>
Pythonぽく使いたかったら,
>>> command='set ylabel "Resistance [Ohm]"'
>>> g.cmd(command)
>>> g.cmd('replot')
>>>
>>> g.cmd('set xlabel font "Arial,20"')
>>> g.cmd('set ylabel font "Arial,20"')
>>> g.cmd('set xtic font "Arial,16"')
>>> g.cmd('set ytic font "Arial,16"')
>>> g.cmd('replot')
>>>
環境はUbuntu 20 04.5
Python: 3.8.10
pip: 20.0.2
pip install pyvisaで実行しようとするも上手く動かない。
"Value Error: Could not locate a VISA implementation. Install either the IVI binary or pyvisa-py."
と言われる。どうやらpyvisa-pyを使わないといけない様子。
そこで言われた通り, pip install pyvisa-pyを実行してみる。
しかし,またimportまではできるものの,ResourceManagerを開こうとすると今度は
"NotImplementedError: Service discovery requires the zeroconf package to be installed."
と怒られる。
そこで素直にpip install zeroconf をして実行すると,今度は実行できるものの,以下のようにlist_resources()で大量の"libgpib: invalid descriptor"というエラーが。。。
しかし,サポートページによると,
とのことだったので,気にせず実行してみたところ大丈夫でした。
何度もやっているのでさらっとできると思い込んでいましたが,なんだかんだで5時間くらいかかってしまいました。
環境: Ubuntu 20.0405 LTS
GPIBアダプタ: NI USB HS+
まず,linux-gpibパッケージをインストール。
現時点でのバージョンはlinux-gpib-4.3.5。
ダウンロードして解凍すると,いままでと様子がちがう。。。。
新たにlinux-gpib-kernel−4.3.5.tar.gzとlinux-gpib-user-4.3.5.tar.gzという二つのファイルが現れた。
なんじゃこれと思いながら,まずは両方解凍。
READMEやらなにやら読むこと数分。
どうやらkernel関係のモジュールをmakeしたあとでuser以下の設定ファイル類をインストールするという手順らしい。
まずはkernel。
こちらは単にmakeしてsudo make installでオッケー。
次にuser。
linux-gpib-user-4.3.5ディレクトリに移動し,
$ ./configure --sysconfdir=/etc
$ make
$sudo make install
で完了。
次に,設定ファイル/etc/gpib.confを編集。
変えたのは一箇所だけ。
minor=0の次の行をboard_type = "ni_usb_b"になおすだけ。
ここにどんなtypeを入れればいいかは公式サイトに書いてある。
つづいて,groupの設定。
$ sudo groupadd gpib
でグループを作り,/etc/groupの最後の行に追加されたgpibの部分に以下のように自分のuser名を入れるだけ。
gpib:x:1001:<ユーザー名>
ここまでできたらシステムを再起動。
再起動後に,
$ sudo /usr/local/sbin/gpib_config
を実行する。
これはどうやら私の環境では毎回やらないとダメかもしれない。
udevの設定がうまくできればやらなくていいはず。
これで完成。
2023/03/15追記
上の手順の最後,
$ sudo /sbin/ldconfig
を忘れると,
error while loading shared libraries: libgpib.so.0: cannot open shared object file: No such file or directory
とか言われます。