Secure FTP in All its Forms

It is the File Transfer Protocol. FTP has been an important part of the Internet for more than 20 years. Businesses depend on it to transfer data from system to system and from business to business. In today’s world of SOX, HIPPA, PCI, and other standards and regulations companies are not only required to get the data moved, but to move it securely. “We need secure FTP,” cry the business units.

However, in the rush to address the needs to secure file transmissions we ended up with multiple protocols. And even among those protocols there are multiple standards regarding how to operate them. To connect a client to a server both sides have to select the same technology, and simply saying “we want/do secure FTP” just leaves implementors in a quandary about which kind of secure FTP.

Read the rest of this entry »

Why Use a Language-Powered Domain Specific Language?

Following my previous post on Domain Specific Languages (DSL), I had the pleasure of reading some responses.

Aristotle does not like using eval (source):

I mean, evaluating another source file every time you instantiate an object in that class? Awesome! If I had to maintain his code I’d refactor that part out of existence with a quickness!

Ovid agrees but is a bit more thoughtful and explains DSLs better than I did, except we differ in opinion regarding use of eval. Ovid’s most important point is that DSLs can also be implemented by coding your own lexer and parser instead of using eval. I did fail to mention that, but I think it lends yet more credence to my previous assertion: that Ruby has better support for DSLs than Perl. Otherwise, the Perl crowd would not be so much against using eval (on strings) instead of writing the parser.

What a pity! There are certainly instances where eval is used in a sloppy and careless manner, but proper use to facilitate DSLs transcend that. My use of eval in DSLs may not always be the best, but I am convinced eval is a useful tool that should not be so summarily dismissed because of its dirty infancy and that its bathwater got a bit grimy.

Read the rest of this entry »

Using RCS to Version Control Your Unix Host

Ever make a change on that Unix host you manage and need to undo it? Good thing you made a backup, right? You even gave it an extra extension, .bak, so that you would know it was the backup. But wait a minute, this file also has copies with extensions .backup, .20070813, .20051221, and .john. Do we need all these? Looking through them, they seem like copies we can do without, but even so they still contain some interesting historical data. And I really would feel funny about deleting the .john copy without asking John about it. What to do?! Simple, it is RCS to the rescue.

Read the rest of this entry »

Force and Excellence

I read a quote this week that sums up a large part of why policies often fail to achieve their objectives:

Just remember: people tend to resist that which is forced upon them. People tend to support that which they help to create. —Vince Pfaff

Policies fail because they are forced upon people without any input to address their needs and concerns. This is counter to a culture of excellence, a mindset where people are enabled to perform their best and do so because they love what they do.

Policies were born out of a need to prohibit undesired activity. We have names for the desired activities we want instead: best business practices, security controls, change management, and others. These are good things indeed, but it does not change that policies exist to prohibit activity. In the great attempt to stop bad things from happening, policies usually end up just preventing excellence from blooming in their “squish activities first, ask questions later” manner.

Read the rest of this entry »

Parsing Dates in Unix with Ruby

Ever need to write a script that can read a human readable date and turn it into something a computer can use? How often do you have “August 10, 2007” in a string and need that converted to a number of seconds since January 1, 1970?

As it turns out, Ruby includes an excellent module for parsing dates. It can handle several common formats, too! All you need to do is require ‘parsedate’ and you have access to it:

Read the rest of this entry »