自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • Next.jsとTypeScriptで簡易掲示板をつくる

    Next.js を使えば、フロントからサーバーサイドまで一貫してJavaScript(TypeScript)でウェブアプリをつくる。 npx create-next-app startup-bbs このようにプロジェクトを作った。 cd startup-bbs npm run dev これでサーバーが起動すればプロジェクト作成はOK。 プロジェクトのディレクトリ構成 startup-bbs の中は以下のようになっている。 $ ls -al 合計 264 drwxrwxr-x 7 akagi akagi 4096 4月 4 10:40 . drwxrwxr-x 3 akagi akagi 4096 4月 4 10:39 .. drwxrwxr-x 8 akagi akagi 4096 4月 4 10:39 .git -rw-rw-r-- 1 akagi akagi 480 4月 4 10:39 .gitignore drwxrwxr-x 7 akagi akagi 4096 4月 4 10:40 .next -rw-rw-r-- 1 akagi akagi 1450 ...
  • Ubuntu 24.04 LTS での python仮想環境構築

    Ubuntu 24.04LTS では rootにPythonライブラリをインストールすることはできないようになっている。 $ sudo pip3 install --user virtualenv error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.12/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. これはDebi ...
  • ASP .NET Coreで簡易掲示板をつくる

    .NETを急いで覚える必要があるため、まずは簡易掲示板をつくる。 プロジェクトをつくる まず、.NETには、プロジェクトの構成として、MVC と Razor Pagesの2パターンがある。 PazorPagesは基本的なウェブページのみで構成されたシンプルなウェブアプリ。 一方、MVCはモデル・ビュー・コントローラがすべて揃った状態で作られる本格的なウェブアプリ。 今回は後者でつくる。 new mvc コマンドでプロジェクトをつくる。 ...
  • DjangoのセッションをRedisで管理する

    DjangoのセッションをRedisで管理するメリット DB(ディスク)ではなくRedis(RAM)になるので、セッション管理が高速化される 複数のアプリでセッション情報を共有できる マルチノード構成を使って、負荷分散・可用性を高めることができる TTLでセッションの削除を自動化できる。(DBの場合、能動的に削除しない限りセッション情報がそのまま残る) Django-Channelsなどの非同期セッションと ...
  • FastAPIでWebSocketを実現する

    djangoでもWebSocketは実現できるが、依然djangoの一部は同期動作(DB操作とMIDDLEWARE)。 よって、どうしてもボトルネックが発生する。 そこでWebSocketは、djangoではなく、非同期処理を前提として作られたFastAPIに委ねることで、より高速なWebSocketを実現させる。 本記事では、FastAPIを使ってのWebSocketを実現させる。 ただし、セキュリティ ...
  • Djangoでローカルメモリキャッシュを使う

    djangoで一時的にデータをメモリに記録して欲しい場合、ローカルメモリキャッシュを使う。 Redisと違って、プロセス単位で動くため python manage.py runserver を止めたり再起動させたりするとすぐに揮発してしまうが、Pythonオブジェクトの保存もできるため、使いどころを考えればとても便利。 使い方 settings.py に以下を追記。 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } } これでキャッシュの設定は完了。 続いて、ビューなどの任意の箇所で from django.core.cache import cache topics = Topic.objects.all() cache.set('topics', topics, timeout=60) などとキャ ...
  • Djangoでサーバーのウェブカメラを使ってライブ配信、クライアント側からON・OFF操作

    【Django】任意のタイミングでサーバーのカメラでライブ配信する【imutils.video.VideoStreamer】 ここで、クライアント側からサーバーのウェブカメラの電源をON/OFFできるようにしたが、コードがやや煩雑でわかりにくい。 不要な処理も含まれていたため、まずはサーバー側にあるウェブカメラの映像をブラウザに表示・非表示できるようにした。 ビューのソースコード 要になるビューのソースコ ...
  • Pythonで画像認識AI(深層学習)の速習をするためのメモ【pytorchで画像認識学習・推論のサンプルあり】

    急遽AI開発(特に画像認識)が必要になったため、それに必要な用語や概念的なものをまとめる。 ほとんどがChatGPTの受け売りである。自分用にまとめたのでかなり雑であることをお許しいただきたい。 そもそも機械学習と深層学習の違いは? なんとなくだったため、この際はっきりさせる。 機械学習 簡単な表データを学習して推論したい場合、機械学習が有効。 データ量は数千〜数万件単位でOK。特徴量の設定は手動で行う必要が ...
  • 【Django】DBの保存(投稿と編集)、削除に対して任意の動作をする【signals】

    モデルの保存時、削除時に任意の動作をしたい時、モデルのsaveメソッドをオーバーライドするなどで対応できる。 DjangoでDBへデータ格納時(save)、削除時(delete)に処理を追加する【models.py、forms.py、serializer.pyのメソッドオーバーライド】 ただ、別のモデルに対しても同じ処理を実行したい時、モデルの外部で処理をしたい場合などでは、singalsを使う。 実装 ...
  • Pythonで処理速度のボトルネックを特定する

    Pythonの高速化には、ボトルネックの特定と改善が必要。 本記事ではボトルネックの特定をする。 関数の処理速度を調べるデコレータを用意する 以下のコードの関数をデコレータとして使うことで関数の処理時間を調べることができる。 from functools import wraps import time def timefn(fn): @wraps(fn) def meassure_time(*args, **kwargs): start = time.time() result = fn(*args, **kwargs) print(f"@timefn デコレータより {fn.__name__} : {time.time() - start} 秒") return result return meassure_time try_count = 10000000 @timefn def create_numbers_for(): numbers = [] for i in range(try_count): numbers.append(i) create_numbers_for() このtimefnはデコレータとして機能する。 def timefn(fn): @wraps(fn) def meassure_time(*args, **kwargs): start = time.time() result ...