Back in November I hosted the Delphi Robot Rage competition as part of CodeRage. At the time I was unable to contact the author of D-Robots (the program we used). I am not sure if that was a result of outdated contact information or just poor luck (i.e. spam blockers). Well, I received an email from Marcus Oblak AKA “mrqzzz mrqzzz” and the author of D-Robots. Turns out I misspelled his name, for which I apologize. Hopefully we can work something out to get a slight update to D-Robots and use it for another Delphi Robot Rage. I’ll keep you posted.
Archive for the ‘CodeRage’ Category
The official standing of the bots was given during the live broadcast of the final session. Although if you run the bots in a new battle, chances are a different bot may win. There certainly is a bit of luck involved. Never the less, these are the official results.
- 1st Place – Brian Thoman and Codralis of WideOrbit Inc. in Lynnwood, WA
- 2nd Place – Michael Madsen and Kisai of Logos Consult in Denmark
- 3rd Place – Ken Adam and Akadamia of Akadamia Ltd in Midlothian, UK
Thanks to everyone who entered a bot! I’ll be arranging the prizes with you all shortly. Thanks to all of the prize contributors too. A special thanks to everyone at CodeGear who made CodeRage possible!
At this point I am not posting the last battle recording. The quality was terrible, and most everyone can run their own battle with the bots and D-Robots (possibly reaching a different outcome though. . . )
Wow, what a week. CodeRage II went great. A lot of good content and I enjoyed presenting my sessions. You can get the code, links, etc. from them here:
They all went really well I thought. Unfortunately I pushed the deadline back too far on Delphi Robot Rage and my JIT Presentation didn’t happen on time. Sorry to everyone about that.
Check back often for updates (seriously), or let me know if I missed something you are looking for from my sessions.
I always thought Delphi’s global exception handler was a great feature. It allows your program to continue after an otherwise unhandled exception would have caused it to terminate. Typically in a serious application you would assign your own global exception handler, or used one of the great 3rd part exception handlers like madExcept or Exceptional Magic (I love that name!) They both provide a nice dialog, stack trace, logging and reporting.
Well it turns out that if you want to be Microsoft Windows Vista Logo certified, then you need to crash your application on certain exceptions.
Applications must handle only exceptions that are known and expected, and Windows Error Reporting must not be disabled. If a fault (such as an Access Violation) is injected into an application, the application must allow Windows Error Reporting to report this crash. (from requirement 3.2 Resilient Software: Eliminate Application Failures)
Microsoft’s rational for this requirement is the ISV will receive the error report Microsoft collects for them. I guess most software developers don’t have access to tools like we do in Delphi to catch exceptions and log them for us.
So short of tossing out the Forms unit and writing everything from scratch, how can you get around the usefulness of the global exception handler.
My first thought was to create a custome application exception handler by placing a TApplicationEvents on your main form and assigning the OnException event. In the event include the line
This will pass an exception up to the operating system and terminate your application, at least when I tested it in Delphi 2007. When I tried it in Delphi 7, it didn’t work right.
A more elegant and involved solution:
First you need a couple global variables:
var GlobalExcept: Exception; GlobalExceptAddr: Pointer;
And a global exception handler:
procedure TForm1.ApplicationException(Sender: TObject; E: Exception); begin if E is EAccessViolation then begin // Keep the exception object from being destroyed! AcquireExceptionObject; GlobalExcept := e; GlobalExceptAddr := ExceptAddr; Application.Terminate; end; end;
The rest of the magic happens in the project file (DPR)
begin GlobalExcept := nil; GlobalExceptAddr := nil; try Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; finally if Assigned( GlobalExcept ) then begin raise GlobalExcept at GlobalExceptAddr; end; end; end.
And you can [download the code].
I didn’t cover this in my CodeRage II session on Exceptional Exceptions, but there is a lot of other cool stuff, like
The session “Leveraging What You Have: 10 Top Things Added to Delphi Since Delphi 7″ by Pawel Glowacki was one I was looking forward too. The audio and video quality was a little poor, so I skipped it to watch later when I had more time. Pawel posted his list though, with a lot of details. That is probably more valuable to me then the video session. If the video was chopped up by list item so I could jump to a feature I was unfamiliar with, that would be really cool.
There are a lot of really cool enhancements since Delphi 7. I know a lot of people were holding out on Delphi 7 because it was such a solid release. Delphi 8 was .NET only, and of questionable stability. Since then each release has gotten much better. I must say, Delphi 2007 is definitely worthy of an upgrade from Delphi 7.
So I am breaking the cardinal rule of attending a virtual developers conference: multitasking. Sure, that is one of the advantages, but at the same time, it really detracts from how much you get from the conference if you are are tying to do your job at the same time (not to mention it detracts from your job performance). Normally I would commit some time, but we are on a serious deadline right now, so I am getting it done.
The last session of CodeRage ][ (now FREE!) is the Delphi Robot Rage. This is your opportunity to show off your amazing Delphi programming skills. Download D-Robots and build your robot to compete in a Death Match on the Light Plaza map against one or more robots created by other participants. There will be amazing prizes (undisclosed as of yet), but of course the best prize will be having your amazing programming skills shown off to the world.
- Robot must have unsecured source (no password, or password must be provided), although the source will not be revealed until after the challenge is completed.
- If a unique skin is not used for your robot, then a new skin may be assigned to your robot for visual identification.
- Competition is open to everyone. No purchase necessary. Not required to be in attendance at CodeRage II to enter or win, although that is the best way to see the action!
- Email your robot to me (email@example.com), and I will reply with acknowledgment. If I don’t reply, I didn’t receive it.
Deadline for submissions: November 26th, 2007 – midnight Pacific Time
Notice: There is an incompatibility between D-Robots and some video drivers (maybe just ATI). No known work around. It does work in a virtual machine, but your frame rate will be very poor.
If you submit your robot early enough, you might get some feedback from a practice round.
Be sure you are registered to attend CodeRage II. This is CodeGear’s second virtual developers conference. Being virtual it is a whole lot cheaper and easier to attend. The key is to actually schedule time to watch sessions and be sure you are not working or otherwise distracted. If you are overseas that gets even more interesting.
You can always catch the replays later, but then you miss out on the live chat and Q&A session. I must admit, as a presenter it is odd being in the chat room with the attendees while you are presenting – you are both the presenter and the “peanut gallery” at the same time.
You’ll see sessions on Delphi, Ruby, Java, PHP, C++, Databases, .NET, Win32 and all the latest CodeGear tools and technologies.
I’ll be attending and presenting both. I hope to see you there, virtually of course!