Providing Reliable Backups for Friends, Family and Very Small Businesses

Tying in with my ode to Dropbox under the “What I Use” section, is this recent Lifehacker article that does an outstanding job of covering how to make reliable backups for the relatives most geeks provide tech support to, that are also transparent enough to pass the Aunt Hattie test. The article also points out how to set up fairly painless password storage (I also love 1Password for that), and remote access for giving them a hand. While it doesn’t cover much on local backups, modern Macs have the excellent Time Machine, and for Windows, the recommended Mozy will not only backup offsite, but will also back up to a local drive for faster recovery than the offsite backups. 

In short, this “for your relatives” solution is also perfect for the small, home-office or one one-or-two computer type of business for setting up reliable backups and remote support.

Virtualbox

I recently stumbled across a new (to me) option for virtual machines called Virtualbox, provided for free by Oracle. Like VMWare and Parallels, Virtualbox allows you to create a virtual computer that runs inside it’s own window on your desktop. You can install Windows, Linux, etc., on these virtual machines, and even have multiple virtual servers running on the same computer – though that takes a LOT of memory.

Cons compared to its non-free cousins, VMWare and Parallels perform better and handle 3D graphics better. Pros: it’s a solid product from a reputable company, and it’s free. if you need to test and see if a virtual machine might be the solution for you without shelling out $80 or more, this is definitely the way to go.

Accessibility

Recently stumbled into this excellent programming related article on how to make iOS apps handicapped “accessible.” 

If you’re interested in programming for the iOS, you should read it. What’s interesting to note for everyone else though is this point – how easy it is for visually impaired people to use iOS (iPhone, iPad) devices, how much of that support is just simply “there” courtesy of the standard Apple interface toolkit, and how easy it is to make that support complete for many utility apps.

A number of the biggest iPhone/iPad fans I know of are visually impaired.

Different Kinds of Programming

An article at Time:Code on “Life Beyond the Browser.” Interestingly, it echoes some points I made about the different tool/learning paths required for web vs. desktop programming, but also explains part of why they are different, and use different languages. Math. I can state from my own experience, web programming uses relatively little math as opposed to anything even approaching doing desktop data optimization and animation. 

Getting Started With Programming: Tools of the Trade

In programming, the actual “code” programmers create is merely written text, and programs are little more than text files. As a result, the most important tool anyone can have is a solid, reliable editor. Sure, you can use Notepad to whip up a batch file, or TextEdit on the Mac, but most projects require more than Notepad provides, while the rich text features of Wordpad or TextEdit will only get in the way.

The nice thing is that to get started you don’t have to invest a lot of money in fancy IDE’s (integrated development environments) or hours downloading the hundreds of megabytes of XCode or its equivalent. The Eclipse IDE for Java – while fairly large still smaller than Xcode – is free, and most web or Perl/Python/etc. development can be done quite nicely with a broad selection of free editors. Outside of Java and Cocoa (Mac) programming, all of my coding is done in BBEdit.

On the Mac-only side, I recommend getting started with Textwrangler – the “lite” version of BBEdit. Despite missing some advanced features it has the critical ones – syntax color hilights, multiple-file searches, regular expression searches that let you search by pattern definitions, and my favorite file comparison tool for displaying the difference between two files.

For Windows, check out Notepad++.

Finally, for free, ridiculously powerful, and cross-platform (including Linux) there’s Vim and Emacs. Both have all the features you need and then some, come in command-line and GUI variants, and have fanatical adherents who will tell you at the drop of a hat why Vim/Emacs is awesome and the other one sucks. No matter which one you choose, you’ll end up with an editor powerful enough to handle your needs for years (One of the guys handling FX for the movie 2012 uses Emacs for handling 3D render programming…).

For more suggestions, take a look at this lifehacker page on the best text editors.

Learning to Program

Programming is an art form where we ask a question, and then write out very detailed instructions on how to answer that question. The instructions are written in a very limited subset of words, with a very precisely defined grammar. From this foundation, we can eventually end up at Microsoft Office or the latest XBox game.

Of course, there is a long, long road from writing out your first “hello world” tutorial to the latest word processor or Portal adventure from Valve. On this road, the byways will include a bewildering array of languages, options, tools, and a seemingly insurmountable mountain of functions, libraries, and bizarre vocabulary you’ve never seen before.

It’s very easy to get discouraged if you allow yourself to. The trick is to break the process down into chunks that you can manage, that give you some feedback, that let you go “Yes, I succeeded!” so you don’t feel like you’re churning away without making any progress whatsoever. This comes under the header of “Choosing your projects wisely.”

Actually, the first trick is to remember that trying to program gets you nowhere. You’ve actually got to do it.

What Have I gotten Myself Into?

A challenge. Like all worthwhile challenges, it will not be easy. The good news? You don’t have to invest a lot of time or money to get started. So first choose a goal – a mid-term one. 

What are you interested in creating? An iPhone app? An android app? A web-based app? The next Twitter? That will determine your starting point, your choice of starting languages, and what tools you need to pick up.

The path is not straight.

Keep in mind that programming, like math, depends on you learning concepts and then building on them. Programming as a process though, is not the same as programming as a language. Don’t get hung up on mastering PHP first if you really want to develop in Ruby “on Rails,” for the web. You don’t have to master HTML to start learning scripting languages for web programming, but you do need to know enough to build a webpage using those languages. Learn enough of the current toolset to start being proficient, and advance to the next one. Once you’ve learned the basics of a couple languages, the rest is mostly a matter of syntax and available functions. It’s how you learn to think about the problem, and break it down, that’s important.

For the web

For web-based applications, the baseline is to learn HTML. No, its not a programming language, but it IS a structured language that defines what kind of information you’re putting on the page, and where. It is used in combination with CSS: stylesheets that allow you to separately define how that information looks once it is on the screen. Since any programming for the web will involve manipulating and modifying HTML and CSS, you need to know these. HTML is also a subset of XML – which is used as a document and information storage format by many programs.

The next layer to add once you’ve become comfortable with basic tags would likely be Javascript as it’s easily integrated into any web page and required to handle any interaction after the page is loaded. 

For more advanced programming – the next step is learning how to change and construct what HTML, Javascript, etc. web server delivers to the user dynamically. PHP is a common language that is easily integrated into web pages and allows you to do this, while MySQL is a database language so you can store and recover data for later use. From there, you can pick up Java, Perl, Python, Ruby, or even C for more advanced programming.

Mobile and Desktop

Unless you’re building low-level driver code, this will eventually require you to learn a set of daunting “API’s” that allow you to open windows and otherwise graphically manipulate data. For Macs and iPhones, you need to learn Objective-C. For Windows, check other people’s recommendations, but you’ll end up learning some variant of C, C++, or C# and the .net libraries. For Android based devices, and a number of other applications, you will need to learn Java. 

Again, the real trick is to learn to think like a programmer. All else is syntax, and understanding what will happen when you type out any given command. The choice of languages here determines what types of features are already wrapped up for you, which ones you have to program yourself, and how quickly and flexibly you can write down the concept you’re thinking. 

There are arguments for starting in Java. If you’re planning on making a living outside of the Mac or Windows world, you definitely need to learn it. That said, I personally prefer Python as a starting point. It comes pre-loaded on Macs, it’s easily available for Windows, it has a very clean syntax, and it easily bridges the gap from simpler, “procedural” languages to learning object oriented ones. While relatively slow performance wise, it has been repeatedly used by experienced programmers to prototype out software for later optimization, or even tackle projects they never would have dreamed of in high-performance languages like “C”.

Either way, there are plenty of good sources of information and starting tutorials. Once you get your feet wet, you can start progressing into more complex languages that require more attention to details like memory allocation, but give you better performance in the tradeoff, or start learning the basics of creating Mac, Windows, Android, or iPhone apps.

Strategies and Considerations for Backing Up Small Businesses

Most of us have seen it before: A client calls, in a panic, because a company report, a critical database, or a critical email is lost. It could be because a computer died, it could be something was stolen, it could be because something was maliciously wiped. Hoping the answer is “yes”, you ask the question: “Do you have backups of that?”

The question serves several purposes. First of all, it gives you a rough estimate of exactly how complicated or expensive the recovery procedures are going to get. Secondly – if the answer is yes – it acts as a pacifier, reminding the client that they may be inconvenienced, but all is not lost. Even if you know they have backups because you already had this talk, calmly reminding them that they have backups helps calm them down, because now they know the odds of things turning out better than their fears have dramatically improved.

Of course, the best time to deal with backups is before you need them, and smaller businesses (5-20 people) have some unique issues that many larger companies with a full-time IT guy on staff wouldn’t typically see. Even with larger companies, it may be hard to convince people to free up money to back up data after they just spent so much money on computer equipment in the first place.

How critical is your data?

What are you willing to lose? Exactly what you back up, and how, will be determined almost entirely by what information you are willing to sacrifice. This determines how long you need to store data and how frequently you back up. If you have to recover information, can you lose a day? Two days? A week? How often do you update your offsite backups? If a computer dies, how much time is allowed to get the user up on a new machine?

These are questions that, in smaller companies, usually need to be answered by the owners. Even if they are not computer-savvy, they need to understand the different ways their data can be protected.

Workstations

Workstations are one of the most common points of failure. Loss of the hard drive or failure of the file system can result in the loss of data not stored on a server. Failure of the computer means time taken to transfer the user, his data, and his programs to another physical machine.

There are three basic ways to protect individual workstations. The first is to avoid having data that exists solely on one workstation. While much more difficult with laptops than desktops because many laptops leave the network, you should encourage users to store as many working files/etc. as possible on network shares hosted by backed up servers. Combined with email accounts hosted on exchange servers or IMAP services like Google apps, this policy allows a user to log into a different computer and begin to get minimally productive with email and network-saved files until everything is restored “just so.”

Of course, while IMAP based email does allow you to recover gracefully if you drop your laptop, it doesn’t prevent you from permanently deleting email (though a properly configured exchange server allows you to recover recently deleted files). Networked storage also doesn’t protect files that are strictly local to the workstation. Protecting this information requires either regularly backing up to another local – usually external – drive, or running a networkable backup client that can back up the computer – or at least the user profiles – to a central backup server.

The last case is one common in graphic design situations: a workstation with many semi-unique apps highly customized to the user. This can be addressed by regularly cloning the drive to another bootable drive, so that recovering from a failure simply requires a reboot from the backup disk or restoring from the clone. Cloning software is also useful when preparing to install a larger HD into a user’s machine.

Servers

Servers are a great way to share information and provide for a central means of archiving needed data, but even here we can have file systems fail and files can be inadvertently or maliciously deleted.

A word about RAID. A question I often get asked is “But we’ve got RAID, doesn’t that give me backups?” No, it does not. RAID allows a server (or workstation) to continue working even if one of the disks fails. It provides some “backup” from outright drive failure, but does absolutely nothing if the file system gets confused, the drive controller or CPU dies, the computer gets stolen, or someone out for revenge starts deleting files.

Here, your concerns should be backing up stored data files (simple with most software like retrospect/backupexec, etc.), providing for “bare metal” restores to the same or similar machine in the event of hardware failure, and performing offsite backups.

Let’s face it. Someone may break into the facility at any time and steal those expensive servers, and smaller businesses generally don’t have separate locked rooms for them. Or a fire may break out. Or a hurricane may come. Whether you use an internet-based backup service like Mozy/Carbonite, or you regularly swap tapes or drives with a copy kept offsite, you need to consider what data actually has to be preserved to allow a business to rebuild itself from such disasters. Cost also needs to be factored in. It takes time or bandwidth to move data offsite, and offsite storage also costs money. These constraints mean that a business must decide which data is important enough to be backed up offsite and how current the offsite backups have to be. Most companies I deal with swap and take a full copy of the local backup offsite on a weekly basis. Some backup just the critical data files offsite via the internet, daily or several times a day. Others combine the two.

On both servers and workstations, there’s the classic “Oops, I didn’t mean to hit save” where a file gets overwritten, and critical data gets lost. Fortunately, most backup methods these days support some form of snapshot, incremental or differential backup features that allow you to revert to any previous version of the same file. The exact method chosen is dependent on the amount of backup storage available and how far back you want to keep copies.

Flaming Hoops

Of course, it doesn’t matter how thorough and complete your backup system is if the data never actually gets backed up. In my experience, even as simple a process as daily tape changes tend not to get done if there isn’t a dedicated IT-savvy person available. There are two solutions to this: simplicity and responsibility.

Make the backup as utterly transparent as possible. Every time the user must take a step to ensure the backups continue, it’s a potential point of failure where users will eventually put off the action or forget to do it. While tapes still have a purpose and usage, our small business clients typically use hard drives that can be swapped out once per week with one offsite to minimize the amount of time and thought needed to maintain backups.

Also, we push the responsibility for swapping out backup devices as far up the ownership chain as possible. Face it – the owner will be a lot more concerned about the loss of business data than some secretary on the first floor. The more invested the person is in the success and continuity of the company, the more likely he will be to make sure backup tapes or drives are swapped out.

As we’ve seen, there are many factors that determine what specific products and strategies you use to maintain data integrity and continuity of operation. There are also many products, from many companies, that can be used for this purpose. They range from those oriented towards larger companies such as Backupexec, to those oriented towards individual needs such as Dropbox or the personal versions of Mozy. Which combination you use depends on how much downtime you can afford to have, and how much data you need to protect.

Things I No Longer Use…

Once upon a time I had a killer program from an outfit called Cultured Code called Xyle Scope that made it as painless as possible to see what style sheet settings affected what text and blocks on a web page, making it far, far easier to make web pages look consistent, and figure out what bit of .css code you needed to adjust.

I realized today, when troubleshooting some display issues in Safari, that I hadn’t used Xyle in a while.

The problem is that there are other options that have improved. Not only does Firefox have a killer javascript debugger that I’ve only scratched the surface of, but has a few decent css debugging tools as well (though not as good as Xyle…). I leave even that alone, because now Safari is up to version 4. The web elements inspector under the debug menu is somewhat clunkier in use, but just as useful information wise. The javascript features give me enough info to fix most of my problems without going into a full debugger. The real killer app feature of this though, and why Xyle hasn’t been opened in forever, is that unlike Xyle Scope, the web elements inspector allows me to see the styling and elements of the web page is it is currently rendered, after content has been dynamically modified via javascript, and not just in the initial load state of the basic web code.

Apparently, even the guys who made it agree, as cultured code no longer even links to it off of their front page.

Two apostrophes and a diff later…

Hooookay. Again the geekery, and also dabbing a toe into a subject that if anything, gets geeks even more fired up than the platform wars (Unix/Mac/Windows/Whatever).

Editors.

One is left wondering how they got themselves into this.

The long and the short is that I saw an article where someone was discussing the power of an ancient, and highly honed text editor in the *nix world called emacs, and how it was again becoming the cool kid on the block. It didn’t hurt that a few days before that I saw one of the guys from Digital Domain at my son’s High School (he was an alumnus there) showing off some of his work – and using a customized emacs editor.

So I took a plunge, tried the different versions, decided that of the commonly available flavors the current “carbon emacs” was the best, but…..

It just wasn’t me. Powerful, yes, and something I’ll need to ramp up on a bit along with vi when editing text remotely on a server, but….

It was too much work to learn a new set of tools.

Which brought me to another quandary, my two preferred sets of tools. TextMate and BBEdit.

Why two? because neither is exactly what I want either.

Textmate is fresher, more customizable, seems to have a better intuitive grasp of languages, and can easily create some truly killer code snippets I can fire off with a few letters and a tab.

On the other hand, it chokes on some of the larger logfiles I have to parse through, the “find” features don’t color code the matching syntax, comparing two files line by line is so utterly painful I go out o my way to open up BBEdit just to do it when I hit that brick wall, and it can be far too aggressively helpful when it comes to single and double quotes.

I don’t really want or need all of BBEdit’s features… I’ve stripped down my TextMate feature set to just what I need as it is….

But…

If it would deal with large files smoothly without beachballing (for minutes even….), and if the file comparison using “diff” gave me results like BBEdit, I’d be a happy camper and forgive the rest of the annoyances.

I’d also like it if the long-promised version 2 that would make use of the then-new 10.5 “Leopard” features would finally, finally come out.

In All Fairness to Adobe

Adobe did get around to testing CS3 compatibility.

Now – if they had even mentioned that compatibility testing was in the works up front (but that it may be delayed in prioritizing CS4 first – and that bug fixes would depend on the nature of the bug) – a lot of people would have been happy that Adobe wasn’t blowing them off on a product some had only bought a year ago.