EKON 12 Topics#

Well, I just wanted to ask you guys, what topics would you like to hear about on EKON 12 Spring - currently I am at submitting my proposals for the conference and there is still some room left for one or two sessions to hand in. Anything specific you want to hear about?

Drop me a line, please and let me know.

Monday, October 29, 2007 1:36:30 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Google AdSense


The day the routers died...#

A few minutes ago a member of the Delphi-PRAXiS posted a link to YouTube showing a great video, though the singer could use some more lessons on singing ;-)

a long long time ago
i can still remember
when my laptop could connect elsewhere

and i tell you all there was a day
the network card i threw away
had a purpose - and worked for you and me....

But 18 years completely wasted
with each address we've aggregated
the tables overflowing
the traffic just stopped flowing....

And now we're bearing all the scars
and all my traceroutes showing stars...
the packets would travel faster in cars...
the day....the routers died

Chorus (ALL!!!!!)

So bye bye, folks at RIPE 55
Be persuaded to upgrade it or your network will die
IPv6 just makes me let out a sigh
But I spose we'd better give it a try
I suppose we'd better give it a try

Now did you write an RFC
That dictated how we all should be
Did we listen like we should that day

Now were you back at RIPE fifty-four
Where we heard the same things months before
And the people knew they'd have to change their ways....

And we - knew that all the ISPs
Could be - future proof for centuries

But that was then not now
Spent too much time playing WoW

ooh there was time we sat on IRC
Making jokes on how this day would be
Now there's no more use for TCP
The day the routers died...
Chorus (chime in now)

So bye bye, folks at RIPE 55
Be persuaded to upgrade it or your network will die
IPv6 just makes me let out a sigh
But I spose we'd better give it a try
I suppose we'd better give it a try

I remember those old days I mourn
Sitting in my room, downloading porn
Yeah that's how it used to be....

When the packets flowed from A to B
via routers that could talk IP
There was data..that could be exchanged between you and me....

Oh but - I could see you all ignore
The fact - we'd fill up IPv4

But we all lost the nerve
And we got what we deserved!

And while...we threw our network kit away
And wished we'd heard the things they say
Put all our lives in disarray

The day...the routers died...
Chorus (those silent will be shot)

So bye bye, folks at RIPE 55
Be persuaded to upgrade it or your network will die
IPv6 just makes me let out a sigh
But I spose we'd better give it a try
I suppose we'd better give it a try

Saw a man with whom I used to peer
Asked him to rescue my career
He just sighed and turned away..

I went down to the net cafe
that I used to visit everyday
But the man there said I might as well just leave...

And now we've all lost our purpose..
my cisco shares completely worthless...

No future meetings for me
At the Hotel Krasnapolsky

and the men that make us push and push
Like Geoff Huston and Randy Bush
Should've listened to what they told us....
The day...the routers....died
Chorus (time to lose your voice)

So bye bye, folks at RIPE 55
Be persuaded to upgrade it or your network will die
IPv6 just makes me let out a sigh
But I spose we'd better give it a try
I suppose we'd better give it a try

Words and performance by Gary Feldman

Monday, October 29, 2007 12:44:54 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Sending Emails with Indy (UTF-8)#

The other day I was a little dumbfounded. One of our systems is doing all string work using WideStrings and based on UTF-8, currently the probably best choice for international web sites. However, when sending Emails we depend on the Indy component library. Well, this worked pretty well until one customer decided to send e-mails in greek. Having been there this year, I realized the question marks all over the incoming e-mails where not what greek looks like ;-)

Upon investigating the source of the problem, I quickly realized that the Indy component library is still using the good old string type all over the place. Using UTF-8 and WideString everywhere I did never have to convert them to the standard Delphi string ever, but now I had too. I just did not know how to, there are quite a few functions that take a WideString and return an (Ansi)string. But which is right? Well, I asked Olaf Monien, one of the big supporters of the Indy component library to help me out.

The correct function to use is UTF8Encode. Thank you. Using TIdMessage, you have to set the CharSet property to 'UTF-8' as well. Due to a bug in plain text messages, you have to set the ContentType property to 'text/plain; CharSet=UTF-8' as well. I am sure, Olaf will check in some fix rather soon.

Sunday, October 28, 2007 3:14:23 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Delphi Code Camp - Windows Vista#

Vom 3. - 5. Dezember macht das Delphi Code Camp seinen ersten Stop in München. An drei Tagen erhalten Sie von drei Speakern viele Tipps und Tricks rund um die Softwareentwicklung mit der CodeGear Delphi IDE. Ich werde Sie am ersten der drei Tage durch die Änderungen von Microsoft Windows Vista führen und Ihnen näher bringen, was sich durch Microsofts neuestes OS für Ihre Software ändert.

Dieser Kurs bringt Ihnen als Delphientwickler das neue Betriebssystem Windows Vista näher. In Windows Vista hat Microsoft einige Spielregeln verändert, die man kennen sollte, damit auch die eigene Software problemlos funktioniert.

Sie erhalten alle Informationen, die Sie benötigen, um Ihre Software schnellstmöglich einsatzbereit für Windows Vista zu gestalten. Gleichzeitig können Sie die Software auch so gestalten, dass Sie neue Features von Windows Vista nutzen können, ohne den Nutzer zum Umstieg zu zwingen.

Agenda

09:30 – 10:00 Einführung in Windows Vista aus Sicht eines Entwicklers (Win32/64 vs. .NET 2.0/3.0)
10:00 - 10:45 Softwarekompatibilität unter Windows Vista testen, Virtualisierungen von Dateisystem und Registry, Signierung von Anwendungen und der WinQual-Service von Microsoft
10:45 – 11:00 Pause mit Erfrischungen und Snacks
10:00 – 11:30 Windows Vista Ready Applikationen (älteren Delphi-Versionen vs. Delphi 2007)
11:30 - 12:30 Windows Vista Benutzerkontensteuerung (UAC), Anwendungslevel verstehen und implementieren
12:30 – 13:30 Mittagessen
13:30 – 14:15 Administrative Tasks starten
14:15 - 15:30 Windows Desktop Search nutzen und unterstützen
15:30 - 15:45 Pause mit Erfrischungen und Snacks
15:45 - 16:30 Windows Vista Application Recovery
16:30 – 17:00 Windows Vista Task Dialoge
17:00 - 17:30 Diskussion sowie Q&A

Weitere Informationen entnehmen Sie bitte der offiziellen Webseite zum CodeCamp.

Sunday, October 28, 2007 3:03:51 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Delphi Code Camp on tour#

The Entwickler Akademie presents the Delphi-CodeCamp in Munich from December 3rd through 5th. Three days compact information on Delphi development for Windows Vista (3rd, me), Rave Reporting (4th, Thomas Pfister) and Web Development (5th, Olaf Monien). All courses will be held in German.

For more information read the Code Camp page or check my German section of the blog in a few days for detailed information on my track!

Wednesday, October 24, 2007 1:06:18 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Abe Sensei in Deutschland - ein Rückblick#

Letzte Woche kam Shihan Keigo Abe aus Japan für ein paar Tage nach Deutschland. Erstmalig kam er auch auf Einladung unseres Dôjôs nach München, um ein dreistündiges Seminar zu leiten. Insgesamt gab es eine sehr positive Resonanz auf das Training. Speziell in der zweiten Einheit ging er tiefer in die Materie einiger Kata und deren Geschichte ein, was sehr guten Anklang bei allen Teilnehmern fand. Neben einigen Übungen für schnellere Beinarbeit gab er uns auch Einblicke in seine Ausführungen bekannter Kata und erläuterte kurz, warum er einige Techniken anders ausführt, als diese bei uns in Deutschland bekannt sind.

Am drauf folgenden Donnerstag reisten wir mit Shihan Abe nach Frankfurt/Oder in das befreundete Dôjô Jitoku. Dort setzte er sein Training fort und vertiefte ähnliche Aspekte durch weitere Methoden des Trainings. Im Anschluss waren wir gemeinsam Essen bei einem sehr guten Italiener am Rathausplatz.

Am Samstag gab es den großen Jahreslehrgang mit Shihan Abe in Bad Oldesloe im Dôjô Wakayama. Auch hier setzte er sein Training fort und nutzte weitere Möglichkeiten uns neuen Ansporn auf den Weg zu geben uns stets und ständig zu verbessern. Im Anschluss gab es die DAN-Prüfungen nach den Vorgaben der JSKA. Prüfer waren, neben Shihan Keigo Abe, Shihan Dieter Flindt (SKVD) und Shihan Robert Sidoli (Yahara Karate / Karate no michi).

Trainer und Schüler meiner Gruppe in München mit Shihan Abe (4.v.l.)
Trainer und Schüler meiner Gruppe in München mit Shihan Abe (4.v.l.)

German | Karate | Leben
Monday, October 22, 2007 1:52:34 PM (W. Europe Standard Time, UTC+01:00) #    Comments [3]  | 

 

QC Plus is released#

Whohooo! Jeremy North has released QC Plus 1.0, finally. I have worked with various beta versions in the last months and it has come a long way since his last official release. If you ever consider helping to improve any of the CodeGear products, you should log bugs into QualityCentral and the best tool around is QC Plus ;-)

Thanks Jeremy for all your time, I hope they will compensate you for your work. Great job done!

Monday, October 15, 2007 5:10:43 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

How to retrieve a list of OU Objects and their parents#

One user of the Delphi-PRAXiS asked, how to retrieve a list of either users or computers with the creation date, name and parents name. Since I had those information available, I just thought I post it here as well. Once again, you simple have to query the active directory using ADO. For the parent however, you need to get the object and then query its Parent property.

procedure TYourForm.btnSearchClick(Sender: TObject);
var
  Conn: _Connection;
  Cmd: _Command;
  RS: _Recordset;
  Affected: OleVariant;
  Line: string;
  Obj: IADsUser;
  procedure RunQuery(Query: string);
  begin
    Cmd.CommandText := Query;
    // run query and return domain list
    RS := Cmd.Execute(Affected, EmptyParam, 0);
    if RS.EOF then
      Exit;
      
    RS.MoveFirst;
    while not RS.EOF do
    begin
      try
        Obj := VBGetObject(RS.Fields.Item[1].Value) as IADsUser;
        Line := Format('%s, %s, %s, %s', [RS.Fields.Item[0].Value, RS.Fields.Item[1].Value, RS.Fields.Item[2].Value, Obj.Parent]);
        mmoReport.Lines.Add(Line);
      except
      end;
      RS.MoveNext;
    end;
  end;
begin
  mmoReport.Clear;

  // create objects
  Conn := CoConnection.Create;
  Cmd := CoCommand.Create;
  // setup objects
  Conn.Provider := 'ADsDSOObject';
  Conn.Open('Active Directory Provider', '', '', 0);
  Cmd.Set_ActiveConnection(Conn);
  Cmd.Properties.Item['Page Size'].Value := 1000;
  Cmd.Properties.Item['Searchscope'].Value := ADS_SCOPE_SUBTREE;

  RunQuery(edtQuery.Text);
end;

Once again, the whole sample is available for download (ZIP, 36 Kb).

Monday, October 15, 2007 1:17:13 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

How to get a list of Domains and Sites#

Someone asked on delphifeeds.com, how to get a list of all domains within an environment. Since I was going to need just the same soon for a application in development right now, I thought I take up the challenge and try my luck. After using Google I found nil solutions using Delphi, so I went to microsoft.com and looked how they do it, using VBScript.

Well, I was lucky and found a solution, but as so often, getting it to work on Delphi is an entirely different task. First you have to find the root naming context of the domain where your application is running. You use the ADs library for that task. From that LDAP-path you replace the prefix with GC, which stands for global catalog.

// get the forest base
try
  DirObj := VBGetObject('LDAP://rootDSE') as IADs;
  Root := (VBGetObject('LDAP://' + DirObj.Get('rootDomainNamingContext')) as IADs).ADsPath;
except
  mmoReport.Lines.Add('Computer is not running in domain setup.');
  Exit;
end;
// replace LDAP with GC (global catalog)
Root := 'GC' + Copy(Root, 5, MaxInt);
mmoReport.Lines.Add(Root);

Next, you query the AD using ADO for the domains or sites, whatever you want. The queries are simple:

Query := 'SELECT Name FROM ' + QuotedStr(Root) + ' WHERE objectCategory=''domain''';
Query := 'SELECT Name FROM ' + QuotedStr(Root) + ' WHERE objectCategory=''site''';

Next, you just iterate the record set, returned after executing your command. A full demo can be downloaded (ZIP, 34 Kb) from my site.

Monday, October 15, 2007 10:48:02 AM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Sensei Sugimura - Ich weiß, dass mein Training langweilig ist#

Gestern waren wir auf einem Lehrgang mit Sensei Sugimura in München. Seine Worte am Ende waren "Ich weiß, dass mein Training langweilig ist." Aber ich muss ihn da doch korrigieren.

Sensei Sugimura arbeitete gestern vorwiegend am Konzept des korrekten Hüfteinsatzes, und wie man dieses bei Kizami- und Gyaku-Tsuki umsetzt. Dazu zog er in den 5 Stunden die Heian Shodan und Nidan Kata, als auch die Bassai Dai heran, um dieses auch hier zu üben. Auch wenn einige seiner Ausschweife etwas langatmig waren, so war der gesamte Tag eine Bereicherung und es hat Spaß gemacht dabei sein zu können. Langweile kam gewiss nicht auf, nur hin und wieder ein paar kalte Füße.

Danke für das Training!

German | Karate | Leben
Sunday, October 14, 2007 3:19:50 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Mietwagen online bestellen - Avis.de#

Inzwischen bin ich ja schon fast ein Stammkunde in der Avis-Station, welche nur 500 Meter von meiner Haustür entfernt ist. Seit über 2 Jahren habe ich jeden Mietwagen dort geholt und zurück gegeben und bin insgesamt sehr zufrieden mit der Truppe vor Ort. Bestellen tue ich aber immer online über Avis.de, weil das entscheidend (sprich ca. 20 Prozent) billiger ist, als in der Station - warum auch immer.

Für nächste Woche wollte ich mir also mal wieder einen Wagen holen und bin auf deren Webseite, welche dieses Jahr ein angenehmes Facelifting erhalten hat. Aber irgendwie scheint die Seite doch noch nicht ganz mit der Technologie Schritt halten zu wollen, so ist die Auswahl der Mietstation inzwischen ein Akt in drei Teilen, bevor ich mir um den Rest Gedanken machen kann.

Das geschafft habe ich mich durch deren Anmietformulare geklickt - die Auswahl der Wagen ist besser als früher - und habe am Ende die Bestellung aufgegeben. Leider fehlt inzwischen die Möglichkeit weitere Kommentare zur Anmietstation via Freitextfeld zu senden, so dass man im Anschluss anrufen muss, wenn man Sonderwünsche hat, welche meistens auch erfüllt werden, sofern möglich.

Aber viel wichtiger, wenn man online bestellt und im Voraus bezahlt (anstatt gut 450 Euro, "nur" 330 Euro), dann erhält man von Avis einen Voucher via Email zugesandt. So auch dieses Mal, nun ja, fast. Es war eine leere Email, in welcher lediglich die Standardsignatur enthalten war. Also noch ein Anruf bei Avis, dieses Mal nicht die Anmietstation, sondern beim Internet Helpdesk irgendwo anders - Telefonnummer nach nur 2 Klicks von der Startseite aus gefunden - und denen gesagt, dass die Email nicht sehr hilfreich ist für die Anmietung. Nun ja, man sendet mir den Voucher dann nochmals via Fax zu. Okay, Nummer raus gegeben und gewartet. Ungefähr 45 Minuten später klingelte das Fax und es kamen Daten an, nur hat das Avis-Fax gemeint "nö!" und die Übertragung abgebrochen. Ich war gerade dabei nochmals bei denen anzurufen, als 30 weitere Minuten später dann doch noch das erwartete Fax kam.

Schöner neuer Internetauftritt, jetzt sollte der doch bitte noch funktionieren. Danke!

Friday, October 12, 2007 2:46:35 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Lehrgang mit Sensei Sugimura in München#

Morgen kommt Sensei Sugimura nach München und gibt einen eintägigen Lehrgang. Ausrichter ist das Karate Dôjô Solln aus München. Teilnahmegebühr sind 16 Euro und wir werden natürlich auch da sein.

Weitere Infos zum Lehrgang entnehmt Ihr bitte der Lehrgangsseite des Ausrichters.

German | Karate | Leben
Friday, October 12, 2007 2:35:19 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Installing Microsoft Silverlight#

I just decided to install Microsoft Silverlight. Microsoft starts to attack the Flash-market with its own tool Silverlight. Well, the first test every application has to take, the Installation Process, and Silverlight failed. Well, it installed alright, however, without any warning or asking whether I want to, it closed all my browser windows (5, each with multiple tabs opened) and reopened only one of those.

Sorry Microsoft, but you can do better than that!

Friday, October 12, 2007 1:50:37 PM (W. Europe Standard Time, UTC+01:00) #    Comments [1]  | 

 

More on Aero-glass and Delphi forms#

Since I just mentioned the Glow Label component for Delphi, I thought I mention a small problem with the glass effect and components placed on areas, where this effect is applied.

The (usually) black parts of the component are not painted correctly, when leaving all settings on default. You have to set the property DoubleBuffered to True, for correct painting of the components. Therefore, I have created a small routine which just does that. Simply pass along the form as parameter, an it will iterate through all controls and set their DoubleBuffer property to True.

procedure DoubleBufferAll(WinControl: TWinControl);
var
  I: Integer;
begin
  if not (WinControl is TBaseVirtualTree) then
    WinControl.DoubleBuffered := True;
  for I := 0 to WinControl.ControlCount - 1 do
    if WinControl.Controls[I] is TWinControl then
      DoubleBufferAll(WinControl.Controls[I] as TWinControl);
end;

Friday, October 12, 2007 1:04:03 PM (W. Europe Standard Time, UTC+01:00) #    Comments [1]  | 

 

Windows Vista Aero - TGlowLabel#

I just thought I mention a small and free control offered by one of our members of the Delphi-PRAXiS. The TGlowLabel inherits from TCustomLabel and gives your label a "shine" on your aero-glass-form. It features:

  • Glow property
  • resizable background to fit glow
  • compatible with TntUniCode-controls
  • Requires CodeGear Delphi 2007 for GlowForms (or one of the many Aero-hacks found in the Delphi-community)

The web site is in German, but you should find the download link without any problems.

Have fun.

Friday, October 12, 2007 12:46:30 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

SmartInspect vs CodeSite - Round 2#

Okay, by now you know that both, SmartInspect and CodeSite are all about logging what happens in your application. You may even have checked out one or both tools. A nice feature both solutions provide is "logging" values to a separate watch windows (toolbox). In CodeSight they named it Scratch Pad, in SmartInspect it's named Watches or Wathces Graph.

So, how exactly does this help you? Let's take the explaination from the CodeSite help on Scratch Pad, to understand what it is all about:

The Scratch Pad is designed to display non-persistent information. The Scratch Pad is very effective when you want to keep track of some information but you do not need to record the information in the message log. Consider tracking the mouse position during mouse move events. It is pointless to send this information to the message log because too much data results. Furthermore, the only relevant value is the most recent mouse position.

Okay, so this idea makes a lot of sense to me. Imagine knowing how many users are online on your website, nothing you really want to log about, but the current number may come in handy, when looking at the log. Now, which of both tools excels here? Well, it is SmartInspect. Why? Simply, while CodeSite only reports the current value for your watch, SmartInspect can display a historical graph of the values, also. Thus, the current value is visible in both tools, but for a "look back in history," only SmartInspect will show you what has happened before.

2 vs. 1

So, this round goes to SmartInspect and thus SmartInspect will take the lead for the first time in this small battle presented to you on my blog ;-)

Wednesday, October 10, 2007 2:33:55 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Delphi Language - Did you know#

Did you know that all Delphi streams automatically support persisting/loading components, just as the IDE uses it? While looking today how again to persist a component state, I came across the methods WriteComponent and ReadComponent. I honestly never saw those before. Therefore persisting a component into a stream is just one line, when you want to have the data in text form, simply use ObjectBinaryToText and ObjectTextToBinary for the transformations. Great, how easy life can be. This method works fo published properties only, but most often this will do just fine.

// code to stream component state to file
FileStream := TFileStream.Create(Filename, fmCreate); 
BinStream := TMemoryStream.Create;
try
  BinStream.WriteComponent(YourComponent);
  BinStream.Position := 0;
  ObjectBinaryToText(BinStream, FileStream);
finally
  BinStream.Free;
  FileStream.Free;
end;

// code to load component streamed component from file
FileStream := TFileStream.Create(Filename, fmOpenRead);
BinStream := TMemoryStream.Create;
try
  ObjectTextToBinary(FileStream, BinStream);
  BinStream.Position := 0;
  BinStream.ReadComponent(YourComponent);
finally
  BinStream.Free;
  FileStream.Free;
end;

As a note, I am sure, I knew this before as I have done that a few years ago already, but hey, sometimes you just forget and rediscover and you are happy again...

Tuesday, October 09, 2007 4:01:39 PM (W. Europe Standard Time, UTC+01:00) #    Comments [6]  | 

 

More on Vista Task Dialogs (JSDialog)#

In my last entry on Vista Task Dialogs I asked whether one should use them on older systems (Windows XP, 9X, 2000, ...) as well, since their look is just different and unknown to the user. Jeremy North posted (may be biased ;)), that he would say yes. Many others said so too, since they perform for the end user much better, then a simple "Yes, No, Cancel Dialog."

However, most components will either work on Vista only (native RAD Studio) or always will display in the nice Vista style, which however, the rest of the application will not. Jeremy North pointed out, that his components support a global variable/setting to change this behavior and allow to display on the "old style." This works nicely and I think answers for me the question whether to use them in my applications or not. Thanks for the Hint, Jeremy, I am not so good at reading documentation...

Simply add the following code to your application to switch to the old "Windows style" display. This checks for Windows Vista and sets the variable accordingly. See below for the result running on Vista vs. Windows XP.

JSDialog.UseOldDialogStyle := SysUtils.Win32MajorVersion < 6;

JSDialog - Vista Task Dialog in Vista Style
JSDialog - Vista Task Dialog in Vista Style

JSDialog - Vista Task Dialog in older Windows Style
JSDialog - Same Vista Task Dialog in older Windows Style

Monday, October 08, 2007 1:49:18 PM (W. Europe Standard Time, UTC+01:00) #    Comments [4]  | 

 

Delphi IDE - Did you know#

I thought I simlpy join the group of guys who let you know one of their favorite functions in the IDE. One I especially like is the column-selection mode, where you can select a rectangle field for copy/delete/etc.

Sample of column selection

Press [Alt]+[Shift]+[Cursor] key to start column selection mode. This mode stays enabled as long as you do not change back. To change back to the defaut selection mode, press [Ctrl]+[O]+[K], which in fact is what many really want to know, since sometimes you enter column selection mode without wanting too. ;-)

Monday, October 08, 2007 1:19:30 PM (W. Europe Standard Time, UTC+01:00) #    Comments [6]  | 

 

Do you remember 1995...?#

Do you remember one of the first official demos given with Delphi? Yes, great... no, well take a look at the video below, I just created. And the developer world was stunned how easy something could be...


Download full size video (2.5 MB)

And who creates the video using Windows Vista (boot & shutdown) and RAD Studio 2007?

Saturday, October 06, 2007 9:52:36 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

The Vista Task dialog components, use them everywhere?#

By now everyone who deems himself at least a medium level programmer for Windows applications, should have at least looked at Windows Vista. And while you toyed around with it, you probably have seen the new Windows Vista task dialogs.


Windows Vista Taks Dialog

Personally, I do really like them. They are clear, tell the user what problem was encountered and gives well explained options. Yes, I know, the good content part still depends on the developer, but you should get the meaning without to much picking at me ;-)

Now, there are many components out there, and the best around is from Jeremy North, called TJSDialog. It supports all Windows Vista features, as well as a few more carefully selected ones. So, if you target Vista users, this component is at least worth looking at.

However, I ask myself something else. While components like Jeremy's allow us to display those dialog types on Windows 9X/XP/... should we as programmers do just that? Those dialogs come with Windows Vista and Vista users will get used to them, as they see them more and more all over their system. But now let's think about our granny, finally getting used to her good old Windows XP and now your application comes along with a totally new style for dialogs. She doesn't know this style, and probably she just thinks: What's that?! So, what do you think, should our applications use the Vista style dialogs on older system, just because they do look good? Is it worth it creating every dialog twice, ...? I am not sure myself. And don't misunderstand me, I really think the new style dialogs are simply great, but shouldn't we keep them to Vista where the user knows what hits her (or him)?   

Saturday, October 06, 2007 3:02:51 PM (W. Europe Standard Time, UTC+01:00) #    Comments [6]  | 

 

SmartInspect vs CodeSite - Round 1#

Well, I created a rather simple project to compare basic speeds of both loggers agains each other. Let me give you the result upfront:

1 vs. 1

Let's take a look why this first combat ended even. SmartInspect, imo has the more logical base settings applied to the viewer. In this case I prefer auto-scrolling for the log turned off. This generally speeds up both clients a lot when many messages are coming in. When auto-scrolling is on, the SmartInspect viewer performs much better than the CodeSight viewer. While SmartInspect updates the autoscroll every few milliseconds (let's say maybe 10 times per second), CodeSite updates the list with every message. With 4500 messages coming in about two seconds, CodeSite will take it's time to update the list, while SmartInspect does not really loose performance whether auto-scroll is turned on or not.

Okay, so on the view side, SmartInspect wins outright. Let's take a look at the application you are writing, the one which implements the logging classes. Here you have to know how both applications are working. For now, we are looking at the "live logging" on the same machine.

CodeSite uses Windows Messages when logging to send the data from your application to the logging application. SmartInspect uses its own TCP protocol. CodeSite needs a dispatcher application running, which the dispatches the data sent from your application to the log viewer, SmartInspect sends those data directly to the viewer. Just as note: both systems allow for file logging and other targets just as well.

Due to using Windows Messages the sending of the messages works asyncronous for CodeSite, therefore your application has almost no performance hits when logging. The application sends its message and goes on without caring whether the logging application has processed it, or not. SmartInspect performs a little less good on this side, your applications sends its data via TCP to the logger and waits until the data are processed. On the other hand, whatever happens in your application, SmartInspect shows it on-time in the logger, while CodeSite may take much longer, since it is processing all messages async.

However, when logging is disabled (default for SmartInspect), both system performances are equally good and almost unnoticable from within your application, therefore, once you inserted logging code into your application, leave it in your code, you may need it later.

Last a screen shot showing both loggers (SI left, CS right) and the test applications, which you may know from somewhere ;-) The modified threading samples are ready for download (13 Kb), however, you need the respective tools for using them. Click the image below for a full size version (700 Kb).


SmartInspect (left) and CodeSite (right)

Saturday, October 06, 2007 2:13:32 PM (W. Europe Standard Time, UTC+01:00) #    Comments [2]  | 

 

SmartInspect - I should have known ;-)#

A few days ago, I blogged about CodeSite, a nice logging software from Raize Software. The next day I got an e-mail from Dennis of Gurock Software, yes that's those guy who created DelphiFeeds.com, telling me about SmartInspect. Now I have a problem. Both tools are great, however, which is the better one. I mailed a few times with Dennis and we talked about SmartInspect and his view about both products. My feelings so far are, that he is right. SmartInspect really performs good.

Using both tools in code, they work mostly the same. Both come with code templates for the newer Borland/CodeGear IDEs and the calls are fairly similar. However, in the background, both tools are going their own unique ways and I'll have to check out performance for both tools.

Looking at the logging-tools: on a first look, CodeSite looks more stylish, however SmartInspect seems to be organized better. I am already seeing my current project being pushed back one or two weeks, while I have to evaluate which of those two tools is going to make it into the production code.

Coming a way as probably most of you, with simple logging to text files, both tools are simply stunning. I am just wondering why I never thought about such solutions earlier. But those tools are great, where ever you are coming from. I'll post a few test results over the coming days and let you know which tool I am going to use in current and future projects.

Stay tuned! Logging is the way to go ;-)

Friday, October 05, 2007 4:00:26 PM (W. Europe Standard Time, UTC+01:00) #    Comments [2]  | 

 

Creating End User Help Systems#

Currently I am looking for a good software to create end user (not developer!) help systems. After testing a few products, I am tending towards Help & Manual from ecSoftware. It supports all features, that we are looking for:

  • Import/Export: HTML Help, WinHelp, Word Documents, XML
  • Export: PDF, Online Help, e-Books, Print Manuals
  • Definition for each topic in which media type to appear
  • Easy "skinning" for each media type
  • Full support for Help IDs
  • Multi-Language support

However, I know many of you have used other systems as well. Which would you recommend? Please be so kind and drop me an e-mail recommending documentation software or leave a comment in my blog.

Thanks,
Daniel

Friday, October 05, 2007 3:37:49 PM (W. Europe Standard Time, UTC+01:00) #    Comments [4]  | 

 

Using the MS LogParser for rough statistics#

A few weeks ago, Steve Trefethen published his Blog entry Publishing IIS log file analysis using Microsoft Log Parser, where he outlined how to use the free software MS Log Parser to run a basic analysis of the log files created by IIS. Today I set up my task scheduler to run two basic tasks once a day to generate Summaries on the most read blog entries as well as the top downloaded files from my conference page.

The whole setup process took less than 20 minutes to figure out how to format the query, to create the templates for displaying them within this blog layout and to setup the scheduler tasks. The last task was the "hardest", as you cannot use parameters when using the scheduler interface. After figuring out that problem, I simply created the batch files and pointed the task scheduler to them, which in turn run the queries.

If you like to use those tasks for your DasBlog site, simply install the MS Log Parser on your server and adjust the following calls.

The Top 50 Requested Pages

logparser.exe 
"SELECT TOP 50 
  to_lowercase(cs-uri-stem) as Url, COUNT(cs-uri-stem) AS Hits 
FROM
  D:\LogFiles\W3SVC2106058385\ex*.log 
WHERE 
  (to_lowercase(cs-uri-stem) NOT LIKE '%%captchaimage%%') AND
  ((to_lowercase(cs-uri-stem) = '/blog') OR 
(to_lowercase(cs-uri-stem) = '/blog/default.aspx') OR
(to_lowercase(cs-uri-stem) like '/blog/20%%.aspx')) GROUP BY Url ORDER BY Hits DESC" -o:tpl -tpl "D:\Sites\Blog\Content\Special\mosthits.format.tpl" > "D:\Sites\Blog\Content\Special\mosthits.format.html"

The Downloads-Counter

logparser.exe 
"SELECT TOP 50 
  to_lowercase(cs-uri-stem) as Url, COUNT(cs-uri-stem) AS Hits 
FROM
  D:\LogFiles\W3SVC2106058385\ex*.log 
WHERE
  (to_lowercase(cs-uri-stem) like '/downloads/%%')
GROUP BY 
  Url 
ORDER BY
  Hits DESC"
-o:tpl -tpl "D:\Sites\Blog\Content\Special\downloads.format.tpl" > "D:\Sites\Blog\Content\Special\downloads.format.html"

The .tpl-files are formatted similar to the ones shown in Steve's blog.

Friday, October 05, 2007 12:51:55 PM (W. Europe Standard Time, UTC+01:00) #    Comments [2]  | 

 

Comments are working now#

Due to a problem with the setup of the SMTP-Account comments to my blog where saved, however I was not notified and therefore did not publish them so far. I have scanned through all posts and published your comments now, as well as fixing the setup. In the future, comments should appear faster now, as I get notified about them from now on.

Sorry for any hurt feelings about not publishing them, they are online now.

Thursday, October 04, 2007 4:11:49 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

DasBlog Extension for Google AdSense#

Currently it is not much, but I already was asked how I added Google AdSense into my blog, which is based upon DasBlog. As far as I know, DasBlog offers no direct way to add an element only once between the feeds. Google AdSense limits you to three (I think) ad-areas per page, so adding the AdSense after every post is way too much and guarantees your removal from the AdSense program.

For now, I'll simply offer my macro for download and you can use it as you will. It is fairly easy to implement into your templates. To get it working, you have to edit the web.config file of your DasBlog. If you have not done so, you'll have to uncomment the settings for using macros and you have to instert a node for my macro in the newtelligence.DasBlog.Macros section.

<CONFIGSECTIONS>
        <SECTION type="newtelligence.DasBlog.Web.Core.MacroSectionHandler, newtelligence.DasBlog.Web.Core" name="newtelligence.DasBlog.Macros" requirePermission="false" />
        [...]
</CONFIGSECTIONS>

[...]

<NEWTELLIGENCE.DASBLOG.MACROS>
        <ADD type="MyGoogles.MyGoogleMacros,MyGoogles" macro="MyGoogleMacros" />
</NEWTELLIGENCE.DASBLOG.MACROS>

You need to download my macro (2 KB) and copy it into your DasBlog-bin folder. Now you are up and running. Open your template for your blog and insert the following line (customize the location of the file) for inserting any file content at the position.

<%IncludeContentOnce("C:\Webs\Site\Blog\Content\GoogleAdSense.txt", "ContentAdSense")|MyGoogleMacros%>

You can add multiple content this way, it will load the file and output its content straight into the expected position. The second parameter is a simple identifier which will allow you, when change, to add multiple different contents into your blog. I'll update this function soon to take more parameters allowing you to further control the contents position within the list of feeds.

The nice thing about creating macros for DasBlog is, that it is straight forward and easy. From first finding out abou macros to finally implementing a working solution it took me less than 15 minutes.

Thursday, October 04, 2007 7:54:24 AM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Inside of RAD Studio Welcome Page#

Though it is a few weeks old, I found a question on DelphiFeeds.com asking where the Welcome Page saves its data, especially the favorites list.

Well, it is fairly simple and it is in the place, where applications should save their data. For my RAD Studio 2007 installation on Windows Vista it is C:\Users\Daniel\AppData\Roaming\Borland\BDS\5.0. So, basically it is the application data folder for the current user.

The favorites are saved in the file myFavorites.xml.

Wednesday, October 03, 2007 9:10:03 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Delphi-Tage 2008#

Die Planung der 4. Delphi-Tage hat begonnen. Wir wälzen derzeit einige neue Ideen, haben weitere im Hinterstübchen, überarbeiten die Alten. Hast Du Ideen oder Wünsche, gibt es etwas, das Du uns wissen lassen willst. Dann sende mir eine Email und ich werde diese ans Organisationsteam weiterleiten. Willst Du uns helfen, lass es mich wissen! Kennst Du einen Speaker, welchen Du auf den Delphi-Tagen sehen willst, lass es mich wissen! Gibt es ein Thema, welches Dich brennend interessiert, lass es mich wissen! Hast Du einen Vorschlag für einen Veranstaltungsort, lass es mich wissen!

Kurz gesagt: lass es mich wissen!

Wednesday, October 03, 2007 5:27:42 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

German Delphi Days 2008#

The planing of the next Delphi Days has started. Some new ideas have come up, some are still in the back of our minds, some old ideas will come back. Do you have any ideas or wishes, is there anything you want to tell us? Well, drop me a message and I'll make sure to pass it along. Do you want to help us, let me know! Do you have a speaker you would like to see, let me know! Do you have a topic you want to hear about, let me know! Do you have a suggestion for a location this year, let me know!

In short: let me know!

Wednesday, October 03, 2007 5:24:37 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Windows Vista - Find what you are searching for#

At the EKON I gave a session on the Windows Vista search engine and how to feed it with own content. One thing I heard quiet often was Who bothers using it. or It is hard to find what you are looking for! Well, you may be right, but I think you are wrong.

First: how is it designed? Who did Microsoft have in mind when implementing the search feature right in to the start menu of Windows Vista? Not you, probably. Microsoft designed it for the laymen using Windows, persons who use the computer as part of their work life, as part of their free-time. The average user is probably quiet happy how well the search works. But then you are coming and you tell me you can't find what you are looking for. Why?

Well, mot of us remember searches from a time when it worked strictly on file names, like dir *demo*.*, but this is not how the Windows Vista search works. The search engine (aka Windows Desktop Search 3.x) matches your search against the file name, the content of the file, meta data of the file, data about the program used to create the file, and quiet a few other things.

If you want Windows Vista to search for files containing demo in their name, you have to tell Vista to do so. And it is quiet easy, once you know it, simply type: file:(demo) and the search will return just those. You want to search for files created by a specific person, well you use author:(Daniel Wischnewski) or author:(Daniel OR Bob) (AND, NOT, OR, and so on are case-sensitive)and so on.

Once you know that the search works this way, it is time to get to know over 50 search modifiers, all part of the advanced query language coming with the Windows Desktop Search. Btw, if you like what you read here, but you are still running on Windows XP, go get it!

Wednesday, October 03, 2007 4:54:11 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

EKON 12 - Dates are published#

I just thought I let you know already, the dates for the next EKON are published. It will be in Frankfurt/Main again in September 2008, 22nd through 26th.

I'll be there, will you?

Wednesday, October 03, 2007 4:31:45 PM (W. Europe Standard Time, UTC+01:00) #    Comments [1]  | 

 

A new Delphi blog is online#

Daniel Magin, one of Germanies best known Delphi evangelists has started his new blog a few days ago. It seems to focus on Delphi for most posts and he writes in English, so you may want to have a look every now and then. Quote from his opening post:

This is my new blog about what happens in my world. Sorry first for my not 100% perfect english. My motther language is Germany, but i like to blogg in english. I work for better office and also as CodeGear Associated Evangelist in the world of Delphi, Interbase and the ASP.net World.
Wednesday, October 03, 2007 2:59:40 PM (W. Europe Standard Time, UTC+01:00) #    Comments [0]  | 

 

Die DAN-Prüfung kommt... eventuell...#

Zurzeit stecke ich mitten in den Vorbereitungen für meine anstehende DAN-Prüfung (Ni-Dan). Vor gut einem Jahr erhielt ich von unserem Bundestrainer die Erlaubnis dieses Jahr zur Prüfung anzutreten. Die Prüfung ist für den 20. Oktober geplant, fast genau drei Jahre nach meiner letzten Prüfung.

Nach den Sommerferien, in welchen es fast keine Möglichkeiten zum Training gab, machte ich mich also wieder daran zu trainieren. Nach nur eineinhalb Wochen gab es bereits die erste Unterbrechung, da ich zur EKON musste. Jetzt bin ich endlich zurück und habe zu allem Überfluss ein sehr stark angeschwollenes rechtes Knie. Was ich mir da angetan habe, das weiß ich noch nicht und wovon die Schwellung kommt gleich noch viel weniger. Nun warte ich das mal bis morgen ab und werde sehen müssen, wie es sich dann mit dem Knie verhält...

German | Karate |