type t (* void *)

ソフトウエアのこととか

OCaml: hello world!が実行されるまで

前一度調べたので記事をまとめておく。
OCamlプログラムの初期化は複雑だなぁ思った次第です。

続きを読む

一般の話: sshdに不正アクセスを試みたユーザ名を雑に調べた

ウェブコワイ。
sshdをDynamic DNSを使って自宅鯖に立てているのだけど、/var/log/auth.logをみるたび肝を冷やすので 不正アクセスを試みているユーザ名を雑に調べた。

ユーザ名を見ているとOSSのソフトウエアをインストールするとデフォで作られるユーザ名を狙った物が多くて、 次になんかありがちっぽい名前を狙っている感がある。

続きを読む

プログラミング: 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に本を出しました

電子書籍販売し始めました!!!

コンパイラを作って遊ぼう - nomaddo - BOOTH


技術書典2に本を出してきました。う-15 「コンパイラを作ってあそぼう」です。 @alt_apさんの素晴らしいイラストを見て!

f:id:no_maddojp:20170409232749p:plain

経緯

締め切り駆動開発しようと思って、締め切りギリギリに申し込んだ。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

f:id:no_maddojp:20170410012201j:plain

プログラミング: 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はつらいですね……

プログラミング: 言語処理系ハンズオンでチューターやってきました

どうもインターネットの闇@no_maddoです。
言語処理系ハンズオンでチューターをやってきたのでその感想とかを書き綴ります。

connpass.com

kmizu.github.io

続きを読む