Wir beginnen mit der Anlage unseres Repositories. Da es ein öffentliches Projekt ist, habe ich mich für Git auf GitHub entschieden.
Kategorie: wxWidgets
Mein neues (und erstes) Live-Projekt: KooKooK
Da ich jetzt ja mit YouTube begonnen und aufgrund meiner jetzigen Situation ein wenig Zeit habe, habe ich mir überlegt, an einem neuen privaten Projekt zu arbeiten, um nicht aus der Übung zu kommen. Und genau deswegen dachte ich: warum nicht aufzeichnen und auf YouTube veröffentlichen?
Genau das möchte ich jetzt mit KooKooK versuchen. Es hat mehrere Hintergründe. Ein Ziel ist es auf jeden Fall, mein Portfolio weiter auszubauen, denn ich bin ja auf Jobsuche. Dann dachte ich mir, ich kann sicher noch einiges dazulernen und du vielleicht auch.
Dabei gibt es aber folgende Vorstellung meinerseits. Ich werde die Videos nicht scripten. Ich werde einfach loslegen, Fehler bleiben drin, damit wir was daraus lernen, Versprecher ebenso und alles, was so schief geht. Weiterhin möchte ich mich bei den Videos aber auch nicht nur auf das Coding konzentrieren. Ich möchte euch bei allen Dingen mitnehmen. Natürlich wird ein großer Teil die Programmierung sein, aber ich zeige euch auch, was ich als Projektverwaltung benutze, wir richten die Website ein, scribbeln, malen/zeichnen und machen all das, was man ebenso macht, um eine kleine Software zu entwickeln.
Worum soll es gehen? Ich habe lange überlegt. Soll ich was mit Datenbanken machen? Soll ich was mit Netzwerkprogrammierung machen? Soll ich Websitekram machen? Soll ich ein Spiel programmieren? Die Antwort war einfach: Ja. Mein Ziel ist es, einen grafischen Chat zu entwickeln, der mit Avataren in einer künstlichen Welt funktioniert. Da haben wir Spieleentwicklung, Netzwerkentwicklung, Datenbankentwicklung, Protokollentwicklung, eine Website soll es auch geben, es wird spannend. Und da ich mir vor vielen Jahren bereits die Domain KooKooK.org gesichert habe, wird das Projekt jetzt einfach mal so heißen.
Welche Tools eingesetzt werden, kann ich jetzt noch nicht sagen. Es wird auf jeden Fall C++-lastig, wahrscheinlich Qt, weil ich auch mobile Plattformen wie iPhoneOS, iOS und Android unterstützen möchte. Den Code werde ich auf GitHub lagern, so dass ihr mit daran entwickeln könnt.
Und jetzt geht es los. Ich wünsche euch und auch mir viel Spaß dabei.
Mein YouTube-Kanal
Ich habe es getan, ich habe es wirklich getan. Nachdem manche meinten, ich solle einen YouTube-Kanal aufmachen, und ich immer sagte: “Ich kann sowas nicht, ich kann ja nichtmal vernünftig frei reden.” und mir gesagt wurde: “Jeder hat mal klein angefangen, da wächst du schon hinein.” habe ich für mich beschlossen, ich beginne mal einfach und schaue, was daraus wird.
Ich habe bereits ein paar Videos vorproduziert. Natürlich, wie ich auch erwartet habe, sind sie noch schrecklich. Wenn ich aber nicht anfange und einfach mache, dann kann ich natürlich auch nicht besser werden. Also seid ein wenig nachsichtig (:
Ich werde mit drei, vielleicht vier, Sparten beginnen:
- Softwareentwicklung mit Qt
- FreeBSD
- Kurztipps
- und, vielleicht etwas später, macOS-Administration im Netzwerk mit Deployment und vielem mehr
Hier geht es zu meinem YouTube-Kanal: Thorsten Geppert
wxWidgets auf macOS installieren
wxWidgets lässt sich einfach auf dem Mac installieren. Hier das Beispiel für Monterey.
Zuerst checken wir via Git den Code des aktuellen Projekts aus
git clone https://github.com/wxWidgets/wxWidgets.git
Dann wechseln wir in das ausgecheckte Verzeichnis
cd wxWidgets
und checken noch einige Submodule aus
git submodule update --init 3rdparty/nanosvg
git submodule update --init 3rdparty/catch
git submodule update --init src/jpeg
git submodule update --init src/png
git submodule update --init 3rdparty/pcre
Wir erstellen das Verzeichnis, in das hineinkompiliert werden soll, und wechseln dorthin
mkdir osx && cd osx
Dann konfigurieren wir noch das Projekt, kompilieren und installieren es
../configure --disable-shared --enable-stl --with-cxx=14 --with-macosx-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk --enable-optimise --prefix=/usr/local/wxMac --enable-monolithic --without-libjbig --without-libtiff
make -j4
sudo make install
wxWidgets ist jetzt einsatzbereit.
wxWidgets-Entwicklung mit dem QtCreator (zumindest auf macOS, Linux und FreeBSD)
Es ist kaum zu glauben, aber bis vor einer kurzen Zeit benutzte ich keine IDE. Oftmals entwickle ich immer noch gerne ohne IDE, doch für Qt nehme ich QtCreator und ich finde die IDE ganz “nett”. Ich kenne etliche Systeme, und keins gefällt mir tatsächlich so gut wie QtCreator, außer NetBeans für Java vielleicht. Damit bin ich aber vermutlich allein (:
Ich wollte einmal wissen, wie hoch der Aufwand ist, wxWidgets in QtCreator einzubinden. Es ist sehr einfach. Wie es geht, zeigt dieser Artikel.
wxWidgets nutzt auf unixoiden System “wx-config” als Kommandozeilenkonfigurationswerkzeug. Das bedeutet, dass man einfach in seinen Compileraufruf “wx-config” einbaut. Ein einfaches Beispiel könnte:
# c++ *.cpp -o test `wx-config --libs --cppflags
`
sein.
Also einfach mal den QtCreator starten und ein neues Konsolenprojekt erstellen. In der Projektdatei (*.pro) dann folgende Zeilen hinzufügen:
INCLUDEPATH += /usr/local/wxWidgets/include/wx-3.0 wxCXXFLAGS = $$system(/usr/local/wxWidgets/bin/wx-config --cxxflags --unicode=yes --debug=no) wxLinkOptions = $$system(/usr/local/wxWidgets/bin/wx-config --debug=no --libs --unicode=yes) LIBS += $$wxLinkOptions QMAKE_CXXFLAGS_RELEASE += $$wxCXXFLAGS QMAKE_CXXFLAGS_DEBUG += $$wxCXXFLAGS
Es ist natürlich darauf zu achten, dass der Pfad für wx-config sowie der Includepfad stimmen und angepasst werden.
Jetzt ist es möglich, einfach sein wxWidgets-Programm zu schreiben und mit Klick auf den Play-Button zu kompilieren und zu starten.
Hier noch ein kleines wxWidgets-C++-Beispiel:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
IMPLEMENT_APP(MyApp)
class MyFrame : public wxFrame {
public:
MyFrame();
private:
enum {
HELLO_WORLD_BUTTON
};
wxPanel *mainPanel;
wxBoxSizer *mainBoxSizer;
wxButton *helloWorldButton;
wxTextCtrl *helloWorldTextCtrl;
protected:
DECLARE_EVENT_TABLE()
void HelloWorldEvent(wxCommandEvent &WXUNUSED(event));
};
bool MyApp::OnInit() {
MyFrame *f = new MyFrame;
f->Show();
SetTopWindow(f);
return true;
}
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON(HELLO_WORLD_BUTTON, MyFrame::HelloWorldEvent)
wxEND_EVENT_TABLE()
MyFrame::MyFrame() : wxFrame(NULL, -1, _("Hello World")) {
mainPanel = new wxPanel(this, -1);
mainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
helloWorldButton = new wxButton(mainPanel, HELLO_WORLD_BUTTON, _("Say Hello World"));
mainBoxSizer->Add(helloWorldButton);
mainBoxSizer->AddSpacer(5);
helloWorldTextCtrl = new wxTextCtrl(mainPanel, -1);
mainBoxSizer->Add(helloWorldTextCtrl);
mainPanel->SetSizer(mainBoxSizer);
mainBoxSizer->SetSizeHints(this);
}
void MyFrame::HelloWorldEvent(wxCommandEvent &WXUNUSED(event)) {
helloWorldTextCtrl->SetValue(_("Hello World"));
}