19 Mar 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.
17 Feb 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.
08 Feb 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.
07 Feb 2025
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.
05 Feb 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.
30 Jan 2025
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.
28 Jan 2025
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
---
27 Jan 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.
Danach, set spell
und set spelllang=de
eingeben und den prompt mit Y
bestätigen.
Source
27 Jan 2025
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.
26 Jan 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