GrandCentral Dialer

I’ve been using GrandCentral for awhile now and think I have finally managed to get people to start calling that number. The flexibility is great; I can pick the phone I want to use and if I travel, I can set calls to goto my cell phone. If I’m around, calls goto my VOIP line. One of the interesting features they added to GrandCentral was the ability to call a Gizmo Project number as a calling number. Combine this with click to call on GrandCentral’s web site and I basically can get rid of a phone line. I currently have a BroadVoice VOIP line which costs me about $12 per month.

So the other day I was thinking, could I get rid of the BroadVoice number? After some searching, I found that Gizmo Project is a standard SIP provider and if you can configure the phone to connect to a SIP account, you can get it to work. OK, easy part done. Phone rings when my GrandCentral number is called. Next the harder part. I wanted to be able to dial any number via GrandCentral so a) it doesn’t cost me any money and b) the caller ID is from my GrandCentral number. A few web searches later, I found a perl script to do what I wanted. The UI, of course, is non-existent, so I put my Cocoa skills to the test. I started my little app yesterday and completed it this evening. I now have a little menu bar item that lets me select my “originating number” (usually my Gizmo Project number) and lets me dial any number. To top things off, I added a little AppleScript support so that I can dial from the OS X Address Book.

Very cool. It could stand to use a little more polish, but I’m pretty pleased with it. Now I have to contact GrandCentral/Google and see if I can use their logo as the menubar icon. I’m sure that will go over real well.

I still need to decide if I’m going to sell this or give it away. Hmmm. I think it hinges on what GrandCentral says. Can’t sell something if they get pissed at me.

Less complaining, more fixing

I, like many modern Mac developers, use Sparkle for auto-updating ReceiptWallet. This is an amazing framework that keeps getting enhanced. Many developers just shove it in and forget it. When there is an issue, they just complain about crappy code (I know I do that a lot). Today in updating ReceiptWallet, I found that my update crashed. I am using the absolute latest and greatest Sparkle code, so it always has risks. I dove into the code, found the bugs and suggested fixes. Andy Matuschak, the Sparkle guy, must not sleep (well, he is a college student), as he fixed the bugs within hours after I reported them (someone actually reported one before I did, but I identified the exact causes) and then when I was looking at the fixes, I noticed that Andy made a mistake (probably easy to do with a lack of sleep) and reported it again. Andy quickly fixed it and all is well. I really love Sparkle and it is the only way to get people to keep up-to-date on my software.

I’d suggest that other developers try the latest code and report bugs. This is the only way to improve the framework.

Anyway, thanks Andy for a great framework and keep up the good work!

Supporting ancient OS versions?

I had a user today purchase ReceiptWallet and then complain that it doesn’t work on Mac OS X 10.2.8! First off, people should download the demo prior to purchasing as I have a big “agree to this” section when purchasing that tells people to try before they buy and says we don’t offer refunds. (I did give this guy a refund as I don’t want to fight chargebacks because people can’t read.) Second off, 10.2.8 came out in October 2003! This guy said that he stays 2 OS versions back (apparently major versions). How can anyone expect developers to support such old OS versions? Apple stopped providing security updates to 10.2.8 a long time ago!

Based on usage statistics I started gathering a few months back (anonymously, of course, which requires me to make some assumptions), Leopard (10.5) users outnumber Tiger users (10.4) 4 to 1. Since ReceiptWallet uses CoreData, it requires 10.4 as CoreData was introduced in 10.4. Based on these statistics, going forward, I have to really decide if I will continue with 10.4 support. For now, I’ll keep supporting it, but some features will require 10.5 (or even 10.5.3) and higher.

OS X Server is still a piece of crap

I’ve written about OS X Server in the past and somehow I keep getting roped into dealing with these machines. The concept of OS X Server is great; a small business server that anyone can setup. The implementation, however, is quite lacking. Apple took open source software, like Apache, BIND, Open Directory and Jabberd and slapped a GUI on it for configuring. In doing so, they either glossed over or forgot to implement many of the settings available in these products. My latest run ins with OS X Server have to do with Jabberd, Open Directory and Apache.

Let’s start with Apache. First off, I needed Server Side Includes to be turned on. I didn’t see a switch to do this, so I hacked on the actual config files. Second, I had to allow .htaccess files to override some of the default settings. Some may see this as a security risk, but this server is dedicated to one task, so again I had to hack on the config files. If the GUI is touched, my changes go away.

Next, Jabberd. The issue here seems to be that Jabberd is buggy and the version of Jabberd included with Leopard server isn’t up-to-date. There is no easy way to replace it with a newer version short of waiting for Apple. If I wanted to install everything by hand, I would have used Linux in the first place and not OS X Server. Apple either needs to respond faster with updates or provide ways to more easily replace major components. In this case, an OS X Server consultant came to me with an issue where he was trying to use a wildcard certificate for the iChat server (Jabberd) and couldn’t get it to work. Server Admin said everything was fine, but when I dove into the logs, I saw that there was an issue where Jabberd didn’t like the chained SSL Certificate (which is pretty standard, in my opinion).

Lastly, Open Directory. This one is actually a huge security issue. While setting up an iCal server, I needed to secure it before it went into production. I managed to use LDAP Browser/Editor to anonymously bind to the server despite checking all the boxes to prevent anonymous binding. After talking with a friend at Apple who get an answer from someone in the know, this is a known issue. If you secure Open Directory properly, it breaks other things. In my case, it doesn’t matter because our use of Open Directory will be limited. So, I have to hack on Open Directory to change a string somewhere. Furthermore, the root password’s SHA1 hash can be browsed by anyone! Why is this bad? Well, if you use a bad root password, someone doesn’t have to keep running a script trying to get into your server (which you could block); a hacker just needs to copy the SHA1 hash and then run a tool that generates SHA1 hashes from common words and presto! (I found a few tools doing a quick search.) You might argue that this isn’t bad because you could run an attack and try lots of passwords, however, smarter servers/firewalls will block users after a certain number of tries and then possibly increase the time allowed between tries thereby making a brute force attempt much more time consuming than doing it “offline”.

People could argue that the Open Directory issue is there for anyone using OpenLDAP (which Open Directory is), but Apple conceals so much from the user, that it is Apple’s responsibility to secure these machines as a large majority of people using them don’t have a clue about security. I work with one good IT person and he wasn’t aware of the open services on his server; he just turned stuff on to get it to work. I had to help him lock everything down with the firewall.

One thing I really like about OS X Server is that you can use SuperDuper! to back it up and restore it. Other than that, OS X Server should be treated like Linux and ignore the GUI admin tools.

Memory leaks, oh my!

Even though I’ve been using Xcode for something like 5 years, I learn something new about it and its related tools all the time. This week I started playing with Instruments and the Leaks tool in particular. I was horrified at the number of memory leaks I found in ReceiptWallet. While they weren’t large, I’m ashamed that I had any (there were maybe a dozen or so). It also showed me that some of the system libraries I’m using (in particular TWAIN and Image Capture) also seem to have memory leaks. I feel much better that I squashed the leaks. They probably won’t affect users, but having memory leaks is just bad.

Unified ToDo List

I’ve struggled with managing my todo lists and have bounced back and forth among many different applications and even paper notebooks! Recently I decided to give 37signals‘s Backpack as there are a few Mac clients and the web interface is excellent. I’m quite impressed with it and their free account seems to meet my needs at the moment. Browsing it on the iPhone works quite well and now I have my todo lists wherever I go (as long as I have data coverage). Others probably have the same issue organizing todo lists; I hope that this current solution will work for awhile.

WWDC – Day 2

Well, there isn’t a whole lot I can say. I respect the NDA I signed and therefore can’t reveal the contents of any sessions. However, I can say that I almost fell asleep in a number of sessions; some of the presenters assume zero knowledge from the attendees. While that may be the case for a number of the developers, I’ve been doing this for awhile.

I did run into someone that I knew from college; Dean Dauger has been a Mac developer for ages. I remember in college he had a prototype Quadra 840 AV. I thought it was so cool that he had prototype Mac hardware.

I’m still quite excited about iPhone; I just need some good ideas for some apps. Some of my posts in about a month may reveal more information and some of my concerns about the iPhone, but for now, I have to keep quiet.

Oh, I’ve been reading more and more about the pricing and it looks like the minimum AT&T plan for the iPhone 3G is $70 per month. That is a bit steep compared to the awesome plan I have; however, I got my plan at the start of the smartphone era before carriers really knew what was going on. This, of course, keeps me with Sprint as no one can match it.

WWDC Keynote – My take

Lots of web sites have their opinions on the WWDC keynote (pretty much all I can talk about all week), so my comments will be brief.

I really, really wanted a new MacBook Pro; my machine is now 2 years old running a Core Duo processor and not the newer Core 2 Duo. My machine is quite sluggish and as soon as Apple announces new MacBook Pros, I’m ordering one. Likely by then, I’ll be able to get a 320 GB 7200 RPM drive which will be great, but the machine won’t be available soon enough.

The 3G iPhone was a given, so that wasn’t a surprise. The GPS wasn’t a surprise either, nor the enterprise features. What was a pleasant surprise was the $199 price. This pretty much means that the number of iPhones is going to sky rocket and the market will be huge. I’m hoping that this will translate into more work for me with companies wanting me to build iPhone applications.

The rest of the keynote really wasn’t all that catchy. I was hoping for the “one more thing”, but we didn’t get that.

One thing that the person next to me commented on is that Steve looked a little thin and that Phil Schiller may have gained the weight that Steve lost. Could that have affected the pizzaz of the keynote? Was Steve not feeling well? Or did Steve not want to upstage the 3G iPhone? It’s quite probably that this conference will be basically an iPhone conference. Another thing that surprised me is that Apple will basically have a 2 month lack of iPhone inventory. I guess this will cause people that bought not to be pissed off by getting an older model, but 2 months of sales is a lot to sacrifice.

I’ve noticed that there are a ton of people that haven’t done Mac or iPhone development judging by the list of sessions. With my 6 years of Cocoa experience, I hope that this gives me a leg up on doing iPhone development. We shall see; I’m sure that there are a number of talented developers that will create excellent applications (I’ve been amazed at some of the demos I’ve seen).

Today has been a long day and I’m quite excited about the iPhone; I keep running into people I’ve known for years and have enjoyed talking to them about what the iPhone means and where it is going. I’m not sure what the rest of the conference will hold, but it better slow down or I’m going to collapse before the end of the week!

Hacking ICA – NEAT Receipts scanner working with ReceiptWallet

After a lot of work today, I managed to get the NEAT Receipts scanner to work with ReceiptWallet. It wasn’t easy as there are issues with ICA and the driver that NEAT Receipts ships is quite buggy (if I tell it to scan the entire width, it fails; I have to divide by 3 to get it to work). I suspect that they just got the scanner working with their software and called it a day. Some comments in their forums seem to back this up as the scanner works quite poorly in Image Capture. I’m only going to be supporting 10.5.3 (which was just released) and higher for using Image Capture and this scanner. A large number of ReceiptWallet users are using Leopard, so this isn’t a huge problem.

I’ll be posting a beta probably tomorrow with preliminary support for the scanner. I’m sure I’ll have to keep tweaking the support when they fix/change their drivers. If you don’t have a scanner, I wouldn’t recommend their scanner as the drivers still need work; I’d recommend the Pentax DS Mobile 600 or the ScanSnap S300M. If you already have the scanner, now you can use it with a stable, mature product.

Ouch

I read the following in a forum about a new product:

Calling something “advance release” instead of “beta” isn’t the greatest way of garnering a loyal customer base. Especially in light of an absence of tech support…

Wow, almost seems like this company tried to rush something to market just to appease users.