So langsam wird aus dem Prototypen ein fertiges Plugin, dass für den Einsatz in der realen Welt genutzt werden kann. Aber wofür kann man selbst ein Cashless Payment System, also ein System wo man nicht direkt mit Geld bezahlt sondern mit einem vorhanden oder später auszugleichenden Guthaben bezahlen kann, nutzen. Für wenn ist es interessant?
Events (Wegwerfkarten aus Pappe + 13,56 kHz RFID-Tag): Wer events organisiert kennt sicher schon Verzehrkarten und ähnliche Systeme. Man kauft sich am Eingang beim Bezahlen des Eintritts eine Karte für den Erwerb von Getränken. Jedes mal wenn man etwas Kauft wird der Preis vom vorhanden Guthaben abgezogen. Wenn man dann kein Guthaben mehr hat bekommt man nichts mehr und muss neu aufladen. Wer das Event verlässt und nicht alles ausgegeben hat, lässt das Guthaben verfallen.
Der Vorteil mit so einem System ist, dass die Mitarbeiter an der Bar nicht rechnen oder mit Bargeld rumhantieren müssen. Es kommt zu weniger Fehlern und es geht alles etwas schneller. Das Bargeld wird an zentraler Stelle behalten und es gibt keine Wechselgeldprobleme.
Wenn es um einzelne Events geht, wäre es sehr aufwendig und teuer für jedes Event ausreichend (also lieber immer zu viele) RFID-Karten bedrucken zu lassen. Hier gibt es als einfache Lösung RFID-Tags.
Also einfache Aufkleber, die auf eine Papier-Karte geklebt werden können. Man lässt sich also nur einfache Karten drucken und klebt die Tags beim Kauf rauf. Spart viele Kosten und die Karten und Tags halten einen Tag ohne Probleme durch.
RFID-Tags zum Aufkleben
Eine einfache Papier-Karte *...
... jetzt mit RFID-Tag kompatibel zu unserem System
Unser Cashless Payment System in Stichworten:
- keine lokalen Server da alles in der Cloud laufen kann
- kostengünstiges Mieten oder selber bauen von Kassen-Terminals
- erspart das Handtieren mit Bargeld und EC-Karten an den POS's
- Prepaid- und Nachträglich-Bezahlen Verfahren werden unterstützt
- Bedienung rein über Touchscreen (aber auch Maus und Tastatur wenn es vorzieht)
- Unterstützt 13,56kHz/125mHz RFID Technik und Barcodes (Code128/ QR) mit den jeweiligen USB-Readern
- Bon-Druck auf Thermo-, Tintenstrahl- oder Laserdrucker
- Unterschiedliche Kundengruppen mit entsprechenden Auswertungen von Verkäufen
- eine einfache Bestandsführung und automatische Sperrung von Produkten ohne Bestand
- Vereinfachte Bedienung durch Topseller und selbst gestaltbarer Seiten
- Professionelles und bewertes Shopware-System als Kern unserer Anwendung
Ein simpler und günstiger Bon-Drucker kann sehr einfach als normaler Windows Drucker verwendet werden. Er druckt eben nur den von ihm abgedeckten Bereich der Seite. Aber mit dem CSS3 Print-Profile kann alles super anpassen.
So sieht eine Shopware-Bestellung ausgedruckt aus (die Versandkosten sind dort nicht aufgeführt, da es normal nicht vorkommt, dass in so einem Fall welche angerechnet werden würden.. vor Ort).
Demnächst kommt hier ein Blog-Artikel der das System und Anwendungsfälle genauer beleuchten wird und Lösungen für Event, Discos, Restaurants und Hotels beschreibt.
Nachdem ich das letzte mal zwei China-Mini-Kameras vergestellt habe, kommt diesmal eine etwas andere "Endoskop" Kamera. Man kann diese gut verwenden um in Rohre oder Gehäuse zu gucken. Die Kamera hat mehrere LEDs die über einen Drehregel am Kabel in der Helligkeit angepasst werden können. Es gibt einen Periskop-Aufsatz und einen Magneten, mit man Metal-Gegenstänge angeln kann.
Ich bin ja nur Entwickler und kenne mich mit Marketing an sich gar nicht aus. Es würde meinen Projekten und Shopware-Plugins sicher gut tun, wenn ich mich mal etwas mehr damit beschäftigen wurde.. was ich mir gerade auch mal wieder mehr vorgenommen.. gerade jetzt! :-)
Ich hab ein paar für mich relativ interessante Artikel gefunden, die ich einfach mal hier teilen will.
Das hier ist wohl der für mich wichtigste Artikel. Gebe deinen Kunden immer einen Grund, warum das Produkt/Plugin zu ihnen passt. Das fehlt wirklich oft genug. Ich habe teilweise schon kleine Anwendungsbeispiele geliefert, aber etwas ausführlichere Use-Cases könnten da wirklich helfen.
Auch ganz gut um eine allgemeine Übersicht zu bekommen (und mit leichten Erinnerungen an Simple Programmer Blog-Artikel) fand ich diesen Artikel ganz gut. Der Hauptton darin ist grob: Das Hauptproblem ist nicht einen Uplift zu erreichen sondern die Mittel dafür zubekommen. Und das im SEO-Bereich hoch geachtete Bauchgefühl wird hier als nett aber nicht-ziel-bringend in einem realistischen Kontext dargestellt. Schaf dir deine Werkzeuge, mach Big Data und liefer belegbare Zahlen aus validierten Test-Szenarien.
Am Ende soll man sein eigenes Team und ein besseres Gehalt haben.. ach ja .. das die Firma mehr verkauft fällt nebenbei auch noch ab.
Das klassische Problem, dass man sich selber anders sieht als andere einen sehen.. Zielgruppen.. Ich glaube eine Zielgruppe gefunden zu haben, aber sieht sich die Gruppe selbst als Zielgruppe oder passt eine andere besser?
Der nächste Artikel erinnert mich an die Neuauflage der 80er Jahre Turtles Actionfiguren.. sie waren sofort weg.. wohl nicht weil die jetzt besonders hochwertig waren oder eine große Zielgruppe angesprochen haben.. es gab einfach nur wenige und deswegen wurde geglaubt sie wären wertvoll und eine gut Investition.
Da hab ich sogar ein Plugin, dass in die Richtung geht und die erzählt dass "nur noch" so und so viele Artikel vorhanden sind und es danach entweder keine mehr oder nur mit sehr langen Lieferzeiten gibt. Also besser jetzt kaufen, weil wenig da ist, deswegen ist es wertvoll und genau deswegen werden alle anderen es dir weg kaufen.
Hier wird einmal angesprochen, dass man Daten vor der Analyse immer prüfen sollte. Wenn man nicht weiß, dass die Daten richtig sind, lohnt sich eine Analyse damit eh nicht.
Hier auch einmal das Beispiel, das Menschen bei einer Frage nach ihrer Meinung oft nur das antworten, von dem sie glauben, dass der Fragende dieses hören will. Klassisch: "Was halten Sie von der politischen Entscheidung XXXXXXXXX?" - "Ich bin total dagegen. Sowas kann man einfach nicht so machen... " *Pause* ".. war die Antwort richtig?". In dem Artikel am Beispiel von Coca Cola und Pepsi und der glaube, dass man Coca Cola besser finden müsse.
Für mein POS-Projekt hatte ich 2 verschiedene RFID-USB-Reader. Einen direkt aus China und einen über Amazon bestellt. Der von Amazon hat den Vorteil, dass er verschiedene Ausgabe-Modi kann.
Der einfache Reader aus China gab von Anfang an direkt die Nummer mit Enter aus.
Der Reader von Amazon war zu Anfang so eingestellt das die Nummer ohne Enter ausgegeben wird. Aber es war eine Karte dabei um die Ausgabe zu konfigurieren.
Das ist auch sehr einfach. Wie man wohl schon direkt vermutet, hält man die Karte über das Lesegerät und es schaltet in den nächsten Modus.
Der Index des aktiven Modus wird ausgeben und man kann direkt mit einer normalen RFID-Karte testen.
Ich habe am Ende den Modus 0e verwendet. Da es der Code ist, der auch auf der Karte steht und mit Enter ausgegeben wird (also wie vorher nur mit Enter).
VPN-Verbindungen sind sehr nützlich. Ob man nun im Homeoffice ist und sich ins Firmennetzwerk einklinken möchte oder man unterwegs auf private Daten zugreifen möchte, die man auf einem NAS lagert und nicht immer mit einem Webserver synchronisieren möchte.
Um das eigene Netzwerk (private oder Firma) VPN-fähig zu machen braucht man nur eine einfache Fritzbox. Diese bringt alles mit was man braucht und bei viele haben so eine bestimmt schon als Router im Einsatz (auch für kleine Firmen reicht eine Fritzbox oft vollkommen aus).
Es geht sehr schnell und einfach. Man sollte ein MyFritz-Konto haben oder einen anderen DynDNS-Anbieter eingerichtet haben. Wenn man dann einen neuen Benutzer anlegt kann man diesen als VPN-Benutzer aktivieren. Nun kann man diesen schon mit den angezeigten Daten für eine VPN-Verbindung nutzen.
Die Daten kann man sich auch später nochmal anzeigen lassen.
Bei Android ist das anlegen einer VPN-Verbindung auch sehr einfach.
Bei Windows Notebooks und Tablet mit WWAN-Option oder UMTS/LTE-Stick ist es auch nicht komplizierter.
Nun kann man von überall aus mit dem Smartphone sich in das eigene LAN einwählen und dort z.B. per FTP Daten von einem NAS oder anderen Server abrufen oder auch auf intern-gehostete Webanwendungen wie Wikis oder Groupware-Lösungen zugreifen.
Mich nervt es immer, wenn ich in einem beliebigen Shop bin und bei "NEW IN" gucke und merke, dass immer noch nichts neues da ist. Eine einfache Anzahl der Artikel in der Kategorie würde mir da schon sehr helfen, da ich direkt sehen kann ob sich da was getan hat.
Shopware bietet zwar ein Beispiel an, aber dieses Beispiel hat mich doch zu viel Zeit gekostet, bis es lief und die dort verlinkte ZIP-Datei ist leider auch nicht fehlerfrei. Deswegen habe ich mich mal daran gemacht eine eigene einfachere Beispiel Implementierung zu bauen, die als Vorlage mit viel Copy&Paste dienen kann.
public function onRiskManagementBackend(\Enlight_Controller_ActionEventArgs $args){
$args->getSubject()->View()->addTemplateDir($this->getPath() . '/Resources/views');
An sich macht man nichts anderes als eine JSON Key-Value Liste zu erweitern und dort ein Event einzutragen, das eine Methode auslöst, die true (is a risk) oder false (is not a risk) zurück gibt. Diese Methode sollte nur als Facade für einen Service dienen, damit man die Logik schnell und einfach austauschen kann.
Das Plugin kann man dann eben noch um alles mögliche erweitern, wie Freitextfedler für Kunden und weitere Templates. Dann den Serive vollständig implementieren, nochmal was mit dem Snippet machen und man sollte seine RiskManagement-Rule haben.
Wenn man in seinem Plugin irgendein Template erweitert, dass mit der Darstellung von Produkten zu tun hat, sollte man immer daran denken, dass diese sehr sehr oft auch als Widgets verwendet werden.
Wenn man das Template-Dir nicht beim Laden von Widgets dem System Verfügbar macht, kann es zu unschönen Fehlern kommen und einen Hannes lange nach dem Problem suchen lassen.
directory 'xxxxxxxxx/y.tpl' not allowed by security setting
Hier ist das gesamte Konzept mit Caching und Templates wirklich toll mit Beispielen beschrieben:
Da steht auch, wenn das {s}-Tag als unbekannt angesehen wird.. dann ging einfach in Smarty echt was schief und man sollte mal die Apache-Logs angucken.
Eine Lösung wird auch gleich mitgeliefert (wobei ich momentan noch mit 2 Events.. Frontend und Widgets arbeite.. und auch erst einmal dabei bleiben werde):
ABER Vorsicht: Im Backend gibt es kein Shop-Object. Wenn man beim Hinzufügen des Template-Dirs auch Smarty-Vars setzt und auf Customer- und Session-Daten zugreifen will, kann es schnell schief gehen! Bei Frontend und Widgets gibt es keine Unterschiede.
Nachdem ich schon mal einen RangeSlider für Artikel-Eigenschaften implementiert hatte, habe ich für mich noch mal neu angefangen. Meine Version ist einfacher, hat weniger Funktionen und weniger für integrative Szenarien gedacht. Dafür einfach zu bedienen und unterstützt eine "linear" und eine "log" Darstellung.
Hier sieht man die Unterschiede, wenn man mehr Werte im 1-2 stelligen Bereich hat und nur wenige im 4 stelligen Bereich.
linear
log
Die Config auf Option-Ebene zu bekommen, steht jetzt als nächstes an. Options hätten als Auswahl "global","linear" und "log". Die Einstellung direkt im Plugin wäre die globale Einstellung.
Mit etwas Glück ist das Plugin am Ende der Woche dann bei Shopware im Store.
Es war ein kalter und nasser November morgen. Ich saß zu der Zeit in einem ehemaligen Fabrikgebäude im tiefsten Osten Deutschlands mehrere Fahrtminuten hinter Lübeck.
Meine Aufgabe sollte es da sein ein Konzept für das Beschaffungsmodul eines ERP-Systems zu konzeptionieren. Ich stand gerade vor dem Problem, dass z.B. bei Wareneingängen, die über das Modul verbucht werden sollten, auch das Lager-Modul und das Inventur-Modul diesen Eingang verarbeiten mussten. Ich überlegte und entschied mich am Ende für ein auf MDB basierten Event-Model. Wenn etwas passierte sollte ein Event/eine Message los laufen und andere Module sollten, dieses bei Interesse nehmen, zur Kenntnis nehmen oder auch Daten anpassen können. Man war felxibel, hatte keine Abhängigkeiten und alles war erweiterbar und austauschbar. Ich war schon halb dabei was konkretes zu entwickeln... wie man sich sicher jetzt schon denken kann, kam es nie dazu. EJBs wurden direkt aufgerufen mit allen Problemen, die ich mit den Events umgehen wollte.
Ob es nun Fire-And-Forget, synchron oder asynchron, MDB-basiert oder was auch immer gewesen wäre, es wäre besser gewesen als alle benötigten fremden Services per Hand direkt aufzurufen und denen die Daten in deren Formaten aufbereitet zu übergeben. Jede Änderung an den fremden Services, die es zuhauf gab, konnte wieder alles kaputt machen und das passierte natürlich häufig, besonders weil Service-Interfaces beliebig geändert wurden und nie stabile Schnittstellen zwischen den Modulen waren.
Es war ein Fehler es nicht so zu machen, deswegen liebe ich alles was genau so arbeitet. Jetzt habe ich auch angefangen bei einigen meiner Shopware-Plugins Events einzubauen, so dass diese auch teilweise erweitert werden können. Das Preis-Warnung-Plugin ist das erste, das Events erhalten wird. Bei Shopware ist es an sich sehr einfach mit Events zu arbeiten. Als Beispiel nehmen wir uns einen einfachen Service.
namespace HPrEventTest\Components;
class EventService{
/** @var \Enlight_Event_EventManager */
private $eventManager;
public function __construct(\Enlight_Event_EventManager $eventManager = null){
$this->eventManager = $eventManager;
}
public function fireExample(){
$val = 0;
$result = $this->eventManager->filter('HPrEventTest_example', $val, ['subject' => $this]);
return $result;
}
}
Wir müssen nur noch den Event-Manager per Injection zum Service hinzufügen.
Wie man auf Events reagiert, weiß eigentlich jeder, der schon mal ein Shopware-Plugin geschrieben. Allein der Klassiker zum hinzufügen von Template-Dirs erklärt schon fast alles.
namespace HPrEventTest;
use Shopware\Components\Plugin;
class HPrEventTest extends Plugin{
public static function getSubscribedEvents(){
return [
'HPrEventTest_example' => 'processEvent',
];
}
public function processEvent(\Enlight_Event_EventArgs $args){
$args->setReturn($args->getReturn() + 1);
}
}
Wir feuern also ein Event mit 0, das wird in unseren Plugin verarbeitet und 0 wird zu 1 und diese 1 wird von der ursprünglichen Service-Methode auch dann wieder zurück gegeben.
Es gibt natürlich noch ein paar mehr Event-Strategien als filter(), aber an sich sind alle sehr ähnlich. Nicht bei jedem wird der Return-Wert verwendet.
Das Subject, das wir hier verwenden, eignet sich super dafür Controller und Services zu übergeben, die das Event ausgelöst haben.
Ich hatte mal vor längerer Zeit einen Blog-Post darüber gesprochen, dass IT nicht bei Ebay wächst. Also über Firmen, die ihre IT Ausstattung oder was sie so nennen, sich Stückchenweise bei Ebay und so zusammen kaufen und einen wilden Wuchs verschiedenster PCs und Notebooks mit genau so vielen verschiedenen Problemen schaffen.
Das Verlockende an diesem Vorgehen ist einfach der Preis und damit ein gedachter schneller RoI. Nur leider stimmt dieses so einfach nicht. Verschiedene Systeme haben verschiedene Probleme und brauchen verschiedene Lösungen. Die langzeit Administrationkosten sind also sehr hoch und drücken sehr auf den RoI. Oft wären der RoI schneller und höher bei neuen Systemen, die man bei z. B. bei Dell, HP, Fujitsu oder Lenovo in den benötigten Stückzahlen kaufen kann.
Aber es gibt eine 3. Methode, die eher der 2. genannten entspricht, aber auf Preisen der ersten basiert. Refurbished Systeme kaufen. Refurbished Systeme kommen zu meiste aus alten Firmenbeständen. Wenn eine Firma 200 Arbeitsplatz-PCs austauscht, weil der Hersteller nach 5-6 Jahren keinen bezahlbaren Support und Ersatzteile/Austauschgeräte mehr bietet, holt man sich gerne eine externe Firma, die die PCs einen abkauft, wieder in Schuss bringt und dann selbst weiter verkauft. Stückzahlen, Garantie und schon die richtige Art von Systemen für einen sehr günstigen Preis.
Bei dem Preis kauft man sich einfach 10% mehr als benötigt und spart sich teure Support-Verträge.
Konkret ging es bei mir um eine Anfrage, wie man ~12 Arbeitsplätze erneuern könnte. Es gab verschiedene Angebote und ich sollte auch noch mal was raus suchen. Anforderung war, dass sie schneller als die alten sein sollten. Das übersetzt man dann in: leicht administrierbar, alle gleich, solide Hardware, ausreichend Anschlüsse. Da ist das auch Freelance-Ebene neben meinem Job mache, habe ich dabei auch die Freiheit günstig zu sein, auch wenn ich versuche nicht denen, die davon leben, die Preise kaputt zu machen.
Ich hab einen einfachen Office-PC rausgesucht. Ein i5 ist mehr als ausreichend schnell. Denn was machen die Leute im Büro? 80% der Anwendungen sind Cloud-Anwendungen, die im Firefox laufen. Was in Word schreiben. Die Hardcore-Anwender verwenden sogar mal Excel (teilweise für Todo-Listen). PDFs ansehen, Drucken, Scannen (damals noch über SMB-Freigaben *urgs*).. das war es. Ich wurde gewarnt, dass viele ja so viele Daten hätten 10GB-500GB an Daten und die 320GB HDD würde ja nie reichen. Wenn man aber die 600MB Druckertreiber, 150MB Openoffice Installer, etc einmal weg gerechnet hatte blieben meist so 1GB-5GB übrig. Der Arbeitsplatz der Grafikdesignerin war eine eigene kleine ungeplante Baustelle.
Viel konnte man sparen, in dem man die Scans nur noch über Email laufen lies. Weil dann ist alles im Postfach zu finden, was man mal gescannt hat und man findet es dort auch wieder, falls mal die Kopie von der Festplatte verloren geht (defekter PC oder so).
Also i5, 8GB RAM, 320GB HDD und , das war mir wichtig, 2 Displayports. Keiner der dort verwendeten Monitore war mit Displayport angeschlossen, ABER der Wildwuchs an HDMI, DVI und VGA Monitoren, Adaptern und Kabel war zu undurchsichtig um alles irgendwie geordnet aud 1x HDMI, 1x DVI, 1x VGA auszuteilen. An Displayport kann man alles gut und einfach adaptieren und die Adapter sind günstig. Also lieber 8x DP auf HDMI und 6x DP auf DVI ADapter kaufen und sich den Stress mit Kabel und Monitore sortieren und hin und her tauschen sparen.
Etwas was man auch nicht unterschätzen sollte, ist die Stapelbarkeit der PCs. Wenn man die alten einlagert oder neue vorbereitet für den späteren Einsatz, ist man glücklich im Lagerraum nur wenig Platz zu benötigen. Da sind diese Office-PCs auch fast unschlagbar (nur die Kiste für die Netzteile ist nicht ganz optimal).
Das sind dann ca 280 Euro für einen neuen Arbeitsplatz und es können mit Tesafilm zusammen gehaltene PCs ausgetauscht werden :-)
Was neu gekauft wurde, sind die Adapter, ein QNAP NAS (als allgemeiner SMB-Server und Domain-Controller.. was echt super funktioniert), sowie eine Fritzbox. Die Fritzbox ersetzte eine Telekom Digitialisierungbox Business.
Beim Router war der RoI auschlag gebend. Remote-Access, VPN und alles schnell und einfach. Der Preis für die Fritzbox war schon in den 30min wieder drin, die ich damit brauchte alles einzurichten, wobei ich bei der Box 4-5h lang gescheitert bin. Ok.. mir fehlte die Erfahrung mit der Box, aber wenn man die TK-Anlagen Funktion der Box nicht nutzt, ist es kein Verlust und spart direkt Geld (Fallback Lösungen sind auch schnell in 10min umgesetzt).
Selbst die Fritzbox hätte man gut gebraucht kaufen können, wenn man die Zeit gehabt hätte. Bei QNAP Geräten sind die Auswahl und die Preise bei Refurbished Geräten so schlecht, dass neu kaufen genau so gut ist.
Bei anderen Herstellern ist es leider nicht besser (Domain-Controller Funktion lässt leider wenig Auswahl!)
Noch mal zum Grafik-Arbeitsplatz. Momentan ist der Arbeitsplatz nur mit einem Notebook (i7, 16GB, etc) ausgerüstet und soll zu einem Arbeitsplatz mit einer echten Workstation + dem Notebook + VPN-Zugang werden. Der Printserver für den Plotter entpuppte sich als Xeon CAD-Workstation (E3, 16GB, Quadro 4000er, 256GB M.2 SSD). Dafür habe ich eine refurbished 2TB HDD gekauft (ich liebe Shops wo ich 3h nach Bestellung alles einfach direkt abholen kann).
Die Daten für die Workstation und das Notebook sollen auf dem NAS gelagert sein, dass über VPN dann erreichbar ist.
Am Ende war es eine gute Entscheidung das meiste gebraucht oder wenigstens günstig zu kaufen. Beim NAS sind neue Festplatten gut, aber das Gehäuse hätte man genau so gut gebraucht kaufen können. Für Festplatten und SSDs die nicht 24h/7d laufen reichen auch oft refurbished Komponenten, die zumeist aus Demo-Systemen stammen oder bei Aufrüstungen übrigblieben.
Ich habe erst gestern eine 300GB SSD verbaut, um einen PC noch mal etwas mehr schnellen Speicher zu geben. Günstig, funktioniert... da am Ende nur viel davon gelesen wird (da kommt der Steam-Ordner drauf) hält die auch lange. Auch als unempfindliche externe Festplatte sind günstige SSDs echt super. Sie sind sehr viel schneller als USB-Sticks und halten auch mal Stöße sowie Stürze aus, weil keine mechanischen Komponenten verbaut sind. Ein gutes 2,5 USB 3.0 Gehäuse gibt es für 8 Euro.
Seine IT auf refurbished Geräten aufbauen zu lassen ist also ohne Probleme möglich und für kleine Firmen, die nicht viel Geld investieren und auch das schnell wieder drin haben wollen, eine sehr gute Alternative zu Verträgen mit Dell, HP, etc.