bl.OGware

infrequent grumblings of a software engineer and then some… (also some Delphi programming)

Interface unit for sending debug messages to SysInternals ProcessMonitor

Posted by tier777 on 2010-04-15

The latest version of SysInternals‘ excellent ProcessMonitor is now able to receive custom debug log messages and display them right in between the I/O logs.

Even though I still don’t quite get the rationale for the need to create a new API for this (in contrast to simply merging in the functionality of DebugView) I went straight ahead and converted the API to Delphi.

This should work with Delphi 6 and later. I successfully tested with Delphi 2007, 2009 and 2010.

(Update: the originally posted version did actually not work with Delphi 2007 or earlier because I had inexplicably overlooked “that Unicode thing”… Thanks to GunSmoker for pointing that out! Using $ifdef UNICODE and WideString is a cheap cop-out, I know – but it works)

Enjoy:

unit ProcMonDebugOutput;

interface

uses
  Windows;

type
  TProcessMonitorLogger = class
  private
    const
//      FILE_WRITE_ACCESS           = $00000002;
//      METHOD_BUFFERED             = $00000000;
//      FILE_DEVICE_PROCMON_LOG     = $00009535;
//      IOCTL_EXTERNAL_LOG_DEBUGOUT = CTL_CODE(FILE_DEVICE_PROCMON_LOG,
//                                             $81,
//                                             METHOD_BUFFERED,
//                                             FILE_WRITE_ACCESS);
      IOCTL_EXTERNAL_LOG_DEBUGOUT = $95358204;
    class var
      FDevice: THandle; // = INVALID_HANDLE_VALUE
    class function Open(): THandle;
    class procedure Close();
    {$IF CompilerVersion >= 21}
    class constructor Create;
    class destructor Destroy;
    {$IFEND}
  public
    class function Output(const AOutputString: {$ifdef UNICODE}String{$else}WideString{$endif}): Boolean;
  end;
  PML = TProcessMonitorLogger;

implementation

{ TProcessMonitorLogger }

//function CTL_CODE(const ADevType, AFunc, AMethod, AAccess: Cardinal): Cardinal; inline;
//begin
//  Result := (ADevType shl 16) or (AAccess shl 14) or (AFunc shl 2) or AMethod;
//end;

{$IF CompilerVersion >= 21}
class constructor TProcessMonitorLogger.Create;
begin
  FDevice := INVALID_HANDLE_VALUE;
end;

class destructor TProcessMonitorLogger.Destroy;
begin
  Close();
end;
{$IFEND}

class procedure TProcessMonitorLogger.Close;
begin
  if INVALID_HANDLE_VALUE <> FDevice then
    begin
      CloseHandle(FDevice);
      FDevice := INVALID_HANDLE_VALUE;
    end;
end;

class function TProcessMonitorLogger.Open(): THandle;
begin
  if INVALID_HANDLE_VALUE = FDevice then
    FDevice := CreateFile('\\.\Global\ProcmonDebugLogger',
                            GENERIC_READ or GENERIC_WRITE,
                            FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
                            nil,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL,
                            0);
  Result := FDevice;
end;

class function TProcessMonitorLogger.Output(const AOutputString: {$ifdef UNICODE}String{$else}WideString{$endif}): Boolean;
var
  lProcMonHwnd: THandle;
  lInputLength: Cardinal;
  lOutputLength: Cardinal;
  lLastError: Cardinal;
begin
  Result := False;
  if AOutputString = '' then
    SetLastError(ERROR_INVALID_PARAMETER)
  else
    begin
      lProcMonHwnd := Open();
      if lProcMonHwnd <> INVALID_HANDLE_VALUE then
        begin
          lInputLength := Length(AOutputString) * SizeOf(WideChar);
          lOutputLength := 0;
          Result := DeviceIoControl(lProcMonHwnd,
                                    IOCTL_EXTERNAL_LOG_DEBUGOUT,
                                    PWideChar(AOutputString),
                                    lInputLength,
                                    nil,
                                    0,
                                    lOutputLength,
                                    nil);
          if not Result then
            begin
              lLastError := GetLastError();
              if lLastError = ERROR_INVALID_PARAMETER then
                SetLastError(ERROR_WRITE_FAULT);
            end;
        end
      else
        SetLastError(ERROR_BAD_DRIVER);
    end;
end;

{$IF CompilerVersion < 21}
initialization
  TProcessMonitorLogger.FDevice := INVALID_HANDLE_VALUE;
finalization
  TProcessMonitorLogger.Close();
{$IFEND}
end.

Usage:

uses
  ProcMonDebugOutput;
begin
  PML.Output('How hard could it be?');
end;

Posted in Delphi, Tips and Tricks | Tagged: , , , , , , , | 10 Comments »

Changing an Office add-in’s load behaviour in multi-user environments

Posted by tier777 on 2009-12-11

Let’s say you have bought or downloaded some third-party Office COM-addin to use on your Citrix- or Terminal Server. Many of these will by default install for all users. What if for one reason or another you only want to let a subset of your users work with that addin? Well, here’s what:

Office determines what addins to load by looking at the entries below the following two registry keys:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\OfficeApp\Addins]

[HKEY_CURRENT_USER\Software\Microsoft\Office\OfficeApp\Addins]

(where OfficeApp should be replaced with Outlook, Word, Excel, etc.)

The sub-entries will be named after the addin’s ProgID, e.g. “Microsoft.VbaAddinForOutlook.1″ is one included by default with most versions of Office. From the name it should typically be fairly obvious which entry belongs to the particular addin that you’re after. For the purpose discussed here it is irrelevant what values these sub-entries actually contain.

As you may have guessed the entries under HKLM define which addins get loaded for all users while the entries under HKCU define the ones that should be loaded for that user only. Thus, in order to change an addin’s load behaviour from “all users” to “some users” all you have to do is essentially move the relevant entry from HKLM to HKCU, e.g. by exporting the entry into a .reg-file and then deleting it, then using notepad to change the hive to HKEY_CURRENT_USER and finally re-import that .reg-file again for the users that should use the addin (or just use a group policy object). Remember that you will have to repeat this whenever you install an update of the addin in question as that will probably rewrite the entry under HKLM.

More details about addin registration from a developer’s point of view can be found on MSDN:

Registry Entries for Application-Level Add-ins
(You can disregard the note about registration for all users being ignored in that article as that only applies to VSTO-addins, not to COM-addins)

Posted in Outlook, Tips and Tricks | Tagged: , , , , , , , | Leave a Comment »

So that was Lucky 13 for me…

Posted by tier777 on 2009-10-07

Marco has already blogged about it and now here is my report from this year’s Entwicklerkonferenz, aka Delphi Live Germany in Darmstadt.

First off, I was pleased to see that attendance was definitely better than last year (where David I’s opening keynote was seen by about 30 people tops), though that might in part have been caused by the unfortunate hotel situation back then. I haven’t heard of any definite numbers yet but my personal estimation would be that there were slightly more than a hundred people this year (which is of course still way below the numbers of a few years back). During the opening’s obligatory hand-raising segment only two or three people indicated they were there for the very first time. A harsh contrast to the results of the Delphi Tage event earlier this year where about a third of the audience outed themselves as first-timers.

A welcome gimmick (for me at least) was an offer for returning attendees of the conference to get a “free” netbook. Though I have to strongly object to the “free” part of the campaign (you had to waive the usual “early bird” rebates when claiming it, so effectively you paid more than you otherwise would have), this worked out really well for me as I did not own such a thing so far and it worked fine right out of the box.

Another small thing that I found very nice compared to previous years was that in all conference rooms you were able to sit at an actual table (well, except for when they underestimated the attendance and had to bring in extra chairs which happened to me two or three times), which is not only more comfortable because of the additional leg space but also makes taking notes so much easier.

Sessions

As in most years I got to see some exceptional talks. Here are some of the ones that stood out for me:

Hadi on Test Driven Design

This was a real eye-opener on many levels while being at the same time very entertaining and thorough. I especially appreciated how Hadi took the time to present the entire thought process behind the concept but doing so in a very subtle way that made it feel very natural how all the bits fell into place.

Another very memorable bit of this talk was something that Hadi essentially tacked on at the end in response to a question from the audience: It was a one-liner for a .NET mocking framework that essentially returned a dynamically created (mock) object that implemented a given interface… it took a couple of seconds to sink in for me… this is just a little bit mind-bending if you really think about it. I want this in Delphi Win32! Now with the revived RTTI support in Delphi 2010 I think we’re already heading in the right direction that will eventually lead towards such functionality.

Ray‘s keynote on Effective UI Design

I think every developer should go see this talk at least once (I think I’ve seen it three times now in various incarnations and it just keeps getting better). This time Ray also included some (IMHO) very valid concerns about recent changes in the Delphi IDE, especially the Options dialogs. I couldn’t agree more.

Daniel (M) on advanced Debugging techniques

Even though this was already a highly informative and entertaining talk in its own right this would already have been worth it just for showing SafeMM alone! You should check it out, too: It’s a special-purpose memory manager created used by the CodeGear debugger team (thanks Chris for the clarification) to catch improper memory access directly where it happens rather than having to wait for the symptoms of such mistakes. If I understood Daniel correctly it’s a branch of FastMM.

Olaf on the new RTTI system

Can’t wait to get my hands on Delphi 2010 after this talk even though I had seen some of the new stuff at CodeRage already. This is a major milestone!

Jim and Sebastian on AOP using Delphi Prism (actually two individual talks)

This is a really new and intriguing concept and a great approach for separating concerns and getting rid of repetitive code without actually hiding it. The whole “Unquote” thing remains a bit of a mystery, though even after having seen both talks. I guess it’ll probably become clearer as you actually write aspects yourself.
Can’t wait to have aspects in Win32 even though I can well imagine that it will be some time before we see this as it will need really deep compiler support and I know what I would like the CodeGear compiler guys to focus on first instead (hint: there will be a 64-bit edition of Office 2010).

Marco and Daniel (W) on developing for Windows 7 (two individual talks)

Not really a lot of new things if one has been following the blogosphere and played around with Seven oneself already but still very informative and well-presented. I can also now say that I was there as it happened;)

Closure

A couple of last things I’m afraid I will have to get off my chest:

I was a bit underwhelmed if not even a little disappointed with the presence and (perceived) involvement of Embarcadero Germany as compared to past conferences(!), especially considering that they were again the Gold Sponsor of this conference: Their booth (which was pretty much hidden away behind a pillar) in the expo area was empty whenever I checked. They also didn’t advertise any conference rebates or raffle prizes as was customary in past years (though this post (in German) seems to suggest that a rebate offer might still be forthcoming by email).

Another slightly unnerving thing for me was that the conference IMHO missed a proper sense of closure: The agenda did not contain a closing session to boot. After the last session the conference was simply over. I could do without the endless raffle drawing of past years (even though one is of course always secretly hoping against hope to win something worthwhile) but I would have preferred at least to see the conference end with a speaker panel and a closing statement from representatives of CodeGear and Software&Support like there always was in past years. I might only be projecting my own feelings at others but I was under the impression that I was not the only one who felt a little bit “ordered but uncollected” (as we say in German) while we were standing in the lobby realizing that this was it and we could go home now.
Before anyone mentions it: there actually was a spontaneously(!) held raffle drawing but it started the very minute that the last sessions were scheduled to end (and we all know that speakers never exceed their time slots, don’t we) and lasted for about 15 minutes. By the time that I came out of the last session it was already over.

Anyway, I am very much looking forward to EKON 14 and other community events that will hopefully be happening during the next 12 months. See you there!

Posted in Delphi, Events | Tagged: , , , , | 7 Comments »

10 clicks…

Posted by tier777 on 2009-08-25

In the best case scenario it takes me at least ten clicks, 5 of which are redundant, and quite a bit of lucky guessing, to get from the “immediate purchase” link in the Delphi 2010 press release to a page where I see even so much as a price tag… and still left wondering whether this is even the best offer… isn’t that a bit… erm, how do I put this… ridiculous?

  1. Click “immediate purchase”
  2. Click “Europe”
  3. In the “Germany” section, click “Find an International Distribution Partner”
  4. In the “By country” section, drop down the selection list
  5. scroll down
  6. select “Germany” (again! – see 3.)
  7. Click “Submit”
  8. Select one out of 32 arbitrary vendors from the Partner Directory (and be sure to click the link in the right hand column as otherwise you will have to click once more to actually get to the vendor’s page), many of which do not even appear to have an online shop at all as far as I can tell… Most do not even mention Delphi or RAD Studio on the front page.
  9. If you took a lucky guess in the previous step the vendor will have a direct link to the Delphi product page on its front page. If so, click it. Otherwise take however many clicks it takes you on that vendor’s page to select Delphi (again! – see 1.) from the product catalog.
  10. Click through to the page with the pricing information only to find out that, as usual, there is a whopping 43% premium for European customers on the Pro upgrade ESD!

So much for “immediate purchase”…

In the words of Donna Noble: You’ve got to be kidding me!

That said, Delphi 2010 does still look like a worthwhile point upgrade from a technical POV… My sincerest kudos to the R&D team!


here’s my calculation, in case you were wondering:

  • Delphi Pro UPG ESD in US online shop:   399 USD ~ 279 EUR (as of the time of this writing)
  • Delphi Pro UPG ESD in EU online shop: ~399 EUR excl. VAT
  • 120 EUR difference! (~43% of 279 EUR)

Posted in Delphi, Rants | Tagged: , , , , , , | 4 Comments »

Discount coupon for Add-in Express

Posted by tier777 on 2009-06-10

This was originally only intended for the attendees of my talk at the Delphi-Tage, but I now got permission to post it here on the blog, especially as the code had only arrived in my Inbox a mere 30 minutes after I had already left for Hamburg and so I wasn’t able to show it during the talk at all (it will be included in the slides that should be made available for the participants within the week via the delphi-tage.de page, though):

Using the code ADX-VCLSTD30 you can order Add-in Express 2009 for Office and VCL Standard at a 30% discount. The code is valid until 10 July 2009. Note that you can upgrade from this discounted Standard version to Professional or Premium for the respective price difference between Standard and Professional or Standard and Premium. Also note that even if you make use of the discount you will still have an unconditional 30 day money-back guarantee.

For the differences between Standard, Pro and Premium please refer to the Feature Matrix.

If 30% on the Standard version is not enough for you, I’d like to direct your eyes in the general direction of their discounts and special offers page. There should be something for anyone there, really.

And so the circle closes… ;) a similar offering was also how I first heard about Add-in-Express almost exactly two years ago.

In case you’re wondering: Add-in Express is a VCL framework for true RAD-development of all kinds of Office addins (besides advanced Outlook addins you can also create addins for all other Office products as well as SmartTags and Excel RTD Servers) with special focus on seamless integration with the Office GUI. This allows you to really concentrate on the essential functionality of your addin right from the get-go rather than wasting days or weeks on tasks like trying to get a simple commandbar button to work across all Office versions.

P.S. : As I continue producing flash videos about Outlook addin-development I will eventually cover Add-in Express as well. In the meantime, you can take a look at their own Screencasts.

Posted in Delphi | Tagged: , , , , , | Leave a Comment »

Resources for Developing Outlook-Addins with Delphi

Posted by tier777 on 2009-06-09

[deutsche Fassung dieses Artikels: siehe voriger Eintrag]

Here’s a commented list of links that accumulated during the preparation for my talk on developing Outlook-addins with Delphi at last weekend’s Delphi-Tage event in Hamburg (also containing some information that I did not end up covering for various reasons):

Official API-References and related Information:

Source code, Tutorials and Example-Addins:

  • Extended MAPI-Headers for Delphi:
    http://dimastr.com/outspy/download/MAPI_headers.zip
    (indispensable for any kind of Extended MAPI development, also when combined with Redemption – see below)
  • BabelFish for Outlook:
    http://dimastr.com/babelfish/
    (the required target WebService is no longer online but the source code of this addin works very well as a starting point for new addins)
  • Trust Filter for MS Outlook:
    http://www.benziegler.com/TrustFilter/
    (a non-trivial Outlook-Addin with freely available source code, written in Delphi)
  • OutlookCode.com – Developer Learning Center for Microsoft Outlook
    http://outlookcode.com
    (Heaps of examples, articles, tutorials, links, etc. – mostly VB(A/S) or C# rather than Delphi, though)
  • Slipstick.com – Outlook & Exchange Solutions Center
    http://slipstick.com
    (the definitive information portal for all things Outlook and Exchange)

Products presented or used:

Miscellaneous:

(Attention! Time for a quick commercial break. ;) )

  • Lucatec GmbH:
    http://www.lucatec.de
    (my “hand that feeds”, without whom this talk wouldn’t have happened)
  • Lucatec® Mask:
    http://lucatec.net/mask/
    (our addin for automating several tasks related to the use of shared mailboxes or Public Folders in a team, Shareware)

(end of commercial break)

  • techvanguards.com
    http://www.techvanguards.com/
    (extensive articles and tutorials all about COM programming with Delphi and C++-Builder by Binh Ly – a real eye-opener for anyone that has been struggling with this topic so far)
  • You can use the following .reg-file to perform registration and unregistration of COM-DLLs directly from the Explorer context menu:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\dllfile\shell]
@="openas"

[HKEY_CLASSES_ROOT\dllfile\shell\Register]

[HKEY_CLASSES_ROOT\dllfile\shell\Register\command]
@="regsvr32.exe \"%1\""

[HKEY_CLASSES_ROOT\dllfile\shell\Unregister]

[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
@="regsvr32.exe /u \"%1\""

Posted in Delphi, Outlook | Tagged: , , , | Leave a Comment »

Ressourcen zum Delphi-Tage 2009 Vortrag “Entwickeln von Addins für Microsoft Outlook mit Delphi”

Posted by tier777 on 2009-06-09

de [please see next post for an English version of this post]

Bevor ich die Slides meines Vortrages an Daniel zur ZIPpung weitergebe, hier schon einmal meine kommentierte Liste aller Links, die ich während der Vorbereitung zusammengetragen habe (enthält auch Informationen zu  einigen aus Zeit- und anderen Gründen leider entfallenen Themen):

Offizielle API-Referenzen und Infoquellen:

Quellcode, Tutorials und Beispiel-Addins:

  • Extended MAPI-Header für Delphi:
    http://dimastr.com/outspy/download/MAPI_headers.zip
    (unverzichtbar für jede Art von Extended MAPI-Programmierung, auch im Zusammenspiel mit Redemption – siehe weiter unten)
  • BabelFish for Outlook:
    http://dimastr.com/babelfish/
    (der angesteuerte WebService ist leider nicht mehr im Betrieb, aber der Quellcode dieses Addins ist ideal als Ausgangspunkt für eigene Addins geeignet)
  • Trust Filter for MS Outlook:
    http://www.benziegler.com/TrustFilter/
    (nicht-triviales, in Delphi geschriebenes Outlook-Addin mit Quellcode)
  • OutlookCode.com – Developer Learning Center for Microsoft Outlook
    http://outlookcode.com
    (Unmengen von Beispielen, Erläuterungen, Tutorials, Links, etc. – meist leider eher VB(A/S) oder C# als Delphi)
  • Slipstick.com – Outlook & Exchange Solutions Center
    http://slipstick.com
    (das Informationsportal schlechthin für alles, was mit Outlook und Exchange zu tun hat)

Vorgestellte bzw. verwendete Produkte und Tools:

Verschiedenes:

(Achtung! Kurze Werbeunterbrechung. ;) )

  • Lucatec GmbH:
    http://www.lucatec.de
    (mein Brötchengeber, ohne den mein Vortrag gar nicht möglich gewesen wäre)
  • Lucatec® Mask:
    http://lucatec.net/mask/
    (mein “Baby” ;) : ein Addin zum Automatisieren verschiedenster Arbeitsschritte bei der (Team-)Arbeit mit gemeinsam genutzten Postfächern oder Öffentlichen Ordnern, Shareware)

(Werbung Ende)

  • techvanguards.com
    http://www.techvanguards.com/
    (Ausführliche Artikel und Tutorials rund ums Thema COM mit Delphi und C++-Builder von Binh Ly – ein echter Augenöffner, für alle, die sich bisher mit dem Thema nur gequält haben)
  • Die folgende einfache .reg-Datei könnt Ihr verwenden, um die (De-)Registrierung von DLLs einfach über das Explorer-Kontextmenü durchzuführen:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\dllfile\shell]
@="openas"

[HKEY_CLASSES_ROOT\dllfile\shell\Register]

[HKEY_CLASSES_ROOT\dllfile\shell\Register\command]
@="regsvr32.exe \"%1\""

[HKEY_CLASSES_ROOT\dllfile\shell\Unregister]

[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
@="regsvr32.exe /u \"%1\""

Posted in Delphi, Outlook | Tagged: , , , , | 1 Comment »

Delphi Tage 2009 – Recap

Posted by tier777 on 2009-06-07

[deutsche Fassung dieses Artikels: siehe voriger Eintrag]

So, I am back from this year’s Delphi-Tage (“Delphi Days”) in Hamburg and had a little time to let the impressions sink in a little. As has been mentioned by many participants, the uniqueness of the venue will be hard to top for future events (but then, why should it have to? – after all, it’s the overall-experience, the people, the sessions and of course Delphi that should be the main attraction, shouldn’t it?)

Der Veranstaltungsort - Die Cap San Diego

This year's venue - The Cap San Diego

Publikum bei David's Keynote

Audience at David I's Keynote

(more pictures can be found in the coresponding  album on the DelphiPraxis forum, as well as on the Delphi-Treff site)

A big praise to Daniel Wolf for organizing the “pre-con” barbecue at “cult” football club FC St. Pauli’s where we met in a nice setting with great food and a couple of nice cold beers where you could also chat pleasantly about non-programming, non-Delphi-related topics for a change, all in the middle of the vibrant (German part of the) Delphi community.

The main event started on Saturday morning. Attendance was pretty high (over 250 people, including speakers and exhibitors, if I overheard that correctly). I was especially pleased to see so many “out” themselves as first-timers during the hand-raising section at the conclusion of the event. And the average age of the audience was also way lower than I have seen at similar events in the past which can only be a good sign, right?

David I’s keynote offered little new to anyone who had been following the coverage of last month’s  Delphi Live! conference in San Jose. It’s nevertheless always a joy to see and hear David talking. You just totally get that there is someone who’s truly got his heart in what he’s saying.

After a quick break started the first round of sessions, whereas I myself unfortunately wasn’t able to see a lot of it as I had to leave during the coffee break to find a less pricey parking space for my car and only returned (quite out of breath and sweating) for the second half of Jeroen Pluimers‘ very hands-on talk about IDE-addins and other useful tips for increasing developer productivity. Though, as at that point the room was so full that I had to stand in the doorway to the adjoining second session room, where Bernd Ott was doing an equally interesting talk about Subversion I was only able to watch and listen with half an ear and eye.

Bernd Ua - Softwaretests

Bernd Ua - Softwaretests

After that I went to see Bernd Ua’s talk about software testing and DUnit which I watched from quite an unusual viewpoint (see picture to the left). In the meantime the time for my own talk was rapidly approaching and as this was going to be the first of its kind since almost exactly 9 years to the day (minus a month), my tension was rising considerably. As a result I could unfortunately only watch the first half of Daniel Wischnewski’s entertaining talk about the  Windows 7 Taskbar as at that point I had to step out for a quick breath of fresh air.

My own talk then was a bit of a mixed bag: While I did manage to shed most of the nervousness and was able to answer all questions from the audience, I feel that in hindsight I probably made some less than ideal decisions about weighting the individual parts of the talk in an effort to get everything in there that I had announced I would cover. Sadly, time ran out on me even before I got to the concluding segment about Extended MAPI and Redemption so I could only hasten through the slides about those topics rather than actually show some practical examples.

Well, one should learn from one’s mistakes. I will try to cover the bits that got a bit of a short end here on the blog in the form of more videos and also to do better at the next live talk. I hope everyone was still able to take away something interesting for him or herself. Please feel free to post any unasked questions here on the comment thread.

One note to the organization team regarding breaks: Please make sure that next time there will always be at least 10 minutes between sessions. That way people will actually have some time to get from one session to the next if it is in a different room than the previous one and also to step out to catch some fresh air or for taking last break’s coffee to the pottery department and so on. Furthermore, as a speaker you typically also need a couple of moments before you have got all the wiring in place and your notebook booted up properly. As most speakers (including my predecessor and me) made use of their time slot to the very last second that set-up time had to count against the regular session time while all the while the audience was already champing at the bit. ;)

The day’s finale in the Gröninger Brauhaus was quite pleasant and fun. In my mind the pub/restaurant visit at the end has really become a stock item of the Delphi Tage events in its own right.

The first thing I found in my inbox when I turned on my computer for the first time since my return was a belated (actually, it had arrived a mere 30 minutes after I had left for Hamburg) email from the Add-in-Express team, containing a 30% rebate coupon for the attendees of my talk. I will make sure to include that in my slides before I send them off. Speaking of which, the slides of the entire event (including mine) will shortly be made available  via the DelphiPraxis forum as one big downloadable ZIP-archive. I will post the link here once it is available.

Posted in Delphi | Tagged: , , | Leave a Comment »

Delphi Tage 2009 – Rückblick

Posted by tier777 on 2009-06-07

de

[please see next post for an English version of this article]

So, nun bin auch ich zurück von den diesjährigen Delphi-Tagen in Hamburg und hatte ein wenig Zeit, die Eindrücke auf mich wirken zu lassen. Wie schon vielfach erwähnt, wird sich die Ausgefallenheit der Location wohl nur noch schwer übertreffen lassen (muss ja aber auch gar nicht – schließlich soll ja das Gesamterlebnis, die Leute, die Vorträge und nicht zuletzt Delphi im Vordergrund stehen).

Der Veranstaltungsort - Die Cap San Diego

Der Veranstaltungsort - Die Cap San Diego

Publikum bei David's Keynote

Publikum bei David's Keynote

(weitere Bilder gibt es übrigens im entsprechenden Album der DelphiPraxis, sowie beim Delphi-Treff)

Großes Lob an Daniel auch für die Organisation des “pre-Con” Grillabends im Clubheim des FC St. Pauli wo man sich in netter Atmosphäre, mit leckerem Essen und einem schönen kühlen hanseatischen Bier unter die Delphi-Community mischen konnte, und dabei auch mal über andere Dinge, als nur Programmieren und Delphi reden konnte.

Weiter ging es am Samstag Morgen. Die Veranstaltung war sehr gut besucht (ca. 250 Leute einschließlich Speaker und Aussteller, wenn ich Daniel richtig verstanden habe). Besonders erfreulich fand ich auch die besonders große Anzahl von Leuten, die sich bei der abschließenden “Hände-heben”-Runde als Erstbesucher “geoutet” haben. Der Altersdurchschnitt lag meinem Empfinden nach auch etwas niederiger als bei früheren Events, was ja nur ein gutes Zeichen sein kann.

Die Keynote von David I bot wenig Neues, sofern man die Berichterstattung zur Delphi Live!-Konferenz im letzten Monat verfolgt hatte. Trotzdem finde ich es immer wieder erfrischend, David reden zu hören. Man merkt einfach, dass er mit Leib und Seele bei der Sache ist.

Weiter ging es mit den ersten Runde Sessions, wobei ich davon selbst leider nicht mehr viel mitbekommen habe, da ich die Kaffeepause nutzten musste, um einen kostengünstigeren Parkplatz für meinen Smart zu suchen. Zumindest die letzte Hälfte von Jeroens Vortrag über IDE-Addins und sonstige nützliche Tipps zur Produktivitätssteigerung konnte ich noch mit halben Ohr und Auge verfolgen – leider war der Raum so voll, dass ich nur im Durchgang zum Nebenraum stehen konnte, wo Bernd Ott einen ebenfalls sehr interessanten Vortrag zum Thema Subversion hielt.

Bernd Ua - Softwaretests

Bernd Ua - Softwaretests

Danach ging es für mich ohne Pause weiter mit Bernd Uas Vortrag zu Softwaretests und DUnit, welchen ich aus ungewohnt luftiger Höhe verfolgt habe… (siehe Bild links).

In der Zwischenzeit rückte mein eigener Vortrag immer näher und da dies der erste seit fast auf den Tag genau 9 Jahren sein sollte (abzgl. einem Monat), stieg die Anspannung bei mir entsprechend. Sakuras Vortrag über die Windows 7 Taskbar konnte ich leider entsprechend auch nur zur Hälfte verfolgen, da ich erst noch ein wenig Frischluft schnappen musste.

Mein eigener Vortrag schließlich war eine gemischte Angelenheit: Zwar konnte ich meine Nervosität größtenteils noch ablegen und konnte auch alle Zwischenfragen beantworten, aber meine Entscheidungen zur Zeitaufteilung und Gewichtung  der einzelnen Vortragsteile waren, im Nachhinein betrachtet, glaube ich nicht ganz ideal und obendrein reichte die Zeit leider gar nicht mehr für den abschließenden Teil zum Thema Extended MAPI und Redemption, wodurch ich zu diesem Thema nur noch im Eiltempo die Slides durchklicken konnte, anstatt echte Praxisbeispiele zu zeigen.

Nun ja, wie sagt man: aus Fehlern lernt man. Ich werde versuchen, die zu kurz gekommenen Teile hier in Blog- und Videoform nachzureichen und es beim nächsten Live-Vortrag besser zu machen. Ich hoffe, es konnten trotzdem alle Anwesenden das eine oder andere für sich mitnehmen. Konkrete Fragen beantworte ich auch gerne hier im Kommentar-Thread.

In Sachen Pausen nochmal eine kleine Anmerkung für die Organisatoren: Bitte beim nächsten Mal auch zwischen den Vor- und Nachmittagssessions noch 10-15 Minuten Pause lassen, so dass die Teilnehmer auch Zeit haben, von einer Session zur nächsten zu laufen, nochmal (eine Stange) Frische Luft zu schnappen, die Getränke aus der letzten Pause in die Keramikabteilung zu tragen und so weiter. Außerdem braucht man ja auch als Speaker noch einen kurzen Moment, bevor man sein Notebook ordnungsgemäß verkabelt und hochgefahren hat. Da die meisten Speaker, so wie auch mein Vorredner und ich, ihre Zeit (mehr als) voll ausgenutzt haben, mussten diese Vorarbeiten dann alle schon während der eigentlichen Session-Zeit erledigt werden, während das Publikum schon mit den Füßen scharrte… ;)

Den Ausklang des Tages im Gröninger Brauhaus fand ich schließlich auch sehr amüsant und gesellig (ich sag nur: “JUUUUNGS!!!” ;) ). Das gehört für mich mittlerweile auch einfach zu den Delphi-Tagen dazu.

Das erste, was ich schließlich heute morgen in meinem Posteingang fand, war ein 30%-Gutscheincode, welchen mir das Add-in-Express-Team etwas verspätet (um genau zu sein: 30 Minuten nach meiner Abreise am Freitag) für die Teilnehmer meines Vortrages zugesandt hatte. Ich werde diesen auf jeden Fall noch mit in die Slides einbauen, bevor ich Sie verfügbar mache.

Apropos, die Slides der gesamten Veranstaltung, einschließlich meiner, wird es in Kürze über die DelphiPraxis als großes ZIP-Archiv zum Download geben. Ich werde den entsprechenden Link dann auch noch einmal hier posten.

Posted in Delphi | Tagged: , , , | 1 Comment »

Creating Outlook-Addins with Delphi – Part 2 (Option Pages)

Posted by tier777 on 2009-06-04

Creating Outlook-addins with Delphi - Part 2

So, here’s the second example on creating Outlook-Addins with Delphi which will likely not be included in my talk at the German Delphi-Tage due to time constraints.

In this one I show how to add an option page to your addin, which is typically used for letting the user configure your addin or for displaying version and contact information.

Again, raw and unedited (I’m probably talking too fast in this one). Recorded at 1024×768 in English, 9 minutes and 28 seconds.

Enjoy.

[Part 1]

Posted in Delphi, Outlook | Tagged: , , , , , , , | Leave a Comment »

 
Follow

Get every new post delivered to your Inbox.