MySQL 5.7 のビルドにトライ ~ 5.6とは大違い

 ひとつ前の日記までで、MySQL 5.6 のビルドが快調にできたことに気をよくして、MySQL 5.7 のビルドにも挑戦してみました。5.6.35 と 5.6.34 の差(ビルド環境や方法に違いはない)と同じように バージョン番号関係の部分を 5.7.17 に変えれば良いのだろうと考えていたら、大違い。

MySQL5.6をビルドして動作させるのと違うところ

  • boost の 1.59 が要求される。Red Hat 7.3 のyumでは boost 1.53 しか入らないので一工夫必要
  • make するのにメモリが多く要求される。
  • データベースの初期化方法と、初期パスワード設定が違う


 以下それぞれについて説明したあと、全体の手順を紹介したいと思います。

boost 1.59 が必要

 yumでワンタッチで入らないので、一手間かかるなぁと思っていたら、MySQL開発チームは boost 1.59 入りのソースコードを提供してくれていました!*1
 mysql-5.7.17.tar.gz ではなく、mysql-boost-5.7.17.tar.gz をダウンロードして使用します。

f:id:sakaik:20170105160147j:plain:w350


メモリがいっぱい必要

 AWS Red Hat 7.3 の、t2.micro(1 CPU, 1GBメモリ)では、make の途中で落ちてしまいました。t2.medium (2 CPU, 4GBメモリ)では無事、処理を完了できました。

======
追記:
swapの設定をすることで、t2.micro でもビルドできました。ただし大変に時間がかかります。
MySQL 5.7 を t2.micro でもビルドできた! - sakaikの日々雑感~(T)編

======


 メモリが不足している環境で落ちるパターンは2つあるようで、

  • OOMキラーに殺されるケース (/var/log/messages にログが記録される)*2
  • 行儀良くメモリ不足になって落ちるケース


OOMキラーに殺されたときの出力:

 :
[ 43%] Building CXX object sql/CMakeFiles/sql.dir/item_func.cc.o
[ 43%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2

行儀よく(?)メモリ不足で落ちたときの出力:

[ 41%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o
virtual memory exhausted: Cannot allocate memory
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 1
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2


OOMキラーに殺されたときの/var/log/messages への記録:

Jan 4 21:55:39 ip-172-31-16-117 kernel: Out of memory: Kill process 28375 (cc1plus) score 812 or sacrifice child Jan 4 21:55:39 ip-172-31-16-117 kernel: Killed process 28375 (cc1plus) total-vm:990440kB, anon-rss:821020kB, file-rss:1828kB, shmem-rss:0kB

MySQL 5.7 のビルド

 ということで、MySQL 5.7.17 をビルドする方法です。前述したように AWSの t2.micro ではメモリが不足していたので、4GBメモリの t2.medium のインスタンスを立ち上げて試しました。

f:id:sakaik:20170105160246j:plain:w350


今回は新しいマシン環境にしたので、各種モジュールを入れる:

# yum -y install wget gcc gcc-c++ cmake libaio-devel bison ncurses-devel perl-Data-Dumper
# yum -y remove mariadb-libs


MySQL 5.7.17(boost入り)を取得して展開:

$ mkdir mysql/
$ cd !$
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.17.tar.gz
$ tar xvf mysql-boost-5.7.17.tar.gz
$ cd mysql-5.7.17

cmakeの実行。boostライブラリの位置を WITH_BOOST で指定するのがポイント。
その後 make*3

$ cmake -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=/home/ec2-user/mysql/mysql5717 -DBUILD_CONFIG=mysql_release

$ make

$ make install

make には、t2.mediumの環境で40分かかりました。やっぱり MySQL 5.7、でかいですね。



インストール後の作業

 インストールが済んだら、

  • データベースファイルの作成
  • MySQLサーバの起動
  • クライアントからの接続確認

をします。

 MySQL 5.7.6 からは、初期データベースの作成方法が変更となっています*4

$ ./bin/mysqld --initialize
 :
2017-01-05T05:00:32.599615Z 1 [Note] A temporary password is generated for root@localhost: 4gV=;%jYin6v

作成すると、初期パスワードが画面に表示されていますので、覚えておきます*5


my.cnf を作成します。MySQL 5.6 と異なり、ベースとなるフォルダには my.cnf のひな形はありません。
新規に作成するか、あるいはテンプレートを使いたい人は support-files の中のmy-default.cnf ファイルをコピー/リネームして使います*6

$ vi my.cnf
------
[mysqld]
character-set-server=utf8mb4
log-error=/home/ec2-user/mysql/mysql5717/my.err
port=15717
socket=/tmp/mysql5717.sock

[mysqladmin]
socket=/tmp/mysql5717.sock

[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql5717.sock
port=15717
------

 今回は ポートは 15717、キャラクタセットは utf8mb4 にしてみました。



MySQLサーバの起動:

$ ./bin/mysqld_safe &

クライアントからの接続:

$ ./bin/mysql --defaults-file=./my.cnf -uroot -p

 先ほど記憶した初期パスワードを入力します。

 MySQL 5.7 では、初期パスワードを変更するまで、なんにもできないようになっています。
ALTER USER 構文を使ってパスワードを変更します*7

mysql> ALTER USER root@localhost IDENTIFIED BY 'mynEwP455wD';

statusを見てみると、期待したバージョンが、期待したキャラクタセットの設定で起動していることがわかります。
f:id:sakaik:20170105160348j:plain:w350



 ということで、無事 MySQL 5.7 もビルドできました。
MySQL 5.7 は驚くほど大きな進化」とよく言いますが、1GBメモリの環境でビルドできないことや、ビルド時間が倍かかる(20分→40分)ことなどから、その進化のサイズが並ならぬものであることが実感できました。
 特に、今回メモリ不足で落ちたのが geo 関係のところということで、たまたまその位置で不足しただけという可能性は勿論ありますが、個人の印象としては「geo関係、でっかいなぁ」と感じました。


 ということで、年始の時間を利用した「MySQLビルドあそび」終了です。 yokuさんの記事に始まり、エラーの解決方法をtwitterでyokuさんに教えていただくなど、yokuさんにyokuお世話になりました。特に、メモリ不足の可能性には恐らく自力でたどり着かなかったと思います。ありがとうございました!

----------

*1:yoku0825さんに教えていただきました

*2:yoku0825さんに教えていただきました

*3:cmake したら make

*4:以前は、mysql_install_db スクリプトを使用しました

*5:ほとんどの人は自分の脳で覚えられないでしょうから、コピペなどの技術を用います

*6:MySQL 5.7.18からは、このファイルも同梱されなくなるとアナウンスされているので、基本的に my.cnf は自分で作るものだと思っておくと良いでしょう

*7:MySQL 5.7.6より前は SET PASSWORD FOR 構文を使いました

ふたつのバージョンのMySQLを同時に動かす on AWS Red Hat 7.3

 ひとつまえの日記の続きです。
最近、MySQL のインストールは rpm(CentOS)、あるいは MySQL Installer(Windows)に頼りっきりで、手動インストールからも、すっかり遠ざかっておりました。そんな折に、簡潔でシンプル*1な yoku0825さんの記事に助けられて、そして年末に「AWS触ってみてよ」と推してくれた方のおかげで、環境と時間と情報とやる気が一気にフルハウス
 さほど大きな苦労もせずに、久々にビルドに成功した*2のに気をよくして、同じマシン(OS)上に複数の MySQLサーバを立ち上げるのをやってみました。

ひとつ前の日記( http://sakaik.hateblo.jp/entry/20170103/build_mysql ) の続きです。ひとつ前の日記では、MySQL 5.6.35 をソースコードからビルドして起動しました。

今回やりたいこと

 すでに MySQL 5.6.35が動作している環境(port=15635) に、新たに MySQL 5.6.34 をビルドして、port=15634 で動作させる。
 プラス、起動方法をちょっと楽にする工夫も。

MySQL 5.6.34 のビルドとインストール

 ひとつ前の日記と同様にして、MySQL 5.6.34のソースコードを取得、cmake/make してインストールする。

$ cd ~/mysql
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz
$ tar xvf mysql-5.6.34.tar.gz 
$ cd mysql-5.6.34
$ cmake -DCMAKE_INSTALL_PREFIX=/home/ec2-user/mysql/mysql5634 -DBUILD_CONFIG=mysql_release .
$ make
$ make install

 後続の作業のために、MySQL 5.6.34をインストールしたフォルダに移動しておきましょう。

$ cd ../mysql5634

mysqld の起動

 MySQL 5.6.35をビルドして起動した時には、mysql_safe にsocketやらportやらを指定するパラメタを長々と書きました。毎回そんなことをするのは面倒なので、今回は my.cnf へ記述しておくことにします。

 まず、データファイルのインストール(作成)から。

 $ ./scripts/mysql_install_db --datadir=./data


 mysql_install_db を実行すると、当フォルダ(ここでは ~/mysql/mysql5634/)に my.cnf ファイルも作成されます。これを編集します。
 ポート、ソケット、データディレクトリ類の指定、およびキャラクタセットの設定もしておきます。

$ vi my.cnf
----
[mysqld]
basedir = /home/ec2-user/mysql/mysql5634 
datadir = /home/ec2-user/mysql/mysql5634/data 
port = 15634 
server_id = 5634 
socket = /tmp/mysql5634.sock 
character-set-server=utf8

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqladmin]
socket = /tmp/mysql5634.sock 

[mysql]
socket = /tmp/mysql5634.sock 
port = 15634 
default-character-set=utf8
----


 MySQL 5.6.34サーバの起動。カレントフォルダにある my.cnf を読み込んでくれるので、これだけで十分(ひとつ前の日記と見比べてください)*3

$ ./bin/mysqld_safe &

 mysqlコマンドラインクライアントから接続してみます。カレントの my.cnf を自動で読み込んでくれるわけではないようで*4、defaults-file パラメタで my.cnf ファイルを指定します。

$ bin/mysql --defaults-file=./my.cnf  -uroot

2つのバージョンを立ち上げて、mysqlクライアントから接続して、statusを確認したところ。5.6.35のほうは キャラクタセットを指定していないので、サーバ側 latin1 になっています。my.cnf で指定した 5.6.34のほうは utf8になっていますね。
f:id:sakaik:20170104185911j:plain



ちなみに、MySQLサーバの停止は、mysqladmin を使用します。

$ ./bin/mysqladmin --defaults-file=./my.cnf shutdown -uroot




参考: 過去の MySQLビルド関係記事(deplicated):
Windows上でのMySQLビルド方法・MySQL5.6+VC2010Express 編 - sakaikの日々雑感~(T)編
Windows上でのMySQLビルド方法まとめ - sakaikの日々雑感~(T)編
初めて MySQL 5.1 をビルドしてみた。 - sakaikの日々雑感~(T)編

*1:「説明が雑」とか言ってすいませんでした

*2:ほぼ5年ぶりのようです

*3:色々なところに配置されている my.cnf の読み込み順については、ここでは紹介しないので興味ある方は調べてみて下さい

*4:以前は読んでくれたんじゃなかったかなぁ、、記憶違いかなぁ

MySQLをビルドする on AWS Red Hat 7.3

yoku0825 さんが、Software Design 誌 2016年6月号に、最近のMySQLのビルドのしかたを簡潔に書いてくれていたのを見て、ずっとやりたかったのが、半年が経ち、年を越え。こんなに時間が経つなら忘れてしまえばいいのに、と思うのですが、先延ばしにすればするほど忘れられなくなるのが、この性分。ようやく年貢を納めることができた気分なので、メモ書き程度にここに残しておこうと思います。

 この年末年始に、AWSにやっと触ってみました。「AWSに触る」という表現が適切なのかどうかすらよくわかっていないレベルなのですが、アカウントを作って、マシンイメージからインスタンスを作ったり、あるいは壊したりする体験をしたところです。ということで、この環境の上で、MySQLをビルドして動かしてみることにしました。
 今回使用したのは、Amazon マシンイメージ(AMI)から、Red Hat Enterprise Linux 7.3 です。スペックは、1 CPU, 1GBメモリの t2.micro というタイプ。

f:id:sakaik:20170104112119j:plain:w350
f:id:sakaik:20170104113100j:plain:w350


試行錯誤紆余曲折艱難辛苦ありましたが、臥薪嘗胆七転八倒三寒四温の末、その集大成として、最短でゴールにたどり着ける方法をここでは書きたいと思います(平たく言うと「まとめ」)。

目標とする構成

参考にした yokuさんの記事が MySQL 5.6 での実施だったので、まずはバージョン相違による余計な悩みを避けるために、今回は、MySQL 5.7系ではなく、MySQL 5.6.35 でのビルドを試みることにしました。(yokuさんの記事では 5.6.29)
一般ユーザとして、自分の HOME 下に、mysqlフォルダを掘り、その下の mysql5635 フォルダにごにょごにょ突っ込むイメージ。次のステップとして複数バージョンを同時に動作させたいので、このような構成にしました。

事前準備(環境整備)

 実際の作業では不足によるエラーが出るたびに追加するなど試行錯誤しながら進めましたが、以下をあらかじめ行っておくと作業がスムーズにすすーむず。
rootユーザでの作業。


必要なパッケージ類のインストール:

# yum install wget gcc gcc-c++ cmake libaio-devel bison  ncurses-devel perl-Data-Dumper


今回使用したAMIには MariaDBがすでに入っていて、これが今回入れるMySQLの動作を阻害するため、あらかじめ除去しておく:

# yum -y remove mariadb-libs

ファイルの用意(含フォルダの作成)

 ここからは一般ユーザでの作業です。
フォルダを掘って、中に移動して、MySQL 5.6.35のソースコードをダウンロードしてきて、展開して、展開したフォルダに移動する、というだけの簡単なお仕事です。

$ mkdir mysql/
$ cd !$
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz
$ tar xvf mysql-5.6.35.tar.gz 
$ cd mysql-5.6.35

ビルドとインストール作業

 展開したソースコードを cmake する*1
その後、make*2。 makeには 今回の環境で 19分程かかりました。
makeが済んだら、インストールして完了。

$ cmake -DCMAKE_INSTALL_PREFIX=/home/ec2-user/mysql/mysql5635 -DBUILD_CONFIG=mysql_release .
$ make
$ make install

起動確認

 インストールが済んだので、実際に MySQLサーバを起動して、クライアントから接続できるかを確認してみます。
 まずは、インストールしたフォルダに移動。

$ cd ../mysql5635/
$ pwd
/home/ec2-user/mysql/mysql5635


 データベースファイルをインストール(作成):

./scripts/mysql_install_db --datadir=./data


 mysqldを起動。ポート番号やソケット番号がヘンなのは、この後、複数バージョンを動作させるつもりなので、バージョンを分かりやすくしたかったから。

./bin/mysqld_safe --datadir=./data --port=15635 --socket=/tmp/mysql5635.sock &


 クライアントから接続して、status を見てみる。

$ ./bin/mysql -uroot -P15635 --socket=/tmp/mysql5635.sock

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)
(略)


mysql> status
--------------
./bin/mysql  Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using  EditLine wrapper

Connection id:          1
Current database:       
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.6.35 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /tmp/mysql5635.sock
Uptime:                 8 min 11 sec

Threads: 1  Questions: 5  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.010
--------------

mysql> 


 今日はここまで。

その他ハマりどころとか

  • AWS への SSH接続が結構よく切れるのに困った。複数接続しているときに全部一遍に、追い出されるかのように切断されてしまうことが今回の作業中にも何度か。
  • cmake でエラーが出ては不足モジュールをインストールしている際に、エラーが消えず悩みました。これは処理の状態がキャッシュされているためで、rm CMakeCache.txt してから再度 cmake すればOK。

*1:この時点で私の頭が時代遅れを認識。configureじゃないんだ、と

*2:cmake したら make、という言い回しが結構気に入った。cmakeしたら負け

日記書けなくなる症候群を反省

 OSC2016-hiroshima に参加した折、yoku0825 さんと深く語り合うことができて、自分にも気づきがあったので、今の自身の思いをここに吐露しておく。

 ユーザ会の活動でイベントに参加したりセミナーでお話ししたりしているうちに、ありがたいことに情報等に対して感謝の言葉をいただくことがあります。稀にですが。
それを何度か体験すると、よりよい物を、よりわかりやすく、より正確なものを提供しなければという思いが芽生えてきます。気楽に、無責任に書けなくなるんですね。

 もちろん、しっかり書かなきゃいけないというルールがあるわけではなく、また「社会的責任」なんてものはここには発生しないものだと考えているので、純粋にこれは自分の中の問題なのです。自意識過剰なのであります。
 もうちょっと調べてみてから書いたほうがいいんじゃないか、あやふやな部分や理解できていない部分がある場合には書かないほうがいいんじゃないか。そんな思いに押されて、筆が遠のくわけです。もちろん、より良い日記を書くことにプラスにけるならば「しっかり書こう」という姿勢は悪いものではないのですが、実際のところは時間切れまたは根性負けして、日記が書かれないという結末になることが多いのです。


これはよくない。うん。よくない。


 そんなわけで、もっと気軽に書く宣言。「記事」気取りではなく、飽くまでも「日記」。
ちょっとコマンド叩いてみた。本とか資料とか見ててへぇと思った事があった。そんな時に「整理してから書こう」というのではなく、可及的速やかに軽く自由に書いて行けたらなと思います。しばらくその方針でやってみます。


 気づきに、そしてそのきっかけをいただけたことに感謝。

オープンソースカンファレンス(OSC)2016-Hiroshima 参画

2016年のOSCを締めくくる広島開催。参加してきました。
今年は飛行機にたくさん乗る、と決めたのが、昨年トリ開催のOSC福岡でのこと。1年間、色々な所に行って、たくさんの方とお話させていただいたり、お話を聞いていただいたりしました。忙しかったけど充実していたなぁ。

http://www.ospn.jp/osc2016-hiroshima/


 OSCには珍しく、今回は日曜日開催だったので、当初は懇親会に出ずに日曜日のうちに帰宅するつもりでした。が、開催が近づくにつれ、折角行くのに勿体ない気がしてきて、結局飛行機も取り直してもう1泊することにしました。1日伸ばしたおかげで、平和公園や記念館をじっくり訪問することができて、その点でもよかったです。


f:id:sakaik:20161127113048j:plain


 比較的狭めの部屋の中にたくさんのブースが居て、そこにたくさんの人が来場してくれて、熱気のすごいこと。受付で用意していたOSCのパンフレットも途中で足りなくなったとか。MyNAブースも、今回3人も居たので、私はほとんど何もせずにぶらぶら。なんかブースにいらした方に、実際にコマンドを叩いた画面を見せながら、キャッキャと楽しそうでした(笑)。
 近くのブースで、態度が悪いというかだらしないのがいて、なんだかなぁと思ったけど、関わると余計気分悪くなりそうなので忘れたいです(OSCでこんな思いをするのは珍しいです)。

 セミナーのほうは、まぁ直前までドキドキハラハラしていましたが、「こんなこともあろうかと」と用意してあった資料(嘘です。先週福岡でやったばかりでネタがまだホットで、ほぼそのまま使えただけです)で、テーマを変更して一応無事に開催できました。事前アナウンスされていたテーマでのお話を楽しみに来場された方には、申し訳ありませんでした。

 ここ何年も、色々な地域のOSCに参加してきている中で、なかなかタイミングが合わずに来ることができなかった広島。高校の修学旅行以来の広島。お好み焼きも食べられたし、行くべきところに行くこともできたし、行ったことのない空港を利用することもできたし、近くで開催されていた囲碁の大会(若鯉杯:一力さんが優勝!)をお昼ごはんついでにちょっと覗きに行くこともできたし、充実の広島訪問でした。ありがとう!ありがとう!

f:id:sakaik:20161127130113j:plain


閉会式後の、来場者への「おみやげ」で、海苔をもらいました。こういうの、家族へのおみやげになるので超嬉しいです(^^)

OSC2016-Fukuoka参画

オープンソースカンファレンス(OSC)2016-Fukuoka に参加してきました。
OSC Fukuoka は、今回で10回目。一度を除いて*1第1回からずっと参加していることや、はじめて東京以外のOSCに参加した地であることもあって、思い入れの深い場所です。年中行事のひとつとして、必ず太宰府天満宮に奉拝するので、天神さんの御神酒皿が9個目になりました(笑)。

http://www.ospn.jp/osc2016-fukuoka/

f:id:sakaik:20161119144130j:plain

 日本MySQLユーザ会(MyNA)としてのブース、今回は展示品の本とか、お配りする案内チラシ、クリアフォルダなど盛りだくさんで、なんだかちゃんとしたブースっぽい雰囲気になりました。私は、南紀白浜アドベンチャーワールドで手に入れてきたイルカのぬいぐるみを2つ持参(笑)。

 出展側から見ると、福岡のOSCは会場によるのか日程によるのか、年によって参加者の雰囲気が随分と変わる印象を持っています。ある年はブースに熱心に話を聞きに来る人が引っ切りなしに訪れ、セミナーも盛況。ある年はブースはヒマでヒマで、セミナーもいまひとつ聞きに来てくれる人が少ない。今回は、程良い感じでした。裏枠(同時間帯の他のセミナー)に競合ひしめく中、セミナーにもたくさんの人が来て下さいました。楽しいことを言っても(世間では駄洒落と呼んでいるらしいです)反応がイマイチだったけど、熱心にペンを走らせたり、ここぞという話をしたときには大きく頷いてくださったり、とても気持ちよくお話させていただきました。MySQL のバージョンを 5.7にしてみようという人が増えて、また、次のバージョンである 8.0 に興味を持つ人が増えてくれたら嬉しいな。


 会場の近くの海で、ヨットの大きな大会をやっているらしかったので、お昼にちょっと覗いて見ました。かなり離れた金網越しではありましたが、なんか船が行ったり来たりしているのが見えました。MySQLの開発元であるオラクル社の会長が大のヨット好きらしく*2、オラクルスポンサードのUSAチームのヨットがちょうど見えたのはラッキーでした。

f:id:sakaik:20161119130120j:plain


 こんな感じで、第10回目の節目となる会も盛り上がった OSC Fukuoka。今後の更なる発展(上方向)と広がり(横方向)も楽しみにしています。久々の方にいっぱい会えたのも嬉しかったな~。

*1:一度発表された日程が後に変更されて、変更後の日取りが都合着かなかったとき

*2:自社主催の基調講演をレースのために欠席したという逸話も

オープンソースカンファレンス(OSC)2016-Tokyo/Fall参画

オープンソースカンファレンス(OSC)2016-Tokyo/Fall に参加してきました。
東京と謳いながらも、千葉県のうちからは非常に遠いため、もう東京のOSCには行かないつもりだったのですが、今回タイミングと気力体力とがマッチしたので、2日間開催のうち土曜日だけ、顔を出してきました。
何年ぶりかなぁ。
http://www.ospn.jp/osc2016-fall/

f:id:sakaik:20161105161647j:plain


 やはり東京のOSCは規模が段違いに大きく、ブースの移動だけでも大変です。言い換えれば、各地でお会いした人やコミュニティが一斉に集う充実度は、東京ならではのもの。
 私自身が東京のOSCに長らく参加しなかったこともあって、数年ぶりにお会いする方もたくさん。それぞれ、プライベートを含めた環境が色々と変わっていて、それも多くはハッピーな方向だったのが嬉しい事でした。久々参加の東京OSC、うん、行って良かった。ハッピーをいっぱいもらってきました。 


 今回のOSCで、オレオレベスト賞「ベストーレ」を差し上げたいのが、「プレレールで作った半加算機」。
実際に持ち込んで、OSC会場で当日の朝に会場で2時間かけて、組み立てたそうです。
プラレールで半加算器を設計した話 | サイボウズ式

f:id:sakaik:20161105153726j:plain

 あまりにワクワクしたので、3回ほどに分けて部屋を覗かせていただいていたのですが、来る人来る人、みんな目をキラキラさせていましたね。ただ、私の理解力が遅いのか、三回目の訪問時にやっと、どの箇所で何をやっているか、何のために分岐させているのか(値のコピー)が分かってきたくらいだったので、一般の人への伝え方としては、更に工夫をできるポイントがあるかなと思いました。例として、

・見る箇所(入力値、そのコピー、出力値のターンアウト)が一目で分かると良いと思いました。紙が置いてあったけど、一方向からしか見えないので、旗を立てるとか、複線だったら赤いゲートがあるのだけど単線ではそういうのあったかな、、、
・入力値に応じて、どの場所のターンアウトの値がどのように(どの順序で)変化していくかを示した表などがあると、分かりやすいと思いました(というか私がその表ほしい)
・列車をリモコン操作で止めたり動かしたりできると、説明をしながらのデモが分かりやすくなりますね。これは会場でもお話していたのですが、そういう列車もあるけど、結構リモコンの距離が短いそうで、この大きさだと厳しいとのこと


 いやほんとこれ、感動したので、↑みたいな提案とか実際に表を作るとか、何か協力できることがあればやりますよ。
 そういえば、デモを見ているときに、一カ所、下りで加速がついたまま分岐に突入する部分の動作が不安定ということに気づいたので、口頭でプルリクしたところすぐに採用していただけました。オープンソースらしくて嬉しかったです(笑)。


 あ、自分のブースのことを書いていなかった。今回は yoku0825さんと一緒に展示されてきました。来場者の方とお話したり、近くのブースの方とお話したり、yokuさんに MySQL 8.0情報を中心に色々教えていただいたり、充実の時間でした。
 各地のOSCに行くときには、自分ひとりであることが多いので、一緒にブースができるって楽しいなぁと再認識。各地のMySQLユーザのみなさま、一緒にブースで展示されましょう!(2016年の残りは、11/19福岡、11/27広島。来年以降の予定は、http://www.ospn.jp/ を参照)



 懇親会は、ちょっと人数が多すぎて何が何だか分からないというか、探している人になかなか会えなくて大変だなーという面もありましたが、とにかく、各地参加させていただいているOSCと比べても、まさに OSCC (オープンソースカンファレンスカンファレンス)的な規模だなぁと、久々の参加で改めて感じたのでした。
 各地の、参加者の顔が全部見えるような懇親会のほうが、実は個人的には好きなんですけどね(笑)。まったくベツモノという感覚です!


 そんなわけで、興奮状態のまま会場を出て、本を読んだりしながらほぼ3時間かけておうちまで帰りましたとさ。やっぱり東京、遠い(^^;)。来年以降、各地のOSCへの参加が減る予定なので、そのぶん、東京で宿泊しても構わないよな、と思うようにもなってきました(笑)。それだけ魅力的なOSC東京です。



※今回、これ買ってきました

入門 機械学習

入門 機械学習