write ahead log

ロールフォワード用

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

msys2でpostgres9.xをインストールした時のメモ

pacmanで入れようとしたら11系しかなかったから自前でビルドした.

1. msys2の起動

64bit環境なのでスタートメニューから

MSYS2 MinGW 64-bit

で起動した.

2. 必要なパッケージのインストール

必要ないものも入れたかも.

$ pacman -Syu
$ pacman --needed -S git mingw-w64-x86_64-gcc base-devel mingw-w64-x86_64-toolchain zlib zlib-devel

3. リポジトリからコードを取得

バージョンはお好みで.

git tagで適当に調べてそれっぽいのをチェックアウトした.

$ git clone git://git.postgresql.org/git/postgresql.git
$ cd postgresql
$ git checkout REL9_6_12
$ ./configure --host=x86_64-w64-mingw32 && make && make install

4. 確認

$ psql --version
psql (PostgreSQL) 9.6.12
$ which pg_restore
/mingw64/bin/pg_restore
$ which pg_dump
/mingw64/bin/pg_dump