Friday, May 13, 2005

Black holes and Developer surveys

I thought I'd take a moment to dispell any myth regarding whether or not we take the current (or past) Delphi survey seriously and they really don't end up in some black hole.  In between Mods E and F here at the Scotts Valley, CA campus, there's an entire wall that is one huge dry erase board (whiteboard).  Just yesterday, the latest preliminary survey results were printed and taped up on that board for all to see (internal to Borland that is).  It is quite interesting to read over all the results.  Now one item of note is that while we do take these surveys very seriously, they are just a part of the overall picture.  We also take into account a lot of information from our field sales teams, the Product Line Sales Managers for the various regions, and customer site visits, etc...  The following photos (taken with the now infamous phone cam...;-) are just the results from the Delphi 2005 users only, so there's a lot more data to mine.  This was also only after the first day the survey was posted.  No, I'm not going to provide higher resolution photos because we generally don't publish the results of these surveys.  Mainly because of what I said above;  they are only a part of the overall picture (no pun intended ;-).  As we mix in data from all the other sources, things could vary substantially from the raw survey results.  Besides, raw or cooked, internal marketing data is a critical business datapoint and should be held very close... why hand free marketing research to your competitors?

If you look closely at the picture on the left, you can see the written text “1st Day results...”  Also, nevermind the tic-tac-toe game to the left ;-)...

 

Wednesday, May 11, 2005

Delphi 2005 running on 64-bit Windows...

Mark Russinovich, of SysInternals fame, posted this blog entry about the new Windows XP 64bit Edition.  Why do I mention it?  Well, for one thing, Mark mentions using Delphi 2005.  Unfortunately, his reference to Delphi isn't too flattering.

The Borland Delphi 2005 debugger has a more serious issue: when you launch a process under the debugger it believes that the process exits immediately when the process actually starts properly.  A workaround is to attach the debugger to the process after its launched.”

This blog post was brought to our attention, so I posted a comment asking for some clarification and some steps to reproduce this problem.  This was in addition to the internal flurry of emails and immediate investigation into the problem on one of the 64bit systems in the QA lab.  However, based on the above description, we tried to reproduce the problem and found that we could not.  Obviously, we're not trying to debug a 64bit application (Delphi isn't quite there, yet ;-).  Mark responded quickly with more information regarding what he was actually trying to do.  It turns out that he was trying to debug an MMC (Microsoft Management Console) snap-in written in Delphi.  After another internal flurry of emails and work in the QA lab by a member of the QA team, we looked and found out that mmc.exe is in fact a 64bit application.  OK... now the SysInternals guys are some smart cookies, and I could not for an instant think that Mark would make such a silly and obvious error.  It turns out that there are two versions of mmc.exe,  a 64bit version and a 32bit version.

So after I post a rather sheepish response (in which I inquire as to the “bitness” of mmc.exe... I was a little embarrased to even mention it) to Mark's explination of what he was doing, Mark responds with what is actually going on.  Yes, of course, he's launching the 32bit version of mmc.exe from the Delphi 2005 IDE.  But what happens is that the 32bit MMC then immediately turns around and launches the 64bit MMC and then exits.  Ok this makes sense.  But, he mentions that he's able to attach to the process after it is launched.  This is easily explained as well as Mark states in his response comment:

“I've investigated further and its a Windows problem, not Delphi's: when you launch the 32-bit mmc.exe it launches the 64-bit mmc.exe and exits. If you are loading a 32-bit snapin the 64-bit mmc.exe launches the 32-bit mmc.exe again and exits.”

So the mystery is solved.  And Delphi 2005 runs and debugs 32bit applications on the new Windows XP 64bit Edition.  So thanks, Mark, for bringing this to our attention and being so proactive in figuring out this odd behaviour.  And finally, it is really awesome to know that the folks at SysInternals use Delphi!

Follow up: It looks like Mark figured out the issue and how to launch the 32bit MMC.  He explained in his comment:

Ah, I figured it out: you can launch the 32-bit mmc.exe directly if you specify its path (windowssyswow64mmc.exe) and include the /64 command-line option.”

 

Tuesday, May 3, 2005

Enthusiasm and excitement vs. fear and trepidation...

When we look to hire a new junior/entry level engineer, there are several key qualities I look for in the candidate.  The first and foremost quality I want to see, obviously, is talent.  Do they really know the stuff they said that they did on their resume(CV)?  Another quality that is one of the hardest to see in a short interview, although I have seen it come out in the really exceptional ones, is enthusiasm and excitement.  Don't be afraid of being wrong.  How else do you learn?  A corollary to this one is teachability.  How well do you respect both your peers and the senior developers?

Clearly, the most successful and talented engineers tend to meet those above qualities.  I'd rather hire an engineer that was less experienced but was a fireball of energy and enthusiasm.  Also they are ones that would be willing to charge ahead and take risks, even if it is the totally wrong direction.  They are kinda like a pinball.  The times when the game is the most exciting is when the ball is bouncing around in all different directions.  And you can think of the senior engineers as the paddles.  They are constantly redirecting and sending the ball back into play, which is how you score the most points.

Yes, that metaphor will break down at some point because eventually that pinball will need to become a paddle. My point is that an engineer may have memorized Donald Knuth's books but is so afraid of making a mistake or “not measuring up” in the eyes of their peers or the senior staff, that they are paralysed by this fear.  Yes, they will complete a task... eventually... and it will be correct and relatively bug free.  The problem is that you don't know when it will be complete.  And sometimes, it may not get done at all.  Someone who is willing to make mistakes and can take direction and critiques, will usually outperform someone who tends to be paralyzed by some fear.

Of course, this person can become a liability, but that is usually when they fail the final item in my initial list; teachability.  So taken altogether, a junior engineer with the above qualities has the most chances for success.  Coming onto the team with agendas, and preconceived ideas on how things should work, and refusing to accept that the more experienced team members may have already thought about all the various angles, is a sure recipe for disappointment and discouragement.  In my direct experience of being on the Delphi team since its inception, I've seen both types come and go from the team.  I'd have to say that for all the junior engineers that have come and gone on the Delphi team the ones that met the above conditions have contributed to the team far above some of the more reticent members have done.  I've enjoyed watching some of these junior team members move up into the senior ranks.  They are given larger, more critical tasks.  They also don't require as much guidance and direction... but what is an interesting trait they tend to develop is they now actively seek out feedback and criticism from their peers and the top-staff members.  They usually have spent a good amount of time thinking about the problem critically, and mulled over several solution scenarios.  By the time they begin seeking feedback, all the “stupid” questions are out of the way and the real “meat” of the problem can be discussed.

Now before you start reading between the lines and think that I'm trolling around for new hires, this is just a few thoughts I've had recently and thought I'd get them out before they evaporated.  Which probably explains why some of my metaphors are a little odd at times... then again when you consider the source... ;-)

Friday, April 29, 2005

X marks the tab...

So while I'm waiting for the latest new bits of Delphi goodness to be assembled into some machine readable goop... I figured I'd take a few moments to spew a few thoughts...

You know those little “X”s on the editor tabs in Delphi 2005?  The ones that you either absolutely revile as the spawn of the devil, or on the opposite side, they're the Messiah's second coming.  Quite frankly, I'm someplace in the middle... well maybe more toward the Messiah side... When we were considering putting them into Delphi (ie. the Galileo IDE), we looked at how these little images of controversy were handled in other environments.  The first such environment, which was also the most logical, that we looked at was JBuilder.  So we fired up JBuilder to do some research (such as it was).  After playing around with them for a while, I found some usability issues with them, but overall Corbin and I really like the idea. (an aside: the Eclipse IDE has a similar feature as well) Here's a few that I found...

  1. It is easy to accidently click the “X” and close the tab.
  2. They increase the width of the tab, thus decreasing the total number of tabs visible (JBuilder also has a glyph next to the “X“ that shows the content type).
  3. If you want to close many tabs in succession and since the tabs were varying widths, you constantly have to shift the cursor to the new location of the “X“ on the next tab.

The first item is probably the #1 complaint among the “spawn of the devil” crowd.  I, too, sometimes have found myself accidently clicking that little “X” when I don't fully pay attention to what I'm doing.  I mean, I'm deep in the middle of a bug fix or some sort of feature work and I want to click over to some other tab, and bam!  I just closed the tab.  So now I just Alt-F,R,5... That's File|Reopen|5. .  I've just gotten used to quickly doing that little dance.  OK.. so that's the first problem.

The next one is... well... really hard to quantify.  If you hate the “X”, then #2 is probably one of your supporting arguments for removing them.  That's fine, but I also think it is a data point that also can stand on its own.  Screen real-estate is a finite resource and needs to be carefully parceled out.  Now that doesn't mean that we create butt-ugly UIs under the pretense of the almighty screen real-estate.  It means that there needs to be a balance.  I often hear folks, especially among the software engineering illuminati, “We don't need all that eye-candy!“  Riiiight...  If that were the case then we'd all be driving Gremlins, Pacers, or Pintos.  That's why I have a Monet print and an actual oil reproduction of a Monet painted by my mother hanging in my office (both from the Water Lilies series, for which Monet is very famous.  And yes, Monet is one of my favorite classical artists).  Right next to the cool 4ft (120cm) wide poster of an F-15E in flight...  All of it is “eye-candy.“  Of course these posters all have their own stories themselves, which I'll save for another blog entry.

The last item is somewhat subtle.  One of my first thoughts when I saw the “X” on the tabs, was “That's cool! I can now quickly close a lot of files without a lot of clicking or mouse movement.”  Well.. not quite.  So you would close the tab, and the tab to the left would slide over, but that tab is a different width that the one just closed, so now the mouse cursor isn't directly under the “X” and you have to move it to the left or the right and click again.  Grrr...  Of course, if you have a habit of double-clicking, you'd probably appreciate that the “X” didn't appear under the mouse cursor.... sometimes.

So with all these negatives, why the blazes did you put that in the product? First of all, it is just so dang useful and convenient.  Also, we solved the #3 problem by having the tab to the right slide over, which would always put the “X” right back under the mouse cursor.  It's also kinda like chocolate.. you know that too much of it isn't good for you, but in moderation it's pretty tasty.

So, now that we've shipped a couple of products with the “X” and have received some feedback from all the various factions out there. You know, the “spawn of the devil” folks and the “Messiah's second coming” folks.  So we're considering a bit of a change.  What if the “X” was at a fixed location?  Say it was all the way over to the right side of the tabs?

That would solve the all the complaints I listed above.  However it would introduce another problem.  Since there is now only one “X”, you can only close the active tab.  Which was one nice thing about the “X” on the tab; you could close an inactive tab by clicking on the “X” directly.  I suppose we're at a point where a descision needs to be made.  Right now, we're internally using this change for the next release of Delphi to see how folks like it.  So far the response has been positive... well OK, not all positive since there are those that “want their 'X' back!”  Now before you suggest it, no, I'm not going to make this optional.  So we have to weigh the advantages and the disadvatages.  So far, I'm inclined to think this is a reasonable compromise between both camps.  Be warned, however, please keep your comments to the point and well thought out.  Any comment I think is disrespectful and rude, I'll delete.  Think critically about the problem, and consider each side regardless of your personal opinion.  Yes, ultimately, the original decision was based on our (the developers and the overall team's) personal preference, and it still is.  Yet, feedback is still key in how we form our preferences and opinions.  Being, ourselves, developers we like to think of ourselves as advocates for the customers.  Like all groups, there are the radical fringes, but you have to take the bad with the good.. and luckily, for the Delphi community, it is mostly good.  It makes our job more enjoyable and satisfying.

With that, have fun... ;-)..  And, hey, if this works out, I might try and address the “my glyphs are overlapping in the editor gutter!” (OK, Nick?) issues...  Talk about a field full of landmines...

Friday, April 22, 2005

Some more blasts from the past..

Brian Long, Delphi Consultant Extranordinaire, has some cool web pages describing all the various “Easter eggs“ that have been in Borland products over the years.  I'm somewhat partial to this one in particular...http://www.blong.com/Undocumented/Delphi5.htm.  In other words, the text file and project manager trick.

For the record, though, I did not put this one in the product.  There was a period of about a year and a half where I played R&D manager in addition to having actual product deliverables for which I was responsible.  It was done by two of my direct reports, specifically, Chris “debuggers 'r' us” Hesik and Dave “I don't have a blog” Wilhelm.

 

Tuesday, April 12, 2005

Eli starting to blog..

Looks like Eli Boling, one of Borland's C++ compiler guru's, is going to start blogging.  He's got a http://blogs.codegear.com account here, and although he hasn't started posting, I'm sure something will appear soon... OK, I'm hoping something will appear soon.  Maybe this post will crack it open...

Delphi at NASA Goddard Space Flight Center.

Someone in the Delphi non-tech newsgroup had posted this link to the NASA Goddard Space Flight Center Rapid Application Development Lab that explains their rationale for using Delphi in the creation of the Data Trending & Analysis System (DTAS)... uh.. whatever that is ;-).  But hey, its written in Delphi!  If you browse to the “Introduction” page (or follow this specific link), there is an excellent paragraph describing their reasons for selecting Delphi as the tool of choice.  The best quote is “ (i.e., it placed no measurable limits on what we could develop).”  That about sums it up...

Thursday, April 7, 2005

Vending machine religion

Vending machines are known for couple of things:  Providing heart-rotting, sugar-laden, flab-producing late night or afternoon munchies.  Another thing they tend to do is rob you of your hard earned loose change... all the while snickering at you as you stare longingly at that fine bit of cellophane-wrapped goodness just out of reach. 

Well, as I was down the hall grabbing a cup of “nectar of the gods,” or coffee, I glanced over and saw an amazing site.  A vending machine with a conscience!  Apparently this particular vending machine “got religion” and decided to try and make up for all its past acts of coniving thievery.  Oh what a site to behold!  Since it is a bit hard to describe, I whipped out my handy-dandy phone camera and snapped a bit of grainy wonder so that I could share this heart warming experience with you.

Friday, April 1, 2005

Gadgets galore...

If you remember my post here about that cool shopping/gadget site, Woot, you'll remember that I had bought that fantastic gadget deal of a mobile hard-disk based tune box and the streaming media box from Rockford-Fosgate's Omnifi division (which I understand they've recently jettisoned).  Well, I spent the last weekend installing it into my car.  I might decide to post a few photos of the install.. I don't know.  But, anyway, I wanted to preserve the existing factory head unit and only add the DMP1 using some sort of auxillary audio input.  Well, it turns out that even though the radio head unit already has a 6 disc CD changer built int, it also supports an external CD changer as well.  Well, it turns out that Discount Car Stereo sold a really cool little box that connects to the existing head unit using one of the unused connectors and provides two auxillary inputs.  To the stereo, it looks like an external CD changer and by selecting a different track I can switch which of the two aux inputs are being used.  So I ordered it.

The tricky thing about the install was that I wasn't sure where to place the Omnifi controller/display.  My stereo head unit takes up most of the center console space so there was no place to put it there.  So I went a'Googlin'..  I found a place where another Omnifi user had installed the controller unit onto a little sun-visor that was just above the rear-view mirror.  Well, I don't have anything like a sun-visor there, but there is a bit of space.  So I built a bracket that fit between the two existing sun-visor mount points and then extended down out from under the headliner with two other bracked to which I attached the controller.  Then ran the wire under the headliner and down under the A-pillar moulding.  Then I did some surgery on the aux-input adapter cables to tap into them in order to grab the requisite power, switched power, ground and dimmer and feed them to the Omnifi adapter. Then placed the hard-disk carrier under the passenger seat.  I then ran the USB cable to the WiFi adapter out on the back window deck.  (yes this did come with a WiFi 802.11b adapter :).

Then there is a bit of software you install on your computer system where you have all the media files stored (or on a machine that has access to those media files).  This software is then used to sync with the player out in the driveway.  That is the coolest part of the whole setup.  At 2:00am, the DMP1 wakes up, boots itself and connects to the network.  It then will automatically sync with the server based on what you want it to sync.  For example, I created a playlist with some songs and then went to bed.  In the morning I got in the car and drove into work and there on the device was my playlist.  I checked the status on the device and it said that it completed the sync operation at 2:03am.  This is cool!  So now I pull into the driveway at home and the device connects to the network.. so even my car is WiFi enabled.  For the gadget freaks out there, this is getting good.  The next thing I can look into is a full on “car-puter.” ;-)..

Update: This is not an “April 1st post”.. it is actually true ;-)

Update: Here's some pics of the DMP1 install.  Again.. Sorry for the awful camera phone pics..