IntelliJのプロジェクトテンプレートの仕様のまとめ
いつもGradleプロジェクトのセットアップに難儀しているので、プロジェクトテンプレートの利用を検討しました。
テンプレート作成時
作成したテンプレートは、私の環境では /Users/{USER}/Library/Application Support/JetBrains/IdeaIC2020.1/projectTemplates
にありました。例えば、 excel
という名前のテンプレートは excel.zip
として保存されています。
IntelliJの新規プロジェクトメニューは、テンプレートが一つも保存されていない状態だと表示されないようです。
IntelliJはprojectTemplateのZIPファイルを再帰的に探索し、そこで見つかったものをプロジェクトテンプレートの候補として表示するようです。試しにzipファイルを消したらプロジェクトテンプレートも消えました。また、projectTemplate
内に適当なフォルダを作ってそこにZIPを移動してもテンプレートとして表示されるようです。
ただ、 projectTemplate
フォルダを直接編集するとプロジェクトの作成時に失敗するようになるかもしれません。
2020-04-30 追記: ソースコードのファイルがひとつもないモジュールを含むプロジェクトをテンプレート化すると、プロジェクト作成時に失敗します。IntelliJのバグと思われます。
テンプレート使用時
User-defined から利用したいプロジェクトを選択します。
作成失敗時、特に画面上にエラーは表示されないので気づきづらいのですが、 idea.logを見るとしっかり表示されています。
idea.log は私の環境だと/Users/{USER}/Library/Logs/JetBrains/IdeaIC2020.1/idea.log
です。
作成されたプロジェクトは、元のテンプレートの値が置換される箇所とそうでない箇所があるようです。例えばMakefile内のアプリケーション名は置換されませんでした。
2020-05-03 追記:
gradleプロジェクトをテンプレート化すると、 ./gradlew
でコメント行がエスケープされる上にパーミッションが初期化されて実行できなくなります。直せばいいとはいえ、うーん。
まとめ
細かいバグはありそうですが、都度Gradleの設定をコピらなくていいのは嬉しいので活用していきたいですね。
IntelliJのSetting Repositoryで"invalid privatekey"エラーが表示される → JSchが対応している秘密鍵のフォーマットはPEM
IntelliJ / PyCharmでローカルの設定をGitHubなどと共有しようとしたときに、"invalid privatekey" と表示されて困ったことはないですか?
OpenSSH7.8以降で出力される秘密鍵のヘッダーは以下のフォーマットになっているようです。私の場合は ed25519
ではなく RSA
でしたが、以下のフォーマットで出力されました。
-----BEGIN OPENSSH PRIVATE KEY-----
このフォーマットが JSchに対応していない、ということのようです。
StackOverFlowの助言に従い、 -m PEM
オプションを付けて ssh-keygenからやり直したら解決しました。
解説
IntelliJのログ(私の場合、~/Library/Logs/JetBrains/IdeaIC2020.1/idea.log
)からスタックトレースを表示しました。
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [B@282a5626 at com.jcraft.jsch.KeyPair.load(KeyPair.java:664) at com.jcraft.jsch.KeyPair.load(KeyPair.java:561) at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40) at com.jcraft.jsch.JSch.addIdentity(JSch.java:406) at com.jcraft.jsch.JSch.addIdentity(JSch.java:366) at org.eclipse.jgit.transport.JschConfigSessionFactory.getJSch(JschConfigSessionFactory.java:396) at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:332) at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:205) at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:138) ... 39 more
JSchが原因だと思っていたわけでなく、 invalid privatekey で検索したら一番上に表示されたというだけです。 よく検索されているのかもしれませんね。
余談ですが、ここにたどり着くまでにIntelliJを再起動したり再インストールしたりで無駄な時間を過ごしてしまいました。 エディタの実行ログはいつでも表示できるようにして、まずはログを見たいですね。
OneDrive / GoogleDrive さわらファイル分類法(雑多なファイルを分類して保存するマイルール)
Google Driveの中が散らかってきたので、ファイルの分類ルールを言語化しつつ見直してみました。
今回策定した分類法
私が主に使っているクラウドサービス(Google Drive、OneDrive、InkDrop)の全てで適用できるように考えてみたつもりです。
トップレベルでは ファイルの種類ごと(画像・音楽など)と、個人のプロジェクトに関するもの or 組織のプロジェクトに関するもの、で分けています。
(なお、会社のファイルは当然ながら自分のDriveには保存しません。個人のDriveで会社のフォルダに入れるものは雇用契約書とかですね。)
その他の自分ルール
Gitリポジトリはそもそも ghqで全て管理する。
本当はドキュメント用の ghq みたいなのもあれば最高なんですけどね。
ファイル名・フォルダ名は小文字のケバブケースとする
大文字始まりにするとShiftキーを押すのが面倒なので、デフォルトのフォルダ名とそぐわないことも多いのですがこのルールにします。
そもそも大文字・小文字があるのがアルファベットの良くないところですね。
ケバブケースかスネークケースかは悩みましたが、Googleのプログラミングの指針に倣いました。
ファイル名・フォルダ名は略してもよいが、ググって分からない省略形は使わない
ファイル名、短くしたいですよね。
例えばハッカソンの成果物を con
フォルダに保存していました。 今日 con
が contestの略だと分からず、フォルダの中を見てようやく思い出しました。
一方、 organization を org
と略すのはOKです。ググれば分かりますからね。
おわりに
この記事を読んだ友人の皆様、よければマイルール教えて下さい〜!
java.util.logger フォーマット整形職人の朝は早い
PostgreSQLのDriverをKotlinから呼び出して使っています。
このロガーが log4jじゃなくてjava.util.loggerなんです。何が良くないって、java.util.loggerはログの出力先が標準エラー出力になっており(1)、IntelliJは標準エラー出力を赤字で出すので(2)コンソールが真っ赤。
普通は java.util.logger と log4jの間にブリッジを仕込むそうなんですが、Driverってコネクション獲得するたびに呼ばれるので削除したはずの java.util.loggerのハンドラーが復活します。
いい解決策が思いつかなかったので、ちまちまフォーマットを修正することにしました。
修正風景
IntelliJのスニペット機能、Twitterで教えてもらいましたが最高ですね。
ちなみに java.util.logger の謎の文法は java.util.Formatter クラスのものらしい(3)
うーん各言語で統一して...
参考
PostmanとGitHubのIntegrationに関するメモ
PostmanのIntegration機能を使うと、各種リポジトリ管理サービスにAPI定義をBackupすることができます。
これをやってみたエントリがあまりに無いので試してみました。
スクリーンショット
連携画面。PostmanのAPIとGitHubのブランチ(リポジトリは選択済み)、共有する際のファイルの指定をします。
連携後、Postman側には特に何も表示されませんが、GitHubを見ると確かにコミットが追加されています。
Webhookを設定しているのでGitHub側を更新するとPostman側にも更新が反映されるようです。
GitHubと連携中である旨が示されます。日本語化けてる...
注意点
県外の友達と画面中継&ボイチャしながらあつ森をしたかった(Macbook & HD60S)
TL;DR
映像の中継は比較的簡単だが、こっちのゲーム音声 + 声をミックスしてDiscordに取り込ませようとすると途端に厳しい。ゲーム音声は普通にマイクで拾いましょう。
こちらが厳しい構成です。
音声がめちゃ汚くなる。
MacデフォルトのAggregated Deviceの音質が悪いような気がするが、果たして...
とりあえずゲーム音声は普通にマイクで取り込んでしまったほうが手っ取り早そう。実況とかするなら別だけど。
`subscription for the service`以前に作成した AWSのIAM UserのAccess Keyは一旦捨てたほうがいい?
The AWS Access Key Id needs a subscription for the service
エラーを受けて、サインアップのプロセスがすべて完了していることをチェック→再度アクセスキーで作業したがエラー。
アクセスキーを再作成したら動きました。