【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>

【ディープリンク】ってなんぞや

目的 「LINEBOT くんのメッセージをタップしたらアプリに飛ぶようにしてほしい!」 という要件を貰ったけど、 そのあたり全く初見だったので調べてまとめてみました。 ディープリンクとは 任意のアプリに遷移できるリンク(URL)のことです。 アプリに遷移できるだけでなく、更にその中の特定の画面を指定して遷移することができます。 スマホでTwitterやYoutubeのリンクをタップした時に、アプリが立ち上がって見たかった投稿や動画を開いてくれることってありますよね? あの仕組みのことです。 プラットフォームごとのディープリンク対応 プラットフォーム 種類 対応 URL Android App links Android6.0 以降 WebURL Android App Indexing Android WebURL Apple universal links iOS9 以降 WebURL どちらも Custom URL Scheme iOS,Android カスタム URL Android(Google) App Links App Linksはオープンソースのアプリ連携サービスです。Facebookが提供しています。 https:// から始まる URL を利用できます。 メリット WebURL から直接アプリを起動できる Android 特有のアプリ選択画面を飛ばせる デメリット 認証情報ファイルを https 通信可能なサーバに上げておく必要がある android 6.0(2015 年 10 月リリース)以降しか対応していない 設定方法 下記が参考になりました。 App Linksに対応してみた - Qiita App Indexing App Indexingは、その名の通りアプリのコンテンツをインデックスして、Google検索の結果からアプリに直接遷移することができるサービスです。Googleが提供しています。...

<span title='2021-01-28 19:10:59 +0900 +0900'>1月 28, 2021</span>