hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Die REST Webservice Architur – ein Überblick mit PHP

Wenn man heutzutage einen Webservice bauen will, kommt man um REST nicht mehr herum. Als quasi Standard erfüllt es die Bedürfnisse an eine moderne Schnittstelle am besten, im Gegensatz zu den Alternativen aus der grauen Vergangenheit: RPC, DCOM, CORBA, RMI und SOAP.

Warum REST einsetzen?

1. Lose Kopplung

REST Schnittstellen können theoretisch gegeneinander ausgetauscht werden.

2. Interoperabilität

REST über HTTP ist in jeder Umgebung verfügbar und sehr einfach anzusprechen im Gegensatz zu den komplizierteren Ansätzen wie SOAP und CORBA.

3. Performance und Skalierbarkeit

Durch die Zustandslosigkeit können viele Anfragen aus dem Cache beantwortet werden und aufeinander folgende Anfragen müssen nicht von demselben System beantwortet werden (Skalierbarkeit)

Grundprinzipien von REST weiterlesen…

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

MS Excel: Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden

Die Fehlermeldung “Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden” hatte ich heute, sie war an einer Stelle, an der eine Variable nicht vorher mit Dim initialisiert worden waren. Dort stoppte die Ausführung bei meinem Excel für MAC mit der Fehlermeldung:

Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden

Die Ursache war tatsächlich, dass eine Windows Bibliothek nicht verfügbar war, nachdem der Verweis entfernt worden war, ging alles wieder.

Visualb Basic Editor -> Extras -> Verweise

dort das Häckchen entfernen mit dem “NICHT VORHANDEN”:

Bildschirmfoto 2017-09-18 um 14.47.13

 

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Projekt: Elasticsearch für XT-Commerce Shop Suche

Das letzte Projekt war sehr spannend, es handelte sich um eine Erweiterung des PHP Shop-Systems namens XT-Commerce bzw. des Derivats SEO-Commerce um eine Suche aktuellem Standards für Zeedee Berlin.

Elasticsearch wurde auf einer eigene Amatzon MWS EC2 Instanz gehostet mit 1GB Ram und 1 CPU (sehr kostengünstig).

Die folgende Funktionalität kann ganz einfach wieder deaktiviert werden an zentraler Stelle, wenn es Probleme mit Elasticsearch gibt und die alte MySQL Suche tritt wieder in Kraft.

1. Autocomplete / Suggest Funktion beim Befüllen der Suche

Beim Eintippen des Suchwortes werden schon Vorschläge gegeben im Millisekundenbereich. Dadurch kann der Kunde viel Zeit sparen und bei der Rechtschreibung wird auch geholfen. suggest_zeedee

weiterlesen…

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Raspberry Pi SD card holder broken – 10 seconds fast repair

 

IMG_5496

The problem: the sd card holder stopped working

When your Raspberry Pi 2 is does not hold the integrated sd-card anymore, than your one of many people who face the same problem.

I have found an easy way to repair the sd card holder without fire and iron and explosions:

You can use an elastci strap and you will only loose 2 of your 4 USB-slots with this method.

 

A small and strong elastic strap can hold the sd cartd in the sd card slot and fixes the problem easily and smooth.

IMG_5497

an elstic strap helps to hold the sd card in the slot

 

The Result

Your Raspberry Pi works again without any problems.

IMG_5495

you will loose 2 usb slots but 2 other ones are waiting for you

IMG_5494

works like a charme

Alternative repair

If you want to repair your sd-card slot like a pro, you should watch this youtube video:

Last alternative

Buy a new Raspberry 3 model:

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Elasticsearch 5 Cluster mit Docker Beispiel

Mit der docker-compose.yml kann man sich schnell eine Container-basierte Umgebung mit Docker bauen. Anpassbar sind die Memory-Werte für die Java-VM (512MB) und für das Docker Image (1GB).

Um einen Cluster mit 2 Nodes zu betreiben, kann man die elasticsearch2 auskommentieren.

version: '2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
#  elasticsearch2:
#    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.1
#    environment:
#      - cluster.name=docker-cluster
#      - bootstrap.memory_lock=true
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
#    ulimits:
#      memlock:
#        soft: -1
#        hard: -1
#    mem_limit: 1g
#    volumes:
#      - esdata2:/usr/share/elasticsearch/data
#    networks:
#      - esnet

volumes:
  esdata1:
    driver: local
#  esdata2:
#    driver: local

networks:
  esnet:
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Elasticsearch Server außerhalb von localhost verfübar machen

Um eine Elasticsearch Instanz nach außen über HTTP verfübar zu machen, muss man folgendes tun:

1. Den Server nach außen verfübar machen, bei Amazon AWS z.B. durch das konfigurieren einer Security Group

2. Die elasticsearch.yml ändern ( /etc/elasticsearch/elasticsearch.yml):

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 172.44.11.222

3. Den Elasticsearch Service neustarten:

sudo service elasticsearch restart

4. Danach kann man den Status abfragen von außen um zu schauen, ob alles funktioniert hat:

curl -XGET '172.44.11.222:9200/_cluster/health?pretty'

Response:

{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Amazon automatische Preisanpassung Tool

Für einen Kunden habe ich gerade ein Tool entwickelt, mit dem man die Preise der eigenen Waren bei Amazon automatisch anpassen kann.Dabei werden die Angote der Konkurrenz analysiert nach Zustand der Ware und nach Seller Seriösität und dadurch ein fairer Preis bestimmt für die Ware. Es werden alle Daten, die über die API verfügbar sind für die Preisbestimmung mit herangezogen, wie z.B. Seller Feedback (Bewertungen des Händlers), ob Amazon selber verschickt, Versanddauer und vieles mehr.

Das Tool vergleicht optional die Preise zwischen den verschiedenen Amazon Plattformen in Europa (DE, UK, IT, ES, FR) aber auch Plattformen außerhalb Europas, wie Japan oder Amerika und händelt die unterschiedlichen Währungen.

Das Ergebnis kann direkt zu Amazon mittels der API geschickt werden und die Preise werden sofort geupdatet.

Amazon Preisanpassung

Screenshot Preisanpassungs Tool

 

Die Anwendung ist in PHP mit Symfony 3 geschrieben und hat ein Frontend mit Twitter Bootstrap 3 und eine MySQL Datenbank. Außerdem gibt es eine Vagrant Umgebung für die Entwicklung mit PHP7.1 und nginx. Ausgeführt werden kann das ganze mit einer einfachen Xampp Umgebung oder Vagrant Virtual Box beim Kunden lokal auf einem PC.

Falls sie auch Interesse an einem solchen Tool haben, könnne sie gern Kontakt aufnehmen.

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Amazon MWS PHP: Compile Error: Redefinition of parameter $quotaMax

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.

 

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...