takafumi blog

日々の勉強メモ

gpg: keyserver receive failed: Server indicated a failure

Ubuntu 20.04.2 LTS

gpgが使うhkpプロトコルはport 11371 を使う。

なので

gpg: keyserver receive failed: Server indicated a failure

このエラーは大概portを変えれば解決することが多い(と思う)

# github-cliのpgp鍵取得
# https://github.com/cli/cli/blob/trunk/docs/install_linux.md


sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C99B11DEB97541F0

ちなみにPGPは、Pretty Good Privacyの略。センスがいい。

Slackのチャネル作成+ユーザー(&グループ)複数をまとめて招待できるコマンドをGAS+typescriptで作った

typescript 4.2.3

Slackで新チャンネルを作るときに、ユーザーもまとめて招待できるコマンドを作成してみた。 チャンネル名はある程度固定で使う事を想定した。

また(だいぶ前から) claspがtypescriptをサポートしていたので書いてみた

・・・が割とコードが膨大になったので、結局webpackしてアップロードするようにしたので、あまりtypescriptのサポートは関係なくなってしまった

github.com

最初はペラっと1,2ファイルのつもりだったのをガリガリ拡張したので、ちょっと雑になってしまった

コードはgithubを見てもらうとして、作っている途中に引っかかったところを書いてみる。

Slack

  • Q: slash command打ったらdispatch_failedと出る
    • A: commandに設定したURLが200 OKを返してない
    • A: curlなどで確認してみる。3xxでもNG
    • A: AppsScriptでデプロイを新しく作り直してみる
  • Q: slash command打ったらtimeout が返ってくる
    • A: 3000ms以上だとそうなる。slack仕様。
    • A: ロジックを工夫する。api何度も叩くようなのは非同期実行する
      • 今回はユーザーデータ、グループデータはtriggerで別に取得するようにした
      • 多分GASだと非同期にしてもrootなメソッド(これだとdoPost)は終わらないぽいので非同期できない
  • Q: ユーザーグループ名がリクエストボディからうまく取得できない
    • A: グループは<!subteam^S0AAAAA0A|@usergroup_name>のようなテキストで入ってくるので、パースする必要がある

GAS

  • Q: clasp createで作ったAppsScriptだとGCPプロジェクトを変更できない事がある
    • A: GAS側で新規プロジェクトで作る
  • Q: clasp pushでエラーになる
  • Q: doPostのログが確認できない
    • A: GCPプロジェクトと紐づけて、ロギングを見る必要がある
    • A: ロギングはテストのまま使うにはテストユーザーを登録する必要がある
  • Q: GASからHTTPリクエストできない
    • A: http requestはUrlFetchAppを使う
      • scope https://www.googleapis.com/auth/script.external_request を許可する必要がある
    • A: webpackすれば他のnpmも使えるかもしれないが未検証
  • Q: GAS実行時の権限設定でエラー表示になる
    • A: GCPプロジェクトのOAuth同意画面で公開ステータスが本番環境になっている必要がある
    • A: テスト ならテストユーザーに登録する

GAS written with typescript

  • Q: import * as X from './xxx' エイリアスが読めない
    • A: GASではすべてのクラスがフラットな状態で存在するので実際の名前を全部指定する必要がある
    • A: また同じ名前のexportは競合するので使えない
    • A: webpackする
  • Q: eslint, tsc, babel, webpack全部通るのにアップロードするとエラーになる
    • A: ときどきある。諦めて書きかえる
      • ts2gasをきちんと見ればわかるかも

その他

  • Q: GAS webappについて
    • A: webappとかapiデバッグに時間がかかる
      • ローカルである程度変換してもclaspで変換されたものが動作するかはデプロイするまで分からない
    • A: 1,2ファイルで終わるシンプルなもの、spredsheetやdrive使う場合以外はサーバ立てた方が楽に思う

【Scala】giter8でプロジェクトのテンプレートを作る

環境   Scala 2.13.0

[1] giter8のテンプレートを用意

$ sbt new foundweekends/giter8.g8

[info] Loading settings for project global-plugins from metals.sbt ...
[info] Loading global plugins from /home/takafumi/.sbt/1.0/plugins
[info] Set current project to a (in build file:/home/takafumi/A/)
[info] Set current project to a (in build file:/home/takafumi/A/)

Creates a Giter8 project template. 

name [My Te mplate Project]: scala-template
giter8_version [0.12.0-M2]: 
sbt_version [1.2.8]: 1.3.0

Template applied in /path/to/dir/scala-template

[2] src/main/g8/ の下にテンプレートにしたいプロジェクトを追加

[3] src/main/g8/default.properties にテンプレートで使えるプロパティを定義できる

// default.properties
name=scala-template
version=1.0
scala_version=1.3.0
sbt_version=1.2.8
// e.g. build.sbt
name = "$name$"
scalaVersion := "$scala_version$"

[4] ローカルでテストしたいときは

$ sbt new file:///path/to/dir/scala-template

[5] githubにpushしたら

$ sbt new repository/scala-template

で使えるようになる

www.foundweekends.org

【Rust】【Vim】LSPの導入

  • 環境
    • archlinux 5.0.9-arch1-1-ARCH
    • rust 1.34.1
    • neovim 0.3.5

rust

rls(Rust Language Server)

https://github.com/rust-lang/rls

rustup component add rls
rustup component add rust-analysis
rustup component add rust-src

neovim

dein + LanguageClient-neovim

https://github.com/autozimu/LanguageClient-neovim

"
" lsp.toml
"
[[plugins]]
repo        = 'autozimu/LanguageClient-neovim'
rev         = 'next'
build       = 'bash install.sh'
hook_add = '''
   let g:LanguageClient_autoStart = 1  " LanguageServerを自動起動する

   " 言語毎のLSPを設定
   let g:LanguageClient_serverCommands = {
      \ 'rust': ['rustup', 'run', 'stable', 'rls'],
   \ }

   augroup LanguageClient_config
      autocmd!
      autocmd User LanguageClientStarted setlocal signcolumn=yes
      autocmd User LanguageClientStopped setlocal signcolumn=auto
   augroup END

   nnoremap [lsp] <Nop>
   nmap <Space>l [lsp]

   nnoremap [lsp]h :call LanguageClient_textDocument_hover()<CR>
   nnoremap [lsp]d :call LanguageClient_textDocument_definition()<CR>
   nnoremap [lsp]r :call LanguageClient_textDocument_rename()<CR>
   nnoremap [lsp]f :call LanguageClient_textDocument_formatting()<CR>
   '''

init.vimなどで以下のコマンドで読み込ませる

call dein#load_toml(s:toml_dir . '/lsp.toml', {'lazy': 0})

遅延読み込み('lazy':1)だとLanguageServerが起動ないので注意(大分長い事嵌った)

【Rust】導入覚書

  • 環境
    • archlinux 5.0.9-arch1-1-ARCH
    • rust 1.34.1
    • neovim 0.3.5

rust

binary

https://rustup.rs/

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

echo 'source $HOME/.cargo/env' >> ~/.zshrc

rustc -V
rustc 1.34.1 (fc50f328b 2019-04-24)

cargo -V
cargo 1.34.0 (6789d8a0a 2019-04-01)

source

補完系で必要になる

rustup component add rust-src

rustup update

echo 'export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src"' >> ~/.zshrc

component, tool, etc

formatter

https://github.com/rust-lang/rustfmt

rustup component add rustfmt

linter

https://github.com/rust-lang/rust-clippy

rustup component add clippy

watcher

https://github.com/passcod/cargo-watch

cargo install cargo-watch

Cargo.toml editor

https://github.com/killercup/cargo-edit

cargo install cargo-edit

code completion

設定面倒くなければ rls使ったほうが良いかも

takafumi-s.hatenablog.com

https://github.com/racer-rust/racer

## From 2.1, racer needs nightly rust
rustup toolchain add nightly

cargo +nightly install racer

vim

dein.vimでplugin管理しているならなら以下をtomlファイルに追加し、UpdateRemotePlugins

rust.vim

detection, syntax highlighting, formatting

https://github.com/racer-rust/vim-racer

[[plugins]]
repo = 'rust-lang/rust.vim'
on_ft = 'rust'
hook_source = '''
    let g:rustfmt_autosave = 1
'''

vim-racer

vimでracerを使うplugin

https://github.com/racer-rust/vim-racer

repo = 'racer-rust/vim-racer'
on_ft = 'rust'
hook_source = '''
    " racerバイナリ
    let g:racer_cmd = "~/.cargo/bin/racer"
    " rustソースコードパス
    let $RUST_SRC_PATH="~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src"

    let g:racer_experimental_completer = 1

    au FileType rust nmap gd <Plug>(rust-def)
    au FileType rust nmap gs <Plug>(rust-def-split)
    au FileType rust nmap gx <Plug>(rust-def-vertical)
    au FileType rust nmap <leader>gd <Plug>(rust-doc)
'''

【Linux】 archでpptp接続

環境   archlinux 4.10.6-1-zen

今時pptp使うなという気持ちもあるが、使ってるところでは未だに使ってるので、設定ハマった事のメモ。

基本的にはマニュアル通り。 - PPTP クライアント - ArchWiki

ハマったのは

によるとgreはINPUTしか開いていないが、OUTPUTも開く必要があった。

ちなみに実家のWiFiだと繋がらなかったりしたので、場合によってはルーターとかも設定変更する必要があるのかも。