Wednesday, August 29, 2007

The SuProgrammer

Once you work at a company for a while there are responsibilities you can never shake. For some reason you just keep getting new tasks. This is where the SuProgrammer comes in. This would be akin to each programmer having an intern at their disposal, but responsible for specific tasks:

Debuggier - This is the SuProgrammer responsible for narrowing down each bug and getting it to that one line that takes hours to get to. Often times this involves stepping through loops dozens of times. Once the appropriate line is found and the problem narrowed down the Programmer would come in to solve the entire problem.

Mergenair - This is an expert in merging. No longer does the Programmer have to worry about multiple merges, branches, or merge conflicts. The Mergenair would handle all merging responsibilities with a sense of style.

Checkinair - The Checkinair handles comitting all files into the version control system taking special care to not break the build and cause any problems. The Checkinair would monitor that the fix actually solves the problem and notify if there was a problem.

Meetinair - Is an expert meeting attendee attending all meetings the Programmer doesn't want to attend.

Once a SuProgrammer studies under a programmer learning the trade they could use that and become popular enough, if their Programmer is popular, to get SuProgrammers of their own.

Okay, at some point soon I'll get serious again.

Tuesday, August 28, 2007

COM is Hard

I get a lot of COM questions. I mean a LOT of COM questions. I eventually answer most of them, but some are easy and some are more difficult. That's one reason I started this blog, to centralize as much knowledge as possible. Once I put post about it I don't have to remember it, it's somewhere on my blog. I haven't had time to post half the things I want to. Eventually I'll get to it all.

COM usually overwhelms people. When someone asks me a questions and I say "oh, that's easy" they respond with "well you know COM". So it got me thinking, why is COM hard? Or I guess a better question is why do people think COM is hard? COM is just a bunch of simple concepts all piled on top of one another. I think most people add ActiveX, MTS, COM+ and whatever other new technology Microsoft added to "COM" by defining some new interfaces and a registration system.

COM is nothing more than a registration system, reference counting memory management and interfaces (classes with only pure virtual methods for C++). Really pretty simple. So why is it hard? My conclutions is the main reason COM is hard is because the registration system sucks! I mean it sucks!

The COM registration system sucks for two reasons. The first and primary reason is GUIDs are nasty to look at and the registry is littered with them making it impossible to clean or know what you are looking at. The second is the initialzation for the COM subsystem, CoInitialize, CoInitializeEx, OleInitialize, CoUninitialize and OleUnInitialize, are horribly complex even though they are very simple functions. These two problems make COM hard. Not just hard, but a monumental task for people who haven't made that epiphany to understanding and spent a lot of time to understand. These are the people who have to code for a living or hobby.

I thought Side-By-Side would solve the first half to the registry problem. Turns out it made the problem even worse because Side-By-Side is even more complex and hardly works. I plea Microsoft to make Side-By-Side easy. All I need is a .ini file that defines all the GUIDs and the .dll or .ocx containing the type library or Assembly. Just one .ini file per applications please. I don't want each .dll or .ocx to have their own .ini file. Just one .ini file for the entire application.

Green Tea Partay

Have you ever wanted to know what it's like to live in California? Here's a hilarious video all you Midwest, East Coasters and Europeans can watch to see if California is a place you'd like to live. I have to admit, this is more typical of southern California. Northern California is much different.

Monday, August 27, 2007

Help Examples

Last week Dee Elling, our documentation manager, posted Old Help and New where she goes into details about how our help has fallen short since Delphi 7. I want to elaborate with a brief overview about how we are bringing back the examples in the help and the work that has gone into that. This is item #1 on the list Dee's provided.

Before we started the process we did some brain storming to figure out what we wanted, what we could do, and problems we had with the old system. One of the problems with the old format is many examples fall short of being compilable and functional. So I wanted to provide functional compilable examples. So we set forth to build a system where we have projects similar to the Demos that compile, run and can be automated so we can verify their behavior. The side affect of this is we instantly have more automation testing.

The next phase is to go through all the Delphi 7 and C++Builder 6 help files to get all the examples, create the .cpp/.h and .pas files, create projects out of them and then add metadata in the form of easily parsable comments so we can rip out the pieces of the projects we want to show in the help files. A scanner and parser will be built which pulls out the example pieces and injects them into the .xml files before the Doc-O-Matic build process.

This will all happen automatically on our help build server that is using Cruise Control to run automation builds of all help languages daily.

Friday, August 24, 2007

New Nikon Cameras



Yesterday Nikon announced two new cameras. The first is the Nikon D300 to compete with the Canon 40D with a 12.3MP 14 bit sensor, sensor dust cleaning, 3" rear LCD, 6 FPS, ISO 200-6400 and new auto focus system. There is no data on the size of the RAW buffer. www.dpreview.com mentions something about a vertical grip that will increase the frame rate to 8 FPS. The Nikon D300 matches the announced Canon 40D feature for feature and adds a few appealing features in addition.



The second announcement is a new line of Digital SLR, the Nikon D3. This camera sports a full frame sensor 12.1MP 14 bit sensor, 3" LCD, 9 FPS and 11 FPS cropped, and HDMI output. There is no data on the size of the RAW buffer. This is the first full frame sensor by Nikon that they call FX. The Nikon D3 is a competitor to the Canon 1D Mark III announced in February and is better in sensor size and resolution. This is an important release for Nikon. The sensor inside the Nikon D3 is a Sony sensor, so I expect the SLR market to get a whole lot more interesting in the next year. I expect Sony (remember they bought Minolta and produced the Alpha cameras) to come out with a full frame camera.

C++Builder User Statistics

David Dean posted a comment to my post yesterday about Delphi and C++Builder User Statistics with additional information I hadn't noticed from the newsgroups specifically about C++Builder:

"Now that you mention it, I'd like to point out two other posts by Michael: (made in borland.public.cppbuilder.non-technical)

Message-ID: <46c10d16@newsgroups.borland.com>

We've sold approximately 1m C++Builder licenses since 1996. However, there
have been several times that number of free compiler downloads and
personal/Turbo Explorer registrations.

Approx +1.5m active C++Builder users WW in 2007, VS.NET is +6m users.

and
Message-ID: <46c602cb$1@newsgroups.borland.com>

Interestingly C++Builder has typically sold more copies that Delphi per
version *but* they have been more heavily weighted toward Pro where as
Delphi is more heavily weighted toward Enterprise (Client/Server) *and*
hasn't had as many versions as Delphi. C++Builder population slowed down for
a few years during the time we were not upgrading C++Builder (during the era
of CBX etc). But interestingly during that time, C++Builder 6 continued to
sell very well and sold almost as many copies as C++Builder 3 and 5, the two
best selling C++Builder releases of all time. As CodeGear, C++Builder is
back in a big way with C++Builder 2007 and we have multiple minor updates
planned each year, and major version releases planned every year with no
plans to stop or slow down - there are many important things to do for C++
developers in the next several years. We plan to grow and beat the v3, v5,
and v6 stats over the next several releases."

Thursday, August 23, 2007

VMWare Fusion for Mac Rebate

So earlier today I mentioned that the rebate form didn't work. Well I finally was able to get past step 1, but all morning it wouldn't allow me to proceed to step 3. Fortunately I just tried again after lunch and BAM! it worked.

Problems Compiling Old COM Projects with C++Builder 2007

There have been some reports of problems when opening old COM projects with C++Builder 2007. The error comes from the linker that the .tlb can't be found. A simple work around, and one that we should have used all along, is to add the line anywhere in your project:


#pragma resource "*.tlb"

I hope this work around helps anyone having the problem.

VMWare Fusion for Mac

Well it turns out that VMWare took down their offer of VMWare Fusion for half price two days early. I was going to buy it but like many things procrastinated too long and didn't get the price break and it didn't help that they didn't honor the date they set forth. I would have complained but then they have a $20 off rebate. I don't like rebates, nor do I count on them, but it turns out their own website flat out failed to accept my key for the last few days. I'll let you all know what happens with that. I sent an email off but I figure I'll keep trying. You can claim your rebate here.

Two things I find really annoying with VMWare Fusion:

- When I shutdown my Mac and VMWare is running in any capacity it cancels the shutdown.

- ALT + Tab and CTRL + Tab don't get sent to the current process to handle. This is annoying when running applications like Delphi and Remote Desktop. It means more mousing which I'm trying to avoid.

Wednesday, August 22, 2007

Delphi and C++Builder User Statistics

In borland.public.delphi.non-technical I noticed this post by Michael Swindell that I thought people might find of interest:

"Delphi has a developer population of approx 1.75 million users worldwide in 2006. Delphi has 15% IDE marketshare overall (7.7% ranked out of 100%) and is the #2 Windows IDE and the #4 IDE overall(C++Builder is #3 and #5 respectively).

For licenses distributed per version/year we may be able to provide guidance under NDA to tool and component partners. I'll discuss this with David.

An anecdotal search yields an interesting "data":

Delphi VCL Controls and Components
1,300,000 for Delphi (VCL OR "visual component library") (control OR component)
http://www.google.com/search?hl=en&q=Delphi+%28VCL+OR+%22visual+component+library%22%29+%28control+OR+component%29+&btnG=Search

Delphi Winforms Controls and Components
800,000 for ".net" (winforms OR winform OR "windows forms") (control OR component) (Delphi OR "Delphi .NET" OR Delphi.NET)
http://www.google.com/search?hl=en&q=%22.net%22+%28winforms+OR+winform+OR+%22windows+forms%22%29+%28control+OR+component%29+%28Delphi+OR+%22Delphi+.NET%22+OR+Delphi.NET%29&btnG=Search

.NET Winforms Controls and Components
3,810,000 for ".net" (winforms OR winform OR "windows forms") (control OR component)
http://www.google.com/search?hl=en&q=%22.net%22+%28winforms+OR+winform+OR+%22windows+forms%22%29+%28control+OR+component%29+&btnG=Search

C# Winforms Controls and Components
2,390,000 for ".net" (winforms OR winform OR "windows forms") (control OR component) C#
http://www.google.com/search?hl=en&q=%22.net%22+%28winforms+OR+winform+OR+%22windows+forms%22%29+%28control+OR+component%29+C%23

Visual Basic Winforms Controls and Components
2,440,000 for ".net" (winforms OR winform OR "windows forms") (control OR component) (VB OR "visual basic" OR "visual basic.net" OR "vb.net").
http://www.google.com/search?hl=en&q=%22.net%22+%28winforms+OR+winform+OR+%22windows+forms%22%29+%28control+OR+component%29+%28VB+OR+%22visual+basic%22+OR+%22visual+basic.net%22+OR+%22vb.net%22%29"

The Coolest Pull-up Bar



A few weeks ago I had a great idea, to put a pullup bar in my garage. Then I had an even better idea, to make it from those little hand holds they use on climbing walls. So I went to REI (my favorite store not only for the cool things but their generous return policy) picked up a set of climbing holds used to build a home climbing gym, drilled a hole in a 3/4" piece of plywood, bolted the two climbing holds to the plywood and screwed it to the beam in my garage.

I only wish the CodeGear building weren't made of only steal so I could put one of these over the doorway of my office to go along with my Bongo Board and Medicine Ball. My current medicine ball is an Everlasting that didn't quite last. The sand is coming out which makes a mess so I think I'll try one of these rubber Medicine Balls.

Review: Microsoft Remote Desktop for Mac

Yesterday I posted that there is a beta available of the new Microsoft Remote Desktop Client for Mac and said that I would give it a short review. Well I've used it a bit now and found a few problems and oddities, but my overall opinion was improved from the previous version. The two big features being improved performance and support for more than one connection.

Maybe because this is beta software but the multiple connection feature didn't appear to work for me. I also found it odd how that feature works. To connect to more than one computer you type in the compputer name or IP address into the inital dialog ,connect to a computer, then save off that connection for reuse later. The UI is just clunky but will be a welcome feature once it starts to work.

The performance is much improved which is really the biggest problem with the old client. I find it odd that the bottom right corner has resize bars when the window doesn't resize. Probably just a but because the window should be allowed to shrink. Again, beta software.

We'll see how the final product turns out, but I would suggest to the team to redo having a global preferences dialog for all connections (in other words the dialog only shows one connection's settings) and do something similar to how Mail works with multiple accounts. And to connect provide a nice little list in a menu. Anyway, that's my two cents. I'm going to go back to using VMWare now.

Tuesday, August 21, 2007

Microsoft Remote Desktop for Mac

The old Remote Desktop for Mac left a lot to be desired. It crashed a lot, only allows one remote connection (you could get around this by creating a copy of the application with a different name but that's lame) and did I mention it crashed a lot? Well Microsoft I guess has found that people want a better version so they released a beta a few weeks ago of Remote Desktop 2.0. You can download the beta here. I'm currently giving it a try so I'll give a it a brief review by the end of the week.

Monday, August 20, 2007

New Canon Cameras





Today Canon Announced three new cameras. The first is the Canon G9 to replace the G7 I talked about here. I'm not sure where the G8 went but I guess they just skipped the version. The G9 now sports RAW and has a 12.1MP sensor.



The second camera announced is the Canon 40D which replaces the Canon 30D. It has a 10.1MP 14 bit ultra-low noise sensor, 3" rear LCD, new auto focus system, Live View, sensor dust cleaning, and 6.5 FPS for up to 75 frames of high quality JPG mode or 17 frames in RAW. Apparently it has some weather sealing around the CF and battery compartments but not around the buttons. Since the Nikon D200 was released every time I've been asked which camera to buy I couldn't recommend the 30D to people who didn't own Canon lenses. Now I think the Canon 40D is a comparable camera to the Nikon D200.



The third new camera is the 1Ds Mark III to replace the 1Ds Mark II which I predicted after the 1D Mark III was announced earlier this year. It has a 21.1MP 14 bit ultra-low noise sensor, 5 FPS for up to 45 frames of high quality JPG or 15 frames in RAW, Live View and sensor dusk cleaning. It'll cost what a small cheep car costs.

Perfect Santa Cruz Summer



This weekend was one of those typical perfect Santa Cruz summer days that I finally got to get out and enjoy, just for a bit. This is a view from UCSC looking out over Monterey Bay looking south toward Monterey just before sunset. The Missus and I took our daughter up there for a photo shoot. The location and lighting was spectacular as usual. Click on the photo for a larger version, it won't disappoint.

Friday, August 17, 2007

Windows Live Authentication Free For All

Microsoft has opened up Windows Live ID Web Authentication 1.0 SDK for anyone to integrate Windows Live authentication into their website.

I think this is both good and bad. Good because it sure would be nice to not have to remember lots of usernames and passwords for all the various websites out there, not to mention if I ever wanted to personalize my website it would make things easy for me and the users. Bad because now they've opened up the Windows Live to fake logins exposing users. Granted some people will blame the users for not knowing they are entering their information into a fake login and you can't protect everyone but they also don't know any different. Just my two cents on the subject.

Wednesday, August 15, 2007



The EETimes has an article today about AMD adding new instructions to help parallel processing. You can read the specification here. At first glance the two new instructions and data structure will probably be used by .NET and Java run-times to allow the environment to optimize as it runs. Parallel processing is the future.

Tuesday, August 14, 2007

Missing Posts

Things have been a little hectic and I haven't had time to post. Sorry to say this blog is one of the first things on my list to get neglected when I need more time.

Maybe if you really want to read something you could read my post Fun with V-Tables to find out why you should upgrade to Delphi 2007 if you are still using Delphi 7 and importing Visual Basic or .NET type libraries don't work.

Or you could read Good COM Interop Practices which I wrote because nearly half the interop code I run across doesn't follow these steps which make things much easier.

You could also read about another cool thing called Side-By-Side but it doesn't work well enough which is why I only posted one post on the subject, Side By Side COM Registration Part I. Good from far but far from good.

Anyway, I hope to have more interesting posts in the near future but I've got to get back to writing code and it's past my bedtime.

Monday, August 13, 2007

Polls

I'm going to keep a link on the side-bar with all the poll results. I might repoll the same questions because it'll be interesting to see how things change over time. Here is a list of the previous polls and the number of readers that voted for each choice.

10-31-2007 How long have you used Delphi?

1% - < 1 year
1% - 1 to 2 years
1% - 2 to 3 years
3% - 3 to 5 years
91% - > 5 years

8-20-2007 What Platform do You Write Programs For? (choose any of the following)

100% - Win32
22% - .NET 2.0
0% - .NET 1.1
5% - OSX
16% - Linux


8-6-2007 What Version of Delphi are You Using?

10% - Delphi 2007
42% - Delphi 2006
0% - Delphi 2005
17% - Delphi 7
8% - <= Delphi 6

7-29-2007 What is your favorite programming language?

89% - Object Pascal
8% - C#
1% - C++
1% - Java

Thursday, August 9, 2007

Delphi 2007 and C++Builder 2007 Update 2

The Delphi 2007 Update 2 and C++Builder 2007 Update 2 is now available. I suggest reading the Update 2 Readme before installing.

Tuesday, August 7, 2007

ClusterMap, a Nice Free Geographic Web Widget

Locations of visitors to this page


Over the weekend I came across ClusterMaps so I decided to add it to my site on Monday. You can see the same map above in the sidebar on the right. I don't know how cool it is yet, but I'm giving it a try as something fun for the readers of this site to enjoy. Besides it's free as long as your site has less than 2,500 hits per day. This blog is getting close but it isn't over the limit yet. If you want to add this little widget to your site go to here. And they say gotos are bad. Okay, that was a bad joke.

Monday, August 6, 2007

Poll: What Version of Delphi are You Using?

Last week I learned there are far more Delphi readers of this blog than any other. Like I didn't know that before but it's always good to know your audience. So this week I'd like to find out what version of Delphi you are using. If you are using any version other than Delphi 2007 please drop a comment because I'm really curious why. The poll will close on Sunday so I can open up another one next Monday.

Update: Results from the last poll

What is your favorite programming language?

89 - Object Pascal
8 - C#
1 - C++
1 - Java

Friday, August 3, 2007

Font Conundrum

Something that has bothered me for some time is the lack of ability for a developer to use fonts in their applications. Applications and websites are stuck using fonts that are on the client computer and that's it. There are a few ways of using a font, but they are so troublesome that they might as well not even exist.

Font packages are only licensed for use on the computer they are installed to. Very few allow deployment and who wants to deploy a font anyway. That's a pain because on Windows it needs to be copied to the system's fonts directory. If you do this then you need to provide a license which allows the user to use the font, not just your applications.

So because of this lack of system for using custom fonts nearly every webpage uses standard san serif font Helvetica or Arial. I could use Wingdings. Woo hoo!



Being such a major part of branding and product recognition type sure is left behind when it comes to applications and webpages. The only way to get around it is to render the text to an image and put that on the website or application which is problematic for many reasons I won't even bother going into. Every magazine, newspaper and book is printed with type carefully considered by a graphic designer, why can't an software be the same?

There should be some ability for a font to be bundled into a website or a client application so it can be rendered on the users system.

Eventually I'm sure some operating system vendor or development tools company will solve this problem and we'll all look back on this font conundrum as we do a monochrome monitor or black and white printers.

Wednesday, August 1, 2007

New Photo of the Month


Copyright © 2007 Chris Bensen. All rights reserved.


Well it's that time again. The first of the month and time for me to put a new photo up. This months photo I took at Natural Bridges State Park of the tidepools at sunset. By the way, if you follow that link to the California State parks website you'll see a photo of the main attraction at that park; the natural land bridges. The larger bridge on the left fell a number of years ago so it's really Natural Bridge now. Still very enjoyable place to visit. The Monarch butterflies start showing up around October to reproduce, die and then typically are gone by March. The tidepools are unbelievable and it's always nice at the beach.

Click on the photo to see it larger and feel free to browse around the gallery. Drop me a line if there is anything you would like to purchase. I have small prints, large prints and photo cards.

Pre-order Apple Mac OS X Version 10.5 Leopard



For all those newly converted Mac fans out there, Leopard will be out soon so you might want to pre-order your copy today. There will be some pretty cool features. I'd pre-order a copy but I have enough Macs in the house now it makes sense to order the Family Pack for $199 which upgrades 5 systems. Problem is I don't see a pre-order on Amazon for the Family Pack.

Quick OSX Tips

You can use Ctrl + Command + D to look up a word in the built-in dictionary. After you look up the initial word, let go of D and keep holding down Ctrl + Command and your Mac will look up the word under the cursor.

I find useful when using Blogger because the spellchecker doesn't work there to use the built in spellchecker in OSX. Press Command + : at in any edit field and it will take you to the next misspelled word.

Find your Mac's serial number from Terminal with the command:
ioreg -l | awk '/IOPlatformSerialNumber/ {print $4}' | sed 's/\"//g'

A lot of times I find I forget to type the sudo command when editing some config file. If you type "sudo !!" then it will sudo the last command.

Check your DNS configuration under OSX with:
scutil --dns