Sheety - Spreadsheets, gecompileerd

Waarschuwing: Dit is experimentele software. Door dit te gebruiken, ga je ermee akkoord dat het compileren van een YAML-bestand naar een binaire spreadsheet waarschijnlijk belachelijk is, maar dat je het toch gaat doen.

Fig. 1 - SHEETY.EXE in zijn natuurlijke habitat

"Sheety is een van die projecten die me direct doen grijnzen omdat het zo glorieus en zinloos over-engineered is, op de best mogelijke manier."
— Grok

Wat is dit eigenlijk?

Sheety compileert spreadsheet-definities (YAML of Excel) naar standalone, interactieve TUI-binaries. Elke spreadsheet wordt een eigen executable met een terminal-gebruikersinterface (TUI).

Ja, echt. We vroegen onszelf af: "wat als spreadsheets gecompileerde binaries waren?" en daarna zijn we gewoon doorgegaan.

Er zijn geen runtime-afhankelijkheden. Geen JVM. Geen Python. Gewoon één binary die je spreadsheet draait met formuleondersteuning, celbewerking en in-process herbouw.

Functies

  • Hash-gebaseerde Caching: Slimme content-gebaseerde caching maakt het opnieuw uitvoeren van ongewijzigde spreadsheets ongeveer 400x sneller. Eerste run: ~3 seconden. Volgende runs: ~0,007 seconden (onmiddellijk).
  • Formaatondersteuning: Werkt met YAML (vriendelijk voor versiebeheer) en Excel-bestanden (.xlsx). Converteer tussen elk formaat met volledige roundtrip-ondersteuning.
  • Terminal UI: Interactieve TUI met een 1000x1000 grid, muisondersteuning, formulebewerking en live herberekening. Navigeren, bewerken, opslaan—alles in je terminal.
  • Zelf-herbouwend: Bewerk een formule in de TUI en het programma compileert zichzelf opnieuw vanuit de binary. De binary bouwt de binary opnieuw. Het is binaries tot in de kern.
  • Statusbehoud (State Persistence): UUID-gebaseerd statusbeheer dat herbouw overleeft. Het onthoudt de cursorpositie en slaat alle wijzigingen op in je bronbestand.
  • Excel-formules: Uitgebreide formuleondersteuning: SUM, AVERAGE, IF, VLOOKUP, CONCAT, tekstfuncties, datumfuncties en meer. Er zijn meer dan 50 functies geïmplementeerd.

Hoe te gebruiken

Optie 1: Download statische binary (Aanbevolen)

Download een vooraf gebouwde statische binary; er zijn geen afhankelijkheden vereist:

C:\SHEETY> wget https://github.com/ralsina/sheety/releases/latest/download/sheety-static-linux-amd64 -O sheety
C:\SHEETY> chmod +x sheety
C:\SHEETY> ./sheety my_sheet.yaml

Uitvoer: Creating new spreadsheet: my_sheet.yaml Building... Launching TUI... [Press Q to exit]

Ook beschikbaar voor ARM64 (Raspberry Pi, AWS Graviton, etc.)

Optie 2: Bouwen vanuit broncode

C:\SHEETY> git clone https://github.com/ralsina/sheety
C:\SHEETY> cd sheety && shards install && shards build
C:\SHEETY> ./bin/sheety my_sheet.yaml

Converteren tussen formaten

C:\SHEETY> ./sheety data.yaml --save-to=data.xlsx
# Converted: data.yaml -> data.xlsx

C:\SHEETY> ./sheety data.xlsx --save-to=data.yaml
# Converted: data.xlsx -> data.yaml

Spreadsheet Formaat

Definieer je spreadsheet in YAML:

Sheet1:
  A1:
    value: 100
  A2:
    value: 200
  A3:
    formula: "=SUM(A1:A2)"
  B1:
    value: "Hello"
  B2:
    formula: "=CONCAT(B1, \" World\")"

Sheet2:
  A1:
    formula: "=Sheet1!A3*2"

Waarom zou je dit gebruiken?

  • Distributie: Verstuur één binary in plaats van een fragiel Excel-bestand met kapotte referenties.
  • Versiebeheer: Het YAML-formaat werkt goed samen met git. Geen "binary diff hell" meer.
  • Prestaties: Hash-gebaseerde caching zorgt ervoor dat het openen van spreadsheets onmiddellijk gaat.
  • Portabiliteit: Eén binary, geen afhankelijkheden, draait overal.
  • Nieuwsgierigheid: Je wilt zien hoe spreadsheets onder de motorkap werken.
  • Omdat: Waarom YAML niet compileren naar binaries? Wie gaat je tegenhouden?

Formuleondersteuning

  • Wiskunde: SUM, AVERAGE, MIN, MAX, COUNT, COUNTA, MEDIAN, STDEV, VAR, ROUND, POWER, SQRT, MOD, ABS
  • Tekst: CONCAT, LEFT, RIGHT, MID, LEN, UPPER, LOWER, TRIM, FIND, SEARCH, SUBSTITUTE
  • Logisch: IF, AND, OR, NOT, IFS, SWITCH
  • Lookup: VLOOKUP, HLOOKUP, INDEX
  • Datum: TODAY, NOW, YEAR, MONTH, DAY, DATEDIF, EOMONTH
  • Voorwaardelijk: COUNTIF, SUMIF

Status

  • [OK] Functies: Formule-parsing, YAML/Excel-ondersteuning, TUI, interactieve bewerking, statusbehoud, in-process herbouw, hash-caching.
  • [!!] Experimenteel: Dit is "ik had een vreemd idee en ben ermee doorgegaan" software. Gebruik het voor educatieve doeleinden, voor plezier, of omdat jij ook gecompileerde spreadsheet-binaries wilt.

Eigenlijk, als je de financiële modellen van je kerncentrale draait op gecompileerde spreadsheet-binaries, laat het ons dan a.s. weten. Dat zou een geweldig verhaal zijn.

Bijdragen

Heb je een bug gevonden? Een idee voor een nieuwe functie? PR's zijn welkom! Onthoud alleen: we compileren hier YAML naar binaries. Laten we het vreemd houden.

Gebouwd met Crystal.