【Laravel】独自ペジネータで自前のCollectionを使う

...

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Laravel+MySQL+nginx】docker-composeで最小構成の環境構築

目的 laravel-admin使いたいだけの用途にLaradockは重すぎる…… ので、お勉強も兼ねて、docker-composeでLaravel&MySQLのみの環境を立てました。 その上でlaravel-adminの管理画面まで開けるようにしてみます。 構成 project_root_dir ├── docker-compose.yml ├── docker │ ├── nginx │ │ ├── Dockerfile │ │ └── default.conf │ ├── php │ │ └── Dockerfile │ └── db │ │ ├── my.cnf │ └── Dockerfile └── laravel └── ... 手順 docker-compose.ymlを作成 # docker-compose.yml version: "3.5" services: app: build: context: . dockerfile: ./docker/php/Dockerfile args: PROJECT_NAME: app_admin volumes: - ./:/var/www/html depends_on: - database links: - database ports: - "4000:80" - "4001:8080" tty: true database: image: mysql:5....

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【MySQL】外部キー追加時にエラー

...

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Python】cerberusまとめ

cerberusとは CERBERUS, n. The watch-dog of Hades, whose duty it was to guard the entrance; everybody, sooner or later, had to go there, and nobody wanted to carry off the entrance. - Ambrose Bierce, The Devil’s Dictionary ケルベロスはシンプルで軽量なデータ検証機能を提供するパッケージです。 公式曰く、拡張も容易なため、カスタム検証も可能です。 (以下、9割公式のドキュメントの翻訳です) 概要 検証用のスキーマを定義し、それを Validator クラスのインスタンスに渡します。 schma = {'name': {'type': 'string'}} v = Validator(schema) 次に、validate()を呼び出すことで、簡単にスキーマと辞書を検証できます。 検証が成功すると True が返されます。 document = {'name': 'john doe'} v.validate(document) # True インストール 安定バージョンはpipから取得できます。 pip install cerberus 使い方 基本的な使い方 # 概要の通り。スキーマを定義し、Validatorクラスに渡して検証する。 >>> from cerberus import Validator >>> schema = {'name': {'type': 'string'}} >>> v = Validator(schema) >>> document = {'name': 'john doe'} >>> v....

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Python】poetryを試してみる

poetryとは pythonの環境管理ツールです。 機能としてはpipenvに近い感じでした。 本当に触りだけやってみたリポジトリはこちら。 sample-poetry インストール $pip install poetry プロジェクトを作る $poetry new sample-project 実行すると下記のファイル・フォルダが作成されます。 sample-project ├── README.rst ├── pyproject.toml ├── sample_project │ └── __init__.py └── tests ├── __init__.py └── test_sample_project.py モジュールの追加 $cd sample-project # pyproject.tomlがある階層で $poetry add [--dev] <package name> これでpoetryが管理している仮想環境内にモジュールが追加されます。 それに伴って、ファイルと依存関係を管理する pyproject.tomlとpoetry.lock が作成されます。 Remove Deoendency $poetry remove <package name> This is very simple :) Use Virtual Environment # not active $poetry run python -m pytest # active $poetry shell Use Exsting Environment $poetry install [--no-dev] Reference Poetry - Python dependency management and packaging made easy....

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Python】エラーについて

知りたかったこと try-catch の有効範囲はどれくらいなのか(呼び出した関数で起きたエラーも拾えるのか) ネストしたエラーの扱いってどうするのが良いんだろう 結論 呼び出された先の例外もキャッチできますφ(・・ 調べて知ったこと エラーには構文エラーと例外がある 複数の例外を指定することができる except (RuntimeError, TypeError, NameError): pass exceptは上から順に見て、引っかかったタイミングでそのexcept節内部のみを実行する 最後の except 節では例外名を省いて、ワイルドカードにすることができる しかし、ワイルドカードの except 節は通常のプログラムエラーをたやすく隠してしまうため、注意は必要 Try…exceptの中にはelse節を設けることができる。else節は全てのexcept節よりも後ろに置く try 節で全く例外が創出されなかった時に実行されるコードを記述することができる for arg in sys.argv[1:]: try: f = open(arg, 'r') except OSError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close() 参考: Python の例外処理(try, except, else, finally) | note.nkmk.me 8. エラーと例外 — Python 3.8.1 ドキュメント Except 節では例外名の後に変数を指定できる。この変数は例外インスタンスに結び付けられ、instance.argsに例外インスタンス生成時の引数が入る。 例外インスタンスに実装されている__str__はinstance.argsをわざわざ出力しなくても見られるようになっているので、print(inst)で見られる。便利。 例外ハンドラは、try 節の直下で発生した例外を処理するだけではなく、その try 節から(たとえ間接的にでも)呼び出された関数の内部で発生した例外も処理する。(!) def this_fails(): ... x = 1/0 ....

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Pytyon】リストの重複要素をカウントする

目的 投票結果を DB に貯めて、その結果を一位から取得したい。 DB 構成は、 Id Recipe int str というシンプルな感じです。 ここからレコードの recipe の値を、[a, b, c, b, ...]と言ったリストに直した際、 「一番投票数の多かったもの」や「投票数が多かった順の要素のリスト」が欲しい。 TL;DR collectionsを使えば比較的簡単にできます。 要素のカウントは collections が便利 import collections votes_list = [a, b, c, b] c = collections.Counter(votes_list) # Counter({'b': 2, 'a': 1, 'c': 1}) # `要素`: `出現回数` recipe = c.most_common() # [('b', 2), ('a', 1), ('c', 1)] # 出現回数が多い順に並べ替えてくれる recipe = c.most_common()[0][0] # b 参考にさせていただいたもの お世話になりました。 collections — コンテナデータ型 — Python 3.8.1 ドキュメント...

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

【Redis】ってなんぞや

目的 案件で触らせてもらうことになったぜ 何もわからないぜ という状態なので、自分が調べたことについてまとめておきます。 Radis とは REmote DIctionary Serverの略 読んで字の如く、ネットワーク接続されたKey-Value型のNoSQLデータベース 永続化可能なインメモリデータベース オープンソースのプロジェクトで、Redis Labsがスポンサー。中身はC言語 AWS上でもRedis-serverが提供されている 様々なデータ構造をサポートしている STRING LIST SET HASH ZSET (ソート済みのset) 補足:インメモリDB すべてのデータをコンピュータのメインメモリ上に展開しながら動作する仕組みのことです。 コンピュータ(サーバ)の電源が落ちれば消えてしまうので、永続化の手段としてデータを別途どこかに保存することがあります。 インメモリデータベースでサーバが落ちたらデータはどうなる? インメモリとカラム型データベースの可能性を調べる(その3) - Publickey インストールと動作確認 少し挙動を試してみたいだけなら、公式チュートリアルの画面でコマンドを叩くことができます。 Try Redis Macであれば下記brewコマンドで一発。 $brew install Redis インストールできたら、サーバを立ち上げてみます。 $ redis-server # 立ち上がったら別のタブで動作確認 $ redis-cli 127.0.0.1:6379> set test "hoge" OK 127.0.0.1:6379> get test "hoge" 動作確認までできました。 このコマンドを叩く先のredis-serverがローカルにあるかAWS上のサービスとしてあるかが変わってくるだけで、cli側の設定や叩き方は基本的に変わりません。 (PythonなんかでRedisクライアントを作成する時に指すHOSTが変わってくるくらい、の認識です) データのタイプ Redisは前述の通り様々なデータタイプに対応しています。 どのデータタイプを使用するかによって、コマンドやデータの指定方法が違ってきます。 コマンドの詳細などは公式ドキュメントで。 Data types – Redis Strings 最も基本的な、KeyとValueが1:1な構造。 Key = valueの形。 バイナリセーフ(JPEG画像やシリアル化されたRubyオブジェクトなども格納可能) 最大512MBまで 127....

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

Killedと言われないためにDockerのメモリ割り当てを増やす

...

<span title='2021-02-19 12:01:46 +0900 +0900'>2月 19, 2021</span>

2021 02 09-19 Diary

...

<span title='2021-02-09 14:11:32 +0900 +0900'>2月 9, 2021</span>