DesktopFly <0xF0><0x9F><0xAA><0xB0>

Het breinvenster

Het programma bevat een venster dat het brein van de vlieg visualiseert. Dit bevat 23.210 echte neuron-soma-posities uit FlyWire v783, waarbij live spikes flitsen op de locaties van de neuronen. De twee gloeiende gele markeringen zijn de Giant Fibers: de neuronen die het ontsnappingscommando aansturen. Door op een willekeurige regio te klikken, kan deze worden gestimuleerd.

Wat is gebaseerd op echte data?

Neuronale posities en simulatie

Er worden 23.210 neuron-soma-posities (van de 139.255 in FlyWire v783) gebruikt om het roterende breinvenster te renderen, gekleurd op basis van superklasse (de grove celtype-groepering van FlyWire).

Een circuit van 668 neuronen met circa 19.000 echte synaptische verbindingen (synapsenaantallen, getekend op basis van neurotransmitter-voorspelling) draait als een 1 kHz leaky-integrate-and-fire (LIF) simulatie. Dit circuit bestaat uit:

  • LC4 (104) + LPLC2 (210): visuele neuronen voor looming-detectie (naderende objecten).
  • DNp01 / Giant Fiber (GF) (2): het ontsnappingsneuron.
  • DNa01 + DNa02 (4): stuurneuronen.
  • DNp09 (2): neuronen voor voorwaarts lopen.
  • DNg11 (6): neuronen voor poetsen.
  • MDN (4): neuronen voor achterwaarts lopen ("moonwalker").
  • DNp02/DNp04/DNp11 (6): neuronen voor ontsnappingsmanoeuvres (vleugels).
  • Partnerneuronen: hun 330 sterkste partners, inclusief ascenderende (proprioceptieve) en sensorische (wind) neuronen.

Het ontsnappingsmechanisme

Ontsnapping is niet gescript. De benadering van de cursor wordt vertaald naar looming-input voor de echte LC4/LPLC2-cellen. De vlieg vliegt pas op wanneer de Giant Fiber daadwerkelijk vuurt via zijn echte synapsen. Ongeveer 1.200 synapsen van feedforward-inhibitie werken dit tegen, wat verklaart waarom langzame benaderingen worden getolereerd, terwijl snelle uitvallen leiden tot ontsnapping in circa 4 ms, net als bij het echte dier.

Het lichaam

Het lichaam zelf is procedureel gegenereerd, aangezien FlyWire een connectoom van het brein is en geen lichaamsgeometrie bevat. Het lichaam beschikt over een tripod gait (driepootgang), zichtbare vleugelslag, vlieghoogte-schaling en specifieke houdingen voor poetsen en slapen.

Installatie

Vereisten:

  • macOS 13+
  • Xcode Command Line Tools (Swift 5.9+)

Er zijn geen speciale permissies of entitlements nodig; alle sensorische input (cursor, vensterframes, klikken-als-tikken, thermische status) is permissievrij.

git clone https://github.com/DenisSergeevitch/desktop-fly.git
cd desktop-fly
./build.sh
./DesktopFly

Er verschijnt een <0xF0><0x9F><0xAA><0xB0>-icoon in de menubalk; via dit menu kan het programma worden afgesloten. De vlieg beweegt zich over het bureaublad op een transparante, click-through overlay, waardoor hij muis- of toetsenbordinvoer nooit blokkeert.

Bediening (menubalk <0xF0><0x9F><0xAA><0xB0>)

ItemEffect
Pause / ResumeDe wereld bevriezen
Show/Hide BrainHet live breinvenster tonen of verbergen
Escape Test (loom)Een looming-stimulus injecteren en de GF zien vuren
Move to Next DisplayDe vlieg naar een ander scherm verplaatsen (zichtbaar bij >1 scherm)
Add / Remove FlyExtra vliegen toevoegen (alleen vlieg #1 heeft het breinvenster)
Scare FliesAlle vliegen laten schrikken

Het breinvenster is interactief: het zweven met de muis pauzeert de rotatie; klikken op een regio stimuleert "optogenetisch" de circa 60 dichtstbijzijnde circuitneuronen gedurende 400 ms. De reactie van de vlieg is afhankelijk van wat het echte netwerk stroomafwaarts doet:

  • Klik op de Giant Fiber → de vlieg ontsnapt.
  • Klik op DNg11 → de vlieg poetst zichzelf.
  • Klik op de DNa01/02 van één zijde → de vlieg draait.

Hoe echte neuronen het lichaam aansturen

LichaamsgedragAangedreven door
Ontsnapping / opvliegenDNp01 giant fiber spike
Lopen vs. rust, loopsnelheidDNp09 rate
SturenDNa01+DNa02 links-rechts rate verschil
PoetsenDNg11 rate
Achterwaarts schuivenMDN burst
Nerveuze, schokkerige bewegingenLC4/LPLC2 population rate
Vleugelslag-intensiteit, dreigende vleugelstandDNp02/04/11 rate
Spontaan opvliegenWhole-population arousal

De lus is ook gesloten van lichaam naar brein: het ritme van de gang voedt de echte ascenderende (proprioceptieve) neuronen van het circuit in fase met de poten, en snelle cursorbewegingen stimuleren de sensorische (wind) partners.

Ecologie op het bureaublad

De vlieg maakt gebruik van permissievrije macOS-sensoren:

  • Vensterterrein: De bovenranden van vensters fungeren als richels. De vlieg landt erop, loopt erlangs, rijdt mee op een venster dat je versleept en schrikt wanneer een venster onder zijn poten verdwijnt.
  • Venster-looming: Een venster dat plotseling verschijnt in de buurt van de vlieg voedt het looming-pad; het circuit beslist vervolgens of de vlieg voor je dialoogvensters moet vluchten.
  • Interacties: Kliks worden gezien als tikken op het substraat; klikken naast de vlieg doet hem schrikken via het wind → GF-pad. Typen wordt geregistreerd als vibratie (via de idle-time API — het systeem weet dát er toetsen worden ingedrukt, maar nooit welke).
  • Circadiaans ritme: Activiteitspieken bij zonsopgang en zonsondergang, een middagsiesta en rust in de nacht. Wanneer de computer 's nachts inactief is, slaapt de vlieg, ademt hij langzaam en is de arousal-drempel verhoogd. Na het ontwaken poetst de vlieg zichzelf.
  • Temperatuur: Vliegen zijn ectothermen — een warme Mac zorgt voor een snellere vlieg.

Data regenereren

De map data/ bevat compacte afgeleide bestanden. Om deze opnieuw op te bouwen vanuit de ruwe FlyWire Codex-dumps (download van circa 60 MB):

mkdir -p /tmp/flywire && cd /tmp/flywire
B=https://storage.googleapis.com/flywire-data/codex/data/fafb/783
curl -O "$B/classification.csv.gz" -O "$B/coordinates.csv.gz" \
-O "$B/connections.csv.gz" -O "$B/consolidated_cell_types.csv.gz"
cd - && python3 etl.py /tmp/flywire

Diagnostiek

De volgende commando's kunnen worden gebruikt voor tests:

  • ./DesktopFly --simtest: Controleert circuit-invarianten (bijv. GF is stil in rust, 4 ms looming latentie).
  • ./DesktopFly --behaviortest: Voert 17 end-to-end checks uit (stimuleer neuronen → lichaam reageert).
  • ./DesktopFly --snapshot f.png: Maakt een offscreen render van de vlieg.
  • ./DesktopFly --brainshot b.png: Maakt een offscreen render van het brein.

Wat is gemodelleerd versus gemeten

Ter transparantie: het connectoom geeft de bedrading, niet de fysiologie. De LIF-dynamiek, de tekens van neurotransmitters (ACh+, GABA−, Glu−), de gap-junction boost op LC → GF en wind → GF (gedocumenteerde elektrische koppeling), synaptische vertragingen en de sensorische transductie (cursor → looming-waarde) zijn standaard modelleringskeuzes die over de echte graaf zijn gelegd. Alles stroomafwaarts van de sensorische neuronen — wie met wie verbonden is en hoe sterk — is FlyWire-data.

Licentie & citatie

De code is gelicentieerd onder MIT. De bestanden in data/ zijn afgeleid van FlyWire (FAFB v783) en vallen onder CC BY-NC 4.0 (zie data/DATA_LICENSE.md).

Bij gebruik van dit project dient u de volgende bronnen te citeren: