Web + Mobile Blog / Berlin http://www.sebastianviereck.de PHP und VBA Excel Freelancer Sun, 23 Jul 2017 08:24:36 +0000 de hourly 1 http://wordpress.org/?v=3.5.1 Amazon MWS PHP: Compile Error: Redefinition of parameter $quotaMax http://www.sebastianviereck.de/amazon-mws-php-compile-error-redefinition-parameter-quotamax/?utm_source=rss&utm_medium=rss&utm_campaign=amazon-mws-php-compile-error-redefinition-parameter-quotamax http://www.sebastianviereck.de/amazon-mws-php-compile-error-redefinition-parameter-quotamax/#comments Sun, 23 Jul 2017 08:24:36 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3398-de Weiterlesen ]]> Die Amazon MWS Library hat zu Recht Probleme in PHP7.1 mit der Datei: /MarketplaceWebServiceProducts/Model/ResponseHeaderMetadata.php (line 31)

Vorher:

class MarketplaceWebServiceProducts_Model_ResponseHeaderMetadata {

...

  public function __construct($requestId = null, $responseContext = null, $timestamp = null,
                              $quotaMax = null, $quotaMax = null, $quotaResetsAt = null) {
    $this->metadata[self::REQUEST_ID] = $requestId;
    $this->metadata[self::RESPONSE_CONTEXT] = $responseContext;
    $this->metadata[self::TIMESTAMP] = $timestamp;
    $this->metadata[self::QUOTA_MAX] = $quotaMax;
    $this->metadata[self::QUOTA_REMAINING] = $quotaMax;
    $this->metadata[self::QUOTA_RESETS_AT] = $quotaResetsAt;
  }

Nach dem Fix:

public function __construct($requestId = null, $responseContext = null, $timestamp = null,
                            $quotaMax = null, $quotaMaxRemain = null, $quotaResetsAt = null) {
  $this->metadata[self::REQUEST_ID] = $requestId;
  $this->metadata[self::RESPONSE_CONTEXT] = $responseContext;
  $this->metadata[self::TIMESTAMP] = $timestamp;
  $this->metadata[self::QUOTA_MAX] = $quotaMax;
  $this->metadata[self::QUOTA_REMAINING] = $quotaMaxRemain;
  $this->metadata[self::QUOTA_RESETS_AT] = $quotaResetsAt;
}

Grund ist, dass die Variable $quotaMax doppelt benutzt wird in der Kontrultor Definition.

 

]]>
http://www.sebastianviereck.de/amazon-mws-php-compile-error-redefinition-parameter-quotamax/feed/ 0
Wie kann ich meine Maus und Tastatur auf mehreren Computern benutzen? http://www.sebastianviereck.de/wie-kann-ich-meine-maus-und-tastatur-auf-mehreren-computern-benutzen/?utm_source=rss&utm_medium=rss&utm_campaign=wie-kann-ich-meine-maus-und-tastatur-auf-mehreren-computern-benutzen http://www.sebastianviereck.de/wie-kann-ich-meine-maus-und-tastatur-auf-mehreren-computern-benutzen/#comments Fri, 30 Jun 2017 07:52:25 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3332-de Die Antwort ist Synergy damit kann man auch Betriebsystemübergreifend einen anderen Computer steuern, ohne die Maus/Tastatur umstecken zu müssen. Funktioniert unter Mac, Linux und Windows.

]]>
http://www.sebastianviereck.de/wie-kann-ich-meine-maus-und-tastatur-auf-mehreren-computern-benutzen/feed/ 0
Linux vergleichen von Dateien innerhalb eines Ordners auf Dateiänderungen http://www.sebastianviereck.de/linux-vergleichen-von-dateien-innerhalb-eines-ordners-auf-dateiaenderungen/?utm_source=rss&utm_medium=rss&utm_campaign=linux-vergleichen-von-dateien-innerhalb-eines-ordners-auf-dateiaenderungen http://www.sebastianviereck.de/linux-vergleichen-von-dateien-innerhalb-eines-ordners-auf-dateiaenderungen/#comments Tue, 27 Jun 2017 12:29:23 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3330-de Weiterlesen ]]> Mit dem diff   Befehl unter Linux kann man sehr einfach herausfinden, welche Unterschiede es in zwei scheinbar identsichen Ordnern gibt.

Ein Anwendungsbeispiel wäre z.B. 2 Projekte miteinander zu vergleichen und die Unterschiede im Code herauszufinden.

#Ausgabe auf der Console stdout
diff -qr \
--exclude="css" \
--exclude="tmp" \
/myMaster/folder /mySlave/folder


#Pipen der Ausgabe in eine Datei oder less:
diff -ur \
--exclude="css" \
--exclude="tmp" \
/myMaster/folder /mySlave/folder | /tmp/diff.txt
]]>
http://www.sebastianviereck.de/linux-vergleichen-von-dateien-innerhalb-eines-ordners-auf-dateiaenderungen/feed/ 0
MySQL ProcessList unter Linux beobachten http://www.sebastianviereck.de/mysql-processlist-unter-linux-beobachten/?utm_source=rss&utm_medium=rss&utm_campaign=mysql-processlist-unter-linux-beobachten http://www.sebastianviereck.de/mysql-processlist-unter-linux-beobachten/#comments Tue, 27 Jun 2017 10:59:54 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3328-de Weiterlesen ]]> Wenn man die Process List von MySQL sich ständig aktualisiert anzeigen lassen will, kann man den watch Lionux Befehl auf der Console dafür benutzen. Login, Host und Passwort müssen ggf. geändert werden:

watch -n 1 "mysql -u root --password='myPassword' -h localhost -s -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE 1 = 1;'"
]]>
http://www.sebastianviereck.de/mysql-processlist-unter-linux-beobachten/feed/ 0
Jira Template für Request und Response für Backend http://www.sebastianviereck.de/jira-template-fuer-request-und-response-fuer-backend/?utm_source=rss&utm_medium=rss&utm_campaign=jira-template-fuer-request-und-response-fuer-backend http://www.sebastianviereck.de/jira-template-fuer-request-und-response-fuer-backend/#comments Tue, 27 Jun 2017 10:56:23 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3326-de Man kann in Jira mit diesem Template leicht eine wohlformnatierte Request / Response zaubern:

{panel:title=Request}
    {code:xml}
       myRequest here
    {code}
{panel}

{panel:title=Response}
    {code:xml}
      myResponse here
    {code}
{panel}
]]>
http://www.sebastianviereck.de/jira-template-fuer-request-und-response-fuer-backend/feed/ 0
PHP7 mit Ansible installieren http://www.sebastianviereck.de/php7-mit-ansible-installieren/?utm_source=rss&utm_medium=rss&utm_campaign=php7-mit-ansible-installieren http://www.sebastianviereck.de/php7-mit-ansible-installieren/#comments Tue, 27 Jun 2017 10:52:59 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3324-de Weiterlesen ]]> Mit Ansible kann man sehr einfach alle PHP7 von Ondrej’s Respository installieren mittels der Befehle:

- name: Remove old PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php-7.0' state=absent

- name: Add PHP7 ppa repository
  apt_repository: repo='ppa:ondrej/php'

- name: Install packages
  apt: pkg={{ item }} state=latest update_cache=yes
  with_items:
   - mysql-client
   - nginx
   - php7.0-cli
   - php7.0-fpm
   - php7.0-dev
   - php7.0-curl
   - php7.0-gd
   - php7.0-mbstring
   - php7.0-mcrypt
   - php7.0-mysql
   - php7.0-soap
   - php7.0-sqlite3
   - php7.0-xml
   - php7.0-zip
   - php7.0-bcmath
   - php7.0-ssh2
   - php-rrd
   - git
   - zlibc
  tags:
   - php
]]>
http://www.sebastianviereck.de/php7-mit-ansible-installieren/feed/ 0
Run PHPUnit Unit and Integrations test with different configurations in PHPStorm http://www.sebastianviereck.de/run-phpunit-unit-integrations-test-configurations-phpstorm/?utm_source=rss&utm_medium=rss&utm_campaign=run-phpunit-unit-integrations-test-configurations-phpstorm http://www.sebastianviereck.de/run-phpunit-unit-integrations-test-configurations-phpstorm/#comments Thu, 18 May 2017 09:29:02 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3291-de Weiterlesen ]]> If you want to develop unit and integration tests with PHPStorm you can easily bootstrap your application and run your tests. But if you want to develop real unit tests in your local development enviroment without having a database connection or a cache, you need to make sure, that your application is configured differently, when unit tests are running. In this article you will learn how to do that and how to make PHPStorm will automatically recognize which tests/tests suites you want to execute.

Requirement:

Your integration and unit tests are seperated in 2 directories, like:

/tests/unitTests
/tests/integrationsTests

Overview

There are 2 possibilities to configure PHPUnit to use different configurations:

First Option: Multiple phpunit.xml files

You can put 2 phpunit XML configuration files named integrationsTests.xml and unitTests.xml in your document root or in the folders /tests/unitTests or /tests/integrationsTests. The configurations files would look like this, with different bootstrap.php files, where you can load your configuration accodingly.

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="phpunit.xsd"
       bootstrap="/tests/unitTests/bootstrap.php">
   <testsuites>
      <testsuite name="unitTests">
         <directory>/tests/unitTests</directory>
      </testsuite>
   </testsuites>
</phpunit>

The probnlem with this approach is, that PHPStorm is not able to automatically load the correct configuration file when you want to execute only one test class from e.g. the unit tests. You can only set one default configuration for all unit tests (PHPStorm: Run -> Edit Configuration-> Defaults -> PHPUnit)

phpsotrm_phpunit_default

PHPStorm default PHPUnit configuration

So when you execute a test file by right clicking on the test file or on the the test code and choose “Run”, than the unit test configuration is always executed.

So this option is not working with PHPStorm.

Second Option: Using a PHPUnit_Framework_BaseTestListener

This works with a single phpunit.xml, like this one

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="phpunit.xsd"
       bootstrap="/tests/bootstrap.php">
   <testsuites>
      <testsuite name="unitTests">
         <directory>/tests/unitTests</directory>
      </testsuite>
      <testsuite name="integrationTests">
         <directory>/tests/integrationTests</directory>
      </testsuite>
   </testsuites>
   <listeners>
      <listener  class="TestListener" file="/tests/TestListener.php"></listener>
   </listeners>
</phpunit>

And TestListener like this:

<?php

class TestListener extends PHPUnit_Framework_BaseTestListener {

   const UNIT_TEST_DIR_NAME = 'unitTests';
   const INTEGRATION_TEST_DIR_NAME = 'integrationTests';
   /**
    * @var bool whether to the configuration was already loaded, performance optimization
    */
   private static $configurationLoaded = false;

   /**
    * startTestSuite
    *
    * @param PHPUnit_Framework_TestSuite $suite
    * @return void
    */
   public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {
      if(self::$configurationLoaded === false){
         //the suite is only set, when the whole suite is executed, not when a test of a suite is executed
         switch ($suite->getName()){
            case 'unitTests':{
               $this->loadUnitTestConfiguration();
               break;
            }
            case 'integrationTests':{
               $this->loadIntegrationTestConfiguration();
               break;
            }
            default:{
               $this->loadConfigurationByFilePath();
               break;
            }
         }
         self::$configurationLoaded = true;
      }
   }

   /**
    * loadConfigurationByFilePath 
    * 
    * @throws Exception
    * @return boolean
    */
   private function loadConfigurationByFilePath(){
      if($this->isTriggeredByIDE() && $this->isRunningOnCLI()){
         for($i = $_SERVER['argc']; $i > 0; $i--){
            $arg = strtolower($_SERVER['argv'][$i - 1]);
            if(stristr($arg, DIRECTORY_SEPARATOR . self::UNIT_TEST_DIR_NAME . DIRECTORY_SEPARATOR)){
               $this->loadUnitTestConfiguration();
               return true;
            }
            if(stristr($arg, DIRECTORY_SEPARATOR . self::INTEGRATION_TEST_DIR_NAME . DIRECTORY_SEPARATOR)){
               $this->loadIntegrationTestConfiguration();
               return true;
            }
         }
      }
   }

   /**
    * isTriggeredByIDE - looks for PHPStorm VAR
    *
    * @return boolean
    */
   private function isTriggeredByIDE(){
      return isset($_SERVER['IDE_PHPUNIT_PHPUNIT_PHAR']);
   }

   /**
    * isRunningOnCLI
    *
    * @return boolean
    */
   private function isRunningOnCLI(){
      return isset($_SERVER['argc']) && isset($_SERVER['argv']);
   }

   /**
    * loadUnitTestConfiguration
    *
    * @return void
    */
   private function loadUnitTestConfiguration(){
      //Stub, implement, if you like
   }

   /**
    * loadIntegrationTestConfiguration
    *
    * @return void
    */
   private function loadIntegrationTestConfiguration(){
      //Stub, implement, if you like
   }
}

This Listener is executed before every testsuite execution and can trigger a configuration to be loaded when a integration or a unit test is executed. With the help of this listener you can execute tests in PHPstorm with just on phpunit.xml file and have different unit test configurations.

You can use the /tests/bootstrap.php file to execute configrations which are the same and put different configurations in the methods loadUnitTestConfiguration and loadIntegrationTestConfiguration.

]]>
http://www.sebastianviereck.de/run-phpunit-unit-integrations-test-configurations-phpstorm/feed/ 0
Elasticsearch Subquery Scoring Optimization http://www.sebastianviereck.de/elasticsearch-subquery-scoring-optimization/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=elasticsearch-subquery-scoring-optimization http://www.sebastianviereck.de/elasticsearch-subquery-scoring-optimization/#comments Tue, 18 Apr 2017 21:56:16 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3317-de Weiterlesen ]]> If you want to build a search query in Easticsearch where you can give documents a bonus score depending on how often a property can be found in other documents

- you need is a Subquery which is not supported by Elasticsearch but can be programmed with any Programming Language such as PHP.

An Example for a Subquery is the problem:

Imagine a CD online shop. You want to score CDs ( = documents) higher which

1. match a term query AND

2. and which artist has many other CDs in your shop database

In this case you could use a subquery function like this:

/**
 * @see
 * @param string $index
 * @param string $type
 * @param string $query
 * @return array CDs
 */
public function popularArtistsSubquery($index, $type, $query){
    $response = $this->moreLikeThisQuerySearch($index, $type, $query);
    $response = json_decode($response);
    $hits = array();
    if($response->hits->total > 0){
        foreach($response->hits->hits as $hit){
            $responseMatch = $this->matchQuerySearch($index, $type,$hit->_source->artist);
            $responseMatch = json_decode($responseMatch);
            $artistCount = $responseMatch->hits->total;
            $hit->_score += $artistCount;
            $hit->artistCount = $artistCount;
            $hits[] = $hit;
        }
        usort($hits, function($a, $b)
        {
            return $a->_score < $b->_score;
        });
    }
    return $hits;
}
]]>
http://www.sebastianviereck.de/elasticsearch-subquery-scoring-optimization/feed/ 0
PDOException: You cannot serialize or unserialize PDO instances http://www.sebastianviereck.de/pdoexception-serialize-unserialize-pdo-instances/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pdoexception-serialize-unserialize-pdo-instances http://www.sebastianviereck.de/pdoexception-serialize-unserialize-pdo-instances/#comments Mon, 10 Apr 2017 14:12:20 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3283-de Weiterlesen ]]> Beim Mocken von Objekten mit PHPunit kann es zur Fehlermeldung:

PDOException: You cannot serialize or unserialize PDO instances

kommen, immer dann, wenn im Constructor eine PDO Instanz injeziert wird. Dies kann unterbunden werden durch:

class PDOMock extends PDO{
    public function __construct(){}
}
]]>
http://www.sebastianviereck.de/pdoexception-serialize-unserialize-pdo-instances/feed/ 0
PHPStorm .idea Ordner aus dem GIT entfernen aber lokal behalten http://www.sebastianviereck.de/phpstorm-idea-ordner-aus-dem-git-entfernen-aber-local-behalten/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phpstorm-idea-ordner-aus-dem-git-entfernen-aber-local-behalten http://www.sebastianviereck.de/phpstorm-idea-ordner-aus-dem-git-entfernen-aber-local-behalten/#comments Mon, 13 Mar 2017 09:49:19 +0000 Sebastian Viereck http://www.sebastianviereck.de/?p=3313-de Weiterlesen ]]> Wenn man ausversehen den .idea Ordner mit in seiner GIT Versionierung übernommen hat, ist es leider über die IDE PHPStorm nicht möglich, diese wieder zu entfernen.

Man kann aber einfach über die Konsole einen Befehl ausführen, der den Ordner aus dem GIT entfernt und lokal weiter behält (kein löschen der mühsam eingerichteten Einstellungen!).

git rm --cached -r -f  .idea/

Danach sollte in der .gitignore der Ordner eingetragen werden:

/.idea
]]>
http://www.sebastianviereck.de/phpstorm-idea-ordner-aus-dem-git-entfernen-aber-local-behalten/feed/ 0