MySQL を外部接続できるようにする

前回で MySQL をインストールしましたが、 外部から接続するために設定が必要だったのでメモ。

まず、普通に接続しようとすると以下のエラーメッセージが出ました。

SQL Error (2003) Can't  connect to MySQL server

で、設定ファイルを編集します。

sudo vim /etc/mysql/my.cnf

↓この bind-address の行をコメントアウトします。

 # bind-address       = 127.0.0.1

編集したら再起動

sudo service mysql restart

で、外部から接続テストすると

sql error 1130 host is not allowed to connect to this mysql server

なエラーメッセージが。 まだ権限付与しないとダメらしいので コマンドラインから接続して設定します。

mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%' IDENTIFIED BY 'root のパスワード' WITH GRANT OPTION;

これで他ホストから接続できました。

IP address 'XXX.XXX.XX.XX' could not be resolved: Name or service not known

ただ、以下のようなワーニングが出て気になったので設定した。 /etc/mysql/my.cnf に

skip-name-resolve

を追加したら OK でした。

PHP で簡易 Enum を実装する

php では java のように enum 型がないのですが、 やはり使いたい場合があります。

本格的に実装してもいいのですが、 そこまでするのも大げさだなぁ、という場合に リフレクションを使って簡単に実装する方法があります。

<?php
trait SimpleEnum
{
    public static function values()
    {
        $className = get_called_class();

        $refClass = new ReflectionClass($className);
        $values = $refClass->getConstants();

        return $values;
    }

    public static function valueOf($value, $notfound = null)
    {
        $values = self::values();
        if (!array_key_exists($value, $values)) return $notfound;
        return $values[$value];
    }
}

使い方

<?php
class TestEnum
{
    use SimpleEnum;

    const HOGE = 0;
    const FUGA = 1;
}

echo TestEnum::HOGE; // => 0
echo TestEnum::FUGA; // => 1

echo TestEnum::valueOf('FUGA'); // => 1
echo TestEnum::valueOf('UnDefined'); // => null
echo TestEnum::valueOf('UnDefined', 'undefined'); // => undefined

java みたく複数の値を定義したり、型検証できませんが、 ちょっと使う分にはこれでもいいかと。

trait を使ってますが、 class にして継承すれば 5.3 以下でも使えると思います。

ubuntu に php の開発環境を入れる ~ apache から jenkins まで ~

ubuntuphp の開発環境を作ったのでメモ。 ubuntu のバージョンは 13.04 です。 他の OS から ssh 経由で操作しています。

apache のインストール

$ sudo apt-get install apache2

で OK です。 動作確認は

$ ifconfig

して、ブラウザからその IP にアクセスして "It works!" と表示してれば OK

例: http://192.168.12.34/

php のインストール

phpmysql のライブラリをインストールします。

$ sudo apt-get install php5 libapache2-mod-php5
$ sudo echo "<?php phpinfo(); | sudo tee /var/www/phpinfo.php > /dev/null
$ sudo apt-get install php5 libapache2-mod-php5
$ sudo apt-get install php5-mysql

ブラウザからさっき調べた IP/phpinfo.php にアクセスして表示される事を確認します。

例: http://192.168.12.34/phpinfo.php

MySQL のインストール

次に MySQL をインストールします。

$ sudo apt-get install mysql-server

途中で root ユーザのパスワードを聞かれるので設定します。 インストール終了後、以下のように表示されれば OK です。

$ mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

phpunit のインストール

phpunit をインストールしますが、その前に pear を入れる必要があります。 以下のコマンドを入力します。

$ sudo apt-get install php-pear
$ sudo apt-get install phpunit

動作確認は以下のコマンドを入力してバージョンが表示されれば OK です。

$ phpunit --version

jenkins のインストール

最後に jenkins をインストール。

$ sudo apt-get install jenkins

またブラウザから 8080 ポートにアクセスして おじいちゃんの顔が見えれば OK 。

例: http://192.168.12.34:8080

すばらしい vim プラグイン 5 選 + 1

最近仕事がヒマなので何年かぶりに vim プラグインをあさったら、ものすごく便利なのがあったのでメモ。

私の .vimrc が github にあります。

NeoBundle

これが一番衝撃を受けた。 GitHub にでも .vimrc を登録しとけば どこでも同じ環境ができる。便利すぎ。

ctrlp.vim

ファイルを簡単に開けすプラグイン。 再帰的に検索してくれてその中から絞り込みしてくれる。

unite.vim

これは前から名前だけは知ってたけどちゃんと入れてみた。 ものすごく色々できうそうだけど、 まずは最近開いたファイルの履歴だけ使ってる。 それだけでもかなりいいですね。

gitv

vim から git が操作できる。 tig でもいいんだけど、気分によって使い分けてる。

surround.vim

文字列の " を ' に変えたいとかあるのでなかなか便利。

vimxls

Excel を vim キーバインドで操作できるツール。 これは vim プラグインではないけど、すごいと思う。