write ahead log

ロールフォワード用

WSL上のUbuntuのターミナル色テーマを変更する

色テーマを、変えたい

Ubuntu on WSL(bash on windows)は非常に使い勝手が良くて, すっかりこれ無しでは仕事ができなくなってしまった.

しかし色テーマ, これだけが不満だった. (赤が見づらい)

まぁ, プロパティからポチポチ変えりゃいいんですが, あまりにも面倒くさい.

うーむ, と色々Webを徘徊していると下記のページを見つけた.

Introducing the Windows Console Colortool

おぉ, そうなんすよ.

色テーマを簡単に変える方法が無いかをずっと探していたんだけど, どうも「colortool」というものをMicrosoftが出してくれているらしい.

Githubにリポジトリされている.

これは便利すぎる.

使ってみる

  1. Githubからまずはzipをダウンロードします
  2. 解凍して, cmd.exeを開き, 解凍したフォルダへ移動します
  3. コマンドを入れます
> colortool -d [色テーマ]

サンプルではsolarized_darkが紹介されていますね.

> colortool -d solarized_dark

私はOneHalfDarkにしてみました.

とても美しいです.

psqlコマンド自分用チートシート

PostgreSQLのコマンド, psql.

バージョンは9.6

個人的にはMySQLより分かりやすい気がする.

インストール

$ sudo apt install postgresql-client

9.6限定にするには以下.

$ sudo apt install postgresql-client-9.6

WSL上だとUbuntu Xenialだった.

9.5までしかなかったので先にリポジトリを追加した,下記手順を先に実行すればよい.

$ sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update

接続

$ psql -h [ホスト名] -U [ユーザ名] -d [データベース名]

クエリ

\xで拡張表示(縦表示)できる.

\eで直前に編集したSQLを編集できる.

終了

\q

コマンドの実行履歴

~/.psql_historyに残る

バックアップ

$ pg_dump -h [ホスト名] [データベース名] > [バックアップファイル名]

リストア

$ psql [データベース名] < [バックアップファイル名]

MySQLコマンド自分用チートシート

インストール

ubuntuの場合(WSL可)

$ sudo apt install mysql-client

接続

WSLのUbuntu上からローカルへ接続する場合は[127.0.0.1]と指定が必要だった.
(localhostではダメだった)

長いので開発時はalias組んだ方がいい.

普通につなぐ
$ mysql -h [ホスト名] -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] [スキーマ名]
縦表示でつなぐ

縦表示(psqlでの拡張表示)で常に表示したい場合は-Eを付ける.

$ mysql -h [ホスト名] -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] [スキーマ名] -E
ページャ指定でつなぐ

とりあえずless指定してみる.

$ mysql -h [ホスト名] -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] [スキーマ名] -E --pager="less" 
エンコーディング指定でつなぐ

utf8にすると

$ mysql -h [ホスト名] -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] [スキーマ名] -E --pager="less"  --default-character-set=utf8

クエリ

縦表示(拡張表示)

クエリの末尾に\Gを付けると縦表示になる.
(コマンド起動時に-Eを付けている場合はデフォルトで縦表示になる)

> SELECT * FROM users\G
編集

エディタでクエリを編集できる.

> edit

エディタ終了後に;でクエリ実行.

データベースの一覧
> show databases;
テーブルの一覧
> show tables;

終了

> quit

コマンドの実行履歴

デフォルトでは以下にある.

~/.mysql_history

バックアップ

mysqldumpコマンドを使う.

$ mysqldump -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] -h [ホスト名] -t [スキーマ名] > [出力ファイル名]

リストア

mysqlコマンド経由で標準入力からSQLを投入するだけ.

必要であれば事前にCREATE DATABASEを実行.

接続方法は前掲通り.

$ mysql -h [ホスト名] -u [ユーザ名] -p[パスワード(pとの間にスペース入れない)] [スキーマ名] < [リストアファイル名]

lsの色付けを変更する

Ubuntu(on WSL)で試した.

lsで色付けされるのは便利だが, 色によってはかえって見にくい.

色を変えたいのだが, どうも.bashrc.dircolorsというファイルを読み込もうとしている.

知らなかったのだが, dircolorsコマンドというのがあって設定できるらしい.

手順は以下の通り.

# .dircolorsを作成
$ dircolors -p > ~/.dircolors
# 編集(カラーコードが書いてあるので開けばすぐわかる)
$ vi ~/.dircolors
# bashを再起動するか設定を再読み込み

Ubuntuのデフォルトの.bashrcではホームディレクトリの.dircolorsを先に読み込む設定になっていたのでこれだけで済んだ.

いやぁ, もっと前にやっとけばよかった.

Test::Unitでテストを定義順に実行する

Test::Unitはデフォルトではテストを名前順に実行する.

require 'test/unit'

class TestSample < Test::Unit::TestCase
  def test_B
    puts "B"
  end

  def test_A
    puts "A"
  end
end
$ ruby sample.rb
Loaded suite sample
Started
A
.B
.

Finished in 0.0011721 seconds.
-------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
-------------------------------------------------------------------------------------
1706.34 tests/s, 0.00 assertions/s

これを定義順にしてやりたいときにはtest_order = :definedという指定が出来るらしい.

require 'test/unit'

class TestSample < Test::Unit::TestCase

  self.test_order = :defined

  def test_B
    puts "B"
  end

  def test_A
    puts "A"
  end
end
$ ruby sample.rb
Loaded suite sample
Started
B
.A
.

Finished in 0.000768 seconds.
--------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
--------------------------------------------------------------------------------------
2604.17 tests/s, 0.00 assertions/s

うーん, 設計がダサい証拠な気もするけど, 便利だ.

Test::Unitでテスト群の最初と最後にだけメソッドを呼びたい

あんまりよろしくないやり方な気がするけど, 便利な時には便利なので.

標準で用意されているsetupteardownは各テストケースの呼び出し前後に呼び出される.

require 'test/unit'

class TestSample < Test::Unit::TestCase
  def setup
    puts "setup"
  end

  def teardown
    puts "teardown"
  end

  def test_foo
    puts "foo"
  end

  def test_bar
    puts "bar"
  end
end
$ ruby sample.rb
Loaded suite sample
Started
setup    [準備して]
bar
teardown [片付ける]
.setup   [準備して]
foo
teardown [片付ける]
.

Finished in 0.0010129 seconds.
----------------------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
----------------------------------------------------------------------------------------------------
1974.53 tests/s, 0.00 assertions/s

普通はこれで何の問題もない.

なんだけど, たまーにテストケース全体の最初と最後だけに呼び出したい事がある.

$ ruby sample.rb
Loaded suite sample
Started
setup     [最初に準備して]
bar
.foo
.teardown [最後に片付ける]


Finished in 0.0009669 seconds.
----------------------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
----------------------------------------------------------------------------------------------------
2068.47 tests/s, 0.00 assertions/s

強引だなぁとは思うけど, TestUnitが最初と最後に呼ぶstartupshutdownを特異クラスでオーバーライドしてやればできるらしい.

require 'test/unit'

class TestSample < Test::Unit::TestCase
  class << self
    def startup
      puts "setup"
    end

    def shutdown
      puts "teardown"
    end
  end

  def test_foo
    puts "foo"
  end

  def test_bar
    puts "bar"
  end
end

まぁ, 原則やるなってことだよね, これ.

便利な時は便利なんだけどなぁ.

Dynamic DNS環境でzoneファイルをバックアップ/移行したい

bind9.xでは動的更新はすぐにはzoneファイルへ反映されず, jnlファイルへ書き込まれる.

移行とかバックアップとかどうやんだと思っていたが, どうも一度freezeすればzoneへ書き戻しされそう.

# 一度動的更新を止める
rndc freeze ddns.example.com
[何らかのコマンドでコピーして移行]
# 動的更新を再開
rndc thaw ddns.example.com

named.confに以下の様に書いておけばtext形式でzoneファイルを管理するのだけど, 少なくてもtext形式になっている限りでは確認できた.

masterfile-format text;

raw形式の場合は下記で確認できるらしい.

# named-checkzone -D -f raw <zone名> <zoneファイル名>
named-checkzone -D -f raw ddns.example.com ddns.example.com.zone

もっとも, 無停止で移行の場合はゾーン転送を利用するのだろうけど.

dig @localhost ddns.example.com. axfr