write ahead log

ロールフォワード用

git bash(mintty)からでもpg_dumpしたい

ちょっと考えればわかりそうな事だったんだけど, メモしておく.

git bashやmsys2でpg_dumpを使おうとするとWindowsには疑似端末がない影響なのか, うまく動作しない.

(とはいえ,最近は状況が変わってきたようだけど.) マイクロソフト、Windows 10にUNIX系OSと似た擬似コンソール実装

うまくいかない例

pg_dump -h localhost -p ${LocalPort} -U ${DBUser} -d ${DBName} > dumpfile.sql

上記で実行すると, パスワードの入力待ちがうまく表示されない.

「お, こりゃ見たことあるゼ! winpty使えばいいんだろ?」

と安直にやるとリダイレクトがうまく動作しない.

うまくいった例

winpty pg_dump -f ${DumpFilePath} -h localhost -p ${LocalPort} -U ${DBUser} -d ${DBName}

困り果ててpg_dumpのマニュアルを引くと, なんとファイル出力するオプションがあるではないか.

そういえばmysqlでもそうだった気が...

msys2で使う時には以下もあった方がいいのか?

export PGCLIENTENCODING=UTF8

詳解Unixプログラミングのサンプルコードを動かす環境を作る

Ubuntu18.04で.

とりあえずbuild-essential入れりゃいいんだろと思っていました.

$ sudo apt install build-essential

APUEのサイトからサンプルライブラリを手に入れる

ここで配布されているのでダウンロードします.

# ダウンロード
$ curl -OL http://www.apuebook.com/src.3e.tar.gz
# 展開
$ tar xfvz src.3e.tar.gz

ライブラリをmakeするのに必要なライブラリを入れる

libbsd-devがいるっぽいです.

$ sudo apt install libbsd-dev

makeしてライブラリを配置

$ cd [ダウンロードして展開したディレクトリ]
$ make
$ sudo cp include/apue.h /usr/local/include
$ sudo cp lib/libapue.a /usr/local/lib

適当にサンプルをビルドする

$ gcc sample.c -lapue

これで動くはず.

WSLのUbuntuでsshしたら接続先の操作が文字化けする

WSL上のlocale設定していなかった.

日本語使わないと気づかんなぁ.

WSL上の.bashrcに以下を追加.

export LANG=ja_JP.UTF-8
export LANGUAGE=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8

続いてlocaleを生成して設定.

$sudo locale-gen ja_JP.UTF-8
$sudo dpkg-reconfigure locales
[TUIになるのでja_JP.UTF-8をデフォルトにする]

ターミナルを再起動して完了.

laravelでdusk使う時にやること

毎回忘れるから雑にメモ.

HomesteadでなくCentOSの場合

chromeを入れてやる必要がある.

vi /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo yum -y install google-chrome-stable

duskのインストール

$ composer require --dev laravel/dusk
$ php artisan dusk:install

dusk用envファイルの作成

.env.testingとは異なるので注意.

$ cp .env.testing .env.dusk.testing

日本語を使えるようにする

$ vi tests/DuskTestCase.php

--lang=ja_JPを追記.

        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu',
            '--headless',
            '--lang=ja_JP'
        ]);

テスト作って動かす

まぁ, 一応かいとこ.

$ php artisan dusk:make xxxTest
$ php artisan dusk

golangでHTTPヘッダを追加した時のメモ

リバースプロキシを使うことが多いだろうから, net/httpで書いたサーバがそのまま外に出る事は少ないと思うけど.

App Engineがね.(設定とかでいい感じにしてくれるんですかね?)

書いたコード

こんな感じでラッパーを作って.

/*
 * HTTPヘッダを送出するようにハンドラをラップする
 */
func secureHeader(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // XSS対応してね
        w.Header().Set("X-XSS-Protection", "1; mode=block")
        // frameを制限してね
        w.Header().Set("X-Frame-Options", "SAMEORIGIN")
        // Content-Typeを使ってね
        w.Header().Set("X-Content-Type-Options", "nosniff")
        // HTTPS使ってね
        w.Header().Set("Strict-Transport-Security", "max-age=15768000")
        // オリジナルのハンドラを呼び出し
        fn(w, r)
    }
}

こんな感じに呼び出した.

http.HandleFunc("/some", secureHeader(someHandler))

参考

Homestead上でlaravelのdusk使おうとしたらFailed to connect to localhost port 9515: Connection refusedって言われる

結論としてはchromeとchrome-driverに必要なライブラリが入っていなかったからっぽい.

Homesteadって全部入りではないのか...

っていうか以前のバージョンなら問題なく動いた気が...なぜなのだ...

# 直接実行するとchrome-driverがそもそも動作しない
$ ./vendor/laravel/dusk/bin/chromedriver-linux --verbose
..[なんかエラーメッセージ]

# chrome-driver用に入れる
$ sudo apt install libnss3

# chromeを入れる
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
$ sudo apt-get update
$ sudo apt-get install google-chrome-stable

とりあえず動いた.

Win32 APIを使ってC言語でテトリスを作った

作った.

github.com

前回コンソールで作ったのでGUIにしてみた.

twinbird-htn.hatenablog.com

でも途中でメンドクサクなって全然カラフルじゃないしボタンもない.

Win32 APIに触ってみたかったので作り始めたが, 作ってわかったことは.NETとWin Formsは偉大という事です.

でもまぁ, OSのAPIを見るのは楽しいしとりあえず満足.

参考

ウィンドウサイズは本当にハマったので.感謝.

更新しない備忘録改二 - クライアント領域のサイズからウィンドウ全体のサイズを設定する