『Head Firstデザインパターン』 Observerパターン

Observerパターンとは Observerパターンは、オブジェクト間の1対多の依存関係を定義し、あるオブジェクトの状態が変化するとそれに依存しているすべてのオブジェクトが自動的に通知され更新されるようにする。 ObserverパターンではPublisherをサブジェクト…

Every adventure requires a first step. Trite, but true even here.

最近TDDとまではいかないんだけどテストをちゃんと書くことを意識していて、できるだけロジックの部分だけでもテストが書きやすくなるようにコード書いてる。はじめは依存性ありまくりでテストしやすいコードを書けなかったけど書いていくうちに、クラス内で…

『Head Firstデザインパターン』 Chapter1 デザインパターンの根底にあるオブジェクト指向の原則

はじめの状態 共通の処理を抽象クラスに書きサブクラスが継承する。 いわゆる差分プログラミング。 飛ぶ振る舞いをもたせる必要が出てきた 飛ぶ振る舞いを基底クラスに追加したがDuckのすべてのサブクラスが飛ぶ必要はない。 コードに対する局所的な更新によ…

NullObjectパターンを覚えた

出品者のデータにフィルタをかけて該当する出品者のSellerオブジェクトを返すメソッドがあるとします。 サンプルコード data = $data; } /** * 出品者の価格 * @return int */ public function price(): int { return $this->…

LaravelでデータをDBに保存したいときのメモリ不足をなんとかする

APIで取得した50万件分のデータを保存する 環境 Linux 5.0.0-27-generic #28~18.04.1-Ubuntu PHP 7.3.9 Laravel Framework 6.0.3 MySQL 8.0 結論 CSVに一旦保存してLOAD DATA IN FILEが一番速い。 前提 509,999件分のデータを一括で取得できるAPIがあります…

LEMP環境をDockerで構築

今までPHPを動かすときは、DockerHubからPHPとApacheが一体になったImageを使用していたのだけど、nginxも使ってみたかったのでphp-fpm+nginx環境をDockerで立ち上げてLaravelを動かしてみた。 今まではApacheが同梱されていてコンテナを立ち上げてlocalhost…

ValueObjectっぽいものを導入したらいい感じになってきた

今までAPIで取得した値を加工・計算したい場合とりあえず連想配列に入れてゴニョゴニョしていた。 連想配列にいろいろなデータ詰め込みすぎると何入ってるのかわかんなくなるし、面倒なのがある条件のときだけ存在しないキーがあったりしたら、isset()とかem…

Spider Engineを構築する

Spider環境構築 ローカルの開発環境にMariaDBをインストールし、複数DBを立ち上げSpider Engineを試す。 環境: mysql Ver 15.1 Distrib 10.4.7-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Linux 5.0.0-27-generic #28~18.04.1-Ubuntu Maria…

抽象化が苦手

DBに関する本とかネットの記事読むと、多対多のテーブルとか出てくるじゃないですか。よくあるのが授業管理システムとかで、 ・授業テーブル授業ID:1授業名:経済学教授ID:100 ・学生テーブル学生ID:1名前:佐藤 ・受講テーブル学生ID授業ID 授業は複数の学生…

『Head First オブジェクト指向設計』第7章

第7章 アーキテクチャ アーキテクチャとは、設計の構造であり、アプリケーション内において重要である部分とそれらの重要部分間での関係に着目する。 アーキテクチャとは、システムの組織化された構造である。各部分への分割、部分間の接続、相互作用メカニ…

『Head First オブジェクト指向設計』第6章

第6章 本当に大きな問題の解決 今まではせいぜい10個程度のクラスのアプリケーションを開発してきた。より大規模なアプリケーションの開発はどうやって行うのか? →大きな問題も小さな問題と同じように解決する。 顧客が必要とする処理をソフトウェアが実行す…

『Head First オブジェクト指向設計』第5章 後半

第5章 後半 良い設計=柔軟なソフトウェア 柔軟ではないコードに対処する アプリケーションの変更時に問題が発生するのは、ソフトウェアの柔軟性が足りないから。「凝集度」を高めて結合の問題を解決する。 ・凝集度と結合度 設計におけるオブジェクトの責務…

Ubuntuの入力言語(英語入力・日本語入力)の切り替えをWindowsのようにCtrl+Shiftで行う

英語キーボードの場合、半角/全角ボタンがないので、英語入力と日本語入力の切り替えを任意のキーでバインドすることになると思います。 Windowsを使用しているときは入力言語の切換をCtrl+Shiftで行っていましたが、Ubuntuの場合デフォルトでSuper(Windows…

UbuntuでHeidiSQLを動かす

今までDBのGUIツールとしてHeidiSQLを使用していましたが、HeidiSQLはWindows専用なのでLinuxでは使うことができません。 Linuxで使用できるDBのGUIツールとして、DBeaverやMySQL Workbench が有名なので、両方のソフトを試してみましたがHeidiSQLと比べると…

Ubuntuのフリーズを解消する

環境 System: Kernel: 5.0.0-23-generic x86_64 bits: 64 Desktop: Gnome 3.28.4 Distro: Ubuntu 18.04.3 LTS CPU: Quad core AMD Ryzen 5 PRO 2400G with Radeon Vega Graphics (-MT-MCP-) cache: 2048 KB clock speeds: max: 3600 MHz 1: 1554 MHz 2: 1464…

UbuntuにEclipseをインストール・日本語化する

環境 Eclipse IDE 2019‑06 $ uname -a Linux 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.3 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debia…

『入門Goプログラミング』を読んだ

入門Goプログラミング 作者: Nathan Youngman,Roger Pepp,吉川邦夫 出版社/メーカー: 翔泳社 発売日: 2019/05/13 メディア: 単行本(ソフトカバー) この商品を含むブログを見る GoでAPIサーバを作ったことをきっかけにGoをちゃんと学びたいと思ったので読ん…

"InnoDB: Plugin initialization aborted with error Generic error"

DB

docker-compose up でMySQLが突然起動しなくなった。 環境 Windows10 Pro 64bit MySQL 5.7.26 Docker 18.09.2 $ docker logs mysql 2019-07-25T01:19:35.869478Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_d…

PHP+msmtpとMailCatcherをDockerで動かす

PHP+msmtpとMailCatcherをDockerで動かす 今までPHP+ssmtpとMailCatcherを使用していた。 WSL2にしてDockerを動かそうとしたら Package 'ssmtp' has no installation candidate と出てインストールできなかった。 ssmtpはメンテされていないことを知ったので…

『達人に学ぶDB設計徹底指南書』を読んだ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ作者: ミック出版社/メーカー: 翔泳社発売日: 2012/03/16メディア: 単行本(ソフトカバー)購入: 21人 クリック: 316回この商品を含むブログ (24件) を見るDB設計をする上で必要な知識が詰まって…

やる気が出ない原因がわかった

今週はあまりやる気が出ず集中力もなかったと思う。ただ原因がわからなかった。 今日も朝起きてから写経して、疲れて昼寝したけど体が重い感じがしてさっぱり疲れが取れている感じがしなかった。 昨日は仕事中に夕方ぐらいから腰が痛くなって、それはずっと…

大して知識もないのにAPI設計するときに役立つサイト一覧

API

RESTについて JSONについて ステータスコード OAuth API設計について APIドキュメントツール 1. API Blueprint 2. Swagger RESTについて yohei-y:weblog: REST 入門 読むべき技術書 Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)作者: …

豊田章男 米国バブソン大学卒業式スピーチ

youtu.beトヨタ社長のバブソン大学での卒業スピーチ「変化から逃げるのではなく変化を受け入れること」 「常に何か新しいことを学び続けなければならないということ」 「恰好つけるのではなく、温かい人になってください」 「自分自身のブレない軸を決めてく…

TDDBC札幌2019に参加しました

2019.06.15 TDDBC札幌2019「見てわかるテスト駆動開発」 詳細 agilesapporo.doorkeeper.jp 基調講演+ライブコーディング speakerdeck.com 印象に残った部分のメモ 「動作するきれいなコード」をはじめから書くのは難しい 天才ははじめからできるが凡才はどう…

index_type 一部のストレージエンジンでは、インデックスの作成時にインデックスタイプを指定できます。ストレージエンジンごとにサポートされている許可されるインデックスタイプ値を次の表に示します。複数のインデックスタイプが示されている場合は、最初…

継続的な学習とやる気

やはり毎日コンスタントに少しづつでも学習し続けることが大事だと思う。ある先輩が司法試験に落ちたときに、その先輩のことを知っている先生が、「あいつは波があるからな。やる気があるときはやるけど、やる気がないときはやらない。そうじゃなくて毎日コ…

スキルマップと方向性

最近いろいろ迷走して何を学べばいいのかわからなくなってきていた。 たとえば、技術書読んでいても、今自分が学ぶべきことはこれなのだろうかと考えてしまって、あまり手につかなかったりした。 そこで今の自分のスキルの棚卸しと今後どういう方向性でスキルを身…

さくらのクラウドをTerraformから作る

さくらのクラウドをTerraformから作る わざわざTerraform使わずにコンパネからポチポチ作れるが、Terraform使ってみたかったしテスト環境とか複数の環境用意するときに手順忘れるので使ってみた。 sacloud.github.io バージョン CentOS7 Terraform v0.11.13 Te…

Bulk Insertした場合のレスポンスをfilter_pathで整形する

Bulk Insertした場合のレスポンスをfilter_pathで整形する http://localhost:9200/logs/_bulk?filter_path= ",",".","*","-"を駆使して任意の形のレスポンスデータで返ってくるようにできる filter_pathを指定しないでinsertした場合 { "took" : 3, "errors"…

Elasticsearchを使う

CentOS7にインストール www.elastic.co バージョン Elasticsearch 7.0.1 Kibana 7.0.1 データをInsertする curl curl -H 'Content-Type:application/json' -XPOST 'localhost:9200/logs/_doc?pretty' -d ' { "value": 1000, "recorded_at": "2019-05-09 08:0…