Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

技術

今日は YAPC::Kyoto 2023 前日祭の日です

土俵に来た ので、自分用のメモを残しておきます。 オープニング 3 年ぶりのオフライン開催 今日は他の部屋で別のイベント ( 新卒説明会、学会 ) をやっているので、お静かに CoC 遵守 困ったら yapc-kyoto-2020-core@googlegroups.com へ

Tokyo Cabinetのデータベースタイプの誤り

Fundamental Specifications of Tokyo Cabinet Version 1 (Japanese) データベースタイプ ハッシュ表(0x01)かB+木(0x02)か固定長(0x03)かテーブル(0x04) ドキュメントのこの記述、間違えている。 tcutil.h に、 enum { /* enumeration for database …

Redis::Fastのコードリーディングのメモ

Redis::Fast のコードをちょろっと読んだので、自分用のメモ。 hiredis 側には adapters/poll.h というものが用意されているが、自前実装している wait_all_responses と wait_one_response はまったく同じ実装である wait_*_responses を呼んだときのみ red…

古いrustを新しいMacで動かす

全部 https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/.E2.9C.94.20How.20can.20I.20fix.20Rust.201.2E53.2E0.20or.20earlier.20to.20run.20on.20macOS.2012.2E6.3F/near/299263887 に書いてあった。 一応 TL;DR のためにま…

joinクイズの答え

joinクイズ の解答と解説です。 joinクイズ 第1問の答え perl -E 'say join "0" .. "9"' join の関数プロトタイプを見ると、以下のようになっています。 $ perl -E 'say prototype \&CORE::join' $@ よって、第一引数はスカラコンテキストで評価されます。 …

joinクイズ

このエントリは Perl Advent Calendar 2022 への参加エントリです。 joinクイズ 第1問 以下のコードを実行すると、何が表示されるでしょう? 3 つの中から正しい物を選んで下さい。 $ perl -E 'say join "0" .. "9"' 何も表示されない 0123456789 1020304050…

小数第四位までの小数を10000倍して整数に直せるのか

数値が小数第四位まで与えられるとする。例えば、 1234.5678 のような形式である。 それらの数値を使って計算をしたいのだが、何も考えないと計算機上ではこれらの数値は double 型などで保持され、誤差が発生することは有名だろう。 >>> 1001.0000 * 1.1000…

docker historyがmissingになる

ふと、 docker build をして docker history を実行したら、中間イメージが <missing> と表示されていて、あれ?となった。 $ docker history 790538589d39 IMAGE CREATED CREATED BY SIZE COMMENT 790538589d39 2 minutes ago CMD ["python" "-c" "print(\"OKay\")"]</missing>…

条件チェックの順の最適化

複数の条件をすべて満たすときだけ、処理を継続したいということはよくあると思う。例えば以下のようなコード。 fn some_function(x: &Hoge) { if !check0(x) { return; } if !check1(x) { return; } if !check2(x) { return; } if !check3(x) { return; } /…

TypeScriptの分配条件型

最近オライリーのTypeScript本を読んでいるが、型システムが頭がおかしくて(褒めてる)とても面白い。 www.oreilly.co.jp TypeScriptでは、こんな感じの型レベル関数が定義できる。以下の Extract2 は T のうち、 U であるものを展開するというものである。…

ECS について調べたこと

ECS とは Entity Component System のこと。 Entity component system - Wikipedia wikipedia の歴史によれば、 2002 年の Scott Bilas の GDC2002 での講演が起源のようだ。 https://www.gamedevs.org/uploads/data-driven-game-object-system.pdf 元々は、…

NLLとDropトレイト

NLL (non-lexical lifetimes) について誤解していた。 次のコードは NLL のおかげで、 _y に代入した &x が次の行以降使われていないため、 &mut で可変参照を生成できる。 use anyhow::Result; struct X<'a> (&'a i32); fn main() -> Result<()> { let mut …

macOS Big Surでマウスポインタと違うところがクリックされる問題の解消

ゴミ箱 を macOS Big Sur にアップグレードをしたら、クリックした時にマウスカーソルが指している場所と全然違う部分がクリックされるようになって、詰みかけた。 guest アカウントでログインすると発生しないので、ハードウェア的な問題ではなさそう。 30 …

CellとRefCell

Cell と RefCell はどちらも「内側のミュータビリティ」を実現するものだが、実現方法が違う。 RefCell については、ランタイムでボローチェックしていることはよく知られている(と思う)。 let ref_cell = RefCell::new(20i32); println!("ref_cell (1): {…

Data.Vaultの非GHC実装

ふと、 Data.Vault ってどうやって実装してるんだろと中身を覗いていたら、なんかすごいものを見つけた。 vault/IORef.hs at 39cf64b47c24b83c24924d47d2385f8213a3f322 · HeinrichApfelmus/vault · GitHub 今はほぼ GHC 一択なのでこの実装を使っている人は…

cargo test --jobs N -- --test-threads=M

redis-rs の cluster のテストが何度やっても通らなくてハマった。ただし、テスト名を指定して一個ずつであれば成功する。該当するテストは以下。 redis-rs/test_cluster.rs at bd8dc731ded564329d74717dfacc5cce748d891f · mitsuhiko/redis-rs · GitHub こ…

Haskellの古いmkSocketの引数のfamily

Linuxネットワークプログラミングの勉強をきちんとしましょうということなんだけど、とりあえず調べたことをメモっておく。 Haskell に mkSocket という関数がある。 https://hackage.haskell.org/package/network-3.1.2.0/docs/Network-Socket.html#v:mkSoc…

Rustでdocker build時に依存ライブラリの再ビルドを避ける

Rust で書かれたアプリをビルドするための docker image は以下で公開されている。 hub.docker.com しかし、ここに出ているように COPY . . なんてやっていると、 src/main.rs を触るだけで毎回 cargo install 時に依存するライブラリをすべてダウンロードし…

&Tがそのまま&dyn Traitとして使えるわけではない

トレイトオブジェクトを返す次の関数 f はコンパイルできる。 trait X {} fn f(x: &dyn X) -> &dyn X { x } ところが、次のように書くとコンパイルできない。 fn f<T: X + ?Sized>(x: &T) -> &dyn X { x } Compiling playground v0.0.1 (/playground) error[E0277]: the siz</t:>…

Rustの&mutのmoveとreborrow

&mut は Copy trait を 実装していない 。よって、こちらは実行できない。 fn main() { let x: &mut i32 = &mut 0; { let y = x; println!("y: {}", y); } println!("x: {}", x); } Compiling playground v0.0.1 (/playground) error[E0382]: borrow of move…

FutureとUnpin

Future で Unpin が必要なときは pin してねって書いてある。 Pinning - Asynchronous Programming in Rust To use a Future or Stream that isn't Unpin with a function that requires Unpin types, you'll first have to pin the value Box も Unpin なの…

AVL木

確か、いい感じに深くなりすぎない木だよね。回転?なにそれ?みたいな状態から実装し始めたら、面倒で死ぬかと思った。 AVL Tree by Java -- これで分かったAVL木 とか AVL木の回転(要素の挿入や削除のしかた) - Qiita とかを参考に実装した。2週間くらい…

rustでdiscordのbotを作ってみたくて下調べ(4)

rustでdiscordのbotを作ってみたくて下調べ(3) - 北海道苫小牧市出身の初老PGが書くブログ で serenity を紹介したが、最近 async版 の開発が進んでいる。試してみたが、まともに動くようだ。ベンチマークなど取っていないので、 async にする価値があるのか…

doesn't have a size known at compile-time

まだ時間がなくて詳しくは調べてないけど、こういう書き方はできない。まあそうかなと思う。 use std::fmt::Display; struct S<T> (T); fn main() { let s: Box<S<dyn Display>> = Box::new(S("")); } Compiling playground v0.0.1 (/playground) error[E0277]: the size for v</s<dyn></t>…

impl Trait 型の値を再代入しようとしてハマった

impl トレイト名 は Rust で存在型を扱うのに使える 。しかし、以下はコンパイルが通らない。 use std::fmt::Display; fn f<T>(t: T) -> impl Display where T: Display, { t } fn main() { let mut s = f(""); s = f(s); } Compiling playground v0.0.1 (/play</t>…

標準入力の一行の上限は4,096バイト

標準入力の一行に大量の文字を食わせると、4,096バイトしか有効にならない。 $ perl -e 'print "x" x 5000, "\n" for 1 .. 2' | clip.exe $ perl -e 'print length <>, "\n" for 1 .. 3' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…

rustでdiscordのbotを作ってみたくて下調べ(3)

前回からだいぶ時間が空いたが、下調べの続き。 discord-rs というのを最初に見つけて古いと嘆いていたのだが、現在使われているクレートは serenity の方だったようだ。これを検索で見つけるのは至難の業。 discord で検索すると、他の関係ないクレートがガ…

rustでdiscordのbotを作ってみたくて下調べ(2)

discord の bot を作るのなら websocket が必須なので下調べ。 というか、調べなくても discord-rs が使っていた websocket がそのまま使えるはずと思っていたのだが、開発が sluggish なので tokio-tungstenite を勧めている。良い名前空間を使っているだけ…

rustでdiscordのbotを作ってみたくて下調べ

結論から書くとまだ何もしてない。 discord-rs というのがあるのだけど、だいぶ古い。特に嫌なのが issue にも上がっている通り openssl 1.0 系への依存。 昨年末にEOLを迎えている ので避けておきたい。 という事で手元でバージョンを上げようと試みたのだ…

plain-old jarで JUnit5 を試す

https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher に書いてあるんだけど、分かりにく過ぎたので。 $ curl -O https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.5.2/junit-platfor…