git submoduleを別のリポジトリに切り替える

以前、git submoduleを別のブランチに切り替えるというのを書いたのですが、

gozuk16.hatenablog.com

今度はオンプレのBitbucketからクラウドのBitbucketへ移行したのでリポジトリを切り替えました。
ググる.gitmodules を書き換えるというのが引っかかりますが、コマンドで出来るんじゃないかなと思って調べたらできました。

$ git submodule set-url <path> <newurl>

でした。

実際にはこんな感じ。(${workspace}クラウドのworkspace名です)

$ cat .gitmodules
[submodule "test_sm"]
    path = test_sm
    url = https://git.example.com/scm/test/test_sm.git
    branch = master

$  git submodule set-url test_sm https://bitbucket.org/${workspace}/test_sm.git
Synchronizing submodule url for 'test_sm'

$ cat .gitmodules
[submodule "test_sm"]
    path = test_sm
    url = https://bitbucket.org/${workspace}/test_sm.git
    branch = master

$ git commit .gitmodules
[master xxxxxxx] migrate git.example.com to bitbucket.org/${workspace}.
 1 file changed, 1 insertion(+), 1 deletion(-)

簡単ですね。

JIRA CloudでTempo Timesheetsを使っているときに残余を調整する

JIRAとBitbucketをオンプレからクラウドへ移行したのですが、色々勝手が違って戸惑ってます。(Confluenceは許容できない機能差が あっていったん断念しました)
クラウドのほうがアプリ間の連携はいいし、慣れれば今の在宅勤務中心な業務にあっていると思うんだけどね。
長期的にも自分がいなくなっ後も継続していけるようにマネージドなサービスにするほうがいいかなと思ってる。
つい先週50歳になってそういう事も考えないといけないなと思ったわけですよw

で、JIRA Software Serverではストーリーポイントではなく、Time Trackingで進捗管理を行っていて、時間入力が便利なTempo Timesheetsを使っていたのでCloudでも同じようにしたんですね。
ところが、初期見積りを入れたあとで修正したら残余が変えられないと言う。
たしかに、チケットの右のバーに残余が表示されてない。設定をいくら見ても出せない。。。
Tempo TimesheetsのLog Timeには残余を入れる欄があるんですが、Durationを入れないと残余見積を入力させてくれません。

f:id:gozuk16:20201015221254p:plain

困ったなーと思ってとりあえずぐぐってたら、本家のKnowledge Baseにありました。

Edit Remaining Estimate in new Jira issue view tempo-io.atlassian.net

旧バージョンの表示に戻して編集すれば出来るよと・・・

f:id:gozuk16:20201015221930p:plain

まじか。なんつー、workaround だw

f:id:gozuk16:20201015222017p:plain

まあ、できました。

asciidoctor-pdfで文字色を変える (2019年版)

以前書いた

gozuk16.hatenablog.com

で、PDFでも文字色を変えるというやり方ですが、asciidoctor-pdfを最新化したらおかしくなってしまいました。

具体的には、色は変わるのに↓のような {zwsp} という文字が差し込まれるようになってしまいました。

{zwsp}日{zwsp}本{zwsp}語{zwsp}

ぐぐってみると、

backport.net

ここの説明を読むと zwsp というのは幅ゼロのスペースだそうで asciidoctor-pdf-cjk が入れているらしい。

なるほど。文字色をつけるのに、

pass:[<span style="color:#ff0000">日本語</span>]

としているわけだからCJKが差し込むzwspをpassが可視化しちゃうのね。
しばらく考えて回避策を考えました。

pass:[<span style="color:#ff0000">]
日本語
pass:[</span>]

この文字色をつけるやり方自体がworkaroundなのに、更にworkaroundを積み重ねるのも何だけど、まあとりあえず回避で・・・

WebDriver(ChromeDriver)でProxyのWeb認証を通す

この記事は、Infocom Advent Calendar 2019 2日目の記事です。

qiita.com

経緯

社内からインターネットの何かを使うときにはProxyを通さなければならないのですが、現在のProxyは認証を通す必要があります。
Windowsで社内のADに参加している場合は、ログオン時に自動的に認証を通してくれるので意識する必要はありません。
ADに入っていない場合は、以下の条件を満たす必要があります。

  • httpのサイトにアクセスする
  • リダイレクトされた認証ページを開く
  • ユーザIDとパスワードを入力し、認証が通ったら最初に開いたhttpにリダイレクトされる

GUIが使えないLinux系のサーバではcurlを使ってプロキシ認証を通しています。
ところが、最近エラーになることが多くなってきました。
w3mでやったら一発でうまくいくのですが・・・
しばらくはコマンドを何度も実行するようにしていましたが、ある時WebDriverならうまくいくかもと思って試してみました。

結論から言うとうまくいってます!

ブラウザなら失敗したこと無いのでまあ予想通りですが・・・。(なぜ今まで思いつかなかったのか)

実装

golangのagoutiというWebDriverクライアントを利用して実装してます。(実際にはChromeDriverを使いました)
開発はMacで行ってます。

サンプルソースを↓こちらに置いておきます。
※このソースをそのまま貼り付けても動きません。URLやパラメーターは調整する必要があります。

github.com

  • ChromeDriverを起動するためのoption
options := agouti.ChromeOptions(
        "args", []string{
                "--headless",
                "-disable-gpu", // 暫定的に必要とのこと
                "--ignore-certificate-errors",   // 認証関係のエラー無視
                "--no-sandbox",
                "--disable-xss-auditor",
        })

optionをつけなければChromeブラウザが普通に上がります。
デバッグをするときはその方が便利です。

  • Web認証ページの指定
page.Navigate("https://xxx.xxx.xxx.xxx:99999/proxy?foo=bar&hogehoge=http://neverssl.com")

page.Navigate() の引数に認証ページを指定しています。
私の環境ではリダイレクト先のhttpsじゃないサイトをパラメーターで指定することになってます。(最近はhttpsが多いのでrebuild.fmで言ってたneverssl.comを指定してます)

  • ユーザID
page.FindByID("user").Fill("xxxxxxxx")
  • パスワード
page.FirstByName("passwd").Fill("xxxxxxxxxxxxxxx")

パスワードは暗号化したものを外部から渡されて、復号してセットするほうがいいと思いますけど、とりあえず・・・
パスワード変えたり、ユーザID変えたりすることも当然ありますからね。

  • ウェイト
time.Sleep(time.Second * 5)

最後にリダイレクトするのをちょっと待ちます。なくても動いたけど念の為に入れてます。

build

Macで作業してるのでクロスコンパイルでLinuxバイナリを作成します。

$ mkdir linux-amd64
$ GOOS=linux GOARCH=amd64 go build -o linux-amd64/proxyauth ./proxyauth.go

run

  • ChromeDriverを入れておく必要があります

Mac

$ brew cask install chromedriver

Linux

$ sudo apt install chromium-chromedriver

依存するパッケージがやたら多いですがしかたありません。入れてしまいましょう!

認証サイトに直接アクセスするようにしておきます。
何故か大文字のNO_PROXYは効きませんでした。
この辺はツールによっていろいろなので、両方指定しておけばいいのかも。

$ export http_proxy=proxy.example.com:9999
$ export HTTP_PROXY=$http_proxy
$ export no_proxy=xxx.xxx.xxx.xxx
$ export NO_PROXY=no_proxy

今の所、失敗せずに一発で認証が通るようになってます!

MacでGoのクロスコンパイルをする

Mac OSはMojaveでGoは1.13.4です。

昔、

gozuk16.hatenablog.com

というのを書いたのですが、いまはbrew--cross-compile-common--with-cc-common も使えないようです。

github.com

これに書いてなければだめなんですよね?

どうやら

GOOS=linux GOARCH=amd64 go build ./hogehoge.go

ってやるだけでできるっぽい。素晴らしい! このままだと区別つかないのでディレクトリごとに出すように。

GOOS=linux GOARCH=amd64 go build -o linux-amd64/hogehoge ./hogehoge.go

あとでmakefileでも書きますか。。。

追記(2019/12/24)
makefile 書きました。

linux:
  GOOS=linux GOARCH=amd64 go build -o linux-amd64/hogehoge ./hogehoge.go
win:
  GOOS=windows GOARCH=amd64 go build -o windows-amd64/hogehoge.exe ./hogehoge.go

ついでにWindowsも入れときました。

更にcgo使ってるときに

# runtime/cgo
gcc_libinit_windows.c:7:10: fatal error: 'windows.h' file not found

というエラーが出たので以下のようにビルドしました。

$ brew install mingw-w64
$ CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -o hogehoge.exe

MacVim(gVim)のインサートモードでShift+Spaceの全角スペース入力ができない

前提条件は、

  • MacはMojave(後にCatalina)
  • 日本語入力はGoogle日本語入力
  • Karabiner-ElementsではShift Spaceに何も設定してない
  • VimはMacVim-KaoriYa
    • :map :imap で確認してもShift + Spaceの設定無し

github.com

この状態で、MacVim-KaoriYaのgVimにおいてGoogle日本語入力中にShift Spaceが半角スペースになってしまう。
ちなみにターミナル上のVimではShift Spaceで全角スペースが入力できている。

ググっても同様の症状は見当たらず。
どうにもわからなかったので、Vimの設定でShift + Spaceで全角スペースが入力できるようにしてしまった・・・。

~/.gvimrc に以下を設定

imap <S-Space>   (←ここに全角スペースが書いてある)

f:id:gozuk16:20191110162205p:plain

これで、gVimでもShift + Spaceで全角スペースが入力できるようになりました。
ちょっと副作用で英数モードでも入るようになっちゃったけど、それも意外と便利かもしれない・・・

Macのログインシェルをzsh+Preztoに変更した

どうでもいい話ですが、昔はtcshを常用していましたが今はzshを使ってます。
でも最近はデフォルトのbashのままのサーバもあったりして自分も丸くなったなーと思うけど、新しく買ったMacbook Air使ってて流石に不便なので頑張りました。

zshに変更

Homebrewでzshをインストールしてデフォルトのログインシェルを変更

$ brew install zsh
$ sudo vi /etc/chsh
/usr/local/bin/zsh ←追加

$ chsh -s /usr/local/bin/zsh

Prezto導入

インストール

git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
ln: /Users/gozu/.zshrc: File exists

.zshrcがすでに存在するとだめみたい

$ mv .zshrc .zshrc.org

$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
ln: /Users/gozu/.zlogin: File exists
ln: /Users/gozu/.zlogout: File exists
ln: /Users/gozu/.zpreztorc: File exists
ln: /Users/gozu/.zprofile: File exists
ln: /Users/gozu/.zshenv: File exists

lrwxr-xr-x   1 gozu  staff      35 11  4 17:24 .zlogin -> /Users/gozu/.zprezto/runcoms/zlogin
lrwxr-xr-x   1 gozu  staff      36 11  4 17:24 .zlogout -> /Users/gozu/.zprezto/runcoms/zlogout
lrwxr-xr-x   1 gozu  staff      38 11  4 17:24 .zpreztorc -> /Users/gozu/.zprezto/runcoms/zpreztorc
lrwxr-xr-x   1 gozu  staff      37 11  4 17:24 .zprofile -> /Users/gozu/.zprezto/runcoms/zprofile
lrwxr-xr-x   1 gozu  staff      35 11  4 17:24 .zshenv -> /Users/gozu/.zprezto/runcoms/zshenv
lrwxr-xr-x   1 gozu  staff      34 11  4 17:26 .zshrc -> /Users/gozu/.zprezto/runcoms/zshrc

中途半端に処理が行われていたようなので消してもう一度

$ rm .zlogin.org
$ rm .zlogout.org
$ rm .zpreztorc
$ rm .zprofile
$ rm .zshenv
$ rm .zshrc

$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

OK!
新しいセッションを開けばPrestoで起動します。

設定

デフォルトのテーマが見ずらいのでテーマを変えます。

  • 一覧
$ prompt -l
Currently available prompt themes:
agnoster cloud damoekri giddie kylewest minimal nicoulaj paradox peepcode powerlevel10k powerlevel9k powerline pure skwp smiley sorin steeef adam1 adam2 bart bigfade clint default elite2 elite fade fire off oliver pws redhat restore suse walters zefram
  • プレビュー
$ prompt -p
(全部出るけど所々文字化け)

PowerLine対応フォントが入ってないのでRictyの対応版をインストールします。
ここはいつも使っている本家のRicty入れておきます。(Diminishedの方が楽だけど使い慣れてるので)

www.konosumi.net

$ brew tap sanemat/font
$ brew install ricty
(snip)
==> ricty
***************************************************
Generated files:
  /usr/local/opt/ricty/share/fonts/RictyDiscord-Regular.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Oblique.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Bold.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-Oblique.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Regular.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-BoldOblique.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-Bold.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-BoldOblique.ttf
***************************************************
To install Ricty:
  $ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/
  $ fc-cache -vf
***************************************************

$ brew options ricty
--with-patch-in-place
    Patch Powerline glyphs directly into Ricty fonts without creating new 'for Powerline' fonts
--with-powerline
    Patch for Powerline
--without-fullwidth
    Disable fullwidth ambiguous characters
--without-visible-space
    Disable visible zenkaku space
(使えるオプションを表示)

$ brew reinstall --with-powerline --with-patch-in-place ricty
==> Reinstalling sanemat/font/ricty --with-powerline --with-patch-in-place
==> Downloading http://yusa.lab.uec.ac.jp/~yusa/ricty/ricty_generator-4.1.1.sh
Already downloaded: /Users/gozu/Library/Caches/Homebrew/downloads/aacf520745eb723ecce41723f843ab10ead03a7323099ce2b7c51123d0c01e77--ricty_generator-4.1.1.sh
==> Downloading https://osdn.jp/frs/redir.php?m=gigenet&f=%2Fmix-mplus-ipa%2F63545%2Fmigu-1m-20150712.zip
Already downloaded: /Users/gozu/Library/Caches/Homebrew/downloads/4e24ddf8bf40fc096f34c12ec91e4469efcded452334dcbefb265ca0343ba455--migu-1m-20150712.zip
==> Downloading https://github.com/google/fonts/raw/f0e90b27b6e567af9378952a37bc8cf29e2d88e9/ofl/inconsolata/Inconsolata-
Already downloaded: /Users/gozu/Library/Caches/Homebrew/downloads/24a8808bea96ca8579bc893547b86241448b2944cca2414aca6d6400986529a3--Inconsolata-Regular.ttf
==> Downloading https://github.com/google/fonts/raw/f0e90b27b6e567af9378952a37bc8cf29e2d88e9/ofl/inconsolata/Inconsolata-
Already downloaded: /Users/gozu/Library/Caches/Homebrew/downloads/0f8e8be9545eb996c487dc08e9d95b408e9b5d0084889938d588d7bf7c98c31f--Inconsolata-Bold.ttf
==> Downloading https://github.com/powerline/fontpatcher/archive/c3488091611757cb02014ed7ed2f11be0208da83.zip
==> Downloading from https://codeload.github.com/powerline/fontpatcher/zip/c3488091611757cb02014ed7ed2f11be0208da83
######################################################################## 100.0%
==> Patching
patching file scripts/powerline-fontpatcher
==> sh ./ricty_generator-4.1.1.sh Inconsolata-Regular.ttf Inconsolata-Bold.ttf migu-1m-regular.ttf migu-1m-bold.ttf
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename RictyDis
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename Ricty-Ob
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename Ricty-Bo
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename RictyDis
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename Ricty-Re
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename Ricty-Bo
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename RictyDis
==> fontforge -lang=py -script /private/tmp/ricty-20191104-6196-hotccb/scripts/powerline-fontpatcher --no-rename RictyDis
==> Caveats
***************************************************
Generated files:
  /usr/local/opt/ricty/share/fonts/RictyDiscord-Regular.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Oblique.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Bold.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-Oblique.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-Regular.ttf
      /usr/local/opt/ricty/share/fonts/Ricty-BoldOblique.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-Bold.ttf
      /usr/local/opt/ricty/share/fonts/RictyDiscord-BoldOblique.ttf
***************************************************
To install Ricty:
  $ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/
  $ fc-cache -vf
***************************************************
==> Summary
🍺  /usr/local/Cellar/ricty/4.1.1: 12 files, 27MB, built in 3 minutes 15 seconds
(PowerLine対応パッチを当てて再インストール。"--with-patch-in-place ricty"は新しいフォントを作らず元のファイルにパッチを当てるということらしい)

$ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/
$ fc-cache -vf

iTerm2のフォントにRictyを指定

$ prompt -p
(ちゃんと出たー(≧∇≦)b)

※ 後で気がついたけど、今どきのiTerm2は、 Preferences > Profiles > Text > []Use built-in Powerline glyphs でPowerLine表示できるのね。ゴニョゴニョする必要なかったのか・・・。

  • iTerm2との調整

Preztoのテーマはagnosterで良さそうなのだが、iTerm2の透過を有効にしていると字が暗くて見ずらい。
なのでiTerm2のテーマを変えてみる。
Preferences > Profiles > Colors > Color Presets... から「Pastel(Dark Background)」にする。結構良くなったけど透過率が高めなら見やすいかなという感じ。
透過率低めなら、Visit Online GalleryからHybridを選ぶと良さそう。
※ 透過設定(Preferences > Profiles > Window > Transeparency)をいじったら下にある Keep background colors opaqueにチェックを入れる。PowerLineの三角が綺麗に塗られるようになります。

iterm2colorschemes.com

とりあえず、iTerm2の透過率(Transparency)は10%程度にしてテーマをHybrid、Preztoのテーマをagnosterでやってみることにした。

$ prompt agnoster
(agnosterを試してみる)

$ vi ~/.zpreztorc
#zstyle ':prezto:module:prompt' theme 'sorin'
zstyle ':prezto:module:prompt' theme 'agnoster'

$ source ~/.zpreztorc

ということでこんな感じになりました。

f:id:gozuk16:20191104193012p:plain