仕事中のBGM

昨日の仕事中の BGM - tom-manabe’s kiroku に触発されて、仕事中にきく BGM について。

私は仕事中はほぼエレクトロニカアンビエントか、できるだけ感情が動かないような曲を聴きます。だいたい垂れ流しなのですが、たまに凄い刺さるアーティストに当たるので紹介。

Fugenn & The White Elephants

いやー、もう単純にめちゃくちゃかっこいいですね。低音パートが押し付けがましくなく鮮明なところも良い。

youtu.be

 

Olafur Arnalds

ピアノとストリングス中心の穏やかな曲が多いですね。アルバム "...And They Have Escaped the Weight of Darkness" なんかは、夜寝る前に読書でもしながら流すのにもちょうどいいです。

youtu.be

 

Goldmund

こちらもピアノ中心 (このアルバム "Two Point Discrimination" はピアノソロ)ですが、この不安定さはなんですかね。でも不思議と安心するのです。ただし切羽詰まっているときに聴くとマジで追い詰められるので止めたほうがいいですね。

youtu.be

 

Akisai

アコギ中心。メロもシンプルでポップな曲が多いですね。

youtu.be

 

[.que]

彼はもう定番化していますね。ラジオなんかでもよくかかっています。ポップで親しみやすく爽やかで、かつ嫌味じゃない(個人的に、 No. 9 はちょっと嫌味くさい)。

youtu.be

 

Hammock

美しい!!!

youtu.be

 

(番外) Television

残業して行き詰ったときは Television を聴きますね。

Marqueen Moon は疑う余地のない名盤ですが、どこがどう名盤なのか全く説明できないところが凄い。

youtu.be

 

Elasticsearch でつまづいた話 (5)

Elasticsearch でつまづいた話 (3) - take a keen edge のページング取得では、1回 scroll して、戻り値から次の scroll id を取得して、もう一度クエリを投げて... だったが、せっかくスナップショットをとっているのであれば並列で取得しにいきたいのが当然の心理。

そんなときに使うのが Sliced Scroll だ。 max で最大ページ数を決め、id で取得するページの index を指定する。

max を適当に決め打ちして、取得件数が都度変わる、でもいいのだが、リクエストする側のスループットを考えても、レスポンスのサイズはある程度固定されているほうが望ましい。なので作法としては

  1. _count を叩いて全件数 (N とする) を取得 (当然、フィルターするのであれば同じ条件で叩く)。
  2. 1回の取得件数 (M とする) を、リクエストする側の都合で適当に決め、N / M を切り上げて max とする。
  3. max まで各ページを並列 (各言語でお好きに) で取得するクエリを投げる 。
  4. レスポンスをマージ。

がよいだろう。もちろんスレッド数の制限とかネットワーク環境とか色々変数があるのでこれがベストではない。

今年読んだ本を総括

28冊。夏~秋にあまり読んでいなかったようだ。

ベストは終盤に滑り込んだ「失敗の科学」かな。「脳はなぜ都合よく記憶するのか」も面白かった。

来年は小説に力を入れていきたい。

技術書だとモデリング関係の書をもう数冊読みたい(実践しなきゃ意味ないというのは承知の上で)。Rも入門書で終わってしまったのでもうちょい攻めたい。

哲学書も最近手出せてない。「プラグマティズム入門」で、やっぱりこの領域が好きだなと思った。久々に中島にいくか。

 

Effective Debugging ―ソフトウェアとシステムをデバッグする66項目 Diomidis Spinellis
失敗の科学 失敗から学習する組織、学習できない組織 マシュー・サイド
戦略フレームワークの思考法 手塚 貞治
入門 考える技術・書く技術 山崎 康司  
UMLモデリングレッスン 平澤 章
プラグマティズム入門 (ちくま新書) 伊藤 邦武
会話の達人の話し方を真似したら人見知りの僕でも楽しく雑談できました 松橋 良紀
UMLモデリングのエッセンス―標準オブジェクトモデリング言語入門 (Object oriented selection) マーチン ファウラー; ケンドール スコット
フリー 〈無料〉からお金を生みだす新戦略 クリス・アンダーソン
HARD THINGS ベン・ホロウィッツ
脳はなぜ都合よく記憶するのか 記憶科学が教える脳と人間の不思議 ジュリア・ショウ
人の心を一瞬でつかむ方法―人を惹きつけて離さない「強さ」と「温かさ」の心理学 ジョン ネフィンジャー;マシュー コフート
変革の軌跡【世界で戦える会社に変わる"アジャイル・DevOps"導入の原則】 Gary Gruver;Tommy Mouser
世界一やさしい問題解決の授業―自分で考え、行動する力が身につく 渡辺 健介
ユーザーストーリーマッピング ジェフ・パターソン
人はなぜ物語を求めるのか (ちくまプリマー新書) 千野 帽子
あの会社はこうして潰れた (日経プレミアシリーズ) 帝国データバンク情報部藤森徹
悪童日記 (ハヤカワepi文庫) アゴタ クリストフ
Rによるやさしいテキストマイニング 林雄一郎
働く君に伝えたい「お金」の教養 出口 治明
教養バカ わかりやすく説明できる人だけが生き残る (SB新書) 竹内 薫
チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ エイミー・C・エドモンドソン
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~ マイク コーン
エンジニアを説明上手にする本 相手に応じた技術情報や知識の伝え方 開米 瑞浩
カラマーゾフの兄弟4 (光文社古典新訳文庫) ドストエフスキー
カラマーゾフの兄弟3 (光文社古典新訳文庫) ドストエフスキー
カラマーゾフの兄弟2 (光文社古典新訳文庫) ドストエフスキー
カラマーゾフの兄弟1 (光文社古典新訳文庫) ドストエフスキー

 

bookmeter.com

 

今年知って惚れたバンド(アーティスト)

4ユニットと1人。ほとんどは以前から活動している。

 


AL

youtu.be

andymori が再びバンドを組むときいて飛びついたけど小山田壮平長澤知之ツインボーカルにかなり戸惑った。でも、これがこの2人にしかできない音楽だった。andymori 時代の小山田が歌う「花束をあげるよ、みんな愛してるよ」とはまるで意味合いが違う。

スカート

youtu.be

まだ知って日が経ってないのだけど、この曲で冒頭のカッティング、心地よいスネア、優しいエレピ、すこし癖のあるボーカル、サビのベースの下降音形、好きなところを挙げるとキリがない。

toconoma

youtu.be

インストのロック(?)はあまり聴いてこなかったのだけど toconoma を知ったときは衝撃だった。この編成でボーカルがなくても、完全に成立する。年明けにライブに行くので踊り狂ってきたい所存

きのこ帝国

youtu.be

どの曲を挙げようか迷った。曲・アルバムによって音楽が変わるのもきのこ帝国の良さだ。ボーカル佐藤千亜妃という人間の移り変わりが声と歌詞から透けて見える。

向井秀徳アコースティック&エレクトリック

youtu.be

Number GirlZAZEN BOYS は聴いてたけどソロは聴いてなかった。まずギターの音が良すぎる。ライブでは鉄風を演っていた。絶叫は無かった。

同時実行するときのコレクション

以下を実行すると、ArgumentException になったり result が歯抜けになったりする。

var result = new Dictionary<int, int>();

Parallel.For(0, 10000, i =>
{
    result.Add(i, CalculateSomething(i););
});

これは Dictionary がスレッドセーフでないため。 ConcurrentDictionary を使おう。

var result = new ConcurrentDictionary<int, int>();

Parallel.For(0, 10000, i =>
{
    result.Add(i, CalculateSomething(i););
});

List であれば ConcurrentBag になる。 Visual Studio のサジェストから CuncurrentList 的なものを必死で探しても見つからないので注意。

var result = new ConcurrentBag<int>();

Parallel.For(0, 10000, i =>
{
    result.Add(CalculateSomething(i););
});

同時実行時の実行結果がコレクションのコレクションとして格納したい場合があるが ConcurrentBag には AddRange が無い。拡張メソッドを書いてやる。

public static void AddRange<T>(this ConcurrentBag<T> @this, IEnumerable<T> collection)
{
    foreach (var element in collection)
    {
        @this.Add(element);
    }
}

これを使ってこう。

var result = new ConcurrentBag<IEnumerable<int>>();

Parallel.For(0, 10000, i =>
{
    result.AddRange(GetNumbers(i););
});

vue.js でつまづいた話 (1)

Elasticsearch に引き続き vue.js でつまづいた話。続くかどうかはわからない。


v-bind で、バインドする内容を動的に切り替えたいときの話。

公式ドキュメント のとおり、 v-bind:class では以下のように記述すると isActivehasError の真偽値でバインドの有無が切り替えられる。

<div v-bind:class="{ active: isActive, 'text-danger': hasError }">
    ...
</div>

これは v-bind:style の場合も同様。

ところが、例えばカスタムデータ属性などではうまくいかない。

<div v-bind:data-type="{ 'hoge': isHoge }">
    ...
</div>

この { class : bool } の記法は classstyle にしか許可されていないらしい。他の属性では以下のように三項演算子などを使う必要がある。

<div v-bind:data-type="isHoge ? 'hoge' : null">
    ...
</div>

まぁこう書いて動くのはごく自然なのだが、先に class / style の記法を知ってしまうと、そうやって書くもんだという刷り込みが入ってしまいちょっとつまづいた、という話でした。

無作為抽出のトリック

この記事で、「ある集合の上位 5% を 95% の確率で選択するためには、全体のデータ数によらず 59 件取得すれば十分である」という命題を使用しました。これを証明しましょう。

集合 U の部分集合 Q があり、 Q の要素数は U の要素数に対して割合が p だとします。このとき更に U の部分集合である P を考えます。P に Q の要素が全く含まれない確率は  (1- p)^{|P|} ですから、 P のうち少なくとも 1 つの要素が Q に含まれる確率は  {1 - (1 - p)^{|P|} } です。ここで

 {\eta = (1- p)^{|P|}}

とおくと

 {|P| = \log \eta / \log (1 - p) }

が得られます。このとき  {p = 0.05},  {1 - \eta = 0.95} とすると、  { 58 \lt \lceil \log 0.05 / \log 0.95 \rceil \lt 59 } です。つまり、ある集合から無作為に複数の要素を選択する際、ある 5% の要素を 95% の確率で選択するためには、 59 個の要素を選択すれば十分である、ということになります。

なんだか狐につままれたような気分になりますが「95% の確率で選択する」というところがミソですね。シンプルですがなかなか強力な技だと思います。

参考文献: A. J. Smola and B. Schölkopf, “Sparse Greedy Matrix Approximation for Machine Learning", inProceedings of 17th International Conference on Machine Learning, pp. 911-918, 200.