write ahead log

ロールフォワード用

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

ncursesを使ってc言語でテトリスを作った

作った.

github.com

ない機能

こんな機能がありません.ほしい.

  • 次に出現するのブロックを画面の横に表示する機能
  • ブロックをキープする機能
  • 矢印キーの対応
  • 回転する時の軸補正
  • スコアの付け方(今は一律一行10ポイント)
  • 落下速度のゲーム状況に応じた変更
  • なんかwikipediaにいっぱい載ってる機能
  • 文字に絵文字を使う

参考文献

せりか式 - ncurses

curses ライブラリ関数

C言語のNcursesで日本語を扱う

NCURSES Programming HOWTO

今日の雑記 - curses版テトリス

Ncurses Programming Guide

もう一度基礎からC言語 - ncursesライブラリの関数

ところで

Webにはこんなヤバいクォリティのものもあります.

GitHub - brenns10/tetris

作りこみたくなったら以下が良さそう.
(大学の教材?)

テトリスを作ろう

シェルのリダイレクトで混乱したときに

混乱してきた.

stackoverflowの回答が簡潔でよかったので表にしておく.

コマンド シンタックス 意味
> ディスクリプタ > ファイル名 ディスクリプタの内容をファイル名へ
>& ディスクリプタ >& ファイルディスクリプタ ディスクリプタの内容をディスクリプタへ
&> cmd &> ファイル名 cmdの標準出力とエラー出力をファイル名へ
&>> cmd &>> ファイル名 cmdの標準出力とエラー出力をファイル名へ(追記)

最後の2つがあるから, いつも混乱する気がする...