AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

カラム内に存在しない値を抽出する

具体的には以下のような payments テーブルで、 year 2019 が存在するのに 2020 が存在しない user_id を特定したい。

payments

id user_id year price
1 100 2018 1000
2 103 2019 1500
3 101 2020 2000
4 100 2020 3000
5 103 2021 3000
6 100 2019 1499

どうする

year 列で判断すりゃいいんだろうけど、そも IS NULL じゃないしどうやって判断するんだ……? と思って、 year = 2019 year = 2020 で取得した結果を Excel で比較したりしていました。

teratail.com

あーなるほど、 NOT IN 使えば良いのかという顔に。 SQL をちゃんと使いこなせていない系でしたワ。

SELECT user_id FROM payments WHERE year = 2019 AND user_id NOT IN (SELECT user_id FROM payments WHERE year = 2020);

#=> 結果
| user_id |
|---------|
| 103     |

という感じですね。 year を 2019 で絞り込んだ結果から、2020 で絞り込んだ結果を消し込むと目的の差分が出てくるじゃろという至極当然の話でした。

SQL、応用力がないので一度入門しなおしたほうがいいなあ、と思い続けているんだけど入門 SQL とかわかりみ SQL あたりがいいのかあ、と悩んでそのまま来ているのでそろそろなんとかしたい。

.DS_Store とか .vscode/ など

blog.tai2.net

言いたいことはこちらに記載されていたんですが、管理している開発用リポジトリでは以下でやっています。

  • .DS_Store .vscode/ .swp など個人の環境が生成するファイルは .gitignore に追加して都度メンテナンスを行う

これなんでかっていうと、プロジェクトに参加してくるユーザーのスキルは均一ではないからですね。

例えばバックエンド等のロジック実装を行えるエンジニアであれば、 .gitignore_global に事前に個人ファイルの ignore は記載しているでしょうし、していなくても「ignore しておいてください」で済むでしょう。

ですがフロントエンド専業だったり、バックエンドできても git 自体はあまりわからない (SourceTree の GUI などを主に利用していたりなど) という人は一定数居ます。 最近に IDE 支援も便利ですしね。

add/commit/push はできるけど、 rebase はわからない (衝突回避できない)といった具合ですね。

それらを考えだしたら、「.gitignore のテンプレートあるくらいだし、別にプロジェクト作成時に追加でもいいじゃーん」という考えになりました。

久しぶりにリポジトリ作る所から作業したので、個人のメモ代わりですが書いておくことにしました。 この手の管理は人によって是非がある前提で、色々知っておきたいなあ、という感じでした。

mysql-shell を入れてみる

浅学にして mysql-shell なるものを知らなかった (mysql-client についてくる CLI のことだと思ってた) ので入れてみた。

brew install

MySQL って Cask 扱いでしたっけ? もう覚えてないワ。MySQL 利用している brew 環境下ならそのままインストールできると思う。

[user@localhost ~]$ brew install mysql-shell
==> Downloading https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.26-macos11-x86-64bit.dmg
==> Downloading from https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.26-macos11-x86-64bit.dmg
######################################################################## 100.0%
==> Installing Cask mysql-shell
==> Running installer for mysql-shell; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is MySQL Shell 8.0.26
installer: Installing at base path /
installer: The install was successful.
🍺  mysql-shell was successfully installed!

起動してみる

めっちゃにぎやかですね。

[user@localhost ~]$ mysqlsh

f:id:donbulinux:20211006183504p:plain
エスケープできないおじさん

SQL モードにする

よくわかってないんですが、JS や Python だとそれっぽくアクセスできるってことかな、 rails console 的な。 とりあえず SQL モードにします。

 MySQL  localhost:33060+ ssl  JS > shell.options.defaultMode
none
 MySQL  localhost:33060+ ssl  JS > shell.options.setPersist("defaultMode", "SQL")
 MySQL  localhost:33060+ ssl  JS > shell.options.defaultMode
sql
 MySQL  localhost:33060+ ssl  JS > \q

で、 mysqlsh にログインしなおす。

f:id:donbulinux:20211006183841p:plain
SQL モードになった図

おーできた。

next4us-ti.hatenablog.com

で、何ができるんだ

触り始めて 5 分なのでなんもわからん、こちとら mysqlsh 赤ちゃんやぞ! という訳で、徐々に使っていきとうございます。

httpd prefork の動き

を定期的に「ひとつのブラウザからの接続で子プロセス 1 つ……いやいっぺえ起動してんな? あれ?」と忘れるので、一年に 1 回くらいお世話になっている。

teratail.com

  • 1 アクセス元に対して、サーバ側が返すのは必ず 1 コンテンツとは限らない (たとえば HTML だと、参照している CSS とか画像があるので)
    • 最近のブラウザ仕様 (おおよそ主流の Chrome 系) で 1 アクセスあたり TCP は 6 本同時に張られる
      • (DLsite とか FANZA などで) 1Gbyte 超えるファイルを 10 個くらいダウンロードキューに入れると、6 個までしかプログレスバー動かないので確認できる、エロスは偉大……
  • ので、基本 1 アクセスは 6 個の子プロセスが必要と考えておいたほうがよい

prefork をやめればいいんだろうけど、 使ってるプロプライエタリな環境が prefork にロックインしているのでやめるにやめられないという。

httpd 2.4 がリリースされてそろそろ 10 年たつし、なんとかして event あたりに移行してえなあと思うけど難しいねんな……。

MaxClient の算出

qiita.com

このあたりに書いてあるけど、基本 ps ax|grep httpd して上位 5 プロセスくらいの RES の値を利用すればおおよその場合は大丈夫。

というのを数年前も書いた気がするけど改めて書いておく。

DockerDesktop がライセンス変更してた

労災とか言ってる場合じゃねえ! いや労災も重要なんだけど。

www.docker.com

メール飛んできてて「あぁん?」と読んでたら、「オゲーッ!!」となるなど。

公式の FAQ

My company has 50 employees, but is a subsidiary of a company with 1000 employees. Do I need to pay? Yes. As part of a larger company you will need a paid Docker Pro, Team, or Business tier subscription.

このあたりが興味深くて、会社の単位ではなく企業グループの一部とみなされる場合は (サブスクリプションの条件を満たしていれば) 課金対象に含まれる、というのが注意ですかね。

ただ親会社が 250 人以上だったら対象なのか、 100+50+50+50 人の4つの会社があったら課金なのか? みたいなのはよくわからねえんだ。 恐らくこういう時は都合よく解釈できないので、合計に寄せられる気がする。

www.docker.com

実害?

害っていうとひどい言い方なので良い言い方がわからないんだけど、 DockerDesktop を利用しなければ良いのか? という気はしている。 けど Win/Mac だと実際 DockerDesktop インストールせざるを得ないしどうしたもんかなあ。

おツイとかで「$5 / 人 くらい払えや!」という意見多々あって、「それはそう!」なんだけど、管理職の立場からすると管理大変になるのもわかるんだよな。 資産管理つかえや! とかそういう話になるんだけど。

よくわからないパターン

自社製品を ASP ライセンスで販売してるけど、納品先は利用先クライアントのオンプレミスじゃないとダメ! みたいな地獄の案件とかあって、特に大手に多いんだけど、そういうときどうなるんだろう。

この場合、サービス提供側は DockerDesktop の Personal 条件内なんだけど、利用先は Personal 条件外なんすよね。 どっちで判断されるんだろう質問送ってみるかという感じだけど、実行環境を提供しているのは利用先だからそちらで判断される、とか言われそうだなあ。

乗り換え先

という訳で早速記事が出始めてた。

www.hsbt.org

medium.com

IT フリーランスの労災加入

が始まったらしい、全然知らなかった。

昨日月初の金勘定で外出した時、段差でずっこけて足がグネりそうになったのでタイムリーだなあ、と思って調べたけど、具体的にどうアクションすればいいのか全然わからん……。

IT フリーランス機構からお知らせ出るまで待つかァ。

大本営発表

https://www.mhlw.go.jp/content/000815896.pdf

参考

pc.watch.impress.co.jp

www.aitf.or.jp

VScode の制限モードだとコピーもできやしない

ということに、昨日の夜間作業ではじめて気づきました。 邪悪すぎる。

個人的な考えですが、「エディタの本分はあくまでエディタ」であると思っているので、統合開発環境としてターミナルとかつけてきたからこんなめんどくさいことする必要が生まれてるんじゃねえの VScode くん? という気持ちがしますね。

設定から、 security.workspace.trust.enabled のチェックを外すことで制限モード (Restricted Mode) を利用しないようにします。

どうせ ~/Downloads/ とか、アプリケーションのワークスペース色々追加しまくったら訳わからなくなるし、実行されるもんはされちまうから最初から使わない、という選択肢で行く。

参考

reject.tokyo