ざっくりと私の2018年を振り返りたいと思う。
目次
業
学業
学業に関して、大学院は休学している。数学は趣味でやっている。
就職活動
去年就活をやったところ精神がズタズタに破壊されたので、今年は就活らしいことはしなかった。
1年も経てば就活で負った心の傷は多少は癒えるかと思ったがそんなことはなかった。
アルバイト
アルバイトは、大学のTAをやった(休学中でもTAはできるらしい)。
今年は他に、学外のアルバイトの面接を1件受けたが、謎の理由で採用には至らなかった。会社というのは不可解だ。
それでも金は欲しいので学外のアルバイトを探したいが、どう探して良いかわからない。求人サイトの求人を見ても無味乾燥に見える。
私のように初対面の相手との面接が苦手な人間としては、知人に紹介してもらうのが最善に思える。しかし…。どうしたものか。
アウトドア活動
私の関心は数学やプログラミングなどのインドアでできることが多くを占めているが、アウトドア趣味も息継ぎのように欠かせないものである。
登山に関しては、7月に日光白根山に登った。今年百名山クラスの山に登ったのはこれっきりだった。
他のアウトドア活動として、春ぐらいにスポーツ自転車を買った。10月につくばのサイクリングロードを走りに行った。
そして、天文に関しては12月にキャンプでふたご座流星群を見に行った。
主な活動(数学とプログラミングなど)を時系列で
1〜2月:「週刊 代数的実数を作る」
1、2月は「週刊 代数的実数を作る」を書いていた。
- 週刊 代数的実数を作る(連載ページ)
- 「週刊 代数的実数を作る」を終えて(3月16日)
それ以降はその書籍化に向けて色々やっていた。
3月〜7月:TeX処理系の実装、Pandocのあれこれ
「週刊 代数的実数を作る」を書き終えた3月からは、その電子書籍(EPUB)化を狙って「LaTeX数式をMathMLに変換するツール」を作ろうと頑張っていた。そのために「TeX言語の字句解析・展開器」をHaskellで書いた。
- LaTeX数式 to MathML を考える(3月29日)
- TeXっぽいものを実装するにあたっての雑記(4月26日)
- LaTeX数式 to MathML を考える その2(5月1日)
- TeX言語のトークンと値、字句解析から展開と実行まで(6月22日)
- TeX言語のトークンと値 その2:\noexpandと、挿入された\relax(6月24日)
- TeX言語のトークンと値 その2.5:\noexpandと\expandafterの話、それと\expandedの近況(7月1日)
この時に書いたコードは https://github.com/minoki/yurumath に置いてあるが、まだ中途半端な状態である。
「週刊 代数的実数を作る」ではMarkdownで書いた原稿をPandocで処理したわけなので、Pandocのノウハウが溜まった。いくつかはブログやQiitaに書いた。
- Pandocでの定理環境を考える(5月2日)
- Pandoc Markdownで青空文庫風のルビ記法を使う – Qiita(11月8日)
8月〜10月:技術書典5へのサークル参加、「代数的実数を作る」の書籍化、ClutTeX、SML
「週刊 代数的実数を作る」を書籍化し、10月の「技術書典5」にサークル参加することにした。
そのためにMarkdown→LaTeX→PDFという経路で文書処理を行うわけだが、LaTeX→PDFの部分で自作ツール ClutTeX を使い処理の自動化を行なった。
ClutTeXは2年ほど前に作ったツールで、LaTeX処理の際に作業ディレクトリが補助ファイル(.auxや.logなど)まみれにならないようにしてくれるすごいツールである。従来は基本的な機能しかなかったが、今回同人誌の原稿を処理させるにあたって、MakeIndexやBibTeXに対応させた。そして技術書典が終わった後にバージョン0.1をリリースし、CTANへのアップロードを行い、TeX Liveに収録していただいた。
- LaTeX処理自動化ツール ClutTeX をリリースした(10月13日)
夏頃から、SMLの勉強も兼ねてSMLによるSML処理系の実装を始めた。
- ML-Lexを使ってみた – Qiita(8月21日)
- ML-Yaccを使ってみた – Qiita(8月23日)
- SML、はじめました(8月29日)
9月16日に行われた勉強会「ML Day#2」のLTで進捗報告を行なった。
…しかしそれ以後は(技術書典で忙しく)あまり進んでいない。まだ型推論の実装の最中である。
そして10月8日の技術書典5である。初めてのサークル参加だったにも関わらず、皆様のおかげで、用意した約100部を完売という良い結果に終わった。
- 技術書典5に代数的数を作る本を出します(9月12日)
- 技術書典5に初サークル参加した記録/前日まで(10月9日)
- 同人誌「代数的数を作る」ができるまで/PandocとかLaTeXの話(10月9日)
- 技術書典5に初サークル参加した記録/当日(10月13日)
ここで配布した同人誌「代数的数を作る 多項式の根と因数分解のアルゴリズム」は、PDF版をBOOTHで購入できる。
10月〜12月:圏論、特にモノイド圏と閉圏について
技術書典周りが一段落したある日、Twitterで「HaskellのApplicative関手の圏論的な話を書いて欲しい」という電波を受信したので、ちょっくら書いてやるか〜〜〜と書き始めた。しかし途中で予想外の深みにはまり、最終的には50ページくらいのPDFが出来上がった(完成しているとは言ってない)。
Applicativeの記事はAdvent Calendarの記事として書いたが、他に2件ほどAdvent Calendarの記事を書いた。
- LuaLaTeXでダウンロードカードを作った話(12月17日)
- 圏論の入門書(2018年版)(12月24日)
数学ネタ
今年やった数学は、総括すると「計算機代数」と「圏論」の2本立てだった。
計算機代数
「週刊 代数的実数を作る」として、多項式の根と因数分解のアルゴリズムをHaskellで実装した。
ただ、現状の実装は演算のたびに終結式計算を行なっておりあまり効率が良くない。改良したいが、来年以降の課題になる。
圏論
モノイド圏と閉圏に詳しくなった。
細かいネタ
Leap Motionで手の回転×2を検出し、4次元の回転にする(4次元の物体を回転させる)やつを実装した。動かす4次元の物体としては、超立方体と正24胞体を実装した。
今作っている、「超立方体(4次元)をぐるぐる回すやつ」です。まだ荒削りではあるがなんとなく雰囲気は伝わると思う pic.twitter.com/q32pFuOCmW
— だめぽラボ@技術書典5 か38 (@mod_poppo) May 30, 2018
これが!!正24胞体!!!正8面体を24個くっつけたとかいう物体です!!!皆さんわかりますか???(ぼくにはさっぱりです!!) pic.twitter.com/B0XHveUdnz
— だめぽラボ@技術書典5 か38 (@mod_poppo) June 3, 2018
面のフチを狭くした&赤と青の面の位置を変えて「大面である正八面体」をわかりやすくした pic.twitter.com/ueVAOl8o0m
— だめぽラボ@技術書典5 か38 (@mod_poppo) June 3, 2018
しかしこれ以上の掘り下げはできていない。来年はもっとちゃんとした動画を作成できると良い。
OSS活動
purs-tsd-gen
2月ごろ、PureScriptで書かれたモジュールをTypeScriptから使うためのツール purs-tsd-gen を作って公開した。GitHubには現在15スターがついている。
- PureScript から TypeScript 用型定義 (.d.ts) を生成するツールを作った(2月20日)
- https://github.com/minoki/purescript-tsd-gen
ClutTeX
先述したように、LaTeX処理自動化ツール ClutTeX をリリースした。GitHubには現在7スターがついている。
- https://github.com/minoki/cluttex
- https://www.ctan.org/pkg/cluttex
- 記事
- LaTeX処理自動化ツール ClutTeX をリリースした(10月13日)
- TeX 実行の自動化ツールを作った (ClutTeX)(2016年12月28日)
pandoc-aozora-ruby
先述したように、Pandocで青空文庫形式のルビを使えるようにするフィルターを公開した。
その他・バグ報告とか
新しいものを作るだけがOSS活動ではない。既存のソフトウェアをより良くしていくのも大事なことである。
既存のソフトウェアに関するコントリビューションは普段ブログやTwitterには書かないので、ここでまとめておく。
source2e.pdfのtypo修正
LaTeX2eのソースコード込みのマニュアルであるsource2e.pdfを読んでいたらいくつかtypoを見つけたので、修正のPRを投げた。無事マージされた。
purescript-mathの機能追加
ECMAScript 6で追加された数学関数をPureScriptから使えるようにpurescript-mathに手を加えた。PRを投げたが特に反応はない。誰がメンテしてるんだ?という状態である。
Pandocのバグ報告
PandocではLaTeXのマクロを一部扱えるが、\newcommandの直後のコマンド名の扱いが不適切だった。簡単に修正できる問題ではなさそうなので、修正パッチは作らず、イシュー登録という形とした。
LuajitTeXでrequire “lfs”できない
LuaTeXではlfsというグローバル変数を介してluafilesystemを使えるようになっている。ただ、普通のLuaインタープリターはluafilesystemを組み込んでいないので、Luaコードからは
local lfs = require "lfs"
という風に明示的にluafilesystemを読み込むことが標準的な手順である。
さて、Luaのrequireは組み込みライブラリーに対しても使うことができる。例えば、osライブラリーは最初から読み込まれているが、 local os = require "os"
という風にrequireを使ってアクセスすることもできる。
これらの2つを踏まえると、LuaTeXにおいても local lfs = require "lfs"
によってluafilesystemにアクセスできて然るべきだ、と考えられる。
実際、Lua 5.2/5.3を使うLuaTeXでは require "lfs"
によってluafilesystemによってアクセスできる。しかし、LuaJIT(Lua 5.1ベース)を使うLuajitTeXでは、なぜか require "lfs"
によって組み込みのluafilesystemにアクセスできない(require “lfs”すると外部のCライブラリーを読みに行こうとする)。
私はLuaに詳しい(Haskell一辺倒になる前はLuaも結構使っていた)ので、この程度の問題ならすぐに原因がわかるし、直せる。というわけで修正パッチ付きでメールで作者に報告したが、先方には直す気がなさそう(仕様扱い?)である。筆者の説明が足りなかったのか、それとも本気でLuaTeXで組み込みライブラリーをrequireすることは仕様外であると考えているのかは不明だが、筆者のコミュニケーション能力ではこれ以上の進展は望めない。無理やり押しても仕方がないと思っている。
ちなみに、Lua側での対処方法としては、あらかじめ
if not package.loaded["lfs"] and lfs then package.loaded["lfs"] = lfs end
を実行してやれば、lfsが「読み込み済み」とマークされ、期待通り require "lfs"
が動くようになる。実際ClutTeXではそうしている(のでClutTeXはLuajitTeXでも動かせるはずである)。
今年やらなかったこと
筆者が長年続けていることとして、wxWidgets(C++で書かれたクロスプラットフォームGUIツールキット)に関すること(Unicode周りのバグ潰し、IMEの実装)がある。ただ、この辺に関して今年は進捗がなかった(対価がないとしんどいフェーズに達している)。とはいえ今年もわずかながらwxWidgetsに関する記事は書いた。
- wxWidgets をビルドする 2018年新春編(3月17日)
- wxWidgets の最小サンプル – Qiita(4月1日)
Haskellに関する活動
今年もHaskellを普段使い言語として使った。「週刊 代数的実数を作る」で実装に使っているのはHaskellだし、Web版に使っている静的サイトジェネレーターHakyllはHaskellで設定を書く。青空文庫風ルビのPandoc filterはHaskellで書いた。まだ日の目は見ていないが、オレオレTeX言語実装YuruMathはHaskellで書いた。PureScriptのやつもHaskellで書いた。
その他、他人向けにいくつかブログ・Qiita記事を書いた。
- 非可述多相に触れる: GHC の ImpredicativeTypes 拡張 – Qiita(1月13日)
- Haskell でのデバッグ手法あれこれ(1月24日)
- GHCJS をビルドできなかった – Qiita(2月22日)
- 関数内ローカル変数に IORef を使うな – Qiita(2月22日)
- Haskell: Monadクラスのこれまでとこれから – Qiita(3月22日)
- アプリカティブ関手ってなに?モノイド圏との関係は?調べてみました!(12月7日)
来年もHaskellを使っていきたい。
雑感
去年就活をした時に「他人にわかりやすい成果が欲しい」と痛感した。コミュニケーションが苦手な自分が面接で口先だけで技術力をアピールするのは難しく、わかりやすい成果(物)の助けが欲しい。
とはいえ、今年も例によって、いろんなことに着手して中途半端な状態で放置したものが多かった(TeX処理系、SML処理系など)。
しかし、「技術書典5」で同人誌「代数的数を作る」を出せたのは一つの成果だと思う。あるいは、モノイド圏とApplicativeの話のPDFをAdvent Calendarで公開できたのも一つの成果だろう。
なので、「成果物を作る」という目標は、今年、それなりに達成できたのではないかと思う。
さて、当面の課題はアルバイト探しである。いつまでも親のすねをかじっているわけにはいかない。しかし、すでに書いたように、どういう風にアルバイトを探したら良いのかわからない。
今年を振り返ったついでに来年の抱負、なんて書いていたら年が変わってしまいそうなので、今回はこの辺にしておく。
今年もこのブログを読んでいただいてありがとうございました。来年もよろしくお願いします。
ピンバック: 活動報告(2019年1月) | 雑記帳
ピンバック: 修士を取るのに5年かかった話 | 雑記帳