2015年2月10日火曜日

心霊写真とか電子音声現象とか

電子音声現象を捉えるガジェットが発売される予定だそうだ。
http://www.ghostark.com/

詳しくはBingっていただくとして、記録装置がデジタル化していく過程で
明瞭に解析できることは興味深い。

しかしながら、アナログからデジタルに移行して最近あまり聞かなくなったものもある。
私が子供の頃は「心霊写真」というものが大変人気(?)があった。
フィルムになんらかのものが映り込む、アレである。
さらに古くは、フィルムに「念写」するというのもあった。(映画リングを見ましょうw)

これらは、解像度が低い故に幅広い解釈も可能なものが多かったように思う。
音声についても、20世紀頭から電子音声現象は捕らえられているが、
やはり不明瞭なものが引き起こす部分も多かれ少なかれあるのではないかと。

ただし、これらのものが全てが霊ではないとも言い切れないだろう。
世の中の多くのことはまだ解明されずにいるから。

「GhostARK」を買って考えてみようかな…。

2015年1月28日水曜日

Windowsな人へ、AzureのCentOSをアップデートしましょう

めっちゃ簡単なので、セキュリティパッチの適用をお願いします。

1.sshでログインする
Puttyとかなんでもいいのでログインしましょう。

2.yumコマンドでアップデートしましょう。
$ sudo yum -y update
※ "-y"オプションは、勝手にアップデートをする際に必要

3.再起動
$ sudo shutdown -r now

アップデート方法がわからないのに、コンパイルしてアプリケーションをインストールしてる場合はちょっと困りますね...

なお、Ubuntuの場合はこれで。
$ sudo apt-get upgrade




2015年1月26日月曜日

MySQL Percona XtraDB Cluster を Azure上で動かしてみる

Percona XtraDB Cluster は、MySQLでマルチマスター型レプリケーションを実現するものです。

こちらの記事を読んでいたら、「別にAzureでできるじゃん」と思ったのでやってみることに。
http://qiita.com/nownabe/items/462f46f2702ce1ad4b6d#percona-xtradb-cluster-1

ClearDBもPercona使ってるのかな?
https://www.cleardb.com/blog/entry?id=press-release/april-18-2013/cleardb-ceo-to-speak-at-percona-live-santa-clara

Azureでのポイントは以下の3つ。
・仮想ネットワークを作成し、同一の仮想ネットワーク内に仮想マシンを置く。
・仮想マシンに可用性セットを設定し、メンテナンスなどの停止に備える。
・エンドポイントに負荷分散セットを設定し、ロードバランシングする。

今回はCentOS7でやってみましたが、もちろんハマるところはこの2つ。
・firewalldを止める(ほんとはきちんとポートの設定をしてOnにしましょう!今回だけですよ!!)
・SELinuxをオフにする

ざっくり手順を。
まずは管理ポータルでの設定。

1.仮想ネットワークの作成
名前を「percona」、場所を「日本(東)」にした。

2.仮想マシンの作成(1台目)
ギャラリーから「CentOSベース」→「OpenLogic 7.0」を選択。
仮想マシン名を「percona1」、サイズは「標準、A1」に。
新しいクラウドサービスを作成、DNS名は「percona0」、作成した仮想ネットワークを指定、可用性セットを「percona」という名前で作成。

3.仮想マシンの作成(2台目、3台目)
ギャラリーから「CentOSベース」→「OpenLogic 7.0」を選択。
仮想マシン名を「percona2(percona3)」、サイズは「標準、A1」に。
作成したクラウドサービス「percona0」を選択、作成した仮想ネットワークを指定、作成した可用性セット「percona」を選択。

4.MySQLのエンドポイントの追加(percona1)
まず、percona1でエンドポイントを作成します。
「スタンドアロン エンドポイントの作成」を選択し、次へ。
エンドポイントの詳細で、名前を「MySQL」に、「負荷分散セットの作成」にチェック。

5.MySQLのエンドポイントの追加(percona2、percona3)
「既存の負荷分散セットにエンドポイントを追加する」を選択し、次へ。
エンドポイントの詳細で、名前を「MySQL」に、「負荷分散セットの再構成」にチェック。

ここまでで、管理ポータルの設定は完了。
なお、各IPアドレスは、percona1(10.0.0.4)、percona2(10.0.0.5)、percona3(10.0.0.6)です。

各サーバーの設定は参照記事の通りですが、ざっくりと。

1.アップデートとSELinuxとfirewalldの無効化
sshでログインして、以下のコマンドをどうぞ。
$ sudo yum -y upgrade
$ sudo vi /etc/sysconfig/selinux
SELINUX=disabled
$ sudo systemctl disable firewalld
$ sudo shutdown -r now

2.Percona XtraDB Cluster のインストール
$ sudo yum -y install epel-release
$ sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
$ sudo  yum -y install Percona-XtraDB-Cluster-56

3.my.cnfの編集(percona1)
$ sudo vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
user=mysql

binlog_format                  = ROW
innodb_buffer_pool_size        = 100M
innodb_flush_log_at_trx_commit = 0
innodb_flush_method            = O_DIRECT
innodb_log_files_in_group      = 2
innodb_log_file_size           = 20M
innodb_file_per_table          = 1

wsrep_cluster_address          = gcomm://10.0.0.4,10.0.0.5,10.0.0.6
wsrep_provider                 = /usr/lib64/galera3/libgalera_smm.so

#wsrep_slave_threads            = 8
wsrep_cluster_name             = Cluster
wsrep_node_address=10.0.0.4

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cret"
default_storage_engine=InnoDB

innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode       = 2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file = /run/mysqld/mysql.pid

!includedir /etc/my.cnf.d
※percona2、percona3の場合は、「wsrep_node_address」を自分のIPアドレスに変更

4.percona1の起動(起動後はMySQLの管理者パスワードを設定すること)
$ sudo systemctl start mysql@bootstrap

5.SST用ユーザーの作成
$ sudo mysql -u root -p
Enter password:
mysql> create user 'sstuser'@'localhost' identified by 's3cret';
mysql> grant RELOAD, LOCK TABLES, REPLICATION CLIENT on *.* to 'sstuser'@'localhost';
mysql> flush privileges;

6.percona2、percona3の起動
$ sudo systemctl start mysql

あとは、参照記事の通りSQLを実行して確認できるかと思います。

性能検証は誰かやってるのかなー。
案件で困ってたら弊社へw
http://www.pnop.co.jp/













2015年1月19日月曜日

年明けたけど、Azure SDK for PHP を新しいバージョンのストレージAPIに対応してみる(適当編)

Azureの古いストレージAPI(2012-02-12以前)が削除されるのですが(以下参照)、

http://blogs.msdn.com/b/windowsazurej/archive/2014/08/12/blog-microsoft-azure-storage-service-version-removal.aspx

PHP向けSDKはまだ対応できてないのです。

せっかちな私は、ちょっとした変更で対応してみようと思います。
良い子は正式なSDKが出るのを待ちましょう。

まず、SDKのバージョンを定義してる定数は、「WindowsAzure/Common/Internal/Resources.phpの248行目の「STORAGE_API_LATEST_VERSION」にあります。

https://github.com/Azure/azure-sdk-for-php/blob/master/WindowsAzure/Common/Internal/Resources.php

ここを、最新の「2014-02-14」に変更します。

次に、動作させるバージョンによってはエラーが出るので、WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php」の一部を変更します。
どうもインターフェースのメソッドを全て実装してないっぽいですが ...
42行目のimplements以降を消します。

https://github.com/Azure/azure-sdk-for-php/blob/master/WindowsAzure/Common/Internal/Authentication/StorageAuthScheme.php

なんか嫌な感じですが、これでストレージの読み書きはできました。

やっぱり、正式に対応していただきたいです。




2014年11月14日金曜日

CentOSのPHP(pdo-dblib)から、ODBCなしに Azure SQL Database に接続する(前回の続きです)

前回は、私の嫌いなODBCを使わなくてもコマンドラインで SQL Database につながることを確認しました。
SQL Database が use が使えないので、DB名を接続時に指定する必要があることがわかりました。

では、まずphpinfo()で、PDO周りの設定を確認しましょう。
(おそらくパッケージは epel の php-pdoでしょうか)

以下の状態ならOKです。(コマンドで見てます...)
PDO

PDO support => enabled
PDO drivers => dblib, firebird, mysql, odbc, pgsql, sqlite

pdo_dblib

PDO Driver for FreeTDS/Sybase DB-lib => enabled

Flavour => freetds

接続に必要なのは、dblibです。
FreeTDSのライブラリの中にある DB-Library を使っています。

なお、FreeTDSは前回の設定と同様です。
freetds.conf の内容はこんな感じでしたね。
[mymssql]
host = mssql1.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8

この場合、PHPのコードはこうなります。
$server = 'mymssql';
$username = 'user@mssql1';
$password = 'password';
$database = 'mydatabase';

$db = new PDO("dblib:host=" . $server . ";dbname=" . $database . ";charset=UTF-8", $username, $password);
foreach ($db->query('SELECT DB_NAME()') as $row) {
  print_r($row);
}


公式ドキュメントでハマるところは、DSNのhostに渡す名前です。
これは freetds.conf に記述してあるサーバー名(ここでは mymssql)だったんですね。
そりゃわからんよ。

mssql関数でも、ある程度まではイケるんですが、接続時にDB名を指定する方法がわからずに断念しました。(masterには繋げます)

Azureの SQL Database は、唯一管理されたRDBMSなので、もっと他のOSや言語から簡単に繋がってほしいものです。

思い切って、OpenTechとかがFreeTDSプロジェクトに参加するとか、どうでしょう?










2014年11月11日火曜日

CentOSからコマンドラインで Azure SQL Database につなぐ

Azureで不便に思うことがある。
SQL Database をさくっとコマンドでなんとかしたい場合だ。
いろいろBingると、もちろんFreeTDS+UnixODBCを使ったサンプルが山ほどある。

しかし、yumでさくっとできないとかイヤじゃん。
ということでやってみた。

1. EPELリポジトリを有効にする
あなたのCentOSは、以下のコマンドでおそらくEPEL拡張パッケージが使えるようになるはず。
# yum install epel-release

くわしくはこちらを参考に。
https://fedoraproject.org/wiki/EPEL

2. FreeTDSをインストールする
以下のコマンドでインストールするだけ。
# yum install freetds

3. freetds.conf の設定
インストールすると、tsqlというコマンドが使える。
まずは設定ファイルの場所を確認する。
# tsql -C

たぶん良い子な皆さんは、/etc の下にあるはずだ。
こいつを環境に合わせて編集する。
# vi /etc/freetds.conf
[mymssql]
host = mssql1.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8

この場合、[mymssql]が tsqlコマンド実行時に "-S" で指定する文字列。
接続する前に、もうひとつ。

4. SQL Database 側で接続許可
管理ポータルで、接続するホストのグローバルIPを許可する。
今回、同じリージョンからやってみたけど、なぜか繋がらないのでわざわざ許可。

5. 名前解決ができないので dig で接続したい SQL Database のIPアドレスを確認
なぜ出来なかったのかわからないが、先にIPアドレスを確認して指定したら接続できた。
謎が多すぎてここで挫ける人もいるかもしれない。

6. tsqlコマンドで接続
さて、やっと接続できる。
ユーザーが「user@mssql1」、パスワードが「password」、SQL Database のIPアドレスが「12.34.56.78」、データベース名が「mydatabase」の場合、こうなる。
# tsql -S mymssql -U user@mssql1 -P password -H 12.34.56.78 -p 1433 -D mydatabase

locale is "en_US.UTF-8"

locale charset is "UTF-8"
using default charset "UTF-8"
Default database being set to mydatabase
1> 

こうなったらあとはコマンドで好きなように。
ただひとつ、useコマンドが使えないのでご注意を。

わかったことは、「UnixODBCいらない」ってことか。勉強になった。
たぶんPHPだと、ここに php-mssql 入れたら繋がるんじゃないかな。
ODBC経由しかないと思ってたけど、思い込みは良くない。反省。

なお、PHPでmssql関数を使えば、FreeTDS(dblib)だけでイケるんですが、
SQL Server の場合はOKでも、SQL Databaseの場合はuseが使えなくて詰んでしまう。
(要調査)








2014年10月30日木曜日

Microsoft Azure で CoreOS を動かせ(とりあえず仮想マシン作る)

発表がありましたが、Microsoft が Docker に取り組むようですね。
Azure でも Linux Based な仮想マシンのイメージに CoreOS Alpha が来ました。

まあさくっとやってみましょう。
但し、新ポータル(https://portal.azure.com/)からのみです。(おそらく)


入力するときに必要なのは、ホスト名、ユーザー名(CoreOSへのログイン名)、SSHの公開鍵です。
もちろん、日本リージョンにも作れます。

作成してしばらく経つと、インスタンスが上がってきます。
こんな感じでポータルから見えます。


ドメイン名がホスト名と若干異なる他は、だいたい普通の仮想マシンと同じですね。
もちろん、公開鍵を用いてSSHでの接続が可能です。

ここにDockerイメージをデプロイすれば、普通に使えます。(そのうちやる)

なお、仮想マシンができれば、旧ポータルからも設定することが可能です。