Carpe Diem

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

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

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

Cold Observable と Hot Observable

概要 Observableを学ぶ上でCold ObservableとHot Observableの違いを理解していた方が良いと聞いたので調べてみました。 環境 rxjs 5.1.0 ざっくり表 Cold Observable Hot Observable イメージ オンデマンド再生のような、選んだら再生。再生するシーンは開…

RxのflatMapの使い方

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

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

概要 前回の続きです。 前回の要件に加え、今回対応したいのは以下です。 開く時にパラメータを渡して、Modal内のComponentで利用したい 例えばエラーメッセージを渡して上部に通知バーを表示するなどを作る時にこういった仕組みが必要になると思います。 今…

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

概要 確認用ダイアログなど、モーダルが必要になるシーンは多々あると思います。 今回はAngular2で実装する方法を紹介します。 環境 angular 2.4.7 angular-cli 1.0.0-beta.32.3 要件 今回満たしているのは以下の項目です。 serviceとしてどこからでも呼べる…

Papertrailでエラーログ監視

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

S3 + CloudFrontにした時にハマったこと

概要 静的Webサイトを用意して、HTTPSでアクセスできるようCloudFrontを前に用意したのですがそこでハマったことをまとめます。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 問題 SSL証明書を設定したのにERR_SSL_VERSION_OR_CIPHER_MISMATCHというエラーがでてペー…

Angularで作ったサイトでリロードすると404エラー

概要 Angular2で作ったサイトをS3のstatic website hostingで動かし、 https://www.mysite.com/login というURLにいる状態でリロードしたところ、Not Foundエラーが出てしまったのでその対応方法をまとめます。 環境 angular 2.4.7 angular-cli 1.0.0-beta.2…

Slackで新規チャンネルが作られたら通知する

概要 チームの人数が増えるとSlackのチャンネルも個々人が作っていつの間にかどんどん増えていきます。 知らずに同じようなチャンネルを作ったりしないよう、新規チャンネルが作成された時に#generalに自動で通知されたら便利だと思い設定してみました。 Zap…

AngularでFormのCustom Validation

概要 AngularでのFormのカスタムバリデーションには主に以下の方法があります。 Directiveで用意する ビルトインのValidatorsのような関数を用意する 今回は後者の実装例を紹介します。 validationロジック 今回はクレジットカードの簡易チェックをするvalid…

golang.tokyo#3でLTしました

Go

概要 golang.tokyo #3でLTをさせていただきました。 今回はパフォーマンスについてのイベントでした。 golangtokyo.connpass.com スライド 内容は先日ブログに書いたGolangでのstreamの扱い方を学ぶ - Carpe Diemと同じですが、今まで知らなかった人(僕も含…

Angular2でのForm 〜Model Driven編〜

概要 前回はTemaplate Drivenなフォームの作り方を紹介しました。 今回はModel Drivenなフォームの作り方を紹介します。 環境 angular-cli 1.0.0-beta.25.5 Angular 2.4.3 完成形 成果物はこちら github.com

Angular2でのForm 〜Template Driven編〜

概要 AngularのFormの書き方は主に2つあります。 1つはTemplate Drivenなやり方。 もう1つはModel Driven(Reactive Form)なやり方。 フォームの作り方を調べた時にどっちがどっちの情報なのか分からず混乱したのでまとめてみました。 今回はTemplate Dr…

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

概要 Angular2でComponent間でデータをやり取りしたい状況が出てくると思います。 例えば「このボタンを押したら外部APIを叩いて状態を更新したい。その状態を他のComponentでも使っているので更新を反映したい」ときなどです。 今回はServiceにデータを保持…

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

Mac

概要 新しいMacBookを使い始めたところ以前利用していた古いバージョンのツールを使う必要が出てきたのですが、意外と手間だったので忘れないようにまとめ。 環境 OSX El Capitan 10.11.6 Homebrew 1.1.6 旧バージョンをインストールしたことがある場合 brew…

Golangでのstreamの扱い方を学ぶ

Go

概要 結論から言うと、Streamで扱っているものはStreamのまま扱うです。 具体的にはio.Readerを毎回ioutil.ReadAllで[]byteに変換せずにそのまま使いましょうです。 なぜStreamを使うべきか Node.jsの例ですが、こちらで非常に分かりやすく説明されています…

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

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

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

Go

概要 golangにはsync.PoolというFreeListの仕組みがあります。 役割としては既に割り当てられたメモリが不要になった時、解放する代わりにListにとして保持しておいて、メモリが必要になったらそこから取るというものです。なのでGCコストやメモリのallocati…

うるう秒対応

概要 2017/01/01 09:00:00(JST)にうるう秒が挿入されますが、ちゃんと問題点や対応方法を理解してなかったのでまとめ。 うるう秒発生でどうなるか ntpを入れているか、tzdataが更新されているかによって動作が異なります。 JST ntp(stepモード) tzdata 未対…

Packerでソースに使う公式AMIの場所

概要 Packerでsource_amiとして使用する公式のAMIが探しにくいので、利用するものだけまとめました。 Ubuntu Ubuntu Amazon EC2 AMI Finder こちらで検索します。Searchのところに16.04などバージョンを入れれば出てきます。 その中でInstance Typeがややこ…

サーバサイドのCORS対応

概要 No 'Access-Control-Allow-Origin' header is present on the requested resource.というエラーが出た際に外部API(サーバ側)でどう対応すべきかをまとめました。 CORSでググると幸せになれます。 環境 go 1.7.4 gin 1.1.4 CORSが必要になるのはどんな…

ldflagsを使おうとしてハマったこと

Go

概要 golangではbuild時にldflagsというオプションをつけると、変数に値を埋め込んだ状態でバイナリを生成することができます。 よく使われるのはビルド時のgitのcommitのハッシュを埋め込んで、そのバイナリがどのcommitで作成されたのかを明らかにして「想…

angular-cliで手軽にAngular2を始める

概要 Angular2のチュートリアルを終えた後で「いざ作ってみよう」となると 「package.jsonやtsconfigとかどうしよう」 「system.jsよりwebpackがいいって聞くけどどうなんだろ」 「テストフレームワークは何がいいんだろう」 みたいなことで悩んでなかなか進…

Elasticsearchでスコアに重み付けを行う

概要 SEO対策という言葉があるように、Googleの検索結果は単なる文字列の一致率ではなくホームページ自体にスコアが付けられており、それを元に検索の順位が決まります。 今回はElasticsearchでそのようなスコア順に並べる方法を説明します。 環境 Elasticse…

ECSでコンテナのrolling update

概要 ECS上のコンテナをダウンタイム0で更新(デプロイ)する方法をまとめます。 環境 ALB ECS container agent 1.13.0 Docker 1.11.2 Amazon ECS Container Agent Versions - Amazon EC2 Container Service ポイント minimumHealthyPercentとmaximumPercen…

.ioドメインに障害が起きたのでDNSの仕組みを勉強

概要 先日.ioドメインで障害が起きました。.ioのトップレベルDNSサーバがサブドメインの権威サーバ一覧を返さなくなったので名前解決ができなくなったためです。 今回はDNSの流れと確認方法をまとめました。 DNSの流れ www.example.comにアクセスしたい クラ…

dockerのlog周りの対応

概要 dockerを本番運用する際にログの扱いに悩んだので情報をまとめてみました。 環境 docker v1.12.1 コンテナのログは何処に渡すべきか 主に以下の3通りになると思います。 コンテナ内に保存 volume先に指定してに永続保存 log driverを使って転送

remote_addrとかx-forwarded-forとかx-real-ipとか

概要 ECSでNginxのコンテナをプロキシとして立てたところ、APIサーバのアクセスログのクライアントIPがNginxのコンテナIPになっていたのでその修正をしたのがきっかけです。 環境 Nginx 1.10.2 Docker1.12.1 構成 Client -> ELB -> Nginx -> API という構成…

golangのpresentで発表用スライドを作成する

Go

概要 先日Goオールスターズ2で登壇させて頂き、その時プレゼン作成のために使ったpresentの使い方を紹介します。 presentを使うと↓のようなスライドを作れます http://go-talks.appspot.com/github.com/jun06t/go-all-stars/main.slide#1 メリット・デメリ…

Expressでroutingの後にmiddlewareを置きたい

概要 あるサーバ用のライブラリを使ったときにrouting後にmiddlewareを挟む必要が出てきました。 そのときに幾つかハマったことがあったので、それをまとめます。 環境 Node.js 6.6.0 Express 4.13.4 Express4のミドルウェアの流れ まずはミドルウェアの実行…