Ruby の Socket.tcp を知った

Ruby で TCP のクライアントとしてサーバーに接続するには TCPSocket.open(TCPSocket.new)を使うもんだと思ってたんだけど、最近 Socket.tcp というのもあることを知った。 どうやら 1.9.2 で追加されたらしい。10年以上も気づかなかった…。サーバー側の Soc…

UPDATE1文だけでもデッドロックするという話

デッドロックは複数のトランザクションが複数のレコードをロックする場合にタイミングによって発生する。 トランザクションAがレコード1をロック→成功 トランザクションBがレコード2をロック→成功 トランザクションAがレコード2をロック→2のロックの解放待ち…

MySQLマニュアルの差分

MySQL 8.0.x はパッチレベルのリリースで機能追加がされていくんだけど、マニュアルは常に 8.0 の最新版しか公開されてない。 MySQL は OSS だけど、MySQL のマニュアルは自由なライセンスではないしリポジトリも公開されてない。 ライセンスは自由でなくて…

MySQL徹底入門第4版からの差分

2020年7月に出た「MySQL徹底入門 第4版」という本は MySQL 8.0.20 をベースとしてたんですが、ご存知の通り MySQL 8.0 はパッチリリースでどんどん機能が追加されてったりするんで、同じ 8.0 でも最新版とは機能の差分が出てしまってます。 ということで、自…

Ubuntu で Vuetify を始めるためのメモ

Node も npm も Yarn も Vue もよくわかってないけど見様見真似でやった。どうせ忘れるのでメモ。 Node.js のインストール OS の nodejs が入ってる場合はなんだかわからないけど依存関係でエラーになったので削除しておく。 sudo apt remove nodejs https:/…

MySQL Parameters のデータの作り方

これは MySQL Advent Calendar 2020 の 25日目の記事です。 MySQL Parameters というページのメンテをしてます。 MySQL Paramters は MySQL のバージョン間の差分を表示できるものです。 現在次のバージョンを比較できます。 5.0.96 5.1.72 5.5.58〜62 5.6.3…

Ruby Net::SMTP

Ruby Net::SMTP これは 富士通クラウドテクノロジーズ Advent Calendar 2020 と FUJITSU Advent Calendar 2020の 5日目の記事です。 会社のアドベントカレンダーですが、記事の内容は会社とは関係ありません。 nagano.rb #6 で発表したネタです。 SMTP SMTP …

MySQL 8.0.22 で `ORDER BY ?` のプリペアドステートメントがフリーズする原因

tmtms.hatenablog.com の続き。 C API だと ORDER BY ? のプリペアドステートメントでクライアントがフリーズするというのを書いたんだけど、Go だと問題ない という話があったので、MySQL のプロトコルを追ってみた。 プリペアドステートメントを発行すると…

CentOS 7 の mysql コマンドでの日本語入力

某所で CentOS 7 で mysql コマンドで日本語入力ができないという話を見かけた。 mysql> プロンプトで日本語を入力しようとしても確定すると消えてしまうらしい。 自分は Ubuntu で普通に入力できてるので調べてみた。 結論からいうと、これはロケールの問題…

MySQL 8.0.22 DNS SRV レコードサポート

MySQL 8.0.22 の新機能で DNS SRV レコードのサポートというのがあったので試してみた。 https://dev.mysql.com/doc/refman/8.0/en/connecting-using-dns-srv.html MySQLサーバー3台 (a.example.com, b.example.com, c.example.com)とそれに接続するためのク…

MySQL 8.0.22 のプリペアドステートメントの非互換

MySQL 8.0.22 のリリースノートによるとプリペアドステートメントまわりに非互換があるらしい。 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-22.html For a prepared statement of the form SELECT expr1, expr2, ... FROM table ORDER BY ?,…

オープンソースの定義について

OSS

こんな Togetter が話題になってた。 togetter.com オープンソースソフトウェアはOSIに認められたオープンソースライセンスで配布されるソフトウェアのことであり、それ以上でもそれ以下でもない これに違和感が。「オープンソースの定義(OSD)」に準拠したラ…

MySQL の接続まわりのエラー

MySQL で Host '〜' is blocked because of many connection errors が出るのってどういうときだっけ…とふと思ったので接続周りを調べてみた。 クライアントごとの連続接続失敗によるブロック マニュアル https://dev.mysql.com/doc/refman/8.0/en/blocked-h…

MySQL Parameters - プラグインとコンポーネントを有効にして Variable も追加

MySQL Parameters というページを公開してたら @tmtms still love this https://t.co/388NNoxxfr but would be so cool to have group_replication parameters too ;-)— lefred (@lefred) 2020年7月24日 と言われたんだけど、mysqld --no-defaults --help --…

Miアカウントに「+」が含まれているとパスワードをリセットできない

諸般の事情によりMiアカウントを作った。 Miアカウントについてはこの辺参照。 win-tab.net メールアドレスで作れるんだけど、この手のやつはローカルパートに "+サービス名" をつけて作ってるので、今回も ほげほげ+mi@gmail.com で作った。 スマホで入力し…

Xiaomi Redmi Note 9S のクイック設定パネルのリセット方法

1ヶ月ほど Redmi Note 9S を使ってて、クイック設定パネルのアイコンの並び替えができないことに気がついた。 どうやら通常は「編集」というアイコンがあるらしいんだがそれがない。 どうも初期セットアップ時に Google アカウント連携して設定を引き継ぐと…

Xiaomi Redmi Note 9S

先月新しいスマホ Xiaomi Redmi Note 9S を買った。 2018/8/6 に HTC U11 life を買って2年弱。おサイフケータイと防水がついてる日本仕様なのは良かったが、そのためかアップデートが全然されない。 買った時は Android 8 だったんだけど、そのうち Android…

Re: MySQL の NOW() と SYSDATE()

自分は全然気にしたことなかったんだけど、MySQL の NOW() と SYSDATE() は異なるらしい。 sakaik.hateblo.jp MySQL 8.0 のマニュアル (https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_sysdate) にも確かにちゃんと書かれ…

「MySQL徹底入門 第4版」が出るよ

「MySQL徹底入門 第4版」が 7/6 に発売される。 www.shoeisha.co.jp 電子書籍は翔泳社の直販がDRMフリー(たぶん)だからオススメ。 著者用見本誌も届いたので、さすがにこれからやっぱり発売できませんでした!ってことにはならないと思う。 長かった。 本当…

Slackのフォント変更&favicon設定

Migu フォントが綺麗に表示できるようになったことだし、Slack でも Migu フォントを使いたかったんだけど、Slack アプリではフォントを設定できないらしい。 会社ではオンラインミーティングの Slack Call のためにアプリを使ってたんだけど、最近は Zoom …

Windows のブラウザでフォントを綺麗に表示する

自分は Migu フォントが好きで使ってるんだけど、Windows のブラウザ上でこのフォントを使うと何故か字が汚く表示される。 まあ Windows なんて使わなきゃいいんだけど、会社では Windows を使わざるを得ない。 しかたないのかなーと思ったらこういう記事を…

AndroidスマホをLinux PCのカメラにする

自分の作業机は正面に27インチディスプレイを置いてノートPCはその脇に置いてるんだけど、Zoom とかのオンラインミーティングで顔出しする時にPCのカメラだと斜めからの映像になって良くないなーと思ってて、Webカメラつけるのもいいかと思ったんだけど今品…

mrubyudf : C を書かずに Ruby だけで MySQL の UDF を作る

昨日はmrubyでMySQLのUDFを作ってみたんだけど、関数毎にCのプログラムを書くのがめんどくさいので、簡単なツールを作ってみた。 github.com 詳しくは README 参照。 fib.rb と fib.spec をこんな感じで作っておいて、 fib.rb LONG_LONG_MAX = 9223372036854…

RubyでMySQLのUDFを作る

昨日はCでMySQLのUDFを作ってみたんだけど、今日はRubyで作ってみる。Rubyと言ってもmrubyだけど。 mrubyは5年ぶりくらいに使ってみたんだけど、相変わらずドキュメントが少なくてなかなかつらい…。 まず mruby のビルド。MySQLのUDFは共有ライブラリにしな…

MySQLのユーザー定義関数(UDF)

MySQLのユーザー定義関数(UDF)は大昔に作った記憶があるけど、最近作ってなかったので試しに作ってみたメモ。 関数の中身はなんでも良かったんだけど、フィボナッチ数を求める fib()を作ってみた。 ちゃんと知りたい場合は、マニュアルとかサンプルプログラ…

Puma と Sequel

最近仕事でまた Ruby を使い始めて、簡単な Web API を Grape + Sequel で作ったりした。 SQLで書きたいクエリが分かってる場合は、Sequel の方が ActiveRecord よりも簡単に使えて良い。 レイヤー的には Arel と同じような感じなのかな。Arel 使ったことが…

Ubuntu MATE で Win+P(Super+P)を無効化する

[追記] Ubuntu MATE 20.04 で Win+P は無効になった。やったー https://launchpad.net/ubuntu/+source/mate-settings-daemon/1.24.0-1 + Drop 0001_new_video_key.patch. Rejected upstream. Ubuntu 17.10 から Ubuntu MATE を使ってるんだけど、Ubuntu MAT…

Rack アプリでクライアントのIPアドレスを取得する

Rack アプリで、クライアントのIPアドレスを取得する方法を調べてみたのでメモ。 どうやら Rack::Request#ip を使えばいいらしいので Rack アプリはこんな感じで。 [config.ru] class HogeApp def call(env) req = Rack::Request.new(env) [200, {}, [ "req.…

Grape

簡単な API サーバーを Ruby で作ろうと思って Rails じゃ大げさすぎるし Sinatra かなーと思ってたら Grape というのがあったので試してみてる。 自分用のメモなので、ちゃんと知りたい人は https://github.com/ruby-grape/grape/blob/master/README.md を…

MySQL 8.0.19 のオフセットつき日時リテラル

MySQL 8.0.19 のリリースノート にこんなのがあって、 MySQL now supports datetime literals with time zone offsets, such as '2019-12-11 10:40:30-05:00', '2003-04-14 03:30:00+10:00', and '2020-01-01 15:35:45+05:30'; these offsets are respected …