Finally... Free of Outlook. Thank you Mozilla!

Posted by ryan
at 4:08 PM on Friday, November 19, 2004

<a href=”http://www.mozilla.org/products/thunderbird/” title=”Get Thunderbird – Reclaim Your Inbox”><img src=”http://www.mozilla.org/products/thunderbird/buttons/reclaimyourinbox_small.png” width=”125” height=”80” border=”0” alt=”Get Thunderbird”>

I have made it my mission for the past few months to remove myself from the dependency on Microsoft Outlook I have had for the past 6 or so years. Don’t get me wrong, Outlook is a great tool for email, contacts and calendaring and I have used it enjoyably ever since college. However, as I’ve recently wanted to migrate ALL my machines (about 5 of them) to Linux, I ran into a problem. How do I migrate my years of emails and appointments/tasks to a Linux/open platform?

Initially I was content with running Outlook (2003) in Crossover Office – but what’s the point of running Linux if you still have to pay for a $400 office suite AND are tied into proprietary formats. As I started thinking more and more about my goals I also realized I wanted all my data available to me no matter which machine I was on – and without any messy synchronization process.

An ex-coworker of mine suggested using IMAP for my email store and iCal over WebDAV for my calendaring. At the time he originally suggested this I wasn’t too impressed with the iCal calendaring clients for non-Mac machines. However, with the latest release of Mozilla Sunbird I’ve found that it’s at least functional for the minimal time I will be spending in Windows and that Evolution 2.0 now supports iCal over webDAV. Ah hah! All the pieces are all in place now.

Here’s what I’ve done:

  • Got a VPS plan from Linode.com
  • Installed the Debian image
  • Set up Courier email server w/ IMAP
  • Copied my email from Outlook to the IMAP store (Outlook supports IMAP – so it’s just a matter of copy over)
  • Installed Apache2 w/ webDAV & SSL on my VPS
  • Set up a private calendar folder for my iCals
  • Using Mozilla Sunbird, imported my calendar appointments from Outlook’s CSV format (not perfect but certainly acceptable) to my iCal share
  • Using Outport, exported my Outlook tasks to Evolution tasks (which appears to be iCal) and imported them into Sunbird and my iCal share
  • Used Mozilla Thunderbird to import my contacts and connect to my IMAP store

I have been running this hybrid Thunderbird/Sunbird setup for a few days now and find it to be perfectly functional. I have really come to appreciate Thunderbird, and Sunbird is a start for calendaring. Most of all I can rest easy knowing that I am free to switch to machines and operatins systems at a whim and have all my essential data available to me with no conversion. I definitely won’t be making the same mistake I did 6 years ago – choosing a product that ties your information up in a proprietary format. Thank god for Mozilla and the open-source movement in general.

Some impressions so far:

  • Linode.com is sitting on some fat pipes and has a great, easy to use console – but my support tickets (non-urgent) have either gone unanswered or not answered for days. It’s only for those who can administer their own sites or are willing to put in the time to learn the stuff yourself.
  • Mozilla Sunbird is a bit quirky to say the least. If you need predictable, accurate behavior from your reminders and tasks, it may not be ready for you yet.
  • Definitely check out the Thunderbird extensions out there, they will really enhance your email experience. My favorites are the contacts sidebar, quick reply and foxy tunes

BarCampRDU: Session Reclamation Project

Posted by ryan
at 5:31 AM on Tuesday, July 25, 2006

The spirit of BarCamp is best summarized in the ad-hoc, self-organizing schedule board where session presentors place their session titles up in their preferred timeslot and the day’s events miraculously materialize.

So that the event can live forever, I’ve started adding notes on the best pic of the schedule board I could find for the sessions I went to/knew about. If everybody fills in their events we can have one place where the day’s events are nicely recapped… (Click on the pic above to add your note – and stay within the lines!)

tags: ,

XML document design; When to use attributes vs. elements

Posted by ryan
at 1:39 PM on Thursday, March 04, 2004

My development team is in the process of designing some XML documents for use as a local file persistence format. The question has come up of when to use attributes vs. when to use elements.

I am of the following opinion:

  • Use attributes to represent singular, primitive data. For instance, the id of a user, the name of a user, the dob of a user would all be attributes because they are, well, attributes of the user.
  • Use child-elements to represent collections of items or complex types. For instance, the address of a user or the dept. of a user would be represented as a child element.

For example, a user XML element should be structured as

<user id="1" firstName="Ryan" lastName="Daigle">
    <address street="xxx My Street" city="My City" />
</user>

And not:

<user>
    <id>1</id>
    <firstName>Ryan</firstName>
    <lastName>Daigle</lastName>
    <address>
        <street>xxx My Street</street>
        <city>My City</city>
    </address>
</user>

Upon looking at this, it seems a bit extreme. Would anybody contest these document structures or have their own set of guidelines for when to use attributes vs. elements?

GDrive Finally Showing Some Love for Linux?

Posted by ryan
at 4:26 PM on Tuesday, July 11, 2006

Could it be? Could Google finally be throwing some support to the linux users amongst us?

Google Desktop, no linux client

Google Earth, no linux client (though the beta has mediocre Linux support)

Picasa, no linux client (woo-hoo!)

But now… the rumored GDrive release looks to have a linux client according to the screenshot. If it’s true, then thank you (finally) Google!

tags: , ,

BarCamp RDU: Yes Please, I'll Have Another

Posted by ryan
at 3:55 AM on Tuesday, July 25, 2006

This weekend’s BarCamp RDU marked the culmination of a few weeks worth of work for myself and the organizing committee, and even more for Fred, the head maestro. It was my first such event, and here are my impressions:

Logistically, everything went really well, except for maybe a slight shortage of our lunch foods (for which I am to blame).The volunteers totally stepped up and the cogs of the bar camp wheel operated efficiently.

I would say the sessions were of varying quality. There were a few I heard about during the course of the day and wondered why I didn’t go to them – and some of the ones I went to I wondered why I chose them. I would say as a general rule when choosing which sessions to attend – choose the ones where either the topic or speaker, or preferrably both, are more discussion oriented. Probably the most interesting session I wend to was the session on social networks by Fred Stutzman. It wasn’t that Fred totally dominated and blew us away with some really bleeding edge concepts – it was that he really made it a conversation between Fred and the group, and within the group itself. Choose the sessions whose topic (i.e. ‘Social Networks’) and speaker both encourage active participiation. After all, that is what a BarCamp is about, right?

I was really impressed with the overall quality of people who attended. A lot of different backgrounds and a lot of interesting people. While it was definitely a technology based conference, I really felt like my parents or significant other could have sat in on some of the talks and remained interested. It’s not all about geekin’ out.

And where else can you learn to Teach Your Wife Version Control and study up on Dancing with Girls in the same day?

All in all, a great experience – let’s do it again, ay?

tags: ,

XSLT Best Practices - My undergrad research uncovered

Posted by ryan
at 1:03 PM on Tuesday, September 20, 2005

When I was doing my undergrad over at N.C. State I took a pretty autonomous undergrad research course to complete the honor’s CSC program. At the time I was working for TIBCO/Extensibility and was pretty heavy into the XML/XSLT world. My research reflected that focus as I chose to focus on “Extensible Stylesheet Language Transformations (XSLT); Programming for Code Reuse and Performance”. I recently dug up the results of the research and have to say that “research” isn’t quite the right term for this underwhelming paper. Something like “Best Practices Whitepaper” seems more appropriate. In either case, I’ve attached it here so I don’t lose it again in my stacks of corrupted cd backups:

Extensible Stylesheet Language Transformations (XSLT); Programming for Code Reuse and Performance (pdf)


Client-based iCal support?

Posted by ryan
at 2:26 PM on Monday, November 22, 2004

As my previous post indicated, I thought I had finally broken free of MS Outlook. I had been running an IMAP/iCal over webDAV combination on Windows for about a week without any showstoppers. I figured that between Thunderbird/Sunbird/Evolution on Linux, I would have no issues porting over to a Linux machine 100% of the time. Well, I spoke too soon.

I spent all day trying to get Evolution set up to read from my iCal share on my VPS. Two issues:

  • Evolution doesn’t seem to support either iCal over SSL or authenticated URLs.
  • Evolution doesn’t seem to like the format of my calendar. (Could Sunbird be to blame here? It likes the calendars on icalexchange.com)

To add to my dis-appointment, Sunbird doesn’t have a package for Debian yet and the Mozilla-Calendar project isn’t quite where I need to be. All I want is an iCal calendaring solution available on multiple platforms. Is that too much to ask?

Migrating VSS to CVS

Posted by ryan
at 12:44 PM on Friday, May 14, 2004

At my work we have a combination of “legacy” Visual Basic applications and more recent J2EE web based applications. The Visual Basic applications use the esteemed Visual Source Safe as their source code repository, whereas we were lucky enough to establish CVS for the Java apps. Well, VSS’s deficiencies in branching and merging have forced us to use CVS for all source (I say “forced”, but this is something I think is a good move and am totally for). So now the challenge is migrating our VSS repository to CVS and maintaining the code history.

The only such tool I have seen to accomplish this is this vss2cvs perl script. However, there doesn’t seem to be any account of a successful conversion effort. Well, this is my attempt to explain how I converted our VSS repository to CVS using this script… Note: I DO NOT claim to know perl. I basically hacked away at this till it worked, please let me know if you see a better way to accomplish any part of this script!

As I’m on a windows client machine, I had to install CygWin with the Perl libraries to execute this command for the transfer:

export CVSROOT=<i>your cvs root</i>
perl vss2cvs.pl SSROOT=//GRUEN/VSS SSPROJ=$/<i>your project</i>
CVSPROJ=<i>your new cvs proj name</i> SSUSERPASS=rdaigle,<i>your passwd</i>

But first, let’s get the script fixed:

  • First of all, it seems there needed to be some initial changes to the script outlined by this post.

Once I did that I was still getting errors about invalid SourceSafe syntax. Turns out the command line call to the VSS executable (ss.exe) was formatting the file path incorrectly. So I had to change that line in the script:

  • Line 122 changed from
    exec_cmd("ss workfold \"$ssproj\" \"$workdir\\$subdir\" 
    $ssuserpass");
    to
    exec_cmd("ss workfold \"$ssproj\" \"$workdir/$subdir\" 
    $ssuserpass");
  • After line 145 add the following to remove trailing ”:” from the directory names:
    $currdir =~ chomp($currdir);
    $currdir =~ chop($currdir);
  • Before Line 168: (
    open(FILETYPE,"ss filetype \"$currfile\" $ssuserpass |");
    add
    $currfile =~ s/\r//g;
    to remove leading spaces from the path.
  • Line 237 of sub resync_file: add
    $file =~ s/^ *//;
    to remove leading slashes from file path

After that, I started getting erros about not being a CVS module. Turns out the script was trying to get modules from CVS that hadn’t yet been moved over from VSS (the script claims to be able to re-sync repositories, I have not tried this).

  • Wrap the
    open(CVS,"$cvscmd |");
    and subsequent while loop with this “if” statement:
    if ($alreadyincvs)

Ok, good. At this point I started getting “attempting to use variables not yet initialized” errors and needed to check that the “highestssver” variable at line 424 was initialized before using it.

At this point I noticed that it wasn’t properly finding the labels and had to:

  • change line 433 from
    if(/^Label: "(.+)"$/)
    to
    if(/^Label:/) 

Here is the resulting file that seems to work pretty well for me: (right click -> save as…). Please let me know if I need to clarify anything or what your experiences are with this conversion. There seems to be a lot of interest in it, with very little real solutions. Hopefully we can remedy that and get people off VSS.

As a side note, here is where the script falls short:

  • Tags (or “labels” in VSS) don’t seem to get transferred over.
  • Branches, forget about it.
  • The user and date of the original commit to VSS won’t show accurately in CVS. Instead, the comments for each commit will contain the original user and date. However, I have seen somewhere that executing this *nx command under your CVSROOT will remedy this:
    find . -name \*,v -print | while read f; do massagecomments.pl
    "$f"; done
    “massagecomments.pl” can be found at the original vss2cvs.pl download location mentioned at the beginning of the post.

Let me know how it goes.

Paul Glaubitz has kindly given me the updated script he used that properly handles file labels. I’ve updated these links with his version. Thanks, Paul!

Here are the resources mentioned in this post: (right click -> save as…)