Ein wenig peinlich, aber vielleicht geht es dem ein oder anderem Benutzer unixoider Betriebssysteme genauso: auf FreeBSD nutze ich clang(++), auf macOS auch. Auf Linux kann ich das auch. Ich habe jetzt erst bemerkt, dass es auch auf Windows geht. Und noch mehr: die Libs, die am Ende herausfallen, sind mit denen von Visual Studio kompatibel.
Ich habe überlegt: ich kann leider nicht alles zu dem Projekt aufnehmen. Ich habe noch ein paar Erweiterungen gemacht. Was alles, seht ihr im GitHub-Projekt.
Hier eine Liste:
Über die Server.ini kann man den Server jetzt teils konfigurieren
Einfaches Logging wurde eingebaut
Threads können beendet werden
Kompilierungsscript wurde erweitert
Unix-Signal-Handling wurde implementiert (TERM und HUP)
Der Benutzer soll die Datensätze exportieren können, und zwar als CSV, JSON und XML. Dazu treffen wir in diesem Video die Vorbereitungen, indem wir die Daten des CompanyTypes in einer Hashmap (QHash) speichern, um sie später einfach auszulesen.
Immer wieder lese ich zur Zeit, dass Programmierer den QtCreator für eine der schlechtesten IDEs überhaupt halten. Ich konnte das bisher nicht nachvollziehen, bis auf Kleinigkeinten finde ich, dass QtCreator eine recht gut IDE ist.
Ich muss durchaus zugeben, dass ich eher die Kommandozeile (Shell), make oder gmake und vor allem einen vernünftigen Editor – VIM – bevorzuge, um zu entwickeln. Zumindest habe ich das so über Jahre hinweg recht erfolgreich gemacht. Doch neben meinem liebsten Editor kenne ich auch andere Editoren, Pseudo-IDEs (Visual Studio Code zum Beispiel) und einige IDEs (Visual Studio, Eclipse, Netbeans, IntelliJ IDEA, Clion, Delphi, Lazarus, Anjuta, KDevelop, Code::Blocks und was weiß ich, was noch). Die beiden verschrienen IDEs gefallen mir komischerweise am besten: QtCreator und Lazarus IDE.
Warum ist das so? Nehmen wir einmal Visual Studio. Bis das Ding gestartet ist, bis ich ein Projekt angelegt oder, schlimmer noch, geladen habe, dauert es ewig bis drei Tage. Danach ist alles so träge und nervig, die Vorkonfiguration kaum zu benutzen, das Einrückverhalten eine Katastrophe und der Editor eine Art Notepad im modernen Gewand. Gut, das ist jetzt übertrieben. Die Editoren leisten schon eine Menge mehr, als Notepad, allerdings halte ich sie, zumindest in der Standardkonfiguration, für unbenutzbar. Tatsächlich ist das bei QtCreator und Lazarus nicht anders. Vergleicht man die Editoren mit modernen Dinosauriern wie VIM, dann merkt man schnell, was effizient ist und was pseudoeffizient ist.
Dann kommen die ganzen Automatismen, die Automagic dazu. All das nervt mich oftmals, denn tauchen Probleme auf, sind sie oftmals nur schwer behebbar, denn man kennt die Automagic dahinter ja nicht und dann nehmen einem diese Systeme nicht Arbeit ab, sondern machen noch viel mehr.
Natürlich sind die integrierten Debugger toll, auch, dass Referenzenzähler mit drin sind, man im Code hin und her springen kann usw. Aber sie lahmen oftmals so sehr, dass ich meinen Gedankenfluss andauernd unterbrechen muss, warten muss oder irgendwas abstürzt.
QtCreator kann nicht viel. Es handelt sich um einen „schlechten“ Editor mit Projektmanagement, GUI-Designer und ein paar Nettigkeiten wie integriertem Debugger. Die Sache ist schon komplexer, aber wenn man es herunterbricht, bleibt eine nicht so hochkomplexe IDE, die sich angenehm betreiben lässt. Denn sie unterstützt mich, macht Automatismen oder sichtbar und einfach handlebar. Genau das ist für mich wichtig: zumeist, nicht immer, weiß ich, was passiert und kann auch händisch recht problemfrei eingreifen. Dabei kann ich aber auch im Code herumspringen, Fenster splitten, den grafischen Debugger starten und Kompilierszenarien auswählen. Mir gefällt das sehr und ich empfinde QtCreator tatsächlich als eine IDE, mit der ich gerne arbeite, auch wenn sie Schwächen hat (Editor – das Problem haben aber alle IDEs, die ich kenne, Refactoring ist nicht schön, Automatismen wie Getter/Setter erstellen sind nicht vorhanden, usw.). Ich finde es schade, dass die IDE so zerissen wird. Das selbe bei Lazarus. Ich finde die IDE schön aufgeräumt und einfach in der Nutzung. Darin liegt für mich die Mächtigkeit des Systems.
Doch freue ich mich auch immer wieder, wenn ich auf der Shell und mit VIM arbeiten kann.
In diesen ca. 20 Minuten machen wir einiges. Wir laden das Logo der Firma im Firmeneintrag und zeigen es an. Dann implementieren wir noch die Funktion, dass man aus der Firmenmaske die Firma direkt auf der compow-Website anzeigen kann und wir machen die Ausgabetabelle der Firmen sortierbar.
Diese Woche wird es erstmal kein Video geben, da zu viel los ist und alle hier kränkeln. Aber was kommt als nächstes?
Nunja, ohne Video werde ich als erstes die Anzeigemaske für die Firmen erstellen, denn das ist langweilige Fließbandarbeit. Danach werden wir uns gemeinsam ansehen, wie wir das Logo-Bild der einelnen Firmen, welches Base64-encoded in der SQLite-Datenbank liegt, in der Firmenmaske anzeigen können. Vielleicht bauen wir es auch in die Ergebnisliste mit ein.
Dann brauchen wir noch etliche weitere Teile:
Export der Suchliste
Export von Firmen
XML?
JSON?
CSV?
Text?
Drucken von Firmen
Eine Toolbar
Ein Menü
Einen „Über“-Dialog (About)
Für Windows einen Installer
Eine Hilfe für die Software oder ein Handbuch?
Tests auf Linux, FreeBSD und Windows
Vielleicht noch mehr, was mir gerade nicht einfällt
Ich denke, wir werden uns dann nächste Woche damit beschäftigen. Bis dahin hoffe ich, dass ich die Firmenmaske fertig bekomme, wonach es zur Zeit aber nicht aussieht.
Ok, wir sind immer noch nicht gestartet. Ich meine, mit dem Programmieren. Wir richten noch ein. Das soll erstmal das letzte Einrichtungsvideo sein. Hier geht es darum, wie wir die Serverkomponente entwickeln wollen. Ich installiere dazu Qt sowie QtCreator in einem Jail auf FreeBSD und nutze es via SSH und X11-Forwarding. Wie das geht, zeige ich in diesem Video.
Innerhalb unseres KooKooK-Jails installieren wir qtcreator, qt5 und xauth, schalten SSH frei und probieren aus, ob und wie gut es funktioniert.
Im zweiten Teil unserer Videoreihe „Entwicklung einer Desktopsoftware für compow mit C++, Qt und SQLite“ geht es darum, Typen für die Branchen zu entwickeln sowie eine Bibliothek, um die Branchen aus der Datenbank in einer Liste zu speichern und einer ListBox anzuzeigen.