熊崎 宏樹
エンジニア日本電信電話株式会社にて分散機械学習システムやデータベース技術の研究に従事。 2018年11月からGoogle合同会社にて検索エンジンのソフトウェアエンジニアとして活動中。
機密事項は一切答えません。
スーパーレター
すべての回答
APIの無償化ですかね…RTの後の発言を見れるツールが惜しまれる。
再帰とか抽象構文木とかマクロですかね…。人によって「最低限」の基準が違うので論じにくい話です。
この手のメタな知識はまさにLISPの世界で熱心に研究され続けて来たので「計算機プログラムの構造と解釈」通称SICPという本に集まっており、だからこそ熱心なプログラマはこの分厚い本を崇めたりLISP使いになったりします。昔はSICPがマサチューセッツ工科大学の教科書だったりしたのですが最近はPythonをやるようになったという噂もあって、それほどLISPが必須知識として見做されなくなってきた風潮を感じます。もちろん興味が有るのであれば是非邁進してください。
テック企業で働く気ならスキルセットをテックに寄せる方が近道ですし、アメリカ系の企業なら社内の公用語は英語でしょうから英語を社内公用語に使っている会社なら英語の練習にもなっていいですね。
英語が公用語かつテック系で日本にオフィスを置いている会社は都内にたくさんありますのでぜひ検索してみてください。
そんなに高い志など無く、自分が好きな分野の中で社会から需要がある所を選んだ感じです。ただし、MLとかデータサイエンティストなどは数式とにらめっこする時間の方が長そうなので、数学力ではなくてCPUアーキテクチャとかそういう知識が活かせそうな分野を選びました。
最近は「異世界転生するなら俺TUEEEできる所を狙いたい」というモチベーションぐらいで充分なんじゃないかと思っています。
全くですね。アセンブラを眺めるのなんて顕微鏡で拡大して観察するようなもので、今どこを見ているかを把握することすら難儀です。
僕はアセンブラと日常的に戯れるエンジニアではないのですが、自分の書いたC++が自分の狙った通りの機械語に変換されているかを確認するために godbolt.org にコード片を入れています。ベンチマークを取っている時にタイトなループの内側でインライン化することを期待していた関数がやけに遅い時などに役立ちます。
どれだけ正確に覚えているかは個人差があると思いますが、うちの子は語ってくれます。ただし「ママのおなかのなかにいるときにあーまーどこあくりあしたの」ぐらい適当な事いうので僕も「うんうん、お腹の中は暇だろうからプレステ入れといたんだよね」と応じています。
レター
いつもお世話になっています。
この度Raftを用いた分散KVSを実装しているのですが、トランザクションの扱いで疑問があったので質問させていただきます。
https://qiita.com/kumagi/items/f9aee47b69ebdba5da17
以前kumagiさんのこちらの記事ACIDを達成するには最低限S2PLが必要という理解をしておりました。
しかし、Spanner alternativeであるところのTiDBは2PSを用いていると言ってます。
https://docs.pingcap.com/ja/tidb/stable/optimistic-transaction
これは以下のいずれかであると思っています。
・ Raftの層である程度の Durability やConsistency を保証しているから2PSで十分
・実際にはS2PLだが2PLと説明している
・Durability を一部諦めている(考えにくいですが)
そこで私は、「2PSとRaftの組み合わせであればACIDを達成できる」のでは?思いkumagiさんにお聞きしたく質問させていただきました。
こちらについてご意見をいただきたいです。
レター
Pointer Swizzling というテクニックについて、wikipedia のページ https://en.wikipedia.org/wiki/Pointer_swizzling の Further reading を見るとそこそこ昔からあるようですが、ここ数年 LeanStore を始めとしてデータベース関連論文で取り上げられているのはなぜでしょうか?
僕ならPostgreSQLを選びます。
ローカルで立ち上がるのでアプリ開発中のデバッグが簡単なのとSpannerやAlloy DBやAurora PostgreSQL等のクラウドネイティブなRDBMSが互換インタフェースを備えている事が理由です。
追記型という形を取っているため行内の更新が多いとインデックス側の更新が多くなりMySQLに乗り換えるUberのような事例もありますがそういうのは発生してから対策しても遅くないのでEarly Optimizationと割り切って行きます。
岐阜県の山間部で育って東京に来ました。
都心部の休日に出歩いている人間の多さに驚きました。こんな人だかりは夏祭りですら見たことねぇ!今日は何の祭りなの?えっ何もなくてこの人数!?!?
特に気にしていません。美味しければ何でもOKです。カレーに牛乳は何だかカレーを甘く感じれて美味しいですよね。
これは僕のマウンテンビュー出張中の投稿なので僕の出張に関する質問だと思って返事します。
せっかくの出張ですのでワークステーションが置いてある東京オフィスでやったほうが効率的なこと(コーディング等)はほぼやりませんでしたが調査のためにSQLなどは多少書きました。
face to faceでの会議や雑談などを通して様々なことを学べる大事な機会でしたので、そちらの恩恵を多く受けられるよう頑張りました。
決済サービスにstripeを使おうかと思っていますが、webhookを使って決済処理をすることが推奨されています。たしかにドキュメントにある通り3Dセキュアや現地決済手段対応を考慮するとこの方法が良いのかもしれませんが、将来他の決済APIを使いたくなるときに技術的な負債にならないか心配です。決済処理はサーバー側で処理するようにしておいた方が良い気がしています。よろしければアドバイスお願いします。
先日興味深いツイートがありました。
https://twitter.com/takizawa0914/status/1655344814236516352
要するに、資源としてリサイクルする際に細切れに破砕し、キャップ下部のプラやラベルは水に浮きPETの部分は沈むので簡単に分離可能。スムーズな破砕のためにキャップ上部は外して欲しいがリングは全く問題にならないとの事です。
https://twitter.com/kumagi/status/1650924286763491329
このツイートの2PCに関してですが,SpannerやTiDBにおいて2PCは使われている認識なのですが,それらは
https://www.slideshare.net/kumagi/ss-78765920
この記事で紹介されているものと違ってかなり改良が入っているからもはや別物という認識なのでしょうか?
「2PCは壊れていて使い物にならないと主張があるが,分散DBにおいて2PCという用語は使用されており,(改良が入っているものの)2PC自体は使われているのではないか」
というのが疑問でした。2PCによって何を意味するのかという言葉の上の問題かもしれません