ユユユユユ

webエンジニアです

2020-01-01から1年間の記事一覧

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

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…

NAND 演算があればあらゆる論理演算ができる

TIL

NAND とは NOT AND のことで、真理値表は次のようになる。 x y x NAND y 0 0 1 0 1 1 1 0 1 1 1 0 見ての通りの、 AND の否定形である。否定にすぎないから、論理学ではそう注目される演算でもないように思う。 しかし電子回路の世界ではこの演算が中心の座…

背伸びして『Effective C++ 第3版』を読んだ

ある Googler の投稿を読んでいて、見かけた本である。題字のフォント、表紙のデザインなど、飾り気はないのに力強いオーラを持つ装丁がただちに印象に残った。名著という評判も高いおかげで安心して読むことができたし、翻訳も丁寧な印象で、自然に読める心…

『江添亮のC++入門』でC++の基本を学び直す

競技プログラミングに触れるようになって、自己流ながら少しずつC++が使えるようになってきた。しかしきちんとした参考書を読んだことがなく、体系立てた学習もしたことがないのが気にかかっていた。学習といえば、AOJの教育コンテンツを少しやったばかりで…

『キタミ式イラストIT塾 基本情報技術者』を読んだ

大学生であったおり、就職活動に合わせてこの参考書を手に取ったことがある。そしてほとんど2割も読まずに匙を投げた。資格の存在を知るより先にプログラミングのアルバイトを始めていたから、資格試験の勉強では死んだ知識しか身に付けられない、と粋ぶって…

Project Euler で最初の50問を解いた

最初の25問を解いたのはちょうど一週間前であった。 jnsato.hateblo.jp ペースが速くなったのは、おもしろくて手が止まらなくなってしまっていたため。絶妙な難易度のおかげで、あと1問だけ解いたら寝る...解けた...寝る前に次の問題もみてみよう...やっぱり…

C++の整数リテラルに桁区切りを加える

Ruby であればこういう書きかたが許されている。ゼロを列挙するよりもはるかに視認性が高く、お気に入りの記法である。 a = 1_000_000_000 a # => 1000000000 C++ を書くとき、ここにほのかなもどかしさを感じることはあった。1000000000と書くのは読みづら…

rmagick をビルドする

TIL

入社初週の恒例行事として既存プロジェクトの環境構築をしていた。 幸いにしてほとんど障害なく進められたのはありがたい。このエントリに書くことさえ、大したことではない。しかし安易に検索エンジンに頼ったりせずに、自分の頭で考えてビルドを通せたこと…

ローカルの postgres を 12.3 に移行する

TIL

今週から新しいプロジェクトに参加することになった。 Rails + postgres の構成で動くアプリケーションの環境構築をした。 ミドルウェアを使うときはコンテナで実行するのが手癖になっていた。しかし今回は「無理して Docker を使わないこと」のポリシーに沿…

任意の累乗数をみちびくアルゴリズム

C++

例えば Ruby はユーザーが特に意識せずとも無限に大きな整数値を扱うことができる。 jnsato.hateblo.jp C++では long long 型を利用してもたかだか 64-bit までしか扱うことができない。ビルトイン型として提供されているのはこれが最大となるから、それより…

循環小数を検出して表記する

C++

1/3 や 1/7 のような循環小数を数値型を使って表現しようとすると、普通は有効桁数の範囲でしか表記できない。そうではなく、次のように循環小数であることが一目瞭然となってほしい。 1 / 3 = 0.(3) 1 / 7 = 0.(142857) そこで単純に、分子と分母を引数に受…