basyura's blog

あしたになったらほんきだす。

nginx + plantuml

docker で plantuml 入れたら終わりと思ったらポートは 80 しか開放してなくてホストの nginx で振り分ける構成になってた。

http://サーバー:8081/plantuml のように prefix を付けてアクセスするためには webapps/ROOT.warwebapps/plantuml.war に変えればいいだけだった。

$ docker exec -it plantuml /bin/bash
$ pwd
/var/lib/jetty
$ cd webapps
$ mv ROOT.war plantuml.war

nginx の設定を conf.d に置く。

server {
    listen       80;
    server_name  localhost;

    location  /plantuml/ {
        proxy_pass   http://localhost:8081/plantuml/;
    }
}

nginx の再起動

$ nginx -s reload

これで http://サーバー/plantuml でアクセスできる (はず)。

dokuwiki も java 入れたりしなくても plugin 設定でサーバ url 指定すればよかったので、plantuml のサーバを一個立てればいろいろ使えそう。 confluence でも使えるようにしたいけど設定周りを触ったこと無いのでよく分からない。

Inkdrop - PlantUML Plugin

手元でも UML (クラス図とシーケンス図くらい) を書きたいけど、公式サーバ ( https://plantuml.com/plantuml ) にリクエストを送りまくるのも嫌なので会社の適当なサーバにこっそりコンテナを追加したいのでローカル環境でまずは試してみる。

$ docker run -d -p 8081:8080 plantuml/plantuml-server:jetty

Server Url を http://localhost:8081/ に変更。

f:id:basyura:20200413220202p:plain

適当に書いてみる。

f:id:basyura:20200413220504p:plain

便利。

go - xlskiller

ActiveX な社内システムなせいか、タブ化するソフトを入れてるせいか Excel のプロセスが大量に残ってしまうことがよくある。タスクマネージャーから消すのもだるいのでプロセスを kill するやつ。

package main

import "github.com/shirou/gopsutil/process"

import "fmt"
import "strings"

func main() {
    procs, err := process.Processes()
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, proc := range procs {
        name, err := proc.Name()
        if err != nil {
            continue
        }
        if strings.HasPrefix(name, "EXCEL") {
            fmt.Println("Kill " + name)
            err := proc.Kill()
            if err != nil {
                fmt.Println(err)
            }
        }
    }
}

inkdrop-vim v2

プレビューモードでスクロール

v2 にメジャーバージョンアップしてプレビューモードでも j k ctrl-d ctrl-u でのスクロールができるようになって便利。ctrl-d ctrl-u の挙動が半ページスクロールじゃなくて 1 ページスクロールになっていたので通報したらすぐ直してもらえた。嬉しい。

keymap.cson に定義していたキーが効かなくなったのがびっくりしたけど prefix が vim-mode から vim に変わったようだ。

'.CodeMirror.vim-mode:not(.insert-mode):not(.key-buffering) textarea':
    '0': 'vim:move-to-first-character-of-line'
    'ctrl-e': 'vim:move-to-last-character-of-line'

今までは常にエディタモードだったけどプレビューモードも有りかなと思い始めてる。となると、Hit a Hint が欲しくなっちゃう。

リンクを開きたい

normal mode で enter 時に url をブラウザで開くか、note の場合はそれを表示する挙動をしたくて PR を送ったら本体で実装してくれる回答をもらったので楽しみにしている。今のところは以下を定義して待機中。

init.js

inkdrop.commands.add(document.body, "mycmd:open-link", () => {
  const editor = inkdrop.getActiveEditor()
  const { cm } = editor
  const cur = cm.getCursor();
  const token = cm.getTokenAt(cur);
  if (token.type == "url") {
    open(token.string);
  } else if ((token.type = "string url")) {
    const link = token.string.replace("inkdrop://", "");
    inkdrop.commands.dispatch(document.body, "core:open-note", {
      noteId: link
    });
  }
});

keymap.cson

'.CodeMirror.vim-mode:not(.insert-mode):not(.key-buffering) textarea':
    'enter': 'mycmd:open-link'

僕の実装だとカーソルが左端に合って url も左端から記載されてる場合にリンクが判定されないのがちょっともにょる。カーソル行にあるリンクを開くような挙動にしても良さそう。

まとめ

またひとつ便利になった。

プレビューモードで見るとタイポを見つけやすいのはなんなんだろう。 紙に書いてたのを印刷したら間違いが分かりやすいのに似てる。

inkdrop - 検索のキーバインド

karabiner で Cmd+Shift+fctrl+q に当ててたけど keymap.cson の設定でできた。

'.CodeMirror.vim-mode.visual-mode textarea':
    'v': 'vim-mode:move-to-last-character-of-line'

'body':
    'ctrl-q': 'core:find'

ようやく検索とノートの切り替え周りがスムーズになってきた。 ただ、検索自体は期待したものが上がってこないのか、並び順なのか検索結果を選ぶのがスムーズにいかないのでなんとかならないか見てみてる。

inkdrop - 独自コマンドを追加

↑ この辺を見ながらプラグイン化せずに ctrl+@ で active 一覧を表示する独自コマンドを追加してみる。

init.js

inkdrop.commands.add(document.body, 'mycmd:select-active', () => {
  inkdrop.commands.dispatch(document.body, "core:note-list-show-notes-with-status", {
    "status" : "active"
  })
})

keymap.cson

'body':
    'ctrl-@': 'mycmd:select-active'

inkdrop - sidetoc plugin

f:id:basyura:20200408222807p:plain

inkdrop で toc をサイドバーに表示するプラグイン。ある程度できたので公開。いきなり v1.1.0 になってしまったりとかあったけど。事前に tag をつけないで ipm publish minor で良かったっぽい。

↓ publish するとメッセージが表示されて嬉しかった。

f:id:basyura:20200408223221p:plain

機能

  • ヘッダ行を階層表示
  • カーソル移動時、スクロールバー操作時に該当位置のヘッダをハイライト
  • クリックで該当箇所にジャンプ
  • 設定でハイライト色とサイドバーの幅を変更可
  • サイドバー表示、非表示のショートカットキーあり (デフォルトは Ctrl+l)

キー入力やカーソル移動のイベントのたびに評価が走るので性能が微妙かと思ったけど特に問題は無さそう。いくつか TODO があるので勉強しながら継続改善予定。

plugin を作ると永久無料になる特典があるのだけど、 年契約でまだ半年も経ってないし応援したいのもあるので plugin 作成をもうちょっと頑張ってから申請してみたいなと思っている。