Archive for the ‘CodeRage’ Category

Marcus Oblak and D-Robots

Monday, February 25th, 2008

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.

CodeRage II -> Delphi Robot Rage final standing

Sunday, December 9th, 2007

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!

Bot profiles and other details will continue to be posted.

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. . . )

Exceptions in Constructors and Destructors

Monday, December 3rd, 2007

Check out Alister Christie’s latest movie on CodeGearGuru.com. He covers the elusive Exceptions in Constructors and Destructors. Thanks Alister. That was one of the questions from my Exceptional Exceptions session that I needed to follow up on.

CodeRage II is a Success

Friday, November 30th, 2007

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.

Thanks!

Crashing Like VB

Wednesday, November 28th, 2007

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

  raise e;

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].

Thanks to Jeremi Reda for asking this question in borland.public.delphi.non-technical.

I didn’t cover this in my CodeRage II session on Exceptional Exceptions, but there is a lot of other cool stuff, like AcquireExceptionObject!

10 Top Things Added to Delphi Since Delphi 7

Monday, November 26th, 2007

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.

Attending CodeRage II

Monday, November 26th, 2007

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.

As a result I am skimming many of the sessions. I’ll catch them on replay.

D-Robots and Delphi Robot Rage

Tuesday, November 20th, 2007

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.

Requirements:

  1. 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.
  2. If a unique skin is not used for your robot, then a new skin may be assigned to your robot for visual identification.
  3. 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!
  4. Email your robot to me (delphirobotrage@davinciunltd.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.

Short intro video online & Partial list of prizes.

Questions? Comments?

CodeRage II

Monday, November 12th, 2007

CodeRage II

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!