PHPUGFFMEinladung zum PHP-BBQ 2016 (30.5.2016, 08:32 UTC)

Am Samstag, den 16. Juli veranstaltet die PHP-Usergroup Frankfurt wieder ein BBQ und alle, dei sich mit PHP beschäftigen sind eingeladen. Egal ob WordPress, Typo3, Drupal, Symfony, ZendFramework oder sonstige Fraktion, egal ob aus Frankfurt, Gießen, Wiesbaden, Mainz, Mannheim oder Offenbach – alle sind eingeladen zum netten Beisammensein, Grillen und Schnacken.

Dieses Jahr werden wir das Licht- und Luftbad Riederwald unsicher machen.

Bitte meldet euch auf der Veranstaltungsseite an, damit wir etwas planen können. Und keine Sorge, wir werden bei jedem Wetter feiern!

Und wenn Fragen sind, meldet euch gerne per Twitter (#phpbbq16) oder über das Kontaktformular.

Wir freuen uns auf euch!

Link
PHPUGFFMWordcamp Frankfurt im September (23.5.2016, 20:44 UTC)

Vom 2. bis 4. September 2016 veranstaltet das Frankfurter WordPress-Meetup ein Wordcamp auf dem Bockenheimer Campus. Mehr Infos gibt es unter https://2016.frankfurt.wordcamp.org/.

Link
Gjero KrsteskiWhy reactive application? (11.5.2016, 20:18 UTC)

Application requirements have changed dramatically in recent years. Only a few years ago a large application had tens of servers, seconds of response time, hours of offline maintenance and gigabytes of data.

Today applications are deployed on everything from mobile devices to cloud-based clusters running thousands of multi-core processors. Users expect millisecond response times and 100% uptime. Data is measured in Petabytes. Today’s demands are simply not met by yesterday’s software architectures.

Traditional applications

reactive-api-with-php_traditional_

Each request is using 2 running processes, one for each instance of HTTP server and database server. The PHP framework might also generate its own additional process.

The HTTP server instance is generating a request object, which is mostly overloaded for later usage.

The database instance is blocking the response until it has finished its task.

The database response is being buffered by the PHP process in order to generate the DTO (data transfer object).

The PHP process is using the DTO to generate a JSON response for the HTTP server instance.

The entire process starting with the HTTP request until serving the response back to the client, is running in the same thread. This uses the CPU’s default behaviour, which leads to an unbalanced usage of CPU cores.

cpu_traditional_application

Reactive applications

We believe that all necessary aspects are already recognised individually: we want systems that are responsive, resilient, elastic and message driven. We call these Reactive Systems.

reactive-api-with-php_reactive

There is no need for a HTTP server. The application is using one single process. PHP and the database (SQLite) are running inside this process.

There is no need for an overloaded HTTP request object. The required data is mostly limited to request method, path and payload.

The response can be sent immediately to the client, while the data is being processed in the background and all necessary steps are being handled in an asynchronuous manner, using events.

The database is not blocking the response, as its task is being handled asynchronuously.

The entire process is happening within one persistent TCP socket, enabling the repsonse to be streamed to the client.

The process is managing its tasks with several threads, balancing the usage of all CPU cores.

cpu_reactive_application

Example Implementation

As an implementation example we used lightweight components which we packed in Docker containers. AlpineOS and Ubuntu already come as Docker images ready to be used.

ReactPHP is responsible for establishing the TCP socket, transferr

Artikel gek: Lesen Sie den Rest hier (weitere 2144 Bytes)

Link
PHPUGFFMEinladung zum 3. Treffen in 2016 (3.5.2016, 10:29 UTC)

Wir treffen uns dieses Mal wieder am 19. Mai 2016 ab 19:00 Uhr bei sitewards am Untermainkai.

Themen sind diesmal Event Sourcing: the good, the bad and the complicated und time is an illusion.

Damit wir besser planen können, meldet euch bitte hier über die Veranstaltungsseite oder bei joind.in an.

=============================================================================================

Our next meetup is at the 19th of May startng 19:00H at sitewards at Untermainkai.

Topics this time are Event Sourcing: the good, the bad and the complicated and time is an illusion.

To ease planing please reserve your seat either at the event-page or at joind.in

Link
Gjero KrsteskiCheckout PIMF Starter Book (28.4.2016, 08:25 UTC)

pimf-php-micro-framework
This is a hands-on book. You won’t be able to complete it by reading it in a metro on a way to work. You’ll have to read this book while in front of a computer getting your hands dirty. You will learn developing console and web applications as well as micro services. This book is interesting for intermediate developers as well as beginners.

Learning PIMF

One of the best ways to learn PIMF is to read through the entire of its documentation. This guide details all aspects of the framework and how to apply them to your application. http://docs.pimf-framework.de

Read the PIMF Starter book almost anywhere. Available as a PDF, EPUB and MOBI. You can now read it on all devices, as well as offline: http://book.pimf-framework.de

Eventually, you might get stuck and in need of help. Or you might want to write a review or comment on the book’s content. Please post your thoughts on this blog post. If you prefer one-on-one discussion, feel free to send me an email to gjero@krsteski.de, and I’ll give my best to help you out.

Link
Fabian MartinGitlab Omnibus: 502 Bad Gateway im LXC Container (26.4.2016, 10:51 UTC)

Bei der Einrichtung von Gitlab mittels des Omnibus Paketes kann es unter Proxmox 4 zu Problemen kommen. Anders als Proxmox 3 wird nicht mehr OpenVZ sondern LXC in Kombination mit AppArmor genutzt. AppArmor verhindert an dieser Stelle den Zugriff auf den Socket von Gitlab Workhorse, welches für die Generierung der Oberfläche zuständig ist.

Abhilfe schafft die Verschiebung des Sockets an einen anderen Ort.

Öffnet hierzu die Datei 

/etc/gitlab/gitlab.rb
  in eurem favorisierten Editor und fügt die folgende Zeile hinzu

gitlab_git_http_server['listen_addr'] = '/tmp/gitlab-workhorse.socket'

Nach einem Aufruf von 

gitlab-ctl reconfigure
 sollte eure Gitlab Installation wie erwartet funktionieren.

Der Beitrag Gitlab Omnibus: 502 Bad Gateway im LXC Container erschien zuerst auf Fabian Martin.

Link
Fabian MartinSeafile: SQL Fehler beim Update auf 5.1 (24.4.2016, 20:51 UTC)

Wer über eine ältere Seafile Installation verfügt und auf die aktuelle Version aktualisieren möchte, der wird möglicherweise die folgende Meldung erhalten

Failed to execute sql: (1146, "Table 'seahub.sysadmin_extra_userloginlog' doesn't exist")

Der Hersteller hat in der Vergangenheit das Datenbankschema von Seafile und Seafile Pro bei Neuinstallationen aneinander angeglichen, dies jedoch nicht bei bestehenden Installationen nachgeholt. Mit den folgenden SQL Statements könnt ihr die Datenbank für das Update vorbereiten.

Im ersten Schritt werden wir die bereits durchgeführte Änderung der Tabelle 

RepoTokenPeerInfo
 wieder rückgängig machen. Wechselt hierzu in die Seafile Datenbank (
use seafile-db
 ) und führte das folgende Statement aus.

ALTER TABLE RepoTokenPeerInfo DROP client_ver;

Anschließend erstellen wir die fehlende Tabelle. Wechselt hierzu vorab in die Seahub Datenbank (

use seahub-sb
) und führt anschließend das folgende Statement aus.

CREATE TABLE `sysadmin_extra_userloginlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `login_date` datetime NOT NULL,
  `login_ip` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `sysadmin_extra_userloginlog_ee0cafa2` (`username`),
  KEY `sysadmin_extra_userloginlog_c8db99ec` (`login_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Das Upgrade Skript sollte nun ohne Fehler durchlaufen.

Der Beitrag Seafile: SQL Fehler beim Update auf 5.1 erschien zuerst auf Fabian Martin.

Link
PHPUG WürzburgEinladung zum April-Treffen (19.4.2016, 09:36 UTC)

Hallo alle zusammen!

Wir treffen uns am 26. April um 19 Uhr in

Mennas Time Out
Frankfurter Straße 1
97082 Würzburg

Parkplätze sind in der näheren Umgebung ausreichend vorhanden, Straßenbahn-Haltestelle: Wörthstraße.

Ich freue mich auf viele Teilnehmer und rege Diskussionen!

Viele Grüße
Jason

Link
PHP-TagebuchShopware 5: Einkaufswelt-Element-Plugin erstellen am Beispiel (25.3.2016, 18:42 UTC)

In  diesem Artikel erkläre ich am Beispiel, wie sich in Shopware 5 ein eigenes Einkaufswelt-Element-Plugin erstellen lässt. Das Ziel dieses Artikels wird ein Plugin sein, mit dem sich Instagram-Bilder darstellen lassen.

Shopware 5 Plugin-Entwicklung

Wer schon einmal in Verbindung mit Shopware programmiert hat, der wird wissen, dass es nicht immer einfach ist und gerne mal mit Frust verbunden sein kann.
Das liegt meines Ermessens unter Anderem daran, dass
- Shopware teilweise Technologien einsetzt, die nicht (mehr) geläufig sind (Zend Framework 1, ExtJS, Enlight, Smarty)
- Debugging oft schwierig ist (JavaScript Code z.B. wird teilweise serverseitig included und über Ajax ausgegeben)
- die Community sich nur auf Deutschland beschränkt und Forenbeiträge mit Fragen oft unbeantwortet beiben.

Die soll kein Vorwurf an das Shopware-Team sein. Ein so umfangreiches Shopsystem ist zwanghaft mit Komplexität verbunden und wenn man die neuste Entwicklung des Shopware-Codes verfolgt, findet man sinnvolle Ansätze (Dependency Injection, Hooks), die aufzeigen, dass Shopware auf dem richtigen Weg ist. Nicht zu vergessen muss natürlich immer die erfolgsentscheidende Abwärtskompatibilität im Hinterkopf behalten werden.

Beispiel-Plugin: Instagram Bilder für Einkaufswelten

Als ich mit der Plugin-Entwicklung für Shopware begonnen habe, war das mit viel Frust verbunden.
Auf viele Fragen bekam ich keine Antwort – weder in der offiziellen Dokumentation, noch in den Forenbeiträgen oder sonstwo über Google.

Ich hätte mir gerne ein sauberes, fertiges Plugin gewünscht, an Hand dessen ich direkt am Code lernen kann, wie ich Plugins schreibe und was es zu beachten gibt. Zwar gibt es den Shopware Plugin Boilerplate Code, der ging mir aber nicht weit genug und ließ viele Fragen offen.

Aus diesem Grund habe ich nun selbst ein Plugin geschrieben, das ich zwar auch im Shopware Store verkaufen werde, aber auch unter MIT-Lizenz auf Github gestellt habe. Das heißt: Mach damit, was Du willst :)

Einkaufswelt-Element-Plugin herunterladen

Das Plugin ist schnell installiert.
Wechsel zuerst in das Verzeichnis Deiner Shopware-Installation und dort in das lokale Backend-Plugin-Verzeichnis:

cd pfad-zu-shopware/;
cd engine/Shopware/Plugins/Local/Backend/;

Lade Dir nun hier via git Das Plugin herunter:

git clone https://github.com/ckdot/shopware-instagram-element.git

Das Plugin wird nun in das Verzeichnis shopware-instagram-element heruntergeladen. Das Verzeichnis des Plugins muss aber dem technischen Plugin-Namen entsprechen. Dieser lautet CkdotInstagramEmotionElement. Nenne das Verzeichnis also um:

mv shopware-instagram-element CkdotInstagramEmotionElement

Plugin installieren

Das Plugin lässt sich installieren, wie jedes andere Shopware-Plugin auch:
Gehe in das Shop-Backend und öffne den Plugin-Manager. Suche das Plugin aus der Liste heraus und klicke auf das grüne Plus:

Einkaufswelt-Plugin installieren

Einkaufswelt-Plugin installieren

Darauf ist das Plugin noch nicht aktiviert!
Suche das Plugin erneut aus der Liste unter “Deaktiviert” und klicke auf das kleine, rote X.

Nun wird der Template-Cache gelöscht. Zusätzlich öffnet sich ein Fenster zur Kompilierung des Themes. Klicke hier auf “Kompilieren”, sodass die neuen CSS-Styles des Einkaufswelt-Element-Plugin in das Theme integriert werden.

Wenn die Kompilierung abgeschlossen ist, musst Du die Seite einmal vollständig neu laden. Das ist notwendig, damit neue Einkaufswelt-Elemente hinzugefügt werden können.

Eigenes Einkaufswelt-Element Plugin entwickeln

Jetzt, wo das Plugin installiert ist – und hoffentlich funktioniert – solltest Du Dir die Datei Bootstrap.php ansehen. Ich habe hier jede Kleinigkeit kommentiert und auch darauf hingewiesen, was es zu beachten gibt.

Ich empfehle Dir übrigens bei der Shopware-Entwicklung eine IDE wie PHPStorm (kostenpflichtig) oder Netbeans (kostenlos) zu verwenden und einem Texteditor vorzuzie

Artikel gek: Lesen Sie den Rest hier (weitere 764 Bytes)

Link
schmengler-se.de » PHPDesign Patterns für Framework-agnostische Extensions/Plugins – Autoloading (22.3.2016, 16:09 UTC)

Teil 5 meiner Blog-Reihe auf integer-net.com über Framework-unabhängigen Code ist draußen: Using Advanced Autoloading. Dieser ist allerdings nur für die Anbindung von Legacy-Anwendungen relevant, die noch kein Composer-Autoloading nutzen (Magento 1).

Vorige Teile

  1. Introduction: Shared Code For Magento 1 and Magento 2 Extensions
  2. Accessing Configuration Data
  3. Using Dependency Injection
  4. Building Bridges
  5. Preparing Data For Output

The post Design Patterns für Framework-agnostische Extensions/Plugins – Autoloading appeared first on schmengler-se.de.

Link
LinksRSS 0.92   RDF 1.
RSS 2.0 Feed   RDF 1.
100% Planet PHP   PHP5 powered
PEAR powered  
Code wird von Planet-PHP zur Verfügung gestellt. Vielen Dank.