Pythonでlsコマンドを実装したので、パフォーマンスを計測する②

はじめに Pythonで ls コマンドを実装したので、パフォーマンス計測してみました。 Unixのtime コマンドを使うと、コードの内部実装に依存せずに、プログラムの実行時間を計測できます。 今回は、シェル内蔵の time とシステムの time を使って計測してみま…

PythonでシンプルなRDBMSを自作してみた

はじめに データベースの内部構造を理解したくて、Database Design and Implementation のSimpleDBを参考に、Pythonでデータベースを作ってみました。 実装方針 SimpleDB(Java版)の実装を忠実に追う 色気を出さず、まずは動くものを作ることを重視 Python…

Pythonのrange() は stop の数字を含まない

Pythonのrange(start, stop)は、stopの数字を含まない仕様になっています。たとえば、range(1, 5)は [1, 2, 3, 4] となり、5 は含まれません。 しかし、時々、stopが含まれると思ってコードを書いてしまうミスをするので、range()について調べました。 range…

Gitがどのようにコンフリクトを検知するのか知りたくなったので、ソースコードを読んでみた

Gitを使用していると、リベースやチェリーピック、マージ操作などでコンフリクトに遭遇することがよくあります。今回は、最も一般的な、マージ操作で発生するコンフリクトについて、Gitのソースコードを通してその検知ロジックを調べてみました コンフリクト…

Gitの内部構造について調べたメモ

これまで、なんとなく、Gitは、ファイルの差分を記録して管理しているのかと思っていました。 しかし、調べてみると、そうではなかったので、Gitの内部構造や、ファイルの扱い方について調べてみました。 Gitの内部構造 スナップショットとは 定義 特徴 Git…

Database Design and Implementation Second Editionの読書メモ

link.springer.com を読んで、PythonでDBを実装するための読書メモです。 Chapter 1Database Systems 概要 Chapter 2 JDBC Chapter 3 Disk and File Management 概要 実装 BlockIdクラス Pagesクラス FileMgrクラス Chapter 4 Memory Management 概要 実装 L…

Pythonとバイナリストリームについて調べたメモ

バイナリストリームとは データをそのままバイト単位で扱うための仕組み この形式では、データの内容が文字列やテキスト形式に変換されることなく、そのままの状態で処理される テキスト ストリームとバイナリ ストリーム | Microsoft Learn バイナリ ストリ…

Pythonオブジェクトのミュータブルとイミュータブルを調べた時のメモ

背景 イミュータブルとミュータブルの基本概念 イミュータブル イミュータブルとは イミュータブル型の挙動 ミュータブル ミュータブルとは ミュータブル型の挙動 ミュータブル型での安全なコピー タプルには注意 ハッシュ可能性 ハッシュ可能性とは イミュ…

Django-ninjaとReactでメモアプリを作成したときのメモ

Django-ninjaとReactでメモアプリを作成した時のメモです。 バックエンドの実装はこちらです。 ここでは、ViteとReactでフロントエンドを実装していきます。 環境 react@18.3.1 typescript@5.6.3 vite@5.4.9 実装 Reactのインストール 今回は、モノレポにす…

Django ninjaでメモアプリを作成した時のメモ

Django ninjaでメモアプリを作成した時のメモです 環境 Django==5.1.2 django-ninja==1.3.0 実装 仮想環境を用意 python -m venv ./venv ./venv/Scripts/activate DjangoとDjango-ninjaをインストール python -m pip install -U pip pip install django djan…

Django NinjaでHello Worldしたときのメモ

はじめに 今回はDjango Ninjaで、Hello Worldをしてみます。 Django Ninjaとは Django Ninjaは、Djangoの上に構築されるREST APIフレームワークです。型ヒントと非同期プログラミングをサポートし、FastAPIのような高速で直感的なAPI開発が可能です。また、D…

PyCharmでDjango Rest frameworkプロジェクトを始めたときのメモ

DjangoはPycharmが自動でインストールしてくれますが、Django REST framework パッケージは手動でインストールする必要があります。 Django REST framework パッケージを手動でインストールしたときのメモです。 環境 PyCharm 2023.2.1 Django 5.1 Django Re…

FastAPI 0.86.0から0.87.0へのバージョンアップしたときのメモ

FastAPI 0.86.0から0.87.0へのバージョンアップしようとしたところ、 リクエストボディを受け取るDELETEメソッドで、テストが落ちてしまうようになったので解決した時のメモです。 リリースノートの確認 リリースノートを読むと、 Upgraded Starlette Now th…

ReactとMUIでマルチレベルドロップダウンを実装したときのメモ

ReactとMUIでマルチレベルドロップダウンを実装したときのメモです。 使いまわし可能なように、カスタムフックとして実装します。 環境 React 18.3 TypeScript 5.4 Node 18.12 vite 4.5 MUI 5.15 マルチレベルドロップダウンとは マルチレベルドロップダウン…

FastAPI 0.79.0へのバージョンアップによるレスポンス処理の変更に対応したときのメモ

FastAPIの0.79.0へのバージョンアップで、特定のステータスコードに対するレスポンスボディの扱いに関する変更に対応した時のメモです FastAPIの0.79.0では、FastAPIの0.79.0では、以下のステータスコードに対してレスポンスボディを含まないようにする変更…

ローカルストレージへのデータ保存時間を計測してみた

PCスペック CPU: Intel Core i5-10210U メモリ: 16 GB ストレージ: 256 GB SSD OS: Windows 11 Pro ローカルストレージとは ローカルストレージとは、Web Storage APIの一部としてブラウザに組み込まれている機能で、データをキーと値のペアとしてブラウザに…

Reactで、複数のパラメーターをチェックしてコンポーネントをレンダリングするかどうかを決定する

Reactで、複数のパラメーターをチェックして、コンポーネントをレンダリングするかどうかを決定するときの書き方を整理します。 環境 React 18.2.0 書いてみた 方法① return文の中で直接条件を判定する type AppProps = { isUserLoggedIn: boolean; isAdmin:…

Pytestで、テストをパラメータ化してみた

pytestでは、テストにパラメータを追加することで、何種類かの引数を使って同じテストを繰り返し実行できます。 今回は、ここで書いたコードを少し修正して、パラメタライズドテストを書いてみました。 テスト対象コードを用意する ここではstatus["capacity…

pytestのテスト関数を、クラスを使って書いてみた

pytestでクラスを使う pytestではテストをクラスにまとめることができます。 テストをクラスにまとめてグループ化することで、テストの構造が明確になります。 また、共通のsetupをクラスレベルで管理できるようになり、 @pytest.fixtureを使ってセットアッ…

FastAPIで、DELETEのときのステータスコードを`204No Content`に変更する

RFC基準と削除操作のステータスコード RFC 9110では、特に削除操作(DELETEリクエスト)の場合、レスポンスボディが含まれる場合は200 OKを使用し、レスポンスボディがない場合は204 No Contentを使用すべきとされています。 a DELETE method is successfull…

FastAPIで、Trailing Slashリクエストの自動リダイレクトを無効にする

Trailing Slashのリダイレクト動作の制御 FastAPIを含む多くのフレームワークで、末尾にスラッシュのある(Trailing Slash)リクエストを受け取ったときにマッチするurlが見つからないと、 自動で末尾にスラッシュの無いurlにリダイレクトします。 しかし、API…

PyCharmのLookupError: unknown encoding: windows-31jを解決した時のメモ

環境 PyCharm 2023.2.1 windows 10Pro Python 3.10 エラー PyCharmのデバッガーを設定しようとしたところ、 Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding Python runtime state: core initialized …

Reactのレビューの練習①

Reactを業務で使うようになって○ヶ月、まだ自分がレビューする機会が無いので、ここでレビューの練習をしてみたいと思います。 前提 Typescriptで書いている buildツールはesbuild お題 実際にプロダクト内で見かけたコードを簡素にしたものです。 import Re…

Pythonのtry-else句と、テストカバレッジ100%が必ずしも品質を保証しないという話

こんにちは。fastAPI歴○か月のケイ太です。 先日、テストカバレッジも大事だけれど、それだけで品質を保証できるわけではない、ということを実感することがありました。 きっかけはこんなコードです。 def create_users(db:Session, users_list: List[UserCr…

RubyでWebサーバを作ってみた2:静的なサーバを完成させる

ここまでで、CSSや画像を含むページを表示出来るようになりました。 今回も gihyo.jp の書籍を参考に、Rubyで URLエンコードの対応をする ファイルが存在しない時に404 NOT FOUNDを返す ディレクトリトラバーサル脆弱性に対応する ドメインだけ/ディレクトリ…

RubyでWebサーバを作ってみた

gihyo.jp この書籍を参考に、RubyでWebサーバを作ってみようと思います。 目次 目次 動作環境 実装 実装のゴールの確認 初期化 待機 リクエスト受信 レスポンス送信 切断 全体のコード index.htmlを用意する 起動 確認 ソースコード モドキじゃないサーバへ …

RubyでTCPサーバ/クライアントを作ってみた

gihyo.jp この書籍を参考に、RubyでTCPサーバ/クライアントを作ってみました。 目次 目次 TCPとソケット 動作環境 サーバ側 初期化 待機 データ受信 データ送信 切断 ソースコード クライアント側 初期化 送信 ソースコード 実行 client_send.txtとserver_se…

RailsプロジェクトのRubyのバージョンを上げたときのメモ

RailsプロジェクトのRubyのバージョンを3.1.1から3.2.2に上げたときのメモです。 目次 目次 環境 Ruby3.2.2のインストール 更新前チェック Rubyのバージョンを上げる 参考にしたサイト 環境 wsl2 debian 11 Ruby 3.1.1 Rails 7.0.1 Ruby3.2.2のインストール …

開発テーマは速い!安い!メンテナンス楽々! ~漢検学習アプリをリリースしました~

電車の中などで、手軽に漢字検定準1級/1級の学習がしたかったので、漢検学習アプリ『漢検練習帳』を作成しました。 既存のアプリでは、2級以下の問題は豊富にあるのですが、漢字検定準1級/1級範囲の問題は問題量が少なく、 学習にならないのです。 漢検練習…

はてなブログにカスタムcssをあてる

備忘のために、cssデザインの変更方法と変更内容をメモします 1. 変更方法 2. css ソースコード 1. 変更方法 はてなブログにログインし、ダッシュボードからデザインを選択 カスタマイズボタンをクリック 左下の{}デザインcssをクリック 枠内にcssを貼り付け…