背景 Amazon Aurora(MySQL互換)のダンプを取ろうとしたところ、以下のメッセージが表示されてうまくいきませんでした。
% mysqldump hogehoge --skip-column-statistics --single-transaction --default-character-set=utf8mb4 mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'root'@'%' (using password: YES) (1045) AWS RDSとMySQL 8.0.32の組み合わせが悪いらしく、同じ症状の人がいました。
AWS RDSにmysqldump: Couldn’t execute ‘FLUSH TABLES WITH READ LOCK’: Access denied for userが出て接続できなくなった mysqldump has incompatibile change in MySQL 8.0.32 手元のmysqldumpのバージョンを確かめてみると、思いっきり影響を受けるバージョンですね。
mysqldump Ver 8.0.32 for macos13.0 on x86_64 (Homebrew) MySQL 8.0.33で修正される見込みのようですが、2023年3月29日現在未リリースです。 リリースサイクルをよく把握してないですが、MySQL 8.0 Release Notesを見る限り、 1, 4, 7, 10月のリリースのようですね。 4月まで待てば解決・・・なんですが、そこまで待っていられないので、MySQL 8.0.31へダウングレードすることにしました。
TL;DR SSH経由でGitHubに接続したら、以下のメッセージが表示されました。
% ssh -T github.com @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s. Please contact your system administrator. Add correct host key in /Users/shogo.
「全人類兎化計画」がエラいと思ったのでメモとして残しておきます。
サブドメインで公開していて偉い https://t.co/gA7pxJK5iA
— f96fd3a0-bdb9-4f10-b69f-8f765c1d341c ICHINOSEShogo (@shogo82148) January 1, 2023 こういう特設サイトを公開するときは、新しいドメインをとりがちですが、「全人類兎化計画」の特設サイトのドメインは hololivepro.com のサブドメインになっています。
「全人類兎化計画」の特設サイトも公開中!
🔽特設サイトはコチラ🔽https://t.co/po5ocM1VQ6#全人類兎化計画 #兎田ぺこら #ホロライブ
— ホロライブプロダクション【公式】 (@hololivetv) January 1, 2023 ドメインは企業の貴重な財産なので、きちんとした管理が必要です。 うっかり手放すとフィッシング詐欺に利用されたり、アダルトサイトに改変されたりするので、一度ドメインをとったら永遠に管理し続けなければなりません。 管理対象が増えると管理も大変です。
一方サブドメインなら、廃止しても他人に取られることはありません。クローズ時に考慮することが減るので楽ちんです。
ホロライブプロダクションのコンテンツは、LPサイトも含めてすべて hololivepro.com のサブドメインになっていますね。エラい!
全人類兎化計画|ホロライブプロダクション rabbit-plan.hololivepro.com hololive SUPER EXPO 2023 & hololive 4th fes. Our Bright Parade Supported By Bushiroad hololivesuperexpo2023.hololivepro.com hololive(ホロライブ)公式サイト | ホロライブプロダクション hololive.hololivepro.com HOLOSTARS(ホロスターズ)公式サイト holostars.hololivepro.com hololive production OFFICIAL SHOP [ホロライブプロダクション公式ショップ] shop.hololivepro.com ハイスクール・ホログラフィ|ホロスターズ highschool-holography.hololivepro.com みんなにも真似してほしいので紹介しました。 悪い見本はよく話題になるんですが、実際にサブドメインを利用している例はあまり見ないので。
ところで「全人類兎化計画」とはいったい・・・。
GolangでQRコード、マイクロQRコード、rMQRコードのジェネレーターを作りました。
shogo82148/qrcode 作った理由は、「QRコードの復元能力はどういうマジックなんだろう?」と昔から気になっていたからです。 エンコードの方法は分かったものの、なぜ復元できるのかはわからぬままですが・・・。
また、2022年5月に発表されたrMQRコードにも対応しています。
デンソーウェーブ、細長く狭いスペースにも印字できる 長方形型の新しいQRコード「rMQRコード」を開発 使い方 qrcode.Encodeにバイト列を渡すと、 QRコードの画像をimage.Imageとして返します。 あと通常の画像と同じように扱えるので、image/pngなどで書き出してください。
package main import ( "bytes" "image/png" "log" "os" "github.com/shogo82148/qrcode" ) func main() { img, err := qrcode.Encode([]byte("Hello QR Code!")) if err != nil { log.Fatal(err) } var buf bytes.Buffer if err := png.Encode(&buf, img); err != nil { log.Fatal(err) } if err := os.WriteFile(filename, buf.Bytes(), 0o644); err != nil { log.Fatal(err) } } QRコードは日本生まれの規格なので、漢字を効率的に格納するモードがあります。 JIS X 0208の範囲内にある文字は自動的に漢字モードになります。
package main import ( "bytes" "image/png" "log" "os" "github.
Perl Advent Calendar 2022に穴が空いてしまったときの 穴埋め用に温めていた記事です。 無事完走したので公開してしまいます。
v5.38からmodule_true feature pragmaというのが入る予定らしいので試してみました。 v5.38は未リリースなので、開発版のv5.37.5で検証しています。
今まで挙動 Perlモジュールの末尾に1;という謎の記述を見たことはありませんか?
# SomeModule.pm package SomeModule; sub import { warn "You imported a module!\n"; } 1; どこかに代入しているわけでもないので、ムダな一行に見えます。 しかしこの一行がないとモジュールの読み込みに失敗する場合があります。 以下のように1;を削除して、このモジュールを読み込んでみましょう。
# SomeModule.pm package SomeModule; sub import { warn "You imported a module!\n"; } # program.pl use FindBin; use lib "$FindBin::Bin"; use SomeModule; $ perl program.pl SomeModule.pm did not return a true value at program.pl line 3. BEGIN failed--compilation aborted at program.pl line 3.
Perl Advent Calendar 2022無事完走しました! \( ‘ω’)/ウオオオオオアアアーーーッ! 参加してくださった皆様ありがとうございました。
じつはAdvent Calendarに穴が空いたときのために、いくつかネタを用意しておきました。 もう穴埋めは必要なくなったので公開してしまいます。
開発版のPerl 5.37.3に乱数のシード値を固定する機能が入りました。 来年公開予定のPerl 5.38.0にも導入されるはずです。
今までもsrand()の引数に数値を渡せばシード値の固定はできます。 今回入った修正は、これを環境変数経由で行えるようにするものです。 PERL_RAND_SEED 環境変数を使います。
Perlのコンパイル Perl 5.37.3は開発版なのでビルド済みのバイナリは配布されていません。 plenvを使っていればビルドは簡単です。 開発版の警告を抑制するために -Dusedevelオプションの指定を忘れずに。
動作確認 以下のような乱数を10個だけ出力するスクリプトを用意します。
use v5.36; for (1..10) { say rand(); } 毎回違う結果が返ってきました。
% perl random.pl 0.3062362396895 0.674135064563842 0.0578670173801008 0.202610859737383 0.818887900456577 0.806449494310058 0.941361073774114 0.418245360994739 0.213317030100743 0.850036874006719 % perl random.pl 0.177429965538071 0.0390786576058133 0.735923747570393 0.226016785340967 0.00169495133475905 0.0499404466099662 0.842366507879287 0.0750512089990352 0.765357514136131 0.0965085242066834 % perl random.pl 0.458207000353472 0.00957464109839634 0.335823093113628 0.969883105574759 0.789114886557474 0.0210666821658236 0.
この記事は、Perl Advent Calendar 2022 の4日目の記事です。 3日目は@hitode909で「encode_jsonとdecode_json、どっちがどっちか覚えられないので、VSCodeのsnippetにjson_stringifyとjson_parseとして登録してしまう」でした。
とつぜんPerlで暗号論的乱数を作りたくなったことはありませんか? 僕はあります。 というわけで実現方法を調べてみました。
背景 ことの発端はGitHub Actionsのsave-stateとset-outputが非推奨になったことです。
GitHub Actions: Deprecating save-state and set-output commands actions-setup-perlでこのコマンドを使っているので、この変更に対応する必要があります。 代わりの方法として$GITHUB_STATE, $GITHUB_OUTPUT環境変数が用意されました。 ここにファイルパスが指定されるので、指定されたファイルへ所定のフォーマットで書き出せ、とのことです。 この「所定のフォーマット」の要件のひとつに暗号論的乱数があり、Perlで暗号的乱数を生成することになったのです。
単なる乱数で良ければ組み込み関数にrand関数があります。 しかしこれはperldocにも書いてあるとおり、セキュリティが重要な場面では使うべきではありません。
rand - perldoc.jp rand は暗号学的に安全ではありません。 セキュリティ的に重要な状況でこれに頼るべきではありません。
残念なことに今回はセキュリティ的に重要な状況なのです。
暗号論的乱数を作る あまり依存モジュールを増やしたくなかったので、OSの機能を直接呼び出す方針で考えました。
/dev/urandom を使う Windows APIを呼び出す syscall を使う OpenSSLを使う /dev/urandom を使う Linuxをちょっとかじった最初に思い浮かぶ方法でしょう。 Linuxには/dev/urandomという特殊ファイルが用意されており、このファイルを読むことで暗号論的乱数が手に入ります。
use v5.36; my $n = 32; my $buf; open my $fh, '<', '/dev/urandom' or die "failed to open /dev/urandom: $!"; read $fh, $buf, $n or die "failed to read /dev/urandom: $!
この記事は、フラー株式会社 Advent Calendar 2022 の1日目の記事です。
さてさて、今年も始まりましたアドベントカレンダー。
ところでそもそもアドベントカレンダーって何だか知ってますか? エンジニアが日替わりでブログを書くイベント・・・ではありません。 クリスマスまでの日数をカウントダウンする「アドベントカレンダー(物理)」が元ネタです。 カレンダーの日付部分が蓋になっていて、開けるとお菓子やおもちゃなどが出てくる仕掛けになっています。 クリスマスを待ちきれない子供がクリスマスまでの期間を楽しむためのアイテムなのです。
インターネットではお菓子やおもちゃは配れないので、代わりにブログ記事を投稿するようになったのが、 今のアドベントカレンダーの始まりです。
でもやっぱり(物理)欲しくないですか???? というわけで買っちゃいました!
中国からの輸入品です!梱包雑!!箱がボロボロ!!!
ラバーダックデバッグのすゝめ Amazonで開いてトップにあったものをテキトーに ラバーダックとプログラミングには深い関係があるので、ラバーダックのアドベントカレンダーを選びました。 ラバーダックデバッグと言って、 コードを一行ずつアヒルちゃんに説明するというデバッグ手法があります。 相手が無生物であっても、こうやって説明することで頭の中が整理され、バグの発見につながる・・・と言われています。
アドベントカレンダー開封 ラバーダックデバッグの素晴らしさを伝えるため、フラーアドベントカレンダーに参加してくれた人にラバーダックをプレゼントします! 以下の写真のようにカレンダーの日付部分にアヒルちゃんが入っています。 アドベントカレンダーを担当した日のアヒルちゃんはあなたものです!
さっそく12月1日分のアヒルちゃんはいただきましました。
微妙に剥げた塗装がイカしてます。 僕も今日からプログラミングに詰まったらこの子と相談してみます。
まとめ プログラミングに詰まったらラバーダックへ相談してみよう 中国の安物には気をつけろ TODO: 来年はもうちょっと良いやつを買う 明日2日は @chooblarinで「CSS Masks活用術」です。お楽しみに!
参考 ラバーダックデバッグ アドベント カレンダー 2022、クリスマス カウントダウン カレンダー アドベント カレンダー 2022 キッズ リトル イエロー ダック、アドベント カレンダー用おもちゃ、クリスマス アドベント カレンダー
今後Go言語でも50音順ソートしたくなるのでは、と虫の知らせがあったので作ってみました。
shogo82148/jisx4061 50音順とは何者か 50音順は「あいうえおかきくけこ・・・」あたりまでなら簡単なので、すごく簡単に思えるじゃないですか。 しかしここに濁音・半濁音・拗音・片仮名・長音記号etc. が入ってくるとだいぶややこしくなります。
濁音を含んだソート たとえば濁点の扱いを見てみましょう。 「さどう」「さとうや」「サトー」「さと」「さど」「さとう」「さとおや」という7つの単語を並べ替えます。 普通にGo標準のソートを使うと以下のようになります。
package main import ( "fmt" "sort" ) func main() { list := []string{ "さどう", "さとうや", "サトー", "さと", "さど", "さとう", "さとおや", } sort.Strings(list) fmt.Println(list) // Output: // [さと さとう さとうや さとおや さど さどう サトー] } 一見良さそうですが・・・「さと」と「さど」が遠く離れてしまいました。 このふたつは音が似ているので近くに配置したいです。
jisx4061を使ったソート shogo82148/jisx4061を使うと解決します。
package main import ( "fmt" "github.com/shogo82148/jisx4061" ) func main() { list := []string{ "さどう", "さとうや", "サトー", "さと", "さど", "さとう", "さとおや", } jisx4061.Sort(list) fmt.
以前 GitHub GraphQL のノードIDフォーマットが変わるらしい に書いたように、 将来ノードIDフォーマットが変わるらしいらしいです。 これについて、旧式のノードIDを使用した場合に警告がでるようになった、とアナウンスがありました。
GraphQL Legacy Global ID Deprecation Message というわけで、どんな警告文がでるのか試してみました。
実際の挙動 試しに僕の名前を取得するクエリを実行してみると、以下のような警告文がでました。
$ gh api graphql -f query='query { node(id: "MDQ6VXNlcjExNTczNDQ=") { ... on User { id name login } } }' { "data": { "node": { "id": "MDQ6VXNlcjExNTczNDQ=", "name": "ICHINOSE Shogo", "login": "shogo82148" } }, "extensions": { "warnings": [ { "type": "DEPRECATION", "message": "The id MDQ6VXNlcjExNTczNDQ= is deprecated. Update your cache to use the next_global_id from the data payload.