ユユユユユ

webエンジニアです

ctran/annotate_models に PR を送った

これまで従事したいくつかのプロジェクトにおいて高い採用率(個人の感想)を観測している ctran/annotate_models にプルリクエストを送った。 get_loaded_model_by_path is supposed to be nil-safe by sato11 · Pull Request #883 · ctran/annotate_models…

算術右シフトを正しく丸めるためにバイアスを加算する

TIL

マシンがどのように乗算・除算を最適化するについて。二の累乗による乗算は左シフト演算を用いて行うことができる。同じように、二の累乗による除算は右シフト演算を用いで行うことができる。符号なし数であれば論理右シフトを用いるし、二の補数(符号あり…

gcc-9 を使うようにした

C++

昨晩の ABC-202 への参加中に、コンパイラが動かないという自体に直面した。先週のコンテストまでは普通に動いていたコンパイルタスクがこういうログを吐いて停止してしまう。 command not found: x86_64-apple-darwin19-gcc-10 コンテスト中は AtCoder のコ…

Yet Another Scheme Tutorial をやった

大型連休にやっていたことで、大型連休の総括に書かなかったことがひとつある。それは Lisp への挑戦である。 Yet Another Scheme Tutorial というマテリアルを利用した。そしてきょう、それをひとまず一周走り終えた。 どうしていまこれを学ぼうと思ったか…

浮動小数点数のビットレベル表現を print する

C++

浮動小数点数は IEEE-754 という規格で標準化されている。たとえば32ビットで表現するとき、上位1ビットが符号に、次の8ビットが指数部に、残りの下位23ビットは仮数部として割り当てられ、これら3つのフィールドが合同してひとつの浮動小数点数を表現する。…

整数オーバーフローをコントロールすることの難しさ

C++ で競技プログラミングをやっていて、整数オーバーフローに泣かされたことのない者はいないだろう。僕とてそうである。ちょっとしたケアレスミスにすぎないのだが、些細なミスであるからこそ、それを繰り返してしまうとことさら不甲斐なく感じる。 オーバ…

大型連休の振り返り (2021)

2021年の大型連休が終わった。いやすでにこどもの日でもって終わっているという向きもあるが、僕のなかでは今日の日曜日をもって「終わったなあ」という情緒であるので、振り返っておく。 arduino で遊んだ LED をチカチカさせたり、電圧計の使い方を覚えた…

CS:APP を読みはじめる

Computer Systems: A Programmer's Perspective の日本語訳、『コンピュータ・システム — プログラマの視点から』を購入した。通称は CS:APP というらしい。 値段、重量、厚みすべてにおいてヘビー級の一冊である。16000円だった。消費税で本が一冊買える。 …

Designing Data-Intensive Applications を読み終わった

昨年末に着手して、足掛け5ヶ月で読了した。 5ヶ月というとあまりに時間がかかりすぎているように聞こえる。実際には年末年始とこの GW で集中的に読んだ。しかも、後者の連休ではメモを取りながら読み進めることをやめて、読み終えることそのものを目標化し…

放送大学に入学してみよう

連休の終わりに、大学にいこうかな? とカジュアルに思いついたのが昨日のこと。それからいちにち考えてみて、基礎的なことを体系的に「お勉強」するのなら放送大学の教養学部に入るのがうってつけという結論にいきついた。教養学部というから、学部1-2年生…

大学に入ることを考える

世界がいまより平和になったらやりたいことがある。それはそうとして、いますべきことはなにか? 大学にはいりなおすということを考えたことがある。ベルリンから帰国して、途方にくれながら次になにをしようか考えていた頃のことである。直接的な刺激になっ…

世界に

世界中を見てまわりたい。一年とすこし前まで、事実そういう生活をしていたことがすっかり遠い過去のことに思える。 部屋からちょっと歩くだけでこんな名跡を眺められるなんて夢のようだった ベルリンにいた僕は COVID-19 がヤバイと聞いて早めに撤退したの…

会社員は会議がおおい

新入社員になってきょうで丸3ヶ月となる。入社の折に書いたエントリを読み返すと、かなり肩に力がはいってしまっていたことがわかる。よほど自己肯定感が低かったとみえるが、実際働きはじめてみると、まったく問題なく戦力となれている実感があるし、自信を…

AtCoder のレートが緑色になった

週末の ABC199 で緑コーダーになれた。29回目のコンテストでの昇格である。 茶色に昇級したときのエントリを読み返した。これが去年の9月半ばのことであるから、緑色に到達するまでに要したのは7ヶ月ということになる。 正直に告白すると、この期間アルゴリ…

分散データベースのレプリケーション: Designing Data-Intensive Applications 第5章より

ネットワーク越しにつながった複数のマシンに、同じデータのレプリカを作成して保存する。「ネットワーク越しに」というのが難しいところで、ネットワーク障害が起きたり、コピー先のマシンが死んでしまったり(ネットワーク越しに生死を確認するというのも…

並行書き込みを検知する

リーダーレスデータベースは書き込み時コンフリクトに対してひどく脆弱である。クオラムが満たされていても並行書き込みによるコンフリクトは起こりうるし、リードリペアの際にもコンフリクトしうる。さらには書き込み可用性を高めるためにクオラムをぞんざ…

Sloppy Quorums and Hinted Handoff

クオラムが適切に設定されていれば、システム全体の可用性は確かに高まる。とはいえクライアント側のネットワーク障害など、クオラムが満たせなくなる状況は容易に生じうる。システムとして問題があるわけではないのだが、クライアントの視点からはシステム…

リーダーレスレプリケーションとクオラム

リーダーレスデータベースにおいて、仮に書き込みに失敗したノードがあってもクライアントは失敗を無視して処理を継続できると述べた。ただしこれは文面ほど無秩序ではない。極端な話、すべてのノードに書き込みが失敗したのにクライアントが成功したと思い…

ノードが落ちていても書き込みをおこない続ける

リーダーレスデータベースにおいて、クライアントはすべてのノードに同時に書き込みリクエストを発出し、仮にひとつのノードがダウンしていたとしても気にせずに処理を続行する。読み込みリクエストについても同じである。任意のノードに読み込みリクエスト…

書き込みコンフリクトを制御する

複数リーダーレプリケーションは書き込みコンフリクトの発生を防ぐことができない。またその解消を非同期的に実施する必要がある。「同期的にコンフリクトを検出したい」というのは本質的に単一リーダーがトランザクションで実現すべきことがらであるから、…

複数リーダーレプリケーションのユースケース

複数リーダーレプリケーションが行われるユースケースを考えてみよう。「データベース」という言葉からくる先入観に必ずしも対応しないものも含めて、いくつものユースケースがある。 まずは複数のデータセンターについて、各データセンターにひとつずつリー…

レプリケーションラグと結果整合性

ひとつのリーダーが排他的に書き込みを管理する方式について検討してきた。この方式によって享受できるメリットはスケーラビリティとレイテンシの向上である。つまり、リードレプリカを追加すれば読み込みをスケールアウトさせられるし、ユーザーの近くにレ…

レプリケーションログの実装

リーダーノードからリードレプリカに変更差分を通知するのはレプリケーションログの転送によってであるとこれまで述べてきた。ではレプリケーションログとはなにか。どのような詳細を持っているのか。これにもいくぶんばらつきがあり、ここで整理することに…

ノードのダウンに対応する

個別のノードがダウンすること自体は防ぎようがない。よって個別のダウンが発生してもシステムが稼働し続けることを目指すのが健全である。言い換えると、ノードが不足する状況が発生したときにどれだけその影響を小さく止められるか、を対策するのである。 …

新しいリードレプリカをクラスタに追加する

サービスが成長するに従って、既存のクラスタにリードレプリカを追加する必要性は必ず生じる。そのときどうやって新しいリードレプリカにリーダーのデータを複製するか? 単にデータファイルをコピーするだけでは、コピー中に生じる差分を吸収できない。かと…

同期レプリケーションか、非同期レプリケーションか

書き込みログをネットワーク越しにリードレプリカに転送するジョブは、基本的には軽量で高速動作する。ただしネットワークの不調やリードレプリカの予期せぬ故障など外部要因によって無制限の遅延が発生する可能性は常に存在する。 同期レプリケーション リ…

データベースを支えるデータ構造: Designing Data-Intensive Applications 第3章より

Designing Data-Intensive Applicationsより、インデックスにまつわる箇所の読書ノートをまとめた。いくつか重要なデータ構造が登場しているが、個別の語彙やアルゴリズムについて深く検討まではしていない。概念を把握する前に、概念の存在をまずは認識した…

信頼性、保守性、スケーラビリティ: Designing Data-Intensive Applications 第1章より

Designing Data-Intensive Applications の第1章の読書ノートを公開する。主題はシステムの信頼性、保守性、スケーラビリティについてである。 個別の手法や技術というよりは、システム設計や技術選定の際に大事にすべきマインドセットに重点をおいた論文で…

Ruby の基数変換において基数の上限は 36 である

SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192) に参加した。D - Base n を解きながら、いままで知らなかった Ruby の振る舞いを知りえたので書いておく。 0-9 からなる文字列を、整数 d で基数変換し、整数 n 以下かどうか調べる。…

新入社員になった

大学を出て以来はじめて会社に所属することになる。 内定が決まったときから興奮ばかりしてきた。当日を迎えて、いっそう興奮しているかというと、そういうわけでもない。むしろ身の引き締まる思いを新たにしている。不思議なものだ。 同期入社のひとたちは…