記事

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

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

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

HTTP URLルーティング 木構造

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

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

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

HTTP URLルーティング 木構造

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 ストラテジーパターン

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

アプリケーション

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

anyenv gem rbenv ruby

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 正規表現

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

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

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

Linux メモリー

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

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

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

基数変換 離散数学

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

アプリケーション

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

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