blog.kanedo.net

Notitz vom Mar 19, 2025

Kleiner iOS-App-Tipp: Geotag Alpha.

Mit dieser App erhalten (relativ neue) Sony-Mirrorless-Kameras GPS-Koordinaten für jedes Bild. Ein Feature, das - wie ich feststellen musste - die Nutzung meiner Kamera deutlich erhöht hat.

Mir ist erst durch diese App aufgefallen, wie groß die mentale Hürde war, die GPS-Koordinaten (circa) nachzutragen. Es ist nun aber so, dass der Ort eines Bildes zusammen mit der Zeit die wichtigsten und nützlichsten Metadaten sind.

Das Gute an Geotag Alpha ist, dass es einfach funktioniert. Einmal eingerichtet muss ich nur noch das iPhone dabei haben, und der Rest funktioniert ohne Interaktion (und wir wissen alle: Das ist die beste Interaktion).

Diese App kann man zwei Wochen lang kostenlos testen und dann entweder als Abo oder einmaligen Kauf freischalten.

Notitz vom Feb 17, 2025

A year of uv: pros, cons, and should you migrate

Eine gute Übersicht über uv und alle Vor- und Nachteile.

Das tl;dr des Artikels fasst es recht gut zusammen:

My conclusion is: if your situation allows it, always try uv first. Then fall back on something else if that doesn’t work out.

It is the Pareto solution because it’s easier than trying to figure out what you should do and you will rarely regret it. Indeed, the cost of moving to and from it is low, but the value it delivers is quite high.

Ich benutze uv auch immer mehr und es ist so viel schneller als alle anderen tools.

Notitz vom Feb 8, 2025

jekyll.nvim hat ein kleines Feature dazugelernt: Drafts und Promote.

Hat Spass gemacht, ein bisschen mehr lua und neovim zu lernen. Dass ich so einfach einen file-picker mit telescope einbinden kann, war eine nette Überraschung.

Homeassistant Blueprint: Light Toggle with Majority Vote

Wir benutzen zu Hause Homeassistant, um eine handvoll Lichter zu steuern. Ich mische da wild ESPHome-basierte Relays und Zigbee-Lampen. Das wichtigste Feature an Homeassistant ist uns eine Gruppe an Lampen gemeinsam zu steuern.

Das geht auch sehr leicht und relativ günstig mit den Ikea Tradfri Schaltern. Solange die auch nur An/Aus schalten ist alles wohldefiniert und funktioniert sehr zuverlässig.

Im Wohnzimmer allerdings benutzen wir eine Fernbedienung, die toggled (Soweit ich das sehe, gibt es die gar nicht mehr bei Ikea… schade) und schon seit jeher den Blueprint von frenck.

Es gibt dabei aber einen Edge-Case, wenn ein oder mehrere der Zigbee-Lampen den Schuss nicht hört. Dann sind manche Lampen an und manche aus. Toggled man diese jetzt, dann springen sie nur hin und her.

Das ist aber nie das gewünschte Verhalten. Jedenfalls bei uns nicht. Ich habe es heute endlich geschafft, den Blueprint so anzupassen, dass die Mehrheit der Lampen entscheidet, was der nächste State ist.

Wenn also mehr als die Hälfte der Lampen angeschaltet sind, wird der Toggle alle ausschalten. Sind genau gleich viele an und aus, werden alle angeschaltet.

Die Logik ist sehr einfach, aber die Blueprint/Homeassistant-Dokumentation ist so spartanisch und die Debugging-Tools auch, dass ich bis heute gebraucht habe, um es endlich umzusetzen.

Ich habe den Blueprint für alle als Gist auf Github veröffentlicht.

Um ihn zu benutzen, einfach auf Blueprint hinzufügen klicken und als URL https://gist.github.com/kanedo/913217eb8ae2040a48b63afa57161456 angeben.

Notitz vom Feb 5, 2025

Flavors of overfitting

However, I still think we can use the Soviet Tank Problem as a machine-learning Aesop fable. Is this a parable of overfitting? What word would we use here to describe that the machine learning algorithm is latching on to the wrong “concepts” in the train/test corpus? The issue here seems to be the data is not fully representative of how we will evaluate the algorithm in the field. […] The problem is you collected data that was insufficient to pin down the prediction problem for a machine learning system. Because pattern recognition is atheoretical, the only way we can articulate our evaluation expectations is to declare data is representative and sufficient for statistical pattern recognition. In other words, the Soviet Tank Problem is an evaluation problem.

This! This happens all the time.

Jekyll Neovim Plugin

Ich blogge mit Jekyll und benutze zwei Posttypes: Posts und Notes. Posts haben einen Titel und sind im Allgemeinen etwas länger. Notes sind nur kleine Snippets.

Um einen neuen Post oder Note anzulegen, muss ich Dateien im richtigen Format mit dem richtigen Namen erzeugen. Bei den Posts ist es das Datum und der Titel, bei Notes das Datum mit einem random slug.

Um die Neovim API besser zu lernen, habe ich kurzerhand ein kleines Plugin geschrieben. Das erzeugt zwei UserCommands :JekyllPost und :JekyllNote. Im Grunde ist das Plugin ein einfaches Template/Snippet Plugin und vermutlich hätte ich das mit einem anderen Plugin auch lösen können. So ist es ein kleines Plugin geworden und ich habe viel über die lua API von Neovim gelernt.

Wer es auch benutzen möchte, findet es auf Github kanedo/jekyll.nvim. Es war das erste mal, dass ich mehr als zwei Zeilen lua geschrieben habe. Das Plugin ist Null Konfigurierbar und ich glaube auch nicht, dass ich das ändern werde.

Spellchecking in Neovim

Ich versuche gerade mehr zu schreiben. Mir fiel das schon in der Uni schwer und jetzt habe ich wenig Gelegenheit zum Üben. Damit ich wenig Ausreden habe und einfach überall Schreiben kann möchte ich Neovim als meinen Editor benutzen.

Vim per Default auch schon ein sehr guter Editor um Prosa zu schreiben, aber Rechtschreibung und Grammatik war noch nie meine Stärke.

Aber natürlch gibt es ein Spellchecker-Plugin für Neovim. Of course …

ltex language server

Wir benutzen als LSP ltex (ich verwalte alle LSPs mit mason.nvim). Das funktioniert auch out-of-the-box. Allerdings schreibe ich diesen Blog ja in Deutsch, aber die meisten anderen markdown Texte in Englisch.

Damit ich zwischen den Sprachen wechseln kann habe ich mir zwei keymappings gebaut:

    lspconfig.ltex.setup {
      settings = {
        ltex = {
          language = "en-US"
        }
      },
      on_attach = function ()
        vim.keymap.set("n", "<leader>mse", function ()
          vim.opt.spelllang = "en"
          local ltexSettings = vim.lsp.get_active_clients({ name = "ltex" })[1].config.settings
          ltexSettings.ltex.language = "en-US"
          vim.lsp.buf_notify(0, "workspace/didChangeConfiguration", { settings = ltexSettings })
        end)
        vim.keymap.set("n", "<leader>msd", function ()
          vim.opt.spelllang = "de"
          local ltexSettings = vim.lsp.get_active_clients({ name = "ltex" })[1].config.settings
          ltexSettings.ltex.language = "de-DE"
          vim.lsp.buf_notify(0, "workspace/didChangeConfiguration", { settings = ltexSettings })
        end)
      end
    }

Jetzt kann ich mittels <leader>msd das Spellchecking auf Deutsch umstellen und mit <leader>mse zurück auf Deutsch.

Wenn die Markdown Dokumente ein YAML Frontmatter haben, kann man LanguageTool auch sagen welche Sprache das Dokument hat. Das geht ganz einfach mit

---
layout: post
title: "Spellchecking in Neovim"
date: 2025-01-28 13:33:43 +0100
lang: de-DE
---

Notitz vom Jan 27, 2025

Heute hatte ich ein kleines Problem mit Neovim: Ich habe spellcheck als Teil meiner neovim config für markdown aktiviert.

Was ich nicht wusste: Damit funktioniert der automatische download für fehlende Wörterbücher nicht.

Workaround: Neovim einmal ohne config starten.

nvim --clean

Danach, set spell und set spelllang=de eingeben und den prompt mit Y bestätigen.

Source

Brotlog 27.01.2025: Back to basics

Brotlog 27.01.2025: Back to basics

Ein reguläres Roggenmischbrot. Keine Saaten aber dafür bessere Form.

In Krume und Kruste, aus dem das Milchbrot Rezept ist, hat deutlich bessere Fotos zur Formgebung. Das habe ich einfach auch bei diesem Teig benutzt, auch wenn der sehr viel weicher war.

Notitz vom Jan 26, 2025

Nur falls ich mal wieder rvm auf einem Mac installieren muss und es nicht geht:

rvm install 3.3 --with-openssl-dir=$HOME/.rvm/usr

Source