備忘録:SQLAlchemyのConnectionとTransactionの区別について

SQLAlchemy 1.4系と2.0系の両方において、データベース接続オブジェクトとトランザクションオブジェクト (sqlalchey.Transaction) を区別できるか調べてみた。結果、isinstance() を使ったプログラム実行時の型チェックで両者を区別することも、mypy および …

備忘録:SQLAlchemyのORMとCoreを組み合わせて使うのが良さそう

最近、身をもって学んだことの備忘録。SQLの薄いラッパーとしてSQLAlchemyを使いたいプロジェクト(後述)では以下の方針で進めるのが良いと思う。 ORMレイヤーで、クラス定義をする Coreレイヤーで、クエリー生成をする ただしテーブルオブジェクトではなく…

Pandasで同一データをto_parquetすると重複が起こる

今日試して学んだこと。Pandasで同一データフレームを複数回to_parquetで出力すると、同一データが重複する形で出力される。なので、例えばCSVファイルをPandasでParquetデータセットとしてETLするような処理を走らせる場合には同一CSVファイルを複数回処理…

過去バージョンをメンテナンスするGitのブランチ運用

Git

ソフトウェア開発の仕事では 、過去バージョンのメンテナンス(バグ修正)も行いながら最新版を開発していかなければならないことが多い。これを効率的に行えるような Git のブランチ運用方法を、マジメに調べたことが無かったなーと思ったので調べてみた。…

メモ: iOS向けの静的リンクライブラリをRustで書く方法

iOS向けの静的リンクライブラリをRustで書く方法について調べたところ、詳細に書かれたブログを見つけたので内容の走り書きのメモを残す。 https://blog.mozilla.org/data/2022/01/31/this-week-in-glean-building-and-deploying-a-rust-library-on-ios/ ま…

Ubuntu 22.04をThinkPad X1 Carbon 4thに入れる

今日はガタの来ていたThinkPad X1 Carbon (4th, 2016)のOSをUbuntu 22.04 LTS (Desktop)に入れ替える遊びをしてみたので、その手順を記録しておく。 もくじ セットアップの要点 OSインストール (Ubuntu 22.04) USB無線LANドングルのセットアップ CapsLock を…

データ分析用の簡易データストアとしてPostgreSQLを構築する遊び

前提(動機) 簡易的なデータ分析用のデータストアとして使う、という想定で PostgreSQL を構築してみた。 インフラ屋ではない人間による勉強目的での遊びなので、 いつか詳しい人にレビューしてもらいたいところではある。 雑に要件を書くと次のような感じ:…

matplotlib inlineでSVGや高画質なPNGを使う

Python のグラフ描画パッケージ matplotlib のグラフが Jupyter Lab / Jupyter Notebook 上でボヤけて表示されるのが嫌だったので、それを改善する方法を調査した。 なお、ここで紹介する手法にはどれもデメリットがある。完璧を求めて変にストレスを感じる…

RustでPythonの拡張モジュールを書く (setuptools-rust)

今日は setuptools-rust を使い、 Rust 言語で Python 拡張モジュールを勉強がてら書いてみたので記録しておく。 1.0 未到達なので、すぐに変わってしまうかもしれないけれど、 大きな流れは変わらないだろう…と期待している。 2021-11-28: setuptools-rust …

もう存在しないJupyterのKernelを削除する

Jupyter Notebook や Jupyter Lab を使っていると、たまに古い Kernel の情報が残ってしまうことがある。 具体的な経験としては、もう使わないなと思って Julia 1.0 をアンインストールしたところ、 Julia 1.0 で IJulia をインストールしたときの情報が残っ…

GitLabで数式もプレビュー可なMarkdownブログ環境(続)

前回(👇)の続き。さらに改善。 blog.sgry.jp

GitLabで数式もプレビュー可なMarkdownブログ環境

(1) GitLab で数式を含む Markdown ファイルのプレビューを行いたい。 ただし、(2) その Markdown ファイルは Web サイトやブログの原稿であるため、静的サイトジェネレータで処理できるようにしたい。 また、(3) ローカルで原稿を書いている最中もそれらの…

NumPy をマルチスレッドで計算させる

Anaconda / Miniconda や pip で普通に NumPy をインストールすると、その計算は複数 CPU コアを備えた計算機でも常にシングルスレッドで実行され…ると今日まで思い込んでいた。が、実は環境変数を設定すれば NumPy はマルチスレッドで計算してくれるらしい…

matplotlibで横軸(X 軸)を日時にする

意外とハマってしまったので、今日は matplotlib で横軸(X 軸)を日時にする方法を備忘録。初歩的な内容。

iOSアプリをGitLab.com+ローカルGitLab Runnerでテストする

GitLab.com のプライベートレポジトリでソース管理している iOS アプリのテストを、個人所有の mac に入れた GitLab Runner と連動させ、コミットのたびにテストが走る環境を作ってみた。CI、継続インテグレーションというやつだね。テスト網羅率 (coverage)…

最小限なcoc.nvim導入手順

Vim

職場で coc.nvim のセットアップが面倒という話が出ていたので、本日時点で使えるミニマルな設定について書いておく。 動作確認環境 coc.nvim 0.0.76-857c221c55 Neovim 0.4.3 Node.JS v12.16.1 coc-python 1.2.9 coc-tsserver 1.4.11 coc-json 1.2.5 最小限…

React.JS (Webpack)の画像ファイルのimportについて

本日の学び。少なくとも create-react-app で作った叩き台アプリを改造して React.JS アプリを開発していく場合、最初から Webpack が使われるよう構成されている。ここで、画像ファイルなどを扱う場合には Webpack でそれらが処理されるような作法に従って…

React.JSアプリをGitHub PagesでCI/CDする

業務上 React.JS の SPA (Single Page Application) を開発する必要に迫られて突貫工事的に勉強中。そんな中、ふと「SPA なら習作を GitHub に登録すれば GitHub Pages でホストして外出先(というか職場)からアクセスして確認したりできるな」と気が付いた…

PCディスプレイ解像度の呼び方と解像度の関係

ふと思い立ったので PC のディスプレイ解像度ごとの呼び方を表にしてみる。 呼称 解像度 縦横比 8K 7680×4320 16:9 (1.777...) 5K 5120×2880 16:9 (1.777...) DCI 4K 4096×2160 256:135 (1.8962962...) 4K 3840×2160 16:9 (1.777...) UWQHD 3440×1440 43:18 …

vim-coc (coc-lists)でCtrlP/fzf.vimを代替してみる

Vim

最近になってコード補完プラグインとして試し始めた vim-coc だけれど、これ、実は CtrlP や fzf.vim のようなファイル一覧のあいまい (fuzzy) 検索もできるらしいね。具体的には、vim-coc 用の拡張機能「coc-lists」を追加インストールすれば良い。検索処理…

RHEL (CentOS) 7でNeovimをユーザーインストールする

前回の tmux に続いて今回は Neovim を、諸事情あって RedHat Enterprise Linux (CentOS) 7 系にログインユーザーだけが使える(他ユーザーに影響を与えない)よう ~/.local の下にインストールしたので、その手順を備忘録しておく。

RHEL (CentOS) 7に静的ビルドなtmuxをユーザーインストールする

諸事情あって RedHat Enterprise Linux (CentOS) 7 系に tmux の最新版 v3.0a を、ログインユーザーだけが使える(他ユーザーに影響を与えない)形でインストールした。具体的には、関連ファイルをすべて ~/.local の下に配置するようにコンパイル・インスト…

CentOS 7でのネットワーク設定あれこれ

ここのところ Ubuntu ばかり使っており、RedHat / CentOS を久しぶりに使ったところネットワーク周りの設定確認や設定変更の方法をトント忘れてしまっていた。改めて調べたので、以下の章立てで書き残しておく: 現在のネットワーク設定を確認する IP アドレ…

Dockerで野良GitLab (Community Edition)を動かす

いろいろあって、Docker を使って野良 GitLab (Community Edition) を稼働させる手順を調べたので備忘録。

bashの.profileや.bashrc等を実行する動作仕様

どうにも忘れがちなので、bash の設定ファイルの実行(ロード)処理を改めて整理してみた。ちょっとやる気を出して、今回は図付き。また各種設定ファイルの使い分けについても最後に書いておく。 はじめに 設定ファイルの実行(ロード)順序 Interactive log…

bashのプロンプトに前回実行コマンドの終了ステータスコードを表示する

zsh の walters 等のプロンプトテーマは「前回実行したコマンドの成否 (exit status / return code) に応じて表示を変える」ようになっている。これは非常に良いなと思ったため bash で同じコトができないか調べてみた。

Rustでkcovを使って行カバレッジを計測する

まとまった時間が取れたので Rust 言語の勉強を始めることにした。何はともあれ、もはや自動単体テストを書きながら開発しないと落ち着かないので、Rust でのテストカバーレジの計測方法を調べてみた。今のところ、 kcov を使った行カバレッジ、つまり行単位…

Pythonで組み込み関数と同名の変数を使うべきでない理由

Python では input() や len() など、様々な組み込み関数を用意している。そして、これらと同じ名前で変数や関数を後から定義すると、それらを「上書き」できる。つまり、例えば input という名前の変数にファイルから読み出したデータを格納するようなコー…

Flask (Werkzeug)のResponseのmimetypeとcontent_typeの違い

Flask で HTML ではないデータを返送する場合、通常は HTML 応答に Content-Type ヘッダーを設定することになる。そのためには Response オブジェクトの mimetype プロパティや content_type プロパティに値を設定すれば良いのだけれど、これまでどちらに値…

Flaskアプリからデータをストリーミング方式で返送する

(2019-08-14: 全面的に書き換えました) Flask アプリで動的に生成したデータ(例:RDB のクエリー結果を CSV にして返す)をダウンロードさせるような機能を実現する場合、これまでデータを一度 view 関数で完成させた後に返送するしかないと思っていた。…