Pixel Pedals of Tomakomai

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

技術

SQLite で日付を扱う

SQLite には日付型がない。と、我々はいつから錯覚していたのか。 日付型はないのだが、なぜか日付を操作する関数群がある。これが超絶便利。 www.sqlite.org 先に注意点だが、これらの関数は文字列を日付として扱うのだが、 T ではなく空白文字を区切り文字…

Google Mapsの不具合の傾向と対策

Google Maps の調子がよくない。 まず、数ヶ月ほど前からタイムラインがバグっている。具体的に言うと、移動を正しく検出できない傾向にある。 GPS データは正しく蓄積されているため、各場所の滞在時間を正しく設定し直すことで、隠されてしまっている移動…

Windows 上の Rust で SQLite

Rust でちょっとしたツールを書いているのだが、読み込む JSON が巨大過ぎてデータの一部分だけを使うにしても毎回 1 分程度読み込みに時間がかかってしまうので、パース結果だけを使いやすい形で保存しておきたくなった。もちろん、 JSON を分割して保存し…

詳解: staticmap

最近、 Rust の staticmap クレートにいくつか PR を送ったので、忘れないように staticmap についてメモっておく。 docs.rs staticmap とは 事前知識なしに、簡単に地図画像を生成するためのライブラリである。例えば以下は、与えられた緯度経度の列を plot…

ChatGPTとプログラミング2

hiratara.hatenadiary.jp その後も継続して ChatGPT をサブスクで使っているのだが、今のところサブスクを解除する予定はない。サブスクした直後は Google 検索の代わりに日常の疑問を尋ねることが多かったのだが、最近はもっぱらプログラミングに ChatGPT …

ライフタイム制約と所有権の移動

以下の Rust のコードはコンパイルできる。 fn f<T: 'static> (_: T) {} fn main() { let s1: &'static str = "static"; f(s1); let s2: String = String::from("string"); f(s2); } f に s1 を渡せるのは、よくわかる。 &'static なのだから、 T: 'static を満たすのは</t:>…

GPD win miniを買った

久しぶりにパソコンを購入した。と言っても、UMPCである。 gpd-direct.jp ぶっちゃけ、小さすぎて普通のPCとしては使えない。デスクトップのWindowsが動くスマホ、という程度の使い勝手であることは想像できた。ので、買うべきかは非常に迷った。 とは言え、…

GoogleのLocation History(Timeline)を可視化

Google Map に Timeline を見る機能がついていて、過去の位置情報の履歴をすべて参照することができることは有名だが、実はこのデータはダウンロードすることもできる。 support.google.com 昔、このデータを元に 1log(イチログ) へデータをインポートする…

公衆 wi-fi に繋がらない

PC が 公衆 wifi に繋がらないことがある。始めは店の wifi の不調だと決めつけていたのだが、どうも普段家においてあるマシンを持ち出したときに、決まって接続に失敗している気がする。 ええい、負けてなるものかと30 分くらい格闘したところ、 DNS server…

ERROR: (gcloud.run.deploy) FAILED_PRECONDITION

gcloud run deploy したらエラーが出た。 X Building and deploying new service... Uploading sources. Γ£ô Creating Container Repository... Γ£ô Uploading sources... . Building Container... . Creating Revision... . Routing traffic... . Setting I…

libcuda.so.1 is not a symbolic link

Windows の WSL を使っていると度々遭遇するエラー。人類はいつまでこのエラーの回避に時間を使わなければならないのだろうか。 wsl /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link 今回もググって issue を追っかけた上で、 m…

ssh-agent を知らなかった

恥ずかしながら、 ssh-agent と SSH agent forwarding というものを全く知らなかった。ファイルの秘密鍵の代わりに ssh-agent を使うことができ、さらに、 forwarding の設定をしておくと SSH 先でもローカルの SSH agent を使える。秘密鍵を踏み台ごとにば…

Records.schema.json VS quicktype

Google の位置履歴の JSON のフォーマットは JSON Schema で定義されている。 github.com JSON Schema があると quicktype.io で変換して構造体が作れて嬉しい。 quicktype.io のだが、 source の定義が厳しい。 "source": { "type": "string", "title": "So…

VSCode で remote SSH 中に git fetch できない

できなくて悲しい。 Developing on Remote Machines using SSH and Visual Studio Code Remote - SSH limitations If you clone a Git repository using SSH and your SSH key has a passphrase, VS Code's pull and sync features may hang when running re…

ChatGPT とプログラミング

ChatGPT にプログラムを書かせることには否定的なのだが、それでもやはり便利だ。特に、普段は触ることのない環境でコードを書くための足掛かりを手っ取り早く掴むためには最良の手段と言える。 例えば、 Windows の Power Shell 上で .exe ファイルの処理に…

今日は Rust.Tokyo 2023 の日です

Rust.Tokyo 2023 のために、かなり久々にメルカリさんに来ています。以下は自分のためのメモです。 オープニング 会場紹介 入館証は退館時も必要 18F から出ると戻れないので、出ない 自販機無料 ハッシュタグは #RustTokyo2023 2019 年から開催、 2 回目の…

traitのaliasを作る ~ associated typeを添えて

Rust には整数の primitive 型が多数あるが、どの型でもよしなに計算してくれる関数を書きたくなる。四則演算子を表す trait はあるのだが、細かく分かれているので指定するのが大変である。 use std::fmt::Display; use std::ops::{AddAssign, Mul, MulAssi…

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

昨日 に引き続き、今日は Perl 神社 に来ていますので、自分用にメモを残しておきます。 オープニング YAPC Kyoto 成功祈願の様子の動画 開発成就、成果達成! YAPC Kyoto 2020 年から3年ぶりに焼き直し Reboot 蓋付きペットボトル、会場配布のもの、以外は…

今日は 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 …