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

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 1

Ich habe wieder einmal meinen Urlaub genutzt, um einige meiner privaten Projekte weiter zu entwickeln. Eines meiner derzeit größten Projekten ist mein eigener URL Shortener: https://ux9.de

Das ist neben meiner eigenen Homepage mittlerweile auch das Projekt, welches am längsten läuft. Bereits Ende 2009 habe ich mit den ersten Ideen dazu angefangen und diese noch auf meinem derzeitigen Blog (kein WordPress) genutzt, um externe Verlinkungen zu analysieren und durch eine einfache Verkürzung besser darstellen zu können. Mit dem Erwerb von mehreren dreistelligen Domains, hat mein URL Shortener dann in den darauffolgenden Jahren auch seine eigene Seite bekommen.

Das Projekt wurde mit der Zeit stetig erweitert. Die ersten Jahre habe ich nur PHP ohne Framework verwendet. Seit 2015 habe ich dort dann mit Laravel 4.2 bzw. Laravel 5 als Framework begonnen. Dabei habe ich auch die Grundstruktur des Projektes neu organisiert. Neben stetigen Weiterentwicklungen gab es zuletzt ein Upgrade auf Laravel 6 im September 2019.

Die darauffolgenden Jahre war ich mir nicht sicher, ob ich das Projekt überhaupt noch weiter betreiben möchte oder nicht. Nach viel Überlegen habe ich mich aber dazu entschlossen, das Projekt weiter laufen zu lassen. Die Vorraussetzung dafür ist aber, dass das Projekt von Grund auf neu strukturiert wird, mit Unit-Test ergänzt wird und es eine vernünftige Möglichkeit gibt, dass Administratoren die einzelnen Module verwalten können.

Die Umstellung meiner Seite, möchte ich in dieser Serie von Beiträgen mit euch teilen. Ich hoffe ich kann damit einen kleinen Einblick geben, wie man Projekte sinnvoll umstellen kann. Die Teile werden in den nächsten 1-2 Wochen erscheinen.

PHP Stories: Letztes Array Element [Laravel]

Bevor ich eine wesentlich schnellere Variante mit Laravel zeige, zunächst nochmal ein Rückblick. In einem älteren Beitrag, aus dem Jahr 2016 (PHP Stories: Letztes Array Element), habe ich geschrieben, wie man das letzte Element eines Arrays ermittelt kann. Durch die in PHP vorhandene Funktion end() rückt man den internen Zeiger vom Array bis zum letzten Element vor, und gibt dann dessen Wert zurück.

Eine „Einzeiler“ Varianter die ein Benutzer kommentiert hatte sieht in etwa wie folgt aus:

<?php
$array = ['Toby', 'Lars', 'Yutta', 'Nils'];
echo "Der letzte ist " . $array[array_keys($array)[sizeof($array)-1]];

// Ausgabe: Der letzte ist Nils

An dieser Stelle lohnt es sich nochmal einen Blick auf das PHP-Framework Laravel zu werfen. Hier gibt es bereits Funktionen die solche Probleme komplett auflösen. In Laravel könnte ein Code Beispiel wie folgt aussehen:

<?php
$collection = collect(['Toby', 'Lars', 'Yutta', 'Nils']);

echo $collection->last() . " ist der letzte <br>";
echo $collection->first() . " ist der letzte <br>";

// Ausgabe: Nils ist der letzte <br>Toby ist der letzte <br>

Mit dieser Variante wird anstatt einem Array ein „Collection“ Objekt erstellt. Diese Klasse enthält diverse Interfaces die dafür sorgen, dass das Objekt wie ein Array verwendet werden kann. Neben Methoden wie first, last, count oder filter gibt es viele weitere Methoden um mit einer „Collection“ von Elementen umzugehen.

Für jeden der noch nichts mit Laravel gemacht hat, sollte sich das Framework unbedingt einmal näher anschauen.