Your SlideShare is downloading. ×
0
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Rios::Proxy - A framework for CLI
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Rios::Proxy - A framework for CLI

3,881

Published on

Rios is a proxy framework which works as a proxy …

Rios is a proxy framework which works as a proxy
for command line applications and allows developer to hook input/output
of the applications in a blazingly simple way.

See https://github.com/mooz/rios for details.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,881
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Rios::ProxyA proxy framework for CLIid:mooz / @stillpedant
  • 2. 自⼰紹介 名前 id:mooz @stillpedant よく書いていたもの Firefox のアドオン Emacs Lisp Python Ruby は親戚とのつきあい程度
  • 3. 宣伝
  • 4. Emacsは好きですか?
  • 5. →Yes
  • 6. Firefoxは好きで すか?
  • 7. →Yes
  • 8. 朗報
  • 9. KeySnailあなたのFirefox,Emacsにしてみませんか? For Vim users, there is Vimperator. For Emacs users, there is KeySnail. [cited from `KeySnail Wiki]
  • 10. 宣伝終
  • 11. 突然で すが
  • 12. 最近 CLIにハマっております
  • 13. CLI? × Common Language Infrastructure ○ Command Line Interface
  • 14. 変遷CLI Hello World! 期GUI GTK+ 期GUI Web (XUL, HTML, Canvas, ...) 期CLI←今ココ
  • 15. インタラクティブCLI ユーザがキーを⼊⼒するたびに アプリケーションが反応 (Enterを待たない) 画⾯が下に流れていかない 例 Emacs / Vim zsh GNU readline
  • 16. 実現方法 エスケープシーケンスを駆使 ioctl(2) #include <termios.h> curses
  • 17. 問題
  • 18. テストが難しい テストには以下が必要 プログラムへ⼊⼒を⾏なう プログラムからの出⼒をチェックする どうやって⽂字列を⼊⼒として 渡す? どうやって出⼒を⽂字列として 取得する?
  • 19. ⼈⼒
  • 20. 嫌
  • 21. 自動化したい
  • 22. Rios::Proxy gem install rios アプリケーションのコマンドラ イン⼊⼒と出⼒にフック 出⼒のチェック・書き換え ⼊⼒のエミュレーション・書き換え フック内容は Ruby で記述
  • 23. 動作イメージ
  • 24. 使い方 require "rios/proxy" proxy = Rios::Proxy.new proxy.on_output do |s| s.gsub(/foo/, "bar") end proxy.listen
  • 25. 簡易版 require "rios/easy" on_output do |s| s.gsub(/foo/, "bar") end listen
  • 26. 出⼒へのフック proxy.on_output do |s| # アプリケーションの出⼒が⽂字列 s として渡る # 返り値: # ⽂字列 -> 出⼒をその⽂字列に書き換え # 空⽂字列 -> その出⼒をキャンセル # nil -> 何もしない end
  • 27. ⼊⼒へのフック proxy.on_input do |s| # ユーザの⼊⼒が⽂字列 s として渡る # 返り値: # ⽂字列 -> ⼊⼒をその⽂字列に書き換え # 空⽂字列 -> その⼊⼒をキャンセル # nil -> 何もしない end
  • 28. ⼊⼒のエミュレーション以下のようにすると,ユーザがrm -rf / と打ち込み Enter を押したことになる proxy.input("rm -rf /n")
  • 29. プロキシ対象プロキシ対象のアプリケーションは Proxy#listen への引数で指定
  • 30. プロキシ対象::デフォルト # 省略すると ENV["SHELL"] が用いられる proxy.listen
  • 31. プロキシ対象::任意のコマンド # 配列を渡すと,そのコマンドが exec 経由で実⾏される proxy.listen(["ssh", "moge@foo.bar"])
  • 32. プロキシ対象::ブロック proxy.listen do || # ブロックを渡すと,そのブロック内部がプロキシ対象となる end
  • 33. 応用 自動テスト 柔軟な expect として 端末の録画 (script, ttyrec) キーバインド変更ツール キーロガー
  • 34. 課題 ⼊⼒に対するマッチング 現在: テキトーな範囲でブツ切りに なった⼊⼒・出⼒が渡る イテレータに対する正規表現マッチが 必要 boost::regex を使う?
  • 35. 宣伝
  • 36. KeySnail 初期化ファイル(.keysnail.js) によるカスタマイズ キルリング anything.el 的な何か プラグインシステム M-x

×