カテゴリー別アーカイブ: プログラミング

複数マシン間で、atomで取ったメモを同期するための環境を整えた

自分は、いろんな作業をするときに、人に報告したり、twitterに書いたりするほどでもないことを、atomを使ってmarkdown形式でメモをとりながら進めています。
1台のマシンでメモを取るだけなら、シンプルでいいんですが、VMを含め、複数台のマシンを行ったり来たりしながら作業するとなると、これらの間でどうやってメモを同期するか、という点が悩ましくなってきます。
今回のエントリは、どうやってatomを用いて、複数のマシンでどうやってメモを同期させるか考えたっていう、そんなお話。

TL;DR

  • atomのsync-on-saveはとても良い
  • WindowsとLinuxだとパッチ当てないと動かない(2017年10月12日時点)

gitでメモの同期をとりたい。でもコマンド打つの、面倒だな。

ファイル単位で同期を取る仕組みというのは、atomには色々あって、たとえばRemote-FTPというパッケージで実現することができます。
最初はこれを使っていたんですが、同期の粒度がファイルだと、複数のマシンで同じファイルを変更したときに、どちらかがどちらかをうっかり上書きして、せっかく書いたメモを失う、なんてことになりそうだなと思いました。
実際に上書きをしてしまったことはなかったものの、そういうことが起こりうるということを意識しなければならないのがなんとなくストレスでした。

だから、ファイルよりも小さい単位で同期を取りたい。
そうだ!僕達には、gitがある!gitを使おう!と考えました。

でも、gitも、コミットメッセージを書いたり、共有のためにpushしたりと、やらなければいけないことが多くてちょっと面倒です。

sync-on-save というパッケージに面倒事を引き受けてもらう

どうせ、自分が適当に見るメモなんだから、コミットメッセージなんて適当に自動でつけてくれればいいし、pushも勝手にやってくれればいいのに。
そんなパッケージないかなー?と探してみたところ sync-on-saveというパッケージがありました。

このパッケージを使って救われました。本当に欲しいものそのものでした。
コマンドパレットからEnable Syncすると、ファイルを保存したタイミングでgit commitとgit pushを自動でしてくれます。
あとなんか他の場所で同じファイル編集してたらmergeもしてくれる。

本当に便利だ。素敵だなぁ。

LinuxとWindows向けにバグがあって動かなかった→なおした

バグを見つけたので直しました!バージョン0.1.5からは何も考えずにATOMのパッケージをインストールすれば使えるようになりました!
みんな使ってみてね。

2017年10月12日時点でダウンロード可能な、バージョン0.1.4にはちょっとしたバグあり、WindowsとLinuxでは動きません。
直したのでプルリク投げてみるつもりです。

差分は1行なので、これ読んで今すぐ使ってみたい!って思った人は、sync-on-saveをインストールした上で、コードを直接いじるのが楽そうです。
コミットの情報はここにおいときますので参考にしていじってみてね。

https://github.com/sirrow/sync-on-save/commit/7df50d7094156b9fd030ab698a6ff69a680177af
おしまい。

本文に書ききれなかったけど書きたかった事

sync-on-saveを作った人について

sync-on-saveを作った人すごいなぁ、ありがたいなぁ。プルリクも投げなきゃいけないし、どんな人なんだろう?って思ったので調べてみたら、 Hajime Morita さんでした。
そういえば、rebuild.fm 聞いたことないし、今度聞いてみよう。

昔はssh + screen + emacsでメモを取ってた

自分は一昔前は、VPS上でscreenを動かして、その上で動かしたemacs -nwに、色んなマシンからsshでログインした上でattachしてメモを取ってました。
これはこれで悪い方法じゃなかった気がします。手軽だしね。ただ、ネットワークから切断されるとつらいんだこれ。
gitなら手元にコピーあるからネットワークなくても編集できるしね。そんなところが素敵。


35歳になりました

2017年10月3日に35歳になりました。
四捨五入したら40歳になる。マジか。
マジかとか書いちゃうアラフォーマジか。大丈夫なのか。
大人とは一体何なのか。

例年、誕生日前になったら、しっかりamazonの欲しいモノリストを作って、
twitterに流したりしていたのだけど、今年は完全に忘れていた。

去年は、結構色々頂いたのだけど、それをあまり有効活用できなかったという反省もある。
もっとアクティブに活動できたら良かったと思う。
インターネットに欲しいモノリストを公開して、それで、何かをもらうってことは、
インターネットに対してその分、何か面白いことを仕掛けていく責任みたいなものと表裏一体だと思っている。
そういった面で、今年一年はあんまりいろいろできなかったなーって思ってる。

だから、今年に関しては、何かいただくというのも気が引けるので、
今年は別に欲しいものリストは作らなくても作らなくてもいいかなぁとも思ったんだけど、
普段、あまり何がほしいのかを整理する機会もないので、
ほしいものを棚卸しする機会だと思って整理してみることにした。
毎年、何が欲しかったのか、ということを記録して振り返れるのは悪くないとおもう。

で、今年のリストがこれ。
http://www.amazon.co.jp/registry/wishlist/3B9IYL63UAU7K/ref=cm_sw_r_tw_ws_x_5uy1zbZV51GHX

正直、最近、音楽はさっぱり、って感じなんだけど、ほしいものを整理したら結局楽器だらけになった。

raspberry pi 3 が届いた

で、10月3日の夜10時頃にとりあえずまとめてtwitterに流したら、
さっそく翌日、10月4日にみかるちゃんからraspberry pi 3が届いた。

先に書いたとおり、今何が欲しいのかを自分でまとめて、
ついでにネタでtwitterに流しておくかと言った気持ちだったので本当に何かが届くことを想定なんてしてなかった。
なので、届いた結果、raspberry pi 3を動かすために必要なmicrosdカードとmicro usbのケーブルが、
家にまったくないことに気づいて、焦ってamazonでmicrosdとmicrousbのケーブルを注文する、ということが起きた。
それくらい、なにかが届く可能性なんて、まともに想定していなかった。

動かすのに必要な物はひと通り注文して、ちゃんと動かす事ができた。
このraspberry pi 3 を使ってやりたい事があるので、
形としてまとまってきたらまたblogに書くことにしようと思う。

PEPSI Strong 5.0GVがたくさん届いた。

自分は、コーラの中ではペプシコーラが好きで、その中でも特にこのStrong 5.0GVってのが一番好きで

前述の通り、流石に誰もなにも送って来ないだろうと思っていたら、
motioncraftから2ケース、
伊波さんたあんふたつむらにゃむずから1ケースずつ、
合計5ケース届いた。

1ケースあたり500mlのペットボトルが24本入っているため、合計で500mlペットボトル120本、24kgのペプシコーラが家に届いた。
(なお、まだ届いてないけど発送したと名乗り出てくれている人も居る。マジか。)

自分は、このコーラが大好きなので、たくさんあっても全く困らないのだが、
普通に飲むだけではあまりに芸がないなと思って、とりあえずtwitterの名前に残りのペットボトルの本数を書くことにした。

こんなかんじ。

しかし、これには問題があると言う事がわかった。
コーラを飲むのは自分だけではなく、嫁さんも飲む。
だから、自分だけが書き換えたのでは数えもれが発生してしまう。

どうしようかなーと悩んでいたら、嫁さんが
「コーラのペットボトルを飲み終わった時に押すボタンみたいなのがあったらいい」と言った。
「ほー なるほどー」、と思ったのでつくった。

もともと持ってたraspberry pi(初代)のGPIOにタクトスイッチを繋ぎ、
ボタンを押したことをnode-redで検出し、node.jsで作ったREST API を叩くようにした。

REST APIは、ペプシの残り本数を状態として持っており、叩かれたら本数を1本減らして、
1本飲んだと言うことをtwitterにポストしつつ、名前を変更する。

毎日、日本時間で23:55に、状態を確認するシェルスクリプトをキックし、状態をCSVに書きだす。
で、書き出されたCSVを読んで、グラフにする。
グラフはここ。
http://sirrow.info/pepsi/

まぁ、なんか、そういうものを作った。
開発環境を作るところからだったのでけっこう時間がかかってしまった。
全部で4〜5時間くらいだと思う。10月7日から9日が3連休で本当に良かった。

コーラを贈ってくれた人も、贈ってくれなかった人もtwitterの名前とかグラフとか見て、
こんなに減ったのかーとなんだかしみじみしてくれれば、無駄に作った甲斐がある。

包丁用の砥石とオシロスコープをもらった

tmy先生からいただいた。

砥石はもともと、tmy先生のお家にあったものと同じ物をたまたま欲しいものリストにいれてた。
あと、オシロスコープは自分に贈ってくれると同時に、tmy先生自身も買ったらしい。
なので、両方ともお揃い。ちょっとうれしい。

砥石は早速使ってみた。
いろんな経緯があって、自分の家には同じ包丁が2つある。
なので、片方を研いで、もう片方は研がずに比べて見たら、
研いだ方がめちゃめちゃよく切れるようになった。

それを確認した後、もう片方も研いだ。

当たり前っちゃあ当たり前だけど、包丁は研ぐとよく切れるようになる。とてもよい。

オシロスコープは、今後頑張って使っていこうと言う感じ。
電子工作、捗るようになるだろうか。


Linux(fedora 21)の上でVisual Studio Code を使って sails.js の開発をしたい!

あらまし

さいきん、アニイベZというアニソンがかかるクラブイベントのをまとめたポータルサイトの拡張機能の開発を担当することとなりました。開発には、いろいろな経緯があって、 node.js 向けの RoR 風フレームワークである sails.js というフレームワークを用いて開発を行うことにしました。

これまではemacsのjs2-modeで開発を行おうと試みてきたのですが、無名関数を使うとインデントが大きく崩れたり、補完がなんだか上手く効かなかったりと、効率の悪い状況が続いてきました。

何かいいIDEは無いものかなぁ。WebStormはお金かかるからなぁ。。などと思っていたところに、Microsoftの開発者向けカンファレンスである Build 2015 にて Visual Studio Code という、WindowsでもMacでもLinuxでも動く、.Netとnode.js向けのIDEが発表されたという報道を見て、おー、これ、試してみるかー と思って、試してみました。

sails.jsもnode.jsもよくわかってないのでトンチンカンなことを書いているかもしれませんが、自分のための備忘録というか、作業ログってことで。

ここに書いてあるのを真似するとできるようになること

  • Visual Studio Code である程度補完がきくようになる
  • ブレイクポイントを置いてデバッグできる

できるようにならないこと

  • ormapper(waterline)とかblueprintの補完はできない
  • 他にもいろいろできないことがありそうだけどまだよくわからない

やりかた

1. まずはsailsを動かす

1.1. fedora 21 をインストールする

してください。自分はWorkstationをVMware Player上にインストールしました。

1.2. node.js と npm をインストールする

とりあえず、node.jsとnpmをyumでインストールします。

でも、このままだとnpmのバージョンが古くてsailsがインストールできないので、一度npmを最新版にします。

これでnpmが新しくなりました。

1.3. sails をインストールする

というわけで、sailsをインストールします。

1.4. sailsを動かしてみる

として、webブラウザで http://localhost:1337 を見るとテンプレートのページが見えるはずです。

2. Visual Studio Codeをインストールしてデバッガで止めてみる

2.1. Visual Studio Code をインストールする

まずは、Visual Studio Code公式サイトからVisual Studio Code をダウンロードしてきます。zipなので適当に圧縮を解いて、適当な場所に置きます。自分は取り敢えずホームディレクトリのvscってディレクトリに置くことにしました。

ってすると起動します。おお、かっこいいではないか。

Screenshot from 2015-05-07 23:56:23とりあえず右側のWelcomeタブは適当に眺めた後に閉じちゃいましょう。

2.2. さっき作ったsailsのプロジェクトを読み込んでみる

File -> Open Folder でさっき作った visualstudio_sails ディレクトリを選択。すると、でぃれくとりのツリーが見えます。適当にフォルダを開いてやると、ファイルの中身も見えます。

Screenshot from 2015-05-08 00:03:56

2.3. 実行環境の設定をする

Visual Studio Code内からsailsを実行したりデバッグしてあげたりするためには、nodeやsailsがどこにおいてあるかを伝えなきゃダメだよなぁということで、その辺りを設定します。

左に縦に4つ並んでるアイコンの一番下に虫禁止マークみたいなのがあるので、それをポチッとしてやります。すると、今までディレクトリ構成を表示してたところが、変数やスタックを表示するための物に切り替わります。その上の方に、如何にも設定用のアイコンといった趣の歯車のアイコンがあるので、そいつを押してやると

Screenshot from 2015-05-08 00:09:02なんか、launch.json という如何にもプログラムを動かすための設定を記述するために使うっぽいファイルが開きます。

歯車の左にあるドロップダウンリストの内容は、このjsonファイルの configuration 配列によって定義されているオーラを感じますので、このファイルをコメントと空気を読んで編集します。

具体的にはこんな感じにしてみました。

Launch Sails.js って書いてある要素が追加した部分になります。これを保存すると、さっきのドロップダウンリストにLaunch Sails.js という選択肢が現れるので、これを有り難く選択します。

で、その左にある如何にも実行ボタンっぽい右向きの緑色の矢印を押すと

Screenshot from 2015-05-08 00:19:36なんか、エラーがでる訳です。

エラーの内容を確認すると、

Cannot start OpenDebug because Mono (or a Mono version >= 3.10.0) is required

なんか、Monoの3.10.0以上が必要だと言わます。なるほどなるほど、じゃあMonoをインストールしてやろうと思って、yum install ’mono*’ なんてやろうものなら fedora 標準のバージョン2.10のmonoがインストールされ、とても残念な気持ちになるので、ここはぐっとこらえます。

2.4. 新しいmonoをインストールする

Monoの公式ページにインストール方法が明示してあるので、ありがたみを感じながらこれに沿ってyumのレポジトリをまずは有効化します。

 

これで、yumのレポジトリが有効になったはずです。レポジトリの名前を確認するために yum repolist を実行すると

download.mono-project.com_repo_centos_ が追加されたレポジトリのようですので、このレポジトリの中のmonoをインストールしてやります。

で、さっき押したときにエラーが出た、如何にも実行ボタンっぽい右向きの緑色の矢印を押すと

Screenshot from 2015-05-08 00:37:09なんか、黄色い右向き矢印が出て、如何にもプログラムの先頭で止まってるなーというオーラを感じられます。なので、如何にもコンテニューボタンっぽい上部真ん中に現れた、右向きの三角形を押してやります。すると、なんかsails.jsが動き出したオーラが感じられるので、ブラウザで http://localhost:1337 を確認してあげるとちゃんと動いているのが確認できます。

赤くて四角いボタンを押すと止まります。実行と停止を何回かやってもとりあえず上手く動きます。ここで設定が終わったオーラを感じますが、もう一息です。

2.5. 何かコードを書いてデバッグしてみる

ここまで来たら、何か実際にコードを書いてブレイクポイントを置いてみたいという衝動に駆られるのが人間の性です。なので、適当にuserなどという名前のapiを作ってみます。

visualstudio_sails ディレクトリ内で

ってやると、userという名前のmodelとcontrollerが作られます。よし、早速実行だ!と思って実行ボタンを押して、いざ http://localhost:1337 に接続しようとすると接続できません。その内、実行が終わったような感じで、画面上部中央のデバッグ中にだけ表示されるボタンも消えてしまいます。

ここで、何かがおかしいと感じて、./Code を実行したコンソールを改めて確認すると色々表示されている中に

error: Error: The hook orm is taking too long to load

という文字列を見つけることができると思います。何やらormapperが上手く動いていないらしいぞ、と感づきます。

ここで、 visualstudio_sails ディレクトリ内で、 sails lift すると

In a production environment (NODE_ENV===”production”) Sails always uses
migrate:”safe” to protect inadvertent deletion of your data.
However during development, you have a few other options for convenience:

1. safe – never auto-migrate my database(s). I will do it myself (by hand)
2. alter – auto-migrate, but attempt to keep my existing data (experimental)
3. drop – wipe/drop ALL my data and rebuild models every time I lift Sails

What would you like Sails to do?

info: To skip this prompt in the future, set sails.config.models.migrate.
info: (conventionally, this is done in config/models.js)

warn: ** DO NOT CHOOSE “2” or “3” IF YOU ARE WORKING WITH PRODUCTION DATA **

と表示され、どのようにデータを引き継ぐか決めろと迫ってきます。さらにこの状態で何もせずに放っておくと

prompt: ?:  error: Error: The hook orm is taking too long to load.
Make sure it is triggering its initialize() callback, or else set sails.config.orm._hookTimeout to a higher value (currently 20000)
at tooLong [as _onTimeout] (/usr/lib/node_modules/sails/lib/app/private/loadHooks.js:92:21)
at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)

というエラーを吐いて、タイムアウトして終了します。さっき、Visual Studio Code 上で実行したのに動かなかったのはこれが原因だなーとわかります。先程のエラーメッセージの中に

info: To skip this prompt in the future, set sails.config.models.migrate.
info: (conventionally, this is done in
config/models.js`)

と有り難く書いてあるので、config.models.js を開くと下の方に

// migrate: ‘alter’

と如何にもそれっぽい文字列が見当たるので、このコメントアウトを取ってあげます。すると、さっきの引継方法で2を選んだことに毎回自動的になります。

改めてVisual Studio Code のデバッガからsailsを起動すると無事起動します。あとは、好きなようにコードを書いて、デバッガで止めてと快適に使えると思います。

なんか、適当にコードをかいて、ブレイクポイントを置いて、コールスタックも変数の中身もちゃんと見えてるぞというスクリーンショットと共にお別れしたいと思います。それでは皆さんさようなら。

Screenshot from 2015-05-08 01:09:26

おつかれさまでした。