さるへい備忘録

さるへいのやったことを綴っているブログです。基本的にテクノロジーの話題です。

デフォルト引数に関数を使う場合の注意点

Pythonの関数定義に欠かせないデフォルト引数ですが、とある罠にひっかかったので備忘録として残しておきます。 まずは、以下のようなコードを用意します # coding: utf-8 import datetime import time def arg_test(message: str, now=datetime.datetime.no…

S3で画像をバックアップしてみようの巻

前回 saruhei1989.hatenablog.com の記事の最後に、レプリケーションはバックアップじゃないとお話しましたね。 そう、バックアップじゃないのです。でもS3サーバのバックアップほしいときってありますよね? 僕はほしいです。 ということで、なんとかしたか…

S3のレプリケーション機能

S3のオブジェクトレプリケーション機能というのがあるので、備忘録がてら解説してみます。 docs.aws.amazon.com こちらは、簡単にいうと、S3に格納しているオブジェクトを別のバケットなどにレプリケーションしてくれる機能です。 リードレプリカを作成する…

フロントエンドのリクエストに渡す値のテストについて

今回は短い備忘録です。 普段フロントエンドでAPI通信する際は、皆さんmockを使っていると思います。 よく見るのが、完全にmockにして、ハードコードで値を返してしまうといったテストです。 Pythonなどのバックエンドなら、渡す値も割とコードで明確に示せ…

SSGやSSRと多言語の組み合わせについて ~ PythonでSSG,SSR①

皆さんSSG、SSRしてますか? CSRで描画しているサイトなど、描画スピード対策やSEO対策で苦慮した方は大勢いらっしゃると思います。 そういった場合、SSG(Static Site Generator)やSSR(Server Side Rendering) を適用したサイトを考えることになるという…

headタグとheaderタグ

みなさん head タグ使ってますか。 僕はめっちゃ使ってます。 最近 header タグというものの存在を知って色々混乱したので備忘録的にに残したいと思います。 この記事を読まなくても、 head タグと header タグという全く別物があることは頭の中に残しておい…

GoogleChromeのUser-Agent凍結ではなくUser-Agent Reduction

Google ChromeによるUser-Agent凍結という話を覚えてらっしゃる方はいらっしゃると思います。 実は、いまではUser-Agent凍結ではなくUser-Agent Reduction。つまりもとの凍結とは違い、削減として計画されています。 参考 : www.chromium.org 自分の備忘録も…

Pythonで学ぶデザインパターン入門Builderパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第7段です。 Builderパターンとは 具体的な処理の骨組みを先につくっておくというパターンです。 Template Methodパターンでは、スーパークラスがサブクラスをコ…

ドラゴンクエストXを支える技術を読んでみた

ドラゴンクエストXを支える技術を読んでみたので紹介します。 gihyo.jp ざっくりどんな本か ドラゴンクエストXがどのように作られたかを紹介している本 技術の知識があまりなくてもよくわかる といった内容の本です。 良かった点 この本の一番良かったところ…

インフラエンジニアの教科書2を読んでみた

以前読んだインフラエンジニアの教科書の続きを読みました。 saruhei1989.hatenablog.com 公式サイトはこちら www.c-r.com ざっくりどんな本か 通信などインフラの基礎の仕組み が記載されています。 各項目は各項目の専門書ほど詳しく書かれていないのです…

Pythonでsshtunnelをつかって本番DBにトンネリング接続を試してみる

パフォーマンステストをする際に開発用のDBじゃ負荷がわかりづらいみたいなことはありませんか? そんな時にもう開発環境から本番までパフォーマンス測定のためにつなげてみよう!ってなったのでそのやり方を紹介します。 sshtunnel Python製のsshトンネリン…

Pythonで学ぶデザインパターン入門Prototypeパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第6段です。 Prototypeパターンとは 今回もインスタンス生成に関するパターンです。 ざっくり説明すると、インスタンスの雛形をどこかに保持しておき、それを元に…

Pythonでlistをsetで重複排除してソート

Pythonでsetを使う際にいろいろ困ったのでこちらに備忘録を残します。 setとは? 集合を扱うための仕組み。 公式ドキュメントは以下です。 docs.python.org 特徴としては、list みたいな感じだけど重複除去されているということです。 item = set() item.add…

Pythonで学ぶデザインパターン入門 Singletonパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第5段です。 Singletonパターンとは 定義した範囲内で、そのものが1つしか存在しないことを保証するパターンです。 よくある例でいうと、実行環境内でインスタン…

インフラエンジニアの教科書読んでみた

インフラエンジニアの教科書を読んでみました。 www.c-r.com せっかくなので個人的なレビューをしてみます。 ざっくりどんな本か インフラエンジニアの仕事の種類 インフラエンジニアの基礎知識 といったものが記載されています。 良かった点 インフラの基礎…

Pythonで学ぶデザインパターン入門 Factory Methodパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第4段です。 Factory Methodパターンとは 前回紹介した saruhei1989.hatenablog.com を、インスタンス生成の際の肉付けという特定パターンで活用したものです。 …

クリーンアーキテクチャ(Clean Architecture)読んでみた

最近巷で有名なClean Architectureを読んでみました。 Clean Architecture - アスキードワンゴ ものすごく僕個人の気持ちですが、まとめてみました。 ざっくりどんな本か アーキテクチャとはなにか? アーキテクチャとはどう設計したら良いか? そもそもクリ…

Pythonで学ぶデザインパターン入門 Template Methodパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第3段です。 Template Method パターンとは 文字通り、処理の大枠のテンプレートを作るパターンです。 具体的には、抽象クラスなどで処理のテンプレートを作成し…

Python3.7入れる時のOpenSSLエラー

以下の記事に続き、Python3.6まで大丈夫だけど、Python3.7インストール時にopensslエラーがでました saruhei1989.hatenablog.com エラーがでたら以下のような表示になります。 $ pipenv --python 3.7.2 Warning: Python 3.7.2 was not found on your system……

Pythonで学ぶデザインパターン入門 Adapterパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードを Python に書き直していくシリーズ第2段です。 Adapterパターンとは adapterパターンとは、その名の通り電源に対する電源アダプターのポジションです。 「すでに提供されているもの」がそのまま使…

URLのパースを各言語で行った時の挙動の違い

URLをパースしていて不可思議な現象に立ち会ったので紹介します。 プログラムを書いていて、URLをパースしなければいけない機会というのは結構存在すると思います。 PythonとJavaScript両方で同じURLをパースしたら片方でエラーが出て、片方ではうまくいくと…

Pythonで学ぶデザインパターン入門 Iteratorパターン

結城先生の Java言語で学ぶデザインパターン入門 のコードをPythonに書き直していくシリーズ第1段です。 Iteratorパターンとは ざっくり言えばデータを順番にひとつひとつ数え上げていくパターンです。 具体的には、入れ物(Aggregate)に対して、反復して数え…

Pythonで学ぶデザインパターン入門

結城先生の名著である Java言語で学ぶデザインパターン入門 をPythonに書き直して勉強していこうコーナーを急にやりたくなりました。 www.hyuki.com 以下に順番に掲載していきます。めざせ全部網羅 1章 Iteratorパターン ひとつひとつ順番に走査して数え上げ…

Python3.7入れる時に `No module named '_ctypes'` エラー

Python3.6までは問題なくビルドできたのに3.7で _ctypes のエラーがでてビルドできないといった嘆きをよく見ます。 $ pipenv --python 3.7.2 Warning: Python 3.7.2 was not found on your system… Would you like us to install CPython 3.7.2 with pyenv? …

AWSのEC2でT2インスタンスからT3インスタンスへの移行

AWSのEC2インスタンスをT2 -> T3に変更しましたが、その時の手順が非常にめんどくさかったので紹介します。 T3インスタンスとは? 公式の紹介ページはこちら aws.amazon.com T2インスタンスも、低コストでバースト可能という意味では非常に優秀だったのです…

pipenvでPythonの開発環境を構築してみた

最近話題のPythonの環境構築ツールのpipenvですが、つかってみたので紹介します。 公式はこちら pipenv-ja.readthedocs.io pipenvとは? pipenvとは、具体的には pip と viertualenv が融合して便利になったツールと考えると良いようです。 つまり、プロジェ…

nginxでngx_http_uwsgi_moduleのキャッシュを導入した話

nginxで ngx_http_uwsgi_module のキャッシュを触ったので設定方法を紹介します。 ngx_http_uwsgi_module は、 nginxとuwsgi間のリクエストのやり取りを補助するものです。 nginxにはデフォルトで入っているのでインストールするために追加で何かをする必要…

RFC 1808、RFC 3986を見てきたらURLのQueryComponentというものが定義されていて面白かった話

いままでURLの文法をあまり深く考えたことがなかったのですが、よく調べてみると面白かったので紹介します。 ある時、PythonでURLをパースしていたんですが、ドキュメントを見ると scheme://netloc/path;parameters?query#fragment 上記のようなRFC1808の形…

連想配列を使うかクラスを定義してインスタンスを作るべきかみたいな話

最近、連想配列を使うべきかクラス定義してオブジェクトを作るかみたいなところで非常によく悩んでいます。 例えば、エラーとかだとわかりやすいのですが def validate(params): errors = [] result = True if is_bad_params(params): errors.append('is_bad…

プログラムでtransactionをはったらcommitかrollbackで終わらせるようにしよう

みなさんtransaction使ってますか?transactionは便利で使う機会がとても多いと思います。 しかし皆さんちゃんとcommitとrollbackを設定していますか? まぁセッションからコミットされない限りデータに変更ないしヘーキヘーキ!みたいなことを思ってる方も…