2021/08/17 & 08/18

Table of Contents

  1. 入学書類を提出した (08/17)
  2. SS を読んだ (08/17)
  3. 学校へ行った (08/18)
  4. 創作を始めようとお題 bot を作ろうとした(08/18)
  5. 今日の曲

08/17、08/18 はやったことがあまりなかったので、比較的短めになった。 初期からはだいぶやる気が落ちてきたし、図書館から借りた本、貯めている技術書や新書でも消化しようか、という気になった。

入学書類を提出した (08/17)

郵便局へ大学の入学書類の提出をしてきた。 無事出せたけど、そもそも卒業できるのかが、かなり不安なので、まずは再再試と後期の授業をがんばることから始めようと思う。

SS を読んだ (08/17)

ひさしぶりに pixiv を開いたら『氷菓』の SS があったので読んだ。ついでに、同じ作者さんの『とらドラ!』の SS も読んだ。 ふと思ったのだが、その日読んだ SS についてまとめるのもよさそうだ。しかし、ここで公開するのは憚られるので、鍵垢の Privatter にでも上げようかなーと思った。

学校へ行った (08/18)

デザイン実験を進めるために学校へ行った。 その後、友人に数時間、暗くなるまで電磁気を教わった。ありがたい。

創作を始めようとお題 bot を作ろうとした (08/18)

創作、特に一次二次問わず、物書きがしてみたいと最近思い始めた。

なので、まずは手元にある、大塚英志の『物語の体操』という本 [isbn:9784061385399] に紹介されている『「解体と再構成」のレッスン』のお題出題をプログラムにやらせようと思った。

どうせなら今学んでいる Scheme でやらせようと思った。 本当は Chicken Scheme で書きたかったが、Windows で build できないので、Racket で書くことにした。

しかし、モジュール関連の問題でうまく動作しなかったし、Racket のモジュールシステムはよくわからなかったので、明日以降、Lua か Nim で書いてみたいと思う。

今日の曲

最近のkouichitvのED。kouichitvのEDはいい曲が多いのでおすすめ。

アルクアラウンドに友人がハマったらしいので、私も聴き直している。

2021/08/15 & 08/16

Table of Contents

  1. matrix インスタンスを閉鎖することにした (08/15)
  2. 単位変換に関して (08/16)
  3. space 参加 (08/16)
  4. 中国語の復習をやるぞと思って。
  5. 今日の曲

今日記事を出さなかったら、もうやらなくなるという危機感から筆をとった。 そういえば、アニメ視聴、創作の練習と"Writing a DSL in Lua"の精読をやってないことに気がついた……。

matrix インスタンスを閉鎖することにした (08/15)

約 2 年間運用してきた matrix のサーバ(matrix-jp.net)を09/25 0:00に閉鎖することにした。 少しでもmatrixの普及に貢献できたのであれば、よかったな、と思う。

ちなみに、matrix というのは連合型チャットサービスで、イメージとしては LINE、Twitter の DM、Discord がそれぞれ連合するみたいな感じ。 MastodonやMisskeyを使っている人々には浸透している。

単位変換に関して (08/16)

この単位群は何単位までのような規定を計算をするために LibreOffice calc(Microsoft Excel 相当)で複雑な処理をさせたくて、 LibreOffice Basic(VBA 相当、互換性はなし) を触った。 構文の最後に End とか書く、前近代的な言語で苦痛だったが、なんとなく形になったのでよしとする。

書いたスクリプトは以下。変換する単位を 5 つほどに分類して、数字として入力することで種類ごとの合計単位数を算出する。

gist.github.com

ちなみに、LibreOfficePython でもマクロを記述することができるが、 LibreOffice の起動するときに、オプション付けてポート開く必要があるなど面倒そうなので、地獄を覚悟して Basic に触った。

space 参加 (08/16)

大学の同級生や先輩になるであろう方々と Twitter Space で話した。 スライドのデザインを決めるにあたって、決算資料読んでたと聞いてすごいなーと思った。

私は、受験 2 週間前に PC が壊れ、2週間でスライドを作ったため、デザインで時間がかけられなかったので、hue360 で適当に色を 2 つ 3 つ抜き出して作った。なので結構シンプルというかみすぼらしいスライドになっている。

hue360.herokuapp.com

参加している人の受験体験を聞くと、私がなぜ合格したのかが、ますます謎なった。

そういえば、学内向けの受験報告書を書いてないのを思い出した。

中国語の復習をやるぞと思って。

東京外語大のサイト見て勉強しようと思ったけど、机の上が汚なすぎて PC とノートが広げられないのでやる気が出ずにいる。

今日の曲

Cymbals を紹介したら、友人に勧められた曲。

kouichitv を見てたらサジェストされた曲。

2021/08/13 & 08/14

Table of Contents

  1. スーパーへ(08/13)
  2. 文具屋へ(08/13)
  3. prosody の http upload 対応(08/13)
  4. kouichi TV(08/14)
  5. 今日の曲

今日の日記は、文字数も多くないし、比較的とりとめのない内容になっている気がする。

"Writing DSL in Lua"の精読と、『ぼくたちのリメイク』の再視聴を明日にはやりたいなあとは思ってるけど、これはずっと先延ばしになる気がする。 GYAOの「友崎くん」の5話を見逃した(気がする)。

スーパーへ(08/13)

学校の購買が夏休み期間中はやっていないと聞いて、物珍しいカップ麺の買い出しと、08/12 に飲んだ甘酒、08/11 に飲んだ ZIMA の買い足しをした。

eniehack.hatenablog.com

eniehack.hatenablog.com

文具屋へ(08/13)

08/07 の記事に書いた通り、

eniehack.hatenablog.com

指導教員のノート術を聞いて、紙とバインダーが欲しくなったので大きな文具屋に行った。

途中で気が付いたのだが、ルーズリーフの大きな 2 つの穴はフラットファイルやリングファイルに対応していると気がついた。 なのでフラットファイルにルーズリーフを入れればいいと思い、フラットファイルと、親に勧められた入る枚数が少ないながらも使いやすそうなルーズリーフ用バインダーを買った。 紙のほうは、方眼のルーズリーフと、無地のルーズリーフってどんな感じなんだろうと、無地のルーズリーフを買った。

親がレジに並んでいる間、wemo という商品が目に入ってきた。

wemo.tokyo

結構便利そうだと思った。 後でサイトを見ると対応しているボールペン、してないボールペンがある事を知り、持っているボールペンが全て非対応であることに気がついて、ちょっとがっかりした。

prosody の http upload 対応(08/13)

08/12 に引き続き、XMPP サーバの設定をやっていた。 upload するにあたって、prosody と直接通信するのではなく、nginx をリバースプロキシとして通信させたかったので色々試行錯誤をしていた。 mod_http_upload でうまくいかなかったので、mod_http_upload_external と prosody-filer でなんとかしようと思ったけど、どうやってもうまくいかないので放置。

kouichi TV(08/14)

友人の運営している discord 鯖に kouichiTV に関するチャンネルがあったので気になって見てみた。1~2 分ほどで見られるので、罪悪感なく見られる。何本も見ちゃって普通に 30 分を溶かすので罪悪感どうこうではないけど……。 個人的にはこのへんの動画が好きだった。

今日の曲

08/13 に友人とチャットモンチーいいよねという話をしていたので。

kouichiTV の ED を作っているおだじんさんの曲のメロディがよかったので。

2021/08/12

Table of Contents

  1. IgnorePkg に入っていた postregsql のアプデ
  2. prosody の HTTP upload 対応
  3. Let's Encrypt のワイルドカード証明書の自動更新のために certbot から acme.sh へ移行した
  4. ぼくたちのリメイク 第 5 話視聴
  5. 白鶴の甘酒を飲んだ

今日は英熟語をやったりなんだりで夜忙しかったので、書き始めた頃にはもう日を完全に跨いでしまった。

IgnorePkg に入っていた postregsql のアプデ

pacman ではパッケージやグループを更新の対象から外せるのだが、更新対象から外れたパッケージの更新方法がわからなかった。この問題は

pacman -S postgresql-libs postgresql

で普通に解決した。

prosody の HTTP upload 対応

1 年ほど前から、prosody という Lua 製の XMPP 鯖を構築し,友人と使っている。 が、しかし、友人とで使っている XMPP クライアントでは、グループチャット上で画像の送信ができない問題があった。 暇だったので、ファイルの HTTP upload 対応をやってみることにした。 まずは upload.jabber.eniehack.net というサブサブドメインを発行。 次に prosody のコミュニティが作るモジュールmod_http_uploadMercurial をつかってコミュニティの管理するモジュール全体をクローンしてもってくる。 3 つ目に prosody.cfg.lua をモジュールのドキュメントを参考に以下のように書きかえる。

Component "upload.jabber.eniehack.net" "http_upload"
    https_upload_path = "/var/prosody/files/"
    modules_enabled = { "http_upload", "http_files" }

Let's Encrypt のワイルドカード証明書の自動更新のために certbot から acme.sh へ移行した

XMPP サーバはサブサブドメインを発行したほうが、簡単にいくようであることをドキュメントから感じるので、wildcard 証明書を発行してみた。 雑にこんな感じでコマンドを実行する。

sudo certbot certonly –manual \
–preferred-challenges dns-01 \
-m “hogehoge@example.jp” \
-d “example.jp” \
-d “*.example.jp” \
–agree-tos

すると、DNS の TXT レコードにこの文字列入れろ、と案内があるので、コピペして完了。

その後、ワイルドカード証明書の自動更新について調べたいたら、面倒そうだったので、certbot から acme.sh へ移行することにした。 というのも、ワイルドカード証明書を発行するにあたって、DNS の TXT レコードを操作する必要があるのだが、 各レジストラが用意する DNSAPI に対応しているもの、していないもの、がそれぞれに出てくるのはしかたがない。 eniehack.net では njalla という変わったレジストラを使っているので、certbot ではデフォルトで対応しておらず、第三者プラグインを導入することで利用が可能だが、AUR になかったので、acme.sh へ移行することにした。

まずは普通の Web アプリケーションだが、以下のようにして証明書が発行できる。--cert-homeに関してはお好みで。

acme.sh --issue -w /usr/share/nginx/html -d nextcloud.example.jp --server letsencrypt --cert-home /etc/acme.sh/

次に nginx 用にファイルを移動する。インストールというらしい。

mkdir -p /etc/nginx/certs/letsencrypt/nextcloud.example.jp/
acme.sh -i --cert-home /etc/acme.sh -d nextcloud.example.jp --key-file /etc/nginx/certs/letsencrypt/nextcloud.example.jp/privkey.cer --fullchain-file /etc/nginx/certs/letsencrypt/nextcloud.example.jp/fullchain.pem --reloadcmd "systemctl reload nginx"

ちなみに、インストールする場所、インストール後に行われるコマンド(--reloadcmd)や hook に関しては --cert-home の下のディレクトリに記録されている。 そのため、証明書の更新に関しては acme.sh --cron --cert-home /etc/acme.sh/という少ない文字数で済む。systemd-timer を使った自動更新の方法は公式wikiを参照。

次に XMPP サーバの Prosody への証明書発行だが、ワイルドカード証明書を発行した。 DNS の各 API に関してはここを参考にした。 まず、証明書を発行。

export NJALLA_Token="some token"
acme.sh --issue --dns dns_njalla -d jabber.example.jp --server letsencrypt --cert-home /etc/acme.sh/

次にインストールする。しかし、Prosody は 通常の XMPP 通信だけでなく、HTTP を介したファイルアップロードや WebSocket、BoSH による XMPP 通信のサポートを行っているために、証明書を Prosody と nginx へそれぞれ配置しなければならない。 なので、少々面倒な Prosody への証明書配置を以下のようなスクリプトを作成し、

#!/bin/sh
cp /etc/acme.sh/jabber.example.jp/fullchain.cer /etc/prosody/certs/jabber.example.jp/fullchain.pem
chmod 640 /etc/prosody/certs/jabber.example.jp/fullchain.pem
chown root:prosody /etc/prosody/certs/jabber.example.jp/fullchain.pem
    
cp /etc/acme.sh/jabber.example.jp/jabber.example.jp.key /etc/prosody/certs/jabber.example.jp/privkey.pem
chmod 640 /etc/prosody/certs/jabber.example.jp/privkey.pem
chown root:prosody /etc/prosody/certs/jabber.example.jp/privkey.pem

nginx への証明書配置を以下のように acme.sh の機能に担わせることにした。 先程のスクリプトは nginx や prosody の再読み込みの直前に実行させる。

mkdir -p /etc/nginx/certs/letsencrypt/nextcloud.example.jp/

acme.sh -i --cert-home /etc/acme.sh -d jabber.example.jp -d *.jabber.example.jp --key-file /etc/nginx/certs/jabber.example.jp/privkey.pem --fullchain-file /etc/nginx/certs/jabber.example.jp/fullchain.pem --reloadcmd "/path/to/prosody-cert-install.sh && systemctl reload nginx prosody"

ぼくたちのリメイク 第 5 話視聴

アニメはいつも GYAO で見るのだが、視聴期限が木曜 9:30 までのところを 1 時間オーバーして気がついた。でも 1 話から一斉配信をやっていたのでよかった。

内容の感想としてはエンディングがすごかった。

もっとこの作品の話をしたいのだが、熱く語れる人がいないし、見ていない人が多いということはネタバレに気をついけないといけないので、明日は一人でニコニコで見ようと思う。

白鶴の甘酒を飲んだ

今週月曜の帰りにスーパーでたまたま見つけた白鶴の甘酒を親と飲んだ。 世の中の甘酒には合成甘味料でさっぱりとした甘さを出しているものもあるが、白鶴の甘酒は砂糖を使っていながらもさっぱりをした、少し酸味のある味になっていて感動した。

2021/08/11

Table of Contents

  1. 昨日の動かなかった Lua API 関連のコードが動作した。
  2. 『Writing a DSL in Lua』を読んだ
  3. ZIMA がうまい
  4. 今日の曲
  5. 参考

昨日の動かなかった Lua API 関連のコードが動作した。

昨日、Nimで int から csize_t へ型変換する方法がわからなかったことを書いたが、castを使うと実現できることがわかった。具体的には以下のコードだ。

cast[csize_t](sizeof(int))

昨日のコードは最終的に以下のようになった。

gitlab.com

『Writing a DSL in Lua』を読んだ

leafo.net (追記: 2021/08/12 2:00 URLの追加)

Lua でゲーム用スクリプト言語を作りたかった、というのが、Nim から Lua を操作したかったのは何故かという話の終着点だ。 この記事は itch.io (Steam のようなゲーム販売サイト。DDLC や Mindustry で使われている)や Moonscript(Lua でへコンパイルされる言語)の開発者の方が書かれた記事のようだ。

なんか某ノベルゲームブランドのロゴと瓜二つの葉っぱがサイトにありますね

この記事は Lua で HTML を生成する言語を作ることを目的とした記事だ。 これを読んで Lua という言語の凄さを感じた。 具体的には「Chaining」という章にあるので、是非読んでいただきたいのだが、LuaDSL を作るにあたってベースにしやすそうな言語だと感じた。 読んでいて、幾つかつまづいた点があった。

まず 1 つ目にメタテーブルだ。 DSL を作成するにあたり、メタテーブルというものを活用する。 Luaオブジェクト指向プログラミングをするには、基本的にテーブルという型にそれぞれメソッドをぶら下げる形でクラスを作る。しかし、実装の中身が同じであっても、Lua 側では別物と認識されてしまう。そこで、登場するのがメタテーブルという概念である。 メタテーブルに関しては以下の記事が参考になった。hevohevo.hatenablog.com

次に、Lua 5.1 までは存在したsetfenv という関数を自力で実装する記事を見なければ、この DSL 処理系は完成しない。そこで使われるのが debug.upvaluejoin や、 debug.getupvalueという標準関数である。これらの標準関数が何をやっているのかが、よくわからなかった。 そこで、この記事を参考に理解しようと試みた。 Lua 5.3 では

print("Hello, World")

というコードが Lua の内部的には

(function()
  local _ENV = <グローバル変数に相当するテーブル>
  return function(...)
    print("Hello world!") -- この print は _ENV.print と等価
  end
end)()

のように評価されているらしい。 それで、先程の関数はグローバル変数を操作しているらしい。

今度は最初の記事を自分で和訳しながら理解できるといいな、と思った。

ZIMA がうまい

親と酒を飲むことが最近多いのだが、今日飲んだベトナム産の酒 ZIMA がおいしかった。

今日の曲

土岐麻子さんが参加していた、Cymbals という(もう解散してしまった)バンドもいいので是非。

参考

2021/08/09 & 08/10

Table of Contents

  1. 大学の入学手続きをやった
  2. 夏休みに入った
  3. nim で Lua を動かしていた
  4. 追記: ファミマの麻婆丼について
  5. 追記: 『CPUの創りかた』について

大学の入学手続きをやった

学生証に使おうと思っていた写真のサイズが違っていたので、証明写真を印刷してきた。 最近の証明写真機は過去撮影した画像を再印刷できて便利だ。

また、手続にあたって宿舎の話になった 自室にキッチンがないために、自炊する環境に工夫が要りそうだなと感じた。 浴室もないため、銭湯などはないかと調べたら、中心地からは遠いことがわかった。 学生の方はどのようにしているのか、気になる。

夏休みに入った

やりたいこと、やるべきことは沢山あるのはわかっているのだが、それらは整理されていない。 よって、暇のように感じてしまう、というあるあるが繰り広げられた。

何やろうと思ってたんだっけ……?と思い出してみたら、卒研、読書、ゲーム等々、案外思いつくものだなと感じた。

nim で Lua を動かしていた

nim という言語は C 言語を中間言語としてコンパイルすることができる(その他にも JavaJavaScriptC++を介してコンパイル可能らしい)。 その機能を用いて様々な C のライブラリが使える。

C 言語から様々な操作が簡単にできる Lua ももちろん、その恩恵に預かることができる。 Nim から Lua を操作するためのライブラリは4つほどあったが、その中でもよかったものを 2 つほどピックアップした。 まず、公式のものLua 5.0、5.1、5.2 に対応している。Lua の C API をそのまま Nim が使えるようにしただけのもの。 次に、nimLUALua 5.3 が使えて、かつ LuaAPI を Nim っぽく使えるらしい。

最初のうちは公式のものを fork して、使ってみた。しかし、Nim のコードが古いのか、コンパイルエラーになる。よって後者を使ってみることにした。

しかし、後者を採用した場合、Lua 5.3 は MSYS2-UCRT のリポジトリにはないため、ビルドする必要がある。 ビルドするにあたっては、このドキュメントを参照した。

curl -O https://www.lua.org/ftp/lua-5.3.6.tar.gz
tar xzf lua-5.3.6.tar.gz
cd lua-5.3.6
make mingw
make mingw install

しかし、lua53.dll がないとエラーを吐かれる。 成果物の中にはあるようなので、make install する過程でコピーされてなかったかと思い、 install -m 0755 src/lua53.dll /usr/local/binとしたら、動いたのでよかった。

しかし、ここを参考にLuaのC APIを理解しようと試みたが、Nimの型システムでハマった。具体的にはintからcsize_tへの変換する方法がわからなかった。

追記: ファミマの麻婆丼について

08/10の昼飯に食べた。味噌のようコクがありウマ辛!って感じだった。

追記: 『CPUの創りかた』について

先日、友人を作っているCPUのクロック回路のシュミットトリガインバータを破壊したという話を日記に書いた。 どの部品が壊れたのかを検証していたら、技術職員の方が『CPUの創りかた』を手にとり、「20年前の本だよね。出たときは衝撃的だったな」とおっしゃっていた。 寡黙な方だったので、びっくりした。

2021/08/07

Table of Contents

  1. 学校見学会
  2. 無地わら半紙最強説
  3. skk-fep を emacs だけ無効化する
  4. 今日の曲
  5. 参考

めっちゃ寝不足だった。2:00 に寝たのも、前日体育があったのもあるんだろうけど、酒が悪さをしたんじゃないかなーと勝手に思った

昨日酒を初めて飲んだ話を研究室の指導教員にしたら、コロナ前には研究室で歓迎会をやっていたらしく、その話を聞いて羨ましく思った。

今日からorg-modeからmarkdownを出力してみることにする。

学校見学会

今日は学校見学会の手伝いへ行ったのだが、電気電子系とオマケで情報、みたいな学科に属しているので、別にある情報系の学科との差異を聞かれると、説明するのに苦慮する。

また、中学生とその親御さんに、電気回路と電子回路を使い分けて話したところで、わからんだろうなと思った。 厳密に説明しろといわれると、私もトランジスタ使っているか否か、のような雑な解釈でしか認識しておらず、無理だと感じた。 そもそも、私は電子回路と電気回路とが違うことを最近認識したのであった……。

友人と作っているCPUの展示もやっていた。クロック回路でLED光らせたほうが見栄えがいいんじゃないかということで、直流安定化電源を繋いだのだが、voltageツマミを確認していないという凡ミスで17[V]が流れ、クロック回路で使っていたシュミットトリガインバータ74HC14が壊れたっぽい。後で74HC14の絶対最大定格をデータシートから参照すると、Vinが0.5~7[V]だったので、確実に死んだみたいだ……。

無地わら半紙最強説

指導教員とクラスメイト数人とで、ノートは iPad と紙どっちがいいのか論争をしていた流れで、指導教員が大学時代にわら半紙の B4 を折って B5 にした紙と、ボールペンを使っていた話を聞いた。 指導教員曰く、わら半紙は約 1 円/枚で安いこと、消しゴムを使うより訂正線のほうが速いことをメリットとして挙げていた。 方眼下敷きと組み合わせれば完璧じゃん!って思ったけど、学校からのプリントと持ち合わせている方眼下敷きで確かめてみたら、マス目が見えなかったのが残念。いい下敷はないものか。

skk日本語入力fepemacs だけ無効化する

emacsvim キーバインド(evil)で使っている関係上、Normal mode で全角入力が起動すると、もどかしい。 なので emacs では ddskk を使い、 emacs を使っている間は skk 日本語入力 fepIME を無効化する設定をした。 skk-fep.js を起動し、「コマンド」を選択。

skkrule emacs.exe m5
skkrule emacsclientw.exe m5
skkrule runemacs.exe m5

を打つ。これで emacsskk-fep を再起動すればなんとかなるはずなんだが、ちょくちょく skk 日本語入力 fep が乱入してきてもどかしい。なんとかならんのか。

今日の曲

友人の車に最近載せてもらう機会があったのだが、その時に掛かっていた曲。疾走感がいい。

参考