標準愚痴出力

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

Go

Go の "flag" パッケージのヘルプ表示部分を差し替える

Go

flag パッケージのヘルプ表示は -h オプションを指定された時や、引数ゼロの時に自動で表示される。 だが、issue 対応している中、その自由度が結構きつくて、ユーザの提案に対応できない事態が発生した。 -flagname XXXXX UUUUUUUUUUUU (default: DDDDD) こ…

AppVeyor で nyagos がビルドできなくなっていたのを直した

nyagos は Windows7, 8.1 もまだサポートしているので、ビルドの要件は Go 1.20.14 だが、AppVeyor ではデフォルトの Go でビルドするようにしていた。 だが、 go fmt の最後で次のようなエラーになるようになってしまった。 go: downloading github.com/Mic…

GoのMySQLドライバーと loc パラメーター "Local" とSQL-Bless

SQL-Bless で MySQL に接続する場合、第二引数でGo言語用のMySQLドライバーへ引き渡す接続文字列をわたさないといけないため sqlbless mysql "root:@/mydb?parseTime=true&loc=Asia%2FTokyo" と指定させていたが、ロケーションがSQL-Bless を動かしているタ…

PureGo な SQLite3 ドライバーの glebarez/go-sqlite のドライバー名に "3" がついていない件

glebarez/go-sqlite: pure-Go SQLite driver for Go (SQLite embedded) そのまま import _ "github.com/glebarez/go-sqlite" すると "database/sql".Open で使う、ドライバー名が sqlite になってしまう。 mattn/go-sqlite3 と同じ sqlite3 というドライバー…

今までよく理解できていなかった、bash のヒストリを参照して編集した時のヒストリエントリの変化

bash で実験したが $ echo 1 $ echo 2 $ echo 3 と入力した後、Ctrl-P で echo 2 を呼び出して echo 2+ に変更すると、ヒストリ構造は一時的に echo 1 echo 2+ echo 3 みたいになる。だが、だが、一旦 Enter を押すと echo 1 echo 2 echo 3 echo 2+ のように…

Go modules を使っている時、自モジュールの最新コミットの機能を自分の他のGo パッケージから参照するだけで第三者に使ってもらう必要がないのであれば、無駄に新たな git tag をつけなくてもよいかもしれない

go

みんな普通にやってるかもしないし、やっていないかもしれない。どうなんだろ (追記) 前にも同じようなテキスト書いてた。おれはもうだめだ TL;DR go get -u するだけでは、最新のタグのついたバージョンまでしか参照されないが、パッケージ名にブランチ名…

【解説】ターミナル用データベースクライアント 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 で入力内容確定(送信) が出来たらいいなぁと思ったので、トライしてみました。 当初はパッケージの改造がいるかなぁと思ってたんですが、キーマップへのコールバック関数のアサインだけでなん…