Talkに行ってきた。「データに基づく意思決定のアンチパターン」というテーマでトークが行われた。内容自体も大変興味深いものだったが、発表、質疑応答から垣間見えるIndeedのカルチャーに感銘を受けた。それはデータドリブンでものごとが進むということと、失敗に寛容であるということだ。質疑応答の時間に、「間違った分析をしたとき、どのようにマネジャーに伝えますか?」というような質問がなされた。自分だったらいろいろと言い訳を考えるかもしれない。間違った分析をしてしまったのはしょうがないと主張するための理由を必死に探すかもしれない。この質問に対するIndeedのデータサイエンティストの回答はシンプルなものだった。「間違えをおかしてしまいました。この分析結果は誤りです。」あまりにシンプルな回答に会場には笑いが起きた。そのあと彼はこのように付け加えた。「間違えが許されない職場だったら僕は今日ここに立っていない。今までたくさんの間違えをしてきた。」これは失敗を正当化するものではない。エンジニアは失敗が起きないように真摯に課題に取り組むべきだ。失敗無くして成功はありえない。失敗を繰り返して成功したのなら、それは成功以外の何物でもない。彼は次のような話もしていた。「これまで失敗をしたことがないという人間には二種類の人間がいる。一つは本当に失敗をしたことがない人間。一つは失敗をしたことに気づいていない人間。」このような文化が日本のIT企業にも広まるといいなと思った。イベント参加2016年10月10日月曜日Lombokを使ってみたLombokとは?Javaのボイラーテンプレートを排除するためのライブラリ。gettter、setter、toString、...などなどの毎回書かないといけないお決まりのコードをアノテーションから自動生成してくれる。インストールgradleの場合は以下をdependenciesに追加。}他にもいろいろできる。以下のような直線型グラフのマッチングについて考える。一般にノード数nの直線型グラフからk個のマッチングを選ぶパターン数はn-kCkとなる。1となり、実際に個数を数えてみると正しいことが分かる。何をやってるかというと、マッチングに使われる枝の左側のノードを選んでいるわけである。普通にノードを選ぶだけだと一つのノードが複数のマッチングに属してしまうかもしれないので、あらかじめ右側の端点に使われるノードを除いておく。すると左側のノードの選び方により一意にマッチングが決定する。逆にマッチングの選び方に対して、左側のノードの選び方は一意に決まる。よって一対一の対応にあるのでこの方法で数え上げができることが分かる。数学モンモール数を包除原理で計算するモンモール数を計算するときは漸化式を使えば計算できるが、実は包除原理を使っても計算できるのではないかと思ったので試してみた。予想どおり包除原理でも計算できるようだ。計算量は漸化式を使うとO(N)、包除原理を使うとO(N2)なので漸化式の方が高速。Systemには大きく二つの種類がある。Queueで、もう一つがPublish-Subscribe。それぞれの特徴、長所、短所を簡単にまとめておく。一つのレコードは一つのConsumerが消費する。一つのレコードはすべてのConsumerに配信される。データ処理を複数のConsumerインスタンスで並列化できる。一つのデータを複数のConsumerで利用することができる。一つのConsumerがデータを読むと、そのデータは消える。データ処理を並列化できない。AnsibleAnsible簡単で便利なので使った方がいいよーと勧められたので試してみた。Ansibleでやってみた。サンプルは以下のバージョンで動作確認を行った。適当な作業ディレクトリを作成してcdする。initすると、Vagrantfileが自動生成される。initVagrantfileの編集テンプレートを編集して以下を記述する。fileはAnsibleの管理対象を定義するファイル。今回の場合はUbuntuのVMなのでそのIPアドレスを書いておく。[sample]のところは好きな名前でよい。fileで定義した名前を書く。yesはsudo実行の意味。実行前にディレクトリ構造が以下のようになっていることを確認。playbook.yml問題なければ、VMを起動&プロビジョン実施。statusを調べる。runningホストOSからcurlしてみる。nginx!の文字が表示されればOK。Journey問題n個の名所がある。名所間を移動するのに必要な時間が与えられる。1つ目の名所からスタートして、時間T以内にn個目の名所に辿りつかないといけない。多くの名所を周りたい場合、どのような順番で名所を訪れればよいか出力せよ。本番はダイクストラをした。他の人のソース見たら、みんなトポロジカル順序でDPしてて焦った。絶対落ちたわーと絶望していたら通っていた。この問題はトポロジカル順序DPで解いた方がかっこいい。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というツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。