OSC2016群馬参画

 群馬では初めて開催される、オープンソースカンファレンス2016群馬(OSC2016-Gunma)に参加してきました。
まだその土地での開催の「色」のない、第1回というのは、たいへんわくわくするものです。
前後のスケジュールが立て込んでいたので、直前まで参加を迷っていましたが、なんとか前日入り当日帰りの1泊で参加することができました。

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

 会場は、ヤマダ電機さんの中にあるイベントスペース。本店だそうです。あまり普段気にしないけれども、ヤマダ電機って群馬だったのですね。
f:id:sakaik:20160514102850j:plain


 朝10時の開店とともに、ぞろぞろと入店して会場へ。ブースにてあれこれセッティングしているうちに、セミナーも開始。
OSCって、複数トラックのセミナーを別々の部屋で進行するものもあるのですが、今回群馬は、広いワンフロアの一部をセミナーエリアとブースエリアにわけての開催。ブースから(やや聞き取りにくい時もあるけれども)何の話をしているかが見えるので、楽しいです。反面、この形式ではブース側が遠慮しちゃって、なかなかブースでのお話ができないという事も多いのですが、今回の会場はかなり広く、あちらはあちら、こちらはこちら、で結構自由にやりやすい、でもシームレスな一体感、という絶妙なセッティングだったと思います。


 たくさんの人に会い、色々な事を教えてもらったOSC群馬でした。自分のユーザ会のブースも、ひとりだけでやることも多いのですが、今回2人で居たことで、普段以上に得たものが多かったです。最近のMySQL、むつかしい・・・・(笑)。

 懇親会も、一般のバイキング形式の一角を陣取っての開催という形式だったため、「無限ごはん」。尽きることなく食べ物がある状況というのも、OSCとしては新鮮でした。群馬最高! 今回は第1回ということで興味を持って来た人も多いと思います(私もです)。ぜひ第2回以降も盛大に開催を続けていただけたらと、期待しています! 今回はじめて高崎まで足を運んでみて、「意外と近いじゃない」という声もいくつか聞こえてきましたので、群馬への物理的な距離感を知って貰う点でも大きな成果かなと思いました。


 ということで、ぐんまの思い出。

f:id:sakaik:20160514232503j:plain:w250 f:id:sakaik:20160514121619j:plain:w250 f:id:sakaik:20160514103650j:plain:h150 f:id:sakaik:20160514093600j:plain:w250
f:id:sakaik:20160514093901j:plain:w350 f:id:sakaik:20160514093914j:plain:w350


 

PHPカンファレンス北海道2016

今年はいろんなところでのイベントに顔を出してみる年間と決めたこともあり、札幌で開催されたPHPカンファレンスにも顔を出してみました。一般参加です。ただの参加です。最近PHP書いてないけど、やっぱり気になる言語だし、最新情報を全然キャッチアップできていないけど、それでも他の言語よりは多分書けるし。

朝の便で札幌に降り立ち、会場に向かいます。持ち前の方向音痴発動。というか、正確には「方向」音痴じゃないんだけど、私の目的地にたどり着けなさ加減の原点はここにあるのかと改めて納得した次第。
でーん!!!コンベンションセンター!!!!
f:id:sakaik:20160416115725j:plain:w400


あのね、会場こっちじゃなかったの。お隣にある札幌市産業振興センターのほうだったの。ご丁寧に産業振興センターの脇を通りながら横目で、今回はこっちじゃないもんねー、と一目散にコンベンションセンターに向かった私。たぶん「センター」しか見ていなかったんだろうね。手前のは「なんちゃら会館」みたいな名前だと思っていたんだろうね。 ・・・・・どあほ!!!!>自分


f:id:sakaik:20160416120430j:plain:h400


ついたよ。まだセミナーやっていたので部屋に入ったよ。
聞こえてきたのは「発表は以上ですが、質問のある方は・・・」
がくっ。


そんなわけで、知り合い達と挨拶して、お弁当をいただきながらのスポンサーセッションからの参加となりました。
おやつタイムには、白い恋人も振る舞われたりして、至れり尽くせりのPHPカンファレンス札幌。

f:id:sakaik:20160416121605j:plain:w320 f:id:sakaik:20160416120842j:plain:h180 f:id:sakaik:20160416144818j:plain:h180



 セッションのほうはというと、最近PHPから離れていた私でも楽しめるような、全体の流れだったり考え方だったりを語ってくれる方が多くて、雰囲気としてたいへん参考になりました。とはいえ、やっぱりコードを書いていないと面白さが分からない部分もあり、今更リハビリすべきなのか(したい)、他のことに時間を割くべきなのかを迷うところ。


 大盛り上がりの懇親会を経て、2次会にも参加して、ラーメン食べて、札幌滞在にしては早めの2時前にはホテルに戻って充実の一日を終えたのでした。
熱いね、札幌。熱いね、PHP!!


北海道滞在中に食べたラーメン。順に、弟子屈@元祖ラーメン横町、白樺山荘@新千歳空港、北海道らーめん@女満別空港

f:id:sakaik:20160417014405j:plain:w240 f:id:sakaik:20160417102955j:plain:w240 f:id:sakaik:20160417134203j:plain:w240

MySQLの Milestoneリリース番号のれきし

MySQL 5.8.0-m17 の声が聞こえ始めました。初出はおそらく、yoku08253報告の、これ。>
https://bugs.mysql.com/bug.php?id=80372

そんな中、梶山さんのこんなツイートがあったので、整理してみました。

MySQL 5.8.0-m17 ~
MySQL 5.7.0-m10 ~ 5.7.6-m16
MySQL 5.6.0-m4 ~ 5.6.6-m9
MySQL 5.5.0-m2 ~ 5.5.3-m3

そして、Milestone1 は、というと、どうも、MySQL 5.4 シリーズの開発を終了して 5.5 に集約した際に、5.4自体を Milestone 1 と名付けたということのようです。

http://www.mysql.gr.jp/frame/modules/news/article.php?storyid=161

なので、我々一般人の目にはじめて触れた、「マイルストン番号」は m2 だったということになりますね。



[追記・訂正]
5.8.0-m17 という文字列の初出に関しては、すでに昨年7月には出ていたようです。
https://bugs.mysql.com/bug.php?id=77712

第6回札幌MySQL勉強会参画

第6回目となる「札幌MySQL勉強会」に参加してきました。
第5回も参加していたので、2度続けての参加となります。前回は2年半も前だけど(笑)。
atnd.org


f:id:sakaik:20160130183510j:plain

メニューはこんな感じ:

・@nobuhatanoさんの、「Mroonga を3年つかってみた」
・@yukiconExさんの、「ボトムアップで憶えるMySQL Nested Loop Join」
・やちさんの、PostgreSQL 9.5最新情報 
・坂井の、雑多な話(MySQL 5.7の最新情報とか新機能とかを中心に)

 これまで札幌には7,8回訪問していますが、一度も雪が降っているのを見たことがない。8回も行って一度もないということは、確率的に見て、これはもう「札幌に雪が降るというのはウソである!誰かの陰謀で作り上げられた虚像である!」と考えて良いでしょう。*1
 それを確かめるために、今回札幌にまた行ってみることにしました。

雪、ありました! なにやら形になっています! 札幌の雪、すごい!!
f:id:sakaik:20160130130727j:plain


 さて、勉強会の話に戻って、、、、
土曜日にも関わらず、10人くらいの方が参加されていました。富良野の勉強会とも繋いで、ご覧いただいていたのですが、あまりコミュニケーションが双方向でなく、せっかくなのにちょっと物足りなかったですね。一緒にやっている感を、次回ある時にはもうちょっと工夫してみたいところです。っていうか、中継じゃなくて、富良野、行きたい。

 私のお話は、
・自己紹介がてら、地元千葉県の紹介とかも
・「外に出よう」なご提案。「最先端じゃない情報も発信しよう!」なお話も。
MySQLの情報源や、MySQL5.7のお話

 の3つの部で構成させていただきました。
「外に出よう」なお話。自分の地元以外の場所での出逢いから、楽しいことが広がることも多いのですよ、という事をお伝えしたかったのですが、直前にバッサリ内容削った事もあって、ちょっと「伝わった感」が薄かったのが残念でした。コンパクトにぐぐっと伝えるテクニックが欲しい。。
 それから、MySQLを試して自分なりの発見があったとき、ブログ等に「自分なりの」気づきをどんどん書いて欲しいなぁと、常日頃から思っています。最先端の情報は今も盛んに投稿/更新されているのですが、そうでない部分の情報が「こんなの今更自分が書かなくてもいいよな」とか「みんな知ってるよね」などと勝手に判断して、書かない人が多いことでしょう。でも、「あなたよりも知らない人は、その情報を知らない」のです。あなたが、自分の前を行く人達の情報に助けてもらったように、あたなは、あなたの後ろから来る人のために道しるべを残して欲しい。そんなお話をさせていただきました。これ、ここ数十ヶ月(=数年)の私のテーマでもあるので、いずれ、もうちょっとまとまった形で整理したいなぁ。

 MySQL5.7については、要するに、速くなって、安全になって、いろいろ機能も増えた、という言葉がすべてです(笑)。新機能の中でも、今ちょっぴり spatial(空間情報)型に注目しているという紹介と、世間を騒がせた「パスワード360日問題」で次のマイナーバージョンではパスワード有効期限のデフォルトがゼロに変更されるよ、yoku0825さん++」というお話などをさせていただきました。
 資料公開しようと思ったけど、口頭補助を前提に作った資料だったので、見てわかるようにするのに手を加える必要がありそうです(あとまわしになっています。。)


 懇親会は、当然ジンギスカン。そしてその後は〆にラーメンを食べに行って、アタマもオナカも満足した札幌訪問でした。またやりましょう!

*1:種明かしすると、毎年ほぼ6月、たまに9月や11月に行っているのです

オープンソースカンファレンス(OSC)2015-Hamanako参加

 オープンソースカンファレンス2016浜名湖(OSC2016-Hamanako)に参加してきました。
浜松での開催で、初回(OSC-Hamamatsuと称していた時)以来の久々の参加です。
前の週と翌週とに別件の遠出の予定が入っていたので、今回のOSC-Hamanakoも参加しない予定だったのですが、昨年末の OSC2015-Tokushima でこちらの実行委員長さんに会ってしまい、「来てよ」と言われれば、行かないわけにはいきませんよね(笑)。
 http://www.ospn.jp/osc2016-hamanako/

f:id:sakaik:20160123093116j:plain


 OSCへの参加は、前夜祭が命! 濃い話も熱い話も満載となることが多いので、毎度楽しみにしています。今回も、金曜日の都内での用事を済ませた後に新幹線で浜松入り。マインシュロスというオシャレなビアホールでした。地ビールを売りにしているだけあって、ビールがおいしかったですね。その後は、有志で浜松餃子を食べに。すでにお腹は満足していたので、4人で3人前の餃子を頼んだのですが、あまりにおいしくて、更に4人前を追加しました。写真は4人前。
f:id:sakaik:20160122214919j:plain:h330 f:id:sakaik:20160122224205j:plain:w330


 とても良い、OSC2016-Hamamatsu 参加でした!!






・・・・と言いたくなるくらい、前夜祭で満足(笑)。

 当日は、出世大名家康くんも来てくれました。MySQLのマスコットであるイルカ(サキラ)とパチリ。f:id:sakaik:20160123101532j:plain:h300
比較的まったりとした会だったので、少し他のブースでお話を聞いたり、久々の知人らにご挨拶をしたりしながら、大部分の時間を自ブースでお喋りして過ごしました。いろんな事を教えてもらって、ついでにこの時間内に bugs.mysql にひとつ報告を揚げたりして、有意義でした^^
はじめて具体的に「MySQL 5.8」という文字を目にすることができたのも、大きな収穫。


 懇親会後、21:59の電車で帰路。通常の懇親会(1次会)を慌ただしくもなく最後まで居る事ができて、駅でおみやげ買う時間も十分にある状態で、帰宅できるというのは、新幹線やっぱりすごいですね。日本がぐっと狭くなる。土曜日の最終の東京に向かうひかり車内は、こんな感じ。
f:id:sakaik:20160123215847j:plain:w330

MySQL の "0000-00-00" は NULL?

数日前に、とみたまさひろさんのこんなツイートがありました。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.3.2 比較関数と演算子
"NOT NULL として宣言された DATE および DATETIME カラムでは、次のようなステートメントを使用することで、特殊な日付 '0000-00-00' を検索できます"

その後の twitter でのとみたさんとのやりとりも含め、なんじゃそりゃな仕様に興味を持ったので、自分でも試してみました。


テーブルを作ります。

mysql> CREATE TABLE dtsample (id integer, dt date);

データを入れます。一応中身も見てみる。

mysql> INSERT INTO dtsample values (1, null), (2, "0000-00-00"), (3, "0000-00-00"), (4, "2015-03-10"), (5, "2014-11-05"),(6,"2016-01-01");
mysql> SELECT * FROM dtsample;
+------+------------+
| id   | dt         |
+------+------------+
|    1 | NULL       |
|    2 | 0000-00-00 |
|    3 | 0000-00-00 |
|    4 | 2015-03-10 |
|    5 | 2014-11-05 |
|    6 | 2016-01-01 |
+------+------------+


このテーブルから、NULLのものと、NOT NULL のものを検索してみます。

mysql> SELECT * FROM dtsample WHERE dt IS NULL;           
+------+------+
| id   | dt   |
+------+------+
|    1 | NULL |
+------+------+

mysql> SELECT * FROM dtsample WHERE dt IS NOT NULL;
+------+------------+
| id   | dt         |
+------+------------+
|    2 | 0000-00-00 |
|    3 | 0000-00-00 |
|    4 | 2015-03-10 |
|    5 | 2014-11-05 |
|    6 | 2016-01-01 |
+------+------------+


あれれ? 普通ですね。6件のうち、IS NULLが1件、IS NOT NULLが5件。
もう一度マニュアルをよく読んでみましょう。

NOT NULL として宣言された DATE および DATETIME カラムでは、次のようなステートメントを使用することで、特殊な日付 '0000-00-00' を検索できます。

カラム定義として、NOT NULL 制約が必要だったようです。
やりなおおし。

mysql> CREATE TABLE dtsample2 (id integer, dt date NOT NULL);

mysql> INSERT INTO dtsample2 values (11, null), (12, "0000-00-00"), (13, "0000-00-00"), (14, "2015-03-10"), (15, "2014-11-05"),(16,"2016-01-01");
ERROR 1048 (23000): Column 'dt' cannot be null

mysql> INSERT INTO dtsample2 values (12, "0000-00-00"), (13, "0000-00-00"), (14, "2015-03-10"), (15, "2014-11-05"),(16,"2016-01-01");
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM dtsample2 WHERE dt IS NOT NULL;      
+------+------------+
| id   | dt         |
+------+------------+
|   12 | 0000-00-00 |
|   13 | 0000-00-00 |
|   14 | 2015-03-10 |
|   15 | 2014-11-05 |
|   16 | 2016-01-01 |
+------+------------+

 先ほどと同じデータを登録しようとしたら、カラムの NOT NULL 制約のために id=11 のデータが登録できなかったので、除外して登録しました。


 さて、ショータイムっ!

NULL のものと NOT NULL のものを、見てみましょう。まず IS NOT NULL。

mysql> SELECT * FROM dtsample2 WHERE dt IS NOT NULL;      
+------+------------+
| id   | dt         |
+------+------------+
|   12 | 0000-00-00 |
|   13 | 0000-00-00 |
|   14 | 2015-03-10 |
|   15 | 2014-11-05 |
|   16 | 2016-01-01 |
+------+------------+

 うん。NOT NULL なんだから、この5件が出ますよね。問題ない。
次に IS NULL。

mysql> SELECT * FROM dtsample2 WHERE dt IS NULL; 
+------+------------+
| id   | dt         |
+------+------------+
|   12 | 0000-00-00 |
|   13 | 0000-00-00 |
+------+------------+

 2件が出てきました。へんなの。
これは、マニュアルにも書いてあるとおり、バグではなく狙ってこのような仕様になっているとのことです。

ODBC では '0000-00-00' 日付値がサポートされていないため、一部の ODBC アプリケーションを取得する際に、これが必要になります。


 カウントも取ってみましょうか。

mysql> SELECT COUNT(*) FROM dtsample2 WHERE dt IS NULL;
+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+

mysql> SELECT COUNT(*) FROM dtsample2 WHERE dt IS NOT NULL;
+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+

 髪結新三もびっくり。大家さんもびっくり。
「上が十両、下が五両。十両と五両で十五りょ、、、、、りょりょりょ????」まぁ新三のお話の場合は十両と五両で18両くらいになったりするわけで両者ハッピーでしょうけど、RDBMSではこれは困ります。というか気持ち悪い。エチケット袋が必要です。


 更に、この NULL 判定については、微妙に半端な対応になっているようで、CASE文の中の判定では、"0000-00-00" も NULL とは判定されません。

mysql> SELECT id,
    ->        CASE WHEN dt IS NULL THEN 1 ELSE 0 END is_null, 
    ->        CASE WHEN dt IS NOT NULL THEN 1 ELSE 0 END is_not_null
    ->   FROM dtsample2;
+------+---------+-------------+
| id   | is_null | is_not_null |
+------+---------+-------------+
|   12 |       0 |           1 |
|   13 |       0 |           1 |
|   14 |       0 |           1 |
|   15 |       0 |           1 |
|   16 |       0 |           1 |
+------+---------+-------------+

 ID IN (12,13) のところでは is_null にも is_not_null にも 両方に 1 が立つことを期待していたのですが、そうはなりませんでした。WHERE dt IS NULL の COUNT(*) が2件もあったのにねぇ。


 こんな感じで、とみたまさひろさんの発見(発掘?)した、MySQL の新しい楽しみ方を紹介しました。みなさまよいお年を!

2015年12月:アドヴェントカレンダー「MySQLマニュアルを読む」記録(リンク集)

おそらく一生で最初で最後の「ひとりアドヴェントカレンダー」を完走した記念に、自分の日記のところでもカレンダー形式のリンク集を作って見ました、、、、、が、単純にはてな記法するだけだと崩れまくりです(^^; まぁいいや。

完走記念(というわけではありませんが)1月半ばに福岡で sakaikを囲む会(通称さかいかい)やります。福岡のみなさん、あそびましょ!呑むだけですが。

2015年12月:アドヴェントカレンダー「MySQLマニュアルを読む」

30 1MySQLのリファレンスマニュアルを読もう 2MySQLリファレンスマニュアルのURL 3MySQLマニュアルの「チュートリアル」 4MySQLの数値数学関数いろいろ 5MySQLマニュアルより「制限事項」 6MySQLマニュアルから「型」いろいろ
7MySQLの文字列関数はこんなにある 8MySQLで使うファイルフォーマットも書かれているマニュアル! 9MySQLのサンプルデータベースはココにある 10MySQLの構文をマニュアルでしっかり確認してみよう 11MySQL 5.7で一瞬だけ入ったSELECT構文内の句 12MySQLマニュアルの「Topic」での一覧表示 13MySQLの公式yumリポジトリでのメジャーバージョン更新方法
14MySQLメジャーバージョンアップ後に必要なスクリプト 15マニュアル以外にもあるMySQLの最新情報源 16MySQLマニュアルはダウンロードして手元にも! 17MySQLの様々な拡張方法を知る 18MySQLマニュアルの「INFOR MATION _SCHEMA」を読む 19MySQLの新しい「sys」スキーマ 20MySQLマニュアルでのバージョン番号の説明とか
21MySQLマニュアル、5.6と5.7の違い(Level 1) 22MySQLマニュアル、5.6と5.7の違い(Level 2) 23MySQL Workbench のマニュアルは本体とは別にあった 24MySQLサーバの複数立ち上げ 25MySQLマニュアル(html)に章番号とかが欲しい 26 27


qiita.com


■その他のMySQL関連(MySQLまたはMySQLな人)アドベントカレンダー2015
qiita.com
qiita.com
qiita.com
qiita.com