DigitalOcean: Netzwerk in der Cloud

Mittlerweile gibt es jede Menge Cloud-Anbieter, bei denen man in kürzester Zeit komplexe Netzwerke in der Cloud aufsetzten kann. Die Verwendung reicht hier von der einfachen Installation einer virtuellen Maschine um z.B. Anwendungen zu testen bis hin zu so genannten „High Availability“ Systemen, die aufgrund der schnellen Skalierung in der Cloud von hohem Nutzen sein könne.

Die beliebtesten oder bekanntesten Anbieter bleiben wohl auch hier Amazon mit AWS, Microsoft mit Azure und Google mit ihrer Cloud Platform. Doch auch Anbieter wie 1&1 oder Strato bieten mittlerweile Cloud-Dienste an, um die ständig steigende Nachfrage zu decken.

Die Erfahrung macht es aus

Im Laufe der letzten Jahre habe ich mir immer wieder verschiedene Dienste angesehen und ausprobiert. Nach meiner Erfahrung kann ich sagen, dass es „die perfekte Lösung“ nicht gibt. Die Entscheidung welchen Anbieter oder Dienst man letzten Endes verwenden möchte hängt stark an der Anwendung, dem Budget sowie dem Unternehmen oder Entwickler, der sich damit auseinander setzen muss.

In diesem Beitrag möchte ich aber auf DigitalOcean eingehen. Im Vergleich so Amazon AWS ist DigitalOcean ein noch sehr junges Unternehmen. Richtig in Fahrt ist es erst im Jahr 2013 geworden. Mittlerweile wird es aufgrund der leicht zu implementierenden Deployment API in vielen Projekten verwenden (z.B. Laravel Forge). Das ist auch einer meiner Gründe, warum ich ein absoluter Fan davon bin.

Was man alles machen kann

Die grundsätzliche Funktionalität besteht darin, virtuelle Linux Server zu installieren. Dazu gibt es verschiedene Distributionen zur Auswahl sowie diverse Images mit vorinstallieren Anwendungen wie MongoDB, WordPress, Docker oder LEMP. Zusätzlich hat man noch die Möglichkeit, Netzwerke innerhalb eines Rechenzentrums einzurichten, Backups zu konfigurieren oder zusätzliche IPs zu ergänzen.

Ein weiterer Vorteil ist, das DigitalOcean eine wahnsinnig große Community mit sehr erfahrenen Experten besitzt. Hier gibt es zahlreiche Tutorials die man sich durchlesen kann umso Szenarien für die eigene Verwendung zu nutzen. Da man mit DigitalOcean doch sehr viel machen kann, werde ich  die einzelnen Bereiche in den nächsten Ausgaben beschreiben.

Neue Version vom URL-Shortener

Endlich ist es soweit! Die neue Webseite ist jetzt live.

ux9-relaunch
Die UX9-Webseite

Ich habe heute die neue Webseite von http://ux9.de veröffentlicht.

Der URL-Shortener strahlt nun in einem neuen Licht. Ein modernes Design und neue Funktionen sollen die Seite nun für noch mehr Leute interessant machen. Außerdem haben wir die Werbung für die meisten Links nun komplett abgeschalten. Bei veralteten Chrome und FireFox Plug-Ins, wird diese jedoch immer noch mit angezeigt.

Ausblick 2016

Zum Ende des Jahres werde ich ein weiteres Release veröffentlichen. Dann soll UX9 vollständig fertiggestellt sein. Die aktuellen Entwickler-Tools sind nur für einen kleinen Kreis zugänglich. Wenn ihr auch einen Zugang möchtet, dann könnt ihr euch einfach bei mir melden, oder euch für den Newsletter auf http://ux9.de anmelden.

Ihr könnt eure Ideen, für Erweiterungen, weiterhin über Twitter, GitHub oder mir per Mail mitteilen. Ich werde mir garantiert alle durchlesen und euch eine grobe Einteilung in ein Release mitteilen.

PHP Stories: Letztes Array Element

Heute zeige ich euch, wie man mit einem kleinen Trick das letzte Element eines Arrays herausfindet.
Dabei finde ich diese Vorgehensweise besser gelöst als mit einem count().

Hier nun das Beispiel:

<?php // lastArrayExample.php
$array = array('Toby', 'John', 'Leo', 'John');

// Pointer an das Ende des Arrays setzten
end($array);

// Den Key des Elements holen
$lastKey = key($array);

foreach($array as $k => $v) {
    if($k == $lastKey) {
         echo $v . ' ist der letzte!';
    } else
	echo $v . '<br />';
}
// Ausgabe: Toby<br />John<br />Leo<br />John ist der letzte!

 

Private Packages mit Composer

Wer bereits in größeren PHP-Projekten entwickelt hat weiß, dass man um eine Paketverwaltung nicht drum herum kommt. Üblicherweise ist dies Composer. Mit Composer hat man Zugriff auf tausende Packages die vor allem in Packagist zu finden sind.

Doch manchmal kann man keine öffentlichen Pakete verwenden oder möchte explizit nur seine eigenen, privaten Pakete verwenden. Hier hat man mit Composer auch viele Möglichkeiten. Ich beschreibe hier aber in der Schnelle eine Lösung, wie es mit Bitbucket möglich wird.

Um die Pakete von Bitbucket, bzw. einem Repository anzuziehen, müssen ein paar Anpassungen an den composer.json-Dateien vorgenommen werden.

Im Hauptprojekt muss in der composer.json folgendes eingetragen werden:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://bitbucket.org/accountname/reponame.git"
    }
  ],
  "require": {
    "accountname/reponame": "dev-master"
  }
}

Im eigentlichen Package sieht die composer.json dann wie folgt aus:

{
  "name": "accountname/reponame",
  "version": "master",
  "dist": {
    "url": "[email protected]:accountname/reponame.git",
    "type": "vcs"
  }
}

PHP Stories: Extract()

Einstieg in PHP Stories

Ich möchte heute mit einer neuen Serie Beginnen. Ich nenne sie „PHP Stories“.
Ich werde in regelmäßigen Abständen einen kleinen Beitrag erstellen, in dem ich eine PHP Funktionalität erklären werde und dessen Vorteile nennen werde.

Heute beginne ich mit der „extract“ Funktion.

Extract()

Manchmal kann es vorkommen, dass du in deinem Projekt mehrere Variablen einer Funktion oder Methode übergeben musst, bei dem jeder Parameter mit seinem Namen zu identifizieren ist.
Eine Möglichkeit wäre die Funktion „func_get_args()„, doch in diesem Fall würde man den Namen des Parameters nicht bekommen, sondern lediglich den Index. Zum Beispiel: $args[0], $args[1]…
Mit „extract()“ bekommst du jedoch alle Parameter mit Ihrem „richtigen“ Namen. Sogar die Reihenfolge spielt hierbei keine Rolle.

Hier mal ein Beispiel:

<?php // example.php
function personInfo(array $info = [])
{
	extract($info);
	echo "Mein Name ist $name und ich bin $age alt. Ich arbeite als $job.";
}

personInfo([
	'name'	=> 'Tobias Maxham',
	'age'	=> 25,
	'job'	=> 'Software Engineer',
	'hobby'	=> 'Schwimmen',
]);
// Ausgabe => Mein Name ist Tobias Maxham und ich bin 25 alt. Ich arbeite als Software Engineer.

Dies wird vor allem in großen Frameworks verwendet, wenn viele Daten z.B. von einem Controller an eine View übertragen werden müssen.

In der nächsten Ausgabe werde ich die Funktion „compact()“ erklären, die genau das Gegenteil macht.