RUPC2019参加記
写真はない 記憶もあんまりない
-82日目
- 学会で知り合った @medalotte さんが最近競技プログラミングを始めたと言ってるのでRUPCに誘う 行けたら行くって言ってた気がする
1日目
- @medalotte さんと再開する
- @Pulmn さんと @medalotte さんと組む
- Bを読む。なるほど関数定義して再帰的に呼び出せばいいねなどとプチ迷走をするがすぐにまともで確実な解法を書いてACする。
- Dを読む。再帰的なウニをつくるとO(logN)で正解できると考える。Plumnさんが空いたところで解法を共有するとよさそうと言ってくれたので実装してみる。
- すごくバグって困る。Plumnさんが介護してくれて時間ギリギリでなんとかACする。
- あとできいたらbitが立っているかどうかわかるようにグラフをつくると楽だときいて感心する。
- 初参加のmedalotteさんにちゃんと気を使おうと思っていたのにDで盛り上がってしまってちょっと反省する。
- 懇親会でmedalotteくんと話す。何を話したかは覚えていない。適当に知らない人に話しかけたりもする。何を話したかは覚えていない。
2日目
- @kyuridenamida さんと @nomikura さんと組む
- Aを解く。
'A' + (max_element(A.begin() + A.end()) - A.begin())
する。 - Dを読む。サンプルをみると自分の解釈と合わなくて困る(整数要素は見逃さなかった)。会津セット日本語が最悪だ、まあ僕が文章校正してないからねとイキる。実は日本語もサンプルも間違っておらず、誤読もしていなかった(サンプル1がちょっと特殊?で、上辺を超えて線を引いたほうが最適だったっぽい)。これ多分ヤバイっすよとチームに共有して、飛ばす。後にnomiさんがsampleの全探索をしてくれて、問題がおかしくないことを確認しACしてくれた。
- いろいろよむがわからないなぁをやっていたところkyuriさんがGがgrundyで解けそうなんだけどgrundy解いたことあれば実装してほしいと言ってくれる。grundyはB2くらいのころに教わって証明もどきをやって解いたことがあったので、自信満々で任せられる。が、完全に忘却していたので結局kyuriさんに実装を教えてもらいながらAC。恥ずかしかった。
- Jが本質高校物理っぽいので成績優秀者としても解きたいなぁと思う。kyuriさんが後半はむずかしい区間スケジュールであることを考察してくれたので、kyuriさんにそっちを任せ、僕は高校物理をやる。5回くらい式を間違えてバグらせたが、終わり間際でなんとかサンプルが合って提出する。WA。聞いたところ本質は誤差なんだって。hajiくんがEPS=2e-8とかにすると通るよとか教えてくれる。通らなかったけど。
- 懇親会はよく覚えていない。グラスにいっぱい注いだハイボールがほぼストレートだったことは覚えている。
3日目
- @ferinさんと@shiroさんと組む。
- Bを読む。i番目の入力でそれ以左の括弧列はきまるから頑張って場合分けをするといいのかななどと考えていた。ferinさんに解法を共有すると、もう少しかんたんにできそうだと考えてくれて、最終的にstackでやるやつを教わる。何度かバグらせferinさんのお世話になりながらもACする。
- 終わったところでferinさんにDの考察を教えてもらい、実装したかったので実装させてくださいという。教えてもらったものを理解できてなかったようでやたら迷走したが、最終的にはferinさんに付き添ってもらってAC。
- ferinさんがEを解く。時間もあまりなかったし解けそうな問題もなかったので眺めていた。ローリングハッシュとか使ったことないなあと思いながら眺めているも、時間切れ。
まとめ
今年は忙しくてなかなか原案を出せず、ひねりだした原案もhajiくんに「つまんな」と言われ結局コンテスタントとして参加しました。作問できなかったのはちょっと心残りではありましたが、競プロは楽しいねと言うのを再確認できた合宿だったと思います。
定番WMなし、qtileでラップトップをいい感じに使う
Environments
ボタン・ふたでSuspend
/etc/systemd/logind.conf
の [Login]
中の項目を設定。Linux Man Pages: logind
$ cat /etc/systemd/logind.conf [Login] HandlePowerKey=suspend HandleLidSwitch=suspend
Suspend時にロック
screen lockにi3lockを使う。i3lockを起動するsystemd unitでbeforeを指定する。
$ cat /lib/systemd/system/wakelock.service [Unit] Description=Lock the screen on resume from suspend Before=sleep.target suspend.target [Service] User=YOUR USER NAME Type=forking Environment=DISPLAY=:0 ExecStart=/usr/bin/i3lock [Install] WantedBy=sleep.target suspend.target $ systemctl daemon-reload $ systemctl enable wakelock.service
suspend 一定時間後 hibernate
以前はここにpm-utilsを使用する方法を書いていたが、動かなかったのでsystemdを使うようにする。i3lock 2.8 (debian 9のリポジトリから手に入るもの) だとハイバネート復帰後カーネルパニックを起こしたので、 2.12を使うようにしたところうまく動いている模様。
$ cat /usr/sbin/delayed_hibernate.sh #!/bin/bash TIMELOG=/tmp/autohibernate.log ALARM=$(tail -n 1 $TIMELOG) SLEEPTIME=10 #edit this line to change timer, e.g. 2 hours "$((2*60*60))" if [ $1 == "resume" ] then if [ $(date +%s) -ge $(( $ALARM + $SLEEPTIME )) ] then echo "hibernate triggered $(date +%H:%M:%S)">>$TIMELOG systemctl hibernate 2>> $TIMELOG else echo "normal wakeup $(date +%H:%M:%S)">>$TIMELOG fi elif [ $1 == "suspend" ] then echo "$(date +%s)" >> $TIMELOG /usr/sbin/rtcwake -m no -s $SLEEPTIME fi
$ cat /lib/systemd/system/delayedhybernate.service [Unit] Description=Delayed hibernation trigger Before=suspend.target Conflicts=hibernate.target hybrid-suspend.target StopWhenUnneeded=true [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/delayed_hibernate.sh suspend ExecStop=/usr/sbin/delayed_hibernate.sh resume [Install] WantedBy=sleep.target RequiredBy=suspend.target
i3lockなしなら問題なく動くが、(おそらく)i3lock追加後にhibernate復帰すると下記メッセージが現れる。
Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913130] Uhhuh. NMI received for unknown reason 2c on CPU 0. Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913135] Do you have a strange power saving mode enabled? Message from syslogd@debian-thinkpad at Jan 3 08:36:00 ... kernel:[ 1079.913138] Dazed and confused, but trying to continue
WLanの情報をBottom Barに
WLANじたいはwicdで管理している。 - pythonのiwlibのビルドのためlibiw-devをいれる - pipでiwlibをいれる
$ sudo apt install libiw-dev $ pip3 install iwlib
うごかん (N/A)
BacklightをFunction Keysで
xbacklightが動かないのでバックライトデバイスのsysfsを直接編集するようにする。はじめは一般ユーザで書き込めないので、それを変更するudevルールを書く。 https://wiki.archlinux.org/index.php/backlight 今回の場合はデバイスがacpi_video0ではなくintel_backlightなのでそこを置換する(このあたりの意味がよくわかっていない)。
cat /etc/udev/rules.d/99-backlight.rules ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness" ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
あとはqtile configを書く。現在値を読み込みそれにある程度値を足して再度書き込むコマンドを作る。
echo $((`cat /sys/class/backlight/intel_backlight/brightness`+10)) | tee sys/class/backlight/intel_backlight/brightness
lazy.spawn()
にこれを書けばいいのかと思ったがうまくごかない。ttyが割り当てられていなくてパイプが機能しないのだろうか(わからない)。同コマンドをファイルにして/usr/local/binに起き、+xしてlazy.spawn()の引数に書く。
低バッテリでhibernate
たぶんこれ (未検証) 2019-08-02追記: うごいてないのを確認。udevadmでちゃんと見てコンフィグを書く
https://wiki.archlinux.org/index.php/laptop#Hibernate_on_low_battery_level
バッテリチェックするスクリプトを作る
$ cat /usr/local/bin/hibernateonlowbattery.sh #!/bin/sh acpi -b | awk -F'[,:%]' '{print $2, $3}' | { read -r status capacity if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then logger "Critical battery threshold" systemctl hibernate fi }
systemd.timer にあずける
$ cat /lib/systemd/system/hibernateonlowbattery.service [Unit] Description=Hibernate when low battery [Service] Type=oneshot ExecStart=/usr/local/bin/hibernateonlowbattery.sh
$ cat /lib/systemd/system/hibernateonlowbattery.timer [Unit] Description=Hibernate when low battery [Timer] OnBootSec=10min OnUnitActiveSec=2min Persistent=false [Install] WantedBy=timers.target
Fonts
Noto Fontsをインストール
packageにあるものはaptでインストール (Sans CJKはある)
sudo apt install fonts-noto*
ないものはGoogleからダウンロードインストール
~/.fonts.conf
を編集 (Seeman fonts-conf
)
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration --> <fontconfig> <!-- <match target="scan"> <test name="family"> <string>Noto Color Emoji</string> </test> <edit name="scalable" mode="assign"> <bool>true</bool> </edit> <edit name="pixelsize" mode="assign"> <double>18</double> </edit> </match> <match> <test name="family"><string>sans-serif</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> <match> <test name="family"><string>serif</string></test> <edit name="family" mode="assign" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> <match> <test name="family"><string>Apple Color Emoji</string></test> <edit name="family" mode="assign" binding="strong"> <string>Noto Color Emoji</string> </edit> </match> --> <alias binding="strong"> <family>emoji</family> <default><family>Emoji One</family></default> </alias> <alias> <family>sans</family> <prefer> <family>Noto Sans CJK JP</family> </prefer> </alias> <alias> <family>serif</family> <prefer> <family>Noto Serif CJK JP</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer> <family>Noto Sans CJK JP</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>DejaVu Sans Mono</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer><family>Noto Color Emoji</family></prefer> </alias> </fontconfig>
fc-cache -f
Trackpoint
速度を早める
TL;DR
systemdのpathexistsでなんとかする
以下udevによるものは間違い
$ cat /etc/udev/rules.d/10-trackpoint.rules ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="psmouse", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{sensitivity}="255", ATTR{speed}="255"
ruleのかきかた
trackpointのデバイスを探す。/dev/input/mouse{0,1,2,3}
に割り当たっていることが予想ついたので udevadm info -q path -n /dev/input/mouse{0,1,2,3}
して/sys以下の記述を探し、devadm info -a -p ${syspath}
になげ、trackpointという記述があるところを探す。つまり、 udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse{0,1,2,3})
の中でtrackpointと名前がつくものを探す。今回はmouse2がtrackpointだったので、udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse1)
とする。
↑で出てきた情報でデバイスを絞り込むキーを絞る。KERNELS, SYSSYSTEMS, DRIVERS, ATTRS{name}で絞り込めそうだと判断したので、ruleファイルの条件部にそれをかく。sensitivityとspeedを調整したいので、それを書き込む。
Touchpad
タッチでクリック、感度最大
libinputを使う。xinputから設定できる項目を確認。
$ xinput list ⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
id=13なので、
$ xinput list-props 13
libinput Tapping Enabled
あたりかなとあたりをつける
man libinput
と man xorg.conf
を読むなどして、/etc/X11/xorg.conf.d/99-libinput-custom-config.conf
に
Section "InputClass" Identifier "TouchPad" MatchDriver "libinput" MatchProduct "TouchPad" Option "Tapping" "yes" Option "TappingDrag" "yes" Option "AccelSpeed" "1.0" Option "AccelProfile" "flat" EndSection
NVIDIAのGPUとドライバが入ったLinux (Debian) マシン上でrvis (ROS kinetic) をDockerを介して実行する
[注: 未解決]
環境
- Debian Stretch (GNU/Linux 4.9.0-8-amd64)
- 01:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 710B] (rev a1)
問題
Dockerを介してrviz (おそらくopenGLを使うアプリケーション全て) をウィンドウを使いつつ表示させるにはいろいろ必要条件がある
やったこと
nvidia-dockerを使うようにした (1) (3)
基本的には (3) の通り。ROS用にDockerfileを書き換えた。
FROM ros:kinetic-ros-base ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all} ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics RUN apt update && apt install -y \ x11-apps \ mesa-utils \ gdb \ ros-kinetic-rviz CMD ["rosrun", "rviz", "rviz"]
docker run --runtime=nvidia --rm -it --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" --net host -e QT_X11_NO_MITSHM=1 -e DISPLAY=$DISPLAY -v $HOME/.Xauthority:/root/.Xauthority -v /tmp/.X11-unix/:/tmp/.X11-unix/ ros-rviz /bin/bash
--cap-add=SYS_PTRACE --security-opt="seccomp=unconfined"
はGDBによるデバッグに必要らしい(プログラムアドレスがセキュリティの関係でいじられるのを防ぎtrace出来るようにするらしい)。
-e QT_X11_NO_MITSHM=1
はX Error: BadAccess [...]
が出るのでつけた (4)。
しかしnvidia-docker2を使い始めた途端コンテナがinitialization error: driver error: failed to process request\\\\n\\\"\"": unknown.
で起動しない。
NVIDIAのドライバを入れ直した (2)
(2)を参考に、sudo nvidia-container-cli -k -d /dev/tty info
の結果が良くなかったのでホストのドライバが良くないと判断。以前はNVIDIAのページから得られる.runからインストールした。aptでnvidia-driversをinstall(推奨されません)。xserver-xorg-video-nvidia
がdependenciesを崩すというので手動で依存解決(aptするだけ)。いろいろ消えると言われるがこの頃は完全にしんどくなっていたのでとりあえずY。rebootしてXを起動すると入力機器が何も受け付けなくなった。(5)を参考にxserver-xorg-input-all
のインストールで解決した。
コンテナは起動した。しかし
# ROS_MASTER_URI=http://xxx:11311 rviz [ INFO] [1549507151.920337704]: rviz version 1.12.16 [ INFO] [1549507151.920376105]: compiled against Qt version 5.5.1 [ INFO] [1549507151.920386034]: compiled against OGRE version 1.9.0 (Ghadamon) libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface. libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Segmentation fault (core dumped)
# ROS_MASTER_URI=http://163.143.94.197:11311 gdb rviz GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from rviz...(no debugging symbols found)...done. (gdb) r Starting program: /opt/ros/kinetic/bin/rviz [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7fffdda6f700 (LWP 85)] [ INFO] [1549507206.675844716]: rviz version 1.12.16 [ INFO] [1549507206.675877843]: compiled against Qt version 5.5.1 [ INFO] [1549507206.675886056]: compiled against OGRE version 1.9.0 (Ghadamon) [New Thread 0x7fffdce4e700 (LWP 86)] [New Thread 0x7fffd7fff700 (LWP 87)] [New Thread 0x7fffd77fe700 (LWP 88)] [New Thread 0x7fffd6ffd700 (LWP 89)] [New Thread 0x7fffc3fff700 (LWP 91)] [New Thread 0x7fffc37fe700 (LWP 92)] [New Thread 0x7fffc2ffd700 (LWP 93)] [New Thread 0x7fffc27fc700 (LWP 94)] libGL error: No matching fbConfigs or visuals found [Thread 0x7fffc27fc700 (LWP 94) exited] [Thread 0x7fffc2ffd700 (LWP 93) exited] [Thread 0x7fffc37fe700 (LWP 92) exited] [Thread 0x7fffc3fff700 (LWP 91) exited] libGL error: failed to load driver: swrast Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface. [New Thread 0x7fffc27fc700 (LWP 95)] [New Thread 0x7fffc2ffd700 (LWP 96)] [New Thread 0x7fffc37fe700 (LWP 97)] [New Thread 0x7fffc3fff700 (LWP 98)] libGL error: No matching fbConfigs or visuals found [Thread 0x7fffc3fff700 (LWP 98) exited] [Thread 0x7fffc37fe700 (LWP 97) exited] [Thread 0x7fffc2ffd700 (LWP 96) exited] [Thread 0x7fffc27fc700 (LWP 95) exited] libGL error: failed to load driver: swrast Thread 1 "rviz" received signal SIGSEGV, Segmentation fault. 0x00007ffff354a6b4 in glXCreateContext () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (gdb) bt #0 0x00007ffff354a6b4 in glXCreateContext () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 #1 0x00007ffff7ad5600 in rviz::RenderSystem::setupDummyWindowId() () from /opt/ros/kinetic/lib/librviz.so #2 0x00007ffff7ad9712 in rviz::RenderSystem::RenderSystem() () from /opt/ros/kinetic/lib/librviz.so #3 0x00007ffff7ad9a05 in rviz::RenderSystem::get() () from /opt/ros/kinetic/lib/librviz.so #4 0x00007ffff7ad4dc1 in rviz::QtOgreRenderWindow::QtOgreRenderWindow(QWidget*) () from /opt/ros/kinetic/lib/librviz.so #5 0x00007ffff7afb949 in rviz::RenderPanel::RenderPanel(QWidget*) () from /opt/ros/kinetic/lib/librviz.so #6 0x00007ffff7b47160 in rviz::VisualizationFrame::initialize(QString const&) () from /opt/ros/kinetic/lib/librviz.so #7 0x00007ffff7b52509 in rviz::VisualizerApp::init(int, char**) () from /opt/ros/kinetic/lib/librviz.so #8 0x0000000000400c90 in main ()
NVIDIA DriverをDocker Imageにもインストール
ここでindigoのイメージだとちゃんとrvizがうごくことを確認する。
kineticの方で、GDBの結果とldconfig -p | grep -i gl.so
の結果から、mesaのlibGL.soが良くないと思い綺麗なubuntuイメージにnvidia drivers nvidia-384
をインストール (mesaとかOpenGLとかNvidiaとかの関係は(6)を読むとわかりそうだがまだちゃんと読んでない)。
Dockerfile
FROM ubuntu:16.04 ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all} ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics RUN apt update && apt install -y expect COPY nvidia-expect.exp / RUN expect /nvidia-expect.exp RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' RUN apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 RUN apt update RUN apt-get install ros-kinetic-desktop-full -y CMD ["rosrun", "rviz", "rviz"]
nvidia-expect.exp
#!/usr/bin/env expect set timeout -1 spawn apt-get install -y nvidia-384 expect { "\\\[More\\\]" { send "\n"; exp_continue; } "Country of origin for the keyboard: " { send "29\n"; } } expect { "\\\[More\\\]" { send "\n"; exp_continue; } "Keyboard layout: " { send "1\n" } } expect eof
これで、 docker runしrvizを実行する。
# ROS_MASTER_URI=http://xxx:11311 rviz [ INFO] [1549507833.199991200]: rviz version 1.12.16 [ INFO] [1549507833.200033889]: compiled against Qt version 5.5.1 [ INFO] [1549507833.200045286]: compiled against OGRE version 1.9.0 (Ghadamon) [...] [ WARN] [1549507834.409556933]: OGRE EXCEPTION(2:InvalidParametersException): Window with name 'OgreWindow(1)' already exists in GLRenderSystem::_createRenderWindow at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/OgreGLRenderSystem.cpp (line 1057) rviz::RenderSystem: error creating render window: OGRE EXCEPTION(2:InvalidParametersException): Window with name 'OgreWindow(1)' already exists in GLRenderSystem::_createRenderWindow at /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/RenderSystems/GL/src/OgreGLRenderSystem.cpp (line1057) [ERROR] [1549507834.409586881]: Unable to create the rendering window after 100 tries. Segmentation fault (core dumped)
(gdb) bt #0 0x00007ffff7ad4e85 in rviz::QtOgreRenderWindow::QtOgreRenderWindow(QWidget*) () from /opt/ros/kinetic/lib/librviz.so #1 0x00007ffff7afb949 in rviz::RenderPanel::RenderPanel(QWidget*) () from /opt/ros/kinetic/lib/librviz.so #2 0x00007ffff7b47160 in rviz::VisualizationFrame::initialize(QString const&) () from /opt/ros/kinetic/lib/librviz.so #3 0x00007ffff7b52509 in rviz::VisualizerApp::init(int, char**) () from /opt/ros/kinetic/lib/librviz.so #4 0x0000000000400c90 in main ()
ちなみにここでglxgears
すると正常に動いているっぽい(fpsがstdoutに出てる)が描画が正常じゃない(真っ黒)。
TODO
docker/Tutorials/GUI - ROS Wiki のSimple Way以外を試す
感想
わからん
References
(2):
(1):
(3):
(4): github.com
(5): askubuntu.com
(6):
Vapeに入門したまとめ
はじめに
ストレスでタバコに手を出しそうになったがグッとこらえてvapeをはじめた。最近2本目としてfog1を買ったが、その際種類がいろいろあって悩んだのでメモ。
vapeとは
そもそもタバコはタバコ葉を燃焼させその際生成される物質を吸引するもの*1。この際一緒に発生するタールやニコチン、一酸化炭素などが最近しばしば危険だと言われている。
vape(電子タバコとも言う、加熱式タバコとは違う)*2 は原料から違って、プロピレングリコール(PG)とベジタブルグリセリン(VG)、それと香料が原料。PGとVGは加熱して蒸気を発生させるために含有されており*3、香料は名前の通り香りづけのために含有されている。PGとVGはコンサートでの演出のためのスモークに使われるものと同じであるとのこと*4。この加熱のためにコイルに電流を流し発熱させるから"電子"たばこと呼ばれているものと考えられる。
vapeはおおまかにバッテリ(MODともいうらしい)、アトマイザ(リキッドが入る容器)、吸い口、コイルで構成されている*5。左citationの画像がわかりやすい。
vapeは形状でおおよそ3種類に分類されている: タバコタイプ、ペンタイプ、ボックスタイプ*6。タバコタイプは名前の通りタバコのような細長い円筒形をしている。ペンタイプは形状はタバコタイプと似ているものの若干太い。ボックスタイプは円筒と直方体がつながった形をしている。直方体(ボックス)部はたいていバッテリー。
はじめのvape
最初はflevo*7を買った。理由としては、タバコっぽい形のほうがかっこいいだろうというのと、あとスターターキットが1000円以内で安いから。Amazonで買った。Dr.VAPEも視野に入れていたがスターターキットが7000円とちょっと高かったのでやめた。リキッドはタバコフレーバ、メンソール、ビタミンベリーを試した。メンソールはそこそこ好きだったがタバコフレーバとビタミンベリーは甘みが苦手だった。特にビタミンベリーは(吐き気ほどではないが)きもちわるくなることもあった。甘いものが嫌いなわけではないが。機械によって味が変わることを知らなかったことと、初めてだったこともあり満足していたが、のちにfog1を買ってこれの味が弱いことに気づく。
2本目のvape
つぎにJustfogのfog1*8をvapelogで買った。味がよいという記事をたくさん見つけたのが決めて*9*10。べプログショップで買った。 実際に使ってみると、(FLEVOと比べて)味は濃いし煙も多い。FLEVOではわざわざ煙を鼻に通して香りを楽しんでいたが、fog1はそんなことをしなくても口に煙を入れるだけでなんとなく味がするし、肺で吸うときに喉で煙を感じられる。FLEVOとは全然違った。 不満として、リキッドを変更するのが面倒くさいということがある。というのも、*11でも言っているように、アトマイザが一体型(アトマイザのみでリキッドを保持できない)ので、リキッドが残っている状態で別のアトマイザに交換する、ということができない。初めて買ったまともなvapeであり、いろいろな味を試してみたかったので、これは気に入らない。
試したリキッド
タバコクラシック
甘いけどそんなに嫌いではない。これがたばこ味なのかはわからない (MarlBoroしか吸ったことはないが、MarlBoroとは似ていない) タバコクラシック【Sarome Tokyo(サロメトウキョウ)】 | ベプログショップ
Coe de Sex on the Beach
パイナップル味。甘くて苦手。 Coe de Sex on the Beach【小江戸工房(コエドコウボウ)】 | ベプログショップ
ドライハードメンソール
味はない、ちょっと苦い味がするかも。メンソールは強烈。はじめは喉にしびれる刺激が来る(今はなんとも感じなくなった)。鼻にたくさん通すとキツい。カフェイン含有。肺からカフェイン摂取できるので効きそう。 【ベプリキ】ドライハードメンソール 15ml | ベプログショップ
次に買おうと思っている奴
つぎはbox型のやつで、アトマイザが独立しているやつを買おうと思っている。
*1:JT, '紙巻たばこ(シガレット)', Available: https://www.jti.co.jp/tobacco/knowledge/variety/cigarette/index.html, [Accessed: 28-Aug-2018].
*2:JT, '電子タバコ', Available: https://www.jti.co.jp/tobacco/knowledge/variety/electronic_cigarette/index.html, Accessed: 20-Aug-2018
*3:価格.comマガジン, '電子タバコ「VAPE(ベイプ)」って何だ? 初心者向けモデルはコレ! 「アイコス」との違いは?', Available: https://kakakumag.com/hobby/?id=10918, [Accessed: 28-Aug-2018]
*4:価格.comマガジン, '電子タバコ「VAPE(ベイプ)」って何だ? 初心者向けモデルはコレ! 「アイコス」との違いは?', Available: https://kakakumag.com/hobby/?id=10918, [Accessed: 28-Aug-2018]
*5:VAPE-MASTER, 'VAPE電子タバコの構造/煙の仕組み/各パーツ名の初心者向け解説 | VAPEMASTER', Available: https://vape-master.jp/construction/, [Acessed: 28-Aug-2018
*6:べプログショップ, 'ベプログショップ | 初めての電子タバコの選び方', Available: https://vapelog.jp/shop/user_data/beginner_choose.php, [Accessed: 28-Aug-2018]
*7:dmm.com, 'FLEVO | FLEVO公式サイト', Available: https://www.dmm.com/top/special/flevo/, [Accessed: 28-Aug-2018]
*8:Justfog, 'Justfog – FOG1 Kit', Available: http://www.justfog.com/?avada_portfolio=fog1-kit, [Accessed: 28-Aug-2018]
*9:スキクエ, 'VAPEスタータキットで迷う?これがおすすめ!Fog1最強キットを徹底レビュー | スキクエ', Available: https://www.sukima-desuyo.com/entry/vape-fog1, Accessed: [28-Aug,2018]
*10:No.1VAPE, '【メンソールでも大丈夫】味を濃厚に感じる「FOG1」を2ヶ月使ってみた感想', Available: http://marauders.jp/fog1/, Accessed: [28-Aug-2018]
*11:No.1VAPE, '【メンソールでも大丈夫】味を濃厚に感じる「FOG1」を2ヶ月使ってみた感想', Available: http://marauders.jp/fog1/, Accessed: [28-Aug-2018]
debian stretch on thinkpadでtrackpoint sensitivityを永続化
tl;dr
systemdでファイル監視するやつが動かず、udevにルールを追加することでうごいた
xinput --list
... ↳ TPPS/2 IBM TrackPoint ...
cat /etc/udev/10-trackpoint.rules
ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/sensitivity}="200", ATTR{device/press_to_select}="1"
ATTR{device/press_to_select}="1"はsensitivityには関係ないと思う。ところでこれを書いているにもかかわらずtrackpadがpressでセレクトできない。消して試したいがめんどうになって諦めた。
やったこと
systemdのファイル監視でfdに書き込む
cat /lib/systemd/system/trackpoint.path
[Unit] Description=Watch for, and modify, Trackpoint attributes [Path] PathExists=/sys/devices/platform/i8042/serio1/serio2/sensitivity [Install] WantedBy=default.target
cat /lib/systemd/system/trackpoint.service
[Unit] Description=set trackpoint sensitivity [Service] ExecStart=/usr/local/bin/trackpoint_sensitivity.sh
cat /usr/local/bin/trackpoint_sensitivity.sh
(実行権限あり)
#!/bin/bash echo -n 250 | tee /sys/devices/platform/i8042/serio1/serio2/sensitivity
考察
そもそもserviceが呼び出されていなさそう(trackpoint_sensitivity.shにecho "test" > /home/xxx/test.txtでtest.txtはできなかった)
udevにルール追加(動かない版)
cat /etc/udev/rules.d/10-trackpoint.rules
KERNEL=="serio2", SUBSYSTEM=="serio", DRIVERS=="psmouse", ATTR{sensitivity}:="180", ATTR{speed}:="150"
udevadm info -a -p /sys/devices/platform/i8042/serio1/serio2/
Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/platform/i8042/serio1/serio2': KERNEL=="serio2" SUBSYSTEM=="serio" DRIVER=="psmouse" ATTR{bind_mode}=="auto" ATTR{description}=="Synaptics pass-through" ATTR{draghys}=="255" ATTR{drift_time}=="5" ATTR{ext_dev}=="1" ATTR{firmware_id}=="" ATTR{inertia}=="6" ATTR{jenks}=="135" ATTR{mindrag}=="20" ATTR{press_to_select}=="1" ATTR{protocol}=="TPPS/2" ATTR{rate}=="100" ATTR{reach}=="10" ATTR{resetafter}=="5" ATTR{resolution}=="200" ATTR{resync_time}=="0" ATTR{sensitivity}=="240" ATTR{skipback}=="0" ATTR{speed}=="97" ATTR{thresh}=="8" ATTR{upthresh}=="255" ATTR{ztime}=="38" looking at parent device '/devices/platform/i8042/serio1': KERNELS=="serio1" SUBSYSTEMS=="serio" DRIVERS=="psmouse" ATTRS{bind_mode}=="auto" ATTRS{description}=="i8042 AUX port" ATTRS{firmware_id}=="PNP: LEN0058 PNP0f13" ATTRS{protocol}=="SynPS/2" ATTRS{rate}=="80" ATTRS{resetafter}=="5" ATTRS{resolution}=="200" ATTRS{resync_time}=="0" looking at parent device '/devices/platform/i8042': KERNELS=="i8042" SUBSYSTEMS=="platform" DRIVERS=="i8042" ATTRS{driver_override}=="(null)" looking at parent device '/devices/platform': KERNELS=="platform" SUBSYSTEMS=="" DRIVERS==""
考察
ようわからんがうごかない