アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

xcode をインストールしてない macOS で lldb を使うまで

mac を開発端末にしたいけど xcode をインストールしたくないという場合、xcode を appstore からインストールするのではなく、command line tools のみをインストールする必要がある。

インストールするために xcode-select -- install を実行する。これをやることで mac 上で homebrew が使えるようになったりする。

私の環境には homebrew 経由でインストールした lldb (/usr/local/opt/llvm/bin/lldb) があった。最近 neovim のコードを読むことにハマってるので久しぶりにデバッグするしようとしたら次のエラーメッセージが表示された。

$ lldb -p $(pgrep nvim)
(lldb) process attach --pid 35912
error: attach failed: unable to locate debugserver

今まで xcode をインストールした状態でデバッグを行ってたので、このケースに初めて遭遇した。debugserver がないとのこと。検索すると command line tools をインストールしてるなら /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/debugserver に存在するという情報を入手した。(確かにあった)

それで今度はこの debugserver を lldb に認識して貰う必要があるが、検索してもなかなかヒットせずかなり困った。

続きを読む

プリエンプティブな GCE インスタンスの外部 IP を固定する

最近 iPad Pro を購入したため、これを開発環境のとしても活用できると良いなと思い、GCP でプリエンプティブな GCE インスタンスを作成した。

インスタンスhttps://github.com/<username>.keys 経由で取得できる github に登録した自分の公開鍵を設定した。こうすることで秘密鍵github に使っているものを利用することができる。

これで手元の ~/.ssh/config をこんな感じで修正すればもう使えるものだと思ってた。

Host gce
  Hostname <external-ip>
  IdentityFile ~/.ssh/github
  User codehex
  ForwardAgent yes

実際には使えていたが、暫くすると external-ip (以降、外部 IP)が突然変わってしまって毎回 config ファイルを修正していた。しかし、これではしんどいのでちゃんと固定される外部 IP を固定することにした。下記は実際にやった手順を示してる。

続きを読む

Debian 9 stretch に rootless docker をインストールする

f:id:codehex:20200418163433j:plain

root 権限外で docker コンテナを動かしたくなったので rootless docker を利用してみることにした。rootless docker のインストールガイドは下記のリンクで読むことができる。

docs.docker.com

DEBIAN GNU/LINUX といったセクションもあって rootless docker をインストールするために書かれてる事を実行する。

私の場合は、docker-ce をインストール済みだったので apt コマンドで削除し、ユーザー権限も sudo usermod -aG docker codehex みたいな感じで設定済みだったため、stack exchange を参考にしながら sudo gpasswd -d codehex docker といった感じで削除した。

あとはサイトの Install にも書かれてる次のワンライナーを実行するだけでインストールできる。

$ curl -fsSL https://get.docker.com/rootless | sh

しかし、インストール後に肝心の systemctl --user start docker を下記のメッセージが表示されるだけで実行できなかった。

$ systemctl --user start docker
Failed to connect to bus: No such file or directory

これを解決するために https://get.docker.com/rootless の shell script を読んだ。

続きを読む

neovim コメント内で改行した時に自動でコメントされるのを防ぐ

最近 neovim を使い始めていて、vim を使ってる時から気になってた問題に向き合うことにした。この問題がどんな内容かというと

“ vim ファイルでのコメント

といったコメントを記入していてカーソルが行の最後に来た時、エンターキーを入力して改行するはずである。その時に

“ vim ファイルでのコメント
“ 

といった感じで、カーソルの前にコメント文字が勝手に入力されてしまうことである。

この問題を全てのファイルフォーマットに対して解決したかった。ググってみると沢山の情報が出てきた。例えば init.vim

set fo-=c fo-=r fo-=o

を記入すると解決するみたいな内容ばかりで、実際にはどれも解決しなかった。それで Twitter 上でいじけてると、通りすがりの暗黒美無王さんから次のようなヒントをもらった。

続きを読む

homebrew を使って gomod 経由で Go のバイナリをインストールする

Go 1.14 では modules がついに production ready な状態になった。

これまで ghq といったツールを使い、GOPATH 直下に自分のワークスペースを作って開発するといった手法とはお別れになるだろう。開発に関してはとても便利になったが、これまで go getgo install で Go のバイナリをリモートからインストールしていたが、 modules を使っているワークスペース上で行うと、プロジェクトに使われる module としてインストールされてしまうため、良い方法はまだ存在しない。

しかし、global install ができるようしたい!といった issue は既に存在するため将来的には可能になるかもしれない。

そんな中、Go Hacker の一人である @FiloSottile 氏が homebrew と gomod を組み合わせて、上記で記述したやりたいことが実現できるツールを開発していた。

続きを読む

Go で AND, OR 条件付きのテキストマッチを行う

AND, OR 条件付きでテキストがマッチしてるか確認する関数を作る。

PerlPHP 等の PCRE をサポートしてる正規表現を使う場合は、こんな感じでいい。

/(?=.*(hello|world))(?=.*(foo|bar))/

regex101.com

こうすると

hello, foo
hello, bar
world, foo
world, bar

といったそれぞれの文字列にマッチする。「hello または worldかつfoo または bar」にマッチするかどうかという関数を作りたい。

それで、この正規表現を組み立てるようなコードを書いてみたけど、Go ではこの (?=re) といった肯定先読みの表現がサポートされておらず、困ってしまった。

そこで、自力でロジックを書くことにしたが...

続きを読む

2019年の仕事周り簡易まとめ

この年は他の会社に入社していたら絶対に経験できないだろうなということを経験できたので本当に良い年だったと思う。優秀な人が多い会社なのでそういった方々と一緒に仕事をすることができたおかげで「どんな考えを持って仕事をすべきか」というのが少しだけ見えた気がした。

もっとあるだろうけど、一旦思い出したことを簡単にリスト化した

続きを読む