Category Archives: software

clustering programming languages

Back in my programming languages days, when I was on the committee for a programming languages conference, I spent lots of time arguing the pros and cons of certain languages1.  I still keep an eye on the programming languages community, even though I haven’t been actively involved since I was the Industry Chair for OOPSLA 2008.

So when I stumbled across this project by a couple of people at UC-Berkeley to cluster programming languages, of course I was interested.  They’re collecting opinions about programming languages via survey, and drawing plenty of interesting observations from the data that they’re collecting.  They’re showing correlations for various properties about the programming languages.  For example, there’s a high positive correlation between “I would use this language for writing server applications” and “the thought of using this language in 20 years fills me with dread”, which I have to admit made me laugh out loud.  There’s a high negative correlation between “code written in this language will usually run in all the major implementations if it runs on one” and “I would list this language on my resume”, another correlation which made me laugh.  Actually, all of the high correlations for “I would list this language on my resume” are pretty interesting.

For my fellow programming language geeks, you should definitely check out this site. And, of course, you should fill out the survey and help further their research!

  1. Smalltalk is the One True Language.

unintended consequences

In software engineering, things that you think are a joke sometimes take on a life of their own.  To wit: the humble origins of the blink tag.  A bunch of Netscape engineers got together for beers in Mountain View one night, where one lamented that none of the HTML extensions would work with Lynx.

There were two unintended consequences to this beer-fueled conversation:

  1. The blink tag was coded up that very night
  2. The engineer who made the lamentation met the woman who ultimately became his wife.

You never know what will come out of happy hour conversations.  They often have unintended consequences.

how much engineering effort is lost to DST every year?

I haven’t yet met anyone who really likes Daylight Savings Time (DST).  Every spring, everyone complains about losing an hour of sleep.  Then you walk through your home and get annoyed by the clocks that aren’t updated automatically.  You get even more annoyed when you have a clock that should’ve been updated automatically but wasn’t, or it somehow got updated incorrectly.

Anyone who has colleagues, family, or friends overseas knows that DST is more complicated than that.  Other countries might or might not participate in DST, and the dates on which they change their time are not the same.1  When you’re trying to book a meeting or make a telephone call, there’s a few weeks every spring and autumn where you double-check to make sure that you’re not doing it at the wrong time.

DST is a massively complex beast.  In the US, it wasn’t until 2007 that the dates for the time change were standardized across the country2.  Before that, states and localities could opt out of DST, although you should note that Arizona and Hawaii still don’t observe it.3

“That doesn’t sound too bad,” you’re thinking to yourself right now.  There’s not a lot of error conditions to be had here.  You could get the date itself wrong, but it’s now standard enough that this isn’t too likely.  You could get the time zone wrong, which is probably most likely to be a concern if you’re close to a time zone boundary or if you’re in one of the places that doesn’t observe it.  Both of these are probably not going to require a lot of engineering effort.

And it’s not, so long as you’re only dealing with the US. But now pause and consider: as of this writing, there are 196 countries in the world4.  Each of these countries potentially has their own dates for recognizing DST.  For the countries which observe DST, the dates on which they do so might or might not be standardized, or might be standardized but get moved around if a local government decides to make a small tweak that year.  Localities within these countries also can choose not to observe it.  Don’t forget that the northern hemisphere is observing DST in one direction, and the southern hemisphere is observing it in the other direction.  While you’re at it, realize that “Pacific time” isn’t just the name of a time zone in the US.  Wikipedia has a huge page about daylight saving time by country, which gives you an idea of the complexity of this issue.5

All of this is complex enough when we’re thinking about a single clock that needs to update.  Let’s add in another layer of complexity: client/server.  Your computer has its own internal clock, and it updates against a time server somewhere.  That cell phone in your pocket has at least two time sources.  It’s got its own internal clock, and it’s also getting the time from the nearest cell towers.  Your mail application gets its time from the local computer, and it’s also communicating with the mail server and getting items there that are timestamped.  The examples here are all but endless.

In software engineering, we talk about “edge cases”.  An edge case is a problem that occurs when you’re at the outside the usual operating parameters.  DST is a rat’s nest of edge cases.  You can come up with a dozen of them without even trying hard.  Anyone who’s worked on an application that deals with this has a horror story about the year Venezuela changed their dates for DST at the last minute, or somehow one server didn’t get the latest code, or a million other edge cases.

I have to wonder: how much engineering time gets wasted on DST every year?  Just think of all of the tech companies that have to deal with this: any company that makes a mail or calendar application (IBM, Microsoft, Apple, VMware, …), every mobile phone provider (AT&T, Verizon, T-Mobile, …).  Maybe the tech industry could come together to abolish DST and succeed where so many others have failed.

  1. In 2001, when I moved from Sydney to Silicon Valley, I was in Sydney for their “fall behind” time change, got on an airplane, and was then in the Valley for our “spring ahead” change.  Between that and jet lag, I was in my own personal time zone for at least a couple of days.  Nadyne Standard Time?
  2. Second Sunday in March, first Sunday in November, in case you’re interested.
  3. To confuse matters further, the Navajo Nation in Arizona does observe DST.
  4. The UN recognizes 193, but that doesn’t include the Vatican, Kosovo, or Taiwan.
  5. According to that page, Russia has now stopped observing DST, which I have to believe caused some software engineers a couple of sleepless nights in coding that update.

more on giving up on Safari

It seems that I’m not the only one who is giving up on Safari in its latest incarnation.  Macworld staff writer Lex Friedman is also dropping Safari for Chrome, and for the same reason: Safari’s insistence on refreshing the content of a tab if you haven’t viewed it in awhile.  This has a performance impact on your whole Mac.

I didn’t expect Chrome to become my browser of choice, but that’s what won.  It feels snappier than either Safari or Firefox.  It doesn’t grind to a halt the way that Safari does.  Firefox has always driven me away because it refuses to honor the system network settings, which gets in my way when I’m at the office and switching between the wired network (with a proxy) and wireless (no proxy)1.

  1. I should note that Adium, my IM client of choice, also has this problem.  On Adium, it’s actually more annoying: if I want to use it, I have to reset my proxy settings for each bloody IM account.  I use ’em all, so this is quite obnoxious.  However, if I’m in a meeting, I generally don’t want Adium connected anyway, so not using it isn’t as much of an issue as not using a web browser.  That said, if anyone’s got a solution that makes Adium be a good Mac citizen, I’d love to hear it.

giving up on Safari

I’ve been using Safari since its introduction in 2003.  Upon the death of Internet Explorer for Mac, I switched to Safari exclusively.  When other web browsers have come out, I’ve given them all a go, but I’ve always returned to Safari.  Until now: Safari 5.1 has forced me to switch to Chrome as my browser of choice.

Safari 5.1 now behaves more like Safari on iOS.  When Safari decides that you haven’t interacted with a page recently enough, it unloads that page to save memory.  This doesn’t match up with my usage of Safari in any way.  I often have several tabs open.  Those tabs represent a to-do list of sorts.  Some of the open are items that I simply want to read.  Others represent an action that I need to take: fill out a form, write a new blog post, write my weekly status report.

Forced reloading breaks every single one of these to-dos.  In the best-case scenario, the webpage that I’m reading hasn’t changed between when I started reading it and when Safari forces a reload of its content, so I haven’t necessarily lost anything other than my place on the page.  Even so, I lose the context of what I was reading, and I also lose the time necessary for the page to reload.  Occasionally, I lose the content of the page, if I’m offline when I’m trying to read the page but a forced reload has occurred.

In the cast of an action to take, the forced reload is even more irritating.  I lose my work: the partially-filled-out form, the incomplete blog post, the status report that I forgot to commit to the wiki.  At minimum, I lose the time that I invested in my half-finished work.  Recreating that work is always a losing proposition.

I tried to live with Safari 5.1 for a few weeks.  Slowly, I found myself trying out other browsers again.  I tried Firefox again, but its inability to respect my system proxy settings1 and its incorrect handling of keyboard shortcuts like option-arrow2 have made me move to Chrome.  I’m not sure if I really like Chrome yet, but it doesn’t break my workflows, and I don’t have the constant concern of losing my to-dos.

If a future update to Safari changes this behavior, I might try it again.  But Safari has really broken my trust with 5.1, and I don’t think that I’ll come rushing back.

  1. My wired access in my office is via proxy, but wifi has no proxy.  I switch between the two several times during the day: wired when I’m working in my office, wifi when I’m in a conference room.
  2. When editing text, option-arrow moves you to the beginning or end of the line.  Except in Firefox, where option-leftarrow is “back one page”.

the road away from Quicken, part 4: using iBank

Now that I’ve got my data imported into iBank, it’s time to actually put it through its paces on my easiest set of financial data (the household accounts).

The UI is a single window.  I’ve never thought myself a fan of Quicken’s windows-everywhere approach, but I’m not sure if I like the single window either.  My household account list has 10 accounts in it, which takes up the majority of the space available.  I don’t want to lose the summary pane, since that’s where the upcoming scheduled transactions are listed, and I very  much want to see them at all times.  I seem to spend a lot of time scrolling through the left navigation pane, and it’s getting on my nerves.

There’s several other UI annoyances.  iBank should win a special award for Most Gratuitous Use of Cover Flow.  I can mostly ignore that, no matter how much it makes me want to snigger.  The main UI looks like a chequebook register, which is natural, but poor use of spacing and fonts make it difficult to read for any length of time.  Poor use of fonts also haunts the reporting function.

Entering data

Entering data manually seems difficult.  While the main window looks like a chequebook register, there’s no blank line.  You’re forced to either use the “new transaction” button in the bottom bar (not the most discoverable location) or cmd-N.  Normally, I like cmd-N for this sort of thing, but it gets annoying if you’ve got a whole account that needs manual entry.  I also don’t like that cmd-N creates a new transaction inline wherever you’ve currently got selected instead of at the top or bottom.  I kept on creating new transactions before I realized where they were located.

From years of Quicken, I’m used to hitting the + key to get the date of a transaction to increase by one.  Actually, I don’t have to hit the shift key, just hitting = results in this.  Muscle memory made me try that, leaving me with = in the date field.  I know that this is a minor detail, but it’s something that I’ve come to rely on, and the absence of this detail is also annoying.

Using scheduled transactions

I started to add in my scheduled transactions.  There are two ways to enter a scheduled transaction.  One is to create an instance of a transaction, and then use a menu selection (or contextual menu selection, if you’re so inclined) to create a scheduled transaction from that.  When using this option, I didn’t see a confirmation that my scheduled transaction had been saved. It took a couple of minutes of looking around to see that it’s in the summary area, in the lower-left corner of the window (you know, the least discoverable area of the screen).  Also, in the left navigation bar, there’s a category called “manage” which has an item “scheduled transactions”.  In either case, the confirmation that the scheduled transaction has been created is pretty subtle, which doesn’t make me feel entirely confident in it.  On the other hand, creating a new scheduled transaction isn’t something that I do frequently, so perhaps this wouldn’t be so annoying after I’ve got everything set up.

The other way to do it is in the list of scheduled transactions.  That’s in the left navigation bar under the “manage” category, which I only found after I’d been trying to create scheduled transactions via the direct manipulation method and wasn’t seeing the confirmation messages.  Adding a scheduled transaction here allows more flexibility than doing so from an existing transaction.  Using an existing transaction assumes that you want it on a monthly basis.  However, there’s thing missing from the scheduled transactions: the ability to have a flexible amount for the scheduled transaction.  For example, my power bill is never the same every month, but it’s always due on the same date.  I’ll have to manually update the transaction amount when I actually make it.  This isn’t a big deal (after all, I have to make that manual step today), but it feels odd to not be able to specify that the amount isn’t fixed.

I haven’t figured out the difference between “transaction templates” and “scheduled transactions”.  Or, rather, I haven’t figured out why both of them exist in the UI.  In fact, I don’t get most of what’s in the left-hand navigation bar.

Reconciling accounts

After I got my new transactions entered, it was time to reconcile.  On my first attempt at reconciling a bank statement, I discovered that I had to reconcile all of my old transactions.  All of my imported information doesn’t have the reconciliation information.  This made reconciling last month’s statement impossible.  On the one account that I tried, I didn’t want to have to go through all six years of statements and do them individually, so I tried to choose all of the old transactions.  I had to click through six bloody years of transactions individually.  And then the numbers didn’t match up, so it was a bloody half-hour of wasted effort.  I deleted the statement, and the account is still unreconciled.

More research told me that I was going to have to go through all of the statements to do this to make sure that all of the individual transactions imported properly.  You can imagine the amount of obscenities that I started spewing at this point.  I’ve only got six years of data on this one, and the idea of having to go through all of my bank statements for that period of time is making my skin crawl.  This might be a dealbreaker for using iBank.

Creating a budget

Although I was pretty upset at the idea of having to go back and reconcile all eleventy billion transactions manually, I also tried to set up a budget.  In doing so, this made me realize that I need to invest time into fixing my categories.  It correctly imported the names of all of my categories, but set them as expenses.  That took a couple of minutes to fix, and then I went through the budget wizard to get started.  Most of it was self-explanatory, until I got to the screen titled “starting cash in envelopes”.  Hunh?  That sent me to the manual to learn that iBank’s budget can use the so-called envelope system of budgeting.

I ended up having to create three budgets to get one that was correct.  The second screen, “select accounts to budget” tripped me up.  It gives a list of all of my accounts, and they’re all checked by default.  The manual is no help, telling me to “[c]heck off the ones you want to include”.  Well, okay, they’re all part of my financial picture, so I want them included, right?  Wrong.  One of my accounts tracks my mortgage.  If I want to be able to include my monthly mortgage payment in my budget, I have to remove my mortgage account from the list of accounts.  Mortgage interest is already included, since it’s got a category, but I can’t capture this payment to my mortgage if I list it as an account to include in my budget.  Conceptually, I can’t grasp this at all.

I set up my budget as an annual budget.  While most of my transactions are monthly, there are some important ones that are biannual or annual.  My car insurance and property tax payments are biannual, for example.  However, this means that the only view that I get of my mortgage is of the year.  This makes it hard to see if I’ve met my budget for, say, my power bill this month.  I can only get the picture of my year-to-date, not this month.

Issues in setting up my budget aside, I don’t like how it shows my budget information.  The visual display of the information is poorly-done.  There’s a progress bar for each individual expense category, which has five states: empty (no transactions), green (on track), yellow (ahead of forecast, but still under budget), red (over budget), and a checkmark (exactly at the budget).  It’s difficult to read a line and see what’s going on.  Overall, viewing my budget and figuring out what’s going on is something that I can’t do in the budget view.  I’d hoped that I could create a report, but there only seem to be four built-in reports that I can’t do anything with.

Conclusion

I’ve spent three weeks using iBank seriously, and I end up with a headache each time I try to use it.  I don’t mean that in an “ugh, this thing sucks” kind of way, I mean that my head physically aches after using it.  Some of it is simply trying to get up and running, some of it is trying to figure out what they’re conceptually doing (the budget thing is entirely perplexing), and some of it is poor visual choices.

After three weeks, I just don’t see how I can use this seriously.  There’s the major hump to get over of having to reconcile all of my accounts for all of their transactions.  I don’t even want to imagine what that time investment is like.  Additionally, the childish budget design and difficulty of using scheduled transactions make it unsuitable for my needs in planning.

This is part four of an ongoing series about trying to move away from Quicken 2007 for Mac.  The previous three parts of the series are here:

the road away from Quicken, part three: importing data into iBank

This is part three of an ongoing series about trying to move away from Quicken 2007 for Mac.  The previous two parts of the series are here:

As I’ve mentioned before, I maintain two separate Quicken accounts: one with my personal data, and one with my household data.  The household data is the smaller dataset of the two, so I’m using that as my test case for importing into potential Quicken replacements.

iBank importer: choose file to importiBank has a 30-day free trial available on its website, so I downloaded and installed it.  On first launch, it detected that I didn’t already have a data file, and gave me the opportunity to import my data file from Quicken.  I didn’t expect that I’d have explicitly export my Quicken data into a QIF.  Exporting to a QIF took a few minutes, and resulted in a 360-KB QIF file.  Then I dragged the file into the iBank importer, which (oddly) gave me a teensy preview of the file.  I’m not quite sure what the point of this preview is.

After selecting my QIF for import, I was then prompted to save my document.  I was surprised that I was expected to decide the filename here, and not entirely sure what “document” means.  I’ve been using Quicken since the dawn of time or thereabouts, so I’m not used to thinking about how it stores its data.  I’m not sure what lies behind the design decision to force the user to think about both the name and location of their datafile.  Shouldn’t they at least provide a reasonable default?

After going through the last question of currency, it started importing.  iBank showed a determinate progress indicator, but didn’t give me an estimate of how long it would take.  My file took about a minute to import.

After importing, I was given a list of my accounts and account types, and asked to choose the most appropriate type for each account listed below.  It noted that iBank supports more account types than QIF1, but didn’t give any guidance as to why I might want to select a different type of account.  For example, my mortgage imported as the “liability” account type, and iBank has both “liability” and “loan”.  Why would I choose one over the other?  Can I change this later?  This drove me to check the “Quick Start Guide”, which didn’t help, so I had to go grab the full manual.  There, I learned that a loan has a payment schedule and a liability doesn’t.  So I changed the account type for my mortgage to loan, and also changed a couple of accounts from chequing to savings, and left the others unchanged.

At this point, I was out of time, so I quit iBank for the evening.  Overnight, I realized that my account data isn’t the only data that I’ve got in Quicken, and wrote that blog post.  As I was writing it, I opened iBank quickly to make sure that I had a couple of details right, and was surprised to see that iBank prompted me with the “Welcome to iBank” screen that I got on my first run.  On doing some research, I discovered that it’s a known bug with a workaround.  Additionally, I noticed that iBank wasn’t saving my window size and location information.  That was pretty annoying.  The workaround that seems to have resolved the document-prompt issue also seems to have addressed this issue.   While I’m glad that it’s a known issue with a workaround, it undermines my confidence in the application to hit such a bug first thing out of the gate.

My confidence is shaken, but still I’ll soldier on.  Now that I’ve gotten my transaction data into iBank, the next step is to try to actually use it.  Wish me luck …

  1. But not Quicken? I’m not sure what it means here, or why it would draw a distinction between Quicken and QIF.

the road away from Quicken, part 2: thoughts on data

In my road away from Quicken, I’ve decided that the first potential Quicken for Mac 2007 replacement that I’ll evaluate is iBank.  Last night, I downloaded it and started the import process1.

After I imported my data into iBank, I realized that it’s only importing one type of data: my account data, which includes the transactions associated with that account.  When I’ve been thinking about importing data, this is exactly the data that I have been considering and most worried about being imported correctly.  However, my account data is only one piece of data that I currently have stored in Quicken.

Scheduled transactions.  I have a lot of scheduled transactions.  The majority of these scheduled transactions are monthly, but there’s biannual (property taxes, auto insurance) and annual (home insurance, subscriptions) too.  Knowing the amount of these transactions (or approximate amount, for things that fluctuate) and date means that I know how much money I need to have available at any given time.

Budget.  Closely related to my scheduled transactions is the budget.  I always have a pretty good idea of how I’m doing compared to my budget.  The budget gets revisited about once per year, or more often if circumstances dictate.  Not seeing my budget really threw me off when I first launched iBank, although in retrospect I shouldn’t’ve been surprised.

Online account information.  Several, although not all, of my accounts have online access.  Quicken has stored my usernames and passwords so that it can automatically download new transactions.

For each of these, I’m going to have to manually reenter or recreate that data.  In retrospect, I shouldn’t be surprised.  When I had been thinking about importing my data, even though I had only been thinking about importing my account/transaction data, I had assumed that I would be able to do that step pretty quickly and then be up and running.  I’m going to have to invest more time to get started.

This isn’t a complaint.  It’s certainly safer that other applications can’t access my online account information.  It just shows that I hadn’t fully considered exactly what it would take to make a transition out of Quicken.

  1. So look for another post on the topic soon.

the road away from Quicken (part 1)

I’m an old-skool Quicken user.  I’ve been using it since I was working on my first undergraduate degree.  Today, I use it for pretty much everything in my financial life.

Back in my Linux days, I kept a Windows partition only for Quicken.  When I became a Mac user in 2001, I dutifully bought Quicken for Mac.  I’ve been disappointed in it from the beginning due to its lack of features and its unreliability.  I’ve upgraded faithfully on each version (with an exception, more on that in a minute) in the hopes that one or both of these issues would be addressed.  The former has, in a scant handful of cases; the latter possibly has, too, although not nearly enough for my tastes.

But then the Intel transition happened, and Intuit made the decision that they would start over with a new version of Quicken for Mac instead of transitioning their existing codebase to Intel.  Having been on the Office:Mac team during the Intel transition, I have a reasonably good understanding of why they made that transition.  I understand the decision, even if I don’t really like it.  The new Quicken was delayed multiple times, and Intuit finally shipped Quicken Essentials for Mac (QEM).  On its release, Intuit said that it didn’t have all of the features of its predecessor, Quicken 2007 (Q07).  I relied (and continue to rely) on some of those features, so I continued stumbling along with Q07.

OS X 10.7, Lion, changes that.  Q07 is my last PowerPC application that requires Rosetta, and Lion no longer supports Rosetta.  In all of my years of dissatisfaction with Quicken, I’ve looked at various alternatives, but have rejected them relatively quickly as not meeting my needs.  However, if I want to stay current with my OSes1, something’s gotta give.  Q07 has got to retire, and I’ve got to figure out what that is.

I currently run two instances of Q07.  One is on my personal Mac for my personal finances, one is on the household Mac for my shared finances with my husband.  He might also run an instance of Quicken for his personal finances, but I don’t use his Mac so I don’t know.

My personal finances consist of the following active accounts:

  • chequing account
  • credit cards
  • stock account
  • stock account
  • 401(k)
  • IRA
  • Roth IRA
  • mutual fund account

The household finances consist of the following:

  • mortgage
  • chequing account
  • savings account
  • credit cards
  • life insurance
  • our home2

What do I need in a Q07 replacement?

  • Import of my existing Quicken data.  I actually wouldn’t mind it if I didn’t have to import all of it.  After all, since I’ve been using Quicken for well over 15 years, I’ve got accounts that are long past closed.  I think it’s safe to say that I don’t have to import the data from a mortgage that I had more than 10 years ago.  There’s not an easy way to separate out such old data from my existing data file3  But I do want to have access to my full history of my current accounts.  I like being able to see how much progress we’ve made on paying off our mortgage.
  • Downloading of transactions.  I’ve got a lot of accounts, and so the ability to download my transactions makes managing everything a lot easier.
  • Downloading of security prices.  Okay, so I only own stock in three companies4, but I still like to see how they’re doing.  This also includes the mutual funds in my 401(k) and IRAs.
  • Budgeting.  I maintain a budget (both personal and household), and I want to be able to see how I’m doing.
  • Eye candy.  Yes, I admit it, I want some eye candy.  For example, Q07’s graph showing me how my net worth has changed over time gives me a nice warm fuzzy.  Of course, the graph showing me the hits that my 401(k) and IRAs have taken have the opposite effect.  Sigh.

Q07 has some features that I don’t use:

  • Dashboard widgets.  I don’t use Dashboard anyway, so I don’t care about the widgets.
  • iOS app.  Well, this strictly isn’t a Q07 feature, but I still haven’t felt the need.
  • Bill pay.  I use my credit union’s website for this.
  • Printing cheques.  I write one cheque per month5, and I don’t even own a printer.
  • Integration with other apps.  I don’t need iCal reminders, and I’ve got an accountant for my taxes.

That’s the state of my financial union right now.  Next up is to compile a list of the possible contenders and rank them.  After that, I’ll start downloading trials of the contenders (where applicable, that is) and see how they compare when running side-by-side with Q07 today.  Look for more posts in the future.

If you’ve got a favorite financial application that you’d like to recommend (or, an application that you’d like to recommend against), the comments are open.  You’ll get special bonus points if you note how well they will (or won’t) fit with the financial institutions or requirements that I’ve listed above.

My fear is that the winner is going to be Quicken for Windows.  I’m sure that this makes me a bad VMware employee, but I don’t actually run Fusion6 on my Mac at home.  If I’m going to have to install Fusion, then purchase and install Windows, I’m not sure if I want to reward Intuit by buying another copy of Quicken.  This does mean that if you’ve got Windows financial software options, I’m open to those as well, although my preference is definitely for Mac-native apps.

  1. This is likely, since I’ll probably get a new Mac later this year.
  2. Not an account, of course. Honestly, I put this asset in Quicken so that the total line in my list of accounts doesn’t show that I’m a trillion dollars in the red.
  3. At least, I’m not aware of one.  Please do comment if you know of one!
  4. MSFT, AAPL, and VMW, if you must know.
  5. My HOA isn’t set up for online bill pay.
  6. Or that other, lesser, virtualization software; nor Boot Camp.