Rückblick auf ein ereignisreiches Jahr 2021

Es ist eigentlich jedes Jahr das gleiche. Der Dezember beginnt, mein Geburtstag naht und ich wundere mich jedes Mal darüber, wie schnell das Jahr wieder vergangen ist. In diesem Jahr habe ich die letzten Wochen etwas mehr Urlaub als sonst und kann das Jahr ganz in Ruhe mit der Familie ausklingen lassen. Zeit auch dafür, das Jahr noch einmal rückblickend zu bewerten und Ziele für das nächste Jahr zu setzen (könnt ihr hier nachlesen).

Auch dieses Jahr war wieder geprägt durch die noch anhaltende Corona Pandemie. Das habe ich selbst vor allem dadurch gespürt, dass sich meine privaten Projekte deutlich langsamer entwickelt haben, als ich ursprünglich wollte. Nicht nur durch die fehlenden engen Gespräche mit Freunden, auch das erhöhte Home-Office und mehr Zeit mit der Familie hatten darauf Auswirkungen. Nun muss ich aber sagen, dass dies ja nichts schlechtes ist. Mehr Zeit mit der Familie verbringen zu können ist wahrlich etwas schönes und ich genieße jede Minute, die ich mit ihnen verbringen kann. Auch das Home-Office bringt viele Vorteile mit sich. Es fallen gut zwei Stunden Fahrtzeit weg und auch die Spritkosten wirken sich positiv auf die Umwelt und den Geldbeutel aus.

Ich sehe es ein wenig wie eine inspirierende Auszeit an, um neue Ideen für neue und bestehende Projekte zu sammeln. Davon war das Jahr auch geprägt. Ich habe über 200 Stunden Tutorials bei Laracasts und auf YouTube angesehen. Viele neue Technologien ausprobiert, z.B. PHP 8.0 und 8.1, Tailwind CSS oder Laravel Livewire. Ich habe viel mit GitHub Actions experimentiert und meine DevOps Skills erweitert. Kurzum, ich habe viel Erfahrung gesammelt aber relativ wenig Projekte umgesetzt.

Projekt UX9 URL Shortener

Hier gab es wohl die größten Veränderungen. Gegen Ende des Jahres habe ich die Anwendung überarbeitet und auf Laravel 8 umgebaut. Außerdem für PHP 8.0 bzw. PHP 8.1 vorbereitet. Zudem gibt es nun für alle Klassen Unit Tests wodurch ich eine Code Coverage von über 90% erreichen konnte. https://ux9.de/

Projekt Zhylon und Deployer

Danke vor allem an meinen guten Freund Norbert, der hier nun viel Entwicklungsarbeit leistet. Zusammen konnten wir einige Updates einspielen was das Server Deployment nun deutlich erleichtert. Es gibt nun auch eine Version für kleine Teams und einen besseren Server Monitor. Zuletzt habe ich noch den OAuth2 Server aktiviert, wodurch ich neben MX-Codes nun auch Zhylon als Login verwenden kann. Gerne kann jeder sich beteiligen oder Beta Tester werden. Das Projekt wird noch einige Zeit brauchen, bis es komplett öffentlich werden kann. https://zhylon.de/

Projekt Management

Dieses Projekt hat vor etwa einem Jahr begonnen, da ich mit der Umstellung auf MacOS das von meinem Betrieb bereitgestellte Zeit-Buchungs-Tool nicht mehr nutzen konnte. Um mir das Buchen meiner Arbeitszeit etwas einfacher zu machen, habe ich ein altes Projekt wieder zum Leben erweckt und um einige neue Features erweitert. Norbert und Heiko konnte ich auch davon begeistern, sodass es nun regelmäßig mit großen und kleinen Updates ausgeschmückt wird. Nachdem wir bisher kein Namen für das Projekt finden konnten, haben wir nun endlich eine Domain gefunden und bestellt. Somit ist das Projekt nun ganz offiziell nutzbar https://proĵect.de/. Der Basiscode soll demnächst Open Source werden, sodass vielleicht eine Community entstehen könnte um noch mehr Features zu bekommen.

Wie ihr gelesen habt, bin ich mit dem ganzen Jahr eigentlich sehr zufrieden. Ich bin auch sehr froh darüber, dass mich die Pandemie nur am Rande betroffen hat und ich kaum größere Einschnitte dadurch gespürt habe. Ich hoffe auch das kommende Jahr wird wieder ein gutes und erfolgreiches Jahr.

Euch allen wünsche ich auf jeden Fall ein erfolgreiches, glückliches und gesundes neues Jahr.

Installation eines MEAN.JS Stack

In diesem Beitrag werde ich darauf eingehen, was MEAN.JS eigentlich ist, wie man einen MEAN.JS Stack auf seinem Server aufsetzten kann und was man hierbei für Vorteile hat. In einem späteren Beitrag werde ich dann an einem Beispiel beschreiben, was man mit MEAN.JS machen kann.

Was ist MEAN.JS?

MEAN.JS ist eine Full-Stack-Software-Lösung, die dabei hilft eine Web-Anwendung schnell, robust und in Produktion besser wart bar zu machen. Dabei werden die Technologien MongoDB, Express, AngularJS und Node.JS verwendet. Daher kommt auch der Name MEAN.

MEAN.JS Logo - Maxham.de
MEAN.JS

Warum MEAN.JS?

MEAN.JS hilft dabei unnötige Routinearbeiten und häufige Fehler während der Laufzeit der Anwendung zu vermeiden. Das Hauptziel ist es, eine einfache und gut lesbare OpenSource-Lösung zu verwenden, die man in seinen Webprojekte verwenden kann und vertrauen kann.

Die MEAN Komponenten

Fangen wir mit MongoDB an. MongoDB ist eine NoSQL-Datenbank und im Großen und Ganzen JSON (oder JSONB) Dokumente verwaltet. Die Dokumentation von MongoDB ist gigantisch umfangreich und hilft sicherlich, MongoDB besser zu verstehen.

Express.js – ist ein serverseitiges Web-Application-Framework, das für die JavaScript basierende Plattform Node.js läuft.

Angular.js – ist ein clientseitiges JavaScript MVC-Framework, das zur Erstellung von Single-Page-Webanwendungen verwendet wird. Das von Google entwickelte Framework ist eines der beliebtesten und führendsten Frameworks in diesem Bereich.

Node.js – ist eine serverseitige Plattform zum Betrieb von Netzwerkanwendung.

Voraussetzungen

  • GIT $ git –version
  • Node.js & npm $ npm install && npm install -g bower
  • MongoDB
  • Bower
  • Grunt $ npm install -g grunt-cli
  • Gulp (optional) $ npm install -g gulp

Wie man sehen kann, ist weder Express noch AngularJS in der Liste enthalten. Dies kommt daher, dass MEAN.JS die Abhängigkeiten automatisch installieren kann.

Download MEAN.JS

Es gibt zwei Möglichkeiten wie man MEAN.JS installieren kann. Die von mir bevorzugte Methode ist, das Git-Repository direkt in ein lokales Verzeichnis zu kopieren. Das geht mit dem folgenden Befehl:

$git clone https://github.com/meanjs/mean.git meanjs

Mit diesem Befehl wird die aktuelle Version von MEAN.JS in das lokale Verzeichnis „meanjs“ geklont. Alternativ kann man sich den Build direkt als ZIP-Datei herunterladen.

$wget https://github.com/meanjs/mean/archive/master.zip

MEANJS installieren

Nachdem MEAN.JS nach den oben genannten Schritten in ein Verzeichnis kopiert wurde, muss folgender Befehl ausgeführt werden:

$npm install

Mit diesem Befehl werden alle Abhängigkeiten, die für die Anwendung benötigt werden installiert. Anschließend kann man die Anwendung mit dem Befehl $grunt starten. Sollten mit diesem Befehl Warnungen angezeigt werden, kann versucht werden diese mit $grunt -serve ODER $ grunt -force zu umgehen. Ein Versuch die Anwendung mit $grunt -force auszuführen sollte jedoch vermieden werden.

 

Private Packages mit Composer

Wer bereits in größeren PHP-Projekten entwickelt hat weiß, dass man um eine Paketverwaltung nicht drum herum kommt. Üblicherweise ist dies Composer. Mit Composer hat man Zugriff auf tausende Packages die vor allem in Packagist zu finden sind.

Doch manchmal kann man keine öffentlichen Pakete verwenden oder möchte explizit nur seine eigenen, privaten Pakete verwenden. Hier hat man mit Composer auch viele Möglichkeiten. Ich beschreibe hier aber in der Schnelle eine Lösung, wie es mit Bitbucket möglich wird.

Um die Pakete von Bitbucket, bzw. einem Repository anzuziehen, müssen ein paar Anpassungen an den composer.json-Dateien vorgenommen werden.

Im Hauptprojekt muss in der composer.json folgendes eingetragen werden:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://bitbucket.org/accountname/reponame.git"
    }
  ],
  "require": {
    "accountname/reponame": "dev-master"
  }
}

Im eigentlichen Package sieht die composer.json dann wie folgt aus:

{
  "name": "accountname/reponame",
  "version": "master",
  "dist": {
    "url": "[email protected]:accountname/reponame.git",
    "type": "vcs"
  }
}

PHP Stories: Extract()

Einstieg in PHP Stories

Ich möchte heute mit einer neuen Serie Beginnen. Ich nenne sie „PHP Stories“.
Ich werde in regelmäßigen Abständen einen kleinen Beitrag erstellen, in dem ich eine PHP Funktionalität erklären werde und dessen Vorteile nennen werde.

Heute beginne ich mit der „extract“ Funktion.

Extract()

Manchmal kann es vorkommen, dass du in deinem Projekt mehrere Variablen einer Funktion oder Methode übergeben musst, bei dem jeder Parameter mit seinem Namen zu identifizieren ist.
Eine Möglichkeit wäre die Funktion „func_get_args()„, doch in diesem Fall würde man den Namen des Parameters nicht bekommen, sondern lediglich den Index. Zum Beispiel: $args[0], $args[1]…
Mit „extract()“ bekommst du jedoch alle Parameter mit Ihrem „richtigen“ Namen. Sogar die Reihenfolge spielt hierbei keine Rolle.

Hier mal ein Beispiel:

<?php // example.php
function personInfo(array $info = [])
{
	extract($info);
	echo "Mein Name ist $name und ich bin $age alt. Ich arbeite als $job.";
}

personInfo([
	'name'	=> 'Tobias Maxham',
	'age'	=> 25,
	'job'	=> 'Software Engineer',
	'hobby'	=> 'Schwimmen',
]);
// Ausgabe => Mein Name ist Tobias Maxham und ich bin 25 alt. Ich arbeite als Software Engineer.

Dies wird vor allem in großen Frameworks verwendet, wenn viele Daten z.B. von einem Controller an eine View übertragen werden müssen.

In der nächsten Ausgabe werde ich die Funktion „compact()“ erklären, die genau das Gegenteil macht.