amari3のはてなダイアリー このページをアンテナに追加 RSSフィード Twitter

2012-01-18

[][]リバースプロキシで調べることメモ

リバースプロキシを真剣に調べてみようと思うけど、なかなか時間が取れないので調べようと思ってるソフトウェアの一覧をメモっとく。

とりあえず現状は、慣れてるApacheでリバースプロキシを組んどこうと思うけど、いずれは上記のソフトウェアで置き換えが出来るところは、置き換えていきたいと考えてる。

2012-01-14

[]MySQLにおけるBOOLEAN型の扱いについて調べてみた

PostgreSQLで定義されているテーブルからMySQLに移植する必要があって、作業をしてるとBOOLEAN型で定義されてるカラムが見つかった。単純にTINYINTとかで置き換えてもよかったんだけど、MySQLにもあるんだろうかと興味本位で調べてみた。

MySQLのBOOLEAN型はTINYINT(1)と等価

以下のようなテーブル定義をしてみた。

CREATE TABLE IF NOT EXISTS bool_test (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    flg BOOLEAN,
    updated_at TIMESTAMP
) ENGINE=InnoDB CHARSET=utf8;

作成されたテーブルはこちら。

mysql> desc bool_test;
+------------+------------------+------+-----+-------------------+----------------+
| Field      | Type             | Null | Key | Default           | Extra          |
+------------+------------------+------+-----+-------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL              | auto_increment |
| flg        | tinyint(1)       | YES  |     | NULL              |                |
| updated_at | timestamp        | NO   |     | CURRENT_TIMESTAMP |                |
+------------+------------------+------+-----+-------------------+----------------+
3 rows in set (0.00 sec)

BOOLEAN型がTINYINT(1)と等価なのが分かると思う。つまり、真偽値だけを格納できる訳ではない。

実際に値を入れてみる

以下のテストデータを入れてみた。

INSERT INTO bool_test (flg) VALUES
 (TRUE), (FALSE),
 (1), (0), (100), (-100),
 (NULL), (TRUE), (FALSE);

作成されたデータはこちら。

mysql> SELECT * FROM bool_test ORDER BY id;
+----+------+---------------------+
| id | flg  | updated_at          |
+----+------+---------------------+
|  1 |    1 | 2012-01-15 00:35:08 |
|  2 |    0 | 2012-01-15 00:35:08 |
|  3 |    1 | 2012-01-15 00:35:08 |
|  4 |    0 | 2012-01-15 00:35:08 |
|  5 |  100 | 2012-01-15 00:35:08 |
|  6 | -100 | 2012-01-15 00:35:08 |
|  7 | NULL | 2012-01-15 00:35:08 |
|  8 |    1 | 2012-01-15 00:35:08 |
|  9 |    0 | 2012-01-15 00:35:08 |
+----+------+---------------------+
9 rows in set (0.00 sec)

TRUE=1FALSE=0にそれぞれ変換されて格納されているのが分かる。あと、TINYINT型なんで当然だけど、-128〜127までの整数値なら入れる事が出来る。

BOOLEAN型のカラムをSELECTしてみる

ここまでで、テーブルの定義結果とデータの格納結果が分かったので、flgカラムを色々なやり方でSELECTしてみた。


TRUE/FALSEで比較してSELECT

まずは一番単純にWHERE句条件にTRUE/FALSEを指定してみる。

mysql> SELECT * FROM bool_test WHERE flg = TRUE ORDER BY id;
+----+------+---------------------+
| id | flg  | updated_at          |
+----+------+---------------------+
|  1 |    1 | 2012-01-15 00:35:08 |
|  3 |    1 | 2012-01-15 00:35:08 |
|  8 |    1 | 2012-01-15 00:35:08 |
+----+------+---------------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM bool_test WHERE flg = FALSE ORDER BY id;
+----+------+---------------------+
| id | flg  | updated_at          |
+----+------+---------------------+
|  2 |    0 | 2012-01-15 00:35:08 |
|  4 |    0 | 2012-01-15 00:35:08 |
|  9 |    0 | 2012-01-15 00:35:08 |
+----+------+---------------------+
3 rows in set (0.00 sec)

実行結果を見ると、TRUE=1、FALSE=0として評価されているのが分かると思う。


IS TRUE/IS FALSEで比較してSELECT

色々調べてみるとIS TRUEIS FALSEという比較方法があることが分かったので試してみた。

mysql> SELECT * FROM bool_test WHERE flg IS TRUE ORDER BY id;
+----+------+---------------------+
| id | flg  | updated_at          |
+----+------+---------------------+
|  1 |    1 | 2012-01-15 00:35:08 |
|  3 |    1 | 2012-01-15 00:35:08 |
|  5 |  100 | 2012-01-15 00:35:08 |
|  6 | -100 | 2012-01-15 00:35:08 |
|  8 |    1 | 2012-01-15 00:35:08 |
+----+------+---------------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM bool_test WHERE flg IS FALSE ORDER BY id;
+----+------+---------------------+
| id | flg  | updated_at          |
+----+------+---------------------+
|  2 |    0 | 2012-01-15 00:35:08 |
|  4 |    0 | 2012-01-15 00:35:08 |
|  9 |    0 | 2012-01-15 00:35:08 |
+----+------+---------------------+
3 rows in set (0.01 sec)

実行結果を見ると、IS TRUEはflg=0以外の行を返してくる。つまり、TRUEという値とIS TRUEは直接の関係は無さそうである。そして、IS FALSEはflg=0の行を返してくる。IS FALSEではNULL値を含む行は返らないことも併せて分かった。

最後に

BOOLEAN型やTRUE/FALSE、IS TRUE/IS FALSEというのがあるというのも調べるまで知らなかったし、MySQLは調べる度に発見があってすごく楽しい。

実際のテーブル設計では、一般的な型や値を使う方が他のRDBMSへの移植性も高くなるし、使わない方がいいんだろうと考えられる。

2012-01-09

[]WEB+DB PRESS Vol.66 読了

WEB+DB PRESS Vol.66 が読み終わった。

最近は、本に関するエントリが多い気がするがあまり気にせずやっていくよ。いつも通り個人的に印象に残った記事の感想を紹介する。

我流コードからの卒業 HTML構造化指南 読みやすく変更に強い書き方

普段何気なく書いてたHTMLを意味のある構造にし、変更に強いHTMLの書き方を説明している。正直僕自身も、見た目的に問題なく動作するのを最優先にしてて、変更に強い書き方を今までしていなかった。もっと言うと良いHTMLの書き方を知らなかった。この記事には良いHTMLの書き方の答えが載っていると言っても過言でないと思う。Webデザイナーの方にも読んでもらいたい。

ぜんぶ見せます!サービスの調理場 クックパッド開発ノウハウ大公開

料理レシピサイトで有名なクックパッドの開発ノウハウがこれでもかと言わんばかりに説明されている。"200ミリ秒を切るインフラ"については、それを実現するための仕掛けやモニタリングがすごくためになった。"ユーザを向いたものづくり"は、"Goodはやらない、Bestに集中する"という言葉に僕もうんうんと頷きながら読んでた。ユーザの方に向いて開発するのはB2Cのサービスを作ってるなら当たり前なんだけど、それをものすごく徹底しているんだなと感じた。これら以外にも開発サイクルについてもためになるし、もう1回読み直そうと思う。

JavaScriptベストプラクティスラボ JavaScriptのテスト環境と継続的インテグレーション

JavaScriptでコードは書くんだけど、どうテストすれば良いんだろうと思ってる人もいると思う。そんな疑問が解決していく記事なんだと思う。今号ではテスト環境の導入編みたいな形になっている。次号以降でテストの書き方を説明するらしいので今から楽しみ。

Perl Hackers Hub [第12回] 小飼弾のPerlハッカーに逢いたい

まず「あれ、Perl Hackers Hub無くね?」と探したのは僕だけじゃないと思う。僕も参加した"YAPC::Asia 2011 Tokyo"の凄腕Perlハカーさんに小飼弾さんがインタビューしている。すごい人ばっかり出てくるので、わくわくしながら読み進めることが出来た。僕もいずれあの輪に入れるようになりたいところ。

最後に

毎号の事ながら本当に良い技術雑誌だと思う。2012年もWEB+DB PRESS推しで行くことに決めました。

2012-01-05

[][]tmux すぐ忘れるのでメモしとく

最近、ターミナルマルチプレクサの tmux を少しずつだけど触ってる。前回のエントリ tmux を使い始めたんで忘れないうちにメモしとく - amari3のはてなダイアリー と同様に覚えたことを備忘録としてメモしておく。

セッションの状態を確認する

tmux を起動するとそれぞれセッションとして扱われる。なおセッションは1つ以上のウィンドウで構成される。そのセッションの状態を確認するには "tmux list-session" コマンドを実行する。

% tmux list-session
0: 1 windows (created Fri Jan  6 00:46:21 2012) [80x23]
1: 1 windows (created Fri Jan  6 00:46:31 2012) [80x23]

行頭の番号がセッション番号となり、アタッチ時に使用することになる。

セッション番号を指定してアタッチする

"tmux attach" コマンドの "-t" でアタッチしたいセッション番号を指定することが出来る。

% tmux attach -t セッション番号
% tmux attach -t 1

コピーモード

キーマップ操作
Ctrl-b [コピーモード開始
Ctrl-b ]貼り付け
コピーモードのキーバインド

デフォルトでは Emacs のキーバインドになっていて、コピー始点選択は "C-space" コピー終点選択は "M-w" で実行できる。

モードの変更

~/.tmux.conf に以下の設定を追加すると vi のキーバインドに変更が出来る。*1

set-window-option -g mode-keys vi

最後に

今回まとめたことは、ググればすぐに出てくるようなことだけど、自分で書くことによって記憶にも留まるんで、メモ書き程度のものでも書いていきたいと思ってる。

*1:僕は普段 Emacs を使ってるので変更はしていない

2012-01-01

[]Software Design Jan.2012 読了

Software Design Jan.2012が読み終わった。今号の特集は様々な分野のエンジニアを対象にしていると思う。

Software Design (ソフトウェア デザイン) 2012年 01月号 [雑誌]

Software Design (ソフトウェア デザイン) 2012年 01月号 [雑誌]

今号を読んでみて個人的によかったと感じた記事の紹介をする。

発注するときにも役立つ Android受託開発の奥義

6章立てとかなり力を入れてる特集。第3章のバージョンアップを考慮した初期開発の重要性が個人的には秀逸と感じた。バージョンアップを前提とする際の、データ設計やクラス設計のやり方がわかりやすく説明されていると思う。あと、Titanium Mobile の記事も興味深い。短期間で動作するものが作れるので、プロトタイプ開発で使ったり、デモアプリを作るのに便利に使えそう。

テキストデータならお手のもの 開眼シェルスクリプト

今号からの新連載で、シェルスクリプトらしいスクリプトを書くための記事(だと思う)。プログラムでよく使うループや分岐を極力使わずに、Linuxコマンドをうまく使ってスクリプトを記述する方法が説明されている。配列を使うのではなく、ファイルを配列の代わりに使うのはなるほどと感じた。僕が書くシェルスクリプトもちょっとずつ変えていこうと思う。

教えて!ござ先輩

情報発信についてのメリットが説明されている。僕がこの記事を読んで感じたことは、情報発信の内容は自分中心でいいし、他人の山を気にしないことが何よりも大事なんだということ。当然、僕より優秀なエンジニアは山ほどいるし、その人を見てしまうと、ブログ等で発信することを萎縮してしまうこともあると思う。なので、僕個人としては、自分が知りたいことを発信していきたいと思う。かなり心に響きました。

最後に

上記以外にも、ワイヤレスオフィスの作り方等、興味深い記事が多かった。そして、次号のDebianを基準にディストリを考えるの特集が今から楽しみ。