Thursday, July 21, 2011

New Experiment Language Choices

(edit: I'm still tinkering with the ideas and have started learning Go, but will probably end up doing this project in either python or bash)

My evolving side project is a configuration management suite that:
1.) uses as much of git as possible and sensible
2.) lightweight
3.) simple things must be very fast turnaround to/from thought<->production
4.) all configs (and binaries if you like) versioned bit-for-bit for all time


I'll write more about the overall system design later; I've written a bit of an intro and will post it when I have code to present (here's what I have in mind for fs permissions: gist) I'm implementing some tools now that I've got the branching & config strategy worked out. I could whip out a lot of it in Perl pretty handily, but I suspect it'll be a one-man show forever if I go that route. At work, almost everything is done in Ruby, which I still don't really like much. Plus two of the leading CFM tools are already in Ruby, so I feel like it's time for something different. So, here's what I'm considering and why:
1) Go
  +) generates regular binaries, no VM to maintain on nodes
  +) good C compatibility, already has libgit2 bindings
  +) garbage collected, first-class strings
  +) (yes, +) DNA from C, Erlang, Plan9, and Inferno/Limbo
     e.g.) lightweight processes, channels, goroutines
  -) I'd have to learn from scratch
  -) AFAIK nobody on my team knows/uses it (obscure)
2) C
  +) compiled, works literally everywhere, knows your mom intimately
  +) good match with git, openssl/gnutls, and libgit2
  +) igraph looks neat for smart path & network
  -) manual memory, thread, and process management :(
  -) I'm rusty as the Titanic
3) Perl >=5.8
  +) installed everywhere
  +) I'm good/fast at it, prototype in a couple weeks
  +) many git utilities are written in perl, good match
  -) declining popularity, fractured community
  -) modern libs require too much baggage (e.g. Moose)
  -) XS is the devil, no usable libgit2 bindings
4) Python
  +) installed everywhere I care about
  +) thriving community
  +) I have some experience (though still much slower than perl)
  +) libgit2 bindings exist
  +) some of the git tools are already python
  -) difficult to bundle with zero dependencies outside the git branch
  -) v2.5 -> v3.x transition is in progress, which to choose? (prob 2.7)
5) Java
  +) just kidding!
6) Javascript/NodeJS
  -) I'm not kidding
  +) garbage collected, closures, functional style available, naturally async
  +) growing popularity, modules I'd need are fairly mature (relative to node.js)
  -) rapidly changing ecosystem/interfaces

To be honest, I'm really leaning towards Go right now but it'd add a month or so before I have something useful.

Comments, suggestions? Don't hold back, you know I wouldn't ;)

Thursday, December 23, 2010

My Christmas Wish

I wrote this email to my (non-technical) family with the subject, "My Christmas Wish."

Folks,

In light of the most recent "Zero Day" security vulnerability in Internet Explorer, I am writing this to ask all of you who still use it to consider switching browsers. IE is by far the most ubiquitous source of junk on Windows computers outside of unsafe downloads. Other browsers do much more to protect you.

So-called "Zero Day" exploits occur on a regular basis and leave you vulnerable to attack for weeks at a time. For example, the Chinese attacks on Google relied on vulnerabilities in Internet Explorer to steal users' account information. Google now has a policy tightly restricting the use of Windows and IE to only employees who need it for testing purposes.

You don't have to do much to pick up malware via websites. There are myriad ways for attackers to deliver malicious code that you will never see, and often your virus scanners cannot detect either.

http://isc.sans.edu/diary.html?storyid=10132
http://www.microsoft.com/technet/security/advisory/2488013.mspx

It's incredibly easy to avoid the whole mess. Install another, faster and more secure browser. Delete the IE icon from your desktop and quickstart bars, especially if others use your computer. Set the other browser of your choice as the default. Here's a list of modern, secure browsers, in my personal order of preference.

http://www.google.com/chrome
http://www.mozilla.com/en-US/firefox/
http://www.opera.com/
http://www.apple.com/safari/

If you can't see yourself using another browser, at least use Chrome for your sensitive data and IE for everything else. That way at least your bank accounts and health records will be slightly harder for attackers to steal.

Lastly, if you haven't done it in a while, check for updates on the other programs you use regularly, especially instant messaging like Skype, AOL, MSN, and Yahoo!. Many programs have an automatic update feature under the "Help" menu that will automatically do all the dirty work.

-Al