およそMECEでないアカシックレコードの200那由多飛んで3万分の1
https://blog.eniehack.net/
Nakaya
https://blog.eniehack.net/
Hugo gohugo.io
2020 eniehack.
Assets and articles not otherwise specified are licensed under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
Source code is licensed under by <a href="https://apache.org/licenses/LICENSE-2.0.txt">Apache-2.0</a>.
2024-03-16T09:04:42Z
xfce4 ではデフォルトで ssh-agent を自動起動するらしい
https://blog.eniehack.net/articles/2023/03/13/autostart-ssh-agent-on-xfce4/
2023-03-13T04:54:15Z
2023-03-13T04:57:37Z
<h2 id="tl-dr">TL;DR</h2>
<p>xfce4 では、デフォルトで ssh-agent を自動起動する設定になっているので、設定エディタや Terminal から無効化する必要がある。
Terminal から実行する場合は以下のように実行する:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
</code></pre></div><h2 id="経緯">経緯</h2>
<p>最近は gpg に日常を大きく依存する日々を送っている。というのも、pgp 鍵はかなり便利であるからだ。</p>
<p>例えば以下のものが挙げられる:</p>
<ul>
<li>password manager の <a href="https://www.passwordstore.org/">pass</a> で master password として使う</li>
<li>副鍵に Authentication の権限を持たせて SSH 鍵として使う</li>
<li>pgp 鍵の notation 機能を使って <a href="https://keyoxide.org/">Keyoxide</a> で keybase もどきをする</li>
</ul>
<h2 id="本題">本題</h2>
<p>これほど gpg に頼って生活を送っていると、毎回 gpg のパスワードを入力するのがバカらしくなってくる。</p>
<p>ここで、Linux 環境の gpg に備えられている gpg-agent が登場する。これを使えば、ssh-agent のように SSH でサーバにアクセスする際、鍵の passphrase を要求される回数が大きく減ってうれしい。</p>
<p>しかし、ここ数日、ArtixLinux の FS が壊れたので、 PC に ArchLinux をインストールして、久々の xfce4 を楽しんでいた。</p>
<p>もちろん、gpg-agent は QoL に関わる大事なものなのでセットアップを試みようとするも、立ち上げた記憶のない ssh-agent が毎ログインのたびに起動してくる。</p>
<p>悪く言えば ssh-agent をジャックする gpg-agent は、ssh-agent が後に起動してしまうと、例え gpg-agent が立ち上がったとしても利用することができない。</p>
<p>このままだとつらいね、ということで、数日間悪戦苦闘して直したので、数日の供養として、解決しなかった手法、した手法をそれぞれ述べていこうと思う。</p>
<h2 id="この記事の対象">この記事の対象</h2>
<p>signin するだけで gnome-keyring の Default keyring が開く、であったり、signin すると pgp 鍵が開く、といった gnome-keyring と gpg-agent の環境構築は、対象としない。これに関しては ArchWiki の <a href="https://wiki.archlinux.org/title/GNOME/Keyring">gnome-keyring</a> と <a href="https://wiki.archlinux.org/title/GnuPG#gpg-agent">gpg</a> のページを見るほうが手っ取り早い。</p>
<p>代わりに、この記事は、xfce4 において、勝手に ssh-agent が起動されてしまう問題の解決を提示する。</p>
<h2 id="解決しなかった">解決しなかった</h2>
<h3 id="systemd-の-environment-dot-d-を使う">systemd の environment.d を使う</h3>
<p>ユーザのログイン時に systemd が参照する環境変数は.bashrc や.xinitrc と独立であるらしい。その環境変数をユーザが操作するには、 <code>~/.config/environment.d/*.conf</code> を編集すればよいらしく<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>、実際に <code>.xinitrc</code> などの概念がない Wayland では利用されているらしい<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。</p>
<p>しかし、この手法では、解決しなかった。どうやら、このファイルには shellscript における <code>unset</code> が用意されておらず、構文エラーとなってしまった。</p>
<h3 id="systemd-の-environment-generator-を使う">systemd の environment generator を使う</h3>
<p>また、systemd には、先程の environment.d のファイルを生成するための機構がある <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>。ユーザごとの環境変数であれば、 <code>/etc/systemd/user-environment-generators/</code> にプログラムを格納し、標準出力で environment.d 形式の要素を吐ければよいらしい。これは、言語は問われないので、shellscript である必要は全然なく、Python などで書いても問題ないらしい。</p>
<p>こちらも解決はしなかった。そもそも、こちらにも shellscript における <code>unset</code> が用意されていないようだ。</p>
<h3 id="gnome-keyring-などの-systemd-user-unit-を無効化する">gnome-keyring などの systemd user unit を無効化する</h3>
<p>確かに <code>gcr-ssh-agent.service</code> は無効化する意味があるのだが<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>、他の service ファイルや socket ファイルを無効化したところで ssh-agent を起動するものはないので、無効化したところで解決しないことは自明であった……。</p>
<h2 id="解決した">解決した</h2>
<p>なんと、xfce4 では ssh-agent と gpg-agent を自動起動する機能があるらしい<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>。なので、ssh-agent を無効化する:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
</code></pre></div><p>ssh-agent を無効化するだけも問題ないのだが、私としては、gnome-keyring を使って gpg-agent を管理したいので、gpg-agent も無効化しておく:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"> xfconf-query -c xfce4-session -p /startup/gpg-agent/enabled -n -t bool -s false
</code></pre></div><p>これを実行してから、ArchWiki の gpg と gnome-keyring のページにある記述を順番にこなせば、gpg-agent は動作するようになるハズである。</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://man.archlinux.org/man/environment.d.5">https://man.archlinux.org/man/environment.d.5</a> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p><a href="https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8">https://wiki.archlinux.jp/index.php/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#Wayland_.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.94.E3.81.A8</a> <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p><a href="https://man.archlinux.org/man/systemd.environment-generator.7">https://man.archlinux.org/man/systemd.environment-generator.7</a> <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p><a href="https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B">https://wiki.archlinux.jp/index.php/GNOME/Keyring#.E3.82.AD.E3.83.BC.E3.83.AA.E3.83.B3.E3.82.B0_ssh_.E3.82.B3.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.8D.E3.83.B3.E3.83.88.E3.82.92.E6.9C.89.E5.8A.B9.E3.81.AB.E3.81.99.E3.82.8B</a> <a href="#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:5" role="doc-endnote">
<p><a href="https://docs.xfce.org/xfce/xfce4-session/advanced">https://docs.xfce.org/xfce/xfce4-session/advanced</a> <a href="#fnref:5" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</section>
Gemini Protocol のサーバ実装 gmid を ArchLinux にインストールする
https://blog.eniehack.net/articles/2022/03/14/gmid-install-on-archlinux/
2022-03-15T12:03:11Z
2022-03-15T04:43:04Z
<h2 id="おことわり">おことわり</h2>
<p>この記事では断りなく<a href="https://mustache.github.io/">mustache構文</a>を用いることがある。注意されたい。</p>
<h2 id="gemini-protocol-とは">Gemini Protocol とは</h2>
<h3 id="概要">概要</h3>
<p>今の WWW には、問題点があると考える。
広告やトラッキング、自動再生される動画などである。
特に広告とトラッキングに関しては、広告やトラッキングをブロックすることが、ブラウザの機能として取り込まれるまでになり、さらに、それらが欠かせないものとなってしまった。</p>
<p>gemini は、そんなカオスな現代の WWW とは、対照的なプロトコルである。</p>
<p><a href="https://gemini.circumlunar.space/docs/faq.gmi">公式サイトの FAQ</a> にある 「what is gemini?
」の章には、大体以下のことが書いてある。</p>
<ul>
<li>プロトコルとしては、OSI 参照モデルにおけるアプリケーション層に該当する</li>
<li>プロトコルに加え、軽量なハイパーテキストフォーマットを加えたもの</li>
<li>Web を本来のあるべき姿に戻しつつ、 Gopher <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> を現代風に味付けしたもの。
<ul>
<li>URI、MIME type や TLS といった、標準化され、成熟している技術の上に成立している</li>
</ul>
</li>
<li>シンプルさとプライバシーを念頭に置いている
<ul>
<li>拡張を困難にすることで、シンプルでプライバシーを確保することができる</li>
</ul>
</li>
</ul>
<p>その他、Gemini の response は、 HTTP のように Header 部と Body 部に分かれている。
Header 部には status code や、その文書の言語などを記述する、などに用いられている。</p>
<p>gemini に CSS や JavaScript に当たるものはない。CSS 的な装飾は Client に委ねられている。</p>
<h3 id="gemtext">gemtext</h3>
<p>先程の箇条書きにあった「軽量なハイパーテキストフォーマット」は gemtext(MIME: text/gemini、拡張子:gmi)と考えられる。</p>
<p>これは Markdown をベースとした軽量マークアップ言語である。
gemini protocol で閲覧できるページのほとんどは、この gemtext で書かれている。
Markdown との大きな差異はリンクにある。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-markdown" data-lang="markdown">Markdownではこのように文中に[リンク]()を挿入することができるが、
</code></pre></div><pre><code class="language-gemini" data-lang="gemini">gemtextではこのように
=> https://gemini.circumlunar.space リンク
は改行しなければならない。
</code></pre><p>しかし、これは表現力を落としてでも、パースを簡単にしようとしているのではないかと考えている。</p>
<p>また、gemtext には <a href="https://tildegit.org/sloum/gemini-vim-syntax">Vim</a>、<a href="https://git.carcosa.net/jmcbray/gemini.el">Emacs</a> や <a href="https://github.com/yzzyx-network/nanorc/blob/master/gemini.nanorc">nano</a> など各エディタに syntax highlight が用意されている。</p>
<h3 id="client">client</h3>
<p>server に関しては後の章に譲るとして、ここでは client について紹介する。
client について紹介するのは、本筋ではないため、軽く紹介するに留める。
興味のある方は<a href="https://gemini.circumlunar.space/software/">公式サイトのページ</a>、もしくは <a href="https://github.com/kr1sp1n/awesome-gemini">awesome-gemini</a>を参照していただきたい。</p>
<p>GUIは<a href="https://gmi.skyjake.fi/lagrange/">Lagrange</a>、TUIは<a href="https://github.com/makeworld-the-better-one/amfora">Amfora</a>が、おすすめと挙げられることが多いように感じられる。
ちなみに、Emacs には <a href="https://thelambdalab.xyz/elpher/">Elpher</a> というクライアントが <a href="https://melpa.org/#/elpher">melpa</a> から入手できる。</p>
<h2 id="gmid-を選んだ理由">gmid を選んだ理由</h2>
<p>gmid を選んだ理由として 2 つの譲れない点があった。</p>
<ol>
<li>eniehack.net は、友人とのカンパによって運用されているので、みんなで使えるようにしい</li>
<li>すでに Nextcloud が運用されているマシンなので、ファイルシステムをひっ迫したくない</li>
</ol>
<p>これらから、要件として以下の基準を満たすものをサーバとして採用しようと考えた:</p>
<ol>
<li>per-user directory(例: <a href="https://example.com/~username">https://example.com/~username</a>)がやりたい</li>
<li>Go や Nim などのコンパイラを、サーバに導入せずに済む</li>
</ol>
<p>これらを満たしたものを<a href="https://github.com/kr1sp1n/awesome-gemini">awesome-gemini</a>から検討した結果、gmid を使うこととした。</p>
<p>他にも、Nim で作られた <a href="https://github.com/ardek66/geminim">geminim</a> や、 <code>inetd</code> などのスーパーサーバで動作する <a href="https://tildegit.org/solene/vger">vger</a> などがある。
実装された言語でも、動作する形態でも、バリエーションが豊富なので、是非いろいろ見てほしい。</p>
<h2 id="gmid-のインストール">gmid のインストール</h2>
<h3 id="aur-から">AUR から</h3>
<p>AUR から <code>gmid</code> パッケージをインストールする。
ちなみに、 <code>gmid-bin</code> や <code>gmid-git</code> もある。</p>
<p>2022/03/15 追記: systemd-sysusers の設定ファイルや systemd の service ファイルの修正が、AUR パッケージの更新により導入された<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。
そのため、以下、訂正線の入った作業は行う必要がなくなった。
具体的には、AUR から gmid のインストールが完了したら、「gmid.conf の編集」から再開して問題ない。
2022/03/15 追記終わり</p>
<p><del>また、PKGBUILD を自分で修正したことがある、という上級者は、以下の作業によって <code>.service</code> ファイルの編集、gmid ユーザの作成の各章を飛ばすことができる。</del></p>
<p><del>1. <code>yay -G</code> や <code>aur fetch</code> などを用いて、 <code>PKGBUILD</code> を入手</del>
<del>2. 私の pastebin にある <a href="https://pastebin.com/u/eniehack/1/LDUKRB9m">3 つのファイル</a>を curl などで入手し、 <code>PKGBUILD</code> のあるディレクトリに入れる</del></p>
<pre><code class="language-shell-session" data-lang="shell-session">$ curl -sSL -o gmid.sysusers https://pastebin.com/raw/U9fMpT37
$ curl -sSL -o gmid.service https://pastebin.com/raw/dKfDWpkz
$ curl -sSL -o PKGBUILD.diff https://pastebin.com/raw/MNt0Dcfy
</code></pre><p><del>3. <code>PKGBUILD</code> に patch を当てる</del></p>
<pre><code class="language-shell-session" data-lang="shell-session">$ patch PKGBUILD{,.diff}
</code></pre><p><del>4. <code>makepkg</code> や <code>aur build</code> などを用いて、パッケージを作成し、インストール</del></p>
<h3 id="service-ファイルの編集">service ファイルの編集</h3>
<p><del>このパッケージは systemd の <code>.service</code> もインストールされるのだが、2022/03/14 現在、そのままでは動作しないので</del></p>
<pre><code class="language-shell-session" data-lang="shell-session"># systemctl edit gmid
</code></pre><p><del>を実行して</del></p>
<pre><code class="language-nil" data-lang="nil">[service]
ExecStart=
ExecStart=/usr/bin/gmid -f -c /etc/gmid.conf
</code></pre><p><del>と書き加える必要がある。</del></p>
<h3 id="gmid-ユーザの作成">gmid ユーザの作成</h3>
<p><del>公式ドキュメントでは gmid を実行するためのユーザを作成することを勧めているので作成する。</del></p>
<p><del>ArchLinux には、system user を作成するためのツールが systemd によって用意されているので<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>、これを使う。</del></p>
<p><del>gmid の upstream が、新しいリリースを出したら、AUR パッケージにも反映されるはずである。 <code>/usr/lib/sysusers.d/gmid.conf</code> がなければ、curl で取得する <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> 。</del></p>
<pre><code class="language-shell-session" data-lang="shell-session">$ curl -sSL -o gmid.conf https://raw.githubusercontent.com/omar-polo/gmid/master/contrib/gmid.sysusers
</code></pre><p><del>以下のコマンドを実行すれば作成できる:</del></p>
<pre><code class="language-shell-session" data-lang="shell-session"># systemd-sysusers ./gmid.conf
</code></pre><p><del>念のために <code>/etc/passwd</code> を見ておいてもいいかもしれない。</del></p>
<h3 id="gmid-dot-conf-の編集">gmid.conf の編集</h3>
<p><a href="https://gmid.omarpolo.com/quickstart.html">gmid公式ドキュメントのquickstart</a>を参考に <code>gmid.conf</code> を設定する。
ちなみに、gmid パッケージには <code>gmid.conf</code> 向け syntax highlight 用の vim script も付属している。</p>
<p>例えば、per-user directory を作りたい場合:</p>
<pre><code class="language-nil" data-lang="nil">server "{{FQDN}}" {
cert "{{public key path}}"
key "{{private key path}}"
root "/usr/local/share/gmid/"
location "/~*" {
root "/usr/local/share/gmid"
}
}
</code></pre><p>などとする。</p>
<p>pacman が、 <code>/usr/local</code> 以下に手を出すことは基本的にありえない<sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>。
そのため、私はこのディレクトリにしたというだけである。
なので、location ディレクティブに記述する directory path は、都合に応じて適宜変更して問題はないはずである。</p>
<h3 id="gencert-の実行">gencert の実行</h3>
<p>理由はよくわからないのだが、Gemini を介して公開されているサーバは、自己署名証明書で TLS 通信を行っている。
そのため、gmid についてくる <code>gencert</code> という Perl 製ヘルパースクリプトを実行する。</p>
<pre><code class="language-shell-session" data-lang="shell-session"># /usr/share/gmid/gencert {{FQDN}}
</code></pre><p>その後、 <code>gmid.conf</code> に記述した場所へ公開鍵(拡張子: <code>.pem</code> )、秘密鍵(拡張子: <code>.key</code>)を移動する。
その際、秘密鍵を入れておくディレクトリは、必ず <code>chmod</code> で 700 に設定しておくこと。</p>
<h3 id="firewall-の設定見直し">firewall の設定見直し</h3>
<p>最後に <code>ufw</code> などの firewall の設定を変更する。
gemini protocol のデフォルトポートは 1965 であるので、以下を実行する:</p>
<pre><code class="language-shell-session" data-lang="shell-session"># ufw allow 1965
</code></pre><h3 id="service-実行">service 実行</h3>
<pre><code class="language-shell-session" data-lang="shell-session"># systemctl start gmid
</code></pre><h2 id="こぼれ話">こぼれ話</h2>
<p>gmid の upstream には以下が付属している:</p>
<ul>
<li>証明書管理用のヘルパスクリプト</li>
<li>config ファイルを syntax highlight するための、vimscript</li>
<li>systemd の service ファイル</li>
<li>systemd-sysusers のための config ファイル</li>
</ul>
<p>しかし、そのほとんどが AUR のパッケージではインストールされていなかった。
そのため、AUR に patch を送ったのは初めてのことだった。
すべてが取り入れられたわけではなかった。</p>
<p>しかし、取り入れられなかった点は upstream へ Pull Request を投げたらどうかと言われたため、<a href="https://github.com/omar-polo/gmid/pull/14">PR</a>を投げたところ、すんなり受け入れられてしまった。</p>
<p>また、Gemini と同様、HTTP でも、いにしえの `<a href="https://eniehack.net/~eniehack">https://eniehack.net/~eniehack</a>` のような URL で自己紹介を書いている。
そのため、gemtext から HTML へ変換するプログラムなどを用いて、gemtext から HTML が生成されると便利かもしれない。</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://gemini.circumlunar.space/">Gemini Protocol公式サイト</a></li>
</ul>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>詳しくは<a href="https://wiki.archlinux.jp/index.php/Gopher">Archwiki</a>、または<a href="https://ja.wikipedia.org/wiki/Gopher">Wikipedia</a>を参照のこと。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p><a href="https://aur.archlinux.org/cgit/aur.git/commit/?h=gmid&id=8432689b101b93366fcb6a82259503a6f6a0396c">https://aur.archlinux.org/cgit/aur.git/commit/?h=gmid&id=8432689b101b93366fcb6a82259503a6f6a0396c</a> を参照。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>systemd-sysusers。詳細は man page:<a href="https://man.archlinux.org/man/systemd-sysusers.8">systemd-sysusers(8)</a>を参照。 <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p>2022/03/14 現在、まだリリースされていない。 <a href="#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:5" role="doc-endnote">
<p><a href="https://wiki.archlinux.jp/index.php/Arch%5F%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3#.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8.E3.82.A8.E3.83.81.E3.82.B1.E3.83.83.E3.83.88">Arch パッケージガイドライン</a>を参照。 <a href="#fnref:5" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</section>
LaTeX にまつわる便利ツールを紹介する
https://blog.eniehack.net/articles/2021/12/01/useful-latex-tools/
2021-11-30T15:46:00Z
2021-11-30T15:44:08Z
<p>この記事は <a href="https://adventar.org/calendars/6424">群馬高専アドベントカレンダー2021</a> 1 日目の記事です。</p>
<p>私がこの記事で言いたいのは LaTeX をカジュアルに使おうぜ、ということです。</p>
<p>E 科では 2 年の授業で、J 科では 3 年の実験で学ぶ LaTeX ですが、レポートや卒業研究とお堅いシチュエーションで使うことが多く、また面倒だと思われがち(?)です。
しかし、数式の出力が綺麗であったり、pdf を生成する言語として優秀です。
もっと日常的に使ってもいいのではないか?と思っています。</p>
<p>そこで、私が実際に使っている、LaTeX に関する便利ツールやパッケージについて紹介しようと思います。</p>
<h2 id="自己紹介">自己紹介</h2>
<p>遅れました。5 年 E 科の Nakaya と申します。</p>
<p>電算部で<a href="https://nitgclt.connpass.com/">群馬高専 IT勉強会</a>の主催や、工華祭のポスターレイアウトと <a href="https://22nd.kokasai.com/">Web サイト</a>開発を大分昔にやっていました。</p>
<p>最近では、工華祭でミニ FM の運営や CPU の自作をやってます。</p>
<h2 id="対象読者">対象読者</h2>
<p>早速、記事の本題に移ります。この記事の対象読者は LaTeX が難なく使える人とします。
TeX を TeX Live でインストールした人を主に対象としますが、インストール方法に変わりがあるのみなので、調べてみてください。</p>
<h2 id="便利ツール">便利ツール</h2>
<h3 id="cluttex">cluttex</h3>
<p><a href="https://blog.miz-ar.info/2018/10/cluttex-release/">cluttex</a> とはコンパイルを自動化するコマンドラインツールです。</p>
<p>.aux や.log などのファイルを別ディレクトリで行うため、使っているディレクトリが汚れません。
相互参照などの必要に応じ、複数回のコンパイルを自動で行ってくれます。</p>
<p>最近の TeXLive では cluttex がデフォルトで入っているようですが、入っていない場合は TeX Live を更新しましょう。</p>
<p>cluttex の使い方としては、TeX ファイルから PDF を生成する際に、以下のように実行します。</p>
<pre><code class="language-nil" data-lang="nil">cluttex -e lualatex hogehoge.tex
</code></pre><p><code>-e</code> で使っている LaTeX のエンジンを指定します。
jsarticle を利用している場合は 基本的には platex とします。</p>
<p>また、<code>--watch</code>でファイルが保存された都度コンパイルしてくれるようになります。</p>
<h3 id="pandoc">pandoc</h3>
<p><a href="https://pandoc.org">pandoc</a> とはマークアップ言語間の変換を行うコマンドラインツールです。
ちなみに、マークアップ言語とは、見出し、リンク、太字、リストなどの文章中の要素を文字によって文書を表現するの言語です。</p>
<p>pandoc が対応しているフォーマットの、HTML、Markdown、LaTeX、Word(.docx)、LibreOffice Writer(.odt)などを一部のフォーマットを除き、基本的には相互変換することができます。
それに加え、LaTeX を介して HTML、Markdown などから PDF を生成することもできます。</p>
<p>導入するには、公式サイトの<a href="https://pandoc.org/installing.html">ダウンロードページ</a>からインストーラが入手できます。
また、Windows 以外の OS での入手方法は上のページに案内があります、</p>
<p>markdown から latex へ変換する際は、以下のように実行します。</p>
<pre><code class="language-nil" data-lang="nil">pandoc input.md -f markdown -t latex -s -o output.pdf
</code></pre><p><code>-f</code>で入力する文書フォーマットを、<code>-t</code>で出力するフォーマットを指定します。しかし、pandoc は拡張子から判別できため、実際は省略できます。
<code>-o</code>で出力するファイルの先を指定します。</p>
<h2 id="パッケージ">パッケージ</h2>
<h3 id="here">here</h3>
<p>here パッケージは図や表の場所を指定するパッケージです。
<code>figure</code>、<code>table</code>のオプションとして<code>[!hbtp]</code>と指定することが多いと思います。しかし、思った場所に図表を出力してくれない場合があります。そこで使えるのが here というわけです。</p>
<p>使い方としては、</p>
<pre><code class="language-nil" data-lang="nil">\begin{figure}[H]
\end{figure}
</code></pre><p>このようにオプションに <code>[H]</code> と指定するだけで、ページの残りスペースが足らないと改ページされてしまいますが、意図した場所に出力してくれます。</p>
<h3 id="beamer">beamer</h3>
<p>LaTeX でスライドが書けることはご存知でしょうか?
LaTeX でスライドを書けるドキュメントクラスでも、最も有名な beamer です。</p>
<p>beamer を使って、スライドを書いてみたサンプルが<a href="https://speakerdeck.com/eniehack/crystalhaiizo">こちら</a>です。
テーマは<a href="https://github.com/matze/mtheme">Metropolis</a>を使いました。
このようにモダンなテーマもあります。</p>
<p><a href="https://qiita.com/htlsne/items/70cbb488e7a87cd9e228">このページ</a>にモダンな beamer のテーマ集があります。気になった方は見てみるといかもしれません。</p>
<h2 id="さいごに">さいごに</h2>
<p>日本語で TeX の情報を集める際、<a href="https://texwiki.texjp.org/">TeX Wiki</a>がとても役に立ちます。
今紹介したツールやパッケージはもちろん、「頻発するエラーと対処集」なるページまであります。是非見てください。</p>
<p><a href="https://adventar.org/calendars/6424">群馬高専アドベントカレンダー2021</a> 明日は、はいからさんの「高校と高専と大学と、教養教育と専門教育について」です。</p>
yayからaurutilsに移行してみる
https://blog.eniehack.net/articles/2021/02/21/aurutils-introduction/
2021-02-21T13:41:40Z
2021-02-21T13:40:23Z
<h2 id="motivation">動機</h2>
<p>AURヘルパーは今までyayを使っていて、何ら不自由はなかった。しかし、書籍『UNIXという考え方』やPOSIX原理主義に感銘を受けたというのが大きい。特に前者の書籍にあった「実行速度より可搬性」というのはかなり同意できた。</p>
<p>shellscriptの良さはPOSIX準拠である環境であれば、確実に使える点だ。これはPerl、PythonやRubyにはない有利な点である。また、shellscriptは遅いと一般的には考えられているが、パイプなどを意識すれば、shellsciptは高速化可能であることも<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>、shellscriptのよい点だ。</p>
<p>そのような思想に影響を受けたなか、bash製のaurutilsというAURヘルパーを発見し、私は使っていたyayからaurutilsへ移行してみることにした。</p>
<h2 id="target-readers">対象読者</h2>
<p>ArchLinux系のディストリビューションを使うユーザをこの記事は対象とする。ただし、その中でもTerminalに触れることに抵抗がなく、AURについて知っていることを前提として話を進めることとする。</p>
<h2 id="what-is-aurutils">aurutilsとは</h2>
<p>aurutilsとはbash製のAURヘルパである。</p>
<p>AURヘルパにもgolang製のyay、nim製のpakkuなど、様々なものがある。しかし、それらとは異なり、このaurutilsはpacmanにあるcustom local repositoryという機能<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>を用いて、AURにあるパッケージをインストールする。</p>
<p>具体的に、custom local repositoryを使わないyayと、使うaurutilsではどのように違うのか、比較してみる。
yayなどでは、以下のような動作をする。</p>
<ol>
<li>AURからパッケージを取得</li>
<li>依存関係の解決</li>
<li>パッケージのインストールを行う。( <code>makepkg -si</code> )</li>
</ol>
<p>しかし、aurutilsでは</p>
<ol>
<li>AURからパッケージを取得</li>
<li>依存関係の解決</li>
<li>ビルドでちらかった環境の整理</li>
<li>所定の位置へアーカイブを配置する</li>
</ol>
<p>だけだ。インストールはaurutilsが行なわない。これは、公式リポジトリのパッケージのように、pacmanが行う。</p>
<h3 id="merit">特徴</h3>
<p>yay-binを使えば話は別だが、yayはgolangのコンパイラを導入しなければならない。しかし、aurutilsは幾つかのbashスクリプトと、幾つかのmanドキュメントで構成されており、パッケージサイズが小さい。実際に、パッケージアーカイブ( <code>pkg.tar.zst</code> )の状態で、yay-binは約8MB、aurutilsは約100KBである。
yayのほうが、依存するパッケージは少ないかもしれないが、aurutilsでは依存するパッケージの1つ1つが、小さい。</p>
<p>加えて、aurutilsに関してはpaccacheも設定なしにcustomリポジトリに適用できた。しかし、 <code>makepkg.conf</code> に <code>PKGDEST=/path/to/yay/cache</code> のように設定し、 <code>paccache -c /path/to/yay/cache</code> のように実行すれば、yayでも実行できる。しかし設定せずとも、paccacheが使える点では、yayより有利かもしれない。</p>
<p>ちなみに、paccacheは<a href="https://archlinux.org/packages/community/x86%5F64/pacman-contrib/">pacman-contrib</a>パッケージにあるコマンドだ。localにあるのパッケージアーカイブを、デフォルトで最新の3つのみを残して、それ以外を削除することができる。</p>
<p>ただ、aurutilsは <code>yay -Ss</code> のような、AURと公式リポジトリを横断的に探索する機能がない、という不便な部分もある。</p>
<p>これらの特徴を考えると、サーバや、HDDの小さいPCなど、ディスクをシビアに管理しなければならないような環境に向いているのかもしれない。</p>
<h3 id="aurutils-usage">使い方</h3>
<p>aurutilsはaurコマンドと、いくつかのサブコマンドで構成されている。サブコマンドの詳しい解説は <code>man 1 aur-sync</code> のように、manコマンドからそれぞれ読むことができる。</p>
<h4 id="install">install</h4>
<p>AURからパッケージをインストールするときは、まず、 <code>aur sync $pkgname</code> のようにパッケージをビルドし、配置する。次に、データベースを更新して( <code>pacman -Syy</code> )、インストール( <code>pacman -S $pkgname</code> )する。</p>
<h4 id="update">update</h4>
<p>aurutilsを用いてAURから取得したパッケージの更新は、 <code>aur sync -u</code> を実行する。このコマンドによって、まず、パッケージの更新確認する。その結果から、更新がある場合はビルドしてcustomリポジトリへ配置する。</p>
<h4 id="search">search</h4>
<p>パッケージの検索は <code>aur search $pkgname</code> のようにコマンドを実行する。</p>
<h4 id="その他">その他</h4>
<p>その他にもaurutilsは <code>aur</code> コマンドのサブコマンドとして様々な機能を提供している。</p>
<ul>
<li>aur build</li>
</ul>
<p>パッケージをビルドする</p>
<ul>
<li>aur fetch</li>
</ul>
<p>パッケージを取得してくる</p>
<ul>
<li>
<p>aur chroot
<code>systemd-nspawn</code> を用いてパッケージをビルドする</p>
</li>
<li>
<p>aur query</p>
<p>aurwebへGETリクエストを送る</p>
</li>
<li>
<p>aur pkglist
AURにある全てのパッケージ名を取得する</p>
</li>
</ul>
<h2 id="install">導入</h2>
<p>ここからは、yayからaurutilsへ実際に移行してみることにする。<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>を参考にした。また、検証はしていないものの、yay以外の既存のAURヘルパーに関しても、パッケージアーカイブを移動し、 <code>repo-add</code> コマンドでパッケージを登録すればよいと思われる。さらに、AURヘルパーを初めて導入する場合は、<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>とここを参考にすれば導入できるはずだ。</p>
<ol>
<li>
<p><code>pacman -Qqm > ~/aurpkglist</code></p>
</li>
<li>
<p>パッケージアーカイブを移動する</p>
<p><a href="https://gitlab.com/-/snippets/2076763">yayからlocal repoへアーカイブ(pkg.tar.(xz|zst))を移動する自作scriptを書いた</a>ので参考にどうぞ。</p>
<p>ちなみに、私は <code>/etc/makepkg.conf</code> の <code>PKGEXT</code> を <code>".pkg.tar.zst"</code> にしている<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>。なぜなら、ZStandardは展開と圧縮がgzipより高速で、かつpacmanがデフォルトで用いている圧縮フォーマットだからだ。</p>
</li>
<li>
<p>pacman.confの編集</p>
</li>
</ol>
<p>作成するcustomリポジトリをpacmanへ認識させる。
<code>/etc/pacman.d/custom/</code> へ 以下の内容を書きこみ、</p>
<pre><code class="language-nil" data-lang="nil">[options]
CacheDir = /var/cache/pacman/pkg
CacheDir = /var/cache/pacman/custom
CleanMethod = KeepCurrent
[custom]
SigLevel = Optional TrustAll
Server = file:///var/cache/pacman/custom
</code></pre><p><code>/etc/pacman.conf</code> の最後に <code>Include = /etc/pacman.d/custom/</code> を追記する。</p>
<ol>
<li>
<p><code>sudo install -d /var/cache/pacman/custom -o $USER</code> でディレクトリを作成する</p>
</li>
<li>
<p><code>cd /var/cache/pacman/custom/</code></p>
</li>
<li>
<p><code>repo-add custom.db.tar</code></p>
<p><code>repo-add</code> とはpacmanが提供する個人的なリポジトリを管理するコマンドだ。このコマンドでは、ワイルドカードでパッケージアーカイブを指定できる。ここではcustomリポジトリのデータベースを作成している。</p>
</li>
<li>
<p><code>repo-add -n custom.db.tar *.pkg.tar.xz</code></p>
<p>ここではcustomリポジトリのデータベースにyayが作成したパッケージアーカイブを登録する。この作業は長いので、ここでティーブレイクをしてもいいだろう。</p>
</li>
<li>
<p>最後に <code>pacman -Syu</code> をすれば完了だ。</p>
</li>
</ol>
<h2 id="conclusion">最後に</h2>
<p>custom local repositoryを始めて知った。これを応用して、gemやpipのパッケージを管理するのはよさそうだ、と思った。</p>
<p>最後に。添削に協力してくださった、skiaさん、trash_canさんありがとうございました。この場で感謝いたします。</p>
<h2 id="参考">参考</h2>
<ul>
<li>公式GitHubリポジトリ: <a href="https://github.com/AladW/aurutils">AladW / aurutils - GitHub</a></li>
</ul>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>松浦 智之、大野 浩之、當仲 寛哲『ソフトウェアの高い互換性と長い持続性を目指すPOSIX中心主義プログラミング』<a href="https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html">https://www.ipsj.or.jp/dp/contents/publication/32/S0804-R1601.html</a>より。2021/02/20 閲覧。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p><a href="https://wiki.archlinux.org/index.php/Pacman/Tips%5Fand%5Ftricks#Custom%5Flocal%5Frepository">Pacman/Tips and tricks#Custom local repository - Archwiki</a> <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p><a href="https://gist.github.com/geosharma/afe1ea9ebe58cb67aaaba62a0d47bc7a">Arch Linux: aurutils installation and configuration - GitHub Gist</a> <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p>詳細は <code>man 5 makepkg.conf</code> もしくは <a href="https://man.archlinux.org/man/makepkg.conf.5.en">https://man.archlinux.org/man/makepkg.conf.5.en</a>を参照のこと <a href="#fnref:4" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</section>
#yurult v0.1.0を開催した
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2020/06/02/yurult-v01-report/
2021-01-30T13:43:43Z
2020-06-02T07:09:29Z
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>2週間前に「ゆるいオンラインLT会」というオンラインイベントを開催させていただきました。
流石に2週間経ったのでもう話題性は薄れてきてしまったとは思うのですが、clusterで開催されるVR機材を持たない人を対象としたイベントはそこまで多くないのではないかと思います。
ですから、資料として残すべきと思い、この記事の筆を取りました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_事前準備">事前準備</h2>
<div class="sectionbody">
<div class="paragraph">
<p>必要な情報やTODOリストなど共有すべきことはTwitterではなく、<a href="https://hackmd.org/">HackMD</a>のOSS版、<a href="https://codimd.org/">CodiMD</a>の<a href="https://demo.codimd.org">demo版</a>を利用させていただきました。
私は文書の共有を行う際はHackMD/CodiMDを結構重宝しています。
長い文書を共有したい、かつ相手がMarkdownを読み書きできるのであればGoogle
Docsより軽量だし楽かなと思ってます。</p>
</div>
<div class="sect2">
<h3 id="_配信テスト">配信テスト</h3>
<div class="paragraph">
<p>YouTubeとclusterの接続デモ、clusterでの配信によるマシンの負荷実験を目的として1週間前程に行ないました。</p>
</div>
</div>
<div class="sect2">
<h3 id="_connpassページを書いた">connpassページを書いた</h3>
<div class="paragraph">
<p>cluster経験者が少ないことを想定して、clusterの入門資料やヘルプをconnpassページ内にリンクとして掲載することで敷居を下げようとしました。</p>
</div>
</div>
<div class="sect2">
<h3 id="_google_formでアンケートを書いた">Google Formでアンケートを書いた</h3>
<div class="paragraph">
<p>終了後に参加者に送付するアンケートを書きました。</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_登壇内容">登壇内容</h2>
<div class="sectionbody">
<div class="paragraph">
<p>当日は6人の方に登壇していだだきました。登壇順でざっくりと感想を述べようと思います。<br/>
なお、YouTubeのアーカイブもあります。</p>
</div>
<div class="videoblock">
<div class="content">
<iframe src="https://www.youtube.com/embed/c2lEu9WWfBg?rel=0" frameborder="0" allowfullscreen=""></iframe>
</div>
</div>
<div class="sect2">
<h3 id="_ぎもちんさんcのキモイ高速プログラミング">ぎもちんさん「C#のキモイ高速プログラミング」</h3>
<div class="paragraph">
<p>C# を触ったことすらないのでポインタがさわれること自体初耳でした。
1ns以下で可読性と引き換えに配列の型が変換できるのは凄いなあと思いました。
ふと思ったのですが、RustもCrystalもF#もそうなんですけど、ブラットでいろいろできる裏ワザっぽいやつって色々な言語であるなあと。</p>
</div>
</div>
<div class="sect2">
<h3 id="_かるさんdenoに5分で入門してみた">かるさん「Denoに5分で入門してみた」</h3>
<div class="paragraph">
<p>NPMのnode_modulesディレクトリがあまり好きではないという個人的な理由もありますが、
Deno v1.0.0がリリースされたのはYarn v2のrc版リリースと共に、ここ最近Webエンジニア界隈を賑わせたニュースといっていいのではないかなと個人的には思っています。
DenoとはNodeの作者がNodeでの反省をもとにRustで実装したJS/TS処理系で、セキュリティに気を使っている、JSの標準規格に準拠している、ネイティブでTSがコンパイルできるということが特徴です。
GolangやRustに影響された点を随所に見ることができます。</p>
</div>
</div>
<div class="sect2">
<h3 id="_uemura5683さんmicrocms_nuxt_jsで個人ブログサイトをデプロイした件">uemura5683さん「Microcms + nuxt.jsで個人ブログサイトをデプロイした件」</h3>
<div class="paragraph">
<p>ヘッドレスCMSがNuxtやNextと組み合わせてブログなどに使われつつあるというトレンドを知ってはいましたが、そこまで深くは知りませんでした。
Microcmsって問い合わせフォームのようなClientからServerにデータを送信する処理が作れたことは初耳でした。
事前にビルドするスタイルのHugoやJekyllではできないこともできるのはヘッドレスCMSの強みだなと感じました。</p>
</div>
<div class="paragraph">
<p>また、私もNuxt.jsのプロダクトをレンタルサーバで手動デプロイしたことはあるのですが、これがなかなかつらいです。
NetlifyはNuxtのビルドからデプロイまで自動でやってくれるのでありがたい存在だなあと再認識しました。</p>
</div>
</div>
<div class="sect2">
<h3 id="_uniokaさんdiscordでクソbotを作った">Uniokaさん「DiscordでクソBotを作った」</h3>
<div class="paragraph">
<p>スライド全体にユーモアがちりばめられおもしろかったです。
コマンドを打つとボイスチャンネルにBotが入ってきてEDMが流して帰るというBotだったのですが、発想がおもしろかったです。
Typoの達人などユーモアに溢れるBotが他にも限界開発鯖にはあるらしくおもしろいなあと。</p>
</div>
</div>
<div class="sect2">
<h3 id="_fly_in_pigさん_今日はいい天気ですねところでセミコロンは消えるべきなのです">fly_in_pigさん 「今日はいい天気ですね。ところで、セミコロンは消えるべきなのです。」</h3>
<div class="paragraph">
<p>C/C においてセミコロンは逃げられないものかと思っていました。
しかしC/C の黒魔術?によってどうも逃げられることを知って、C/C++ の世界(というか黒魔術?)は広いなあと感じました。
ところでなんでRustはセミコロン採用してるんだろうか……。</p>
</div>
</div>
<div class="sect2">
<h3 id="_takumiさん転職に伴うスキルチェンジへの取り組み">Takumiさん「転職に伴うスキルチェンジへの取り組み」</h3>
<div class="paragraph">
<p>私は学生なのですが、この学校に入学してかたそれなりに在籍年数がある年になりました。
そうなると身近に就職する先輩がいたりするわけですが、就職する先輩はいても転職する人は身近に居ません。
ですので、どのように転職するのか、どう方針を立てていくべきなのかということが参考になりました。
AWS、Azureはやっぱりトレンドなのか……。クラウドは料金体系がVPSより高いのでつらいですが、勉強しようと思いました。<br/>
また、私もそろそろ社会人になるのか……という複雑な思いも。</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_反省">反省</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_スライドとスライドの間でトークを入れたかった">スライドとスライドの間でトークを入れたかった</h3>
<div class="paragraph">
<p>反省会でも言ったのですが、スライドとスライドの間でトークを入れたかったです。
これは私がよく参加させていただいている、高専カンファレンスにてやられているのを見ておもしろそうだなと思ったものです。
ただ、様々な人が様々な分野の発表するというこのLT会の特性上、コメントがむずかしいし、トーク力が要るなあと思ったのでした……。</p>
</div>
</div>
<div class="sect2">
<h3 id="_最初緊張しまくって司会がテンパったり噛みまくったり">最初緊張しまくって司会がテンパったり、噛みまくったり</h3>
<div class="paragraph">
<p>私の上がり症をがんばって直します。それしかないかなーと。</p>
</div>
</div>
<div class="sect2">
<h3 id="_lt前の接続テスト">LT前の接続テスト</h3>
<div class="paragraph">
<p>学内でのLT会ではやっていたけど完全に忘れていました。
後述ですが、これが一番の問題点だと思っています。気付かなかった私を殴りたい……。</p>
</div>
</div>
<div class="sect2">
<h3 id="_clusterならではの話">clusterならではの話</h3>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>音声関連の不具合</p>
<div class="paragraph">
<p>音声関連の不具合は多かったです。
これは前述した通り、LT前の接続テストを行っていなかったという問題も一部かかわっているとは思いますが、
具体的な症状としては音声が急に入らなくなる、ダブる、プツプツ途切れるという事が多発しました。
プツプツ途切れるという症状はcluster側でもYouTube側でも発生し、YouTubeの方が回数は多かったです。
.. やはり、一番の問題点は接続テストをしなかったことに起因しているのかなと思います。</p>
</div>
</li>
<li>
<p>clusterの機能について</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>Twitterとの連携コメント</p>
<div class="paragraph">
<p>clusterにはTwitterとの連携コメントという機能があります。
これはclusterとTwitterのアカウントを連携するとclusterのイベントでした自分のコメントがTwitterにも投稿されるものです。
主催者としては参加者を増やすことにも繋がることなので重要かなと思っています。</p>
</div>
</li>
<li>
<p>写真撮影</p>
</li>
<li>
<p>エモーション</p>
<div class="paragraph">
<p>参加してくださった方が自発的にやっていただいきました。感謝です。
会場では原則ミュートというルールへの協力の下運営をしていたので、登壇者にとっては静かな会場と対峙しないといけないわけです。
これは緊張する一因にもなりえるのではないかと個人的には思いました。
本会は題名にある通り、「ゆるい」をモットーにやっています。
ですから、登壇しづらさはできるだけ排除するべきです。
connpassにはclusterの入門資料をリンクとして掲載してはいますが、これらの機能でもっと盛り上げることも可能かと考えられます。
よって、最初にこれらの機能を簡潔にでも説明すべきだったかなと思っています</p>
</div>
</li>
</ol>
</div>
</li>
<li>
<p>YouTubeのコメントが入ってこない</p>
<div class="paragraph">
<p>これはリハーサルでも起きました。
ahttps://www.youtube.com/watch?v=tYs9bwY-2Gg[WebxR Tech Tokyo #0]のyoutubeアーカイブではこのようなことは起こっていないため、clusterに問い合わせてみないとわからないです。
ただ、Youtube側のコメントをキャッチしづらいのでこの問題はかなり重要かもしれません。</p>
</div>
</li>
<li>
<p>connpassページの資料の数</p>
<div class="paragraph">
<p>connpassにはたくさんclusterの資料をまとめておいたのはよかったという声をいただいたものの、それでも、「戸惑いながらやった」という方も多かった。</p>
</div>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="_cluster側の開場時間">cluster側の開場時間</h3>
<div class="paragraph">
<p>cluster側でも遅くとも5分前の開場をするべきだったと思っています。
youtube側はそのようにしていましたが、cluster側はそのように設定するのを忘れていました。<br/>
また、LT前の接続テストも考慮するならば30〜15分前などでもいいと思いました。</p>
</div>
</div>
<div class="sect2">
<h3 id="_反省会">反省会</h3>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>反省会での話題の振り方がざっくりすぎた</p>
<div class="paragraph">
<p>当日に10分程度で作ったざっくりと抽象的な話題はすぐに終わってしまいました。
参加者のみなさんが話を繋げてくださったことに感謝しかありません。<br/>
次にチャンスがあり、その際に反省会もやるならば、話題をその場で作り、それをベースに話を進めるというスタイルだとよさそうかなと考えています。
例としては<a href="https://cokonpile.connpass.com/">Co-KoNPILe</a>のように懇親会はもくもく会をやられています。</p>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_最後に">最後に</h2>
<div class="sectionbody">
<div class="paragraph">
<p>みんなでわいわいできたらいいなあとふわっとした動機で計画していたこのLT会ですが、楽しんでいただけたら幸いです。<br/>
また、clusterで何かLT会を主催されるという方の役に経ったら幸いです。</p>
</div>
</div>
</div>
BlogをNanocで改装した
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2020/05/21/rebuild-blog-by-nanoc/
2021-01-30T15:36:05Z
2020-05-21T14:32:31Z
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>おひさしぶりです。Nakayaです。Blogを引っ越してもう1年が経とうとしていますね……。
後で書くのですが、Hugoに納得できなくなって、GatsbyJSで改装して、またNanocで改装してと転々していたりでBlogの構築自体が面倒になって放置してしまいました。
加えて、TwitterやPleroma、Misskeyなので短文を書くことに慣れ、長文を書くことに面倒臭さを感じていたのもあります。
少なくともBlogからエタっていた間に世間は随分変容してしまったようで、私自身も前からずっと引きこもりみたいな生活をしていたのに、さらに家に出なくなってしまいました。
今回はブログをNanocで改装したのでそれに至るまでの話をしようと思います。少しばかりお付き合いください。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="replace-gatsbyjs-once">GatsbyJSへ一旦の移行</h2>
<div class="sectionbody">
<div class="paragraph">
<p>去年の8、9月にHugoへの不満が高まり、HugoからGatsbyJSに移行しようと決断しました。GatsbyJSを選んだのには、</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Asciidocが使える</p>
</li>
<li>
<p>jsxでテンプレートが自由自在に組める</p>
</li>
<li>
<p>GraphQLから幅広いファイルの情報が選られる</p>
</li>
<li>
<p>日本語文献が多い</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>が大きかったです。結構すんなり組めはしたのですが、インラインCSSがバリバリ施されたStarterを見て、外装を替えようという気持ちが薄れてしまいました。
また、小さいパッケージが多く依存関係が毛糸の球も顔負けのぐちゃぐちゃさで、1つのパッケージにセキュリティ上の脆弱性が見つかるとドミノ倒しのようにその影響を受け、パッケージを更新しなければならないという、
npmの文化が面倒に感じてしまったこともあります。
ところでDeno v1.0.0リリースされましたね。v0.40.0くらいと最近の頃からではありますが、ちょっと追っ掛けてたのでWebエンジニア界隈に一石を投じられていることに感動しました。
この勢いでnpmを滅ぼしてくれ……。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="do-you-know-good-static-site-generator">他にAsciidocが使える静的サイトジェネレータはないか?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>他にAsciidocが使える静的サイトジェネレータはないか?と思って<a href="https://staticgen.com/">StaticGen</a>を漁っていると、
BlogからLPまでなんでも組めちゃうかなり自由度が高いRuby製静的サイトジェネレータだそうで。これしかないと思いNanocで組んでみようと決断しました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="difficult-part">難しかった部分</h2>
<div class="sectionbody">
<div class="paragraph">
<p>一番はNanocに関する文書、ブログ記事が少ないことでした。今Nanocはバージョンが4なのですが、以前のバージョン3に関する5、6年前の記事が出てきて
日本語文献はそのバージョンのものが多く、ほとんどの情報が今はもう通用しない情報でした。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="what-i-learned">学べた部分</h2>
<div class="sectionbody">
<div class="paragraph">
<p>今回、CSSフレームワークには<a href="milligram.io/">Milligram</a>を採用しました。これはBulmaと比べるとかなり軽量なフレームワークでTypographyや引用、containerくらいしか実装していません。
Bulmaばかり使っていたものの、HTMLの構造が複雑化するBulmaが嫌になり、対極的なMilligramを採用することにしました。
MIlligramのそのシンプルさからレスポンシブ対応を自分で実装することになりましたがこれがかえっていい勉強になりました。
レスポンシブ対応にはCSS メディアクエリを用いるらしいとのことですが初耳でした。
まだうまく行ってない部分もあるので不具合もあるかとは思いますが、スマホ、タブレット、PCでちょっとフォントサイズが違っていると思います。
またSEO対策でbreadcrumbなどを<a href="https://schema.org">Schema.org</a>とにらめっこしながら書いてみました。ちょっとはGoogleで上位になると思います。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="still-have-to-do">まだやり残していること</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Webmentionについては近々別の記事で語りますが、記事の終わりのあたりにWebmentionによって得られたリアクションをDISQUSのiframeみたくくっつけたいです。これは別リポジトリでElmによって書かれるかもしれません。
レスポンシブ対応もまだ中途半端です。breadcrumbが環境によっては途中で改行されていたりしていると思います。これを改行させるのではなく横スワイプにしたかったり。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conclusion">さいごに</h2>
<div class="sectionbody">
<div class="paragraph">
<p>実はこのブログのデザインはMediumを意識しています。どこかで「サイドバーはないほうがいい」と聞いていたのとMediumのデザインが好きなので。
素人なので8割ショボくなったMediumもどき以下になりましたが……。
この記事は原稿をWorkflowyで書いているのですがアウトライナーっていいですね。短時間で原稿を書いたわりにはそこそこの量を書けました。Workflowyまた使おうと思います。</p>
</div>
</div>
</div>
W32TeX向けアーカイブマネージャを作った
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2019/08/18/make-wtmgr/
2021-01-30T17:30:31Z
2019-08-17T15:28:22Z
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>こんにちは。最近部誌でTeXを使っているのでTeXにお熱のNakayaです。ブログ更新が2週間空きましたが元気に生活しています。</p>
</div>
<div class="paragraph">
<p>WindowsでTeXLiveを使うと毎年更新しないといけないみたいだし、tlmgrが重いしで、私はW32TeXを使っています。しかし、パッケージの管理が大変なので先日<a href="https://github.com/eniehack/W32TeX-Package-Manager">W32TeX向けのアーカイブマネージャ</a>を開発しました。その経緯と思想、内部構造、今後などを語っていきたいと思います。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_経緯">経緯</h2>
<div class="sectionbody">
<div class="paragraph">
<p>先日ConTeXtを試してみるかと思い立ってConTeXtのアーカイブをダウンロードし、
<code>texinstwin</code> からの <code>installmk4</code> と、<a href="https://texwiki.texjp.org/?ConTeXt">TeXjpWiki</a>通りにコマンドを実行してみると、どうもLuaLaTeXのバージョンが古いみたいでインストールに失敗しました。<br/>
その後W32TeX版LuaLaTeXの最新版を落として無事にConTeXtはインストールできたのですが、
W32TeX公式のCLIインストーラ版にはパッケージマネージャが付属していないのでこうなったのかなあ、と思ったわけです。
<del>ちゃんと更新くらい確認しろ</del>
W32TeXには他にも初心者向GUIインストーラもあるのですがどうも私の環境では不安定なようで、CLIインストーラを導入して今に至っていて不便なあとずっと思ってました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_思想">思想</h2>
<div class="sectionbody">
<div class="paragraph">
<p>先日のConTeXtの件で本格的にパッケージマネージャを作るぞ、となりましてあれこれ考えて以下のように思想が固まりました。</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>Arch Linux</code> のパッケージマネージャ、 <code>pacman</code> の良さを取り入れたい<br/>
<code>apt install</code> なんて長い文字列打ちたくないですよね。でもPacmanなら <code>pacman -S</code> でできて楽ですね。</p>
</li>
<li>
<p>TeXの面倒な部分をなくしたい<br/>
そういえばマクロパッケージとかインストールするのも面倒だったなと思って、マクロの管理もできるといいなと思いました。</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_書いてて思ったことなど">書いてて思ったことなど</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>GolangのFTP系ライブラリが弱い<br/>
後述するのですが、ファイルリストを詳細取得するコマンド(<code>MLSD</code>)に対応してなかったり、コマンド直打ちできなかったりいろいろでした。勉強がてらGolangでFTP系ライブラリ書くのはアリだなと思ったりしました。</p>
</li>
<li>
<p><code>interface{}</code> 、お前……<br/>
Golangの空interfaceはどんな型でも取ることができます。これがGolangのいい点であり悪い部分でもあるんですよね……。</p>
</li>
<li>
<p>PythonもGolangも久し振りに書いた<br/>
Pythonはもうめっきり(9ヶ月~半年)書いてないので覚えているわけもなく……。Golangも数ヶ月前まで書いてたのにエラー吐かれまくってました。GolangはTILにまとめたはずなのにTILはまともに使えない代物だったし……。</p>
</li>
<li>
<p>FTPってこんな感じなのか……<br/>
FTPに触れるのが始めてだったのでとても勉強になりました。</p>
</li>
<li>
<p>Python便利だな……<br/>
ほとんど標準ライブラリで書けてしまいました。すごい……。</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_内部では何が起こっているのか">内部では何が起こっているのか</h2>
<div class="sectionbody">
<div class="paragraph">
<p>2019/08/18時点では内部構造は以下のようになってます。</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>CLIで欲しいパッケージを取得する<br/>
<code>wtmgr -S luatexja</code> だったら <code>luatexja</code> が欲しいんだなとなるわけです。<br/>
また、コマンドライン引数のパースにはPython標準ライブラリの <code>Argparse</code> を使ってます</p>
</li>
<li>
<p>FTPでミラーにアクセス<br/>
W32TeXのアーカイブをミラーしてくださっているサーバはいくつかあるのですが、選ぶアルゴリズムを考えるのも面倒だったのでringから取ってくるようにしてます。<br/>
これまたPython標準ライブラリである、 <code>ftplib</code> を使ってFTPの操作をしてます。</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>目的のディレクトリまで <code>CWD</code><br/>
UNIXでいうとこで <code>cd</code> ですね、FTPでは <code>CWD</code> (Change Working Directory)とかいうっぽいです</p>
</li>
<li>
<p><code>MLSD</code> してファイルリストを取得<br/>
<code>LIST</code> だかというFTPのコマンドがあるのですがこれだと単純にファイルリストを返すだけなのでファイルの変更日時とかが分からないので <code>MLSD</code> を使うことにしました</p>
</li>
<li>
<p>欲しいパッケージとファイルリストを照合する<br/>
forとif文をブン回すやつです</p>
</li>
<li>
<p>目的のファイルを <code>RETR</code> する
Pythonではバイナリを <code>open()</code> でhogehogeするさいは modeの最後に <code>rb</code> のように <code>b</code> をつけるっぽいですね。勉強になります。</p>
</li>
</ol>
</div>
</li>
</ol>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_今後">今後</h2>
<div class="sectionbody">
<div class="paragraph">
<p>現時点では最低限のことしてできないのでまだまだ拡張していきたいところでして、今後計画しているのは機能の拡張と言語を変えてのリライトの2つです。</p>
</div>
<div class="sect2">
<h3 id="_機能の拡張">機能の拡張</h3>
<div class="paragraph">
<p>とりあえずアーカイブのダウンロードが簡易的にはできるようになったので、それをアップデートできる機能が欲しいと思ってます。<br/>
また、そういえばLaTeXのパッケージってインストールするの面倒だったよなと思ったので、ここからLaTeXのパッケージを管理できるようになりたいと思ってます。
<del>環境変数 TEXMF って探すの面倒じゃないですか?毎回ggってしまいます</del>
</p>
</div>
</div>
<div class="sect2">
<h3 id="_開発言語の変更">開発言語の変更</h3>
<div class="paragraph">
<p>PythonはArgperserやftplibが標準ライブラリとなっていて魅力的な言語ではありますが、
Windowsで使うにはPythonインストールする手間などを考えると少々ハードルが高くなるかと思ってます。
<del>そもそもTeXの導入はハードルが高いのでは?</del><br/>
また、私自身さまざまな言語に触れてみたいと思っていることもあり、他言語で開発しようかなと思ってます。<br/>
移行先の言語候補としては、なんだかんだ単一バイナリが吐けて便利なGolang、
勉強がてらRust、F#のあたりかななんて。</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_おわりに">おわりに</h2>
<div class="sectionbody">
<div class="paragraph">
<p>TeXの何がダメってエラーメッセージの適当さですよね。
まあ、そこを気にしたらTeX使えませんし膨大なマクロが使えるのがいいんですけど……。
しかも最近は代替としてSATySFiやRe:view、Asciidoctorもあることですし……。</p>
</div>
</div>
</div>
July 2019 Monthly Report
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2019/08/03/2019-07-monthly-report/
2021-01-30T17:30:31Z
2019-08-02T15:45:13Z
<div class="paragraph">
<p>先月07月にあったことをカテゴリ別に書いていこうと思います</p>
</div>
<div class="sect1">
<h2 id="technology">技術</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>弊ブログ開設</p>
</li>
<li>
<p>Learn-ActivityPubの進捗</p>
</li>
<li>
<p>OCamlの再帰を理解(?)</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="otaku">オタク</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>Key最新作『Summer Pockets』を1年越しのクリア<br/>
<del>積みゲーって指数関数的に増えますよね?そんなことはないですね</del>
</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="next-month">8月の目標</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="next-month-technology">技術</h3>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/eniehack/arduino-alerm">Arduino-Alerm</a>のコントローラを<a href="https://github.com/eniehack/arduino-alerm-controller">アプリ化</a>する</p>
</li>
<li>
<p><a href="https://github.com/eniehack/Persona-Server">Persona-Server</a>の実装<br/>
制作が始まってから5ヶ月ですが、いまだTLの表示や投稿の参照ができないのでその辺をどうにかしていきたいです。将来的にElixirで実装したい</p>
</li>
<li>
<p>BlogのテーマをHugo-zenベースで制作する<br/>
このブログのテーマはスマホからだとメニュー開くのが大変なので早急に対応したいです</p>
</li>
<li>
<p>OCamlの勉強<br/>
OCamlの本買ったのはもう8ヶ月前でしたね……</p>
</li>
<li>
<p>ActivityPubの規格書を日本語訳にしてまとめる</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="next-month-otaku">オタク</h3>
<div class="ulist">
<ul>
<li>
<p>ノベルゲーム買う<br/>
年齢制限ゲーを買う気になったので買います。夏だし『AIR』もやりたい。</p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_総評">総評</h2>
<div class="sectionbody">
<div class="paragraph">
<p>先月はテストがありやや活動が活発ではありませんでしたが、来月からはPersonaやLearn-ActivityPubなど進捗が止まってしまったプロジェクトの進捗を出していければなーと思ってます。</p>
</div>
</div>
</div>
ブログ移行しました
Nakaya
https://eniehack.net
https://blog.eniehack.net/articles/2019/07/20/introduction/
2021-01-30T17:30:31Z
2019-07-20T14:24:09Z
<div class="paragraph">
<p>この度ブログをはてなからnetlify+Hugoに移行しました</p>
</div>
<div class="sect1">
<h2 id="process">経緯</h2>
<div class="sectionbody">
<div class="paragraph">
<p>3月くらいまではてなブログで書いていたのですが、4月頃ブログを更新しようと、はてなにログインしようと思うも
正常にログインできなくなったのがきっかけです。
たぶん、uBlock originかuMatrixのCookieとかそのへんがいろいろやらかしてるんだろうと思いますが、
ホワイトリストの設定をしてみてもダメだったので、はてなブログはやめてこの際Hugoで書くかと思いつき、移行に至りました。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="about-this-blog">このブログについて</h2>
<div class="sectionbody">
<div class="paragraph">
<p>このブログには技術的なことから趣味のことまでいろいろ書こうと思っています。
また、共有ボタンや、タグ、カテゴリなどが整備されていないのでまだまだ不便ですが、
テーマを変更、修正するなどして改善していこうと思ってます。
その他改善すべきことがありましたら <a href="https://github.com/eniehack/blog/issues">こちらのissue</a>に
報告していただけるとありがたいです。<br/>
余談ですが、こちらはGitHubで管理しているので <a href="https://github.com/eniehack/blog">ここ</a>から読むこともできます。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="about-before-blog">前のブログについて</h2>
<div class="sectionbody">
<div class="paragraph">
<p><a href="https://eniehack.hatenablog.com">前のブログ</a>についてはこのブログに移したり削除したりすることなくそのまま置いていおくことにします。</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="last">最後に</h2>
<div class="sectionbody">
<div class="paragraph">
<p>最初の投稿でこんな拙い文になってしまいましたが(今後が不安)、よろしくお願いします。</p>
</div>
</div>
</div>