Hallo ihrs!
Kurzfassung:
Ich würde gerne wissen, welche Grundlagen man in- und auswendig kennen muss, um möglichst effektiv auf allen gebotenen Derivaten arbeiten zu können.
Hauptthema C++: flexibel bleiben!
Lange Fassung:
Ich bin ja nun schon eine Weile sehr zufrieden mit meinen Ubunti und habe mich auch beim Blick über den Tellerrand letztendlich für den Debian-Zweig entschieden. Grund dafür ist wohl schlichtweg die Vertrautheit, da ich mit Debian angefangen habe in die Welt von Linux einzutauchen. Meine momentane Liebe gilt Ubuntu, weswegen auch alle meine Systeme - nun inklusive meines Servers - auf Ubuntu 14.04 laufen.
Jedoch gibt es ja auch innerhalb der diversen *buntu-Versionen große Unterschiede. Man vergleiche mal XFCE,LXDE und KDE, welches meine Standard-Oberflächen darstellt.
Da ich nebenbei gerne Programmiere(n lerne) und das vornehmlich in C++ und ab und an Python, stoße ich da auch schnell mal auf größere Unterschiede.
So habe ich bspw. im KDE-Umfeld sehr schöne Anbindungen an die Klassen, die dort verwendet werden und kann meine kleinen Anwendungen als Plasmoide einbauen und diese nahtlos ins System integrieren. Bei XFCE(LXDE) stehen diese natürlich nicht zur Verfügung.
Frage an die Programmierer: Wie bindet ihr eure Sachen in die jeweiligen Systeme ein? Schreibt ihr euch eine Anwendung und dann lediglich ein "Frontend" für KDE,usw. oder wie geht man da sinnvoll vor?
Ich versuche gerade meine ganzen "Werke" unter einen Hut zu bringen und mir eine flexible Basisklasse zu schaffen, von der aus ich das dann einstellen kann. Das wird aber schon für Kleinigkeiten so umfangreich, dass ich vor nem Riesenberg stehe...
Des weiteren sehe ich hier oft so schöne Regex-Ausdrücke, die Verwendung von awk, die ganzen Module, die dem Kernel zur Verfügung stehen, usw. und bin da stets versucht mir das auch anzueignen. Große Frage dabei ist: Was sollte man wissen, um mit dem System so vertraut zu werden, dass man sich nicht in Umständlichkeiten verliert? Wie sehr muss man sich in gewisse Prozesse einarbeiten, um damit effektiv zu arbeiten? Ich möchte natürlich nicht das Rad neu erfinden oder dergleichen, aber ich denke ich brauche einen tieferen Einblick in die Funktionsweisen. Klar hab ich schon über Regex gelesen und damit rumgespielt, gebrauchen kann ich das nur eher selten und meistens auf Konsolenebene. Mein Ziel ist aber eher meine Programme endlich mal fertig zu stellen ☺
Doch wo fange ich da an?
Das System mit den fertigen Klassen ist zwar toll, weil ich nicht wissen muss, wie diese funktionieren, allerdings hat das den Nachteil, dass ich nicht weiß wie alles funktioniert ☺ Das ganze ist trotz der obigen Erwähnung und dem grafischen Beispiel auch auf Konsolenebene zu sehen.
Jetzt wäre es natürlich vermessen sich jeden Quellcode anzusehen und jede include zu öffnen, auch wenn ich gerne mal reinschaue. Da verliere ich meist recht schnell den Überblick und bin vor allem dann immer auf der Suche nach der zugehörigen cpp.
Da ich auch "leider" berufstätig bin und nur begrenzt Freizeit habe, ist die Zeit des effektiven Lernens auch recht beschränkt.
Und wieder die Frage: Wo fange ich am besten an?
Mein heutiger Stand sieht so aus: Ich bin in der Lage meine eigenen Klassen zu schreiben, fertige zu verwenden, diese Abzuleiten, hab keine Angst vor Pointern usw. Aber ich habe das Gefühl, dass ich nie weiß, was ich da eigentlich mache^^
Meine momentanen Ziele sind:
DBUS zu verwenden (sowohl bestehendes, als auch einen eigenen service für meine Anwendungen)
erweiterte SQL-Klasse für meine Anwendungen
eine library für meine abgeleiteten Klassen zu erstellen (brauche regelmässig einen delayed PushButton, hab nen MessageSystem welches ne Mischung aus debug und popup ist, usw.)
Ein PHP-HTML-MYSQL-Frontend für meine eigene(n) website(s).
Ein SSH-basiertes tool, welches mich meinen Server bedingt administrieren lässt (evtl. über einen udp-server. mal gucken)
Das ganze soll dann natürlich nach Möglichkeit übersetzbar sein, wo es schon wieder Unterschiede zwischen KDE&Co gibt (i18n, usw.)
In der Theorie weiß ich, wie ich das alles zusammenbauen kann. Ich wüsste nun aber gerne, welche Dinge ich wissen sollte, BEVOR ich damit anfange. DBUS ist klar, den "lerne" ich gerade, weil ich da nur weiß, wie man ihn verwendet, aber noch nicht wie man sich da selbst was baut.
Gerade beim Schreiben fällt mir da noch was ein. Beispiel: Konfigurationsdateien. Ich würde diese gerne manuell erstellen und parsen und nicht KConfig, QSettings oder so verwenden. Im Zuge dessen stellt sich mir eine der Fragen, auf die ich keine Antwort weiß:
Welches sind denn nun die wirklichen Standardspeicherorte für meine Sachen?
/etc/app.conf als Standard-Anlaufstelle
/usr/share/pixmaps für Bilder
/usr/share/icons für Symbole
Wohin mit den desktop-files? (bei KDE ist das klar, aber nicht für alles umsetzbar. Default-Ordner dafür, der überall klappt?)
Oder doch einfach nur die /etc/app.conf und dort die Pfade zu den Dateien hinterlegen?
Solche Fragen wuseln mir ständig durchs Gehirn. Daher würde ich einfach gern mal "bei null" anfangen. Wo bekomme ich eine gute Übersicht, wie mein Ubuntu eigentlich funktioniert und was ich beachten muss?