タグ

ブックマーク / tyru.hatenablog.com (129)

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

    github.com これで WSL 上であろうとなかろうと意識せず URL を開けるはずです。 最近は WSL の Vim ばっかり使ってるので個人的にうれしい機能追加です(追加したの自分だけど)。 WSL は Windows の世界と分断されてると思い込んでたのですが、 /mnt で Windows のファイルシステムを触れるのは知ってたものの、 Windows の実行ファイル(PE フォーマットの実行ファイル)も起動できるのは知りませんでした。 bash から /mnt/c/Windows/System32/notepad.exe とか開けるんですね。 というわけで直接 Windows で動いてる Vim *1 でも叩いてる rundll32.exe を直接叩いて URL を渡すだけでした。あっけない。 *1:この表現は誤解を招くような… WSL も同じサブシステム上で動いてるし。な

    open-browser.vim で Windows Subsystem for Linux 上の Vim から URL 開けるようになった - Humanity
  • Go 言語の range は2番目の返り値に同じ参照を返す場合がある - Humanity

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

    Go 言語の range は2番目の返り値に同じ参照を返す場合がある - Humanity
  • Vim の :terminal がもたらすもの - Humanity

    追記 記事を書いた後いろいろ状況が変わって :terminal コマンドが使える Vim が配布されるようになったので、 とりあえず現時点(2017/09/15)での状況を書きました。 tyru.hatenablog.com 序文 今絶賛開発中の Vim の :terminal コマンドについて書こうと思う。 :terminal コマンドを実行するとシェルが開き、Vim 上で操作することができる、というもの。 つまり実質的に Vim は端末ソフトウェアとなった。 その上 Vim script で端末上の様々な内容にアクセスしたり変更することができる。 expect コマンド、parallel-ssh のようなツールを Vim script で自作することも可能となった。 しかし、すでにそれらのコマンドがある以上 Vim プラグインで実現する必要性は薄いだろう。 Vim の :termin

    Vim の :terminal がもたらすもの - Humanity
    lugecy
    lugecy 2017/08/15
  • 最近知った top コマンド tips - Humanity

    今更すぎるけど便利だったので。 top で起動した後に M でメモリ使用量が多い順にソートできる。 P で CPU 使用率。 そしてさらにデフォルトではプログラムの引数は表示されていないが、c と打つと表示できる。 例えば KVM 上で動かしている VM のプロセスをメモリ使用順に並べたい場合、 top で起動した後に M でソートしただけだと VM のプロセスは全て qemu-kvm としか表示されないが、 c を打つと引数も表示されるので何の VM か分かったりする。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 25165 qemu 20 0 3728792 2.960g 7532 S 4.3 19.2 208:59.85 qemu-kvm 25569 qemu 20 0 2679196 1.929g 4488 S 2.6

    最近知った top コマンド tips - Humanity
  • Gitlab 付属の Prometheus exporter を外部に公開する - Humanity

    Gitlab にはデフォルトで Prometheus と node_exporter がパッケージに付属されている。 ただ有効にはなっておらず、かつ単に有効にしただけでは localhost からの HTTP アクセスしか通さない(理由は以下の issue の通りセキュリティのためとのこと)。 gitlab.com これを Prometheus からも監視できるように外部に公開するには、まず /etc/gitlab/gitlab.rb を編集する。 prometheus_monitoring['enable'] = true prometheus['listen_address'] = ':9090' node_exporter['enable'] = true node_exporter['listen_address'] = ':9100' 次に設定を反映させるために $ sudo g

    Gitlab 付属の Prometheus exporter を外部に公開する - Humanity
    lugecy
    lugecy 2017/08/06
  • Rundeck ジョブの実行ノード一覧を Consul から取得する - Humanity

    長い前置き 最近 Consul, Prometheus などを試す記事が続いてますが、 なぜかというと、私はサーバ監視などに Hinemos を使っており、いい加減別のシステムに移行したい欲が強まってきたからです。 tyru.hatenablog.com Hinemos はオールインワンのため、ジョブ管理やら死活監視やら CPU やメモリなどの使用率をグラフで表すなどの機能が全部入ってます。 しかし Hinemos リッチクライアントと呼ばれるツールが Windows しか対応してなくて Windows からしか設定をいじったり見ることができなかったり、あと重かったり、UI がいけてなかったりでストレスが溜まっていました。 Hinemos 5 からは Hinemos Web クライアントという HTTP で見れるクライアントが提供されたらしいので試したかったのですが、 Hinemos 4

    Rundeck ジョブの実行ノード一覧を Consul から取得する - Humanity
  • MSYS2 から Bash on Windows + Cmder に移って、その後 Bash on Windows + wsltty に変えた - Humanity

    Bash on Windows が beta 外れたから MSYS2 から BoW + Cmder な環境に移った。 移ってたんだけど、コピペが Ctrl-C, Ctrl-V とかありえないショートカットキーだったり、 まぁそれは変えればいいんだけど、そもそも重いしウインドウをリサイズすると画面真っ白になったりするから mintty/wsltty に変えた。 github.com wsltty は WSL 用の mintty で、タブは使えないけどこれまで MSYS2 で mintty 使ってたこともあって操作に慣れ親しんでるし、 変えた設定といえば、フォントを Ricty Diminished Discord に変えたのと、 bash のプロンプトに色が付かなかったので $TERM を xterm から xterm-256color に変えたくらい。 マルチプレクサも特に使わない。 自分

    MSYS2 から Bash on Windows + Cmder に移って、その後 Bash on Windows + wsltty に変えた - Humanity
  • Consul を Prometheus と連携させてみる - Humanity

    前回まで Prometheus による監視や、Alertmanager によるアラート通知などを書いてきた。 tyru.hatenablog.com tyru.hatenablog.com ただ設定ファイルを見ると分かる通り、監視対象のノードが増える度に手動で設定ファイルに追記していくのはとても面倒。自動化したい。 幸いにも Prometheus には監視対象を連携システムから取得するための機能が豊富にある。 今回は Consul と連携してノードが増える度に自動で監視対象も増やせるようにする。 サーバとエージェントを同じノードで動かすのは無理のようなので Consul server と Consul agent は別ノードにインストールします。 前回に引き続いてこんな構成になってます。 監視サーバ(ホスト名:promhost) Prometheus server, Alertmanage

    Consul を Prometheus と連携させてみる - Humanity
    lugecy
    lugecy 2017/08/06
  • Prometheus の Alertmanager(と Postfix)でメール通知 - Humanity

    前回 Prometheus server と node_exporter を同じノード上にインストールしてグラフが取れてることを確認したりしました。 なので今度はメール通知をやってみようと思う。 メール通知するためには Alertmanager というアラートを出す専用のやつをインストールして Prometheus server と連携する必要がある。 なので構成としては 監視サーバ(ホスト名:promhost) Prometheus server, Alertmanager, node_exporter(エージェント) 監視対象のサーバ(ホスト名:targethost) node_exporter(エージェント) みたいな形でインストールする。 というわけで前回インストールしたノードを監視サーバにしたてて、新たに別のノードにエージェントをインストールしました。 node_exporter

    Prometheus の Alertmanager(と Postfix)でメール通知 - Humanity
  • CentOS 7 に Prometheus 入れる - Humanity

    VM 作成 ※Prometheus に興味のある人はここは飛ばして構いません。自分用の記録みたいなものです。 まず検証用に KVM の VM を作る。 最初 virt-manager を RLogin + Xming で立ち上げようと思ったらうまく Xming に接続してくれなくて開けなかった。 ここでしばらく迷ってたが、後々 virsh で VM を clone すれば一から作成する必要がないことに気付く。 というかいつもそうやって VM 作ってた。 というわけで以下のコマンドで clone できるらしい。 $ sudo virt-clone --original <コピー元仮想マシン名> --name <コピー先仮想マシン名> --file /var/lib/libvirt/images/<コピー先イメージファイル名> 参考記事:KVMのクローンを利用して新規仮想マシンを作成する :

    CentOS 7 に Prometheus 入れる - Humanity
  • Bash on Windows のショートカット実行で .bash_profile を読み込ませたい - Humanity

    ショートカットはこれ。 自分の場合 C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Bash on Ubuntu on Windows.lnk にインストールされてた。 結論としては ~/.profile に -f ~/.bashrc && . ~/.bashrc を書いて BoW のショートカットのパスは C:\Windows\System32\bash.exe ~ --login(--login を追加)にすれば無事 ~/.profile が読み込まれる。 --login を指定しただけだとコンソールで色が付かなくなるが、なぜかというと ~/.bashrc で環境変数 PS1 を設定してプロンプトに色を付けている ~/.bashrc が読み込まれるのは「対話シェル(-i)」かつ「ログインシェル(–l

  • ロードバイクで家から職場まで片道 17km ほど走った - Humanity

    多分二回目ぐらい(前回もうほとんど忘れてるけど)。 距離はそんなでもないんですが、得られるものが多々ありました。 ロードバイクに乗るとどうしても時間差で吐き気がするほどの頭痛に襲われて休むほかなくなる状態になってしまっていましたが、 目的地に到着した後、1時間半以上寝て休んだ後でスマホで検索し、おそらくその原因が分かりました。 どうやらロードバイクの前傾姿勢は緊張性頭痛のもとになるらしいとのこと。 そのため帰りはなるべく前傾姿勢にならないよう肩に力を入れず走っていたらだいぶ頭痛が軽減されました。 根的には肩周りに筋肉を付けるのがいいらしいということも分かったので、肩回りを重点的にやっていきたい。 あと今更ライトの角度が上過ぎることにも気が付きました。 道路標識ばっかり照らして地面に全く当たってません(点滅するタイプのライトを付けてますが、標識は反射素材なのでチカチカと光って目立ちます)。

    ロードバイクで家から職場まで片道 17km ほど走った - Humanity
    lugecy
    lugecy 2017/07/30
  • SVG の <circle> を <path> で描く - Humanity

    ふと仕事SVG の <circle> タグの代わりに <path> を使って円を描く必要があったので調べたところ、色んな書き方 (描き方) があるらしいことが分かった。 自分が見つけたのは 2の円弧で描画 4の3次ベジェ曲線で描画 8の2次ベジェ曲線で描画 の3通り。1番目が簡単な上に誤差が無いため通常は1番目を使うはず。 *1 詳しくは以下のページにまとめたのでそちらを参照してください。 SVG の <circle> を <path> で描く 何も考えずに ES6 を使って書いたら最新版の Chrome と Firefox で動いてしまったので ES5 で書き直すモチベーションが失われてしまいました。 すみませんが、うまく表示されなかった場合は Chrome 58.0.3029.110 以上 または Firefox 53.0.3 以上 を使ってください。あしからず。 ちなみに今

    SVG の <circle> を <path> で描く - Humanity
  • Vim script に ECMAScript の Observable がほしい - Humanity

    タイトルは前記事からの流用。 最近 Vim script で Java 8 の Stream API を実装する、ということをしている。 tyru.hatenablog.com github.com Vim 8 でも lambda が入ったので、メソッドチェインでどんどん処理を繋げるスタイルの書き方ができると嬉しいとつくづく思っていたからだ(例:JS の Promise)。 ちなみにこの Vital.Stream モジュールを使うと以下のように書けるようになる(適当な乱数を10個生成するコード)。 というわけで開発の方も段々落ち着いてドキュメントを整備したりしているので、 ふと前から作りたかった ECMAScript の Observable を Vim script で実装するということについて考えてみた。 非同期インターフェースを強制することになるので、Vim 8 の +timer 必

    Vim script に ECMAScript の Observable がほしい - Humanity
  • Vim script に Java 8 の Stream API がほしい - Humanity

    ので作ってる。この記事も PR も絶賛更新中。 github.com 一言で言うと underscore.vim + Data.LazyList 的なものがほしかった。 Twitter でぼやいた時の会話。 vital.vim の Data.List って、名前からだと https://t.co/423dfKhtl4([1,2,3,4,5]).filter({x -> x % 2 == 1}).fold_left((a,b) -> a+b) みたいなのできるみたいな印象なんだよなぁ— tyru (@_tyru_) 2017年4月23日 今の Data.List はどちらかというと適切な名前は ListUtils とかな気がする— tyru (@_tyru_) 2017年4月23日 Vim script でもドットの直前に(空白無しで)バックスラッシュ付ければ改行はいけるし、別にメソッドチェ

    Vim script に Java 8 の Stream API がほしい - Humanity
  • to be or not to be - Humanity

    lugecy
    lugecy 2017/05/01
  • 煩悩 退散 方法 - Humanity

    何が思考を妨げているか、という質問を自分に投げかける。 するとそれが浮かび上がってくるので、それを無視する。 しばらくすると頭の中が静かになる。

    煩悩 退散 方法 - Humanity
    lugecy
    lugecy 2017/05/01
  • Windows での最速 Node.js 環境構築 - Humanity

    Windows での Node 環境のセットアップが楽になってるな。npm install -g windows-build-tools だけで済むようになってる。もう手動で Python とかインストールしなくていいのか。 https://t.co/r9KDFUp23Z— tyru (@_tyru_) 2017年3月12日 というわけで Windows で Node.js 環境をセットアップする方法をまとめてみる(もしかして前からこれぐらい簡単だったのかもしれないけど…)。 1. Nodist をインストール Node.js を直接インストールせず、まずは Nodist をインストールする。 github.com 今だと v0.8.8 が最新だった。 2. windows-build-tools をインストール 次に管理者権限で Powershell を起動*1して、npm instal

    Windows での最速 Node.js 環境構築 - Humanity
  • Express で書いてるコードを TypeScript 化した時に対処したこと - Humanity

    tyru.hatenablog.com の続き。 今度は express-generator で自動生成されたバックエンドのコードを TypeScript 化してみる。 tsconfig.json に “allowJs”: true を指定する express-generator のコードは bin/www から app.js を require() する形になっているが、 app.ts から app.js を生成したところ、app.js で module.exports = app しているのに 空の Object {} がエクスポートされてしまう。 おそらく bin/www も TypeScript の仕組みに乗っからないと(TypeScriptトランスパイルしないと) require() できないのだと何となく予測したので、bin/www も .ts 化しようと思った… けどめん

    Express で書いてるコードを TypeScript 化した時に対処したこと - Humanity
  • Promise の処理の流れ - Humanity

    メモ。Twitter に書いたことをそのまんま引用。 https://t.co/O2yTz3ZHGW then() の引数に null 指定したらスキップされるのか。知らんかった— tyru (@_tyru_) 2017年2月15日 @_tyru_ Promise chain のどっかで エラーが起こるか reject された時の処理って拾うには一つ一つ then() の第2引数をしないといけないと勘違いしてた。途中の then() は onRejected が undefined だからスキップされるんだな— tyru (@_tyru_) 2017年2月15日 function taskA() { console.log("Task A"); } function taskB() { console.log("Task B"); } function onRejected(error)

    Promise の処理の流れ - Humanity