私が歌川です

@utgwkk が書いている

実質的に無料

同人誌印刷会社の仮注文を済ませて、予算の感覚がつかめてきた。スケジュール感も分かったので早割に間に合わせてみようとしてみているけど、早割を狙うと意外とそんなに余裕がない。とはいえ原稿はだいたいできているので、この1週間で仕上げて誰かに校正してもらおう……。

GitHub ActionsでPDFをビルドするworkflowを書いた。プライベートリポジトリでworkflowを走らせる時間には上限がある*1けど、コミケ直前の数週間走らせるぐらいなら実質的に無料だろうし気にすることはなかろう。workflowを整備するのは楽しくて、どうやると日々の作業の負荷が低減されるのか……などを考えながら進めたくなる。

GitHub Actions runner内にTeX Liveの環境を整えるところからやるのか、気が滅入るな……と思ったけど、Re:VIEWプロジェクト向けのDockerイメージが用意されていたので、コンテナ上でworkflowを動かすだけで済んで助かった。だいたい↓のブログ記事を参考にしました。

kakakakakku.hatenablog.com

校正大会を横目に原稿を進める

サークル*1の部誌の校正大会が行われているのを横目に、個人サークルの原稿をそこそこ進めた。いくつかの節はこのまま出してもよさそうというところまで書き上げられたと思う。

ちょっとしたコードブロックを挿入するとけっこう面積を使うので、意外とページ数がギリギリかもしれない。

*1:KMC

よくわからない夢日記

6/21からずっと下書きに入っていたけど、よくわからないのでそのまま公開します。


スーパーで買い物

カゴを片方置いてきてしまい見つからない

ダチョウの卵が売ってある

ハムやベーコンを買おうとする

店の中で飲みまくる人たち、こんなん水やんかと行って安いビールを飲んでいる

X JAPANの楽曲が流れる

新快速に乗るついでで旅をしたっていい

土曜日に目が覚めて、ぐうたらして午前を終えつつあるなか、ふと頭をよぎる。新快速に乗りたい気がする。別に京都駅から乗ったらいいわけだけど、どうせなので普段行かないような方向に向かうのはどうか。姫路とか終着駅だしいいんじゃないか。

ということで、旅です。

土曜日の昼は夕立が降っていて、電車は補助席を出して座れるぐらいの人数だった。大阪駅でボックス席を確保できたのでまあよかった。それにしても新快速は速いもので、ガンガン駅を飛ばしまくって、いつの間にか兵庫県に入っていた。

駅そばを食べに入ったら、知ってる蕎麦とは違うものが出てきた。おいしいけどこれは何?

姫路駅に着いてホテルを探そうと楽天トラベルを開いたけど、Safariだと予約ページが読み込めない。Chromeだと読み込めた。なんだったのか。ホテルに荷物をおろしてビールを探す。

KOGANEっていう店がよさそうなので行ってみた。兵庫っぽいビールはなかったけどWebページで注文できる仕組みがあるのが気に入った。次は地元っぽいビールがあるときに来たい。

もうちょっとなんか飲もうとうろついていたらっていう店を発見したので入った。いろいろな日本酒をちょっとずつ飲める店で、地酒っぽいものがいっぱいあったので少し飲んで満足した。

おなかいっぱいな気がするけどもうちょっと飲むかどうか、と思いながら駅周辺をふらふらしていたら安べゑという店につられて入った。せんべろっぽいけど、これぐらいがむしろちょうどいいと思う。雑な居酒屋はわりと好きだけど、当たり外れが読めないのだけがネック。今回は当たりだと思う。和歌山の多田屋のような店が近くにあるといい。

翌日は姫路城を見に行った。天守閣を見学したらめちゃくちゃ階段を上り下りして足がガクガクになったし、今はちょっとした筋肉痛になっている。

気力が尽きてきたので山陽電車で梅田まで戻って、サウナの大東洋に行った。休日なのでそこそこ賑わっていた気がする。もうちょっとどうでもいい日に来たらのびのび過ごせるのかもしれない。

めちゃくちゃに歩きまくったので足が疲れた。

sqlxで無理やり複数カラムに対するINクエリを書く

小ネタだしプロダクションで試したことはないです。ISUCONの練習をしていたらふと、これで複数カラムのINクエリが書けるのでは?? と思いついたのでメモ。

package main

import (
    "fmt"
    "log"
    "strings"

    "github.com/jmoiron/sqlx"
)

type WhereInArg struct {
    Name   string `db:"name"`
    Number int    `db:"number"`
}

func main() {
    whereInArgs := []WhereInArg{
        {
            Name:   "a",
            Number: 1,
        },
        {
            Name:   "b",
            Number: 2,
        },
    }
    query, args, err := sqlx.Named("SELECT * FROM tbl WHERE (`name`, `number`) VALUES(:name, :number))", whereInArgs)
    if err != nil {
        log.Fatal(err)
    }
    query = strings.Replace(query, "VALUES", "IN (", 1)
    fmt.Printf("%s (args: %#v)\n", query, args)
    // SELECT * FROM tbl WHERE (`name`, `number`) IN ((?, ?),(?, ?)) (args: []interface {}{"a", 1, "b", 2})
}

VALUES (:name, :number)VALUES (?, ?), (?, ?) に展開されるのがミソで、そこに括弧を足しつつうまく変換しているけど、プロダクションでやることはなさそう。placeholderを手で複製するか sqlx.In を使うことになる?