読者です 読者をやめる 読者になる 読者になる

cocuh's note

type(あうとぷっと) -> 駄文

かわいい女の子がそっと彩るintellij pluginを作りました。

「コードを書いてたら精神が荒れてきますよね?」  
「可愛いキャラがIDEにそっと彩ってくれたら嬉しくないですか?」  

と、ちょっと前に思って 息抜きintellij pluginを書いてみました。
BackgroundChibiCharaといい名前です。良ければ使ってみてください。

JetBrains Plugin Repository :: BackgroundChibiChara

bugや要望などありましたらgithubにissueに投げてくださると妖精さんがおしごとしてくれるかもしれません。
日本語か英語かJavaで書いていただけると喜びます。

github.com

f:id:cocu_628496:20150830042814p:plain

要件

  • 可愛いキャラがそっとIDEを彩る
    • ただし デコるとか 痛IDEみたいにコッテリしたものじゃなくて彩る程度

使い方

  1. jetbrain製品のFile->Settings->PluginからBrowse repositoryしてBackgroundChibiCharaをインストールする。

  2. Settingsにpluginの下のような設定画面が追加される*1ので、後は察して使う。
    たぶん触ったほうが理解早いと思います。

f:id:cocu_628496:20150830042241j:plain

機能

  • 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の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とか)で有効にならない時があって、ログも吐かないので悩んだ時間がありました。

そのことはこっちに。

qiita.com

PersistentStateとconfigurableむずい(複雑なアプリケーションむずい)

途中までpersistentStateを使わない書き方で書いていたのですが、使うほうがイマドキな実装のようなので書きなおしたり、configurableとPersistentStateがいまいち理解できていなかったりしたので、設定が保存できないバグだ一時期あったりしました。
所々諸々は私がjava慣れしてないからだと思います。

全体の設計がわからなかったので、とりあえず書いて、読んで、消して、書いて、読んでとやっているとlistenerがここにある理由とかがようやく見えてきて時間がかかりました。

あんまり複雑なアプリケーション書きなれてないのが大きいかもしれないですが、
ドキュメントなりで設計思想とhandlerが呼ばれるタイミングなどフローを書いてあると親切なんじゃろな、と思ったので自分が書く時は気をつけたいなと思ったり。

複雑すぎて所有権管理がうまくできてなくて、循環参照とかになっててGCされないとかありそうでこわい。

*1:pycharmとintellijでは、コアなintellijのbuildが違うのでメニューの階層が違ったりする