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

Carpe Diem

備忘録。https://github.com/jun06t

Angular2でのForm 〜Model Driven編〜

Angular

概要

前回はTemaplate Drivenなフォームの作り方を紹介しました。
今回はModel Drivenなフォームの作り方を紹介します。

環境

  • angular-cli 1.0.0-beta.25.5
  • Angular 2.4.3

完成形

成果物はこちら

github.com

続きを読む

Angular2でのForm 〜Template Driven編〜

Angular

概要

AngularのFormの書き方は主に2つあります。

1つはTemplate Drivenなやり方。
もう1つはModel Driven(Reactive Form)なやり方。

フォームの作り方を調べた時にどっちがどっちの情報なのか分からず混乱したのでまとめてみました。
今回はTemplate Drivenの方を紹介します。

環境

  • angular-cli 1.0.0-beta.25.5
  • Angular 2.4.3

完成品

今回の成果物はこちら

github.com

続きを読む

Angular2でComponentをまたがったデータのやり取り

Angular

概要

Angular2でComponent間でデータをやり取りしたい状況が出てくると思います。
例えば「このボタンを押したら外部APIを叩いて状態を更新したい。でもこのボタンは汎用性があるから別コンポーネントとして切り出したい」ときなどです。

今回はServiceにデータを保持して、それを各コンポーネントで利用するやり方を紹介します。

環境

  • angular-cli 1.0.0-beta.25.5
  • Angular 2.4.3

完成形

今回の成果物はこちら

github.com

続きを読む

Homebrewで過去のバージョンを使いたい

Mac

概要

新しいMacBookを使い始めたところ以前利用していた古いバージョンのツールを使う必要が出てきたのですが、意外と手間だったので忘れないようにまとめ。

環境

  • OSX El Capitan 10.11.6
  • Homebrew 1.1.6

旧バージョンをインストールしたことがある場合

brew switchで古いバージョンに変更できます。どんなバージョンがインストール済みかはbrew infoで確認できます。

$ brew info terraform
terraform: stable 0.8.2 (bottled), HEAD
Tool to build, change, and version infrastructure
https://www.terraform.io/
/usr/local/Cellar/terraform/0.7.2 (3 files, 121.5M)
  Poured from bottle on 2016-09-05 at 21:50:16
/usr/local/Cellar/terraform/0.7.3 (3 files, 122.4M)
  Poured from bottle on 2016-09-08 at 01:50:24
/usr/local/Cellar/terraform/0.7.4 (3 files, 123.6M)
  Poured from bottle on 2016-09-22 at 09:43:38
/usr/local/Cellar/terraform/0.7.5 (4 files, 123.3M)
  Poured from bottle on 2016-10-10 at 10:49:37
/usr/local/Cellar/terraform/0.7.6 (4 files, 76.3M)
  Poured from bottle on 2016-10-18 at 00:01:42
/usr/local/Cellar/terraform/0.7.7 (4 files, 76.3M)
  Poured from bottle on 2016-10-23 at 21:51:09
/usr/local/Cellar/terraform/0.7.8 (4 files, 78.5M)
  Poured from bottle on 2016-11-02 at 21:32:15
/usr/local/Cellar/terraform/0.7.9 (4 files, 78.7M)
  Poured from bottle on 2016-11-09 at 22:16:13
/usr/local/Cellar/terraform/0.7.10 (4 files, 78.9M)
  Poured from bottle on 2016-11-14 at 23:13:43
/usr/local/Cellar/terraform/0.7.13 (4 files, 87M)
  Poured from bottle on 2016-11-29 at 21:54:18
/usr/local/Cellar/terraform/0.8.0 (4 files, 95.5M)
  Poured from bottle on 2016-12-15 at 23:40:08
/usr/local/Cellar/terraform/0.8.1 (4 files, 95.5M)
  Poured from bottle on 2016-12-17 at 10:01:35
/usr/local/Cellar/terraform/0.8.2 (4 files, 96.8M) *
  Poured from bottle on 2016-12-22 at 21:49:28

こんな感じに一覧が表示されるので、変更したいバージョンを指定します。

続きを読む

Golangでのstreamの扱い方を学ぶ

Go

概要

結論から言うと、Streamで扱っているものはStreamのまま扱うです。

具体的にはio.Readerを毎回ioutil.ReadAll[]byteに変換せずにそのまま使いましょうです。

なぜStreamを使うべきか

Node.jsの例ですが、こちらで非常に分かりやすく説明されています。

yosuke-furukawa.hatenablog.com

それを踏まえて考えてみると、Golangの場合以下の2つが大きいと思います。

1. メモリの効率化

ioutil.ReadAllなどで一旦全て[]byteに変換すると、その分メモリを消費しますし、アロケーションGCに依る速度低下が起きます。

一方io.Readerio.Writerは各chunkの処理に同じバイトを使いまわすので、メモリの効率が良いです。

続きを読む

負荷が低いのにアクセスを捌けきれない時の対応

負荷試験 MongoDB Nginx

概要

MongoDBでCPU使用率ロードアベレージが高くないのに処理が詰まっている現象が起きました。
その時間にbatchが動いていてアクセスが急に増えることが原因と言うのは分かっているのですが、負荷的には十分余裕があり不思議な状態でした。

そこでdstatで見るポイント - Carpe Diemでも述べたように、負荷の状態から判断する基準があります。

  1. ロードアベレージを確認する
  2. 1が高ければCPU、ディスクI/O、メモリにボトルネックがある
  3. 1が低ければTCPコネクションにボトルネックがある

今回の現象から判断するに、TCPコネクションに原因がありそうです。

続きを読む

sync.Poolを使って省コスト&高速化

Go

概要

golangにはsync.PoolというFreeListの仕組みがあります。
役割としては既に割り当てられたメモリが不要になった時、解放する代わりにListにとして保持しておいて、メモリが必要になったらそこから取るというものです。なのでGCコストやメモリのallocationコストを省くことが可能になります。
またgoroutine-safeであるので並列処理でも問題ありません。

環境

  • go 1.7.4

どんなところで使われている?

標準パッケージのfmtloggerライブラリなどでよく見ます。
一定の文字列を保持してから書き込む、という処理を何度も繰り返すので、毎回メモリを確保するよりFreeListを持って再利用することでGCコストやメモリのallocationコストを省いているのが分かります。

続きを読む