Ark's Blog

数学とか競プロとか参加記とか備忘録とか

ようこそ

Cookpad Spring 1day Internship 2019 コンテナコース 参加記

3/20にクックパッドさんの春インターンに参加させていただきました!

コンテナコースで、コンテナ技術について学びました。

internship.cookpad.com

続きを読む

Dockerで動くいい感じのLaTeX環境をつくった話

Docker上で動くいい感じのLaTeX環境をつくりました。

github.com

対象ディレクトリで

$ docker run --rm -it -v $PWD:/workdir -u $(id -u):$(id -g) arkark/latexmk

を叩くだけで、Docker上のlatexmkが動いてファイルの編集を感知したら自動コンパイルしてくれます。長いので.bashrcなどでaliasするといいです。

  • ホストでは適当なエディタとpdfビューワで、編集と閲覧
  • コンテナでは編集の感知→コンパイル
  • コンソール上ではコンパイル結果のlogを監視

といった使用方法を想定しています。

続きを読む

git aliasの外部コマンド呼び出しはgit管理下のルートディレクトリから呼ばれる

知見を得たのでメモ。

git aliasの外部コマンド呼び出しは、公式ドキュメントによれば以下のように書かれています。

If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command. For example, defining "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new" is equivalent to running the shell command "gitk --all --not ORIG_HEAD". Note that shell commands will be executed from the top-level directory of a repository, which may not necessarily be the current directory. GIT_PREFIX is set as returned by running git rev-parse --show-prefix from the original current directory. 引用

ざっくりまとめると

確認のため適当なgit管理下で

$ git config alias.test1 '!pwd'
$ git config alias.test2 '!echo $GIT_PREFIX'

とaliasすると、git test1でgitのルートディレクトリのパスが表示され、git test2でカレントディレクトリへの相対パスが表示されることがわかります。

なので、例えばfileコマンドをgitコマンドとして使いたい場合は

$ git config alias.file '!file "$GIT_PREFIX$1"'

のようにすれば

$ git file <filename>

でfileコマンドが使えるようになります。

複雑なコマンドをaliasしたいときに使える知見かもしれません。

max(∅)=-∞ は半群のモノイド化

全順序集合に思いを馳せながら寝たら思いついたネタを投げます。

導入

数学書かなにかで次のような記述を見たことがあるかもしれません。

 \mathbb{N}を正の整数全体の集合とする。

このとき、 A\subset \mathbb{N}に対して \max(A) := \text{「}A\text{のうち最も大きな値」}と定義する。

ただし、\max(\emptyset) = -\inftyとする


「ただし、\max(\emptyset) = -\inftyとする」

これ、特殊扱いしてるみたいで気持ち悪くないですか?

しかも、今回の場合は「\max(\emptyset) = 0」でも「\max(\emptyset) = -1」でも「\max(\emptyset) = -5000\text{兆}」でも問題ないです。要は ^\forall n \in \mathbb{N}, x \lt nを満たすxなら何でもいいです。

ただ、これを半群のモノイド化(1-添加と言うらしい?)と解釈したらスッキリしました。これについて以下にまとめます。

続きを読む

git stash save は deprecated。pushを使おう

git stashの使い方を見ようとgit stash --helpをしたら

# -- snip --
save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]
    This option is deprecated in favour of git stash push. It differs from "stash push" in that it cannot take pathspecs, and any non-option arguments form the message.
# -- snip --

と表示された。git stash saveがいつの間にかdeprecatedになっていた。(手元のGitバージョンは2.19.2

SYNOPSIS
       git stash list [<options>]
       git stash show [<stash>]
       git stash drop [-q|--quiet] [<stash>]
       git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
       git stash branch <branchname> [<stash>]
       git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
                    [-u|--include-untracked] [-a|--all] [-m|--message <message>]
                    [--] [<pathspec>...]]
       git stash clear
       git stash create [<message>]
       git stash store [-m|--message <message>] [-q|--quiet] <commit>

とあり、どうやらgit stashのデフォルトオプションはpushになったらしい。pushpopで対応してて良い。

↓によれば、Git 2.15.x/2.16 (Q1 2018)で切り替わったとのこと。

stackoverflow.com