きり丸の技術日記

技術検証したり、資格等をここに残していきます。

技術

テストのメールドメインはexamle.comのほかにもある(RFC 2606)

テスト時に使用するメールドメインについてexample.comを使用していますが、メールドメインで制御しているコードを検証したい時にほかにも安全に使えるドメインがないかを調べたときのメモ。 すでに飽和している情報ですが自分のメモのために残します。 テス…

Pythonのエラーチェイン(例外を元に例外を投げる)には3種類あるがあまり気にしなくていい

Pythonでフレームワークから発生した例外を元に、適切に自作した例外に変換する方法に複数あることを知ったので、それを素振りしました。 なお、結果だけ先にお伝えするとraiseするだけでも9割問題ありません。 環境 Python 3.11.6 確認方法 Pythonでは単純…

Gitにchmodした結果を含めない、そして復帰させた時の手順(core.fileMode)

WSLで開発中にroot権限で作成されたファイルがあり、IntelliJ IDEAで更新できなかったファイルがありました。そのためディレクトリごとchownとchmodを行ったのですが、Gitに変更箇所があると検知されてしまい、気づかずにコミットしてしまいました。 今回の…

RailsのRSpecテストを並列化して30分から12分に短縮した(parallel_testsと性能アップ)

CI上のRailsのRSpecテストが30分もかかっていてストレスフルだったので、テストを並列化する等で30分かかっていた時間を12分まで削減しました。 そのときのメモ。 環境 AWS CodeBuild Ruby 2.7.2 Rails 6.0.3.6 Parallel_tests 4.4.0 MySQL 8 前提 docker co…

WSLのIPを調べる(WSLで起動したサーバに他端末からアクセスしたい)

同一ネットワークに所属していればローカルで起動したサーバをiPhone等の他端末からアクセスできるのは知っています。Windowsの場合ipconfigで表示されたIPを指定すればアクセスできることも知っています。ただ、WSLで起動したサーバに対してはアクセスでき…

WSLの時刻がズレたのでWindowsの時刻に修正する(sudo hwclock -s)

WSLの時刻がズレたことによるエラーが発生したので、時刻修正をした時のメモ。 環境 Ubuntu 22.04.2 LTS GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64 前提条件 なし コマンド 次のコマンドをWSL上で実行することで、Windowsの時刻と一致できます。…

WSLの一般ユーザのパスワードをリセットしたい

sudoコマンドを実行したいが、パスワードを忘れたのでWSLのパスワードをリセットするときのメモ。 環境 Ubuntu 22.04.2 LTS GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64 前提条件 変更対象の一般ユーザー名が分かっていること コマンド # root ユ…

WindowsのGit操作で発生したFilename too longを解決する(git config --global core.longpaths true)

Macを使用している他人がコミットしたファイルをpullしようとしたらFilename too longが出力されてpullできませんでした。その解決方法を残します。 環境 Windows 11 GitBash 4.4.23(1)-release ゴール 次の操作時にエラーが発生しない。 $ git reset --hard…

SQLで同姓同名が何人・何種類あるかを知りたい(重複レコードの存在とどのレコードかを知りたい)

SQLの小ネタ。 レコードが1:Nの関係のときに、Nが一定数以上のレコードが存在しうるか、存在する場合はどのようなレコードかを知りたいことがありました。 今回の記事ではユースケースとして分かりやすいように、usersテーブルからnameのうち同姓同名が何人…

FastAPIのpydanticの422UnprocessableEntityはExceptionのExceptionHandlerではキャッチできない

FastAPIで意図しないエラーが発生したときにExceptionでハンドリングしていましたが、それだけではpydanticで発生するエラーがキャッチできなかったのでメモします。 なお、pydanticはAPIのRequestとResponseのモデルで使用していますので、フロントのバリデ…

AnyIOのテストをasyncioだけで動かす(asyncioとtrioの2倍動かないようにする)

AnyIOを使用しているテストで、意図せずにasyncioとtrioの2つで動いてしまったテストがあったので、asyncioだけにした時のメモ。 環境 Python 3.11 AnyIO 3.7.1 Pytest 7.4.3 実装 conftest.pyに次の処理を入れると、asyncioだけが動きます。 @pytest.fixtur…

SQLで条件が一致しないレコードを特定する(NOT EXISTS)

小ネタ。 特定の条件に一致するレコードを取得するのはINNER JOIN等を使う方法は知ってましたが、一致しないレコードを取得する方法を知らなかったのでメモします。 環境 MySQL 8 実装 NOT EXISTSを使えば条件一致しないレコードを特定できます。逆に条件一…

Pythonのenumはint等のプリミティブ型を継承すると便利

基本的には推奨されない書き方のようですが、使ってみて便利だったのでメモします。 環境 Python 3.12 実装 int等のプリミティブな型の継承は次のとおりです。 from enum import Enum class IntInheritEnum(int, Enum): ID = 1 # 列挙型ではなく、intとして…

Pythonの__iter__を素振りする(First Class Collection[FCC]で使えるかも)

Pythonではイテレータを簡単に作れます。もしかしたら何かに使えるかもしれないので、素振りします。 環境 Python 3.12 ゴール PythonのFCC(First Class Collection)にて、For文を使用する際にFCCのインスタンスのまま使用できること。 from typing import…

Gmailで1度検索したメールをURLで開きたい(メールのID知りたい)

Gmailで1度開いたメールを後でURLで開けるようにする方法を自分用にメモします。特に件名を検索した後に、該当のメールをURLを開く方法を知りたかった記事です。 環境 Gmail 2023/11/18時点 IDの取得方法 URLのサブディレクトリの最後がメールのIDを示してい…

Pythonのデフォルト引数では配列ではなくNoneを使わないとダメ(ミュータブルはNG)

有名な話ですがハマったのでブログにします。 環境 Python 3.9 事象 Pythonでデフォルト引数に配列を定義すると、意図せずに同じインスタンスを使用してしまう。 def target_1(value, list=[]): list.append(value) return list def test_01(): a = target_1…

JSONPathから対象のJSONの行にフォーカスをあてる(IntelliJ IDEAのプラグインのJSON Key Finderを使用)

JSONからJSONPathを取得する方法を記事にしたことで、開発中のファイルに作成したJSONPathを定義できるようになりました。 今回の記事では、逆にJSONPathは分かっていI18nの定義ファイルのどこで定義してあるかを知れます。 環境 IntelliJ IDEA 2023.2 JSON …

OldstarのHDMI 変換アダプタで表示できない場合の対応(Win11の場合)

この記事ではOldstarのHDMI変換アダプタをWin11でも表示させる方法をブログにします。同梱されているドライバはWin10までしか対応していません。 なおWin11で表示はできるものの、10月23日時点ではドライバの品質が悪く、使用に耐えられない描画遅延が発生し…

Javaでメルセンヌ数を求める

Javaでメルセンヌ数(2の冪-1)を求める方法を記載します。 メルセンヌ数についてはWikipediaを参考にしてください。 前提 Java 21 対応 2の冪-1が整数となる値を求めるために次の式を使用します。 private static boolean isMersenne(int value) { return l…

Javaで二進対数(log2x)を求める

Javaで用意されているMathクラスだと十進対数(logx)だけしかないので二進対数(log2x)で計算する方法をメモします。 前提 Java 21 対応 十進対数から二進対数を割るだけです。 public static double log2(int value) { return Math.log(value) / Math.log…

【Bash】別ファイルに定義した変数を使用する

小ネタ。なお、特に説明はしていませんが、関数も変数と同じように使えます。 環境 Bash GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu) Ubuntu 20.04.2 LTS GitHub Codespaces 概要 変数を使用したいシェルからsourceコマンドで変数を定義した…

Excelで保存時にA1セルに保存する(VBAマクロ使用)

Excelは保存時に強調したいセルがある、等々の理由がない限りA1セルに合わせる、というマナーがあります。そのマナーの是非について問うつもりはありません。 今回の記事では、保存時に自動でA1セルに合わせるマクロを記載します。 前提 Excel Microsoft Off…

IntelliJ IDEAで目的のJSONパスを取得する

JSONでI18n対応していると、目的の文言を出力する時にJSONパスが必要です。深い構造ほどパスの把握に時間がかかります。 VS Code, IntelliJ IDEAのIDEでJSONの目的のパスにフォーカスしていると、画面の上部や下部にJSONパスが表示されます。それを手打ちし…

Pythonで配列から特定のキーだけで検索したい時は辞書型を経由すると速い

当たり前の話ではありますが。 Userクラスの配列からuser_idをキーに検索したい、emailをキーに検索したい等々の特定のキーがある場合、辞書型を経由すると非常に早く値を取得できます。 前提 Python 3.9 対応 配列を辞書型に変換する 最初にUserクラスを定…

001等の左0埋めのコード値を使うのはやめよう。それは8進数と判断される可能性がある

小ネタ。 前提 なし 詳細 私が関わっているシステムでは、001, 002等で種類を表すコード値を使っていることがあります。基本的には文字列で処理するので問題はほとんど発生しないのですが、状況によっては8進数の文字列と解釈されることがあります。可能な限…

ソフトウェア工数見積で意識すべきABPとHPとパーキンソンの法則(CCPMの文脈)

よくABPとHPの正式名称を忘れるので自分用にまとめます。 前提 クリティカルチェーン・プロジェクトマネジメント 略称はCCPM ABPとは ABPとはAggressive But Possibleの略称です。日本語訳としては「積極的に行えば可能」「頑張れば可能」です。私の感覚では…

Javaのtransientで本来は関わりのないデータであることを強調する

本来の使い方とは異なります。黙って使うと怒られるかもしれないので、導入の際は念のため確認してください。 Javaにはtransientという修飾子があります。これを使うことでコードで表現できることが増えます。 環境 Java 15 ユースケース コードの表現力を増…

SpringBootの@Valueではstatic変数には設定できない(設定ファイルの値をstatic変数に設定できるようにする)

SpringBootの@Valueを使用すると、設定ファイルの値を取得して変数に設定できます。しかし、static変数に関しては直接的に@Valueで設定できません。 今回の記事では、設定ファイルの値をstatic変数にも設定できるようにします。 前提 org.springframework.bo…

Javaでpropertiesファイルを読み込む

SpringBoot等のフレームワークの機能を使用すると、簡単に設定ファイルが読み込めるようになりました。 しかし、E2Eの試験をするだけのプロジェクト等では重くなりがちなフレームワークを導入したくありません。 今回の記事では、Javaのみでpropertiesファイ…

SQLAlchemyでwhere条件を変数化し、動的に変数に条件を追加する(1でも、2でも使えるはず)

※ 一部再現しきれていないので、誤っている可能性があります。 前提 SQLAlchemy 2.0.11 ソースコードありません 1.4.32 対応 次のどちらかで対応できます。 配列にand_インスタンスを設定し、最後に*で展開する ※ 2.0.11, 1.4.32でも確認できています。 crit…