WSLでcrojure開発 (Emacs + cider)

Posted by YpsilonTAKAI On 2017年12月13日水曜日 0 コメント

普段は仕事でPCを使うことが多いし、趣味がらみでもツール類の関係で基本的にはWindowsが必要になったりするので、家でも結局はWindowsを使っています。 

とは言え、やっぱりClojureを始めとしたプログラミング関連の作業はコマンドラインでやりたいし、使い慣れたUNIX系のツールを使った作業からは離れられないのでMsys2を導入して環境を作っていたわけですが、そこはそれ、後づけの環境なので、いくつか気に入らないところもあったりするわけです。

そんな中、話題の Windows10 Fall Creators Update で正式版となったWSL、要するにWindows上のLinux に乗り換えてみたら、Msys2の問題を解決してくれてなかなかよかったので、そのあたりの事を書いてみます。





Msys2環境の問題

このMsys2というのはそもそも「UNIX系のツールをWindowsで動くようにコンパイルするため」の環境なので、コンパイルしたものはWindowsのソフトになっちゃうわけで、そのツールはMsys2環境で動くことはあまり考えていないのです。
たとえば(僕にとっては)開発環境の中核を成しているEmacssも、Windows用のバイナリはMsys2でコンパイルされているので、Windows環境でうまく動作するのであって、実はWindows環境ではないMsys2との親和性は高くないのです。
どういうことかと言うと、たとえばEmacsからMsys2のコマンドであるgitを使おうとするとちょっと工夫が必要だったり、動かなかったりするということです。

たとえば EmacsはWindowsのパスは「 C:\users 」を理解できますがgitコマンドには理解できないということになるのです。
僕が今一番困っているのが、「magitが遅い」ことです。magit-statusなど、gitとのやりとりをするコマンドを打つと、30秒から1分ほどかかります。慣れてしまいましたが、こういう作業の部分に時間を取られるのはあまり納得が行きません。

また、clojureの開発環境であるciderが不安定だったりもします。たまに、といっても2日に1回くらい、固まります。これもLinuxだったらまず発生しない現象です。

「windowsでemacsが動いているだけで幸せなんだから、外部連携などはできたらラッキーぐらいに考えておけ」というような意見もあるようですが、MacがOSXで裏でUnixが動くようになってから、開発環境としてのMacを指をくわえて見ているだけの状態はちょっと辛いものがありました。

ということで、WSLを使うことでこれらの問題が解決しているんじゃないかという期待とともに、進めていくことにしましょう。


WSL環境構築

さて、これから出てくるほとんどの手順は話題の作業内容なのでここで細かいことは書かずに何をやってどうなったかを中心に書いていくことにします。 
細かいところを知りたい場合はいろいろなところで解説されているので、検索してみてください。


Windows10 をFall Creators Updateにする

まずはこれですね。WSLが正式版になっているので。


WSLを有効にして、Ubuntuを入れます。

Windows Subsystem for Linuxを有効にして、ストアからUbuntuを入れます。
SUSEという選択肢もありますが、まずは、使ったことのあるUbuntuにしました。変なところではまりたくないですからね。


Ubuntuを最新にします。

入った Ubuntu の使い方はほんとに普通のUbuntuと同じで、アップデートするにはapt-getを使います。
sudo apt-get update && sudo apt-get upgrade
入れたばかりなので、アップデートされるパッケージはあまり無いだろうと思っ
たのは甘くて、かなり時間がかかりました。


javaを入れる

Clojureを使うには必須ですね。
Windows側にはjavaは入れてありますが、別途WSL用にも入れてやる必要があります。
以下のコマンドでjava8を入れました。

sudo add-repository ppa:webupd8team/javasudo apt updatesudo apt install -y oracle-java8-installer




ターミナルエミュレータ cmder を入れる

Windowsのターミナルのcmd.exeはWindwos10 Fall Creators Updateでよくなったと言われていますが、そもそも貧弱なのでちょっとくらい良くなってもたいして使いやすくはありません。

Msys2では付いているminttyを使っていたのですが、「cmder」というのが評判がよさそうなので、使ってみることにしました。
   http://cmder.net/
起動がちょっともたもたしている以外の使いごこちはよさそうです。




Emacs25を入れます

標準のパッケージを入れると24になります。
Msys2環境では25を自分でコンパイルして使っているので、同じようにして入れようかと思ったのですが、パッケージを公開してくれているところがあるようなので、それを使わせていただくことにしました。
    https://www.yokoweb.net/2017/03/19/emacs-25-apt-install/
25.3が入りました。

いずれは自分でコンパイルしたやつに差し替えようかと。




EmacsをGUIモードで使うには、Xサーバーが必要です。

よいターミナルエミュレータが入っていればそこでEmacsを動かす手もありますが、やっぱり複数フレーム作ったりしたいので、GUI での動作は必要です。
ところが、WSLのUbuntuではXのサポートは含まれておらず、そのままではGUIベースのツールを動かすことはできません。

できないんですが、まてよと。

そもそもLinux/UNIXではOSとGUIの機能は別の機能として実装されていて、XサーバーもOS上で動くアプリケーションの1つに過ぎません。そして、Xサーバーって言うくらいなので、クライアントサーバーモデルを取っているので、リモートで動くXサーバーに画面を表示することだって難なくできるはずなのです。
ということは、WSLでなくWindows側にXサーバーを立ててやれば、GUIのアプリケーショ
ンを動かすことができるはずです。 いえ。できます。


VcXsrvをインストールした

Windowsで動作するXサーバとしてはXmingが有名で、仕事PCには入っています。

今回環境構築にあたって、調べてみると、Xmingは最近更新が止っているらしく、代りにVcXsrvっていうのが流行っているようです。
   https://sourceforge.net/projects/vcxsrv/
流行りものには弱いので、さっそくこれをインストールします。
あちこちで言及されていますが、プログラム起動後のタスクバーのアイコンがXのものでなくそのアプリケーションのものになるっていうことだけでも乗り換える価値がありますね。



フォントも、Windowsの物が使えるようにしておきます。


これでやっと、作業の準備ができました!
そうです。 つらつら書きましたが、まだやっとClojure開発の基盤ができただけなのです。
ここから先は普通にUbunutuでClojureの開発環境を作るのと変わりありません。と言ってもLeiningenを入れるだけですがね。



Leiningenをインストール

Windows版ではありませんよ。Linux版を入れてくださいね。

注意
2017/12/11の時点での最新は2.8.0ですが、javaのエラーが出ます。
バグらしい
    https://github.com/technomancy/leiningen/pull/2324

1つ前の 2.7.1を使っています。次版には修正されているとのこと。

そのときのエラーメッセージ





yosi@mowegi:~/workspace/clojure/weasel/weasel-example$ lein cljsbuild once
Compiling ClojureScript.
Java HotSpot(TM) 64-Bit Server VM warning: Unable to open cgroup memory limit file /sys/fs/cgroup/memory/memory.limit_in_bytes (No such file or directory)


emacsのclojure開発環境を整えます

clojure開発用で入れているのは以下のパッケージです。

  • cider
  • clojure-mode
  • smartparens
  • company


さて、これで、Clojureの開発環境は整いました。


プロジェクト作っていろいろやってみる

さて、いろいろ動かしてみましょう。

REPLを使うのが目的のプロジェクト

Project Eulerを解くとか、ちょっと込み入った計算をさせるとかする時には、
REPLだけで済ませてしまうことがよくあります。
相変わらず起動には時間がかかりますが、REPLは普通に起動しまして、使っていて特に困るようなこと発生していません。


Webアプリケーション

Webアプリケーションはどうでしょう。
サンプルとして、ここにあるやつを動かしてみます。
    http://clojure-doc.org/articles/tutorials/basic_web_development.html

結論から言えば、これも特に問題無く動きます。




右がEmacsで下半分がciderの画面です。左の下のWindowsで動いているChromeで起動したプロセスにアクセスしています。
また、タスクバーにあるEmacsのアイコンがEmacsのものになっているのがVcXsrvのよいところです。


このページの記述ですが、最後の方でちょっとはまりました。
REPLを使って作って行ったのですが、最後になって、webサーバのjettyの設定
を追加することになっていて、また、REPLベースで起動する方法が書いてない。

こんな感じです。


(def srv (atom ""))(reset! srv (jetty/run-jetty app {:port 8080 :join? false})


これで、localhost:8080 にアクセスするとページが表示されます。
止めるときは


(.stop @srv)(reset! srv "")


といった感じです。



まとめ


と、いうことで、wslを使ってWindows10でより快適な clojure 開発環境を作
ることができることがわかりました。

不満だったmagitの反応についても、Linux環境と変わらない使用感で快適です。

ただ、まったく何も不満が無いかというとそうではなく、wsl上のLinuxは、
CygwinやMsys2とは違ってWindowsのファイルシステムとは基本的に別になって
いて、間には壁があります。 この壁のおかげで、快適な環境を手に入れるこ
とができるのですが、より2つのシステムで作業していることを意識してつか
わなかればならないというところがあります。


これで、また、ちょっと、Macで開発している人達への羨ましい度が減りまし
た。

READ MORE

Planck ハードウェアシリーズ(USBコネクタ)

Posted by YpsilonTAKAI On 2017年10月11日水曜日 0 コメント
プランクを手に入れて自分自身を慣らすために職場でも使っていまして、いろいろ書くことも溜ってはいるのですが、ハード的な問題点とその解決策について書きます。

ケーブルがつっかえる

Planckのケーブルは、奥に垂直に挿さるようになっています。なので、真っ直ぐなケーブルだと奥行方向に場所を取ります。


特に、Surfaceと一緒に使う時にかなり邪魔になります。
直角に挿さるようなケーブルを使えばよいのですが、ケーブルを自作する場合、90度に曲ったコネクタは手に入りません。
せっかく作った自作ケーブルを使うには、、「USB-B オス <-> USB-B メス」で直角に曲っているアダプタが必要です。

そんなものは無いかなぁと探してみると、良いものをみつけました。

直角に曲ったアダプタ発見

以前から中国の通販サイトのaliexpressが気になっていて、でも、値の張るものは初めてだとちょっと怖くて手を出してませんでしたが、ちょうどよさそうなので、探してみました。
キーワードとしては、USB, angle あたりで入れてみると沢山ヒットします。

今回手に入れたいのは、「USB-B オス <-> USB-B メス」で直角に曲っているアダプタです。

結局ここで売ってやつにしました。 これです

さて、注文してちょっとドキドキしながら待っていると、発送連絡のあった2日後くらいに問題なく届きました。

届いたもの

プチプチの付いた封筒で届いたのがこれです。


ケーブルって書いてありますが、アダプタです。 右向きと左向きの2個セットです。
これで、送料込みでだいたい500円です。たぶん、日本で買うより安い。

使ってみた

ケースとの干渉も心配していましたが、そのようなことも無く、問題無く使えました。



これで、つっかえる心配もなく快適になりました。

亡くしそう

さて、使ってみると、 これ使いやすい向きっていうのが、シチュエーションによって違いそうです。ということは、両方持ち運ぶことになるのですが、どうやって亡くさずに持ち運ぶかっていうのが問題です。
穴を開けて、連結して、ケーブルに付けておくことができるようにするかな。

ちなみに、Ergodoxのアクリルケースにもかろうじて付けることができました。


Ergodoxはこれだけでなく、連結用のケーブルもあるので、そちらの対策も考えないとあまり意味はありませんが。


こんな感じです。




READ MORE

Planck ハードウェアシリーズ(組み立て編1)

Posted by YpsilonTAKAI On 2017年9月21日木曜日 0 コメント


やっとplanckが届きました。組み立てはスイッチを付けるだけで難しくはないので30分くらいでることができます。

組み立て方法についてはいろいろなサイトで紹介されているのでやりませんが、カスタムポイントだけ。

  • スイッチは基本は茶軸ですが、親指のところの前列真ん中の6個だけ黒軸にしています。
    上の写真をよく見ると、前列の真ん中だけ、スイッチ本体が黒いのがわかると思います。
  • プレートの切り口はちょっとバリっぽかったので面取りをして、表面もちょっとザラっとしていたのでやすりがけをして軽くコンパウンドで磨きました。
  • 大幅な遅れの原因になったFCC/CEの認証シールですが、ダサいし日本では不要なので、はがしてケースの内側に貼りました。


  • 組み立てのポイントを1つだけ。スイッチは,まず4隅の4つをプレートにはめて、裏返して基板を載せ、浮かないように半田付けをします。こうすることで、基板とプレートの位置を決めてしまうのです。 後は残りのスイッチを全てパチパチはめてダーっとハンダ付けです。全てのスイッチをプレートにはめてから基板を載せようとすると、スイッチの電極がうまく穴から出なかったりして苦労します。

以下箱開けです。

こんなMassdropの箱で届きます。
中には、一緒に頼んだスリーブとキットが格納された箱。この箱なかなか良い。
 裏にはデフォルトで入っているファームウェアのキーマップが印刷されています。
箱には、OLKB とMassdropのロゴが。
内容物は、ケース・マウントプレート・キーキャップ・USBケーブル・ゴム足、あと、基板。

キーキャプはフラットなタイプに魅力を感じていないのもあり、安いOEMタイプのものを選択したのですが、白が白過ぎでかなり安っぽさを醸し出してしまっていてちょっと悲しい。




ケースの緑は、想像よりも緑だった。
こんな緑だと思っていましたが、こんなみどりでした。


 基板は、ゲースの中にスポンジの緩衝材に挟まれて入っていました。

スイッチ以外のパーツは半田付け済みです。
基板の作りや、パーツの実装はとても綺麗です。
ぱーっと組みたてて、これが裏。
READ MORE

Planck ハードウェアシリーズ(購入編1)

Posted by YpsilonTAKAI On 0 コメント

Planck?

Planck っていうのは、OLKB という会社?が作っている小さなキーボードです。発表されたのは数年前で、基板のバージョンは4になってます。
キーが縦に4行・横が12列しかありません。 基本的に、ホームポジションから指を延すだけで届く範囲にしかキーが無いキーボードということです。

会社名のOLKBはたぶん OrthoLinear KeyBoard の略で、Ortholinear っていうのは格子配列のことで、そして、OLKBの作っているキーボードはすべて格子配列になっています。

ちなみに、Planckは量子力学に出てくるプランクのことで、最小の長さと言われているPranck長を意識して付けたものでしょう。 他のキーボードも、Preonic(プレオン的)とかAtomic(原子的)みたいな名前を付けてます。

持ち運び用キーボードが欲しい

普段は仕事場ではKinesisのAdvantage(リンクは新版の2ですが)を使っていて、もうすっかり格子配列に慣れてしまっていて、普通のキーボードはあまり打ちたくないのです。

とは言え、Advantageを持ち歩くのは現実的ではないので、持ち運び用にはTypeMatrixの2030を使っていました。
格子配列であること、左右のキーの間にEnterなどの機能キーがあっていくらか分離していること、Dvorak配列に対応していることなどかなりいい線行っているのですが、いくつか不満があって、第一はキーのリマップができないこと。やっぱりこういう変態配列のキーボードはリマップできてなんぼだと思うのですよ。僕はコントロールを親指で押したいのです。 もう一つは、キーの押下圧がちょっと高めなこと。長時間使っていると確実に疲れます。 もしかすると、パンタグラフでストロークが短かいのが原因かもしれませんが。

で、長らく代替案を探していたわけですが、画期的なやつを発見です。

Textbladeは画期的

画期的なやつっていうのは、WayToolsのTextbladeです。ホント凄いんです。
 でも、2年半も経ってるのにまだ発送される気配はなく、開発状況も未だに不明瞭なままというひどい状況になってます。 
本当にひどい話なんですが、まあ、でも、なんとなく先には進んでいるみたいだし、製品としてはとても先進的で魅力的な新しいデバイスなので、気長に待つことにしてます。

んなことしているうちに、去年、Ergodoxを手に入れました。

Ergodoxはどうなのよ

Ergodoxはなかなか使い心地がよいのですが、持ち運んで使ってみるとやっぱりちょっとかさばる。Footprintも大きいし、場所によっては分離型のキーボードは置きにくかったりする。

ということでやっぱりもうちょっと小さいキーボードが欲しいなぁ。 ということで、Planckです。

Massdrop で Planck 注文

Massdropで実施されたPlanck keyboardのdropが実施されたので、登録したのが3/27でした。
発送予定は6月末。

なかなか届かない

そのキーボードが発送されたよっていうメールがさっき来ました。

2ヶ月遅れですね。

Massdropで前回買ったスイッチは発送からだいたい1週間で届いたので、今回もそれくらいを期待しつつ2週間くらいかかるつもりで待ちましょう。

ひどいMassdropの対応

MassdropはGroupBuyなので遅れることはよくあることらしく、それについて特に文句を言うつもりは無いのですが、今回の対応はちょっと酷いと思う。

・メールでの情報提供がほとんど無かった。
発送が遅れることを始め、遅れた理由、新たな予定日など本来参加者には通知されてしかるべき情報が何もメールで連絡されませんでした。掲示板ではそのような話題になっていて遅れることが判っていましたが、メールが出ないとは思いませんでした。掲示板みてなかったらわからないとかありえません。

・掲示板などで指摘されても改善しない
連絡が無いことについて掲示板で散々指摘されているにもかかわらず、メールが出るどころか、掲示板での応答すら無い有様。どうしょうもない。

・担当者が交代してもあまり状況がかわならい
実際に発送がはじまった9月の後半になって担当者が変ったらしく、掲示板で情報が出てくるようになったけれども、それでもまだ十分でなく、また、なんだかまだ発送もされていない人達がいるらしい。
6月の末には、キットはすべてそろったとか言っていたはずなので、それは嘘だったということになる。

もうMassdropで物は買わないかも

こんな状況ではもう買わないかもしれない。







READ MORE

Planck ソフトウェアシリーズ(キーマッピング1)

Posted by YpsilonTAKAI On 2017年7月1日土曜日 0 コメント
突然ですが、Planckの話です。

そろそろ届くんで、キーマップ考えてます。
作っているのは、キーボードのマッピングの画像をいろいろ作れるサイト。
http://www.keyboard-layout-editor.com/
物理的な配列も作れるし、ほとんどすべてのキーボードのデータが作れそうなすごいサイト

配列の中身の方はちょっと迷走ぎみ。 足りないキーとかある。
どうしよう。


どんなキーが足りないんだかすらよくわからん。

(7/5 : ちょっと変更)
だいたい入ったかな?


Planckの話は届いてからね。

(9/9 追記)
届きました。詳細はそのうち。
で、使ってみながらちょっとずつキーマップを修正しています。
この文章もこのキーマッピングで打ってます。




READ MORE

Ergodox ハードウェアシリーズ (ケーブル1)

Posted by YpsilonTAKAI On 2017年6月25日日曜日 0 コメント
久し振りの投稿です。
ちょっと、余裕ができたってのと、Massdropで注文したPlanckがそろそろ届くってことで、ひさしぶりに投稿してみることにしました。

さて、本題です。

Ergodoxには、ケーブルが2本必要です。 1本は、脱着式になっているUSBケーブルと、右と左をつなぐ3.5mmの4極ジャックです。

先日この2本を自作したって話です。


キーボードケーブル?

キーボードの自作ってやっぱり海外の方が進んでいるわけですけど、Massdropによくキーボード接続用のオシャレなUSBケーブルが出ています。

https://www.massdrop.com/buy/keycap-themed-braided-nylon-usb-cable

Webで「custom usb cable」で検索すると、これまたいろいろなカスタムなケーブルの画像がヒットします。
なかなかいい。欲しい。

https://geekhack.org/index.php?topic=44924.0

探せばいろいろなところで売ってますので、そんなのを買ってもいいんですが、日本で売っているところは見あたらないので、海外通販あるあるな、送料の方が高いじゃないか問題に直面してしまうのでなかなか手が出ない。さらに、売っているのを見ても、仕上げが熱収縮チューブになっていたり、手作り感満載のものがほとんどなので、そろまでしてってなってしまう。
ということで、自作へ進むわけです。 調べると自作する方法もちらほら出ていたりするし。

パラコード?

ポイントは、先の写真に写っている、カラフルなコードです。
そもそもこんなカラフルな電線ケーブルなど売ってたりはしません。

そこで登場するのがパラコード。 いや、偉そうに言ってますが、僕も今回調べていて初めて知ったんですけどね。 もともとはパラシュート用の紐(コード)だから、パラシュートコードでパラコード。命をぶらさげるものなので、丈夫にできているんですが、パイプの中にナイロンのコードが沢山通っているという構造をしています。強度の部分はこの中身が持っているので本来の機能はそっちにあるのでしょうが、パイプになっているところがポイント。 そして、いろいろなアクセサリの材料になったりすることで、いろいろな柄のものが作られるようになっているようです。

そして、USBのケーブルを作っている人がこの、パイプの部分に目を付けたってことです。

自作するには材料集め

材料集めです。

コネクター部分(USB)

これが一番見つからなかった。秋月とかに売ってない。
いろいろ探し回って、やっとみつけたのがここ。


試験販売・少量入荷とあるので、いつまで入手可能かわかりませんが。

コネクター部分(3.5mmジャック)

Ergodoxの左右をつなぐケーブルは、TRRSという4極の3.5mmケー ルです。 普通のパーツ屋にあるんですが、黒いプラスチックのださい感じのやつ。 

せっかく自作するんだからもうちょっと見た目のよいものをってことで探していると、オヤイデさんにあるではないですか。


使ったのは上の方です。下のがかっこいいんですが、高すぎ。

ケーブル

USBケーブル用には、3.5mmのジャックを買ったときに一緒に4芯のシールド線を購入。 作っていて思ったのですが、シールド部分をアースにすればいいので、3芯シールドでもよかった。 
3.5mm用のケーブルは、4芯シールドだと太すぎるのですが、手元にあった4芯のリッツ線がちょうどよかった。 昔ヘンドフォンを修理するために買ったのだと思うのですが、入手先は忘れてしまった。

熱収縮チューブ

コネクターを手に入れてからそれを持って、入るものということで、10mm径のスミチューブを入手。

パラコード

ネットでいろいろな柄のものが手に入るし、1mから選べたりするするので好きな色柄のやつを入手しましょう。
僕は、ヤフオクで端切れの詰め合わせを売っていたのでそれを入手。 なかなかよい柄が入っていたのでラッキーでした。


作りかた

こんなのを見ていただければいいのです。

ポイントは、パラコードをケーブルと同じ長さに切断して、中身のナイロンコードを全部出してしまい、そのチューブにケーブルを差し込んで使うってことです。

コネクターとケーブルを接続するための情報はこれがわかりやすいかも。

あたりまえですが、ちゃんと半田付けできていなければ使いものになりませんし、ショートしたり結線を間違えれば、最悪接続した機器=PCを壊すことになります。
テスターなどを使って入念にしあがりを確認してから使ってください。

できあがり

肝心の作りかたのところが無いじゃないかという感じですが、できあがりです。
なかなかいいでしょ?












READ MORE