knuspermagier.de
Er bloggt noch? Krass!

Oculus Go

Manchmal bin ich wirklich ein Extrem-Late-Adopter. So zum Beispiel beim Thema Virtual Reality. Wann kam die erste Oculus und die erste HTC Vive raus? Gefühlt vor Ewigkeiten.

Ich hatte nie Lust so viel Geld auszugeben um ein Produkt zu testen, das in den Kinderschuhen steckt und es hat mich auch nicht so sehr gereizt, das ich motiviert genug gewesen wäre, Freunde zu besuchen, die verrückt genug waren direkt am Anfang so ein Gerät zu erwerben.

Nun begab es sich, dass vor ein paar Monaten die Oculus Go rauskam, ein standalone VR-Gerät, mit dem man sich den ganzen Kram mal angucken kann, ohne 800€ für die Brille und 2.000€ für einen Gaming-PC auszugeben.

Ich war kurz gehyped und überlegte schon, ob es wohl 300€ Wert sein könnte, las ein paar Reviews, die sagten, dass es ganz ok ist, aber doch wesentlich schlechter als die teuren Brillen und legte die Idee erstmal zur Seite.


Wochen später: Ich werde auf Grover aufmerksam gemacht. Dort kann man Kram mieten, auf Monatsbasis. Sie haben die Oculus Go im Angebot und ich finde noch einen Gutschein und denke mir, dass endlich die Zeit gekommen ist, um die Geschichte mal auszutesten.

Ich bestelle also, warte mehr als eine Woche, obwohl von einer 3-6-tägigen Lieferzeit die Rede ist und am Ende ist der Postmann auch noch zu faul die paar Treppenstufen bis zum Büro zu laufen – und einen Zettel in den Briefkasten zu legen. Wie auch immer. Samstags gehe ich also zur Post, hole das viel zu große Paket ab und packe den Kram aus. Das Paket ist noch zugeschweißt, also hatte anscheinend noch keiner die Brille auf. Oder Grover verschweißt einfach wieder alles.


Ausgepackt, geladen, Oculus App geladen. Die Einrichtung verläuft relativ problemlos, bis auf das 50-sekündige Sicherheitsvideo, das man angucken muss, ohne die Möglichkeit es zu skippen. Laaame. 50 Sekunden meines Lebens!

Ich hab natürlich keine Lust im umfangreichen Oculus Shop noch mehr Geld auszugeben, also lade ich mir erstmal Netflix und die erste Achterbahn-App, die ich finden kann.

Brille auf und die Enttäuschung kann beginnen.

Die Displays sind so schlecht, so unglaublich schlecht. Es wirkt, als würde man mit 30cm Abstand vor so Röhrenfernsehern aus den 80er Jahren sitzen. Riesige Pixel. Also ich weiß, dass Röhrenfernseher keine Pixel haben, aber wenn man da ganz nah rangeht, sieht man ja schon einzelne unscharfe Bildpunkte und genau so sieht es in der Go aus.

Die Achterbahn-App ruckelt mega, und läuft gefühlt mit 15 FPS. Ich hatte mich auf verrückte VR-Gefühle gefreut und dachte, ich falle vielleicht vom Stuhl, so wie man das kennt. Bei 15 Frames pro Sekunde und den riesigen Pixeln kommt allerdings keine Achterbahn-Atmosphäre auf. Statt vom tollen VR-Gefühl wird mir eher Übel vom Ärger darüber, dass ich auch noch Geld für diesen Mist bezahlt habe!

Ich probierte noch ein, zwei andere von den kostenlosen Games, die alle ebenfalls ziemlich langweilig waren, oder ruckelten, oder beides.

Zum Schluss schaute ich mir noch Netflix an. Erstmal muss man natürlich sein sehr langes Passwort über eine mittelmäßige VR-Tastatur eingeben, danach landet man in einer Art virtuellem Wohnzimmer, mit großer Leinwand. Man sitzt allerdings so nah, dass man den Kopf nach unten neigen muss um Untertitel zu lesen, ansonsten sind sie total verzerrt. Das selbst HD-Serien aussehen, wie aus den 80er Jahren ist bei der bereits angesprochenen Display-Auflösung natürlich klar.


Ich hab das Ding zwar für einen Monat gemietet, aber ich denke, ich packe es jetzt wieder ein. Davon, dass es ein großer Haufen stinkendes Plastik ist und sich anfühlt, wie eine Mickey Maus-Heft-Beilage, will ich mal gar nicht anfangen.

Jaa, klar, werden jetzt einige sagen, es ist halt das Low-Budget-Einsteigerding. Mag sein. Vielleicht sind meine Augen auch einfach zu Retina-Display verwöhnt und ich bin ja generell nicht so einfach zu begeistern. Mir hat das Produkt auf jeden Fall keine Lust gemacht, jetzt 800€ für ein richtiges VR-Produkt auszugeben, und das sollte doch wahrscheinlich das Ziel sein?

Wie auch immer. Vielleicht schaue ich mir, wenn die Zeit reif ist, nochmal ein richtiges VR-Headset an einem teuren Gaming PC an und falle bei einer Achterbahnsimulation vielleicht auch vom Stuhl, wie es sich gehört. Die Go kann ich auf jeden Fall nicht empfehlen.

Wenn ich lese, dass zu einer Veranstaltung das Mitbringen von Fingerfood erwünscht ist, denke ich immer zuerst an Fischstäbchen. Vielleicht, weil sie auf Englisch Fish Fingers heißen. Die Vorstellung, dass man am Ende mit einer Pfanne Fischstäbchen im Rucksack ankommt, finde ich allerdings ziemlich absurd. ✌🏻

Side-Project-Tagebuch: recex (2)
Facettensuche mit RediSearch

Ihr kennt das. Man sucht beim Onlinehändler seines Vertrauens nach Schuhen, gibt einen Suchbegriff ein und neben den Suchergebnissen erscheinen weitere Filteroptionen, mit denen man das Ergebnis weiter einschränken kann. Damit man direkt bescheid weiß, steht auch direkt daneben, wie viele Suchergebnisse es für diesen Filter noch gibt.

Diesen Quatsch nennt man gemeinhin Facettensuche und an und für sich ist das eigentlich ganz praktisch. Leider ist es nicht mal eben durch den Aufruf von zwei PHP-Funktionen implementiert, daher habe ich bisher immer davon abgesehen, so etwas bei einem einer Side-Projects einzubauen. Also klar, es ist auch nur in wenigen Fällen sinnvoll, aber zum Beispiel fin, meine Finanzverwaltung, könnte sowas sicher gebrauchen.

Nun beschäftige ich mich seit gestern ja mit meinem neuen Projekt recex und natürlich soll man da auch nach Rezepten suchen können. Von Anfang an war mir da klar, das ich auch direkt nach Zutaten suchen will und nicht nur wildes Matching von Wörtern im Rezepttitel haben möchte.

Glücklicherweise basiert das Backend von recex auf Blogchain — ich kann also mit Fug und Recht behaupten, meine Rezepte in einer Blogchain zu speichern — und das bedeutet, RediSearch ist bereits angebunden, wie schwer kann es also sein, die Suche entsprechend umzustricken?

Index anlegen

Als erstes musste ich einen neuen Index anlegen. Neben Titel und Text (in dem Fall die Zubereitungsschritte des Rezepts) möchte ich auch Tags (“hellofresh“, “wegtuppern“) und Zutaten (“Zwiebel“, “Kartoffel“) indizieren. Leider unterstützt ethanhann/redisearch-php das Tag-Feld noch nicht, also erstelle ich den Index manuell per redis-cli:

FT.CREATE recipes SCHEMA title TEXT text TEXT ingredients TAG SORTABLE tags TAG SORTABLE

Das Indizieren der Rezepte ist wieder easy gemacht, denn dabei sind die TAG-Felder nur Komma-separierte Strings. Das funktioniert also über die PHP-Library

Query

Die Query-Syntax ist leider etwas kompliziert. Das RediSearch-Feature, mit dem wir unsere Facetten bauen heißt Aggregations und ist ziemlich mächtig.

Die Query sieht am Ende etwa so aus:

FT.AGGREGATE recipes "*" APPLY split(@tags) AS tag GROUPBY 1 @tag REDUCE count_distinct 1 @tag AS count SORTBY 1 @count DESC

Die Dokumentation ist zwar eigentlich gut, ich brauchte aber trotzdem einen Moment, bis ich hier auf die richtige Kombination von Wörtern kam. Also:

  • recipes ist der Name vom Index
  • "*" ist die Such-Query. In diesem Fall einfach “alles”
  • APPLY wendet eine Funktion auf das Ergebnis an, in diesem Fall…
  • split(@tags) …wird das Feld tags gesplittet (anhand der Kommas!) und mit AS tag im Verlauf tag genannt.
  • GROUPBY 1 @tag gruppiert nach dem neu erstellten tag-Feld
  • REDUCE count_distinct 1 @tag Zählt die Vorkommnisse jedes Tags und speichert es AS count
  • SORTBY 1 @count DESC sortiert den Spaß absteigend

Etwas verwirrend: Man muss vielen Befehlen (GROUPBY, REDUCE, etc) sagen wie viele Argumente folgen. Daher die ganzen 1-er. Fand ich am Anfang etwas verwirrend, ist aber wohl eine Limitierung des Redis-Command-Syntax.

Leider kann die PHP-Library auch diese Aggregations noch nicht, daher musste ich die Query auch händisch in meinen Code aufnehmen, was ganz fürchterlich aussieht, weil rawCommand jedes Wort einzeln erwartet, warum auch immer:

$result = $redis->rawCommand('FT.AGGREGATE', 'recipes', $query,
    'apply', 'split(@tags)', 'as', 'tag',
    'groupby', '1', '@tag',
    'reduce', 'count_distinct', '1', '@tag', 'as', 'count',
    'SORTBY', '1', '@count', 'desc'
);

Update: Die Library kann doch schon Aggregations, ich war nur zu Blöd es zu finden 😇

Das Ergebnis ist auf jeden Fall ein Array, mit allem, was wir wissen wollen. So einfach! Ist es nicht schön?

Zusammen mit einem kleinen Query-Parser kann man sich sowas bauen, und fröhlich nach Rezepten suchen:

(video file:facet.mov mode:loop)


RediSearch ❤️

Side-Project-Tagebuch: recex (1)

Also, der Name ist natürlich noch Work-In-Progress. Ich fand es witzig, weil es wie “regex” klingt. Aber natürlich hat der Recipe Explorer erstmal nichts mit Regulären Ausdrücken zu tun.

Folgendes Problem: Seit mehr als einem Jahr ernähren wir uns eigentlich fast nur noch von Gerichten, die über eine der mittlerweile über einhundert HelloFresh-Rezeptkarten gekocht wurden. Das ist an und für sich ziemlich gut, denn, wenn es ans Einkaufen geht, geht man halt zum Stapel, zieht ein paar Karten und sucht sich aus, was man essen will — im Grunde fast so, wie die wöchentliche Wahl der drei Gerichte auf der HelloFresh-Webseite (ja, für neue Inspirationen, und aus Faulheit, kommt da immer noch fast jede Woche ein Paket).

Umso mehr Karten es werden, wird es natürlich immer anstrengender. Die Stapel werden groß und schwer und man hat keine Lust mehr sie zu transportieren. Außerdem ist es nervig, die Zutatenliste immer von Hand abzuschreiben und bei vielen Rezepten haben wir mittlerweile Sachen verbessert, die natürlich einfach mit Kuli auf den Zettel notiert wurden.


Als ich Blogchain baute, kam ich schon mal kurz vom Pfad ab und schrieb zumindest ein paar Templates um auch Rezepte anzeigen zu können. Des Weiteren baute ich ganz viel Quatsch, z.B. etwas, das alle Vorkommnisse von Texten wie “für 10-15 Minuten in den Backofen” automatisch durch einen “Timer starten” Button ersetzt. Spielerei!


Ein großer Roadblock war für mich bisher, das ich keine Lust hatte 100 Rezepte abzutippen. Heute fiel mir ein, manchmal braucht sowas bei mir echt lange, dass die HelloFresh-Webseite ja eine (mittelmäßig gut funktionierende) Single-Page-App ist und damit sicher eine REST-API hat, über die man sicher alle Rezepte strukturiert ziehen kann. Denn auf der Webseite sind sie ja auch sichtbar!

Es dauerte keine 30 Minuten und ich hatte alle Rezepte aus der API gepult und lokal zur weiteren Verarbeitung gespeichert. Ein Hoch auf JSON-APIs! Falls ihr ähnliches vorhabt, viel Spaß, die eine Zeile file_get_contents-PHP-Code muss ich wohl nicht auf Github stellen 🤓


Natürlich ist das nur die halbe Miete. Die Datenbasis musste etwas aufgehübscht werden (z.B. gibt es ca. 25 verschiedene Zutaten namens “Salz”), und natürlich brauchte ich ein Interface, das die ganzen Rezepte jetzt anzeigt, ein “Zeig mir zufällig sechs Stück, damit ich drei auswählen kann”-Feature und, das allerwichtigste: Einen Einkaufslisten-Generator, der automatisch alles zusammenfasst und mit einem Button-Klick alles in die “Supermarkt”-Liste in Todist schickt.

Tja, und wie das alles aussieht, zeige ich euch beim nächsten Mal, denn statt den Todoist-OAuth zu implementieren, schrieb ich gerade diesen Post!

Tatsächlich hat happybrush einen sehr guten Supportprozess. Noch bevor man seine kaputte Bürste eingesendet hat, hat man einen Gutschein um sich eine neue bestellen zu können, die auch schnell ankommt. Ich bin gespannt, wie lang die nun hält – die Tatsache, dass der Prozess existiert und so schnell ist, deutet ja auch darauf hin, dass das Problem ziemlich häufig auftritt…

schwarze-berge-1

20181006-151413-pwa-4528.jpg
Ein süßes kleines Nutria

Kaum zu glauben, nach 6 Jahren in Hamburg habe ich es kein einziges mal in den Wildpark Schwarze Berge geschafft. Am Wochenende war es nun aber mal soweit. Es war super gutes Spätsommerherbstwetter und, wenn nicht gerade 100 andere Menschen vor meiner Linse standen, konnte ich auch ein, zwei Fotos der dort ausgestellten Tiere ergattern.

Kann man mal wieder machen!

Elektro-Alptraum

Es ist mal wieder 3 Uhr nachts, und ich denke mir, dass ich nach den letzten sechs Stunden Diablo 2 mal langsam ins Bett gehen könnte. Die Schule ruft!

Pflichtbewusst fahre ich den Computer runter. Also, normalerweise läuft er natürlich die Nacht durch, das hat man ja früher so gemacht, aber ausnahmsweise will ich heute mal ohne das Rauschen des Lüfters schlafen. Doch der “Herunterfahren”-Button macht nichts. Nächster Versuch: Power-Knopf am Rechner. Keine Reaktion. Lange gedrückt halten. 5 Sekunden, 10 Sekunden, 30 Sekunden. Nichts.

Also okay, du hast es nicht anders gewollt schreiend die Mehrfachsteckdose ausschalten. Der Schalter springt direkt wieder zurück, der Lüfter läuft weiter.

Schweißgebadet wache ich auf.


Ich kann mich gut daran erinnern, dass ich diesen Traum als Teenager (also vor 15 Jahren, als ich gerade mal halb so alt war wie jetzt! Hilfe!) mehrfach hatte.

Bisher bin ich im richtigen Leben davon verschont geblieben. Vielleicht hätte ich im Traum auch einfach nochmal versuchen sollen, zum Sicherungskasten zu laufen. Das hätte sicher geholfen.

Gestern Abend hatte ich jedoch ein ähnliches Erlebnis, das mir den Traum direkt wieder ins Gedächtnis schob. Seit ein paar Monaten habe ich ja eine happybrush, also eine elektrische Zahnbürste. Ich bekam die beim Abschluss meiner Zahnzusatzversicherung dazu. Ich hatte ja schon vorher mal eine Oral-B, aber die benutzte ich nach einiger Zeit nicht mehr, weil mir das Vibrationsgefühl in der Hand störte. Die happybrush vibriert ein bisschen weniger.

Jedenfalls ging sie gestern einfach nicht mehr aus. Der Knopf, mit dem man sie normalerweise ausschaltet, tat einfach nichts, die LED, die den Betriebsmodus anzeigt, war einfach aus. Was macht man jetzt? Das Ding ist natürlich so gebaut, dass alles wasserdicht und möglichst nicht reparierbar ist. Ohne grobe Zerstörung kommt man nicht an den Akku.

Ich hoffte zunächst, das sich alles resettet, wenn ich sie einfach in die Ladestation stelle, aber leider kein Erfolg.

Nun stand ich also, nachts um 1 Uhr in der Wohnung und hatte eine laut vibrierende Zahnbürste in der Hand. Wie lang hält der Akku wohl? Wird das Gerät überhitzen und explodieren, wenn es zu lang läuft?

Nach zehn Minuten entschied ich mich, sie auf ein Kissen im Wohnzimmer zu legen, damit die Vibration etwas gedämpft wird und einfach zu hoffen, dass sie über die Nacht einfach aus geht.


Nächster Morgen: Im Wohnzimmer ist Ruhe. Immerhin. Ich schreibe eine E-Mail an happybrush und hoffe auf Austausch. Keine Ahnung, ob es einen Garantie-Anspruch gibt, wenn man etwas als Versicherungsabschluss-Prämie bekommt. Ich bin gespannt!


Während ich diesen Post schrieb sprang die Bürste übrigens einfach wieder an, auf voller Kraft. Allerdings leuchtete auch die LED wieder und der Power-Knopf funktioniert! Juchu, ich kann sie abschalten!

10 Minuten später ging ich Zähne putzen und jetzt geht sie wieder nicht mehr aus. Ist der Akku denn nie leer?

Ich gehe jetzt zu Budni und hole mir eine neue Zahnbürste, ohne Akku. Das ist mir echt zu gruselig.

Canon EOS R

Hier nun endlich mein ausführliches Werk zum Thema EOS R. Weil ich in der Vergangenheit mehrfach darüber schrieb, sind einige von euch ja sicher sehr gespannt, was ich von der neu angekündigten Mirrorless Full Frame-Kamera von Canon halte!

Eins vorab: ich hab sie natürlich nicht gekauft!

Meine Vorstellungen

Aktuell habe ich ja die M50. Die ist auch weiterhin echt süß, nervt mich aber in ein paar Belangen schon sehr:

  • Das Rauschen bei höheren ISO
  • Es fehlt wenigstens ein zusätzliches Einstellrad
  • Bei Auto-ISO kann man keine Mindest-Verschlusszeit definieren, was dazu führt, dass sie immer zu gering ist.

Mein Kopf hatte sich die ganze Zeit gedacht, egal, ist ja nur eine Übergangskamera bis die Vollformat kommt. Die sah für mich nun so aus:

  • Bisschen größer und schwerer als die M50
  • Mehr Rädchen
  • Keine künstlich beschnittene Software
  • EF-Mount
  • 1.999€

Die Realität

Was ich nicht bedacht habe, ist anscheinend die Physik. Vollformat braucht einfach mehr Platz, größere Linsen, damit ein größeres Objektivgewinde, etc, etc.

Die EOS R ist etwa 300g schwerer als die M50, das ist fast doppelt so viel. Das sie ein bisschen größer ist, finde ich nicht schlimm, zwecks Grip und mehr Reglern. Punkt 1 meiner Wünsche-Liste kann ich also, sagen wir mal, zu 75% abhaken.

Sie hat mehr Rädchen, sogar eine komische Touchbar, und wahrscheinlich kann man der Auto-ISO-Option auch sagen, dass sie ein bisschen besser arbeiten soll. Top!

Man kann es Canon natürlich nicht verübeln, dass sie nach 30 Jahren mal ein neues Objektiv-Mount rausbringen wollen. Die RF-Objektive sehen auch alle gut aus, aber auch hier war ich mal wieder überrascht wie viel Glas man offensichtlich braucht um einen Vollformat-Sensor zu bedienen. Die Dinnger sehen riesig aus.

Dazu kommt, dass EF-Objektive natürlich mit Adapter funktionieren, aber an der M50 merke ich, wie nervig das ist. Vielleicht wirkt das an der R nicht so dumm, weil sie halt eh etwas größer ist. Trotzdem blöd, aber man will ja auch nicht alles neu kaufen.

Dazu kommt der Preis, der mit 2.499€ jenseits meiner Grenze liegt. Ich hatte echt nicht damit gerechnet, dass sich Canon traut über den Preis der A7iii zu gehen, aber so ist es nun geworden. Auch verständlich, es ist ja wohl teilweise eine 5Dm4 „ohne Spiegel“, und halt keine 6D. Ich wäre wohl eher die Zielgruppe für letzteres.

Kaufentscheidung

Viel wichtiger als alle Features ist nun allerdings meine Realisierung, dass ich gar keine neue Kamera brauche, haha, wer hätte das geahnt. Warum kaufte ich die M50?

Weil ich eine kleine, leichte Kamera mit guten Video-Features wollte.

Die Tatsache, dass sie einen Cropsensor hat, der mich nervt und den Wunsch nach Vollformat geweckt hat, ist natürlich Quatsch, denn ich habe schon eine große und schwere aber sehr gute Vollformat-Kamera, nämlich die 6D.

Die letzten Wochen zeigten mir auf jeden Fall, dass die nach 4 Jahren noch lange nicht ausgetauscht werden muss. Funktioniert wie am ersten Tag und führt für mich in den allermeisten Fällen zu dem Foto, das ich erreichen wollte.

Jedes Mal, wenn ich die M50 benutze, mit der ich durchaus auch Spaß habe, beschleicht mich noch ein Gefühl, dass da irgendwas noch nicht ausgereift genug ist. Oder nicht snappy genug. Oder zu Spielzeug-mäßig. Das Gefühl, das ich bisher mit jeder spiegellosen hatte. Und es ist mir aktuell keine zweieinhalb Steine wert, auszuprobieren ob es bei der R genauso sein wird, oder nicht.

Die 6D ist einfach wie ein geiler Vorschlaghammer, den man gerne benutzt, die M50 dagegen ist ein kleines Gummihämmerchen. Kann man ab und zu auch gebrauchen, aber ist einfach nicht the real deal.

Meine Grundeinstellung „ich probier mal die kleine Mirrorless und kaufe die Vollformat, wenn sie kommt“ war einfach Käse, denn ich habe nicht beachtet, dass die Vollformat nicht mehr klein sein wird und damit nicht den Need nach einer kleinen Zweitkamera deckt. Ich werde also auf ewig verdammt dazu sein mit einer Cropkamera zu leben, wenn ich etwas Kleines will!

Wie furchtbar ist das denn bitte.

Das war eine weitere Episode aus „Philipps absolut dämliche First-World-Probleme“, schaltet auch beim nächsten Mal wieder ein, wenn ich überlege, wofür ich Geld aus dem Fenster werfe, statt die Welt zu retten.

die-hoehle-der-loewen

Seit der zweiten Staffel schaue ich ja schon ganz gerne die Höhle der Löwen, die deutsche Fassung von Shark Tank.

Es ist einfach ganz witzig anzusehen, wie Frank Thelen sich aufregt oder Ralf Dümmel sich freut wie ein zweijähriger, der ein Eis bekommt, wenn er es wieder geschafft hat, einen Gründer zu überzeugen, ihm sein Produkt für das DS-Produkte-Ramschregal im Bauhaus zu überlassen.

Manchmal sollte es aber vielleicht auch gut sein. Wir sind jetzt in der fünften(?) Staffel und man merkt langsam wirklich, dass VOX keine Gründer mehr findet und so langsam jeden Quatsch nehmen muss. So viel uninteressanten Kram wie in dieser Staffel gab es bisher nicht.

Also, naja, die vorherige Staffel bekleckerte sich auch nicht gerade mit Ruhm. War es jemals besser, oder war es am Anfang nur gefühlt gut, weil es halt neu war?

Trotz allem, ist es wie ein Unfall auf den man sich jeden Dienstag freut, weil man nicht weg schauen kann.