<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;AkYHRH87cCp7ImA9WhRbEU8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062</id><updated>2012-02-01T21:28:55.108+01:00</updated><category term="Der Mitbewohner" /><category term="Der Praktikant" /><category term="Der Regengott" /><category term="Der Knaller" /><category term="Der Cineast" /><category term="Der Leineweber" /><category term="Der Mann" /><category term="Der Fan" /><category term="Der Urlauber" /><category term="Der Glückspilz" /><category term="Der Blogger" /><category term="Der Zombie" /><category term="Der Proll" /><category term="Der Pirat" /><category term="The Developer" /><category term="Der Waver" /><category term="Der Unbekannte" /><category term="Der Diplomand" /><category term="Der Gamer" /><category term="Der Leser" /><category term="Der Partylöwe" /><category term="Der Kunde" /><category term="Der Mensch" /><category term="Der Bundesbürger" /><category term="Der Entwickler" /><category term="Der Arbeitnehmer" /><category term="Der Bahnfahrer" /><category term="Der Student" /><category term="Der Geek" /><category term="Der mit dem Hals" /><category term="Der Benutzerfreund" /><title>Gloegg@Bonn</title><subtitle type="html">Ein Westfale am Rhein</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>410</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Gloegg" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="gloegg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkYHRH86eyp7ImA9WhRbEU8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-3823392572100978636</id><published>2012-02-01T21:28:00.000+01:00</published><updated>2012-02-01T21:28:55.113+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T21:28:55.113+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and JSON</title><content type="html">&lt;div style="text-align: justify;"&gt;
I am currently developing my own JSON Library for Delphi. There are already libraries for that, but none of them suited my needs.&lt;br /&gt;
There is the built-in DBXJSON, which is used in the DataSnap part of Delphi. However, it is a bit of a hassle to work with.&lt;br /&gt;
There is &lt;a href="http://www.simonjstuart.com/delphi-stuff/tlakjson/"&gt;TlkJSON&lt;/a&gt; from Simon Stuart, which has (or had, I don't know the current status) some problems with Umlauts (ä,ö,ü,ß, etc.)&lt;br /&gt;
There is the &lt;a href="http://sourceforge.net/projects/is-webstart/"&gt;Delphi Web Utils&lt;/a&gt; from Jose Fabio N Almeida, which has some memory issues and other bugs, and most importantly, does not work well under XE2. It also hasn't been updated for a while.&lt;br /&gt;
And there is the &lt;a href="http://www.progdigy.com/?page_id=6"&gt;SuperObject&lt;/a&gt; which is very powerful, but it has IMO a horrible syntax.&lt;br /&gt;
&lt;br /&gt;
Since I was using the Delphi Web Utils before and I didn't want to rewrite all my other code when switching libraries, I designed my Interfaces and Classes in a similar way, e.g. the objects and array have methods named "Put" and "GetString".&lt;br /&gt;
&lt;br /&gt;
I have released &lt;a href="http://code.google.com/p/delphi-xe-json/"&gt;my library&lt;/a&gt; on Google Code. You can check it out via subversion or you can download the zipfile. Any feedback or help is appreciated. 

It uses Generics, Rtti (for TValue) and Regular Expressions, which is why it is targeted only for newer versions of Delphi (XE and XE2).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-3823392572100978636?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/Q3Wv0Glev50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/3823392572100978636/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=3823392572100978636&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3823392572100978636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3823392572100978636?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2012/02/delphi-and-json.html" title="Delphi and JSON" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CU4FQng7eyp7ImA9WhdaE0o.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-3175523298405659152</id><published>2011-10-23T10:43:00.000+02:00</published><updated>2011-10-23T14:45:13.603+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T14:45:13.603+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and RTTI / Class Helper</title><content type="html">&lt;div style="text-align: justify;"&gt;
In many of my applications I have some data-objects which look something like this:
&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;type
  TMyObject = class
  private
    fInt: integer;
    fDouble: double;
    fBool: boolean;
  public
    property IntegerProp : integer read fInt write fInt;
    property DoubleProp : double read fDouble write fDouble;
    property BoolProp : boolean read fBool write fBool;
  end;&lt;/pre&gt;
Writing a SaveToFile and LoadFromFile for each is tedious work and if I change the object I have to change the two procedures as well. With Delphis support for RTTI and class helpers we can get rid of the tedious work.
I am using a class helper for TObject, so technically its possible to do this with every object.

&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;  TSerialHelper = class helper for TObject
  private
    function isPublicProperty(aProperty : TRttiProperty): boolean;
  public
    function Serialize(aHumanreadable : boolean = true) : string;
    procedure Deserialize(const text : string);
  end;&lt;/pre&gt;
And here is the implementation:

&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;function TSerialHelper.Serialize(aHumanreadable : boolean = true): string;
var
  context : TRttiContext;
  typ : TRttiType;
  prop : TRttiProperty;
  soJSON : ISuperObject;
  value : TValue;
begin
  context := TRttiContext.Create;
  try
    typ := context.GetType(self.ClassType);
    soJSON := SO; // Get Superobject Interface
    for prop in typ.GetProperties do
    begin
      if isPublicProperty(prop) and prop.IsWritable then
      begin
        value := prop.GetValue(self);
        case value.Kind of
          tkInteger, tkInt64 :
            soJSON.I[prop.Name] := value.AsInteger;
          tkEnumeration:
            if value.IsType&amp;lt;boolean&amp;gt; then
              soJSON.B[prop.Name] := value.AsBoolean;
          tkFloat:
            soJSON.D[prop.Name] := value.AsExtended;
          tkChar, tkString, tkWChar, tkLString, tkWString, tkUString:
            soJSON.S[prop.Name] := value.AsString;
        end;
      end;
    end;
    result := soJSON.AsJSon(aHumanreadable);
  finally
    context.Free;
  end;
end;

procedure TSerialHelper.Deserialize(const text: string);
var
  context : TRttiContext;
  typ : TRttiType;
  prop : TRttiProperty;
  soJSON : ISuperObject;
begin
  context := TRttiContext.Create;
  try
    soJSON := SO(text); // Init the Superobject Interface
    typ := context.GetType(self.ClassType);
    for prop in typ.GetProperties do
    begin
      if isPublicProperty(prop) and prop.IsWritable then
      begin
        case prop.PropertyType.TypeKind of
          tkInteger, tkInt64 :
            prop.SetValue(self, TValue.From&amp;lt;int64&amp;gt;(soJSON.I[prop.Name]));
          tkEnumeration:
            if prop.GetValue(self).IsType&amp;lt;boolean&amp;gt; then
              prop.SetValue(self, TValue.From&amp;lt;boolean&amp;gt;(soJSON.B[prop.Name]));
          tkFloat:
            prop.SetValue(self, TValue.From&amp;lt;double&amp;gt;(soJSON.D[prop.Name]));
          tkChar, tkString, tkWChar, tkLString, tkWString, tkUString:
            prop.SetValue(self, TValue.From&amp;lt;string&amp;gt;(soJSON.S[prop.Name]));
        end;
      end;
    end;
  finally
    context.Free;
  end;
end;

function TSerialHelper.isPublicProperty(aProperty: TRttiProperty): boolean;
begin
  result := aProperty.Visibility in [mvPublic, mvPublished];
end;&lt;/pre&gt;
It is not finished, since it can't serialize sets, arrays or childobjects, but so far it works for simple objects.&lt;br /&gt;
&lt;br /&gt;
You can download the unit &lt;a href="http://dl.gl%c3%b6gg.de/delphi/uSerialHelper.pas"&gt;here&lt;/a&gt;.&lt;br /&gt;
This unit uses the &lt;a href="http://www.progdigy.com/?page_id=6"&gt;SuperObject&lt;/a&gt; by Henri Gourvest&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-3175523298405659152?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/021AHySIme4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/3175523298405659152/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=3175523298405659152&amp;isPopup=true" title="3 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3175523298405659152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3175523298405659152?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/10/delphi-and-rtti-class-helper.html" title="Delphi and RTTI / Class Helper" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DEIFQXs4cCp7ImA9WhdSFU4.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-3842925987881794324</id><published>2011-07-24T21:41:00.000+02:00</published><updated>2011-07-24T21:41:50.538+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-24T21:41:50.538+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and TPropertyObserver</title><content type="html">&lt;div style="text-align: justify;"&gt;In Delphi you can use RTTI (RunTime Type Information) to get information about objects at runtime without knowing about them at compile time. To find out more about RTTI, you should check out these &lt;a href="http://robstechcorner.blogspot.com/2009/09/so-what-is-rtti-rtti-is-acronym-for-run.html"&gt;articles&lt;/a&gt; by Robert Love.&lt;br /&gt;
&lt;br /&gt;
I used the RTTI to make an observer, that informs me, whenever a specific property gets changed. It is far from being complete, there are a lot of TypeKinds that I didn't implement a compare for. The observer could also be extended to support multiple properties.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;uses
  Rtti, Classes;

type
  TProc = reference to procedure;
  TPropertyObserver = class
  private
    fTerminated : boolean;
  public
    constructor Create(aInstance : TObject; aPropertyName : string; aOnChange : TProc);
    procedure Terminate;
  end;

implementation

uses
  SysUtils, TypInfo;

{ TPropertyObserver }

constructor TPropertyObserver.Create(aInstance: TObject; aPropertyName: string; aOnChange : TProc);
begin
  TThread.CreateAnonymousThread(procedure
  var
    ctx : TRttiContext;
    t : TRttiType;
    oldValue, curValue : TValue;
    b : boolean;
    p : TRttiProperty;
  begin
    ctx := TRttiContext.Create;
    try
      t := ctx.GetType(aInstance.ClassType);
      p := t.GetProperty(aPropertyName);
      oldValue := p.GetValue(aInstance);
      while not fTerminated do
      begin
        curValue := p.GetValue(aInstance);
        b := false;
        case curValue.Kind of
          tkInt64,
          tkEnumeration,
          tkInteger: b := oldValue.AsOrdinal = curValue.AsOrdinal;
          tkWChar,
          tkLString,
          tkWString,
          tkString,
          tkUString,
          tkChar: b := oldValue.AsString = curValue.AsString;
          tkFloat: b := oldValue.AsExtended = curValue.AsExtended;
          // Some of these should get a compare, too
          tkUnknown: ;
          tkSet: ;
          tkClass: ;
          tkMethod: ;
          tkVariant: ;
          tkArray: ;
          tkRecord: ;
          tkInterface: ;
          tkDynArray: ;
          tkClassRef: ;
          tkPointer: ;
          tkProcedure: ;
        end;
        if not b then
        begin
          aOnChange;
          oldValue := curValue;
        end;
        sleep(10);
      end;
      finally
      ctx.Free;
    end;
  end).Start;
end;

procedure TPropertyObserver.Terminate;
begin
  fTerminated := true;
end;&lt;/pre&gt;&lt;br /&gt;
And how it is used:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure TForm1.FormCreate(Sender: TObject);
begin
  fObserver := TPropertyObserver.Create(self,'Left',procedure
  begin
    TThread.Synchronize(TThread.CurrentThread,procedure // Changing the VCL has to be done in the main thread
    begin
      edit1.Text := IntToStr(self.Left);
    end);
  end);
end;&lt;/pre&gt;&lt;br /&gt;
Download is available &lt;a href="http://dl.glögg.de/delphi/uPropertyObserver.pas"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-3842925987881794324?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/SpCNaUTLdxk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/3842925987881794324/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=3842925987881794324&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3842925987881794324?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3842925987881794324?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/07/delphi-and-tpropertyobserver.html" title="Delphi and TPropertyObserver" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkIMR34-eip7ImA9WhdTGU8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-2209840880690850566</id><published>2011-07-17T18:36:00.000+02:00</published><updated>2011-07-17T18:36:26.052+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T18:36:26.052+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and TAppSettings</title><content type="html">&lt;div style="text-align: justify;"&gt;Delphi has had Inifle-Support for as long as I can remember. Inifiles are great for storing Application- and Usersettings, but I found myself doing the same things in each Application I wrote. Retrieve an appropiate directory for storing the actual file, creating and freeing the TInifile-Object.&lt;br /&gt;
I wanted something that I can just add to my project to store and retrieve simple values in a TInifile-like manner. Here is the result: TAppSettings. It relies on the &lt;a href="http://gloegg.blogspot.com/2011/06/delphi-and-geocoding.html"&gt;aforementioned&lt;/a&gt; JSON-Library "&lt;a href="http://sourceforge.net/projects/is-webstart/"&gt;Delphi Web Utils&lt;/a&gt;".&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;type
  TAppSettings = class
  protected
    fFilename : string;
    fSaveOnFree: boolean;
    fSettings : TJSONObject;
    function createOrGetSection(aSection : string) : TJSONObject;
  public
    constructor Create(aFilename : string);
    destructor Destroy; override;
    procedure Save;

    function getInteger(aSection, aKey : string; aDefault : integer) : integer;
    function getString(aSection, aKey : string; aDefault : string) : string;
    function getFloat(aSection, aKey : string; aDefault : double ) : double;
    function getBool(aSection, aKey : string; aDefault : boolean) : boolean;

    procedure setValue(aSection, aKey : string; aValue : integer); overload;
    procedure setValue(aSection, aKey : string; aValue : string); overload;
    procedure setValue(aSection, aKey : string; aValue : double); overload;
    procedure setValue(aSection, aKey : string; aValue : boolean); overload;

    property SaveOnFree : boolean read fSaveOnFree write fSaveOnFree;
    procedure OpenPathInExplorer;
  end;&lt;/pre&gt;&lt;br /&gt;
As an example the getter and setter for integer:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;function TAppSettings.getInteger(aSection, aKey: string;
  aDefault: integer): integer;
var
  section : TJSONObject;
begin
  result := aDefault;
  section := fSettings.optJSONObject(aSection);
  if section &lt;&gt; nil then result := section.optInt(aKey);
end;

function TAppSettings.createOrGetSection(aSection: string): TJSONObject;
begin
  result := fSettings.optJSONObject(aSection);
  if result = nil then
  begin
    result := TJSONObject.create;
    fSettings.put(aSection,result);
  end;
end;

procedure TAppSettings.setValue(aSection, aKey: string; aValue: integer);
var
  section : TJSONObject;
begin
  section := createOrGetSection(aSection);
  section.put(aKey, aValue);
end;&lt;/pre&gt;&lt;br /&gt;
This alone doesn't help with the initial problem, it just changes the format of the file. The interesting part is at the bottom of the unit.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;interface

const
  COMPANY_NAME = 'MyCompany';

[...]

var
  AppSettings, UserSettings : TAppSettings;

[...]

function GetSpecialFolder(Folder: Integer): String;
var
  Path: array[0..MAX_PATH] of char;
begin
  If SHGetSpecialFolderPath(0, @Path, Folder, false)
    then Result:=Path
    else Result:='';
end;

function GetApplicationName : string;
begin
  result := ExtractFilename(ParamStr(0));
  delete(result,length(result)-3,4);
end;

initialization
begin
  ForceDirectories(GetSpecialFolder(CSIDL_COMMON_APPDATA)+'\'+COMPANY_NAME+'\'+GetApplicationName);
  ForceDirectories(GetSpecialFolder(CSIDL_APPDATA)+'\'+COMPANY_NAME+'\'+GetApplicationName);
  AppSettings := TAppSettings.Create(GetSpecialFolder(CSIDL_COMMON_APPDATA)+'\'+COMPANY_NAME+'\'+GetApplicationName+'\settings.json');
  UserSettings := TAppSettings.Create(GetSpecialFolder(CSIDL_APPDATA)+'\'+COMPANY_NAME+'\'+GetApplicationName+'\settings.json');
end;

finalization
begin
  AppSettings.Free;
  UserSettings.Free;
end;&lt;/pre&gt;&lt;br /&gt;
Adding this unit to your project automatically creates two Objects of TAppSettings, one for UserSettings and one for ApplicationSettings. Before I wrote TAppSettings I always had two procedures "LoadIni" and "SaveIni" in my application where I would load and save all my application settings, because that were the only places I could access the settings. Now I just use the settings wherever I need them.&lt;br /&gt;
&lt;br /&gt;
You can download the complete unit &lt;a href="http://dl.glögg.de/delphi/uAppSettings.pas"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-2209840880690850566?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/wGhpFRzurrk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/2209840880690850566/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=2209840880690850566&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2209840880690850566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2209840880690850566?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/07/delphi-and-tappsettings.html" title="Delphi and TAppSettings" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Ak8MQ38-fCp7ImA9WhdTEkU.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-3240230593938048384</id><published>2011-07-09T17:20:00.002+02:00</published><updated>2011-07-10T11:08:02.154+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-10T11:08:02.154+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and TTaskList</title><content type="html">I was reading about some of the new features in Delphi XE in the new book from &lt;a href="https://plus.google.com/109099686252303180605/posts"&gt;Marco Cantu&lt;/a&gt;, &lt;a href="http://www.amazon.de/Delphi-Xe-Handbook-Guide-Features/dp/1463600674/ref=sr_1_1?ie=UTF8&amp;amp;s=books-intl-de&amp;amp;qid=1310223426&amp;amp;sr=8-1"&gt;Delphi XE Handbook&lt;/a&gt;. (He also told me about them earlier this year in Frankfurt on the Delphi Developer Days, but I didn't found time to play around with it until now)&lt;br /&gt;
The newest Delphi comes with anonymous Threads, which are a very easy way to make your application multithreaded, which is very useful to make some big calculations in the background, while the UI is still responding. However, sometimes you need things to be done in order. Enter TTasklist:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;type
  TProc = reference to procedure;
  TTaskList = class
  private
    fTasks : TThreadedQueue&amp;lt;TProc&amp;gt;;
    fTerminated : boolean;
    procedure start;
  public
    constructor Create;
    destructor Destroy; override;
    procedure addTask(aTask : TProc);
    procedure Terminate;
  end;&lt;/pre&gt;&lt;br /&gt;
TTaskList uses a ThreadSafe Queue to store the tasks, which are basically anonymous methods. The constructor creates the queue and starts a new thread which executes one task after another.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;constructor TTaskList.Create;
begin
  fTasks := TThreadedQueue&amp;lt;TProc&amp;gt;.Create;
  fTerminated := false;
  start;
end;

procedure TTaskList.addTask(aTask: TProc);
begin
  fTasks.PushItem(aTask);
end;

procedure TTaskList.start;
begin
  TThread.CreateAnonymousThread(
  procedure
  begin
    while not fTerminated do
    begin
      if fTasks.QueueSize &gt; 0 then fTasks.PopItem.Invoke;
    end;
  end
  ).Start;
end;

procedure TTaskList.Terminate;
begin
  fTerminated := true;
end;

destructor TTaskList.Destroy;
begin
  Terminate;
  fTasks.Free;
  inherited;
end;&lt;/pre&gt;&lt;br /&gt;
Download is available &lt;a href="http://dl.gl%c3%b6gg.de/delphi/uTaskList.pas"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-3240230593938048384?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/Pogi4NAJn2M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/3240230593938048384/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=3240230593938048384&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3240230593938048384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3240230593938048384?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/07/delphi-and-ttasklist.html" title="Delphi and TTaskList" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Unbekannter Ort.</georss:featurename><georss:point>52.036442273206845 8.565216064453125</georss:point><georss:box>51.958299773206846 8.407287564453124 52.11458477320684 8.723144564453126</georss:box></entry><entry gd:etag="W/&quot;D0UDSHszeSp7ImA9WhZbFEo.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-6838905916386965546</id><published>2011-06-19T11:21:00.000+02:00</published><updated>2011-06-19T11:21:19.581+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-19T11:21:19.581+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and Geocoding</title><content type="html">&lt;div style="text-align:justify"&gt;Google has some powerful APIs. One of them is the Maps API which is capable of geocoding an address to longitude and latitude information.&lt;br /&gt;
&lt;br /&gt;
It is pretty easy to use this functionality from Delphi. All you need is TIdHttp and a &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt; library. (I'm using the &lt;a href="http://sourceforge.net/projects/is-webstart/"&gt;Delphi Web Utils&lt;/a&gt;)&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;TLocationType = (ltRooftop, ltRangeInterpolated, ltGeometricCenter, ltApproximate);
  TAddress = class
  private
    fAddress : string;
    fLatitude: double;
    fLongitude: double;
    fLocationType: TLocationType;
  public
    constructor Create(aAddress : string; aHttp : TIdHttp = nil);
    property Address : string read fAddress write fAddress;
    property Latitude : double read fLatitude;
    property Longitude : double read fLongitude;
    property LocationType : TLocationType read fLocationType;
    procedure Geocode(aHttp : TIdHttp);
  end;&lt;/pre&gt;&lt;br /&gt;
The Google API returns a JSON structure with a couple of fields. However, I just grab the longitude and latitude information as well as the location_type, to determine the quality of the coordinates.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure TAddress.GeoCode(aHttp: TIdHttp);
var
  url : string;
  jo, location, geometry : TJSONObject;
  sc : TStringCase;
begin
  url := TIdURI.URLEncode('http://maps.google.com/maps/api/geocode/json?address='+fAddress+'&amp;sensor=false');
  jo := TJSONObject.create(aHttp.Get(url));
  if jo.getString('status') = 'OK' then
  begin
    geometry := jo.getJSONArray('results').getJSONObject(0).getJSONObject('geometry');
    location := geometry.getJSONObject('location');
    fLongitude := location.getDouble('lng');
    fLatitude := location.getDouble('lat');

    sc := TStringCase.Create;
    try
      sc.addEntry('ROOFTOP',procedure
      begin
        fLocationType := ltRooftop;
      end);
      sc.addEntry('RANGE_INTERPOLATED',procedure
      begin
        fLocationType := ltRangeInterpolated;
      end);
      sc.addEntry('GEOMETRIC_CENTER',procedure
      begin
        fLocationType := ltGeometricCenter;
      end);
      sc.addEntry('APPROXIMATE',procedure
      begin
        fLocationType := ltApproximate;
      end);
    finally
      sc.switch(geometry.getString('location_type'));
    end;
    sc.Free;
  end
  else raise Exception.Create(jo.getString('status'));
  jo.Free;
end;
&lt;/pre&gt;&lt;br /&gt;
I used this and &lt;a href="http://www.martinzone.biz/tgomaps/overview.html"&gt;TGoMaps&lt;/a&gt; to create a simple application which takes a list of addresses, geocodes them and displays them on a GoogleMap.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Il2uh7t81rc/Tf29KNDcdsI/AAAAAAAABLk/PuwP36oT8ps/s1600/geocode.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="250" width="400" src="http://4.bp.blogspot.com/-Il2uh7t81rc/Tf29KNDcdsI/AAAAAAAABLk/PuwP36oT8ps/s400/geocode.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Source and binary are available &lt;a href="http://dl.glögg.de/delphi/Geocode/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
TAddress uses TStringCase from the &lt;a href="http://gloegg.blogspot.com/2011/06/delphi-and-tstringcase.html"&gt;previous post&lt;/a&gt;.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-6838905916386965546?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/IXYR-kzdHMc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/6838905916386965546/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=6838905916386965546&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/6838905916386965546?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/6838905916386965546?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/06/delphi-and-geocoding.html" title="Delphi and Geocoding" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Il2uh7t81rc/Tf29KNDcdsI/AAAAAAAABLk/PuwP36oT8ps/s72-c/geocode.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUEHQXY_cSp7ImA9WhZbFE8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-8055658872110124155</id><published>2011-06-18T21:00:00.000+02:00</published><updated>2011-06-18T21:00:30.849+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-18T21:00:30.849+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and TStringCase</title><content type="html">&lt;div style="text-align: justify;"&gt;Delphi's Case &amp;lt;X&amp;gt; of statement works with everything that is Ordinal. integer, char, enumerations, it even works with boolean.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;case b of
  true : MakeSomething;
  false : DoNotMakeSomething;
end;&lt;/pre&gt;&lt;br /&gt;
However, it does not work with strings. And I've come across some places where it would be very handy to have a Case &amp;lt;String&amp;gt; of.&lt;br /&gt;
&lt;br /&gt;
Luckily, with Delphi 2010 came &lt;a href="http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/anonymousmethods_xml.html"&gt;anonymous methods&lt;/a&gt; and with the combination of a Dictionary we can finally have something that works as a Case &amp;lt;String&amp;gt; of.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;type
  TProc = reference to procedure;
  TCase&amp;lt;T&amp;gt; = class
  private
    fDict : TDictionary&amp;lt;T,TProc&amp;gt;;
    fElse: TProc;
  public
    constructor Create;
    destructor Destroy; override;
    procedure addEntry(aKey : T; aProc :TProc);
    procedure addEntries(const aKeys : array of T; aProc : TProc);
    procedure switch(aKey : T);
    property ElseCase : TProc read fElse write fElse;
  end;
  TStringCase = TCase&amp;lt;string&amp;gt;;
&lt;/pre&gt;&lt;br /&gt;
TStringCase is the type, that will be used the most, but with the generic TCase, (almost) everything can be used for a Case statement.&lt;br /&gt;
&lt;br /&gt;
The implementation is very simple:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure TCase&amp;lt;T&amp;gt;.addEntries(const aKeys: array of T; aProc: TProc);
var
  key : T;
begin
  for key in aKeys do
    addEntry(key,aProc);
end;

procedure TCase&amp;lt;T&amp;gt;.addEntry(aKey: T; aProc: TProc);
begin
  fDict.Add(aKey, aProc);
end;

constructor TCase&amp;lt;T&amp;gt;.Create;
begin
  fDict := TDictionary&amp;lt;T,TProc&amp;gt;.Create;
end;

destructor TCase&amp;lt;T&amp;gt;.Destroy;
begin
  fDict.Free;
  inherited;
end;

procedure TCase&amp;lt;T&amp;gt;.switch(aKey: T);
var
  p : TProc;
begin
  if fDict.TryGetValue(aKey, p) then
    p()
  else
    if assigned(fElse) then fElse();
end;&lt;/pre&gt;&lt;br /&gt;
And this is how it's used:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure UseStringCase;
var
  sc : TStringCase;
begin
  sc :=TStringCase.Create;
  try
    // setup the case
    sc.addEntry('STRING1',procedure
    begin
      Label1.Caption := 'First Option';
    end);

    sc.addEntry('STRING1',procedure
    begin
      Label1.Caption := 'Second Option';
    end);

    sc.addEntries(['STRING3','STRING4','STRING5'],procedure
    begin
      Label1.Caption := 'one of three options';
    end);

    sc.ElseProc := procedure
    begin
      Label1.Caption := 'Something else';
    end;

    sc.switch(Edit1.Text); // execute the right procedure
  finally
    sc.Free;
  end;

end;&lt;/pre&gt;&lt;br /&gt;
The usage has some overhead compared to the standard case, but I think it is still prettier than a bunch of if-then-else's.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure UseIfThenElse;
var
  s : string;
begin
  s := Edit1.Text;
  if s = 'STRING1' then
  begin
    Label1.Caption := 'First Option';
  end
  else if s = 'STRING2' then
  begin
    Label1.Caption := 'Second Option';
  end
  else if (s = 'STRING3') or (s = 'STRING4') or (s = 'STRING5') then
  begin
    Label1.Caption := 'one of three options';
  end
  else
  begin
    Label1.Caption := 'Something else';
  end;
end;&lt;/pre&gt;&lt;br /&gt;
Download is available &lt;a href="http://dl.glögg.de/delphi/uStringCase.pas"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-8055658872110124155?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/gUp9maOpPck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/8055658872110124155/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=8055658872110124155&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8055658872110124155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8055658872110124155?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/06/delphi-and-tstringcase.html" title="Delphi and TStringCase" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0AESXk4cSp7ImA9WhZbFEo.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-4424026932488840691</id><published>2011-06-13T14:02:00.001+02:00</published><updated>2011-06-19T11:28:28.739+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-19T11:28:28.739+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and Barcode scanning</title><content type="html">&lt;div style="text-align: justify;"&gt;Todays example uses a dll to access a Barcode Scanner. The used Barcode Scanner is the &lt;a href="http://www.motorola.com/business/v/index.jsp?vgnextoid=11607b103d175110VgnVCM1000008406b00aRCRD"&gt;CS1504&lt;/a&gt; (SDK available &lt;a href="http://support.symbol.com/support/search.do?cmd=displayKC&amp;amp;docType=kc&amp;amp;externalId=KB100331&amp;amp;sliceId=&amp;amp;dialogID=235274197&amp;amp;stateId=1%200%20235264657"&gt;here&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
The CS1504 has a buffer where it stores all scanned barcodes and this buffer can be accessed via a COM-Port. Luckily, the SDK has a dll which takes care of the communication. The only problem is, that the header is written in C/C++. I translated it (in parts) to Delphi, you can grab the file &lt;a href="http://dl.gl%c3%b6gg.de/delphi/uCSP2.pas"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Now we could just use it as is, but it would be much nicer if we had a class to wrap it all up.&lt;br /&gt;
&lt;br /&gt;
We need some object to store the data, which is really simple:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;TBarcode = class
  private
    fTimestamp : TDateTime;
    fCode : string;
  public
    constructor Create(aTimestamp : TDateTime; aCode : string);
    property TimeStamp : TDateTime read fTimestamp;
    property Code : string read fCode;
  end;&lt;/pre&gt;&lt;br /&gt;
And now the class that does all the work: &lt;br /&gt;
&lt;pre class="brush:delphi"&gt;TScanner = class
  private
    fPort : integer;
    fReady : boolean;
    fHasData: boolean;
    function TimestampToDateTime(aTimestamp : Ansistring) : TDateTime;
  public
    constructor Create(aPort : integer);
    destructor Destroy; override;
    function getBarcodes : TList&amp;lt;TBarcode&amp;gt;;
    procedure clearBarcodes;
    property IsReady : boolean read fReady;
    property HasData : boolean read fHasData;
    procedure setDateTime(aDateTime : TDateTime);
    function getDateTime : TDateTime;
  end;&lt;/pre&gt;&lt;br /&gt;
The TScanner class returns a generic TList&amp;lt;TBarcode&amp;gt; with all the Barcodes from the device. &lt;br /&gt;
&lt;br /&gt;
The most important function is of course getBarcodes.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;function TScanner.getBarcodes: TList&amp;lt;TBarcode&amp;gt;;
var
  bc : TBarcode;
  i, count, pl : integer;
  buffer : array[0..63] of AnsiChar;
  dt : TDateTime;
  s : string;
begin
  result := TList&amp;lt;TBarcode&amp;gt;.Create;
  begin
    count := csp2ReadData;
    for i := 0 to count -1 do
    begin
      FillChar(buffer,64,#0);
      pl := csp2GetPacket(@buffer,i,63);

      // The Last 4 Bytes hold the timestamp
      dt := TimestampToDateTime(copy(buffer,pl-3,4));

      s := copy(buffer,3,pl-6);
      bc := TBarcode.Create(dt,s);
      result.Add(bc);
    end;
  end;
end;&lt;/pre&gt;&lt;br /&gt;
The implementation is pretty much straight forward, the trickiest part was to convert the 4-byte timestamp from each barcode to TDateTime. They crammed the six values for year, month, day, hour, minute and second into 4 bytes. (seriously, a SD Card that has the size of my fingernail can hold easily 4 GB and they worry about 2 bytes per scanned barcode)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1wR9kHrlf9k/TfX5Jh6-NwI/AAAAAAAABLc/IR062X9LshI/s1600/4_byte_date.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="35" src="http://4.bp.blogspot.com/-1wR9kHrlf9k/TfX5Jh6-NwI/AAAAAAAABLc/IR062X9LshI/s400/4_byte_date.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;function TScanner.TimestampToDateTime(aTimestamp: Ansistring): TDateTime;
var
  i1,i2,i3,i4,i5,i6 : integer;
  qb : T4Bytes;
  y,m,d,h,n,s : word;
begin
  // CharToByte
  qb.Bytes[3] := Ord(aTimestamp[1]);
  qb.Bytes[2] := Ord(aTimestamp[2]);
  qb.Bytes[1] := Ord(aTimestamp[3]);
  qb.Bytes[0] := Ord(aTimestamp[4]);

  // split up the bits
  i1 := qb.Total and $fc000000; // 6 Bit
  i2 := qb.Total and $03f00000; // 6 Bit
  i3 := qb.Total and $000f8000; // 5 Bit
  i4 := qb.Total and $00007c00; // 5 Bit
  i5 := qb.Total and $000003c0; // 4 Bit
  i6 := qb.Total and $0000003f; // 6 Bit

  // Shift right to align the bits
  s := i1 shr 26;
  n := i2 shr 20;
  h := i3 shr 15;
  d := i4 shr 10;
  m := i5 shr 6;
  y := i6;

  result := EncodeDate(y+2000,m,d) + EncodeTime(h,n,s,0);
end;&lt;/pre&gt;&lt;br /&gt;
This uses T4Bytes which is a packed record.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;T4Bytes = packed record
   case Integer of
    0: (Bytes: array[0..3] of Byte);
    1: (Total: Cardinal);
  end;&lt;/pre&gt;&lt;br /&gt;
The bytes are accessible indivudually and as the resulting 4-Byte Cardinal.&lt;br /&gt;
&lt;br /&gt;
Full Sourcecode is available &lt;a href="http://dl.gl%c3%b6gg.de/delphi/uScanner.pas"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-4424026932488840691?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/P8MjxzV64K8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/4424026932488840691/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=4424026932488840691&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4424026932488840691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4424026932488840691?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/06/delphi-and-barcode-scanning.html" title="Delphi and Barcode scanning" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-1wR9kHrlf9k/TfX5Jh6-NwI/AAAAAAAABLc/IR062X9LshI/s72-c/4_byte_date.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkECQng5eip7ImA9WhZUGUw.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-43917616363130910</id><published>2011-06-13T00:44:00.000+02:00</published><updated>2011-06-13T00:44:23.622+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T00:44:23.622+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Delphi and Generics</title><content type="html">&lt;div style="text-align: justify;"&gt;In this first developer-themed post, I am going to describe some basic stuff, before I delve into some real-world applications.&lt;br /&gt;
&lt;br /&gt;
Delphi 2009 brought Generics to the Delphi-World. And since then, they are found in all of my Applications. Especially Generics.Collections are heavily used by me.&lt;br /&gt;
&lt;br /&gt;
Before Generics.Collections I had to implement a TList for each Class I would like to store a variable amount of Objects. (Or I could use Contnrs.TObjectList and cast to TAnimal everytime I need one, but I don't find that very desirable)&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;interface

uses
  Classes;

type
  TAnimal = class
  private
    fName : string;
  public
    property Name : string read fName write fName;
  end;
  
  TAnimalList = class (TList)
  private
  procedure putAnimal(Index : integer; Value : TAnimal);
  function getAnimal(Index : integer) : TAnimal;
  public  
    property Items [Index : integer] : TAnimal read getAnimal write setAnimal;
  end;
  
implementation

procedure TAnimalList.putAnimal(Index : integer; Value : TAnimal);
begin
  inherited put(Index, Value);
end;

function TAnimalList.getAnimal(Index : integer) : TAnimal;
begin
  result := (TAnimal) inherited get(Index);
end;&lt;/pre&gt;&lt;br /&gt;
And this is just for TAnimal, if there are any other classes, I would have to copy&amp;amp;paste the code for the List and replace the data types.&lt;br /&gt;
&lt;br /&gt;
With Generics.Collections the same thing looks like this:&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;interface

uses
  Generics.Collections;

type
  TAnimal = class
  private
    fName : string;
  public
    property Name : string read fName write fName;
  end;

  TAnimalList = TList&amp;lt;TAnimal&amp;gt;&lt;/pre&gt;&lt;br /&gt;
And I don't even need the alias "TAnimalList", I could use "TList&amp;lt;TAnimal&amp;gt" instead.&lt;br /&gt;
&lt;br /&gt;
Also, it is not limited to Classes, it can hold every datatype like integer, double, boolean and even records. In my case it is even better to use TObjectList&amp;lt;TAnimal&amp;gt, which automatically frees its containing objects if it is freed.&lt;br /&gt;
&lt;br /&gt;
Since all the Generics.Collectionshave an Enumerator the following is possible:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;var
  fAnimals : TList&amp;lt;TAnimal&amp;gt;

procedure init;
var
  a : TAnimal;
begin
  for a in fAnimals do
  begin
    a.DoSomething;
  end;
end;&lt;/pre&gt;&lt;br /&gt;
Generics.Collections has more then some simple Lists up its sleeve. There are also TQueue, which uses FIFO and TStack which uses LIFO to store its contents.&lt;br /&gt;
&lt;br /&gt;
TDictionary is a little different, because its taking two type parameters. One for the key, one for the Value.&lt;br /&gt;
A case that I often stumble upon is to store (and recieve) some object or value for a specific string. And then I always use a TDictionary&amp;lt;String,TValue&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There's also a TObjectDictionary, which takes care of memory of the keys, the values or even both.&lt;br /&gt;
&lt;pre class="brush:delphi"&gt;procedure init;
var
  ownsKeys, ownsValues, ownsBoth : TObjectDictionary&amp;lt;TKey, TValue&amp;gt;
begin
  ownsKeys := TObjectDictionary&amp;lt;TKey, TValue&amp;gt;.Create([doKeys]);
  ownsValues := TObjectDictionary&amp;lt;TKey, TValue&amp;gt;.Create([doValues]);
  ownsBoth := TObjectDictionary&amp;lt;TKey, TValue&amp;gt;.Create([doKeys, doValues]);
end;&lt;/pre&gt;&lt;br /&gt;
That's it for today.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-43917616363130910?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/7HNqDLttgbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/43917616363130910/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=43917616363130910&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/43917616363130910?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/43917616363130910?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/06/delphi-and-generics.html" title="Delphi and Generics" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;Dk8NR3w5eCp7ImA9WhZUGUw.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-7019935212044287937</id><published>2011-06-12T23:41:00.000+02:00</published><updated>2011-06-12T23:41:36.220+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-12T23:41:36.220+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="The Developer" /><title>Level Up</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;a href="http://3.bp.blogspot.com/-GR3mZ52AEI0/TfUuo4ng_FI/AAAAAAAABLM/bOH_DpkjGQs/s1600/cert_delphi_dev.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://3.bp.blogspot.com/-GR3mZ52AEI0/TfUuo4ng_FI/AAAAAAAABLM/bOH_DpkjGQs/s400/cert_delphi_dev.png" width="185" /&gt;&lt;/a&gt;Time for another &lt;a href="http://gloegg.blogspot.com/2008/05/level-up.html"&gt;Level Up&lt;/a&gt;. In this week I became a &lt;a href="http://www.embarcadero.com/certification/delphi-developer"&gt;certified Delphi Developer&lt;/a&gt;. There is also the Delphi Master Certification, but since this certification deals a lot with DataSnap, which I have not used very much, I don't think I'll take it anytime soon.&lt;br /&gt;
&lt;br /&gt;
I think this is a good opportunity to blog about some techniques I am using in my every day work. Which may help some fellow Delphi Developers, who can learn a thing or two and also give me feedback to improve my work.&lt;br /&gt;
&lt;br /&gt;
For those interested in these kind of posts, you can grab the feed for the "Developer"-Posts right &lt;a href="http://gloegg.blogspot.com/feeds/posts/default/-/The%20Developer"&gt;here&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-7019935212044287937?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/bAgvvLLmtSM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/7019935212044287937/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=7019935212044287937&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/7019935212044287937?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/7019935212044287937?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2011/06/level-up.html" title="Level Up" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-GR3mZ52AEI0/TfUuo4ng_FI/AAAAAAAABLM/bOH_DpkjGQs/s72-c/cert_delphi_dev.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkMASHo4fyp7ImA9Wx5aFUw.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-3237475623179544452</id><published>2010-11-11T22:20:00.000+01:00</published><updated>2010-11-11T22:20:49.437+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T22:20:49.437+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><category scheme="http://www.blogger.com/atom/ns#" term="Der Geek" /><title>DOSPad</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem die guten Leute von &lt;a href="http://www.dospad.net/forum/"&gt;dospad&lt;/a&gt; ihren Quellcode veröffentlicht haben, konnte ich ohne Jailbreak den &lt;a href="http://www.dosbox.com/"&gt;DOSBox&lt;/a&gt;-Port fürs iPad installieren. Und das öffnet natürlich eine Reihe von Möglichkeiten. &lt;br /&gt;
Aber ich lass erstmal ein paar Bilder für sich sprechen:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_p0rXcTpaFh0/TNxapTDRbrI/AAAAAAAABKg/N2MM56jwIMg/s1600/IMG_0001.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_p0rXcTpaFh0/TNxapTDRbrI/AAAAAAAABKg/N2MM56jwIMg/s320/IMG_0001.PNG" width="320" /&gt;&lt;/a&gt;&lt;br&gt;Xenon2&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_p0rXcTpaFh0/TNxasm128jI/AAAAAAAABKk/rAXijGxWnMc/s1600/IMG_0002.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_p0rXcTpaFh0/TNxasm128jI/AAAAAAAABKk/rAXijGxWnMc/s320/IMG_0002.PNG" width="320" /&gt;&lt;/a&gt;&lt;br&gt;Monkey Island 1&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_p0rXcTpaFh0/TNxavLm76vI/AAAAAAAABKo/sGdGJSlZYCo/s1600/IMG_0003.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_p0rXcTpaFh0/TNxavLm76vI/AAAAAAAABKo/sGdGJSlZYCo/s320/IMG_0003.PNG" width="320" /&gt;&lt;/a&gt;&lt;br&gt;Civilization 1&lt;/div&gt;&lt;br /&gt;
Desweiteren hatte ich noch Crystal Caves, Ascendancy und Doom ausprobiert. Davon läuft aber nur Crystal Caves einigermaßen flüssig. Doom ist unspielbar und Ascendancy mag er garnicht starten.&lt;br /&gt;
&lt;br /&gt;
Wegen der eingeschränkten Tastatur sind Spiele mit hohem Geschicklichkeitsfaktor leider noch schwieriger als sie normalerweise sind. Desweiteren ist es schade, das es den Rechtsklick nicht im Fullscreenmodus gibt. Soweit ich weiß gibt es auch noch keine Unterstützung für externe Tastaturen, die soll aber noch kommen.&lt;br /&gt;
&lt;br /&gt;
Fazit: Als Spielerei ganz nett, aber echte iPhone-Varianten von Spielen sind deutlich einfacher zu handlen.&lt;br /&gt;
&lt;br /&gt;
PS: Als nächstes könnte man mal Win 3.11 probieren...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-3237475623179544452?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/x0PRs04W5ms" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/3237475623179544452/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=3237475623179544452&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3237475623179544452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/3237475623179544452?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/11/dospad.html" title="DOSPad" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_p0rXcTpaFh0/TNxapTDRbrI/AAAAAAAABKg/N2MM56jwIMg/s72-c/IMG_0001.PNG" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEUBQXg8fSp7ImA9Wx5aEk8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-2159318393090800551</id><published>2010-11-08T14:17:00.000+01:00</published><updated>2010-11-08T14:17:30.675+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-08T14:17:30.675+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Student" /><title>Studienbücher</title><content type="html">&lt;div style="text-align: justify;"&gt;Gestern überkam es mich und ich habe tatsächlich mein Bücherregal aufgeräumt. Und schweren Herzens habe ich mich entschlossen ein paar alte Studienbücher von mir zu versteigern.&lt;br /&gt;
&lt;br /&gt;
Von den folgenden vier konnte ich mich trennen:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.de/Mathematik-Ingenieure-Naturwissenschaftler-Arbeitsbuch-Grundstudium/dp/3528942363/ref=sr_1_9?ie=UTF8&amp;amp;qid=1289222127&amp;amp;sr=8-9"&gt;Mathematik für Ingenieure und Naturwissenschaftler 1&lt;/a&gt; - Lothar Papula&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.de/Mathematik-f%C3%BCr-Ingenieure-Naturwissenschaftler-Band/dp/3834803049/ref=sr_1_11?ie=UTF8&amp;amp;qid=1289222127&amp;amp;sr=8-11"&gt;Mathematik für Ingenieure und Naturwissenschaftler 2&lt;/a&gt; - Lothar Papula&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.de/Taschenbuch-Physik-Horst-Kuchling/dp/3446217606/ref=sr_1_3?s=books&amp;amp;ie=UTF8&amp;amp;qid=1289222163&amp;amp;sr=1-3"&gt;Taschenbuch der Physik&lt;/a&gt; - Horst Kuchling&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.de/Taschenbuch-Elektrotechnik-Elektronik-Helmut-Lindner/dp/3446210563/ref=sr_1_5?s=books&amp;amp;ie=UTF8&amp;amp;qid=1289222183&amp;amp;sr=1-5"&gt;Taschenbuch der Elektrotechnik und Elektronik&lt;/a&gt; - Helmut Lindner, Harry Brauer, Constans Lehmann&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Alle Bücher sind in einem guten bis Top-Zustand. &lt;br /&gt;
&lt;br /&gt;
Hier der Link zu den eBay-Auktionen: &lt;a href="http://shop.ebay.de/real_gloegg/m.html"&gt;http://shop.ebay.de/real_gloegg/m.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-2159318393090800551?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/OwarcNKTUZ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/2159318393090800551/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=2159318393090800551&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2159318393090800551?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2159318393090800551?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/11/studienbucher.html" title="Studienbücher" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C04EQnczcSp7ImA9Wx9TEkk.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-5955973884100945554</id><published>2010-06-02T10:07:00.002+02:00</published><updated>2010-11-20T09:31:43.989+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-20T09:31:43.989+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Pirat" /><title>Not my president</title><content type="html">&lt;div style="text-align: justify;"&gt;Nur weil 'gefühlt' jedes zweite Kind in Deutschland aus ihrer Lende kam, ist sie noch lange nicht als "Mutter der Nation" qualifiziert.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_p0rXcTpaFh0/TAYPCgXUCCI/AAAAAAAABJs/YH7Bu51pVIY/s1600/notmypresident.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_p0rXcTpaFh0/TAYPCgXUCCI/AAAAAAAABJs/YH7Bu51pVIY/s320/notmypresident.png" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Wer das Volk belügt, darf nicht Bundespräsidentin werden!&lt;br /&gt;
&lt;a href="http://www.carechild.de/news/politik/internetzensur_die_grossen_luegen_der_ursula_von_der_leyen_572_120.html"&gt;Link 1&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://handelsblatt6.blogg.de/eintrag.php?id=2147"&gt;Link 2&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-5955973884100945554?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/OO8AeVd0jBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/5955973884100945554/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=5955973884100945554&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/5955973884100945554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/5955973884100945554?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/06/not-my-president.html" title="Not my president" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_p0rXcTpaFh0/TAYPCgXUCCI/AAAAAAAABJs/YH7Bu51pVIY/s72-c/notmypresident.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A04FRnc-cCp7ImA9WxFXFE8.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-116702124791803454</id><published>2010-05-21T10:18:00.000+02:00</published><updated>2010-05-21T10:18:37.958+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T10:18:37.958+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>Chips mit Geschmack</title><content type="html">&lt;div style="text-align: justify;"&gt;Ich bin ja durchaus ein Freund von &lt;a href="http://gloegg.blogspot.com/2008/05/bier-chips.html"&gt;speziellen Chipssorten&lt;/a&gt;. Gut das Walkers momentan gleich 5 ausgefallene Sorten im Angebot hat.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_p0rXcTpaFh0/S_ZAKNAmtgI/AAAAAAAABJc/JmEHkcEzryg/s1600/brazil.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_p0rXcTpaFh0/S_ZAKNAmtgI/AAAAAAAABJc/JmEHkcEzryg/s320/brazil.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_p0rXcTpaFh0/S_ZAMWtf5sI/AAAAAAAABJg/KlJlKSX2K64/s1600/burger.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_p0rXcTpaFh0/S_ZAMWtf5sI/AAAAAAAABJg/KlJlKSX2K64/s320/burger.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_p0rXcTpaFh0/S_ZAOQeXnpI/AAAAAAAABJk/q4mSXcYRP1A/s1600/french.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_p0rXcTpaFh0/S_ZAOQeXnpI/AAAAAAAABJk/q4mSXcYRP1A/s320/french.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_p0rXcTpaFh0/S_ZAQgn3SNI/AAAAAAAABJo/REwojqn9tEQ/s1600/japan.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_p0rXcTpaFh0/S_ZAQgn3SNI/AAAAAAAABJo/REwojqn9tEQ/s320/japan.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_p0rXcTpaFh0/S_ZAHkYaPlI/AAAAAAAABJY/ws5IHUPVZ2g/s1600/bratwurst.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_p0rXcTpaFh0/S_ZAHkYaPlI/AAAAAAAABJY/ws5IHUPVZ2g/s320/bratwurst.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Die German Bratwurst schmeckt tatsächlich nicht schlecht und auch der American Cheeseburger ist lecker. Die restlichen Sorten werden dann beim Mittag verköstigt.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-116702124791803454?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/NzwfFuIqim4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/116702124791803454/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=116702124791803454&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/116702124791803454?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/116702124791803454?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/05/chips-mit-geschmack.html" title="Chips mit Geschmack" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_p0rXcTpaFh0/S_ZAKNAmtgI/AAAAAAAABJc/JmEHkcEzryg/s72-c/brazil.JPG" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0cHRXk8eyp7ImA9WxFSGEg.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-4799584808686540590</id><published>2010-04-21T15:03:00.000+02:00</published><updated>2010-04-21T15:03:54.773+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T15:03:54.773+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><title>Warum ich Oracle hasse</title><content type="html">&lt;div style="text-align: justify;"&gt;Grund #4312 &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;CREATE TABLE T (
  id number,
  value float)
INSERT INTO T (id, value) VALUES (1, 3.3)
SELECT * FROM T
ID    Value
 1    3.29999981356&lt;/pre&gt;&lt;br /&gt;
q.e.d.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-4799584808686540590?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/Wk8_Ka7i4FQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/4799584808686540590/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=4799584808686540590&amp;isPopup=true" title="1 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4799584808686540590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4799584808686540590?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/04/warum-ich-oracle-hasse.html" title="Warum ich Oracle hasse" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUAFQXg8fCp7ImA9WxBbFkU.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-2535841111309550097</id><published>2010-03-15T22:15:00.000+01:00</published><updated>2010-03-15T22:15:10.674+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-15T22:15:10.674+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>hmmm Noodlesoup</title><content type="html">&lt;div style="text-align: justify;"&gt;Ich habe jetzt seit längerem schon eine Soup. Dort laufen so ziemlich alle meine Online-Aktivitäten zusammen. Da wären z.B. alle Blog-Posts, alle Tweets, alle Youtube-Videos die ich hochlade oder gutfinde, alle Fotos die ich zu Flickr oder Picasa hochlade und alle Artikel die ich im Google-Reader empfehle. &lt;br /&gt;
&lt;br /&gt;
Wer also alles in einem haben will, mag sich nun &lt;a href="http://gloegg.soup.io/"&gt;gloegg.soup.io&lt;/a&gt; merken. Natürlich könnt ihr auch selber eine Soup aufmachen und dort alles was ihr im Netz (gut) findet reinpacken.&lt;br /&gt;
&lt;br /&gt;
Soup.io hat sowohl die Möglichkeit automatisch zu Im- und Exportieren, sowie einfach einen Link, einen Text, ein Foto / Video, etc. in seine Soup zu posten und zu kommentieren.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-2535841111309550097?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/WwGpYDgJg3k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/2535841111309550097/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=2535841111309550097&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2535841111309550097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2535841111309550097?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/03/hmmm-noodlesoup.html" title="hmmm Noodlesoup" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkMBRXo7fCp7ImA9WxBWFEg.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-5385717934723711200</id><published>2010-02-06T12:07:00.000+01:00</published><updated>2010-02-06T12:07:34.404+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-06T12:07:34.404+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>Urban Dictionary über Vornamen</title><content type="html">&lt;div style="text-align: justify;"&gt;1. Go to &lt;a href="http://urbandictionary.com/"&gt;UrbanDictionary.com&lt;/a&gt;.&lt;br /&gt;
2. Do a search for your first name.&lt;br /&gt;
3. Post the result&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;1. A Scandinavian name given to anyone who, for sure, will/is awesome. Nils is based on a Saint. Saint Nicholas. Who most of you know as Santa Claus. He brings presents to us every year so this is why we honor someone with the name Nils because he will be like Santa.&lt;br /&gt;
2. The act of being high for longer than fourteen and a half hours and eating piles of spaghetti while repeating the Holy Mary with no pants on and getting sucked from a girl named "Head." &lt;/blockquote&gt;&lt;br /&gt;
via &lt;a href="http://www.nerdcore.de/wp/2010/02/06/urban-dictionary-uber-rene-und-fast-alle-anderen-namen/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+NerdcoreRSS2+%28Nerdcore%29&amp;amp;utm_content=Google+Reader"&gt;Nerdcore&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-5385717934723711200?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/lwKp7GDPEZ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/5385717934723711200/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=5385717934723711200&amp;isPopup=true" title="1 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/5385717934723711200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/5385717934723711200?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/02/urban-dictionary-uber-vornamen.html" title="Urban Dictionary über Vornamen" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CEEEQ3c5eCp7ImA9WxBXGUo.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-8646204694719343301</id><published>2010-01-31T22:16:00.002+01:00</published><updated>2010-01-31T22:16:42.920+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-31T22:16:42.920+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Entwickler" /><title>Ein Entwickler...</title><content type="html">&lt;div style="text-align:justify"&gt;... hat nie Feierabend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und Wochenenden sind auch manchmal knapp.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wollte ich nur mal so bemerken.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-8646204694719343301?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/3yse3NeSkIw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/8646204694719343301/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=8646204694719343301&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8646204694719343301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8646204694719343301?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/01/ein-entwickler.html" title="Ein Entwickler..." /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEQDSXY6cSp7ImA9WxBRE00.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-2783152065120434645</id><published>2010-01-01T01:39:00.000+01:00</published><updated>2010-01-01T01:39:38.819+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-01T01:39:38.819+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>2010</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vi61CN60uiA&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;hl=en_GB&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vi61CN60uiA&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;hl=en_GB&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
via &lt;a href="http://www.nerdcore.de/wp/2010/01/01/2009/"&gt;Nerdcore&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-2783152065120434645?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/x7cJkrhCtEM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/2783152065120434645/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=2783152065120434645&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2783152065120434645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/2783152065120434645?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2010/01/2010.html" title="2010" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkQHSXg8fCp7ImA9WxBREU4.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-438691059003577240</id><published>2009-12-30T00:45:00.000+01:00</published><updated>2009-12-30T00:45:38.674+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-30T00:45:38.674+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>Designanpassung</title><content type="html">&lt;div style="text-align: justify;"&gt;Es gab ein paar kleine Änderungen am Design. Die Twitter-Leiste ist jetzt eine Liste mit Follow Me-Button. Außerdem werden jetzt Usernamen und Links tatsächlich verlinkt.&lt;br /&gt;
In der Seitenleiste habe ich reichlich alte Sachen rausgeworfen und die alte Blogroll-Liste durch das Blogroll-Gadget ersetzt.&lt;br /&gt;
Desweitern gab es ein paar kleinere Fixes im JavaScript und HTML.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-438691059003577240?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/JiUeUY6-7is" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/438691059003577240/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=438691059003577240&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/438691059003577240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/438691059003577240?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/designanpassung.html" title="Designanpassung" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0AEQXgzeip7ImA9WxBREEo.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-7607882298448183468</id><published>2009-12-29T10:40:00.000+01:00</published><updated>2009-12-29T10:41:40.682+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-29T10:41:40.682+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Knaller" /><category scheme="http://www.blogger.com/atom/ns#" term="Der Blogger" /><title>Feuerwerk</title><content type="html">&lt;div style="text-align:justify; font-family:trebuchet ms;"&gt;Pünktlich zum Verkaufsstart kam mein Paket von &lt;a href="http://www.pyroweb.de/?WebID=1793&amp;JumpIn=1"&gt;pyroweb.de&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt; an. Jetzt brauch ich nur noch ein bisschen Feuerzeuggas und dann kann das neue Jahr kommen!&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_p0rXcTpaFh0/SznKnfuY4JI/AAAAAAAABGM/BqGe8v4VyNQ/s1600-h/feuerwerk.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_p0rXcTpaFh0/SznKnfuY4JI/AAAAAAAABGM/BqGe8v4VyNQ/s400/feuerwerk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420586406396878994" /&gt;&lt;/a&gt;&lt;br /&gt;Die Knallkette ist über 60cm lang: &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_p0rXcTpaFh0/SznKnnwMIoI/AAAAAAAABGU/eVIUF-5_MG4/s1600-h/b%C3%B6ller.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 105px;" src="http://2.bp.blogspot.com/_p0rXcTpaFh0/SznKnnwMIoI/AAAAAAAABGU/eVIUF-5_MG4/s400/b%C3%B6ller.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420586408551916162" /&gt;&lt;/a&gt;&lt;br /&gt;Also, bis zum nächsten Jahr!&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;1&lt;/sup&gt;Affiliate-Link&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-7607882298448183468?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/ykMkPNCN-d8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/7607882298448183468/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=7607882298448183468&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/7607882298448183468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/7607882298448183468?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/feuerwerk.html" title="Feuerwerk" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_p0rXcTpaFh0/SznKnfuY4JI/AAAAAAAABGM/BqGe8v4VyNQ/s72-c/feuerwerk.jpg" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEIFQXc_fip7ImA9WxBSE04.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-8223369034414295571</id><published>2009-12-20T20:14:00.000+01:00</published><updated>2009-12-20T20:15:10.946+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-20T20:15:10.946+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Benutzerfreund" /><category scheme="http://www.blogger.com/atom/ns#" term="Der Geek" /><title>Speicherkarte (2)</title><content type="html">&lt;div style="text-align:justify; font-family:trebuchet ms;"&gt;Die alte SD-Karte ist nun im Elektrozubehör-Himmel und wurde durch eine &lt;a href="http://www.eye.fi/"&gt;Eye-Fi&lt;/a&gt; ersetzt. Sehr praktisch das Teil. Man kann mehrere WLANs eintragen und sobald ein Eye-Fi-Server im Netzwerk läuft werden die neuen Fotos und Videos hochgeladen. Auf Wunsch sogar auf Flickr, Youtube oder einem anderen Dienst veröffentlicht.&lt;br /&gt;Das einzige was den Reibungslosen Betrieb störte, war das meine Kamera noch keine SDHC-Karten unterstützte, aber ein Firmware-Upgrade später hat auch das geklappt.&lt;br /&gt;&lt;br /&gt;Die neue Karte hat übrigens gar keinen Schreibschutzschieber. Großer Vorteil.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-8223369034414295571?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/pdX8mZLMRYM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/8223369034414295571/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=8223369034414295571&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8223369034414295571?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/8223369034414295571?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/speicherkarte-2.html" title="Speicherkarte (2)" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0ICSXsycSp7ImA9WxBSE04.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-1678532955198957165</id><published>2009-12-20T19:57:00.001+01:00</published><updated>2009-12-20T19:59:28.599+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-20T19:59:28.599+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Bahnfahrer" /><category scheme="http://www.blogger.com/atom/ns#" term="Der mit dem Hals" /><title>It's like Hoth</title><content type="html">&lt;div style="text-align:justify; font-family:trebuchet ms;"&gt;Momentan ist Deutschland ein bisschen wie &lt;a href="http://www.tomscott.com/weather/starwars/"&gt;Hoth&lt;/a&gt;. Und weil die Züge der Bahn zwar Ice heißen, aber nur bei schönem Wetter fahren, war ich heute anderthalb bis zwei Stunden länger unterwegs.&lt;br /&gt;Erst fällt der IC aus, der mich von Bonn nach Köln bringen soll, so dass ich den ICE verpasse (evtl. ist der aber auch ausgefallen). Nach einer guten halben Stunde in der nicht so tollen DB Lounge habe ich dann von der Anzeigetafel auf dem Bahnsteig erfahren, dass der nächste ICE auch ausfällt. Gleichzeitig fiel auf der anderen Seite vom Bahnsteig ein IC aus, der auch über Bielefeld gefahren wäre.&lt;br /&gt;Eine weitere halbe Stunde später fuhr dann doch tatsächlich ein IC von Köln nach Bielefeld und das sogar ohne weitere Zwischenfälle.&lt;br /&gt;&lt;br /&gt;It's like fucking Hoth out there!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-1678532955198957165?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/4NLj47ePNis" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/1678532955198957165/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=1678532955198957165&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/1678532955198957165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/1678532955198957165?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/its-like-hoth.html" title="It's like Hoth" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEUFQH05fip7ImA9WxBTF04.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-9070233327813146554</id><published>2009-12-13T20:15:00.002+01:00</published><updated>2009-12-13T20:23:31.326+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-13T20:23:31.326+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Waver" /><category scheme="http://www.blogger.com/atom/ns#" term="Der Geek" /><title>gWave</title><content type="html">Wenn man hier eine Wave sieht, dann hat das einbetten geklappt.&lt;br /&gt;&lt;div id="wave" style="width: 560px; height: 420px"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-9070233327813146554?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/mcGGxa6nxz4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/9070233327813146554/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=9070233327813146554&amp;isPopup=true" title="3 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/9070233327813146554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/9070233327813146554?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/gwave.html" title="gWave" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;AkEERHc5fyp7ImA9WxBTF08.&quot;"><id>tag:blogger.com,1999:blog-1874838794281078062.post-4631641706003829016</id><published>2009-12-13T19:23:00.000+01:00</published><updated>2009-12-13T19:23:25.927+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-13T19:23:25.927+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Der Geek" /><title>Speicherkarte</title><content type="html">&lt;div style="text-align:justify; font-family:trebuchet ms;"&gt;Shit, ich wollte grade ein Foto von dem Schokohandy machen, das ich von der Bahn bekommen habe, da meldet sich der Apparat mit "Karte geschützt". Ich hole die Karte raus und sehe, das sich der Schreibschutzschieber&lt;sup&gt;1&lt;/sup&gt; verflüchtigt hat. Hat jemand eine Idee, wie man den ersetzen könnte?&lt;br /&gt;Die Karte sieht (ungefähr) so aus:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_p0rXcTpaFh0/SyUsZTacf6I/AAAAAAAABGA/aE8fxDtrL9g/s1600-h/sd-karte.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://1.bp.blogspot.com/_p0rXcTpaFh0/SyUsZTacf6I/AAAAAAAABGA/aE8fxDtrL9g/s400/sd-karte.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5414782940202434466" /&gt;&lt;/a&gt;&lt;br /&gt;Bild: &lt;a href="http://www.amazon.de/Hama-HighSpeed-SDHC-Speicherkarte-Class/dp/B0017UI9TG/ref=sr_1_1?ie=UTF8&amp;s=ce-de&amp;qid=1260727336&amp;sr=8-1"&gt;amazon.de&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Andererseits ist das ein Grund auf eine &lt;a href="http://www.eye.fi/"&gt;SD-Karte mit eingebautem WLAN&lt;/a&gt; aufzurüsten.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;1&lt;/sup&gt;3 mal Sch&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1874838794281078062-4631641706003829016?l=gloegg.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gloegg/~4/bTeq-xpLWeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gloegg.blogspot.com/feeds/4631641706003829016/comments/default" title="Kommentare zum Post" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1874838794281078062&amp;postID=4631641706003829016&amp;isPopup=true" title="0 Kommentare" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4631641706003829016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1874838794281078062/posts/default/4631641706003829016?v=2" /><link rel="alternate" type="text/html" href="http://gloegg.blogspot.com/2009/12/speicherkarte.html" title="Speicherkarte" /><author><name>Nils Achterholt</name><uri>https://profiles.google.com/104216733143812107185</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-M5x-75QbN90/AAAAAAAAAAI/AAAAAAAABOY/mP_FC4MUfTI/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_p0rXcTpaFh0/SyUsZTacf6I/AAAAAAAABGA/aE8fxDtrL9g/s72-c/sd-karte.jpg" height="72" width="72" /><thr:total>0</thr:total></entry></feed>

