標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Go

【解説】ターミナル用データベースクライアント SQL-Bless で CSVI をページャとして使うようにしてみました

もともと SQL-Bless って、SELECT 結果を CSV 形式で出力するようになっているんですよね。 で、CSVI はファイルだけでなく、標準入力から CSV データを読み込むことができるようになっている。 これは連結すると便利じゃね?ということで、SQL-Bless に CSV…

csvi 以外の最近の活動(2024年4月)

go

go-readline-ny v1.3.1 サブパッケージ completion で、空状態で補完するとクラッシュする不具合を修正するプルリクエストをいただきました。ありがたい あと、csvi でやった一文字キー入力の仮想化をこっちでもやりました。前から ITty という interface で…

【解説】 CSVI v1.7.1 をリリースしました。

Release v1.7.1 · hymkor/csvi 前に説明したのは v1.5.0 だったので、v1.6.0, v1.7.0 の変更点も合わせて CSView → CSVI と名前を変えました View という単語が名前に入ってると読み取り専用ビューアという印象があるが、今は編集可能になっている 同カテゴ…

今更だけど、Go では (具体的なレシーバー.メソッド名) を「関数ポインタ」扱い出来た件

たぶん、有識者では常識なんだろうけれども、最近まで認識できていなかった件についてのポエム type T struct { // : } func (t *T) Method(){ // : } var t T と定義されている場合、 var f func() = t.Method という代入が可能。これの何が嬉しいのかとい…

make-scoop-manifest の引数仕様をシンプルにした

Release v0.10.0 · hymkor/make-scoop-manifest GitHub のレポジトリから scoop 用の manifest を生成するツール: make-scoop-manifest。使い方として次の3種類があると説明をしていたが、分かりにくかった。 レポジトリの場所は git remote show -n で取得…

rangefunc の練習:Yet Another Scanner

go

既存のライブラリに bufio.Scanner があるが、改行をカットしてしまう 改行を含めて読み取りたいときは (*bufio.Reader) ReadString('\n') を使う EOF を検出した時の処理が面倒だが、雑に書くと最終行が失われてしまう 面倒なく、ありのままに読み込むコー…

もう一つだけ、小さな optional パッケージを作った

以前: hymkor/go-minimal-optional: The minimal optional package for golang Go言語で必要最小限の optional パッケージを実装したものの、安全性と使い勝手の両立は難しい - 標準愚痴出力 というパッケージを作ったが、別の方式で、もう一つ作ってみた。…

Go で適当な btree を検討していたけど、tidwall/btree がいいかもしれないなぁ

tidwall/btree: B-tree implementation for Go 既存のメソッド Scan の仕様が range から呼ばれた関数の要求仕様にちょうどマッチしてた。 package main import ( "fmt" "github.com/tidwall/btree" ) func main() { var users btree.Map[string, string] //…

既存パッケージ(uncozip) を Go1.22 の rangefunc 対応に

go

意外と簡単でした(Lua に慣れてる人は、コールバック関数を戻り値として返すというやり方はおなじみかも) uncozip のパッケージは、ZIPファイルの各ファイルをリストアップする関数として (*CorruptedZip) Scan() bool というメソッドがあります。この実装…

Go 1.22 でも残る、"syscall" を使わないといけないケース(ソース付き)

go

Windows の検索コマンド find.exe は検索対象の文字列は二重引用符で囲んで与えてやらないといけないという困った仕様があります1。 C:> find /? ファイル (複数可) 内のテキスト文字列を検索します。 FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "文字列" [[ド…

次期Goの汎用for range。他力本願でほんのちょっとだけ試してみた

Go

zenn.dev に Goの1.22にGOEXPERIMENTガード下で導入されるrange over func proposalを試してみる という記事があったので、試してみた。同記事にある手順: go install golang.org/dl/gotip@latest gotip download 510541 は特に問題なく完了した。ダウンロ…

二つの io.Reader データ比較の高速化

Go

以前、 zip/tarファイルと、それを展開したと思われるディレクトリがあった時、両者が一致していて一方を削除してしまっても大丈夫かを検証するツール(verifyarc)を書いた。 hymkor/verifyarc: A tool that verifies that when there is a ZIP file and a di…

Linux のゴミ箱への拙作のライブラリや、はてなブログ コマンドラインクライアントの対応

最近、作り込んでいる はてなブロククライアント だが、投稿テキストをテキストエディターで編集した後、os.Remove で削除していた。だが、何らかのトラブルがあって投稿が失敗したのに検知できなかったという最悪ケースのため、完全削除よりは、復元できた…

Goで WriteRune を持たない io.Writer で最速で1文字出力するには

Go

WriteRune を持たない io.Writer 相手に 1-rune を出力するのに、fmt.Fprintf(〜,"%c",r) を使いがちだが、utf8.EncodeRune を使ってやった方が速いのではないかと思い検証してみた。 hymkor/study-go-write-rune: Goで WriteRune を持たない io.Writer で最…

go-readline-ny のカスタマイズ方法を Wiki にまとめました

Go

レポジトリの README.md からの導線が分かりづらくて、なかなか気付いてもらいにくいのですが、go-readline-ny のカスタマイズ方法を Wiki にまとめました1 Home · nyaosorg/go-readline-ny Wiki 記載内容は 日本語目次 にあるとおりですが、次のとおりです…

はてなブログの記事を作成・編集するGoのライブラリ・コマンドラインツールを作りました

hymkor/go-htnblog: はてなブログ投稿Goライブラリ いい加減ウェブブラウザで、markdown を編集するのはしんどくて、vim で編集するために作りました1。 ※ (2023-10-17 追記) 記事公開後、不具合が見付かり、v0.1.1 → v0.2.0 と更新しているので、ご注意くだ…

メソッドの引数がレシーバーと同じ型となっている型群を等価に扱いたい

Go

(2023/9/13)コードが分かりづらかったので、全面的に書き直しました (x1 *X) Add(x2 *X) *Xというメソッドを持つ型(X) (y1 *Y) Add(y2 *Y) *Yというメソッドを持つ型(Y) これを等価に扱いたい。 引数がその固定の型であれば普通の interface で済むところ…

go-multiline-ny / SQL-Bless:Enterキー+指定の条件で入力終結モード

Release v0.12.0 · hymkor/go-multiline-ny Enter だけを入力した時にそれを入力終結と判断する「条件」を関数で指定できるようになりました。 たとえば、SQL Bless v0.9.0 では、Enter を入力したとき、最終行の行末がセミコロンで終わっていたら入力を終結…

Windows 8.1 , Server2008 向けの Go ツールの保守環境の維持

nyagos というツールをメンテナンスしているが、このツールはまだ当分 Windows8.1 や WindowsServer2008 をサポートしたい。 だが、最新の Go 1.21.0 はそれらの OS のサポートを切ってしまっているので、Go 1.20.7 でビルドしたバイナリを引き続き提供する…

最新 master 版 Go の導入

Go

YouTube 動画で、新しい for range をデモってる人が gotip というコマンドを使っているので、go1.20.7.exe とかと同じかなと思って、 go install golang.org/dl/gotip@latest gotip download してみたところ、 Cannot find C:\Users\hymkor\Go1.4\bin\go.ex…

Go 1.21.0 の遅延初期化

Go

Go 1.21.0 のマイナーなライブラリ修正の中に、sync.OnceValue という関数が追加されていた。1 sync The new OnceFunc, OnceValue, and OnceValues functions capture a common use of Once to lazily initialize a value on first use. どうやら、これは遅…

SQL-Bless 製作中に把握が必要になった各DBの違い(随時更新)

hymkor/sqlbless: The Command-line Database Client 共通 型名は DB ごとにばらばらだが、ANSI SQL の型がエイリアスになっている模様 可変長文字列型 → CHARACTER VARYING(n) 数値型 → NUMERIC[(n)] Oracle Database 21 Express Edition コマンドラインク…

go-readline-ny:カラー化の手引き

Go

(2023/04/14:追記) v0.10.0 にて非互換性を含む修正を行ったため、その変更点を反映しました。 go-readline-ny は v0.6.1 から文字ごとに色を変更できるようになりました。 この配色は固定ではなく、readline.Editor のフィールド Coloring に設定された…

go-readline-ny でマルチライン編集

Go

go-readline-ny で Enterで改行挿入だけ Ctrl-Enter or Ctrl-J で入力内容確定(送信) が出来たらいいなぁと思ったので、トライしてみました。 当初はパッケージの改造がいるかなぁと思ってたんですが、キーマップへのコールバック関数のアサインだけでなん…

S式で Makefile を書く make を作ったよ!

zenn.dev に投稿しようかと思って書き始めたけど、結局、塩漬けのままになってしまったのを再利用シリーズ第二弾 Go言語で ISLisp のサブセットを作ってる hymkor/gmnlisp: gmnlisp - the subset of ISLisp でも、単に規格書に載ってる標準関数を一つずつ実…

💩口に出せない ZIP ファイルのひみつ(主に名前のせい)

(当文書は zenn.dev あたりに投稿しようかなと思って書き始めたんですが、書いているうちに文書量の割に役立つ内容がないのでボツにしたものです。もったいないのでブログの方に残しておきます) きっかけ twitter の先行きがいろいろ不安なので自分の全ツ…

defer による戻り値の差し替え

Go

(先日、gist に書いたものをこちらへ移動) package main func sub() (rc int) { defer func() { println("defer func():", rc) rc *= 2 }() rc = 1 return 2 } func main() { rc := sub() println("main:", rc) } $ go run defer.go defer func(): 2 main:…

scoop のマニフェストファイルを作るツールを公開しました

Go

github.com 本記事は https://twitter.com/NyaosOrg/status/1612296206193143809 以下のスレッドの転載になります。 scoop のマニフェストファイルとは何かについては、以下もご覧ください(本記事の記載内容と若干重複していますが) scoop の野良パッケー…

私的 goawk リポート

benhoyt/goawk: A POSIX-compliant AWK interpreter written in Go Go言語による gawk 互換処理系 Windows では Unicode-APIを利用しているため、コンソールに UTF8 を出力しても、化けずに表示される(逆にいうと、CP932 は対応していない) シングルクォー…

ビルドタグは import 先にまで派生する

go

まぁ、当たり前の話ではあるんだけど、github.com/zetamatta/go-windows-dbg を改造するにあたって大丈夫か?とちょっと不安になったので、念のため検証。 サブパッケージ(bar)は release タグの有無で挙動が変わる。タグを指定するのはメインパッケージ(mai…