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

Run PHPUnit Unit and Integrations test with different configurations in PHPStorm

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 weiterlesen…

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

NAS / externe Festplatte selbst retten und reparieren

Wenn einem mal wieder die Festplatte ohne Backup abgeschmiert ist oder das NAS einfach nicht mehr die Verbindung aufnehmen will zum eigenen Rechner, interessiert man sich für die Datenrettung von Festplatten.

Mit ein paar einfachen Schritten und Gadgets lässt sich das schnell von zu Hause aus machen.

1. Schritt: Externe Festplatte entkernen, NAS zerlegen

Dabei geht es genauso brutal zu, wie es sich anhört: Die modernen Verpackungen sind schwer zu knacken. Die Bergung der Festplatte aus dem Gehäuse ist oftmals schwieriger als gedacht, aber mit ein wenig Gewalt und Köpfchen möglch. Am wichtigsten ist, das Verstecke der kleinen Mini-Schraube zu finden, die hinter einem Aufkleber in der hintersten Ecke des Gehäuses zufällig platziert wurde, damit man sein Gerät auf jeden Fall nie wieder zusammen bauen kann.

Wenn man fertig ist mit seinem NAS sieht das in etwa so aus:

IMG_4954

Mein stark beschädigtes und garantiert nie mehr funktionsfähiges NAS, oben links ist die ausgebaute Festplatte zu sehen, die im nächsten Schritt ausgelesen wird. 3 Jahre hat es gehalten das Miststück, danke Samsung für den Müll

2. Schritt: Auslesen der Festplatte mit dem Kloner weiterlesen…

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

PHP Wie verwendet man password_verify, password_hash und password_needs_rehash richtig

Mit der ab PHP 5.5. eingeführten Passwort-Hash Funktionalität kann man das Problem umgehen, dass ständig neue Hash Funktionen benutzen werden müssen, weil die alte zu leicht knackbar ist.

Bei bestehenden Projekten steht man dann an dem Punkt, wo man bestehenden Hashes in der Datenbank hat und diese nicht einfach neu hashen kann, weil man den Klartext nicht kennt. Diese Funktionalität wird einem durch die neue password_verify Funktion abgenommen.

So könnte ein neues Login-Funktion aussehen, welches dieses Problem umgeht. Beim Anheben der Hash-Sicherheit (Zeitdauer zum Berechnen des Hashes) kann man den Wert $currentHashOption['cost'] erhöhen

$username = '%MINIFYHTML97f910554830b120330702998408e06f6%';
$password = 'xxxxxx';

$user = User::findByName($username);

if(password_verify($password, $user->password_hash) === false){
 throw new Exception('Invalid Login');
}
$currentHashAlgorithm = PASSWORD_DEFAULT;
$currentHashOption = ['cost' => 15];

$passwordsNeedsRehash = password_needs_rehash(
 $user->password_hash,
 $algorithm = $currentHashAlgorithm,
 $currentHashOption
);
if($passwordsNeedsRehash === true){
 $user->password_hash = password_hash($password, $currentHashAlgorithm, $currentHashOption);
 $user->save();
}
hard mistakes - please write a commentsome mistakesokgoodvery good 3,00 of 500 (1 Users)
Loading ... Loading ...

Analyse von sehr großen gzip/bzip2 gepackten Log-Dateien per Stream

Man kann per Stream in PHP beim verarbeiten der Daten sehr große Log-Dateien, die mehrere GB groß sind, sehr leicht analysieren mit Hilfe von Stream Compression Filter.

Damit kann die Datei ohne sie komplett in den Speicher laden zu müssen entpackt und analysiert werden beim Einlesen der Datei.

Dadurch kann man während des einlesens der Log-Datei schon nach beliebigen Stellen im Code suchen:

$file = 'X:/file.log.bz2';
$searchString = '2017-01-01';

if(file_exists($file)){
   $handle = fopen($file, 'r');
   stream_filter_append($handle, 'bzip2.decompress');
   while(!feof($handle)){
      $line = fgets($handle);
      if(strpos($line, $searchString) !== false){
         echo $line;
      }
   }
   fclose($handle);
}
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Warum man Software Projekte nicht bei Agenturen entwicklen lassen sollte

Agenturen beschäftigen meist Freelancer, die für die Entwicklung einegstellt werden, sollten kommen ausschließlich eigene Programmierer zum Einsatz. Der Fokus liegt dabei auf einer schnellen und kostengünstigen Programmierung des Projektes. Dies äußert sich in einer schlechten Code Qualität, d.h. praktisch, wenn ein anderer Programmierer später etwas ändern soll, dann dauert das Ewigkeiten, da der Code so schlecht ist, dass man nicht durchsieht. Guter Code ist vor allem gut lesbar und verständlich, wozu es erfahrene Programmierer benötigt, denen auch Zeit dafür eingeräumt wird guten Code zu schreiben.

Bei Agenturen wird der Programmierer nicht angehalten guten Code zu schreiben und oft entscheiden man sich als Freelancer nur “im Ausnahmefall” bei einer Agentur zu arbeiten, weil dies meist mit vielen Überstunden, Zeitdruck und schlechter Bezahlung einher geht. Deswegen landen nicht die guten Programmierer bei Agenturen, sondern eher die schwarzen Schafe.

Meine Empfehlung ist, nicht auf eine Agentur zu setzen bei der Entwicklung von Software, sondern lieber auf einen oder mehrer gute Freelancer, der das Projekt gewissenhaft und in direkter Kommunikation umsetzt.

Beim Vergleich von Angeboten von verschiedenen Freelancern sollte nicht nur auf den Preis, sondern auch auf die Erfahrung des Programmierers und Qualität der dadurch entstehenden Software ein Augenmerk gelegt werden.

Meine Gedanken darüber habe ich aus meinen und den Erfahrungen von anderen Freelancern über die Jahre in Berlin gesammelt.

hard mistakes - please write a commentsome mistakesokgoodvery good 1,00 of 500 (1 Users)
Loading ... Loading ...

Verabreiten großer Dateien in PHP mittels Generator

Um große Datenmengen mit PHP zu verarbeiten benötigt man viel Memory Speicher, weil große Mengen Daten geladen und dann verarbeitet werden. Eine speichersparende Alternative bieten Generatoren ab PHP 5.5., die mit dem yield Befehl durch große Datenmengen iterieren können und nur Speicherplatz für einen Datensatz belegen.

Beispiel: Verarbeiten einer großen CSV Datei mittels Generators:

<?php
class CsvFile {

    protected $file;

    public function __construct($file) {
        $this->file = fopen($file, 'r');
    }

    public function parse() {
        while (!feof($this->file)) {
            yield fgetcsv($this->file);
        }
        return;
    }
}

$csv = new CsvFile('/pathTo/file.csv');
foreach ($csv->parse() as $row) {
    echo $row;
}
hard mistakes - please write a commentsome mistakesokgoodvery good 1,00 of 500 (1 Users)
Loading ... Loading ...

Vergleich: Bücher verkaufen bei Momox und Rebuy

Ich habe heute alles ausgemistet und meine seit Jahren nicht mehr angefassten programmierbücher versucht zu verkaufen bei momox.de und rebuy.de.

Dazu habe ich mir die App des jeweiligen Anbieters heruntergeladen und meine Bücher eingescannt. Man erhält sofort einen Preis und kann entscheiden, ob man das Buch/CD/DVD verkaufen will. Wenn man mindestens 10€ zusammen hat, kann man den Verkauf abschließen und bekommt kostenlos einen Packetgutschein für Post oder DHL und schickt dann sein Packet an den Anbieter. Der schaut sich die Artikel an und den Zustand und überweist dann das Geld.

Vorteil von momox

Die App ist besser, der Barcodescanner genauer zu händeln und übersichtlicher/intuitiver zu bedienen.

Über die App kann man auch DHL Versand auswählen (rebuy hat zwar auch DHL im Angebot, aber die App bietet nur Hermes an).

Man erhält 5€ mit dem Rabatcoupon (bei mir war es momox16 oder bald momox17, mal schauen).

Momox nervt einen auch weniger mit Marketing für den Verkauf von ihren Artikeln.

Rebuy überweist das Geld nicht direkt auf das Konto, sondern schreibt einem erstmal ein “Guthaben” in Ihrem Shop gut, damit man dort einkaufen geht. Um das Geld auf das Konto zu bekommen muss man noch extra tätig werden.

Vorteile von rebuy

Man muss weniger Daten eintippen auf der App, ich musste allerdings nicht mal initial meine Bankdaten eingeben, was ich komisch finde, aber mal sehen.

Zwischenstand

Jetzt gerade sind beide Pakete auf dem Weg mit der DHL zu den Anbietern, ich hoffe es verläuft alles reibungslos.

Ich fand es ganz interessant, bei beiden zu verkaufen, weil der eine oft mehr zahlt als der andere, man kann so gut die Preise vergleichen und sich den besten raussuchen.

Ergebnis

Sowohl Rebuy und Momox haben mir nach nur einer Woche das volle Geld überwiesen ohne Probleme mit der Ware.

Deswegen lautet meine Empfehlung: Momox

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

MySQL Monitoriong der ProcessList / Queries mit einem Konsolen Befehl

Ein hilreicher Befehl für die problem-Analyse von MySQL Servern ist sich die ProcessList anzuschauen, um zu sehen, welche Quueries aktuell ausgeführt werden. Wenn man dies kombiniert mit dem watch Befehl und diesen 1 mal pro Sekunde neuladen lässt und auf die Queries reduziert, hat man eine guter Übersicht, was auf dem MySQL Server los ist und welche Queries problematisch seien könnten:

watch -n 1 "mysql -u root --password='XXX' -h localhost -s -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE Command=\"Query\";'"

Wichtig ist, den Befehl als root laufen zu lassen, um auch alle Queries zu sehen.

Mit Hilfe des Parameter -n kann man die Aktualisierungrate in Sekunden angeben.

Das MySQL root-Passwort ist zu ergänzen.

 

Ausgabe:

5361925476      user     localhost       NULL    Query   0       executing       SELECT * FROM xxx WHERE yyy

5361925477      user     localhost       NULL    Query   0       executing       UPDATE zzz WHERE zzz
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

WordPress Posts mit Links autoamtisch als Spam markieren

Damit man von dn ganzen Spam Bots nicht genervt wird, deren Zie es immer ist einen Kommentar mit einem oder mehreren Links auf ener Webseite zu platzieren, habe ich ein kurzes Skript geschrieben, was in die function.php eingefügt werden muss. Das Skript markiert alle Kommentare als Spam, die einen Link enthalten.

add_action( 'comment_post', 'show_message_function', 10, 2 );
function show_message_function( $comment_ID, $comment_approved ) {
   $comment = get_comment( $comment_ID);
   if(!empty($comment)){
      $content = $comment->comment_content;
      if(!empty($content)){
         $content = strtolower($content);
         $hasLink = strpos($content, 'http') !== false || strpos($content, 'www.') !== false || strpos($content, 'href') !== false;
         if($hasLink){
            //when has link, set to spam
            $commentarr = array();
            $commentarr['comment_ID'] = $comment_ID;
            $commentarr['comment_approved'] = 'spam';
            wp_update_comment( $commentarr );
         }
      }

   }

}