読者です 読者をやめる 読者になる 読者になる

ズンドコしたい (2)

こっちは入力を5つ区切りにして、それぞれが 00001 の並びになっているかどうかをチェックする。 (仕様はこちらが正しいらしい?)

$ cat /dev/urandom \
 | LANG=C tr -dc "01" \
 | fold -w1 \
 | paste -d' ' - - - - - \
 | (perl -nle 'print; if ($_ eq "0 0 0 0 1") { exit 0; }'; echo 2) \
 | perl -ple 'BEGIN { @table = qw/ズン ドコ キ・ヨ・シ!/ } s/(\d)/$table[$1]/ge' \
ドコ ドコ ズン ドコ ドコ
ズン ドコ ズン ズン ズン
ドコ ズン ズン ズン ドコ
ズン ドコ ズン ズン ドコ
ズン ドコ ズン ドコ ドコ
ドコ ドコ ズン ズン ズン
ズン ズン ドコ ズン ズン
ズン ドコ ドコ ドコ ドコ
ズン ドコ ドコ ズン ドコ
ドコ ドコ ズン ドコ ズン
ドコ ズン ドコ ドコ ズン
ズン ドコ ドコ ズン ドコ
ズン ズン ドコ ズン ドコ
ドコ ドコ ドコ ドコ ズン
ドコ ズン ドコ ズン ドコ
ドコ ドコ ドコ ズン ズン
ズン ドコ ズン ズン ズン
ドコ ドコ ドコ ズン ドコ
ドコ ズン ズン ズン ドコ
ズン ドコ ドコ ドコ ドコ
ズン ズン ズン ドコ ズン
ズン ドコ ズン ズン ズン
ドコ ズン ドコ ドコ ドコ
ズン ズン ズン ドコ ドコ
ズン ズン ズン ズン ズン
ズン ズン ドコ ドコ ドコ
ズン ズン ズン ズン ドコ
キ・ヨ・シ!

ズンドコしたい

ストリーム上の 0 と 1 の並びを sed に取り込んで、00001 かどうかを DFA っぽく検査する。

$ cat /dev/urandom \
 | LANG=C tr -dc "01" \
 | fold -w1 \
 | (sed -nf dfa.sed; echo 2) \
 | perl -ple 'BEGIN { @table = qw/ズン ドコ キ・ヨ・シ!/; } s/(.)/$table[$1]/e;' \
 | paste -sd' ' - \
 | tr -d ' '
ズンズンドコドコズンドコズンドコドコドコドコズンズンズンズンドコキ・ヨ・シ!

肝心の dfa.sed は下記の通り。 t コマンドで分岐させるために無理やり置換コマンドを実行している。

#!/usr/bin/env sed

{
:s1
          s/0/0/
          t s2
          b restart
:s2
          p
          n
          s/0/0/
          t s3
          b restart
:s3
          p
          n
          s/0/0/
          t s4
          b restart
:s4
          p
          n
          s/0/0/
          t s5
          b restart
:s5
          p
          n
          s/1/1/
          t quit
          b s5
:quit
          p
          q
:restart
          p
          n
          b s1
}

MySQL のコメント構文に対応する

MySQL--/* */ だけじゃなくて # スタイルのコメントもサポートしている。 Emacssql-mode だと # スタイルはサポートしていないので、構文テーブルをどうにかする必要がある。

(add-hook 'sql-mode-hook 'mysql-comment-syntax)

(defun mysql-comment-syntax ()
  (setq-local syntax-propertize-function 'mysql-comment-propertize-function))

(defun mysql-comment-propertize-function (begin end)
  (funcall
    (syntax-propertize-rules
      ("\\(#\\).*\\(\n\\)" (1 "<") (2 ">"))) ;; from "#" to newline
    begin
    end))

追記 たぶんこっちのほうがいいと思う。データベースごとの設定が標準で用意されていた。 .dir-locals.el に書いておけばプロジェクトごとの設定にも対応できそうである。

(sql-set-product 'mysql)