In diesem Video erkläre ich einmal unser zuvor geschriebenes Programm ein wenig genauer.
Ziel dieses Videos ist es, ein wenig mehr „durchzusteigen“, wie die Zusammenhänge innerhalb von Qt abgebildet werden.
In diesem Video erkläre ich einmal unser zuvor geschriebenes Programm ein wenig genauer.
Ziel dieses Videos ist es, ein wenig mehr „durchzusteigen“, wie die Zusammenhänge innerhalb von Qt abgebildet werden.
Willkommen zum dreiteiligen Workshop: Redmine 4. Ich habe mir überlegt, ich mache einen kleinen Redmine-Einsteigerkurs. Dieser geht über drei Kapitel:
In diesem Video und Blog-Artikel geht es darum, wie man Redmine einfach installieren kann. Ich setze dafür folgendes voraus:
Erstelle einen Datenbankbenutzer. Wie das bei deiner PostgreSQL-Version geht, entnimmst du den Manuals. Achte darauf, dem Benutzer ein verschlüsseltes Kennwort zu geben. Ich habe noch ein (uraltes) PostgreSQL 9.5 auf meiner Testmaschine laufen (du solltest hoffentlich was neueres haben), und da geht es so:
createuser -E -P redmine
Dann erstellst du noch die Datenbank, was bei mir so geht:
createdb -E unicode -O redmine redmine
und vergisst natürlich nicht den Eintrag in der pg_hba.conf
host redmine redmine 192.168.0.168/24 password
Denke daran, Datenbanknamen, Datenbankbenutzer und IP anzupassen!
Ich nutze Apache in der Version 2.4. Wenn du was anderes benutzt, dann musst du leider schauen, wie du es ans Rennen bekommst. Ich installiere also alle benötigten Pakete:
pkg install redmine4 apache24 ap24-mod_fastcgi fcgi-devkit postgresql14-client
In der httpd.conf (/usr/local/etc/apache24) setzt du, wenn du es noch nicht getan hast, den Servernamen sowie die E-Mail-Adresse (wobei die auch im VHost eingerichtet wird). Weiterhin entfernst du bei den Zeilen:
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
LoadModule fastcgi_module libexec/apache24/mod_fastcgi.so
Include etc/apache24/extra/httpd-vhosts.conf
die Raute (#) vorne, so dass die Zeilen genutzt werden innerhalb der Konfiguation. Und der aufmerksame Leser weiß es: ich nutze hier jetzt im Beispiel kein SSL! Bitte mache das, und mache das auf jeden Fall, wenn Redmine im Internet hängt! Das wäre jetzt einfach nur zu aufwendig für das Tutorial.
Server-Kram liegt bei mir unter /server. Web-Kram dementsprechend unter /server/web/<sld>/<t(hird)ld>. Passe die Konfiguration bei dir an. Dementsprechend richte ich das Verzeichnis folgendermaßen ein:
mkdir -p /server/web/gug-it && chown -R www:www /server/web/gug-it
ln -s /usr/local/www/redmine /server/web/gug-it/
Dann bearbeite ich die Datei /usr/local/etc/apache24/extra/httpd-vhosts.conf (du hoffentlich /usr/local/etc/apache24/extra/httpd-ssl.conf). Da füge ich folgenden Eintrag hinzu:
<VirtualHost *:80>
ServerName redmine.gug-it.gg
ServerAdmin thorsten@tgeppert.de
DocumentRoot "/server/web/gug-it/redmine/public"
FastCgiServer /server/web/gug-it/redmine/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -initial-env PATH=/usr/local/bin -processes 2
<Directory /server/web/gug-it/redmine/public>
AddHandler fastcgi-script fcgi
Require all granted
AllowOverride all
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi
</Directory>
ErrorLog "/var/log/redmine.gug-it.gg-error_log"
CustomLog "/var/log/redmine.gug-it.gg-access_log" common
</VirtualHost>
Dann kopiere ich noch die dispatch.fcgi (wir nutzen FastCGI) an die richtige Stelle und mache sie ausführbar:
cp /usr/local/www/redmine/public/dispatch.fcgi.example /usr/local/www/redmine/public/dispatch.fcgi
chmod +x /usr/local/www/redmine/public/dispatch.fcgi
Jetzt geht es an die Netzwerkkonfiguration. Die Daten dazu liegen dir hoffentlich vor.
cp /usr/local/www/redmine/config/database.yml.sample /usr/local/www/redmine/config/database.yml
Die bearbeiten wir dann mit dem Editor unserer Wahl und geben die richtigen Daten ein:
production:
adapter: postgresql
database: redmine
host: thorsten.jails.gug-it.gg
username: redmine
password: "redmine"
# Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
encoding: utf8
Nicht vergessen, ich nutze PostgreSQL. Wenn du MySQL oder anderes nutzt, musst du das natürlich beachten! Mein Datenbankserver liegt auf „thorsten.jails.gug-it.gg“.
Als nächstes müssen wir noch ein paar Module zu unserem Redmine hinzufügen. Wir erstellen im Verzeichnis /usr/local/www/redmine die Datei Gemfile.local mit folgendem Inhalt:
gem 'pg'
gem 'fcgi'
und führen dann folgende Befehle aus:
bundle install
rake generate_secret_token
setenv RAILS_ENV production
rake db:migrate
rake redmine:load_default_data
Um Dateiuploads durchführen zu können, müssen wir noch die Datei configuration.yml anlegen. Dazu kopieren wir die Example-Datei einfach:
cp /usr/local/www/redmine/config/configuration.yml.example /usr/local/www/redmine/config/configuration.yml
und setzen dort den attachments_storage_path auf ein sinnvolles Verzeichnis, in meinem Fall „/server/files/redmine“. Ich lege das Verzeichnis an:
mkdir -p /server/files/redmine
chown -R www:www /server/files/redmine
und trage dann in usr/local/www/redmine/config/configuration.yml folgendes ein:
attachments_storage_path: /server/files/redmin
Ich lasse an dieser Stelle die E-Mail-Konfiguration mal aus, weil das recht spezifisch ist. Kommt ganz darauf an, was du brauchst, aber schau dir die Konfigurationsdatei einmal an und du wirst schnell verstehen, wie das funktioniert.
Wenn wir dann Apache starten (oder neustarten), können wir auf Redmine zugreifen. Die Standardzugangsdaten lauten:
Benutzername: admin, Kennwort: admin
Du wirst direkt aufgefordert, dein Kennwort zu ändern. Jetzt kannst du direkt loslegen.
Lange habe ich überlegt, ob ich nicht eine Video-Reihe zu FreeBSD machen sollte, da ich im deutschsprachigen Bereich nichts aktuelles und vollständiges kenne.
Ich beginne hier einmal mit der Reihe und stelle vor, was ich vorhabe.
Wir beginnen mit der Anlage unseres Repositories. Da es ein öffentliches Projekt ist, habe ich mich für Git auf GitHub entschieden.
Es ist endlich soweit: wir schreiben unser erstes eigenes Programm. Dabei handelt es sich um ein Fenster mit einer Schaltfläche sowie einem Eingabefeld, in welches wir beim Klick auf die Schaltfläche “Hello World” eintragen.
Wir beginnen erst einmal sehr oberflächlich. Später gehen wir tiefer ins Detail. Versuchen wir, die ersten Erfolge zu genießen.
Dieses Video zeigt in kurzer Weise, wie man mit QDebug einfache Ausgaben im Ausgabenfenster des QtCreators macht.
Wie man die anderen Dinge von QDebug benutzt und auch Debugging-Informationen umleitet, sei es in eine Datei, eine speziell formatierte Ausgabe, in eine Datenbank, uvm., werden wir in dieser Videoreihe später noch sehen.
Ich habe mir gedacht: Warum nicht einmal zeigen, wie einfach es ist, einen Minecraft-Server auf FreeBSD zu installieren und zu betreiben.
Die Vorgehensweise ist so:
In /etc/fstab eintragen:
fdesc /dev/fd fdescfs rw 0 0
proc /proc procfs rw 0 0
und dann mounten:
mount /dev/fd && mount /proc
Screen und OpenJDK installieren
pkg install screen openjdk17
Verzeichnis erstellen
mkdir /server
Benutzeraccount erstellen
pw add group minecraft
pw add user minecraft -g minecraft -c "Minecraft" -s tcsh -m -b /server
passwd minecraft
Minecraft-Server herunterladen
fetch (den Link zum Server findest du hier: https://www.minecraft.net/de-de/download/server)
Startscript schreiben (start):
#!/bin/sh
java -Xmx1024M -Xms1024M -jar server.jar --nogui
und ausführbar machen
chmod +x start
Einmal durchstarten, dann in eula.txt eula=true setzen und nochmal starten
./start
Dann kann man sich mit dem Server schon verbinden. Hier ist meine server.properties:
enable-jmx-monitoring=false
eula=true
rcon.port=25575
level-seed=
enable-command-block=true
gamemode=creative
enable-query=true
generator-settings=
level-name=g
motd=Thorsten's Creative
query.port=25565
pvp=false
generate-structures=true
difficulty=easy
network-compression-threshold=256
max-tick-time=60000
require-resource-pack=false
use-native-transport=true
max-players=10
enable-status=true
online-mode=true
allow-flight=false
broadcast-rcon-to-ops=true
view-distance=10
max-build-height=256
server-ip=
resource-pack-prompt=
allow-nether=true
server-port=25565
sync-chunk-writes=true
enable-rcon=false
op-permission-level=4
prevent-proxy-connections=false
resource-pack=
entity-broadcast-range-percentage=100
player-idle-timeout=0
rcon.password=
force-gamemode=true
debug=false
rate-limit=0
hardcore=false
white-list=true
broadcast-console-to-ops=true
spawn-npcs=true
spawn-animals=true
snooper-enabled=true
function-permission-level=2
level-type=default
text-filtering-config=
spawn-monsters=true
enforce-whitelist=false
spawn-protection=16
resource-pack-sha1=
max-world-size=29999984
In diesem Video gebe ich eine ganz ganz kurze Einführung in die Entwicklungsumgebung (IDE) QtCreator.
Es geht nur um die wichtigsten Funktionen. Alles andere kommt dann Stück für Stück bei der Entwicklung unserer ersten Projekte.
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.
Im neuen Video geht es darum, wie ich meinen QtCreator eingestellt habe. Vor allem habe ich die Einrückungen im Texteditor eingestellt (Tabs statt Leerzeichen, bestimmte Einrückungen, uvm.).
Ich füge hier einmal die Screenshots der Einstellungen ein:
(Vor dem Import muss die Datei entpackt werden!)