A good IDE

is worth its weight in gold…

Now, this should be obvious, but it isn’t until the day you are forced to use a crappy IDE. When it comes to software development, I’m from the old school. Not the old, old school of punch cards and dip switches, but the newer old school with command line building and debugging through printfs. I’ve realized that I have become soft in my advancing years.

I’ve spent most of the last 11 years of my career doing my development in Visual Studio (and its earlier versions). Now, I’m fairly platform agnostic as a rule. During that time, I’ve also written software for Linux in Java and the Macintosh as well. Eclipse and VisualAge were decent enough IDEs that I didn’t feel hampered. However, the leading IDE on the mac until recently was CodeWarrior. CodeWarrior has an long history. It’s been around for a long time and you would think that as development environments go, it should be one of the best considering it became the main development tool for Mac OS development. I have no idea why though. It sucks. I mean, it really sucks. At first I thought it was just the shock of the new. I was just having to adjust to a new environment, but no, I’ve been using it for 18 months now and I still hate it.

Luckily (or unluckily) Apple is basically forcing all those who want to write software for OS X to switch to XCode. I’ve only just started using it, so my observations are premature. In general, it seems quite good and well designed. It does have some significant quirks and weirdness though. Apple seems really interested in making it better, so here is hoping…

A classic example of crummy software testing

Microsoft unleashes a poorly tested version of windows media player on the macintosh audience

I have to put in a little disclaimer here. I worked on the Windows Media Team for (PC) version 7.

That said, tonight I tried to install the newest version for the macintosh, version 9 onto one of my macs. I installed it through a non-admin account (I didn’t want it in my account), it seemed to install ok, except that it didn’t give me an option of where to put it and it demanded the admin password. When I try to run it from this account, I get a “you do not have privileges to run this application” error. I switch to my admin. All the ownership and execute attributes on the application are fine. I can run it from my admin account just fine (remember that I didn’t even want to be accessible from any other account), but in this lower permission account I can’t run it. Even though that is the account I installed it from.

Now this is, of course, a bug. A bug I have caused myself in the recent past. It is also a very easy bug to fix and a very easy bug to find if you are testing your product. It is testing 101 and one of the first things a good tester will catch. An important note is that the WMP for mac wasn’t developed in the Mac BU during my time in Windows Media, it was part of the Windows Media Team. This might explain why the quality might not be up to the Mac Office standards. MSN suffers from this problem too, I’ve heard.

Bugs get through, it happens. There is no excuse for something this obvious to get through the cracks though. Especially in a politically sensitive area for Microsoft like this. Microsoft needs to improve their quality on non-windows platform for their media player if they expect it to be any sort of real web standards. Until their quality gets better, I’m going to bug the websites I view to embrace a real cross platform video format like Flash, or Quicktime.

sometimes Carbon makes me cry

the woes of cross-platform C++ development

Carbon is Apple’s APIs that were created for developers who had been writing for OS versions before OS X. Apple really wants developers writing in Cocoa (just as Microsoft wants to developers to write in .Net), and they couldn’t make it more clear to those of us who are using Carbon. While being fairly feature-rich, it is overly complicated and poorly documented. Every company I have ever done professional software development with (which includes several of the top companies in the world) does development in C++. Cocoa doesn’t work with C++. It uses ObjectiveC, which means (like .Net) that you can’t easily write portable code for Cocoa. Apple is going out of their way to make it hard to port apps to their platform and should wake up and support C++ for Cocoa.

ACLs

want to know why Windows is so easily hacked?

As technologies progress and our devices are ever more networked with each other, security in operating systems has become increasingly complex. This complexity makes the systems themselves less secure because it is harder for developers to understand it. So the OS vendors add complexity to deal with the fact that applications are doing security wrong which creates a vicious cycle.

Are you a windows developer? Do you understand ACLs? Maybe you do, but most likely you only think that you do. Why? Because they are somewhat complicated. “What, I can explicitly grant permissions for my network printer to access this file?” Microsoft doesn’t make it easier. The documentation in MSDN is near useless. The web isn’t your friend here either since a lot of the websites I’ve found when looking for more info were just wrong.

I was working on a nasty file-permissions problem in a project that I was working on which necessitated a move from old-style file permissions code to ACLs. Now, I’ve been developing professionally on Windows for over 10 years, and I thought that I understood ACLs. Nope, I just thought I did. I spent days studying the web and writing test programs to figure out how to give the appropriate permissions to a single file. Luckily, I had an awesome tester who could break my stuff in ever more increasingly complicated ways, otherwise I probably would have shipped something that either didn’t always worked or was just a crazy security hole.

I realized that if it was that hard for me, what about all those less experienced or rushed developers currently shipping applications for Windows? The majority of developers inside of Microsoft probably don’t understand ACLs as well as they should. Is there any wonder why there are so many security issues in Windows?

The answer isn’t further complexity, but better documentation and education. This is critical stuff for Microsoft and 3rd party developers. It is time that Microsoft treated it that way.

I haven’t reviewed the ACL implementation in OS X 10.4 yet, but I shuddered when I heard that it was being added.

The difficulties of cross platform development in a Microsoft world

Cross platform development was never simple, but it could be simpler if Microsoft decided to support some standards occasionally

Now, I’ve been responsible for at least some of the Microsoft APIs inflicted upon developers, so I take some responsibility here. I don’t expect that Microsoft should have X Windows or Display Postscript or anything. I do expect that if I use standard C functions and the STL that they will at least work somewhat the same across platforms. That is too much to hope for when working in the wild world of internationalization it seems. Microsoft uses MBCS encoding for multi-byte encoding of char *s. This is a Microsoft-only thing that is the result of some dev way back when and is still foisted upon the world even though there is a much better standard called UTF-8. While I understand that Microsoft needs backwards compatibility for legacy applications, since they have already have a second set of APIs for Unicode, how hard would it be for them to support UTF-8? Actually, somewhat difficult, since Microsoft uses a different directory separator from the rest of the world that also doubles as an escape character for certain Japanese characters. If you have Japanese support on your XP machine, you’ll know what I mean already. However, this lack of UTF-8 support not only makes it difficult to port apps to Windows, it also makes it difficult to develop applications for multiple platforms. Microsoft already is forced to support UTF-8 for the web, XML and documents. It is about time that it works in C and the STL just like on all the competing operating systems.

Huh?

What is with this new category?

I haven’t written on software engineering here for various reasons. Probably because it is difficult to do this without directly referencing stuff that I’m working on. My employer might consider this a bad thing. It is my profession, however. At least at the moment, I’ve been bugged by certain things that are of a more general nature and I think that adding another voice to the mix might be of use to someone out there. So stay tuned…