Journal und Photoblog
von Markus Kniebes

Hallo, mein Name ist Markus. Dies ist mein Weblog, Journal, Photoblog und persönliche Seite ohne Werbung, Tracking, Cookies und Bullshit.

Husemann Karree

Das Viktoria Karree Husemann Karree an der Viktoria Straße am Husemann Platz wurde am 19.10. eröffnet und es steht tatsächlich nicht leer, sondern es gibt schon ein paar Geschäfte. Anstelle von Decathlon ist nun Woolworth als Ankermieter mit einer Filiale vertreten. Weiter gibt es einen REWE Markt und Kult? - kA. bin ich zu alt für...

Husemann Karree vom Husemannplatz aus gesehen
Google Pixel 7 Pro · Pixel 7 Pro back camera 1.95mm f/2.2 · f/2.2 · 1.95mm · · ISO 49 · OpenStreeMap

Aber was mich eigentlich angetrieben hat, diese paar Zeilen zu schreiben ist meine Enttäuschung darüber, dass der REWE Markt trotz großer Fläche auch wieder keine Frischetheke hat.

Ja, es sind die kleinen, unpolitischen Dinge, die mich antreiben...

Überschreiben existierender Shopware Storefront Javascript Plugins

Trotz der Info Each JavaScript plugin can only be overridden once. If two Shopware plugins try to override the same plugin, only the last one of them will actually work. (Override Existing Javascript) hat mich irgendein Gedanke geritten, das könnte mehrfach gemacht werden.

Und so wollte ich einfach das OffCanvasCartPlugin aus der Storefront ein klein wenig erweitern und die Eingabe einer Postleitzahl im Offcanvas Cart ermöglichen - manchmal zur Lieferkostenberechnung unablässlich - und dabei die Infrastruktur zum Updaten von Feldern nutzen, die das Plugin schon mitbringt. Also einfach kurz das src/plugin/offcanvas-cart/offcanvas-cart.plugin extended, meine paar Methoden hinzugefügt und fertig. Dachte ich.

PluginManager.override('OffCanvasCart', 
    ZipExtensionOffcanvasCartPlugin, '[data-offcanvas-cart]'
);

Ich war wohl nicht der einzige, der das dachte. Beispielsweise im SwagAmazonPay Plugin wird das Offcanvas Dingelchen auch schon überschrieben. Und gemäß dem Motto "Die Letzten werden die Ersten sein" gewinnt natürlich das Plugins, das die letzte Überschreibung durchführt. Das war nicht meins.

Letztlich bleibt einem nichts anderes übrig die eigenen Erweiterung als neues Plugin zu registrieren. Allerdings muss man dann auch darauf achten, in dem selbst registrierten Plugin nicht nochmal alle Events erstellt werden, so dass der Offcanvas zwei Mal geöffnet wird etc. In diesem speziellen Fall mit dem Offcanvas Plugin war das einfach, indem ich die init() überschrieben habe ohne einen Aufruf von super.init()

export default class ZipExtensionOffcanvasCartPlugin
        extends OffCanvasCartPlugin {
    init() {
        this.client = new HttpClient()
        this._registerZipTriggerEvents()
    }

    _registerZipTriggerEvents() {
        this.$emitter.subscribe('offCanvasOpened', () => {
            const forms = DomAccess.querySelectorAll(
                document, '.js-offcanvas-cart-add-zip', false
            )
            if (forms) {
                Iterator.iterate(forms, 
                    form => form.addEventListener(
                        'submit', this._onAddZip.bind(this))
                    )
            }
        });
    }

    _onAddZip(event) {
        event.preventDefault()
        const form = event.target
        const selector = '.js-offcanvas-cart-zip'

        this.$emitter.publish('onAddZip')

        super._fireRequest(form, selector)
    }
}

Die Zip in die ShippingLocation über einen SalesChannelContextFactoryDecorator in den SalesChannelContexts zu bekommen und der vernünftige Umgang damit im Checkout war dann im Vergleich zu dem Javascript-Theater dann der wesentlich entspanntere Teil des Ganzen. Und ist vielleicht später mal einen Post wert.

Drei Links am Samstagmorgen

Internet Artefacts ist eine kleine Heimreise auch die früheren Jahre des internets. Vielleicht könnte man auch sagen durch die Pionierjahre des Internets. (Via daMax)


‘Ghost Rivers’ Visualizes a Mile-Long Stream Buried Deep Beneath Baltimore - Durch zehn Installationen mit einer blauen Linie auf dem Gehweg visualisiert Bruce Willen den einstigen Verlauf eines Baches, der Heute unter der Erde verborgen liegt und zeigt die Diskrepanz zwischen Natur und Stadtleben in Baltimore.


Ich hätte nicht angenommen, dass die Zeitumstellung vielen solche Probleme bereitet. Da mein elektrisches Gedöhns meist automatisch umstellt, gibt es Umstellungen, die ich erst später mitbekommen habe.

Bienenstock auf dem Friedhof

Zwei Stapel Binenkästen nebeneinander zwischen den Bäumen
Nikon Z 7 · Zeiss Makro-Planar T* 2/100 ZF.2 · f/2.0 · 100mm · 1/200s · ISO 1000

Ich glaube, Bochum Weitmar besteht nur aus Friedhöfen.

In Weitmar Mitte sind zwei rechts und links von der Hattinger Straße und ein Stück weiter vorm Weimarer Holz nochmal das gleiche Bild. Auch jeweils rechts und links von der Hattinger Straße auf gleicher Höhe.

Und auf dem einen - auf meiner Seite des Hattinger Straße - direkt am Weitmarer Holz, habe ich den Bienenstock gesehen.

Ich habe nun Licht im Wohnzimmer

... und nicht nur am Tag. Zumindest, wenn ich eine passende Birne hätte.

Licht Im Wohnzimmer

Ich hätte den Eckstrahler ohnehin lieber mit einem "unsichtbaren" Kabel. Keine Ahnung wie ich das hinterher verstecken soll. Naja, vielleicht werden die auch einfach jeweils hinter einem Lautsprecher stehen, dann sieht man die Dinger eh nicht.

Oder ich benutze einfach weiter einen Baustrahler. Hat so einen Industrial-Look...

Friedrich-Lueg-Haus

Friedrich Lueg Haus
Nikon Z 7 · Voigtländer Nokton 58 mm f/1.4 SL II · f/5.6 · 58mm · 1/160s · ISO 64

Das Friedrich-Lueg-Haus durch eine Häuserlücke von der Viktoriastraße aus gesehen.

Vor etlichen Jahren war eine die obere Etagen der Friedrich-Lueg-Haus Sitz eines ehemaligen Arbeitgebers. Fühlt sich allerdings mittlerweile an wie aus einem anderen Leben.

Mein altes Photoblog läuft wieder.

Bei der Änderung meiner Anschrift auf meinen Seiten, bin ich auch wieder auf mein altes Photoblog gestoßen. Eigentlich war das nur noch ein Redirect auf mein aktuelles.

Aber das muss ja nicht so bleiben und so habe ich es technisch wieder lauffähig gemacht. SSL aktiviert und ein paar Fehler gelöst. Allerdings läuft es nach wie vor auf PHP 5.6 und das Layout ist etwas in die Jahre gekommen. Naja, man benötigt schon eine Lupe um auf einem 5K Monitor noch irgendwas lesen zu können. Auf mobiles Geräten ist es kaum benutzbar. Aber das ist halt ziemlich genau 16 Jahre alt. Der erste Eintrag stammt vom 4. Oktober 2007. Damals war mobiles Surfen noch kein echtes Thema.

Ich habe keinesfalls vor, das alte Blog mit neuem Inhalt zu füllen oder das Layout zu überarbeiten damit es etwas zeitgemäßer oder überhaupt zugänglicher wird. Nein, eigentlich habe ich das nur aus nostalgischen Gründen gemacht. Es spiegelt halt meinen ersten Zugang zur digitalen Fotografie wieder.

Ich fürchte, ich war ein Opfer dieser Umsonst-Mentalität.

Ja, es ist verlockend alles möglichst billig oder gar kostenfrei haben zu wollen. Man hat sich daran gewöhnt, also ich zumindest ich ein wenig. Das ist ähnlich den absurd kurzen Lieferzeiten, die Lieferdienstleister oder der Onlineversandhandel aka Amazon zustande bringen. "Was?! ich habe das Gestern bestellt. Warum ist das Heute noch nicht da?!" Aber darum geht es mir gerade nicht.

Lange Zeit habe ich mich dagegen gesperrt auf Tidal Hifi Plus upzugraden, weil Tidal Hifi ja nun mal auch CD Qualität bietet und immerhin 10 Euro günstiger ist. Wenn ich allerdings darüber nachdenke, wie viele CDs ich "früher" im Monat gekauft habe, sind die 10 Euro ein Hühnerschiss. Selbst wenn ich die gekauften FLACs im Monat noch hinzuziehe ist das immer noch günstiger als das Vermögen, das ich für CDs ausgegeben habe.

Es ist nicht so als würde ich gar keine CDs mehr kaufen. Aber es ist seltener geworden. Die letzte CD war das Album Electric Sun. Und das war im April. April! Das ist fast ein halbes Jahr her.

Unknown database type enum requested

Bei der Installation einer Shopware App, die Entities (Resources/entities.xml) enthält, wird mir bei Shopware 6.4 mitunter ein lapidares Unknown database type enum requested, MariaDb1027Platform may not support it. auf der Konsole entgegen gehustet. Das tritt auf, wenn man MariaDB benutzt und Plugins installiert sind, die Datenbanktabellen erstellen, die Felder des Typs EUNUM haben. Shopware scheint sich hier wohl Doctrine zu bedienen um Entities aus der XML Datei der App anzulegen.

Wenn es sich um eine fremdes Plugin mit den betroffenen Tabellen handelt, mache ich es mir idR. einfach und wandle die ENUM Spalten in ausreichend große VARCHAR Spalten um. Und dann klappt auch der Spaß mit der App Aktivierung.

Es ist per SQL Query relativ einfach die "schuldigen" Tabellen und Spalten zu finden:

select col.table_schema as database_name,
     col.table_name,
     col.ordinal_position as column_id,
     col.column_name,
     col.data_type,
     trim(leading 'enum' from col.column_type) as enum_values
from information_schema.columns col
join information_schema.tables tab 
    on tab.table_schema = col.table_schema
        and tab.table_name = col.table_name
        and tab.table_type = 'BASE TABLE'
where col.data_type in ('enum')
    and col.table_schema not in (
        'information_schema', 
        'sys',
        'performance_schema', 
        'mysql'
    )
    and col.table_schema = 'Meine_Shopware_Datenbank' 
order by col.table_schema,
    col.table_name,
    col.ordinal_position;

Meine_Shopware_Datenbank muss natürlich durch den entsprechenden Namen der Shopware DB ausgetauscht werden.

Update auf Android 14

Ganz toll! Da sitzt man kränkelnd zu Hause rum, hat nichts Besseres zu tun als dem Handy beim Update auf Android 14 zuzusehen und sich zu freuen, gleich mit den neuen KI-generierten Text-Bild-Diffusionsmodell-Wallpapern zu spielen.

Wie groß die Enttäuschung doch war als ich die Option auf meinem Pixel 7 Pro nicht gefunden habe, da das Feature wohl nur auf Pixel 8 Geräten zu finden ist.

Ansonsten gibt's nicht viel Spannendes. Ich habe meinen 256-stelligen Zugangscode durch eine 6-stellige PIN ersetzt. Das war's dann auch schon. Ich leg mich wieder hin...

Serienjunkie

Manchmal findet sich trotz unzähliger Streaming-Dienste und eine Vielzahl von Angeboten nichts, was mich hinter'm Ofen hervorlocken könnte und dann kann ich mich wieder nicht entscheiden in welcher Reihenfolge ich was sehen möchte.

Amazon Prime hat mich mit ausreichend vielen Trailer für die zweite Staffel von Rad der Zeit beschallt, so dass ich der ersten Staffel nochmal eine Chance gegeben habe. Zum Start der ersten Staffel hatte ich schon einmal reingeschaut und damals konnte mich das nicht überzeugen. Aber ich habe die erste Folge durchgehalten und dann die zweite und dann hatte ich mich irgendwie dran gewöhnt und mittlerweile habe ich bis zur siebten Folge der zweien Staffel aufgeholt, er letzten veröffentlichten Folge. Letztlich ist es nur die Neugierde wie es weiter geht, weniger das Mitfiebern, was mich bei der Stange halt.

Mit The Continental: Aus der Welt von John Wick zeigt Amazon Prime mit einer Miniserie von drei Folgen wie Winston an das Continental gekommen ist. Bisher sind zwei Folgen veröffentlicht und die haben mir sehr gut gefallen. Kulisse, Handlung und Spannung sind da.

Und wie sollte es anders sein, habe ich mir extra für die zweite Staffel von Foundation wieder Apple TV gegönnt. Und es hat sich gelohnt. Eine gute Vorlage scheint bei der Umsetzung einer Serie durchaus hilfreich zu sein. Denn im Gegenzug ist Infiltration (auch auf Apple TV) der Inbegriff der Langeweile. Und damit ist Ahsoka auch nicht mehr auf Platz eins der IMHO langweiligsten Serien, die ich angefangen habe.

Ab und an schaue ich eine Folge von Mayor of Kingstown mit Jeremy Renner. Schwer aber interessante Atmosphäre.