Kako se Angležko preobleče za noč čarovnic
Praznična preobleka ima eno samo težavo: pregled v trgovini traja dneve. Aplikacija, odobrena 2. novembra, je neuporabna. Zato se Angležko preobleče brez nove različice.

Hotel sem, da se Angležko za noč čarovnic preobleče. Oranžne barve, pajčevine po gumbih, netopirji čez zaslon. Nič pretresljivega — tako počne pol aplikacij na svetu.
Potem sem pomislil, kako to pravzaprav narediš.
Napišeš kodo, zgradiš novo različico, jo oddaš Applu in Googlu, počakaš na pregled. Apple običajno odgovori v enem dnevu, Google včasih v treh. Če kaj zaškripa, v sedmih. Aplikacija, odobrena 2. novembra, je za noč čarovnic neuporabna — praznik je mimo, ti pa imaš v trgovini različico z bučami, ki jo moraš zdaj spet odstraniti. Z novo oddajo. In novim čakanjem.
Za božič ponoviš. Za veliko noč ponoviš. Vsakič dve oddaji: ena, da prižgeš, ena, da ugasneš.
To ni funkcija, to je kazen.
Risba ni v aplikaciji
Rešitev je bila v tem, da sem nehal razmišljati o preobleki kot o kodi in začel o njej razmišljati kot o vsebini.
Aplikacija zdaj ob zagonu vpraša moj strežnik eno vprašanje: katera tema velja? Odgovor je datoteka, dolga eno vrstico:
{ "style": "halloween", "status": "active", "version": 3 }
Če piše default, se ne zgodi nič in aplikacija je videti kot vedno. Če piše kaj drugega, aplikacija potegne še opis te teme — kateri barvi se zamenjata, katere risbe gredo na gumbe, kaj visi v vogalih zaslona — in se preobleče.
Noč čarovnic se torej prižge tako, da na strežniku popravim eno besedo. Ugasne se enako. Brez gradnje, brez oddaje, brez čakanja na nekoga v Kaliforniji.
Kaj zna opisati ena datoteka
Opis teme je navaden JSON in pokriva tri stvari.
Barve. Delna paleta — samo ključi, ki jih tema res spremeni. Ozadje, kartice, robovi, besedilo, poudarek, in to posebej za svetli in temni način. Česar ne navedeš, ostane po starem.
Ena barva v tem seznamu namenoma manjka: modra. Modra je Angležko. Če bi jo tema smela zamenjati, bi se aplikacija oktobra nehala razlikovati od katerekoli druge oranžne aplikacije — in ravno to, kar praznik naredi zabaven, bi vzelo tisto, po čemer te ljudje prepoznajo.
Gumbi in kartice. Tu je trik, na katerega sem najbolj ponosen. V aplikaciji je na stotine gumbov. Označiti vsakega posebej bi pomenilo dneve dela in zagotovo bi jih deset pozabil.
Zato sem navadni Pressable zamenjal s svojim. Brez teme se obnaša natanko kot prej — nič se ne doda, nič ne upočasni. S temo pa se izmeri: če je videti kot gumb ali kartica, si nalepi eno od pripravljenih okraskov. Pajčevino v vogal, pajka, duha, bučko.
Različice si gumbi razdelijo po vrstnem redu nastajanja. To je pomembnejše, kot zveni: če bi okrasek izbiral naključno, bi vsak zaris premešal karte in pajčevine bi med drsenjem poskakovale z gumba na gumb. Tako jih vsak dobi svojo in jo obdrži.
Prekrivna plast. Pajčevine v vogalih okna in netopirji čez nebo. Na telefonu je to ena risba čez cel zaslon, na širokem spletu pa kosi, pripeti na vogale — telefonska risba, raztegnjena čez monitor, bi bila videti kot zlomljena.
Ozadje, po katerem se koplješ
Na spletu, kjer je okno široko in aplikacija stoji v oknih — meni levo, vsebina na sredini, kartice desno —, je za njimi ozadje. Oktobra je to prerez skozi zemljo, trikrat višji od zaslona.
Na vrhu je šola ponoči, z bučami pred vhodom. Nižje prst in deževniki. Potem krsta in kosti. Pod njo žila zlata in skrinja. Še nižje okostje dinozavra, za njim kristali, čisto spodaj magma.
Risba ne stoji pri miru. Ko bereš, se pomika z vsebino — in bolj ko greš po strani navzdol, globlje si.
Da je to sploh mogoče brati, so okna nad risbo mlečno steklo: polovično prosojna in z zabrisom. Zabris je tu pomembnejši od prosojnosti. Brez njega se skozi besedilo rišejo robovi buč in kosti in oko jih lovi kot napako; z njim se scena pod oknom razlije v barvo, neha biti oblika, in ostane samo občutek globine.
Zapletlo se je na mestu, ki ga nisem pričakoval. Najbolj očitno je risbo postaviti v drsnik, saj se mora premikati z njim — a steklo oken leži prav na drsniku, in risba v njem bi se risala nad steklom namesto pod njim. Zato ostane pod vsem, premika pa se sama: povlečem jo navzgor točno toliko, kolikor se premakne vsebina.
Pravilo, ki drži vse skupaj
Celoten sistem stoji na enem pravilu: vse, kar gre narobe, pomeni navaden videz.
Ni omrežja — navaden videz. Datoteka je pokvarjena — navaden videz. Tema je potekla, strežnik ne odgovori, risba se ne naloži — navaden videz.
To je bilo zavestno in me je stalo nekaj dodatnega dela, a pomeni nekaj, kar je vredno vsake ure: ni česa povrniti. Če kaj crkne, uporabnik dobi aplikacijo, kot jo pozna. Ne pol oranžne, ne prazne, ne pokvarjene. Tako, kot je bila včeraj.
Zadnja tema se shrani tudi v napravo, zato prvi zaris ne čaka na omrežje in praznik preživi slab wifi. Številka version v tisti enovrstični datoteki pove, kdaj je shranjeno zastarelo.
Zakaj je to vredno
Sistem je bil dobra dva dni dela. Prihrani mi dve oddaji na praznik, in prazniki so vsaj štirje na leto.
A to ni glavni razlog. Glavni je, da si zdaj praznično preobleko lahko privoščim. Dokler je stala teden čakanja in tveganje zavrnitve, je bil odgovor na »a bi za veliko noč dali pirhe?« vedno ne — ne zato, ker ne bi bilo lepo, ampak ker se ni izplačalo.
Zdaj je odgovor ena popravljena vrstica. In ko je nekaj poceni, to tudi narediš.
