More elegant MySQL greeting message(???).

We have received a wonderful greeting message from the MySQL Community Team again this year.

"A Message From the Community Team":
https://blogs.oracle.com/mysql/post/a-message-from-the-community-team-2024https://blogs.oracle.com/mysql/post/a-message-from-the-community-team-2024

select char(32,95,32,32,32,32,95 using ASCII)
union
select char(124,32,124,32,32,124,32,124 using ASCII)
union
select char(124,32,124,95,95,124,32,124,32,32,95,95,32,95,32,32,95,32,95,95,32,32,32,95,32,95,95,32,32,32,95,32,32,32,95 using ASCII)
union
select char(124,32,32,95,95,32,32,124,32,47,32,95,96,32,124,124,32,39,95,32,32,124,32,39,95,32,32,124,32,124,32,124,32,124 using ASCII)
union
select char(124,32,124,32,32,124,32,124,124,32,40,95,124,32,124,124,32,124,95,41,32,124,124,32,124,95,41,32,124,124,32,124,95,124,32,124 using ASCII)
union
select char(124,95,124,32,32,124,95,124,32,92,95,95,44,95,124,124,32,46,95,95,47,32,124,32,46,95,95,47,32,32,92,95,95,44,32,124 using ASCII)
union
select char(32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,124,32,124,32,32,32,32,124,32,124,32,32,32,32,32,32,95,95,47,32,124 using ASCII)
union
select char(32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,124,95,124,32,32,32,32,124,95,124,32,32,32,32,32,124,95,95,95,47 using ASCII)
union
select char(32,95,32,32,32,32,95,32,32,32,32,32,32,32,32,32,95,32,32,95,32,32,32,32,32,32,95 using ASCII)
union
select char(124,32,124,32,32,124,32,124,32,32,32,32,32,32,32,124,32,124,40,95,41,32,32,32,32,124,32,124 using ASCII)
union
select char(124,32,124,95,95,124,32,124,32,32,95,95,95,32,32,124,32,124,32,95,32,32,32,95,95,124,32,124,32,32,95,95,32,95,32,32,95,32,32,32,95,32,32,95,95,95 using ASCII)
union
select char(124,32,32,95,95,32,32,124,32,47,32,95,32,92,32,124,32,124,124,32,124,32,47,32,95,96,32,124,32,47,32,95,96,32,124,124,32,124,32,124,32,124,47,32,95,95,124 using ASCII)
union
select char(124,32,124,32,32,124,32,124,124,32,40,95,41,32,124,124,32,124,124,32,124,124,32,40,95,124,32,124,124,32,40,95,124,32,124,124,32,124,95,124,32,124,92,95,95,32,92 using ASCII)
union
select char(124,95,124,32,32,124,95,124,32,92,95,95,95,47,32,124,95,124,124,95,124,32,92,95,95,44,95,124,32,92,95,95,44,95,124,32,92,95,95,44,32,124,124,95,95,95,47 using ASCII)
union
select char(32,95,95,95,95,95,95,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,95,95,47,32,124 using ASCII)
union
select char(124,32,32,95,95,95,95,124,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,124,95,95,95,47 using ASCII)
union
select char(124,32,124,95,95,32,32,95,32,95,95,32,32,95,95,95,32,32,32,95,32,95,95,32,95,95,95 using ASCII)
union
select char(124,32,32,95,95,124,124,32,39,95,95,124,47,32,95,32,92,32,124,32,39,95,32,96,32,95,32,92 using ASCII)
union
select char(124,32,124,32,32,32,124,32,124,32,32,124,32,40,95,41,32,124,124,32,124,32,124,32,124,32,124,32,124 using ASCII)
union
select char(124,95,124,32,32,32,124,95,124,32,32,32,92,95,95,95,47,32,124,95,124,32,124,95,124,32,124,95,124 using ASCII)
union
select char(32,95,95,32,32,95,95,32,32,32,32,32,32,32,32,32,32,95,95,95,95,95,32,32,32,95,95,95,95,32,32,32,95 using ASCII)
union
select char(124,32,32,92,47,32,32,124,32,32,32,32,32,32,32,32,47,32,95,95,95,95,124,32,47,32,95,95,32,92,32,124,32,124 using ASCII)
union
select char(124,32,92,32,32,47,32,124,32,95,32,32,32,95,32,124,32,40,95,95,95,32,32,124,32,124,32,32,124,32,124,124,32,124 using ASCII)
union
select char(124,32,124,92,47,124,32,124,124,32,124,32,124,32,124,32,92,95,95,95,32,92,32,124,32,124,32,32,124,32,124,124,32,124 using ASCII)
union
select char(124,32,124,32,32,124,32,124,124,32,124,95,124,32,124,32,95,95,95,95,41,32,124,124,32,124,95,95,124,32,124,124,32,124,95,95,95,95 using ASCII)
union
select char(124,95,124,32,32,124,95,124,32,92,95,95,44,32,124,124,95,95,95,95,95,47,32,32,92,95,95,95,92,95,92,124,95,95,95,95,95,95,124 using ASCII)
union
select char(32,32,32,32,32,32,32,32,32,32,95,95,47,32,124 using ASCII)
union
select char(32,32,32,32,32,32,32,32,32,124,95,95,95,47 using ASCII);


But the mumumumumultipul UNION is not elegant for us.
We are database engineer, so we need more SQL like SQL.

This is one of the answer:

Make data:
CREATE TABLE greeting (id integer, m integer, p json);
INSERT INTO greeting VALUES
(1,32,'[1,3,4,5,6]'),(1,95,'[2,7]'),(2,32,'[2,4,5,7]'),(2,124,'[1,3,6,8]'),
(3,32,'[2,7,9,10,13,15,16,18,21,22,23,25,28,29,30,32,33,34]'),
(3,95,'[4,5,11,12,14,17,19,20,24,26,27,31,35]'),(3,124,'[1,3,6,8]'),(4,32,'[2,3,6,7,9,11,14,17,20,21,23,26,27,29,31,33]'),
(4,39,'[18,24]'),(4,47,'[10]'),(4,95,'[4,5,12,19,25]'),(4,96,'[13]'),(4,124,'[1,8,15,16,22,28,30,32,34]'),
(5,32,'[2,4,5,7,10,14,17,21,24,28,31,35]'),(5,40,'[11]'),(5,41,'[20,27]'),(5,95,'[12,19,26,33]'),
(5,124,'[1,3,6,8,9,13,15,16,18,22,23,25,29,30,32,34,36]'),(6,32,'[4,5,9,17,22,24,29,30,35]'),(6,44,'[13,34]'),
(6,46,'[18,25]'),(6,47,'[21,28]'),(6,92,'[10,31]'),(6,95,'[2,7,11,12,14,19,20,26,27,32,33]'),(6,124,'[1,3,6,8,15,16,23,36]'),
(7,32,'[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,19,20,21,22,24,26,27,28,29,30,31,35]'),
(7,47,'[34]'),(7,95,'[32,33]'),(7,124,'[16,18,23,25,36]'),(8,47,'[35]'),
(8,32,'[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,20,21,22,26,27,28,29,30]'),
(8,95,'[17,24,32,33,34]'),(8,124,'[16,18,23,25,31]'),(9,95,'[2,7,17,20,27]'),
(9,32,'[1,3,4,5,6,8,9,10,11,12,13,14,15,16,18,19,21,22,23,24,25,26]'),(10,40,'[19]'),
(10,32,'[2,4,5,7,9,10,11,12,13,14,15,17,22,23,24,25,27]'),(10,41,'[21]'),(10,95,'[20]'),(10,124,'[1,3,6,8,16,18,26,28]'),
(11,32,'[2,7,9,10,14,15,17,19,21,22,23,27,29,30,33,35,36,38,39,40,42,43]'),
(11,95,'[4,5,11,12,13,20,24,25,31,32,34,37,41,44,45,46]'),(11,124,'[1,3,6,8,16,18,26,28]'),
(12,32,'[2,3,6,7,9,11,13,15,17,20,22,24,27,29,31,34,37,39,41,44]'),(12,47,'[10,23,30,43]'),(12,92,'[14]'),
(12,95,'[4,5,12,25,32,45,46]'),(12,96,'[26,33]'),(12,124,'[1,8,16,18,19,21,28,35,36,38,40,42,47]'),
(13,32,'[2,4,5,7,10,14,17,20,23,27,30,34,37,41,46]'),(13,40,'[11,24,31]'),(13,41,'[13]'),(13,92,'[43,47]'),
(13,95,'[12,25,32,39,44,45]'),(13,124,'[1,3,6,8,9,15,16,18,19,21,22,26,28,29,33,35,36,38,40,42]'),
(14,32,'[4,5,9,15,22,29,36,41]'),(14,44,'[26,33,40]'),(14,47,'[14,47]'),(14,92,'[10,23,30,37]'),
(14,95,'[2,7,11,12,13,17,20,24,25,27,31,32,34,38,39,44,45,46]'),(14,124,'[1,3,6,8,16,18,19,21,28,35,42,43]'),
(15,32,'[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,41]'),
(15,47,'[40]'),(15,95,'[2,3,4,5,6,7,38,39]'),(15,124,'[42]'),(16,47,'[41]'),(16,95,'[4,5,6,7,38,39,40]'),
(16,32,'[2,3,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]'),
(16,124,'[1,8,37]'),(17,32,'[2,6,7,9,12,13,17,18,19,21,24]'),(17,95,'[4,5,8,10,11,14,15,16,20,22,23,25,26,27]'),
(17,124,'[1,3]'),(18,32,'[2,3,8,14,16,18,20,23,25,27]'),(18,39,'[9,21]'),(18,47,'[13]'),(18,92,'[17,28]'),
(18,95,'[4,5,10,11,15,22,26]'),(18,96,'[24]'),(18,124,'[1,6,7,12,19]'),(19,32,'[2,4,5,6,8,10,11,13,17,20,22,24,26,28]'),
(19,40,'[14]'),(19,41,'[16]'),(19,95,'[15]'),(19,124,'[1,3,7,9,12,18,19,21,23,25,27,29]'),(20,32,'[4,5,6,10,11,12,18,22,26]'),
(20,47,'[17]'),(20,92,'[13]'),(20,95,'[2,8,14,15,16,20,24,28]'),(20,124,'[1,3,7,9,19,21,23,25,27,29]'),
(21,32,'[1,4,5,8,9,10,11,12,13,14,15,16,17,23,24,25,30,31,32]'),(21,95,'[2,3,6,7,18,19,20,21,22,26,27,28,29,33]'),
(22,32,'[2,3,6,7,9,10,11,12,13,14,15,16,18,24,26,29,31,33]'),(22,47,'[5,17,25]'),(22,92,'[4,30]'),
(22,95,'[19,20,21,22,27,28]'),(22,124,'[1,8,23,32,34]'),(23,32,'[2,4,5,7,9,11,12,13,15,17,22,23,25,27,28,30,33]'),
(23,40,'[18]'),(23,47,'[6]'),(23,92,'[3]'),(23,95,'[10,14,19,20,21]'),(23,124,'[1,8,16,24,26,29,31,32,34]'),
(24,32,'[2,7,10,12,14,16,21,23,25,27,28,30,33]'),(24,47,'[5]'),(24,92,'[4,17,22]'),(24,95,'[18,19,20]'),
(24,124,'[1,3,6,8,9,11,13,15,24,26,29,31,32,34]'),(25,32,'[2,4,5,7,10,14,16,22,25,30,33]'),(25,41,'[21]'),
(25,95,'[12,17,18,19,20,27,28,35,36,37,38]'),(25,124,'[1,3,6,8,9,11,13,15,23,24,26,29,31,32,34]'),
(26,32,'[4,5,9,14,23,24]'),(26,44,'[13]'),(26,47,'[22]'),(26,92,'[10,25,29,31]'),
(26,95,'[2,7,11,12,17,18,19,20,21,26,27,28,30,33,34,35,36,37,38]'),(26,124,'[1,3,6,8,15,16,32,39]'),
(27,32,'[1,2,3,4,5,6,7,8,9,10,14]'),(27,47,'[13]'),(27,95,'[11,12]'),(27,124,'[15]'),(28,32,'[1,2,3,4,5,6,7,8,9]'),
(28,47,'[14]'),(28,95,'[11,12,13]'),(28,124,'[10]');
SQL like SQL:)
set @@cte_max_recursion_depth=1500;
WITH RECURSIVE 
  seq AS (SELECT 0 AS n UNION ALL SELECT n + 1 FROM seq WHERE n < 100),
  ex AS ( SELECT g.id, g.m, JSON_UNQUOTE(JSON_EXTRACT(g.p, CONCAT('$[', seq.n, ']')))+0 v
            FROM greeting g JOIN seq ON JSON_LENGTH(g.p) > seq.n
)
SELECT GROUP_CONCAT(CHAR(m USING ASCII) ORDER BY v SEPARATOR '')
FROM ex GROUP BY id;
Result:

Try it yourself!

Next

I believe that this data structure can be made more elegant.
Would anyone like to give it a try?

Conclusion

Have a good New Year!!


OSC2024福岡 に参加

2024年12月7日に 福岡で開催された OSC2024 Fukuokaに参加してきました。
event.ospn.jp

 RubyWorld Conferenceからの続きで前日に松江から福岡入り、OSC終了後はそのまま小倉に行って宿泊(博多・天神の宿が取れなかった)という慌ただしい参加形態となりました。

 今年の会場は久々の九州産業大学。展示会場とセミナールームがとても近いレイアウトで、とても良かったですね。セミナーの合間に少しブースを回ってみるなどがやりやすく、会場全体に活気が生まれていたように感じました。



 2024年の一年間は各地で「いまいまMySQL2024」と題して、新しくなったリリーススタイルであるLTS/InnovationReleaseの話を中心に紹介してきました。普段MySQLの情報に注目している人にとっては「またこの話?」という感じはあるかなと思うのですが、思ったほどこの情報は(一生懸命MySQL情報に目を光らせているわけではない人にとって)拡がっていないようで、それなりの好評はいただけたとの感触を得られました。
 資料もいっぱい公開しているので、来年は少し新ネタを探していこうかなと思います。


 そんなわけで、2024年のOSCもこの福岡が最後。 今年もたくさんの出会いがあり、たくさんのみなさんにお世話になりました。ありがとうございました。

RubyWorld Conference 2024 参加

2024年12月5,6の両日に島根県松江市で開催された RubyWorld Conference 2024に行ってきました。
2024.rubyworld-conf.org


 Ruby関連イベントに参加させていただくのは、松本でのKaigi、昨年のWorldに続いて3回目です。
昨年来てみて雰囲気が良かったのと、色々な人と会えて色々なことを教えてもらえたのがとっても良い体験だったので、今年も参加することにしました。あと、日程的に週末のオープンソースカンファレンス(OSC)と連続で参加できるということで、ある意味「通り道」だったからというのも参加への背中を押された要因でもあります。
(昨年は木金とRubyWorldに参加して土曜移動で日曜にOSC広島に参加、今年は木金とRubyWorldに参加して金曜夜移動して土曜にOSC福岡でした)

 会場に向かう橋には、たくさんののぼり、

 夜には電波塔や駅前のテルサがRubyカラーにライトアップされているなど、カンファレンス会場のハコの中だけでなく街を使って盛り上げている様子が、とてもわくわくさせられます。

しまねっこも参加する RubyWorld Conference


 講演のほうは、Rubyを題材にしつつも必ずしもRubyに特化された内容ではない話が多かったのが、普段あまりRubyに触れているわけではない私にとっては非常に楽しめました。人を育てる側、育った側。不思議な文字集合にひたすらパーサーの話をする人や(自称)誰も使っていないものをいっぱい作っている人。
スポンサーセッションとしては、筑波大学から頑張っている人たちがいたのが印象的でした。TOKIUMさん、覚えた!(そして物忘れも良いほうなので、定期的に何らかの視界に入るような活躍を期待しております)

 ブースで、あるいはレセプションや前夜祭などでも沢山の人とお話させていただきました。久々に会う方や、今回初めてお話させていただく方など。昨年来たことを覚えてくださっていたのも嬉しかったです。また来ちゃうぞ!って気になってしまいますね。
そして、知り合いが少なくて、ともすればぽつんとしそうな私に、いろんな人を紹介してくださったとみたさん、今年もどうもありがとうございました!おかげで3倍楽しめました!


 移動時間を睨みつつでしたが、無事最後には閉会式完了まで見届けて、そのまま出雲空港に向かいました(福岡行き)。
行き帰りのルートも地上を這ったり無駄に遠回りしたので、あとで noteのほうに書こうと思います。

 

今回お話きかせてくださった登壇者のみなさん、個別にお話させていただいたみなさん、どうもありがとうございました。今後ともよろしくお願いします。

MySQLのGIS機能2024

 このエントリは、RDBMS-GIS(地理情報・位置情報) Advent Calendar 2024 の1日目です。「RDBMS-GIS Advent Calendar」では今年も参加者を熱烈募集中です。「はじめて触ってみた」という内容も熱烈歓迎ですので、この機会にお使いのRDBMSでぜひ地理情報の操作に挑戦してみませんか。


 さて。このエントリはMySQL の Spatial機能(GIS機能)、2024年の進化のまとめです。MySQLは臨時のリリースがない限りは通常、3ヶ月に一度、年4回のアップデート・バージョンが公開されるので、年4回のMySQL 8.0シリーズのリリースについて書けば良さそうなものですが、今年は LTSと Innovation Releaseに分かれたほか、8.0系と8.4系もあるので、盛りだくさんになりました。 バージョン番号は盛りだくさんですが、GIS機能の進化はどうでしょうか。

リリースノートから、この1年の進化を見てみましょう。

MySQL 8.0シリーズ

MySQL 8.0.36 (1月)

 "spatial"関連の修正事項なし

MySQL 8.0.37 (4月)

 "spatial"関連の修正事項なし 

MySQL 8.0.38 (7月)

 SRIDを持つ列を含む空間インデックス関連の不具合が修正されました。空間インデックスが空でありインデックスが有効に使われない事象と、FORCE INDEXで強制的に使おうとすると "unplanned exit" が発生する事象でした。

MySQL 8.0.39 (7月)

 (8001個以上のテーブルがある時にMySQLが立ち上がらなくなるという不具合に対する緊急リリースであるため、その他の機能についてはほとんど修正なし)

MySQL 8.0.40 (10月)

 "spatial"関連の修正事項なし 

MySQL 8.4 LTSシリーズ

LTSシリーズは基本的に追加機能とかは行われないことになっているので、Spatial関連の新機能についてもそもそも期待薄。

MySQL 8.4.0 LTS(4月)

 "spatial"関連の修正事項なし 

MySQL 8.4.1 LTS (7月)

 MySQL 8.0.38 と同様の空間インデックス関連の不具合修正。

MySQL 8.4.2 LTS (7月)

 (MySQL 8.0.39と同様、緊急リリースのため、他の機能については修正なし)

MySQL 8.4.3 LTS (10月)

 "spatial"関連の修正事項なし 

MySQL Innovation Releases

MySQL 8.3.0 Innovation (1月)

 グループレプリケーションの group_replication_set_as_primary() が、新しいプライマリが選出される前に DDLとDCLの完了を待つようになった。このDDLの中にはCREATE SPATIAL REFERENCE SYSTEM文と DROP SPATIAL REFERENCE SYSTEMが含まれているので、一応GIS機能に影響のある修正ということで。

MySQL 9.0.0 Innovation (7月)

 MySQL 8.0.38と同様の空間インデックス関連不具合修正。

MySQL 9.0.1 Innovation (7月)

 (MySQL 8.0.39と同様、緊急リリースのため、他の機能については修正なし)

MySQL 9.1.0 Innovation (10月)

 "spatial"関連の修正事項なし 


まとめ

 全体を通してみると MySQL 2024年の進化は、空間インデックス関連の不具合が修正された、の1点だけと言えそうです。ちょっと遅々としている感じがありますね。関数の数が多ければ良いというものでもありませんがひとつの指標としてST_*関数を見てみると、PostGISは300個近く、対するMySQLは100個弱ということで大きく差が開いています。
 ひとにMySQLGIS機能を勧めたときに「PostGISでできるアレ、MySQLでできないんですね」として採用を見送られるのは(せっかく一瞬こっちを向いてくれたのに)非常に勿体なく寂しいので、少しずつでも対応関数を増やしていってもらいたいものです。Boost::Geometryへの呼び出し口を作るだけじゃないの?と思っているのですが、そんなに簡単な話でもないのかな?
 2025年のMySQL GIS機能に期待したいと思います。

OSC2024愛媛に参加

2024年11月16日に松山市で開催された オープンソースカンファレンス2024愛媛(OSC2024 Ehime)に参加してきました。
event.ospn.jp


 日本各地で開催されているOSCですが、愛媛での開催は実に12年ぶり。もともと四国に於いては「OSC四国」として四県持ち回りで開催することにしていたと聞いたことがありますが、コロナ期を挟んでなかなか再開出来ない状況だったようです。久々の四国開催。会場は愛媛大学
 今回も日本MySQLユーザ会(MyNA)として参加してきました。いつもどおりブース展示とセミナーひと枠です。

MySQL ユーザ会のセミナー

 今年ずっと、MySQLの最新情報、とくに大きく変わったバージョン体系(リリース方針)について説明しました。大きく頷いて聞いてくださったりと、とてもお話しやすい会場でした。ありがとうございます。
 最近、持ち時間に対して資料を詰め込みすぎることが多く、駆け足で説明する習慣が付いてしまっていたのですが、この資料はゆったり喋って良い作りだったことを忘れていて、超特急で話して30分くらいで終わってしまいました。失敗(持ち時間は45分)。
 残り時間、とみたさん作成の MySQL Parameters を実演しながら最新版の変更点などを紹介させてもらいました。これはこれで、じっくりお話できる場ではしっかり紹介したかったものなので、私は結果としてよかったと思っているのですが、予定外の対応だったこともあって見ている方はどうだったかな。。無理矢理時間埋めるために、つまらない話を始めたと思われていなければ良いのですが・・・・。

MySQL Parameters:
https://mysql-params.tmtms.net/

発表資料:
speakerdeck.com




MySQLユーザ会のブース

 狭いながらも楽しいブース(本当に狭かった(笑))をやってきました。

 午前のセミナーの中で案内したこともあってか、いつもよりもブースでお話してくれる人が多かった気がします。展示していた書籍も見ていただいたり、見た結果気に入ってその場で(オンラインで)注文してくださったりした方もいました。ありがとうございます。
ブースでは、最近開催したセミナーの発表資料をスライドショーで流していたのですが、足を止めて眺める人も多く、懇親会でも「あのスライドにあった件だけど」と話題を振ってくれる人もいて、展示した甲斐がありました。

懇親会とか前夜祭とか

 いっぱいお話できて楽しかったです! というのは大前提として、その中で実は体調が絶不調だったこともあってテンション低かったり後ろ向きだったり(もう帰りたい、とか)いろいろ周りの皆さんにはごめんなさい。実は朦朧と、というほどではないけれど、上の空というかぼーっとした感じというか、そんな感じで参加していました。
 それでも楽しめちゃうのは、コミュニティの持つ場の力というのはすごいものだなと感じます。大学の(しかも同じ学類の)後輩にあたる方に出会えて懐かしい場所の話に花が咲いたり、少し私が知っている知識と経験のお話が役に立ったといっていただけたり、充実した時間でした。

全体の印象

 全国各地のOSC、それぞれに独特の雰囲気というものがあるのですが、今回の愛媛は特に強い熱気を感じました。「今年もいつもどおりやるかぁ」という感じではない、「久々に俺たちやったるぞ!!!」という運営側の勢い、滅多に開催されないイベントが開催される物珍しさ(なんたって12年ぶりですから)、そういったものが重なって、ある意味、初期のOSCのような力強さを感じてとても心地が良かったです。

前後の日程は

 行きにはちょっと面白い特急列車、帰りの日には佐田岬のほうへと訪問していました。松山城にも行きました。そのへんの話はのちほど時間が取れるときに noteのほうに書きたいと思います。

追記:note書きました。アンパンマン列車に乗ったり佐田岬に行ったりしました。本エントリと合わせてご笑覧いただけましたら。
note.com

FOSS4G 2024 Japan に参加しました

2024年11月9日と10日に開催された FOSS4G 2024 Japan に参加してきました。

www.osgeo.jp

FOSS4G Japan とは

 ジオ系OSSのイベント FOSS4G というイベントが世界中で、そして日本でも何カ所かで開催されています。”FOSS4G"という名前自体は一般名詞のようなもので、色々な人がそれぞれ自由に開催できるのですが*1、その中で OSGeo日本支部(OSGeo.JP)が主催する年1回の大規模大会が FOSS4G Japan です。去年は福井で、コロナ前には新潟で開催したりしています。

Day 1 ハンズオンデイ

 あまりじっくりとハンズオンを受けることは、実は私はあまりないのですが、今回は @shi-works さんが講師という事で受講させてもらうことにしました。データ操作の部分に注目してジオ系と接しているので、ビジュアライズ部分がとても苦手なのです。 Twitter(X)上でいつも、目に付いたデータを片っ端からビジュアライズしている(ように見える)shi-worksさん(勝手に通称 shi- さん=しーさん=と呼んでいます(笑))に教われる機会など滅多にないので、この機会に!と飛びつきました。

 ハンズオンというと、入力するために時間を取られたり(それも貴重な体験のための時間でもあるのですが)、その打ち間違いでのバグ探しに時間を取られたり(これも貴重な体験なのですが)という部分でどうしても時間密度が薄くなってしまうのですが、shi-さんの講座は予めワンセットになった動作するファイル群が7つほど用意され、それを部分的にコピペしながら(言い換えると部分的に有効にしながら)、そのコードによる効果を確認していくというスタイルでした。いいな、これ。私の実習系セミナーでも使わせてもらおう(笑)。
 そんな感じで、細かいコードの意味とかは分からないけど「これくらいのこんな感じのコードでこんなことができる」ことを一通り駆け足で体験し、濃厚な3時間を過ごしたのでした。細かいコードは後から見れば良い。

 それにしても、3Dデータは高さの概念、、というか、データのゼロメートルの概念がそれぞれで、難しいですね。実際に自分が使うデータを決めてしまえば、それについて一旦理解しておけば良いのですが、あれもこれも教えてもらったので、そのまちまちの仕様が印象に残りました。

Day 2 コアデイ

 コアデイというのはようするにセミナーデイです。応募してくれた人になるべくお話してもらおうとの考えから(学校での開催なので部屋はあるから)、結局4トラックでの開催に。すごい。
 私も(OSGeo.JPの団体会員でもある日本仮想化技術(株)さんの枠として)ひとつお話をさせていただきました。仕事として検証作業を続けている 「爆速DB Powered by PG-Strom」について、地理空間情報データの扱い、列指向Arrowファイルの扱い、登記所備付地図データの複雑なクエリ の3本立てをみっちり15分に詰め込みました。全体として駆け足の説明になりましたが「GPUパワーのデータベース」の面白さが伝わったかなという感触を、壇上からも感じておりました。終了後にも何人の方にお声がけいただき、追加で説明させていただいたりして、ここ最近の私の発表の中ではかなり「反応が良い」ものとなり、たいへんありがとうございました。

定期的にやっている「爆速DB "PG-Strom" 勉強会」、次回は12月16日に渋谷での開催を予定しています(Apache Arrowの話題です)。ぜひお越しください。(このブログを書いている時点ではまだ参加申込み始まっていませんが、以下のURLからイベント参照可能になる予定なのでチェックしていただけましたら)
https://bakusokudb.connpass.com/

[11/12 17:00追記] 12月16日の勉強会申込みページが公開されました!
bakusokudb.connpass.com



 今回の発表資料は以下の場所で公開しています。
speakerdeck.com

 
 他の皆さんの発表も大変興味深いものが多く、今回のテーマである「飛び出せ」つまり3Dデータに関するもの、みんな大好き登記所備付地図データのことなどのお話を聞かせてもらいました。FOSS4Gってジオ系つまり地理情報に関すること、という事しか言っていないので、範囲は非常に広い。データの収集、取得から格納、加工、分析、ビジュアライズ。データの種類自体も測量データからPOI、点群データまで様々。 自分のよく知らない分野のお話も聞かせてもらいつつ、私としてはデータをあれこれいじりまわす部分について特にもっと触れていきたいなとの意識を新たにしました。
 最後のパネルディスカッションの枠は、もうちょっとパネリストの皆さんどうしが絡むような仕掛けが欲しかったなとは感じました。6人の登壇者がそれぞれ短く語るのが集まっただけで「ディスカッション」要素がほとんどなかったのが、惜しまれます*2。 それでもひとりひとりにじっくり語ってもらえるという部分では、それぞれのお話は非常に面白かったです。

懇親会

 またやってしまいましたよ、最初にお寿司を3つくらい食べた後、あちこちでお喋りしていて全然ごはんを食べないやつ。まぁごはん取りに行くよりお話したいという意思で、ほぼ意図的にやっている部分はあるのですが(笑)。 そんな感じなので、いろいろな方と再会したり初めてだったりとお話をさせていただく貴重な時間になりました。 居た人とのお話はとても楽しかったのですが、遠く(特に関東以外)からお越しの方で月曜休めないから、と参加せずに帰られた方も少なからずいて、この点だけを見ると、土日開催よりも、金曜はハンズオン、土曜にセミナー形式という形にするメリットも大きいのかなとも感じました。

まとめ

 数年前に初めて岡山だったか名古屋だったか(どちらが先か覚えていない)の関連イベントに初めて参加して以降、界隈の皆さんにいつもとても親切にしていただいています。ジオ系あたたかい。今回もこんな「専門外」の私ではありますが、会場で何人もの方に声をかけていただいたり、積もる話をしたり、(普通なら専門外すぎて居場所がないのに)自分の「居場所」のように感じさせられる暖かさがあります。ありがたい。
 それぞれが、重なっているような重なっていないような経験と知識を持つ人が沢山集まるこういう場、大切にしていきたいですね。この大きなイベントの運営に関わられた皆さんに感謝申し上げます(私も運営委員という立場ではありますが、今回のイベントに関してはほぼ戦力外でした)。そして発表された皆さん、参加されたみなさんにも大きな感謝を!


追記:「PG-Stromに向かない処理とは」

 私のセミナー発表の質疑にて「PG-Stromが速いことは分かった。逆に、向かないのはどういうところかを聞きたい」という質問をいただきました。限られた時間で回答をひねり出そうとして「向いているところ以外は向いていないんです」とか「向かないような処理の場合は実行計画でGPUではなくCPUを使うことを選択してくれるので大丈夫です」のような、答えになっているんだかなっていないんだか分からない説明になってしまいました(本人は一生懸命だったのですがw)。
 改めて開発者含めてチーム内でも軽いディスカッションしてみて、求められていたものに近づきそうな感じが得られたのでここで説明させていただきます。3つあります。
 まず「ある程度の規模(セミナーでも説明したような)のデータに対してストレージの読込やGPU並列処理で高速化するものなので、データ量が少ない場合は、あまり効果が得られない」というもの。 それから「GPUは同じ処理を同時並行でできることで高速を得られるものなので、色々な人が同時大量に色々なクエリを実行するもの(OLTP)での効果よりはOLAP的な使い方で効果を得られる」こと。そしてクエリ処理全体の中でのGPUの役割という視点から「PostgreSQLのエクステンションなので、CPUで最終処理をして結果を返す。GPUの役割はその最終処理に渡す結果を大きく絞り込むこと(射影や集約)とも言える。なので、そもそも絞り込めない(減らない)ものは、GPU-CPUのやりとりのコストが大きくなりがち」といったあたりです。
 これを、さらっとあの場で返せたら良かったのですが(たぶん格好も良かったw)、後日となりましたがこちらで説明追加とさせていただきます。良い質問いただいて、ありがとうございました!
 



*1:といいつつ、だいたい同じものに興味を持っている狭い世界ですので開催主体が異なってもだいたいお互い知っている人同士だったりします

*2:だから「パネリスト」ではなく「パネラー」という変な言葉を使ったのかなと想像してしまったり(笑)←たぶん関係ない

OSC2024 Tokyo/Fallに参加してきました

2024年10月26日に、東京は浅草で開催された、オープンソースカンファレンス2024東京・秋(OSC2024 Tokyo/Fall)に、日本MySQLユーザ会(MyNA)としてブース出展してきました。

event.ospn.jp

各地のOSCに参加していますが、やはり東京開催は格段に出展コミュニティが多いですね。
会場到着して急いで設営して、知り合いのブースに挨拶回りをしていたら既にお昼を大きく過ぎていました(途中で一度、自ブースに戻って色々やっていた時間も含みますが)。それでも、いっぺんに久々の方々も含めて再会できるこの場は貴重でありがたいものです。

 その後はMySQLのブース(と、時々OSGeo.JPのブース)で来場された方に説明したりしていましたが、熱心に興味を持って質問をしてくださる方も多かったので、出展した甲斐を感じました。今回のことが(うちのブースだけでなくてもどこかのブースでの話が)きっかけになって、何か新しい事を始める人が出たら、嬉しいですね。






 私の方もだんだん、OSCの出展に時間を取ることが難しくなってきています。日本MySQLユーザ会ではブースのお手伝い(あるいは積極的に出展)してくれる人を募集しているので、希望する方は連絡ください。(Twitter(X)やBlueskyの ハッシュタグ #mysql_jp をご利用ください)