残の業。
続きを読むOCaml: hello world!が実行されるまで
C# のHelloworldの基礎を説明できる人、弊社に一発で入社できますよ。ってかんじだ。
— きょん@うさみみモード (@kyon_mm) 2017年5月16日
@func_hs 別に言語はとわないつもりですけど、 C# だとうれしい。
— きょん@うさみみモード (@kyon_mm) 2017年5月16日
前一度調べたので記事をまとめておく。
OCamlプログラムの初期化は複雑だなぁ思った次第です。
プログラミング: Makefileの雑い話2
ハマった
X = a b c X += d e f all: echo $(X)
これはmake
を叩いてみるとa b c e e f
と出力される。
まぁ+=はこれで良さそう。
ちょっと直感に反している例として、make X=123
みたいに
外側から与えられる場合。これは123
とだけ出力される。
コレを123 d e f
と出力させたかったらoverride
を加えればいい。
X = a b c override X += d e f all: echo $(X}
これで無事123 d e f
と出力される。
しかしまぁこれ、なかなか悩ましくて外側から与えられる場合には、例えばコンパイルフラグが完全な状況になっていて欲しい場合もあり悩ましい。
例えば最終的にCFLAGS=-DA -DB
となってて欲しいところを-DAだけ外から与えてoverride +=
で-DB
とする設計の場合、この+=を無視できなくなってしまう。しかし外側から与えられると共通のフラグは勝手に+=されて欲しい気持ちにもなって悩ましい。。。
結局は人間の運用をどうするべきかということなのですが、まぁ結論がない。。。。。
一般の話: 技術書典2に本を出しました
本きれいですーうおー pic.twitter.com/jZrHDGBVvC
— インターネットも届かない闇 (@no_maddo) 2017年4月9日
電子書籍販売し始めました!!!
コンパイラを作って遊ぼう - nomaddo - BOOTH
技術書典2に本を出してきました。う-15 「コンパイラを作ってあそぼう」です。 @alt_apさんの素晴らしいイラストを見て!
殺伐とした部屋に突然の萌え絵が!!!お願いしたイラストがでかく印刷されるの満足度たかい! pic.twitter.com/eU1aWkZef6
— インターネットも届かない闇 (@no_maddo) 2017年4月9日
経緯
締め切り駆動開発しようと思って、締め切りギリギリに申し込んだ。1月初めだったかな。
感想としては締め切り駆動は進捗はでるけど寿命を減らす感がある(徹夜3回くらいした
戦略
- コンパイラの本を出す
- 出すなら売れ残りたくないので色々戦略を考える
- とにかくコンパイラ本だということを前面に出す
見た時のわかりやすさ優先 - 知り合いの@alt_apさんにイラストをお願いする
- 60ページくらいで簡単に読み切れる分量、500円程度の値段設定
実際はページが減って52ページになった……
- とにかくコンパイラ本だということを前面に出す
- latexが書き慣れてるしええやろ
大変だったこと
- 残の業が障害になった
残業がなければちゃんとコンパイラが完成していただろう…… - 自分のわかっていないところがやっぱり分かって無くて大変だった
レジスタ割付けはなんかこう、教科書通り全然出来ないし教科書では簡単な例ばっかりで駄目
コンパイラはこういうのが多くて困る。実践のノウハウがやはり重要
準備がいる
印刷所から直入だったから荷物手ぶら状態だったけど、色々小物が必要だった
- コインケース
色々慌ただしくやり取りしているとただ机にコインを積んでいるだけだと落とす - A3イラストを立てるための台みたいなもの
やはり机においているだけだと全然外から見えない - 値段を表示するためのもの
- 机にしくマットみたいなもの
見栄えの問題だなー - 大量のコインと札を持ち帰るための袋
10万円分の1000円札…… - ダンボール持ち運ぶやつ
大量に在庫残った場合を考えてキャリーバッグをもっていったけど、もっと適切な道具があるっぽい
経費
- 印刷費200部 45000
- イラスト発注 25000
- 参加費 7000
- 交通費 4500
時給で換算すると余裕で100円を切るやつ。
赤字にならなくてよかった。
おまけ
今回使ったlatexのテンプレートを貼っておきます。
今回私の本文はこれだけで作っています。あと図にパワポから生成したpdf。
遷移図みたいなの書くのにパワポが最高。graphvizとか書いてられない。
GitHub - nomaddo/b5-book-template
プログラミング: shellの雑いはなし
.shからmakeコマンドを叩きたくなり、さらにその中で実行するMakefileの変数を上書きする 処理を書きたくなった。そのラップするスクリプトはどう書いたらよいだろうか。
a.c
#include <stdio.h> int main() { #ifdef A printf("a"); #endif #ifdef B printf("b"); #endif }
Makefile
all: gcc $(CFLAG) a.c
さて問題、これをCFLAG=-DA -DB
にするようにmakeするためのシェルスクリプトはどう書いたらよいだろうか。
ただし、この実行は複数回やるので変数に束縛することにする。
build.sh
var="CFLAG=\"-DA -DB\"" make "$var"
コレを実行すると以下のようになる。
$ bash build.sh make: 無効なオプション -- 'D' make: 無効なオプション -- '"'
さあ何が悪いのかな。
追記
今日1時間ほど詰まった問題を書いてみました。
正解はMakefileの$(CFLAG)が"$(CFLAG)"
となっていないからです。
まぁshellはつらいですね……
プログラミング: upstreamの変更を取り込みたくない時どうすればいいのか
Git運用中に困ったので正しい回答が欲しくメモしておく。
今レポジトリupstream, originがあるとする。