Archive for the 'Programming' category

Time Drive 0.3: Better, Easier, More Refined

 | October 26, 2009 12:16 pm

One of the upsides of open source software is that it largely sales itselfImagine how awesome it would be if this announcement read: “Time Drive has been completely rewritten from scratch (yet again) to take better advantage of the paradigms of modern computing!  Version 0.3 has hundreds of updates and new features which will make your life easier and more fulfilled!”

There's just one little problem … such a hyper inflated announcement wouldn't necessarily be true.  (Marketing hyperbole, I never knew thee!)  The truth is this: Time Drive is a simple backup program that does a good job of reliably backing up your data.  It offers a nice list of potential backup options: from an attached hard drive, to a computer over the network, or across the internet.  It makes it easy to search for and restore a lost file.  In short, Time Drive seeks to change the world by making an act of computer maintenance more convenient.

But the real test of a program isn’t how well it works, but how easy it is to fix when broken.  A good program does what you want, but a better program helps you get back on track when things go wrong.  Back when I was looking at other backup programs available for Linux, this was my number one frustration.  Most of the applications would work (for the most part), but I could never troubleshoot or repair problems when they happened.  There just wasn’t enough information available.

For an example, let’s take SBackup.  It’s a lovely little program,  except you have no way of knowing if it is working.  It doesn’t keep log files, it doesn’t notify you if a backup job failed.  It doesn’t let you know if it is running.  Its simplicity is actually symptomatic of a flaw: it’s incomplete.

These were problems that I desperately wanted to avoid with Time Drive.  And version 0.3 includes a number of refinements that solve these issues while at the same time making make it better, easier and more refined.  In the rest of this post, I’ll explain why.

Show me more... »

Installing Duplicity on Mac OS X

 | October 7, 2009 3:20 pm

While Mac OS X shares many things in common with other Unix operating systems, it also has a couple of missing parts.  This can make installing software more difficult when compared to Linux or other *nix variants, and unfortunately, Duplicity happens to be one of those cases.

But just because it is more difficult to install Duplicity on Mac doesn’t mean that it isn’t worthwhile.  Duplicity is one of the best command line backup programs available anywhere.  Using the same program, you can backup to a local hard drive, FTP server, over SSH or even to Amazon S3.  It uses the rsync algorithm, which means that backups happen quickly and only the parts of files that actually changed get copied.  Subsequently, backups are smaller.

Nor does it mean that installing Duplicity is actually all that hard, it’s just a bit tedious.  Like many other *nix programs, Duplicity requires a number of additional programs (called dependencies) that you will have to search out and install separately.  To make that process easier, this article explains how.  Below, you’ll find links to the download pages and instructions for how to compile each of Duplicity’s dependencies on Mac OS X.  The instruction set has been tested both on Mac OS X 10.5 (Leopard) and Mac OS X 10.6 (Snow Leopard).

Show me more... »

Install Time Drive On Ubuntu and Other Debian Linux Distributions

 | October 5, 2009 6:23 pm

Clock Icon: SettingsSince version 0.2.2 of Time Drive, installing Time Drive and keeping it up date has gotten a great deal easier.  Instead of requiring that you install from source, we now offer Debian based packages through the Time Drive Personal Package Archvie (PPA).  This article will briefly describe how to install Time Drive using that PPA.


But before leaping headlong into the nitty gritty, let me provide a bit of background about packages and repositories.  Unlike Windows or Mac OS X, software on Linux is organized into a container called a package.  The package contains the files needed to run the program in addition to artwork and configuration information.  Any given program may require many other programs to be installed before it can run.  These other programs are referred to as dependencies.  Ubuntu and uses a tool for managing packages and dependencies called Apt.

The benefits of using Apt over manually installing things is that Apt figures out all of the dependencies automatically.  Further, it keeps everything up to date by periodically scanning the online repository (PPA) and downloading any updates.  In practice, Apt works much like the Windows Update service, only better, since it monitors every piece of software installed on your computer.

Installation Instructions

To install Time Drive using the PPA, we need to do the following:Ubuntu - Logo

  1. Add the Time-Drive-Devel and Duplicity PPA to your Ubuntu Software Sources.
  2. Configure Ubuntu so that it will trust both Time-Drive-Devel and the Duplicity packages.
  3. Install Duplicity and Time Drive

Step 1: Add the Package Repositories to the Ubuntu Software Sources

Open the Ubuntu Software Sources by going to the System –> Administration –> Software Sources.  Then, select the “Third-Party” software tab of the application.  “Software Sources” requires root access, therefore, you will be prompted to type in your administrator password.

Time Drive 0.2 - Software Sources

We need to add two package repositories to the list, one for Duplicity and the other for Time Drive.  Depending on the version of Ubuntu that you are using, copy and paste the following lines (one at a time) into the “Add Sources” dialog.  After each line, press the “Add Source” button.

Time Drive 0.2 - Software Sources Dialog

For Ubuntu Karmic Kaola (9.10):

deb karmic main # Duplicity – Ubuntu 9.10

deb karmic main # Time Drive – Ubuntu 9.10

For Ubuntu Jaunty Jackolope (9.04):

deb jaunty main # Duplicity – Ubuntu 9.04

deb jaunty main # Time-Drive – Ubuntu 9.04

For Ubuntu Intrepid Ibex (8.10):

deb intrepid main # Duplicity – Ubuntu 8.10

deb intrepid main # Time-Drive – Ubuntu 8.10

When finished, press the “Close” button.  Ubuntu should then notify you that the software information is out of date and needs to be updated.  Instead of clicking “Reload,” click the “Close” button.  We will refresh Apt from the command line in Step 3.

Time Drive 0.2 - Reload Sources

Step 2: Configure Apt to Trust Time Drive and Duplicity Packages

After adding the repository information, you will then need to add the repository key to your system’s list of trusted keys.  This is most easily done by running the update-launchpad shell script.  (To download, right click on the link and select “Save As”.)  When run, the script automatically downloads any needed signing keys and automatically add them to the “Trusted Sources” list.

To run the script, go to Accessories –> Terminal and navigate to where you saved the file, then type:

cd /path/to/folder
sudo bash UbuntuVersion

Be sure to substitute the correct Ubuntu code name for UbuntuVersion in the second step – karmic for 9.10, jaunty for 9.04, or intrepid for 8.10 – otherwise, you will get an error.  I happen to use Ubuntu 9.04, therefore, for my setup, I would type the following:

sudo bash jaunty

Step 3: Install Duplicity and Time Drive

Finally, we are ready to install Time Drive and Duplicity.  From the command line, refresh the package lists by typing:

sudo apt-get update

Then, to install time-drive and duplicity, type:

sudo apt-get install time-drive duplicity

Application Updates

As noted above, whenever a new version of Time Drive, Duplicity, or another dependency is added to the package repository, your system will automatically be updated.  However, should you upgrade your system to a newer version of  Ubuntu, you will need to return to this page to add the repository for that version.


Note: These instructions were modified from this tutorial on WineHQ.

Time Drive 0.2 – A “More S” Release: More Stable, More Secure, More Settings and Now Supports Amazon S3 Storage

 | September 24, 2009 2:41 pm

The first time that you attempt to do something, it’s pretty much a guarantee that it’s going to suck.  This doesn’t necessarily need to be a bad thing.  Shows like  America’s Funniest Home Videos and MXC have found dozens of way to cash in on the humiliation of their participants.  (And what better exemplifies pure suck than a golf ball to the groin?)

It, therefore, shouldn’t come as any surprise that creative pursuits are no exception to the general rule of suckiness.  After all, you have to overcome inexperience and ineptitude to produce anything.  The only way to ensure that a release doesn’t suck is to finish a first draft and revise heavily.  Which requires a great deal of work.

Yet … as interesting as that might be, this isn’t a post about the creative process.  It’s about Time Drive and I should probably admit that Time Drive 0.1 had a few … rough … edges.  Sure, it mostly worked, but it was new software and did too many strange things to declare anything other than a “work in progress.”  But Time Drive 0.1 was a first release and first releases suck.

Second releases, however, offer a chance to clean things up, refine the bleeding edge, and otherwise deliver the goods.  Maybe that’s why I’m so excited to announce the release of Time Drive 0.2.  This version of Time Drive is a great improvement over it’s predecessor.  So much so that Time Drive 0.2 is hereby dubbed the “More S” release: more stable, more secure, more settings, and Amazon S3 storage.

In the remainder of this post, I’ll attempt to justify such a silly name by taking a look at a few of those new features.

Show me more... »

Filing Bugs for Time Drive or LyX-Outline

 | August 23, 2009 12:30 am

Even though software developers try and create a perfect product, every program has its flaws.  These can be show stopping, or merely annoying; but they are unavoidable.  Even so, unavoidability doesn’t mean that they should be tolerated.  Which is where users bear some responsibility.  If you want a better program, you need to provide feedback to the developer.

Given how important feedback is, I find it hugely ironic that many of the software programs used to solicit such feedback (called bugtrackers), are horrifically difficult to use.  Perhaps the single best (worst?) example is the system used by the Mozilla foundation (famed creators of Firefox and Thunderbird): Bugzilla.  The interface is backward, it’s impossible to find anything, and getting to the same page twice requires a minor miracle.

Knowing this upfront, I tried to find a very easy to use program for collecting feedback on LyX-Outline and Time Drive.  And I thought I had succeeded when I came across Flyspray, an open source bug tracking system.  While still remaining powerful, Flyspray is fairly easy to use for both developers and users.  Unfortunately, though, it hasn’t been quite easy enough.

You see, even though it’s pretty simple to open a new bug report, getting to the right place isn’t the most intuitive process in the world.  A number of people have expressed confusion about where to go to complain about Time Drive.  As a result, I thought i would write a brief guide.

Step 1: Go to the Bug Tracker Website

To get started, you need to head to the Time Drive and LyX-Outline bug tracker website.  It can be found at:

Step 2: Go to the Appropriate Project Page

When you load the page for the first time, you will see a list of the currently open bugs for all active projects.  Depending how busy I’ve been, this list could be quite long, or quite short.  What you won’t find on this page, however, is an easy way to add new bugs.  To do that, you’ll need to navigate to the project specific page.

The main window lacks any way of providing feedback.  This is because you are in the wrong place.

Look at the very left hand side of the tool-bar.  Underneath the username box, you will see a drop down list that says “All Projects.”  This magical list is the main way that you navigate my Flyspray based bugtracking system.

Select the appropriate project from the list and click "Switch"For example, let’s say that Time Drive just corrupted your vacation photos and you want me to know this and how angry it made you.   To communicate these thoughts (bonus points if you can do so without swearing), you need to go to the Time Drive project page.   This is as easy as clicking on the down arrow and choosing “Time Drive” from the options.  After you change the option, it is likely the page will refresh, and the main navigation menu will change.  (Though on some browsers, most notably Opera, you will need to click the “Switch” button.)

Now, instead of the utterly boring, “Overview” and “Tasklist” options, you should be presented with a slightly more exciting menu.  This includes the options to take a look at the “Roadmap” and more importantly, “Open a new Task anonymously.”

Step 3: Complain Loudly, Thoroughly and Convincingly

Once you are on the correct project page, you will be able to take a look at the project overview, browse the roadmap, or file your bug report.

This is where you need to complain.  Tell me exactly what you think of me, my creations, and my professionalism.  Rant about how Time Drive corrupted your carefully maintained comic book collection, or how LyX-Outline destroyed your thesis.  This information is important, it helps me to improve the programs.  And getting it off your chest might help you too.  Nothing is more soothing than a good rant.  Especially when the person on the other end really wants your input.

Squeaky wheels tend to greased.  Thus, consider this positing as my official permission to squeak.  But to be most effective, you need to make your noise in a place where it will get noticed.  For Time Drive and LyX-Outline, this happens to be at their respective project pages.

Time Drive 0.1.5: Incremental Changes

 | August 14, 2009 11:19 am

Lifehacker induced change in web traffic.  Looks like move to exponential decay.It’s been an interesting couple of days.  I was rather honored to see that Lifehacker did a short highlight of Time Drive, which I thought was pretty cool.  It’s always been one of my goals to have something featured in Lifehacker or Gizmodo, and now I’m going to have to scratch that off the list of goals.  But that’s okay, I’ve got other things to fill the void.  Like … how exactly does one get invited to present at TED?

On another note … while I knew that I would see some kind of traffic bump due to the article in Lifehacker, I wasn’t necessarily prepared for the magnitude.  In mathematics, there is this thing called a step function.  It’s where you move from one value to another more or less instantaneously.  It looks like a step, hence the name.  Sure, It may not actually exist, since even very dramatic shifts still have a non vertical slope; but even so, the change in my traffic might as well be a step-function.  Between yesterday and today, I’ve had more visits to this site than I’ve had in much of the rest of the year combined.  I think that’s kind of cool, though it probably won’t last.

(This might be a good time to say that I am actually rather proud of my “lackluster” web traffic.  Though it might not necessarily be that impressive, it is, nevertheless, mine. I’ve worked hard for it, and I revel in the fact that some 40 to 50 people each day find the unorganized garbage of my mind intoxicating.  Some of them even come back!)

But as interesting as that might be, traffic stats is probably not why you're here.  Good thing, since I’ve got announcements.

Show me more... »

Backup for Linux, Done Right - Part 2: Time Drive 0.1

 | August 7, 2009 1:39 pm

Time-Drive-Icon[11]In part 1 of this article, I shared a few of the frustrations and reasons why I decided to write my own backup utility rather than submit to the tyranny of currently available solutions.  While some might find those ruminations interesting, the vast majority are probably far more interested in the end result.  There is a reason why “Get to the point” is one of the most important sentences in the English language.

Here’s the short version: After becoming tremendously frustrated by the state of backup on Linux, I decided to take matters into my own hands and create my own tool.

And though I only want a few things, I want that tool to do each very well.  First, I’m looking for a solution that can incrementally backup over the network and let me restore a file from an existing snapshot.  Second, those snapshots should be compressed, encrypted and secure.  Third, it should be easy to browse old backups for existing files and restoration should be a one-click affair.  Fourth, I want a backup system that can protect me from disaster, carelessness and pathological stupidity.

Show me more... »

Backup for Linux, Done Right- Part 1: A Mini Melodrama

 | 12:58 am

Time Drive

It is a terrible thing to realize that you are stuck in a rut.  Being in a rut effectively means that you’ve stopped advancing and life has evolved to monotony.  No one likes to be around people in ruts, but it’s even worse to discover that you are personally trapped in one.  And, most unfortunately, I am in a rut.

Don’t believe me?  Take a look at the home page of this blog.  You will likely notice that a full six of the ten most recent posts have dealt with one subject: backing up your computer.  That’s pretty conclusive evidence of a rut.

Now, backing up your computer is a very important thing to do; you should do it regularly and have a plan.  But … well … it’s boring.  Talking, thinking and writing about nothing but backup is dull.  As one of the doctors I work with likes to say, “That isn’t sexy.  If I’m going to spend any time with it – women, food, wine; it doesn’t matter – it should be sexy.”

He’s got a valid point, backup is not “sexy” and I’d like to write about things that are, at least for a while.  This, therefore, will be my last post on backups, archives, or servers for the relatively foreseeable future (technology is just too cool to lay it aside for too long).  But before doing that, I want summarize where I ended up in my quest for the ultimate backup system.

Backup on Mac is taken care of, I use Time Machine to a Samba share.  More adventurous persons than I might even say that this arrangement approaches sexy.  It’s convenient, fast, and robust.  It even covers disaster recovery.

Backup on Windows is also covered.  The built-in file backup is easy to use and works well.  Moreover, setting up a disaster recovery system is relatively painless.

But the third major operating system, Linux, is a bit of the odd-man out.  Certainly, you can find some excellent backup systems, Back In Time is one such example.  With a bit of work, you can even tweak it so that it is almost perfect.  But it’s the “almost perfect” and closely related cousins (“mostly useful” and “good enough”) that are the problem.  They have those stupid qualifiers – almost, mostly, enough – bolted on.

Any time you hear a qualifier, you can rest assured that you aren’t going to like what follows.  Consider the rather innocuous phrase, “that may be a problem.”   Here, the term “may,” makes an already bad situation much worse.  Instead of specifying some probability of problemhood, it all but guarantees it.  Positive qualifiers are just as bad.

As a result, it angers me that nearly every backup program available for Linux requires some kind of qualifier.  It shouldn't be like this.  Linux is a brilliant operating system in practically every way.  It is highly integrated, wonderfully modular and tremendously easy to extend.  So … after finding that nearly every backup utility in existence has failed to meet my needs, I found the situation intolerable and decided to do something about it.

I wrote my own.

Show me more... »

Introducing LyX-Outline 0.1

 | May 13, 2009 6:16 pm

Writing anything - whether it be a book, or a short story or an angry letter to your boss - is substantially more than starting from the first idea moment of inspiration and continuing to the final draft. Rather, writing involves a fair number of idea fragments, fleeting moments of inspiration, and a tremendous number of dead ends.

It is incredibly unfortunate that most writing software, however, is geared to organizing and structuring the document after most of the hard work has already happened.  It simply assumed that most of the planning and layout has already happened and the author is ready to string words together.  Unfortunately, this assumption overlooks one important truth: ideas are best defined as they are expressed.  Thus, it's usually about the time that the a writer sits down to compose the draft, that the document's true structure becomes apparent.  In my own case, this often leads to a flurry of reorganization.  And it’s during the restructuring that the real battle begins.

When in full creative passion,  I am typically working with three or four different programs all at the same time: OneNote is open so that I can access my ideas, Word is there to start collecting the somewhat finished text, and I'll also probably be using a MindMapper so that I can see a visual representation of the document structure.  The tools are separate and don't communicate with one another.  Thus, a change made in one place needs to be made everywhere.  And all too often, that I end up fighting the word-processor and the notetaker, and the mind mapper.  It is tremendously frustrating to battle the tools of your adopted trade.  Luckily, I am not alone in my frustration.

In the past everal years, a number of programs have become available that leave the linear model of writing behind.  On the Mac platform, one such tool looms above the others: Scrivener.  Central to Scrivener's function are two important metaphors: that of the outline and that of the corkboard.  And it works really, really well.  There are just a few minor problems.  First: Scrivener is only available for Mac and Scrivener's lead developer has made it clear that there won't be versions for other platforms.  Second: Scrivener was really designed with creative writing in mind.  Thus, while it can be used for long and complicated documents, this is a slightly less than straightforward process.  Last, to create said fancy documents, Scrivener requires the raw use of a markup language (and all of the associated headaches that come with it).

The document processor, LyX, however, excels in many areas where Scrivener falls short.  It is built upon the mature and robust underpinnings of LaTeX, the typesetting language of choice in the science and engineering.  And more importantly, it is easy to use (where LaTeX most decidedly is not).  But it fails in the same way as Microsoft Word and other word processors, it is a linear writing tool and doesn’t offer a great deal of work-flow flexibility.  That is where LyX-Outline comes in.

LyX-Outline is a marriage between Scrivener's organizational tools and LyX's typesetting tools.

 LyX-Outline Main Window (Mac OS X)

Show me more... »

Cross Platform GUI Development with Python and Qt

 | May 12, 2009 5:16 pm

One of computer programmers many fantasies (or at least one of my fantasies) is a cross-platform codebase that is easy to maintain.  I want to write an application once and then be able to deploy in on any platform in existence.  It should integrate into the destination environment in a native manner, but still be similar enough to the other platforms so that  issues can be addressed in a way that doesn’t hinder overall progress.

Part of this dream can be fulfilled by using Python and standard library, it is also possible to do much of it by using IronPython and .Net (through the OpenSource Mono framework).  However, in each case, you are forced to make a tradeoff.  Python and the standard library are wonderful, if you are willing to accept a speed hit.  IronPython and Mono also work well, as long as you avoid using any of the Windows specific libraries.  Unfortunately, many of neatest .Net features (like Windows Presentation Foundation) are only available on Windows.

Okay, there is always GTK+ or wxWidgets (the same toolkits used for the Gnome desktop), but GTK+ is written in C and while much of the miscellaneous nastiness has been abstracted away, it is still one of the hardest toolkits to work with.  Oh, and the documentation sucks.  (When any documentation can be found at all.)  Thus, we arrive at the final contender: Qt.  Qt has had a long and controversial history  involving license issues, passion, and miscellaneous geek pride.  In fact, it’s due to Qt and some rather divisive decisions made by its developers that we even have alternative toolkits at all.  But, despite that history, Trolltech’s recent decision to release the framework under the permissive LGPL license (rather than the noxious GPL) changes all that.  In many ways, Qt might just become the cross-platform toolkit of choice

Of course, it's a given that Qt is tremendously powerful with rich functionality.  Applications that are written in Qt are fully cross-platform and behave the same way wherever they are deployed.  It uses native widgets whenever possible and has a sophisticated theming system that allows it to follow platform conventions without significantly modifying the underlying code.  More importantly, Qt is backed by a passionate developer community and a well funded corporation (Nokia).  It is true, you get what you pay for.  Qt is well designed and the documentation is simply fantastic.  And unlike GTK+ or wxWidgets, the entire toolkit is written in proper object oriented C++.

I first started experimenting with the Qt framework about two months ago, after deciding to tackle a major add-on to one of my favorite writing programs, LyX.  As I have said elsewhere, I am not the world’s most

gifted computer programmer (far from it actually), but Qt actually makes it pretty easy to get yourself up and running in a reasonable amount of time.  If I were forced to do most of my GUI programming in Qt and C++, that would be an acceptable solution.  However, that is completely unnecessary.  You see, Qt has one of the most tightly integrated Python bindings available, through the user of PyQt from Riverbank software.  Qt plus Python is, quite simply, programming perfection.  So while I did some mild experimenting with the Qt frameworks in C++, I have spent much of the past few months doing the heavy work of learning the framework via the use of  Python.

In the process, I have made a great many mistakes and a great many more discoveries.  And since the final step in any discovery is to share your findings, I will be doing that through this series of articles.  Of more interest to most, however, I will also be introducing the fruits of my labors: a somewhat functional prototype of my outliner add-on for LyX.

Show me more... »