Agents

Auteur schrijft eigen layout-switcher voor Mac met behulp van AI-agent

12 oktober 2026 · 2 min leestijd

Ook gepubliceerd in Svenska

a man wearing a headset sitting in front of a computer
Vagaro / Unsplash

In november 2017 werd Punto Switcher voor Mac stilgelegd. De auteur print dagelijks Russisch en Engels, en de foutmelding 'ghbdtn' in plaats van 'hallo' komt dagelijks twee tot drie keer voor. In juni besloot hij een eigen switcher te schrijven. Het project groeide naar 184 commits, 18.290 Swift-regels in de applicatie en 12.592 regels testcode. De applicatie is gratis en de code is open source onder de MIT-licentie.

De auteur beschreef diverse alternatieven, waaronder Caramba Switcher, een commerciële versie van de oorspronkelijke Punto, en Keyboop, een open-source correctietool die automatisch ingrijpt. Een andere optie, RuSwitcher, converteert alleen het laatste woord of een geselectieerd stukje tekst via de Alt-toets, maar schakelt de layout niet om.

De auteur's eigen oplossing werkt op twee niveaus: directe correctie tijdens het typen zonder toetsencombinatie, en controle op woordgrenzen. Het systeem leert van de gebruikerswoorden en maakt geen gebruik van een netwerk, behalve voor een optionele update-check.

De achtergrondapplicatie verschijnt in de menubalk zonder Dock-icoon. Het registreert toetsaanslagen via CGEventTap en herkent de bedoelde taal. Bij een foute layout verwijdert het het foutieve woord en schrijft het correct over. Snelle toetsen zijn onder andere: een enkele Shift-toets schakelt de layout, een dubbele Shift converteert het laatste woord of de selectie, en Links Shift plus Rechts Shift schakelt automatisch correctie aan of uit. Daarnaast zijn er app-specifieke profielen en een undo-functie via Cmd+Option+Z.

Alle door de applicatie verzamelde gegevens blijven op de Mac. Netwerkverkeer is beperkt tot één JSON-bestand per dag voor updates, indien de gebruiker dit inschakelt.

Bij het nemen van een beslissing over een woord worden drie stappen gevolgd. Allereerst controleert een Bloom-filter (FNV-1a, dubbele hashing) of het woord in een verzameling van ongeveer 697.000 Engelse en Russische woorden valt. Elk positief resultaat wordt vervolgens bevestigd met een exacte binaire zoektocht in een gesorteerde lijst. Ten tweede worden bigrammen geanalyseerd: onmogelijke lettercombinaties in de huidige layout fungeren als sterke signaal. Ten derde wordt de woordfrequentie en context gebruikt; het vorige woord beïnvloedt de taal van het volgende.

Soms mislukt correctie. De Bloom-filter had een foutpercentage van 0,5 procent, wat leidde tot beschadigde Russische woorden in de eerste drie maanden. Binnen twee dagen veranderden drie Russische typfouten in onleesbare latijnse teksten. De auteur herstelde de filter door deze te behouden als alleen voorfilter, gevolgd door exacte zoektocht. In spelmodi werd de browser permanent vastgelegd, waardoor correctie stopte. Hierdoor werden 'dode' Shift-toetsen gegenereerd. Daarnaast veroorzaakte geluidsafspeling van NSSound op de hoofdthread dat correctie voor tien seconden stopte, omdat de toetsaanslagen werden gemist. Tot slot konden door een installatiefout drie gelijktijdige applicatie-exemplaren optreden, wat werd opgelost door bestandsvergrendeling.

De auteur heeft vijf storingen gevolgd door simpelweg te typen; geen van de storingen werd door een code-agent gedetecteerd.