Cigle, kalkulatori i prijevod Biblije

Use caseLaus Deo
Tko je radio web stranicu za trgovinu građevinskim materijalom, zna trik: stavite na nju dobar kalkulator cigle. Ne zato što prodaje ciglu, nego zato što rješava stvaran problem točno u trenutku kad ga netko ima.

Takvi mali alati vraćaju ljude. Zbog njih posjetitelj stranicu doživljava kao mjesto na koje se dolazi, a ne mjesto na koje se slučajno sleti. Dodana vrijednost je ono što oko platforme gradi zajednicu.

Nedavno smo istu logiku primijenili na projekt koji nimalo ne nalikuje trgovini građevinskim materijalom.

12
tonaliteta

svaki udaljen jedan dodir, usred pjesme

0
redaka

zapisa pjesama spremljenih na našem serveru

Zašto je portalu za proučavanje Biblije trebala glazbena aplikacija

Naručitelj portala biblija.hr došao je s neobičnim zahtjevom. Uz sam portal za proučavanje želio je i integriranu aplikaciju za glazbenike.

Razlog je bio dobar. Zajednica koja čita i proučava Pismo vrlo ga često i svira. Zborovi i skupine za hvalu trebaju pouzdano mjesto za pripremu glazbe, jednako kao što trebaju mjesto za pripremu teksta. Obje su publike uglavnom isti ljudi.

Zato smo izgradili Akordar: čitač akorda koji živi unutar portala, dostupan odobrenim korisnicima i osmišljen za trenutak kad stojite s instrumentom u rukama.

Prva odluka: server ne sprema ništa

Ne „sprema malo”. Ne „sprema šifrirano”. Nema tablice, nema migracije, nema repozitorija i nema POST endpointa koji prima tekst pjesme.

Granicu smo povukli između servera i korisnikova uređaja, a ne između memorije i diska. Sadržaj koji korisnik upiše ostaje na njegovom računalu. Postavke, stanje prikaza i – ako to izričito odabere – popis pjesama za nastup spremaju se lokalno u pregledniku. Ništa ne putuje mrežom.

Počelo je kao odluka o sadržaju, a pokazalo se kao arhitektonski dar za naše nopCommerce okruženje. Dodatak je potpuno bez stanja: nema sheme koju treba verzionirati, nema sigurnosnih kopija tuđeg materijala, baza ne raste, a pri deinstalaciji nema što čistiti. Uvoz čita datoteku pomoću FileReader, izvoz je zapisuje pomoću Blob, i nijedno ne dodiruje mrežu.

Jedna zamka vrijedi spomena, jer u nju je lako upasti misleći da radite ispravno: kolačići nisu spremište na strani klijenta. Kolačić se šalje uz svaki zahtjev, što znači da sadržaj ipak završi na serveru, a prije ili kasnije i u access logovima. Ako je pravilo „ništa ne stiže do servera”, jedini pošteni mehanizmi su localStorage i IndexedDB.

Zašto se većina akorda ne može transponirati

Gotovo svi zapisi akorda u opticaju stavljaju akorde u redak iznad teksta, poravnane razmacima u fontu fiksne širine. Čita se savršeno i potpuno je neupotrebljivo za bilo što drugo.

Čim ga transponirate, poravnanje se raspadne. A je jedan znak, a A# i Db su dva. Svaki akord u retku pomakne se u odnosu na slog kojem pripada, a zapis postane neznatno pogrešan – teško je to primijetiti, a nemoguće je svirati.

Rješenje je prestati akord tretirati kao crtež i početi ga tretirati kao podatak. Akordar sprema akorde u tekstu, neposredno ispred sloga na kojem se mijenjaju:

  • akord je vezan uz položaj u tekstu, a ne uz stupac na stranici
  • zapis se na mobitelu prelama bez raspadanja
  • akorde je moguće sakriti, obojiti, povećati ili transponirati bez diranja teksta
  • ista se datoteka ispisuje u jednom ili dva stupca i ispravno se čita u oba

Ovo je dio koji se prenosi: kad god vizualno poravnanje nosi značenje, to je značenje zarobljeno. Premjestite ga u podatkovni model i svaka sljedeća funkcija postaje jeftina.

Transpozicija nije aritmetika

Dodati dva polutona akordu lakša je polovica posla. Ispravno zapisati rezultat – tu se naivne implementacije odaju.

Akord se rastavlja na osnovni ton, predznak, vrstu i bas – Bm7/F# su četiri zasebne činjenice. Osnovni ton postaje broj od 0 do 11, doda se interval, a rezultat se zatim mora zapisati onako kako se piše u ciljnom tonalitetu. U Es-duru pišete Ab, u E-duru G#. Isti ton, drugo ime, a glazbenik koji pročita pogrešno mora stati i razmisliti.

Ako to pogriješite, dobit ćete E# i Cb – tehnički obranjivo, a praktično uvredljivo.

Postoji i druga zamka, specifična za naše tržište. U hrvatskoj i njemačkoj notaciji B znači b (snižen), a H znači h, dok međunarodna notacija koristi B za h i uopće nema H. Pretpostavite bilo koju od njih i pri uvozu ćete tiho promijeniti akorde. To mora biti prekidač koji kontrolira korisnik, a ne zadana vrijednost koju je odabrao programer.

A budući da gitaristi postoje, alat izračuna i očit prečac: umjesto učenja novih hvatova u Es-duru, stavite kapodaster na prvi prag i svirajte u D-duru. Jedan redak modularne aritmetike, a nesrazmjerno cijenjen.

Što sviranje uživo stvarno traži

Dizajn za pozornicu nije dizajn za stol. Uređaj je mobitel ili tablet na stalku za note, svjetlo je loše, a korisnik ima najviše jednu slobodnu ruku na otprilike četiri sekunde.

Zaslon se ne smije ugasiti. Wake lock dok je stranica otvorena. Očito naknadno, a izluđujuće kad nedostaje.

Sučelje mora nestati. U mirovanju stranica prikazuje pjesmu i ništa drugo. Sve kontrole su iza jednog gumba u kutu. Alatne trake su za uređivanje, ne za nastup.

Automatsko pomicanje u tempu pjesme, tako da se zapis pomiče sam, a obje ruke ostaju na instrumentu.

Popis pjesama slaže se ručno, povlačenjem u redoslijed nastupa, a „sljedeća pjesma” prati taj redoslijed, ne abecedu. Napomena za sve koji rade nešto slično: HTML5 drag-and-drop uopće ne radi na dodirnim zaslonima. Na programerovom računalu radi savršeno, a na uređaju za koji je alat napravljen nikako.

Tri teme za čitanje – papir, sepija i noć – jer bijeli zaslon pune svjetline u mračnoj prostoriji neprijateljski je sam po sebi.

Dostupan je i prikaz preko cijelog zaslona, uz ograničenje koje smo morali zaobići: iOS Safari ne podržava Fullscreen API na običnim elementima, pa postoji zamjenski način koji uklanja elemente stranice i postiže isti rezultat bez njega.

Neplanirana nuspojava

Budući da je format običan tekst s jednostavnom, dokumentiranom gramatikom, pokazalo se da se vrlo dobro slaže s jezičnim modelima.

Glazbenik može uzeti golu pjesmu s tri akorda, zamoliti asistenta da je reharmonizira prolaznim akordima i bogatijim zvukom, i rezultat zalijepiti natrag. Akordar ga parsira i transponira u letu kao i sve ostalo. Za to nismo dizajnirali. Ispalo je iz odluke da biramo tekstualni format umjesto vlasničkog, što je argument u korist tekstualnih formata općenito.

Zašto se uopće isplatilo graditi

Prije pisanja ijednog retka pogledali smo što već postoji. Obrazac je bio dosljedan: sposobne aplikacije su komercijalne i ili agresivno prikazuju oglase ili se plaćaju pretplatom. Besplatnim alternativama nedostaje upravo ono što je važno kad stvarno svirate – pouzdana transpozicija, automatsko pomicanje, zaslon koji se ne gasi, upotrebljiv prikaz na mobitelu.

Mi smo ponudili čist alat prilagođen mobitelu koji radi u pregledniku, ne košta ništa, ne prikazuje oglase i čuva materijal korisnika na njihovim uređajima.

Nijedan pojedinačni dio nije težak. Razlog zašto u ovom obliku nije postojao jest to što ima smisla samo kao dodatak platformi čija ga zajednica treba.

Što se prenosi na druge projekte

Tema je nišna. Inženjerske odluke iza nje nisu.

Korisnost gradi zajednicu

Mali alat koji rješava jedan stvaran problem čini više za povratne posjete nego redizajn. Pitajte što vaša publika radi kad nije na vašoj stranici.

Ne spremati ništa je funkcija

Nema sheme, nema kopija tuđeg sadržaja, nema čišćenja pri deinstalaciji. Rad bez stanja jeftiniji je za izgradnju i za održavanje.

Kolačići stižu do servera

Ako je pravilo da podaci ostaju na uređaju, kolačić ga tiho krši. Obećanje drži samo lokalno spremište preglednika.

Raspored nije podatak

Kad značenje nosi vizualno poravnanje, ondje je i zarobljeno. Premjestite ga u model i svaka sljedeća funkcija postaje jeftina.

Pravila struke ispred aritmetike

Ispravan rezultat često traži znanje struke, a ne samo točan izračun. Pitajte praktičara prije nego zaključite da je matematika cijeli posao.

Testirajte na stvarnom uređaju

Drag-and-drop koji radi na računalu na dodirnom zaslonu može potpuno izostati. Gradite za stalak u mračnoj prostoriji, ne za računalo na kojem razvijate.

Ugodno iznenađenje u ovom projektu bilo je koliko je toga obično inženjerstvo u neobičnoj odjeći. Parsiranje, stanje, responzivni raspored, dvosmislen standard zapisa znakova – sve prepoznatljivo, samo usmjereno na akorde umjesto na zapise iz kataloga.

Ponekad najbolji softverski dodaci nastaju iz razumijevanja onoga što vaša zajednica već radi kad ne gleda vašu stranicu.

Postoji li mali alat koji vaša publika stalno improvizira?
Dodaci za nopCommerce po mjeri, integrirani alati, sadržajne platforme velikog opsega – ako vaši korisnici ponavljajući problem rješavaju tablicama i papirnatim fasciklima, to je obično znak. Širu platformu za koju je ovo izgrađeno možete vidjeti na portalu biblija.hr.
kontaktirajte nas

Više članaka

kontakt

Recite nam što gradite

Opišite trenutno stanje i cilj. Javljamo se unutar jednog radnog dana s konkretnim prijedlogom sljedećeg koraka.
Zanima me