Iz ugla programera

Prostor za autentična iskustva, izazove i savete, pružajući uvid u svet programiranja direktno iz perspektive stručnjaka.

Blog Iz ugla programera
14.06.2023. ·
3 min

Intel ili AMD – koji procesor je bolji izbor za programere?

Ako si programer koji svakodnevno koristi više aplikacija za kodiranje u isto vreme, potreban ti je procesor koji je dovoljno brz da izađe na kraj sa svim tim zahtevnim procesima.  Bez obzira na svestranost i broj aplikacija koje koristite, izbor procesora je prilično oskudan i svodi se na dve opcije na tržišu – Intel i AMD.  Ukoliko koristite jezičko programiranje, onda i Intel i AMD koriste isti set instrukcija. Međutim, ukoliko je vaš fokus na dubokom učenju, podacima, visual studiu, C++, Pythonu, Javi... onda bi pažljiv odabir procesora mogao da vam znatno olakša život.  Zahtevi novih programera naspram onih iskusnijih koji rade na kompleksnijim razvojnim projektima su različiti, i zbog toga se postavlja pitanje: Da li je skupi Intel CPU pravi izbor za sve, ili za prvu grupu posao može obaviti i prosečan AMD procesor?  Nakon čitanja narednih faktora, sigurni smo da ćete lakše doneti odluku o vašem budućem procesoru.  Šta čini neki procesor boljim izborom za programiranje? Jezgra   Kada su u pitanju jezgra, Intel ili AMD procesor koji nudi izuzetne single-core performanse je dovoljno dobar da izvrši sve vaše programerske zahteve.  Možete da kupite i procesor sa više jezgara, ali bi on takođe trebalo da isporuči izuzetne single-core rezultate.  Drugim rečima, procesor sa jednim jezgrom i većom clock brzinom će bez ikakve sumnje unaprediti performanse vaših programa.  Međutim, ukoliko se bavite razvojem igara, onda je najbolji izbor procesor sa više jezgara. AMD nudi više jezgara po nižoj ceni, dok su Intelovi procesori skuplji i poseduju manji broj jezgara.  Sa druge strane, Intel je ispred AMD-a kada su u pitanju single-core performanse, a to je nešto što vam je zaista potrebno ako tražite procesor za programiranje.  Pritom, ukoliko koristite više aplikacija kao što su Visual Basic i Python, C++, recimo, onda vam je potrebno više jezgara.  Odabir generacije I Intel i AMD mogu da obave većinu poslova koje im nametnete, sem ukoliko ste se fokusirali na AI duboko učenje ili data science. Onda vam je potreban procesor koji je u stanju da brže izlazi na kraj sa velikim setovima podataka.  Takođe, ukoliko vaši projekti imaju veze i sa grafikom, onda se AMD nameće kao idealan izbor.  Intel procesori novije generacije (Core i7 i Core i9) pokazali su se kao odličan izbor za programere, dok su AMD Ryzen 7 procesori favoriti kada su u pitanju performanse u softverskom razvoju.  Za one koji tek ulaze u programiranje i kojima je potreban CPU za osnovne zadatke, Intel Core i5 i Ryzen serija 5 procesora su više nego adekvatan izbor.  Zaključak Kodiranje iz godine u godinu postaje sve kompleksnije. Od pisanja osnovnih komandi do mašinskog učenja, gotovo sve u back endu zahteva kodiranje. Kompleksne programerske aplikacije više zavise od single-core performansi. I tu je Intel u većoj prednosti, dok je AMD mnogo bolji u ponudi sa više jezgara.  Ako ste profesionalni programer, Intel bi bio bolji izbor za savladavanje kompleksnih kompjuterskih zadataka, dok je za sve one na nešto nižem nivou znanja i obaveza AMD više nego solidan izbor. 

HelloWorld
2
12.06.2023. ·
5 min

Kako je Rust od “projekta sa strane” postao jedan od najvoljenijih programskih jezika na svetu

Mnogi softverski projekti se pojavljuju zato što je – negde tamo – programer morao da reši neki svoj lični problem.  To je manje-više ono što se dogodilo Grejdonu Houru. Davne 2006. godine, Hour je bio 29-godišnji programer koji je radio za Mozilu. Vraćajući se kući s posla otkrio je da lift u njegovoj zgradi nije u funkciji; softver je prestao da radi i to nije bio prvi put.  Hour je živeo na 21. spratu i dok se penjao uz stepenice, pomislio je kako to nema smisla. “Kako to da programeri ne mogu da naprave softver za lift koji se neće kvariti”, prolazilo mu je kroz misli. Hour je znao da su mnogi takvi kvarovi posledica problema sa načinom na koji određeni program koristi memoriju.   Napisao program da bi rešio sebi problem   Softver u, ovom slučaju, liftovima često je napisan na jezicima poput C++ ili C, koji su poznati po tome što omogućavaju programerima da pišu kod koji radi veoma brzo i prilično je kompaktan. Problem je u tome što su ti jezici takođe skloni memorijskim greškama koje mogu da sruše ceo program.   Većina nas, kada bismo bili u situaciji da moramo da se penjemo do 21. sprata, jednostavno bismo se razbesneli i to bi ostalo na tome. Ali Hour je odlučio da uradi nešto po tom pitanju. Otvorio je svoj laptop i počeo da dizajnira novi kompjuterski jezik, za koji će nadao da će omogućiti pisanje manjeg, brzog koda bez memorijskih grešaka. Taj jezik je nazvao Rust, po grupi izuzetno izdržljivih gljiva koje su, kako sam kaže, “dizajnirane za preživljavanje”.  Kako biste shvatili zašto je Rust toliko koristan, vredi zaviriti ispod haube u to kako se programski jezici bave računarskom memorijom.  Možete, vrlo grubo, zamisliti dinamičku memoriju u računaru kao školsku tablu. Kako deo softvera radi, on stalno upisuje male delove podataka na tablu, prati koji se gde nalazi i briše ih kada više nisu potrebni. Međutim, različiti računarski jezici to rade na različite načine. Stariji jezici kao što su C ili C++ su dizajnirani da programeru pruže kontrolu nad tim kada i kako softver koristi tablu. Ta moć je korisna: sa tom kontrolom nad dinamičkom memorijom, programer može pokrenuti softver veoma brzo.   Zbog toga se C i C++ često koriste za pisanje koda koji je u direktnoj interakciji sa hardverom. Mašine koje nemaju operativni sistem kao što su Windows ili Linux, od mašina za dijalizu do kasa u prodavnicama, rade na takvom kodu.  Ali, koliko god da su brzi, jezici kao što su C i C++ zahtevaju kompromis. Programeri moraju pažljivo da prate u šta se memorija upisuje i kada softver treba da je izbriše. Šta ako slučajno zaboravite da izbrišete nešto? Pa, možete izazvati pad: softver kasnije može pokušati da iskoristi prostor u memoriji za koji misli da je prazan kada tamo zapravo nečega ima. Ili biste digitalnom uljezu dali ulaz u vaš sistem. Haker bi mogao da primeti da program ne čisti svoju memoriju kako treba - informacije koje je trebalo da budu obrisane (lozinke, finansijske informacije) su se možda zadržale i haker bi mogao da ih ukrade. Kako deo C ili C++ koda postaje sve veći i veći, moguće je da čak i najpažljiviji programer napravi mnogo grešaka u memoriji.  Tokom 90-ih, novi jezici kao što su Java, JavaScript i Python postali su popularni. Kako bi rešili probleme programera, oni su automatski upravljali memorijom koristeći “sakupljače smeća”, komponente koje bi povremeno čistile memoriju kako delovi softvera budu pokretani.   Eto, mogli ste da pišete kod koji nije imao memorijske greške. Ali, loša strana je bila gubitak one moći koju su C i C++ pružali. Programi su takođe radili sporije (jer su sakupljači smeća oduzimali ključno vreme obrade). Pritom, softver napisan na ovim jezicima koristi mnogo više memorije.   Programski jezik između “dva plemena”  Tada se svet programiranja podelio, otprilike, na dva plemena. Ako je softver trebalo da radi brzo ili na malom čipu u uređaju, veća je verovatnoća da je bio napisan u C ili C++ jeziku. Ako vam je bila potrebna veb aplikacija ili aplikacija za mobilni telefon, onda biste koristili noviji jezik koji sam sakuplja smeće.  Sa programskim jezikom Rust, Hour je imao za cilj da stvori jezik koji će biti savršeno izbalansiran između ova dva plemena. Nije zahtevao od programera da ručno određuju gde će u memoriji stavljati podatke, to bi Rust činio umesto njih. Ali nametnuo je mnoga stroga pravila o tome kako se podaci mogu koristiti ili kopirati unutar programa.   Morali ste da naučite sva ta pravila, koja su bila teža od onih u Python-u ili JavaScript-u. Bilo bi teže napisati kod u Rust-u, ali bi bio “memorijski bezbedan” - nije bilo straha da ćete slučajno ubaciti kobne memorijske greške.  Najvažnije, Rust je ponudio “sigurnost istovremenosti”. Savremeni programi rade više stvari odjednom - drugim rečima, istovremeno - i ponekad te različite niti koda pokušavaju da modifikuju isto deo memorije u skoro isto vreme. Memorijski sistem koji ima Rust je to sprečavao.  Sedamnaest godina kasnije, Rust je postao jedan od najpopularnijih jezika na planeti. Postoji 2,8 miliona programera koji koriste Rust, a kompanije kao što su Microsoft ili Amazon smatraju Rust ključem za svoju budućnost. Discord je koristio Rust da ubrza svoje sisteme, Dropbox ga koristi za sinhronizaciju datoteka sa vašim računarom, a Cloudflare ga koristi za obradu više od 20% celokupnog internet saobraćaja.  Kada Stack Overflow sprovede svoje godišnje ankete o programskim jezicima Rust je uvek na vrhu među omiljenima. Zapravo, Rust je već sedam godina za redom ocenjen kao najomiljeniji programski jezik. Rust, kao i drugi uspešni open source projekti sada ima stotine saradnika, a mnogi od njih su volonteri i na njemu rade jer jednostavno vole ovaj jezik. Hour se povukao iz projekta 2013. godine i srećan je što ga je predao drugim programerima. 

HelloWorld
1
05.06.2023. ·
6 min

7 saveta za pisanje čistijeg koda

Odmah na početku moram da kažem, ja moj odnos prema kodu izražavam u prozi, a i u poeziji. Prvo ću da vam ponudim prozu, a u zaključku sledi poezija. Dakle… Ako ste se zainteresovali za pisanje boljeg koda - čestitam. Ušli ste u možda top 20% svoje branše, budući da se većina programera trudi da napiše kod koji pod a) radi, i koji se pod b) sviđa njima. Poseban sprat u Danteovom čistilištu ide za ekipu čiji kod je pod c) “pametan” i zauzima minimalan broj linija. Ništa od ovoga nije bitno za čist kod, da se odmah razumemo, sem da kod naravno, pod a) radi, ali to možemo podrazumevati bez posebnih napomena.   Bez sumnje, odlučili ste da se uozbiljite i rekli ste sebi, “kako sam učio kad sam bio u školi”? Odgovor je naravno - putem knjiga i beleški. Dobro, sada korak dalje, izguglali ste koje su to knjige koje sOfTvErSki InŽeNjEr mora da pročita (jer kad se već cimate toliko oko svog koda postajete inženjer, a ne običan smrtnik programer). Stižemo do monumentalnog dela Roberta C. Martina “Čist kod”.   E sada, čist kod možemo shvatiti kao gomilu pravila koja se bave pisanjem koda koji je, čitak, lak za održavanje i izmenu i lak za testiranje (popularno nazivan “robustan”). Takođe ga možemo definisati i kao gomilu pravila koje stariji programeri koriste kao izgovor da peglaju pisanje mlađih programera koji su neretko bolji od njih, ali red se mora znati - čekaj mali, pa ne možeš tako - vidi na šta ti ovo liči. Ja ću pokušati da vam dam (taličan broj) 7 saveta za pisanje čistijeg koda, podrazumevajući da ste već pročitali samu knjigu i gomilu sažetaka koje programeri-piskarala poput mene izbacuju na nedeljnom nivou. Pa da uđemo u meso konačno:   Higijena je pola zdravlja. Udarite nekad enter. Ovo je čisto vizuelna primedba. Mnogo više vremena provodimo čitajući nego pišući kod, a enter prosečne logitech tastature podnosi oko 50 miliona udaraca. Pomozite bratu/sestri kolezi i vodite računa o vertikalnom ritmu. Dakle koristimo samo jedan enter, on odvaja logičke celine koda i (između ostalog) naglašava početak i kraj neke petlje. Razmišljajte o tome. Uvlake da ni ne spominjem, 4 spejsa / 2 taba, odlučite se kao ekipa i držite se toga.  Budite jasni kada komunicirate. Ne skraćujte imena funkcija i varijabli bez potrebe. Vraćam se na onih 50 miliona udaraca koje tipka trpi - zažmuriću ako umesto temporary napišeš tmp, pa čak i number može da bude num, ali koliko je kod lepši ako može jednostavno da se čita. Ti kada čitaš i interpretiraš skraćenicu, KOLIKO GOD ona bila česta, ti zaumuckuješ u procesu. Ukoliko misliš da je ime funkcije odnosno varijable predugačko, ili pokušavaš previše da uradiš na jednom mestu, ili se nisi dobro izrazio.  Manje je nekad više. Malo konkretnije kad smo već kod funkcija - preferirajte funkcije koje imaju MANJE argumenata. Kako god se okrene, ukoliko funkcija treba da primi mnoštvo argumenata, verovatno pokušava previše da uradi. Možda čak prima i neku “boolean” vrednost pa se koristi na više mesta, A TA BOOLEAN VREDNOST deli funkciju na tipa 2 dela, gde se jedan deo uopšte ne izvršava (buraz onda napiši drugu funkciju za taj drugi deo logike).  Priznaj da možeš pogrešiti. Pozabavi se greškama. U zavisnosti od dela arihtekture i jezika kojim se piše, stvari su drugačije, ali na kraju dana - moramo se ograditi od savršenog funkcionisanja aplikacije. Nekad nešto neće biti u bazi, nekad će promene u strukturi podataka vratiti neočekivani rezultat - tvoj kod mora biti DOVOLJNO ČIST da pravilno obradi greške, a ostane čitljiv.  Preispitaj svoje tvrdnje pre nego što ih postaviš kao činjenice. Oslonite kod na automatizovane testove. Neki bi možda rekli da pisanje testova nema toliko veze sa osnovnim kodom, ali neki ljudi stavljaju i ananas na picu. Poenta je da kod koji treba da bude testiran, teži da bude iscepkan u jasne celine, jer je baš takav kod lak za testiranje (a pisanje testova ne bi nikad trebalo da oduzima suviše vremena)  Suzdržite se suvišnih komentara. Ali stvarno. Ukoliko vaš kod zahteva komentar da bi bio jasan verovatno može biti bolje napisan. Umesto magičnih brojeva ubacite deskriptivnu konstantu, možda zalepite konstantu na neku isto tako deskriptivnu enumeraciju, preimenujte funkciju i - rešite se suvišnih komentara.  Znajte kad da prekršite pravila. Naravno, svaki programer u usponu će se prvo uhvatiti DRY i KISS pravila jer su po 3(4) slova, i lako se pamte i onda ispadneš pametan jer se “pozivaš na neki princip” da opravdaš svoj loš kod. Moj odgovor je, “copy/paste je iz raja izašao”. Tu sad ne propagiram regresiju u kameno doba i lenjost, ali želim da poentiram sa nečime što ne čujem dovoljno često. Nakon što se upoznaš sa pravilima, tek onda dobijaš “pravo” da ih kršiš. Čitljivost je ključna osobina koda, i principi iznešeni u teoriji čistog koda su definitivno dobra prilika da “stojimo na ramenima džinova” istorije kodiranja, ali takođe moramo shvatiti da postoji mnogo faktora iza softverskog projekta. Da se izrazim slikovito - neke bitke jednostavno ne vredi povesti, i neke stvari jednostavno ne možemo predvideti.  Da sumiram i sipnem onu poeziju koju sam obećao s početka. Baš ovaj poslednji savet je nešto što mi je možda najlepše kod programiranja. Većina programera piše kod koji se u nekom trenutku kompajlira i prevodi u mašinski jezik. Postoji mnogo praktičnih razloga zašto je tako, ali zastanimo na trenutak sa tom informacijom. Dakle ja pišem, da bi (budući ja) i neko drugi taj kod čitao. A ljudi kao ljudi, vole igre, vole zanimljivosti, vole da se izraze kao individue. Baš ta sitna odstupanja od pravila, kombinovana sa veštom ličnom interpretacijom principa nam daju taj prostor koji ja zovem “coyote time”.    Izraz “coyote time” dolazi iz industrije igara. Naime, developeri su shvatili da postoji poseban elemenat zabave kada naš Super Mario tip karaktera pretrči preko ivice (kao kojot u crtanom filmu) i trči po vazduhu. To dozvoljava da se odraz koji nije savršeno tempiran (i vrši se od “vazduha”, a ne od čvrstog tla), završi kao uspešan skok preko ogromne litice. Taj momenat nategnutosti pravila kreira uzbuđenje i popravlja iskustvo igre jer ne platimo za svaku malu grešku, već idemo dalje i iskustvo igre se nastavlja neometano.  Ovo se prenosi na programiranje gde imamo poseban momenat zadovoljstva - dobro poznajemo pravila, vešto “plešemo” unutar njih i povremeno iskoristimo naš “coyote time” ne bismo li nastavili razvoj neometano, preskočili preuranjenu optimizaciju i zapravo stigli do trenutka gde je naš najveći izazov. Odatle možemo sa mnogo “visočije” pozicije da sagledamo problem i pišemo optimizacije i testove u “pravom trenutku”.  I, konačno, da povežem ovo sa čistim kodom - pisanje čistog koda je sprovođenje teorije u praksu. Da bismo se izveštili u ovome moramo to da radimo dugo, a opet, da bismo radili nešto dugo, moramo barem malo da uživamo u tome. Uđite duboko u literaturu, rezonujte sa sobom ili drugim kolegama o svom kodu. Izolujte procese koji vas zamaraju, koji su suvišni - probajte da ih srušite i izgradite ponovo na nekom drugom principu ili na izuzetku koji ima smisla. Igrajte se i naučite da uživate u pisanju ČISTIJEG (pošto savršeno čist ne postoji) koda. 

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.

17.05.2023. ·
3 min

Etičko Hakovanje, White Hat i Black Hat hakeri 

Etičko hakovanje odnosi se na legalno i dobroćudno prodiranje u računarske sisteme kako bi se testirala njihova bezbednost i eventualno otkrile ranjivosti. Etički hakeri, poznati kao "white hat" hakeri, koriste svoje veštine u skladu sa zakonom i sa dozvolom vlasnika sistema. Čak i ukoliko nemaju dozvolu vlasnika sistema, a pronađu potencijalnu pretnju po bezbednost unutar aplikacije, najčešće pokušavaju da stupe u kontakt sa vlasnikom sistema i pružaju informacije o propustu na koji su naišli.  Oni rade na prevenciji i otkrivanju neovlašćenog pristupa informacijama, zaštiti podataka i održavanju bezbednosti informacionih sistema. Nasuprot njima, "black hat" hakeri koriste svoje veštine za nelegalne i zlonamerne svrhe, kao što su krađa podataka, finansijske prevare ili nanošenje štete organizacijama.  White Hat (Etički) hakeri White Hat hakeri su stručnjaci za informacionu bezbednost koji koriste svoje znanje i veštine kako bi pomogli organizacijama u zaštiti svojih informacionih sistema. Oni sarađuju sa vlasnicima sistema kako bi pronašli i otklonili ranjivosti, pre nego što to učine zlonamerni napadači. Etički hakeri često koriste metode i alate slične onima koje koriste "black hat" hakeri, ali njihov cilj je poboljšanje bezbednosti, a ne eksploatacija ranjivosti.   Organizacije širom sveta angažuju white hat hakere kako bi testiralei svoje sisteme i aplikacije i, kako bi se osiguralei da su njihovi podaci i korisnici zaštićeni. Etičko hakovanje obuhvata različite aspekte kao što su:  Testiranje proboja (penetration testing): Ovo podrazumeva simulaciju napada na računarske sisteme kako bi se identifikovale ranjivosti i preporučile odgovarajuće mere zaštite.  Revizija bezbednosti: Etički hakeri procenjuju politike i procedure organizacija kako bi osigurali da su one u skladu sa standardima industrije i zakonodavstvom.  Obuka i svest o bezbednosti: Etički hakeri često obučavaju zaposlene u organizacijama kako bi ih naučili da prepoznaju i izbegnu potencijalne pretnje, kao što su phishing napadi.  Black Hat (Neetički) hakeri Black Hat hakeri su pojedinci koji se bave neovlašćenim prodiranjem u računarske sisteme i mreže, sa ciljem krađe, sabotaže ili iznuđivanja. Oni koriste svoje veštine za ličnu korist, bez obzira na štetu koju mogu naneti drugima. Black hat hakeri često koriste sofisticirane alate i tehniku kako bi ostali neotkriveni i ostvarili svoje zlonamerne ciljeve. Neki od najčešćih ciljeva black hat hakera uključuju:   Krađa podataka: Black hat hakeri često ciljaju organizacije kako bi ukrali osetljive informacije, kao što su finansijski podaci, lični identifikacioni podaci ili korporativne tajne.  Finansijske prevare: Nelegalno pristupanje bankovnim računima, kreditnim karticama ili drugim finansijskim instrumentima kako bi se preusmerila sredstva ili izvršile neovlašćene transakcije.  Ransomware: Ovo je zlonamerna vrsta softvera koji šifruje podatke žrtve i zahteva otkupninu kako bi se podaci oslobodili. Black hat hakeri često koriste ransomware kako bi iznudili novac od pojedinaca ili organizacija. Jedan od primera ransomware napada je bio napad na Republički Geodetski Zavod sredinom prošle godine.   Distribuirani napadi odbijanja usluge (DDoS): Ovi napadi se koriste za preopterećenje mrežnih resursa ili usluga, što može dovesti do pada sistema ili mreže. Cilj ovih napada može biti nanošenje štete konkurenciji, iznuđivanje ili aktivizam.  Etičko hakovanje kao profesija  Dok se etičko hakovanje uvek ne smatra "glamuroznom" karijerom, ono nudi mnoge mogućnosti za stručnjake iz oblasti informacione bezbednosti. Etički hakeri mogu raditi kao konsultanti, zaposleni u korporacijama ili čak kao članovi vladinih agencija. Industrija informacione bezbednosti brzo raste, a potražnja za etičkim hakerima se povećava kako se organizacije sve više oslanjaju na tehnologiju i internet.  Edukacija i sertifikacija Postoji nekoliko sertifikata i obuka koje etički hakeri mogu steći kako bi unapredili svoje veštine i dokazali svoju stručnost. Jedan od najpoznatijih sertifikata je Certified Ethical Hacker (CEH), koji pruža obuku i znanje o različitim tehnikama hakovanja i alatima. Osim toga, postoje i drugi sertifikati kao što su CompTIA Security+, Offensive Security Certified Professional (OSCP) i GIAC Penetration Tester (GPEN). 

15.05.2023. ·
4 min

3 principa na kojima je zasnovan uspešan softver

Što se duže bavite razvojem softvera, sve više shvatate da ne postoje čvrsta i sigurna pravila koja garantuju uspeh. Međutim, postoji tri principa koji mogu biti izuzetno korisni za izgradnju uspešnog softvera:  Dosadno je dobro Dizajnirajte tako da može da se testira  Ništa nije zauvek  Možda ćete primetiti da nećemo pisati o mikroservisima ili bilo kojoj određenoj tehnologiji uopšte. To je zato što su ovi principi dizajna sistema na fundamentalnijem nivou. Oni vode vaš izbor tehnologije, a ne obrnuto. Proći ćemo kroz svaki princip posebno.  Dosadno je dobro  Biti dosadan je fundamentalno za dobar softver. To znači oslanjati se na akumulirano znanje svih koji su tu bili pre vas. Velike su šanse da niste prva osoba koja je naišla na određeni problem.   Istražite uobičajene obrasce i drugi uspešan softver. Pogledajte kako su drugi ljudi pre vas rešili određeni problem. Pronađite izveštaje o greškama i pogledajte kako su ljudi redizajnirali svoje sisteme kao odgovor. Ukratko, koristite znanje koje su skupili drugi, ma koliko vam to delovalo dosadno.  Programeri često imaju tendenciju da obnove stare stvari koristeći najnovije tehnologije, samo zato što su zanimljive. Neki programeri čak biraju svoj tech stack samo da bi mogli da dodaju nešto novo i “kul” u svoj rezime. Izbegnite iskušenje.   Ukoliko nešto pravite, budite pažljivi kada usvajate nove tehnike i tehnologije.   Dizajnirajte tako da može da se testira  Kako da znate da li vaš softver ispunjava sve zahteve? Pa, testirate ga. Kada ste vremenski ograničeni, iskušenje je da uradite što manje testiranja. Stvar je u tome što se testiranje uvek dešava - samo je pitanja da li to rade QA testeri ili vaši korisnici. Korisnici su odlični u pronalaženju svih bagova koje niste ni tražili. Onda shvatite da niste uštedeli nikakvo vreme, već da ste samo otežali sebi posao - jer sada morate da sredite problem, a softver su ljudi već počeli da koriste.  Čak i ako želite da izbegnete da vaši korisnici prvi pronađu greške, ne možete zauvek da testirate svoj softver pre nego što ga objavite. Dakle, morate da pronađete način da dizajnirate softver koji se lako testira. Mnogi ljudi preporučuju korišćenje Test Driven Development-a, ili TDD-a, kako bi se osiguralo da se softver može testirati.   Bez obzira da li koristite TDD ili ne, potrebno je da pišete kod koji se može testirati.  Ništa nije zauvek  Blagoslov i prokletstvo softvera je to što se lako menja. Mostovi su dobra analogija za ovaj princip, jer su sušta suprotnost od softvera. Promena fizičke infrastrukture je spora, bolna i skupa. Kada se most izgradi, niko neće doći šest meseci kasnije i reći graditelju da ima nedelju dana da ga spoji na drugi put koji je desetak kilometara niz reku. Međutim, svaki programer ima svoju priču o tome kako je svoj softver prilagodio za rad sa neočekivanom komponentom u poslednjem mogućem trenutku. Jedini softverski sistemi koji nisu modifikovani su oni koje niko ne koristi.  Morate da dizajnirate svoj softver za promene, jer nije pitanje da li će, nego kada će se od vas tražiti da nešto ključno promenite ili prilagodite.   Drugi razlog da imate promene na umu je taj što ćete možda morati da se vratite par koraka unazad. Svaki programer je iskusio ovo u jednom trenutku: objavi se ažuriranje i softver samo prestane da radi. Kada se to dogodi, potrebno je da se vratite na stariju verziju dok ne shvatite šta je pošlo po zlu. Ako pravite softver koji nije sposoban za tako nešto, nabacićete sebi mnogo više posla.  Kako biste osigurali da je softver fleksibilan na taj način, podržite stare API-jeve uz nove. Ako imate bazu podataka, postarajte se da sve promene mogu da se vrate tako što nećete redefinisati ili uklanjati kolone ili tabele.  Postoji još jedna promena za koju morate da budete spremni: eventualna zamena vašeg sistema. Pisanje softvera je takvo da često niko nije siguran šta je apsolutno tačan odgovor kada se nešto pravi. Ako neko zameni vaš kod nemojte to shvatati kao uvredi, ako ste napravili softver koji traje pet godina to je impresivno.  Jednog dana, svaki deo koda koji ste napisali će biti isključen i deo vašeg posla u dizajniranju softvera je da taj proces bude što bezbolniji. Možda u tome uspete ako budete imali ove principe na umu. 

HelloWorld
0
12.05.2023. ·
2 min

Zašto su veštine rešavanja problema tako važne u programiranju

U razvoju softvera, rešavanje problema je proces u kojem se koriste razne teorije i istraživanja kako bi se došlo do rešenja određenog  problema, dok se testiraju različite ideje i primenjuju najbolje prakse za postizanje željenog rezultata. Rešavanje problema takođe ima veze sa kreativnošću i logičkim razmišljanjem za identifikaciju problema i njihovo rešavanje pomoću softvera.   Vrhunski programeri nisu stigli do tog nivoa samo zato što dobro znaju programske jezike ili tehnologiju koju koriste, već i zato što su odlični u rešavanju problema.  Dobro korišćenje programskog jezika može se uporediti sa tim kako je biti vešt i kvalitetan pisac. Dobar pisac mora znati kako da konstruiše rečenice i pravilno koristi gramatiku, ali pisanje je više od toga. Da biste bili Stiven King nije dovoljno da znate svaku reč u rečniku, treba biti kreativan i razmišljati van okvira. Isto se može reći i za programere.   Programeri rade na različitim zadacima, a biti na vrhunskom nivou u rešavanju problema je veština koja je od suštinskog značaja za bilo koje izazove koji mogu da se jave tokom razvoja softvera.  Izdvojili smo nekoliko saveta kako da razvijete svoje veštine rešavanja problema.  Paralelno razmišljanje Paralelno razmišljanje je ključna veština za programere. Ovo vam omogućava da u isto vreme obavljate dva zadatka koji se dopunjuju (nešto poput optimizovanog oblika multitaskinga). Ako steknete sposobnost da menjate redosled zadataka u hodu kako biste poboljšali paralelno rešavanje problema, možete ostvariti bolje rezultate i uštedeti dragoceno vreme.  Razdvajanje složenih ciljeva Kada je u pitanju pravljenje softvera, moraćete efikasno da ocrtate korake i zadatke neophodne za postizanje vašeg cilja. Programeri moraju da nauče da podele velike i složene zadatke na manje zadatke jer je ovo važna veština koja će vam pomoći da ostvarite bolje rezultate.  Ponovna implementacija postojećih rešenja Ne morate uvek da izmišljate točak. Dobri programeri znaju da je nekada najjednostavnije rešenje najbolje, kao što je korišćenje već postojećih alata pre nego što se odlučite da napravite nešto poptuno novo. Razvijanje veština rešavanja problema je u velikoj meri povezano sa pronalaženjem rešenja koja već postoje i njihovom ponovnom upotrebom.   Budite spremni na promene Imajte na umu da ciljevi imaju tendenciju da se razvijaju. Ako vaš klijent dođe sa novim idejama, to će značiti promenu vaših ciljeva i preuređivanje zadataka. Dobar programer mora da nauči da kreira rešenja na način koji ne zahteva potpuni redizajn.  Timski rad Programeri moraju da imaju dobre međuljudske odnose i da budu sposobni da sarađuju. Sposobnost saosećanja, prihvatanja povratnih informacija, suočavanja sa kritikom, pažljivo slušanje i ispoljavanje poštovanja prema drugima su važne karakteristike i sposobnosti neophodne za timski rad, a samim tim i za rešavanje problema na poslu. 

HelloWorld
1
04.05.2023. ·
4 min

Naš prvi Open Source projekat - IPS QR Code Generator

Biti "na klupi" nije najsrećnija stvar koja može da se desi jednom developeru, ali ako ćemo iskreno - to nije nešto što možemo da izbegnemo u ovom našem poslu. Meni je lično baš teško padalo “dangubljenje” tako da sam prihvatio predlog Java Division Lead-a u Ingu da tokom down-time perioda uradim nešto korisno i to ne samo za sebe ili za firmu, već i za širu IT zajednicu.   Složili smo se da krenem da radim na Open Source - kodu koji je dostupan svima onima koji žele da ga koriste, besplatno i slobodno, u bilo koje svrhe, uključujući i komercijalne. Za ilustraciju, najpoznatiji primeri Open Source sistema su npr. Mozzila Firefox, Wordpress i Linux OS koje koriste i svakodnevno unapređuju milioni ljudi širom sveta (čak sam negde pronašao podatak da 85% svih softvera na svetu koristi neku open source komponentu).  Činjenica je da ovaj naš posao ne bi bio moguć bez OSS projekata koje koristimo u svakodnevnom radu, pa je red bio da kao kompanija malo i vratimo zajednici.  Nakon kraćeg istraživanja, shvatili smo da želimo da napravimo IPS (Instant Payments Serbia) QR Code Generator - sigurno svi koristite mobilne bankarske aplikacije pa znate da je to ona crno bela kockica koja kad se skenira popuni celu uplatnicu umesto nas i omogućava nam da plaćanje završimo u dva klika. Ključna informacija ovde jeste da za Javu nije postojala dostupna biblioteka za generisanje QR kodova za Srbiju i upravo sam tu pronašao svoju motivaciju da počnem da radim na jednoj bibliotekici koja će moći da se koristi za aplikacije za plaćanje u Srbiji. Kao primer sam koristio jedan sličan projekat koji je takođe rađen za plaćanja u našoj zemlji ali u Java Script-u, dok je "naša" backend verzija namenjena Kotlin, Java i ostalim developerima iz Java ekosistema. Projekat može da služi kao biblioteka koja se uvozi kao dependency u bilo koji Java softver da bi uz pomoć određenih podataka generisala sliku QR koda, a druga mogućnost je da se aplikacija koristi preko bilo koje komandne linije da bi se dobio ovaj isti rezultat i.e. QR kod (mada je teško zamisliti da bi se neko odlučio za drugu opciju jer nije naročito user-friendly😉). Trebalo mi je par nedelja (sa prekidima), da završim ovaj projekat, uz stalne konsultacije sa već pomenutim Java Division Leadom Milošem Kostićem i primenu njegovih konstruktivnih saveta koji su se najviše odnosili na čitljivost samog koda kao i na kvalitetno dokumentovanje kako bi se olakšalo korišćenje koda. Kod je postavljen na GitLab jer i firma koristi ovu platformu, a može mu se pristupiti i preko centralnog repozitorijuma Maven-a (alat koji se koristi u Java ekosistemu za dobavljanje dependency-ja), tako da je dostupan u dva oblika (za čitanje i korišćenje). Ovo je prvi Ingov (i moj) Open Source projekat koji je zahtevao i jedno ozbiljno istraživanje, uključujući i pravne aspekte u smislu koju licencu odabrati, a mi smo se na kraju odlučili za Apache 2.0 koja omogućava i korišćenje i menjanje koda, uz obavezno navođenje svih izmena. Iako postoje neke sumnje u potencijalne njegove zloupotrebe, verujem da javno dostupnim kodom možemo da postignemo veću transparentnost kao i veću bezbednost jer velik broj developera može da pregleda kod i ispravi neku grešku, ili da javi kreatorima koda da to urade. Kada sam zamolio ChatGPT za neku duhovitu metaforu za opisivanje OSS-a, on mi je (veoma maštovito) rekao da zamislim Open Source kao jednu zajedničku baštu u kojoj ceo komšiluk doprinosi svojim radom i resursima da bi na kraju svi zajedno uživali u plodovima (not bad at all!).  U firmi smo jako ponosni na urađeno jer se nadamo se da ćemo ovim podstaći ostale kolege iz firme ali i iz šire programerske zajednice u Srbiji da se ubuduće više angažuje na ovakvim i sličnim projektima jer ih nema dovoljno.  Nadamo se i da ćemo uskoro da proširimo Ing-ov OSS portfolio i da je ovo samo prvi od mnogo predstojećih ovakvih projekata. Posle dobrog iskustva koje smo imali sa ovim projektom, plan Ing-ove Java Divizije je da se oproba i sa komplikovanijim projektima. Doduše, ja se neko vreme neću ovim baviti jer (konačno) nisam više na klupi 🙂 O autoru: Ilija je počeo da se bavi programiranjem pre pet godina, i kaže da mu se ljubav prema ovoj profesiji rodila kroz igranje video igara i “čeprkanje po kompjuterima” (krekovanja igrica, opravljanja bagova, a ponekad i sastavljanja računara). Živi u Nišu, a vreme nakon posla provodi sa verenicom i ljubimcima - mačkom, psom i hrčcima. Ilija voli da planinari, ali i da gleda Sci-fi serije i filmove.  Ingu se pridružio septembra prošle godine.

HelloWorld
0
29.03.2023. ·
5 min

Razlike u razvoju aplikacija za iOS i Android

Kada su u pitanju mobilni uređaji (telefoni i tableti), postoje dva operativna sistema vredna pomena – Android i iOS.   Android sa udelom na globalnom tržištu od 70,6%, i iOS koji je „zauzeo“ 27,6%, pokazuju neki izvori.   Prva komercijalna verzija Google Androida (1.0), pojavila se 23. septembra 2008. godine i tada nije baš moglo da se pretpostavi da će 15 godina kasnije, praktično, postojati samo dva OS-a, posebno jer je većini korisnika Symbian bio omiljeni OS. Apple je predstavio iOS godinu dana ranije, pod nazivom „iPhone OS“, a kada su u ponudu ubacili i iPad, naziv operativnog sistema promenjen je u „iOS“ i prvi koji se pojavio bio je iOS 4. Kasnije, sa predstavljanjem iOS 13, Apple je počeo da nudi poseban OS za iPad – iPadOS. Prekretnica je bila 2012. godina, jer su se tada zahuktali Android i iOS već nalazili na svakom četvrtom uređaju na svetskom tržištu, a do tada neprikosnoveni Symbian još uvek se dobro držao (bio je prisutan na svakom petom uređaju). Svoje mesto pod suncem imali su i sada već zaboravljeni BlackBerry OS, Nokia OS, Samsung OS…   Različiti programski jezik  Od tog trenutka, praktično, nestaju svi ostali i počinje „trka“ udvoje, a mi ćemo u daljem tekstu pokušati da vam predstavimo osnovne razlike u procesu razvoja aplikacija za Android i iOS i šta bi bilo to što bi, eventualno, moglo da vas opredeli za jednu od dve strane.  Najveća razlika svakako je tehničke prirode, jer ove dve platforme koriste, pre svega, različite programske jezike i različito razvojno okruženje. iOS koristi programski jezik Swift, dok se Android oslanja na Javu i u poslednje vreme, sve više na Kotlin. Iz ugla programera, programiranje u Swift-u je brže i lakše, međutim, većina njih se slaže da se to u budućnosti može promeniti, jer je Kotlin, moderan programski jezik koji ima ozbiljan potencijal.  Što se tiče razvojnog okruženja, iOS koristi XCode tool, Android programeri se oslanjaju na Android Studio. XCode nudi pristojan „editor“ i lako konfigurisanje. Android Studio, sa druge strane, veoma brzo generiše različite verzije aplikacije, za različite uređaje. Takođe, na raspolaganju vam je „Gradle“, napredni alat koji nudi automatizam i jednostavnije upravljanje procesom razvoja aplikacije. Teško je izdvojiti bolje okruženje, jer oba imaju prednosti i mane. Kod XCode je mana što kod velikih projekata integrisano radno okruženje(IDE) postaje komplikovano, a Android studio zna da „pojede“ previše memorije.  Kada je u pitanju dizajn sistema, iOS arhitektura nudi lakši i brži rad, uz manju mogućnost greške, pre svega, zahvaljujući „view controllerima“ koji mogu da kontrolišu ceo ekran ili samo neke delove ekrana. Takođe, Apple sam proizvodi uređaje na kojima će biti iOS i to dosta olakšava stvar, za razliku od Gugla, čiji će OS završiti na uređajima različitih proizvođača, sa različitim veličinama ekrana, različitim brzinama, rezolucijama… Android nudi „otvoren izvorni kod“, kod iOS-a je zatvoren i nije javno dostupan. Iako otvoren izvorni kod nudi veći nivo kreativnosti programerima, taj detalj više znači proizvođačima mobilnih uređaja, jer proizvođači mogu da „prilagode“ svoje uređaje. Samsung je, na primer, poznat po „ozbiljnim“ modifikacijama Androida na svojim uređajima i onda to pravi veliku glavobolju programerima. Upravo ta „šarenolikost“ Android uređaja jedan je od razloga zašto je razvoj i održavanje aplikacija za Android skuplje i zahteva više vremena.   Apple ima stroge regulative, Google tolerantniji na greške  Kad smo već kod cene, ona za nalog iOS programera iznosi 99$ godišnje, dok za nalog Android programera treba da izdvojite 25$ samo jednom. Ipak, treba napomenuti da iOS aplikacije mogu da se razvijaju samo na „Mac“ računarima i to bi moglo da predstavlja dodatni trošak u vašem budžetu. Android je fleksibilniji i aplikacije mogu da se razvijaju na svakom računaru.  Kada napravite aplikaciju, treba i da je objavite. Sa jedne strane je Google Play Store, a sa druge Apple App Store. Obe „prodavnice“ izgledaju slično iz ugla krajnjeg korisnika, ali, ipak, iz onog ugla koji nas trenutno interesuje postoji bitna razlika. Apple ima striktne i stroge regulative, pa postoji mogućnost da vaša aplikacija nikada i ne ugleda „svetlost dana“ ukoliko nije savršena. Google nema tako visoke standarde kada je u pitanju tolerancija na greške, tako da je mnogo jednostavnije pojaviti se na njihovom marketu. Zbog toga Google treba da poradi na Androidu kako bi se poboljšao. Ciljne grupe Google-a i Apple-a su različite i taj podatak bi trebalo da ima uticaja na vaš konačni izbor. Google će sa Androidom svakako pokušavati da osvoji još veći deo tržišta, a Apple će se, pre svega, truditi da zadrži svoje korisnike. Google je fokusiran na popularnost i dostupnost, a Apple na kvalitet koji umeju da naplate. Prema istraživanjima dostupnim na internetu, prosečan korisnik iOS-a je žena starija od 35 godina, koja ima fakultetsku diplomu, živi u gradskim oblastima i njeno domaćinstvo na mesečnom nivou prihoduje duplo više novca nego domaćinstvo prosečnog korisnika Androida. On je muškarac starosti 18-34 godine, ima završenu srednju školu i živi na selu ili periferiji grada.  Na kraju, treba pomenuti i to da postoji opcija da istovremeno razvijate softver za oba OS-a. Ovu opciju možete da ostvarite korišćenjem određenih alatki (cross-platform tools), od kojih su najpoznatiji React Native, Flutter, Cordova…Ipak, u ovom slučaju treba da budete spremni na kompromise. Ono što ćete dobiti su smanjeni troškovi, jer razvijate samo jednu aplikaciju, a ne dve. Samim tim, dobićete na brzini. Imaćete unificirani interfejs za obe platforme, višekratno iskoristiv kod i, naravno, vaša aplikacija će biti dostupna široj publici, nego da ste se opredelili samo za jednu platformu. Ono što gubite je fleksibilnost i „bogatstvo funkcija“, što će dovesti do smanjenog kvaliteta korisničkog iskustva krajnjeg korisnika. Kod će vam biti dosta kompleksniji, a pravi izazov će biti održavanje jedne takve aplikacije. 

HelloWorld
0
Da ti ništa ne promakne

Ako želiš da ti stvarno ništa ne promakne, prijavi se jer šaljemo newsletter svake dve nedelje.