write ahead log

ロールフォワード用

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つがあるから, いつも混乱する気がする...

エクスプローラからMSYS2を開いてついでにvimも開けるようにする

VirtualBoxと一緒にWSL使ってるとどうにもネットワークの調子が悪いので, 切り分けのために一度MSYS2生活に戻ることにした.

ただ, 右クリックのコンテキストメニューからターミナルが開けないのはどうにも具合が悪い.

さらに言うといくつもvimを入れたくないので, MSYS2のもの一本にしたい.

というわけでレジストリをいじった.

レジストリ変更用のファイルを作成

以下のファイルを作成.

(msys2here.regとか, 適当なファイル名で)

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\MSYS2HERE]
@="MSYS2 Here"

[HKEY_CLASSES_ROOT\Directory\Background\shell\MSYS2HERE\command]
@="C:\\msys64\\msys2.exe"

[HKEY_CLASSES_ROOT\*\shell\openWithMsysVim]
@="OpenWithVim"

[HKEY_CLASSES_ROOT\*\shell\openWithMsysVim\command]
@="C:\\msys64\\msys2.exe vim \"%1\""

これで右クリックのコンテキストメニューに「MSYS2 Here」と「OpenWithVim」が追加される.

あと, 環境変数の引継ぎとかもしたかったので, バッチファイルを変更しようとしたら, 以前と違って専用のiniファイルに切り出されたらしい.

C:\msys64\msys2.ini

というファイル名になっていた. 一部のコメントアウトをアンコメントする.

MSYS=winsymlinks:nativestrict
#MSYS=error_start:mingw64/bin/qtcreator.exe|-debug|<process-id>
CHERE_INVOKING=1
MSYS2_PATH_TYPE=inherit
MSYSTEM=MSYS

これで随分使いやすくなった.

Laravelで画像をリサイズする際のメモ

Laravel 5.7で試した.

intervention/imageを使った.

他にも透かしを入れられたりと便利.

基本的に上記の公式を見るのがよい. 以下は怠けたいとき用.

composerでパッケージのインストール

$ composer require intervention/image

laravelのconfigへ追記

config/app.phpへ以下を追記.

$providers変数へ以下を追加する.

 $providers = [
        ...
        Intervention\Image\ImageServiceProvider::class,
        ...
    ];

$aliasesも追記しておく.

 $aliases = [
        ...
        'Image' => Intervention\Image\Facades\Image::class,
        ...
    ];

コントローラーのコード

コントローラーにこんなコードを書いた.

$file = $request->file('foo'); // fooってパラメータ名で取得
$x = 300; // 300px
$y = 300; // 300px

// 画像をリサイズ
$img = \Image::make(file_get_contents($file->getRealPath()));
$img->resize($x, $y, function($constraint) {
    $constraint->aspectRatio(); // アスペクト比を保つ
});
$img->save($file->getRealPath());

// 他のストレージへ保存
$file->storeAs($save_path, $filename, 'public');

Laravelでcomposer使うとやたらIt is unsafe to run Dusk in production.と言われる時の対処

なんか前も同じ事やった気がするのでメモっとく.

composer installとかcomposer updateをすると以下のメッセージが出てくる.

It is unsafe to run Dusk in production.

本番環境でDusk入れるなあぶねーぞだそうだ.うん.そうだね.

対処

composer.jsonに以下を追記した.

     "extra": {
         "laravel": {
             "dont-discover": [
+                               "laravel/dusk"
             ]
         }
     },

昔見た時にはrequire-devへduskの記述を書けばよいってのがあった気がするんだけど.(っていうか名前的にそうじゃね?)

require-devでもどうにも現象が収まらなかったので上記で解決した.

追記

php初心者過ぎて全くわかってなかった.

productionでコンポーザ使う時にはオプション付けないといけないらしい.

$ composer install --no-dev