trackerを作る(3)backend(リクエストを受けてpub/subに流すコンポーネント)がほぼ出来上がった。engineのクラスタを立てたdeploymentとserviceの定義を書いたREADMEを書いたalpineで動かすとgcpのライブラリのロードでこけることがわかったのでfixした動作確認データを投げる。xxx.xxx.xxx.xxx/pvアプリケーションのログを確認する。{"userid":"610KZ4G0CBTI419Y","timestamp":1509290846000,"pageid":"test-page-001","browser":"chrome","country":"japan"}pub/subにデータが流れたことを確認する。libraryは基本非同期処理で書くようになっているが、callbackを省略するとpromiseオブジェクトを返してくれる。promiseオブジェクトをチェーンで繋げて書くとうまく書けそうだが、繋げたいメソッドの入出力がうまくハマらなかったり、細かい例外処理をしたかったりすると、自分でpromiseオブジェクトを作成した方が書きやすい感じがした。自分のnode.js力が低いだけで、慣れてきたらもっとうまく書けそう。gcpのcredentials/projectidは環境変数に入れるとすっきりする。jsonをバリデーションしたい場合は、jsonschemaというライブラリを使うといいらしい。expressにはエラーハンドラを登録することができる。404のハンドラの定義はファイルの一番下部でやらないといけない。trackerを作る(1)最近GCPを使ったインフラ構築と、javascriptへの興味が高まっているので、勉強がてら何か作ってみることにした。作りたいやつの機能サーバサイドはnode.jsで書く。APIでページビュー情報をPOSTしたり、ページビュー情報をGETしたりできる。POSTされた情報はGCPのpub/subにpublishされる。GETするときはpub/subからsubscribeする。engineで動作する。クライアントサイドはReact.jsで書く。グラフライブラリを使ってかっこいいグラフを表示する。Websocketを使ってリアルタイムにグラフが更新されるようにする。今日の進捗node.jsでサーバを書いて、Dockerで動くようにした。https://github.com/Kenji-H/access_tracker/tree/v0.9.0ローカルでの動作確認方法は以下のとおり。testクライアントからリクエスト送信。localhost:8080/pvdockerにログが出ていることを確認。Handlerを書いて遊んでみた。3で動作確認してます。遊び方まず上記のPythonプログラムを起動します。sample.pyプログラムを起動したら以下の表を参考にシグナルを送ってみてください。プロセス番号プログラムを停止したい場合は、SIGKILLを送ってください。プログラムのプロセス番号は以下のコマンドで調べることができます。Python単一障害点とはまえがきシステム全体のアーキテクチャを考えるときに、「単一障害点」という概念が大事らしい。意味は一目瞭然だけど、大切な概念っぽいので調べてみることにした。語句の意味その単一箇所が働かないと、システム全体が障害となるような箇所のこと。Failure(SPOF)というらしい。アプリケーションサーバが一つしかないと、クリティカルなエラーが発生したときにユーザがシステムを利用できなくなってしまう。よってサーバをレプリケーションしておくことでSPOFにならないようにする必要がある。ディスクストレージが故障するとデータの読み書きができなくなり、システム全体が利用不可になってしまう可能性がある。よってRAIDなどの冗長構成を取る必要がある。ネットワークスイッチが故障と、ネットワーク内のサーバ間の疎通ができなくなってしまう。よって冗長なスイッチとネットワーク構成によって、SPOFを解決する必要がある。トレードオフSPOFを解決するためには、レプリケーションや冗長構成などが必要となるので、コストがかかる。どこまでSPOFの排除に取り組むかはコストとのトレードオフも考えて決定しなければならない。インフラ2017年10月1日日曜日Perplexityとは自然言語処理で良く使われるメトリクスのひとつであるperplexityについて説明します。分布pに従って生成されるデータxがある。xの分布をqでモデリングする。このとき確率モデルqのperplexityは、と表される。xiはpから生成したデータで、Nはxiの個数である。指数部はクロスエントロピーになっているモデルにデータを見せたときに、どれくらい"驚く"かを表すいいモデルほどperplexityは小さいサンプルサイコロの目の分布をモデリングしてみて、そのモデルのperplexityを計算してみます。サイコロを用意します。サイコロは六面で各面が出る確率は一様とします。真の分布はわからないので、30回サイコロを振ってみて観測化された結果から分布を推定してみます。このモデルのperplexityをテストデータ1,000個を使って計算してみると、6.358となります。exponent)次に訓練データを増やしてモデリングしてみます。サイコロを1,000回振ってみます(上記のコードのMを1000に変更してプログラムを実行)。perplexityは5.998となり、モデルの良さが改善されたことがわかります。Postsmemset()とmemcpy()恥ずかしながら、Cのmemset()とmemcpy()を今まで使ったことがなかった。みたいな話を聞いたことがあったので、「あーじゃ要らない機能なんだー。editorialに投稿された解答がmems...便利なPythonライブラリ(5)retryデコレータつけるだけで、リトライしてくれるという便利ライブラリ。失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。ret...S3のファイルを一般公開するAWSのS3のファイルを一般公開する方法について説明します。2つの場合に分けて説明します。本番中ゴリ押し解を思いつくには思いついたのだが、C++でマルチスレッドの処理を書いたことが無くて、ごにょごにょやってるうちにタイムアップとなってしまった。C++...C#入門(9)Action、Func、Predicateの違いAction、Func、Predicateについて簡単に整理しておく。メソッドへのDelegate。メソッドへのDelegate。スライド区間に対するクエリ処理の種類とそれに対するアルゴリズムをいくつか紹介します。「スライド区間」の定義ですが、窓関数のようなものを想像してください。まではコンピュータの力を使って正多面体をt色以下で塗るパターン数を数えていました。今回は手計算で計算してみようと思います。そのためにはまず回転を表す対称群をうまく列挙するために回転軸について考える必要があります。見聞きする木の用語を整理しておく。節点vから最も離れた節点をwとする。w)の長さをvの離心数と呼ぶ。記号で表すときは、ε(v)と書く。使って遊んでみました。いった便利な機能を提供してくれるテストフレームワークです。repor...キャッシュヒット率の測定perfというツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。