2016年4月16日土曜日

electron.jsで外部プログラムの標準入出力を制御

概要
electron.jsでjavascriptなプログラムをクロスプラットフォームで使えるのだけど、
速度重視やデバイスに依存するプログラムにはまだ適さないように思う。
その場合、c/c++などを用いることになるが、でもGUIまで作るのは非常に骨が折れる…
GUIはelectronを使ってhtmlベースでサックリと済ましてしまって、他の部分はc/c++に頑張ってもらう構成を考えた。
なんだか.netみたいな考えになってしまうけど。



構成
コアとなるのは、サーバー側のindex.jsとレンダラ側のmyapp.js間のIPC通信と
外部プログラム制御のためのchildp.jsのchild_process。

外部プログラム「ec_child_test」
CUIベースのカウントアップダウンタイマーとした
STARTでカウント開始、UPでカウントアップ、DWONでカウントダウン
カウントは1秒周期、STOPでカウント停止、EXITでプログラム停止という単純なもの。
プログラムは最後にまとめて載せた。(gistで部分的に表示する方法は無いのかな・・)
と思ったら、あった。embeddedコードに「?file=[ファイル名]」とすれば良いみたい。


サーバー側「index.js」と「childp.js」
・index.js
  IPC通信でレンダラからもらった命令をchildp.jsに伝えているだけ
・childp.js
  外部プログラムの制御担当
  といっても子プロセスでプログラムを起動して、その標準入出力に読み書きを
  行っているだけ。プロセスの生成監視はもっと厳密にしないといけないが、
  今回はこのまま。
  あと、node側が終了しても子プロセスが生きているので、別途終了処理が必要。

レンダラ側「index.html」と「myapp.js」
・index.html
  
・myapp.js

参考
いろいろなHPを参考にさせてもらいましたが、たくさんありすぎて+時間が経ちすぎて忘れたOrz

その他
「ググるよりもググられたい」という広告が出ていた。刺さる。
なかなか実現できないこともあるけど、まだ諦めずに頑張ろうと思う。


2016年4月3日日曜日

AmisとCGIとの接続(名前付きパイプFIFO)

概要
webからの操作で、AmisボードのLEDを操作する準備として
Amisボードと通信するプログラムと、webでユーザー操作を受け持つcgiとの接続を検討した。

構成
dd-Wrt上のLighttpd(Port81)を使ってwebサーバーを立ち上げる
仮にAmiscommServer.cgi とする
Amisボードとの通信プログラムをAmis-Commとする

考え方は以下とか本を参考にした。
http://www.ncad.co.jp/~komata/c-kouza12.htm
C言語による実践Linuxシステムプログラミング

web側はまだ作成中

CSSフレームワークを使うとなんとなくそれっぽくできるから良いね。
foundation.js を使った。



2016年3月27日日曜日

node.jsでGmailの送受信

ようやく見えてきた

概要
やりたいことは、作成中のAmisの上位側にあたるサーバーの作成(AmisServerとする)
1.Amisからの通知を受けてGmailでメール送信を行う
2.Gmailでメール受信してAmisに通知する

この試作を作ってみた。

構成
巨人の肩に乗らせて頂き、node.jsを使ってみた。
inboxというライブラリが優秀なので、受信ほぼこのまま。
送信は別のライブラリがいるらしいが、ssmtpで送信する方法を試していたので、
今回はこっちを使用した。

必要なライブラリnpm install inbox
npm install iconv
npm install express

iconvが無いと文字化けする
expressはwebサーバーを簡易につくるために使用している

備考
エンコードがメールによって異なっていたりして、判別が微妙
yahooメールは iso-2022-jp?
gmailはbase64やquoted-printable??

送信はsendmail.shを呼び出しているだけ
実態はssmtpを呼び出しているだけ
来週にでもちゃんと作ろうOrz

参考
inbox使用方法
https://github.com/pipedrive/inbox
http://www.jonki.net/entry/2014/05/11/022046
http://liginc.co.jp/web/service/facebook/153850

VSCODEを使用したnode.jsのデバッグ方法
http://www.atmarkit.co.jp/ait/articles/1508/27/news020_2.html


以下ソースコード
app.js
 +ext-program.js
 +gmail-imap.js