ホーム

Kubernetesドキュメントのリーディングーコンセプトのまとめ

インフラストラクチャ

概要Kubernetesを本格的にキャッチアップしていくためにドキュメントを読んだので、オレオレメモを残す。全部は長いのでメモ書きはコンセプトの章だけにする。 kubernetes.io Kubernetesとは何か?cf. Kubernetesとは何か? Kubernetesとは何か? 宣言的な構成管理 自動化の促進 コンテナ化されたワークロードやサービスの管理のためのプラットフォーム 過去を...

Docker コンテナ Kubernetes

Golangでインメモリなキャッシュを実装する

アプリケーション

概要Golangのインメモリキャッシュのライブラリは良さそうなものが存在するが、軽量でシンプルなもので十分だったので自前で実装してみた。 実装要件 複数のデータを保持することができる。 期限付きのデータをメモリに保持することができる。期限が来たらメモリから破棄されること。 キャッシュへの同時参照、更新を考慮し、データのロックが意識されていること。 初期設計※github.com - bmf-sa...

Golang キャッシュ

Go CodeReviewCommentsのまとめ

アプリケーション

概要github.com - CodeReviewCommentsを読んでメモしておきたいことをまとめる。 Comment Sentences コメントの終わりはピリオドで終わるようにする。 golang.org - commentary Copying 別のパッケージから構造体をコピーするときは、予期しない参照に気を付ける。 メソッドがポインタの値に関連付けられているならTではなく*Tを使うよ...

Golang コードレビュー 

JWTとは

アプリケーション

概要JWTについて調べたことをまとめておく。OAuthやOpen ID Connectなど実際の利用事例については触れない。 JWTとはJWT(JSON Web Token)は、JSONデータ構造を用いたURLセーフなClaim(JWTを用いたJSONオブジェクトはClaim Setと呼ばれる)を表現するフォーマット。JWTでは、デジタル署名またはメッセージ認証コード(MAC)を用いたJWS(JS...

JWT

gRPCとはーGolangでgRPCに入門するー

アプリケーション

概要GolangでgRPCに入門する。 gRPCとはgRPCとは、Googleが開発したRPC※実現のためのプロトコル。HTTP/2の利用を前提としている。 gRPCではGoogleが開発しているProtocol BuffersというIDL(インターフェース定義言語)でAPI仕様を定義するシリアライズフォーマットを使用する。 gRPCの通信方式にはHTTP/2の仕様に則った4つのパターンがある。 ...

Golang gRPC マイクロサービス HTTP/2 RPC

リトルエンディアン・ビッグエンディアン・ミドルエンディアン・バイエンディアンの違いについて

コンピューターアーキテクチャ

概要リトルエンディアンとビッグエンディアンの違いについてまとめる。 エンディアンとは 複数のバイトの並びの方式をエンディアン、またはバイトオーダーと呼ぶ データをメモリ上にロードするときの配置の仕方  エンディアンはCPUやプロトコル、OSによってそれぞれ決まっている 異なるシステム間やネットワーク間でデータをやりとりする際にエンディアンによる問題が発生しやすい ex. バイナリを解析したいときな...

メモリー

孤児プロセスとゾンビプロセスの違い

コンピューターアーキテクチャ

概要Dockerを触っていたらorphan(孤児の意)というプロセスの存在を知ったのでゾンビプロセスとの違いを調べてみた。 ゾンビプロセスとは 処理が終了した子プロセス プロセステーブルに残った状態で親プロセスのwaitを待つ システムリソースは使用しないが、PIDは保持される ゾンビプロセスが大量に増えると、使用可能なPIDが減り、他のプロセスを起動できなくなる ゾンビプロセスの確認方法 ps ...

UNIX プロセス

Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた

アプリケーション

概要Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた。 作ったものslackでbotにパラメータを付けたメンションを飛ばすと画像を生成してくれるだけのもの。内部的には、パラメータを元にcanvasで画像を生成、ヘッドレスブラウザでスクショを撮って画像を保存、slackに投稿、といった感じ。 github.com - emoji-generator-...

Golang Slack chrome chromedp emoji slack-bot

vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

アプリケーション

概要 vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。 settings.json "go.useLanguageServer": true, 結論 go.modがプロジェクトのルートに存在している必要がある。 cf. stackoverflow - How to properly us...

Golang gocode gopls Language Server vscode Tips

DBドキュメント(ER図など)を自動生成してくれるツールーschemaspy, tbls

データベース

概要DBドキュメントを自動生成できるツールの有名所でいうと、MySQL Workbenchが筆頭に上がると思うが、それ以外にも良いOSSがないか漁ってみてちょっと触ってみたので感想を残す。 Schemaspy schemaspy.org github.com - schemaspy/schemaspy DBに接続してhtmlでDBドキュメントを生成してくれるJava製のツール。 Dockerhu...

Docker ER

PHPでUMLを自動生成してくれるツールーphUML

アプリケーション

概要クラス設計の外観を把握したい時にUMLを自動生成してくれるツールが欲しかった。phpstormなら標準でいい感じにdiagramを生成してくれる機能があるらしいが、vscodeに入信してしまったのでいい感じのツールを探すしかない。 phUMLぐぐると色々ツールはあるのだが、簡単に使えそうなやつを探してみた。 github.com - MontealegreLuisphumlドキュメント 本家?...

PHP

VPS×Docker Compose×Docker Machine×Golang×Nginx×Let's Encryptでの本番運用

ポエム

概要GolangのアプリケーションをVPSでDocker-Composeを使って本番運用してみたかったので、トライしてみた。 環境実際に自分がトライした環境をまとめておく。 VPS(Conoha) お名前ドットコム(ドメイン管理) Docker Compose(本番とローカルの構成を別ファイルで構築) Docker Machine(デプロイで使う) Let's Encrypt(TLS/S...

Docker Docker Compose Golang Let's Encrypt Nginx Docker Machine VPS

ISUCON10に参加してきた

システムアーキテクチャ

ISUCON10に参加してきた。 ISUCON参加は2年ぶり2回目。 前回は2人チームで参加したが、今回は3人チームで参加した。 やったこと 予選マニュアルやレギュレーションの内容確認 SSH接続の確認 githubに登録している鍵で接続可能だった。今回は踏み台サーバーが用意されていた。 プロセスの確認 APIのエンドポイントやUIを確認 DB確認 デプロイ整備 アプリケーションのデプロイ、...

ISUCON ISUCON10

アルゴリズムとデータ構造 - クイックソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 クイックソート データ列の中から適当なデータ(ピボット)を選択し、ピボットより小さいデータを前方、大きいデータを後方に移動させる。 分割されたデータをそれぞれソートする 分割統治法の一種 計算時間 最悪計算時間 O(n²) ...

クイックソート

アルゴリズムとデータ構造 - マージソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 マージソート データ列が分割できなくなるまで(要素が1つ)再帰的に分割を行い、分割されたデータを複数回マージを繰り返していくことによってソートする 分割統治法に基づくソート 大きな問題を小さな問題に分割する 計算時間 最悪計...

マージソート

アルゴリズムとデータ構造 - ヒープソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 ヒープソート 要素の並べ替えを二分ヒープ木を用いて行うソート ヒープの構築 ヒープから要素(根)を取り出す操作をヒープ木が空になるまで行う 計算時間 最悪計算時間、平均計算時間 O(n log n) 実装package...

ヒープソート

アルゴリズムとデータ構造 - 挿入ソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 挿入ソート データ列の先頭から順番にソートしていく ソート済みと未ソートでそれぞれ部分列に分けられる 1回目:0番目をソート済みとするので何もしない 2回目:0番目と1番目を比較して順序が逆なら入れ変える 3回目:0番目から1番目...

挿入ソート

アルゴリズムとデータ構造 - 選択ソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 選択ソート データを昇順または降順に並べ変えるソートの一つ 1番目の要素と2番目以降の要素の中で最小の値を比較して、順序が逆なら入れ変えを行う、という操作をデータ列の最後の一つ手前まで繰り返す 計算時間 最良計算時間、平均計算時...

選択ソート

アルゴリズムとデータ構造 - バブルソート

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 バブルソート データを昇順または降順に並べ変えるソートの一つ 全要素に対して、隣合う要素同士を比較し、順序が逆なら入れ替えを行う、という操作を要素数-1回繰り返す 計算時間 最悪計算時間、最良計算時間、平均計算時間 O(n²) ...

バブルソート

GolangでgoblinというURLルーターを自作した

アプリケーション

概要 GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備 URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズム URLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ...

Golang URLルーティング router

アルゴリズムとデータ構造 - 二分探索木

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 二分探索木 各ノードが多くとも2つまでのノードしか持たない二分木の一種で、左の子ノード ≤ 親 ≤ 右の子ノードという制約を持った構造の木 最も左にあるノードが最小ノードで、最も右にあるノードが最大ノードとなる 二分探索木に限...

二分探索木

アルゴリズムとデータ構造 - ヒープ

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 ヒープ 優先度付きキュー(priority queue)の一種 優先度付きキューは、集合(set)を扱うデータ型 集合に含まれる要素は優先度順に取り出される 集合を扱うデータ型の例:キュー、スタック ヒープの種類 ...

ヒープ

2019年の振り返りと来年の抱負

ポエム

2019年の振り返りと来年の抱負今年も残すところ1週間とちょっとくらいになったので、今年の振り返りと来年の抱負をポエムっとく。 今年の振り返りここ3年間くらい右肩上がりで公私ともに良い機会、良い経験に恵まれている。今年は特に良い年だったと思う。めんどくさいので雑に箇条書きにしていく。 パブリックな方面個別の事柄をピックアップして書きたいけど、多すぎて大変面倒なことになるので総括だけ。 リードエン...

振り返りと抱負

URLルーティング自作入門 エピソード2

アプリケーション

概要 この記事はURLルーティング自作入門 エピソード1の続きで、Makuake Development Team Advent Calendar 2019の15日目となります。 URLルーティングを自作する 前回の続きです。 ルーターを自作するにあたり、ルーターがどういった処理を行うのかデータ構造の観点から考えてみます。 ルーターがどんなInputを受け取って、どんなOutputを返すのか、動...

HTTP URLルーティング router

URLルーティング自作入門 エピソード1

アプリケーション

概要 この記事はMakuake Development Team Advent Calendar 2019の14日目の記事です。 趣味で駆け出し※URLルーティング自作マンをやっているので、URLルーティング自作界隈※に入門したい人に向けた記事となれば幸いです。 ※駆け出しというキーワードが今年はWeb界隈で流行り?ましたね。私は去年末からURLルーティング自作を始めたので駆け出しだと思います。 ...

HTTP URLルーティング router

2019年の全PHPカンファレンスをコンプリートした

ポエム

概要2019年に日本国内で開催された全ての公式PHPカンファレンスにしたので参加記録をまとめる。 PHPカンファレンス参加レポートまとめ仙台に始まり、東京で終わるまでの道のり。東京以外のカンファレンスは全て初参加。 PHPカンファレンス仙台2019に参加した Laravel JP Conference国内初開催のLaravelカンファレンス。スタッフ兼スピーカーとして参加した。来年度もスタッフと...

PHP PHPカンファレンス

Design It

システムアーキテクチャ

1~2年くらいに前に読んだDesign Itを読み直していたら、ソフトウェアアーキテクトとして果たすべき役割や責任について学び得ることがあったので、メモを残す。 お気持ちも交えつつ書くのでこれはポエム。 ソフトウェアアーキテクトは何をする人なのか? ソフトウェアアーキテクトはコードも書くし、プロジェクトのリードもするし、ビジネス的な視点でも思考を巡らせたりもする。 ビジネス・技術・ユーザーの3つの...

アーキテクト

アルゴリズムとデータ構造 - キュー

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 キュー 常に先に追加されたデータからしかアクセスできないようにデータを一列に並べた構造 スタックとは追加と削除の方向が逆になる。 FIFO(First In First Out) 先入れ先出し 待ち行列ともいう。 データの...

キュー

アルゴリズムとデータ構造 - スタック

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 スタック 常に最新のデータからしかアクセスできないようにデータを一列に並べた構造 LIFO(Last In First Out) 後入れ先出し 常に最新のデータへアクセスしたいときに便利な構造 データの追加をPush、削除...

スタック

GolangのHTTPサーバーのコードリーディング

アプリケーション

概要 この記事はQiita - Go6 Advent Calendar 2019の20日目の記事です。 GolangでHTTPサーバーを立てるコードの詳細を追ってコードリーディングします。 参考実装 コードリーディングしていく実装はこちら。 package main import ( "net/http" ) func main() { mux := htt...

Golang コードリーディング router

アルゴリズムとデータ構造 - 配列

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 配列 データを1列に並べたもの データへのアクセスは容易だが、追加や削除には時間がかかる 配列のデータはメモリの連続した領域に順番に格納される 固定長のメモリを確保する 宣言時に確保(静的確保) 実行時に確保(動的確保) ...

配列

アルゴリズムとデータ構造 - リスト

アルゴリズムとデータ構造

概要アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 リスト(線形リストの片方向リスト) データを一直線上に並べた構造 各ノードは次のノードへのポインタを持つ データの追加や削除は容易だが、アクセスには時間がかかる リストでは、データは連続したメモリ領域に格納される必要はない 一...

連結リスト 片方向リスト

PHPカンファレンス沖縄2019に参加してきた

ポエム

PHPカンファレンス沖縄に参加してきた先月に続きPHPカンファレンスに参加してきました。 沖縄は6月末に宮古島にいった以来で、少し気温の変化が感じられました。 セッション実用PHPメタプログラミング実用PHPメタプログラミング evalは最終手段 ex. foreach内でevalを使って関数定義するとか →Closureで頑張る 大いなる力には大いなる責任が伴う 静的解析の恩恵が受けられな...

PHP PHPカンファレンス

PHPカンファレンス北海道2019に参加してきた

ポエム

PHPカンファレンス北海道2019に参加してきた2ヶ月ぶりのPHPカンファレンスに参加してきました。(前回はPHPカンファレンス福岡2019に参加・登壇してきました) 北海道は子供の頃数年ほど住んでいたり、祖父母が住んでいたりと縁の地なので、他のカンファレンスとはちょっと違った感情を感じて、ポエミーでエモい気持ちになりながら現地で過ごしていました。(昔住んでいた家やよく遊んでいた公園を見に行ったり...

PHP PHPカンファレンス

FuelPHP1.8.0→1.8.2、PHP5.6→PHP7.3へのバージョンアップした

アプリケーション

概要FuelPHP1.8.0→1.8.2、PHP5.6→PHP7.3へのバージョンアップ対応をした。業務でアプリケーションのバージョンアップ対応を行ったので、取り組みをまとめておく。 スコープ FuelPHP1.8.0 → FuelPHP1.8.2 PHP5.6 → PHP7.3 対象リポジトリ ユーザー側アプリケーション 管理側アプリケーション パッケージリポジトリ ※ミドルウェアのバージ...

PHP FuelPHP

DockerのOperation not permittedというエラーに対応する

インフラストラクチャ

概要 Docker Composeを使ってgolangのtest実行していたら、Operation not permittedというエラーに遭遇した。 対応 Docker Documentation - runtaime-privilege-and-linux-capabilities Dockerコンテナの特権設定をいじると解決する。 gobel_test_db: container...

Docker Docker Compose Linux linux capabilities seccomp Tips

Golangでトライ木を実装する

アルゴリズムとデータ構造

概要トライ木のアルゴリズムと実装についてかく。 bmf-san/road-to-algorithm-master  トライ木とはトライ木(プレフィックス木ともいう。英語はそれぞれ、trie、prefix tree)は文字列の集合を扱う木構造の一種。 各ノードは単一または複数の文字列あるいは数値を持ち(ノードは必ずしも値を持つ必要はない)、根ノードから葉に向かって探索して値をつなげていくことで単語を...

Golang 基数木 トライ木

Mackerelで監視対象から外れたホストを再度復帰させる方法

インフラストラクチャ

概要 Mackerelの監視対象から誤ったホストを退役させてしまったり、意図せず監視対象から外してしまったときなどに復帰させる方法についてメモっておく。 手順 mackerel-agentを再起動しても自動で復帰しないのでホストに割り振られたhostIdを更新させる必要がある。 service mackerel-agent stop cd /var/lib/mackerel-agent mv id...

Mackerel Tips

Dockerizeを使ってDocker Composeのコンテナの起動順を制御する

インフラストラクチャ

概要Dockerizeを使ってDocker Composeで起動するコンテナの順番を制御する方法についての覚え書き。 github.com - jwilder/dockerize なぜDockerizeを使うのかDockerizeではなく、wait-for-it というピュアなbash scriptを使った方法も採用することもできる。 cf. Docker-docs-ja - Compose の起...

Docker Docker Compose Dockerize

Golangでクリーンアーキテクチャに入門する

アプリケーション

概要GolangでClean Architectureの実装に挑戦したみたので整理しておく。 内容は概ねスライドの内容を踏襲している。 理解しきれていないところがあったり、自分の解釈、考えを記述しているので、正しくない部分もあるかもしれない。 スライドLTをする機会があったのでスライドを貼っておく。 Dive to clean architecture with golang ソースソースはこれ。...

Clean Architecture Golang DIP

MySQLでテストデータを生成するSQL

データベース

概要MySQLだけでテストデータを生成するSQLについてメモしておく。テストデータをスクリプトで生成する方法は柔軟性が高く、上等手段な気がするが、数万件のレコードを用いてパフォーマンステストをしたい時などはSQLだけでも十分かもしれない。 SQLクエリはこんな感じ。 DROP TABLE IF EXISTS `tests`; CREATE TABLE `tests` ( `id` int(...

MySQL sql cross join

PHPカンファレンス福岡2019に参加・登壇してきました

ポエム

PHPカンファレンス福岡2019に参加・登壇してきましたPHPカンファレンス福岡に初めて参加してきました。 今までCFPに落ち続けていたのですが、今年度は無事採択されることができたのでスピーカーとして参加しました。 東京以外のカンファレンスに参加するのはPHPカンファレンス仙台に続いて2回目でした。 登壇資料はこちら。PHPでURLルーティングを自作する PHPerKaigiでトークをしたネタでし...

PHP PHPカンファレンス

Webフロントエンド ハイパフォーマンス チューニング

アプリケーション

Webフロントエンド ハイパフォーマンス チューニングを読んだ。 単なるチューニング手法のみの紹介に留まらず、ブラウザのレンダリング、計測方法など踏まえて解説をしている。 フロントエンドにおけるチューニングを学びたいときに読んでおきたい一冊。 ...

フロントエンド パフォーマンスチューニング

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする

ビジネス

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットするを読んだ。 エンジニア向けの学びの方法論について学べる本。 学びの方法論について語った本は色々あるが、エンジニアという職種における分野で語った本は少ないかも。 学習や年齢を重ねていくと経験の中から方法論を導き出したりすることがあると思うが、先駆者や知見のある人から学びを得ておくことは自分の学びを改善する上でプラスになる。 ...

知的生産術

execコマンドによるリダイレクト

アプリケーション

概要execコマンドは現在のプロセスを実行するコマンドで置き換えるコマンドだが、引数無しで使うとリダイレクトの動的変更ができる。 ちょうどmaster直プッシュの際にプロンプトで確認するようにするで #!/bin/sh exec < /dev/tty read ANSWER というコードが出てきてよくわからなかったので調べてみたのがきっかけ。 使い方#!/bin/sh echo "Outp...

bash shellscript exec

master直プッシュの際にプロンプトで確認するようにする

アプリケーション

概要gitでmasterブランチへの直pushを未然に防ぐためのセーフーティネットの作り方。github上でmasterブランチへのpushを禁止すれば良いのだが、DevOpsの都合上でgithubの設定では問題があったのでhooksを使う方向で設定した。 導入グローバルに設定したいので~/.git_template/hooks配下にpre-pushファイルを作成する。.git_templateデ...

Git shellscript

dockerでイメージとコンテナを削除してもボリュームが消えていなかったときのメモ

インフラストラクチャ

概要dockerでコンテナとイメージを削除してもvolumeが削除されていなくてちょいちょい忘れてハマるのでメモっておく。 普段は、docker-composeを使っている。 docker-compose builddocker-compose up -d して、 docker rm **docker rmi ** という感じにお片付けしているのだが、どうやらマウントしているvolumeを削除する...

Docker Docker Compose

PHPで学ぶデザインパターン - Stateパターン

アプリケーション

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Stateパターンとは状態をクラスで用意することで振る舞いを切り替えることができるようなパターン。 実装スイッチのオンオフの状態を切り替えるような例を想定した。シングルトンを使ったほうが良い気がする。 <?php class OnState { public function get...

GoF PHP デザインパターン ステートパターン

ゴリラで学ぶソフトウェアの法則10選

アプリケーション

概要以前書いたソフトウェア開発の法則 の雑メモをベースにLTをしたのでスライド内容を補足する形でまとめる。 スライドは↓ゴリラで学ぶソフトウェアの法則10選 ゴリラで学ぶには無理があったのでスクリプトを書き残しておく。 ソフトウェア開発の法則ソフトウェアの文脈で語られる法則に縛らず、他分野での法則でもソフトウェアに当てはまるであろうものを”ソフトウェア開発の法則”としている。 経験則に基づく...

ソフトウェア開発

PHPerKaigi2019に参加・登壇してきました

ポエム

PHPerKaigi2019に参加・登壇してきましたPHPerKaigiに初参加&登壇してきました。 fortee - PHPでURLルーティングをつくるSpeaker Deck - PHPでURLルーティングをつくる 過去登壇した会場よりも客席が近い・スライドが大きい!で結構緊張しました... 登壇を終えてcfpを提出した段階ではまだネタが仕上がっていなくて実装を焦っていました..採択されてから...

PHP PHPカンファレンス PHPerKaigi

GoogleChromeでBurp Suiteを使う手順

ツール

概要Burp SuiteをChormeで使う際の諸々の設定について。脆弱性診断や対応時にburpをchromeで使えるようにしたかった。 環境Mac OS 準備 burpsuite chrome extension - proxy switchsharp 手順プロキシを設定するchrome extension - proxy switchsharpでProxy Profilesを設定する。 Pr...

Burp Suite セキュリティ 脆弱性

URLルーティングをつくる エピソード3(完結編)

アルゴリズムとデータ構造

概要 URLルーティングをつくる エピソード1 とURLルーティングをつくる エピソード2 でURLルーティングの自作について試行錯誤の過程を記してきたが、ようやく一段落させることができたので完結編という形で締括くりたい。 完結、といっても課題はいくらでもあるし突き詰めるとこればっかりに時間をかけることができるようなモノであるということは承知している。。。 前回までの話し エピソード1 では、ルー...

PHP URLルーティング HTTP 木構造 router

Laravel JP Conferenceにコアスタッフ兼LTスピーカーとして参加してきました

ポエム

Laravel JP ConferenceのコアスタッフとLT登壇してきました。 コアスタッフとして参加してみて普段、カンファレンスは参加者側なのですが、PHPのコミュニュティに対して微力でも貢献する機会であり、自分の好きなFWのカンファレンスでもあったので、コアスタッフとして参加しました。(ほぼ一日中受付スタッフをやっていました。) 自分がエンジニアとしてなんとかやれているのは、包容力のあるPH...

Laravel LT PHP

ubuntu初期設定メモ

インフラストラクチャ

概要 ちょいちょい忘れてるのでメモ。 不足があれば随時追加。 環境 ConoHa ubuntu 18.04.2 LTS (Bionic Beaver) 準備 ubuntuインストール&rootログイン確認 conohaでubuntuサーバーを用意し、rootログインできることを確認しておく。 ssh用の鍵をクライアント側で用意する 秘密鍵と公開鍵を作成。 ssh-keygen -t r...

Ubuntu

雑Trelloと雑spreadsheetを公開した話とプライベートのタスクを計測し始めた話

ポエム

雑Trelloと雑spreadsheetを公開にしたプライベートの時間にやるタスクを可視化しているTrelloとオレオレスプリントの計測データを管理しているspreadsheetを公開設定にしてみた。 →現在は非公開です。 自分のエンジニアとしての活動は可能な限りオープンにしていきたいとなんとなく考えていて、思い切って公開にしてみた。 そんなふうに考えるのは自分がエンジニアになる前もなった今も世の...

Google SpreadSheet Trello

Laravelでの機能テストの始め方雑メモ

アプリケーション

概要 Laravelでの機能テストの始め方と簡単な使い方について紹介する。 入門レベルに限るのでより実践的な内容については触れない。 ※LTの元ネタ程度でメモくらいの内容。 対象 テストを書いたことがない人向け。 テストを書いたことがなくても機能テストであればアプリケーションの仕様さえわかっていれば比較的に誰にでも楽に何を書くのかわかりやすいと思う。 特にLaravelは機能テストで使える便利なA...

Laravel 機能テスト テスト

Goでmysqldumpツールをつくる

アプリケーション

概要このブログのDBバックアップを原始人のごとく手動でやっていたのでコマンド一発でバックアップをリモートからローカルにバックアップを取れるツールをgoでつくってみた。 パッケージ "net" ネットワークI/O、TCP/IP、UDP、ドメイン名前解決、Unixドメインソケットなどのインターフェースを提供してくれるやつ "time" 時間の計算や表示のため...

Golang MySQL ssh mysqldump

PHPで学ぶデザインパターン - Bridgeパターン

アプリケーション

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Bridgeパターンとは機能拡張のためのスーパークラスと実装拡張のためのサブクラスを用意し、機能の橋渡しをするようなパターン。 実装<?php interface Connector { public function __construct(Converter $converter)...

GoF PHP デザインパターン ブリッジパターン

PHPで学ぶデザインパターン - Adapterパターン

アプリケーション

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Adaperパターンとは元となるクラスに修正を加えることなくインターフェースを変更することができるパターン。 異なるインターフェース間の互換性を調整するようなAdapterクラスを用意することで実現する。 実装<?php interface Bird { public function...

アダプターパターン GoF PHP デザインパターン

PHPで学ぶデザインパターン - Mediatorパターン

アプリケーション

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Mediatorパターンとは仲介者・調停者の意味。 オブジェクトの振る舞いに関するデザインパターンで、オブジェクト間のやりとり調整するためのパターン。 オブジェクト同士のやり取りが複雑化し、関係性が見えにくくなるような時に有用かもしれない。 実装<?php // Mediator class...

PHP デザインパターン メディエーターパターン GoF

PHPカンファレンス仙台2019に参加した

ポエム

TL; DRPHPカンファレンス仙台2019に参加レポート。 テストが辛いを解決するテスト駆動のアプローチ テストが辛いを解決するテスト駆動開発のアプローチ at PHPカンファレンス仙台2019 違和感から設計判断 TDDのアプローチではなく、実装後にテストをかくアプローチだとテストの書きづらさを感じたときに設計に違和感を感じると思うが、TDDだとそのへんは慣れが必要だろうなぁと思った。...

PHP PHPカンファレンス

入門監視

インフラストラクチャ

入門監視を読んだ。 監視の基本と実践について学ぶことができる。 監視について学んでみたいときの入門書。 ...

監視

grep入門

コンピューターアーキテクチャ

概要grep雰囲気で使っているマンだったのでとざっくり調べてみた。l 基本grep 検索正規表現 ファイル名 ワイルドカードが使えるので、例えばカレントディレクトリ内の全ファイルを対象とした場合は、 grep "foo" ./* といった具合にできる。 カレントディレクトリ以下のディレクトリも対象にしたい場合は、-rオプションを使う。 grep -r "foo&quo...

Linux grep

URLルーティングをつくる エピソード2

アルゴリズムとデータ構造

概要 URLルーティングをつくる エピソード1の続き。 とりあえず動く形のものを仕上げてpackagist - ahi-routerという名前でパッケージ公開した。 エピソード1からの変更点 エピソード1では、データ構造に木構造を採用してルーティングを作ろうというと試みた。 パフォーマンスが考慮されているライブラリでは、木構造を生成するロジックを用意して、最適化された探索アルゴリズムを実装するよう...

HTTP URLルーティング 木構造 router

2018年の振り返りと2019年の目標

ポエム

※はてぶで公開していた記事を移管しました 概要表題のとおり。 昨年のやつは非常に雑ではあるが、日々色々と考えながら過ごしていたので実際はそれなりによく行動できていた気がする。 振り返り今年のやったことの振り返りから。 今年はエンジニア歴でいうと3年目か4年目くらいだったのだが、インプットの足りなさを自覚していたので、インプットに注力することを意識していた。なので例年に比べるとアウトプット量は少ない...

振り返りと抱負

今年買ってよかったモノ

ポエム

※はてぶで公開していた記事を移管しました  もうすぐ2018年が終わってしまうので今年買って良かったものをリストアップする。 今年は去年よりも充実していて色んなモノを買った年であった。 順位をつけるのはめんどくさいのでテキトーにリストアップしていく。  長財布馬の革のいい感じの長財布を買った。(正確には買ってもらったw) 外側は馬で内側はヌメ革で、使い込むほどいい感じに味がでるというやつだ。 ま...

URLルーティングをつくる エピソード1

アルゴリズムとデータ構造

URLルーティングをつくる エピソード1 概要 以前、Reactで非常に軟弱なルーティング(cf. ReactとHistory APIを使ってrouterを自作する)を作ったが、改めてそこそこにちゃんとしたルーティングを自作したいと思い、挑戦することにした。 きっかけは、最近触っているGolangだ。 Golangでは標準ライブラリを駆使することでアプリーケーションをうすーく実装できるようだが、ル...

HTTP URLルーティング 木構造 router

PHPカンファレンス2018のLT枠で登壇してきた

ポエム

PHPカンファレンス2018「20代が考えるエンジニアキャリア論」というテーマでLTをしてきた。 昨年のPHPカンファレンス2017に引き続き、今年もLT枠で登壇することができてよかったが、来年度こそは25分枠で採択されたい。 PHPカンファレンス参加歴は今年で3回目となるが、毎度PHPのコミュニュティの良さを感じる。 昨年度のPHPカンファレンスから一度も登壇していなかったこともあって、このカン...

PHPカンファレンス キャリア

PHPで学ぶデザインパターン - Strategy

アプリケーション

概要この記事はPHPで学ぶデザインパターン Advent Calendar 2018の記事です。 今回はStrategyパターンについてかきます。 Strategyパターンとは?Strategyパターンは、アルゴリズムの切り替えを容易にするようなパターンです。異なる処理をそれぞれ別のクラスに定義するため、 処理を動的に選択できるだけでなく、条件分岐を減らすことも可能としてします。OCP(open/...

デザインパターン PHP GoF ストラテジーパターン

PHPのインターフェースとタイプヒンティング

アプリケーション

概要この記事はPHP Advent Calendar 2018の記事です。(ちょっと早めに投稿しています) インターフェースはメソッドの実装を保証する”契約”的意味合いの他、タイプヒンティングによって実装を抽象に依存させる(=実装の切り替えをしやすくする)こともできる。 インターフェースの定義・実装基本的なインターフェースの定義と実装。 <?php interface Action { ...

PHP インターフェース タイプヒンティング

anyenvでインストールしたrbenvでbundlerをinstallしたときにパスでハマった

アプリケーション

概要 anyenvでインストールしたrbenvでbundlerをinstallしたときにパスでハマった話。 ハマったこと anyenvでrbenvをインストールしてrubyを使っているのですが、bundlerをインストールする際に、 gem install bundler と何も考えずに打つと、bundlerが/usr/local/bin/以下に配置されてしまう。 意図したパスでないためgemで...

anyenv gem rbenv Ruby Tips

PHPで学ぶデザインパターン - Factory・Factory Method・Abstract Factory

アプリケーション

この記事はPHPで学ぶデザインパターン Advent Calendar 2018の記事です。 概要Factory・Factory Method・Abstract Factoryについてかきます。 Factoryパターンについて知るまずはFactoryパターンについてざっくり説明します。 interface Robot { public function say(); } class Blue...

デザインパターン GoF PHP アブストラクトファクトリーパターン ファクトリーパターン ファクトリーメソッドパターン

正規表現の基本

アプリケーション

概要正規表現の基本。ERE(Extended regular expression)で扱える記法の中でよく使いそうなやつをまとめる。 文字クラス[文字列] 文字列の中の任意の一文字と一致 Ex: [きつね] きつねたぬきねこ き,つ,ね,き,ね [^文字列] 文字列の中にない任意の一文字と一致 Ex: [^きつね] きつねたぬきねこ た,ね,こ [文字列-文字列] 任意...

ERE 正規表現

メモリ管理に関する用語まとめ

OS

概要 試して理解 Linuxの仕組みのメモリ管理の章を読んでいて理解の乏しい単語があったのでいくつかピックアップしてまとめる。 OOM Out of memory システムが物理メモリと仮想メモリを使い切ったことにより、新規にメモリを確保できない状態 OOM Killer(Out of Memory Killer) OOMのときにプロセスを強制終了させることで空きメモリーを確保するLinuxカー...

Linux メモリー

Goならわかるシステムプログラミング

アプリケーション

Goならわかるシステムプログラミングを読んだ。 Goを使った低レイヤーに近いところのプログラミングについて学ぶことができる本。Go言語の標準パッケージの内部的な仕様についていくつか知ることができる。 ...

Golang

2進数、10進数、16進数の変換について

数学

概要 2進数、10進数、16進数をそれぞれ変換するための計算方法についてまとめる。 重みとは 計算する前の前提として、重みについて理解する。 重みとはそれぞれの桁を表す数のこと。 ex. 10進数1234 10^04 = 4 10^13 = 30 10^22 - 200 10^31 = 1000 sum 1234 10^0、10^1、10*2...が重み。 ex. 2進数1101 2^0...

基数変換 離散数学

Golangのインターフェース概要

アプリケーション

概要Golangのインターフェースについてまとめる。 Golangのインターフェースとは 特定のメソッドの型だけを列挙した型 インターフェースFooで宣言したメソッドが全て実装されている構造体は、型Fooとして扱うことができる。 インタフェースを使うとポリモーフィズムを実現することができる インターフェースの定義type <型名> interface { <メソッド名(&l...

Golang

Golangのポインタ概要

アプリケーション

概要Golangのポインタの基本では参照渡しと値渡しの違いの観点からポインタについて書いたが、それ以前にポインタを扱っているうちに混乱してきたため、ポインタの概要をまとめる。 ポインタ型とは メモリー上のアドレスを記憶する変数の型のこと ポインタ型の定義 *を使って定義する var s *string // 変数sはstring型のポインタ。型は*string アドレス演算子と間接参照演算子ア...

Golang

Golangでの変数定義・宣言のパターンまとめ

アプリケーション

概要Golangでの変数定義・宣言のパターンをまとめる 変数の定義・宣言における注意 1文字目が大文字の場合は、他のパッケージからも見える変数 1文字目が小文字の場合は、そのパッケージでしか見えない変数 変数の定義・宣言Variable declarationsvar i int fmt.Printf("%T", i) // int var a, b, c string fmt.Printf(...

Golang

DockerでElasticsearchとKibanaの環境構築

インフラストラクチャ

概要ElasticSearchについての説明とDockerでの環境構築についてざっくりとまとめる。 ElasticSearchとは 分散型RESTful検索/分析エンジン 全文検索だけでなく、分析もできる ほぼリアルタイムの検索プラットフォーム クラスタ データ全体をまとめて保持する1つ以上のノード(サーバー)のコレクションのこと 全てのノードに渡って統合されたインデキシング機能と検索機能が提...

Elasticsearch Kibana

Google Analyticsのカスタムレポートをつくってみた

ツール

Google Analyticsのカスタムレポートをつくってみた最近、ブログの流入率が少しずつ増加してきているので、分析しつつ、施策を考えてみようかと思い、よく見る指標をまとめてみた。 Blog Template Webマーケティングの知識が浅いの勉強したり、指標とにらめっこして色々思考してみたい。 ...

Google Analytics

Golangの関数についてー関数値/コールバック関数/無名関数

アプリケーション

概要Golangの関数において、以下3つについてまとめる。 関数値として扱う場合の関数 関数を引数として扱う関数 無名関数の定義 関数値 クロージャー 関数値として扱う場合の関数package main import ( "fmt" "testing" ) func sayHi() string { return "Hello" } func main() { gre...

Golang コールバック 関数 無名関数

Jestで始めるJavaScriptのテスト

アプリケーション

概要 Jestを使ってJavaScriptのテストをかいてみる。 準備 jestとESModulesを使いたいのでbabel-preset-2015をインストールしておく。 (babel-jestはjestに用意されている。) npm install --save-dev jest babel-preset-2015 .babelrcの中身はこんな感じ。 { "presets&quo...

ES5 JavaScript babel babel-jest ESModules jest テスト

ssh接続セットアップメモ

インフラストラクチャ

概要ssh接続のセットアップ方法についてメモ。 準備 サーバーに接続してwheelグループに所属するユーザーを作成しておく 手順ホスト側~/.ssh/にてssh-keygenで公開鍵・秘密鍵を作成。ここでは公開鍵をid_rsa.pub、秘密鍵をid_rsaとして作成する。 公開鍵の中身をコピーしておく。 ~/.ssh/にてconfigファイルを作成しておく。 Ex. Host bmf HostN...

ssh sshd

PrometheusとGrafanaでリソース監視環境を整える

インフラストラクチャ

概要PrometheusとGrafanaでリソース監視の環境を構築したのでメモ。 環境 さくらVPS CentOS7系 PrometheusをインストールPrometheus - Getting Startedに従ってprometheusをダウンロードする。 ダウンロードしたらprometheusを起動、ダッシュボードにアクセスできることを確認しておく。 ポートが開放されていない場合は開放してお...

Prometheus Grafana

Golangのポインタの基本

アプリケーション

概要Golangのポインタ基礎についてまとめる。 前提 変数とメモリの関係についてイメージできる程度の知識 ポインタとは何かポインタは変数のアドレスを指す。変数のアドレスを通じて呼び出し元の変数の値を変更することができる。 GolangではC言語ライクなポインタは用意されている。Golangでのポインタでは、変数Tのポインタは*T型で、ゼロ値はnilとなる。 package main impor...

Golang ポインタ 値渡し 参照

Docker for Macのマウントが遅い問題の対応

インフラストラクチャ

概要 Docker for Macのマウントが遅い。 npmとかスロー過ぎて辛い。 メモ書き。 原因 Dockerのスタッフの方のコメントを参照。(リンク先中段) Docker - File access in mounted volumes extremely slow, CPU bound MacOSのファイルシステムのAPIが関連しているらしい。 解決策 WindowsやLinuxを使う ...

Docker Tips

複数のテーブルに多対1で紐づく時のテーブル設計のアプローチについて

データベース

概要複数のテーブルに対し、多対1でテーブルが関係付くときのテーブル設計のパターンについてまとめる。 データ設計以下のようなケースのデータ設計を例とする。  issues id title pullrequests id title comments id content commentsがissues、pullrequestsのどちらに対しても多対一で関係付くようなケース。 ...

ポリモーフィック SQLアンチパターン

Clean Architecture 達人に学ぶソフトウェアの構造と設計

システムアーキテクチャ

Clean Architecture 達人に学ぶソフトウェアの構造と設計を読んだ。 Clean Architectureについて学びたいは本書と著者のブログをまず読むのが良いと思う。 Clean Architectureについての明確な定義は語られていない よくある同心円がClean Architectureであるとも主張されていないし、レイヤー構造を持つことが前提だとも書かれていない(ルールを...

Clean Architecture アーキテクチャ

ER図のリレーションシップの種類について

データベース

概要ER図のリレーションシップの種類についてまとめる。 ER図のリレーションシップの種類ER図のリレーションシップには3つの種類がある。 リレーションシップの種類 テーブル関係 線の種類 依存リレーションシップ 子テーブルが親テーブルに依存(テーブル間に親子関係がある) 実線(親→子) 非依存リレーションシップ 子テーブルが親テーブルに依存していない(テーブル間に親子関係がない)...

ER

MySQLのJOINとUNIONについて

データベース

概要MySQLのJOINの種類とUNIONについてまとめる INNER JOIN指定カラムの値が一致するレコード同士を結合する。指定したカラムの値が一致しない場合は結合しない。(両方のテーブルに一致するデータだけ結合される。) users+------+--------+------+| id | sex | name |+------+--------+------+| 0 | ...

MySQL join union

Linuxのパーミッションの読み方と指定方法について

OS

概要 Linuxのパーミッションについてまとめる パーミッションの読み方 ファイル種別 最初の1文字は、ファイル種別を表している。 ファイル d ディレクトリ l シンボリックリンク 以降3文字単位でファイルのオーナー別に権限を表している。 24文字目 ユーザー ファイルの所有者に対する権限 57文字目 グループ ファイルの所有グループに対する権限 8~10文字目 その他 その他に...

Linux パーミッション