ユユユユユ

webエンジニアです

TIL

rm ~/.bundle/config

Rubygem にはパスというのがある。次のコマンドでそれをみられる。 gem env gempath bundle install はこの gempath がデフォルトのインストール先となるように作られている。 しかしこのデフォルトは弱い。実際のところ、環境によって変わることのほうがず…

PDF を CLI で適当に圧縮する

TIL

Figma で作った書類を PDF で出力したらファイルサイズが思ったより大きかった。 minidocks/ghostscript の Docker イメージをプルしてきて次のようにして圧縮してみる。 docker run --rm -v `pwd`:/app -w /app minidocks/ghostscript pdf2ps -dLanguageLev…

git: いまいるブランチをリネームする

TIL

git branch -M new_name でできる。地味に知らなかった。リネームして、切り直して、古いほうを消して...という余計な手順を踏んでいた。 GitHub で Create a new repository をしたら、最初のコミットをプッシュするまでの手順に git branch -M main が含ま…

どうして内積を定義するのか?

平面上の二点間の距離は、三平方の定理より求められる。線分のなす角(の余弦)は、余弦定理より求められる。これをいわば再定義したものが、ベクトルの内積である。 と をそれぞれ列ベクトルとして、次の演算を内積と定義する。 これは定理にあらず、定義で…

コミットに署名して GitHub に verified バッジを出す

TIL

マージコミットに verified バッジがつくようになって久しいけれど、その意味はよく考えていなかった。ふと思い立って調べてみて、第三者になりすましてコミットするのがあまりに簡単であることを知った。 これまでの職場ではコミットに署名する文化に遭遇し…

「統計」はペルシャ語で

TIL

amar というらしい。 「世界統計の日」の国際キャンペーンのポスターで、多国語表記された「統計」という単語のまとまりをみて、ほぼすべての言語がラテン語か中国語に由来していそうななか、これだけがあきらかに異なる見た目をしているのが目を引いた。 ペ…

動的計画法のおさらい

TIL

平日の夜に久しぶりに AtCoder の過去問をやったら、 DP Table の問題に思いがけずつまずいてしまった。自意識としてはなんども転んでいいかげん克服できたつもりでいたので、またしても同じ壁にはねかえされてしまったことが悔しく、この土曜日は丸一日を復…

確率的素数判定法

TIL

ある自然数 n が素数であるかどうかを決定論的に調べるには、少なくとも まで調べないといけない。 しかし確率論的に素数である可能性が高いということであれば、 で計算することができる。これは速度と確度のトレードオフというわけでなく、確率論的な判定…

ベクトル空間の定義

放送大学で隈部先生の講義、「入門線型代数」を受講している。テキストは平易な説明でありながら証明が充実しているし、さらに放送講義で細部を補えて、たいへんよい講義と思っている。 そのいっぽうで、行列式、余因子、正則、線形結合、生成する空間、など…

ランダウの記号

TIL

計算量の上界を見るときにビッグオー記法などとよく引き合いに出される、例のランダウの記号というやつについて、解析学のテキストで触れられているものを読んだ。「他の定理はともかくとしてこれなら知っているぞ」といわんばかりの思いで臨んだが、数学的…

四則演算パズル

日曜日の午後、こんな遊びを見かけた。 4つの数と四則演算のパズルと言えば、中学に入った時に数研のビラで1,1,9,9->103,7,7,11->23,5,12,13->30という3つの問題があって、1つ目は知ってたから残り2つもそのパターンかと思ったら実は微妙に違ってて、その日1…

ネイピア数の微分がネイピア数になることの証明

放送大学の「入門微分積分 '16」第五課を読んでいる。ネイピア数の導関数が次のようになることを知った。証明を一読して(わけわからんやん...)となってしまっていたところ、じっくりと精読していたら論理をはっきりと見抜くことができた。きちんと読めばわ…

三角関数の加法定理を復習する

放送大学「初歩からの数学 '18」は、第十章にて三角関数を扱っている。すっかり記憶が磨耗していることに恥をしのびつつ、加法定理をいちど書き出してまとめておこうとおもう。 結局のところ、基本の形をもとにして、いくつもの展開形が生じるということにな…

シグナルを送ることで他のプロセスに割り込みをおこなう

シグナルとは、小さなメッセージのようなもので、何らかのイベントがシステム内で発生したことをプロセスに通知するものである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 といった生活…

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

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

平方三角数

TIL

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

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

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

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

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

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

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

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

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

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

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

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

TIL

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

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

TIL

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

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

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

std::map と std::unordered_map

map というデータ構造は連想配列にあたるものと単純に理解していた。unordered_map について追って知ることとなり、初めて map のキーが自動的にソートされることを知る。 #include <map> #include <unordered_map> int main() { std::map<int, int> mymap1; std::unordered_map<int, int> mymap2; in</int,></int,></unordered_map></map>…

`String#==` は実行時間が最適化されているか?

昨日の記事で、 secure_compare は String#== とは異なり常に一定時間で処理が行われる、と書いた。 jnsato.hateblo.jp あらためて GitHub Developer から引用する。 Using a plain == operator is not advised. A method like secure_compare performs a "c…

Rack::Utils.secure_compare を読む

Hanami と Sinatra の CSRF 対策のコードで、いずれも Rack::Utils.secure_compare という API を利用していることを発見した。何が secure なのだろうか? という思いがあり、読んでみた。 def secure_compare(a, b) return false unless a.bytesize == b.b…