Mattermost Desktop 3.6

久しぶりの更新です。

タイトルそのまんまですがMattermost Desktop 3.6をリリースしていました。

当初予定していたRC版の直前になってインフルになったりしましたが、無事にリリースできて一安心です。 期間のわりに分量が少なめかとも思っていたのですが、changelogを読み返してみると意外とバグ修正してました。

詳細なところはリリースノートを見ていただくとして、大まかな変更点は以下の通りです。

機能改善

  • Mattermost 3.6で導入されたチームサイドバーの未読表示に対応
  • アカウント連携でのログインの際にOneLoginやGoogleでの認証に対応
  • タブバーにサーバー追加ボタンを追加
  • 設定画面の改善
    • 設定を自動保存
    • 全ての設定項目に説明を追加

廃止

  • Ctrl(Command)+Sショートカット(検索バーにフォーカス)の廃止
  • [Mac] ウィンドウを閉じた際にDockアイコンを隠す機能の廃止
  • [Windows] トレイアイコンのクリックでウィンドウの表示/非表示を切り替える機能の廃止
  • [Windows, Linux] メニューバーを隠す機能の廃止

今回、上に書いた通りいくつかの機能を削除しています。 普通のアプリと比較して一般的な動作でなく紛らわしいもの、一度設定した後に戻し方を知っていないと設定を変えられず困るもの、といった観点で削除に至りました。 (個人的にはメニューバー隠しは残したかったのですが、それはそれ)

ただ、検索やメニューバーに関しては適切に扱えば有用なので、代替手段での機能追加を検討しています。

ちなみにUXに関してはMattermostチーム自身がドキュメントを公開していたりします。 元々のコードベースが違うこともあって、あまり沿っていませんが。

今後

Mattermost本体と異なり、デスクトップアプリはざっくりとしたマイルストーンに基づく不定期リリースです。 次は3.7を3月に出せるといいなあ、という感じで動いています。 バグ修正がメインの予定ですが、ようやくスペルチェック機能を載せられるんじゃないかと思います(たぶん、きっと)。

あとはソースコードの改善ですね…ひどいコードだという自覚があるのでプルリク歓迎と言い出しづらい…

Node学園祭2016に行った話 2

前回の続き。

yuya-oc.hatenablog.com

なんとか1か月経つ前に書きました。セーフセーフ。

Building Interactive npm Command Line Modules

https://lrlna.github.io/nodefest-2016

コマンドラインオプションを覚えるのは大変なのでインタラクティブに使えるようにして使いやすくしましょうという話。

yargs自体はこの話を聞く前から使っていたのですが、その他のpromptchalk, inquirerといったライブラリは知らなかったので聞いてよかったです。 色変更や選択肢からのカーソルキーでの選択なんていう面倒なもの、みんなどうやって実装しているんだと思っていましたから。

本題と全く関係ないですけど$PS1に絵文字を使うのがいい感じだったので取り入れてみたいところです。

Famicom programming with JavaScript

http://fritzvd.com/talks/tokyo-famicom

タイトルの通りファミコンプログラミングをJSで、という話。

デモこそうまく動いていなかったようなのですがJSはどこまで行くんだ...というのを感じられました。 ちょいちょいファミコンの話に脱線するのが面白かったです。8bit制約楽しい。

(エミュレータで動かす以上当然ですが)ROMにコンパイルされるとのことなので、実機でも動かせるのだろうなと思うとやってみたくなります。

GraphQL for the RESTful crowd

GraphQLなるWeb APIの形式(?)の話。

REST API自体を作ることも触ることもほとんどないので、そもそもGraphQLがなんなのかあまりわかってなかったのですが、題材がポケモンだったこともありすんなり話に入っていけました。 当面触ることもないのですが、ある程度は調べておいた方がよさそうに感じました。

Keynote

Seif Projectの話。Web(と言うよりHTTPS?)を置き換えるのだそうです。

公開鍵暗号での通信をNodeが担当してUIをQtで作るのだそうで、アーキテクチャのきれいさは理解できるのですけど、Seif Protocolで通信するWebブラウザが出てくるだけで終わるんじゃないかなあという気がすごくします。 Qtで使うC++って結局のところQt用の言語になってしまっていてアプリ毎に開発するのはコストが高いと思うのですよね。 各プラットフォームごとに実装するよりはもちろん楽なのでしょうけど。

質疑応答の中で言ってましたが、現状では接続先の特定には「すごくひどいURLのようなもの」を使うしかないとのことで、将来的にはDNSのようなものも必要なのだろうかとか考えていました。

どうにも最終形が今一つイメージがしづらく、そのうち具体的なアプリケーション例が出てきてほしいなあと思いました。

Why to Standardize your READMEs

standard-readme

READMEのフォーマットを標準化してみんなで使おうという話。

実際READMEを書くのって思う以上に大変だったりします。 「何書けばいいんだっけ?」「あれも書いておかなきゃ」と毎回悩む羽目になったあげく結局何か抜けていたりとかするので、機械的にチェックできる仕組みがあると助かりますね。

Vue.js 2.0 サーバサイドレンダリング

https://speakerdeck.com/kazupon/vue-dot-js-2-dot-0-server-side-rendering

そもそもVue.jsを知らなかったので理解がイマイチだったのですが、React以外の選択肢として知っておくと良さそうかなと思いました(なおAngularは挫折)。

React + Reduxを使った大規模商用サービスの開発

https://speakerdeck.com/yoshidan/nodefest2016

Mattermost Desktopは素のReactのみで作っていて(サーバー側はRedux化しようと言っているところ)、いずれReact-RouterやReduxを入れていかないとしんどいかなあと思っていたところだったので、Reduxの具体的な事例を見れたのが良かったです。

消費者向けというところもあるのでしょうけど、商用サービスというのは大変なのですねえ。

boarding the tiny framework train

https://github.com/yoshuawuyts/choo

フレームワークを作る話なんですが、発表者のYoshua氏の、世界中を旅しながらプログラミングをしてるといった生き方や途中のライブコーディングの速さに圧倒されたという感想が第一に来ます。 多分、他人のコーディングを見てかっこいいと思ったのは初めてかもしれません(そもそもあまり機会がない)

冒頭に出てきた"BUILDING THINGS IS FUN"というのは大事ですよね。 忘れないようにしたいです。

The Evolution of Electron

https://speakerdeck.com/zcbenz/evolution-of-electron-nodefest-2016

1日目の記事でも書きましたが、これを聞きに行ったといっても過言ではないのでした。

AtomのためにElectronを作るに至った経緯から始まり、オープンソースの成長にはコントリビューターの存在が大事で、そのために気を付けることを話していました。

  • 開発のしやすさ(セットアップスクリプトの用意や、可読性の良いコード)
  • IssueやPull Requestへの反応の早さ

さて自分はどうかと振り返ってみると、反応の早さは本業がある以上どうにもならない時もあるとして、とりわけ前者の可読性の部分は耳の痛い話でした。 勢いのまま進めてしまいがちなので気を付けたい部分です。 何が良いか、というのはその時々で変わる面もあると思うのですが、フレームワークのやり方に乗っかってしまうのは一つのやり方だとは思います(そんな簡単な話じゃない)。

JavaScript による並列処理:共有メモリとロック

https://speakerdeck.com/chikoski/20161113-nodefest

タイトルの通り、JSでマルチスレッドをするときのメモリ管理に共有メモリとロックが必要ですよね、という話。

JSというか実質Cの話で、内容的にも「そりゃそうでしょうよ」というものなわけですが、ある意味今回1,2を争う面白さだったかもしれません。 JavaScriptって全然イケてないなー(棒)

Lightning Talks

LTからは特に興味のあったものを。

WebAssemblyに欠けている大事なもの

https://docs.google.com/presentation/d/116KcjqmqlO9SnHt-G5cemWgWgepqLEvZJ1vSoptEjI4/edit

C/C++のパッケージマネージャとかライブラリ依存の話がひたすら首を縦に振ってうなずくしかなかった。 最近はC/C++を全く書いていないので、そろそろCMakeLists.txtをスラスラ書けない気がする... ローカルフォルダで完結するパッケージマネージャが欲しい...

自分でパッケージマネージャを作るところまでは考えが及ばなかったので自分は普通だなと思いました。

From Library to Tool - power-assert as a General Purpose Assertion Enhancement Tool

https://speakerdeck.com/twada/from-library-to-tool-power-assert-as-a-general-purpose-assertion-enhancement-tool

アサーションツールへの依存性をゼロにすることでテストコードをより長生きさせましょうという話。

chaiを初めて見たときにその書き方に感動して使っていたんですが、テスト失敗時に何が悪いのかイマイチわかりにくく最近ではイマイチだと感じていました。 いっそGoのようにアサート無しでベタにif文書いていた方がマシという...

そんなところにこの発表だったので、次からはpower-assertを使いたいなと思いました。

RuntimeJS Playground

https://github.com/groundwater/runtime-playground

JSでハードウェアレイヤを触る話。実にプリミティブにディスプレイデバイスをメモリ番地で参照して、それが実際にQEMU上で動いているという、マイコンを触る側からすると実に親しみやすい最高のプレゼンテーションでした。

(やれるかどうかはともかく)実機で動かしてみたいものです。

Closing & Party

普段こういう場ではコミュ障を発揮してあまり話をできない性質なのですが、せっかく来たのでZhao氏に話しかけるところから始まり、普段よりは少しマシに人と話をできたと思います。

でもやっぱりしんどいものはしんどい。


参加人数もさることながら、通訳までこなしていて、運営は非常に大変だったのではないかと思います。 1セッション30分で次から次へと進んでいくので、かなり密度の高い1日になりましたが、とても楽しかったです。

来年も参加するかというと、東京なので腰が重くならざるを得ないのですが、参加できるといいなあと思います。

Node学園祭2016に行った話 1

もはや1週間以上前の話なんですが、タイトルの通りNode学園祭に行ってきました。

nodefest.jp

nodejs.connpass.com

ちょうど去年のNode学園祭の直後くらいに存在を知り、まあ次が面白そうだったら行ってみようかなくらいの気持ちで見ていたんですが、ゲストスピーカーにElectronの作者Cheng Zhao(@zcbenz)氏が来ると知り、これは行くしかねえなとなったのでした。

1日目

横でNode Schoolというチュートリアルもやっていたのですが、もはやNodeを触るのもさすがに初めてではないし、わざわざ東京まで行ってやることがチュートリアルを解くというのはいくらなんでも勿体ないと感じて頑張ってNode Discussion等の方を選んでみました。

Node Discussion

Node/JavaScriptについてGood point/Bad point/Wish listを参加者で書き出して、あれやこれや議論する場でした。 さすがにJavaScript初心者ですからコアな内容にはついていけず、英語を聞き取るので精一杯でした。

何もしないのもな、と思いひねり出したGood pointがpackage.jsonとかいうすごくフワッとしたものになってしまったのですが、実際、依存関係・メタデータ・エントリポイントが全て一つのファイルにまとまっていて、それがプロジェクトフォルダ内で完結しているnode/npmの仕組みはC/C++ばかりプログラミングしていた身としてはすごく羨ましいです。

議論の途中で出た話ですが、やはり直接GitHubのIssueに参加するというのは、やった方がいいと思います。 英語が障壁で、というのも理解はできますが、逆に考えると障壁は単にそれだけで、やっていることはみんな大好きプログラミングなわけです。 テクニカルな言葉自体は大して変わらないというかそもそも英語だったりしますし、高校英語とGoogle翻訳を駆使すれば意外と何とかなるものです(雑)。

後は単純に、こうして欲しい/こうしたらいいのに、というのがあるなら直接githubに声が集まっていないと、作っている側はいちいち気にかけていられないと思います。

Paypal/BrainTree Workshop

BrainTreeのv.zero Node.js SDK(この辺の関係性が未だにイマイチよくわかっていない)を使ってPaypalの決済を実装する、というワークショップでした。 Paypalへのログインに2段階認証が必要+当日サイトが重くなって認証コードのSMSが届かないというトラブルがあって焦りましたが、無事動くところまでいけました。 ある意味久しぶりに全力で頭を使ったかもしれません。

ちょっとExpressのコードを書くだけで決済を実装できてしまうこと、それでテストアカウントとはいえ金銭が動くというのが純粋に面白かったです。 SDKのドキュメントをのぞいてみるとApple Payなんかも既に存在していて、そもそも使う機会はないのですが、ちょっと使ってみたいと思いました。

Code and Learn

時間内でNode.jsにコントリビュートしてみようというワークショップでした。 事前に用意されていたIssueは他の方に取られてしまったので、good first contributionラベルを眺めてました。 せっかくの機会なので、そのうち一つくらいはプルリクを出してみたいところです。

LT

記事を書くのに力尽きかけてきたのでざっくりと。このまま行くと下書きのまま終わりそうなので。

WebRTCは前にちょっとだけ触ったことがあるんですが(諸事情によりsocketio/socket.io-client-cppを使ってC++で)、その時に参考にしたのがhtml5experts.jpの記事でした。 それを書いたのが発表者のがねこさんだったようで、何か話をできればよかったなあと今になって思います。

Electronで大変なところってやっぱり大体みんな同じっぽい。

テスト大事(自戒)。

最後に

頑張って2日目の分も書こう。全体的な感想もそちらに。

Mattermost Desktop 1周年

ふと思い立って確認してみたところ、electron-mattermostを公開してちょうど1年経っていたようです。

元々の公開自体は10月だったのですが、その後Mattermostチームに「デスクトップアプリ作ったよ!」とメールしたのが11月初めの頃でした。 (Mattermostと連携する何かを作った場合に連絡すると、Apps & Integrationsの一覧に載せてもらえるのです)

yuya-oc.hatenablog.com

そもそもは自分で使うために作っていた自家製ソフトウェアで、その時は単にいくつかあったデスクトップクライアントの一つだったわけです。 その後なんやかんや開発を続けていたらお声がかかり、3月に公式アプリ化したわけですね。 本当に突然のことだったので驚いたのを今でも覚えています。

yuya-oc.hatenablog.com

ちなみにこの時にマグカップを頂いていました。Mattermost(mattermost/platform)にコントリビュートした人に贈られるものです。 届いたときはあまり気にしていなかったのですが、日付がVer.0.1.0のリリース日(2015/10/10)になっていました。ありがたいことです。

f:id:yuya-oc:20161106005855j:plain:w300 f:id:yuya-oc:20161106005911j:plain:w300

開発を続けていると面白いことに、使っているライブラリのコード自体まで追って読むことが増え、気楽にバグレポするなど積極的にオープンソースに関わるようになってきました。 なんというか、言語が英語なだけで、単にそれだけのことでしかないのだなあというのが最近の感覚です。 あと、たった数行ですが、Electron本体にプルリクを出すようにさえなりました。 去年の自分に言っても信じないでしょうね。

いやほんとフロントエンド素人(にさえ届かないレベル)だったはずなんですけどね...どうしてこうなったんだか。 いや今でも素人ですが。だいぶひどいコードなのですごく修正したい。

さて現在のところVer.3.5の公開に向けて開発中です。 本業もあるので少し手が止まり気味なせいもあるのですが、今回は地味目のバグ修正や内部的な変更が中心で、新機能などは少ない見込みです。 Ver.3.6では見た目を含めて機能改良を入れたいなあと思っています。

ということで、Mattermostを導入/検討していましたら、よろしくお願いします。

Windows 10でHost-onlyネットワークを設定したVMが起動しない

VagrantでHost-onlyのネットワークを設定してVMを作る必要がありVagrantfileを編集したのですが、VMが起動しませんでした。

どうもネットワークの作成に失敗している様子。エラーメッセージでググって出てきたページの通りVirtualBoxネットワークアダプターの設定を変更し、"VirtualBox NDIS6Bridged Network Driver"のチェックを入れることで解決しました。

www.codelab.jp

上司の会社マシンはWindows 10でHost-onlyネットワークを使うVMを特に苦も無く起動できていた記憶があったので、どうしてこんな差が出ているのかはちょっと謎でした。

非RetinaのMacでRetina環境の動作確認をする

そういえば今はOS XアプリでもRetina対応をしないといけないのだなあということに気づき、まさか新しくMacを買うわけにもいかないので、普通のMacRetina(HiDPI)の動作確認をする方法を調べました。*1

HiDPI設定を使用可能にする

Apple Developerのダウンロードページ(要Apple ID)から、Graphics Tools for Xcodeをダウンロードします。 ダウンロードしたdmgファイルの中にあるQuartz Debugを起動し、 メニューバーから Window -> UI Resolution を選択すると下のようなウィンドウが表示されます。

f:id:yuya-oc:20160404235705p:plain

Enable HiDPI display modesにチェックを入れるとログアウトするよう求められるので、ログアウトします。

HiDPI設定を有効にする

再ログイン後、システム環境設定のディスプレイ設定を開くと、HiDPI設定が追加されているのが確認できます。

f:id:yuya-oc:20160405000646p:plain

あとはこれを選択してやれば普通のMacでもRetina環境を使用することができます(デスクトップがすごく狭くなるので、十分に解像度のあるモニタを使用した方が良いです)。

*1:調べれば出てくるものをわざわざ書くのはどうなんだろうという気持ちはある

electron-mattermostがMattermostの公式デスクトップアプリになりました

www.moongift.jp yuya-oc.hatenablog.com github.com

ベータですけどね。

拙作electron-mattermostがMattermostの公式デスクトップアプリとして採用されることになりました。*1 なんというか驚きすぎて「そんなこともあるんだなあ」ということくらいしか書けそうにないです。

リポジトリオーナーがMattermostのアカウントに変わっていますが、開発自体はこれまで通り私がメインになって進められます。 大きく変わる点と言えば、機能リクエストがMattermost本体と同じくフォーラムへの投稿と投票という形式になることくらいです。 *2*3

もしMattermostを導入/検討していましたら、よろしくお願いします。


Mattermost自体の導入についてはQiitaによくまとまった記事などがあるので、そちらを参照するのが良いかと思います。 私は面倒だったのでdocker run一発な方法を選びましたが、コンテナがMySQLを内蔵しているためにアップグレードや設定変更が厄介になるので、ちゃんと設置した方が良いです。

qiita.com

*1:Mattermost Desktop (beta) - Announcements - Mattermost Peer-to-Peer Forum

*2:Contributing Feature Ideas | Mattermost

*3:GitHubのIssueだと優先順位が付けづらくて最近しんどかったです...