Carpe Diem

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

負荷ツールのスレッド数・Ramp-Up期間・ループ回数の関係

概要 負荷ツールで負荷をかける時の説明でよく見るのは 項目 計算式 総テスト回数 スレッド数×ループ回数 1秒あたりのリクエスト数 総テスト回数÷Ramp-Up ですが、例えば分間600アクセスを想定した時に 設定項目 値 スレッド数 600 Ramp-Up期間 60 ループ回…

Fluentdを0.14にバージョンアップした時の対応

概要 Fluentdを0.12から0.14へアップデートしました。 その時にtd-agent.confやらpluginで色々と変更点があったのでその時の対応をまとめます。 環境 fluentd 0.14.21 fluent-plugin-s3 1.0.0.rc6 td-agent.confの変更点 root_dirができた 以前はbuffer毎に <match pattern></match>…

GolangのSliceを関数の引数に渡した時の挙動

Go

概要 Sliceの構造を始め、関数で呼び出した場合の挙動やappendなどsliceを操作した場合どうなるかをまとめました。 環境 golang v1.9.0 Sliceの構造 Sliceは以下のような3つの要素でなりたっています。 配列へのポインタ length capacity 図示すると以下で…

Terraformで過去に作ったリソースを別ディレクトリに分けたい

概要 Terraformを使う上で、DBなどのデータ系のリソースはそうそう変更することはないので、オペミスなどを防ぐために別ディレクトリに分けておくと安心です。 しかし既に作ってしまっていた場合、*.tfとともにその部分のterraform.tfstateを移動しなくては…

AngularのInjectorとProviderとDependencyの関係

概要 過去の記事で christina04.hatenablog.com を書いた時に、AngularのInjectorとProviderとDependencyの関係を理解していないとよく分からないと思ったので追記的にまとめます。 環境 Angular 4.3.5 覚え方 結論から言うと、以下のように考えるとすっきり…

Scratch imageでtime: missing Location

概要 以前以下の記事でscratch imageの作成方法を紹介しました。 christina04.hatenablog.com しかしgolangのコードによっては以下のpanicが起きることがあります。 panic: time: missing Location in call to Time.In 今回はその対応方法です。 環境 golang…

BehaviorSubjectでAPIの結果をキャッシュ

概要 クライアントからのAPIコールは可能であれば避けた方がサーバの負荷も下がり、ユーザの体感速度も上がります。 1度取得すればほぼ変わらないデータなどは、最初にAPIコールした後はできれば避けたいです。 一方でcookieやlocalstorageで管理するほどで…

ScratchイメージでGolangアプリの超軽量イメージをビルド

概要 Alpineベースのイメージが軽量イメージとして認知されていますが、golangの場合は単一バイナリで動くのでイメージ内にgolangが入っている必要はありません。 なので最も軽量と言われているScratch imageを利用することで、dockerイメージを軽量化するこ…

AngularのHttpClientModuleの使い方

概要 Angular 4.3からこれまでのHttpModuleに代わってより軽量かつ使いやすいHttpClientModuleと言うものが出てきました。 今回はその移行作業を書きます。 環境 Angular 4.3.1 angular-cli 1.2.3 成果物 今回の成果物は以下です。 github.com

delveでGolangのデバッグ

Go

概要 Golangでデバッグをする際にdelveというツールがオススメです。 環境 golang v1.8.3 delve 1.0.0-rc.1 インストール brewでもインストールできますが、単体テストの実行の際に上手く動かないことがあったのでgo getの方をオススメします。 $ xcode-sele…

Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別

概要 各言語がC10K問題をどう解決してきたかを調べてみたところ、Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別がよく分からなかったので調べてみました。 正直なところ人によってちょこちょこ定義が異なるのではっきりとした答えはなさそう…

GolangでMockを書く時のTips

Go

概要 「GolangはDuck TypeだからMock用意するの大変だよね」とよく言われますが、そんなことはないですよ、という話。 環境 golang 1.8.3 1. interface自体埋め込めば実装済みと解釈してくれる 例えば以下のような複数のメソッドを持つinterfacedoEverything…

CloudFrontのキャッシュでハマった話

概要 ブラウザのキャッシュ - Carpe Diem を検証している時に期待した挙動をしなくてハマったので、CloudFrontのキャッシュの動作と注意点をまとめます。 CloudFrontのキャッシュ動作 レスポンスヘッダのx-cacheを見ると以下の3つに区別できます。 x-cache …

ブラウザのキャッシュ

概要 Webフロントのパフォーマンス診断 - Carpe Diem で指摘されたブラウザキャッシュの対応をするため調べてみました。 大きく分けて強いキャッシュと弱いキャッシュの2種類のキャッシュがあります。 強いキャッシュ ブラウザ側でリソースを保持し、期限が…

Webフロントのパフォーマンス診断

概要 Webフロントのパフォーマンスをチェックする診断ツールの紹介です。 なんだかもっさりした挙動だけどどこから手を付けたら良いか分からない、といった時に問題点を洗い出すのに便利です。 Audits Chrome DevToolsに標準で付いています。 ページを開いた…

GolangでBigQueryにデータを追加する

概要 GolangでのBigQueryの使い方です。 認証周りが以前と変わっており、JWTを使ってゴニョゴニョしてた部分をライブラリ側で吸収してくれるようになったのか使う側は簡単になりました。 環境 go 1.8.3 サービスアカウントキーの作成 API Console Credentials…

Golangのnilについて

Go

概要 先日の golang.tokyo #6 - connpass で独自のエラー型でnilにハマった点に触れられていて、自分でもふわっとしか覚えてなかったのでまとめ。 覚えること 以下を覚えておけばとりあえず大丈夫です。 nilは型を持つ interfaceの場合のみ、型もnilでないと…

Docker Imageのバージョン管理について

概要 development, staging, productionといった環境に分けてdocker imageを利用する場合のバージョン管理について考えてみました。 環境 AWS ECS AWS ECR Docker 17.03.1 要件 今回対応する時に考慮した要件は以下。 gitのtagと連動 ただし最新のimageのTAG…

macOS Sierraでulimitを変更する方法

Mac

概要 SierraのPCに変更した際、.bash_profileを過去のPCから引き継いだところulimitのところで設定が変わっていたのでメモ。 デフォルトの確認 $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unl…

SPAを S3+CloudFront で表示する方法

概要 AngularなどのSPAをS3+CloudFrontで表示する方法についてです。 要件 SSL/TLSを使いたい https://example.com/hoge のようなサブディレクトリのようなパスで403にならないようにしたい ↑のようなパスでもOGPがきちんと表示される リロードしても404にな…

B TreeとB+ Treeの違い

概要 インデックスに対してMongoDBはB Treeを採用し、MySQLのInnoDBはB+ Treeを採用しています。 どうして採用しているアルゴリズムが違うのだろう?と思って調べてみました。 主な違い B+ TreeはほとんどB Treeと同じですが、以下の点が異なります。 リーフ…

Webフロントの実装で利用したChrome extension

概要 Angularを使ってWebフロントを実装しているのですが、その過程で便利だったChrome extensionを紹介します。 Chrome extension Page Ruler chrome.google.com 画面上でのピクセルを測るのに使う。デザイナーさんからPNGだけ頂いた時など。 ColorZilla ch…

署名と暗号強度について

概要 署名ロジックを選ぶ際に、どのアルゴリズムにするか、どれくらいの鍵長が適切なのかが分からなかったので調べてまとめました。 対象 共通鍵暗号(対称暗号) AES 公開鍵暗号 RSA ECC

GolangでJWTの具体的な実装

概要 以前JWTを認証用トークンに使う時に調べたこと - Carpe Diemで紹介した内容の具体的な実装の紹介です。 環境 golang 1.8.1 署名アルゴリズムと鍵長は以下とします。 署名アルゴリズム 鍵長 RSA-SHA256 4096bit 成果物 今回の完成形はこちら github.com

docker-compose で Kibana 5.x を使う

概要 Kibanaを5.xにメジャーアップデートする際、Elastic社公式のdocker imageも用意されたのでdocker-composeでまとめて作ることにしました。 その際調べたこと、ハマったことをまとめます。 環境 docker 17.03.1-ce docker-compose 1.11.2 Elasticsearch 5…

Webフォントのファイルサイズを小さくする

概要 Webフォントを当てると途端にサイトが良く見えるようになりますが、一方でフォントファイルに入っている文字数が多いため、必然的にファイルサイズが大きくなってしまいます。 そこでフォントのサブセット化と呼ばれる、使用する文字だけをフォントから…

RxJSのfinallyの挙動

概要 Angularにはリクエストのクエリパラメータを取得する方法として、 @Component({...}) export class MyComponent implements OnInit { constructor(private activatedRoute: ActivatedRoute) {} ngOnInit() { this.activatedRoute.params.subscribe((par…

Tasks(Macrotasks), Microtasksについて

概要 Angularで出てきたfakeAsyncやwhenStableを使う時に、microtasksの話が出たのでちゃんと理解しようと調べてみました。 実験 以下のjsのログ順はどうなるでしょうか? console.log('script start'); setTimeout(function() { console.log('setTimeout');…

AngularでAsync pipeを使う

概要 AngularのPipeの中にはAync PipeというPromiseやObservableな非同期オブジェクトをそのままtemplateで表示できるPipeがあります。 今回はその使い方を紹介します。 環境 angular 2.4.8 rxjs 5.2.0 async pipeのメリット 主なメリットは以下の2つです。…

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

概要 dockerを扱う上で、dev, stg, prdの環境で動かす際の分け方について考えてみました。 環境 docker 1.13.1 docker-compose 1.11.1 主な分け方 思いつくのは以下の5つです。 imageを分ける 全環境のconfigファイルをimageに保持させ、RUN時に指定 templa…