Humanity

Edit the world by your favorite way

panic() するか non-nil error が返ったらロールバック用の処理を実行するユーティリティ構造体 Guard を作った

Go

こんな感じに使う。 package main import ( "errors" "fmt" ) func main() { fmt.Println("start") if err := f(); err != nil { fmt.Println(err.Error()) } fmt.Println("end") } func f() (err error) { fmt.Println("f() start") g := &Guard{} defer fu…

Go の hashicorp/go-multierror 使ったら訳わからん挙動に遭遇してしまった

Go

基本的な Go の挙動が理解できてないのかもしれないですが、なぜ以下のコードで (2) err != nil: true となるのかが分かりません。 誰か教えて… (g() がメソッドなのはなるべく元のコードと似せたせいです) gist.github.com 追記 KoRoN さんとりんだんさんに…

MongoDB で190万件あるコレクションに $regex で LIKE 検索する時にパフォーマンスの観点で気を付けること

150万以上ある Mongo のレコードに LIKE 検索したい時こうすると雲泥の差になった (1分以上かかってたのが 50ms 以下になった)。①インデックスを使う ($hint 指定しないと $regex の場合は使われないっぽい)②パターンの頭に ^ を付ける③パターンに .* を使わ…

Puppeteer で楽天銀行の入出金明細を保存

以前楽天銀行でワンタイムパスワードを突破しつつ明細履歴を TSV ファイルに保存するスクリプトを書いた。 ワンタイムパスワードのメールを受け取って本文をパースするために IMAP にログインしてメールが来るまで待つ、みたいな事をしている。 tyru.hatenab…

AppVeyor で Go のバージョンを固定する方法

基本的に Go アプリのテストは以下を参考にしたら概ねうまく言ってたんだけど、 (最新じゃなく)バージョン固定してる場合に問題となったため書いておく。 blog.markvincze.com 起こった問題 最近 AppVeyor の Go のバージョンが上がって Go 1.10 をデフォ…

ロガー用 vital モジュールを作った (ただし Vim 8 専用)

Vim

まだ vim-jp/vital.vim には PR してないけど十分使える (使えてる)。 https://github.com/tyru/nesk.vim/blob/0775e7d6fb3502ce52b64911d84b19cde32825aa/autoload/vital/__nesk__/Nesk/Log.vim https://github.com/tyru/nesk.vim/tree/0775e7d6fb3502ce52b…

最近の Vim で入った面白 Vim script 関数

Vim

:h eval.txt を眺めてたら結構色々関数追加されてるなーと思ったのでまとめてみた。 (追記: 結構古くからある関数も交じってた…) 基本的に詳細な仕様は書くつもりはありません (古くなるかもしれないし help 見た方が正確)。 wordcount() g<C-g> を押すと現在のバ</c-g>…

Vim script で Chrome Debugging Protocol を扱うライブラリを作りたい

Vim

github.com タイトルの通りなのですが、Chrome Debugging Protocol (以下 CDP) を扱うためには、 CDP は WebSocket ベースなので WebSocket を実装しなきゃならない バイト列をパースする際にヌルバイトを Vim では扱えない となって悩んでいます。 ヌルバイ…

Unicode の文字情報を開く Vim プラグイン作った

ふと必要になったので作りました。 github.com 動作には open-browser.vim が必要です。 github.com なにこれ Vim から FileFormat.Info の指定された文字のページをブラウザで開くプラグインです。 えっどういうこと? Vim でファイルを開いている時にふと…

netupvim で Windows でも最新の Vim を追いかけよう

これは Vim Advent Calendar 2017 その2 の21日目の記事です。 github.com 内容は上記リポジトリの README.md のパクリです。 netupvim 便利だよ!って事が言いたかった。 序文 Windows で Vim を使っているとふと最新の Vim を欲しい時があります。 そんな…

Vim 8 時代のがんばらないプラグイン管理のすすめ

Vim

これは Vim Advent Calendar 2017 の20日目の記事です。 皆さん Vim しておられるでしょうか。 Yes と答えた方、プラグインマネージャーは使っていますか? 巷では Vim のプラグイン管理にはプラグインマネージャーを入れる必要があるかのような勢いで「まず…

GitHub や BitBucket で強制的に https:// の代わりに ssh の URL を使う

stackoverflow.com GitHub git config --global url.ssh://git@github.com/.insteadOf https://github.com/ BitBucket git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/ 特定のユーザだけ ssh の URL を使う (2018/12/08…

GitHub の organization アカウントのリポジトリを AppVeyor に追加する

Go のコマンドラインアプリの AppVeyor 対応したので雑なログ。 ここを参考にした。 Organization 用の AppVeyor アカウントを Sign Up から作る 自分のメインの AppVeyor アカウントを Administrator role で Collaborator として追加する Collaborator を…

Go のオプション引数で -v -v -v みたいに複数指定する方法

Go

mattn さんに教えてもらった。 いつもお世話になってて感謝しかない。 -d dir1 -d dir2 みたいな引数を持つオプションを複数指定する方法 Go の flag パッケージで複数オプションをパースするにはどうしたらいいんだろ。-d dir1 -d dir2 で [dir1, dir2] の…

Windows Subsystem for Linux で便利な alias (clip)

WSL

alias clip=/mnt/c/Windows/System32/clip.exe echo Hello | clip とかしてクリップボードにコピーできて便利。

godoc.org と github.com のリポジトリを切り替えるブックマークレット作った

Go

godoc . org と github . com のリポジトリを切り替える雑なブックマークレット作ったhttps://t.co/VwKlEeWUqW— tyru (@_tyru_) 2017年9月17日 gist.github.com 以上です。

:terminal コマンドが使える Windows 版 Vim の配布状況 (2017/09/15 時点)

Vim

tyru.hatenablog.com この記事を書いた後 Windows でも :terminal コマンドが使える Vim が配布されるようになったのでその配布状況をメモしておく。 Vim バイナリの配布 URL 一覧 まず初めに Vim のバイナリへのリンク集を vim-jp では提供しているので貼っ…

Go の net/http で Vue.js / Angular 1 などの HTML5 history mode に対応する

Go

type html5Handler struct { fs http.FileSystem routes []staticRoute } // Look up path when Vue.js HTML5 history mode is enabled // https://router.vuejs.org/ja/essentials/history-mode.html func enableHTML5Mode(fs http.FileSystem, routes []st…

open-browser.vim で Windows Subsystem for Linux 上の Vim から URL 開けるようになった

Vim

github.com これで WSL 上であろうとなかろうと意識せず URL を開けるはずです。 最近は WSL の Vim ばっかり使ってるので個人的にうれしい機能追加です(追加したの自分だけど)。 WSL は Windows の世界と分断されてると思い込んでたのですが、 /mnt で Wi…

Go のバージョンマネージャー gvm で gvm install したら「ERROR: Failed to compile」って言われた時

Go

github.com issue には上げたけど日本語でも書く。 結果から言うと自分が README.md よく読んでなかっただけ。 でも gvm ももうちょっと気を利かせてくれてもいいのになーと思ったので上の issue でお願いしたという経緯です。 解決法 Go 1.5 以上をコンパイ…

Go 言語の習作に watchevent ってファイルシステム監視するやつ作った(おまけに Subsonic で音楽ファイルを追加・削除されたタイミングでスキャンさせる方法)

Go

習作って言っても以前 Go 触ってたことはありましたが、 そのツールを作ったこと自体忘れてたぐらい記憶が抜け落ちていたので、改めて Go に再入門しました。 作ったもの 使い方は README.md 読んでください(まだ不十分だと思いますが、分からない点は issu…

Go 言語の range は2番目の返り値に同じ参照を返す場合がある

Go

言葉で説明するのだるいので次のコードを見てください。 package main import ( "fmt" ) func main() { array := []int{1, 2, 3} // これだと &a が同じアドレスになってしまうことがある // (range は array[i] のコピーを返す) for i, a := range array { …

Subsonic に不満があったので OSS 版の Libresonic をインストールしてみた

追記 続編です。 これと組み合わせれば Subsonic でも曲をフォルダに置いたら即スキャンしてくれるようになります。 tyru.hatenablog.com 本文 ずっと Subsonic というストリーミングサーバーを使っていた。 1ドル /月 払えば Android アプリでも接続できる…

Vim の :terminal がもたらすもの

Vim

追記 本記事を書いた後いろいろ状況が変わって :terminal コマンドが使える Vim が配布されるようになったので、 とりあえず現時点(2017/09/15)での状況を書きました。 tyru.hatenablog.com 序文 今絶賛開発中の Vim の :terminal コマンドについて書こう…

最近知った top コマンド tips

今更すぎるけど便利だったので。 top で起動した後に M でメモリ使用量が多い順にソートできる。 P で CPU 使用率。 そしてさらにデフォルトではプログラムの引数は表示されていないが、c と打つと表示できる。 例えば KVM 上で動かしている VM のプロセスを…

Gitlab 付属の Prometheus exporter を外部に公開する

Gitlab にはデフォルトで Prometheus と node_exporter がパッケージに付属されている。 ただ有効にはなっておらず、かつ単に有効にしただけでは localhost からの HTTP アクセスしか通さない(理由は以下の issue の通りセキュリティのためとのこと)。 git…

Rundeck ジョブの実行ノード一覧を Consul から取得する

長い前置き 最近 Consul, Prometheus などを試す記事が続いてますが、 なぜかというと、私はサーバ監視などに Hinemos を使っており、いい加減別のシステムに移行したい欲が強まってきたからです。 tyru.hatenablog.com Hinemos はオールインワンのため、ジ…

MSYS2 から Bash on Windows + Cmder に移って、その後 Bash on Windows + wsltty に変えた

Bash on Windows が beta 外れたから MSYS2 から BoW + Cmder な環境に移った。 移ってたんだけど、コピペが Ctrl-C, Ctrl-V とかありえないショートカットキーだったり、 まぁそれは変えればいいんだけど、そもそも重いしウインドウをリサイズすると画面真…

Consul を Prometheus と連携させてみる

前回まで Prometheus による監視や、Alertmanager によるアラート通知などを書いてきた。 tyru.hatenablog.com tyru.hatenablog.com ただ設定ファイルを見ると分かる通り、監視対象のノードが増える度に手動で設定ファイルに追記していくのはとても面倒。自…

Prometheus の Alertmanager(と Postfix)でメール通知

前回 Prometheus server と node_exporter を同じノード上にインストールしてグラフが取れてることを確認したりしました。 なので今度はメール通知をやってみようと思う。 メール通知するためには Alertmanager というアラートを出す専用のやつをインストー…