write ahead log

ロールフォワード用

laravelでdusk使う時にやること

毎回忘れるから雑にメモ

インストール

$ composer require --dev laravel/dusk

テスト用DBの作成

$ psql -U homestead -h localhost
> create database homestead_dusk_test encoding UTF8;

dusk用envファイルの作成

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

$ cp .env .env.dusk.local
$ vi .env.dusk.local
[DBとかをいい感じに変える]

日本語使えるようにする

$ vi tests/DuskTestCase.php

--lang=ja_JPを追記.

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

テスト作って動かす

まぁ, 一応かいとこ.

$ php artisan dusk:make
$ php artisan dusk

goで郵便番号検索サーバを書いた

初めてKEN_ALL.CSV触りましたけど, 怖いっすね.
全パターン対応できる気がしない.

作ったもの

こんな感じで動くものが欲しかった.

f:id:twinbird_htn:20190628233748g:plain
kenchan

詳しい使い方はGitHubで.

作った経緯

受託開発やっていると, どこのAPIでも使えばいいってもんでもないので

  • 無料で
  • 商用利用可で
  • 長く使えて(大手企業がやっていて)
  • APIが変わんないやつで
  • 情報が定期的に新しくなるやつ

が欲しいとか社内で話題になったけど, そんなものはないわけで.(ZipCloudさんはかなりいいけど)
試しに書いてみた.

参考

詳細は以下の詳しい方に譲るんだけど, KEN_ALL.CSVの内容が結構カオスだった.

郵便番号から住所を検索するサービスにまともなものがない

汎用機とかオフコンを触って泣いたことがある方なら「あぁ...お疲れ様」ってなると思う.

ちゃんとしたのが欲しいならzipcloudさん使えばいいと思う.

ほんと, それくらいカオス.

感想とか?

軽い気持ちでやるもんじゃなかった.

Windows Terminal(Preview)を試した

期待のWindows Terminalが先週末からMicrosoft Storeで公開されている.

少し使ってみたけど, 現時点でも結構いい出来だと思う.

GitHubからソースを手に入れてビルドもできるだろうけど, 面倒がる僕みたいな人にはありがたい.

導入方法

Microsoft Storeで探して入れるだけなのだが, 一つ注意点があって, Windows10が最新でないといけない.

ちゃんとシステム要件に書いてあるのだが, Twitterとか見てると読んでない人が多い気がする...

Windows Updateしてね

あとはここから入れるだけ.

設定

Settingsを開くといきなりエディタでJSONファイルが出てきてウケた.

UI周りは後回しらしい.(いいと思う)

設定ファイルはこの辺を見ながら書けばいいんじゃないっすかね.

感想とか?

sshで使ったりしても大体問題なく動くので, 内部処理はいい感じなんじゃないかなぁ.

ただ, PreviewなのでUIの挙動がやっぱPreview.
(ウィンドウ閉じるときにワンクッション待ちが入って何か走ってるし.フィードバック送ってるのかな?)

あと, ウィンドウサイズ変えると落ちたりね.

地味に辛いのが日本語入力時にIMEが常に左上に表示されること.

[Windowsキー] + . (ドット)の面白機能の方が日本語IMEより使い勝手良くない?っていうwww

いずれにしてもいいものなので正式版が待ち遠しい.

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を見るのは楽しいしとりあえず満足.

参考

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

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

Msys2環境でWindowsプログラミングする時のメモ

Windowsプログラミングで直接API触ったことないのに気づいたので, なんとなく初めて見た時のメモ.

触ってみてわかったことは.NETとWindows Formsのありがたみ.

環境構築とビルド方法

ビルド環境のインストール

pacman -S mingw-w64-x86_64-toolchain

GDIを使う時のオプション

普通にビルドすると以下のようなエラーが出る.

undefined reference to `__imp_GetStockObject'

mingwを使うならオプションが必要.

gcc [filename] -lgdi32

リソースファイルのコンパイル

Windowsのリソースファイルのコンパイルにはwindresというツールがある.

windres menu.rc -o menu.o

リソースオブジェクトも含めてコンパイル&リンク

普通にリンクすればいい.

gdiも使う時には(普通使うと思うけど)オプション付けてリソースのオブジェクトファイルも以下のように指定すればいい.

gcc main.c -lgdi32 menu.o

タイマーのようなウィンドウズのモジュールを使う時には

gcc main.c -lgdi32 -lwinmm menu.o

という風にwinmmとかkernel32がいるっぽい.

参考サイト

この辺のサイトの内容が未だにほとんど使えるからWindowsはすごい.

10年以上前からあった気がするけど, 以下のコンテンツは充実してて素敵です.

Win32 API入門

EternalWindows