Bringing the best of Bash scripting to Ruby
radek.io
radek.io
Sample output (tethering):
0 ~ git:master ❯❯❯ internet_access
Bluetooth DUN: Bluetooth-Modem dns 127.0.0.1
Ethernet: en0 macaddr xx:xx:xx:...:xx dns 127.0.0.1
FireWire: fw0 dns 127.0.0.1
Wi-Fi: en1 macaddr xx:xx:xx:...:xx dns 127.0.0.1
iPhone USB: en4 172.20.10.3/24 router 172.20.10.2 macaddr xx:xx:xx:...:xx dns 127.0.0.1
Bluetooth PAN: en3 dns 127.0.0.1
Thunderbolt Bridge: bridge0 dns 127.0.0.1
0 ~ git:master ❯❯❯
Sample output (wifi enable, unassociated, no tethering): 0 ~ git:master ❯❯❯ internet_access
1 ~ git:master ❯❯❯
This is driven by a non-privileged infinite looping event bash scripts which TCP connects to another pair of bash scripts running as root which can actually make the change because they're listening on two localhost tcp ports.(I've tried these other event-based app/script utilities and they're fragile and buggy as heck.)
It seems like something Apple, for one, should take on... deprecate AppleScript and use something more common, accessible and make a common, standardized scripting platform far more comprehensively documented in something like Ruby. AppleScript is just too COBOL/Cucumber "English" and poorly documented to be practical for advanced users. (I've been gradually moving all new scripts over to Ruby because Bash scripts are fragile and not as inherently reusable as standardizing on a dynamic languages (like RedHat w/ Python).)
Pipelines using Fibers in Ruby (1.9)
http://pragdave.me/blog/2007/12/30/pipelines-using-fibers-in...
http://pragdave.me/blog/2008/01/01/pipelines-using-fibers-in...
I swear it was actually a 3-part series, but only 2 parts I can find right at the moment.
Taking this contrived example at face value, imho, I'd instead place the "best of bash" for the particular task with file globbing.
It becomes more of a "what should this program should consume, do and output and feedback" problem... Bash, Ruby, whatever... but aim for some standards, in general.
Furthermore, with Ruby, as a dynamic language with full network capabilities and add-on packages (gems) with other IPC libraries (zmq), there are other structured, efficient serialized service consumer/producer configurations possible rather than only shell commands. There are also background job processing frameworks like sidekiq and parallel job processors like celluloid, parallel and EventMachine.
The future, really (for dev &| ops tasks) in on-demand loaded, micro-services rather than giant, slow frameworks. The glue (say chef code) and one-ofs will likely still be a bunch of Ruby code and hopefully more Ruby code, respectively, too.