Blog: Latest Entries (15):


Shopware-Plugin: XML Automatic Order-Export 0.3.1

Es hat doch ein paar Tage länger gedauert, als gedacht und ich habe am Ende doch mehr geändert als ich zu Anfang wollte, aber ich habe bei dem Plugin jetzt ein besseres Gefühl als vorher. Es ist moderner und flexibler als die alte Version. Änderungen gehen auch viel schneller.

An openTRANS 1.0 hat sich garnichts geändert und wird wohl demnächst mal auf XSLT umgestellt. Bei openTRANS 2.1 hat sich mehr geändert. Zuvor fehlende Felder sind hinzu gekommen. Datum und Zeit der Bestellung ist nun getrennt vom Datum der Erzeugung des Dokuments.

Und das Wichtigste, was hinzu kam, ist, dass nun auch Updates auf Bestellungen exportiert werden. Der UDX.EDI-Block enthält dann die Information, ob es sich um ein CREATE UPDATE handelt. Wer den Export in eine Datei schreibt oder den Push-Client verwendet bekommt jetzt diese Informationen geliefert. Dateien haben nun einen Timestamp im Namen, so dass alle Änderungen linear exportiert werden können.

Wer eine alte Version verwendet sollte nicht einfach updaten, sondern erst einmal ausgiebig Testen!

bbcode-image


Wie schon gesagt, habe ich bei dem Plugin jetzt ein wirklich gutes Gefühl.

Version 0.3.1 sollte demnächst im Store verfügbar sein.


Datenschutz DSGVO Cookie-Overlay V.2

Mit der Version kann man nun auch Optout-Links erstellen, um eine Entscheidung zurück zu nehmen ohne den Browser-Storage leeren zu müssen (was ein normaler Besucher sicher nicht alleine hinbekommt).


<a href="#" cookie-optout-link>Doch keine Cookies!</a>



<div id="cookiequestion">
<style type="text/css">
#cookiequestion{
position: fixed;
text-align: center;
font-weight: bold;
left: 0;
bottom: 0;
border: 2px solid #BBB;
background-color: #DDD;
padding: 10px;
border-radius: 5px;
width: 100%;
}
</style>
<script type="text/javascript">
function cookieclose(val){
var storage = window.localStorage;
if(val && val > 0){
storage.setItem("cookiequestion_val", val);
}
else {
val = storage.getItem("cookiequestion_val");
}

if(val && val > 0){
document.getElementById("cookiequestion").style.display="none";

if(val > 1) {
var event = new Event('cookiequestion_clicked', {value: val, overlay: document.getElementById("cookiequestion")});
document.dispatchEvent(event);
//or do other things here
}
}

//create optional optout-links
var elements = document.querySelectorAll("[cookie-optout-link]");
var func = function(){
return function(){
cookieclose(1);
};
};
for(var i=0; i < elements.length; i++){
elements.addEventListener("click", func());
}
};

cookieclose(0);
</script>
<p>
Erlauben von Tracking/Cookies?
</p>
<p>
<button onclick="cookieclose(2);">ja</button>
<button onclick="cookieclose(1);">nein</button>
</p>
</div>

Von Underscore zu CamelCase

Manchmal muss man aus Datenbank Spaltennamen Getter und Setter Methodennamen generieren. Ein RegEx mal Callback-Function ist nicht immer die schnellste Lösung. Manchmal sind gute alte String-Functionen doch noch die Beste Lösung.


function convertToCamelCase($text){
$result = '';
$nextUp = false;
for($i = 0; $i < strlen($text); $i++){
$char = substr($text, $i, 1);
if($char == '_'){
$nextUp = true;
}
else if ($nextUp){
$result .= strtoupper($char);
}
else{
$result .= strtolower($char);
}
}
return $result;
}

Mehr B2B, Projekte und Stillstände

Ich wollte ja das Order-Export in Richtung XSLT bearbeiten... nun wird alle sehr vollständige Überarbeitung daraus. Besseres Export verhalten nach Änderungen an Bestellungen.. auf über das Backend. Insgesamt soll alles etwas flexibler werden und für mehr B2B-Anwendungsfälle passend gemacht werden.

bbcode-image


Andere Projekte gehen auch nicht so wirklich weiter. Das Cashless-Paymentsystem ist erst einmal auf HOLD. Ich habe zwar schon fertige Pläne, um es auch als ganz normale Kasse (mit Barcode-Scanner) nutzen zu können und auch die Bons dokumenten-echt als signierte PDF parallel zum Druck speichern zu können.
Auch wollte ich mal eine wirkliche Präsentation (vielleicht mit Video) dafür basteln. Am Ende könnte ich mit wenig Zeit noch ein gutes und fertiges Produkt daraus machen. Leider fehlt die Zeit oder das Geld um bei der Zeit das Projekt neu zu priorisieren.

Aber erst einmal steht auch wieder Bremen am 30.6. an. Diesmal bewaffnet mit unter anderen 2 ThinkPad T500 für echt wenig Geld (Die sind für mich da auch Verbrauchsmaterial.. bei höheren Stückzahlen einfach mal wegen dem Preis direkt anfragen. Auch wegen den passenden Akkus und WLAN-Karten dazu).

Im Hintergrund bei der Artikelseite läuft mein "Eigenschaften im Listing" Plugin als Dataprovider ohne eigene Ausgabe.

Shopware-Plugin: Automatischer Order XML Export

Bis jetzt konnte das Plugin neben dem Shopware-Model als XML auch openTRANS 1.0 und 2.1 exportieren. Das war aber rein in PHP implementiert. Zusätzlich konnte man eigene XML-Formate über XSLT ausgeben.
Nun werde ich nach und nach den PHP Anteil reduzieren und auch openTRANS in XSLT implementieren. Erste Schritte sind getan.

Ich rechne damit dass ich so in 2 Wochen, dann alles so weit auf XSLT migriert haben werde.

bbcode-image

Für Anfänger: Eine Festplatte einbauen

Irgendwann kommt jeder zu dem Punkt wo die Festplatte gegen voll tendiert. Dann bekommt man Nachtrichten: "Hilfe, bei C sind nur noch 11% frei!!!!". Erstens ist das vollkommen OK. Leerer Festplattenspeicher nutzt niemanden was. Man sollte immer einen Puffer für temporäre Dateien haben, aber wenn die Festplatte wirklich zu 100% gefüllt sein sollte, wird das System weiterhin noch funktionieren. Also kein Grund zur Panik.
Man hat aber eben viele Daten, Spiele, Fotos, Videos und so was alles, was nicht zwingend auf C: liegen muss und selbst die Verzeichnisse des Benutzerprofils kann man auf andere Laufwerke auslagern. Wenn man viele Sims, Dragon Age oder andere Mods in "Dokumente" liegen hat, kann man den Dokumente-Order auf eine andere Festplatte verschieben. Wenn C: eine SSD ist, kommt man schnell in die Situation, dass man Daten gerne auf einem anderen Laufwerk speichern möchte, um die SSD zu schonen und dort Programme und Spiele zu haben, wo man die Geschwindigkeit einer SSD auch merklich spürt.

bbcode-image
Mein PC als Beispiel-PC


Ich erkläre hier wie man ganz einfach eine zusätzliche HDD (es ist das selbe Vorgehen bei einer SSD) in seinen PC einbaut und auch was man bei den Anschlüssen und Kabeln achten muss. Ich benutze dabei meinen PC (ein einfacher Standard-PC mit 2x 6C L5639 Xeon CPUs, 16GB RAM, 1x 240GB SSD, 1x 1TB HDD, usw) und eine refurbished 2TB SAS HDD.

An sich ist das alles ganz einfach. Früher musste man im BIOS noch die Festplatten einstellen oder erkennen lassen, aber das ist heute alles nicht mehr nötig. Es gibt grundlegend zwei Bauformen für Festplatten:

- 3,5 Zoll
- 2,5 Zoll

moderne Gehäuse bieten Slots für beide Bauformen oder es liegen Adapter bei. Zur Not kann man sich auch einen Adapter für wenige Euro bei Amazon kaufen. Ich hab hier eine 3,5 Zoll HDD an der ich den Einbau zeigen werde.

Neben der Bauform gibt es auch zwei verschiedene Arten von Anschlüssen (SSDs kennen noch U.2 und M.2 die komplett anders arbeiten):

- SATA (der Nachfolger von IDE)
- SAS (der Nachfolger von SCSI)

Der Vorteil von SAS Anschlüssen ist, dass man dort auch SATA-Festplatten anschließen kann. SAS an SATA geht nicht. Der Nachteil von SAS ist, dass man speziellere Kabel oder Adapter braucht, weil der Anschluss der SAS Festplatte für das einfache Einstecken über Rahmen in die Front von Servern optimiert wurde. Bei normalen PCs braucht man zumeist so einen Adapter, um die Festplatte per SATA-Kabel anschließen zu
können.

bbcode-image
SATA

bbcode-image
SAS

bbcode-image
Der benötigte SAS-Adapter


Oft sehen die SATA- und SAS-Anschlüsse komplett gleich aus und haben nur unterschiedliche Farben. Da hilft nur die Beschriftung auf dem Mainboard. Viele Boards haben aber nur SATA-Anschlüsse. Ob man überhaupt SAS-Anschlüsse hat verrät einen ein Blick in den Gerätemanager von Windows.

bbcode-image


Wenn dort ein SAS-Hostadapter aufgeführt ist hat man welche sonst muss man sich keine Gedanken machen, kann aber auch nur SATA-Festplatten verbauen.

Ich bin günstig an eine SAS-Festplatte gekommen und habe mir einen entsprechenden Adapter gekauft. Nun kommt der schwierigste Teil für den man viel Geduld und oft auch etwas mehr Zeit braucht. Das SATA-Kabel durch den Wulst vorhandener Kabel und dem Festplattenkäfig, der sowie so immer dabei im Weg ist, egal welches Gehäuse man hat, in den Anschluss des Mainboard zu stecken. Ruhig bleiben und eine zusätzliche Lichtquelle helfen hier weiter.
Festplatten kann man meist mit Hilfe eines Rahmens oder Schienen direkt in den Slot stecken und braucht keine Schrauben mehr.

bbcode-image


SATA-Kabel an den Adapter. Dann das Stromkabel ranstecken und den Adapter an die Festplatte stecken. Fertig!

bbcode-image
die neue 2TB HDD über der alten 1TB HDD


Nun den PC einschalten und Windows starten. Entweder wird die Festplatte schon angezeigt oder man muss über die Datenträgerverwaltung noch ein Volume einrichten (einfaches Volumen.. RAIDs sind komplizierter...).

bbcode-image


Nun ist die Festplatte da und man dann anfangen Daten zu kopieren.

bbcode-image


Die Daten von der alten Festplatte sollte man immer noch etwas dort behalten, falls die Festplatte doch Zicken machen sollte, dann muss man nicht aufwendig das Backup raus suchen, sondern hat die Daten direkt noch. Ich geh immer davon aus, dass wenn eine Komponente 2 Wochen fehlerfrei lief, dass man erst einmal davon ausgehen kann, dass kein Hardware-Defekt vorliegen kann und wenn dann was kaputt geht, es nicht vorhersagbar war.

Shopware-Plugin: Registrierung blockieren

Nach längerer Zeit habe ich auch mal wieder etwas Arbeit in mein B2B Registrierung-Blockieren Plugin gesteckt. Nun ist das Styling und das Layout nicht mehr ganz so hässlich. Man kann etwas mehr einstellen (nur die Form aus einer Liste auswählen macht im Backend echt viel Ärger.. ich habe es nach hinten verschoben).

bbcode-image


Update auf Version 2.5 erfolgt in den nächsten Tagen.

Falls auch mal jemand mit Emails testen muss und keinen Email-Server zur Verfügung hat, kann hiermit echt gut arbeiten:
https://community.shopware.com/Mailer-Mailversand-als-File_detail_1442.html

Remote Debugging in der VM

Es klingt sehr viel komplizierter als es man Ende ist. Das Wichtigste ist es erst einmal XDebug auf der VM zu installieren. Ich habe da PHP7.1 und es erklärt sich an sich von selbst:


apt-get install php7.1-xdebug


Danach muss die /etc/php/7.1/mods-available/xdebug.ini bearbeitet werden. Wenn man nun davon ausgeht, dass die VM mit VirtualBox und einem Host-only Netzwerk in den Standard Einstellungen läuft ist der Host 192.168.56.1 . Die Datei sieht dann also so aus:

bbcode-image



zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=192.168.56.1
xdebug.remote_port=9000


Bei mit zeigt shopware.localhost auf die VM und auf eine Shopware-Installation. Einen Breakpoint habe ich ganz an den Anfang von der shopware.php gesetzt.

Im Firefox verwendet ich das Addons Xdebug Session Cookie. PHPStorm hört auf Port 9000 nach Debug-Verbindungen. Wenn man nun shopware.localhost aufruft und das Addon aktiviert, wird auch sofort in PHPStorm dieses erkannt und er stoppt beim ersten Breakpoint, den man gesetzt hat.

bbcode-image

bbcode-image


Ist also in wenigen Minuten machbar, das für seine lokale Umgebung einzurichten.

Etwas komplexer ist es mit SSH und Portweiterleitungen, was aber ermöglicht ganz sicher ein Live- oder Staging-System zu debuggen und man muss nicht auf dem Server mit VI und echo/var_dump arbeiten, um heraus zu finden warum es zwar lokal super lief, aber nicht auf dem Server, obwohl die an sich total gleich sind. Kennt jeder.. oder?

Fehler beim Domain-Betritt

Wenn der Fehler auftritt, dass ein Windows-PC die Domain in Netzwerk nicht finden kann und keine Verbindung zum Active Directory-Domaänencontroller hergestellt werden kann, kann es helfen das IPv6-Protokoll zu deaktivieren.

bbcode-image


Sollte der PC dann in der Domain registriert sein, sollte man das IPv6 wieder aktivieren können und es sollte alles ohne Probleme funktionieren.

Datenschutz DSGVO Cookie-Overlay

Meine Seite hat jetzt auch eine Abfrage, ob Cookies angelegt werden dürfen oder nicht. Es wird nicht nur einfach informiert, dass es geschieht oder nach dem Bestätigen geschehen wird. Der Besucher hat auch die Wahl, ob er mit oder ohne Cookies die Seite besuchen möchte. Ich überlege noch ein Belohnungssystem, für Besucher, die die Anzeigen anzeigen lassen (...was für ein komischer Satz...).
Besuchern die Seite zu verwehren halte ich für falsch. Belohnungen sind besser als Strafen.

Hier eine Plain-JavaScript Lösung, bei der man die Ausführung von AdSense oder Analytics per Event triggern kann. Wenn es einmal bestätigt wurde, merkt sich der Browser die Einstellung und behält das Verhalten bei. Es wird im localStorage gespeichert und dort kann man die Auswahl auch wieder löschen.

Vielleicht hilft das ja jemanden :-)


<div id="cookiequestion">
<style type="text/css">
#cookiequestion{
position: fixed;
text-align: center;
font-weight: bold;
left: 0;
bottom: 0;
border: 2px solid #BBB;
background-color: #DDD;
padding: 10px;
border-radius: 5px;
width: 100%;
}
</style>
<script type="text/javascript">
function cookieclose(val){
var storage = window.localStorage;
if(val && val > 0){
storage.setItem("cookiequestion_val", val);
}
else {
val = storage.getItem("cookiequestion_val");
}

if(val && val > 0){
document.getElementById("cookiequestion").style.display="none";

if(val > 1) {
var event = new Event('cookiequestion_clicked', {value: val, overlay: document.getElementById("cookiequestion")});
document.dispatchEvent(event);
//or do other things here
}
}
};

cookieclose(0);
</script>
<p>
Erlauben von Tracking/Cookies?
</p>
<p>
<button onclick="cookieclose(2);">
ja
</button>
<button onclick="cookieclose(1);">
nein
</button>
</p>
</div>


QNAP QTS: Am Ende auch nur Linux

Ich bin gerade dabei eine Lösung zu basteln, damit die Bilder und Videos der Überwachungskameras, die die über FTP auf dem QNAP NAS speichern, nach 5 Tagen automatisch löschen zu lassen.
Dafür muss man über SSH auf das NAS und die Cron-Table editieren.

So bald man sich über SSH verbunden hat merkt man auch, dass am Ende doch alles immer nur ein Linux ist.. außer es ist Windows.

bbcode-image

Old-Shit-Releases: cJS

Ich hab so viel liegen, was ich nie weiter entwickeln werde, aber doch verwendet habe und was gut funktioniert. Teilweise auch immer noch gut funktioniert.

Teil 1: cJS

Das kleine JavaScript Framework, mit dem genau so Controller entwickeln konnte wie mit JavaFX.. es was fast eine 1:1-Kopie. MP4toGIF.com nutzt es und es läuft gut. Es hat kein bidirectional-Binding wie Angular. Am Ende wurde eine Lib für AngularJS dafür, die ich auch oft verwendet habe. Das eigene Framework habe ich nie weiter entwickelt, dabei konnte man Controller ondemand per require.js nachladen und so lustige Dinge. Controller konnten Controller anhand des Namens laden.. wie Services in Symfony..

letzte Version und Beispiele.

Macht damit was ihr wollt :-)

bbcode-image


bbcode-image

Retrogaming: 112in1 Mega Drive Modul

Nachdem ich mich schon mit der Slim Station irgendwas und dem Famicom 500in1 Module aus einander gesetzt habe, habe ich mir dann doch mal ein entsprechendes 112in1 Modul für den Mega Drive geholt. Bei den Famicom Spielen, gab es an sich ein großes Problem: Es fehlten viele Mario und alle Zelda Spiele. Wärend im 500in1 Modul zu meinem Erstaunen alle Turtles Spiele und neben dem obligatorischen Contra 1 auch Probotector zu finden waren, hat das Sega Modul alle wichtigen Serien, die man beim Mega Drive erwarten würde. Sonic, Golden Axe, Streets Of Rage, etc. Es sind kaum Disney Spiele dabei (wobei an sich nur Alladin einen wirklichen Verlust darstellt). Auch andere EU und NA Spiele, die man von früher kannte, fehlen. Im Vergleich mit den Famicom Sammlungen sind aber wenigstens die japanischen Serien vorhanden und vollständig.

bbcode-image


bbcode-image


Auch weil eben alles eher auf die japanischen Spiele konzentriert ist, ergänzt das Modul eine vorhandene Sammlung eher als Spiele darin zu doppeln. Der absolute Vorteil ist aber auch, dass das Modul mit den japanischen Versionen ohne Adapter direkt in einem PAL-Mega Drive funktioniert. Während ich sonst für "TMNT: Return od the Shredder" einen Adapter gebraucht hätte (der auch irgendwo rum liegt) kann ich es jetzt einfach so spielen ohne lange suchen oder DIP-Schalter am Adapter umstellen zu müssen.

bbcode-image


Es finden sich keine seltsamen Rip-Offs und Nachbauten von Mobile-Games auf dem Modul. Also die Zusammenstellung ist sehr viel Hochwertiger als bei den Famicom Spielen (und es wirkt nicht nur so weil es eben 16Bit Spiele sind).

Die eigentliche Frage ist, ob es mit den Sega Mega Drive Flashback HD von Media-Markt oder Amazon bei der
Spiele-Auswahl mithalten kann.

Was hat nur die Konsole, was toll ist:
- Columns
- Dr. Robotnik’s Mean Bean Machine
- Kid Chameleon
- Mortal Kombat (Serie, Teil 3 gibt es auch im Modul)
- Phantasy Star (Serie)
- Sonic 3D Blast
- Sonic Spinball
- Virtua Fighter II

Was hat nur das Modul, was toll ist:
- Arcus Odyssey
- Batman (Serie)
- Contra Hardcorps
- Double Dragon (Serie)
- Flashback
- Hokuto no Ken/Fist of the North Star
- Monster World IV (JP + Region-Lock)
- MUSHA (JP)
- Rocket Knight Adventures (Serie PAL)
- Streets Of Rage (Serie)
- True Lies
- Turtles: Return Of The Shredder

Disney Spiele fehlen auch bei der Konsole und die Konsole enthält einige Master System Game Gear Spiele und paar undefinierte (China?) Ergüsse, die eher an die schlechten Spiele in den Famicom Sammlungen erinnern.

Wer schon einem Mega Drive besitzt, ist gefühlt mit dem Modul besser dran. Günstiger und eben nur ein Modul und nicht noch eine Konsole. Viele der fehlenden Spiele bekommt man günstig gebraucht oder man hat sie schon. Bei RPGs ist natürlich die Sprache wichtig! Da muss man dann von Fall zu Fall genauer gucken. Monster World IV gibt es dort nur auf JP.
Und manche Spiele wie auch Monster World IV haben noch ein Region-Lock, wobei das für PAL-Regionen bei dem Modul kaum ein Problem ist. NTSC-Regionen sind da eher benachteiligt.

Eine vollständige Liste mit den Spielen und Eigenarten findet man hier.

bbcode-image
Comix Zone

bbcode-image
Contra: The Hardcorps

bbcode-image
Golden Axe

bbcode-image
Tiles Mahjong


bbcode-image
Rocket Night Adventures

bbcode-image
TMNT: Return of the Shredder

bbcode-image
True Lies

bbcode-image
True Lies

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?