Kategorie: Alle

SneakPrognose.de – Kino Sneak Preview Prognosen

Sneak Preview Filmdatenbank und Prognose

Was ist eine Sneak Preview?

Eines meiner neusten Projekte ist eine Webseite für Besucher sogenannter Sneak-Preview-Vorstellungen in Kinos. Nutzer der Webseite können hier sehen, welcher Film wahrscheinlich in ihrer Sneak gezeigt wird.

Eine Sneak Preview […] ist eine unangekündigte Filmvorführung (Vorschau) vor dem offiziellen Release. Die Besucher wissen beim Kartenkauf nicht, welcher Film gezeigt wird. Die in einer Sneak Preview gezeigten Filme haben ihren offiziellen Kinostart oft erst einige Wochen später.

Sneak Preview (Wikipedia)

Die Webseite

Auf der Webseite – SneakPrognose.de – können Nutzer eintragen, welche Filme sie zuletzt in der Sneak-Preview in ihrem Kino gesehen haben. Diese Filme werden dann wiederum anderen Nutzern vorgeschlagen, in deren Kino dieser Film bisher nicht lief. Mit Hilfe eines Wertungsalgorithmus, welcher den Kinostart, die Anzahl der Sneaks, in denen der Film gezeigt wurde und das Datum an denen der Film lief einbezogen.

Screenshot von SneakPrognose.de

Wie wurde die Webseite gebaut?

Das Projekt beinhaltet ein Front-End, welchs mit Vue.js gebaut wurde, und ein Back-End API-Server welcher mittels NodeJS und Express umgesetzt wurde. Als Datenbank wird ein MariaDB verwendet, mit der über typeORM gesprochen wird.

Alles drei Komponenten wurden als Docker-Image gebaut und integrieren sich in meinen Docker-Stack via Docker Compose.

Während des Programmierens lernte ich Vue.js als Front-End-Umgebung kennen. Hier habe ich versucht ein möglichst responsive Layout zu erstellen, welches für alle Gerätetypen nutzbar ist. In meinem letzten Webseiten-Projekt (Online Poker) habe ich stattdessen React genutzt, und nur eine Desktop-Version implementiert. Ich konnte außerdem meine Kenntnisse in SQL und Express auffrischen.

Wer Interesse hat besucht die Webseite selbst, unter https://sneakprognose.de/

Online Poker 2.0

UPDATE: Eine Preview Version ist jetzt online verfügbar.


Im Rahmen eines Fakultativen Projektes an der Uni entwickle ich zusammen mit einer Kommilitonin eine überarbeitete Version meines Online-Poker Systems.

Die Arbeiten sind derzeit in vollem Gange und können im GitLab verfolgt werden.

Geplante Features werden sein:

  • spiele Online Poker mit deinen Freunden ohne Registrierung/Anmeldung
  • jederzeit verfügbar hier auf auf owatz.net
  • erstelle private Lobbies oder tritt öffentlichen Spielen bei
  • verändere Spieloptionen wie Blinds oder Timout selbst
  • neues Design in HTML5 und CSS mittels React

Es kann damit gerechnet werden dass das Projekt in den nächsten Wochen zum Beta-Testen online gehen wird.

Minecraft Server Revived

Heyho,

da neulich das neue Minecraft Update raus kam (1.14) hatte ich mal wieder Lust etwas zu spielen. Deshalb existiert seit kurzen wieder der OwatzNET Minecraft Server. Falls ihr auch mitspielen wollt, schreibt mich ruhig an 🙂

Docker 2: Container erstellen

In diesem Beitrag geht es darum, aus fertigen Images Container zu erstellen und diese zu nutzen.

Hinweis: Ich werde nicht erklären, wie man Docker installiert. Wer trotzdem Hilfe braucht wird hier fündig.

Images finden

Um ein Docker Image erstellen zu können muss man dessen Namen kennen. Docker ist Standardmäßig auf die Registry DockerHub voreingestellt. Hier liegen eigentlich alle öffentlich zugänglichen Images. Schaut doch mal selber rein und erforscht ein paar Seiten. Hier finden sich dann auch oft wichtige Informationen dazu, wie man die Images benutzt und welche unterschiedlichen Versionen (Tags) es gibt. Dazu mehr im nächsten Beitrag.

Beispiel nginx

Wir nutzen als Beispiel nun das Image nginx (ein simpler Webserver). Normalerweise besitzen Images einen Ersteller und einen Namen im Schema „ersteller/name“. In diesem Fall ist es allerdings ein Image welches zur DockerHub Standard Bibliothek gehört. Deshalb nur der einfache Name nginx.

Wir werden nun erstmal versuchen einen einfachen Container zu erstellen und die nginx-Landingpage im Webbrowser aufzurufen. Dafür benötigen wir einige Befehle.

Docker CLI

Die wichtigsten Docker Befehle sind:

BefehlBeschreibung
docker createErstellt einen neuen Container aus einem Image
docker startStartet einen bestehenden Container
docker stopStoppt einen bestehenden Container
docker attachVerbindet die Bash Ein/Ausgabe mir dem im Container laufenden Prozess
docker execFührt einen Befehl in einem Container aus
docker runErstellt einen neuen Conatiner aus einem Image und führt einen Befehl darin aus
docker psListet alle erstellten Container auf
docker imagesListet alle heruntergeladenen Images auf
docker renameContainer umbenennen
docker rmContainer löschen
docker rmiImages löschen

Mehr lassen sich mit docker –help auflisten. Zu dem jeweiligen Befehl gibt es auch immer eine Hilfeseite. Desweitern gibt es Dokumentation hier.

Beispiel Container starten

Nun laden wir zunächst das Image runter und erstellen den Container mittels:

docker create --name "nginx-test" -p 8080:80 nginx

Dies erstellt einen Container mit dem namen „nginx-test“. Der -p Parameter steht für publish und gibt den internen Port 80, der nur im Docker-internen Netzwerk zur Verfügung steht an die Host-Maschine auf Port 8080 frei. Das benutzte Image steht am Ende. Woher weiß ich welchen Port ich veröffentlichen muss? Das ist von Image zu Image unterschiedlich und findet ihr auf der entsprechenden Docker Hub Seite. 8080 habe ich mir frei ausgesucht.

Unser Container ist jetzt erstellt, aber noch nicht gestartet. Dies können wir mittels docker start tun. Hier sieht man wieso es sinnvoll ist seinen Containern Namen zu geben:

docker start nginx-test

Der Conatiner läuft nun im Hintergrund und wir sollten in der Lage sein per Webbrowser die Standard-Nginx-Seite zu sehen, auf http://localhost:8080/

nginx-Startseite unter localhost:8080

Eine Übersicht bekommen

Wir können auch mal nachschauen was unser Container so macht, mittels:

docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ce09f2cbce nginx "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp nginx-test

Wir sehen hier welche Container zur Zeit erstellt sind, in welchem Status sie sich befinden und welche Ports sie freigegeben haben. Sehr nützlich.

Spielt auch ruhig mit den anderen Befehlen aus der Tabelle oben etwas herum. Starten, stoppen, löschen, erstellen etc.

In den Container gehen

Docker Container sind in sich abgeschlossen. Man sollte sie also im betsen Fall nur starten und stoppen müssen. Alles was darin vorgeht ist uns egal. Manchmal ist es jedoch trotzdem nützlich in einen Container zu bashen um beispielsweise Fehler zu suchen oder Programme zu testen. Es gibt dafür 2 Möglichkeiten:

docker attach verbindet euch mit dem gerade im Container laufenden Prozess. Vorsicht, wenn ihr hier mittels Strg+C verlassen wollt, beendet ihr den Haupt-Prozess und damit den Container! Zum abkapseln nutzt ihr Strg+P, Strg+Q

docker exec -it <Container Name> /bin/bash startet einen neuen Terminal Prozess im Container (bin/bash wird ausgeführt) und verbindet euch dann mit diesem. -ti sind eigentlich zwei Parameter, die benötigt weden um ein Terminal zu emulieren. Auch hier gilt, Strg+C beendet den Terminal Prozess!

Was noch kommt

Was jetzt noch fehlt ist:

  • Wie bringe ich meine Datein in den Container?
  • Wie verbinde ich meine Container untereinander?
  • Wie kreiere ich meine eigenen Container?

All das wird in den nächsten Parts dieser Reihe folgen. Falls ihr noch Fragen habt, schreibt sie mir gerne. Ich vervöllständige bei Bedarf dann diesen Post.

Zweiwöchiger Ausfall

Wie manche vielleicht mitbekommen haben war diese Webseite und andere von mir angebotene Dienste die letzten zwei Wochen nicht erreichbar.

Die Störung lag daran, dass mein bisheriger Server-Provider das Geschäft unerwartet geschlossen hat. Ich bin nun zu einem neuen Provider gewechselt, bei dem hoffentlich keine weiteren Probleme auftreten.

Dies Haupt-Webseite funktioniert schon wieder. Alle anderen Dienste sollte ich hoffentlich über die nächsten Tage wieder hergestellt haben.

Mit freundlichen Grüßen
Conrad

Docker: 1 – Einführung

Docker ist heutzutage schon fast Standard wenn es um Server Anwendungen geht. Auch ich bin von der Container-Technik grundauf begeistert. Wenn du dich damit noch nicht auskennst ist das jedoch keine Schande. Nachdem du diese kleine Reihe an Blog-Posts gelesen hast, bist auch du fit, was Docker angeht.

Was ist so toll an Docker?

Beginnen wir doch damit: Was ist überhaupt Docker?


Docker ist eine Freie Software zur Isolierung von Anwendungen mit Containervirtualisierung.

Docker (Software) – Wikipedia

Das bedeutet du kannst (Server-)Anwendungen super simpel installieren und konfigurieren ohne dass sie sich mit anderen Anwendungen in den Weg kommen. Du brauchst verschiedene Versionen von PHP für verschiedene Apps? Kein Problem! Die Anwendund läuft nur auf bestimmten Linux-Distros? Nicht mit Docker!

Im Grunde laufen die Anwendungen einfach so, wie der Entwickler es gewollt hat, ohne dass du großartig Arbeit in das Installieren und stecken musst. Dieser nervige Schritt entfällt also. Und oben drauf gibt es noch nützliche Funktionen von Port-Forwarding bis zu Load-Balancing mittels Docker Swarm.

Doch Docker ist keine Virtuelle Maschine

Zumindest nicht so ganz. Die Anwendungen werden zwar isoliert auf ihre eigenen Dateisysteme, ihre eigenen Systembibliotheken etc. doch die Prozesse laufen alle direkt auf dem Hauptsystem. Damit besitzen sie fast die gleiche Performane wie wenn ich sie direkt installieren würde.

Prozesse aus Containern und der Docker Deamon laufen alle zusammen auf dem Host System

Hinweis: Was man hier auch sieht ist, dass viele Anwendungen als root laufen. Was genau das bedeutet, welche Auswirkungen das hat und wie man dagenen vorgehen kann wird in einem anderen Blogpost erklärt.

Begriffe

Um alles richtig zu verstehen ist es wichtig ein paar Begriffe zu kennen. Hier hat Wikipedia eine super Übersicht aus der ich mal zitiere:

Image
Ein Speicherabbild eines Containers. Das Image selbst besteht aus mehreren Layern, welche schreibgeschützt sind und somit nicht verändert werden können. Ein Image ist portabel, kann in Repositories gespeichert und mit anderen Nutzern geteilt werden. Aus einem Image können immer mehrere Container gestartet werden.
Container
Als Container wird die aktive Instanz eines Images bezeichnet. Der Container wird also gerade ausgeführt und ist beschäftigt. Sobald der Container kein Programm ausführt oder mit seinem Auftrag fertig ist, wird der Container automatisch beendet.
Layer
Ein Layer ist Teil eines Images und enthält einen Befehl oder eine Datei, welche dem Image hinzugefügt wurde. Anhand der Layer kann die ganze Historie des Images nachvollzogen werden.
Dockerfile
Eine Textdatei, welche mit verschiedenen Befehlen ein Image beschreibt. Diese werden bei der Ausführung abgearbeitet und für jeden Befehl ein einzelner Layer angelegt.
Repository
Ein Repository ist ein Satz gleichnamiger Images mit verschiedenen Tags, zumeist Versionen.
Registry
Eine Registry, wie zum Beispiel Docker Hub oder Artifactory, dient der Verwaltung von Repositories.

Docker (Software) – Wikipedia

Im nächsten Part wird gezeigt wie man Container mit Docker erstellt. Bleibt dran!

Owatz Quick Share

Hallo!

Du befindest dich hier weil du dich entweder für meine Hosting Setup interessierst oder aus Kuriosität https://s.owatz.net/ besucht hast. In beiden Fällen erkläre ich hier gerne, wie mein Quick Share Service funktioniert.

Wofür genau ist s.owatz.net?

Ich benutze die Subdomain s.owatz.net für 2 Dinge:

  • Dateien sowie Bilder die ich teilen möchte auf meinen Server hochladen und dort öffentlich (nur mit Link) zur Verfügung zu stellen
  • Shortlinks erstellen/Links kürzen

Ich möchte beispielsweise schnell ein Bild von der Katze meiner Freundin teilen? Ich lade es schnell hoch, erstelle einen kurzen Link der dann so aussieht: https://s.owatz.net/4nhrg und diesen kann ich dann an Freunde schicken.

Wie funktioniert das?

Server Part

Owatz Quick Share Infografik

Owatz Quick Share Infografik

Auf meinem Server läuft eine Dockerinstanz, so dass jede Web-App seinen eigenen Container besitzt. (Mehr dazu in meiner Blog Reihe über meinen VPS) Um Quick Share möglich zu machen habe ich selbst ein Dockerimage erstellt. Dieses besteht aus 2 PHP Apps:

Image Hosting

Dafür verwende ich Chevereto in der kostenlosen Variante. Chevereto ist eine PHP App die es erlaubt Bilder hochzuladen, zu verwalten und öffentlich bereitzustellen. Sie kann noch viel mehr als für was ich sie benutze, jedoch benötige ich so viel Funktionalität gar nicht.

Ein wichtiges Feature von Chevereto ist die API mit der man Bilder auch ohne die Weboberfläche hochladen kann. Das ist später wichtig.

Link Shortening

Dazu nutze ich YOURLS. Ebenfalls eine PHP App, die wunderbar ist um URLs zu kürzen. YOURLS bietet wenig Schnickschnack kann aber mit diversen Plugins erweitert werden. Eine API Schnittstelle ist auch hier mit dabei.

Client Part

Um beide APIs von meinem Rechner aus anzusprechen kommt ein Tool namens ShareX zu Hilfe. Dieses Windows-only Programm ist mehr als nur ein Screenshot Hotkey. Es kann so eingestellt werden, dass es mit jeder API per Knopfdruck kommuniziert. Chevereto und YOURLS sind sogar schon voreingestellt mit dabei. Für andere APIs kann man jedoch sogar selbst Schablonen bauen.

Mit Hilfe von ShareX kann ich mit einem Knopfdruck einen Screenshot aufnehmen, ihn hochladen und eine kurze URL in meiner Zwischenablage finden.

Doch nicht nur Bilder funktionieren mit ShareX. Für Dateien oder Texte lassen sich andere Dienste als Ziel festlegen. So habe ich beispielsweise auch meine Nextcloud verknüpft.

Warum der ganze Aufwand?

Sicher gibt es auch einfachere Lösungen die einen Klick entfernt im Internet zur Verfügung stehen. Imgur, bit.ly oder was auch sonst.

Es ist mir jedoch wichtig, die volle Kontrolle über meine Daten zu haben. Dass private Bilder von mir auf irgendwelchen Servern in den USA oder anderen Ländern liegen, von kommerziellen Unternehmen gesteuert die damit machen können was sie wollen breitet mir Bauchschmerzen.

Sicher ist eine fertige Lösung für den normalen Nutzer einfacher und ich kritisiere diese auch nicht. Wenn man jedoch die Fähigkeiten besitzt sich ein solchen Dienst selbst zu bauen, wieso nicht?

Am Ende lernt man dazu und hat auch noch etwas Nützliches für den täglichen Gebrauch geschaffen.

Server Reboot

Hallo Internet,

mein Server ist neulich gecrasht. Vieles konnte ich durch vorhandene Backups retten, dazu zählen vorallem private backend Services und das EutarUnion Wiki. Andere Dinge sind verschollen gegangen oder habe ich absichtlich nicht aus dem Backup geladen weil sie veraltet waren.

Diese Webseite gehört zu den Dingen die komplett verschollen gegangen sind. Ich habe die wichtigsten Teile schon wieder aufgesetzt, der Rest folgt in den nächsten Tagen.

Ich hoffe die Downtime hat niemanden zu sehr gestört. Habt noch einen schönen Tag.

Conrad