Node.jsのspawnをつかってcoffescriptでps ax | grep sshを実行させるサンプル

spawnとexecの違いがわからんのでちょっと調べた。

Difference between spawn and exec of Node.js child_process

spawnはストリームをexecはバッファーを返す

で、Node.jsのドキュメントを読んでて spawnをつかった 'ps ax | grep ssh' の例が書いてあったので、これをcoffeescriptで書いた。

ターミナルで普通に動くのでvowsでテストしたら、callbackが返ってくる前に変なオブジェクトが返ってきてなんじゃこりゃ?と。

coffeescriptをjavascriptにコンパイルして読んだら、変なとこにreturnが挿入されてたのであちこちにreturnを入れて勝手にreturnされないようにした。

psax.coffee

util = require('util')
spawn = require('child_process').spawn

psax = (callback) ->
  ps    = spawn('ps', ['ax'])
  grep  = spawn('grep', ['ssh'])

  d = ""

  ps.stdout.on 'data', (data) -> grep.stdin.write(data); return
  ps.stderr.on 'data', (data) -> console.log('ps stderr: ' + data); return
  ps.on 'exit', (code) ->
    console.log('ps process exited with code ' + code) if code isnt 0
    grep.stdin.end(); return

  grep.stdout.on 'data', (data) -> d += data; return
  grep.stderr.on 'data', (data) -> console.log('grep stderr: ' + data); return
  grep.on 'exit', (code) ->
    console.log('grep process exited with code ' + code) if code isnt 0
    return

  grep.stdout.on 'end', ->
    callback(null, d); return

  return

exports.psax = psax

returnを入れて最後に評価した式がかえらなくてしなくていいような記法は用意されてないんだろうか? >>なんかモナドっぽくて素敵じゃないか。

vowsのテスト。宣言(文字列)の書き方のお作法がまだよくわかってない。should beとかshoud haveはわかるんだけど、whenとかAfterとか使い分けってどうなってんの?

そういうお作法が書いてあるサイトないかなぁ。

vows = require('vows')
assert = require('assert')

sp = require('./psax')

psax = sp.psax

vows.describe('Psax').addBatch({
  'A psax': {
    topic: -> psax
    'should be a function': (px) ->
      assert.equal(typeof px, "function")
    'After psax function called': {
      topic: (psax) -> psax(this.callback)
      'callback should return a result': (err,result) ->
        assert.isString(result)
    }
  }
}).export(module)

ProductName テスト駆動JavaScript
Christian Johansen
アスキー・メディアワークス / 3780円 ( 2011-11-25 )


Node.jsでYahoo!日本語形態素解析APIを使う

紆余曲折の末Yahoo! APIに落ち着いた。

http = require('http')
querystring = require('querystring')

qst = querystring.stringify({
    appid: '################',
    sentence: 'もももすももももものうち',
    results: 'ma'
})

options = {
  host: 'jlp.yahooapis.jp',
  port: 80,
  path: '/MAService/V1/parse?' + qst
};

http.get(options,
  (res) ->
    body = ""
    res.on('data', (data) -> body += data)
    res.on('end', -> console.log(body))
  ).on('error',
  (e) -> console.log("Got error: " + e.message)
)

追記12.02.22

結果がXMLで返ってくるのでパースしないといけないが、node.js で libxml を使うにはどのライブラリをつかうべきかというエントリを参考にしてlibxml-to-jsを選択。

http = require('http')
querystring = require('querystring')
parser = require('libxml-to-js')

qst = querystring.stringify({
    appid: '######',
    sentence: 'あたしはプログラムの女の子です',
    results: 'ma'
})

options = {
  host: 'jlp.yahooapis.jp',
  port: 80,
  path: '/MAService/V1/parse?' + qst
};

http.get(options,
  (res) ->
    body = ""
    res.on('data', (data) -> body += data)
    res.on('end', -> parser(body, (err, result) -> console.log(result.ma_result.word_list)))
  ).on('error',
  (e) -> console.log("Got error: " + e.message)
)

結果

{ word: 
   [ { surface: 'あたし', reading: 'あたし', pos: '名詞' },
     { surface: 'は', reading: 'は', pos: '助詞' },
     { surface: 'プログラム', reading: 'ぷろぐらむ', pos: '名詞' },
     { surface: 'の', reading: 'の', pos: '助詞' },
     { surface: '女の子', reading: 'おんなのこ', pos: '名詞' },
     { surface: 'です', reading: 'です', pos: '助動詞' } ] }

Node.jsで外部プロセスを実行する

とりあえず先に進みたかったので、mecabコマンドを叩くことにした。

var exec = require('child_process').exec;

exec('echo "もももすももももものうち" | mecab', 
     function(err, stdout){ console.log(stdout); }
    );

というわけで7章をやっている。

ProductName 恋するプログラム―Rubyでつくる人工無脳
秋山 智俊
毎日コミュニケーションズ / ?円 ( 2005-04 )


追記 12.02.21

子プロセスなのでコレじゃうまくいかない。コレで解決するか、Yahooの形態素解析APIを使うか。

アイデア創出技術のバイブル

考具の著者の監修だということもあって読んでみたが、名前の通りアイデア出しのためのテクニックバイブルだった。

自分の発想力を運用する

ためのリソースブックですね。

序部はアイデアパーソンになるための11の習慣付けの方法が書いてあり参考になるが、

  • アイデアを収集するためのブレインバンクを作る
  • 素早くメモをとる

っていうのはEvernoteでいいかなと。今はgoogle tasksにひとつメモ用のリストを用意してるんだけど収集には向かない。

ProductName アイデア・バイブル
マイケル・マハルコ
ダイヤモンド社 / 2940円 ( 2012-02-17 )


主に以下のセクションに分けてテクニックをまとめてあるので、自分の能力バランスを考えるときに参考になる。 僕は特に直感的思考を高めるためのテクニックのセクションを、えーナニコレ気持ち悪いと思いながら読んでいたが、読後に改めて自分のバランスを考えると論理的な思考をすることに結構縛られているので、もうちょっと直感を養う訓練をしてもいいのかなと。

  • 左脳(論理的思考)
  • 右脳(直感的思考)
  • 協調(共同作業)

論理的思考を養う

大体ビジネス本に出てるけど、まとまっているのでパラパラめぐって眺めても楽しい。

一つの視点はあらゆる可能性の一つにすぎない

ので代替案を効率的に探索する手法が必要ですね。

  • SCAMPER(オズボーンのチェックリスト)
  • 逆転
  • アイデアボックス
  • マンダラチャート
  • フェニックスチェックリスト
  • ブルートシンク

チェックリスト系のものは本の最終ページにツール集としてまとまっているので便利。

ただし、

言語的な発想法を使いすぎると、自分の発想力が電子レンジで温め直しすぎたコーヒーのようになってしまうことがある。そんなときは、発想法を変えて、想像力を”入れたてのコーヒー”にしておくべきだ。

だそうだ。

直感的思考を養う

部の最初に直感力で問題を解く5つの要素を上げている。

  1. よく知らない問題に、どう取り組むべきかわかる能力
  2. ある分野の問題を、それとは無関係な分野と関連付ける能力
  3. 問題の核心部分を認識する能力
  4. 問題の最終解決をあらかじめ見通す能力
  5. 感覚で解決策がわかる能力

先にも上げたが、このセクションを読んでいて、「あーそうだよね」と「えーこれはどうなの?」というテクニックがあったので、分類してみた。

しっくりくる

  • 青い薔薇
  • ユーリカ!(インキュベーション)
  • 類推する(アナロジー発想法)
  • 論理を超える(パラドックス発想法)
  • 象形文字

しっくりこない

  • もしも話(フィクションストーリー発想法)
  • 夢日記発想法
  • 潜在意識からのメッセージ(ダ・ヴィンチ・スケッチ発想法)
  • 入眠時幻視
  • 幻視の旅(シナリオジャーニー発想法)
  • メンターズトーク発想法

分けてみると、潜在意識に語りかける系のテクニックをあまり重視していないのかもしれない。論理的に物事をすすめていくやり方に縛られすぎてるのかな。これに関してはもう少しゆっくり考えてみる。

協調作業

協調作業は、協調作業をするための人をどう集めるのか?というところに一番高いハードルがあるし、特に職場での仕事の場合チーム構成は与件でありコントロールできない要因なので、基本的に期待はしない。つまり、個人的にはコラボレーションは非常に重要視するけど、依存はしないというスタンス

セクションの中ではアイスブレイクとブレインストーミングの手法に関して説明している。

ProductName 考具 ―考えるための道具、持っていますか?
加藤 昌治
阪急コミュニケーションズ / 1575円 ( 2003-04-04 )


「わかる」とはどういうことか

脳のメカニズムに立脚した「わかる」とはどういうことかの説明

  • 事実とは自分の心がなくても生起し、存在し続ける客観的現象です。
  • 分かるの基礎は区別(分かつと書くように)
  • 「わかった」という体験は経験の一つの形式であって、事実とか真理を知るということとは必ずしもおなじではない
  • 自己の立場からあれこれ思案して、ものごとの真実を明らかにしようとするのが迷い

科学的に考える菜園づくりのコツ

家庭菜園生活も4期目を迎えるのでこういう系の本を読むと色々わかってきた。あとホームセンターで買うよりは、色々レクチャーしてもらえる種やさんで買うほうが、蒔きどきがわかっていいですね。

ProductName おいしく育てる 菜園づくりコツの科学
西村 和雄
七つ森書館 / 1890円 ( 2006-06 )


  • 畝を立てるのは土を高くして排水を良くするためなので、高さは水はけの良し悪しで決まる
  • 畝を立てるのは南北方向。冬畝は東西。これは日光の関係
  • なぜ耕さないといけないのか?
  • 春の10日は秋の1日
  • ズッキーニは養分が結構必要

昨晩のリスト

BPM120で

Third (Max Cooper Remix) / Hiatus
In My Arms / Mano Le Tough
City Lights From A Train / Vector Lovers
Morning Mountain / Essáy Feat. Rhian Sheehan
Wasp In A Wig / Funk D'Void & Sian
all the people make happy / ALTZ
6am / Alex Smoke
わらうだけ / Ratn
It's Only / Herbert
Girl + Robot (2011 Remastered)  / Vector Lovers

ProductName Bodily Functions
Herbert
K7 / ?円 ( 2006-02-01 )


pyVows - Vows for Python

最近CoffeeScriptで書くときにはvowsを使っていてるが、Emacsを左右に分割して、左にコード、右にテストのBDDが快適すぎて癖になっている。

BDD Emacs

Pythonで書くときはnoseを使っているのだけど、最近pyVowsを見つけたので、これを使ってみようかなとドキュメントを読んでみた。

pyvowsのverbosityオプションがvを増やすということに気付かかなくて、詳しい表示どうすんの?ってなった。デフォルトのvvくらいだと頑張った気がしないのでvvvくらいがいいかも。

アサーションは種類が色々あるし、カスタムのアサーションもVows.create_assertionsデコレータで簡単にかけるし、構造が一致するかとかSMILESが正しいかとかのchemoinformatics用のカスタムアサーションがかけそうなので生産性が上がっていい。

砂肝のオリーブオイル煮込み

クックパッドのレシピが美味しそうだったので、早速青木養鶏場に行って砂肝を買ってきた。

ニンニクは去年収穫したものを冷凍保存してあったので、それを使った。

1329561430

旨い。というわけでワイン飲んだ。

1329561433

油で60分間くらい煮るんだが、油の温度がよくわからんので試行錯誤する必要がありそうだ。

Winter Chill 2012はドープで渋め

今回はかなり良かった。1,2作目以来の出来かも。

Third (Max Cooper Remix)なんかは持っていかれますね。後半はハウス気味で全体的にエレクトロニカ風味なので当たりですね。

ProductName Winter Chill 2012
Hed Kandi:
Hed Kandi / 3271円 ( 2012-01-31 )


オススメ

  • Third (Max Cooper Remix) / Hiatus
  • Perfect Darkness (Lapalux Remix) / Fink
  • Remembrance / Sina
  • Morning Mountain / Essáy Feat. Rhian Sheehan