0xf

日記だよ

プログラミング

パッケージ管理に asdf を使うようにしてみた

だいぶ快適になるな。コマンド体系が統一されているというのは正義だ。 asdf | asdf

Pythonのtyping.Self型はサブクラスで解決されるときにはサブクラスの型となってしまう

Python 3.11系で導入されたSelf型いいじゃんと思ったけどちょっと挙動が期待と違う。手元は3.12.3。 以下のような簡単なコードを考えてみると、 class State: def update(self:Self) -> Self: return self def hello(self:Self): print("abstract state") cl…

fastapiいいじゃん

何も考えずにflaskを使うことが多かったけど、フロントはそもそも静的なHTMLとJS返せればいいわけなので、バックエンドって結局API実装できれば足りるじゃんということに気がついてしまったのでした。(遅い)

preactのonMouseMoveでマウス座標をとると

ちょっと事情があってマウス座標が欲しかったのです。 import { render } from 'preact' import { useCallback, useState } from 'preact/hooks' function App() { let a = 0 const [mousePoint, setMousePoint] = useState<[number, number]>([0, 0]) const…

休暇メモ

AWSのBedRock 基盤モデルによる生成 AI アプリケーションの構築 - Amazon Bedrock - AWS 手軽なのは否定できないがGoogle の Astra、OpenAI/MS AzureのGPT 4oに対していかにも不足なのは否めない。 Claude系は「こういう目的で使いたいです!」ってユースケー…

書籍「プログラミングRust」

ざっと読み終わった。Rustのコードは見様見真似で書いていたが、だいたい適当な理解をしていたことがわかった。 非常に面白かったが、読むのに休日使って3日かかっている。後半のいくつかの章は斜め読みで、マクロのとこは概ねすっ飛ばした。 非同期処理あた…

掛け算の順序

実に適当に試したやつで、適当な桁数のでかい数を適当にかけてみると順序によって結果が変わる。 >>> a = 100000000000.1 >>> b = 0.0000000000000003 >>> c = 100000000000.0 >>> d = 0.0000000000000006 >>> a * b * c * d 1.8000000000018001e-09 >>> d *…

なんでも繰り返し

Optional<T>が List<T>に最大要素数1の制約をつけたものと本質的に一緒だという発見は尊い。List<T>に使える操作はOptional<T>に使えて良い。MayBeだろうがSomeだろうが名前はなんでもよくて、最大要素数1のリストはあるかないかの二択を表現できるという納得が良いし、</t></t></t></t>…

apple/ml-stable-diffusion を試す

[CoreML] Core ML Stable Diffusionを使ってみる を参考に。 セットアップ git clone https://github.com/apple/ml-stable-diffusion.git cd ml-stable-diffusion pip3 install -e . huggingfaceにログインしておく(必要なんだっけこれ) $(pyenv prefix)/b…

日記

LLMのローカル実行を試す - GPT2 「機械学習エンジニアのためのTransformers」のサンプルコードをもとに以下のような実装をして、 import torch import pandas as pd import torch.nn.functional as F from transformers import AutoTokenizer, AutoModelFor…

pyenv環境下でpipでインストールしたコマンドのPATH

よく忘れるので備忘。 pyenvで現在有効にしている Python 環境のパスは pyenv prefix で取得できる。pipでインストールしたパッケージの持つ実行バイナリなどはそこの bin/ に置かれているので、 export PATH=$(pyenv prefix)/bin/:$PATH または $(pyenv pre…

プログラマ脳

基本形 段取りを作る その通りにものごとが機能するので嬉しい 次 段取りを作る うまくいかない 段取りを直す うまくいくので嬉しい 次 段取りを作る 原因がわからないがうまくいかない 原因を探す 原因がわかる 段取りを直す うまくいくので嬉しい 次 段取…

昔からイテレーター / ストリーム / 再帰が好き

なんだかわからないけど好きなんですよ。処理をストリーム型に変換してパイプ的につなぐのが好きです。依存関係をうまく整理して一本やツリー状にしたり、walk関数を実装したりするのが好き。 all? と any? 議論を眺めていて - 0xf 結局これもそういうことを…

all? と any? 議論を眺めていて

一瞬、世の中で話題だったので、自分のメンタルモデルを棚卸しした。 前置き この議論は「実業務において、配列の全ての要素に対して条件が満たされれば真という関数があるとき、空配列に対しては真である『べき』かどうか」という、なんともいえないところ…

contextmanagerを利用してアクセス方法だけを隠蔽する

そういえば python は with 構文があって、かつタプルの多重代入がいけるのでこのように書けるのだった。 from contextlib import contextmanager @contextmanager def create_accessor(): print("before") try: tmp = {} def getter(k): return tmp[k] def …

当たり前だがfmt.Printlnもエラーになることがある

bytes, err := fmt.Println("hoge") ... 戻り値は It returns the number of bytes written and any write error encountered. とされている。なるほど。Scanfとかはバイト数を返すのは違和感がない。だったら書き込む方も同様として違和感はない。そうです…

VSCodeのテストのスケルトン生成は単純に便利だった

func Min(x, y int) int { if x < y { return x } return y } こういう簡単なコードに対してテストコードの生成を行うと以下のようなコードが生成される。 func TestMin(t *testing.T) { type args struct { x int y int } tests := []struct { name string …

jq でシェルスクリプトは書けない...というのは悔しい

こういうコードは書けない。 #!/usr/bin/env jq {"hello":"world"} なぜなら jq は渡されたファイルの1行目を無視するようなオプションがないからです。jsonが#始まりのコメントを許容するようになる未来はあんまり想像がつかない。 無理やりやろうとするな…

golangのメソッドセットは実体の型にくっついてる

まあそれはそう、という感じではあるけど頭から抜けていた。 package main type F interface { Apply() } type f1 struct { } type f2 struct { } func (f1) Apply() { println("call f1!!!") } func (f2) Apply() { println("call f2!!!") } func build(p i…

golangでメソッドには型パラメータは付与できないけどレシーバには付与できる

pythonのジェネレータ的な書き味をgolangで - 0xfを書いていて気がついたのだけど、 なんか勘違いしていて、メソッドは型パラメータ持てないよといったとき、レシーバも同様かと思い込んでいた。 type ReadOnlyChannel[T any] <-chan T func each(s, e int) …

pythonのジェネレータ的な書き味をgolangで

yield でシュッといけるわけではないのだが channel を返せばいいか? func each(s, e int) <-chan int { r := make(chan int) go func() { defer close(r) for i := s; i < e; i++ { r <- i } }() return r } func main() { for i := range each(10, 20) { f…

golangで簡単なカリー化

ジェネリクスあるのでコネコネしてみた。 たとえば int 二つをとる関数のカリー化関数は個別には簡単に書ける func curry(f func(int, int) int, x int) func(int) int { return func(y int) int { return f(y, x) } } これを、ジェネリクスを使って func cu…

goの&と*がいつも混乱する

かんぜんに書き慣れてないからですね。今日はメソッド定義時のレシーバについてちょっと悩んでた。 type User struct { name string } func (u User) getName() string { return u.name } func Test() { fmt.Println(User{name: "Pop"}.getName()) } これは …

戦争は女の顔をしていない3巻 スターリングラードの述懐をするおばさんの話は恐ろしい。石畳が血でぬめってあるけないとか大地で血と油が染み込んでない場所はないとか、言い回しがロシアっぽいけど、実際にそうだったのかはわからない。怖い。 表現の選び方…

awscli は pip install でインストールしない

awscli · PyPI 2系は pyplに公開されてないので、Macであれば homebrew でいれるか、公式通りにインストーラでインストールしましょう。gcloud コマンドみたいに自分自身をアップデートする仕組みがあると便利ですね。 クラメソさんが github からセットアッ…

Pythonのf文字列

s3path = f"s3://{bucket}/{item["Key"]}" でKeyを囲むダブルクォートがSyntaxエラーになる。SyntaxError: f-string: unmatched '['。 2. 字句解析 — Python 3.10.4 ドキュメント を眺めると、中括弧の中は python式なので書けそうなもんだけど、実際には " …

kuku.luで利用できるメールアドレスのドメイン

捨てメアドサービス「メルアドぽいぽい」ってやつのドメインリスト(https://m.kuku.lu/config_domain.php)が面白いテクで読みづらくなっていたので、読みやすく直した。インターネットでは機械可読であるのはだいたいにおいていいことであると思う。 . が画…

Google Cloudに接続するクライアントをgcloudと同じ認証情報で動作させる

普段 gcloud auth login するように gcloud auth application-default login しておく。サービスアカウントの認証情報を手元におかなくてよくて便利...ではあるけど、手元環境だいたい権限すごく強いのでなるべくは開発用のサービスアカウントを発行して使っ…

GitHub Actionsメモ

ちょっと調べていたのでメモしておく。 今のところApproveされているかどうかは拾えなさそう。mergeableであるかどうかのチェックで代用するのが正解かな。mergeableは pull_request データ構造に存在する。 ワークフロー中、人間の承認を要求するようにする…

golangでフィボナッチ数列

func fibonacci() func() int { f, n, r := 0, 1, 0 return func() int { r, f, n = f, n, f+n return r } } A Tour of Go 例題より。改めてなんとなく書き味がわかってきた。