basyura's blog

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

Switch 用のディスプレイ購入

↑ 新規購入

↑ もともと使っていたファミコンっぽい色のモニタ。気に入ってたけど 2 年ちょいでダメになったっぽい。Switch 用のモニタとして使っていたのだけど GW 初日に画面出力されなくなった。辛かった。PC に繋いだら出力されたので USB-C のコネクタか Dock が問題なんだろうと思って両方追加で買ってしまったのだけど結局モニタだった。HDMI - mini HDMI ケーブルが問題の可能性もあるけどこれ以上購入して検証するのもだるいので保留中。最悪、本体修理で 1ヶ月の可能性もありそうだったのでよかった。

新しいディスプレイは 11 inch → 13.3 inch で大きくなった上に表示も綺麗なので気に入っている。音量の変更ができないのかと思って 1 時間ぐらいガックリしていたけど (その発想はなかった) 、横のスイッチをぽちぽちしてたら変更できることが分かって一安心。

ある時期からでかい画面 (といっても 21 inch とか) を見るのがしんどくて、仕事中もノートpc の 13.3 inch ディスプレイを超えるとしんどくて見てられなくなる病なので (最近だいぶ良くなってきたけどつらい) 、ちょうどよいサイズ。このモバイルモニタと apple keyboard を使えばいい感じの環境になりそうな気がしているので家で試してみていい感じだったら会社でもスタンド付きで買ってもらいたいなぁ。

GitLab - Hashed Storage

v10.0 からリポジトリパス(/var/opt/gitlab/git-data/repositories 配下のパス)をハッシュ化する機能がリリースされていて、v12.0 でデフォルト ON に変更された。

プロジェクト名やグループを変更した際にディスクのパスが変更されていたけど、プロジェクトID を hash 化したパスを使うことでそれがなくなった。特定のグループに偏ることなくフラットに配置されるので色々とディスクに優しくなるらしい。

管理画面でプロジェクトのパスを確認できる。

To access the Projects page, go to Admin Area > Overview > Projects
and then open up the page for the project.
The “Gitaly relative path” is shown there, for example:
"@hashed/b1/7e/b17ef6d19c7a5b1ee83b907c595526dcb1eb06db8227d650d5dda0a9f4ce8cd9.git"

新規のプロジェクトを Hashed Storage にするかは管理画面で設定できる。

1. Go to Admin > Settings > Repository and expand the Repository Storage section.
2. Select the Use hashed storage paths for newly created and renamed projects checkbox.

ID 指定で migration できる。

sudo gitlab-rake gitlab:storage:migrate_to_hashed ID_FROM=50 ID_TO=100

逆に元のプロジェクト名のフォルダ構成に戻す方法もある

sudo gitlab-rake gitlab:storage:rollback_to_legacy

Rails console から該当プロジェクトを引く方法もある。

Project.find(16).disk_path
ProjectRepository.find_by(disk_path: '@hashed/b1/7e/b17ef6d19c7a5b1ee83b907c595526dcb1eb06db8227d650d5dda0a9f4ce8cd9').project

いろいろ機能追加されていってて便利に。

dokuwiki で plantuml

dokuwiki に前からある plantuml plugin はそのままじゃ動かなくなってて、代わりに plantumlparser ができてた。 ただ、サーバーを指定できなくて plantuml 公式の方にリクエストを投げるしかなかった。 せっかく社内に docker で plantuml サーバーを立てたのでこちらに投げたいと思っていたらちょうど MR が作成されてた。

MR がマージされたので、さっそくインストールしてセットアップ完了。

plantuml を動かせる環境が増えたのでまた一つ便利に。

docker x509: certificate has expired or is not yet valid

docker x509: certificate has expired or is not yet valid

windows に入れてた docker toolbox の証明書がいつの間にかきれてた。

You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.

Be advised that this will trigger a Docker daemon restart which will stop running containers.

docker-machine regenerate-certs を実行するとよいらしいのだけど実行しても更新されたふうに終わるものの改善しない。 --client-certs を付けるとさらによいらしいのだけど古すぎて指定できない。かといってアップデートするのも怖い。

コンテナで動かしてるサービスは動くからいいのだけどバックアップが取りたい (データの置き場を別にしとくべきだったんだけど)。

virtualbox を開いて直接コンソールを叩けることを確認。さらに git bash からも入れることを確認。

$ ssh localhost -p 3327 -l docker
$ docker-machine ssh

ssh で入ってコマンドを叩けることを確認。

$ docker-machine ssh default free

bat で git bash 経由でコマンドを実行できることを確認。

"C:\Program Files\Git\bin\sh.exe" --login -i -c "ls"

バックアップを生成する sh をコンテナ内に置いといてキックして結果をコピーしていくリレー方式でバックアップ取れるようにできた。

docker のバージョンを上げてきれいに作り直したい。

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)
            }
        }
    }
}