Delphi vs. die Welt

Auch ich bin (unfreiwillig) „Delphianer“ und um so länger ich mit Delphi arbeite (seit 2003 Hauptberuflich) desto mehr mag ich es. Klar ist seitens Borland (Codegear, Embacadero) nicht immer eine 100% stabile IDE auf den Markt geworfen worden und man darf immer viel patchen und upgraden. Aber wer behauptet denn Microsoft hat das besser im Griff? Ich bekomm mit VS2k8 regelmäßig die Kriese. Auch wenn sie sich viel bei Borland abgeschaut haben was handling und usability angeht sehe ich durch meine Borland-Brille immer noch ein geschminktes VS6, dass ich wirklich hassen gelernt habe.

Und .Net sollte, bei allen Vorteilen, nun wirklich nicht die Basis für eine Software sein bei der es auf Geschwindigkeit und Genügsamkeit ankommt und Portabilität zweitrangig ist. Was nützt es denn, frag ich euch, wenn IPS auf Linux lauffähig ist aber ausser nem gehackten FS20 und ein bissel 1-wire nichts drauf läuft?

Und wer ernsthaft immer noch glaubt ein Windows-System könne nie stabil laufen, der soll seine Win98-CD zum Recycling-Hof bringen. So!

Das sind aber eher Probleme eines Anwenders, der Anforderungen an eine Software hat, die für Entwickler geschrieben ist. Die Entwicklungsumgebungen untereinander sind von den Basics sooo unterschiedlich auch nicht. Niemand garantiert dir, dass die Antwort nicht auch lauten hätte können: „Hier kann ich nix machen, das liegt an <beliebige Programmiersprache>“. Irgendjemand hat festgelegt, dass Umstände so sind wie sie sind. Entweder bei Microsoft oder bei Borland oder bei <beliebiger Nieschenanbieter>. Ändern kann diese Umstände, von uns zumindest, niemand.

Bedenkt bitte immer auch dass es die unentgeltlichen jahrelangen Arbeit von tausenden von Delphi-Programmieren zu verdanken ist, dass PHP-Support, Serielle Schnittstellen, zig Netzwerk Protokolle und Vieles mehr im Internet kostenlos als Delphi-Addon oder als „codeschnipsel“ in starken communities verfügbar ist. Eine neue, schicke, trendige Programmiersprache hat das oft alles nicht. IPS Ohne Netzwerk-Support oder PHP wär nicht das gleiche, findet ihr nicht auch? Und versucht erstmal eine ähnlich performante und unfangreiche Netzwerk-Komponenten-Sammlung wie die Indys oder Async Pro zu finden.

Mein Fazit:
Delphi ist stabil. Nicht alle Versionen waren empfehlenswert aber die braucht man ja auch nicht zu wählen. Delphi hat eine große community - ein bissel wie die IPSler. Es gibt viel kostenlose Addons und Erweiterungen. Wer mehr braucht kann auch Geld investieren. Es gibt quasi nichts was es nicht gibt, nichts was man mit Delphi nicht kann (auf Ausnahmen gehe ich weiter unten ein). Delphi ist recht einfach und gut strukturiert. Das erleichtert das Prototyping, die Pflege der Quellcodes und auch den Einstieg in die Programmierung allgemein. Delphi wurde schon zig mal für tot erklärt und ist doch nicht klein zu kriegen gewesen. Es wird auch weiter bestehen. Selbst wenn Delphi eingestellt würde gäbe es die Möglichkeit auf andere Objektpascal IDEs umzusteigen.

Was sind die konkreten Nachteile: Mit Delphi kann man nicht für Linux oder Mac programmieren. Ja und? Welcher Hardware-Hersteller im Smarthome-Bereich bringt denn schon Treiber für Mac mit? Mit Delphi kann man nicht für WinMobile oder Android programmieren. Ja und? Niemand wird ernsthaft seinen IPS-Server auf nem Handy laufen lassen wollen. Mit Delphi kann man nicht oder nicht gut hardwarenah programmieren. Na und? Seit Windows XP geht das sowiso nur noch ganz schwierig weil Microsoft das unterbindet, womit sie auch recht haben. Mit Delphi kann man keine Treiber programmieren. Gut… Ich bin jetzt kein Hardware-Hersteller… Interessiert mich nicht.

Solange IPS auf einem Windows PC läuft ist Delphi eine gute Wahl.

Toni

Diese Diskussion geht mir sowieso immer tierisch auf die Nerven … Wenn ich schon „Windoofs“ oder „Mickisoft“ lese, krieg ich die Kriese … Ich will hier keine Grundsatz-Diskussion eröffnen, aber jedes Produkt muss sich entwickeln - das geht mal schneller, mal langsamer. Seit Windows Server 2003 / Windows XP gibt es in Sachen Stabilität mal wirklich nix zu meckern … und wer da andere Erfahrungen gemacht hat, möge bitte mal auf seine (gecrackte) Freeware/Shareware/Addware/Tuning/Pimping…und was weiss ich noch - Software kucken (uups, das war jetzt bös, tschuldigung an alle Computer-Bild-Leser ;))

Wenn man sein System halbwegs vernünftig pflegt und nicht jeden Sch… installiert, gibts wenig Probleme. Das gilt übrigens nicht nur für Microsoft-Systeme … :wink:

Oh ja… Das kann ich nur unterstreichen. Ich hab keine Skrupel IPS auf nem W2K-Rechner einzusetzen. Wenn man ein bissel Ahnung hat und weiss was man tut ist das kein Problem.

Und wenn man absolut Keine hat und eben nicht weiss was man tut, dann kann man auch einen Linux-Server ganz ordentlich zum Absturz bringen. Keine Arme, keine Kekse. Thats life.

… ich erinnere mich gerade ein ein Werbe-Plakat von Microsoft … aus den frühen 2000ern :smiley:

Bitte was? Wieso sollte Delphi schneller sein als C# .net? Und vom ganzen Exceptionhandling und von der Mächtigkeit her ist doch Delphi schon lange hinten dran. Was nützen mir denn „Codesniplets“, wenn ich das ganze schon bei C# gleich mit bekomme?

Ich arbeite beruflich mit Delphi-Programmiern zusammen und immer wieder kommen die gleichen Vorurteile gegenüber C# ums Eck - bei uns aus Unkenntniss und Umstellungsangst.

Mein Fazit:
Ich habe auch schon was für IPS geschrieben, würde aber lieber direkt ein Modul schreiben als über SOAP zu gehen. Solange ich das aber nur mit Delphi kann: sorry.

Das Dot Net framework ist ein Monster. Es ist riesig groß aber verbraucht „natüürlich“ überhaut keine Ressourcen. Und „natürlich“ ist ein Laufzeitkompilat vollkommen CPU- und Speicherneutral. Die Idee und der Mehrwehrt von .Net ist ein vollkommen anderer und darin ist es gut.

Ein unbedarfter Benutzer hat schon mal echte Probleme wenn die Meldung erscheint: Dieses Programm setzt das .Net framework 3.5 voraus. Standardreaktion: Bitte was? Oder : Das Tool geht irgendwie nicht.

Ich verwende .Net und ich mag .Net. Die IDE nicht, aber das ist Geschmackssache. Ich finde aber .Net ist eben nicht die Lösung auf alle Fragen. Blind nach c# zu schreien ist mindestens genau so kurzsichtig wie es blind abzulehnen. Und wäre IPS in C++ geschrieben hätte ich keine Module geschrieben. So ist das Leben halt. Keine Arme, keien Kekse.

BTw: Die SOAP Schittstelle ist so schlecht nicht. Machste halt nen WDSL Import und verwendest sie nativ. Das sollte auch im VS2k8 klappen;)

Liebe Grüße von der hohen See,

Toni

Klar verbraucht es Ressourcen, wie alles was läuft. Aber es ist auch nicht das Ressourcenmonster wie es sich viele vorstellen. Ressourcen vertilgen geht auch mit Delphi, denn wie immer: Je mehr DLLs ich lade, desto mehr Speicherverbrauch…

Da ich SW im Industrieumfeld auch mit .net schreibe, weiß ich, daß auch C# SW 24/7 laufen kann (ohne daß sich Speicher aufbaut oder es auf 100% CPULast steht)… :slight_smile:

Das haste aber auch z.B. mit C++ und QT, wo „Die Startkonfiguration des Programms ist nicht korrekt“ übersetzt lautet: „Bitte installieren Sie die Visual C++ Runtime“…

Klar ist es nicht die Lösung für alles, aber für einiges. Und klar ist es Geschmachssache, nur persönlich finde ich Delphi ist als Mittel der Wahl sehr stark abgefallen bei den ganzen Alternativen. Und wenn ich schon was in meiner Freizeit schreibe und es mir aussuchen kann, dann C# mit kostenlos IDE statt mir ein Ehemals-Borland-Keine-Ahnung-Wie-Die-Jetzt-Heißen Pascal.

Ich weiß, hab ich ja schon gemacht. So hab ich meine ICQ-Notifications angefangen zum implementieren… :slight_smile:

Liebe Grüße aus dem tiefen Süden,
Grooooog.

Sorry für Doppelpost, aber gibts ne freie Delphi IDE, mit der ich mich an das IP-Symcon SDK wagen kann? Ich hab zwar Lazarus gefunden, aber ich weiß nicht, ob das Ding IPS-Kompatibel ist.

Meines Wissens nicht, aber ich bin mir auch nicht sicher ob man
für Erweiterrungen unbedingt das SDK nutzen sollte/muss. Ich mache
es jetzt via SOAP oder noch schöner (weil einfacher) mit Trixi von
Toni. Dann ist man unabhängig von Delphi und (hoffentlich) den Versionen von
IPS.

VG
Stephan

Nö… IPS ist ziemlich festgelegt diesbezüglich. Es muss eine Delphiversion sein, die „Helperclasses“ unterstützt. Und es sollte noch keine Unicode-Version sein. Da bleiben ansich nur die Delphi versionen 2005, 2006 und Turbodelphi. Diese müssen aber mit aktuellen TCP/IP Komponenten geupgraded werden. Alles ne fummelige Angelegenheit.

Da war mir die Idee mit Trixi gekommen, die ich noch weiter ausbauen werde. Aber die Zeit lässt das im Moment nicht zu. Damit biste unabhängig und kannst auch ne kostenlose IDE verwenden oder mit .Net entwickeln. Ganz wie du magst.

Toni

Hier mal ein Beispiel wie einfach sich die Trixi.dll einsetzen laesst:

procedure TfSettings.Set_IPSVariable;
var
  Server:   AnsiString;
  iX:       integer;
begin
  server:= ansistring(settings.IPSServer.stIP);
  if Connect(PAnsiChar(Server), StrToInt(settings.IPSServer.stPort)) then
  begin
    Add_Event(1,'Connected to IPS');
    for iX := 1 to settings.iUsers do
    begin
      writeinteger(StrToInt(settings.aVariable[iX].stWeight), aUserdata[iX].iWeight);
      writeinteger(StrToInt(settings.aVariable[iX].stLeanmass), aUserdata[iX].iLeanmass);
      writeinteger(StrToInt(settings.aVariable[iX].stFat), aUserdata[iX].iFat);
    end;
    disconnect;
    Add_Event(1,'Disconnected from IPS');
  end else Add_Event(3,'Connected to IPS');
end;

procedure TfSettings.GetScale_Weight;
var
  s : string;
  js : TlkJSONObject;
  iX:   integer;
begin
  for iX := 1 to settings.iUsers do
  begin
    s := http.Get('http://wbsapi.withings.net/measure?action=getmeas&userid='+settings.aUsers[iX].stUserID+'&publickey='+settings.aUsers[iX].stPublicKey);
    js := TlkJSON.ParseText(s) as TlkJSONObject;
    aUserdata[iX].iWeight:= StrToInt(js.Field['body'].Field['measuregrps'].Child[0].Field['measures'].Child[0].Field['value'].Value);
    aUserdata[iX].iLeanmass:= StrToInt(js.Field['body'].Field['measuregrps'].Child[0].Field['measures'].Child[1].Field['value'].Value);
    aUserdata[iX].iFat:= StrToInt(js.Field['body'].Field['measuregrps'].Child[0].Field['measures'].Child[2].Field['value'].Value);
  end;
end;

Das ganze ist zwar auch Delphi, aber eine vom SDK nicht unterstuetze Version. Der Code parsed eine Webseite und schreibt die Daten direkt
in die IPS Variablen.

VG
Stephan

meine delphi kenntnisse sind schon sehr lange zurück aber kann man eigentlich ein delphi programm reverse engineeren?

Im prinzip schon. So wie jede andere Sprache auch. Aber wenn du nicht grad ein echter crack auf Assemler und im IP-Stack bist wirst du beim IPS-SDK nicht viel erreichen. :o

Toni

Danke für die Antworten. Trixi hab ich ja schon im Einsatz. Ich wollte halt was haben, was in IPS direkt läuft und nix was ich extern pollen muss.

Unterstützt Delphi sowas wie Callbacks?

hmm ich dachte da gerade nicht an IPS. Ich hab hier ne andere Anwendung um zu sehen wie das Protokoll aufgebaut ist.

Delphi ist eine mächtige Sprache die zum Beispiel Visual c++ in (fast) nichts nachsteht. Sie wird bis heute weiterentwickelt und bekommt noch immer neue Features verpasst von denen viele Entwickler zu ihrer Einführung noch garnicht wissen wozu sie sind. (Ging mir vor kurzem mit Generics so. Tolles Feature… was macht es? ;)) Sie hat den Focus mehr auf Anwendungsentwicklung statt auf Hardwarenähe so dass man damit besser Windows-Applikationen als Treiber entwickeln kann. Für Atmels beispielsweise also nicht geeignet.

Viele gute und/oder (;)) namenhafte Software ist in Delphi geschrieben. MediaMonkey, TuneUp Utilities, Spybot, Fruity Loops, Total Commander und Skype zum Beispiel. Dev-C++ ist eine C++ Entwicklungsumgebung die in Delphi geschrieben wurde. Delphi selbst wird ebenfalls in Delphi geschrieben.

Mit anderen Worten: Ja, Callbacks gehören zum festen Funktionsumfang von Delphi.

Toni

Ich habe „meine“ Programmiersprache gefunden. Der einzige Grund mir Turbopascal resp. Delphi nochmal anzuschauen ist IPS ohne Pollen zu verwenden. Aber wenn das jetzt nur mit Uralt-Special-Editions möglich ist, die ich mir auch noch kaufen müßte, dann bleib ich doch bei C# und schreib mir eine Container-App mit Plugin-Loader. :slight_smile:

Das mit den Callbacks war eh ein Blitzgedanke, der sinnlos war. So komm ich es auch ned an die Events ran.

Dann bleib mal bei c# und wart die Entwicklung von TRIXI ab :wink:

Toni

Also wenn du mir den Zugriff auf Variablen ohne Pollen und dafür durch Events und Callbacks ermöglichst wäre das eine gute Geschichte… :slight_smile:

Steht auf der ToDo… Allerdings sind meine .Net Kenntnisse nur recht bescheiden. Könnte sein, dass du anhand eines Delphi Beispiels selbst übersetzen musst… :o

Toni