さるへい備忘録

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

tips

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

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

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つしか存在しないことを保証するパターンです。 よくある例でいうと、実行環境内でインスタン…

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をパースしたら片方でエラーが出て、片方ではうまくいくと…

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 が融合して便利になったツールと考えると良いようです。 つまり、プロジェ…

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を設定していますか? まぁセッションからコミットされない限りデータに変更ないしヘーキヘーキ!みたいなことを思ってる方も…

MySQLの権限設定のやりかた、RDSの場合の特別な設定も

MySQLの権限設定で困ったのでメモ。 RDSだとちょっと使えない文字列があるので注意です 普通にGRANT設定するだけ GRANT SELECT,INSERT,UPDATE,DELETE ON `DB名`.* TO `ユーザ名`@* IDENTIFIED BY 'パスワード'; 上記のSELECTやINSERTのところに許可したい権…

PythonでLRUキャッシュを使って負荷軽減と高速化

皆さん、PythonにもPHPのOPCacheのようなキャッシュ機能があったのをご存知ですか? そんなLRUCacheの紹介をしようと思います。こちらはPython3.2以降で使える機能です。 docs.python.org LRUCacheは LRU (least recently used) cache という技術をつかって…

ssh接続時のポート変更の際にSELinuxの設定を変更する

ssh接続してますか? ssh接続のポートを変更する際はいろいろな設定を変更しなければいけませんよね。 sshのコンフィグ、iptables、 もしAWS使ってたらセキュリティグループもいじらないといけません。 しかし実は SELinux もいじらないといけないんです。上…

MySQLの文字列から数値への型変換について

MySQLで文字列から数値の型変換でちょっと変換のされかたが特殊だったので紹介します。 公式のドキュメントはこちら MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.10 キャスト関数と演算子 明示的な型変換 型変換というのはだいたいアプリケーション側…

iOSアプリ × Swiftでsegueで遷移する際にデータを受け渡すやりかた

segueで遷移する時になにか初期データを渡して遷移させたい?そんなことを考えたことがありませんか? 遷移時にAPIを呼び出したりするのもUX的にちょっとなぁ。。。みたいなことはあると思います。 そんな時はsegue遷移時の以下のコードのようにして定義でき…

Pythonでコロンなどの引数のパラメータ名に使えない文字を無理やり引数のパラメータ名に指定する方法

Pythonで引数にコロンなどの利用できない文字を含めたパラメータ名で呼び出したいといった場合がありませんか? どういう意味かわからないって顔をしている人が多そうです。 sample(ho:ge='hoge') みたいな感じで呼び出したいってことですね。 もちろん上記…

iOSアプリでTableViewを実装しようとしたら表示されなかった。TableViewに限らずなにも表示されない時の原因について

みなさんTableViewつかってますか? アプリを作る上でTableViewは欠かせない要素だと思います。 そんなTableViewが急に一切表示されなくなったということがありました。 cellの生成メソッドは問題なく呼ばれているのになぜ?という感じでしたが、原因がわか…

iOSアプリでfirebaseを導入したはずなのにうまくいかないよといったことへのtips

今やiOSアプリを作る際はfirebaseを導入するでしょう!といった雰囲気があります。 firebaseは無料で使える非常に優秀なツールなのでたしかに入れない理由はありません。 ですが、 (https://firebase.google.com/docs/ios/setup?hl=ja) の通りに導入したのに…

swiftとsegueで画面遷移のやりかた

iOSの開発で誰しもが困るポイント「画面遷移」 segueを使って実装したらかなり楽でした。 以下のようなやりかたで実現できます。 1. 遷移先のView Controller作成 storyboardからView Controllerをもう一つ作成しましょう 2. 遷移元のView Controllerと遷移…

SELinuxが原因の通信遮断の原因判定から、audit2allowでnginxなどを許可するまで。

外部と通信しているアプリケーションの場合、通信できない原因はSELinuxを疑ってみると原因がSELinuxであることが多々あります。 でもSELinuxってなかなか難しいですよね。 web上を探してもあんまり資料が落ちてないし、そもそも疑うエラーログからは全然SEL…

Pythonの動的なモジュールとクラスのインポートからのインスタンス生成方法

Pythonでモジュールの動的なインポートからのインスタンス生成をしたので紹介します。 クラスだけ動的に生成はけっこうあるんですが、モジュールの動的インポートって結構レアみたいですね。 IDEとかでエラーが見えづらくなるので、そこは注意してくださいね…

iOSアプリを作ってる時にBar Button Itemからsegueを繋げないのにさっぱり反応しない時の原因

iOSアプリを作ってる時にナビゲーションバーにボタンを設置して、そこから前の画面へ遷移したりすることはよくあると思います。 こんなやつ そんな時に事件は起こりました。 segueをつなげてさあ別のページへ遷移!と設定したんですが、全然動かない。。。。…

certbotでtls-sni-01のサポートが終了するので、証明書の更新方法の確認方法を紹介する

無料のSSL証明書として名高いcertbot(旧 let's encrypt)ですが、証明書の更新方法として tls-sni-01 のサポートを終了するようですね。 なにか対応するつもりだったのらしいですが、諦めたみたいな話らしいです。 community.letsencrypt.org 上記が脆弱性…