去年のクリスマスに第87回 MySQLでケーキを焼いてみるという記事を発表させていただきました。その後ご縁がありまして8月29日から8月31日まで開催されていたBuilderscon 2019の前夜祭で発表を行ってきました。Buildersconでよく言われることは
今回はそのブログに代わりまして、
また、
参考にさせていただいた発表
今回の道普請便りの発端としては、
発表の中では、
開発環境
今回はMacにHomebrewを利用して導入したMySQL8.v12.
を利用しております。Homebrewの導入方法に関しては紹介を行いませんが、homebrew install node
としてインストールしたものを利用しております。
またWindowsやLinuxで挑戦される方はBluetooth接続ができないとドローンと通信することができないので、
使用したドローン
今回使用したのは、

飛行時間は9分程度なので、
ドローンを飛ばすための準備
さてMySQLでドローンを飛ばす方法ですが、
今回はMySQLからnode.
まずはドローンを飛ばすためのプログラムを用意しましょう。今回はParrot MamboをMac(Mojave)から操作する - 2019版という記事を参考に上昇と下降だけできるプログラムを用意します。まずは必要なモジュールをインストールしましょう。今回必要なのは 、minidrone
と同期処理を行うためのライブラリのtemporal
です。
$ npm install minidrone $ npm install temporal
用意したプログラムはこちらになります。
const minidrone = require('minidrone');
const temporal = require('temporal');
const drone = new minidrone.Drone();
drone.connect(function() {
drone.setup(function() {
drone.flatTrim();
drone.startPing();
drone.flatTrim();
console.log('Connected to drone', drone.name);
temporal.queue([
{
delay: 2000,
task: function() {
drone.takeOff()
drone.flatTrim()
},
},
{
delay: 2000,
task: function() {
drone.land()
},
},
{
delay: 2000,
task: function() {
temporal.clear()
process.exit(0)
},
},
]);
})
});
2秒間飛び上がって、
続いてMySQL側の準備をしていきます。今回は、
#include <mysql.h>
extern "C" {
bool flight_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void flight(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
void flight_deinit(UDF_INIT *initid);
}
bool flight_init(UDF_INIT *initid, UDF_ARGS *args, char *message){
return 0;
}
void flight(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){
system(node /usr/local/bin/flight/flight.js");
}
void flight_deinit(UDF_INIT *initid){
}
これを以下の様にコンパイルして配置します。今回はMacでのコンパイルのため一部オプションが変更されています。コンパイル時にmysql_
でプラグインのディレクトリを指定して直接配置します。
$ gcc --shared -o `mysql_config --plugindir`/udf_flight.so `mysql_config --cflags` flight.cc
コンパイルが終わったらmysqlコマンドラインクライアントでMySQLにログインして、
mysql> CREATE FUNCTION flight RETURNS STRING SONAME 'udf_flight.so';
最後にmysqlコマンドラインクライアントからflightコマンドを実行すると、
mysql> select flight(); +----------+ | flight() | +----------+ | NULL | +----------+ 1 row in set (9.68 sec)
ということでMySQLからドローンを飛ばすことができました。
まとめ
というわけで今回はBuildersconで学んだことを組み合わせて、
その際には単純に模倣するだけではワクワク感が少ないので、
また今回の不満点としましては、