タグ

ブックマーク / blog.tmtms.net (8)

  • MySQLパラメータ比較 - tmtms のメモ

    Vue.js の勉強をしようと思ってMySQLのバージョン間のパラメータを比較できるページを作ってみました。 MySQL Parameters やってることは、あらかじめ mysqld --no-defaults -v --help の出力からパラメータの名前と値を JSON にしておいて、それを表示しているだけです。 環境によってデフォルト値が動的に変わるようなパラメータもあるのですべて信用できるわけではないですけど、まあ参考くらいにはなるかなと。 自分が 5.7 と 8.0 の比較を見てみて気づいたのは、 basedir のデフォルト値が mysqld の実行パスから動的に生成されるようになった。 date-format, datetime-format なんてパラメータが今まであったの知らなかった。 へー query-cache まわりはパラメータ自体なくなったのか…。 とかとか。

    MySQLパラメータ比較 - tmtms のメモ
  • MySQLの文字コード事情 - tmtms のメモ

    この前 MySQL Casual に登壇して、「MySQLの文字コード事情」と称して発表してきました。 終電の都合で途中退席しましたが楽しかったです。また機会があれば参加したいです。 発表スライドはこちら MySQLの文字コード事情 2017版 from Masahiro Tomita www.slideshare.net 以下、補足のような何か。 「Charset≒エンコーディング (MySQLに限らない)」 英語版のWikipediaでもcharsetは Character encoding にリダイレクトされます。 自分がcharsetという用語に出会ったのはおそらくメールのContent-Typeヘッダが初めてだったと思います。 今ではメールだけではなくHTTPのヘッダでも使用されています。 なお、CharsetはInternet Assigned Numbers Authorit

    MySQLの文字コード事情 - tmtms のメモ
  • Ruby の Enumerable#sum - tmtms のメモ

    「最近のruby-core (2016年7月)」に次のような記述がありました。 Enumerable#sum というメソッドが追加されており、特定の場合(浮動小数点数の配列とか)には誤差が累積しないアルゴリズムが採用されています。 Ruby 2.4 に Enumerable#sum が追加されたのは知ってましたが、「誤差が累積しない」というのは知りませんでした。 というか、元々誤差が累積しない加算の目的で追加されたものだったのですね(最近のruby-core (2016年3月))。単純に 「#inject(:+)」にわかりやすい名前をつけただけなのかと思ってました。 簡単に試してみます。浮動小数点演算で、0.1を10個足すと1.0にならないというのはよく知られていますね。 > 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 => 0.999999999999

    Ruby の Enumerable#sum - tmtms のメモ
  • MySQL で utf8 と utf8mb4 の混在で起きること - tmtms のメモ

    MySQLUTF-8 で使おうと思ってハマりがちなのは charset utf8 を指定してしまうことです。 MySQLUTF-8 には歴史的事情により utf8 と utf8mb4 の二つあります。 UTF-8 は1バイト〜4バイトで1文字が構成される文字コードですが、MySQL の utf8 は4バイト文字を扱うことができません。ハマりたくなければ utf8mb4 を使いましょう。 utf8 を使ってしまった場合に4バイト文字がどのように扱われるか、自分でもうろ覚えだったのでメモしておきます。 登録 接続が utf8mb4 でカラムが utf8mb4 あたりまえですが、そのまま登録されます。 mysql> insert into utf8mb4 (c) values ('美味しい🍣と🍺'); mysql> select * from utf8mb4; +--------

    MySQL で utf8 と utf8mb4 の混在で起きること - tmtms のメモ
  • Ruby の Timeout の仕組み - tmtms のメモ

    Ruby で長い時間掛かるかも知れない処理のタイムアウトを行うにはこんな感じにします。 require 'timeout' begin Timeout.timeout(3) do # 3秒でタイムアウト hoge # 何かの処理 end rescue Timeout::Error puts 'なげーよ' # タイムアウト発生時の処理 end Timeout.timeout はブロック開始時にスレッドを作成し、そのスレッドで指定された秒数だけ sleep して、sleep から復帰してもまだブロックが終わってなければ作成元のスレッドに対して Timeout::Error 例外を発生させます。 指定時間以内に処理が終わる場合: timeout(X) │ スレッド作成 ─┐ │ │ ブロック実行 sleep X │ │ スレッドkill→ 🕱 │ timeout復帰 指定時間以内に処理が終わら

    Ruby の Timeout の仕組み - tmtms のメモ
  • 文字化けメールその2 - tmtms のメモ

    スパムメール…というかフィッシングメールが送られてきたのですが、文字化けしていました。 文字化けメール研究家としては(ry メーラーで見ると Subject と文が次のようになっていました。 From: 【りそな_y行】 <mp@resona-gr.co.jp> Subject: 人_J_^サ_`ビス 文字化けとしてはちょっと珍しい感じでなので、ソースを見てみます。 From: =?GB2312?B?ob6k6qS9pMrjedDQob8=?= <mp@resona-gr.co.jp> Subject: =?GB2312?B?sb7Iy9VK1F6ltalgpdOluQ==?= これを素直にデコードすると、「【りそな〓y行】」「人〓J〓^サ〓`ビス」となります。「〓」は変換に失敗した部分です。 charset が GB2312 となっています。GB2312 は中国で使われている文字エ

    文字化けメールその2 - tmtms のメモ
  • 文字化けメール - tmtms のメモ

    DELL にユーザー登録したらメールが送られてきたんですが、そのメールが文字化けしてました。 文字化けメール研究家としては解析せざるを得ません。 メーラーで見ると Subject が次のようになっていました。 デルアカウントに$4EPO?$$$?$@$-!"$"$j$,$H$&$4$6$$$^$9! メールのソースを見ると次のようになっていました。 Subject: =?iso-2022-jp?Q?=1B=24B=25G=25k=25=22=25=2B=25=26=25s=25H=24K?= =?iso-2022-jp?Q?=244EPO=3F=24=24=24=3F=24=40=24=2D=21=22=24=22=24j=24?= =?iso-2022-jp?Q?=2C=24H=24=26=244=246=24=24=24=5E=249=1B=28B=21?= この Subject の

    文字化けメール - tmtms のメモ
  • メールアドレスの正規表現 - tmtms のメモ

    たまにメールアドレスの形式を正規表現で表すのは不可能とかというのを目にするのですが、そんなことはありません。入れ子がなければたいていの文字列の形式は正規表現で表すことができます。 ということで、RFC5321, 5322 からメールアドレスの正規表現を書いてみました。 /\A([0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+(\.[0-9a-z!\#$%&'*+\-\/=?^_`{|}~]+)*|\"([\x20\x21\x23-\x5b\x5d-\x7e]|\\[\x20-\x7e])*\")@[0-9a-z]([0-9a-z-]*[0-9a-z])?(\.[0-9a-z]([0-9a-z-]*[0-9a-z])?)*\z/i ちょっと長いですけど、最近の Ruby だと (?<hoge>) と \g<hoge> を使うことで、同じ正規表現の繰り返しを簡単に書くことができる

    メールアドレスの正規表現 - tmtms のメモ
  • 1