テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Hugoでシンタックスハイライトのスタイルを変更する

Hugoの設定ファイルconfig.tomlに以下を追加するとシンタックスハイライトが有効になります。 pygmentscodefences = true スタイルを変更するには、以下を追加するとできます。 pygmentsstyle = "solarized-light" 使用できるスタイルは以下を参照すると良い…

Git hookを初期化する

Git

いろいろGit hookを試しているとどれインストールされていているか分からなくなったりして、いったんリセットしたいときは、.git/hooksを削除して、git initで再度イニシャライズをします。 $ rm -rf .git/hooks $ git init Reinitialized existing Git repo…

pyenv + toxで複数バージョンのテストを行う

pyenvを使用している環境で、toxで複数バージョンのテストをするときはまったのでそのメモです。 tox.iniに以下のように設定しておき、toxでテストを実行しました。 [tox] envlist = py36, py37 [testenv] deps = pytest commands = pytest $ tox GLOB sdist…

Clickのテストで例外をキャッチしない

PythonのCLIフレームワークであるClickでは、テストツールも用意されており、容易にテストを書くことができます。 invokeを使えば、コマンドと引数を渡すことができますが、デフォルトでは例外をキャッチします。 通常は、exit_codeの値を比較すればよいので…

Github Actionsでジョブが成功したら次のジョブを実行する

テストが成功したらデプロイするみたいに、あるジョブの実行には前のジョブが成功が必要となるワークフローを書くには、needsを使うとできます。 name: build on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@master # テス…

Pythonで優先度付きキューを使う

Pythonでの優先度付きキューはheapqを使うとできます。 import heapq 最小ヒープ はじめに、リストをキューに優先度付きキューに変換します。 que = [3, 1, 5, 2] heapq.heapify(que) 先頭に最小値がきます。(先頭以外はソートされているわけではありません…

pyproject.toml利用時にアプリのバージョンを取得する

Pythonパッケージを作成する際、__init__.pyにバージョンを書いておき、setup.pyでは__init__.pyからimportすることが一般的かと思います。しかし、pyproject.toml を利用するとPythonファイルではないので setup.py のようにバージョンをimportすることはで…

Pythonでエスケープされた文字列を戻す

argparser の引数として文字列を入力すると自動的にエスケープされますが、改行などプログラム中で使いたい場合があるかと思います。そこで、エスケープされた文字列を元に戻す方法を紹介します。 はじめに、自動的にエスケープされることを確認します。 # m…

Clickでコマンド別にファイル分割する

PythonのCLIフレームワークの1つにclickがあります。 デコレータを使って簡単にCLIが作成できますが、1ファイルにすべてのコマンドのコードを書いていくと長くなります。 そこで、CommandCollectionを使って複数のコマンドをマージすることで、コマンド別に…

hackingとisortの競合を解決する

isortのデフォルトの設定では、例えば以下のようにソートされます。 import json import time from pathlib import Path from urllib.parse import urljoin, urlparse しかし、hackingを導入していると以下のようにエラーが発生します。 ./main.py:3:1: H306…

ArgumentParserをテストする

argparse を使うと簡単にCLIが作成できます。 そのままテストすることが少し難しかったので、調べた結果、parseするとことを別の関数に切り出して、その部分をテストするのが良さそうです。 # main.py def main(): args = parse_args(sys.argv[1:]) def pars…

DockerのMySQLを使う

パスワードを設定する場合 docker run --name mysql -e MYSQL_ROOT_PASSWORD=pass -d -p 3306:3306 mysql:5.7 パスワードを設定しない場合 docker run --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d -p 3306:3306 mysql:5.7

Railsでmysql2のビルドエラー

MacでRailsのインストールする際にMySQL周りでエラーが発生したので、ログと解決策をメモしておきます。 エラーログ Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/user_name/project_name/vendor/bundle/…

ptpythonのColorSchemeを変更する

ptpythonのカラースキーマを変更する方法を紹介します。 はじめに、ptpythonのconfigファイルをダウンロードします。 mkdir ~/.ptpython wget https://raw.githubusercontent.com/prompt-toolkit/ptpython/master/examples/ptpython_config/config.py -P ~/.…

Pythonの再帰呼び出しの上限を変更する

Pythonの再帰呼び出しの上限は sys.getrecursionlimit() で確認できますが、デフォルトでは 1000 かと思います。 再帰呼び出しの多いアルゴリズムを使う場合には、エラーになるので、上限を変更することができます。 import sys sys.setrecursionlimit(10**6)

Pythonでn番目のフィボナッチ数を求める

フィボナッチ数列は 0, 1, 1, 2, 3, 5, 8, 13, ... と続く数列です。 このn番目の値をPythonで求めるには以下のようなにすれば良いです。 単純な方法 def fib(n): if n < 2: return n else: return fib(n - 2) + fib(n - 1) キャッシュを使う方法 標準モジュ…

freeコマンドやtopコマンドをインストールする

プレーンなDockerイメージを使っていると基本的なコマンドがインストールされていないことがあります。 その場合、 procps をインストールすることで free や top などのコマンドをインストールすることができます。 apt install procps yum install procps …

pyenvでpythonのinstallエラーを解決する

pyenvでpythonをインストールしようとすると以下のようなエラーが発生しつまりましたので、その解決策を忘備録として残しておきます。 pyenv install 3.7.4 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Download…

TensorFlowとPython/CUDAのバージョン対応表

TensorFlow Python CUDA cuDNN 1.14.0 3.3~3.7 10 7.4 1.13.1 3.3~3.7 10 7.4 1.12.0 3.3~3.6 9 7 1.11.0 3.3~3.6 9 7 参考 Build from source | TensorFlow

MySQLのGRANT権限を持つユーザ作成する

CREATE文でユーザ作成してからGRANT文で権限付与する。 CREATE USER 'usrname'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON `dbname`.* TO 'usrname'@'localhost'; MySQLのバージョンによってはうまくいかない例 まとめて実行すると、バ…

第53回 コンピュータビジョン勉強会@関東(前編)の発表スライドまとめ

kantocv.connpass.com Reinforced Cross-Modal Matching and Self-Supervised Imitation Learning for Vision-Language Navigation Reinforced Cross-Modal Matching and Self-Supervised Imitation Learning for Vision-Language Navigation(関東CV勉強会 …

TensorflowのSaved Modelを確認する

Tensorflowをインストールすると同時にインストールされるsaved_model_cliを利用すると、Saved Modelの入出力を確認することができます。 $ saved_model_cli show --dir models/mnist/1/ --all MetaGraphDef with tag-set: 'serve' contains the following S…

OpenCVのImportErrorを解決する

事象その1 pip install opencv-python でインストールしたOpenCVで以下のようなエラーが発生しました。 Traceback (most recent call last): File "infer_ssd.py", line 5, in <module> import cv2 File "/home/ubuntu/.pyenv/versions/3.6.8/lib/python3.6/site-pac</module>…

Pythonで多重ループを1行にまとめる

Pythonで多重ループを書くとき、標準ライブラリのitertools.productを使うと便利に書けます。 例えば、以下のような3重ループも # A, B, Cはリスト for i in A: for j in B: for k in C: print(i, j, k) このように、1行で書くことができます。 from itertoo…

pipenvのDistributionNotFoundを解決する

事象 久しぶりにpipenvを使用したら以下のようなエラーが発生しました。 Traceback (most recent call last): File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/bin/pipenv", line 6, in <module> from pkg_resources import load_entry_point File "/usr/local</module>…

macでPDFのサイズを小さくする方法

手順 PDFを開いて、「ファイル」-> 「書き出す」を選択 書き出し名を変更 変更しないと上書きされます Quartz フィルタで「Reduce File Size」を選択 所感 いくつか試してみたところ、サイズが40%から80%程度に削減されました。 50MBくらいの大きなファイル…

markdownで記事を書くとき、コードを折りたたむ方法

はてなブログやQiitaでmarkdownで記事を書くとき、HTMLのdetailsタグを用いることで、コードなどを折りたたむことができます。 detailsタグの子要素にsummaryタグに、最初から表示させておく内容を書いておきます。 書き方 <details> <summary>コードを見る</summary> ``` python # Fizz </details>…

pyenvのanacondaを使っているときgit stashのエラーを解決する

前提 pyenvでanacondaをインストールしている anacondaをインストールしていない場合、問題は発生しない インストールしたanacondaをpyenv globalなどで設定していない つまり、以下のような状況です。 $ pyenv versions system * 3.6.8 (set by /Users/user…

Jupyterのパスワードを変更する

ハッシュ化したパスワードを準備する $ python -c 'from notebook.auth import passwd;print(passwd())' Enter password: Verify password: sha1:f8fa7727475f:2f78d141aab898374aec43c8ee40e0d0ddf5aab5 設定ファイルにパスワードを書く $ vim ~/.jupyter/j…

ファイルの種類が判別できるfileコマンドでできること

CLI

文字コードが判別できる テキストファイルは文字コードがいくつかあり、開けないアプリケーションもあったりするので、異なるOSの人に渡す際には事前確認しておくと良いでしょう。 $ file sample.txt sample.txt: ASCII text $ file sample.md sample.md: UT…