Wednesday, January 6, 2016

Logging von anonymen Proceduren...

Anonymen Proceduren...

Anonymen Proceduren nutze ich eigentlich oft, ständig, fast nur noch... :-)

Anonymen Proceduren bringen den Sourcecode an die Stellen "wo" ich "ihn" brauche bzw. wenn ich den Sourcecode nochmal lese, kann ich sofort sehen was an dieser Stelle passiert.

Das macht natürlich nur Sinn, wenn ich den Code nicht an anderer Stelle nochmal brauche, da bietet sich selbstverständlich weiterhin eine "normale" Procedure an.

Jetzt nutze ich natürlich mein FDK und alle darin enthaltenen Funktionen. Das FDK bietet umfangreiche Logging-Funktionen. Das klappt auch bis auf eine Kleinigkeit sehr gut.
Ich konnte bisher nicht loggen, welche Procedure des Parameters ausgerufen wurde.

Beispiel:
procedure Foo<T>(AInvoke : TProc)
begin
   ...
   // Log(AInvoke)
   ...
end;

Mit vielen Dank an Remy Lebeau (TeamB) für eine Lösung:

type

  TFDKProcLogHelper = class abstract
    public
      class function Proc2String(P : Pointer) : String;
  end;

class function TFDKProcLogHelper.Proc2String(P : Pointer): String;
type
  PIInterface = ^IInterface;
var
  UnitName : String;
  Ctx: TRttiContext;
  ProcType : TRttiType;
  obj      : TInterfacedObject;
begin
  obj := PIInterface(P)^ as TInterfacedObject;
  UnitName := obj.UnitName;
  Ctx := TRttiContext.Create;
  try
    ProcType := Ctx.GetType(obj.ClassType);
  finally
    Ctx.Free;
  end;

  Result := '"'+UnitName+'.'+ProcType.ToString+'"';
end;
Jetzt kann ich ich loggen mit:
procedure Foo<T>(AInvoke : TProc)
begin
   ...
  FDKConfig.GetLogger( Self ).Debug( 'Foo<%s>(%s)', [
    PTypeInfo( TypeInfo( T ) ).Name,
      TFDKProcLogHelper.Proc2String(@AInvoke) ] );
   ...
end;

Und wieder ist ein Puzzelsteinchen für's FDK fertig.

Wednesday, December 30, 2015

Delphi Codecamp 2016

Delphi Code Camp

Ich freue mich über die Einladung von Bernd Ua - auf dem Delphi Codecamp 2016 - einen Tag über Firemonkey referieren zu dürfen.

Zur Zeit bin ich bei der Ausarbeitung der Themen und würde mich über ein Feedback freuen.

Friday, December 11, 2015

Norton Ghost 15 unter Windows 10 - nach Update...

Langsam fangen die Windows 10 Updates an zu nerven...

Ghost war schon wieder "tot".

Also wieder die Kompatibilität setzen... Infos gibt es hier.

Wednesday, December 9, 2015

Delphi 2007 nach Windows 10 Updates!


Und schon wieder will Delphi 2007 nicht funktionieren... (Nach Windows 10 Update)

Also einfach nochmal machen wir hier beschrieben.

Saturday, December 5, 2015

FDK - Das Firemonkey Development Kit

Zuersteinmal das wichtigste:

Unser Team ist Vollständig.

=====> FFFFFF  DDDDD   K   K  FireMonkey Development Kit
====> F       D    D  K  KK    (c) F. Lauter   aka Mavarik
===> FFFF    D    D  KKK           O. Münzberg aka Sir Rufo
==> F       D    D  K  KK         
=> F       DDDDD   K    K     Version 2015

Momentan planen wir die Features für die 1. Version.

Es zeichnet sich jedoch schon jetzt ab, dass viele Features des FDK's nicht Firemonkey spezifisch sind.

Es wird also auch für "nicht Firemonkey Entwickler" sicherlich einiges Interessantes dabei sein.

- Pattern
- Factorys
- Converter
- Helper, Strukturen und Wrapper
- Threading
- uvm.

Aber natürlich auch FMX-Spezifische Units.
- Mobil-Helper
- Datenbank Wrapper
- Geräte Kommunikation
- Event-Helper
- uvm...

Sowie wir eine Feature-Matrix haben, werden wir diese veröffentlichen.
Selbstverständlich werden wir für unser FDK auch geeignete Schulungen anbieten. Termine stehen jedoch noch nicht fest.




Thursday, November 12, 2015

Android & Houdini

Ich habe schon ewig danach gesucht, wie man Houdini "verwendet"... Heute habe ich durch Zufall den entscheidenden Hinweis gefunden..

Einfach im Verzeichnis der  Delphi-Installation unter:
{$BDS}\ lib\Android\debug\x86 -> nach x86.old
{$BDS}\ lib\Android\release\x86 -> nach x86.old
Die Verzeichnisse renamen... Und schon wird die Fehlermeldung nicht mehr mit ein kompiliert.
Und Houdini kann ggf. starten.

Leider habe ich noch kein Feedback...

Friday, October 2, 2015

Neuer Patch für iOS9.x

Na toll... Nach einer Woche testen...

Endlich ein Patch von EMBT  der "alle" Probleme löst.

Naja die App war eh noch nicht durch die Prüfung.
Also noch mal von vorne...

Selbstverständlich hat sich das verhalten unter iOS9 ein klein wenig verändert. Also musste ich sowieso noch mal an den Source.

Na dann wieder 14 Tage warten, bis die App in den Store kann.

Friday, September 25, 2015

Application Loader ERROR ITMS-90534

Es ist immer wieder schön, wie man als nicht Apple-User rumstolpert und von kryptischen Fehlermeldungen überrascht wird...

ITMS-90534 ist so eine :

 "Invalid toolchain. New apps and app updates must be built with the public (GM) versions of XCode 6or later, and ios 8 SDK or later.  ios 9 apps for internal TestFlight testers must be built with the latest seed of the ios SDK and uploaded with the latest seed of Xcode"


Eigentlich sollte die Fehlermeldung lauten : Sie haben versucht eine Ad-Hoc App in den Apple Store zu laden. Aber der "Rest" hätte natürlich auch seien können...

Vorher ging es erstmal darum überhaupt den Upload zu starten:

Sie sind nicht berechtigt diesen Service zu nutzen. Lautetet die Fehlermeldung.

Eigentlich hatte ich "nur" das Passwort zu meinem Apple-Account geändert. Leider hat der Application Loader davon nichts mitbekommen. Ein klick auf die eMail Adresse oben links hat das Problem behoben...

Dauer der "Aktion"  App in den Store laden somit 2h.

Friday, September 18, 2015

Delphi und iOS9

iOS9 ist raus und "alle" Apps die mit Delphi XE7 & XE8 compiliert wurden müssen geändert werden.

Es reicht natürlich diese mit Delphi 10 neu zu compilieren. Für alle die kein Delphi 10 haben, gibt es hier eine Anleitung.

Wednesday, September 9, 2015

Delphi 2007 unter Windows 10!

Nach dem Upgrade von Windows 7/8 auf Windows 10, will Delphi 2007 keine einziges Projekt mehr kompilieren.

Es wird eine "Targets" Datei nicht gefunden...

Zuerst einmal wundert man sich natürlich wofür eine .net Datei benötigt wird.

Die Lösung ist ganz einfach: Nach dem Update existiert ein Ordner

C:\Windows.old

Hier aus dem Unterordner: C:\Windows.old\Windows\Microsoft.NET\Framework\v2.0.50727

alle Borland.*.Tagets Dateien nach

C:\Windows\Microsoft.NET\Framework\v2.0.50727

kopieren...

Dann noch Andy's IDE Fix Pack 4.4 installieren und schon geht Delphi 2007 wieder.

Monday, September 7, 2015

Mein Youtube Channel...

Nur damit die Infos sofort zu finden sind.

Mein Youtube Channel!

Zugegeben in letzter Zeit ist der Channel "etwas" zu kurz gekommen.

Aber als nächstes werde ich meine Vortrag der Delphi-Tage online stellen... (Nach dem Event)

MVVM war der Start.

2014 bin ich auf die tolle Idee gekommen, eigentlich müsste ich mich doch mal mit MVVM beschäftigen.

Es gibt dazu das ein oder andere nette Video zum Beispiel von:
Eigentlich hätte ich das ganze auf die "neue" MessageQue von Delphi aufbauen müssen, aber ich dachte es wäre erstmal ne gute Idee das selber zu programmieren.

1. Multicast Threadsave Eventque... Erledigt.

Spätestens wenn man(n) plötzlich alles gekapselt und eine schöne Trennung von GUI und Logik hat, stellt man fest... Bzw. man hat eine regelrechts Abneigung dagegen etwas statisch zu programmieren.

In MVVM wird der View einfach ein ViewModel zugewiesen - das kann natürlich jedes mal ein anderes sein - und daraus ergeben sich von selber viel variable und leistungsstarke Möglichkeiten.

Toll... Und in diese variable Welt soll ich statischen Code eintippen... Wohlmöglich noch fest verdrahtet?

Hierfür muss eine bessere Lösung her.

Und was ist mit den Datenbanken? Eine Serverkomponente aufs Formular? Wohlmöglich dann noch alle Tabellen? Nein... Was ist wenn sich mal etwas ändert oder wenn die Netzwerk-Topologie eine ganz andere Organisation der Serverlandschaft mit sich bringt...

Auch dafür muss eine bessere Lösung her.

Und dann?

Sagen wir mal es gäbe eine Lösung für ein dynamisch zu ladendes Server-Environment und auch ein Framework für die dynamische Verknüpfung der Logiken. Wer will diese ganze Dynamic dann statisch programmieren?

Also braucht man für das ganz noch einen netten Logikeditor.

Und? Sagen wir mal so... Es Funktioniert.