Blog: Latest Entries (15):


Kotlin und Java: Exceptions und throws

Ist es falsch das Java einen zwingt eine Exception zu fangen, wenn explizit eine geworfen werden kann.
Also das Fehler dort behandelt werden, wo sie auftreten und man sie nicht immer bis ganz nach oben reichen sollte?


public class ThrowExample {

private void method1() throws Exception {
throw new Exception("test");
}

private void method2() throws Exception {
this.method1();
}

private void method3() throws Exception {
this.method2();
}

public void call() throws Exception {
this.method3();
}
}


Bei Java kann es so nie passieren, dass am Ende eine Exception auftaucht, von der man nie wusste, dass sie geworfen wurde. Weil sie entweder schon mit einem Try-Catch-Block gefangen wurde oder aber man über die Existenz dieses Exception mit Hilfe des "throws" an der Methode direkt informiert wird.

PHP hat mit Exception ab PHP 7.0 viel verbessert, aber um die Wahrheit zu sagen, ist das was ich noch gerne hätte ein "throws" damit ich weiß, dass in der Methode, die ich gerade verwende, das Werfen einer Exception implementiert wurde.

Fehler Behandlung ist schwer und Exceptions als brauchbare Fehlermeldungen an den Benutzer hoch zu reichen ist nicht einfach... aber einfach dann die Exceptions bis zum Benutzer durch laufen zu lassen ist doch eher der falsche Weg und ein gutes Exception-Handling Framework wäre die bessere Lösung gewesen.

Deswegen sehen ist den Verzicht auf den Zwang Exceptions fangen zu müssen in Kotlin eher negativ und nicht als Vorteil.Nur als einen Punkt nun dem Entwickler aufgehalst wird (er muss sich nun darum kümmern, dass Exceptions richtig behandelt werden), wo vorher der Compiler einen dabei unterstützt hat auch alle Exceptions richtig zu behandeln.

Mein-Online-Adventskalender und Shopware

Ich hatte bei der Entwicklung von mein-online-adventskalender.de schon sehr darauf geachtet, dass es sich leicht integrieren lässt. Aber bei meinem Test mit Shopware hat sich gezeigt, dass es auch wirklich gut klappt.

Ich hab es über ein Iframe-Element in einer Einkaufswelt eingebunden. Das Element sollte eine Höhe von 1350 haben auf dem Desktop.

bbcode-image


Vielleicht baue ich im Herbst ja noch mal ein richtiges Plugin dafür :-)




Shopware Plugins mit Eclipse PDT entwickeln

Momentan steht bei mir an ein Plugin für Shopware zu entwickeln.

Das erste Problem dabei ist nicht mal, wie das funktioniert, weil das ist im Internet mehrfach gut erklärt, sondern wie man seine Entwicklungsumgebung aufsetzt.
Shopware ist schnell installiert. Aber man will für ein Plugin ja nicht immer das gesamte Shopware mit im Projekt haben. Also wird nur das Verzeichnis aus custom/plugins/ als Projekt-Verzeichnis gewählt.
Bei Eclipse kann man Projektverzeichnisse außerhalb des Workspaces anlegen.

Nun hat man das Problem, dass einem die ganzen Klassen von Shopware fehlen und man so viele Warnings und keine Autovervollständigung hätte.

Über Properties > PHP > Source Paths > Build Path kann man externe Source-Verzeichnisse verlinken.

bbcode-image


ich habe das engine-Verzeichnis von Shopware gewählt und noch zusätzlich dessen vendor-Verzeichnis.

bbcode-image


Die PHPUnit Tests werfen dann zwar noch Fehler. Aber die Plugin-Klasse von Shopware wird schon einmal gefunden und damit ist der erste Schritt schon getan.

bbcode-image


Damit kann meine Arbeit an meinem ersten Shopware-Plugin jetzt anfangen.

Strom für unterwegs

Manchmal hat man das Problem, dass man vor Ort keinen Strom hat. Notebooks lösen das Problem. Doof nur wenn man auch zusätzliche Geräte wie RFID-Reader oder Netzwerk-Switches mit versorgen muss. Ich werde Samstag mal ein Akku-Pack testen. Eigenlicht ist es für mobile Blitzanlagen gedacht, aber mit etwas Glück funktioniert es auch für andere Geräte.

bbcode-image

Kurz und Knapp: Einkaufswelten

Was mich stört:

- sehr kleine Ansicht des TinyMCE und keine gute Code-Ansicht (wie Codemirror oder so)
- Bilder werden immer mit festen Pixelwerten skaliert
- Es kommen CSS-Klassen hinein die man nicht will
- IMG sind z.B. immer Block-Elemente und nicht inline wie man es erwarten würde und dann geht einfache "text-align:center;" nicht
- Das Handling von ausgeblendeten Elementen ist nicht wirklich gut
- Das Scaling-Verhalten der Banner lässt sich nicht konfigurieren
- Direkte Rahmenstyles für die Boxen wäre toll
- kein Undo
- Ein Grid wie in Bootstrap mit automatischer Anpassung an die Bildschirmbreiten fehlt, auch wenn die vorhandene Lösung schon ganz ok ist
- Im- und Export von Einkaufswelten kommt erst mit 5.3
- Am Ende muss man doch relativ oft an den HTML-Code und CSS-Klassen und so anpassen

bbcode-image


Aber man muss am Ende doch nochmal sagen.. für mich ist es die Beste Lösung, die es momentan gibt und auch durchaus von Leuten bedienbar ist, die wenig mit HTML und WebDesign zu tun haben.

Shopware Artikel Modus und die Magicnumbers 0, 1, 2, 3 und 4

Wenn man mit dem sBasket von Shopware zutun hat und auch mal selbst was in den Basket legen möchte und dann vielleicht ist das was man rein tun möchte kein standard Artikel sondern ein Rabat oder ähnliches, kommt man schnell zu dem Feld Modus/Mode.

Um die Magicnumbers zu decodieren muss man etwas tiefer suchen.. in der cart_item.tpl.. wäre jeder sofort drauf gekommen.. oder?


{* Constants for the different basket item types *}
{$IS_PRODUCT = 0}
{$IS_PREMIUM_PRODUCT = 1}
{$IS_VOUCHER = 2}
{$IS_REBATE = 3}
{$IS_SURCHARGE_DISCOUNT = 4}


Gutscheine findet man also dann bei Einträgen mit dem Mode 2. Gerade bei Exports von Bestellungen für externe Systeme kann dieser Mode sehr praktisch sein.

Die Einträge mit der 3 werden bei jedem Anzeigen neu aufgebaut und somit werden Positionen, die man einfach in die DB schreibt auch sofort wieder gelöscht. Für den Zweck scheint Mode 4 der richtige zu sein. Wobei ich dort noch Probleme mit dem Löschen habe, aber das kann ich sicher noch über ein Event oder Hook lösen.

Meine ersten Shopware Plugins

Morgen beginnen die Test meiner ersten beiden Shopware Plugins. Teilweise sehen sie auch wirklich wie "die ersten" aus, auch wenn ich nochmal viel nachgebessert habe. Aber gerade optisch ist noch viel Raum nach Oben. Bis Freitag kann man da sicher noch was machen, um auch optisch noch was besseres abliefern zu können.

bbcode-image


Weitere und bessere Plugins, aber erst einmal ohne Oberflächen, sondern als Unterstützung für Entwickler und Designer, folgen dann hoffentlich in den nächsten Wochen und Monaten.

Manuelle Zeitmessungen mit dem Switch GmbH Time-System

Zeitmessungen bei Rennen müssen nicht immer mit RFID gemacht werden. Man kann auch ganz einfach einen PC, ein Tablet oder ein Smartphone pro Messstation nehmen und eine Person muss nur auf die Teilnehmer-Nummer klicken/drücken, um eine Messung zu speichern.

Für die meisten Rennen im Amateurbereich ist die Genauigkeit mehr als ausreichend. Also ein vollständiger Ersatz für Stoppuhren oder andere Smartphone-Apps, die man sonst für Kontrollmessungen verwenden würde.



Und alles natürlich dann in Echtzeit auf dem Server.


Tasks der nächsten Zeit

Die nächsten Wochen und Monate werden sehr stressig. Meine Pläne sind:

- Umziehen und Renovieren (vielleicht mit Blog-Post über Netzwerk, Server und Überwachungskameras)
- Ein einfaches Shopware Plugin in den Community Store zu bekommen (Das Plugin ist so gut wie fertig.. jetzt kommt die Upload-Theorie* .. schlimmer als der App-Store für Firefox OS kann es sicher nicht sein)
- Einen kleinen aber etwas speziellen Shop online bringen (ich werde berichtigen wie es läuft und ob es am Ende erfolgreich war)
- Zwei Termine mit dem Switch GmbH Time-System stehen an, wo ich auch Blog-Post und so liefern werde.. mehr als letztes Jahr
- Ein Video über die manuelle Zeitmessung mit dem Time-System
- Und nach dem Umbau der letzten 3 Monate am aoop PHP-Framework mit MVC, neuer Verzeichnisstruktur, PHP 7, Namespaces, Composer-Autoloader, etc müsste ich wirklich mal eine neue Version releasen.. ich bin doch relativ stolz auf die neue Version ,weil sie doch etwas ist was man als modern bezeichnen kann

* Anleitung für den Shopware Community-Store

Shopware Forms mit Smarty und Customer-Model?

bbcode-image

Shopware: Wie Enlight_Event_EventArgs funktionieren

bbcode-image


Unser Ziel ist es den Text einer Email zu ändern die aus einer Form generiert wird. Wir nutzen dieses Event:


$mail = Shopware()->Events()->filter('Shopware_Controllers_Frontend_Forms_commitForm_Mail', $mail, ['subject' => $this]);


Wenn wir nun die Args durch gehen...


public function eventMailListener(\Enlight_Event_EventArgs $args){
foreach($args as $key => $value){
echo $key;
}
die();
}


... das nur "subject" also der Controller darin zu finden ist.

Jetzt gucken wir und mal die filter-Methode vom EventManager an.

public function filter($event, $value, $eventArgs = null)
{
if (!$this->hasListeners($event)) {
return $value;
}

$eventArgs = $this->buildEventArgs($eventArgs);
$eventArgs->setReturn($value);
$eventArgs->setName($event);
$eventArgs->setProcessed(false);

foreach ($this->getListeners($event) as $listener) {
if (null !== ($return = $listener->execute($eventArgs))) {
$eventArgs->setReturn($return);
}
}
$eventArgs->setProcessed(true);

return $eventArgs->getReturn();
}


und da sehen wir


$eventArgs->setReturn($value);


Also ist die Lösung


public function eventMailListener(\Enlight_Event_EventArgs $args){
/** @var \Enlight_Components_Mail $mail */
$mail = $args->getReturn();
echo $mail->getPlainBodyText();
die();
}


Wenn man das erst einmal verstanden hat, ist alles plötzlich ganz einfach. Ach ja, wenn man das Subject überschreiben möchte erst einmal $mail->clearSubject(); ausführen.


Older posts: