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?

KooKooK.org
KooKooK.org

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.

Hier geht es zur Playlist.

Und hier zum ersten Video.

Hier geht es zur Website.

Hier geht es zum GitHub-Repository.

Hier geht es zum Redmine-Projekt.

YouTube-Video – Kurztipp: Installation von PostgreSQL auf FreeBSD

Ich dachte mir, ich mache mal ein Video zum Thema: wie installiere ich PostgreSQL auf FreeBSD. Hier ist der Link.

Titelbild PostgreSQL auf FreeBSD installieren
PostgreSQL auf FreeBSD installieren

In dieser Anleitung gehe ich davon aus, dass wir ein frisch installiertes FreeBSD 13 auf dem Rechner haben. Schauen wir uns erst einmal an, welche PostgreSQL-Versionen zur Verfügung stehen:

# pkg search postgresql | grep server

Neben Version 9.6 und 10 bis 13 gibt es bei mir in den Packages die Version 14. Genau diese möchten wir auch installieren:

# pkg install postgresql14-server

Wir bestätigen die Installation des Pakets sowie dessen Abhängigkeiten mit [y] gefolgt von [Enter]. Je nach Internetgeschwindigkeit kann das Herunterladen ein wenig dauern. Bei mir werden, auf einem frischen FreeBSD, 167MB heruntergeladen.

Nach der Installation fügen wir folgende Zeilen in die /etc/rc.conf ein:

postgresql_enable="YES"
postgresql_data="/server/database/postgres"
postgresql_flags="-s"
postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C"

Zeile 1 bedeutet, dass PostgreSQL beim Starten des Betriebssystems automatisch gestartet werden soll und sich auch mit „service“ und „start“ starten lässt (anstelle mit onestart).

Zeile 2 legt fest, wo im Dateisystem die Datenbanken liegen sollen. In meinem Fall lautet der Pfad „/server/database/postgresql“. Den müssen wir aber erst erstellen und ihm die richtigen Rechte zuweisen. Wenn du möchtest, dass deine Daten woanders liegen, musst du den Pfad anpassen:

# mkdir -p /server/database/postgres && chown -R postgres:postgres /server/database/postgres

Zeile 3 beinhaltet einige Flags für den Start von PostgreSQL (-s bedeutet „silent“, es werden nur Fehlermeldungen ausgegeben).

In Zeile 4 wird das Standardencoding auf Unicode 8 gestellt.

Ist das alles erledigt, muss zunächst die Datenbank initialisiert werden:

# service postgresql initdb

Wir möchten jetzt aber von außen z.B. mit unserer eigenen Software oder per pgAdmin4 oder mit anderen Datenbanktools auf die Datenbank zugreifen.

Zuerst müssen wir die Datei „/server/database/postgres/postgresql.conf“ bearbeiten und die Zeile mit „listen_addresses“ auf * setzen (oder auf die IP, auf die PostgreSQL lauschen soll).

Dann müssen wir die Datei „/server/database/postgres/pg_hba.conf“ bearbeiten und unter „IPv4 local connections“ eine Zeile anlegen:

Host all all 192.168.0.0/24 password

Hier liegt allerdings der Hund der Sicherheit begraben. Wir sagen damit, dass alle Hosts in dem Netzwerk 192.168.0.0/24 (ihr müsst eure IP natürlich dementsprechend anpassen) mit allen Benutzern auf alle Datenbanken zugreifen können. Das ist schlecht, deshalb überlegt euch ein vernünftiges Sicherheitskonzept! Darum geht es hier allerdings nicht.

Als nächstes können wir PostgreSQL schon starten:

# service postgresql start

Jetzt legen wir noch einen Benutzer an. Nennen wir ihn „Kalle“ und geben ihm auch als Kennwort „Kalle“. Er soll SuperUser sein und Datenbanken anlegen, aber auch löschen können.

# su – postgres

$ createuser -s -P Kalle

Jetzt könnt ihr euch auf euren PostgreSQL-Server verbinden. Achtet darauf, dass dazu der PostgreSQL-Port (Standard 5432) in eurer Firewall freigeschaltet sein muss.

Hier geht’s zum Video.

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-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"));
}

Minecraft

Ich beschäftige mich seit meinem achten Lebensjahr mit Computern. Das sind jetzt genau vierunddreißig Jahre. Natürlich blieben da Computerspiele nicht aus. Es begann mit einem Atari 2600, ging über in einen Schneider CPC464, der dann von einem Amiga 500 abgelöst wurde. Dann hielt der PC Einzug ins Kinderzimmer und lange Zeit später, auch der Mac.

Alle Systeme eignen sich zum Spielen von Computerspielen, allen voran natürlich das Atari 2600. Obwohl diese Spiele absolut nicht meine Hauptbeschäftigung sind, kam ich dennoch nicht daran vorbei. Ich spielte alles Mögliche. Gerne erinnere ich mich an Giana Sisters, Lotus I und III, Monkey Island, Doom, Command & Conquer, Bioshock und viele mehr.

Aber kein Spiel spielte ich so oft und über einen so langen Zeitraum wie Minecraft. Teils vertrieben wir uns die Mittagspausen im Büro damit, aber auch die ein oder andere Session abends blieb nicht aus.

Minecraft

Seitdem ich Kinder habe, ist Minecraft ein ständiger Begleiter. Zuerst nur als Computerspiel, dann aber auch in Form von Büchern und Turnbeuteln, Klemmbausteinen und YouTube-Videos, begleitet es mich ständig.

Minecraft-Screenshot

Bei Minecraft handelt es sich um ein Computerspiel mit unglaublich vielen Facetten. Das Spiel existiert – gefühlt – für jegliches Gerät mit Eingabemöglichkeiten und einem Bildschirm. So läuft es auf Computern mit Windows, macOS und Linux (früher spielte ich es sogar auf FreeBSD, bis es dann wegen irgendeiner Bibliothek nicht mehr ging), aber auch mobile Geräte wie Android- und iOS-Tablets und -Handys werden unterstützt, genauso wie die handelsüblichen Konsolen. Minecraft kostet Geld, glücklicherweise einmalig pro Spieler und es wird kein Zwangsabo vorausgesetzt. Gegenwärtig kostet die Java-Edition, die auf Windows, macOS und Linux läuft, um die 24 Euro.

Die Spielwelt

Hat man das Spiel gekauft, heruntergeladen, installiert, gestartet und seinen Account eingetragen, kann es losgehen. Es gibt die Möglichkeit, das Spiel alleine zu spielen, einem Online-Server beizutreten, den man sich vielleicht im Internet mit ein paar anderen Spielern finanziert, auf einen Realm zu verbinden, die oft kostenpflichtig sind oder einen eigenen Server im Internet oder zu Hause zu betreiben. Ich, zum Beispiel, habe den kostenlosen Minecraft-Server in einem Jail auf FreeBSD laufen und er funktioniert einwandfrei.

Hat man sich für eine der Möglichkeiten entschieden und startet das richtige Spiel, so befindet man sich in einer schier unendlich großen Welt in der Egoperspektive. Unendlich ist die Welt zwar nicht, aber unglaublich groß. Mit der Maus sowie den Tasten [W], [A], [S] und [D] sowie einigen anderen bewegt man sich frei in dieser Welt umher. Die Welt besteht, in aller Regel, aus quadratischen Klötzen, die unterschiedliche Rohstoffe darstellen wie Holz und Stein, aber auch aus Tieren, Menschen und Monstern. Als Spieler hat man keine festen Vorgaben, was man machen muss und welche Ziele zu erreichen sind.

Es gibt verschiedene Modi, allen voran der Abenteuermodus sowie der Kreativmodus. Während im Abenteuermodus Monster jede Nacht auftauchen, die dem Spieler an den Kragen wollen, sind diese im Kreativmodus dem Spieler neutral eingestellt.

Im Kreativmodus hat man direkt alles im Inventar und kann genüsslich drauf losbauen oder die Welt erkunden. Dieser Modus bietet sich vor allem für die Kreativen oder für Kinder an. Im Abenteuermodus muss man alles selbst abbauen und sich vor den Monstern verteidigen.

Es gibt viel zu erkunden, sei es Dörfer zu finden und mit den Einwohnern Handel zu betreiben, Höhlen voller Monster und Schätze zu erkunden, Waldanwesen zu finden oder gegen Hexen zu kämpfen, die Möglichkeiten sind fast unbegrenzt. Selbst Zaubern und Jagen kann man genauso wie Angeln oder sich eine eigene Stadt bauen. Es gibt verschiedene Gebiete, Biome genannt. Da wäre zum Beispiel die Wüste, oder die Eisregion, die auch alle verschiedene Schätze beinhalten. Dungeons können durchforstet werden und lange Wege kann man über Schienen und Loren verkürzen.

Wäre das alles nicht genug, so kann der Spieler auch ein Portal in den Nether, eine Art Hölle, bauen und dort noch einiges mehr entdecken und gegen schlimme Kreaturen kämpfen. Oder er entdeckt das Portal zum Ende, wo der Enderdrachen auf einen wartet.

All dies kann man machen, wird aber nicht gezwungen.

Und wenn man möchte, kann man sogar direkt im Spiel programmieren. Es gibt Dinge wie Schaltkreise, mit denen man Automatismen bauen kann. Helligkeitssensoren, Schalter, Knöpfe, Leitungen und vieles mehr steht zur Verfügung.

Im Netzwerk

Vor geschätzt einem Jahr entdeckte mein Sohn Minecraft für sich. Er sah sich die Bücher an und ich zeigte ihm das Spiel. Seitdem spielen wir zwei oder drei Mal im Monat gemeinsam im Netzwerk im Kreativmodus. Wir bauen gemeinsam Häuser, Türme, Eisenbahnen, Portale und andere Dinge und haben in der Zeit eine Menge Spaß. Der Server ist kostenlos und läuft bei uns direkt auf einem Hardwareserver unter FreeBSD auf einem Jail.

Das Spiel fördert ungemein die Kreativität und bringt, neben dem Spaß, wenn wir spielen, auch einiges an Gesprächsstoff.

Empfehlung

Ich kann das Spiel absolut jedem Gelegenheitsspieler empfehlen, der keinen Druck möchte, sondern einfach ein wenig Entspannung sucht und vor allem gemeinsam mit Freunden oder Familie ist es ein toller Spaß für die kalten, regnerischen Tage.

Umstieg von FreeBSD auf macOS

Zehn Jahre, nein, mehr als zehn Jahre, habe ich, nahezu ausschließlich, FreeBSD auf meinen Arbeitsplatzrechnern benutzt – auf der Arbeit, wie auch zu Hause.

Vor nunmehr einem Jahr bin ich gewechselt oder, besser gesagt, zurückgewechselt, auf macOS.

Ich liebe FreeBSD, wenn man denn bei einem Betriebssystem von Liebe sprechen kann. Es hat mir immer wahre Freude gemacht, mit dem System, neben meinen zahlreichen Servern und Jails, direkt meine Arbeit zu erledigen. Ungefähr 2009 bin ich in der Firma sowie zu Hause von macOS auf FreeBSD umgezogen, erledigte damit softwareentwicklerische und administrative Aufgaben, und ganz ehrlich: es gab nicht einen Tag, an dem ich aufgrund von Problemen nicht arbeiten konnte. Was ich brauchte, funktionierte in aller Regel gut bis sehr gut. Zuerst nutzte ich einige Jahre WindowMaker, stellte dann aber doch eines Tages, im Wahn des Komforts, auf KDE um und hatte ein hervorragendes Werkzeug, welches kaum Wünsche offen ließ.

Meine Werkzeugkiste war vollständig, doch irgendwann bröckelte es. Es begann mit Problemen meiner doch etwas in die Jahre gekommenen Grafikkarte. Dazu kamen dann die Zwänge, properitäre Software zu nutzen, vor der es mir immer noch schaudert. Weiterhin gab es für ein großes Projekt die Problematik, dass Qt mit meiner Webcam (und auch mit anderen) so überhaupt auf FreeBSD nicht klar kam und ich auch für Android und iOS entwickeln musste.

Schweren Herzens verabschiedete ich mich dann doch von FreeBSD auf der Workstation. Zu Windows, welches ich seit über zwanzig Jahren wie der Teufel das Weihwasser fürchte, wollte ich aber nicht. Da ich über all die Jahre auch immer ein MacBook hatte, welches aber nie mein Hauptsystem war, kam ich zur Überlegung, mir ein vernünftiges System vom Hersteller mit dem angebissenen Apfel zu kaufen. Es wurde das MacBook Pro 16″ aus 2019.

Bis auf den Dauervollausschlag des Lüfters bei angeschlossenen Bildschirmen bin ich sehr zufrieden. Das System bietet vieles, was mein FreeBSD für mich auch bot, und einiges andere mehr.

Auf meinen Servern betreibe ich FreeBSD aber wie gewohnt weiter und könnte glücklicher kaum sein. Selten hat mich ein System so wenig genervt und mich so wenig an Produktivität gehindert.

Aber trotz alle dem, steht meine FreeBSD-Workstation noch immer hier neben mir, mit seinem ZFS, dem RAID und allem, was ich so sehr mag. Ich habe XRDP drauf konfiguriert und nutze es ab und an doch noch für die ein oder andere Aufgabe.