駄文。

プログラマーの日常でつまずいたこと・気づいたことなどの記録です

MySQLのGIS関数でST_DISTANCEとST_DISTANCE_SPHEREを使ってみた

MySQLGIS(地理情報システム, Geographic Information System)パッケージを使ってみた。

単に2点間の距離を計算して近い順に出力するだけなのですが。

カラムとしては Geometry型で宣言。 データはそのまま簡単にINSERTできないので型変換処理を行った形でST_GeomFromText('POINT(緯度 経度)')として緯度、経度データをINSERTする。

ちなみに POINT()の中の緯度、経度の区切りはカンマではなく スペースで区切る点注意します。

で2点間の距離を計算するには、

ST_DISTANCE( point1, point2)でできるらしい。

ちなみに GoogleMapで東京駅と渋谷駅の2点間の距離は ほぼ 6.42kmだった。

INSERT INTO LOCATION (NAME, P) VALUES ('東京駅', ST_GeomFromText('POINT(35.68135227790528 139.76740326253673)'));
INSERT INTO LOCATION (NAME, P) VALUES ('渋谷駅', ST_GeomFromText('POINT(35.65871263580799 139.70141567824763)'));

SELECT ST_DISTANCE(( SELECT P FROM LOCATION WHERE NAME='東京駅'),  (SELECT P FROM LOCATION WHERE NAME='渋谷駅'))

とやったところだいぶ想定よりも小さい値(0.06976327597386225)が出力された。

どうも調べると ST_GeomFromTextの際に単位系を設定していなかったためらしい*1 ユークリッド距離というものが計算されているらしく、求めてるメートル単位の計算にはならないらしい。

メートル単位にするには ST_GeomFromText()にSRIDというもので球面距離を示す4326を指定すると良いらしい。

で改めて以下のようなデータを投入しやり直してみる。

INSERT INTO LOCATION (NAME, P) VALUES ('東京駅', ST_GeomFromText('POINT(35.68135227790528 139.76740326253673)', 4326));
INSERT INTO LOCATION (NAME, P) VALUES ('渋谷駅', ST_GeomFromText('POINT(35.65871263580799 139.70141567824763)', 4326));

SELECT ST_DISTANCE(( SELECT P FROM LOCATION WHERE NAME='東京駅'),  (SELECT P FROM LOCATION WHERE NAME='渋谷駅'))

うーん、参考にしたページではうまくメートル単位で正しく出力されたのだが...

ということで改めてもう一つの ST_DISTANCE_SPHERE()を使用してみると今度はエラーが出てうまくいかない。

POINTの緯度、経度の指定を逆にしてみる。

INSERT INTO LOCATION (NAME, P) VALUES ('東京駅', ST_GeomFromText('POINT(139.76740326253673 35.68135227790528 )', 4326));
INSERT INTO LOCATION (NAME, P) VALUES ('渋谷駅', ST_GeomFromText('POINT(139.70141567824763 35.65871263580799 )', 4326));

SELECT ST_DISTANCE_SPHERE(( SELECT P FROM LOCATION WHERE NAME='東京駅'),  (SELECT P FROM LOCATION WHERE NAME='渋谷駅'))

あっさりメートル単位で距離が出力された(6470.655413168728)。

性能的には精度は落ちるが負荷が少ないのでうまくいけばST_DISTANCEを使用したかったのだが、今のところST_DISTANCE_SPHEREしか 正しく値を返さないので当面こちらでやることにする。

うーん、とはいえ緯度、経度を差し替えるとうまくいくという点はなんか納得できないなぁ。本家ドキュメント*2やここ*3でもMySQLは経度、緯度の順って書いてあるのに。

参考URL

*1:MySQLGISデータを扱う - Qiitaqiita.com

*2:本家ドキュメントdev.mysql.com

*3:PostGISとMySQL8のGIS機能の違いqiita.com

Google Bard vs Chat GPT

昨日 Google I/Oがあり、Bardの日本語版がリリースされた。 ということで早速利用してみた。

Google Workspaceアカウントはそのままでは使えず管理機能で Bardの利用を許可しておく必要があるので ひとまず、管理ダッシュボードで アプリ - その他のGoogleサービス - Early Access Appを有効にして準備はOK

bardにアクセス。

で、個人的にはコード作成支援機能を試してみたかったのでChatGPTでもよく試している以下の作業を依頼してみた

fastapi でセッション管理するコードを CBVで作成して

で、結果はコメントで CBVをクラスベースビューと推してくれているあたりは良いが、 実際に提示されたサンプルは 全くCBVになっていないあたりはまだまだという感じ ChatGPTはこの辺りの精度はなかなかなので、噂通りBardはChatGPTに比べると もう少し頑張って欲しいという感じが拭えない。

ついでに検索ベースのAIということBing版のGPT-4でもお試ししてみる。 こちらはちゃんとCBVベースのコードを作成してくれるのでやっぱり OpenAIの方がまだ現時点ではリード。

あと、Bardは回答を一気に表示する(表示するまではだいぶ待たされる)一方、 ChatGPT側はちょっとずつでも表示するので待たされる感は少なくUI的にも 優れている感じもあり、この点でもOpenAI系の勝利かな。

GoogleではAIをものすごい勢いで準備しているみたいなので期待はしていきたい感じではある。

pnpmってものもあるらしい

Vue3がリリースされ、ようやく普段使っているNuxt.jsもVue3をサポートしたNuxt3も使えるようになってきました。 ということでいよいよNuxt2からNuxt3に開発を移すべく調査を始めた。

で、さっそく むむっな事実が。

プロジェクト作成後、依存プロジェクトのインストールをするわけですが、 このコマンドが今までは

  • npm install
  • yarn install

とお決まりのコマンドと思っていたらなんと

  • pnpm install

と新しいコマンドが登場している。

なんだ pnpmとはとググってみると

Performant npm といわれ、DISK利用効率や処理速度向上を実現したパッケージ管理ツール らしい。

実際速いらしいが、node_modulesの管理形態が変わってグローバルで管理する方式になって いるのでちょっとした非互換が出ないかとかちょっと心配になってしまう。

pnpm で実行して npm でやってもうまく動作するんだろうかとかちょっと気になるけど ちょっと試してみようかな。

という感じでまだ Nuxt3.jsの道は続くのであった。


chat gpt に書き直してもらったら

ちょっと熱意を込めてと言ったら、暑苦しくなってしまった。

今日はとても熱心にお話ししたいことがあります。ついにVue3がリリースされ、私のお気に入りのフレームワークであるNuxt.jsもVue3をサポートするNuxt3が利用可能になりました。これは喜ばしいニュースです。

そこで、私はNuxt2からNuxt3への開発移行を始めるために調査を開始しました。早速ですが、驚くべき事実が発覚しました。

プロジェクトを作成した後、依存プロジェクトをインストールする必要がありますが、これまでは一般的に以下のコマンドを使用していました。

npm install
yarn install
ところが、新しいコマンドが登場しているのです。

pnpm install
この「pnpm」というコマンドは一体何なのか、私はすぐにググってみました。すると、「Performant npm」と呼ばれ、ディスクの使用効率や処理速度の向上を実現したパッケージ管理ツールであることがわかりました。

実際に使ってみると、驚くほど速いとのことですが、心配なのはnode_modulesの管理形態が変わり、グローバルに管理される方式になっていることです。これによって、何か互換性のない問題が発生する可能性があるかもしれません。少し心配になってしまいます。

しかし、pnpmでインストールしてもnpmで実行することができるのか、気になりますが、実際に試してみる価値はありそうです。

まだまだNuxt3の道のりは続いていますが、私はその道を進み続ける覚悟です。という感じで、今日はNuxt3への移行に関する報告でした。

で、さりげない感じで治してとしたらまぁ、ほどほどになったかな。

ついにVue3がリリースされ、Nuxt.jsもVue3をサポートしたNuxt3が使えるようになりました。そこで、Nuxt2からNuxt3への開発移行を検討することにしました。

その中で驚いたことがあります。プロジェクト作成後の依存プロジェクトのインストールは通常、"npm install"や"yarn install"というコマンドを使っていましたが、新しいコマンド"pnpm install"が登場しているんです。

これは「Performant npm」と呼ばれるパッケージ管理ツールで、ディスクの使用効率や処理速度の向上を実現しているそうです。実際には速いらしいですが、ちょっと心配なのは、管理形態が変わってグローバルで管理する方式になっていることです。非互換の問題が生じる可能性もあるかもしれません。

とはいえ、pnpmで実行してもnpmで問題なく動作するか試してみる価値はあると思います。Nuxt3への移行の道のりはまだまだ続きますが、私は進んで挑戦していきたいと思います。

参考サイト

zenn.dev

ESP32でmicro python

ESP32でデバイス開発をやろうとArduinoを立ち上げつくっていたが、ふとそういえばデバイス開発にpythonいわゆるmicro pythonというものがでてたなと思いだした。 ESP32でも使えるんだろうかとネットで調べるとサポートされていて使えるよう。

使うとなるといろいろ調べなきゃいけないのだが、目下必要そうな機能は簡単に使えそうってことが見えてきた。 ざっと調べたのは以下のあたり。

  • Webサーバ
  • HTTPSでHTTPクライアント機能
  • JSON
  • LED制御(neopixel)

今回は必要ないが今後もMicroPythonを積極的に使うとなると以下のあたりも調べていかないといけないかなと思っている。

  • VS Codeの開発環境
  • OTA機能
  • 外部モジュールの取り込み

今後の調査状況も共有していきます。


chat gpt に書き直してもらったら

今日はESP32でデバイス開発をするためにArduinoを使っていた。しかし、Pythonにはマイクロコントローラ向けのバージョンである「MicroPython」というものがあることを思い出した。これがESP32でも使えるのか、とネットで調べてみると、サポートされており使えることがわかった。

しかし、これを使うにはいろいろと調べる必要がある。現時点で必要そうな機能は簡単に使えそうだった。ざっと調べたところ、以下の機能が使えるようだ。

Webサーバ
HTTPSでHTTPクライアント機能
JSON
LED制御(neopixel)
これらは今回必要ない機能だが、今後もMicroPythonを積極的に使っていくためには、以下の機能も調べておく必要があると思っている。

VS Codeでの開発環境
OTA機能
外部モジュールの取り込み
今後の調査状況も共有していきたいと思います。

熱量を上げてと言って描き直してもらうと、ちょっと暑くなりすぎたw

今日は、ESP32でデバイス開発をしていたけど、いつものArduinoに飽きてきた。そんな中、Pythonにマイクロコントローラ向けのバージョンである「MicroPython」というものがあることを思い出した。これがESP32でも使えるのか、とネットで調べてみたら、サポートされていることが判明!

そこで、早速使ってみようと思ったけど、使うにはいろいろと調べる必要がある。でも、ざっと調べたところ、必要そうな機能は簡単に使えそうだった。例えば、WebサーバやHTTPSでHTTPクライアント機能、JSON、そしてLED制御(neopixel)などだ。

もちろん、今回必要ない機能もあるが、今後MicroPythonを使いこなすためには、VS Codeでの開発環境やOTA機能、外部モジュールの取り込みなども調べておく必要がある。でも、そのための調査も楽しくて仕方がない!

この熱い気持ちで、今後の調査状況も共有していきたいと思う!

VS Codeの Tunnel機能について

ちょっと前に VS CodeにTunnel機能ができたというので少し気になっていた。 あまり詳細を見ていなかったのでその時点ではリモートVS Codeの一形態で時間があればちょっと試そうくらいの思いだった。

ちょっと時間ができたので、ちょっとWEBで調べてみるといやぁ、これは私にとっては神ツールかもってくらいのものだった。 すでに知っている人には冗長ではあるが簡単に説明する。

普段使いのコンピュータ上のVS Codeの環境をリモートのコンピュータ上のVS Codeでそのまま動作させられるのである。

普段使いのPCで作業して、中途半端に作業していてもそのままリモートの端末で続きができちゃうのである。(もちろん保存していない作業は無理ですが) リモートで作業開始するとなると途端に開発環境を再セットアップしたりとか、意外に事前準備が多くて作業開始に数時間かかっていたりしていたことを考えるとそのままいつものPC上の環境で編集作業が継続できるとは最高ではないですか。

しかもこの機能、ブラウザからでも動作してしまうらしい。 なんだったらiPadでもできちゃう。

まぁ、iPadでのVSCodeの操作性はいいかは置いといて。 もしこれが実用的ならもうMac持ち歩かないでもいいかも。


Proofreading with chat gpt

今回の校正はすごいね。文句なしw

最近、VS CodeにTunnel機能が追加されたと聞いて、ちょっと興味を持っていたんだ。
詳細はあまり調べていなかったけど、リモートVS Codeの一種みたいで、時間があれば試してみようと思っていた。

今日、ちょっと時間ができたので、WEBで調べてみたら、これが私にとっては神ツールになるかもしれないと感じた。
詳しく説明すると、普段使っているコンピュータ上のVS Codeの環境をリモートのコンピュータ上のVS Codeでそのまま使えるっていうものなんだ。

普段使いのPCで作業して、中途半端に作業していても、リモートの端末で続きができちゃうんだ。(もちろん、保存していない作業は無理だけど)
リモートで作業を始めると、開発環境を再セットアップしたり、意外に事前準備が多くて作業開始に数時間かかっていたりするけど、この機能を使うと、いつものPC上の環境で編集作業を継続できるって最高じゃない?

しかも、この機能はブラウザからでも使えるんだって。
もしかしたら、iPadでもできるかもしれない。

まあ、iPadでVSCodeを使うのは使い勝手が悪いかもしれないけど。
もしこの機能が実用的だったら、もうMacを持ち歩かなくてもいいかもしれないな。

ThreadRipper ProとECOモード

ようやく ThreadRipper Pro のサーバが稼働し始めたが、個人的に一点だけやりきれなかったことがあります。

ThreadRipper ProはTDPが280Wとかなり燃料喰いなCPUなのです。まぁ、性能重視のCPUなのですが実際に 家で稼働させておくと常時そのような状況になるわけではなくある程度エコに使いたかったわけです。

AMDはそういう用途も見越して PBO(Precision Boost OverDrive)という機能が提供されていてその機能の一つに省電力モード(いわゆるECOモード)が提供されていました。 RyzenのみならずThreadRipper Proにも提供されておりこの機能を期待していたのです。

ただ、実際には今回導入したASUSPro WS WRX80E-SAGE SE WIFIには同機能は提供されていないことがわかり残念ながら利用できませんでした。

いままで使用してたRyzen 5950xとかは問題なく使えて省電力化に非常に有効だっただけにちょっと意外でした。

同機能はASUSは提供していないようですが、AsrockやMSIマザーボードでは有効になっているとのことでどうしてもという状況になったら マザー交換を少し検討してもいいかなと思いつつ、ありえないけどASUSBIOSを更新して機能追加してくれないかなとも淡い期待をしてしばらく放置することにしました。


Proofreading with chat gpt

相変わらず要点をとらえていい文章。ただ、ちょっと熱量が足りないかなぁ。

本日はThreadRipper Proのサーバがやっと稼働し始めた。しかし、私にとっては一つ残念なことがあった。

このCPUはTDPが280Wという、相当な電力を必要とするCPUである。性能を優先したCPUであるが、家で常に稼働させておくわけにはいかず、ある程度省エネで使用したかった。

幸い、AMDは省エネモード(ECOモードとも呼ばれる)の一つとしてPBO(Precision Boost OverDrive)という機能を提供している。この機能はRyzenだけでなく、ThreadRipper Proでも利用できることを期待していた。

しかしながら、導入したASUSの「Pro WS WRX80E-SAGE SE WIFI」にはこの機能が提供されておらず、利用できないことが分かった。以前使用していたRyzen 5950xなどは問題なくこの機能を使用して省エネ化に非常に有効だったため、少し意外だった。

ASUSはこの機能を提供していないが、AsrockやMSIのマザーボードではこの機能が利用できるとのことで、もし絶対に必要になった場合はマザーボードの交換を検討するかもしれない。また、ASUSがBIOSを更新してこの機能を追加してくれることを期待して、しばらく放置することにした。

で、熱量を持った感じでとリライトしてもらった。

今日、私のThreadRipper Proサーバがやっと稼働し始めたが、悔しいことに一つだけ納得できないことがある。

このCPUはTDPが280Wもある、かなりのエネルギーを必要とするCPUだ。確かに、このCPUはパフォーマンスを優先しているが、家庭で常に使用するわけにはいかない。私は少しでもエコに使用したかった。

幸い、AMDはPBO(Precision Boost OverDrive)という機能を提供しており、省エネモードの一つとして利用できることを期待していた。しかしながら、私が導入したASUSの「Pro WS WRX80E-SAGE SE WIFI」には、この機能が提供されていなかった。私は非常に残念だった。

以前に使用していたRyzen 5950xなどは、この機能を使用することで省エネに非常に効果的だったため、今回の結果には少し驚いた。

ASUSはこの機能を提供していないが、AsrockやMSIのマザーボードにはこの機能があるとのことで、もし必要ならマザーボードを交換することも検討している。しかし、ASUSがBIOSを更新してこの機能を追加してくれることを期待して、しばらくはこの問題を放置するつもりだ。私にとっては、これはかなりの挑戦だが、私はこの問題に取り組むことを決心した。

かなりいい感じだ。

ESXi 8.0U1が出ているが、まだアップデートできない、もとい まだしない。

最近、ESXiのバージョンをあげていないなぁということでvCenterで最新イメージを確認したところ 8.0U1がリリースされていました。 早速アップデートと思ってイメージの検証をしたところ、fling usb network driverがライブラリ依存性を満たせず検証エラーになってしまった。

実際今は、usb network driverは使用していないのであげても良い気がしますが、もうちょっと待てばdriverがアップデートされそうなので 今回は見送りにします。

8.0U1のリリース日が4/18なので、こんなこともあるよねって記録です。

  • Proofreading with chat gpt

文章の質は良いけど、なんとなくちょっとおかしい感じ。まぁ、元の文章が変だからかw

今日は、ESXiのアップデートを試みましたが、思わぬトラブルに遭遇しました。最新のバージョンがリリースされたとのことで、早速vCenterでイメージを確認したところ、8.0U1がリリースされていました。

しかし、イメージの検証をすると、fling usb network driverがライブラリ依存性を満たせず検証エラーになってしまいました。現在は、usb network driverを使用していないため、アップデートしても問題はないかもしれませんが、やはり確認を怠るわけにはいきません。

そこで、少し待ってから再度検証を行うことにしました。リリース日が4/18なので、もう少し待てばdriverがアップデートされる可能性が高いと思われます。

こういったトラブルは、アップデートを試みる際にはつきものですね。今回は見送りとなりましたが、次回のアップデートでは同様の問題が発生しないよう、しっかりと検証を行っていきたいと思います。