きり丸の技術日記

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

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

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

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

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

Excelで縦回転するマウスホイールで横スクロールしたい

小ネタ。 横スクロールできるホイール(チルトホイール)がマウスについていたら嬉しいのですが、無いマウスを使用することもあるので備忘録として。 前提 Excel Microsoft Office Home And Business 2019 Windows Mac 未確認 方法 Shift + Ctrl + 縦スクロ…

EXCELで最新のデータ(一番下、一番右)だけを参照する(数式とINDIRECT)

地味に毎回調べるのでメモ。 環境 Microsoft Office Home and Business 2019 Microsoft® Excel® 2019 MSO (16.0.14228.20216) 64 ビット ゴール 1月から12月のデータを入力する項目があります。現在入力している最新の月(一番下、一番右)のデータだけを…

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

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

ブログのURLをChatGPTに考えてもらっている【ChatGPT有効活用】

小ネタ。 タイトルとおりの記事でそれ以上の感想はありません。 前提 ChatGPT 3.5 20230813時点 経緯 最初の頃は、はてなブログ標準機能のURLを使用していました。 ただそれだとGoogle Analyticsで人気のページを確認する際に、何の記事か分かりませんでした…

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…

Railsでfirstを指定しているのにたまに11件取得していた(原因不明)

当記事は問題解決に向けた記事ではありません。調べても原因が分からなかったので、事象の報告記事となります。 環境 Ruby 2.7.2 Rails 6.0.0 発生事象 ActiveRecord::Baseを継承したクラスにて、特定の条件のレコードの1行目を取得したかったので、次のよう…

Javaの自作アノテーションのプロパティの値を取得する(ConstraintValidator)

以前、Javaの自作アノテーションを作成する方法をブログにしました。しかし、自作アノテーションに定義した変数を取り出して、バリデーションを行う方法がちょっとだけ面倒だったので、ブログに残します。 環境 Java 17 前提 テストする方法は、こちらの記事…

Javaで特定の文字数まで0埋めや任意の文字で埋めたい(padLeft, padRightのような動き)

小ネタ。 環境 Java 17 対応 java.lang.Stringを使用します。内部的にはjava.util.Formatterを使用しています。 intの場合は%0{特定の文字数}d。Stringの場合は%{特定の文字数}sで半角スペースで左埋めしたあと、replace(半角スペース, 任意の文字)で半角ス…

IntelliJ IDEAのデフォルトTerminalを変更する

公式ヘルプ読めば一発のお話。 ターミナルに強いこだわりはないのですが、ターミナルだとlsを無意識に打ってしまう癖があるので、エラーが起きないようにIntelliJ IDEAのデフォルトターミナルをGit Bashに変更しました。 その手順を残します。 環境 IntelliJ…

Lombokの自動生成コードのsetterにブレークポイントを張って容易にデバッグしたい

小ネタ。特定項目が処理の開始時は1だったのに、処理の終了時には1000が代入されていたとします。規模が小さいうちはSetterやBuilder等々の呼び出し元にブレークポイントを張っていればいいのですが、規模が大きくなってくるとブレークポイントを張るだけで…

JJUG CCC 2023 Springに20分枠で登壇したレポート

5-10分枠のLTで登壇することはそれなりに重ねてきましたが、カンファレンスに登壇したことがなかったので思い切って登壇してきました。その登壇した自分語りですので、他の方の発表については特にこの記事では言及しません。 JJUG CCCとは 日本Javaユーザー…

JavaScriptでundefinedのときにデフォルト値を設定する(Null合体演算子 ??)(JavaのOptional.orEleseみたいなの)

地味に知らなかったので。 前提 JavaScript 対応 Null合体演算子??を使用する。 const item = { "A": "1" }; console.log(item.A.toString()); // "1" console.log(item.B?.toString()); // undefined console.log(item.A.toString() ?? "100"); // "1" cons…

IntelliJ IDEAで必要なファイルだけをrevertしたい(revert selected)

コミット全体をRevertするのではなく、特定のファイルだけをRevertかけたい時の操作を記載します。 環境 IntelliJ IDEA 2022.3.3 対応 GitタブでRevertしたいコミットログを探し、対象のファイルを右クリックします。 選択した変更を元に戻すを選択すると、…

Git Rebaseするときに自動でstashとstash popするオプションや設定(autostash)

Git Rebaseをする際に、ローカルの修正が残っている場合はgit stash, git stash popをしないと実行できません。 毎回そのコマンドを入力するのは面倒ですが、オプションや設定でstashコマンドを実行せずに済むのでそれを記事にしました。 環境 git version 2…

画面全体はportrait(縦)なのにiframeで最小化を実装したらlandscape(横)で判定された

タイトルの出オチ記事。 前提 Chrome 2023/05/02時点 原因 portrait, landscapeは画面のwidthとheightの縦横比で決まる iframeの画面サイズは親画面サイズに依存しない 上記2つの原因により、iframeで作られた画面を最小化(ヘッダだけ見える状態にする)す…

PythonでJSONを一部項目を無視して比較したい(I want to compare JSON in Python while ignoring certain items by deepdiff)

PythonでJSONを比較したいという記事を過去に書きました。しかし、日付項目等々の固定しづらい項目を無視して比較するというユースケースが達成できていませんでした。 今回の記事では、一部項目を無視して比較する方法を記載します。 前提 Python 3.11 Deep…

GitHubのPRをブランチ名でフィルタしたい(filtering pr by branch name in github)

基本的には公式ヘルプ読んでください。 環境 GitHub 2022/11/04時点 対応 base:ブランチ名で特定のブランチに対するPRをフィルタリングできます。fromではなく、toのブランチ名を指しています。ブランチを切るときのbaseとして考えると、意味合いは正しいの…

Pythonでメソッド呼び出し元がNoneパラメータを渡さないようにする(doesn't call none parameter in Python)

メソッド呼び出し元で引数が指定されていない場合は、デフォルト値を与えられます。キーワード引数を使用すると、任意のパラメータに値を与えられます。 ただし、意図的にメソッド呼び出し元でNoneを渡してしまった場合、デフォルト値を使用できません。 今…

Pythonの辞書型の値がNoneならキーを削除する(value-is-none-so-remove-key-in-Python-dictionary)

辞書型の値がNoneの場合に、キーを削除したいことがあったので残します。 前提 Python 3.11 対応 辞書型の値がNoneのとき、キーを削除するのは次のコードです。 {k: v for k, v in dict.items() if v is not None} dict = {"a": "1", "b": "2", "c": None} a…

AWS 認定ソリューションアーキテクト(AWS SAA-C03)の合格記

掲題のとおり、AWS認定ソリューションアーキテクト(SAA-C03)を受験し、合格したので合格記を記します。 前提 AWSは本業でほぼ使ったことがない 副業で使ってはいるが、基本的にAWSにログインして操作することはない 合格日 2023年03月30日(木) 合格した…

Dockerfileを静的解析できるhadolintを使う(Haskell Docker Linter)

Dockerfileを静的解析できるhadolint(Haskell Docker Linter)を使ってみました。詳細は公式やほかの方のブログを見てください。 環境 20230312時点 対応 Dockerfileが存在するディレクトリで、次のコマンドを実行するとDockerfileに対してlintをかけられま…

Pythonで関数とNoneの型ヒントをつけたい(Resolve TypeError: unsupported operand type(s) for |: 'function' and 'NoneType')

Pythonで関数とNoneが取りうるパラメータに対して、Union型で型ヒントを与えようとしたところエラーになったので解決方法をメモします。 環境 Python 3.9 対応 Union型を使わずに、Optional型でヒントを与えます。今回ハマっていたのは、sqlalchemyでand_条…

Git LFSでプロキシを経由させる・させない(HTTPS_PROXY, NO_PROXY)

Git Large File System(Git LFS)のツールを使っていて、プロキシを経由させたり、経由させないようにする方法が見つからなかったのでメモします。 環境 Mac zsh 対応 次の設定値を使用します。大文字と小文字で設定値の優先度が異なります。 # 上に記載し…

SpringのValueに初期値を与える(エラーを起こさずにnullも初期値にする)

小ネタ。@Valueで初期値を与えたい時の記法をメモします。マッピングするプロパティがない場合、BeanCreationExceptionが発生してしまうので、それが発生しないようにします。 環境 Java 17 SpringBootTest 2.7.4 ゴール SpringのValueで初期値を渡す マッピ…

SpringでRedisを使う(データベース、キャッシュとしての使い方)

本業はJavaのバックエンドエンジニアなのですが、Redisを使ったことがないので、素振りします。 今回の記事では、データベース、キャッシュとしての機能を検証することをゴールとします。メッセージブローカー、キューとしての挙動は記載いたしません。 環境…