Elasticsearch でつまづいた話 (5)
Elasticsearch でつまづいた話 (3) - take a keen edge のページング取得では、1回 scroll して、戻り値から次の scroll id を取得して、もう一度クエリを投げて... だったが、せっかくスナップショットをとっているのであれば並列で取得しにいきたいのが当然の心理。
そんなときに使うのが Sliced Scroll だ。 max で最大ページ数を決め、id で取得するページの index を指定する。
max を適当に決め打ちして、取得件数が都度変わる、でもいいのだが、リクエストする側のスループットを考えても、レスポンスのサイズはある程度固定されているほうが望ましい。なので作法としては
- _count を叩いて全件数 (N とする) を取得 (当然、フィルターするのであれば同じ条件で叩く)。
- 1回の取得件数 (M とする) を、リクエストする側の都合で適当に決め、N / M を切り上げて max とする。
- max まで各ページを並列 (各言語でお好きに) で取得するクエリを投げる 。
- レスポンスをマージ。
がよいだろう。もちろんスレッド数の制限とかネットワーク環境とか色々変数があるのでこれがベストではない。
今年読んだ本を総括
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 (光文社古典新訳文庫) | ドストエフスキー |
今年知って惚れたバンド(アーティスト)
4ユニットと1人。ほとんどは以前から活動している。
AL
andymori が再びバンドを組むときいて飛びついたけど小山田壮平と長澤知之のツインボーカルにかなり戸惑った。でも、これがこの2人にしかできない音楽だった。andymori 時代の小山田が歌う「花束をあげるよ、みんな愛してるよ」とはまるで意味合いが違う。
スカート
まだ知って日が経ってないのだけど、この曲で冒頭のカッティング、心地よいスネア、優しいエレピ、すこし癖のあるボーカル、サビのベースの下降音形、好きなところを挙げるとキリがない。
toconoma
インストのロック(?)はあまり聴いてこなかったのだけど toconoma を知ったときは衝撃だった。この編成でボーカルがなくても、完全に成立する。年明けにライブに行くので踊り狂ってきたい所存
きのこ帝国
どの曲を挙げようか迷った。曲・アルバムによって音楽が変わるのもきのこ帝国の良さだ。ボーカル佐藤千亜妃という人間の移り変わりが声と歌詞から透けて見える。
向井秀徳アコースティック&エレクトリック
Number Girl と ZAZEN 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
では以下のように記述すると isActive
や hasError
の真偽値でバインドの有無が切り替えられる。
<div v-bind:class="{ active: isActive, 'text-danger': hasError }"> ... </div>
これは v-bind:style
の場合も同様。
ところが、例えばカスタムデータ属性などではうまくいかない。
<div v-bind:data-type="{ 'hoge': isHoge }"> ... </div>
この { class : bool }
の記法は class
と style
にしか許可されていないらしい。他の属性では以下のように三項演算子などを使う必要がある。
<div v-bind:data-type="isHoge ? 'hoge' : null"> ... </div>
まぁこう書いて動くのはごく自然なのだが、先に class / style の記法を知ってしまうと、そうやって書くもんだという刷り込みが入ってしまいちょっとつまづいた、という話でした。
無作為抽出のトリック
この記事で、「ある集合の上位 5% を 95% の確率で選択するためには、全体のデータ数によらず 59 件取得すれば十分である」という命題を使用しました。これを証明しましょう。
集合 U の部分集合 Q があり、 Q の要素数は U の要素数に対して割合が p だとします。このとき更に U の部分集合である P を考えます。P に Q の要素が全く含まれない確率は ですから、 P のうち少なくとも 1 つの要素が Q に含まれる確率は です。ここで
とおくと
が得られます。このとき , とすると、 です。つまり、ある集合から無作為に複数の要素を選択する際、ある 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.
会社の創業記念パーティのBGMを振り返る
弊社の Advent Calendar ネタにするつもりだったが、その前の流れがみんな真面目だったのでお蔵入りにしかけた内容。
今年の6月に会社の創業記念パーティがあり BGM を選曲したので振り返る。一晩で選んだので投げやり感もあるがご愛嬌。あと「音楽好きです!」といっておきながらこういうパーティ向きの曲のレパートリーが少なすぎることに後から気づいた。
会場は青山迎賓館という洋式の結婚式場だった。なのでエレクトロニカや最近のダンスミュージックは避け、アコースティック要素を多めにした。日本語の歌は、披露宴感が高まってしまうため除外。あと歌があるものは一応歌詞をチェックしている。
開始前
人が徐々に入り初めてくるときのBGM。バロック〜近代のクラシックでまとめた。本当だったらバレエ音楽とかワルツとか多めにしたかったのだが残念ながらあまり音源をもっておらず。基本的には時代に沿った順番。ストラヴィンスキーは無視。前半3曲ぶんくらいは人がほぼいない状態で、眠れる森の美女のワルツが山場だ。ちょうど開始直前に流せたので満足。
演奏のこだわりは特に無いので記載しない。
- テレマン ヴィオラ協奏曲 第2楽章 アレグロ
- バッハ ブランデンブルク協奏曲 第1番 第1楽章 アレグロ
- バッハ 管弦楽組曲第3番 第1曲 序曲
- ハイドン 交響曲第94番 第3楽章 メヌエット
- ベートーヴェン 交響曲第2番 第2楽章 アレグレット
- ストラヴィンスキー 組曲「プルチネッラ」第1曲 シンフォニア
- ブラームス 交響曲第2番 第3楽章 アレグレット
- ドヴォルザーク スラブ舞曲 第3曲
- チャイコフスキー 組曲「眠れる森の美女」 第5曲 ワルツ
- チャイコフスキー 交響曲第5番 第3楽章 ワルツ
第1部
オープニングムービーがあり、乾杯があった後。派手に初めてあとはジャズにつなげた。
Another Day of Sun
- 映画「ラ・ラ・ランド」のメインテーマ。演奏も歌も豪華だしめっちゃいい曲ですね。映画は見ていない。バッドエンドであることは知っている。
Overture
- 映画「セッション」より。「ラ・ラ・ランド」の曲と同じく Justin Hurwitz 作曲。クールながらアップテンポなビッグバンド曲。ドラムは意外と理性的である。映画は見ていない。明るい話じゃないのは知っている。
Pieces Of Dreams / Buddy Rich
- 2曲目は Buddy Rich につなげることが目的だったという面もある。本当なら Roar of ’74 から選びたかったのだが、ちょっとやりすぎ感があったのでこのへんにした。
Straight Life / Art Pepper
- ジャズサックス奏者だと Art Pepper が一番好きだ。トリオなのでだいぶ編成が小さくなってしまったがこのテンションの高さでなんとかつながってるはず?
Cherokee / Clifford Brown
- 同じくテンションの高いトリオ。
N.Y. Time / Lee Ritenour
- いま並べてみると、さすがにどうかという感じだな。リトナーを流したかっただけだ。
Limsy / The New Mastersounds
- ちょっと明るくしたかったので Jazz Funk にした。このあたりの流れ、選曲中もかなり悩んだけどやっぱり苦しい。
Forgiveness / The New Mastersounds
- 余白を埋める用。当日はかかってなかったかもしれない。
第2部
出し物でひとしきり盛り上がった後。ポップな洋ロック中心。
Sports & Wine / Ben Folds Five
- ピアノ入りでジャズ感を若干引きずりながら盛り上がりを維持。裏拍のノリが全編通して最高だけど、特に間奏が良い。
(If You're Wondering If I Want You To) I Want You To / Weezer
- 似たようなリズムの刻み方でギターを厚めにする。
The Calling / Yes
- なんでだよ。いや、ちょっと言い訳させてもらうとあまりポップなロックを知らないので絞り出したのだ。あるいは、あわよくば、なんでだよと突っ込んでもらいたかった。
Rock & Roll / Eric Hutchinson
- ちょっと落ち着いてみる。 Eric Hutchinson は声が良い。好きだ。イマイチ売れきらないところも好きだ。
Our Song / Taylor Swift
- もうちょっと落ち着いたまま。 Taylor Swift は 1st が一番好きだ。1st を聴きながら田舎の電車に乗ると最高なのでみんなやってほしい。
Lifestyles Of The Rich & Famous / Good Charlotte
- アップテンポでオーソドックスなロック。歌詞はちょっとどうかと思ったけど、逆にアリと判断した。
Whatever / Oasis
- 続く第3部が少ししっとりした雰囲気になるので、ちょっと下地をつくっておく。
Every Breath You Take / The Police
- これも余白を埋める用。
第3部
ちょっと感動的なムービーを挟んで、最後のパート。70〜80年代洋楽がメイン。
Don't You Worry 'Bout A Thing / Incognito
- なんでこの曲にしたか思い出せない、、
Work To Do / Isley Brothers
- 社畜ソング。
Sing A Song / Earth, Wind & Fire
- この曲の万能感は尋常じゃない。嫌味な感じが全くしない。 Sing a song って笑えるくらいシンプルな歌詞も良い。BGM が必要な場面ではどんな場所でも流れててほしい。
店を、探そう / The Screen Tones
Stay Gold / Stevie Wonder
- ちょっと落ち着かせる。落ち着きすぎだな。
Covina / Shakatak
- このへんも念のために用意したもの。
終了後
当日の記憶では BGM がほぼ聞こえなかった気がするが、静かなクラシックで蛍の光(正式には「別れのワルツ」だが)感を出したかった。なんとなくコンチェルトの緩徐楽章で揃えた。
Elgar, Cello Concerto 3. Adagio / Jacqueline du Pré, Sir John Barbirolli, London Symphony Orchestra
- 泣かせる演奏なんだこれが。
Gliere, Horn Concerto 2. Andante / Marie Luise Neunecker, Werner Andreas Albert, Bamberger Symphony Orchestra
Rachmaninov; Piano Concerto No.2 2. / Vladimir Ashkenazy; Bernard Haitink; Royal Concertgebouw Orchestra
- ロイヤルコンセルトヘボウは私が最も好きな音のオケだ。アシュケナージのピアノも当然素晴らしいが、冒頭のクラのヴィブラート利かせた歌心あふれるソロも痺れる。
Brahms; Concerto for Violin, Cello & Orchestra / Gidon Kremer; Clemens Hagen; Nikolaus Harnoncourt; Royal Concertgebouw Orchestra
Brahms; Piano Concerto No.1 2. Adagio / Maurizio Pollini; Karl Böhm; Vienna Philharmonic Orchestra
Dvorak; Cello Concerto 2. Adagio / Pierre Fournier; George Szell; Berliner Phillharmoniker
- フルニエの落ち着いたチェロ、セルの精緻な構成が見事に噛み合った名演。