Web + Mobile Blog / Berlin http://www.sebastianviereck.de PHP und VBA Excel Freelancer Fri, 16 Feb 2018 08:16:09 +0000 de hourly 1 http://wordpress.org/?v=3.5.1 Robert C. Martin über Programmierer und gute Architektur von IT-Projekten http://www.sebastianviereck.de/robert-c-martin-ueber-programmierer-und-gute-architektur-von-it-projekten/?utm_source=rss&utm_medium=rss&utm_campaign=robert-c-martin-ueber-programmierer-und-gute-architektur-von-it-projekten http://www.sebastianviereck.de/robert-c-martin-ueber-programmierer-und-gute-architektur-von-it-projekten/#comments Fri, 16 Feb 2018 08:16:09 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3662-de Ich stimme Ihm in allem zu, was er sagt:

Über Architektur:

Über Programmierer und IT im Allgemeinem:

]]>
http://www.sebastianviereck.de/robert-c-martin-ueber-programmierer-und-gute-architektur-von-it-projekten/feed/ 0
PHPUnit returnCallback Beispiel http://www.sebastianviereck.de/phpunit-returncallback-beispiel/?utm_source=rss&utm_medium=rss&utm_campaign=phpunit-returncallback-beispiel http://www.sebastianviereck.de/phpunit-returncallback-beispiel/#comments Wed, 14 Feb 2018 09:26:08 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3658-de Mit dem PHPUnit returnCallback() Methode kann man dynamisch den Rückgabewert eines Mocks definieren.

Beispiel:

public function testCallback()
{
    $globalObject = [];
    $this->mock
        ->expects($this->any())
        ->method('method')
        ->will(
            $this->returnCallback(
                function($param) use ($globalObject) {
                     return globalObject;
                }
            )
        );
}
]]>
http://www.sebastianviereck.de/phpunit-returncallback-beispiel/feed/ 0
Travis CI: No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) http://www.sebastianviereck.de/travis-ci-php-5-6-env-symfony_version3-4/?utm_source=rss&utm_medium=rss&utm_campaign=travis-ci-php-5-6-env-symfony_version3-4 http://www.sebastianviereck.de/travis-ci-php-5-6-env-symfony_version3-4/#comments Mon, 12 Feb 2018 08:45:06 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3647-de Weiterlesen ]]> Bei der sehr kryptischen Fehlermeldung in Travis CI:

No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

handlet es sich um ein Problem mit falschen Einrückungen im travis.yml File:

matrix:
  include:
    - php: 5.6
      env:
        - SYMFONY_VERSION='3.4.*'

Ein Leerzeichen zu wenig in der Zeile – SYMFONY_VERSION=’3.4.*’ und es kommt zu diesem wenig aufschlussreichen Fehler.

]]>
http://www.sebastianviereck.de/travis-ci-php-5-6-env-symfony_version3-4/feed/ 0
GitHub Continuous Integration und CodeCoverage mit Travis CI http://www.sebastianviereck.de/github-continuous-integration-und-codecoverage-mit-travis-ci/?utm_source=rss&utm_medium=rss&utm_campaign=github-continuous-integration-und-codecoverage-mit-travis-ci http://www.sebastianviereck.de/github-continuous-integration-und-codecoverage-mit-travis-ci/#comments Sat, 10 Feb 2018 10:39:33 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3638-de Weiterlesen ]]> Für mein öffentliches GitHub Projekt Entity to Rest Bundle für Symfony, habe ich Travis CI, ein Service einer Frima aus Berlin/Friedrichshain, für Continuous Integration benutzt und bin vollbegeistert. Ich musste nur eine .travis.yml erstellen und mich mit meinem Github Account kostenlos anmelden und mit wenigen Handgriffen kann ich jetzt mittels Travis CI:

  • Testen von unterschiedlichen PHP-Versionen
  • Testen von unterschiedlichen Symfony Versionen
  • Markup auf GitHub über den Stand der Tests: Build:success/failed
  • automatische E-Mail Benachrichtigung über das Ergebnis nach jedem Pull-Request

Jetzt erscheint eine schicke Grafik und informiert über den aktuellen Build Status:

travis_github_ci

Das Ergebnis des Builds kann man sich anschauen auf der travis ci Webseite.

Hinweis: Für öffentliche GitHub Repositories ist der Service kostenlos, für private Repositories muss man bezahlen.

Um die CodeCoverage auch anzeigen und berechnen zu können, kann man sich kostenlos bei einem der beiden Anbieter anmelden und muss nur die CodeCoverage Generierung in seiner .travis.yml triggern.

https://codecov.io  Beispiel Projekt

https://coveralls.io Beispiel Projekt

]]>
http://www.sebastianviereck.de/github-continuous-integration-und-codecoverage-mit-travis-ci/feed/ 0
Symfony Entity to REST API Bundle released http://www.sebastianviereck.de/symfony-entity-rest-api-bundle-released/?utm_source=rss&utm_medium=rss&utm_campaign=symfony-entity-rest-api-bundle-released http://www.sebastianviereck.de/symfony-entity-rest-api-bundle-released/#comments Fri, 09 Feb 2018 15:32:37 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3633-de Weiterlesen ]]> Bei meinem jetztigen Projekt programmiere ich gerade mit Symfony 3 eine REST API und habe aus verschiedenen Bundlen eine REST Suite erstellt für Symfony 3 erstellt, welche folgende  Komponenten enthält:

  • Api Dokumentation inkl Sandbox Tests – auch ohne Programmierkenntnisse kann der Code abgenommen werden und ausprobiert werden
  • die Dokumentation wird automatisch generiert aus den Eigenschaften der Entitäten, es ist kein zusätzlicher Aufwand notwendig
  • die Validierung der Parameter wird automatisch anhand der Entitäten durchgeführt, es ist kein zusätzlicher Aufwand notwendig
  • eine Suche ist automatisch enthalten, die Relationen von Entitäten sind auch durchsuchbar
  • CRUD Funktionalität: GET, CREATE, UPDATE, DELETE einer Entität ist schon implementiert und kann erweitert werden
  • einfaches Testing: Integration Tests sind schnell erstellbar / Vorlagen liegen bereit
  • ein Demo REST Service Projekt mit Demo Code ist bereit
  • ausführliche Dokumentation
  • einfache Installation über composer: composer require sebvie/rest-suite-bundle

Bei Interesse kann ich gern das Bundle in ihrem Projekt integrieren oder einarbeiten: Kontakt.

 

 

]]>
http://www.sebastianviereck.de/symfony-entity-rest-api-bundle-released/feed/ 0
PHP: Parse Error: syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘ http://www.sebastianviereck.de/php-parse-error-syntax-error-unexpected-expecting/?utm_source=rss&utm_medium=rss&utm_campaign=php-parse-error-syntax-error-unexpected-expecting http://www.sebastianviereck.de/php-parse-error-syntax-error-unexpected-expecting/#comments Tue, 30 Jan 2018 08:41:37 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3626-de Weiterlesen ]]> Bei der sehr kryptischen  Fehlermeldung

Parse Error: syntax error, unexpected ':', expecting ';' or '{'

handelt es sich in den meisten Fällen um eine PHP7 Inkompatibilität.

Der auszuführende Code enthält ein Sprach-Feature, was erst unter PHP7 verfügbar ist:

Return Type Definitions (Definition des Rückgabewertes). Beispiel:

function myFuntion($input): array
{
    return ['foo'];
}

Damit kann man festelegen, dass die Funktion ein Array zurückgeben muss, sonst wird ein TypeErrror ausgelöst.

Um den Code in einer niedrigeren PHP Version zum Laufen zu bringen, muss man die Return Type Definition entfernen:

function myFuntion($input)
{
    return ['foo'];
}

Spezialfall: composer

Bei mir kam dazu, dass es sich nciht um Code von mir handelte, sondern über Abhängigkeiten, die ich mit compser installiert hatte.
Typischerweise hat man bei composer die Minimum Version eingestellt von PHP:

"php": ">=5.6",

Es kann aber auch Sinn machen, die PHP-Version zu konfigurieren um Probleme zu vermeiden:

"config": {
    "platform": {
        "php": "5.6"
    }
},
]]>
http://www.sebastianviereck.de/php-parse-error-syntax-error-unexpected-expecting/feed/ 0
Symfony static laden von Fixtures beim Laden eines Integration Tests in PHPUnit http://www.sebastianviereck.de/symfony-static-laden-von-fixtures-beim-laden-eines-integration-tests-phpunit/?utm_source=rss&utm_medium=rss&utm_campaign=symfony-static-laden-von-fixtures-beim-laden-eines-integration-tests-phpunit http://www.sebastianviereck.de/symfony-static-laden-von-fixtures-beim-laden-eines-integration-tests-phpunit/#comments Sat, 20 Jan 2018 21:03:44 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3615-de Weiterlesen ]]> Mit der statischen Funktion setUpBeforeClass() von PHPunit kann man einmalig vor dem durchführen der Tests  in einer Klasse Fixtures laden und die Datenbank zurücksetzen:

class MyTestCase extends WebTestCase
{
    use FixtureLoadTrait;
 /**
 * @return void
 */
 public static function setUpBeforeClass()
 {

     $fixtures = [
         new TriggerConditionFixture()
     ];
     self::rebuildDataBase($fixtures);
 }

Die Fixtures lassen sich bequem mit dem Trait laden und die Datenbank wird geleert:

<?php

namespace Tests\Integration;

use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
use Tests\Fixture\BackendBundle\DataFixtures\ORM\LoginFixture;

trait FixtureLoadTrait
{

    /**
     * @param array $fixtures
     *
     * @return void
     */
    protected static function rebuildDataBase(array $fixtures)
    {
        self::bootKernel();
        $fixtureLoader = new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
        foreach($fixtures as $fixture){
            $fixtureLoader->addFixture($fixture);
        }
        $fixtureLoader->addFixture(new LoginFixture());
        self::getFixtureExecutor()->execute($fixtureLoader->getFixtures());
    }

    /**
     * @return ORMExecutor
     */
    protected static function getFixtureExecutor()
    {
        /** @var \Doctrine\ORM\EntityManager $entityManager */
        $entityManager = self::$kernel->getContainer()
            ->get('doctrine')
            ->getManager();

        return new ORMExecutor(
            $entityManager,
            new ORMPurger($entityManager, ['user'])
        );
    }

    /**
     * @return ContainerAwareLoader
     */
    protected static function getFixtureLoader()
    {
        return new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
    }
}
]]>
http://www.sebastianviereck.de/symfony-static-laden-von-fixtures-beim-laden-eines-integration-tests-phpunit/feed/ 0
Eine Datei über den Namen suchen auf Linux http://www.sebastianviereck.de/eine-datei-ueber-den-namen-suchen-auf-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=eine-datei-ueber-den-namen-suchen-auf-linux http://www.sebastianviereck.de/eine-datei-ueber-den-namen-suchen-auf-linux/#comments Fri, 19 Jan 2018 21:04:00 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3612-de Um irgendeine Datei in einem beliebigen Verzeichnis zu finden, kann man den find-Befehl verwenden:

sudo find / -name 'datei.php'
]]>
http://www.sebastianviereck.de/eine-datei-ueber-den-namen-suchen-auf-linux/feed/ 0
PHPStorm Replace Regex über mehrere Zeilen http://www.sebastianviereck.de/phpstorm-replace-regex-ueber-mehrere-zeilen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phpstorm-replace-regex-ueber-mehrere-zeilen http://www.sebastianviereck.de/phpstorm-replace-regex-ueber-mehrere-zeilen/#comments Thu, 18 Jan 2018 09:49:01 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3608-de Weiterlesen ]]> Um in PHPStorm einen Regex über mehrere Zeieln zu schreiben, kann man folgenden Beispiel Regex verwenden:

\n.+ \* .*statusCodes([^}])+.+

Durch die Verneinung: ([^}])+ werden alle Zeilen bis zur nächsten schließenden Klammer verwendet durch den Regex.

Einen Text, der komplett matchen wäre ist (markiert sind die Elemente aus dem Regex):

       *    statusCodes={
     *          200="Returned on %Entity% get",
     *          400="Returned when the parameters are wrong",
     *          404="Returned when %Entity% not found",
     *          405="Returned when method is wrong (GET|POST|PUT|..)",
     *          500="Returned when a exception is thrown"
     *    }

Eine andere Möglichkeit für mehrzeilige PHP Kommentare (/** */) ist dieser Regex:

.*\/\*[^\/]+\/\s
]]>
http://www.sebastianviereck.de/phpstorm-replace-regex-ueber-mehrere-zeilen/feed/ 0
PHP Queue Systeme im Vergleich http://www.sebastianviereck.de/php-queue-systeme-im-vergleich/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=php-queue-systeme-im-vergleich http://www.sebastianviereck.de/php-queue-systeme-im-vergleich/#comments Fri, 12 Jan 2018 10:32:34 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3651-de Weiterlesen ]]> Ein Vergleich verschiedener Queue Systeme für den Einsatz in einer PHP Applikation.

Apache ActiveMQ

Das Apache Projekt ActiveMQ bietet:

  • realtiv wenig Clients in verschiedenen Sprachen Java, C, C++, C#, Ruby, Perl, Python, PHP
  • die Kommunikation von PHP mit ActiveMQ erfolgt über das Stomp Protocoll
  • einen Stomp/ActiveMQ Client bietet stomp-php
  • Enterprise Einsatz möglich
  • Apache Projekt – Weiterentwicklung ist sicher
  • Open Source
  • eher veraltet

RabbitMQ

RabbitMQ ist ein modernes, weit verbreitetes Queue System.

  • große Auswahl an Clients
  • für PHP ist der php-amqplib Client am weitesten verbreitet
  • einfacher und moderner zu handeln
  • sehr gute Dokumentation
  • Enterprise Einsatz möglich
  • Open Source

Apache Kafka

Apache Kafka ist das modernste Queue System, die Besonderheit

  • extrem performant durch den Einsatz von Streams
  • PHP Clients vorhanden: php-rdkafka
  • Enterprise Einsatz möglich
  • sehr gute Dokumentation
  • Apache Projekt – Weiterentwicklung ist sicher
  • Open Source

Fazit:

Aufgrund des einfachen Handlings würde ich für die meisten Aufgaben RabbitMQ empfehlen. Für Performance kritische Anwendungsfälle ist Apache Kafka am besten geeignet.

Eine Übersicht über weitere Messaging Queues findet man auf Wikipedia.

]]>
http://www.sebastianviereck.de/php-queue-systeme-im-vergleich/feed/ 0