Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Xから始まる名前の人の割合

知人が「Xから始まる名前の人っていったらだいたい中国人だよ」と言っていたことがあって(その人も中国出身)、いや他にもいるでしょギリシャの人とか、と思ったんだけど、じゃあ具体的にどれくらい「だいたい中国人」なのか。

すっごく雑に

  • Xで始まる名前の人は中国人かギリシャ
  • 名前がXで始まる人の割合は中国人もギリシャ人も同じ

というモデルにすると、国の人口比がそのまま反映されて99.3%が中国人になる*1から、たしかに「だいたい中国人」かもと思ったんだけど、以下のサイトを見るとインド由来の名前にもXで始まるものがあるから、単純な国ごとの人口比では語れそうにないなぁ。 adoption.com

*1:余談だが、この計算をしていて気づいたんだけど、iOSの電卓って最大で9桁までしか入力できないから、中国の人口を使った計算は行えない。すげぇな中国の人口

日本国内キャリアのSIMスワップ耐性調査ってないの

日本国内の携帯電話会社において機種変更や故障受付時の手続きフローがSIMスワッピングに対してどれくらい耐性がありそうかという話、大手キャリアだけでもいいからどこかで評価してないのかな。 たとえばdocomoだと、機種変更・SIM変更はオンラインショップならdアカウント設定アプリを使っていれば二要素認証で緩和可能*1ドコモショップでの手続きはネットワーク暗証番号を推測 or リバースブルートフォースで窃取したとしても追加で氏名・生年月日の確認書類が必要、法人契約の場合は登記簿と印鑑証明が必要だからだいぶハードルが高い、とか。 www.docomo.ne.jp

ESETの記事みたいに電話番号とPINコード(docomoならネットワーク暗証番号番号)だけで突破可能なキャリアがあると、SMSでの二要素認証が国内でもヤバいとだいぶ言いやすくなるのだが…… eset-info.canon-its.jp

*1:dアカウント設定アプリを使ってない場合はネットワーク暗証番号でdアカウントへのログインまでは可能だが、機種変更手続き時点でdアカウント設定アプリの設定を求められる

「本当にコンピュータに向いている人は50人にひとり」の出典

Knuthが何かで言ってた「本当にコンピュータに向いている人は50人にひとり」という話、ここに記載があった。 https://www.informit.com/articles/article.aspx?p=2213858&WT.rss_f=Article&WT.rss_a=Twenty%20Questions%20for%20Donald%20Knuth&WT.rss_ev=a

Amazon RDSのマイナーバージョン自動アップグレード機能の有効・無効はDBMSエンジンごとにデフォルト値が異なる

Amazon RDSのマイナーバージョン自動アップグレードについてググると「デフォルトだと有効」という記載をしているページがいくつか見つかる*1*2

実際にAmazon RDSのメニューから[データベースの作成]-[追加設定]-[マイナーバージョン自動アップグレードの有効化]を見てみると分かるが、DBMSのエンジンの選択によってデフォルト値が異なる。

DBMSエンジン 「マイナーバージョン自動アップグレードの有効化」デフォルト値
1 Amazon Aurora MySQL 互換エディション チェックあり(有効)
2 Amazon Aurora PostgreSQL 互換エディション チェックあり(有効)
3 MySQL チェックあり(有効)
4 MariaDB チェックあり(有効)
5 PostgreSQL チェックあり(有効)
6 Oracle チェックなし(無効)
7 Microsoft SQL Server チェックなし(無効)

SupabaseのPostgres-WASM環境にDBの初期データをロードする

やりたいこと

SupabaseのPostgres-WASM環境に、PostgreSQLの教育用DBを構築したい。

問題(1)

  • DDLを含むSQL文をPostgreSQL-WASM環境のコンソールにコピー&ペーストしようとすると、ある程度の分量(100kBくらい?もっと少ない?)までは問題なく実行できる。しかし、それを超えると正常にペーストできず、途中で入力が途切れてしまう。また、以降のコンソールへの入力が正しく行なえなくなる。
  • SupabaseのPostgreSQL-WASMには"Transfer Files"というメニューがあり、ここからVM上へファイルをアップロードできるように見える。しかし、ここでファイルのアップロードボタンを押してファイルを選択しても、VM開始時のカレントディレクトリである/rootには何も表示されない。

対策(1)

実は"Transfer Files"でアップロードしたファイルは/mnt以下に保存されている。psqlから\qで抜ける(pqslを再実行する場合はpsql -U postgres)か、またはCtrl-Zでシェルへ抜けたら、ls /mntすればファイルが見える。

あとは以下のようにすればファイル中のSQLを実行できる。 - (A) pqsl上で\i /mnt/foobar.sqlのように実行する。 - (B) シェル上でpsql -U postgres -f /mnt/foobar.sqlのように実行する。

問題(2)

ある程度以上のデータをINSERTしようとすると、以下のメッセージが表示されPostgreSQLへの接続が切断される。 実行するファイルを分割したり、Postgres-WASM環境のVMのメモリを増やしたりしても効果がない。

psql:/mnt/mock_staff.sql:687: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
psql:/mnt/mock_staff.sql:687: fatal: connection to server was lost

LinkedIn LearningのAdvanced SQL for Query Tuning and Performance Optimizationコースの例題データをロードしようとしたところ発生。

原因(2)

原因は今のところ不明。Postgres-WASMは32bitのLinux VMのうえでPostgreSQLを動かしているだけということなのだが…… https://github.com/snaplet/postgres-wasm/issues/45

対策 (2)

大量のINSERT文を実行する代わりにBulk insertを使えばエラーは出なくなる。

insert into employee values (1, 'Jenny Thornton');
insert into employee values (2, 'Alan Fowler');
insert into employee values (3, 'Erick Moreno');
 ...
insert into employee values (998, 'Guy Zimmerman');
insert into employee values (999, 'Stephanie Thornton');
insert into employee values (1000, 'Brendan White');

を以下のように変更すればよい。

insert into employee values (1, 'Jenny Thornton'),
                            (2, 'Alan Fowler'),
                            (3, 'Erick Moreno'),
 ...
                            (998, 'Guy Zimmerman'),
                            (999, 'Stephanie Thornton'),
                            (1000, 'Brendan White')
                            ;