Archives For

php PSR 0,1,2, nichts dabei!Mir ist klar dass der Titel dieses Post erstmal Verwirrung stiftet. Denn es hat wieder mit den unmöglichen Tiefen von PHP zu tun, und zwar mit einem Standard. Bis vor einiger Zeit gibt es für PHP aus dem Vendor Team keinen eigenen Standard wie man PHP eigentlich schreibt – also wie man es so schreibt das es lesbar ist und bei jeden gleich aussieht.

Bis zu diesem Zeitpunkt gab es einige Versuche: Zend, Squiz, Pear. Aber das Ergebnis war nie perfekt. Andere Sprachen haben ihren Styleguide bereits dabei, z.B. PEP8 in Python. Auch wurde viel in fremden Welten geklaut, z.B. Code Conventions von Java oder die Entfremdung einiger C Stile brachte so manches Stirnrunzeln vor den Bildschirm. Nun hat die PHP Framework Interop Group mit Ihrem “propose a standards recommendation” einen sehr guten Standard rausgekurbelt der:

  1. Zu PHP passt
  2. Die Aktualität berücksichtigt
  3. Von vielen akzeptiert wird

Die PHP-FIG an sich sich ist eine Gruppe von Personen die versuchen an vielen Ecken und Enden Standards zu schaffen, an die man sich halten kann – aber nicht muss. Herausgekommen ist ein vierteiliges Werk was wiederum auf spezielle Teile von Sprachkonstrukten Einfluss nimmt:

Über PSR-3 lässt sich streiten aber 0-2 sind super umgesetzt  und integriert sich sinnvoll in die Sprache. Nicht zuletzt wird der Standard von vielen Tools bereits unterstützt: PHP CodeSniffer oder PHPStorm, Eclipse. Und viele Projekte sind bereits damit umgesetzt, http://packagist.org feststellen kann.

So schaut es gut aus:

$ phpcs --standard=PSR2 Process.php 
Time: 0 seconds, Memory: 6.25Mb
<?php
/**
 * This file is part of DINGS
 *
 * DINGS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * DINGS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with TKMON.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @author Marius Hein <marius.hein@netways.de>
 * @copyright 2012-2013 NETWAYS GmbH <info@netways.de>
 */
 
namespace NETWAYS\IO;
 
/**
 * Specific implementation to FO
 * @package NETWAYS\IO
 * @author Marius Hein <marius.hein@netways.de>
 */
class FileObject extends \SplFileObject
{
    /**
     * Integrate chmod on that file
     * @param int $mode
     * @return bool
     */
    public function chmod($mode)
    {
        return chmod($this->getRealPath(), $mode);
    }
}
10.thumbnail PSR 0,1,2, nichts dabei!

Autor: Marius Hein

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Hin und wieder stellt sich die Frage in welcher Sprache man ein Programm eigentlich schreiben sollte. Neben persönliche Vorlieben, Features und Modellen welche die Sprache unterstützen soll, gilt es aber auch ein Auge auf der Performance zu haben.

Bevor es nun ungezähmt aus dem Wald schallert: “Klar, C, schneller geht’s kaum”, wage ich anzumerken dass auch die Performance in der Schreibgeschwindigkeit zählt, oder der Praktikabilität, usw. Allerdings interessiert mich in diesem Artikel mehr der Speicherverbrauch.

Scriptsprachen welche meistens dynamisch typisieren oder eine Mischform aus dynamischer und statischer Typisierung verwenden brauchen oft mehr Speicher als eigentlich nötig. Daraus würde ich gerne einen Vergleich aus den populärsten Sprachen ziehen.

Basis hierfür ist ein 10.9673 MB großer JSON Dump (sagen wir halt 11MB), mit 100000 Objekten innerhalb eines Arrays. Als Implementierung wurde immer die kleinste gewählt, möglichst streams, keine Zwischenspeicher und keine Ausgabe (Ergebnis wurde natürlich vorher geprüft bevor mit der Zeitnahme begonnen wurde.

Die Messung wurde mit Valgrind durchgeführt (mit dem tool massif) und als Vergleichswert der maximale Peak in Mebibyte gemessen.

chart time2 300x151 Memory footprint von Scripts

Nun, verloren hat ganz klar – und auch leider – PHP. Mit fast 240 Mebibyte aufgeblasenen Heap wundert man sich fast schon was eigentlich drin steht – im Speicher. Ganz gut im Mittelfeld platziert sich der Liebling der Administratoren, Perl – Gut schnell und annehmbarer Speicherverbrauch. Node ist zwar schnell aber nicht weit verbreitet weshalb es eher (auch hier ein klares leider) ein klares Schattendasein führt. Zu C++ ist noch zu sagen das hier alles Dynamisch angelegt und ein großes Framework verwendet wurde, weshalb das Ergebnis kaum zu rechnen ist.

Dieser Test ist natürlich auch in keinster Weise repräsentativ. Werden doch Shared Objects in den Speicher geladen und andere Dinge unternommen welche einen objektiven und ausgeglichenen Vergleich kaum zulassen. Aber man kann doch Stärken und Schwächen erkennen, da es sich zumindest bei den Scriptsprachen um Standardinstallationen aus einem Ubuntu (12.04 LTS) System handelt. Ansonsten folgen noch ein paar hübsche Graphen.

 

10.thumbnail Memory footprint von Scripts

Autor: Marius Hein

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Knapp ein Jahr ist der Artikel über CSS Frameworks nun alt. Allerdings gewinnt das Thema immer mehr an Bedeutung. Bootstrap ist mittlerweile in aller Munde und viele Designs im Netzt erinnern an Twitter und Konsorten. JS RIA Designs sind rückläufig und man wendet sich wieder dem klassischen, semantischen Web zu. Soll heißen, manches wird einfacher wenn man sich auf das Html an sich konzentriert, als darauf was ein Framework ausspuckt. Ein Paradekanidat hierfür ist jQuery und eben Bootstrap.

Ein kleines Projekt Namens Font Awesome geht sogar noch einen Schritt weiter und verpackt lästige Icons, welche meistens als Pixel vorliegen in eine Schriftart. Der Vorteil liegt auf der Hand: Klein, skalierbar, einfärbbar und veränderbar mit CSS. Aufbereitet durch handliche CSS Klassen und eingebettet in Bootstrap lassen sich sehr schnelle und sehr schöne Designs bauen:

Natürlich erkauft man sich die Einfachheit mit modernen Technilogien wie z.B. CSS3. Allerdings bleibt das Projekt mit einigen Einschränkungen abwärtskompatibel bis zu IE7. Sehr gut, weiter wollen wir auch nicht mehr runter icon wink Html Font Awesomeness . Wirklich ein CSS Tool auf das die Welt gewartet hat – Grazie!

10.thumbnail Html Font Awesomeness

Autor: Marius Hein

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

logo composer transparent 252x300 Abhängigkeiten Komponieren in PHPProblem?

Wie verwendet man eigentlich Fremd-Bibliotheken im eigenen PHP Projekt? Um Probleme zu vermeiden liefert man diese lieber selbst und stellt sie in seiner Verzeichnisstruktur zu Verfügung. Verbunden mit einigen Nachteilen: Das Projekt wird größer (z.B. durch den Einbau von riesigen Bibliotheken wie ORMs) und das Gerangel verschiedener Autoloader wird unperformant und unübersichtlich. Letzten Endes ist die Bibliothek grundsätzlich veraltet und als Author ist man selbst für Updates verantwortlich. Als Alternative hat man hier noch PEAR. Damit stößt man bei Produktivsystem schnell an seine Grenzen: Include Pfade, Dev und Beta Channels verhindern flüssiges Arbeiten und man hat schnell eine kaputte Umgebung die nicht mehr so arbeitet wie man eigentlich wollte.

Ich bin neulich über den Composer gestolpert und hab ihn prompt lieb gewonnen. Projekt-Lokale Installation, einfach Konfiguration und nicht zuletzt eine gute Webseite machen den Einstieg leicht. Am besten ich zeige was ich meine

Konfiguration

Im Projekt selbst wird eine composer.json angelegt:

{
  "require": {
    "twig/twig": "1.11.*",
    "pimple/pimple": "1.0.*"
  }
}

Hier wird kurz beschrieben was man für sein Projekt benötigt. Die Konfiguration bietet natürlich noch einiges mehr. Grundsätzlich reicht das Snippet von oben aber aus.

Installation Composer

$ curl -s https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /data/tmp/test-projekt/composer.phar
Use it: php composer.phar

That’s it. Falls etwas fehlt, wird man freundlich darauf hingewiesen und man kann die Änderungen nachreichen.

Auflösen der Abhängigkeiten

$ php composer.phar install
Loading composer repositories with package information
Installing dependencies
  - Installing twig/twig (v1.11.1)
    Loading from cache

  - Installing pimple/pimple (v1.0.1)
    Loading from cache

Writing lock file
Generating autoload files

Auch das ging schon fast zu schnell. Wir sind fertig.

Einbinden in den eigenen Code

Der Composer legt im Projekt ein Verzeichnis “vendor” mit einem eigenen Autoloader an. Der muss nur noch inkludiert werden:

<?php
require 'vendor/autoload.php';

// OWN PROJECT

Der Autoloader des Composers kann auch gleich für das eigenen Projekt genutzt werden und beherrscht alle Vorgaben aus dem PSR-0 Standard. Die JSON Datei erhält hierfür eine weitere Konfiguration:

{
    "autoload": {
        "psr-0": {
            "NETWAYS": "lib/",
            "OTHER_NAMESPACE": "lib/",
        }
    }
}

Fazit

Schnell, einfach und leicht. Diese Devise wird vom Composer aufgegriffen und konsequent umgesetzt. Einziges Manko: Man braucht mindestens PHP 5.3.2. Das sollte allerdings schon bis in die letzten staubigen Ecken vorgedrungen sein. Weitere Informationen finden man auf der Webseite oder im Paketverzeichnis.

Ein guter Vorsatz für das bevorstehende neue Jahr – Ich wünsche einen guten Rutsch!

10.thumbnail Abhängigkeiten Komponieren in PHP

Autor: Marius Hein

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Nun, vermutlich die wenigsten. Wer nicht gerade im Software- oder Webseitenbau unterwegs ist, kommt ganz gut ohne aus. Trotzdem, Mockups sind Modelle von ihren echten Vertretern und erleichtern z.B. Kommunikation über ihre Designs. Das Thema ist nicht mehr Abstrakt, sondern man kann es anschauen und erkennt leichter Nachteile oder Unschönheiten.

Auch beim Testen kommen Mock-Objekte zum Einsatz. Tests können so mit unechten Datenbankobjekten umgehen – Eine Art Hülle, unter der unsere Schnittstellenmethoden stecken. Das Funktioniert allerdings nur wenn man sich an bestimme Modelle in der Entwicklung hält (Siehe: DI oder IoC).

Um Design Mockups (Wireframes) zu zeichnen werden wir heute von vielerlei Software unterstützt. Balsamiq ist z.B. ein Kanidat – Und es gibt viele die so aussehen wie Balsamiq icon wink Mockups, Mockups, wer braucht Mockups? . Hiermit lassen sich schnell und einfach Fenster, Dialoge oder Browser-Inhalte entwerfen und mit ins Meeting nehmen. Änderungen sind so in wenigen Minuten realisiert.

So gut die Unterstützung der Technologie auch ist, der Dynamik eines Gespräches hält es nicht stand. Und so bedienen wir uns einem alten Bekannten. Der Dienst sneakpeekit.com unterstützt Web / RIA Entwickler mit Papier und bietet Blöcke und Vordrucke mit fertigen Wireframes zu Browsern oder Mobile Devices. Damit geht es besonder schnell, nebenher etwas zu krizeln oder sich auszutauschen. Einfach das PDF runterladen, runterladen und los geht’s. Nur nebenbei erwähnt: Hier schließt sich dann der Kreis zu CSS Grid Systemen. Einige der Sketch Books bauen auf bekannten Ideen auf. wie z.B dem 960 Grid System.

Dann mal ran an die Stifte. Aber nicht das jetzt alle nur noch zeichnen …

t Mockups, Mockups, wer braucht Mockups?t Mockups, Mockups, wer braucht Mockups?t Mockups, Mockups, wer braucht Mockups?t Mockups, Mockups, wer braucht Mockups?

10.thumbnail Mockups, Mockups, wer braucht Mockups?

Autor: Marius Hein

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Page 1 of 91234...>>