Carpe Diem

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

Dockerでのdev, stg, prd環境分け

概要

dockerを扱う上で、dev, stg, prdの環境で動かす際の分け方について考えてみました。

環境

  • docker 1.13.1
  • docker-compose 1.11.1

主な分け方

思いつくのは以下の5つです。 

  1. imageを分ける
  2. 全環境のconfigファイルをimageに保持させ、RUN時に指定
  3. templateを埋め込んでおいて、envsubstで環境変数使って書き換える
  4. data volumeでconfigをマウントして使用する
  5. 環境変数で設定できるように実装し、envを指定する
続きを読む

Elasticsearchの前方一致について考える

概要

以前Prefix Query の注意 - Carpe Diemで述べたように、PrefixQueryはsearch queryがnot_analyzedになるので意図しない結果になることがあります。
一方で前方一致は検索の利便性を向上させる上でメリットが大きいので、入れておきたい要素でもあります。

今回は前方一致を考える上で何が良いかを調べてみました。

環境

  • Elasticsearch 5.2.1

Prefix Query

メリット

  • 文字通り前方一致のクエリであることが分かる

デメリット

  • search analyzerは指定できないので、index時にnormalizeで小文字などにしてしまうと、大文字による検索でヒットしない
  • 内部的にはregexpによる一致なので短いと重い
続きを読む

Cold Observable と Hot Observable

概要

Observableを学ぶ上でCold ObservableとHot Observableの違いを理解していた方が良いと聞いたので調べてみました。

環境

  • rxjs 5.1.0

ざっくり表

Cold Observable Hot Observable
イメージ オンデマンド再生のような、選んだら再生。
再生するシーンは開始タイミングに依るので、人によってそれぞれ
テレビのような垂れ流し。
再生するシーンは皆同じ。
データの開始タイミング subscribe()されたら connect()されたら
データを流すStreamの数 subscribeしてる数 1つ。いくつsubscribeしても同じStreamを見る
データを受け取るStreamの数 subscribeしてる数 subscribeしてる数。
送信してるStreamは1つでも、unsubscribeは受信してる個々で行う必要がある
続きを読む

RxのflatMapの使い方

概要

AngularでHttpModuleを連続して使う必要が出た時に、「毎回subscribeでネストが深くなるのが嫌だなぁ」と思ってぐぐったところ、「flatMapを使うと良いよ!」という記事を見つけて使ってみようとしたのがきっかけです。

他のmapやfilterなどと違ってパッと理解できなかったのと、lodashのflatMap(arrayをflattenするやつ)のイメージのせいで詰まったのでまとめました。

環境

  • rxjs 5.1.0

flatMapはmap + mergeと考えるとイメージしやすい

公式のflatMapのイメージ図は以下です。

f:id:quoll00:20170225091903p:plain

ref: ReactiveX - FlatMap operator

初見だと分かりづらいですね。
なので map(itemを変換)とmerge(複数のObservableを束ねる)がくっついたもの と考えるとイメージしやすいです。

続きを読む

Angularで中身を動的に変えられるModalを作る【応用編】

概要

前回の続きです。

前回の要件に加え、今回対応したいのは以下です。

  • 開く時にパラメータを渡して、Modal内のComponentで利用したい

例えばエラーメッセージを渡して上部に通知バーを表示するなどを作る時にこういった仕組みが必要になると思います。

今回は統一した完了ダイアログComponentを使うが、メッセージだけ切り替えたいという要件を実現します。

環境

  • angular 2.4.7
  • angular-cli 1.0.0-beta.32.3
続きを読む

Angularで中身を動的に変えられるModalを作る【基本編】

概要

確認用ダイアログなど、モーダルが必要になるシーンは多々あると思います。
今回はAngular2で実装する方法を紹介します。

環境

  • angular 2.4.7
  • angular-cli 1.0.0-beta.32.3

要件

今回満たしているのは以下の項目です。

  • serviceとしてどこからでも呼べる
  • 中身を好きなcomponentで作ることができる

また今回満たしていない要件は以下です。これは次回にやり方を紹介します。

  • モーダルの中に外から(呼び出しているComponentなどから)何かしらパラメータを渡す
続きを読む

Papertrailでエラーログ監視

概要

以前Logentriesでエラー監視 - Carpe Diemでエラーログの監視方法を紹介しました。
ところがこのLogentriesで利用できていたアラート機能が有料プランのみになってしまったため、なにか無料で使えるサービスはないかと探したところ、この

Papertrail - cloud-hosted log management, live in seconds

がありましたので設定方法などを紹介します。

フリープランだと以下の条件で機能が使えます。

  • 検索可能な期間は直近48時間
  • 7日間ログを保持
  • アラート可
  • 1月あたりの転送量の上限は100MB

注意として転送量上限を超えると新しいログが破棄されるので、無駄なログを送らないようにしてください。

環境

  • remote_syslog2 0.19
  • Ubuntu 14.04
  • Nginx 1.4.6
続きを読む