Delphi-PRAXiS
Seite 20 von 48   « Erste     10181920 212230     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Was nervt euch so, während der Programmierung oder so allgemein (https://www.delphipraxis.net/152540-nervt-euch-so-waehrend-der-programmierung-oder-so-allgemein.html)

himitsu 17. Dez 2011 22:54

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Sagen wir es mal so, ich hab das "absichtlich" gemacht, da die Liste sich nicht verändern darf.

Einzige andere sichere Möglichkeit wäre, daß man jeden Eintrag einzeln sperren können müßte,
daß jeder Thread, bzw. jedes Objekt (Enumerator und Co.) seinen eigenen Index-Zähler bekommt und die Indize gegenseitig synchronisiert würden.

himitsu 19. Dez 2011 13:04

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Man hat doch mal vor einer Weile das FastStringsProjekt in Delphi aufgenommen ... ist ja gut und schön,
aber wenn man jetzt dieses wieder mit vollkommen schrottigen Funktionen zur Minna macht ... also das nervt echt mal.


Frage: Was ist schneller?
Gesucht ist, ob ein String mit einem bestimmten Text beginnt.

*
Delphi-Quellcode:
if Pos(x,y)=1 then
den String überall suchen und danach schauen ob er gleich am Anfang gefunden wurde. (ist er nicht vorhanden, wurde umsonst der ganze String durchsucht)

*
Delphi-Quellcode:
if StartsStr(x,y) then
schauen ob der String damit beginnt


Vom Code her ist letzeres ja verständlicher.
Und auch von der Logik her sollte Letzteres schneller sein, oder nicht?



Nee, natürlich nicht, da kommt man dann auf die saudämliche Idee und fängt an Strings umzukopieren, anstatt einfach nur zu vergleichen :wall:
Zitat:

Delphi-Quellcode:
function AnsiStartsStr(const ASubText, AText: string): Boolean;
begin
  Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
end;


Luckie 19. Dez 2011 13:15

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Also ich gehe mal davon aus, dass die Entwickler keine vollkommenen Ioten sind. Deswegen gehe ich davon aus, dass sie sich was dabei gedacht haben.

himitsu 19. Dez 2011 13:29

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Ja, die haben sich Arbeit gespart (2 Sekunden weniger nachdenken müssen), ansonsten ist diese Funktion einfach nur grauenhaft.
Rufe diese Funktion so 300.000 Mal kurz hintereinander auf (mit unseren wenigen Testdaten ... wird mal mehr), da wird dann sinnlos unsere wertvolle Zeit verplempert.


Aktuell: Interne Aufrufe/Weiterleitungen
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;

Result := AnsiStartsStr(ASubText, AText);
Result := AnsiSameStr(ASubText, Copy(AText, 1, Length(ASubText)));
Result := AnsiCompareStr(S1, S2) = 0;
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(S1), Length(S1),
  PChar(S2), Length(S2)) - CSTR_EQUAL;
Für den/jeden Stringvergleich wird hier eine temporäre Variable angelegt, umkopiert und freigegeben.


Besser (nur prüfen/nichts kopieren):
Delphi-Quellcode:
function StartsStr(const ASubText, AText: string): Boolean; inline;

Result := AnsiStartsStr(ASubText, AText);
Result := CompareString(LOCALE_USER_DEFAULT, 0, PChar(ASubText), Length(ASubText),
  PChar(AText), Min(Length(AText), Length(ASubText))) - CSTR_EQUAL;
MSDN-Library durchsuchenCompareString hat nicht umsonst eine Angabe für die Längen ... nämlich genu für sowas (Teilvergleiche).


PS: StartsText/AnsiStartsText ist da besser umgesetzt. (hier hätte ich jetzt zwei AnsiLowerCase und ein Copy erwartet :stupid:)

Bummi 19. Dez 2011 13:39

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Seit Jahren ein unaufhaltbarer Trend Mamutschkaprinzip, etwas funktionierendes immer wieder einzwiebeln und noch ne Schicht drum 20 Interfaces Dran, Wrappen, in eine Klasse packen , 20 Ableitungen davon machen, das ganze per einfacher Class Executefunktion zugrifbar machen, das dann wieder in eine Klasse übernehmen deren 27igste Ableitung dann das ist was der Entwickler am Ende der Kette meint nehmen zu müssen um ein inc(IntegerVar) auszuführen.

Sorry für den Enthusiasmus ....

Progman 19. Dez 2011 14:30

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Bummi (Beitrag 1142217)
Seit Jahren ein unaufhaltbarer Trend Mamutschkaprinzip, etwas funktionierendes immer wieder einzwiebeln und noch ne Schicht drum 20 Interfaces Dran, Wrappen, in eine Klasse packen , 20 Ableitungen davon machen, das ganze per einfacher Class Executefunktion zugrifbar machen, das dann wieder in eine Klasse übernehmen deren 27igste Ableitung dann das ist was der Entwickler am Ende der Kette meint nehmen zu müssen um ein inc(IntegerVar) auszuführen.

Sorry für den Enthusiasmus ....

Ich glaube, besser kann man es gar nicht schildern 8-):-D

Bummi 21. Dez 2011 10:48

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
So langsam VirtualBox, das ist jetzt das 2. Upgrade das in die Hose geht.
Vor den Updates 3D und Aero.
1. Upgrade Additions bringen Maschine zum hängen (Wiederherstellungspunkt hilft)
2. Upgrade Hostnetzwerk komplett zerschossen (Mit neuen Additions kein Aero, 1920*1200 nur über force)

himitsu 5. Jan 2012 11:29

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Ein Pointer ist doch ein ordinaler Typ und Typen sind konstant?

Wenn das stimmt, dann ist Folgendes voll nervig gemein, also daß es nicht geht. :cry:

Delphi-Quellcode:
case Fields[i2].ClassType of
  TBooleanField: ...;
  TIntegerField: ...;
  TFloatField: ...;
  TDateField: ...;
  ...
end;

Medium 5. Jan 2012 12:57

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Typen sind aber keine ordinalen Werte, sie gehorchen insbesondere keiner wertmäßigen und eindeutig definierten Sortierung (Stichwort "Rang"). Gewünscht habe ich mir ähnliches auch schon desöfteren, aber zumindest im Rahmen der Definitionen für "Cases" ist das schon richtig, dass das nicht geht.

Stevie 5. Jan 2012 13:33

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von himitsu (Beitrag 1144427)
Ein Pointer ist doch ein ordinaler Typ und Typen sind konstant?

Wenn das stimmt, dann ist Folgendes voll nervig gemein, also daß es nicht geht. :cry:

Delphi-Quellcode:
case Fields[i2].ClassType of
  TBooleanField: ...;
  TIntegerField: ...;
  TFloatField: ...;
  TDateField: ...;
  ...
end;

In dem speziellen Fall gäb's dafür die Property DataType. Ansonsten müsstest du es analog zu dem case für Strings (nämlich unter Zuhilfenahme von StrUtils.IndexText bzw StrUtils.IndexStr).

implementation 5. Jan 2012 21:42

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Was ich enorm hasse, sind Speicherlecks. Die sind so verdammt schwer zu finden.
Was macht ihr da? Wie geht ihr vor, wenn euch welche begegnen?

stahli 5. Jan 2012 21:50

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
EurekaLog hat mir schon gut geholfen (nicht nur bei Lecks).

Meflin 5. Jan 2012 21:54

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von implementation (Beitrag 1144553)
Was ich enorm hasse, sind Speicherlecks. Die sind so verdammt schwer zu finden.
Was macht ihr da?

Umgebungen mit GC verwenden :thumb: (http://live.exept.de/doc/online/engl...amming/GC.html)

implementation 5. Jan 2012 21:56

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von stahli (Beitrag 1144558)
EurekaLog hat mir schon gut geholfen (nicht nur bei Lecks).

Läuft laut Angabe nur auf Windows und scheidet für mich daher aus, dennoch danke für den Tipp.
Entwicklungsplattform: GNU/Linux; Zielplattformen: GNU, UNIX, Windows

Zitat:

Zitat von Meflin (Beitrag 1144559)
Umgebungen mit GC verwenden :thumb: (http://live.exept.de/doc/online/engl...amming/GC.html)

Gibt's sowas auch, ohne dass ich die Sprache wechseln muss? :stupid:

Furtbichler 5. Jan 2012 21:59

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Komisch, Speicherlecks habe ich eigentlich nie. Es gibt einen Programmierstil, der das vermeidet: "Wer Dreck macht, muss auch aufräumen". Also werden die Objekte im gleichen Kontext erstellt und entfernt. z.B.:
1. Innerhalb einer Methode (mit Try...Finally)
2. Create eines Objekts im Konstruktor des Master-Objekts=> Freigeben im Destruktor des Master-Objekts.
3. Create im Initialization-Abschnitt => Freigeben im Finalization

BUG 5. Jan 2012 22:10

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von implementation (Beitrag 1144561)
Gibt's sowas auch, ohne dass ich die Sprache wechseln muss? :stupid:

Ein Boehm-Demers-Weiser GC ließe sich vermutlich auch für Delphi umsetzten.

himitsu 5. Jan 2012 23:00

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Furtbichler (Beitrag 1144563)
Komisch, Speicherlecks habe ich eigentlich nie. Es gibt einen Programmierstil, der das vermeidet: "Wer Dreck macht, muss auch aufräumen". Also werden die Objekte im gleichen Kontext erstellt und entfernt. z.B.:
1. Innerhalb einer Methode (mit Try...Finally)
2. Create eines Objekts im Konstruktor des Master-Objekts=> Freigeben im Destruktor des Master-Objekts.
3. Create im Initialization-Abschnitt => Freigeben im Finalization

Ich bekomm zwar immer seltener Speicherlecks, aber wenn, dann lagen Konstellationen vor, wo man keine so "schön" statische Vebindungen zur Verfügung hatte.

Furtbichler 6. Jan 2012 06:40

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Wenn man Objekte asynchron verarbeitet und dabei nicht aufpasst, kann das schon passieren.

implementation 6. Jan 2012 10:46

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Furtbichler (Beitrag 1144563)
Komisch, Speicherlecks habe ich eigentlich nie. Es gibt einen Programmierstil, der das vermeidet: "Wer Dreck macht, muss auch aufräumen". Also werden die Objekte im gleichen Kontext erstellt und entfernt. z.B.:
1. Innerhalb einer Methode (mit Try...Finally)
2. Create eines Objekts im Konstruktor des Master-Objekts=> Freigeben im Destruktor des Master-Objekts.
3. Create im Initialization-Abschnitt => Freigeben im Finalization

So mach ich das eigentlich auch. Aber trotzdem ragt bei mir irgendwo ein riesiges Leck auf und ich finde es einfach nicht :stupid:
Irgendwo habe ich da wohl mal nicht aufgepasst.

Stevie 6. Jan 2012 14:57

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von implementation (Beitrag 1144631)
So mach ich das eigentlich auch. Aber trotzdem ragt bei mir irgendwo ein riesiges Leck auf und ich finde es einfach nicht :stupid:
Irgendwo habe ich da wohl mal nicht aufgepasst.

Gibt's unter FPC nicht die FastMM?

implementation 6. Jan 2012 16:28

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Stevie (Beitrag 1144680)
Gibt's unter FPC nicht die FastMM?

Nein, FastMM legt sich auf Delphi und Windows fest:
Zitat:

Zitat von Sourceforge
FastMM is a lightning fast replacement memory manager for Embarcadero Delphi Win32 and Win64 applications that is not prone to memory fragmentation, and supports shared memory without the use of external .DLL files.

Was ich unter FreePascal sehr wohl habe, ist die heaptrc-Unit (Compilerswitch -gh), die am Ende eine Statistik der reservierten und freigegebenen Speicherblöcke aufstellt und für jeden Block einen Calltrace aufstellt.
Ich habe das Gefühl, der Calltrace ist mächtig, aber ich als Ottonormalnerd kann mit bloßen Speicheradressen nunmal nicht viel anfangen :stupid:

Namenloser 6. Jan 2012 18:37

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von implementation (Beitrag 1144693)
Ich habe das Gefühl, der Calltrace ist mächtig, aber ich als Ottonormalnerd kann mit bloßen Speicheradressen nunmal nicht viel anfangen :stupid:

Der FPC kann doch aber sicher ein Map-File generieren, oder?

implementation 6. Jan 2012 19:11

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von NamenLozer (Beitrag 1144708)
Der FPC kann doch aber sicher ein Map-File generieren, oder?

Danke für den Tipp. Hab mal die Mailing-Liste durchsucht, unter Windoze geht das per -Xm, überall anders ist das Aufgabe des Linkers ld, der dafür den Parameter --print-map will. Mal schauen, ob ich damit weiterkomme. Danke nochmals!

ConnorMcLeod 9. Jan 2012 11:47

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
alle 14 Tage die Frage in der DP, wie man Grids einfärbt.

himitsu 12. Jan 2012 10:19

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Mal wieder das bekannte
Zitat:

Embarcadero Technologies verfügt zurzeit über keine zusätzlichen Informationen. Bitte unterstützen Sie uns bei der Dokumentation dieses Themas, indem Sie Ihre Kommentare auf der Diskussionsseite eingeben.
Wenn ich es wüßte, würde ich nicht nachsehn.
Wenn ich's nicht weiß, wie soll ich dann Helfen?

Geschätzte 200-Millionen neune OH-Einträge und fast alles, was ich die letzten Tage gesucht habe, findet man zwar was und freut sich, aber eigentlich steht dann doch nichts drin. :cry:
(ich liebe Updates, wo neue Einträge groß angekündigt werden, aber sowas ist doch schwachsinnig)

stahli 13. Jan 2012 23:53

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Mich nervt mal wieder die VCL. :-(

Warum wird bei den Komponenteneigenschaften nicht auf Änderungen geprüft und warum sind die Setter nicht mal virtuell??? :wall:
Wie, um uns zu ärgern. Das wäre sooo einfach abzustellen!!!
Delphi-Quellcode:
procedure TCustomPanel.SetBevelOuter(Value: TPanelBevel);
begin
  FBevelOuter := Value;
  Realign;
  Invalidate;
end;

blondervolker 14. Jan 2012 01:12

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
wenn die kaffeemaschiene nicht macht,was ich will:-D:-D:-D:-D:-D:-D:-D:roll:

jaenicke 14. Jan 2012 06:12

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von stahli (Beitrag 1145878)
Warum wird bei den Komponenteneigenschaften nicht auf Änderungen geprüft und warum sind die Setter nicht mal virtuell??? :wall:

Vom Prinzip her hat es schon Sinn nicht einfach alles virtuell zu machen, denn virtuelle Methoden sind natürlich etwas langsamer. Nur ist es schlecht, dass offenbar an vielen Stellen nicht das virtuell gemacht wurde was sinnvoll gewesen wäre, sondern nur die Sachen, die jemand vom Team für andere VCL-eigene Quelltexte, sprich abgeleitete Klassen, brauchte...

Und bei vielen Klassen ärgert man sich dann natürlich, weil im Grunde schon alles fertig wäre, wenn man denn einen winzigen Teil der Klasse durch Überschreiben ändern könnte. Zum Beispiel auch bei den neuen generischen Klassen ist das so. Dabei hätte man ja gehofft, dass die Entwickler mittlerweile ein wenig dazugelernt hätten, denn dieser Kritikpunkt ist ja nun nicht neu. :roll:

Ich übe ja meistens nicht besonders viel Kritik an Delphi, aber das ist echt eine Stelle, die auch mich aufregt, weil das einige Entwicklungszeit und vor allem Nerven kostet alles nachzubauen, nur weil man die vorhandenen Klassen aufgrund zu starren Designs nicht nutzen kann.

himitsu 14. Jan 2012 10:03

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Solche Änderungen wären doch eigentlich schnell gemacht ... wär ja praktisch, wenn auf entsprechende QC-Vorschläge flott reagiert würde. :?

divBy0 19. Jan 2012 15:40

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Es nervt tierisch, wenn die Klassenvervollständigung (Strg+Umschalt+C) auf einmal nicht mehr funktioniert... :evil:

Memnarch 20. Jan 2012 10:46

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Dass ich jetzt meine Projekte neu hochladen muss. Seit gestern existiert Megaupload nicht mehr. Jetzt muss ich durch alle seiten wuseln, wo ich meine Projekte vorgestellt habe und dort die Links korrigieren >.<

divBy0 20. Jan 2012 11:27

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Oh das ist aber echt blöd. Es geht doch nix über einen Webspace.

Valle 20. Jan 2012 11:29

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Memnarch (Beitrag 1146838)
Dass ich jetzt meine Projekte neu hochladen muss. Seit gestern existiert Megaupload nicht mehr. Jetzt muss ich durch alle seiten wuseln, wo ich meine Projekte vorgestellt habe und dort die Links korrigieren >.<

Du lädst deine Programme auf solche Filehoster hoch?

Das fände ich als User aber nicht besonders seriös.

Liebe Grüße,
Valentin

Memnarch 20. Jan 2012 11:36

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
@Valle: ich versteh nicht warum das unseriös ist?
Mal abgesehen davon ist meine Homepage noch nicht fertig, da kommt erstmal nichts drauf.(Danach sollten die Projekte eh umziehen).

himitsu 20. Jan 2012 11:45

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Du könntest die Downloads doch schonmal auf den Webspace deiner Webseite verschieben, dann bleiben die externen Links erhalten, selbst wenn du das dann man innerhalb deiner Webseite verlinkst.
Bzw. du machst deine Webseite über's Wochenende schnell fertig. :stupid:

Aber ja, der Aufbau 'ner Webseite kann schonmal dauern :oops:

Memnarch 20. Jan 2012 12:50

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Jemand nen Link zu nem dateimanager? ich weiß, dass es solche möglichkeiten gibt. Über den wird dann auf dateien verlinkt und er kann anzeigen wieoft eine datei runtergeladen wurde, oder dem nutzer/downloader zeigen wann die datei das letzte mal aktualisiert wurde.
Sowas fänd ich sehr praktisch.

himitsu 20. Jan 2012 13:15

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Kommt drauf an, was du willst.
Es gibt unzählige kostenlose Seiten für PHP-Scripte, wo man bestimmt auch Downloadscripte, mit Zähler findet.


Ich mißbrauche Wordpress als CMS und hab mir dort 'nen entsprechendes Plugin installiert http://wordpress.org/extend/plugins/download-monitor/
Wordpress bietet zwar an Downloads an Artikel/Seiten zu hängen, aber dort fehlen dann z.B. die Counter.
Das genannte Plugin hat sogar ein paar statistische Auswertungen (Top 5, Was und wann usw.)

Und aus gelegendlicher Unlust auf FTP auch noch http://wordpress.org/extend/plugins/filebrowser/ .


Achtung WP kann etwas speicherhungrig sein ... 60 bis 80 MB RAM sollten schon verfügbar sein.




Ansonsten bieten andere CMS auch manchmal ein gewisses Downloadmanagement an.

Tipp:
http://www.forum-hilfe.de/threads/40...ysteme-im-test
Aber selber Testen ist immernoch das Beste. (vorallem wenn man nicht erst alles selber installieren muß)
www.opensourcecms.com

Valle 20. Jan 2012 13:25

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Zitat:

Zitat von Memnarch (Beitrag 1146848)
@Valle: ich versteh nicht warum das unseriös ist?

Die Filehoster sind meistens mit Captchas und Wartezeiten, sowie viel Eigenwerbung bestückt. Von einem guten Programm erwarte ich, dass ich es schnell und einfach von einer vertrauenswürdigen Quelle herunterladen kann. Wenn ich erst auf einen Hoster weitergeleitet werde macht das einen billigen Eindruck und wirkt wenig ausgereift. Warum genau das alles unseriös erscheint kann ich dir, ehrlich gesagt, nicht sagen. Es ist nur mein persönlicher Eindruck von dem ich vermute, dass andere ihn teilen.

Download Monitore für PHP gibt es tausende. Selbstverständlich kannst du einen solchen installieren oder auch selbst programmieren. Würde ich dir auch empfehlen.

Liebe Grüße,
Valentin

Memnarch 20. Jan 2012 15:55

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
@Valle: Natürlich wäre ein Link von meiner website die erstmal keiner kennt total vertrauenswürdig :D.
Mal abgesehen davon, bei meiner website wäre es theoretisch möglich, dass ich sie mit driveby downloads und anderem müll manipuliert habe ;).

Aber andersrum, ist es wahrscheinlich eher so, dass bei meiner webiste dann wieder keiner über risiken nachdenk^^.

Aber gut, jetzt da sowieso alles neu gemacht wird, kommts auch gleich drauf.
EDIT: NEIN nicht die driveby dls sondern meine projekte

himitsu 20. Jan 2012 19:22

AW: Was nervt euch so, während der Programmierung oder so allgemein
 
Nervig ist, wenn die Hardware nicht richtig läuft, bzw. man nicht richtig arbeiten kann, weil die Touchpadgesten keine Lust haben.
Ruhezustand und Standby ist sowas tolles ... man muß nicht allers unterbrechen, aber wenn man dann den PC mal neu starten muß :cry:

@zu unseriös ... vorallem der Grund, weswegen angeblich Megaupload dicht gemacht wurde ... die Amis meinen da wären zuviele illegale Dateien hochgeladen gewesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.
Seite 20 von 48   « Erste     10181920 212230     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz