Dienstag, 31. Januar 2017

FDK - RELEASE - DAY

FDK - RELEASE - DAY

Die Auslieferung des FDK hat begonnen.


Es hat ein bisschen länger gedauert als erwartet, aber das soll die Freude nicht schmälern.

Die gute Nachricht lautet : Bis zum 30.04.2017 gilt noch der Early-Bird-Preis von 299,- €

Momentan gibt es "nur" die Voll-Version in der Source-Code Distribution. Für andere Versionen hat sich bisher keiner Interessiert, daher erstmal nur diese.

Eine Demo-Version ist auch Planung, aber das kann noch ein bisschen dauern, daher habe ich den Early-Bird Zeitraum nochmal verlängert.

Mein eigener Installer löst direkt mehrere Aufgaben.
  • Die Installation / De-Installation
  • Pflege- und Änderbarkeit der Kundendaten (Adresse, Telefon usw.)
  • Online-Shop - Inkl. Rechnungslegung
  • Neukunden-Registrierung

Das Setup Programm steht ab SOFORT zum download bereit unter: http://www.delphiprofi.de/FDK/FDKSetup.zip

 
Alle die bereits eine FDK-Early-Bird-Version bestellt haben, sollten bereits im E-MAIL-Postfach eine entsprechende Nachricht mit den Zugangsdaten finden.
 
Das gilt auch für die Entwickler, die auf den Delphitagen 2016 eine Version gewonnen haben. Leider fehlt mir von einem noch die EMAIL, also bitte melden! 

Das FDK ist für Delphi 10.1 (2) entwickelt - läuft aber auch mit XE 10 Seattle und mit kleinen Einschränkungen auch auf  XE 8. XE 7 & 6 habe ich nicht mehr getestet.
Das Setup läuft auf Windows Vista, 7, 8 und 10.
 
 
Also viel Spass
 
und Happy Coding...
 
PS: Momentan ist die Bezahlung immer per Vorkasse andere Bezahlsysteme wie amazon-Pay oder Paypal sind in Vorbereitung.
 
Eine Kurzanleitung (PDF) für den Einstieg ist in deutscher Sprache enthalten. Alle Code-Insight Dokumentationen sind in englischer Sprache - das gilt auch für den Installer.
 
Auch wenn dieses Developer Kit für FMX entwickelt wurde, sind 90% der Units auch für das VCL-Framework zu gebrauchen.
 
Die Auslieferung der Version 1.0 umfasst neben den Demos, Sourcecode Formatter, LiveTemplates, Resourcebasierte Exception-Texte in English, Deutsch (Spanisch, Russisch, Französisch und Niederländisch nur per Google-Übersetzer), folgende Units im Source:
 
Delphi.VersionConsts.pas
Delphiprofi.FDK.AnyConverter.pas
Delphiprofi.FDK.AnyFactory.pas
Delphiprofi.FDK.AppConfig.pas
Delphiprofi.FDK.AppGlobal.pas
Delphiprofi.FDK.BackgroundWorker.pas
Delphiprofi.FDK.CallByIDFactory.pas
Delphiprofi.FDK.Classes.pas
Delphiprofi.FDK.Compressing.pas
Delphiprofi.FDK.Compressing.ZLib.pas
Delphiprofi.FDK.Config.pas
Delphiprofi.FDK.Console.pas
Delphiprofi.FDK.Converters.pas
Delphiprofi.FDK.DataView.pas
Delphiprofi.FDK.Enumerables.pas
Delphiprofi.FDK.Events.pas
Delphiprofi.FDK.Exceptions.Handler.pas
Delphiprofi.FDK.Exceptions.pas
Delphiprofi.FDK.FireDAC.pas
Delphiprofi.FDK.FluidCreator.pas
Delphiprofi.FDK.Fmx.Enumerables.pas
Delphiprofi.FDK.FMXHelpers.pas
Delphiprofi.FDK.Generics.BlockingCollections.pas
Delphiprofi.FDK.Generics.Collections.pas
Delphiprofi.FDK.HeartbeatWorker.pas
Delphiprofi.FDK.Helpers.pas
Delphiprofi.FDK.IdleWorker.pas
Delphiprofi.FDK.IFDEF.pas
Delphiprofi.FDK.IO.pas
Delphiprofi.FDK.Logging.ConsoleLogger.pas
Delphiprofi.FDK.Logging.DebugLogger.pas
Delphiprofi.FDK.Logging.FileLogger.pas
Delphiprofi.FDK.Logging.LogFilter.pas
Delphiprofi.FDK.Logging.pas
Delphiprofi.FDK.MainApplication.pas
Delphiprofi.FDK.Messages.pas
Delphiprofi.FDK.Observer.pas
Delphiprofi.FDK.Pattern.Internals.pas
Delphiprofi.FDK.Pattern.pas
Delphiprofi.FDK.Platform.Utils.pas
Delphiprofi.FDK.Queues.pas
Delphiprofi.FDK.Resource.compressed.pas
Delphiprofi.FDK.Resources.pas
Delphiprofi.FDK.Specifications.Core.pas
Delphiprofi.FDK.Specifications.Dates.pas
Delphiprofi.FDK.Specifications.pas
Delphiprofi.FDK.Specifications.Strings.pas
Delphiprofi.FDK.Stateless.pas
Delphiprofi.FDK.Streams.Hashing.pas
Delphiprofi.FDK.Streams.Internals.pas
Delphiprofi.FDK.Streams.pas
Delphiprofi.FDK.StringConsts.pas
Delphiprofi.FDK.Threading.AsyncTasks.pas
Delphiprofi.FDK.Threading.pas
Delphiprofi.FDK.Threading.Pipeline.pas
Delphiprofi.FDK.Threading.Timers.pas
Delphiprofi.FDK.TimeoutWorker.pas
Delphiprofi.FDK.TreeViewWalker.pas
Delphiprofi.FDK.Types.pas
Delphiprofi.FDK.Utils.pas
Delphiprofi.FDK.Vcl.Enumerables.pas
Delphiprofi.FDK.Winapi.Windows.pas
Es folgen noch weitere Dateien...
 
 
 

Samstag, 21. Januar 2017

FMX und der Ärger mit den Styles...

FMX und der Ärger mit den Styles...

Hat eigentlich irgend jemand schon mal einen eigenen "premium"-Style für Windows, Android und iOS selber erzeugt?

Ich meine nicht die Farbe der Grafik geändert, sondern "so richtig"...

EMBT soll selber mit dem Bitmap-Style-Designer arbeiten? LOL... Kaum zu glauben. Das Tool ist völlig unproduktiv... (Soll nicht heißen, dass es nicht funktioniert).

Wie sind die mitgelieferten Styles erzeugt worden? Einfach mal so die Grafiken auf ein PNG positionieren und dann ALLE einzeln mit der Maus verknüpfen?

Selbstverständlich werden alle Style-Elemente total unterschiedlich für iOS, Android und Windows positioniert... Warum auch ein Schema nehmen... omg... Sorry, aber ich habe in meiner Firma keine eigene Style-Abteilung die nur den ganzen Tag mit Photoshop zaubern.

Lassen wir mal die Discussion, ob sich das Aussehen einer App auf jedem Betriebssystem unterscheiden soll, weg. Nach dem Motto: "Ich hab mir extra ein Android-Handy gekauft, weil die iOS-Apps mir zu bunt sind". Deswegen sieht die FB-App auf iOS auch genauso aus wie auf Android... (Abgesehen von der Position der Tabs)

Sonst würden die "premium"-Styles ja auch keinen Sinn machen, oder?

Also: Meine-App... Mein-Style...

Also legen wir mal los... Welche Vorlage? Interessanterweise sind die Einstellung der einzelnen Verknüpfungen auf Plattformspezifisch, aber was sind die richtigen Werte?

Also hilft nur Try und Error... (2 Tage)

OK...

1. Style ist fertig... Unnötig zu sagen, dass dieser Style auf Windows und iOS prima funktioniert, aber auf Android Anzeigefehler produziert...

Ich werde weiter berichten...

Natürlich habe ich für das ein oder andere extra ein Tool programmiert... ;-)



Montag, 2. Januar 2017

Ein frohes 2017!

Und schon wieder ist ein Jahr rum. Klingt komisch, is aber so...

Als ich heute eine kleine Änderung im FDK gemacht habe, habe ich "selbstverständlich" auch im Changelog die Änderung notiert und musste feststellen, der 1. Eintrag war schon im Jahr 2015...

2015 habe ich damit schon begonnen? Kaum zu glauben... Wie viel Entwicklungszeit schon in den Units steckt.

Natürlich habe ich nicht 15 Monate kontinuierlich daran gearbeitet, sondern immer dann, wenn ich eine neue Routine gebraucht habe diese - in einer allgemeinen Version - ins FDK aufgenommen. Sehr viel Zeit ist aber auch in Änderungen und Verbesserungen geflossen.

Ein kleines Fazit - nur für mich:

Das FDK zu entwickeln war die beste Entscheidung die ich seit langem getroffen habe. Jede Stunde die in die Entwicklung geflossen ist, habe ich schon mehr als doppelt bei meinen eigenen Projekten gespart...

Mein Ziel war es.
  1. Wiederverwendbaren Code zu produzieren.
  2. Mit Dependency Injektion und Factorys, meine Units unabhängige von einander zu erzeugen.
  3. Wrapper zu verwenden, die einem die Verwendung von XY erleichtern.
  4. Projekte im MVVM - Style zu programmieren.
  5. Plattform unabhängig zu programmieren.
  6. Threadsave zu programmieren.
  7. Zeit zu sparen.
Alle diese Punkte werden erfüllt.

Ein Beispiel aus einem aktuellen Projekt (Die Unit ist nicht mal 500 Lines lang)

Uses
  System.Classes,
  System.SysUtils,
  System.Rtti,
  System.Generics.Defaults,
  System.Generics.Collections,
  REST.JSON,
  Delphiprofi.FDK.AnyFactory,
  Delphiprofi.FDK.FMXHelpers,
  Delphiprofi.FDK.Streams,
  Delphiprofi.FDK.Enumerables,
  Delphiprofi.FDK.Compressing.Zlib,
  Delphiprofi.FDK.REST,
  Delphiprofi.FDK.JSON,
  Delphiprofi.FDK.Utils,
  Delphiprofi.FDK.Helpers,
  Delphiprofi.FDK.Types,
  Delphiprofi.FDK.FluidCreator,

  Delphiprofi.FDK.FireDac,
  Delphiprofi.FDK.LocalWebModul,
  Delphiprofi.FDK.Messages,
  Delphiprofi.FDK.TreeviewHandler

  MyInterfaces;

Macht aber den kompletten IO zwischen lokaler Datenbank, dem REST Server und der Applikation. Hierfür habe ich KEINE EINZIGE Komponente auf ein Form geklickt.

Abgesehen von wenigen Ausnahmen, habe ich im gesamten Projekt kein einziges Konstrukt wie:

Foo := TFoo.Create;
try
  try
    // Whatever
  except
    On E : Exception
      begin
         // Whatever
      end;
  end;
finally
  FreeAndNIL(Foo);
end;

Da es zur Zeit noch kein ARC für Windows gibt, nutze ich konsequent Interfaces und Ref-Counted Objecte... Somit läuft der Code immer gleicht, egal ob mobile oder Windows/OSX Version.

Es bleibt spannend...