めもちょー

メモ帳代わりに使っています。

2022-01-01から1年間の記事一覧

達人に学ぶSQL徹底指南書 SELECTクエリ図解まとめ

SELECT文を多く使う仕事に再び就いたので復習がてらに代表的なSELECT文をまとめてみました。 『達人に学ぶSQL徹底指南書』から良さそうな例を抽出して書きます。 CASE文 例1 例2 例3 テーブル同士のマッチング 例4 CASE式の中で集約を使う Window関数 例1 自…

『Fluent Python』メモ

『Fluent Python』を読んだのでメモを残します。 1章 Pythonのデータモデル 2章 シーケンスの配列 3章 ディクショナリとセット 4章 テキストとバイト 5章 第一級関数 6章 第一級関数を使ったデザインパターン 7章 関数デコレータとクロージャ 13章 演算子オ…

『ソフトウェアテスト技法』 メモ

同値分割法と境界値分析 例 考え方 有効クラスの範囲を考える(隠れた制約を考える) 境界値と同値クラスの代表値を考える 同値クラスの代表値を決める デシジョンテーブル 例 考え方 状態遷移テスト 例 組合せテスト 同値分割法と境界値分析 プログラムの内…

GitHub Actionsでyamllintを行う

docker-compose.yamlや.github/workflows/run.yaml などyamlファイルに対するlinterとしてyamllintというものがあります。 github.comGitHub Actionsで動かす場合、次のように記載します。 --- name: Yaml Lint on: [push] # yamllint disable-line rule:tru…

hadolint (Haskell Docker Linter) でdockerfileのリントを行う

hadolintを試してみたのでメモを残します。 ローカルで実行 バイナリで実行する Dockerで実行する GitHub Actions で実行 自分が書いたDockerfileで試す DL3008 DL3015 DL3042 DL3013 DL3059 DL3025 ローカルで実行 バイナリで実行する /usr/local/bin/ にcu…

シェルスクリプトをより良く書く

linterを使う $ sudo apt install shellcheck $ shellcheck hoge.sh github.com 条件式 や算術演算子を使う if 文の条件を書く場合 [ ] (testコマンド)よりも (条件式)を使うべき。 testコマンドの場合、条件式を表す<>, (), &&, ||をエスケープする必要があ…

Ubuntu 22.04 LTS キー設定

Caps LockをCtrlとして扱う コチラのTweaksのやり方を参考にして行った。 linux.just4fun.biz普段はCtrlとCaps Lockを入れ替えるやり方を行っているが、ラプトップの場合だとラップトップのキーボードを使う場合と、HHKB(Ctrlの位置がCapsLockの位置にある…

ThinkPad E14 Gen 3でWindows 11とUbuntu 22.04 LTSをデュアルブートする

UbuntuとWindowsを別々のディスクにインストールするやり方です。 M.2 SSDを増設 Ubuntu22.04のISOファイルをダウンロード ISOファイルをUSBメモリに焼く BIOSでBootの優先順位を変更 Ubuntuをインストール Ubuntuの起動確認 Windows11の起動確認 M.2 SSDを…

ThinkPad E14 Gen 3(AMD) のメモリ・SSD増設

LenovoのセールでThinkPad E14 Gen 3を購入しました。 そのままの状態(RAM 8GB, SSD 256GB)だと何も作業ができないため、増設作業を行いました。購入したメモリとSSDは、下記のものになります。 問題なく増設することができました。 shop.tsukumo.co.jp sh…

IIJの新人研修資料やってみた

Dockerを触ってみよう nginxで静的コンテンツを表示する。 Jenkinsを触ってみよう 秘密情報の利用 開発環境をDocker Composeで構築 Database Overview SQL ACID特性 MongoDBを使ってみよう MongoDB(ドキュメント指向DB)が使われる場所 primary-secondary-a…

第1回SQLコンテスト

練習 参加記 練習 用意されたテーブルから要求されたビューになるようなSQLを書くコンテストがありました。 第4問は縦に並んだレコードを横にする問題で、`GROUP BY`と`SUM(CASE WHEN 条件1 then x ELSE 0 END)`を使えば解けました。自分の回答 topsic-conte…

『SQLパズル』メモ

こちらの問題集から、厳選した問題の回答記録を記します。 Q13 2人以上か、それが問題だ 自分の解法 エレガントな解法 Q14 電話とFAX 自分の解法 解答 エレガントな解答 Q30 買い物の平均サイクル 自分の解答 Q36 一人二役 自分の解法(本の解法4とほぼ同じ…

楽観的ロックと悲観的ロックをタイムシーケンス図で理解する

前提 タイムシーケンス図的理解 悲観的ロック 楽観的ロック 前提 複数のクライアントが同じファイル(レコード)を編集する際に競合を防ぐ方法として排他制御がある。 排他制御の方法として悲観的ロックと楽観的ロックがある。まずは、一般的な話 説明 前提 …

『シェルスクリプト基本リファレンス』メモ

シェル力を高めたく『シェルスクリプト基本リファレンス』を読みました。本記事はそのメモになります。 3. シェル文法の循環構造 4. 複合コマンド 5. 組み込みコマンド1 3. シェル文法の循環構造 p.33 パイプラインのコマンドの終了ステータスを個別表示 $ (…

Python・JavaScript・HTMLのLint Checkを行うGitHub Actions

Pythonにはpipでflake8, isort, blackを入れる。 name: "test" on: [pull_request, push] jobs: style: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Set up Python 3.9 uses: actions/setup-python@v2 with: python-…

seleniumからhtml2canvasを実行してwebページの特定タグ領域を画像化する

seleniumを使って部分的な領域をスクショする方法を(無理やり)つくりました。selenium.webdriver.chrome.webdriver.WebDriverにもsave_screenshot()というメソッドがありますが欲しい位置が取得できないという問題がありました。 全画面をスクショする方法…

Pythonでジェネリクスを扱う

最近Pythonを書くにしても、型を意識して書くことが増えたためこちらのドキュメントについて、あやふやに理解していた部分をまとめました。 docs.python.org 新しい型を定義したい時 ジェネリクス Any型 特殊型 typing.LiteralString typing.NoReturn typing…

アプリケーションからSQLを実行する際の注意点

PythonなどのアプリケーションからSQLを実行する際のポイントを個人的にまとめてみました。 Python関数よりもSQL関数 NG OK bulk NG OK エラー処理 NG OK Python関数よりもSQL関数 基本的にPythonの速度はSQLの速度と比べて非常に遅いため, SQLで実行できる…

Wordpress + MySQLをdockerで動かす & MySQLのデータをdumpする

コンテナの作成 ネットワークを作成 名前解決のためにコンテナ間にネットワークを作る $ docker network create -d bridge wp-net MySQL側 mysql.envを用意 MYSQL_ROOT_PASSWORD=password MYSQL_DATABASE=wordpress MYSQL_USER=wordpress MYSQL_PASSWORD=pas…

Fast API + nginx のWebアプリをDockerで動かす

FastAPIアプリ側のコンテナの操作 import os import uvicorn from fastapi import FastAPI MESSAGE = os.environ['MESSAGE'] PORT = os.environ['PORT'] app = FastAPI() @app.get("/") def read_root(): return {"Hello": MESSAGE} @app.get("/items/{item_…

Fast API + uvicorn のサーバーをDockerでつくる

コンテナを作成 # pythonイメージから何もしないコンテナを起動 $ docker container run --name base -d python:3.7.5-slim tail -f /dev/null # fastapiとuvicornをコンテナにインストール $ docker container exec base pip install fastapi==0.73.0 $ doc…

『Effective Python』メモ

Effective Pythonを読んだのでそのメモです。 関数をトレースするデコレータ with句を作成するためのcontextmanagerデコレータ 様々なキュー 両端キュー(Double-ended Queue) ヒープキュー(Heap Queue) 関数をトレースするデコレータ 関数呼び出しの引数…

lyricsGeniusで歌詞を取得する

歌詞情報が欲しい場面があったのでメモ lyricsGeniusというOSSが便利だった github.comColdplayのYellowの歌詞を取得したい場合 import lyricsgenius token = 'XXXX' genius = lyricsgenius.Genius(token) song = genius.search_song(title='Yellow', artist…

RAIDの種類のまとめ

RAID0 複数のディスクにデータを分散させて保存する仕組み. 設定が必要なく使い勝手が良い(自分のPCではコレ) あるディスクが破損するとそのディスクにあるデータがなくなるため冗長性がない. RAID1 一方のディスクのデータをもう一方のディスクにまるまる…

SatisfactoryのSankey Diagramを書きたい

Sankey Diagram基本 Sankey Diagramとは工程間の流量を表現するグラフです。 各工程間の流れをみながら、線の太さによって表現される流れの量を確認できます。 import plotly.graph_objects as go fig = go.Figure( data=[ go.Sankey( node = dict( pad = 15…

動画のラベルを抽出する

文字の範囲のみをトリミングした動画から、(フレーム番号, 時刻, そのフレームの画像に表示されている文字)を抽出する import cv2 import numpy as np import csv from PIL import Image import pyocr def cv2pillow(image): new_image = image.copy() if …

動画から特定範囲をトリミング

必要なものをインスコ pip install ffmpeg-pythonimport ffmpeg import cv2 import os.path import numpy as np def video_trimming(video_path, x, y, w, h): """ video_path # ファイルの絶対パス start_x = 850 # 切り取りたい区画のx座標(px) start_y …

SeleniumでChromeを使いスクレイピングした際に容量が増えたときの調査方法と対処方法

急に容量が増えたときの調査方法 スクレイピングしてたら意図しないストレージ容量の増加が起きた. データの保存先のMySQLの容量は大したものではなかったため意図せぬログファイルやキャッシュファイルの仕業と考えられた. 実際, ディスク容量アナライザを…

cv2.VideoCaptureで任意のフレーム番号の画像とその時刻を得る

動画の各フレーム番号の画像に対して画像処理を施し再構成する際に(画像処理を施したフレーム画像, 時刻)が必要 cv2.VideoCaptureを使うと上の要件を満たせることが分かったので基本的な使い方を試した import cv2 import numpy as np if __name__ == '__m…

pytestとblackのテスト環境をGitHub Actionsで作る

poetryのインストール curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - 環境変数を通す vim ~/.bash_profile 下記を追加 export PATH="$HOME/.poetry/bin:$PATH" 既存のプロジェクトの場合はinitでpypro…