ホーム

ゴリラで学ぶソフトウェアの法則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入門

OS

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

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 パーミッション

JavaScriptで始めるアルゴリズム

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

概要JavaScriptでアルゴリズムを学ぶ。 サーチのアルゴリズムリニアサーチリストや配列のデータに対して、先頭から順番に比較を行っていくアルゴリズム。 配列の長さ分処理を繰り返し、目的のデータに到達したら処理を終了する。目的とするデータが後ろにあるほど処理が遅くなる。 const targetData = 5; const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, ...

バイナリーサーチ リニアサーチ バブルソート セレクションソート

Unixコマンドメモ

OS

概要 Unixコマンドのメモ。 jq JSON形式のデータを加工するコマンド。 JSONのPretty Print echo '[{"name": "Tom", "age": 20}}]' | jq . Pretty Print以外にもオブジェクトからプロパティを指定してデータを取り出したり、オブジェクトの長さを取得...

unixコマンド jq tee

プロセスとスレッドの違い

OS

概要 プロセスとスレッドの違いについてまとめる プロセスとは プログラムの実行単位 CPU上で実行される リソースの共有はできない 専用のメモリ領域を使用 仮想アドレス空間を保持している プロセスの切り替えには仮想アドレスと物理アドレスのマッピング必要 プロセスの保持するデータ構造 プロセスがメモリに保持しているデータ構造は2つのセグメントに分かれている。 テキストセグメント プログラム...

os スレッド プロセス スタック ヒープ

GraphQLとは

アプリケーション

GraphQLとは Facebookが開発 APIのためのクエリ言語 APIのリクエストのデータ形式とレスポンスのデータ形式が似ているため、ユーザーフレンドリー RESTはアーキテクチャ(設計)であり、GraphQLは言語(DSL)である REST APIとGraphQLの比較REST APIのAPI形式エンドポイントに対して、HTTP動詞でリクエストを投げる curl https://ap...

API HTTP REST GraphQL

Atom×TidalCycles×SuperColliderでライブコーディングをはじめる

アプリケーション

概要プログラミングで音楽をつくってみたいと思い、音響プログラミングに手を出してみた。 準備 Mac Atom Git Homebrew Haskell Tidalcycles SuperCollider Mac、Git、Atom、Homebrewは既に用意されている前提で話を進める。 HomebrewでHaskellとTidalCyclesをインストールするbrew install ghc br...

Atom Git Haskell homebrew tidalcycles

さくらVPSでDocker環境を構築する

インフラストラクチャ

概要さくらVPS上にDocker環境を構築する。サーバーの初期設定等は割愛。 構築手順操作はすべてsudo権限を持った一般ユーザーで行うものとする。 Dockerには無償のCE版と商用版のEE版があるが、今回はCE版を使用する。 リポジトリをセットアップインストールsudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm...

Docker さくらのVPS

SPAを構築したときにハマったこと

アプリケーション

概要以前、LaravelにSPAを組み込む時に考えたディレクトリ構成とnginxのconfファイルというタイトルの記事を書いたが、そこで記載したnginxのconfが不十分だったため、改めて問題点を整理、解決した。 前提 History API nginx SPAを構築したときにハマったことnginxの設定リロードしても常にindex.htmlを返すように設定する必要がある。こんな感じでtry...

Nginx SPA

DIとサービスロケーター

アプリケーション

概要DIとService Locatorの違いについてまとめる DIとは デザインパターンの一種 依存性注入 オブジェクト間の依存性を分離 オブジェクトの実行時に必要なオブジェクトが注入されるようにする テストしやすくなる DIパターンの実装DIパターン(コンストラクタインジェクション)を実装してみる。なお、DIパターンには、コンストラクタインジェクション、セッターインジェクション、メソッド...

DI サービスロケーター デザインパターン

シンボリックリンクとハードリンクの違い

OS

概要 シンボリックリンクとハードリンクの違いについてまとめる 前提 inode データ構造 ファイルシステム上の属性情報(作成者、グループ、作成日時など)をデータとして持つ ls -i1 /またはstat /でinode番号を確認できる シンボリックリンクとは 元のファイルまたはディレクトリのパスを参照するディレクトリエントリを追加 実験 touch a.md ln -s a.md a_s...

シンボリックリンク ハードリンク

開発環境を見直してvimライクにした

ツール

概要 開発の効率化を図り、vimを取り入れ、開発環境諸々を刷新したのでまとめておく。 各ツールの細かい設定や導入しているプラグイン詳細などは省く。  エディタ Atom 開発で使うメインエディタ vimのキーバインドを使えるようにプラグインを導入 vim-mode-plus-ex-mode vim-mode-plus 画面分割やペイン移動などもvimっぽくできるようにキーバインドを少しいじった...

tmux vim Atom iTerm

tmuxコトハジメ

ツール

概要端末多重化ソフトウェアであるtmuxのコトハジメ キーバインドtmux起動tmux or tmux new-session セッション中での新規セッション作成prefix+:new セッション一覧tmux ls セッションのデタッチ(tmuxから抜ける)prefix+d セッションのアタッチtmux attach(a) 任意のセッションにアタッチtmux attach(a) -t 0(name...

tmux

UNIXという考え方

OS

UNIXという考え方を読んだ。 UNIXについての思想と哲学を150ページという短いページにまとめてある本。 この本ではコーディングに通じる考え方も学ぶことができる。 何かの設計を考えるときに普遍的に活かせるであろう思想が書いてあるので、設計に立ち向かうときに振り返りたい内容である。 ...

UNIX

N+1問題とは

データベース

概要N+1問題の説明と対応についてまとめる。 N+1問題とは 全てのレコードの取得に1個+レコード文だけのN個のSQLを発行してしまう問題 N+1というより1+Nと解釈したほうがわかりやすい 例 一覧表示用のデータを取得するケース 一覧用の全データを取得するSELECTを1回発行(Nレコード返ってくる) Nレコードの関連データ取得のためにSELECTをN回発行 対応 join SELECT...

N+1

OSメモ

OS

概要 OS周りの勉強をしている時に調べたこと。 swap メモリが足りない時にメモリの中身をハードディスクに移す機能のこと ページキャッシュとは CPUはストレージからデータを直接読み込みができない データは一旦メモリに読み込む必要がある メモリに読み込まれたデータはページキャッシュとして再利用できる ファイル単位でアクセスする時に使用されるキャッシュ バッファキャッシュ ブロックデバイスを...

os

ダック・タイピングとは

アプリケーション

概要ダック・タイピングについてまとめる ダック・タイピングとは 動的型付けオブジェクト指向プログラミング言語において、オブジェクトができることはオブジェクトそのものが決定する インターフェースの全てのメソッドを持つオブジェクトは、インターフェースを実装していなくともオブジェクトはインターフェースを実装しているとみなせる、ということ If it walks like a duck and quack...

ダック・タイピング

ソフトウェア開発の法則

アプリケーション

概要ポステルの法則 Jon Postel 送信するものに関しては厳密に、受信するものに関しては寛容に ポステルがTCPを規定したRFC793にて記載された1節が一般化されたもの インターネットの通信における原則 パーキンソンの法則 Cyril Northcote Parkinson 第1法則  仕事の量は、完成のために与えられた時間をすべて満たすまで膨張する 第2法則 支出の額は、収入の額に...

ソフトウェア開発

ポリモーフィズムとは

アプリケーション

概要ポリモーフィズムについてまとめる ポリモーフィズムとは Poly(複数の)Morphism(形状) 複数の異なる型に対し、共有のインターフェースを提供すること 引数を受け取ったインスタンスがクラスによって違う振る舞いをすること ポリモーフィズムの種類 アドホック多相 関数が異なる型の引数に対してそれぞれ異なる実装を持つ 多重定義、関数のオーバーロードによって実現 パラメータ多相 型指定の...

ポリモーフィズム

はじめて学ぶソフトウェアのテスト技法

テスト

[はじめて学ぶソフトウェアのテスト技法](https://amzn.to/3UM7CJ9を読んだ。 テストの方法について書かれている本で、ソフトウェアテストの基本パターンを学ぶことができる。 テストコードを書いたことなければ最初に読みたい一冊。 ...

Road to Vimmer

ツール

概要Vimmerになるために覚えていったコマンドを書き連ねていく。 動機 GUIエディタのショートカットには慣れたもののテキスト編集の速度が頭打ちになった気がする 脱GUIエディタ依存(GUIエディタに依存したショートカットキーを覚えることと枯れたエディタであるVIMのショートカットキーを覚えることのどちらがコスパが良いか。viはあらゆるOSの標準エディタとして搭載されている) ショートカットや矢...

vim エディタ

O(オーダー)記法とアルゴリズムの計算量の求め方

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

概要アルゴリズムの演算性能をざっくりと計算するO記法と計算量の求め方についての前提知識をまとめる。 計算量(オーダー)とは アルゴリズムの演算性能をデータ量の増加に対し、実行時間がどれくらい増加するかの割合で表した指標。 時間計算量 処理時間 空間計算量 メモリ使用量 Big O/Big θ/Big Ωそれぞれ計算時間を記述するものだが、学術的な意味の違いについてまとめる。 Big...

O記法

HTTPとSSL/TLS

ネットワーク

HTTPSとは HTTP(Hyper Transfer Protocol) over TLS(Transport Layer Security) TCPハンドシェイクの後にTLSハンドシェイクを行う 完了後、暗号通信のままHTTPリクエストとレスポンスを交換 TLSの機能TLSというプロトコルが提供する機能 機密性 ネットワーク経路上でデータの中身が見れない 完全性 通信データの改ざん...

HTTP HTTPS SSL TLS

ステートレスとステートフル

ネットワーク

前提 セッション HTTPは状態を持たないプロトコル リクエストが同一のクライアントからの通信かどうか判断しない 接続確立から切断までの一連の通信 ステートフル サーバーがクライアントのセッション状態を保持している システムが状態やデータを保持している プロトコルの例 FTP, TCP, BGP, OSPF, EIGRP, SMTP, SSH ステートレス サーバーがクライアントの...

ステートフル ステートレス セッション

Laravel Homesteadを使ったLaravelの環境構築

アプリケーション

概要Homesteadを触る機会があったのでざっくりまとめる。 準備以下のツールは用意しておきましょう。 composer vagrant virtualbox ssh key 鍵つくっておいてください 手順Laravelをインストールlaravelのインストールとcomposer installを実行しましょう。 composer create-project "larave...

Laravel Vagrant VirtualBox composer homestead

テストケースの種類と洗い出し

テスト

概要 テストケースの基本的な種類と洗い出し方についてのざっくりまとめ。 テストの目的 バグを発見する 品質保証 品質改善(リファクタリング) テストの種類 ユニットテスト メソッドの仕様を確認するテスト ドメイン層のpublicメソッドが対象とする インテグレーションテスト ユースケース(一連の処理)に基づいたテスト ビジネス的に重要なケースを優先的に対象とする テストケースの...

設計

Golangの開発環境を構築

アプリケーション

概要Goの環境を構築します。 Goの環境構築Goをインストールするインストール手段は省略します。私はanyenvというツールでインストールしています。 GOPATHを指定する.bashrcまたは.bash_profileにGOPATHを指定します。 export GOPATH=$HOME/localdev/project/go_dev // 好きなように設定してください PATH=$PATH:$G...

Golang

Dockerとは

インフラストラクチャ

Dockerとは Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム Linuxのコンテナ技術を使用 コンテナは、ホストマシンのカーネルを利用し、プロセスやユーザーなどを隔離する 軽量・高速 ミドルウェアや各種環境設定をコード化して管理できる(=Infrastructure as Code) ローカル・本番環境問わず 誰でも同じ環境が作れ...

Docker 仮想環境

Golangの勉強で参考にした資料

アプリケーション

概要 golangの勉強をする時に参考にした本とリンクのまとめ。 本 プログラミング言語Go 教典 スターティングGo言語 読みやすい。わかりやすい。プログラミングの素養が高い人には平易すぎる内容かもしれない。 Go言語によるWebアプリケーション開発 Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る リンク golang.jp A Tour of Go ast...

Golang リンク集

モダンなJSの話──Proxy

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ProxyとはProxyはECMAScript 2015から追加されたオブジェクトで、オブジェクトが持つ機能をラップすることにより、オブジェクトの機能をカスタマイズすることができます。 Proxyの関連用語Proxyを知る上で必要な用語です。 handler・・・トラップを入れるため...

ES5 ES6 JavaScript

モダンなJSの話──async function

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 async functionとはasync functionはAsync Functionオブジェクトを返す関数です。 asyncとawaitというキーワードを使って、Promiseよりも簡潔に非同期処理を書くことができます。 ES2017で仕様が定義されています。 使い方使い方はカ...

ES5 ES6 JavaScript

ReactとHistory APIを使ってrouterを自作する

アプリケーション

概要準備まずはHistory APIを理解しておきます。GO TO MDN。 MDN - History MDN - ブラウザの履歴を操作する 忙しい人はpushStateとwindow.popstateだけ理解しておけばなんとかなるはず。 仕様このrouterでは、以下のようなURLに対応します。 /post /post/:id /post/:id/:title クエリパラメータには対応...

ES6 JavaScript React history-api router

モダンなJSの話──Promise

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 PromiseとはPromiseとは・・ The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value...

ES5 ES6 JavaScript

Reactでマークダウンエディタをシャッとつくる

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 準備ビルド環境のセットアップが面倒なので、今回はFacebook公式のcreate-react-appというツールを使います。 npm install -g create-react-app md-editorというアプリ名で環境を用意することにします。 create-react-a...

ES5 ES6 JavaScript React

モダンなJSの話──Destructuring assignment(分割代入)

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 分割代入とは分割代入とは、配列またはオブジェクトのデータをそれぞれ別個の変数に代入する式のことです。文章ではイメージがつきにくいかと思います。それぞれの例を見て確認してみましょう。 配列の分割代入let a, b, c; [a, b, c] = [1, 2, 3] console.l...

ES5 ES6 JavaScript

モダンなJSの話──importとexport

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 exportとはexportは、指定のファイルから関数、変数、オブジェクト、クラス(クラスはプロトタイプベース継承の糖衣構文であり、関数の一種。詳しくは モダンなJSの話──クラス)などを受け取り、任意のファイルでそれらを使えるようにするための文です。 exportには主に2種類の使...

ES5 ES6 JavaScript

モダンなJSの話──クラス

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ECMAScript6からのクラス定義ECMAScript6以前ではnew演算子やprototypeプロパティを使ってクラスに近い機能を実現していましたが、ECMAScript6からはclassキーワードでクラスを定義できるようになりました。<br>classキーワードは...

ES5 ES6 JavaScript

モダンなJSの話──var/let/const

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 スコープとは本題に入る前に、スコープの定義について確認しておきましょう。 スコープとは、変数名や関数名が参照可能な範囲のことです。 スコープの種類は色々ありますが、ここでは主に3つのスコープについて表で説明します。 スコープ名 範囲 備考 グローバル 関数の外側 どこか...

ES5 ES6 JavaScript

モダンなJSの話──アロー関数

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 アロー関数ってなに?ざっとまとめると、 ES2015から追加された新しい構文 通常のfunction式よりも短くかける thisの値を語彙的に束縛することができる(=文脈からthisの値を把握しやすい) 常に匿名関数 アロー(=>)を使ってかく関数式で、"this...

ES5 ES6 JavaScript

bmfと今年買ってよかったモノ

ポエム

※はてぶで公開していた記事を移管しました この記事は、bmfカレンダー Advent Calendar 2017 - Adventarの19日目の記事です。 2017年購入してよかったなぁというモノを振り返ってみます。 個人的にQOLが向上したなぁと思うものをピックアップしました。 Bluetooth対応イヤホンMpow Bluetooth イヤホン Bluetoothに対応したイヤホンです。 お...

Being Geek ギークであり続けるためのキャリア戦略

キャリア

Being Geek ギークであり続けるためのキャリア戦略を読んだ。 ギークが書いている本で、タイトルもギークを含んでいるが、ギークでなくともエンジニアであれば学びを得られる本。 エンジニアとしての姿勢、考え方など語り口に少しクセはあるが、参考になる。 私がこの本が結構好きで、手元に置いておきたい1冊だったりする。 ...

PHPカンファレンス2017で、「3年目エンジニアOSSをはじめる」というテーマでLT登壇してきました

ポエム

初登壇!2017年10月8日、PHPカンファレンス2017にて、LT初登壇してきました。 初めてのLTでPHPカンファレンスという舞台に立てて、自分としてはとても良い経験になりました。 スライドSpeaker Deck - 3年目エンジニアOSSをはじめる by bmf_san 「3年目エンジニアOSSをはじめる」というテーマで、自分のOSSプロダクトを紹介しつつ、OSSに取り組んだ背景や学び得た...

OSS PHP LT PHPカンファレンス

テスト駆動開発

テスト

テスト駆動開発を読んだ。 Kent Beck氏のTDD本。TDDについて学ぶならとりあえずこれを手に取りたい。 ...

単一テーブル継承・クラステーブル継承・具象クラス継承について

アプリケーション

概要リレーショナルなデータベースは継承をサポートをしていないので、オブジェクトの継承関係をデータベースにどのように表現するのか考慮する必要があります。それを表現する3つのパターン、単一テーブル継承・クラステーブル継承・具象クラス継承とはについて説明します。  ※各パターンの実装におけるメリット・デメリット等には触れません。 前提今回想定する登場するクラスは4つです。 Party PeopleがR...

PofEAA

さくらVPS+CentOS7.3+Ansible

インフラストラクチャ

概要AnsibleでさくらVPSの初期セットアップを自動化します。 環境 さくらVPS CentOS7.3 Ansible2.2.1.0 前提知識 さくらVPSをの初期設定の流れを理解していること。 さくらVPSの初期設定 さくらVPSにCentOS7をインストールさくらVPSのコンソール画面からOSインストール>カスタムOSインストールを選択してCentOS7をインストールしておき...

Ansible CentOS さくらのVPS Iaas

Vagrant上のMySQLで"MySQL Daemon failed to start

インフラストラクチャ

LaravelでマイグレーションやSQLファイルのインポートを繰り返したり、中断したりと無茶をやっていたらMySQLがおかしくなりました。 対応 MySQLの設定ファイルにログサイズを設定したら直りました。 innodb_log_file_size=5M 所感 無茶はやめよう! 参考 "Plugin 'InnoDB' registration as a STORAGE ...

MySQL Vagrant Tips

Vagrantを1.7.4から1.9.1に一気にアップデートしたら「Bringing up interface eth2: Device eth2 does not seem to be present, delaying initialization.」

アプリケーション

Vagrantのバージョンが1.7.4というちょっと古いバージョンだったのでアップデートしてみたらネットワーク周りでエラーがでてハマった話です。 エラー詳細 "/etc/udev/rules.d/70-persistent-net.rules" is not a file ==> default: Configuring and enabling network inte...

apache Vagrant VirtualBox Tips

VagrantでVirtualHostを使う

アプリケーション

VagrantBoxを作りっぱなしでほったらかしな仮想環境を維持してきたのですが、今更ながらVirtualHostの設定をしました。 やること vagrant-hostupdaterのインストールとVagrantfileの設定 Apacheのconfファイルの設定(VirtualHostの設定) やらないこと vagrantのインストール symbolic linkの設定とか面倒なこと 環境 ...

Vagrant

VagrantでCentOS6.7の開発環境を構築する

インフラストラクチャ

概要最近、Boxを再構築した際に、「Vagrant開発環境のワークフローをちゃんとまとめておきたい」と思ったのでまとめてみました。レポジトリにほぼ同じワークフローメモがあります。 github - bmf-san/vagrant-development-workflow 前提以下のアプリケーションがホストマシン(Mac)にインストールされていること Vagrant VirtualBox 環境ホ...

apache CentOS Vagrant

Vagrant+CentOS7.3+Ansible

インフラストラクチャ

概要AnsibleでVagrantの環境構築をする最初の一歩です。プロビジョニングができる環境を整えます。 環境 Vagrant1.9.1 CentOS7.3 Ansible2.2.1.0 CentOS7.3のVagrnat Boxを用意する任意のディレクトリ(例として今回はcentos7.3)にてVagrant環境を構築します。 vagrant box add https://atlas.ha...

Ansible CentOS Vagrant

Slack+hubot+cron(node-cron)+shell+logwatchでサーバーログを定時報告

インフラストラクチャ

以前、slackとhubotでShellScriptをSlackから実行しようという記事を書きました。さくらvps+hubot+Slackでslack botをつくる 今回は対話形式のコマンド実行ではなく、cronで定期的にShellScriptを実行、Slackに出力結果を報告しようという試みです。 意外とこの類いのコピペでパクれるリスペクトできる参考ソースが調べても出てこなかったので、途中で挫...

cron CentOS Slack さくらのVPS CoffeScript hubot logwatch shell