プログラミング-奈良北部のなにか現在は実質目黒東部のなにかプロフィールAuthor:奈良阪某プログラム書いたり絵を描いたり鉄道に乗ったりしています。2015の7日目です。WebSpeechAPIで遊んでみた話でした。Editorというブラウザ向けライブラリをElectronにのせてみました。Editor」が出てきたので・ElectronにのせてWindowsで使えるようにしたという話です。今回いじりたかったJSONデータは・スキーマを書ける程度に仕様が定まっていて・エディタがないとしんどい程度に複雑で・IDを記述すると特定の画像ファイルを意味するなど外部データとの関係性をもっているというもので、他にも見つかった「JSONエディタ」の名を持つものでカバーするには手に余るものでした。これはまあたしかにJSONをEditできるものではあるんですが、どちらかといえば「JSONスキーマを利用した構造化データ編集フォーム作成ライブラリ」が実質のところのものです。ライブラリなので、プログラマがよしなにすれば構造化データに変換可能なあらゆる形式のデータの編集フォームを作成できるポテンシャルを持っていて、正直ちょっと名前で損をしているんじゃないかと思います。これを使えばプログラマがUIの裏方で自由に処理が書けるので、こういう事情持ちのJSONを便利に編集したいという需要が満たせそうでした。いうわけでElectronにのせた版「WithSchemaEditor」を作りました。Editorにファイル/フォルダ選択ダイアログをつけて、ファイルシステム上の実際のファイルを読み書きできるようにしただけのものです。のせてませんなぜならWithSchemaEditorは基本的に具体的な処理はプラグインに全部任せるランタイムライブラリのような作りにしたからです。Editorを採用した理由が「ライブラリゆえに自由がきくから」なので、元のライブラリの自由さをそのままに、ただ動作環境をブラウザでなくデスクトップにしたという感じです。具体的なJSONスキーマと、さらにはファイルの読み込み、書き出しなどの処理は全てプラグイン("with-schema-editor-schema-"から始まる名前のnpmモジュール)に定義します。プラグインを入れ替えることによって、前述のJSONを編集したり、さらにその他の既存のJSONを編集したり、あるいはpackage.jsonを編集したり、色々出来る感じです。Editorを「ライブラリ」のまま素直にデスクトップ移植できたと思います。所感これをやってみた所感としては、Webでいまいちくすぶっている技術がElectronにのせると格段に便利になることがあるのではないかと思いました。JSONいじるとか、実際のところブラウザ上でやるなんてことはあんまりなくて、むしろデスクトップ利用が主眼となる作業です。Webで多機能なものが作れる中で、「出来るからつくってみた」ものっていろいろあると思います。それの主戦場が実はWebではなかった場合でも、Electronを使えば簡単に移植できます。(WithSchemaEditorの実質は300行にも満たないです)これ以外にも、視覚障害者用にWebカメラを使って文字を見やすくする反転拡大鏡というのを過去に作ってみたのですが、Webカメラからの映像の取得、その拡大縮小、さらに階調反転・コントラスト・明度調整といった(たぶん)複雑な処理がHTML5のAPIとCSS3のフィルタを使って爆速で作れたりして、「Web技術」という枠ではお遊びみたいに感じていた機能が、デスクトップというフィールドですごい実用性をもったという体験を得たりしました。いうわけでまとめいまやあらゆる分野の技術を一度に、しかも簡単に使えるブラウザと言う環境、そしてさらにそれを拡張したElectronという環境はときに「Web技術」というとらえ方からは思いも寄らないような可能性を持っています。ゆたかになったWeb技術の自由さを活用して、技術を最も効果的に使えるようにしたいですね。5日目の今日は、様々なウインドウマネージャとかの画像を貼るエントリです。前日4日目はQupzillaプラグインを作るでした。明日6日目はウインドウマネージャから創るデスクトップ作業環境です。世には色々なデスクトップ環境やウインドウマネージャがあります。(2つの違いについてはデスクトップ環境とウィンドウマネージャなどを参照のこと)デスクトップ環境の有名どころでは、かつて双璧を成したKDEとGNOME、UbuntuのUnity、LinuxMintのcinnamon/MATE、軽量系のXfce4、LXDEなどでしょうか。OSではあり得ないことです。OSなどとあまり違いを覚えないかもしれません。本質的にはどのLinuxディストリビューションでもあらゆるデスクトップ環境やウインドウマネージャが使えるはずです。Linuxで様々なウインドウマネージャやデスクトップ環境をインストールしたりしていました。その試したものを下記に陳列してみました。GUI環境選びの参考にしてください(てきとう注意:うえでデスクトップ環境のことばかり言っている割にウインドウマネージャばっかです。片っ端から色々インストールしたのが数年前なので3D云々がからむものがなかったり、ラインナップが若干古いです。タイル型WMはないです。twmなにはなくともまずはこれ。X11標準のウインドウマネージャ「twm」。デフォルトだったせいか、これの派生ウインドウマネージャが色々出たりした。アイコン化ボタン/サイズ調整ボタンなので、今となっては最初に戸惑いを覚えるユーザーが多いと思う。自分も使ってみようとしたがデフォルトではなかなか厳しかったので、twmのカスタマイズなどを参考にしてちょっとカスタマイズしたものが下記スクショ。最大化/閉じるボタンを置くだけでWindowsユーザーにもずいぶん使いやすくなることがわかった。vtwmと、早速のtwm派生ウインドウマネージャ。おおざっぱにはtwmに仮想デスクトップ機能を加えたもの。仮想デスクトップといっても、MacやWindows10や他のLinuxのウインドウマネージャについているそれとは若干異なる。他環境のそれが規則正しく3個とか4個とかの「デスクトップを行き来できる」実装になっているのと違い、画面外に広い「デスクトップの任意の領域を表示できる」ような感じになっている。スクショ右下のが仮想デスクトップUIなのだが、見てわかるとおりだいぶ中途半端な位置の領域を表示できていることがわかる。これが独特ながらわりかし使い勝手が良い感じだった。ウインドウ自体の見た目はtwmのそれではなく、BeOSだかMotifだか風だ。fvwm同じくtwm派生。Motif風なウインドウで、twmの独特なウインドウリサイズよりは使いやすい。特筆すべきは、いわゆるデスクトップ環境のアプリケーションメニューが利用できること。デスクトップ環境でない単なるウインドウマネージャでこの機能を持っているのは割と珍しい。feelを統一しようという規格である「Motif」というのがあるのだが、それを実装したウインドウマネージャ。1989年からある規格なので無骨な見た目だがこれはこれでむしろGeek感が醸し出せて味わいがある。MotifはGUI全般についての規格でmwmはそのウインドウマネージャ部分にすぎず、つまりUIツールキットもGTKなどと同列にMotifがある。下記スクショでは残念ながらmwmのメニュー以外はGTKのものだ。mwmがないじゃんとツッコミを受けて確かにそうだと思ったので12/9に追記。mwmというパッケージ名ではなくopenmotifで入る。openboxblackboxというウインドウマネージャに端を発するウインドウマネージャ。単体でも動作するが、デスクトップ環境LXDEの標準ウインドウマネージャでもあり、LXDEユーザーはつまりopenboxユーザーである。twm派生形と違い、これのみでもつまるところ「今風」の操作体系になっている。fluxbox同じくblackbox派生。これまでのものとは違い、いわゆる「タスクバー」がついていて、これだけでも普段使いがしやすそう。PekWM上記であげているものもテキストファイルで設定を書く感じのなのだが、これはだいぶやりやすかった。デフォルトの設定ではtwmのような操作感なのだが、設定次第でWindowsっぽくもなるし、自由度が高い。Linuxで常用している。惜しむらくは更新がとまっていそうなところ。lightweightなウインドウマネージャ。ダブルクリックするとxtermが開く。WindowMakerNEXTSTEP風......らしい、他と比べて割と独特のタスクボタンを持つウインドウマネージャ。スクショの左下や右上にあるのがウインドウが出ているプログラムを示すボタン。MacのDockに似ているかもしれない。類似品にAfterStepというのがある。jwmGTK+などを使っておらずxlibだけに依存するらしい軽量系を標榜しているわりに割と普通に使える操作感を持つ。Linuxなどが標準としている。IceWMjwmと同じく軽量系つかいやすいを志向した感じのウインドウマネージャ。jwmより割と野暮ったい見た目。qvwmWindows95のパロディみたいな見た目でアイコンがパカパカアニメーションしているネタみたいなウインドウマネージャ。「ネスケ」て......。Linuxにデフォルトで入っていたもの(選択可能)。おもちゃっぽくて趣がある。LXDEようやっとデスクトップ環境。軽量かついい感じの見た目でまあまあ多機能。ウインドウマネージャはopenbox。デスクトップ環境の中ではわりと好き。軽量系を標榜するディストリビューションが採用している例が多い。Xfce同じく軽量系デスクトップ環境。GNOME2に似た外見を持つ。こちらも軽量系を標榜するディストリビューションが採用している例が多い。KDEWindows風の巨大デスクトップ環境。どちらかというとMac志向かなというGNOME2と双璧をなす巨頭。GNOMEと比べるとデフォルトとしているディストリビューションは少ない印象。KNOPPIXとかSlaxとかライブCD系のものに使われていたりして面白い。Gnome2代表的巨大デスクトップ環境であったGNOMEの旧版。デスクトップLinux使っていれば一度は触れるだろうメジャーだった存在。スクショではまるでWindows7のような見た目だが、このようにテーマもやたら充実していた。GNOME3なぜかやたらとUIが変わったGNOME。そのせいか不評で色々と派生が登場することになった。MATEGNOME2のfork。変わってないが、デフォがKDEのようにWindows寄りになった。Mintなどで使用されている。CinnamonGNOME3のfork。GNOME3本家とがらりと変わり、やっぱりKDEのようにWindows寄りの見た目と操作感をしている。Mintなどで使用されている。Unityデスクトップとタブレット両対応をめざしたデスクトップ環境。Ubuntuが採用したがこれもまた不評。Windows8といい、みんな先走ったんだなあ感がある。Unity3Dとは別物。以上そんなとこで雑な紹介を終わります。ぶっちゃけこれを見て特徴を知るとかはあまり出来ないと思いますが、世の中にはたくさんのGUI環境があることを知ってもらえれば幸いです。Linuxは自由なOSなので、その自由さを活用してゆきたいですね。次回は6日目、ウインドウマネージャから創るデスクトップ作業環境です。2015の3日目の記事です。Qiitaでもなくてすみません。軽量言語で簡単なツールを作りたいという場合、ありますね。それを人に配布したいという場合、どうするでしょうか。プログラマ間ならgithubにあげるとか、npmやらCPANやらRubyGemsやらに上げるとかいろいろ定石があるんですが、でも、プログラマでは無い、しかもWindowsユーザーなんかに配るというケースが発生した場合は?自分のケースでいうと、ゲームを作っている時に、デザイナーや企画の人がデータをいじったりするツールを作りたいということがありました。ゲームのパラメータとか、最終的にゲームに投入する形はJSONとかそういうのになるんですが、それをプログラマ以外に手書きしろっていうのはやっぱ酷な話。いうか、いや、むしろプログラマこそ手書きしない。そのためのツールを作れるから。安直に考えればJSONをプログラマがいじればいいんですけど、でもプランナーだけでデータ調整してゲームの体感チェックしたいじゃないですか。いったツールをちゃちゃっと作って気軽に配りたいわけです。そのちゃちゃっと作って気軽に配ること、node.jsならできます。node.exeとLICENSEとmain.jsをてきとうにzipにしてWindowsユーザーに送って、「ここらへんのフォルダにおいて、main.batをダブルクリックしてNE」と言う。簡単でしょ()PerlやRubyなど他の軽量言語ではこうはいかないです。あれらは実質perl.exe、ruby.exeだけで動くものではありません。いえ、perl522.dllがいるというのもそうですが、node.jsとの大きな違いはライブラリの扱い方。":encoding(cp932)";を書きたい場合......perl.exe以外にいくらの*.pmファイルを同梱しなければならないことか。調べるのも大変だし、かといって全部入れようとなるとクソでかい。Perlなどの言語は基本がっつりPCにインストールされることを想定していて、そのためモジュールも整理されて細切れになっているわけです。node.jsはそれと違って、node.exeに標準添付モジュールを全て同梱する形になっているので、このようなかんたん配布ができるわけです。遅れたせいで最初からリンクを張れる4日目は俺的gulpでTypeScriptをインクリメンタルビルドするです。04:45結局何使えばええねんと調べてみた。Serverkitリモートにもインスコってのはちょっと微妙だと思ったので、push型のItamaeかAnsibleだと思った。会社で主にRubyなのでまずはItamaeかな。minaはマルチステージ非対応だったり、capnistranoがなんかwebistranoとかpployとかStranoとかブラウザ上から扱うツールをもってて強そうだったりするので、cap学ぶのが結局つぶしがきくのかなあと。Frameworkついでに。koa(js)と2ラインあるわけだけども、手軽系はやはり暗黙の色々があるので軽量系の方が好き。自分としてまともに使ったことあるのはこのうちMojoliciousとRails。Sinatra/Padrinoでまともにアプリかいてみるべきだな。"4"]なるほど?ためしてみた。"1\n\n2\n3")[1],[2],[3]空白区切りに違和感があるもののPerlが一番自然かなあと思った。