Linuxのデスクトップとサーバーについて扱います。動機・リリースまで・今後daisy_sequenceについて、まずは動機・リリース前後の振り返り・今後について、ポエムと時系列を書いておきます。ドキュメント作成の前準備として、また忘れないうちに備忘録として。daisy_sequenceについてdaisy_sequenceはマルチプラットフォームなGUIシーケンス図エディタです。オープンソースにはしていませんがソースコードは読んだりコントリビュートすることができます。本記事を書いた時点で、以下の特長を持っています。最終的にはLinuxでの使用を含め、自分で自由に改変できる気楽なシーケンス図エディタが欲しかったので書きました。実際に作り始めるまでにはもうちょっと長いストーリーがあり、動機は複合的です。Community(以下Aster)がversion7から有償版に移行した。複数Elementのrotateを気合で実装してしまったために、vecterion_vgeプロジェクト(以下vecterion)が行き詰まってしまった。lina_dictoプロジェクトが一段落して、electron(node.js)は速度が出ることがわかった。高度なGUIアプリケーションを試したくなった。AsterはGUIによる高度なUMLエディタです。クラス図とかも描ける。vecterionでもわざわざWindows環境を用意して使った(vecterionはUbuntuで開発している)くらいなのですが、無償利用できるのはversion6.9が最後となりました。これはそれなりに昔の話で、当時は自分のところでは6.9を引き続き使わせてもらおうということで決着していました。vecterionは自作のベクタグラフィクスエディタです。マルチプラットフォームで、C/Gtk3で開発しています。ベクタグラフィクスエディタを開発するにあたって、最大の問題は高速なラスタライザの実装なのですが、Gtk3がバックエンドでも使っているCairoライブラリが実用的に高速なラスタライザで、今のところ高速化を意識しない設計で書けています。vecterionベクタグラフィクスエディタとはいえ、Cairoはあくまでラスタライザなので、ドキュメントの管理とレンダリングの指示はvecterion側でするわけで、そこが複雑化してしまいました。良くなかったのは「複数Elementのrotateを気合で実装してしまった」ことで、ここでいう気合とは、ドキュメントも設計もなくとりあえず動くまで実装をトライアンドエラーしてしまった、という意味です。これはわりと真剣に反省してます。vecterionが行き詰まる前後に、lina_dictoシリーズが始まりました。これはElectron製の日本語とエスペラント語の辞書アプリケーションで、後に英語版を作りました。Javascriptエンジンで辞書データを回すことが最大の懸念でしたが、実用的な速度が出て、以前はこてんぱんに言われていたJavascriptを見直しました。lina_dictoは当初の目的を叶えるすばらしい辞書アプリケーションとなり、開発は一段落しました。次に何をしようかなと考えたとき、まだvecterion_vgeのエンジン改修は荷が重いだろうから、もう少し規模の小さいものをやって慣れよう、ということにしました。いうわけで、vecterionの知見を活かしつつ整理でき、lina_dictoよりElectron利用として発展的な課題になる、規模が小さいGUIエディタアプリケーションとして、シーケンス図エディタdaisy_sequenceを始めました。土日で実証モデルを構築しました。具体的には、JSONオブジェクトによるシーケンス図データ構造と、それを元にしたSVGエンジンによるシーケンス図描画、描画速度がユーザの編集操作に耐えることを、モックで確認しました。02/03にgitリポジトリに最初のコミットをしています。開発開始はこの日のはずです。03/01に最初のリリース。最低限の実用化に一ヶ月ということになります。04/07頃に(当初の予定になかった)PlantUMLのエクスポートを追加しました。本アプリケーションは実証モデルの頃から、必要十分なフォーマットのSVG、有用なラスタライザ・ライブラリのSVG.js、そしてChromeの高速なSVGレンダラ実装に支えられています。Cairoも良かったのですが、Javascript動的変数とSVGの組み合わせは、GUIエディタのモックを作るにあたって強力です。daisy_sequence実証モデルdaisy_sequence実証モデル最初のリリースにおいて最大の問題はアプリケーション・アイコンでした。アイデアが早く思いついていれば、リリースは5日くらい早かったと思います。その間もコードを書いていたので機能的にはアップしていますが。以前から、自作アプリケーションのアイコンは自分でデザインしています。得意というほどではないですが、フォントとか作っていたこともあるので。現在のアイコンはわりと気に入っています。最初のリリース後、スラドの日記に書いたり周囲に見せたりして、いろいろ反応をいただきました。その中で多かったのはPlantUML対応でした。(Asterのネイティブフォーマットが読み書きしたいと言われたらどうしようと思っていたのですが、それは今の所まったく要望が無いです。)また、自分しか要望していないですが、CI/Makefile連携のためにコマンドラインからのエクスポート機能を付けました。内部的にはテストにも使っています。反省点PlantUMLについて、事前にもっと調べておけばよかった。本アプリケーションで描いたシーケンス図の見た目が、必要十分ではありますが、良いとは言えないので良くしたい。残念ながら自分では良いデザインを思いつかなかったので、できればどこか自分以外の外部にデザインを依頼したいのですが、その費用が捻出できるかどうかはちょっとわかりません。PlantUMLへの対応強化はちょっと考え中。インポートはPlantUMLの記法をフルサポートするのが厳しそうなので、ちょっとズルいショートカットで対処できないかなと、これは妄想段階ですが考えています。UML図フルサポートは大変なのでやらないつもりですが、最低限クラス図との連携はあると良いというアドバイスを頂いたので、これはいずれやれるといいなと思っています。開発自体はシーケンス図エディタが書けて、一段落したつもりです。今後については、何か新しいアイデアを思いつくかどうか、ユーザがどれくらい増えるかどうか次第ということにしています。手を入れたい気持ちはあるのですが、他にも書きたいものや作りたいものがあるので。おわりにというわけで、自作シーケンス図エディタでした。今回のように一ヶ月くらいで作れてしまうものもあるので、みなさんもっと軽率にGUIな開発支援系エディタとか書くと良いと思います。次はdaisy_sequenceの設計的なこと、技術的なことなどについて書きます。mini2を試験導入していてすごく便利で体感が良かったです。nijiflowをベースに、機械学習で艦これとアズールレーンの画像の分類器を作り、学習済みグラフ等を公開した。これのTwitterBotを作成し公開している。データセットはPixivのタグ付け済み画像情報を元に作成した。Web上にあまり開封写真等の詳細がなかったので残しておきます。モノが大きいためか、知らない運送会社でおくられてきた。...JavaScriptで、変数を使った正規表現マッチング例および失敗例は、自作のJavaScriptソースから抜粋。※例ごとにマッチする文字列が違いますがご容赦ください。