コンテンツにスキップ

2022

SQLAlchemyのSessionとin_transactionを調べた

SQLAlchemy でトランザクション管理をするにあたり、SQLAlchemy であつかう Session について理解する必要があったので検証しました。また、SQLAlchemy 1.4 Documentationに書いてあったin_transactionの挙動を確認したかったので、ついでに動作検証しました。

ソースコード

https://github.com/mt2m10/session-check-code-in-SQLAlchemy

検証内容

  • sessionmakerscoped_sessionの Session 生成の違い
  • in_transactionの挙動

検証環境

  • Windows 11
  • WSL2 (Ubuntu)

結果

SQLite を使って確認しました。

(session-check-code-in-SQLAlchemy) mah@DESKTOP-TQ41EI2:~/dev/session-check-code-in-SQLAlchemy$ python main.py
------------------------------------
main 開始
------------------------------------

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5330>] transaction status: False
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e6920>] transaction status: False

[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5330>] transaction開始
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5330>] トランザクションを開始します

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5330>] transaction status: True
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e6920>] transaction status: False

[$<sqlalchemy.orm.session.Session object at 0x7f0e284e6920>] transaction開始
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e6920>] トランザクションを開始します

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5330>] transaction status: True
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e6920>] transaction status: True

------------------------------------
main 終了
------------------------------------

------------------------------------
main 開始
------------------------------------

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: False
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: False

[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction開始
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] トランザクションを開始します

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: True
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: True

[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction開始
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] 既にトランザクションが開始されてます

トランザクションの確認
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: True
[$<sqlalchemy.orm.session.Session object at 0x7f0e284e5600>] transaction status: True

------------------------------------
main 終了
------------------------------------
  • sessionmakerは、sessionmaker()()のたびに新しいセッションを生成する
  • scoped_sessionは、複数回セッション生成しても同じセッションが返ってくる
  • in_transactionはトランザクション中ならTrue、トランザクション外ならFalseが返ってくる

pyenvでのinstall中にエラーが発生するときに対処したこと

対処方法

下記パッケージをインストールする。

sudo apt install -y build-essential zlib1g-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

環境

  • Windows 11
  • WSL2 (Ubuntu 20.04)
  • pyenv 2.3.4-2-g23559ee6

エラー内容

pyenvコマンドを使って Python をインストールすると、途中でエラーが発生しました。

$ pyenv install 3.10.6
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...

BUILD FAILED (Ubuntu 20.04 using python-build 2.3.4-2-g23559ee6)

Inspect or clean up the working tree at /tmp/python-build.20220906122257.2953
Results logged to /tmp/python-build.20220906122257.2953.log

Last 10 log lines:
checking for python3... python3
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/tmp/python-build.20220906122257.2953/Python-3.10.6':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

このエラーはbuild-essentialをインストールすると解決できるのですが、次に別のエラーが発生します。

すべてのエラーをここに載せるのもめんどうです。
とりあえず、対処方法のコマンドを実行すればエラーが解消できるのでお試しください。

参考

  • https://pouhon.net/pyenv-error/2009/

Intel(R) Wireless-AC 9260 で頻繁に切断されるときの暫定対処

先日、購入した ThinkCentre M75q Tiny Gen2 には Intel(R) Wireless-AC 9260 が取り付けられています。この機能によって Wi-Fi と BlueTooth が使えるんですが、Wi-Fi の動作が非常におかしい。数分ごとに Wi-Fi が切れてしまい、1 分ぐらい経つと再接続します。これの繰り返し。

ストレスがたまりまくるので調査結果と暫定対処したことをまとめます。

環境

  • ThinkCentre M75q Tiny Gen2
  • Windows 11 Home 21H2 (OS ビルド: 22000.918)
  • Intel(R) Wireless-AC 9260
  • AMD Ryzen 5 PRO 5650GE

結果

ネットワークのプロパティにある、802.11n/ac ワイヤレスモード1. 無効にする

ネットワークのプロパティ

調査内容

1. Lenovo のヒント集の解決策をやる

Wi-Fi 接続が頻繁に落ちる/途切れる - Window 7/ 8 /10

方法 1,2,3,4,5,8 を試してみました(6,7 は自分の環境では実施できなかったためやってない)。結果的に方法 8で対応したんですが、デメリットとして回線速度の低下があるので、もう少し試してみます。

2. 最新ドライバーのインストール

インテル ® Wireless-AC 9260

インテル公式ページからドライバーをダウンロードしてインストールしました。バージョンは22.160.0です。切断されるまでの時間が数分伸びましたが、ほとんど改善されませんでした。


あとは、ドライバーを戻したりいろんな設定を ON/OFF にしたりして検証しましたが、改善されませんでした。なので、Wi-Fi 接続が頻繁に落ちる/途切れる - Window 7/ 8 /10にある方法 8の方法で対応しました。

デメリットとして、5GHz 帯が利用不可となるため、通信速度が最大で 54Mbps の速度になります。ベストエフォートなので実際にはもう少し低速になると思います。自分はそんなに帯域を使うことはしないので、しばらくはこれで様子見しようと思います。

補足

イベントビューアー

イベントビューアー

イベントビューアーを見ると、キーワードが観測できました。

  • Netwtw08
  • イベント ID: 5010

検索すると似たような事象で困ってる人はいるんだけど、誰一人解決してないんだよなー

Intel(R) Wireless-AC 9260 は Wi-Fi6 非対応なので、そもそも少し不満だったから、そのうち新しい Wi-Fi カードを買おうと思います。

参考

4Kモニターとコンパクトデスクトップを購入

Amazon セールと Lenovo セールのタイミングでモニターと PC を購入しました。

購入の際に次の点を気にして探しました。

  1. モニターの解像度が 2K 以上
  2. メモリー 16GB 以上
  3. CPU はそこそこ
  4. GPU はいらない
  5. できれば持ち運びたい

ラップトップだと少し割高だったので、数年前から気になってた ThinkCentre M75q Tiny Gen2 に決めました。持ち運びはできないけど、持ち運ぶ機会もかなり少ないので、そこは妥協しています。

モニターは一応家に 1 つあるんですが、リビングで少し PC をいじりたいときに使いたかったので、小さめのモニターを購入しました。ほんとはJAPANNEXT のやつがほしかった...

こんな感じでラップトップ感覚でモニターを置いています。

PC はメモリー 8GB ですが、16GB のメモリーも買って増設しています。なのでメモリー 24GB です。不足はないかなー思います。足りなければ、16GB をもう 1 枚買います。

Wi-Fi の動作が非常に不安定です。Wi-Fi の状態を見てると継続時間が数分~ 10 数分で切断されてしまいます。ドライバーの更新とかいろいろ試してるんだけど、期待するほど解消されず。ストレスがたまるほど切断が多い場合は、Wi-Fi カードの交換をしてみようかなと思います。Wi-Fi6 非対応なのでちょうどいいし。

そんなところです。

Docusaurus

Facebook 製のドキュメント生成ツールのDocusaurusにサイトをリニューアルしました。

このサイトはあまり運用はしていないが定期的に UI を変えたくなるんですよね。前回は Next.js 製だったけど、UI を自分で作るのが面倒でモチベーションが下がってきました。もう少しお手軽にできるものを探していたところに、Docusaurus が目に入ったので試しに導入しました。

ブログやドキュメントの追加のしやすさは、とてもよいと感じています。オリジナルのページを作成したいときはsrc/pages配下でゴニョゴニョすればできそうだしカスタマイズ性も OK。カスタマイズには React.js の知識は必要だけど知ってればそんなに難しくない(はず)。

いろいろやれることが多いので docs 見ていろいろ試していこうと思います。

Wi-Fi環境を「メッシュWi-Fi」にして、おまけで「v6プラス」にも対応してみた

家のネットワーク環境をアップデートしたのでまとめます。

アップデート前は寝室や書斎のWi-Fiが不安定でインターネットにつながらないこともありました。そこでメッシュWi-Fiを導入し解決することにしました。

用意したルーターはこれです。

ネットワーク構成は下図のようにしました。 20220724_1_構成.png

WX3000HPをルーターモードで動かし、Deco X20をブリッジモードにしています。 最初はDeco X20だけで運用するつもりでした。しかし、次の要因からv6プラスも使ってみることにしました。

  • プロバイダーがv6プラスに対応している
  • Deco X20はv6プラス非対応
  • v6プラス対応のWX3000HPを持っている

ONUとDeco X20の間にWX3000HPを置くことにより、v6プラスの恩恵を受けることができました。

ネットワーク環境のアップデート後は家のどこでもWi-Fiを受信できるようになり、かなり改善できました。回線速度は50〜180Mbpsぐらいなので、普段使っている分には問題ない速度です。

プロフィールページ作成

重たい腰を上げてプロフィールページを作りました。内容はまだ薄いですが徐々に更新していこうと思います。 ページ上部にアイコンを追加しました。こちらからもページ遷移できます。

ついでにダークモード対応をやめました。darkベースのみとしました。理由はプロフィールを作ったときに背景色とか取り入れたらライトモードでの色を考えるのがめんどうになったから。気が向いたらまた対応します。

追記

docusaurusにリニューアルしたので、ダークモード復活しました。

追記2

ブログを変えまくってるので、もうよくわからない。

縁のなかった岐阜県に引っ越した

家庭の事情により、東京から自分には縁のなかった岐阜県に引っ越しをした。

6月の中旬から住んでいるが、今のところとても快適に過ごせている。高い建物がなく緑が目に入る環境は気持ちが良い。家の隣にはパチンコ屋があるけど、音が気になることは殆どない。東京で暮らしていた時の車の音の方がよっぽど騒がしかった。

不安なのは車の運転。ペーパードライバーで10年近く運転していないのでめちゃくちゃビビっている。安全運転を心がけます。

岐阜には5、6年ぐらい住んでそのうち東京に戻ってくる予定だが、過ごしやすいので気が変わるかもしれない。

AWS Certified Cloud Practitioner に合格

5/27(金)にテストセンターで AWS Certified Cloud Practitioner 試験を受けてきて合格しました。

点数は787点と余裕とは言い難い成績でしたが、合格できて一安心しました。

試験勉強には 一夜漬けAWS認定クラウドプラクティショナー直前対策テキスト[第2版] だけ使いました。AWSは仕事で少し触れていて、試験で問われるサービスの6割程度は知っていたので、この書籍のみの学習で済みました。

仕事でAWSを利用したアーキテクチャ設計を知りたいため資格を取りましたが、この資格だけでは不十分だと感じています。この勢いで AWS Certified Solutions Architect - Associate 試験 (SAA-C02) の合格を目指して学習していきたいと思います。

イベントとアクションの違い

画面設計書に処理内容を書くときに「イベント」や「アクション」について記載することがあります。今まで雰囲気で使っていましたが、気になったので調べました。

14年前のとあるブログ記事にはこのように書いてありました。 http://softest.cocolog-nifty.com/blog/2008/12/post-aecd.html

イベントとは、遷移をもたらす外的刺激や内的変化などを表し、入力とも事象とも表現される。ひとつのイベントは一つの遷移を決定するが、それらはイベント発生時の状態によって変化する。場合によっては、イベントはシステムに関するものではなく、システムのユーザへの刺激で表現される。たとえば、「電源ボタンを押す」「接続の認証が成功する」「検索クエリーのレスポンスが確定する」「○○さんに連絡する用事が発生する」など。

アクションとは、遷移の結果生じる分析が可能な対象物を意味し、入力と対照的に出力とも表現される。混同されやすいが、アクションと遷移後の状態は区別される。ただし、出力も遷移後の状態も同じ名称で表現されることが多いのは確か。たとえば、「(電源がONに遷移して)ディスプレイが点灯する」「(接続の認証が成功して)アイコンが点滅する」「(検索結果が確定して)検索結果が表示される」などである。

なるほど。イベントはアクションのきっかけとなるもの。アクションは処理後の状態を表すようです。

IPAが作っている 第6章 アクション明細 - 000004447.pdf では次のように定義されていました。

イベント:画面の遷移を引き起こすきっかけとなるもの

アクション:画面遷移に伴って起動される動作

具体例を見てみます。

  • アクション名: ログイン
  • イベント名: ログインボタン押下
  • アクション処理概要: 入力されたUsernameとPasswordをもとに顧客データを検索し、ユーザ情報画面を表示する。

イベントはきっかけなので、きっかけとなる事象を書きます。

アクションは処理動作について書きます。どうやったらアクション名の状態になるのか、を表すことができれば良さそうです。

イベントが点でアクションが線ってイメージがわきました。

両者の違いについて調べてもあまり出てきませんでしたが、この2つの説明を読んで自分の中では割と区別できるようになったと思います。