前回はクリーンアーチテクチャ (CA) の実装例として コマンドライン (CLI) のツールを作りました。 今回はそれを Web に変更する事で CA の良いところを見ていきます。 TLDR CA で作ると CLI から Web にしても "外側" だけの変更で済むよ 修正範囲も最少限…
前回はクリーンアーキテクャの各レイヤの説明をしました。 今回は実装の説明をしていきます。 今回はソースコードの説明をします。 まずは前回の商品情報管理ツールの仕様を再掲。 実行すると、指定された商品情報に税込価格を追加して表示する 税込価格は軽…
クリーンアーキテクチャの概要を PHP のサンプルコードを見ながら学びます。 対象 クリーンアーキテクチャの記事や本を見たけど腑に落ちなかった クリーンアーキテクチャの概念は分かったが実際にどう実装していくか、動くコードを見たい 基本的には素の PHP…
なんとなく表題の事をやってみた。 とりあえず、 関数合成 部分適用 があればなんとかなりそうなので、作ってみる。 // 関数合成 function compose() { $fns = func_get_args(); $revFns = array_reverse($fns); return function ($initial) use ($revFns) {…
go でそれなりに複雑なロジックを実装する時に欲しくなってくるのが配列操作ライブラリ。 何でも for でやるのが go way なのかもしれませんが、XXX.filter(...).map(...) とかやりたいですよね。 lodash みたいなのはないかと思って探してみたところ、一応…
node.js で cli ツールを作った時に 簡単に実行する方法を考えてみました。 nexe を使う方法もありますが、ファイルサイズが大きくなるので javascript のコードのみまとめる事を想定します。 方針としては ライブラリも使いたいので webpack で単一ファイル…
node.js で関数型したい時には Ramda などの ライブラリを入れるのが一般的だと思いますが、 ちょっとしたツールを書く時には Ramda 入れるのも大げさに思える時があります。 で、よくよく調べてみると、map, filter, reduce はあるし、 部分適用も Function…
CloudFormation のテンプレートを作っている時、 いちいちコンソールにアップして確認していたら時間がかかってしまう。 そんな時に便利なのが cli でテンプレートファイルの チェックをしてくれるcfn-lint。 使い方も簡単で $ cfn-lint validate ./cf-templ…
ruby にtap メソッドというものがあって、 メソッドチェーンしてる時のデバッグに便利なんですが、 shell でパイプライン使ってる時の デバッグにも使えそうなので、作ってみました。 ただし、処理を入れる事はできなくて 標準エラーに内容を表示するだけで…
そろそろ手書きで API の仕様を作るのやめたいと思って swagger を試してみました。 swagger は別に単一のソフトではなくて、 Swagger Spec という仕様で書かれた定義書を 元にドキュメントを書いたり、コードを生成したりできるものみたいです。 Swagger Ed…
go で作った WebAPI サーバの速度検証をしてみました。 単に GET リクエストを投げるだけでよいので、JMeter でなくて お手軽にできるツールでやりました。 loadtest node.js 用のテストツールで 自分でリクエストを好きに定義できるのが特徴です。 例えば、…
パイプライン演算子が使える言語がないか探していたところ Coconut というものを見つけました。 公式の説明を見ると 関数型言語で Python にコンパイルされる Python のスーパーセット なにそれ面白そう。 という事で、ちょっと触ってみました。 インストー…
要は man の代わりに使うツールなんですが、 こいつのすごいところはインストールしなくても使えるところで、 例えば、ls の使い方を知りたい場合 $ curl cheat.sh/ls だけで OK です。 DL して使うコマンドラインツールもあるみたいなんですが、 サーバーが…
直列 vs 並列シリーズ第 3 弾。 あんまり errgroup を使ったサンプルがなかったのでやってみた。 package main import ( "fmt" "io/ioutil" "net/http" "sync" "time" "golang.org/x/sync/errgroup" ) func createUrl(sec int) string { return fmt.Sprintf(…
前やった node.js の Promise で直列 vs 並列を php でやってみた。 素の php だと非同期処理はめんどくさいので 今回は Guzzle を使ってみた。 Guzzle は非同期もできる http クライアントだけど、 Guzzle Promises を使えば 一般的な処理も非同期で書ける…
仕事で以下のようなバッチを作る事になったのでその記録をメモしとく。 月 1 回実行 内容は手動でやってた作業を自動でやって結果をメールするだけ 実行には 30 分ほどかかる 全然クリティカルじゃない エラーが発生しても連絡があってから再実行すればよい …
typescript でちょっとやってみました。 http://httpbin.org/delay/{delay} というのは delay 秒待ってからレスポンス返してくれる URL です。 /* * serial vs parallel */ import request from 'request-promise-native'; function createUrl(sec: number):…
json をパースするツールとして jq というのがありますが、 その反対、json を作るツールとして jo というのがあります。 使い方 引数でキーと値を指定する $ jo key=value {"key":"value"} 配列を作るときは -a オプションをつける $ jo -a 1 2 3 [1,2,3] …
fselect という ツールを見つけて、面白そうだったんで触ってみた。 主な機能はこんな感じ SQL like な検索 正規表現も使える 出力フォーマットの変更可能(json, csv...) mp3 対応 早速インストールして fselect のリポジトリで試してみる。 $ fselect name,…
昨年は いま学ぶべき第二のプログラミング言語はコレだ! 未来のために挑戦したい9つの言語とその理由 の記事がきっかけで Rust, Haskell をやって非常によかったので この流れで残りの Elixir もやってみた。 テキストはもちろんこれ 最速で知る! Elixirプ…
TL;DR Haskell ならパイプライン演算子を自分で定義できるよ java8 import java.util.stream.IntStream; public class Main { public static Integer evenSquareSum(Integer n) { return IntStream.range(1, n) .filter(n1 -> n1 % 2 == 0) // variable n is…
TL;DR パイプライン演算子いいね このごろ新しく言語を見る時、Hello world の次くらいに偶数自乗和を 作る関数を定義してる。Ruby で書くとこんな感じ。 def even_square_sum(n) (1..n) .select {|n| n % 2 == 0} .map {|n| n * n} .inject {|acc, n| n + a…
いつもいつも git rebase -i HEAD^^ を打つのが めんどくさいので作ってみました。 使用例 git irebase → git rebase -i HEAD~2 git irebase 5 → git rebase -i HEAD~5 数字をつけるとその数さかのぼる git irebase ^^^ → git rebase -i HEAD^^^ ^ や ~ だけ…
MODx の管理画面をカスタマイズした時のメモです。 最後の doLayout() が分からなくてハマったので注意。 MODx.on('ready', function() { var buttons = []; buttons.push({ text: 'hello', handler: function () { alert('hello'); // 実行させたい処理をこ…
vim を使ってて、emacs みたいに C-a で行頭と空白以外の最初の文字を トグルしたかったので作ってみました。 function! ToggleBol() let col = virtcol('.') let cmd = (col == 1) ? '^' : '0' execute "normal! " . cmd endfunction inoremap <C-a> <C-o>:call Toggl</c-o></c-a>…
ちょっと検索しただけでは分からなかったので。 ほとんど参考サイトのコピペですが。 {% if my_list|length > 10 %} ... {% endif %} 参考 Code Fails: Twig template: find the length of an array
もう少し簡単にファイル共有できないかと思い、 ubuntu に samba を入れてみました。 いつも通り、 apt-get を使います $ sudo apt-get install samba 共有するディレクトリを作成し、 だれでも読み書きできるようにオーナー、権限を設定します。 $ sudo mkd…
Symfony2 を ubuntu にインストールした時のメモ まず、 Symfony を落としてきて展開 mkdir ~/temp cd ~/temp wget http://get.symfony.com/Symfony_Standard_Vendors_2.3.1.tgz tar -zxvf Symfony_Standard_Vendors_2.3.1.tgz sudo mv Symfony /var/www で …
デフォルトでは各ユーザの ~/public_html にアクセスできないようなので 設定を追加しました。 cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/userdir.conf userdir.conf sudo ln -s ../mods-available/userdir.load userdir.load apache を再…
前回で MySQL をインストールしましたが、 外部から接続するために設定が必要だったのでメモ。 まず、普通に接続しようとすると以下のエラーメッセージが出ました。 SQL Error (2003) Can't connect to MySQL server で、設定ファイルを編集します。 sudo vi…