0xf

日記だよ

プログラミング

当たり前だが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 が流行している。リトルビッグ・プラネット的な手触りのパズル風味アクションゲームだけど、なんか半透明…

2021/10/18日記

突然寒くなった。数日前には冷房をつけたり消したりしていたはずが、今日は朝から暖房を入れるかどうか検討している。 Alexaによると、「気温は摂氏11度です」とのことである。こいつどこの気温について言っているんだろう。本体に温度センサーあるんだっけ…

2021/10/15日記

暑くてエアコンをつけたり消したりしている。冷房にすると寒い。止めると暑い。 摩天楼、天を摩する楼、スカイスクレイパー。確かにこの訳語ものすごく洒脱ですね。 perlをはてなインターン2021の資料を見ながら再開した。 はてなリモートインターン2021 Per…

load_table_from_json の第一引数が json でも jsonl でもない件について

google.cloud.bigquery.client.Clientのload_table_from_json について。 googleapis.dev BQにデータ突っ込むスクリプトで、一時ファイル作りたくなくて、load_table_from_json を使おうとして少しハマっていた。 第一引数は json_rows と仮引数名設定されて…

pip install grpcio で無限に時間を食われていたが pip のバージョンをあげたら解決した

環境は Debian 10.10。 タイトルで全て説明できたので特に複雑な補足はない。 google-cloud-bigquery を利用しようとして、依存関係にある grpcio のセットアップに刺さっていた。pip のバージョンをあげたら解決したのですよという話である。arm64なMacbook…

Mac OS X Big Surのmakeが古いので更新する

古いことがネガティブに働く種類のものではないけど、なんとなく。 $ make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even fo…

パイプライン演算子に飼い慣らされてしまった

process_result(call_api(build_api_params)) がもうすっかり我慢ならない。build_api_params |> call_api |> process_result と書きたいギギギ

python3で関数を返す際はCallableでヒントする

from typing import Callable def f() -> Callable[[], str]: def _() -> str: return "hello world" return _ r = f() s = r() # s は str と判定される typing --- 型ヒントのサポート — Python 3.9.4 ドキュメント

夢のboto3のpagenate

残念。そうか、describe_savings_plans_offering_rates は NextPageToken ではなく NextToken であってページネートAPIが生えてないのは概念としてページではないからか・・・という気分になっている。 botocore.exceptions.OperationNotPageableError: Oper…

関数の戻り値型の記述でジェネリクス型を利用すると unknown が出がち

特に理由もきちんと追えてないけど、ハマったやつもう一つ。最初 async function と Promise の固有の挙動かなと思ったけどそうではなかった。 // これは期待通り Rが推論される function sample<P, R, F extends (params: P) => { result: R }>(f: F, params: P) : R { return f(params).re</p,>…