Neues Projekt: Laravel CRM

Wir haben lange darauf gewartet und jetzt ist es hier: Laravel 9. Und nach ein paar Wochen aktiver Benutzung bin ich wieder sehr begeistert von den ganzen Neuerungen.

Was mich auch sehr erfreut, ist der Ausschluss von PHP Versionen unter PHP 8. Zum einen ist es nun endgültig notwendig, Projekte auf PHP 8 umzustellen. Zum anderen wird diese Tatsache auch wieder Schwung in viele OpenSource Projekte und Packages bringen.

In diesem Zuge habe ich mir überlegt, ein neues Projekt zu starten. Ich möchte dabei möglichst viele Funktionalitäten mit Laravel abdecken und gleichzeitig an meinen Test-Driven-Development Skills arbeiten. Ich habe mir daher vorgenommen dieses Jahr an einem Customer Relationship Management zu arbeiten unter Verwendung von Laravel 9.

Das Ziel soll dabei also nicht die Konkurrenz zu anderen Produkten auf dem Markt sein, sondern viel mehr darin, gerade für Neueinsteiger in Laravel oder generell in die PHP Programmierung aufzuzeigen, was es alles für Funktionalitäten in Laravel gibt und wie man diese in einem echten Projekt verwenden kann.

Eine Idee zur Umsetzung wäre, dass ich aufgrund der Laravel Dokumentation einzelnen Task erstelle, welche dann umgesetzt werden. Dabei muss beachtet werden, dass die Umsetzung trotzdem realistisch sein muss und nicht mit aller Kraft dann irgendwie funktioniert.

Außerdem sollen auch die fachlichen Themen des CRM nicht vernachlässigt werden sondern eher Vorrang haben. Ich werde hier natürlich auch ein paar OpenSource und kommerzielle CRM ansehen, um hier die fachlichen Themen heraus zu arbeiten.

Das Projekt und alle dazugehörigen Themen werden OpenSource oder öffentlich zugänglich sein. Daher hoffe ich auch auf Unterstützung bei diesem Projekt. Jeder is herzliche zu Pull-Requests oder auch als Collaboration eingeladen.


Hier nochmal alle Links zur Übersicht.

Repository: https://github.com/TobyMaxham/laravel-crm

Projekt: https://github.com/users/TobyMaxham/projects/1

Git Cheatsheet von tq-bit

Heute habe ich auf dev.to einen Artikel von Tobias Quante (@tqbit) gefunden, der wichtige Git Befehle aufzeigt. Die Visualisierung der einzelnen Commands ist dabei besonders gut gelungen. So kann man relativ schnell sehen, wann man welche Befehle verwenden muss.

Hier geht es zum original Beitrag: https://dev.to/tqbit/a-printable-pdf-git-cheatsheet-33bd

Hier geht es direkt zu den Cheatsheets: https://github.com/tq-bit/dev-cheatsheets

Meine Tech-Pläne für 2022

Die letzte Woche aus 2021 hat nun begonnen. Zeit das vergangene Jahr nochmal zu reflektieren und zu schauen, was man alles erreicht hat, vielleicht gerade noch daran arbeitet oder aus verschiedensten Gründen dieses Jahr nicht mehr erreichen wird. Wie jedes Jahr habe ich das auch zusammen gefasst und muss sagen, daß ich allgemein ganz zufrieden bin. Hier geht es zum Beitrag

In diesem Beitrag soll es nun aber um die technischen Ziele gehen, welche ich mir für das nächste Jahr gesetzt habe. Da ich 2021 noch nicht alles erreicht habe, was ich mir vorgenommen habe, werde ich an einigen Projekten wohl noch weiter arbeiten.

Projekt UX9 URL Shortener

In meiner Serie zum Laravel Upgrade habe ich ja schon den Upgrade Prozess für Laravel 8 beschrieben. Mit dem Release von Laravel 9 und PHP 8.1 wird dies wohl das erste Projekt im neuen Jahr sein, das mit dieser Technik umgesetzt wird. Es fehlen auch noch ein paar Anpassungen an der API sowie Sicherheitsvorkehrungen, bevor der Puplic Access wieder hergestellt werden kann. Das Kürzen von URLs ist derzeit ohne Account nicht möglich. Hintergrund ist die Häufung von Phishing URLs. Hier geht es zur Anwendung: https://ux9.de/

Projekt Sitealarm

Auch hier soll die Codebasis auf Laravel 9 und PHP 8.1 umgestellt werden. Hier habe ich auch bereits angefangen. Es gestaltet sich jedoch sehr aufwendig, da ich hier als Basis Laravel Spark verwendet hatte und dies nicht mehr verwenden möchte. Außerdem läuft die Webanwendung auf einem Hosted Server, auf dem offiziell PHP 8.1 noch nicht unterstützt wird. Ich werde das Projekt wohl auch in meinem Blog regelmäßig als Thema verwenden. Ob ich eine App dazu rausbringen werde, kann ich heute noch nicht sagen. https://sitealarm.de/

Projekt Elnu CDN

Dieses Projekt habe ich nun einige Jahre schleifen lassen und nur privat verwendet. Doch auch hier leider nicht überall. Ziel war es zwar nie, eine große Reichweite zu erhalten oder mit großen Unternehmen zu konkurrieren. Prinzipiell geht es bei dem Projekt um den Lerneffekt und was man technisch alles für ein gut funktionierendes CDN benötigt. Im nächsten Jahr möchte ich hier versuchen, eine gute Basis für eine öffentliche Nutzung des Service zu schaffen. Dann sollen ausgewählte Benutzer die Möglichkeit bekommen, wie bei anderen Anbietern auch, eigene Repositories dem Netzwerk hinzuzufügen um so auch davon profitieren zu können. https://elnu.de/

Project Management

Dieses Projekt wird mich das ganze nächste Jahr beschäftigen. Das Projekt soll den Public-Status erreichen, sodass jeder der möchte daran mitarbeiten kann (Link zu GitHub, sobald öffentlich). Einen privaten Fork, für die original Anwendung, gibt es nun auch. Hier soll es noch viele Erweiterungen geben. Unter anderem sollen die Exporte noch besser werden, eine offizielle API soll geschafft werden und die Anbindung an das von meinem Arbeitskollegen (@santwer) programmierte Tool (Kouky) soll erweitert werden. Hier haben wir auch bereits einen Fork erstellt, der hier als optimierte Schnittstelle dienen soll. Wie wir das genau umsetzen ist noch nicht ganz sicher. Vermutlich wird es auf der selben Platform laufen wie das Hauptprojekt, ohne Verbindung zur offiziellen Seite von Kouky.

Hier geht es zur Website: https://proĵect.de/

Social Media und Öffentlichkeit

Ich möchte in 2022 wieder aktiver auf Twitter werden. Außerdem regelmäßig Blog Beiträge erstellen. Ich habe hier auch schon ein paar Ideen, wie mir das einfacher fallen kann. Damit verbundenen werde ich wohl auch endlich meine Website überarbeiteten und wieder ein bis zwei Mal pro Monat einen Newsletter verschicken. Fürs erste plane ich ca. 7 Tweets pro Woche, also ca. einen Tweet pro Tag. Das sollte eigentlich machbar sein. Vor allem werde ich auch Links teilen und Empfehlungen für Packages und Tutorials veröffentlichen.

Ich habe mir hoffentlich nicht zu viel für das kommende Jahr vorgenommen. Doch sind mir diese Projekte sehr wichtig, weshalb mir ein erfolgreiches Gelingen dieser Ziele sehr am Herzen liegt. Ein paar Projekte sind aber auch stark von der Entwicklung der Corona Pandemie abhängig, da ich z.B. beim Elnu und „Projects“ im engen Kontakt mit ein paar Freunden stehe und dieser durch Corona leider eingeschränkt ist. Trotzdem sind die Ziele machbar und durch verschiedene Meilenstein auch schrittweise erreichbar.

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.

UX9 URL Shortener: Upgrade auf Laravel 8 – Teil 2

Bevor ich mit der eigentlichen Umstellung begonnen haben, hatte ich mir ausführlich überlegt, was ich alles umstellen muss, und wie ich die Umstellung gestalten möchte. Relativ schnell ist mir aufgefallen, dass das Projekt zwar über die letzten 10 Jahre sehr gewachsen ist, der wesentliche Kern hingegen beschränkt sich auf wenige Klassen. Ich habe mich daher für eine Upgrade Strategie entschieden, die in der Regel für kleinere Projekte sehr gut funktionieren kann, hingegen für größere Projekte viel zu Aufwändig ist.

Hast du den ersten Teil bereits gelesen? Noch nicht, kein Problem. Hier geht es zum ersten Teil: UX9 URL Shortener: Upgrade auf Laravel 8 – Teil 1

Ich nenne die Strategie „Copy-To-New“, mit der ich in den letzten Jahre sehr gut bei kleine Projekten gefahren bin. Dabei ist die eigentliche Umstellung recht schnell beschrieben:

1. Alle Projekt-Dateien in ein „Backup“-Verzeichnis verschieben
2. Neue Laravel Installation bereit stellen
3. „Alten“-Code Schritt für Schritt wieder in die neue Installation verschieben
4. Alle Änderungen Testen (Unit Tests)

Bei dieser Methode ist der 4. Punkt äußerst essentiell. Ich habe die Erfahrung gemacht, dass das Testen der Anwendung am Ende doch schwieriger ist, als man sich das zuvor überlegt hatte. Darum empfehle ich, je nach Größe und Umfang des Projekts, immer PHP-Unit Tests zu verwenden, mit welchen man die Funktion des Programmes auch nach dem Upgrade sicherstellen kann.

Leider hatte ich bis dato noch keinen (nicht einen einzigen) PHP-Unit Test für meinen URL Shortener geschrieben. Da ich aber seit einige Jahren auf das Test-Drive-Development setze, wollte ich das nun auch in diesem Projekt einführen. Also der ideale Zeitpunkt, um nun damit zu beginnen. Mein erster Schritt war also, für das gesamte Programm PHP-Unit Tests zu schreiben. Hier mal ein Beispiel, wie eine Test-Klasse bei mir aussieht. Der Test prüft einige Prozesse vom User-Dashboard:

UX9 Test Cases: URL Shortener

Für diese Phase habe ich etwa 200 Test geschrieben. Ich konnte damit eine Test-Abdeckung von ca. 73% erreichen. Bis zum Ende der Umstellung und weiterem Refactoring, möchte ich eine Test-Abdeckung von über 90% erreichen. Es werden also im Laufe und vermutlich auch direkt nach dem Upgrade noch einige weitere Tests folgen.

Im nächsten Teil dieser Serie, werde ich die ersten beiden Punkte näher beschreiben. Damit ist dann die Grundlage für jede weitere Umstellung gesetzt.