Where is ReceiptWallet going?

The other day I was chatting with someone that I work with and he mentioned that he and his brother would like to develop a software product. As part of the conversation, he asked if I’d sell ReceiptWallet? That’s a good question. I started ReceiptWallet out of my own frustration really with no idea how well it would do. Now, it is a decent portion of my business and I still feel very passionately about it. That still doesn’t answer the question, would I sell? If there are enough zeros on the check and the terms are right (I’d want ReceiptWallet to continue on and be developed), I’d say yes! Some “indie” developers would never sell out and just like going at it alone. For me, unless I grow my company to have other people handle support and sales, ReceiptWallet will continue to consume me. Someday I’d like to not have to worry about ReceiptWallet. Is that day coming any time soon? No. Am I giving up on ReceiptWallet? Absolutely not. I work on ReceiptWallet almost everyday.

Having my own software product is nice in some ways, but it also eats up a lot of time due to my desire to create a product that I love.

Don’t worry about ReceiptWallet going away; I have some cool ideas for the future. Of course, I can’t guarantee what or when will be in there (until a product ships, no one can know what a product will contain despite reassurance from developers).

Where has time gone?

Aiden.pngLast Saturday, we celebrated our son’s first birthday. It seems like just yesterday that we brought Aiden home from the hospital. We have learned so much over the last year, have had many sleep deprived nights, but most of all, we love being parents and seeing Aiden smile and be happy (most of the time).

Congratulations to my competitor!

I’d like to congratulate my competitor, NeatReceipts, for finally shipping a Mac version! I know that this has been a long time coming. Way back before I started ReceiptWallet, I contacted them about a Mac version. They said it was coming next year. That was more than 1.5 years ago. ReceiptWallet was first released in November 2006 and that has given me lots of time to make a product that I use everyday and have thousands of customers that also use the product.

One of the things I find interesting about their Mac product is they keep stating what it doesn’t do more than what it does do. They also promise features for the version that will be out early 2009. Well, what about the people that want a product now? I’ve decided to offer those users that want ReceiptWallet a competitive upgrade. Information about this offer can be found over at the ReceiptWallet site.

While the NeatReceipts Mac scanner won’t work directly with ReceiptWallet (they chose to use Apple’s Image Capture Architecture), users can scan into Image Capture and then import the scans into ReceiptWallet. I’m looking at supporting ICA, but there are far too many issues with it to make it usable. I am working with an engineer at a major scanner vendor in an effort to help Apple fix the issues with ICA and make it usable. I have ICA support in ReceiptWallet, but it is disabled. I’m not a huge fan of the TWAIN drivers most vendors ship with their scanners, but those drivers work better than ICA at this point in time.

Anyway, I’m hoping that competition in the receipt management space brings me more publicity. I know that I’m the small fry in this space, but my heart is completely into ReceiptWallet. I listen to every piece of feedback that comes in and try very hard to get new features added as quickly as possible and to address any issues that arise. I’m currently releasing new versions at least once a month (sometimes more often) so that I can quickly address issues and provide the most stable product as possible. As a small developer, I have that luxury and users don’t have to sit around waiting 6 months to a year for a bug to get fixed.

If you don’t have anything nice to say about someone, don’t say it

Everyone has heard that if you don’t have anything nice to say about someone, don’t say it. Well, I guess politicians haven’t heard this saying. In your local city council race, a former local news personality is going up against an unknown CPA. The new personality (Marti Emerald) has sent campaign mailers touting what she has done and what she will do. Her opponent (there are a few other candidates, but these are the top 2), April Boling has only sent us campaign flyers that sling mud at her opponent. What kind of campaigning is that? We know nothing about her and she just wants to say what Marti Emerald isn’t. If the signs around the neighborhood are indicative of the outcome of the race, Marti will win by a landslide.

Good API ideas gone bad

Back when I started writing ReceiptWallet, I wanted to add scanner support and the easiest way looked like I could use Apple’s Image Capture (ICA) framework. This worked quite well for the first scanner I tried, but the second one only scanned in black and white or had some other problem. So, I gave up on that, learned enough TWAIN to get ReceiptWallet working with most scanners that had TWAIN drivers. I was quite content for 1.5 years (except for the crappy scanner drivers and crash reports I regularly received). Last week I was contacted by a developer who asked me if I was going to support ICA because some newer scanner drivers were going to be written around ICA. I already had ICA code in ReceiptWallet (I actually tried again right before ReceiptWallet 2.0 was released), so I took a look at it. Well, there is either a problem with my scanner or ICA in Leopard (10.5.2) as I can only scan in black and white. Furthermore, there is a really simple function, ICAImportImage, that should reduce the amount of work I have to do and presents a standard user interface.

There are a few major problems with this interface. The whole area near Scan To Folder is unnecessary if it is called from within an application. I don’t want the user to specify where it goes, the format or automatic task. The second major issue is if I change Scan Mode to Flatbed (even though I have a sheet feed scanner), parts of the UI dim and I have to quit the app (same thing happens in Apple’s Image Capture application).

So while this is great in theory (I’ve seen one app use this and apparently not care about the issues), it is a poor user experience in any app other than Image Capture. I’ll write up a bug for Apple on this, but who knows when it will get fixed. As for my other issues with ICA, I opened an Apple DTS incident and some of my issues were confirmed as bugs. Wow, that makes it almost impossible to use ICA as I found several bugs in just a simple use of the API.

Will Apple fix ICA? Hopefully. When? I don’t have any clue. My hope is that it is sooner rather than later.

Threading rears its ugly head, again

It seems to be a recurring topic here on my blog, threading. I was asked to look at a problem for a client yesterday and discovered a very subtle threading issuing (I actually didn’t create it, one of the other people on the project created the problem when he added some code). Basically in order to show progress while the app is doing stuff, some code is executed on a separate thread. However, the main thread basically spins in a loop using something like:

while (threadRunning)
{
	NSDate *newDate = [[NSDate alloc] initWithTimeIntervalSinceNow:0.05];
	[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:newDate];
	[newDate release];
}

The application uses CoreData for managing data and the second thread accesses the CoreData store. You would think that the above code blocks the main thread from doing anything while the second thread is running, but like my issue with NSTask, the main thread is actually doing something. In this case, the UI is bound using Cocoa bindings to the managed object context and the secondary thread was also using the same managed object context. As explained in Apple’s docs on Core Data multi-threading, you could get a deadlock when 2 threads are accessing the same managed object context at the same time. Bindings hid the fact that they were talking to the managed object context. I should have realized this, but I didn’t.

Will I ever learn about how to get threading right?

Are software bundle deals just marketing hype?

I’ve commented on the past about MacHeist bundles and eventually decided that the bundles are not a bad thing with the exception of potentially decreasing the value of individual pieces of software. Last week, MacUpdate Promo started a new bundle deal with some interesting apps and Parallels being offered up if certain sales goals are reached. That’s fine. Even though I have Parallels and Hazel, I bit as some of the other pieces looked interested and I like collecting software (odd hobby, I know). Typinator and MenuCalendarClock are already in use daily.

300x250.png
So now I come to my point on this entry. The MUPromo site indicates that X units have to be purchased to “unlock” Parallels. However, over on several other websites, they’re running the ad that appears to the right. If you saw that ad, you would expect to get Parallels and 9 other apps as indicated. So, unless MacUpdate wants to be accused of false advertising, Parallels and the other 9 apps listed on their site will be included. Why the whole charade over unlocking based on sales numbers? Just hand over the applications and be done with it. So, in actuality, I should have all 10 applications today as indicated in the ad, but I have to wait until MUPromo decides that it is going to “unlock” all the apps.

(No one has asked me to be part of a bundle for ReceiptWallet and after this post, I’m not sure anyone will :-)).

Hacked Serial Numbers

In the past, I’ve written about software piracy, registration codes and catching users with pirated serial numbers. As part of the latest update to ReceiptWallet, I added some additional checks for invalid registration codes (read, pirated or hacked). One of the simplest ways to deal with this would be to have ReceiptWallet check in with my server to validate the code, but I don’t like that idea. What happens if my server goes down or my company goes away? Users can no longer use the software, so I avoid that method. This morning, after I released a new version of ReceiptWallet, one of the first messages I received was a user saying that there was an error with his serial number. This meant one of two things; the user was given a refund and is no longer eligible to use the software or he used a hacked serial number. After a little probing, he admitted that he didn’t remember purchasing the software and wanted to know how to buy it. I didn’t outright accuse him of using a hacked serial number, but I suspect he figured it out pretty quickly.

As with most serial number schemes, there is going to be no way to stop those that are serious about pirating. I have no plans on spending a ton of time on thwarting pirates, but an enhancement here and there doesn’t hurt.

I wonder how many other email messages I’ll get about invalid serial numbers.

Librarians of the future (or is it now current?)

Sometime between 1995 and 1998 (I can’t remember when), I went with my parents to a public meeting about a new main library. At that time, I thought it was a waste to have a huge main library as a majority of the city lives nowhere near downtown. While there are now more people living in downtown, the focus, in my opinion, should be to improve the branch libraries that will benefit many more people. All these years later, I still believe the same thing; spending millions of dollars on something that most people won’t use is a waste. How about increasing the hours that the branch libraries are open instead of a main library? Oh and the new main library still isn’t built; projected completion is 2011.

In any case, that’s not what this entry is about. Way back then, I told my parents that I thought the librarians of the future would be professional web surfers. While anyone can search for information, a professional is needed to:

  • Use appropriate keywords to quickly find relevant information.
  • Ascertain which results are from reputable sources (someone’s post on a forum is unlikely to be considered as an appropriate source for facts).
  • Distill the potentially large number of search results into a usable form.

In some cases traditional librarians are still needed, such as the case for children’s librarians, but research librarians seem like they should deal with completely electronics resources as that is the most efficient way to find information (if you know where to look).

Knowledgebase Overload

In my effort to have my ReceiptWallet users get faster answers to questions, I have developed an extensive knowledge base of articles. While I’ve done my best to write easy to understand articles, the hardest part is getting people to find the articles. I know my knowledge base, so I know what keywords to enter to get results. Yesterday my mom had a problem with printing a receipt from Amazon to ReceiptWallet, so I pointed my dad to “droplet” and then directly to the article about droplets. My dad read the article and easily fixed the problem. Would my parents (or other users) been able to find the article? That depends on what keywords they entered in the search. I’ve been searching for answers for years on the Internet (I still haven’t found what I’m looking for probably because I’m not sure what I’m looking for :-)), so I have a good idea on what words to use in searching.

Is there a better way to help people search in knowledge bases? I’m not sure the knowledge base software makes a difference. I have about 60 articles in my database covering a wide range of topics. They are categorized, but finding an answer could take time and many people don’t want to spend the time to search for an answer; I can’t blame them.

Any ideas on how to improve self help resources for ReceiptWallet?