write ahead log

ロールフォワード用

bashのターミナルでコマンド履歴を検索するやつの設定

bashはコマンド履歴を検索できる。便利。

キー 意味
ctrl + r 履歴を後方に検索
ctrl + g 検索を中止
ctrl + s 履歴を前方に検索

ただ、ctrl+sはデフォルトで端末の出力を止めてしまうので初期状態では使えない。

ということで以下の設定を行う。

stty stop undef

これを.profileとか.bash_profileとかに書いておく。

ctrl+sとctrl+qはマジで過去の遺物感があるな。

PHPでmultipart/formdataの中身を直接見たい

PHPで以下のようにするとHTTPのbodyをそのまま見ることができる。

$postBody = file_get_contents("php://input");

なんだけど、multipart/form-dataの場合にはこの手が使えないらしい。

過去には$HTTP_RAW_POST_DATAという変数があったらしいが削除されたっぽい。

PHP - $HTTP_RAW_POST_DATA

困っていたのだが、enable_post_data_reading というフラグはまだ生きているらしい。

PHP - コア php.ini ディレクティブに関する説明

apacheを使っていれば以下のように.htaccessに書いてやれば試すことができる。

php_flag enable_post_data_reading Off

postgresql-setup --initdbでinvalid locale settings; check LANG and LC_* environment variables エラーが出る

Alma Linuxでdnfで入れたPostgreSQL10を設定しようとした。

こんな感じ。

# postgresql-setup --initdb

すると以下のエラーメッセージがログへ出た。

initdb.bin: invalid locale settings; check LANG and LC_* environment variables

ロケールを確認すると日本語になっているっぽい。

# localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: us
      X11 Layout: us

でも利用可能なロケールを見ると「ja_JP.utf8」が入っていない。えぇ。

# locale -a

以下で入れて解決した。

# dnf -y install langpacks-ja glibc-langpack-ja.x86_64

PostgreSQLは再設定するときに一度以下を消してやらないとならない。

# rm -rf /var/lib/pgsql/*
# postgresql-setup --initdb

Alma Linuxでdnfやyumを使うとGPG checkエラーになった

alma linux8.8で出た。

You can remove cached packages by executing 'yum clean packages'.
Error: GPG check FAILED

入れたいパッケージのGPGキーが入っていなかったらしい。

(何を入れようとしたのか書こうと思ってたが記録が抜けてた)

rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux

参考: Cloud-Linux: yum update error Error: GPG check FAILED

HTTPでファイルをアップロードしたりダウンロードしたりする仕組みをおさらいした時にみたページ

よくわからなくなりがち。
RFC眺めるとなかなかためになった。
MIME-HEADERフィールドに使えるヘッダーってそんなにないんだなーとか。

javascriptでUUIDを作成する方法あれこれ

色々あって面白かったのでメモしておく。 一応全部ブラウザ上の前提。

  1. CryptoAPIを使う
  2. 外部パッケージを使う
  3. URL: createObjectURLを使う

CryptoAPIを使う

使えるなら真っ先に考えるやつ。

MDN - Crypto: randomUUID() メソッド

外部パッケージを使う

ここら辺の有名なやつを持ってきて使う。 HTTPSじゃないとブラウザAPIは使えないのでそういう場合は便利かも。
さすがにrandomUUIDが使えない環境は少ないだろうし。

uuid - npm

URL: createObjectURLを使う

知らなかったし想像もしなかったやつ。リンク先からの引用。

function uuid() {
  return URL.createObjectURL(new Blob()).slice(-36)
}

uuidライブラリの代わりになる実装方法の紹介

マジで?と思って調べてみたらホントっぽい。

W3C - File API - 8.2. Model

パーサーコンビネータというものを学んだときに読んだ記事

正直わかったようなわからないような微妙な感じなのだが、良い記事だったのでメモしておこうと思う。

TypeScript でゼロから作るパーサコンビネータ

JavaScriptでパーサコンビネータのコンセプトを理解する(「正規表現だけに頼ってはいけない」の続き)

小さい関数を作って組み立てるというのは割とわかりやすい気がする。

ただ、Typescriptの型定義に頭がついていかない。。。