Babunを使ってみる

なんやかんやあって、babunを試してみることにしました。

Babun - a windows shell you will love!

Cygwinは好きじゃないのですが、このへん見てちょっと使ってみようかと。

[D] Windowsはターミナルがダメだから使えないってのは過去の話?

gnupack(Cygwin) + oh-my-zsh + tmuxの環境を構築する - yuukiar.co

インストール

とりあえず公式ページからバイナリをダウンロード、解凍して指定のディレクトリにインストール。

PS > unzip .\babun-1.2.0-dist.zip
Archive:  ./babun-1.2.0-dist.zip
   creating: babun-1.2.0/
   creating: babun-1.2.0/dist/
  inflating: babun-1.2.0/dist/babun.zip
  inflating: babun-1.2.0/dist/freespace.vbs
  inflating: babun-1.2.0/dist/unzip.exe
  inflating: babun-1.2.0/install.bat
  inflating: babun-1.2.0/install.txt
PS > cd .\babun-1.2.0-dist
PS babun-1.2.0-dist > .\install.bat /t C:\babun

起動はちょっとだけ時間がかかります。Cygwinぽい。

普段cmderからシェルを起動しているのでcmderのタスクに登録してみた。 のですが、babun.batを起動すると独立したbabunのウィンドウが立ち上がってしまい、cmder側には「EnterかESCで閉じるよ」ってメッセージが。

そこで、デスクトップにできたショートカットを見ると、babunの持っているminttyを起動するようになっている。 ので、そのパスをタスクに登録してみた。 ら、今度はcmder上でうまく表示されないってかエラーっぽい何かが。

面倒なので、とりあえずcmderを介さずにbabunだけで使ってみます。

初期設定

オプションを開きます。

  1. Looksから透過度の設定をします。デフォルトでOffになっていたのでMedに。そこそ透過します。

f:id:h2blg:20151108131341p:plain

  1. Textでフォント、ロケールの設定を変更。

f:id:h2blg:20151108131704p:plain

ソフトウェアのインストール

apt-cygではなく、pactというコマンドが使えるようです。

とりあえずfindで検索してinstallでインストールする、と。

{ ~ }  » pact --help                                                                                                                                                                                                                     ~
pact: Installs and removes Cygwin packages.

Usage:
  "pact install <package names>" to install given packages
  "pact remove <package names>" to remove given packages
  "pact update <package names>" to update given packages
  "pact show" to show installed packages
  "pact find <patterns>" to find packages matching patterns
  "pact describe <patterns>" to describe packages matching patterns
  "pact packageof <commands or files>" to locate parent packages
  "pact invalidate" to invalidate pact caches (setup.ini, etc.)
Options:
  --mirror, -m <url> : set mirror
  --invalidate, -i       : invalidates pact caches (setup.ini, etc.)
  --force, -f : force the execution
  --help
  --version

tmuxを検索してみるとこんな感じ。

{ ~ }  » pact find tmux                                                                         ~
Working directory is /setup
Mirror is http://mirrors.kernel.org/sourceware/cygwin/
--2015-11-08 12:14:28--  http://mirrors.kernel.org/sourceware/cygwin//x86/setup.bz2
Resolving mirrors.kernel.org (mirrors.kernel.org)... 149.20.37.36, 198.145.20.143
Connecting to mirrors.kernel.org (mirrors.kernel.org)|149.20.37.36|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1883432 (1.8M) [application/octet-stream]
Saving to: ‘setup.bz2’

setup.bz2                100%[====================================>]   1.80M   484KB/s   in 4.0s

2015-11-08 12:14:32 (462 KB/s) - ‘setup.bz2’ saved [1883432/1883432]

Updated setup.ini

Searching for installed packages matching tmux:

Searching for installable packages matching tmux:
tmux
tmux-debuginfo

続いてインストール

{ ~ }  » pact install tmux                                                                      ~
Working directory is /setup
Mirror is http://mirrors.kernel.org/sourceware/cygwin/
--2015-11-08 12:14:49--  http://mirrors.kernel.org/sourceware/cygwin//x86/setup.bz2
Resolving mirrors.kernel.org (mirrors.kernel.org)... 149.20.37.36, 198.145.20.143
Connecting to mirrors.kernel.org (mirrors.kernel.org)|149.20.37.36|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1883432 (1.8M) [application/octet-stream]
Saving to: ‘setup.bz2’

setup.bz2                100%[====================================>]   1.80M   538KB/s   in 3.7s

2015-11-08 12:14:53 (501 KB/s) - ‘setup.bz2’ saved [1883432/1883432]

Updated setup.ini

Installing tmux
Found package tmux
--2015-11-08 12:14:53--  http://mirrors.kernel.org/sourceware/cygwin//x86/release/tmux/tmux-2.1-1.ta                                                                                                                                         r.xz
Resolving mirrors.kernel.org (mirrors.kernel.org)... 149.20.37.36, 198.145.20.143
Connecting to mirrors.kernel.org (mirrors.kernel.org)|149.20.37.36|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 217596 (212K) [application/octet-stream]
Saving to: ‘tmux-2.1-1.tar.xz’

tmux-2.1-1.tar.xz        100%[====================================>] 212.50K  --.-KB/s   in 0.001s

2015-11-08 12:14:55 (187 MB/s) - ‘tmux-2.1-1.tar.xz’ saved [217596/217596]

Unpacking...
Package tmux requires the following packages, installing:
cygwin libevent2.0_5 libncursesw10
Package cygwin is already installed, skipping
Package libevent2.0_5 is already installed, skipping
Package libncursesw10 is already installed, skipping
Package tmux installed

所感

現時点で所感もクソもないですが……

起動がちょい遅かったり、lsとかの反応が多少遅かったりCygwin的な残念さはあるものの、即座に投げ捨てるようなものではないですね。

とりあえず色々試してみないとなんとも言えないので、しばらく使ってみます。

頓挫

自分への言い訳も何も無いですが……プロジェクトを進めるにあたって色々と準備が足りていない状態で、全然進んでいません。

裏で少しずつ進めたいと思いますが、直近別途やらなければならないことができたため、そちらがメインになるでしょう。

何かしら目途が立ったら仕切り直しとします。

また言語を学びなおすところからにならないようにしたいですね。

個人プロジェクト開発メモ その3

Debian8 Jessie on VirtualBox(Windows 10 Pro)

  1. 初期インストール時にミスったおかげでHOMEPATHに日本語が含まれていてVagrantがまともに機能してくれない
  2. 開発用のユーザアカウントを新規に追加するも、追加アカウントはバグ(たぶんWin10のバグ)っていてほとんど何もできない

という状況からスタートしました。
Win10に上げればChocolateyを入れずともパッケージ管理が標準で使えるため、この機会にとWin8.1から上げたのが一ついけなかった。バグの情報など見ておけば危ないからと上げなかったところでしょう。

何を言っても仕方がないので、いったん直にVirtualBox上にDebianをインストールして環境を構築します。

が、そもそもHyper-Vが有効になっているせいでVirtualBoxがまともに動作せず、Hyper-Vの機能を無効化しようにも無効化中に「構成に失敗しました」とか出て巻き戻ってしまうという状況。

色々と試した末、Hyper-VとVMwareを共存させるを参考にHyper-Vを無効化することができました。

bcdedit /set hypervisorlaunchtype off
shutdown /r /t 0

Hyper-V無効化後、VirtualBoxを立ち上げてDebian仮想マシンを作ります。
VirtualBoxのバージョンを最新(5.0.4)に上げたらエラーで仮想マシンが起動できなかったため、5.0.2にダウングレード。VirtualBoxにはよくある話ですが、本当に毎度毎度きつい。
HOMEPATHに日本語が入っている影響でVirtualBox拡張機能ダウンロード、インストールの流れがコケます。ExtensionPackを直にダウンロードし、日本語を含まないパスに置いてロードします。

Vagrantを使わずに開発するため、とりあえずGUIも入れます。GNOMEはもうアレなのでMATEで。

プロジェクトのセットアップ

YesodなどHaskellの環境はStackで整えていきます。

Stackについての日本語情報は以下あたりを参照。

qiita.com

tune.hateblo.jp

1. Stackのインストール

GitHubリポジトリのインストール手順に従います。

stack/install_and_upgrade.md at master · commercialhaskell/stack · GitHub

$ wget -q -O- https://s3.amazonaws.com/download.fpcomplete.com/debian/fpco.key | sudo apt-key add -
OK
$ echo 'deb http://download.fpcomplete.com/debian/jessie stable main'|sudo tee /etc/apt/sources.list.d/fpco.list
deb http://download.fpcomplete.com/debian/jessie stable main
$ sudo apt-get update && sudo apt-get install stack -y

2. Yesodプロジェクトの作成

stack new PACKAGE_NAMEでプロジェクトを作成できますが、その際プロジェクトテンプレートを指定できます。
stack templatesでテンプレートの一覧を取得することができます。今回はPostgreSQLを利用するためyesod-postgresを選択します。

h2@debian:~/works$ stack new lcdeckbuilder yesod-postgres
Downloading template "yesod-postgres" to create project "lcdeckbuilder" in lcdeckbuilder/ ...
Writing default config file to: /home/h2/works/lcdeckbuilder/stack.yaml
Basing on cabal files:
- /home/h2/works/lcdeckbuilder/lcdeckbuilder.cabal

Checking against build plan lts-3.7
Selected resolver: lts-3.7
Wrote project config to: /home/h2/works/lcdeckbuilder/stack.yaml

成功すると以下のようなファイルやディレクトリができています。

h2@debian:~/works$ cd lcdeckbuilder
h2@debian:~/works/lcdeckbuilder$ ls -l
total 76
drwxr-xr-x 2 h2 h2 4096 Sep 28 04:58 app
-rw-r--r-- 1 h2 h2 6799 Sep 28 03:33 Application.hs
drwxr-xr-x 2 h2 h2 4096 Sep 28 05:08 config
-rw-r--r-- 1 h2 h2 6062 Sep 28 03:33 Foundation.hs
drwxr-xr-x 2 h2 h2 4096 Sep 28 05:00 Handler
drwxr-xr-x 2 h2 h2 4096 Sep 28 03:33 Import
-rw-r--r-- 1 h2 h2  125 Sep 28 03:33 Import.hs
-rw-r--r-- 1 h2 h2 4905 Sep 28 03:33 lcdeckbuilder.cabal
-rw-r--r-- 1 h2 h2  385 Sep 28 03:33 Model.hs
drwxr-xr-x 2 h2 h2 4096 Sep 28 03:44 Settings
-rw-r--r-- 1 h2 h2 5365 Sep 28 03:33 Settings.hs
-rw-r--r-- 1 h2 h2  982 Sep 28 03:33 stack.yaml
drwxr-xr-x 5 h2 h2 4096 Sep 28 04:45 static
drwxr-xr-x 2 h2 h2 4096 Sep 28 05:00 templates
drwxr-xr-x 3 h2 h2 4096 Sep 28 03:33 test

3. ビルド

プロジェクトのビルド時はstack buildを実行します。

h2@debian:~/works/lcdeckbuilder$ stack build
[1 of 1] Compiling Main             ( /tmp/stack9633/Setup.hs, /tmp/stack9633/Setup.o )
Linking /home/h2/.stack/setup-exe-cache/tmp-setup-Simple-Cabal-1.22.4.0-x86_64-linux-ghc-7.10.2 ...
hex-0.1.2: download
hex-0.1.2: configure
hex-0.1.2: build
hex-0.1.2: install
Progress: 22/181
--  While building package entropy-0.3.7 using:
      /home/h2/.stack/programs/x86_64-linux/ghc-7.10.2/bin/runhaskell -clear-package-db -global-package-db -package-db=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/pkgdb/ -package-db=/home/h2/works/lcdeckbuilder/.stack-work/install/x86_64-linux/lts-3.7/7.10.2/pkgdb/ -hide-all-packages -package=Cabal-1.22.4.0 -package-id=array-0.5.1.0-d4206b835b96b5079d918fa1eab1a9a8 -package-id=base-4.8.1.0-4f7206fd964c629946bb89db72c80011 -package-id=bin-package-db-0.0.0.0-b04c253694f93767af4f641e39a406a0 -package-id=binary-0.7.5.0-07214b304bb0a2c4cbf50d9dc7914ee6 -package-id=bytestring-0.10.6.0-2362d1f36f1255e85478e7793e15b170 -package-id=containers-0.5.6.2-2de75421d746ab474b330e43191bb31b -package-id=deepseq-1.4.1.1-8fb9688ae42216e388cee132aef3d148 -package-id=directory-1.2.2.0-258f6e56fc0799f4b45f149644b75783 -package-id=filepath-1.4.0.0-8fee9c13b5e42926cc01f6aa7c403c4b -package-id=ghc-prim-0.4.0.0-af16264bc80979d06e37ac63e3ba9a21 -package-id=haskeline-0.7.2.1-0a475c6a6a7de67d5fce6186e9d8d81a -package-id=hoopl-3.10.0.2-c84778769b61752ff34e979bbbebdb63 -package-id=hpc-0.6.0.2-567a296524cbf417c57abd674ccf4f5e -package-id=integer-gmp-1.0.0.0-8e0f14d0262184533b417ca1f8b44482 -package-id=pretty-1.1.2.0-2932d0905cc17ca1d9638eb9cca0a227 -package-id=process-1.2.3.0-f0287ac288afc0705be775d1adda59ee -package-id=template-haskell-2.10.0.0-90e8393d65f4ae44cb2026177a257f28 -package-id=terminfo-0.4.0.1-c72a7d139b97f9299867b81ab34b8dde -package-id=time-1.5.0.1-c208e8fcb3277879fd30f1140654d53e -package-id=transformers-0.4.2.0-21dcbf13c43f5d8cf6a1f54dee6c5bff -package-id=unix-2.7.1.0-6436007ffcf967b9823833b48295b586 -package-id=xhtml-3000.2.1-5a3d6f023f8af89b9c3e60e732c4b723 /tmp/stack9633/entropy-0.3.7/Setup.hs --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/ configure --user --package-db=clear --package-db=global --package-db=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/pkgdb/ --libdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/lib --bindir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/bin --datadir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/share --libexecdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/libexec --sysconfdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/etc --docdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/entropy-0.3.7 --htmldir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/entropy-0.3.7 --haddockdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/entropy-0.3.7 --dependency=base=base-4.8.1.0-4f7206fd964c629946bb89db72c80011 --dependency=bytestring=bytestring-0.10.6.0-2362d1f36f1255e85478e7793e15b170 --dependency=unix=unix-2.7.1.0-6436007ffcf967b9823833b48295b586
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/h2/works/lcdeckbuilder/.stack-work/logs/entropy-0.3.7.log

    <command line>: can't load .so/.DLL for: libtinfo.so (libtinfo.so: cannot open shared object file: No such file or directory)

上記エラーが発生したため、sudo apt-get install -y libtinfo-devでライブラリを追加。

再度stack buildすると、別のエラーが発生しました。

prelude-extras-0.4.0.2: download
prelude-extras-0.4.0.2: configure
prelude-extras-0.4.0.2: build
prelude-extras-0.4.0.2: install
Progress: 22/160
--  While building package postgresql-libpq-0.9.1.1 using:
      /home/h2/.stack/programs/x86_64-linux/ghc-7.10.2/bin/runhaskell -clear-package-db -global-package-db -package-db=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/pkgdb/ -package-db=/home/h2/works/lcdeckbuilder/.stack-work/install/x86_64-linux/lts-3.7/7.10.2/pkgdb/ -hide-all-packages -package=Cabal-1.22.4.0 -package-id=array-0.5.1.0-d4206b835b96b5079d918fa1eab1a9a8 -package-id=base-4.8.1.0-4f7206fd964c629946bb89db72c80011 -package-id=bin-package-db-0.0.0.0-b04c253694f93767af4f641e39a406a0 -package-id=binary-0.7.5.0-07214b304bb0a2c4cbf50d9dc7914ee6 -package-id=bytestring-0.10.6.0-2362d1f36f1255e85478e7793e15b170 -package-id=containers-0.5.6.2-2de75421d746ab474b330e43191bb31b -package-id=deepseq-1.4.1.1-8fb9688ae42216e388cee132aef3d148 -package-id=directory-1.2.2.0-258f6e56fc0799f4b45f149644b75783 -package-id=filepath-1.4.0.0-8fee9c13b5e42926cc01f6aa7c403c4b -package-id=ghc-prim-0.4.0.0-af16264bc80979d06e37ac63e3ba9a21 -package-id=haskeline-0.7.2.1-0a475c6a6a7de67d5fce6186e9d8d81a -package-id=hoopl-3.10.0.2-c84778769b61752ff34e979bbbebdb63 -package-id=hpc-0.6.0.2-567a296524cbf417c57abd674ccf4f5e -package-id=integer-gmp-1.0.0.0-8e0f14d0262184533b417ca1f8b44482 -package-id=pretty-1.1.2.0-2932d0905cc17ca1d9638eb9cca0a227 -package-id=process-1.2.3.0-f0287ac288afc0705be775d1adda59ee -package-id=template-haskell-2.10.0.0-90e8393d65f4ae44cb2026177a257f28 -package-id=terminfo-0.4.0.1-c72a7d139b97f9299867b81ab34b8dde -package-id=time-1.5.0.1-c208e8fcb3277879fd30f1140654d53e -package-id=transformers-0.4.2.0-21dcbf13c43f5d8cf6a1f54dee6c5bff -package-id=unix-2.7.1.0-6436007ffcf967b9823833b48295b586 -package-id=xhtml-3000.2.1-5a3d6f023f8af89b9c3e60e732c4b723 /tmp/stack11844/postgresql-libpq-0.9.1.1/Setup.hs --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/ configure --user --package-db=clear --package-db=global --package-db=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/pkgdb/ --libdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/lib --bindir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/bin --datadir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/share --libexecdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/libexec --sysconfdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/etc --docdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/postgresql-libpq-0.9.1.1 --htmldir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/postgresql-libpq-0.9.1.1 --haddockdir=/home/h2/.stack/snapshots/x86_64-linux/lts-3.7/7.10.2/doc/postgresql-libpq-0.9.1.1 --dependency=base=base-4.8.1.0-4f7206fd964c629946bb89db72c80011 --dependency=bytestring=bytestring-0.10.6.0-2362d1f36f1255e85478e7793e15b170
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/h2/works/lcdeckbuilder/.stack-work/logs/postgresql-libpq-0.9.1.1.log

    Configuring postgresql-libpq-0.9.1.1...
    Setup.hs: The program 'pg_config' is required but it could not be found.

単純にPostgreSQLをインストールしていなかったため、インストールします。

$ sudo apt-get install postgresql postgresql-client postgresql-server-dev-9.4

これでビルドが通りました。

h2@debian:~/works/lcdeckbuilder$ stack build
...
lcdeckbuilder-0.0.0: configure
Configuring lcdeckbuilder-0.0.0...
lcdeckbuilder-0.0.0: build
Preprocessing library lcdeckbuilder-0.0.0...
[1 of 9] Compiling Model            ( Model.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Model.o )
[2 of 9] Compiling Settings         ( Settings.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Settings.o )
[3 of 9] Compiling Settings.StaticFiles ( Settings/StaticFiles.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Settings/StaticFiles.o )
[4 of 9] Compiling Import.NoFoundation ( Import/NoFoundation.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Import/NoFoundation.o )
[5 of 9] Compiling Foundation       ( Foundation.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Foundation.o )
[6 of 9] Compiling Import           ( Import.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Import.o )
[7 of 9] Compiling Handler.Common   ( Handler/Common.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Handler/Common.o )
[8 of 9] Compiling Handler.Home     ( Handler/Home.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Handler/Home.o )
[9 of 9] Compiling Application      ( Application.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/Application.o )
In-place registering lcdeckbuilder-0.0.0...
Preprocessing executable 'lcdeckbuilder' for lcdeckbuilder-0.0.0...
[1 of 1] Compiling Main             ( app/main.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/lcdeckbuilder/lcdeckbuilder-tmp/Main.o )
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/lcdeckbuilder/lcdeckbuilder ...
lcdeckbuilder-0.0.0: install
Installing library in
/home/h2/works/lcdeckbuilder/.stack-work/install/x86_64-linux/lts-3.7/7.10.2/lib/x86_64-linux-ghc-7.10.2/lcdeckbuilder-0.0.0-2eA3tELX9HzADeaH532x5G
Installing executable(s) in
/home/h2/works/lcdeckbuilder/.stack-work/install/x86_64-linux/lts-3.7/7.10.2/bin
Registering lcdeckbuilder-0.0.0...
Completed all 138 actions.

4. 起動

とりあえずbuildで出力されたバイナリをパス指定で実行します。

h2@debian:~/works/lcdeckbuilder$ .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/lcdeckbuilder/lcdeckbuilder
lcdeckbuilder: libpq: failed (FATAL:  password authentication failed for user "lcdeckbuilder"
FATAL:  password authentication failed for user "lcdeckbuilder"
)

エラーは単純に設定ファイルに書かれたDBユーザが存在しないということですね。
config/settings.ymlにDBユーザやパスワードなどの設定が記載されています。
とりあえず今は開発するだけなので、特に設定はいじらず、デフォルト設定どおりのパスワードを持ったユーザとデータベースを作成します。

h2@debian:~/works/lcdeckbuilder$ su -
root@debian:~# su - postgres
postgres@debian:~$ psql
psql (9.4.4)
Type "help" for help.

postgres=# CREATE USER lcdeckbuilder WITH PASSWORD 'lcdeckbuilder';
CREATE ROLE
postgres=# CREATE DATABASE lcdeckbuilder OWNER lcdeckbuilder;
CREATE DATABASE

再度実行すると、DBのマイグレーション処理が走ります。

h2@debian:~/works/lcdeckbuilder$ .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/lcdeckbuilder/lcdeckbuilder
Migrating: CREATe TABLE "user"("id" SERIAL  PRIMARY KEY UNIQUE,"ident" VARCHAR NOT NULL,"password" VARCHAR NULL)
Migrating: CREATe TABLE "email"("id" SERIAL  PRIMARY KEY UNIQUE,"email" VARCHAR NOT NULL,"user" INT8 NULL,"verkey" VARCHAR NULL)
Migrating: ALTER TABLE "user" ADD CONSTRAINT "unique_user" UNIQUE("ident")
Migrating: ALTER TABLE "email" ADD CONSTRAINT "unique_email" UNIQUE("email")
Migrating: ALTER TABLE "email" ADD CONSTRAINT "email_user_fkey" FOREIGN KEY("user") REFERENCES "user"("id")

特にスタートしたとか出ず、localhost:3000にアクセスするとページが表示されます。

127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET / HTTP/1.1" 200 - "" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /static/tmp/autogen-SWBGXCgb.js HTTP/1.1" 200 - "http://localhost:3000/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /favicon.ico HTTP/1.1" 200 1342 "" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /static/css/bootstrap.css HTTP/1.1" 200 - "http://localhost:3000/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /static/tmp/autogen-pGIQ-osA.css HTTP/1.1" 200 - "http://localhost:3000/" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /static/fonts/glyphicons-halflings-regular.woff HTTP/1.1" 200 - "http://localhost:3000/static/css/bootstrap.css?etag=QRP3qj9r" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:45:13 -0400] "GET /favicon.ico HTTP/1.1" 200 1342 "" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"
127.0.0.1 - - [28/Sep/2015:04:48:42 -0400] "GET /favicon.ico HTTP/1.1" 200 1342 "" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.3.0"

表示はできていますが、開発用設定になっていないためログが少ない、ホットリロードが行われないなど不便です。

config/settings.ymlを開き、開発設定を有効にします。開発時はinverseってことなので全部trueにしています。

h2@debian:~/works/lcdeckbuilder$ vim config/settings.yml
# Optional values with the following production defaults.
# In development, they default to the inverse.
#
# development: false
# detailed-logging: false
# should-log-all: false
# reload-templates: false
# mutable-static: false
# skip-combining: false

+ development: true
+ detailed-logging: true
+ should-log-all: true
+ reload-templates: true
+ mutable-static: true
+ skip-combining: true

最後にもう一度ビルドして実行します。

h2@debian:~/works/lcdeckbuilder$ .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/lcdeckbuilder/lcdeckbuilder
GET /
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Status: 200 OK 0.002523s
GET /static/css/bootstrap.css
  Params: [("etag","QRP3qj9r")]
  Accept: text/css,*/*;q=0.1
  Status: 304 Not Modified 0.000101s
GET /static/tmp/autogen-pGIQ-osA.css
  Accept: text/css,*/*;q=0.1
  Status: 304 Not Modified 0.000059s
GET /static/tmp/autogen-SWBGXCgb.js
  Accept: */*
  Status: 304 Not Modified 0.000046s
GET /favicon.ico
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Status: 200 OK 0.000136s

詳細なログが出るようになりました。

とりあえず動くところまでいったので、これをベースに開発していけば良さそうですね。

ラスクロのTOUR2015 2nd Season 横浜に参加してきました

天空構築なのと、場所的に参加可能だったため、横浜大会に参加してきました。
まともに始めたのが天空Ⅲからだから天空構築以外無理。

場所が場所なので参加者は多いと予想。

  • TCGの大会自体初参加
  • パワーカードが揃っていない
  • ミラーが発生しやすそう

と色々不安な点はあったものの、母数が大きければ1勝くらいできるんじゃないかという期待を込めて。

まずは私の持って行った足りてない感の強いデッキの中身を晒しましょう。

カードNo カード名 CA 枚数
9-085C 夢魔の切り込み隊 2 3
9-077U 沈黙の黒牙 ザ・ジ 2 3
7-093U オセロテの狂戦士 2 3
8-078C 狂乱街の番人 3 3
9-074U 黒夢の樹木人 3 3
9-080S 魔血の破戒騎士 ゼスタール 2 2
8-075S カーリー 2 2
8-079R 狂乱街の領主 イェボー 1 2
9-084C 道占いの夢魔 3 2
9-052R 獄炎の料理人 ウォン・ガ 2 3
9-087R 李逵 2 2
8-081U 惨夢の誘い手 メランダ 2 2
7-153C 火葬する屍鬼 3 2
8-093C 代償ある呪い 3 2
9-092C 魔血の刃 2 3
9-089U 黒のカリスマ 3 2
8-092C 限定された死 2 1
9-091C 邪性の加熱 3 1
9-067C 竜火樽の投擲 2 3
7-083C 炎術弾 3 2
9-066U 勇火の大炎舞 3 2
7-118C ブラッディブレイド 3 2
  • CA3:21枚
  • ユニット:32
  • スペル:16
  • ヒストリー:2

コモン10円、アンコ30円、レア50円、カーリー150円、ゼスタール1000円で計算して合計3340円。
バステト1枚よりちょっと高いかなレベル。とてもお安いですね!たぶん大会参加者中屈指の安さ。

黒t紫で、制圧持ちユニットが多いもののコンセプトは異なります。
制圧は、なんというか……多くなっちゃっただけです。
あくまで序盤からそこそこ展開して相手を除去しながら殴りつつ、同時に自分を痛めつけてアンブロッカブルで気持ちよく決めたいというものです。

自傷要員

  • カーリー:キーカードの1つなので、3枚入れたかった。2枚しか持ってないから2枚ですが。
  • イェボー:時代Ⅲまで行っちゃったら使う。でも基本はCBで自分と相手にダメージが飛ぶことを期待。
  • オセロテの狂戦士:自傷しつつパワーとATKと追撃で序盤を支える。やりすぎると死ぬ。
  • 樹木人:自傷できてドローまでできる!
  • 代償ある呪い:CA3の1コス-2000で自傷3点は優秀だと思う。追いつめられると使えなくてプルプルする。

その他キーカード

  • 狂乱街の番人:ライフ9以下で2500/2のアンブロッカブルに。
  • メランダ:攻撃後にソウルチェンジして壁になったり、樹木人を落としつつ戦場に残ったり、ついでに詰めに使えて便利。
  • 大炎舞:番人3枚並べて9点アンブロッカブルとか通ると楽しい。

制圧勢など

  • ゼスタール:ただ強なのでとりあえず。2枚しか持っていないので2枚です。
  • ウォン・ガと李逵:よくあるやつ。李逵が2枚なのは3コスをちょっと減らしたかったとか色々迷った末。素直に3枚の方が良いと思います。
  • 道占いの夢魔女:攻撃を通すためとCA3で入れたのですが、見事に出番がありませんでした。前のめりに魔刃の狂戦士とか突っ込めば良かったかも。

etc

  • 限定された死:主にヴィクトー、白亜神官を殺す。ミラーが多いと刺さらない可能性が高いため、1枚だけ。
  • 邪性の加熱:他のカードで対処できないときに。侵攻値が足らずに震えるのが嫌なので1枚。

といった感じで、主に枚数の問題やシェネがいない(4箱剥いてシールド2回したのに1枚も持ってない)ため安定性には欠けます。
が、何もできないほどボロボロじゃあないだろうと判断。

対戦結果など

参加者52名と32名を超えたためスイスドロー6回戦とシングルエリミネーション3回戦に。

  1. 白単探索(勝ち)
    天空Ⅲのガイドブックのレポートで見た名前だ!全国トップクラスの方が初戦ということでめちゃくちゃ緊張した。
    序盤から除去しつつガンガン殴っていけた。ものの、思った以上に探索の侵攻値増加が速く、コスト3のパワー2500が除去しづらくつらくなってくる。そのうちセゴナ・レムリアスが出てきた危なくなってきたものの、カーリーの自傷から番人のアンブロッカブルアタック、メランダのソウルチェンジを決めて勝利。こっちのデッキが若干スタンダードから外れているためにプレミを拾えた感もある。
  2. 黒t紫制圧(負け)
    オーソドックスな制圧デッキに見えた。バステトも破門刃も入っていた。引きがいまいちで、プレミもあったとは思うが、殴り合いになってしまったのが良くない。ミラーで素直に殴り合ったら負けるデッキのため。
  3. 紫t黒(負け)
    引けども引けどもスペルが来るという壮絶な事故により展開できず、ジュオとフェム・ルンに焼かれて終了。炎学院が出ていたのでちょっと中身と動きが気になった。事故りすぎて何もできなかったのでほぼ何もわからず。
  4. 黒単トークン(負け)
    ベルファーラとイングレーテ、CIPでトークン出すオセロテとCIPでトークン出すコウモリ。天秤など。自分の作りたかったデッキにとても近いと思う。ワンチャンはあったものの、場が整ってしまい対処不能に。カード揃えて作りたい。
  5. 青t黒(負け)
    今回一番不安だったのが青単など青メインのデッキとの対戦。厄介そうなのは分かっていたものの、対戦経験が無くうまく戦えるのか分からなかったため。結局アイネと大極風でロックされて負けた感じ。もうちょいうまく戦えた気がする。勝てたかどうかは別として。
  6. 橙青(勝ち)
    お相手の事故により圧勝。本当に悲しい引きだった。時間が余ったので、スコア提出後にもう一度だけ対戦。今度はある程度展開されたものの、それ以上にこちらが展開して殴り切った。狂戦士強い。

最終的には38位と後ろの方。当然トーナメントにはいかずスイスドローで終了。
途中でドロップしている方が複数いたので、全員が最後までやっていたらもっと後ろだったと思います。

もともと考えていた通り、安定性の問題でどうあっても上位には上がれるデッキではなかったと思います。
とはいえ、まったく何もできないデッキでもないと。
ちょっとだけ自信がついたのでもうちょっとカード入れ替えたりして調整してみよう。

個人プロジェクト開発メモ その2

開発するにあたって、環境について考えていきたいと思います。
とりあえず、サーバーサイドから。

OS : Debian

おそらくJessie。
理由は開発しやすいから。Ubuntuは嫌いなので使いません。
LinuxMintはクライアントとしてはアリだけど、サーバとしてはあまり意味ない気が。
もし都合が悪い事態が発生した場合はUbuntuベースのミニマルなOSになるかも?その場合は動作環境が問題になるかもしれませんが。

プログラミング言語 : Haskell

Stackで入れる予定。
単に使いたいというのと、練習がてらに。

フレームワーク : Yesod

他にもう少し小さいフレームワークはあるものの、とりあえずはスタンダードなものが良いかと。

データベース : PostgreSQL

昨今のpostgres人気と、比較記事を見た感じから。
Why I Choose PostgreSQL Over MySQL/MariaDB」も参照。
使ってみないことには分からないことも多いし、ともかく使ってみようという感じですね。

その他の検討事項

個人プロジェクト開発メモ

ストクロニクルのデッキを作成するにあたって、ニコニコアプリのデッキ編集機能に感じる不満を解消するためツールを作ろうと思います。

ニコニコアプリの機能に対する不満の一例

  • カード検索機能が貧弱(ちょっとしたフィルタしかできない)
  • アプリ画面が小さくカードプールの一覧性に欠ける
  • 編集中のデッキ内容が横一列に数枚しか表示できない

その他細かいところで色々あったりはするのですが、一番の理由は「自分の貧弱な脳みそではニコニコアプリ上でまともなデッキを組むことができない」ことです。
リアルのカードを1枚1枚見ていてもダメ。ガイドブックをパラパラ見ていてもどうにも良案が思い浮かばない。
そのようなわけで、自分にはツールの補助が必要と考えました。

目指すところ

参考としては「MTG カード検索・デッキ作成」を挙げておきます。
が、あまりガチガチに組み上げて立派なものにする気は無く、個人で無理なく開発できるレベルを目指します。

必要最低限の機能

  • カード検索
  • デッキ登録/編集

開発期間

色々まだハッキリしていないところも多いため、一旦2週間を1スプリントとしてプロジェクトをスタートします。
第1スプリント(09/26 ~ 10/10)では「カード検索」「デッキ登録/編集」の実装を行います。

プロジェクト全体ではもう少し盛り込む機能を詰めてから考えたいと思います。

以上