0xf

日記だよ

プログラミング

掛け算の順序

実に適当に試したやつで、適当な桁数のでかい数を適当にかけてみると順序によって結果が変わる。 >>> 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 例題より。改めてなんとなく書き味がわかってきた。

書籍「Go言語による並行処理」

読んだ。何度も並行と並列について取り上げられるので間違えなくなった。便利。 context.Backgroundの謎が個人的には解けた。いや、解けてないんだけどそういうものだということがわかった。慣例的に done チャネルを使っていたやり方を標準化したような感じ…

2022/2/8日記

golang 引き続き眺めている。 io.Writer などは基本的にバッファリングしない。 log.Fatal は os.Exit(1) するよ。 Macの環境でインストーラによるランタイム環境と homebrew によるものが混ざっていると不便なのでどっちかに統一。だいたい homebrew でやっ…

今日から default language = golang にすることにした

だいたい普段からちょっとした書き捨ての処理はシェルスクリプトで書いてしまうし、テキスト処理やAWSの操作は python でやることが多く、jsonデータの処理は jq か nodeで書くことが多かった。のだけど、普段からプログラミングするのってそういうやつなの…

2021/11/30日記

今日で11月が終わりだなんて信じられない Typescriptから入った若者に「どうして昔のJavascript設計した人は最初からちゃんと作らなかったんですか」と言われて苦しい気持ちになった。わかる。わかるよ。 Minecraft のバージョンアップもそろそろって噂が。 …

GitHub CodespacesではElm拡張はダメだった

残念。 When you install an extension, it is saved in the browser's local storage. You can ensure your extensions are synced across VS Code instances, including different browsers and even the desktop, by enabling Settings Sync. (https://co…

2021/10/19日記

寒いので絨毯を出した。仕事部屋では朝から暖房にスイッチ。冬だ。 昨日はdiablo2は相変わらず繋がらなかった。 家庭内ではその代わりに Unravel Two が流行している。リトルビッグ・プラネット的な手触りのパズル風味アクションゲームだけど、なんか半透明…