Factorio 0.17 実績「プロのように軌道に乗る」

ゲーム開始から1時間30分以内に機関車を設置する。余裕かと思って雑にやったら全然間に合わなかったので、ちゃんと計算。

必要な研究
研究 自動化(赤) 物流(緑) 時間(秒/パック) 制作可能になるアイテム
自動化技術 10 10 組立機、ロングアームインサータ(鉄道技術のツリー上には無いが組立機は必要だろう)
鉄板加工 50 5 鋼材
物流サイエンスパック 75 5 物流サイエンスパック
物流学 20 15 地下搬送ベルト、分配器
エンジンの開発 100 100 15 エンジン
物流学2 200 200 30
鉄道技術 75 75 30 レール、機関車
530 375
必要な生産物

5秒に1回くらい研究が回せれば良いだろうか。研究所は6個。自動化サイエンスパックは人力だと5秒なので、組立機1だと倍の10秒。物流サイエンスパックは人力で6秒、組立機1で12秒。後から作り始めることも考え、物流サイエンスパックは組立機3個にしよう。

生産物 必要生産数(個/秒) 制作時間(人力) 制作時間 組立機/炉数
自動化サイエンスパック 0.2 5 10 2
 銅板 0.2 - 3.2 0.64
 歯車 0.2 0.5 1 0.2
  鉄板 0.4 - 3.2 1.28
物流サイエンスパック 0.25 6 12 3
 搬送ベルト 0.25 0.25 0.5 0.125
  鉄の歯車 0.25 0.5 1 0.25
   鉄板 0.5 - 3.2 1.6
 インサータ 0.25 0.5 1 0.25
  鉄板 0.25 - 3.2 0.8
  鉄の歯車 0.25 0.5 1 0.25
   鉄板 0.5 - 3.2 1.6
  電子基板 0.25 0.5 1 0.25
   鉄板 0.25 - 3.2 0.8
   銅線 0.75 0.25 0.5 0.375
    銅板 0.75 - 3.2 2.4
     銅鉱石 0.75 - 2 1.5
鉄板合計 1.9 - 3.2 6.08
 鉄鉱石 1.9 - 2 3.8

こうして計算してみると、実はほとんどの組立機は1個で良かったのか。あとはレール3本と機関車に鋼材が32個必要。

ということで達成。エンジンが手で組み立てられないことを忘れていて危なかった。とはいえ、ラインを組むほどではない。

Wacom Oneを買った

液晶ペンタブレット。これ。

www.wacom.com

わしの若い頃は液晶ペンタブレットは何十万円もして高値の花だったが……海外のメーカーが安い液晶ペンタブレットを出してきて、それに対抗してかペンタブレットの老舗のWacomが4万円で買える液晶ペンタブレットを発売するということで、話題になっていた。

AmazonWacom製品を買うと、おまけにCLIP STUDIO PAINTのカスタムブラシが付くというのが気になったけれど、ヨドバシで試してAmazonで買うのも悪いし早く欲しかったので、そのままヨドバシで買って帰った。

用途

f:id:kusano_k:20200119232047p:plain

Wacom Oneで描いた。 PC環境はこんな感じだった。 右側の24インチで主に作業をし、左上の17インチに資料などを置き、右下の13.3インチでアニメを観る。

www.tekwind.co.jp

右下のは、GeChic On-Lap 1303H。 モバイルモニターなので小さいのにFullHD。 何かのコンテストなどで外で本気でPCを使いたいときには、これを持ち出してデュアルディスプレイにしていた。 このモニターはケースがそのままスタンドになるのだけど、ちょっと前にスタンドが壊れた。

f:id:kusano_k:20200119044553j:plain
ダクトテープでなんとか直した

f:id:kusano_k:20200119044618j:plain
他のところの接着剤も劣化して剥がれてきている

あと発色がいまいちで、アニメの暗いシーンが見えない。

で、買い換えようと思って何を買うか迷っていたところにWacom Oneが発表され、モバイルモニターとたいして変らない値段だし、ペンタブ機能も付いてお得なのではないかと思った。

発色

ということで、私にとってはペンタブ機能はおまけで、画面の発色のほうが重要。 色はともかく、暗いシーンがちゃんと見えてほしい。

結果はいまいち。 前のモニタよりはマシだけれど、メインで使っているモニタ(10年前に買ったMitsubishi MDT243WG)には劣る。 黒が白っぽい。

f:id:kusano_k:20200120000247p:plain

こんな画像を作って試してみると、 #080808 がギリギリ見えるくらい。 PVとIPSの違いよりも、モニタの表面加工の問題が大きいんじゃないかと思う。 部屋の電気を消すと、 #040404 がうっすらと見える。 「グレアの液晶の何が良いのか分からない」と言ったら、「光はどうせ反射するので、モニタの設置場所を調節できるのならば、一方向にしか反射しないグレアのほうが良い」と返されたことがあり、こういうことなのかもしれない。

ちなみに、このPNG画像をはてなフォトライフにアップロードしたら、ガンマ値を勝手に突っ込まれたので、↑で表示されているものは書かれている文字の色ではないと思う。 HTML版

周辺部の減光もあるような気がする。

モニタとして使いたいならモニタを買ったほうが良かった。 でも、このサイズで発色の良いモニタがあるのだろうか。 まずは広い机を買うところからか。

液晶ペンタブレット

液晶ペンタブレット(液タブ)は初めて買った。 普通のタブレット(板タブ)は、Intuos 3 PTZ-630とIntuos 5 touch smallを持っている。 たしかに、板タブは最初は思ったところにペンを動かせずに苦労した覚えがあるけれど、それに慣れたら別に液タブでなくても良いのではないかと思うが……。 どうなんだろう。

スマホでは当たり前にやっていることとはいえ、液晶画面をベタベタ触り、あまつさえペンでガリガリとするのはなかなか背徳感があって良い。

ケーブル

2mくらいの太くて長いケーブル。 USB Type-Cっぽいものを本体に刺し、2本のUSB Type-AをPCとACアダプタに、HDMIをPCに刺す。 前のモニタは電源用のmicro USBとmicro HDMIの2本を刺していたので、これが1本になってすっきりするのはありがたい。 机の下は元からケーブルがゴチャゴチャしているので数本増えたところで変らない。 とはいえ、外に持ち出して使うときには邪魔になりそう。

USB Type-Cは映像信号も通せるので、PCと液晶タブレットが対応していれば、USB Type-Cケーブル1本で繋げるはずではある。 が、試そうにもそもそも手元のUSBケーブルが刺さらない。

f:id:kusano_k:20200119222242j:plain

左が付属のケーブルで、右が手元にあったUSBケーブル。 端子の根元の黒い部分が引っかかる。

USB Type-Cの規格上、この部分は最大12.35mm×6.5mmらしい。

f:id:kusano_k:20200120004131p:plain

https://www.usb.org/sites/default/files/USB%20Type-C%20Spec%20R2.0%20-%20August%202019.pdf#page=47

たぶん、意図的に刺さらないようにしているのでしょう。 「普通のUSB Type-Cは刺すなよ」というWacomの意思を感じる。 刺さるケーブルを探してきてもたぶん動かないと思う。

付属のACアダプタの出力は5V, 2A。 急速充電対応を謳ってるモバイルバッテリーなら出せる出力。 PCからもものによっては出せるはずで、そういうPCなら電源用のUSBケーブルは繋がなくても良いかな?と思ったけれど、ダメ。 電源用のほうもPCに刺したら動いたので出力は足りているはず。

f:id:kusano_k:20200119024605j:plain

電源用のUSB端子の根元が大きくなっていて、PCに刺そうとすると邪魔になる。 これも「ACアダプタに刺せ」というWacomの意思を感じる。

モバイルモニタ/板タブとして使えるのか?

電源用のUSBは必須として、信号用のUSBを刺さずに、単なるモバイルモニタとして使うことはできる。 ゲーム機を繋いだりとか、便利なときがあるかもしれない。

逆に、HDMIを刺さずに単なる板タブとして使うこともできる。

f:id:kusano_k:20200120005806p:plain

ここでWacom One以外のモニタを選べば良い。

ボタンに「マッピング画面切替」を割り当てれば(見つけづらいが、ペン→ボタン→タブレットの中にある)、手元の液タブで作業をしつつ、ちょっと切替えで奥のモニタをペンタブで操作するということができる。 液タブの画面の発色に文句があるのなら、色に関する作業だけは液タブを板タブとして使って別のモニタを使う、ということもできる。

しかし、ここでペンにボタンが1個しか無いというのが効いてくる。 安くするためとはいえ、そんなところを削らなくても……。 せめて、上位グレード用のペンを買い足したら使えるようにしてくれれば良かったのに。

そういえば、上位グレードの製品は複数のペンを同時に使える(筆圧などの設定を個別に変えたり、お絵かきソフトで別のツールに割り当てたりできる)らしいけど、Wacom Oneはどうなんだろう? サードパーティーのペンも使えるということで、鉛筆っぽいペンなども出ているので、使い分けられたら楽しそうだけど。

位置調整

ペンの位置とカーソルの位置は調節ができる。 というか、液タブはPCから見ると、モニタとタブレットがわりと別の扱いなのかもしれない。 なので、「上位グレードの製品に比べると視差が大きい」という評判だったけれど、タブレットと目の位置が固定ならば、そこは合わせられる。 まあ、顔を動かすと浮いて見えるのはどうしようもないが。

その他

1個バグを見つけた。 最初の図の右の24インチモニタがメインなので、Windows的にはこのモニタの左上が(0, 0)になっている。 左上の17インチモニタのx座標はマイナス。 このときタブレットを左上のモニタに割り当てると、カーソルを右に持っていったときに、右のモニタにはみ出る。 負の数の剰余とか何か間違えていそう。

画面上部の布の部分にペンを刺して持ち運べるようになっている。 バッグの中に入れたりしていると、いつかひっかけて壊しそうで怖い。

グラフィックでステッカー(シール)を作った

www.graphic.jp

リアルのイベントだと顔が分からないので、Twitterのアイコンが名札とかに付いているとありがたい。 過去に紙に印刷して持っていたこともあるけれど面倒。 シールにしておけば何か適当なものに貼れば良い。

同人誌だと、「入稿データはこうやって作るんだ」とか、どこの印刷所は色合いがどうだとか、値段がどのくらいだとか、色々と書かれているのだが、これがシールだとあまりそういう話が出てこないので書いてみる。

流れ、値段、クオリティなど

テンプレートをダウンロードして、絵を貼り付け、(ハーフカットは不要なので)ここで台紙ごと切ってくれの断裁ラインだけ別レイヤーで追加し、入稿データを作成。商業版(?)だとIllustratorのファイルしか無いが、同人版(?)だとPhotoshopもある。

切る機械(?)に入力するのはベクトルデータだろうけれど、Photoshopでどうすれば良いのか分からない。 「パス」だとなんか保存したら消えたので、「シェイプ」で作れば良いのか、それとも何でも良いから線が描いてあれば向こうでベクトル形式にしてくれるのか。 まあ、Illustratorで作っておけば安心でしょう。 この辺が難しいし、変なデータを入稿されたら印刷所も困るので、ウェブ上でカットラインを作成できるサービスが多いのかもしれない。

フルカラーステッカー、25平方センチ(5cm×5cm)、8日納期、片面カラーホワイト(光沢塩ビ)、マット(つや無し)タイプ、ハーフカット不要(追加は料金が掛かるが不要にしても安くはならないらしい)を200部で5,200円。送料込み。1枚当たり26円。

400dpiで入稿してこんな感じ。 充分なクオリティでしょう。 安い代わりに「若干粒子が粗い」エコノミーステッカーだとどんなものなのか気になる。

f:id:kusano_k:20191208180633j:plain:w640

ビニール製なので丈夫。 手で破こうとしても破れないし、剥がすときも綺麗に剥がれる。

f:id:kusano_k:20191208170058j:plain:w640

知らなかったこと

安いのはシール、高いのはステッカー

www.digitaprint.jp

印刷業界だけなのか一般的なのか、こういう呼び分けがされている。 まあ、選択肢があったら「ステッカー」を選んでおけば良いのでしょう。

ハーフカットラインの数で値段が変わる

「1枚の台紙に小さいシールをいっぱい並べたらお得じゃない?」と思っていたけれど、台紙のサイズだけではなく、台紙にシールが何個あるかで値段が変わる。 台紙まで切らないシールのところまでの切れ目をハーフカットラインというらしい。

複数枚のシールが1枚のシートで納品されるものもある

ポプルスとかグラフィックのシール印刷シングルタイプとか。 分ける必要があるならば自分で切れと。 印刷と裁断を完全に一致されるのは無理なので、同人誌などでは周囲3mくらいの「塗り足し」を付けろと言われる。 実際に切られたものを見ると誤差は1mmないくらい。 シールの周囲がただの余白ならば良いけど、今回のように端までシールにしようと思うと、自分でその精度で切るのは厳しい。

候補にした印刷所

ポプルス

www.inv.co.jp

同人誌の印刷に使っているので。 しかし、シート単位で納品されるから、今回は止め。

pixivFACTORY

factory.pixiv.net

クオリティが高そう。

サイズとか紙とかほとんど選べないが、そこは向こうが良いものを選んでくれていると考えればありだと思う。 紙とか加工とかの名前だけを見ても素人にはどんな感じなのか分からない。

しかし、1枚当たりの値段が160円~は高い……。 無料で配る用ではなく、売る用なのかもしれない。

デジタクリエイト

www.digitaprint.jp

一番良く使われているような気がする。

「値段が分からん。スルー」していたが、今「Web上でデザイン」をポチっとしたらアカウントを作らなくても値段も見られた。 無料サンプルもあるし良さそう。

かけ算の順序を逆にするのは間違いなのか?

掛け算の順序を逆にするのは間違いなのかどうかが気になって、小学校の教科書を買った。

f:id:kusano_k:20191203001119j:plain:w640

通販で買えるところを教えてくれたkistenkasten723さんありがとうございます。

1年生から6年生まで。 5年生までは上下巻に分かれていて、計11冊、合計3,637円+送料750円。 小学生の教科書なんて薄っぺらいでしょと舐めていると、11冊ともなるとけっこう重いし場所も取るので注意。

1年以上前にTwitterで燃えていたときに買って、そのまま忘れてた。

かけ算の順序とは?

例えば

3個のリンゴが乗った皿が4皿あります。リンゴは全部で何個あるでしょう?

という問題に対して、

(しき)4×3=12

(こたえ)12個

とテストの答案に書くと、「こたえ」は丸だけど、「しき」がバツになって点数が引かれることがあるらしい。 「1つ分の数 × いくつ分 = 全部の数」の順番で書かなければならず、逆はまかりならん、という理屈。

定期的にネットで燃えている。 論点としては以下のような感じ。

  • 教師は交換法則も知らんのか
  • 学習指導要領でそう決まっている(ホントに?)ので教師ではなく文部科学省が悪い
  • 海外だと被乗数と乗数が逆だぞ
  • 文章の意味を理解せずに答える生徒を見つけるためである
  • そんなのは文章に他の数字を入れたり、足し算の問題を混ぜたりすれば良い
  • 問題に冗長性があるのは美しくないのでは

最後は私が今考えた。

私としては、理不尽にバツが付いたら小学生はブチ切れるだろうし、かといってこの記事の以降のような話を小学生にしても伝わる気がしないし、(たとえ本当は間違いだとしても)丸にしておけばいいんじゃねーの、と思うが……。 まあ、教育とはどうあるべきかとか、小学校のテストで丸にするべきかどうかにはたいして興味はない。 「(しき)4×3=12」が正しいのかどうかだけが気になる。

教科書の公理系

「算数」がどうなのかは知らないけれど、そもそも数学というのは答えが絶対的に一意に決まるものではない。

「最小の自然数は何か?」という問題で、「0」が答えになることもあるし、「1」が答えになることもある。 自然数の定義には、「正の整数」と「非負整数」があるので。 実数の範囲でという前提があれば、 x2+1 を因数分解した結果は x2+1 だけれど、虚数も含めれば (x+i)(x-i) が答えになる。 2個の頂点の角度が30度と60度の三角形の残りの1個の頂点の角度が90度になるのはユークリッド幾何学であって、非ユークリッド幾何学では他の角度にもなりうる。

いくつかの公理が成り立つと仮定した上で、どのような定理が成り立つのか、ということを考えるのが数学である。

よって立つものが何も無いまま正しいとか間違っているとか言ったところで「お前の中ではそうなんだろう」で話が終わってしまうので、小学校のテストならば教科書に書かれていることを前提として考えるべきでしょう。 ということで教科書を買った。 買ったのは東京書籍の教科書なので、以降の話は東京書籍の教科書の世界の話であって、他の出版社の教科書ならまた違ってくるかもしれない。

掛け算の順序

f:id:kusano_k:20191203001530j:plain:w640
新編 新しい算数 2下 6ページ

「1つ分の数×いくつ分=ぜんぶの数」という定義である。 被乗数と乗数を逆にした定義は書かれていない。

被乗数と乗数を逆にした式から正しい図を選ばせる問題もある。 東京出版の教科書的には順番に意味があるらしい。 「いくつ分×1つ分の数 でも良いよね」となるとこの問題が成り立たない。

f:id:kusano_k:20191203001656j:plain:w640
新編 新しい算数 2下 12ページ

ちなみに、長方形の面積は、隣り合った2辺の積、縦×横、横×縦と書かれているので、順番はどちらでも良い。

f:id:kusano_k:20191203013657j:plain:w640
新編 新しい算数 4下 17ページ

あとは交換法則がどうなっているか。

f:id:kusano_k:20191203002016j:plain:w640
新編 新しい算数 2下 41ページ

かけられる数と かける数を 入れかえて 計算しても,答えは 同じに なります。

答えが同じになるとまでしか言っていない。 意味が同じではない。 この文章でここまでに出てきた掛け算の定義に「いくつ分×1つ分の数=ぜんぶの数」を追加するのは無理があるでしょう。

「3×4=4×3=12」という話なので、式に「4×3=12」がありなら、「12=12」もありになってしまう。

「しき」とは何なのか

「4×3=12」や「12=12」はダメなのか? そういえば、「しき」には何を書くのが分からない。

「しき」に点数が付くのは小学校(中学校も?)でしか見ない。 大学の試験でも計算過程を書くけれど、これは「最終的な答えが間違っていても途中まではあっていたら部分点をよこせ」ということであって、答えさえ合っているなら答えだけを答案用紙に書いても単位はもらえるはずである。

「しき」とは何なのか。 何かしらの途中経過が書いてあれば良いのではないのか。 それなら「4×3=12」でも丸になる。

ということで「しき」の初出を探してみる。

f:id:kusano_k:20191203001354j:plain:w640
新編 あたらしい さんすう 1上 さんすう だいすき! 39ページ

「しき」について、定義も、解説も、何を書けば点数がもらえるのかも、何も書いてねぇ……。 最初の掛け算の定義のところにも「しき」と書かれているけれど、これ以外の「しき」が不正解かどうかは分からん。

まとめ

  • 「1つ分の数×いくつ分」の計算についてはこの順番でしか定義されていない
    • 交換法則も答えが等しいとまでしか言っていないので、「しき」で逆にしてはダメ……?
    • ただし、長方形の面積は縦と横の順番を逆にしたものも定義されているので、どちらでも良い
  • でも、「しき」がそもそも何なのかが分からないので、何とも言えない

教科書は「しき」が何なのか解説してほしい。 あとは、長方形のように「1つ分の数×いくつ分」も逆にしたものも定義してくれれば、ネットは平和になるし、先生も堂々と丸にできて生徒がニッコリなのに(文章を読まない生徒をどうするか問題はあるけれど)。

Pwnableの本をRe:VIEWで作って技術書典7で頒布した

Malleus CTF Pwn

sanya.sweetduet.info

techbookfest.org

自分のためにも色々とメモを残しておこう思っていたけど、1か月以上経ってしまった。 とらのあなにはまだ物理本の在庫が残っているし、電子版はBOOK☆WALKERにあるのでよろしくお願いします。

Pwnableというテーマについて

CTFに参加したことのない人には「なんだそりゃ?」だと思う。 CTFのジャンルの一つ。 C言語C++で書かれたプログラムが問題として与えられて、そのプログラムは出題者のサーバーでも動いている。 プログラムを解析してバッファオーバーフローなどの脆弱性を探し、その脆弱性を攻撃するスクリプトを書いて、出題者のサーバーからフラグの書かれたテキストファイルを奪取するというのが典型的な流れ。 セキュリティのコンテストと聞いてまず想像する形式だと思う。 花形ジャンルなのでたいていは問題数が多いし、解けるとカッコイイ。

しかし、私はpwnableが苦手。 1問も解けなかったり、解けてもチュートリアル的な簡単な問題だけということが多い。

Pwnableは他のジャンルに比べて狭くて深い。 例えば、webの問題で ' を入力したときにエラーになったらその場でSQL Injectionについて調べて解けるかもしれないけれど、pwnableで長い文字列を入力して落ちたからといってそこから何も知らない人が解ききるのはまず無理だと思う。 よっぽど簡単な問題でもない限り、スタックやライブラリのアドレスはランダム化されているし、書き込み可能な領域は実行不可能なので、ROPでlibcのアドレスをリークしてOne-gadget RCEか何かでシェルを取る必要がある。 最近だと system 関数を呼び出すときにスタックが16バイト境界に揃っていないといけないという問題にハマる。 そもそも、問題文にファイルへのリンクとサーバーのアドレス・ポートしか書かれていないことが多いので、このファイルがサーバーで動いているということも分からなそう。 一方、他のジャンルに比べて必要とされる知識は多くない。 一度覚えたテクニックは使い回せるし、何か新しい脆弱性があってそれを知らないと解けないということもない。

ということで、一回ちゃんと勉強すればその後のコンテストで得点源にできるし、ついでにそれを本にしようと考えた。 「お前の勉強ノートを売りつけるのか?」と言われそうだけど、この後のpicoCTFではpwnableの問題は全部解けたし、SECCONの予選で2桁チームしか解いていない問題を解ける程度の実力は付いた。

表紙

サークルカットには頒布する表紙を使い回すのが定番。 申込時に必要なのでまずは表紙用の画像を作らないといけない。 とはいえ、サークルカット無しで受かっているサークルもあるし、抽選にもサークル配置にも使われないなら、実はサークルリストが一般公開されるタイミングに間に合えば良いのか?

と、写真イラストは過去に実績を解除したので、次はCGにしたかった。 ジェネラティブアートに挑戦したかったけれど、難しそうで断念。 写真を元にプログラムで生成した。 遠目で見ると画質が悪いようにしか見えないけれど、近くで見ると良い感じで気に入っている。

紫陽花の写真を撮ります。

f:id:kusano_k:20191115044424j:plain:w400

最近のフォトショップなら人工知能が何とかしてくれるらしいけど、そんなものは無いので、手作業で切り抜きます。

f:id:kusano_k:20191115044709p:plain:w400

ボカしたり色調を調整したりして良い感じにした別の写真を用意します(A)。

f:id:kusano_k:20191115044832j:plain:w400

重ねます(B)。

f:id:kusano_k:20191115044950j:plain:w400

Aに文字を置いていって、Bに近づけます。 ただし、良い感じにランダムさがほしい(背景にもちょっとは文字を置いてほしい)ので、こんな感じのプログラム。

image = A
for c in 文字列:
  font_size = 徐々に小さくする
  # 各サイズで合計面積が同じになるように、小さい文字ほど個数を多くする
  for i in range(64):
    color = ランダム
    x = ランダム
    y = ランダム
    (x, y)に色colorで文字cを試しに置いたときのBとの差分を計算
  最も差分が小さくなるcolor, x, yでimageに実際に文字を置く

実際には、文字の座標や色を出力しておいて、影を付けたりちょっと透明にしたりして生成し直した。

f:id:kusano_k:20191115045859j:plain:w400

ノイズを加えたり、グラデーションを掛けたり、タイトルを書いたりします。

f:id:kusano_k:20191115050118j:plain:w400

原寸大だとこんな感じ。

f:id:kusano_k:20191115050321p:plain

ちなみに、描いている文字はglibcmalloc.cからコメントを取り除き、(文字が多すぎたので)1/8の確率でサンプリングしたもの。 プログラムコードのような雰囲気が出るかもしれない。 各文字の頻度情報しか残っていないはずなので、GPL適用は勘弁してほしい。

問題

単に説明を書いていくよりも、具体的な問題を解いていったほうが面白いし書きやすい。 ということで問題を作ることにした。

github.com

前半の問題はスタック、後半の問題はヒープ、間に書式文字列攻撃を挟んだ。

Pwnableの問題ではサーバーが必須。 しかし、サーバーの管理は面倒だし、後から本を買った人も遊べるようにしようと思うと、いつまでもサーバーを動かし続けないといけない。 Dockerで各自の手元で動かしてもらうことにした。 Dockerの中身を覗けばフラグが得られてしまうけれど、これで何かを競おうというわけでもないので、まあ良いだろう。 この問題と後述のRe:VIEWのビルドで、Dockerを初めてしっかり使ってみたけれど、とても便利。 流行るわけだ。

スコアサーバー(?)はNuxt.jsで静的ファイルを生成。 適当にハッシュ値でも取ってフラグをチェックすれば、クライアント側で処理しても、解析されてフラグが漏れることはない。 サーバーは要らない。

github.com

事前に問題を公開することで、解いた人がツイートとかしてくれて、宣伝になるのではという目論見があった……が、解いてくれる人があまりいなくて目論見は外れ。 Docker Hubのpull数は10くらいだった。 下心が見透かされたか、Dockerとはいえ手元で動かすのは面倒だからサーバーを立てておくべきだったか、そもそもpwnableはハードルが高いのか……。

今までの本は、Markdownで書いてPandocでPDFに変換していた。 今回はRe:VIEWを使うことにした。 技術書典だとRe:VIEWを使っている人が一番多いと思う。 長いものには巻かれろ。

Re:VIEW、荒削りだけれど、独自記法からPDFやepubの変換に特化している分、Pandocに比べて楽。

PandocだとMarkdownを書くだけでは解決できないことがあって、どうしてもLaTeXを書く必要が出てくる。 Re:VIEWならRe:VIEWだけで完結しないかなと期待していたけれど、そんなことはなかった。 LaTeXでちょこちょこ調節する必要があるし、何かにハマったときにRe:VIEWソースコードも読んだ。

Re:VIEWを一から書いたり、環境を構築するのは大変なので、TechBoosterのテンプレートとDockerを使った。

他の選択肢として、Re:VIEW Starterがある。 Re:VIEWに対する不満が解消されていて良さそうではあるけれど、Re:VIEW 3に対応していないのが残念。

技術系同人誌を書く人の味方「Re:VIEW Starter」の紹介 - Qiita

余談だが、この辺とかこの辺とかがだいぶ殺伐としていて良い。 競い合って良い感じになってほしい。

Re:VIEW Templateに書かれているコマンドでDockerでビルドすると、毎回npm installが走って遅いし、npmにも迷惑が掛かりそうなので、

docker run -it -v %CD%:/book --name review vvakame/review:3.2
cd /book
./setup.sh

を最初に実行して、ビルドするときには

docker start review
docker exec review /bin/bash -ci "cd /book && REVIEW_CONFIG_FILE=config.yml npm run pdf"
docker stop review

としていた。 Windowsでカレントディレクトリは%CD%。 Dockerはなぜディレクトリのマッピング相対パスで指定できないのか。

生成したPDFから一部の漢字をコピペすると部首になる問題と、GCCの出力の

fsa_test1.c: In function ‘main’:

このクォーテーションマークのせいで埋め込まれないフォントが使われる問題にハマった。 対応されているので、最新のDockerイメージを使えば大丈夫。 ありがたい。

電子版

今までは紙の本だけだったけれど、PDF版も作ることにした。

Re:VIEW Templateならば、config-ebook.ymlを使えば、トンボが無かったりリンクがクリックできたりするPDFが作れる。 後はPDFの編集ができる有料版のAcrobatで表紙と裏表紙を貼り合わせる。

f:id:kusano_k:20191117044522p:plain

そのままだと開いたときに本文の1ページ目にスクロールしてしまうので、表紙(PDFとしての1ページ目)を「開くページ」に設定。 ついでに、デフォルトのページレイアウトを見開きにした。

PDF版の配布方法。 ダウンロードカードごとにちゃんとパスワードを変えている人もいるけれど、まあ共通パスワードで良いだろう。 パスワードを変えるとダウンロードカードの用意が大変。 PHPか何かでサーバー側のスクリプトを書くなり、HTTPサーバーの設定なりでパスワードを入力してPDFをダウンロードするようにするのは簡単だけど、この先サーバーを移したりすることを考えると、静的ファイルにしておきたい。 PDFは暗号化したZIPに入れて、JavaScriptで復号するようにした。

Malleus CTF Pwn 電子版ダウンロード

問題はスマホで、パスワードを入力してPDFを表示することはできても、保存することができない。 blob://のURLをブラウザから他のアプリに飛ばしても、他のアプリから読めない。 ダウンロードカードにはたいていQRコードが付いていることを考えると、スマホでダウンロードする人も多いのだろうか。 まあ、技術書典に来てこの本を買う人でPCを持っていない人はいないだろう……。

ダウンロードカード。 名刺サイズを良く見るけれど、私がダウンロードカードを買ったときに無くしそうで怖かったので、ポストカードサイズにした。 kinko'sで200枚印刷して1万円掛からないくらい。 郵便番号欄とかが無いものでもいけるのかちょっと心配だったけれど、特に問題は無かった。 本と違ってポストカードなら大量に余っても場所を取らないので、200枚刷ったけど、電子版を買う人はあまりいなかったので、200枚も要らなかったな。 電子版を買う人は技術書典かんたん後払いシステムを使っていることが多いので、システムのダウンロード機能だけで充分だったかもしれない。

ポストカード印刷・DMハガキ印刷・プリント | サービス・料金(価格) | オンデマンド印刷のキンコーズ・ジャパン

Illustratorでデータを作って持っていったら「これ、アウトライン化されてないですね……。まあこちらで何とかしておきましたけど」と言われた。 ごめんなさい。

肝心のパスワードを間違えるという重大ミスをやらかした。 Ctrl+vで貼り付けるときに、Ctrlが抜けたっぽい。 ごめんなさい。

電子書籍

せっかく電子版を作るのだから、技術書典後にオンラインでも売りたい。

定番はBOOTHでPDFを販売。 しかしBOOTHは販売者がBOOTHではなく自分なのがちょっと気になる。 電子書籍も作ってみたい。 AmazonKindle Direct Publishingは料率が低い。 ということで、BOOK☆WALKERにした。 同人に力を入れている感じがあるのも良い。

EPUBという形式で作るらしい。 Re:VIEWは対応している。 PDFのようにどのデバイスでも同じように表示するのが目的の形式だと思っていたけれど、そんなことはなくHTMLをZIPで固めたものだった。 ウェブサイトでブラウザごとに見た目を調整するのと同じ対応が必要。 つらい。 コード領域のスタイルを font-family: monospace, serif; にするとか。

silight.hatenablog.jp

何かのチェッカーに掛けたら、「画像ファイルが無いけど大丈夫?」みたいなことを言われたので、この部分を消した。 Re:VIEW Templateはあくまで「TechBoosterで利用しているRe:VIEWのテンプレート」か。

github.com

BOOK☆WALKERのブラウザビューアはコード領域が等幅フォントにならなかったりしてつらい。 頑張ろうにも事前に手元で見た目を確認する手段が無い。 電子版でも別途PDFをダウンロードできるので、そちらを見てほしい。

お釣り

冊子版は1,000円で、電子版はちょっと安く900円にしたので、お釣りが必要。 みずほ銀行をメインで使っているので、両替機で両替。 両替機に来月から10枚が上限になるというお知らせがあった。 使い物にならない。 今回両替した100円玉は大事にとっておこう。

技術書典当日

今回は2フロア開催。 私は3階。 ちゃんと早めに行ったのに、サークル入場に時間が掛かって、開場までギリギリ。 たしかに、2階より人が少ないというのも感じた。

note.mu

「3階であまり売れなかった」と怒っていた人もいたけれど、まあ、今までの技術書典の売れ行きが良すぎたのかもしれない。 買う側の自分としても「あれ? 技術書典で買った本を次の技術書典までに何冊読んだっけ?」と気が付きつつある。 委託販売をしてくれているサークルも多いので、買い逃しても何とかなるし。

ということで売れ残った分をとらのあなの受付に預けて終わり。 ダイレクト入庫サービスが楽で良かった。 事前に申込みしておけば、当日受付に本を持っていくだけ。

AtCoderで青色になるまでにやったこととプログラマー35歳定年説

f:id:kusano_k:20190925052150p:plain
https://atcoder.jp/users/kusano

はい。 みんな「AtCoderで○色になるまでにやったこと」みたいなタイトルで、右肩上がりのレートのグラフとともに楽しそうな記事を書きやがって。 こちとら2年かけてジワジワとレートが下がり、とうとう下の色に変わってしまった。

これがやりたかっただけなので、競技プログラミング力の向上に繋がる有益な話は、この記事にはほとんど無い。 解答を清書してブログに解説記事を書くというのはオススメだけど。

私と競技プログラミング

「○色になるまで」という記事には、いつ頃から競技プログラミングを始めて、○○年頃には何をしていたか、みたいなことを書くものらしい。

Cマガ電脳クラブ

今の競技プログラミングとはちょっと違うけれど、「Cマガ電脳クラブ」が最初だろうか。 今は無きC MAGAZINEという雑誌があり、その中の「Cマガ電脳クラブ」というコーナーで、問題が出題されていた。 解答と解説を送って正解していれば、雑誌に名前が載る。 2人が選ばれて解説も掲載される。

問題はこんな感じ。 だいたいは、探索して何らかの枝刈りを入れれば現実的な時間で解けるというもの。 AtCoderなどで慣れた人なら1時間も掛からずに解けそう。

f:id:kusano_k:20190925051245j:plain
C MAGAZINE 2004年7月号

中身の分からない複数のテストケースに通るプログラムを書くのではなく、問題に書かれている答えが導ければ良い。 2人が選ばれると言っても、提出時間などが競われるわけではなく、担当者の主観で選ばれる。 実行速度が速いとか、解法がユニークだとか。 関数を一切使わずにプリプロセッサマクロだけで解いたという解答もあった。

2002年から廃刊までだいたい毎回送っていて、何度か解説が載ったこともあった。

ACM-ICPC

2008年。 知ったのが修士1年のときだから、一度しか出られなくて残念(年齢制限があって、修士1年くらいまで)。 もっと早くに知っていれば……。 今の大学生は学部1年から出ている人が多くて羨ましい。

TopCoder

で、ACM-ICPCが終わった後も「これは面白いな」と過去問を解いているときに、研究室の助教に「こんなサイトもあるよ」とTopCoderを勧められたのだったかな。

f:id:kusano_k:20190925055941p:plain
https://www.topcoder.com/members/kusano/details/?track=DATA_SCIENCE&subTrack=SRM

当時は定期的にコンテストを開いているサービスはTopCoderしか無かった。 TopCoderは(今はウェブからも参加できるけれど)Javaアプリをダウンロードして動かす。 当時は、リアルタイムにランキングを更新したりするのはそりゃウェブでは無理だよなと思っていた。 ウェブの技術の進歩はすごい。 Ajaxなんて言葉もこの後に流行った。

TopCoderは最初は黄色だったものの青に落ち、しばらく足掻いて、赤にタッチするところまではいった。 そしてその後だんだんレートが下がっていった。

天下一プログラマーコンテスト2009

今はあちこちの会社がコンテストを開いているけれど、10年前はそんなことはなかった。 Googleくらい。 そんな中、KLabが1回だけコンテストを開いたことがあった。

懐かしんで探したけれど、今も残っている様子が分かる記事がこのブログ1個しか見つからなかった。

天下一プログラマーコンテスト決勝 - suztomoのはてなダイアリー

1日目2.5ポイントのsuperflipが私の1人チーム。 この頃にルービックキューブで最短手数が最長となるのはどの状態か?というのが話題になっていた。 その候補がSuperflipという状態で、そこからチーム名を取った。 今でもCTFに出るときに使っている。

[B! イベント] shi3z on Twitter: "天下一カウボーイ大会は登録商標なので、類似商号をつかうつもりなら、裁判するしかないなあ http://www.klab.jp/tenka1programer/bosyu.html"

「『天下一』という名前はうちの商標だ。訴えるぞ」

「お前も天下一武道会のパクりだろうが」

というやりとりを見かけて、「IT業界はサツバツとしているなぁ」と思った覚えがある。

Codeforces

2010年Codefoces開設。

英語が読めない(私の英語力が無いのは認めるけれど、どうもロシア語の問題を英訳していたようで、Codeforcesの英語もひどかった)し、コンテストは不安定だしで、数回参加して終わり。 いつの間にかTopCoderを抜いて、世界トップシェアになっていた。

f:id:kusano_k:20190928170504p:plain
https://codeforces.com/profile/kusano

http://codeforces.com/profile/kusano

AtCoder

2012年AtCoder開設。 このときは今ほど参加者が増えるようになるとは思っていなかった。

プログラマー35歳定年説

年々調子が悪くなっているのは、AtCoderだけではない。 Google Code Jamでは10年くらい毎年Tシャツを獲得していたけれど、2017年はメインのGoogle Code Jamがダメで、Distributed Code Jamで獲得。 今年2019年はDistributed Code Jamは無く、Google Code JamもダメでTシャツが得られず。

年齢もいつの間にか30歳を超えていたし、プログラマー35歳定年説が頭をよぎる。

レート、どうすれば回復するんだろうなぁ。

半年前くらいに、「これはマズい」と思ってAtCoderの過去問を埋め始めたけど、ABCの最初のほうのDに難しいものがあって、そこで詰まって止めてしまった。 レートへの効果は特に無し。 まあ、簡単な問題の数をこなしても意味が無いのだろう。

f:id:kusano_k:20190928171846p:plain
https://kenkoooo.com/atcoder/?user=kusano#/user/kusano

2018年の6月頃にちょっとAtCoderのレートが回復している。 特に何もしていない気がする。 各回のパフォーマンス(各回の成績、AtCoderのレートはこれの重み付け平均)を見てみると、たまたま調子の良かった回があっただけっぽい。

f:id:kusano_k:20190927064947p:plain

そもそも、2016年頃のレートの上昇もレートの付き始めだからであって、パフォーマンスはAtCoderの開設以来ずっと下がっている。 TopCoderのレートを繋げて見ても、2012年がピークで、そこからはジワジワと下がっているんだな。

この頃は、解いた問題を解説とともにブログに書くということをしていた。 コードも提出したものをそのままではなく綺麗に書き直していた。

kusano_progの日記

これはたしかに効果があった。 後から解くと、コンテスト中の焦りが無いので思考が整理できる。 だんだんコンテスト中でも同じように理路整然と考えられるようになる。 しかし、当時のTopCoderは作問者の解説があったり無かったりであっても当然英語なので、ブログを見てくれる人がいてモチベーションが続いたけど、今のAtCoderだとコンテスト直後に公式の解説が上がるんだよな。

2013年は就職した年でもある。 「仕事で毎日プログラムを書いているだろ」と言われそうだけど、書いてない。 職業プログラマーはコードを書かないからね。 1週間に100行書いたら多いほう。 いや、主語がでかいな。 少なくとも私はそう。

別に、マネージメント的な業務があるとか、事務作業が多いとかではない。 大規模なシステムだと、ちょっとした修正でも内容を雑には決められないし、既存のコードの把握にも時間が掛かるし、バグがあったらエラいことなので慎重にならざるをえないし、ドキュメントを書いたり負荷検証をしたりもある。 変なコードを入れると、自分とチームメンバーがこの先10年とか苦しむことになるというプレッシャーもある。 そもそもコードを書いたところで、AtCoderの後半の問題のような高度なアルゴリズムなんて使わないし。 「競技プログラミングは業務の役に立つのか?」が定期的に話題になるけれど、競技プログラミングが役に立つ状況になったら、それは黄色信号だと思っている。 すごい人が難しいアルゴリズムで問題を解決したとして、その後の機能追加とかメンテナンスとかはどうするんだと。

昔のAtCoderの問題を見て、「この問題をこの時間で解けるか?」と考えてみると、解けそうなので、プログラミング力自体は落ちてはいないと思う。 でも、例えばアルゴリズムの良い解説なんかは蓄積されるし、人類全体は進歩するので、現状維持(もしくは+ε)では、相対的に下がるというなのかもしれない。 昔のTopCoderは、動的計画法ができればレッドコーダーになれたし、Binary Indexed Treeなんかは難問に使われる秘技感があったぞ。 結局、力が付いたのは、真面目に取り組んでいた2010年から2012年の間だけと。 この頃は日頃から競技プログラミングの問題を考えていた。 毎週末のAtCoderに参加するだけではダメっぽい。

ちゃんと練習すればレートも回復するのかもしれないが、やる気が出ないな。 この記事を書くのに昔のことを思い出していたけれど、そういえば昔はプログラムを書くだけで楽しかった。 本のコードを写経して動くだけでも楽しかった。 今は面倒なだけ。 プログラミングは手段ではあるが目的にはならない。

B - Sorting a Segment

例えば青に落ちたこの前のAtCoder Grand ContestのB問題だと、正解すればもちろん嬉しい、「ソート済みの連続するK要素と、連続するK+1要素で左端が最小で右端が最大のものを数えれば……」とかアルゴリズムを考えるのもパズル的でまだ楽しい。 ここから境界条件などを考えながらコードに落とす作業が面倒でしかない。

プログラマー35歳定年説というのは、能力の問題ではなくやる気の問題で、やる気が無くなって後進に追いつかれるのがこの辺の年齢ということなのかもしれない。 どうしたものか。

裸族のスカイタワーのファン換装

【販売終了】 裸族のスカイタワー 10Bay SATA6G (CRST1035EU3S6G) - 株式会社センチュリー

これ。 HDDが10台まで入るので、8TBのHDDを挿していけば合計80TBのストレージになる。

やっぱりダメだったのでファンを交換することにした。

f:id:kusano_k:20190620012528j:plain

左が元々付いていたファン。 ARX DC BRUSHLESS FD1214-S1053E。 同じくらいの風量が良いと思うのだけど、ググっても情報が出てこない。

右が交換用に買ったファン。

CFZ-140GLA | Ainex

補足 CFZ-140GLの型番変更品です。違いはありません。なお、中央の丸ラベルは旧型番のままで変更はありません。

どういうこっちゃ……。

裸族のスカイタワーの筐体はタワー型デスクトップと同じ作りで、後ろのネジ2個を外して、側面のパネルを後ろにスライドすれば開く。 固くて他にネジがあるのかと思ったけれど、そんなことはなく、ドライバーでこじれば外れた。

ケーブルの長さが足りないとか、コネクタ形状が合わないとか、そういう問題は無く、素直に交換完了。 風量も手を当てた感じは同じくらい。 HDDの温度が50度を超えるので、どうせならもっと風量の多いファンに交換しても良かったかもしれない。

追記。

55℃になってCrystalDiskInfoの温度が赤くなる。 さすがに怖いので、noctua NF-A14-PWMに交換。 フル回転でもそんなに煩くない。 温度は50℃前後。