Blog Autori Aleksandar Lukač, DressCode
Aleksandar Lukač, DressCode

Aleksandar Lukač, DressCode

3

Softverski inženjer u Majkrosoftu. Diplomirani inženjer informacionog inženjeringa (Data science). Interesovanja: softverska arhitektura, optimizacioni problemi, teorija algoritama.

Svi tekstovi autora

07.08.2023. ·
3 min

Uticaj zračenja na rad programa?

Bagovi, nepredviđeni edge-case scenariji, nedovoljni resursi za rad programa - samo su neki od problema koji mogu da utiču na rad našeg programa a za koje smo sami krivi. Ali šta da radimo ukoliko naš program pukne jer je svemir tako odlučio? Kako tehnologija nastavlja da napreduje, i kako se naše digitalne strukture postaju sve manje i preciznije, čestice zračenja koje dolazi iz svemira postaju sve veća pretnja. Jedna od najneočekivanijih posledica ovog fenomena je mogućnost da svemirsko zračenje može da "okrene" bitove računarske memorije, menjajući njihove vrednosti iz 0 u 1 ili obrnuto. Svemirsko zračenje se sastoji od visokoenergetskih čestica koje putuju kroz svemir gotovo brzinom svetlosti. Kada ove čestice pogode elektronske komponente, mogu izazvati niz problema. Najvažniji za našu diskusiju je fenomen poznat kao "Single Event Upset" (SEU). SEU se događa kada jedan visokoenergetski događaj utiče na operaciju digitalnog uređaja. U kontekstu računarske memorije, to može značiti da visokoenergetska čestica pogodi bit memorije, "okrećući" njegovu vrednost. Na primer, bit koji je bio postavljen na 0 može se promeniti u 1, ili obrnuto. Iako se ovaj događaj može činiti trivijalnim, posledice mogu biti značajne. Ako se, recimo, bit koji je izmenjen nalazi u kritičnom delu sistema, njegova promena može dovesti do niza nepredviđenih posledica, uključujući pad sistema ili nepredviđeno ponašanje. Industrije koje su visoko zavisne od digitalne tehnologije, poput svemirske industrije, telekomunikacija i finansijskih institucija, ulažu značajne resurse u razumevanje i suzbijanje ovog problema. Primena metoda poput izdržljivosti na greške (error resilience), redundantnih sistema i korekcije grešaka u kodu su postale uobičajena praksa u borbi protiv ovog fenomena. Letelica Mars Rover Spirit, koju je lansirala NASA, počela je svoju misiju na Marsu 2004. godine. Međutim, sredinom 2003. godine, dok je letelica još uvek bila na putu ka Marsu, iznenada je prekinula komunikaciju sa kontrolom misije na Zemlji. Komunikacija je bila prekinuta nekoliko dana i taj incident je pretio da uništi misiju i baci ne baš male pare kroz prozor. Inženjeri su započeli analizu kako bi otkrili šta se dogodilo. Pošto su isključili druge moguće uzroke, zaključili su da je problem bio izazvan Single Event Upset (SEU) događajem. Veruje se da je visokoenergetska čestica svemirskog zračenja pogodila memoriju rovera, promenivši vrednost jednog bita. Ova promena je dovela do niza nepredviđenih problema u operativnom sistemu rovera, što je na kraju rezultiralo prekidom komunikacije. NASA je uspela da ponovno uspostavi komunikaciju sa roverom i nakon što su otkriveni i ispravljeni problemi, misija je uspešno nastavljena. Ovaj incident je bio značajan ne samo zato što je pokazao stvarne posledice svemirskog zračenja na svemirske misije, već i zato što je ilustrovao važnost ugradnje otpornosti na greške u kritične računarske sisteme. Nakon ovog incidenta, NASA i druge svemirske agencije su preduzele dodatne korake da poboljšaju otpornost svojih svemirskih letelica na svemirsko zračenje. Poučeni ovim i drugim iskustivma, najveći data centri na svetu imaju posebne nivoe zaštite protiv SEU događaja, ali se oni i dalje (doduše veoma retko) mogu desiti baš bilo kada i na bilo kom uređaju - od nekih stvari se možda nikad u potpunosti nećemo moći zaštititi.  

16.06.2023. ·
3 min

WebAssembly - alternativa JavaScript-u

Ukoliko se do sada niste susreli sa WebAssembly-jem definitivno vredi da odvojite malo vremena i proučite šta sve ovaj alat može da ponudi. Ukratko, WebAssembly je nastao 2017. godine sa ciljem da se ponudi alternativa JavaScript-u (koji, iako je među najpopularnijim programskim jezicima, ima veoma izražene mane) prilikom pisanja frontend koda (koda koji se ne izvršava na serverima već na korisnikovoj mašini). Glavna razlika između WebAssembly-a i JavaScript-a je u tome što WebAssembly omogućava izvršavanje koda napisanog u drugim jezicima, kao što su C/C++ ili Rust, dok je JavaScript specifičan jezik za web i već se izvršava u pretraživačima (browser-ima). WebAssembly pruža veću brzinu izvršavanja i sigurnost, dok JavaScript nudi jednostavnost i široku podršku.   Od 2017. godine, kada je i nastao, nastalo je dosta alata koji omogućavaju da se kod pisan u drugim programskim jezicima umesto u običan asemblerski kod - kompajlira u WebAssembly kod, čime postaje dostupan za korišćenje iz pretraživača. Ljudima je, osim ideje da prave nove aplikacije i prevode ih u WebAssembly, palo na pamet da pokušaju da u njega prebace i neke postojeće programe - tako smo čak dobili i verzije nekih od ranije veoma popularnih video igrica koje možemo pokrenuti iz svog pretraživača (kao što su DOOM iz 1993. godine, Fallout 2, SimCity 2000 itd).  Koje su to prednosti koje WebAssembly nudi?  Efikasnost izvršavanja: WebAssembly je dizajniran da se izvršava brže od JavaScripta. Wasm kod se prevodi u binarni format koji se izvršava u virtualnoj mašini pretraživača. Ovaj binarni format je dizajniran da bude efikasan i brz za izvršavanje, omogućavajući optimizacije koje se mogu postići na niskom nivou.  Bliskost mašinskom jeziku: WebAssembly koristi mašinski jezik specifičan za virtualnu mašinu pregledača, što omogućava da se kod izvršava na nižem nivou od JavaScripta. To znači da se kompleksne operacije i algoritmi mogu izvršavati brže jer je pristup hardverskim resursima direktniji.   Kontrola memorije: WebAssembly omogućava programerima precizniju kontrolu nad memorijom u poređenju s JavaScript-om. Ovo je posebno korisno za aplikacije koje zahtevaju rad s velikim količinama podataka ili izvođenje zahtevnih algoritama. Precizna kontrola memorije omogućava efikasnije upravljanje podacima i izbegavanje nepotrebnih alokacija i dealokacija.  Primeri framework-ova koji omogućavaju jednostavan rad sa WebAssembly-jem:  Blazor: Blazor u suštini nudi prevođenje C# u WebAssembly, a kao i sam C# jezik, razvio ga je i održava ga Microsoft. Blazor nudi dvije glavne varijante: Blazor Server i Blazor WebAssembly. Blazor Server koristi SignalR za održavanje veze sa serverom i omogućava dinamičko ažuriranje korisničkog interfejsa, dok Blazor WebAssembly izvršava C# kod direktno u pregledaču, što omogućava offline funkcionalnost i nezavisnost od servera.  Rust sa Yew-om: Yew je Rust-ov frontend framework inspirisan React-om koji omogućava razvoj web aplikacija koristeći Rust jezik. Yew koristi WebAssembly za izvršavanje Rust koda u web pretraživaču. On se ističe po performansama, sigurnosti i Rust-ovoj filozofiji "zero-cost abstractions". Yew koristi virtualni DOM (Document Object Model) za efikasno ažuriranje korisničkog interfejsa samo u delovima koji su se promenili. Takođe nudi mogućnost razvoja po komponentama, rukovanja događajima i rad s asinhronim zahtevima.  U poređenju sa već poznatim JavaScript framework-ovima, Yew i Blazor imaju manji ekosistem, manje su prihvaćeni od strane inženjera i zahtevaju učenje novog jezika (Rust ili C#). Takođe, izvršavanje putem WebAssembly-a može imati neočekivane poteškoće u odnosu na JavaScript, jer mogu zahtevati dosta više koda da bi se neke jednostavne stvari uradile. 

29.05.2023. ·
2 min

Šta su “spatial” baze podataka i koja je njihova primena?

“Spatial” baze podataka su zasebni sistemi ili dodaci na postojeće baze podataka (poput PostgreSQL uz PostGIS, Oracle Spatial, Microsoft SQL Server sa dodatkom Spatial-a itd) koji su dizajnirani za rad sa geografskim podacima. Sa ovim podacima se srećemo svaki put kada nailazimo na veliki broj adresa, GPS koordinata, topografskih podataka, a same baze se vezuju za GIS (“Geografski informacioni sistem”) - tehnologijom za prikupljanje, analizu, interpretaciju i prezentovanje geografskih podataka. Šta je to toliko interesantno i specifično kod ove vrste baza podataka? Za razliku od klasičnih baza podataka, ove baze najčešće podatke čuvaju u formatu tačaka (Point), linija (LineString), poligona (Polygon) ili nekom “kolekcijom” ovih osnovnih tipova. Na primer, ako imate bazu podataka koja sadrži informacije o kućama u gradu, spatial baza podataka će omogućiti da se podaci o svakoj kući prikažu na karti, a zatim se mogu pretraživati prema lokaciji, ceni ili drugim karakteristikama. Kako funkcionišu ove baze? Spatial baze podataka omogućavaju pretragu i analizu geografskih podataka na različite načine, kao što su traženje objekata unutar određenog prostora, izračunavanje udaljenosti između objekata ili izračunavanje površine određene oblasti. To se postiže korišćenjem specijalizovanih SQL funkcija i operatora koji mogu da računaju udaljenost i preseke između geografskih oblasti, pronalaze sve objekte unutar zadatog objekta itd. Ove baze podataka dodaju i poseban vid indeksiranja geografskim podacima - spatial (prostorne) indekse. Spatial indeksi su bitni jer omogućavaju brzu pretragu baze podataka. Bez njih, pretraga velike količine geografskih podataka može da bude veoma spora i neefikasna. Prostorni indeksi su specijalizovane strukture podataka koje omogućavaju efikasan pristup prostornim podacima, smanjujući vreme potrebno za pretragu baze podataka. Postoje različite vrste prostornih indeksa, a neki od najčešće korišćenih u spatial bazama podataka su R-Tree, Quad-Tree i Grid-Index. Ovi indeksi organizuju objekte u bazi podataka tako da se mogu brzo pronaći objekti koji se nalaze unutar određenog prostornog opsega, čime se postiže brza i efikasna pretraga.