読者です 読者をやめる 読者になる 読者になる

はむはむエンジニアぶろぐ

このブログのコンセプトは"ハッキングの為なら愛する家族を傷つけることをいとわない" 自分にとってエンジニアリングは "手段ではなく生きる目的" である

findやgrepの実行時に「許可がありません」や「Permission denied」を回避する方法

cdやlsに次いで、findやgrepは、よく使うコマンドだと思います。 そのよく使うfindやgrepの実行時に権限の問題で、「許可がありません」や「Permission denied」が大量に出力されてしまってうんざりしたことありませんか? 私は、うんざりしてたけど放置して…

DDD Alliance! ドメイン駆動設計のためのオブジェクト指向入門に参加してきた

2016年1月21日に開催されたドメイン駆動設計のためのオブジェクト指向入門に参加してきました。 その時のスライドがこちら ドメイン駆動設計のためのオブジェクト指向入門 from 増田 亨 www.slideshare.net

PHP BLT #2でLTしてきました & LT資料まとめ

PHP BLT #2というイベントに参加し、LTしてきました。 無料で会場をお貸しいただいた株式会社メルカリ様ありがとうございました。 第一回のPHP BLTに参加したかったけど、抽選に落ちたので第二回である今回に参加できて良かったです。

【SQLアンチパターン】アプリケーションのコードでSELECT * (ワイルドカード)はやめよう

アプリケーションのコードで SELECT * (ワイルドカード)としてカラム名を省略するのは、アンチパターンです。 SQLアンチパターンという名書でも紹介されています。 18章 インプリシットカラム(暗黙の列) SELECT * がダメなのは、あくまでアプリケーション側…

親クラスのフィールドへのアクセス場合は、getter/setterを使ったほうがいいと思う

他の言語は知らないけど、PHPではvisibilityが public 又は protected で宣言された親クラスのフィールドに $this でアクセスできてしまう。 public でフィールドを宣言することは、カプセル化を壊すことになるのでやらないと思うけど。 親クラスのフィール…

Whyについてコメントを書きHowについてコメントを書かない

ソースコード中のコメントは、我々を助けてくれることもあれば毒になることもある。 よかれと思ってコメントをかいたことが、後からメンテナンスする人を苦しめることにもなる。 例えばコメントの情報が誤っていたり、わかりにくい表現でコメントされている…

JavaScriptを動的に組み合わせるべきではない

例えば、このようにPHPをJavaScriptで、動的に組み立てられているコードには問題点が2つある。 <script type="text/javascript"> var hoge = '<?php echo $hoge ?>'; </script> セキュリティ面 メンテナンス面 である。

Travis CIでデバッグコードの混入を検知する

プロダクションのコードにデバッグコードを混ぜてはいけません。 コードの見通しが悪くなりますし、そのシステムを扱うユーザに見せては情報を見せてしまう可能性もあります。 それにより、システムユーザに悪用されてしまうかも知れません。 とはいえ、デバ…

Apacheの環境変数をアプリケーションから使う

Apacheで設定した環境変数を使いたいというのは、よくあると思います。 例えば、社内LANからのアクセスであればログを取得したりなど。 アプリケーション側で出来なくはない話ではありますが、アプリケーション側よりもインフラ側に寄せたほうが分離できてい…

バッチ処理について

バッチ処理について、色々調べたり経験したことをまとめておく。 オンライン処理とバッチ処理の性質の違い、 オンライン処理とバッチ処理の設計判断軸、 などを整理してみた。

メソッド名 deliverとsendの使い分け

とあるクラスのメソッド名で、何かを送るメソッド名を考えた時に、何個か候補が浮かぶと思います。 例えば、「 deliver 」とか「 send 」とかパッと思いつくと思います。 この両者の単語ですが、同じ送るという意味でも少しニュアンスが違います。 deliver …

iTerm2の起動が遅い場合の対策

この記事はzsh Advent Calendar 2015 - Qiita 21日目の記事です。 担当は@secret_hamuhamu です。 私のzshの起動が遅いので、zprofを使ったパフォーマンスチューニングのネタを投稿しようと思ってました。 しかし、プロファイリング結果、ボトルネックになっ…

【シェルスクリプト】if文をワンライナーで書く方法

シェルスクリプトで、環境構築スクリプトをかいたりしますよね? よくあるのが、dotfilesディレクトリが存在しなければ git clone する。 当然、if文使うんですけどシェルスクリプトならワンライナーで書けます。 そう、シェルスクリプトならね。

メソッド名 findByIdの「by」について

よくストレージに問い合わせるメソッド名として、findByなにがしというのが使われる。 意味はもちろん、なにがしを用いて対象データを見つけてくるというものだ。 私は、英語に疎いのだが、よくわからずにbyを使っていた。 しかし、byには こんな意味がある…

PHPUnitの便利な機能を紹介する

この記事はPHP Advent Calendar 2015 - Qiita 14日目の記事です。 担当は@secret_hamuhamu です。 みなさんは、PHPのテスティングツールに何をお使いでしょうか? Behat?PHPSpec?PHPUnit? 今日は、PHPUnitの便利な機能をいくつか紹介したいと思います。 …

2つの期間で重なる期間が存在するか判定するアルゴリズム

この記事はアルゴリズム Advent Calendar 2015 - Qiita 7日目の記事です。 担当は@secret_hamuhamu です。 私は、理系出身の人間ではなく数学もほとんどできないので、論理的に数学的に説明できていないと思います。 ですが、このような説明の仕方のほうが、…

シェルスクリプトでY又Nの入力のみ受け付ける機能を作る

コマンドを実行後に、実行しますか?[y/n] みたいなものってよく見ますよね? y又はn以外の文字を入力した場合、何度でも入力を促される。 自作シェルスクリプトを作成中にこのような機能が欲しくなりゴリゴリ書いていたら凄く汚くないコードが出来上がったw…

シェルスクリプトでC言語のfor文と同等のことをする

シェルスクリプトのfor文って他の言語にあるforeachのようなもので、回数による繰り返しではありません。 しかし、少し工夫をするとシェルスクリプトでもC言語のfor文と同等のことが出来ます。

リファクタリングコンテスト in Rubyに投稿してみた

ForkwellJobsで、リファクタリングコンテスト in Rubyというものが開催されています。 リファクタリングコンテスト in Ruby TOO あなたがリファクタリングしたコードの { Before → After } を投稿しよう! 今までにリファクタリングを行ったRubyのコードのBe…

頻出して使うテスト用のインスタンスの生成に関する話

この記事はオブジェクト指向 Advent Calendar 2015 - Qiita 1日目の記事です。 担当は@secret_hamuhamu です。 今回は、「Object Motherパターン」と「Test Data Builderパターン」についてまとめました。 これら、2つのパターンはテスト時に用いるパターン…

三項演算子を利用した代入処理のショートコードテクニック

三項演算子を活用することで、以下の様な分岐処理を含んだ代入処理を1行で書くことができます。 if (x == 0) { a = a + 2; } else { a = a + 3; }

Golangでフィボナッチ数列を実装してみた

最近、勉強会やAdvent Calendarでも大人気のGolangで、フィボナッチ数列を実装してみたので、サンプルコードを載せておく。 Golang楽しいですね。 新しいことを覚えるのは刺激になって良い。

【Git】サブコマンドを作ってみた!カレントブランチ名の変更が簡単に

Gitは、自作のサブコマンドを簡単に登録することができます。 実行パスが通っているディレクトリに git-サブコマンド名 のファイルを作成すれば、 git サブコマンド名 で呼び出すことができます。 サブコマンドのファイルに実行したい処理を記述すれば、自作…

PHPでStrategyパターンを実装してみた

GoFのデザインパターンの一つStrategyパターンをPHPで実装してみた。 Strategyとは「戦略」のことで、戦略とはアルゴリズムのことを指しています。 Strategyパターンは、アルゴリズム(振る舞い)をカプセル化し振る舞いの差替えや追加、削除をしやすくするも…

PHPのMatcherライブラリPHP Matcherを使ってみる

PHP MatcherというPHP用のマッチャーを見つけたので、使ってみた。 PHPUnitなどのテスティングツールと合わせて使うことができる。 マッチャーとは? テストの表現力を高めることができる アサーションの条件をより詳しくかける マッチャーを使うことで、複…

【PHPUnit】少し複雑な条件はassertThatを使う

PHPUnitや他のxUnit系に assertThat という少し複雑な条件を書くことができるアサーションがあります。 PHPUnitで、たまに使う assertThat を紹介してみようかなと思います。

カレントディレクトリ以下にあるファイルを対象にファイル内の文字列を置換するコマンド作ったった

カレントディレクトリ以下にあるファイルを対象に、ファイル内の文字列置換したいなんてことよくありますよね? 毎回ググって、コマンドをパイプしてごにょごにょするのも面倒くさいので、シェルスクリプトでコマンドを作りました。

【AOP】ProxyパターンとDIコンテナを使ったアスペクト指向プログラミング

ProxyパターンとDIコンテナを使うことで、アスペクト指向プログラミングを実現できます。 アスペクト指向は、オブジェクト指向で解決しにくい問題を解決しましょうというパラダイムです。 今回のアスペクト指向プログラミングの対象は、ロギングです。 言語…

PHP カンファレンス2015で、LT「PHPでDIする」を発表してきました

2000人を超えて、人たちが集まったPHPカンファレンス2015でLTをしてきました。 めちゃくちゃ楽しかったです!!スピーカーの方々、並びにスタッフの方々お疲れ様でした!! 私は、LT 兼 スッタフという立ち位置でした。 スタッフ参加したので、PHP7 Tシャツ…

PHP カンファレンスのレポートを書かせてもらいました!明日はLTするよ!【PHPカンファレンス2015前日編】

gihyo.jpさんで、PHPカンファレンス 2015のスタッフとしてレポートを書かせて頂きました。 こちらが、書いたレポート 明日開催!PHPカンファレンス2015 直前レポート 明日も、例年通り当日のセッションをレポートします!! 参加者が、現時点で2000名を超え…

Travis CI と Slackを連携させてみた

タイトル通りですが、Travis CI と Slackを連携させてみました。 連携させることで、何が嬉しいのかというとビルドの成功や失敗をレポーティングできます。 こんな感じに。 では何故、メールではなくSlackと連携するのかというとビルド失敗時に"早く気付ける…

Decoratorパターンで既存のクラスに機能追加をする

Decoratorパターンは、GoFのデザインパターンの一つです。 既存のオブジェクトに新しい機能や振る舞いを動的に追加することを可能にする。 Decoratorパターン - wikipedia 既存のクラスに対して、機能追加を行おうというものです。 ここで、重要なのが既存の…

git hookを使ってデバッグコードをコミットできないようにする

Git

Gitを使っていて、間違えてデバッグコードをコミットしてしまったことはありませんか? デバッグコードを取り除いてコミットし直すの面倒くさいですよね。 git log も汚れますし、デバッグコードがある状態にチェックアウトできてしまうという状態が健全では…

【PHP】メソッドチェーンで、記述できる バリデーションクラスChainValidatorを作った

メソッドチェーンで、記述できる記述できる バリデーションクラスChainValidatorを作ってみた。 作ったきっかけ 毎回、バリデーション書くのがめんどくさい 汎用的にバリデーションロジック部分のみ書き換えたい 自分にとって理想なバリデーション機構を目指…

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます。 phpcon 2015 まだ、参加できるみたいなので、どうぞどうぞ〜。 ここまで大きいカンファレンスでLTやスタッフさせてもらうの初めてなので、楽しみです〜。 ちなみに、LTは「PHPでDIをする」っ…

.htaccessでAuth認証かけてみる

.htaccessは、Apacheの設定ファイルです。 Apacheの設定ファイルは、2種類あります。 httpd.conf (Apache全体の設定 .htaccess (ディレクトリ単位の設定 .htaccessを用いて、Auth認証をかけてみます。

【Apache】/usr/sbin/apachectl -k startでエラーが出る

Linux CentOS 7.1のApache 2.4.6を起動しようとしたところエラーが出た。 バージョン確認 $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) $ httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Mar 12 2015 15:07:19 Apacheの…

Adapterパターンでドメインレイヤと技術レイヤを分離する

ドメインを理解するために、ソースコードを読んでいて読みにくさを感じる瞬間の一つにドメインレイヤと技術レイヤの話が混じっている場合です。 ドメインとして関心があるのは、どんなデータを扱うのか?どういう振る舞いをするか?です。 技術レイヤの話は…

マーカーインターフェースを使った例外設計

マーカーインターフェースを使った例外設計をPHPで行います。 マーカーインターフェースは、実装を持たない空っぽのインターフェースです。 こんなやつ。

【EditorConfig】拡張子やプロジェクトごとでスタイルを定義できる

EditorConfig使ってますか? EditorConfigは、vimで言うところの ftplugin みたいなもので、拡張子やプロジェクトごとにインデントのサイズや文字コードなどを定義できます。 今までは、ftpluginとかで頑張っていました。 ですが、プロジェクトによっては文…

【SQL Developer】起動時のエラー( org.netbeans.Netbinoxを提供するモジュールが見つかりませんでした )の対策

Macで、SQL Developerをインストールし、起動しようとすると以下のエラーが表示されて強制終了した。 Dynamic Module Config - 機能org.netbeans.Netbinoxを提供するモジュールが見つかりませんでした。 一応、このエラーの対策方法はわかったのでメモしてお…

【リファクタリング】メソッドの引数に同じ変数のセットを何度も渡しているのならば、オブジェクトにしよう

今回は、リファクタリング(?)ネタ。 例えばこんなメソッドがあるとする。(PHPです) public function login($userLoginId, $userLoginPassword) { // 割愛 } public function passwordChange($userLoginId, $userLoginPassword) { // 割愛 } $userLoginId と …

【vim】 英単語補完してくれる神プラグインneco-look入れてみたよ

vim

英単語のスペルミスやスペルの確認で、時間を取られてしまうvimmerなら neco-look を入れておくと幸せになります。 なぜもっと早く、 neco-look しなかったのか、私は。 導入は簡単なのですが、ちょっとハマったのでそれも合わせて導入手順を紹介。

PHPでValueObjectを実装してみる

ValueObjectは、getterしかないオブジェクトです。 getterしか無いって何が嬉しいの?って感じかもしれませんが、特定の概念を説明する集合体として表現できます。 ようは、コードに概念の集合を語らせることが出来ます。 簡単なパターンなので、覚えること…

PHPのClosureを利用したトランザクション処理

とあるPHPで実装されたOSSのトランザクション処理が、とてもエレガントだったのだがOSSの名前を忘れてしまった。 しょうがないので自分の記憶を頼りに真似してみようと思う。

PHPで例外チェーン

オブジェクト指向プログラミングで、例外処理をする際は 例外チェーン を意識せねばなりません。 例えばこのように、catchの中でさらに例外を投げ直していて(throw)例外チェーンをしていないとどうなるか? method1(); $this->method2(); $this->method3(); …

俺得!エンジニアおすすめ Mac アプリ

俺得なエンジニアにおすすめできるMacアプリをまとめてみた。 というかMacユーザで、エンジニアだったら、みんな入れてるかも知れない。

【ユニットテスト】 メソッド名をそのままテスト名にすべきではない

タイトルの通りです。 ユニットテストでメソッド名をそのままテスト名にすべきではない。 例えばこんなやつ testGetUser() みたいなメソッド名のprerfixに test をつけただけのようなやつ。 このテストメソッドを見た時に、 GetUser() メソッドをテストして…

第93回 PHP勉強会@東京に参加して、LTしてきました + アスペクト指向について

2015年8月25日(火)にGMO Yours様で、開催されたPHP勉強会に参加してきました。 参加して思ったのが、業務で CakePHP を使っている方がとても多かったことですね。 時点は、 Laravel か Fuel PHP って感じでした。 せっかくなんで、LTしてきましたよ〜。 とい…

Tell, Don't Ask [ 求めるな、命じよ ]

Tell, Don't Ask は、オブジェクト指向プログラミングのよいとされる考え方の一つです。 Tell, Don't Ask は、日本訳で 求めるな、命じよ と訳されているのが、多いみたいですね。 オブジェクト指向というのは、役割を思ったオブジェクト同士が協力(コラボレ…