ユユユユユ

webエンジニアです

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

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

データベースを支えるデータ構造: 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 以下かどうか調べる。…

新入社員になった

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

macOS で GUI アプリのインストールをスクリプト化する

TIL

Homebrew/homebrew-cask で homebrew 経由で GUI アプリをインストールできる。 もともと aws-vault や corretto などは cask でいれていたけれど、インストール可能な cask の一覧をみるとよりどりみどりだ。1password に evernote, workflowy といった生活…

C++ のコンパイル環境を変更した

C++

vscode の devcontainer で debian コンテナを立てて、その上でコンパイルしていた。こうしていたのは単に <bits/stdc++.h> を楽に使いたかったからにすぎない。いろいろカスタマイズを頑張るより先に、手っ取り早くコンパイルできる環境を用意したかったのである。こうして</bits/stdc++.h>…

gcc のインクルードパスを確認する

C++ のライブラリをローカルの開発環境でインクルードできるようにしたい。また #include <aws/dynamodb> のように、相対パスではなく <> でインクルードしたい。 正しいインクルードパスにヘッダファイルを配置してあげればいいはずだが、そのインクルードパスを忘れてし</aws/dynamodb>…

2021年の生活規範

元日にあわてて立てた目標は決して根付かないだろうと信じるので、お試し期間の一週間に吟味し、決意しているところを掲示しておく。「○○をする」という形式はおのずと努力目標にならざるをえないだろう。強い制約として日常生活をしつけるために、「○○をし…

AtCoder の茶色難度の過去問をコンプリートした

緑難度に取り組んでいると前に書いた。結果的にこれはハイプで、実際には difficulty 1000 前後の問題には歯が立たないことの方が多かった。 徒手空拳でぶつかり続けてもただ自信をなくすばかり。まずはできるところからやらねば、という思いで、茶色難易度…

ラップ・アップ・ニーマルニーマル

1月 ベルリンからブダペストまで鉄道旅行をした。大陸はどこまでもつながっている、という素朴な感動をえた。滞在したのは次の7都市。 ドレスデン プラハ ブルノ レドニツェ ブラティスラヴァ ウィーン ブダペスト 滞在記は私的な日記にのみ書いた。この頃は…

平方三角数

TIL

平方数でも三角数でもある最初の 2 つの数は 1 と 36 である。次に小さな例を見つけよう。できれば、その次の例も見つけよう。三角数でありかつ平方数でもある数を見つける有効な方法を見つけることはできるだろうか? こうした性質をもつ数は無数にあると考…

合同式におけるモジュラ逆数 (mod_inv) の求め方

C++

合同不定式 を について解く。 という不定方程式であれば、両辺に の逆数 をかけて としてあげればよい。 同じように合同式 においても両辺に の逆数をかければ が求められる。ただしこの文脈では、単に「 の逆数」と言うよりも「 を法とする の逆数」と呼ぶ…

Designing Data-Intensive Applications を読むにさきだって

年末年始の課題図書を紹介する。といっても紹介するのは一冊だけである。一冊だけではあるが、骨太な一冊を選んでいる。積読を消化するよりも絶対これを読みたい! というホットな気持ちで手に入れた本であるため、初々しいアティチュードを記録する目的で書…

AtCoder で緑難度の問題を解けるように稽古している

競技プログラミングの練習、いわゆる「精進」を11月から再開している。 9月から10月までは、仕事探しの一環でカジュアル面談に多く参加してみたり、面接対策に時間を割いていて、しばらく間が空いていたのだった。コンテストへの参加もしばらくご無沙汰にな…

bundle update --conservative で狙った gem だけをアップデートする

TL;DR ミニマムなバージョンアップを行いたいときは bundle update --conservative を使おう gem の更新 ライブラリのバージョンアップをしようとしているとする。単に bundle update と叩いてすべての依存を一括でバージョンアップするのは、差分を追うこと…

「決断をしない」という決断をすること

アーキテクトの目的は、方針とは無関係に詳細を決めながら、方針をシステムの最も重要な要素と認識するシステムの形状を作ることである。こうすることで、詳細の決定を延期や留保することができる。1 メールマガジンの配信システムを実装している。 配信基盤…

任意の区間で任意の整数の倍数を数える

Codility の問題をいくつか解いてみていて、どうにも解けずに諦めてしまった問題があった。匙を投げて解法を検索してみて、あまりにスマートに解けるものだから、なおさら悔しい思いをしている。そこで供養の意味も込めて振り返りをまとめておく。 当該の問…

配列を任意の個数の部分集合に均等に分割するアルゴリズム

長さ N の配列があり、それを M 個の部分集合に均等に分割したい。 制約を簡単に定義するとこうなる。 0 <= N 1 <= M <= 100 TL;DR active_support/core_ext/array/grouping の Array#in_groups がそのものズバリである。 誤ったロジック 3年前の自分が実装…

ruby-doc のバグを報告した

ruby-doc.org が一部落ちていたので報告した。正しい報告先を探すのがたいへんだったので備忘録で書いておく。 落ちていたのは ruby 2.7.2 の標準ライブラリのドキュメントで、 stringio や time などいくつかのページが 404 を返していた。それから HTML の…

コンパイラ概論で遭遇した用語集まとめ

The Elements of Computing Systems を読み進めている。今週からいよいよ大詰めのコンパイラ編に突入した。 The Elements of Computing Systems: Building a Modern Computer from First Principles (The MIT Press)作者:Nisan, Noam,Schocken, Shimon発売日…

Go で仮想マシンを作った

アセンブラを実装した前回の記事に続いて、 The Elements of Computing Systems にしたがって仮想マシンを実装した。その所感を本記事にまとめる。 以下でも述べるが、仮想マシンとはいっても VirtualBox のような代物ではない。より限定的な意味における仮…

Go でアセンブラを作ってみた

先週のポストで、プライベートの学習がうまく進められていないことを書いた。不思議なもので、言語化してアウトプットしてみたら気が楽になったのか、ここ一週間はだいぶ調子がよくなってきている。 で、先月来少しずつ読み進めている The Elements of Compu…

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

週末の ABC179 にてようやく茶色コーダーになれた。9度目の参加にしての昇級であった。 atcoder.jp 戦績を振り返ってみると、初参加が5月3日の ABC166 で、ここまで四ヶ月半かかっている。そしてその5月こそ毎週参加できていたが、その後は忙しさがこうじて…

下降気味のモチベーション

8月に読むテキストを書いた。本当であれば月末に振り返りの記事を書くはずだった。結局、8月のうちに終わらせることはできなかったし、9月ももうすぐ半分といういまの時点でもまだ半分と進められていない。 jnsato.hateblo.jp やっぱり、仕事をしながら勉強…

Amazon RDS for PostgreSQL のタイムゾーンはほとんど常に UTC であることに要注意

postgres の current_timestamp 関数を使ったクエリをアプリケーションに実装していたところ、本番データベースにタイムゾーンのずれによる時刻の不整合を招きいれてしまった。 TL;DR RDSで非 UTC の時刻を扱うユースケースでは current_timestamp や curren…

AtCoder Problems の Training モードで中難度をコンプリートした

4月半ばに AtCoder の問題を解くことを初めて、ほぼ4ヶ月となる。 5月にかけて集中して過去問に取り組んで、その後すこし熱がおさまっていた。これはもっぱら Project Euler に心変わりしていたというのが大きい。直近ではむしろ Project Euler に取り組むの…

activerecord で一括更新を行うときの選択肢をベンチマークで比較してみた

Rails を使ってある程度の大きさのレコード群を一括更新する処理の実装方針を考えていた。愚直にイテレートして一件ずつ update していくのは論ずるまでもなくバッドプラクティスであるとして、その他の選択肢の優劣は検討してみないとよくわからないという…

マルチプレクサとデマルチプレクサ

TIL

The Elements of Computing Systems に沿って基本の論理ゲートを実装している。 jnsato.hateblo.jp NOT, AND, OR, XOR のような耳慣れた論理に加えて、 Multiplexor と Demultiplexor という耳慣れない回路が、基本の論理ゲートとして扱われていた。そもそも…

8月に取り組むテキストを紹介する

月初めのモチベーターとして、準備したテキストを紹介していく。 The Elements of Computing Systems The Elements of Computing Systems: Building a Modern Computer from First Principles (The MIT Press)作者:Nisan, Noam,Schocken, Shimon発売日: 2008…