ひとはなぜ bibtex を打ち忘れ,参考文献がすべて[?]になったゴミPDFを作ってしまうのか…

TL;DR: LaTeXからのPDF生成は,Makefile などを使って自動化しましょう

背景:LaTeXを使って多少学術っぽい文書を書いていると参考文献をつけたくなります.一つの分野を数年以上勉強していると,参考文献のデータなども使いまわしたくなることでしょう.このようなときに bibtex という仕組みが用意されており,texlive を導入すると自動的にこのツールもインストールされます.(bibtex がなにかとか,*.bib ファイルの書き方については各自 chat AI にでも聞いてください.)しかしながら,普通にPDFを生成するだけでは bibtex が呼ばれません.そして,呼ぶのを忘れてPDFを生成すると,\cite{} で指定した参考文献へのリンクがすべて[?]になってしまうという恥ずかしいことになります.

解決法:「何かをするまえに必ずチェックしなければならないこと」に対する対策は昔から知られています.「ルーチン化」と「自動化」です.ルーチン化は,たとえば特定の作業のための定形チェックリストを用意して,一人が「ロボットの電源遮断,よーし」と口に出しながらチェックマークを入れ,もう一人がそれを確認する,というような手順です.作業そのものが危険だったり,確認を怠ると人命や多額の損害が発生する場面ではこのようなことをします.まあ今回はその話ではありません.今回話したいのは自動化です.多人数で編集する本格的な文書の場合はCIツールなどを使うのでしょうが,個人レベルでは例えば次のようなMakefileを使うということが考えられます:

.PHONY : build

build :  myTexFile.tex  reference.bib
    mkdir -p cluts
    cp -f reference.bib cluts
    cluttex --engine=lualatex --bibtex='upbibtex -kanji=utf8' --output-directory='./cluts' -o output.pdf -- myTexFile.tex

唐突に cluttex というコマンドが出てきましたが,これも texlive に収録されたツールで,コンパイル時に生成される aux だの log だのというファイルを一箇所にまとめてくれます.詳しいことは cluttex --help などして調べてください.

電動ドライバーに回転砥石をつけたら包丁が研げて優勝した話

概要: 記事タイトルの通り,電動ドライバーに回転砥石をつけると包丁が楽に研げて優勝できます.

背景: 自炊をしている人がご存知の通り,包丁はどんどん切れなくなってきます.包丁の切れ味が悪くなると「トマトとモッツァレラチーズがあるからカプレーゼでも作るか」と思ってもトマトがぐしゃっと包丁の下で潰れ「誰もお前を愛さない」状態になってしまいます.そこで包丁を研げばいいわけです.もちろん安い包丁用砥石は1000円くらいからありますが,資本主義の鬼なのでもっと値切りたくなりました.

ふと,電動ドライバーに回転砥石をつけてそれで包丁を研げばいいのではないかと思いました.どこのご家庭にも一台はある,ボッシュやマキタの電動ドライバーを使うわけです.アマゾンで「BIGMAN(ビッグマン) 六角軸付砥石 ステンレス用 円筒20×38ミリ D-835」ってやつを見つけました.572円でした.

この砥石を水に漬けてから電動ドライバーに取り付け,包丁を研いでみました.するとトマトもスパスパ切れて,カプレーゼが捗りました.優勝です.もう少し真面目にやるなら刃物用の防錆油に砥石を漬けたほうがいいんでしょうけど,ベタベタするし,まあね?

他の注意点としては,あまり回転数をあげないほうがいいよというのはあります.それから,万一回転してるときに何かにガツンと当たって砥石が割れてかけらが目に入ると悲惨なので防護メガネはしたほうがいいですね.

おしまい.

【ROS】「deprecated pixel format used, make sure you did set range correctly」という警告を消す【usb_cam_node】

■tl;dr: ROS の usb_cam_node で「deprecated pixel format used, make sure you did set range correctly」という警告が出る場合、pixel_format を yuyv に指定するとよい。

■背景
ROS で usb_cam_node を立ち上げた launch file を起動したら「deprecated pixel format used, make sure you did set range correctly」という警告が続けてダーッと出て他のメッセージが読めない状況になった。まあ別ターミナルから roslaunch すれば回避できるがlaunchファイルは少ないほどいいので、良い方法がないか考えていた。

■ためして駄目だったこと

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >   

のところを

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="log" >   

に変えてみた。しかし当該警告はstderrに吐かれるのでこの方法では対処にならない。

■解決

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="log" >   
...
<param name="pixel_format" value="yuyv"/> ←これで解決!
</node>

■参考URL
https://answers.ros.org/question/376295/usb-cam-using-deprecated-pixel-format/

ClutTeXでlatex文書を継続的にコンパイルしてQOLを上げよう

LaTeX文書編集の結果をすぐに反映させるには継続的なコンパイルが便利です.この目的のためにcluttex というコマンドを使うことができます.最新のtexliveを使っているなら,このツールはすでにインストールされているでしょう.ただし,継続的なコンパイルのためには fswatchを追加でインストールする必要があります.(Ubuntu ならば sudo apt install fswatch で入ります.)

 aaa.tex という文書を継続的にコンパイルするには次のようにすればよいです:

$ cluttex --watch -e uplatex -halt-on-error -interaction=nonstopmode -file-line-error --bibtex='upbibtex -kanji=utf8 ' -o aaa.pdf -- aaa.tex

コマンドが長いので私はMakefile に次のように書いています:

CLUTTEX := cluttex –watch -e uplatex -halt-on-error -interaction=nonstopmode -file-line-error –bibtex=’upbibtex -kanji=utf8 ‘

aaa.pdf : aaa.tex

            $(eval TEXFILE := $(notdir $<))

            $(CLUTTEX)  -o $@ — $(TEXFILE)

任意のコマンドをUbuntuのドックに追加する方法,あるいはドックのお気に入りにmozcの単語登録ボタンを置く方法

概要:任意のコマンドをUbuntuのドックに登録する方法を説明する.応用例として,mozcの単語登録ボタンを作る方法を述べる.

背景:Ubuntuのドックにvscode や gimp のようなアプリケーションを追加しておくことによりマウス操作だけで起動できるため,生産性の向上につながることは広く認識されている.しかしながら,「アプリケーションの起動中にドック操作によってアイコンを追加する」という手段では登録できない操作が存在する.たとえばmozcツールがそのような例である.任意のコマンドを実行するアイコンをドックに追加できれば有用であろう.

方法:mozc の単語登録の画面は,コマンドラインから次のように呼び出せることを思い出そう:

        /usr/lib/mozc/mozc_tool --mode=word_register_dialog

(1)コマンド alacarte を起動(インストールはsudo apt install alacarte)し,コマンドを追加する.名前はなんでもよいがここでは「mozc」にしよう.

(2)左下の「アプリケーションを表示する」↓すべて から「mozc」を選ぶと,これをドックに追加することができる.

(3)アイコンの編集.どこからかアイコンにふさわしい画像を用意して,適当な場所に保存しておく.

(4)/home/USERNAME/.local/share/applications/alacarte-made.desktop を編集して,画像パスを次のように変更する:

        Icon=/home/USERNAME/Pictures/icon/some-icon-image.png

結果例

glow : ターミナルからマークダウン文書をブラウズしたい【Linux/Mac】

プログラムに関わる仕事をしているとマークダウン記法で書かれたファイルに接する機会は多いと思います.例えばgithubで公開されている多くのリポジトリにはREADME.md が置かれています.

githubのサイトからはREADME.md が綺麗にレンダリングされていますが,手元で cat するとマークダウン記法がそのまま流れてきます.確かにマークダウン記法は認知負荷が比較的軽いのですが,もう少し綺麗に表示したいという気持ちがありました.とはいえ,VSCode+marp で表示するというのは面倒です.ターミナルから離れると気が散るので.できればターミナルの中でマークダウンをレンダリングしたいと思いました.

glow は,そのような目的に合っているように思います:glow github page .←このページにインストール方法も載っています.

インストールして,ターミナルから glow README.md のようにすればその場でそれなりのレンダリングがされます.

WSL2をWindows Terminal から使うようにしたらタブが使えて優勝した話

WSLまたはWSL2を使っていて,ターミナルをタブで増やせないことが不満でした.そこで調べてみると Windows Terminal を使うとよいことがわかりました.これは田(スタート)から Microsoft Store を選んで検索で windows terminal と入れれば出てきます.インストールしてください.

起動して「設定」から「既定のプロファイル」を Ubuntu(でもなんでもいいですが) にすればよいです.一度そうやって起動したらタスクバーにピンどめしておくと良いかと思います.

Stable Diffusion GUI を入れるときにはWindowsのレジストリからパスの文字列上限を解除しておくといいよという話

忙しい人のために,今日の記事の内容はタイトルにまとめておきました.タイトルですべてを察した人はこの先読まなくていいです.

stable diffusion が流行っています(2022/09/03現在).実際,Google で stable diffusion で検索すると「約 184,000,000 件 (0.34 秒) 」と出ました.

流行りのものには一応飛びついたほうがいいと思ったのでwsl2に入れようとしてたのですが環境構築に手間取ってる間に Stable Diffusion GUI というWindows用無料ソフトが配布されるようになりました.今日の記事はこれを入れる話です.

これは次のサイトで配布されています:NMKD Stable Diffusion GUI – AI Image Generator by N00MKRAD このサイトで「Download Now」を押すと「金を払ってくれてもいいんですよ?」という感じのダイアログが出ますが,払いたくない人は No thanks, just take me to the downloads というグレーの文字を踏めばいいです.213MBくらいののzipがをDLして展開するとStableDiffusionGui.exe があるので起動します.install というボタンを押すだけで面倒な環境構築をやってくれます.この説明でわからなかった人は Gigazine さんのページを参考にするといいと思います.

ところが,ボタンを押してインストールをしていたのですが途中で止まってしまいました.エラーメッセージを見ると「appears to be corrupted. The path ‘Lib/site-packages/caffe2/python/serialized_test/data/operator_test/learning_rate_adaption_op_test.」などと書いてあるのでその語句でググると,どうやら「Windowsのパスの全文字数はデフォルトで最大256であること」が原因らしいことがうっすらわかりました.

レジストリエディタからこれは変更できるようです.Windows の田(スタート)メニューで、regedit と入れてレジストリエディターを起動し,KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem の「LongPathsEnabled」をダブルクリックして編集し,値を1にします.(この値はデフォルトでは0になっています.)変更が確実に反映されるように,Windowsを一度再起動しましょう.(←これ本当に必要なのかな?).

こうして再度 Stable Diffusion Gui の install を押したところ,今度は最後までインストールが進みました.

例:

python ライブラリをC++から使うときの設定

■状況

あるパッケージをビルドしたら#include <numpy/numpyconfig.h>でエラーが出た.

■最初に試したこと

パスが通っていないのだな,と思って ~/.bashrc で環境変数CPLUS_INCLUDE_PATHに追加をした.このときよく確認せずに/home/ros/.local/lib/python3.8/site-packagesを追加した.ビルドエラーは消えなかった.

■正しい対処

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/ros/.local/lib/python3.8/site-packages/numpy/core/include

source ~/.bashrc してからビルドするとエラーが消えた.

■反省点

/home/ros/.local/lib/python3.8/site-packages/numpy/numpyconfig.h などというファイルが存在しないことに気づくべきだった.

【ros】rosdep install –ignore-src –from-paths src -y -r is all you need. 【catkin_make】

catkin_make して cmake エラーが出たらとりあえず<code> rosdep install --ignore-src --from-paths src -y -r</code> するといいと思うよ.

コメント:100億年前のgoogleだと cmake error ですぐにこの情報が出てきたんですがねぇ.