go-cmpでuintが16進数で表示される問題を解決した
一ヶ月くらい前だがgo-cmpで uint
が16進数で表示される問題を解決した。
go-cmpは差分がいい感じに表示されるので重宝していたのだがuint系の変数だけ16進数で表示されるのが気になっていた。
https://play.golang.org/p/uE2CalqpkTZ
main.Ints{ - Int: 0, + Int: 255, - Uint: 0x00, + Uint: 0xff, - Uint8: 0x00, + Uint8: 0xff, - Uint16: 0x00, + Uint16: 0xff, - Uint32: 0x00, + Uint32: 0xff, - Uint64: 0x00, + Uint64: 0xff, }
同僚も気にしていて需要がありそうだと思ったのでプルリクを出してみた。
プルリクがマージされて v0.4.1
以上でuint系の変数が10進数で表示されるようになったので同じく気になってた方はぜひバージョンアップしてみてください。
https://play.golang.org/p/dGhSMmjFVnS
main.Ints{ - Int: 0, + Int: 255, - Uint: 0, + Uint: 255, - Uint8: 0, + Uint8: 255, - Uint16: 0, + Uint16: 255, - Uint32: 0, + Uint32: 255, - Uint64: 0, + Uint64: 255, }
ちなみに uint8
のスライスだけは10進数になりません。
https://play.golang.org/p/Osxp1JT_Huc
main.Ints{ Int: []int{ - 0, 0, + 255, 255, }, Uint: []uint{ - 0, 0, + 255, 255, }, Uint8: []uint8{ - 0x00, 0x00, // -|..| + 0xff, 0xff, // +|..| }, Uint16: []uint16{ - 0, 0, + 255, 255, }, Uint32: []uint32{ - 0, 0, + 255, 255, }, Uint64: []uint64{ - 0, 0, + 255, 255, }, }
これは byte
が uint8
の型エイリアスであり、go-cmpが設計思想を「byte
スライスは16進数で表示すべき」としているためです。
#技術書典 応援祭で無料配布している技術書まとめ
技術書典8は中止になってしまいましたが技術書典 応援祭がオンラインで開催されています。
技術書典に行ったことがない人でもオンラインの応援祭であれば気軽に覗けるのではないでしょうか。
この記事では技術書典に興味を持つきっかけになればと思い、応援祭で無料配布されている同人技術書をまとめました。
ぜひ技術書典 応援祭を覗いてみてください。
Vim Pluginに入門してみた #vim
この記事はVim2 Advent Calendar 2019の19日目の記事です。
Vim Pluginを書こう書こうと思ってずっとできていなかったのでAdvent Calendarをきっかけにhello, world的なPluginを書いてみた。
:Hello foobar
と打つと hello, foobar
と返してくれるだけのPluginです。
今回はこのPluginを書くときにわからなくて調べた部分をご紹介します。
Plugin名
特に決まりは無くてvim-foobar、foobar-vim、foobar.vimの3つの流派が居るっぽい。
自分はvim-go、vim-lspを参考にvim-helloと名付けた。
Vim Pluginの開発ディレクトリは決まっている
Vim起動時に読み込まれるディレクトリが決まっている。
そのディレクトリは何個かあるが、ユーザが一番使いやすそうなのは ~/.vim/pack/*/start/
です。
*
は1つのディレクトリ。
(複数ディレクトリあると読み込まれないので注意。)
自分は ~/.vim/pack/plugins/start/vim-hello
に置いた。
ディレクトリ構成
plugin
と autoload
というディレクトリが必要。
├── autoload │ └── hello.vim └── plugin └── hello.vim
plugin
配下にあるファイルはVim起動時に読み込まれるファイル。
autoload
配下にあるファイルは必要になった時に読み込まれる。
コマンド定義は plugin
で関数は autoload
というように覚えておけば良さそう。
-nargs
で引数ありコマンドを定義
コマンドの引数を取得したい場合 -nargs
を使って引数を何個取るのか設定できます。
-nargs=0 引数なし -nargs=1 引数 1 個 -nargs=* いくつでも -nargs=? 引数なし、もしくは 1 個 -nargs=+ 引数 1 個以上
自分は引数1個以上取りたかったのでこんな感じで書きました。
command! -nargs=+ Hello call hello#hello(<q-args>)
また、<q-args>
は特殊文字が入っていても適切にエスケープしてくれる引数指定です。
クオートの例が紹介されていて、クオートを適切に表示するなら <q-args>
の方が良さそうだったので使用しています。
関数の引数は a:
でアクセス
Vim Scriptではよく g:
や l:
がついた変数を見ます。
これはスコープを指していて g:
ならグローバル、l:
ならローカルといった具合です。
しかし、引数はちょっと特殊で a:
を使います。
a:
をつけないで引数にアクセスしようとすると「未定義の変数です」と言われてしまうので注意。
まとめ
というわけで駆け足でしたが自分がhello, world的なPluginを書いた時に調べた箇所をご紹介しました。
一度hello, world的なPluginを作ってしまえばそこを足がかりに色々試したりできそうです。
そして試したことを切り出して新たにPluginを作っていけたらいいな。
Go言語で画像生成のテストを書く #golang
この記事はGo3 Advent Calendar 2019の18日目の記事です。
この記事ではGo言語における画像生成のテスト方法を紹介します。
画像生成というのはロジックに手を入れていなくてもライブラリがアップデートされたタイミング等でバグりやすい箇所です。
テストを用いてデグレの確認を常に行いましょう。
VimConf 2019参加レポートを書いた
自分のブログからもリンクしておきます。
VimConf 2019に参加した皆さんのブログを書くスピードが速くて自分もなんとか今週中には出したいと思っていたので間に合ってよかったです😎
今夜はVimConfのアイスクリームスプーンとハーゲンダッツで祝杯をあげようと思います。
#vimconf で貰ったVimアイスクリームスプーンでハーゲンダッツ🍨
— 178inaba (@178inaba_) November 6, 2019
(普段はハーゲンダッツに高くて手が出なくても「VimConfのスプーン試すためだから仕方ないよね」という言い訳ができます)
一口食べるとまるでVimConf会場に居るかのような気分 pic.twitter.com/1rfgj1y4Gs
YubiSwitch を使って YubiKey の誤作動を防ぐ方法
皆さん YubiKey 使ってますか?
私は YubiKey 5C Nano を使っています。
Yubico YubiKey 5C Nano Two Factor Authentication Security Key - Black - USB-C[cb]
- ジャンル: パソコン・周辺機器 > パソコンパーツ > その他記憶装置(内蔵型) > その他
- ショップ: コンビニマート
- 価格: 10,560円
この YubiKey 5C Nano はちょっと触れただけで One Time Password (以下 OTP) を発行するという物でサクッと入力できて便利な反面、困ったこともあります。
具体的には
- Slack に OTP を投稿してしまう。
- Jira のキーボードショートカットに引っかかり、新しいチケットを作成してしまう。
- Twitter のキーボードショートカットに引っかかり、通知に飛んでしまう。
などです。
今回はそれを解決します。
続きを読む