Why is currency programming so hard?

One of the most requested ReceiptWallet features was to be able to handle receipts in multiple currencies. OK, simple enough I thought as I could just treat all values as strings so that they have a currency symbol in them. The problem was that I had to verify that the currency symbol was valid and format the value so it is appropriate to that currency, for example, the Japanese Yen doesn’t have decimals in the number. My first pass that this was pretty decent, handled dollars, Euros, Yen and a bunch of other currencies. Turns out this wasn’t a complete implementation. In order to build my list of currencies, I used what are called locales on Mac OS X to get the currency associated with a locale. Problem is that some currencies aren’t associated with a locale, such as Swiss Francs (I have no idea why). So I had to find a way to get a list of currencies and do some formatting magic. I think that I managed to do this, but I just don’t understand why it was so hard. Is it inconceivable that people would want to use multiple currencies on one machine? If it was easy, everyone would have this type of code in their programs!

The joys of syncing

For over 4 years now, I’ve actively been doing development in the sync arena trying to get devices to talk together (I actually did some synchronization stuff in college so my history with sync goes back a bit). This is an area that is under appreciated and people seem to only say things when it doesn’t work. Syncing is hard; there are no right ways to sync, just wrong ways. No 2 devices or machines match up there data exactly, so choices have to be made to get things to sync. We do our best, but don’t always succeed. My recent experience with syncing has nothing to do with the software I write as I don’t use it; I don’t use it because I don’t like it, I don’t use it because I don’t use the devices we sync. 2 weeks ago, I bought a Motorola RAZR to replace my Samsung A900 with the idea that I could sync it, or at least sync the contacts. Without much difficulty, I was able to sync the contacts. The calendar was another story, it seemed to die depending on what I was syncing; I suspect it had to do with detached events or some kind of repeating events. So I gave up on the calendars, but was still pleased with the contacts. That was until last week when I started noticing that I was missing email addresses for people. It appears that one of my syncs eat secondary email addresses for people. I think I’ve rebuilt most of my contacts and it doesn’t appear to be happening more. While I was a little annoyed at the iSync team/Sync Services team initially, having worked on sync, I know how hard it is to prevent problems. Probably some minor bug that caused the first sync to nuke the entries. Oh well, at least it wasn’t the stuff I wrote that ate my data.

Charging a Motorola RAZR over USB

The Motorola RAZR has a mini USB plug on it for charging and hooking to a computer which is great as I have lots of those cables lying around. Unfortunately it won’t charge over USB from a Mac out of the box. Luckily, I know some tricks and someone told me the magic to get it to charge. I whipped up a little program that tells the RAZR (or any other Motorola cell phone) to charge over USB. My app is free to download. If you like it, please take a look at my ReceiptWallet program and consider purchasing it. The app is pretty simple; place it in your applications folder, launch it and set it as a login item. Whenever you plug in your phone, it should start charging. If your machine goes to sleep, it will stop charging. (For those curious, all the program does is open and close the USB interface on the phone.)

If you can’t get the program to work, unfortunately there is nothing I can do about it other that to suggest to Motorola to fix their phone so that it charges automatically when plugged in via USB.

Update, there are “sync only” USB cables that allow you to charge Motorola phones without MotoCharger; I have one and it works quite well. I’ve also decided to post the source code. You can grab it here. There are no restrictions on the source, just please don’t claim it for your own. If you like it or use it, please use my Amazon link to buy something.

Overlooking the obvious

In my latest program, ReceiptWallet, you can create and delete receipts. While I was developing it, I always hit the Delete key to remove receipts as I’m pretty keyboard centric and don’t like using the mouse if I can help it. The Delete menu item is always dimmed and I have received a number of messages asking how to delete receipts. I can’t believe I forgot to hook up the menu item for Delete. Stupid me. So in the next version, I hooked up the menu item and added a big Delete icon on the toolbar.

Stupid users

Up until my latest product, I typically wrote software that was a bit complex and not easy to setup. This is due to my slightly over active brain trying to solve a problem in what may not be the easiest way. So when I sold software, I could understand when people couldn’t set it up and wanted a refund (I didn’t like it, of course), so I put verbiage into my store that required people to confirm that the software was working before purchasing so I didn’t have to deal with refunds. I thought that my latest product was different because my parents have been using it without problems (they’re pretty smart, but sometimes have issues with computers), but a user today proved me wrong. Not only did the user not read my no return policy (uhhh, that’s why there is a demo), the user never contacted me for support and his problems were quite minor with one being he couldn’t delete a receipt (hit the delete key, more on this in another post) and he couldn’t put receipts in collections; the mechanism for doing this is the same as iTunes and iPhoto and I don’t hear people complaining about them. I gave the user back his money (minus the processing fee) as frankly, I didn’t want to deal with him. For a product that is pretty easy to use and has a demo, I shouldn’t have to deal with stupid users.

Value of software

The shareware software market has really changed how people value software. Many hobbyists create their shareware for $5 or $10 to make some spare change. This is fine and dandy, but with the sheer amount of shareware out there (a lot of it is junk), when a commercial product (not by Adobe or Microsoft) comes out for $30 or $40, people complain that it is overpriced. This is truly sad as software isn’t cheap to create. The shareware market allowed me to personally get into software development, but I started my first product off at $15 and that was over a decade ago. Software also costs money to support and one support email/call can wipe out any profit.

I’ve seen some recent rumblings from other developers about the same thing, so I’m definitely not alone in my feelings.

Thanks MacUpdate, you slimy spammers!

I’ve never liked these folks as they have been stealing (or used to steal) update information directly off VersionTracker. I had posted an update to a program of mine to VersionTracker once and made a spelling error. The same spelling error appeared on MacUpdate pretty quickly. Coincidence? Unlikely. Now the good folks at MacUpdate have decided that they couldn’t make enough money on ad revenue, so they’ve sold their mailing list to spammers. How do I know this? For every different website I visit and give an email address, I create a new email alias in the form of website.com@mydomain.com. From the header of the spam, you can tell where it went and that it came from a spammer:

Received: from transit-r1.garyzoom.com (pptpoe-pool-195-114-8-88.rustel-dsl.com [195.114.8.88]) by linux.gruby.com (8.13.8/8.13.8) with ESMTP id kAMDbIFi023692 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 22 Nov 2006 05:37:20 -0800

With a title like “Subject: One free MAC title download: latest Ableton, Adobe, Corel, Extensis , Macromedia for MAC OS X” and coming off a DSL line, you can tell it is spam.

ReceiptWallet finally released!

Today is a very exciting day for me as I just released my latest product, ReceiptWallet. It’s been a long time since I’ve released my own product. This product allows users to scan, manage, and organize receipts. It came out of my own frustration in finding a receipt one day. With the help of a few testers, I think this is my best application, yet. I think it has the most user interface polish, the right feature set (for a 1.0 release) and works quite well.

While the basic development of the product took about 2 weeks (that’s about 100 hours while I was still trying to do my regular job), it took another few weeks to have the icons done, to write the documentation, and to do the website.

Unlike some of my other applications that have come out of my head, ReceiptWallet is the first that requires virtually no documentation and can be used by the novice user. Both my parents are using it and usually they ask me a ton of questions about how to use some programs, but ReceiptWallet is an exception. They’ve asked me a few questions and had a number of good suggestions, but nothing to drive me crazy. Normally my ideas are quite complex and work for me, but are far too complicated for normal people. This has also been one of the most enjoyable products I’ve worked on in a long time; I had a chance to learn new Apple technologies and was able to pour my heart into it as it is a program that I’ll be using several times a week, at least.

I hope that others find ReceiptWallet as useful and as compelling as I do; if you have a big drawer full of receipts and can’t find anything like me, then ReceiptWallet is for you!

(How’s that for a product plug?)

Email program wars

I’ve been using email programs for the last 15 years on an almost day to day basis. While I definitely don’t hold the record for how long I’ve been using them, I have been using email for almost the entire era since the Internet became popular (graphs I’ve seen show 1994-1995 is when there became a huge influx of users). Over that time, I’ve used a number of email programs and worked with a bunch more through my NotifyMail program. For a very long time, I used Eudora (1992-2002, I think) and even had the opportunity to be on the development team for a few years. Eudora had a ton of features and has an extremely loyal following. I gave up on Eudora a few years back because I wanted to have a central address book and Apple’s Mail offered that along with iSync. Mail doesn’t have all the features that Eudora has, but frankly, I can’t even recall what I’m missing. Also, Eudora’s interface was years out of date and user interface is extremely important to me.

Recently, it was announced that Eudora was going to be re-born as an open source project and I’ve seen people real happy about this. I just don’t understand why. Mail does a fine job for 95% of the Mac users, but some people are just stubborn. If you think people are stubborn about Eudora, I received an email today with the following at the top: “Claris Emailer 2.0v3, January 22, 1998”. Whoa, using an 8 year old email program is almost asking for trouble as lots of things have changed and matured with respect to email.

There will never be pleasing everyone, especially with software.

Debug Logging in Shipping Code is not nice

During some development today, I had to install the scanner drivers for my HP 6110xi all-in-one device. Knowing that scanner drivers have been consistently horrible for the Mac, I decided against installing on my main machine (which also serves as my development machine) and instead installed it on one of my test machines. Well, it is really sad to be right in this case. The 101 MB download for the HP scanner included a whole lot of crappy software. As I was debugging my application, I write a bunch of stuff to the Console and as I was watching the Console, I saw lots of stuff like this:

2006-10-21 16:30:34.134 HPEventHandler[204]: DebugAssert: Third Party Client: (NULL != m_lock && 0 == errno) Can’t create semaphore lock[/Volumes/Development/HP/Mac-Sirani/mac-software/components/HPEventHandler/Sources/Core/HPTMNotificationManager.cpp:62]

appear, as well as debug statements showing the scanning process. I didn’t enable any special logging or anything like that. I wonder how much debug code shipped with the driver and bloated it? It really is a good idea to turn off the debug logging when you ship a product or at least turn if off and make it an option to turn it on in case you need to have a user send you something.

With the rush to get products out to market, quality has gone to the birds in a lot of products.