Windows用のHyperEstraierのGo言語のラッパーを作りました、途中まで!

(qrunch.ioより転記) これな zetamatta/go-hyperestraier-win32: golang wrapper for estraier.dll (win32) 実は会社で HyperEstraier を使ったWindows 製品の保守をちょっとだけしているのですが、標準のコマンドラインツール estcmd は UTF8 でして、ANK…

nyagos の type, more で UTF16 をサポート

(qrunch.io より転記) これな type and more supports UTF16 (if it contains '\000' ...) Issue #267 zetamatta/nyagos 当初は「とりあえず書いてみた」という感じの issue で、そのうちニーズがない割に面倒なので、やめようかな…と思っていました。 が、…

二重引用符などで面倒なことにならない cmd.exe の呼び方

go

環境変数を使おう。 func system(cmdline string) error { const CMDVAR = "CMDVAR" orgcmdarg := os.Getenv(CMDVAR) defer os.Setenv(CMDVAR, orgcmdarg) os.Setenv(CMDVAR, cmdline) cmd1 := exec.Command("cmd.exe", "/c", "%"+CMDVAR+"%") cmd1.Stdout =…

Goの"/path/filepath" に「拡張子を除く関数」がないのが辛い

go

まぁ、自分で書いても数行なんですけどね without.go func withoutExt(fname string) string { ext := filepath.Ext(fname) return fname[:len(fname)-len(ext)] }

手短なクロージャーの説明を考えてみた。

関数の中で関数を定義できる 子関数は親関数のローカル変数を参照できる 子関数は親関数の外部にも放り出せて、そこでも親関数のローカル変数を参照できる ただし、子関数が定義された時点で見えていた変数のみ

「git new」コマンドをでっち上げる(Windowsでgitのサブコマンドを作る)

git

自分の場合、新規レポジトリを作る際、いつも定番的に実行しなければいけない作業がある git init 最初に空コミット作成 改行コード変換の無効設定 日本語ファイル名はそのまま表示させる メールアドレス等の設定 次の記事によると、「git-XXXX」という実行…

github の Releases のダウンロード数を curl と jq でお手軽に調べたいッ

次のような API があるようだ。 Releases | GitHub Developer Guide → List releases for a repositor 「GET /repos/:owner/:repo/releases」の意味が分かりにくいが、「:owner」と「:repo」を、レポジトリのオーナー名とレポジトリ名に置き換えればよいよう…

自前の io.* ライブラリを構築中

nyagos内蔵Luaで「lua_e "for line in io.lines() do print(line) end" < FILE」が FILE から読み込めない - 標準愚痴出力 ファイルまわりはシェル本体との密接な連携が必要なので、結局、io.* 以下の関数を全部自前バージョンで置き換えることにした。 最初…

例外がエラー戻り値よりも使いにくいシーンの例(説明用)

Go言語は例外がないのでアウトという人が多いわけですが、自分は「例外が取り扱いにくいシーン」というものを経験しているので、その点は実は肯定的なんですよね。 たとえば、コンストラクタで「様々な例外」が発生する時、下手に try の範囲を広げると「予…

nyagos内蔵Luaで「lua_e "for line in io.lines() do print(line) end" < FILE」が FILE から読み込めない

lua function can not read from STDIN redirected. · Issue #323 · zetamatta/nyagos うん、標準入力をうまいこと GopherLua 内の標準入力にアサインできていないせい で、GopherLua の開発元に相談してみた。 How to do io.input( <*os.File instance crea…

つらい、さすがの reflect も構造体の非公開フィールドに値を無理やりセットする用途には使えないかー

go

package main import ( "reflect" ) type privateOne struct { m1 string m2 string } func sub(from interface{}) interface{} { t := reflect.ValueOf(from).Elem().Type() obj := reflect.New(t) p := obj.Elem() p.Field(0).SetString("foo") p.Field(1)…

CSV を「安全」に Excel に読み込む Go プログラムを書いたー(pipe2excel.exe)

5/2 が「5/2」でなく、日付と解釈されて「5月2日」になってしまう =1+2 が「=1+2」ではなく、計算されて「3」になってしまう 関数まで実行されてしまうので、脆弱性となってしまう これを解決するには勝手に変な解釈がされないように、あくまで「文字列」と…

任意の map[string]~ のキーを全部配列( []string )化してソート

go

map のキーは文字列限定だが、値については任意の型 Ok import ( "reflect" "sort" ) // SortedKeys makes sorted strings' array from keys of the given map whose key's type is string. func SortedKeys(mapInt interface{}) []string { values := refle…

両親の話

亡くなった父は不器用そうに言ったものだ。 「お父ちゃんは何も強制せん。お前の好きなようにしたらええからな」 今、目の前にいる、認知症が進んでしまった母も、昔は 「こうでなかったらいかんというものはない」 などと言ってくれたものだ。 それだけの自…

GENESTUB という汎用スタブモジュールを公開しました。

昔作った子プロセスが想定どおり呼ばれているかテストするためのスタブモジュールを MIT ライセンスで公開します。 Windows用ですが、.NET Framework 4.0 以降が必要です。 zetamatta/genestub: Stub module to test the child-process is called as expecte…

内蔵Luaで実行する際、@ で始まる行を無視するよう修正した

nyagos 4.3 で、バッチファイルに Lua を組み込んで実行する際、内蔵Lua が 5.3 から 5.1 になったため、ラベルの文法がなくなって @setlocal & set "ARGS=%*" & nyagos.exe --norc -e "_,_,b=io.input([[%~f0]]):read('*l','*l','*a');assert(loadstring('\…

nyagos 内蔵 Lua 組み込みバッチファイルの雛型

nyagos内蔵Lua が 5.1 になったので前の 5.3 向けの方法が使えなくなった donyagos.cmd @setlocal & set "ARGS=%*" & nyagos.exe --norc -e "_,_,b=io.input([[%~f0]]):read('*l','*l','*a');assert(loadstring('\n'..b,[[%~f0]]))()" @endlocal & exit /b %…

自分のマシンの IP アドレスを列挙するコマンドを作った

localhosts 自分の IP アドレスを表示するだけのコマンド。Go の net ライブラリを使った。 IPv4 アドレス UP している loopback でない キーワードが指定されている時は、そのキーワードがインターフェイス名に含まれたものとする マシンのブート時に以下の…

nyagos豆知識!(じゃじゃーん)- 「cd -h」

「cd -h」とすると、それまでたどったディレクトリが一覧で出るよ。もし「-2 C:\Users\hymko」とか表示されたら「cd -2」でそこへ移動できるよ! <DESKTOP-LGGUCRA:~/go/src/github.com> $ cd -h -3 C:\Users\hymko -2 C:\Users\hymko\go\src\github.com\zetamatta\nyagos -1 C:\Users\hymko\go\sr</desktop-lggucra:~/go/src/github.com>…

静的型付け言語に慣れた開発者が AutoLISP でやったアレコレ

(2018.06.02) 「静的型付け言語に慣れた開発者が貧弱なCAD用 Lispでやったアレコレ」からタイトル変更しました 静的型付け言語になれた身としては、欲しい機能がいろいろなくて、つらたにえん。せめて、CommonLisp だったら、もうちょっと楽なんだろうなぁ(…

バッチファイルで strtok 的な変数の分割切り出し処理

%PATH% の各ディレクトリを一つずつ処理する(ここでは表示するだけ) @echo off setlocal set "PATHS=%PATH%" :loop for /F "tokens=1,* delims=;" %%I in ("%PATHS%") do ( echo %%I set "PATHS=%%J" ) if not "%PATHS%" == "" goto loop endlocal $ strto…

go get でインストールされる実行ファイル置き場をバッチファイルで得る

%GOPATH%\bin と書いてしまいがちだが %GOPATH% が未定義の時 %USERPROFILE%\go が代替として使われる %GOPATH% に複数のディレクトリが登録されている時 最初のディレクトリが使用される ので、一工夫必要だ。 @echo off setlocal if "%GOPATH%" == "" ( se…

続・nyagos で lua53.dll のかわりに GopherLua を使おう

続・nyagos で lua53.dll のかわりに GopherLua を使おう - Qiitaより転載 続・nyagos で lua53.dll のかわりに GopherLua を使おう 「nyagos で lua53.dll のかわりに GopherLua を使おう - Qiita」の続き: β2 を出しました。 Release 4.3_beta2 · zetamat…

nyagos で lua53.dll のかわりに GopherLua を使おう

2018/04/25 付け記事:nyagos で lua53.dll のかわりに GopherLua を使おう - Qiitaより転載 nyagos で lua53.dll のかわりに GopherLua を使おう Using GopherLua instead of lua53.dll · Issue #300 · zetamatta/nyagos lua53.dll にはいくつか問題があり…

連休中の作業メモ(4/30)

nyagos 4.3β lua53.dll を GopherLua にリプレースしたバージョンの初バイナリ Typing C-o looks to raise hang up until Enter or ESCAPE is typed (on 4.3beta) 出してからしばらくして、Lua とは関係ないreadline.Console の bufio.Writer 化した際の Flu…

let のない Lisp で lambda を let のかわりにつかう

無いものを嘆いていても仕方がないので、できることを模索しよう。 autolisp系のLispでは let が使えず、ローカル変数は、関数の頭でしか宣言できない。また、use strict 相当のものがないため、関数が長くなるとローカル変数の宣言漏れがないかどうかをチェ…

F-Secureという Anti-virus が NYAGOS を誤検出したらしいので、誤検出を報告した

登録ページ:https://www.f-secure.com/en/web/labs_global/submit-a-sample 件名「I heard your product reports my open source software as malware」 I am developing the Open Source Software: NYAGOS(Nihong Yet Another Going Shell). https://githu…

NYAGOS 4.2.5βが、いかにしてバッチファイルでの環境変数の変更取り込みを可能としたか

通常、環境変数は親プロセスから子プロセスへの一方通行で継承されるものであり、逆はありえない。 CMD.EXE で「環境変数設定バッチ」というものが成り立つのは、バッチファイルを子プロセスではなく、バッチファイルを呼び出しているCMD.EXEプロセス自身で…

Appveyor がまだ Go 1.10 をサポートしてなかったので、自前で取ってくるよう設定した

go

strings.Builder を使いたくて、ローカルの環境を Go 1.10 にしたが、Appveyor がまだ Go 1.9.2 のままだ。そのせいで、git push するたびに失敗マークがついてしまう。 Appveyor のサポートサイトを適当に見てみたら、Go 1.3 しか入っていない頃に書かれた …

現在いるページの URL とタイトルと選択テキストを mstdn.jp へ投稿するブックマークレット

twitter のものを適当に変えてみた。前にやった時はダメダメぷぅだったんだが… ますとどん、バージョンアップして出来るようになったのかな? javascript:(function(){var v=window.getSelection();window.open('http://mstdn.jp/share?text='+encodeURIComp…