私が歌川です

@utgwkk が書いている

VSCodeの拡張機能ちまちまアップデートしてる

utgwkk.hateblo.jp

marketplace.visualstudio.com

真夜中に作りはじめて1時間ぐらいでv1.0.0が公開されたVSCode拡張機能をちまちま修正してpublishしてたらv1.5.4まで来た。v1.0.0からv1.5.4までの変更点をここに書きつらねておきます。

バージョニングまだよくわかってなくて、新機能が増えたらマイナーバージョン上げる、みたいな運用をしてる。

v1.0.0

  • 初版

v1.0.1

  • 表示名を vscode-perl-insert-package から Perl insert package に変更した

v1.0.2

  • カテゴリを設定した
  • アイコンを設定した

v1.0.3

  • デバッグ出力を消した
  • エラーメッセージをエラーメッセージぽい感じでポップアップ出力するようにした
  • Perlのコード開いたときだけ拡張機能を有効化するようにしてみた

v1.0.4

  • 変更なし
    • なんかうまくアップロードできてない気がすると思ってpublishし直した気がする
    • marketplace上の変更の反映に時間がかかるだけだった

v1.1.0

v1.2.0

  • TextEditorCommand としてコマンドを登録するようにした

v1.3.0

  • 先頭の / しか :: に変換できてなかったのでぜんぶ変換するようにした

v1.4.0

  • コマンドだけでなく補完もできるようにした

v1.5.0

  • 設定ファイルでパス→パッケージ名の変換ルールを調整できるようにした

v1.5.1

  • いつでも補完が出てたので packa と打ったときに補完が出るようにした

v1.5.2 - 1.5.4

  • デフォルトのパスの区切り文字として path.sep を使うようにした
    • publishしたあとに見落しがあったので3度アップデート

VSCodeでPerlのpackage宣言を挿入してくれるperl-insert-packageっていう拡張機能を出した

Perlでモジュールを書くとたいてい先頭に

package Hoge::Fuga::Piyo::Payo;

のような宣言を書くことになると思います*1。 最初のうちはいいけど、名前空間がだんだん複雑になっていくと、これは単に写してるだけでは?? となってきます。

ところで、ファイルパスからパッケージ名への変換は、たいていの場合すごく素朴に行えるのではないでしょうか。

  • 先頭の lib/ を消す
  • 拡張子の .pm を消す
  • /:: に変換する

ということでそれをコマンド1つで実行してカーソルの位置に挿入してくれる拡張機能を作って出しました。ご活用お待ちしております。

marketplace.visualstudio.com

利用方法は以下の動画が全てを物語っています。

2019/10/29追記: このたび、コマンドだけでなく補完にも対応しました。よりストレスフリーにパッケージ宣言ができるようになりました。

2019/10/29追記: このたび、 packa と打つまで補完されないようにしました。何を打ってもどこでも補完されるとさすがにうっとおしいし、 pack という組み込み関数とかぶるからです。

Image from Gyazo

Image from Gyazo

動機

VSCodeスニペットにはVariable Transformsという機能があって、ファイルパスが入った変数に対して正規表現でエイヤッと置換したスニペットを吐く機能があります。 それだけでできるのではと思ったけど、微妙に表現力が足りなかったので拡張機能にしました。

これぐらい単純なのだともうあるのでは、と思ったけどmarketplaceで探した限り見つからなかったので、公開しました。

*1:Perl歴が浅いので間違ってたら誰か教えてください

goreleaserのmainの指定方法

goreleaserはGoのプログラムをGitHubのreleasesとかHomebrewとかに簡単にリリースしてくれるプログラム。

goreleaserの設定ファイルでmainパッケージの位置を指定できるけど、指定方法によって挙動が変わる(し、あまりちゃんとドキュメントに書いてない気がする?)ので備忘録的にメモしておく。

goreleaser.com

たとえば go get github.com/utgwkk/hoge/cmd/hoge でインストールされるバイナリ*1をリリース対象としたいときを考えると、以下の指定が考えられると思うけど、正しく動くのは1つ(2つ)だけ。

./cmd/hoge/main.go

./cmd/hoge/main.go 単体で動くならこれでも問題ないと思う。 main.goが ./cmd/hoge/ 以下のプログラムに依存していてもうまく見てくれないのでファイルを分けているとこれでは動かない。

cmd/hoge

cmd/hoge モジュールを探しにいくけどおそらく存在しないし、存在したとして違うものが発見されるので間違い。

./cmd/hoge

これが正しい。相対パスディレクトリを指定する必要がある。

最終的に完成した設定ファイルがこちら。

justify/.goreleaser.yml at 12e1147dc6ea2f5cd27ff42d237f068c927634df · utgwkk/justify · GitHub

*1:つまり、mainパッケージがリポジトリの直下にないとき

ターミナルでテキストを中央揃えにするコマンド justify 作った

ターミナルの幅に合わせて文章を中央揃えにしてくれるコマンドを作りました。ご活用ください。

github.com

go get github.com/utgwkk/justify/cmd/justify でインストールできます。

READMEにあるように、リダイレクトやパイプで入力を渡すと、中央揃えにして出力してくれます。 アスキーアートにも対応しています。

注意点があって、おそらくWindows (cmd.exe) では動きません。ターミナルの幅を取得するのに tput コマンドを使っているためです。 めでたくWindowsにも対応することができました。

VJに使えそうなコマンドたち

いろいろなコマンドあるけどVJに使えそうなものがけっこうあるのではないか。

絶えず出力し続ける系

無限に出力しつづけるコマンドはVJに使えるのではないか。

dstat

情報がどんどん積み重なっていくのがおもしろい。

htop

top でもよい。CPU利用率とかプロセスリストとか変化しまくっておもしろいと思う。

yes

単純かつ速がある。

od -a /dev/urandom

記号列がどんどん出てきておもしろいと思う。

インパクトのある出力をする系

cowsay

 ____________________
< 牛が出ておもしろい >
 --------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

figlet

 _   _      _ _
| | | | ___| | | ___
| |_| |/ _ \ | |/ _ \
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/

sl

SLが通過しまくる。marqueeタグみたいな趣が出そう。

その他

tmux

windowごとに別々のコマンドを実行して、window切り替えまくったらおもしろい感じにできそう。

ワンライナー

組み合わせ無限大なので、いくらでもおもしろいの作れそう。

様子

けっこう戦えそうな気がしてきた。いかがでしょうか?

gyazo.com

マガポケで、金田一少年の事件簿外伝 犯人たちの事件簿が、今日*1限り全話無料公開されていたので一気読みした。

pocket.shonenmagazine.com

金田一少年の事件簿は、大昔に公民館の本棚にあったのをいくつか読んだぐらい。オペラ座と七不思議学園だけ覚えてて、ほかは読んだことない気がする。

*1:2019/10/23