PHP-Frameworks – Was sie sind und für warum sie gebraucht werden.

Im Rahmen eines Projekts woran ich selber arbeiten darf, bin ich oftmals auf den Begriff Framework gestoßen und habe mir dann erklären lassen für was wir eigentlich genau dieses Framework benutzen und warum kein anderes.
Daher möchte ich ein paar Frameworks aufführen, sie zusammenfassen und natürlich Kund darüber geben, was sie machen.
Zu allererst möchte ich mit der allgemeinen Defintion von „Framework“ anfangen. Let‘s google it.
Ein Programm-Code besteht aus vielen kleinen Bausteinen. Um das Programmieren zu erleichtern und Zeit zu sparen, gibt es sogenannte Frameworks. Sie sind keine eigenständigen Programme, sondern stellen ein Programmiergerüst für den Entwickler.

Nun kommen wir zum Smart Framework.
Hierbei handelt es sich um ein Open-Source-Produkt, welches dem Model-View-Controller-Datenmodell folgt. Dieses Projekt wurde 2009-2011, von einem Software-Unternehmen, das bereits 15 Jahre Erfahrung im Web hat, gestartet. Der Release-Termin war im Februar 2012 und es wird bis dato noch relativ oft aktualisiert. Der letzte Stand der Aktualisierung ist der 25. April 2018 mit der Version 3.7.5. Zu den wichtigsten Funktionen gehört die reichhaltige Unterstützung verschiedener Typen von Datenbanken wie MySQL, SQLite, MongoDB, PostgreSql sowie andere JavaScript-Komponenten, integrierte Map-Handler(Google Maps und Bing Maps) und Redis für das Caching.
Unter anderem meint der Ersteller des Frameworks, dass dieses um einiges schneller ist als andere Frameworks wie Laravel und Zend. Ein Grund es mehr auszuprobieren.

 

wurde 2005 von Fabien Potencies, CEO bei SensioLabs und Blackfire.io, gestartet. Symfony besteht aus mehreren PHP-Komponenten, mehr als 30, die ein Framework bilden. All diese Komponenten hier aufzulisten, wäre einfach zu viel aber unter diesen 30 erweisen sich ein paar als interessant und es lohnt sich diese hier zu erwähnen. Dazu gehört unter anderem die Cache-Komponente, die ein erweitertes PSR-6 und PSR-16 zum Hinzufügen von Cache zu den Anwendungen bereitstellt. Konsolenkomponenten, die selbsterklärend sind, und eine PHPUnit Bridge, welche Legacy-Tests und veralteten Code meldet. Zuletzt noch Sicherheits-, Übersetzungs-, Routing- und Validierungskomponenten. Ebenfalls einzigartig ist die Dokumentation. Diese ist von dem Ersteller des Projekts sehr detailliert ausgeführt und es wird jede einzelne Komponente erklärt.
 

TwistPHP
Dieses Framework wurde zuerst als privates Projekt entworfen und hat sich dann während der Verbesserung, im Juli 2014 als Repository im GitHub wieder gefunden. Die erste offizielle Freigabe war aber wiederum im November 2014.
TwistPHP macht die Benutzerfreundlichkeit zu seinem Markenzeichen, da es ein kleines Framework ist. Hierbei handelt es sich auch wieder um ein Open-Source-Framework, welches unter der GNU-Lizenz angeboten wird.
Im Laufe der Zeit hat sich die Software weiterentwickelt und hat letztendlich mit der Version (3.0.5) eine vollständige MVC-Architektur, ein objektorientiertes Design, eine brandneue Methode zur Verbindung mit der Datenbank und zur Erstellung von MySQL-Abfragen, wobei die Art und Weise, wie es aufgebaut wurde, die Erweiterbarkeit und Zuverlässigkeit verbessert.


Fangen wir am Ursprung an. TYPO3 ist ein open-source-entwickeltes CMS, welches 1998 veröffentlicht wurde. TYPO3 wird genutzt um Websiten zu erstellen und wurde von mehr als 300 Mitwirkenden verbessert und aktuell wurde es mehr als 500.000 Mal installiert (Stand Januar 2019). Das Team von TYPO3 wollte ein modernes Produkt schaffen, welches unabhängig von TYPO3 sein sollte. Im August 2011 folgte dann die erste Beta von TYPO3 Flow sowie ein Open-Source-Produkt. Das Prinzip des Codings, vom neuen Framework, richtet sich nach dem MVS-Paradigma, Aspect Oriented Programming, Domain Driven Desgin und den Test Driven Development. Fluid, ein Template, ist ein weiteres Feature von TYPO3 Flow. Fluid unterstützt alle logischen Strukturen einer Programmiersprache wie zum Beispiel Iterationen und Schleifen usw., indem es eine einfache Syntax bietet und PHP in den Template-Dateien vermeidet.

Zu guter Letzt eines der beliebtesten Frameworks das:
Der Beliebtheitsgrad lässt sich anhand der hohen Installationszahl (mehr als 379 Millionen) festhalten, obwohl es einige Streitigkeiten über Zend gibt. Das Open-Source-Projekt wurde im März 2006 erstmals veröffentlicht und hat eine BSD-Lizenz (Freie Verwendung der Software). Nach Version 2.5 beschlossen die Entwickler ein modulares Produkt zu entwerfen, sie so in mehrere Komponenten aufzuteilen und dadurch es zu einer Sammlung von PHP-Paketen wurde. Mehr als 60 Komponenten und ein Plug-in stehen zur Auswahl. Darunter gehört die Authentifizierung, Grypt, Json, Mail, Math, Paginator, Serializer und Validator. Ein weiterer Vorteil der Verwendung von Zend ist die Prädisposition für das Test Driven Development. Zend implementiert Zend_test, was PHPUnit verwendet. Es erlaubt einem Controller, Modelle und Bibliotheken zu verwenden. Um PHPUnit in das Projekt zu implementieren, braucht man Zend_tool, das standardisierte Scaffolding Utility von Zend.

Fazit
Auf die Frage „Und welches ist jetzt das beste PHP-Framework?“ gibt es keine Antwort aber wenn man vor der Auswahl steht und nicht weiß welches Framework man nun benutzen soll helfen folgende Fragen.

  • Was will ich entwickeln?
  • Wann ist meine Deadline?
  • Wie schnell soll mein Projekt verfügbar sein?
  • Wie viel Zeit bleibt mir, um die neue Syntax zu erlernen?
  • Gibt es eine gute Dokumentation, aus der ich lernen kann?

Hilfreich ist es diese Fragen sich vor jedem Projekt zu stellen und dann zu schauen welches Framework den nun den gestellten Fragen Antwort leistet.

Niko Martini
Niko Martini
Junior Developer

Egal ob zu Hause oder bei NETWAYS, Niko hockt gern vor dem PC. Ab und zu fährt er auch mal mit seinem Dad auf eine Fahrradtour quer durch Deutschland. Nach seinen ersten Tagen bei uns, in denen er NETWAYS, die Kollegen und Tools näher kennengelernt hat, freut er sich besonders auf die kommenden Jahre.

ncurses – TUI für Unix-Derivate

Mit ncurses (Abk. für new curses) können wir uns eine TUI (=text-based user interface) in den verschiedensten Textterminals oder Terminalemulatoren darstellen lassen. Als freie C-Programmbibliothek unter der MIT-Lizenz, fällt ncurses als Open Source Software auch mit in das GNU-Projekt.

Ich habe mich ein wenig mit ncurses beschäftigt und einige hilfreiche Anwendungen gefunden, die zusätzlich sehr schön in TUI angezeigt werden. Dazu muss ich euch jedoch erst durch die Installation von ncurses führen:
(Debian/Ubuntu Linux)
$ apt install ncurses-base

(CentOS/Fedora)
$ dnf install ncurses-devel

Nun habe ich mir einige Tools installiert die ich euch unbedingt zeigen möchte.

Glances

Mit Glances ist es möglich, Systeminformationen auszulesen. Dateisystem, Netzwerk, Hardware-Komponenten und mehr, können hier im Vergleich zu top und htop in Echtzeit ausgelesen und angezeigt werden.

$ apt install glances

 

Midnight Commander

Der Midnight Commander ist ein freier Klon des Norton Commander (DOS-Tool). Er ist einer der bekanntesten Konsolenprogramme für Linux und zeigt eine zweispaltige Ansicht unserer Archive. Auch ein Zugriff auf Netzwerkserver ist möglich.

$ apt install mc

NCDU

Ein Festplatten-Dienstprogramm für Unix-Systeme. Hat die gleichen Funktionen wie das Dienstprogramm du, verwendet aber eine Textbasierte Benutzeroberfläche.

$ apt install ncdu

Bastet

Für alle Gamer gibt es hier noch einen Tetris-Klon. Freie Tastaturbelegung sowie ein easy/hard mode.

$ apt install bastet

 

Aleksander Arsenovic
Aleksander Arsenovic
Junior Consultant

Aleksander macht eine Ausbildung zum Fachinformatiker für Systemintegration in unserem Professional Service. Wenn er nicht bei NETWAYS ist, schraubt er an seinem Desktop-PC rum und übertaktet seine Hardware. Er ist immer für eine gute Konversation zu haben.

Und, was gibts heute zu Mittag?

Kurz vor 10:00 an der Kaffeemaschine, die Leute beginnen langsam ein kleines Hüngerchen zu verspüren und es wird diskutiert was denn heute in den Lunchshop kommt.
… Lunchshop?

Wir hier bei Netways haben ein cooles System entwickelt, das es für uns erleichtert zusammen Essen zu bestellen.
Wir haben nämlich als eher mittelgroßes Unternehmen nicht den Luxus einer Kantine wie so manch andere.
Stattdessen haben wir uns selbst geholfen und ein kleines Tool zusammengebastelt, das ich heute vorstellen möchte:

Der Lunchshop!

Grundsätzlich handelt es sich dabei um ein Webinterface, das helfen soll die Arbeitsabläufe beim Essen bestellen zu automatisiere.
Die “Händler” können einen Laden anbieten, bei dem sie bestellen wollen und die restlichen Mitarbeitenden können sich dann in die Bestellung einklinken.
Das spart Lieferkosten und schont die Umwelt (zumindest ein bisschen mehr als wenn ein Jeder für sich bestellt).
Und wir faulen IT-ler müssen uns nicht irgendwo hin bewegen um an Futter zu kommen!

Ursprünglich entwickelt und administriert von einem unserer ehemaligen Kollegen wird der Shop nun von einem Grüppchen von Freiwilligen weiter geführt.
Ich selbst bin einer der Admins und Händler. Ich versuche ein bis zwei mal die Woche einen Laden aus unserer Liste in den anzubieten, wir haben Pizza, Fitness-Food, Pasta, Asiatisch, Burger, Mexikanisch, Indisch und vieles mehr!

Die Bank!

Alle Geldbewegungen die durch das gemeinsame Bestellen entstehen sind automatisiert und laufen über unser internes Banksystem ab.
Die im System registrierten haben ein eigenes Konto, auf das sie einzahlen, von dem sie auszahlen und mit dem sie (gesetzt sie haben genug guthaben) auch bestellen können.
Das Geld wird wird von allen Bestellern automatisch abgezogen und dem Händler gut geschrieben. Dieser kann dann entweder das Geld auszahlen um damit für die Bestellung zu bezahlen, oder es als Guthaben behalten.

Der Bestellablauf!

Die App zum Anfassen!

Natürlich gibts das ganze Open Source, zum anschauen, forken und selbst verwenden!
https://github.com/gunnarbeutner/shop-app

 

Feu Mourek
Feu Mourek
Developer

Feu verbrachte seine Kindheit im schönen Steigerwald und kämpfte sich bis zum Abitur durch die Schule. Seit September 2016 unterstützt es die Development Abteilung bei Netways als Developer und UX Designer und widmet sich dort dem Web Development. Seine Freizeit verbringt es hauptsächlich in den virtuellen Welten von 'Dota 2' und diversen anderen Games, an der Kletterwand in der Boulderhalle, oder damit, mit Freunden und Kollegen Pen and Paper Rollenspiele zu spielen und ihnen auf...

Event Ticketverkauf mit Pretix

Seit etwa einem Jahr setzen wir bei NETWAYS für den Ticketverkauf für unsere Konferenzen und Schulungen auf Pretix. Ich habe unser Event-Team von der Evaluierung bis hin zur vollständigen Umstellung begleitet und dabei viele Eindrücke gewonnen.

Pretix ist eine Open Source Software die es Veranstaltern ermöglicht auf bequeme Weise Tickets für Veranstaltungen anzubieten, zu verkaufen und Teilnehmer zu verwalten. Bei den zahlreichen Schulungen und Konferenzen die NETWAYS organisiert ist so ein Instrument extrem wichtig. Die Wahl auf Pretix ist uns trotz unserer unzähligen Anforderungen relativ leicht gefallen, weil es nahezu alles bietet was das Event-Herz begehrt.

Alle Features aufzulisten wäre hier etwas zu viel. Ich habe daher die für uns wichtigsten Punkte ein mal zusammengefasst.

Verwaltung und Statistiken

Bei Pretix werden Events von verschiedenen Veranstaltern organisiert. Jeder Veranstalter hat dabei Teams die Zugriff auf die jeweiligen Events bekommen. Jedes Event hat eines oder mehrere Produkte (Tickets) die zum Verkauf angeboten werden. In einer aufgeräumten Übersicht bekommt man einen schnellen Überblick über anstehende Veranstaltungen und aktuelle Teilnehmerzahlen. Pretix unterstützt dabei nicht nur einmalige Events sondern auch wiederkehrende, so wie unsere Schulungen. Mit einer Vielzahl an Optionen und Plugins lässt sich der Ticketshop auf die eigenen Bedürfnisse anpassen.

 

Look and Feel

Neben den Farben des Shops erlaubt es Pretix auch die Tickets frei zu designen. Zusätzlich können alle Texte und das gesamte Design für die E-mail Kommunikation angepasst werden. Auch die automatisch generierten Rechnungen lassen sich mit etwas technischem Know-How abstimmen.

Integration

Die generelle Funktionalität wird bei Pretix durch Plugins erweitert. Zum Beispiel können verschiedene Bezahlmethoden eingebunden werden, von Sepa Lastschriftmandat, PayPal bis hin zur Kreditkartenzahlung. Ist man bei einem entsprechenden Provider registriert, lässt sich das problemlos einbinden. Pretix kann auch mit eigenen Plugins erweitern werden, wir verwenden zum Beispiel einen eigenen Renderer für Rechnungen und eine spezielle Export Variante für Teilnehmerdaten. Neben den bereits erwähnten textuellen Anpassungen, kann auch das gesamte Design von E-mails mithilfe eigener Plugins verändert werden. Die jeweiligen Ticket Shops werden auf die entsprechenden Konferenz-Webseiten eingebettet, so müssen Teilnehmer die Seite garnicht erst verlassen um ihre Tickets zu ordern. Ach ja, unser Request Tracker spricht auch mit Pretix über die Pretix REST API, die es natürlich auch gibt. Alles in allem lässt Pretix bezüglich Integrationen keine Wünsche offen.

On-premise oder in der Cloud

User können sich entscheiden ob sie Pretix selbst hosten (so wie wir) oder es lieber in der SaaS Variante einkaufen möchten. Beide Varianten haben ihre Vor- und Nachteile. Für uns war relativ schnell klar das wir selbst hosten werden. Die Installation ist sehr einfach und gut dokumentiert. Pretix grenzt klar ab welche Plugins open source sind und welche man nur gegen Bezahlung bekommt, so gibt es zu keinem Zeitpunkt unklarheiten. Die Software bekommt zuverlässig jeden Monat Updates mit Bugfixes und größeren kleineren Features. Auf GitHub erhält man in einem nahezu unmenschlich schnellem Tempo Antworten auf Fragen und Probleme.

Fazit

In Summe ist Pretix ein Vorzeigeprojekt wie Open Source Software im professionellen Umfeld funktionieren kann. Sowohl von der Funktionalität her als auch von den Möglichkeiten zur Erweiterung hat uns das Projekt überzeugt. Alle Features im Detail werden auf der Pretix Webseite aufgeführt.

Alle unsere Events findet ihr natürlich auf der NETWAYS Webseite.

Blerim Sheqa
Blerim Sheqa
Product Manager

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als Product Manager für Icinga tätig und kümmert sich dort auch um die Partner.

Oida, geht das nicht schneller?!

Findet 99 Linux Befehle

Ich hatte etwas downtime, also habe ich ein kleines Programm geschrieben das Wortsalate erstellt: wordsalad, Code hier auf Github. Ist noch nicht ganz fertig, aber wie ihr sehen könnt tut es schon seinen Dienst. Es nimmt eine Liste an Wörtern und versteckt sie in einem Suchbild. Der Algorithmus hierfür ist: Schmeiß das Wort irgendwo aufs Spielfeld, wenn es klappt gehe zum nächsten. Wenn nicht versuche das ganze nochmal, bis zu 200 mal pro Wort. Sollte sich so kein freier Platz für das Wort finden, mach das ganze Spielfeld neu und starte von Null – bis zu 2000 mal. Nicht besonders intelligent aber wofür haben wir sonst Prozessoren im Gigahertz Bereich!

Die Hertz sind machen nur ein Teil der Geschwindigkeit aus, ein anderer ist die Anzahl der Threads. Parallelisierung erlaubt es modernen Programmen ihre Arbeit doppelt, vier mal, acht mal oder noch schneller zu verrichten (theoretisch zumindest). Aber was bietet Go in dieser Hinsicht? Concurrency. Und was ist das? “Irgendwas mit Multi-threadding und Parallelisierung” dachte ich anfangs. Sogenannte Goroutinen können einfach gestartet werden und haben mit channels eine simple und mächtige Form der Synchronisierung und Kommunikation.

Findet 40 Staaten in denen die USA einen Coup herbeigeführt haben

Aber ich lag falsch, Concurrency ist eben nicht Parallelisierung.

Meine Vermutung Concurrency sei nur ein anderes Wort für Parallelisierung kam von der Bedeutung und Verwendung außerhalb der IT Welt. “Concurrence” bedeutet Kooperation, Zustimmung und eben auch “zur gleichen Zeit stattfinden”, gemeint ist hierbei aber wohl die erste Bedeutung. Goroutinen laufen eben nicht gleichzeitig ab, sie wechseln sich ab. Sollte eine routine mal länger nichts zu tun haben, weil sie etwa darauf wartet etwas von der Platte zu lesen oder schreiben, kann eine andere arbeiten. So laufen sie nicht gleichzeitig, sondern miteinander ab – sehr praktisch für schnelle Prozessoren.

Findet 30 Österreichische Schimpfwörter

Aber man hat eben mehrere Prozessoren, sollen die sich die übrigen etwa langweilen während einer arbeitet? Nein, go verwendet einen Prozessorpool der goroutinen wenn möglich parallel laufen lässt. So hat man das beste beider Welten, es ist einfacher mit Concurrency zu designen und die Sprache kümmert sich im Hintergrund darum das es möglichst schnell passiert.

Sollte euch das Thema weiter interessieren, kann ich diesen Talk von Rob Pike empfehlen.

Viel Spaß beim Suchen 🙂

Diana Flach
Diana Flach
Developer

Geboren und aufgewachsen in Bamberg kam Diana, nach einem Ausflug an die Uni, als Azubi zu NETWAYS. Dort sitzt sie seit 2014 im Icinga 2 Core Entwicklungsteam.

AJAX mit Ruby on Rails und :remote => true

Mit :remote => true bietet das das Ruby Webframework Rails eine sehr einfache Methode um mit Hilfe von AJAX eine Webseite zu aktualisieren. Dieses kann z.B. einfach zu HTML-Elementen wie Formulare, Buttons, Links und Checkboxen hinzugefügt werden. Dadurch werden z.B. gefüllte Formulare nicht mehr wie gewohnt an den Webserver gesendet, sondern mit AJAX. Man erspart dem Benutzer dadurch einen lästigen ggf. langwierigen Seitenaufbau. Im Gegenzug muss man sich aber selber um eine Aktualisierung der Webseite mit Hilfe von jQuery oder JavaScript kümmern.

Folgender Code in einem View erstellt eine Checkbox welche bei einem Klick mit Hilfe von AJAX einen HTTP Post an die angeben URL sendet:

check_box_tag( 
  "my_checkbox", "i_am_checked", false, 
  data: { 
    remote: true, 
    url: "my_checkbox/click", 
    method: "POST" 
  }
)

Der Request muss in diesem Fall vom my_checkbox Controller angenommen und verarbeitet werden. Um die Ansicht des Benutzers zu ändern schickt man mit den bekannten Rails Methoden Javascript an den Browser zurück. Im my_checkbox_controller.rb erweitert man z.B. die respond_to einfach um ein format.js:

def click
  respond_to do |format|
    format.js {}
  end
end

Der dazugehörigen View (click.js.erb) wird somit an den Browser zurück gesendet und man kann per JavaScript die Webseite aktualisieren:

console.log('I am the response!')
alert('You clicked the checkbox!')

Rails bietet mit :remote=>true somit eine wirklich einfach Methode um AJAX für seine Webseite einzusetzen!

Achim Ledermüller
Achim Ledermüller
Lead Senior Systems Engineer

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.