かわいい女の子がそっと彩るintellij pluginを作りました。
「コードを書いてたら精神が荒れてきますよね?」
「可愛いキャラがIDEにそっと彩ってくれたら嬉しくないですか?」
と、ちょっと前に思って 息抜きにintellij pluginを書いてみました。
BackgroundChibiChara
といい名前です。良ければ使ってみてください。
JetBrains Plugin Repository :: BackgroundChibiChara
bugや要望などありましたらgithubにissueに投げてくださると妖精さんがおしごとしてくれるかもしれません。
日本語か英語かJavaで書いていただけると喜びます。
要件
- 可愛いキャラがそっとIDEを彩る
- ただし
デコる
とか痛IDE
みたいにコッテリしたものじゃなくて彩る
程度
- ただし
使い方
jetbrain製品の
File
->Settings
->Plugin
からBrowse repository
してBackgroundChibiChara
をインストールする。Settings
にpluginの下のような設定画面が追加される*1ので、後は察して使う。
たぶん触ったほうが理解早いと思います。
機能
- alpha透過
- 複数画像がランダムに配置
- 画像間の間隔を変えられる
- エディタの右側とか左側を選択できる
今困っていること
画像のトリミングがメンドクサイ1!!!
絵師様がちびキャラを透過pngで投稿していただけるように念力を送っているところでございます。
前景検出まわり興味あるので書いてみたい間はあります。ヒューリスティックな方法でもいいけれども勉強がてらdeepとかCNNまわりで前景検出とかやっている人とかいないのかな。。。
前景検出できてもtrimmingするときに境界に白い部分が残ってギザギザになるのが難しいですね。Adobe先生とか大の得意そう。。。
知見
plugin書く上で得られた知見というか感想です。
intellij先生の歴史長いなぁ
調べると古臭いdocumentだったり最終更新日が10年前とかあったりします。
sample codeが古くて今時のやり方じゃないこととかありそうで、公式のpluginのコードを参考に書いたりしています。
no more java というかno more jcomponent
backgroundを追加するものなのですが、実はbackgroundじゃなくてBorderで描画していてforegroundなんです。
JComponent.setBackgroundImage(Image)がないのがぜひ死んで欲しい(setBorderでやるとこうなる pic.twitter.com/APwxvO8xUP
— のじゃ猫耳幼女 (@cocu_tan) 2015, 7月 24
どうしてかというと、jcomponentのjcomponent.setBackgroundImage(Image)
がなくて、jcomponent.setBackground(Color)
しかないのです。
Colorしか取らないのなんで!!!
jcomponent.setBorder(Border)
はあってBorder.paintBorder(component, graphics, x,y,....)
とあるのでgraphicsにごりごり書けばimageできます。
でもなんでBorderはimage描画できるようにしたの!!!
他のsimilar pluginも大体borderでやってたりします。 jcomponentのunderlayとか考えないと行けなそうでめんどくさかったのでborderでやってます。
ログ吐こうぜ
intellij pluginを作った際に、他のjetbrain製品(pycharmとか)で有効にならない時があって、ログも吐かないので悩んだ時間がありました。
そのことはこっちに。
PersistentStateとconfigurableむずい(複雑なアプリケーションむずい)
途中までpersistentStateを使わない書き方で書いていたのですが、使うほうがイマドキな実装のようなので書きなおしたり、configurableとPersistentStateがいまいち理解できていなかったりしたので、設定が保存できないバグだ一時期あったりしました。
所々諸々は私がjava慣れしてないからだと思います。
全体の設計がわからなかったので、とりあえず書いて、読んで、消して、書いて、読んでとやっているとlistenerがここにある理由とかがようやく見えてきて時間がかかりました。
あんまり複雑なアプリケーション書きなれてないのが大きいかもしれないですが、
ドキュメントなりで設計思想とhandlerが呼ばれるタイミングなどフローを書いてあると親切なんじゃろな、と思ったので自分が書く時は気をつけたいなと思ったり。
複雑すぎて所有権管理がうまくできてなくて、循環参照とかになっててGCされないとかありそうでこわい。