In a previous entry, I commented about that lack of polish in Parallels. I’m pleased to report that in the latest release candidate, they have fixed the 2 items I pointed out. The release also appears to run much faster. My only outstanding issue is that it has an issue with my Garmin ForeRunner 305 over USB. I’d like to be able to use Parallels to update the 305 when firmware updates are released as well as use it for the Garmin Training Center (to backup my data) until Garmin releases the Mac version. Hopefully this issue will get fixed; the Parallels team has done an amazing job at fixing issues and I applaud them for an excellent product.
Is it hard to polish software?
I’ve been using Parallels for a few weeks now running Windows XP and am amazed at how well it works. In the latest release candidate, they’ve cleaned up a bunch of things, but stil seem to be missing some very obvious user interface issues, most likely caused by the cross platform libraries they’re using or something like that. If you look at the screenshot below you can see that the popup button definitely doesn’t look right.
Is it so hard to fix this? I hope that it’s cleaned up for the final release. Furthermore, the popup isn’t a true popup button. Popups in OS X show the menu in line with the button. The image below clearly shows that this isn’t a true popup button.
I think that the engineers working on Parallels are stellar at doing the low level stuff, but it looks like they need a bit of help with the user interface. (I’m available for contract work, if they need help :-)).
Sync Services can make a mess and here’s a way to clean it (maybe)
I think that Apple’s Sync Services is an excellent technology and has a lot of potential. It is not quite mature, but I have high hopes for it in the future. One of the problems that has been brought up on the Sync Services developer mailing list is that there is no good way for an end user to remove data from Sync Services and unregister it if they remove a program. All developers are in the same boat and Bare Bones, developers of the popular Yojimbo that I’ve blogged about have written a FAQ about it for their product. Unfortunately this really isn’t a solution, especially for people that want to keep clean systems.
This morning, I decided to attempt to write up a solution to this issue. While my attempt doesn’t solve everything (it only unregisters items from Sync Services and doesn’t actually remove the data from Sync Services or .Mac), I’ve decided to put it out there and include the source code. The app has been lightly tested and may cause issues on your system, so only use it if you know what you’re doing. By downloading this, you take full responsibility for using it and if it nukes your data, I’m sorry, but there is nothing I can do. Having said that, make sure you have a backup first and good luck. This app uses undocumented Apple calls and is likely to break sometime in the future.
You can download my creation here. It’s quite small, so don’t be surprised if it downloads almost instantly.
The application and source code are free to use and modify. While I’d appreciate some feedback on if it helps, there is no requirement to do so.
Yojimbo, funny name, cool app
I just started using Yojimbo from Bare Bones Software to store random stuff as I’m working on dropping all non-Intel native software. One of the features that it has over some of its competition are ability to encrypt items and/or passwords (allowing me to drop the other password storing app I was using that isn’t Intel native) and it is extremely fast. They appear to be using SQLLite which is built into the OS; the app I was using before seemed a lot slower and had to load an extra database application at startup. This allows me to trim down the software that I’m running. Yojimbo’s support of inline PDF and other files is excellent. I played around a little with syncing to another machine and that worked flawlessly as well.If you don’t already use an application for storing random stuff (passwords, commands you can’t remember, tips, etc.) or even if you do, definitely take a look at Yojimbo.
Stupid me, I upgraded the kernel
I try to tell myself, if it isn’t broken, don’t fix it. Unfortunately I don’t always listen. Periodically I update my Linux server to get the latest updates. Unfortunately lately I’ve been bitten by bugs in the kernel when I upgrade. The problem arises from the fact that I’m running software RAID-1 and those that work on the kernel don’t seem to use it and therefore put out updates that break using RAID. I think it is great that people spend their own time putting out updates, but it is a little frustrating to keep having the kernel break. This is the 3rd kernel update I’ve done that has broken. It doesn’t appear that I’m the only one with this issue as evidenced by some posts I’ve read. I’d really like to get the security fixes in the kernel, but I need to think harder the next time a kernel comes out before updating. (Wasted 2 hours on this, good thing I had nothing else to do.)
Virtualization Software
As much as I’d like to use Mac OS X for everything, there are just some things that are not (yet) available on the Mac. This includes firmware updates for my Garmin Forerunner 305, mapping software for my iQue 3600, etc. In addition, certain websites just don’t work on my browsers. With the switch to Intel, it was only a matter of time before companies started developing virtualization software for the Mac; this is different than emulation as the instruction set isn’t emulated and goes right to the processor resulting in excellent performance. Recently Apple announced Boot Camp with isn’t virtualization software, but allows an Intel based Mac to dual boot into Windows. This isn’t very interesting to me as I only need to pop into Windows once in awhile and if I have to reboot, might as well just boot my Windows machine that I control via Windows Remote Desktop. Right after Apple announced Boot Camp, a product called
Parallels was released. I installed the trial on the Intel iMac I have on my desk, installed Fedora Core 5 and was amazed at the performance. I then installed Windows XP, but since I have an OEM version for my Dell, I can’t activate it on another CPU and fully test it. However, they’re offering a pre-order price of $39.99 vs. $49.99, so I couldn’t pass this up. Even at $49.99, it is a bargain. However, now I need to find an inexpensive copy of the full Windows XP so that I don’t have to use my Windows machine. (Right now Parallels doesn’t handle USB devices attached to the Mac, but if the speed at which they’re putting out betas is any indication, I think that by the time I get my MacBook Pro, that will be worked out.)
While I don’t want to run Windows, at least this software will allow me to run it easily without having to start my Windows machine (which also means that I’ll be able to use it when I’m away from home).
Apple’s Transition to Intel Revisited
I wrote awhile back on how moving an application from PowerPC to Intel isn’t as easy as Steve Jobs has indicated. This topic has come up again and I’m a bit offended by what one author has said in a recent article where the author basically says that developers that have been using Xcode and have programmed in Cocoa have a relatively easy transition moving code. This may be true for simple applications, but doesn’t reflect the reality of many applications out there. In one of the programs I’ve been working on for the last few years, we developed it using Xcode and used Cocoa throughout (OK, one slight component still has to be in Codewarrior as it needs to be CFM). One engineer spent several months making things work on Intel; the main reason is that the application talks to an external device over USB. Any application that talks to an external device is far more complicated than outsiders think. In addition, we have taken, what I consider an extraordinary step, in supporting third party plugins that weren’t designed for Intel. Apple says that users should run applications that require third party plugins in Rosetta by forcing it in the Finder. I find that this is unacceptable to have to run a universal application under Rosetta just so that plugins can run as I want the speed of the universal application. So, additional work was required to get this to work seamlessly (I’m still amazed at how well this works) which most applications don’t have to handle. (In this particular case, it is unlikely that most of the third party plugins we support will be made universal any time soon, so waiting for them to become universal is unrealistic.)
I got my first universal application running in about 5 minutes as the application has no external dependencies (no third party plugins or devices). A lot of applications fall into this category, but end users can’t just say that developers don’t care or aren’t doing enough to move applications to Intel as users don’t know the circumstances around application development. Even if a developer has followed Apple’s lead to switch to Xcode and Cocoa, it doesn’t mean they can put a universal application together in a few hours. As I’ll be ordering a MacBook Pro in a few weeks, I’d love to see all my applications running as universal applications, but the reality is that the smaller applications and many shareware titles will be coming much sooner than the big titles such as Microsoft Word.
Nice work, RapidWeaver
Over the past 24 hours, I’ve been bombarded by bounced email that appears to have originated from my server. Turns out, there is a security flaw in the php script that RapidWeaver uses for its contact page so people have been exploiting it to send spam. Reading the message boards for the software shows that the authors knew about this about 1.5 weeks ago. It would have been nice for them to inform their users to turn this feature off until they can patch it. Even after they patch it, I’ll find another way to handle the contact page so I don’t have to deal with this again.
Fun with Pointers (not the dogs)
One of the aspects of programming that took me a long time to understand was (memory) pointers. I grew up with BASIC, learned Pascal and C where I always used fixed length structures or types and never cared about memory allocation as it was way too confusing to me. In college, I majored in engineering and only took 1 computer science class, so most of my programming knowledge is self-taught, on the job training. It wasn’t until a few years out of college that how pointers worked really clicked. These days, with high level frameworks and languages such as Objective-C and Cocoa, I don’t use pointers all that often (I still have to deal with allocation and de-allocation of memory), but when I need to use them, they’re a piece of cake to use. I find that I only use them when shipping data across a wire, i.e. to/from a handheld device. Knowing how to use pointers, walk pointers, etc. makes complicated code very easy. I think that understanding how pointers work is essential to being able to write applications that aren’t self-contained, i.e. only run on a desktop machine. I wish I had learned about them earlier as I’m sure it would have made my life easier.
Sample code is great (when it works)
I think that it’s great that companies like Apple put out sample code to help developers write code without having to resort to figuring it out themselves or doing something in a way that will break. Several years ago I wanted to add my application (NotifyMail) to the login items/startup items for a user under OS X when OS X was new. There was no documented way to do this, but a DTS engineer at Apple posted on a mailing list that if people wanted code, to send him email. So I sent him email and have been using the code ever since in a bunch of projects. It had a major limitation in that if System Preferences was open and you used the code to modify login items, the user wouldn’t see the change which could be confusing. I had added an awkwardly worded alert indicating this and no one complained.
As I was changing some setup stuff on one of my machines, I added an item to the login items by using the contextual menu item in the dock. I then opened up system preferences and began adding and removing it via the menu again. To my surprise (and delight) system preferences immediately indicated the change. After a bit of searching, I found some sample code called LoginItemsAE which was first created last October. I download the code, added it to my project and attempted to compile. Hmmm…it relied on stuff in Mac OS X 10.4, but I was targeting 10.3 (and 10.4.), so it didn’t compile. I double checked the sample code and it says it goes back to 10.2. After a lot of research, it turns out that in order to get the code to compile, even if targeting 10.3, I had to set the SDK to the 10.4 SDK. I didn’t want to do this as I have 50+ targets in one project that all use one configuration file that sets the SDK to 10.3.9; this kind of change could be bad as it would allow me to use functions only found in newer OS versions and then crash on older systems. So if I’m not careful, I’ll get a crash. By setting the SDK, if it doesn’t compile, it won’t run on the older OS version which makes life easier. It would be nice if there was a way to warn you about which functions aren’t available on newer OS versions.
To make a long story a little shorter, I had to whip up some stub code to get it to compile which was a whole lot more work than I had expected.