mumumu の日記

Development, Translation, daily life, thoughts, and so on.

2013-06-18 13:47:00 +0900

Change Job

今の会社を今月末付で退職する。
今日が最終出社日である。

2年3ヶ月ほどいたことになる。これはこれまでの自分のキャリアの中で一番短い。
ある意味寄り道だったのかもしれない。ただ、いろんなものを俯瞰できたという意味では悪くないと思っている。たとえば組織というもの。カネというもの。変化するということ。数字というもの。そういうものだ。

来月からは別の組織で働くことになっている。そこでは、今までの自分にはなかったモノを模索して身につけるつもりだ。また、それができると確信している。

家庭も変わりつつある中で相方には呆れられたが、納得して貰ったのが救いだとは思う(´ー`; )
いろいろ良くなるはずなので勝手を許して欲しい。周囲も世界も変わるから、俺も変わらねばならぬ。

変わらないものも存在すべきだし、それはそれで意義があるだろう。ただ、今は変化が激しい世の中だし、自分も変化が激しい業界に身を置いているので、自分が変化せざるを得ないように思う。俺にとってはそれが楽しいし、これからも変化していくだろう。退職した職場からは、変化することの大切さを大いに学んだ。

変化をドライブし、楽しむこと。それが俺のアプローチだ。

2013-06-13 22:49:00 +0900

X-Forwarded-For

http://ja.wikipedia.org/wiki/X-Forwarded-For

少々大きなサイトになると、Webサーバ がロードバランサの後ろにあるなんて世界はもう当たり前になった。ロードバランサの後ろからは直接クライアントのIPアドレスを知ることが標準のやり方では取得しづらい。CGI でいうところの REMOTE_HOST は、ロードバランサのIPアドレスを意味するからだ。

それを取得するための方法が、X-Forwarded-For ヘッダの値なのは多くの人が知っている。けれども、これはデファクトではあっても標準ではない。今日たまたま商用のロードバランサを触っていて、このヘッダの値を設定してこないのに驚いた。

何らかの値は設定するモノだよなーと思ってCGIに渡される環境変数やHTTPヘッダの値をぱっと取得する方法をちょびっと考えたら、PHP が一番楽だなーと個人的には思いました。みんな馬鹿にするけどね。

<?php
var_dump($_SERVER);

だけでいいんだもの。

Python を CGI として実行させるんだったら以下のようになる。
CGI として実行するんで、拡張子や実行権限とかを気にしないといけないのはちょっとアレ。

#!/usr/bin/env python 
import cgi
cgi.print_environ();

Ruby だったら...?

#!/usr/bin/env ruby
print "Content-type: text/html\n\n"
ENV.collect() do |key, value|
        print key + " --> " + value + "<br />"
end

Perl だったら...? というのは省略。

たぶん、Python や Ruby も Perl も(フレームワークとかでキックされる状況等という意味で)実行環境によってはもっと短い書き方があるはずだ。結局、自分が一番使い慣れた LL が PHP ってだけなんだと思う。

2013-06-07 12:47:00 +0900

Migrating MySQL 5.5 to 5.6

MySQL5.5 からビルドは cmake でするようになったが、ビルドオプションが手元に残らない(誰か Autotool でいうところの config.status みたいなものがあれば教えて!)。そして、MySQL の新しいメジャーバージョンが出る度に公式ドキュメントの一般的な手順を追うのも面倒臭い。

ということで、以下に私的な Debian GNU/Linux Wheezy 上でのアップグレード手順をメモしておく。家サーバの私的な手順なので参考にしてはいけない。ソースから入れているので apt-get install build-essential も当然しておくこと。

また、mysql ユーザーとグループは作成済みとし、起動スクリプト /etc/init.d/mysqld も作成済みとする。



マニュアルを読み、アップグレードに関する注意や非互換変更、リリースノートを読んでおく。

http://dev.mysql.com/doc/refman/5.6/en/upgrading.html http://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html http://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html http://dev.mysql.com/doc/relnotes/mysql/5.6/en/

次に、ソースアーカイブを展開して普通にビルドする。

$ tar zxvf mysql-5.6.12.tar.gz
$ cd mysql-5.6.12
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.6 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_READLINE=ON  .
$ make -j8
$ sudo make install
$ sudo -s

ここで root になり、/usr/local/mysql5.6 以下の権限を設定する。
最後の data ディレクトリへの設定は意味ないが、様式美のようなものだ。

# cd /usr/local/mysql5.6
# chown -R root.mysql .
# chown -R mysql data

mysqld を一度停止する。

# /etc/init.d/mysqld stop

自分はデータを /home/mysql/data-VERSION 以下に置いているので、それを新たな場所にコピーし、権限を設定する。元データを残しておくのが mysqldump 等によるバックアップの代替だ。

# cd /home/mysql
# cp -pR data-5.5 data-5.6
# chown -R mysql.mysql data-5.6

/etc/init.d/mysqld を編集する。自分は support-files/mysql.server をそのまま使っているので、basedir と datadir を以下のように書き換える。

--- mysqld-5.5  2013-06-07 12:58:13.075107498 +0900
+++ mysqld      2013-06-07 12:37:57.775074031 +0900
@@ -43,8 +43,8 @@
# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

-basedir=/usr/local/mysql5.5
-datadir=/home/mysql/data-5.5
+basedir=/usr/local/mysql5.6
+datadir=/home/mysql/data-5.6

MySQL を起動する。(この時点で既に5.6)

# /etc/init.d/mysqld start

一度接続できることを確認する。

# /usr/local/mysql5.6/bin/mysql -u root -p mysql
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 85
Server version: 5.6.12-log Source distribution

....

mysql_upgrade を実行する。 --basedir と --datadir は無視されるんだそうな。
マニュアル通りですな。

# /usr/local/mysql5.6/bin/mysql_upgrade --basedir=/usr/local/mysql5.6/ --datadir=/home/mysql/data-5.6/ -u root -p
/usr/local/mysql5.6/bin/mysql_upgrade: the '--basedir' option is always ignored
/usr/local/mysql5.6/bin/mysql_upgrade: the '--datadir' option is always ignored
Enter password: 
Looking for 'mysql' as: /usr/local/mysql5.6/bin/mysql
Looking for 'mysqlcheck' as: /usr/local/mysql5.6/bin/mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock' 
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock' 
Warning: Using a password on the command line interface can be insecure.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.test                                         OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
....
OK

これで完了。何か起きたときは /etc/init.d/mysqld を古いモノに差し替えて mysqld を再起動すること。

2013-06-05 10:19:00 +0900

Jubatus Casual Talks #1

http://blog.jubat.us/2013/06/jubatus-casual-talks-1.html

Jubatus Casual Talk #1 に行ってきた。JubatusNTT研究所PFI が共同開発し、オープンソースとして公開している機械学習のツールだ。分類や回帰、レコメンド、異常検知など、様々な機械学習の問題を扱うことができるようになっている。

機械学習は背景に数学的な考え方をベースとして成り立っているので、少し敬遠しがちな部分があったけれども、いずれ触れなければならない技術なので最近重い腰をあげてみている。Jubatus を「カジュアルに」(=ざっくばらんに) 使っている人たちのトークだから、きっと数学バリバリなトークは少ないだろう、と思って行った次第である。

期待したとおり、9つあった発表のうち、まともな数式が出てきたのは「Jubatus でオンラインランク学習」だけであった。「遊んでみた」レベルから「研究に適用してみた」レベルまで様々あったのだけれども、真面目な研究者の方も非常にカジュアルに発表を構成されていて、自分のような初心者にはとても素晴らしい会だった。開発者の方々が主催されていたのだが、Jubatus に対する要望も発表の随所から吸収できたようで、有意義な会になったようだ。

前提知識がないままに行っても、冒頭の海野さんによる「機械学習チュートリアル」のお陰で全く違和感なく以後のトークを聞くことが出来た。自分は機械学習初心者だと自認する人はこの資料を是非読んでみると良いと思う。

次回も計画されているようなので、アンケートに答えておいた。また是非行ってみようと思う。

2013-06-05 09:30:00 +0900

7 port usb charger

http://item.rakuten.co.jp/donya/84527

USB 経由でガジェットを充電することはもはや普通だ。けど、USBの接続先となるPCとかはずっと起動しておく必要があるのが欠点だ。また、必然的に充電できるガジェットの数がUSBポートの数に制限される。

自分の場合は家にあるサーバをUSBの給電ソースにしていたのだが、ポートが4つしかない。そこから5メートルのUSBケーブルを延ばして自分のがジェットを充電していたら、相方もそれを見て使い始め、チャンネル争いならぬUSBのポート争いが起きた。あーもうこりゃやってられんなーと思ってたところに、masahifさん から上記の 7ポートUSBチャージャーを教えて貰った。

usb charger image

自分が使っているのは上のような感じだ。7ポートあるのでUSBポート争いが起きなくなったのが良い。また、PCからの給電が標準で 0.5A なのに比べて、このチャージャーの標準はACアダプタ直繋ぎだからか 1.0A からだ。2.0A のポートもふたつある。特に 2.0A のポートに繋いだときの充電スピードが圧倒的に違うのには自分も相方も驚いている。これが一番のウリじゃないかと思うくらいである。4000円弱と若干お高いが、払う価値は個人的にはあった。

自分が外に出かけている間、相方は 2.0A のポートを拝借して楽しんでいるようだ。電気代とかは注視していく必要があるが、当面は二人とも満足できるだろう。子供がガジェットを持ち始めたらまた別だが。。(´ー`; )