2014年10月6日月曜日

HubotからWinSCPでlsが取れない

Redmineのチケット上で指定されたファイルをWebDAVで自動ダウンロードできるようになった。


サーバ上にあるファイルの一覧を出したい


だが、指定ファイルが存在しなかったときが問題だ。

「Not found」
ってメッセージはREST APIでRedmineのチケットに書き込めるようになった。

一歩進んで、
「今あるのはこれらのファイルですよ?」
ってのもチケット上に出したい。

が、一筋縄ではない


WinSCP .NET AssemblyサイトのJScriptサンプル
http://winscp.net/eng/docs/library_session_listdirectory#example
だと、lsの結果をnew Enumerator()でめでたく列挙子化できている。

だがEnumeratorはnode.jsにはない。
http://msdn.microsoft.com/ja-jp/library/ie/6ch9zb09(v=vs.94).aspx

node.jsには列挙子みたいなものがないようだ。
あったとしても、JScriptと同じ方法でCOMコレクションを扱える保証はない。

ArrayとかObjectでやってみたけどダメ。

いろいろ頑張ってみた。
けれどもできない。

というか、無理ぽ


結論としては、node.js用win32oleでCOMコレクション対応が未実装なのが原因だった。

作者さんが
https://github.com/idobatter/node-win32ole
「can not handle some COM VARIANT types, array etc.」
と言っちゃってる。
だから間違いない。

発想の転換


まあ、WebDAVのlsだったら単に普通にHTTPで
http://username:password@example.com/path/
からGETしたものをCheerioでほのぼのスクレイプすればいいような気もしますが。
https://github.com/cheeriojs/cheerio


2014年10月5日日曜日

HubotのHTTP待ち受けはシーケンシャルかつ着実に実行されるという実験結果

robot.router.post()によるHTTP待ち受けを受けた処理がものすごく長時間かかってる最中に、この同じrobot.router.post()が受けるべきHTTPリクエストをもう1個撃ったら如何?

という実験をしてみた。

予想


(1) 取り込み中なので聞いてませんでしたてぃひっ、と思われて取りこぼされてしまう?

(2) あるいは、同じrobot.router.post()によるプロセスが2個同時並行で走るような状態になる?

(3) それとも、忙しい中のリクエストもしっかり受付されて、処理待ちキューみたいのができて、順次処理される?

民主化デモのまっただ中でプロポーズ、受諾、キスというけしからんカップルが発生 旺角

このリア充どもが!


HIVの真の起源が明かされる

という論文です。

統計解析により、1920年より前のカメルーンのチンパンジーハンターから、1920年代にキンシャサで広まった経路が判明したとしています。

HIVの起源については、どこかの政府が作ったとかいろいろ陰謀論もありますが、この新研究に対し、そうした陰謀論者の方々がそれぞれどのように知恵を絞って応答するか、今から楽しみです。

カンボジアは世界でもきわめて稀な、AIDSを克服しつつある国です。

カンボジアの知恵が、アフリカやカリブにも広まれば良いと思います。

担保水増しなど多数不正発覚のククミン銀(アステリスクでおなじみ)、日銀に対し口座名義人などについて虚偽資料、虚偽説明

というニュースです。

ククミン(国民)銀行は韓国最大手銀行だそうです。

東京支店長は不可解な自殺をとげています。

闇の解明を願います。

香港民主化デモ参加の複数女性に黒社会構成員らが性的いらがらせ

というニュース

「いやがらせ」でなく「いらがらせ」だそうです。

「いら」は「いらつく」にも通じます。

よりハラス感が強い、強い拒否反応をおぼえる語感がある気がしませんか?

新語誕生の瞬間に立ち会ったかも。

HubotからWinSCPを用いてファイルをFTP(/SFTP/SCP/WebDAV)アップロードしてチャットに告知する関数

Redmineでチケットが更新されたら、その中のfilenameフィールドに記載されたファイルを、所定のサーバへアップロードするというプログラムを作りました。