SITNA CREVCA<>
062017<><>

Kako postati programer (9): baze podataka, git, konvencije

Zmije i kamile

Konvencije, cheat-sheet, SQL upiti, Github...

Ovaj broj ćemo započeti laganim temama, a prva od njih je: konvencije u pisanju programa. Često se očekuje da se u nekom programskom jeziku ili unutar velike kompanije poštuju pravila pisanja kôda - nazivanje promenljivih, funkcija, konstanti, dubine uvučenih redova u ugnježdenim programskim blokovima i tako dalje. Neka od najpoznatijih pravila pisanja su Camel Case i Snake Case. Sami nazivi su potekli od vizuelnog izgleda teksta, jer se imenovanje po ovim pravilima vrši na sledeći način:

nekaPromenljiva, nekaTamoFunkcija(),

neka_promenljiva, neka_tamo_funkcija().

Ostatak konvencija ćete vremenom sami naučiti. Želimo još i da ukažemo na postojanje tzv. cheat-sheetova. Radi se o malo većim slikama na kojima su ispisane sve najvažnije komande i pravila nekog jezika ili tehnologije. U časopisu bi slika zauzimala previše mesta, ali sada znate da je možete koristiti kao podsetnik u toku rada (možda nije loša ideja ni da odštampate sliku kako biste je okačili na zid).

Design Patterns

Šabloni dizajna (design patterns) nisu nikakav framework, biblioteka ili nešto opipljivo. Radi se o istorijski dokazanim šablonima za kreiranje nekog programa. Umesto da sami mozgate kako da „od nule” organizujete svoj kôd, istorija je pokazala na koji način je najbolje organizovati klase, metode i celu strukturu programa kako bi bio što lakši za održavanje i razvijanje. Naravno, treba imati u vidu i šta je to što želite da napravite, jer nisu svi šabloni pogodni za svaku aplikaciju.

Jedan od najpopularnijih je tzv. MVC pattern (model view controller). Pojednostavljeno rečeno, Model bi bili podaci kojima program barata (npr. predstavljeni preko klasa). View bi bio deo kôda zadužen za prikaz podataka (modela) na ekranu. Controller je deo programa koji bi služio kao spona između ove dve celine. Ideja je da celine programa budu nezavisne, čime se kôd lako dopunjuje ili čak koristi u nekom drugom projektu. Na primer, menjanjem kôda za model ne utiče se na deo kôda za njegov prikaz, te će prikaz podataka raditi i ako dođe do promene modela, i obrnuto. Tokom godina su nastajale varijacije na temu, pa tako imamo MVP (model view presenter), MVVM (model view view model) i tako dalje. Ova podela kôda se takođe naziva Separation of Concerns (SoC). Sličan, ali drugačiji termin je coupling/decoupling kôda i odnosi se na to koliko, recimo, jedna klasa zavisi od druge. Kôd može biti podeljen na celine, ali da su u njima klase „isprepletane”. I tu važi pravilo da što su klase manje zavisne (loosely coupled), lakše je promeniti kôd ili ga iskoristiti na drugom mestu.

Danas nije retkost da se dosta specijalizovan deo kôda izdvaja kao neki programski šablon. U svakom slučaju, postoji njihova podela po tipovima, i dalje po podgrupama. Ako ste programer, trebalo bi da znate za tzv. gang of four, četiri autora koja su još 1994. godine izdala knjigu koja je opisala 23 programska šablona („Design Patterns: Elements of Reusable Object-Oriented Software”). Tu je svakako i novija literatura i mnogi članci na Internetu.

MySQL uvod

Veliki broj komercijalnih (web) aplikacija na kojima ćete raditi u nekoj firmi, koristiće bazu podataka. Aplikacija će morati negde da snima raznorazne podatke, kao što su registrovani korisnici, inventar firme, razne veze između postojećih podataka i tako dalje. Na primer, restoran može imati evidenciju gostiju, meni tj. ponudu hrane i pića, i slično.

Kada pravite aplikaciju, ovakve podatke koje želite da sačuvate teoretski možete držati u običnom tekstualnom fajlu. Preko programskog jezika možete kreirati fajlove, čitati iz njih ili pisati u njima. Problem je što taj kôd nije jednostavno sastaviti, a pogotovo optimizovati u slučaju da postoji veliki broj unosa. Zato su tokom dugog niza godina razvijana rešenja kao što su baze podataka.

Jedna od najpoznatijih baza je MySQL. Ona podatke zapisuje na hard-disku, ali ima sopstveni sistem kako to radi (SQLite, recimo, sve drži u jednom fajlu). Baze su napravljene tako da u njima možete efikasno čuvati ogroman broj podataka i iz njih izvlačiti podatke tačno po onim kriterijumima koji vas interesuju. Nažalost, ili sreću programerskog posla, ovako moćan sistem morao je da razvije i sopstveni jezik koji morate naučiti kako biste uspešno baratali podacima. Mi ćemo se osvrnuti na grafički korisnički interfejs koji je lakši za početnike i koji otklanja potrebu za direktnim kucanjem svih komandi iz komandne linije.

Instalaciju MySQL baze započnite posetom sajta i preuzimanjem instalacionog fajla za vaš računar. Izaberite besplatnu community verziju i preporučeni automatski instaler (postoji samo 32-bitna verzija instalera, izaberite bilo koju od dve ponuđene). U toku instalacije izaberite i MySQL Workbench, koji je grafički interfejs za bazu (ukoliko budete imali neki problem, možete da ga preuzmete odvojeno sa Interneta). Po završetku instalacije, proverite koji servisi su pokrenuti u Windowsu i verovatno ćete pronaći i MySQL servis (možete izabrati da se pokreće automatski sa podizanjem Windowsa, kako ne biste morali da to ručno ponavljate svaki put). Imajte u vidu da je instalacija poprilično neprijatna i ima veliki broj opcija. Uglavnom, izaberite sve kako je ponuđeno, a određene prijavljene greške možda možete da zanemarite (recimo, nemate instaliran Python, pa se tzv. konektor ne može instalirati za taj jezik). Nakon instalacije vi ste zapravo instalirali MySQL server, koji može da ima više baza u sebi.

Pokrenite Workbench. Na glavnom ekranu bi trebalo da bude ponuđena konekcija sa MySQL serverom. U ovom slučaju, server je vaš računar. Ukoliko opcija nije izlistana, dodajte je sami preko „plus” ikonice. Lokalni računar bi trebalo da ima naziv localhost i njegova IP adresa da je 127.0.0.1. Ukoliko ste tokom instalacije uneli korisničko ime i šifru za bazu, morate ih ovde ponoviti (šifra se upisuje preko opcije store in vault).

Kao i obično, instalacija radnog okruženja je jedan od težih koraka. Doduše, i dalje vas čeka mnogo posla, ali pomoći ćemo vam da naučite neke osnovne koncepte.

Na ekranu koji se pojavio sa leve strane možete videti spisak šema (scheme). Iako su neke šeme kao primer stigle uz instalaciju, dodajte novu (desni klik -> create schema) i ona će biti vaša baza (u MySQL-u to su sinonimi).

Tabele

Baza se sastoji od tabela. Potrebno je malo iskustva sa podelom baze na tabele. Ako nastavimo sa primerom restorana, jedna tabela može biti tabela gostiju. Tabela Gosti će sadržati polja kao što su ime gosta, prezime, adresa, broj_godina (nije preporučljivo koristiti razmak u nazivima). Pitanje je da li su restoranima potrebni baš ovakvi podaci, ali poslužiće kao ilustracija. Svaki gost će sadržati sva ova polja, koja se u bazi nazivaju kolonama, dok će gosti, kako ih dodajete, činiti redove.

Slično promenljivama u programskim jezicima, morate odrediti koje vrste su podaci o gostima. U ponudi su neke varijante tipova koje smo već pominjali, tako da će broj godina biti ceo broj (integer), a ostali podaci niz karaktera (string ili varchar na jeziku MySQL-a). Nije toliko bitno za sada da li će to biti dugački ili kratki niz karaktera ili integera, takve stvari ćete naučiti vremenom i imaće efekta na performanse tek u većim projektima.

Sve ovo može da se izvede u Workbenchu, u nekoliko koraka. Raširite vašu novu šemu klikom na plusić i, nakon desnog klika, na spisak tabela, koji je trenutno prazan. Izaberite Create Table. Napravite tabelu npr. „gosti” i kliknite ispod na praznu površinu da biste napravili prvu kolonu koju će tabela sadržati. Možete videti da je automatski stvorena kolona koja u nazivu ima ID. To je specijalna kolona u koju će se rednim brojevima upisivati svaki gost (biće automatski čekirana kockica Primaru Key i Not Null, tj. da ova kolona mora da sadrži vrednost). Verovatno ćete želeti da se ID gostiju automatski povećava za jedan kako ih dodajete u bazu, pa čekirajte i AI kockicu (auto increment).

Upiti

Završite sa kreiranjem tabele. Kliknite desnim tasterom na tabelu i izaberite prvu opciju za listanje njenog sadržaja (select rows). Upravo ste izvršili vaš prvi upit koji vam izlistava sve goste iz tabele. Tabela je prazna, ali kliknite na prazan red u donjoj polovini ekrana i ručno unesite nekoliko gostiju. Svaki gost mora da ima sve podatke iz tabele, pa makar neki bili i nepopunjeni (null). Potvrdite na apply i ponovo izvršite upit koji će ovoga puta prikazati tek unete goste.

Nadamo se da ste u prethodnim koracima primetili kako Workbench ispisuje određene komande koje će izvršiti nad bazom. Ove i još neke dodatne komande biste morali sami da pišete iz komandnog prompta u slučaju da ne koristite Workbench grafički interfejs. Nažalost, za bilo kakve napredne upite morate upoznati SQL sintaksu. Otvorite novi SQL tab (prva ikonica u toolbaru gore) gde možete upisati novi upit (query) i otkucajte:

SELECT * FROM gosti WHERE broj_godina > 30 ORDER BY prezime ASC

Ako se program „žali” što uz oznaku tabele niste napisali i naziv baze (šeme), postavite vašu šemu na default (preko desnog klika). Lako je shvatiti da upit vrši prikaz spiska svih gostiju starijih od 30 godina, sortirano po prezimenu počevši od slova „a”. ASC je skraćeno od ascending i označava redosled od prve ka poslednjoj vrednosti, što se u ovom slučaju odnosi na slova abecede.

Napravite drugu tabelu sa oznakom meni. Kreirajte, na primer, polja naziv_jela i cena. Unesite par stavki sa menija i napravite sledeći upit (proverite da li ste kolone u vašim tabelama nazivali drugačije od nas):

SELECT ime, prezime FROM gosti WHERE broj_godina > 30

UNION ALL

SELECT naziv, cena FROM meni WHERE cena > 1000

Napisani query (upit) izlistaće sve goste starije od 30 godina i sva jela sa menija skuplja od 1000 dinara. Obično se SQL komande pišu velikim slovima. Iako na ovom kratkom primeru deluje kao da kreiranje cele baze zahteva preveliki trud za prikazane primere, u praksi upiti mogu biti daleko složeniji, što ćemo demonstrirati u narednom članku.

U primeni, bazu verovatno nećete popunjavati ručno. Podatke možete učitati iz nekog fajla ili, na primer, na vašem sajtu svaki korisnik može da izabere da se registruje i ostavi komentar na neku vest. Vaš front end kôd će preuzeti te podatke, poslati ih na back end, koji će ih obraditi i poslati u bazu. Podaci korisnika koji se registrovao biće upisani u bazu u tabelu korisnika, a njegov komentar u tabelu komentara. Dakle, baza će se najčešće „sama” popunjavati interakcijom vaših korisnika. Između ovih tabela će postojati i neke veze, jer nije loše znati koji komentar je ostavio koji korisnik, jer ćete često prikazivati i te podatke. Možete napraviti odvojen deo sajta samo za administratore koji će moći da u bazu unose i iz nje čitaju neku drugu vrstu podataka, nedostupnu običnim korisnicima. Ukoliko želite da napravite neki upit za koji niste napravili interfejs u aplikaciji, uvek možete ručno pristupiti bazi preko Workbencha i sami kreirati upite ili promeniti bazu na bilo koji drugi način.

SVN i GIT

Ako se zaposlite i rad počnete na iole većem projektu, vaš tim će sigurno koristiti neki VCS (version control system), od kojih su najpoznatiji SVN i GIT. Uz pomoć ove tehnologije možete da fajlove vašeg programa uključite u „kontrolu”, tj. da ih „verzionišete”.

VCS omogućava da, dok programirate, u svakom trenutku možete pogledati istoriju menjanja kôda i vratiti sadržaj fajla na neku stariju verziju. To je moguće jer ćete napravi tzv. Repozitorijum, u kojem se čuvaju sve promene u fajlovima koji čine program. Repozitorijum često sadrži ceo projekat i drži se negde na udaljenom serveru. Tako možete svoj kôd iz repozitorijuma preuzeti i na nekom drugom računaru i nastaviti rad gde ste stali, recimo, na kućnom kompjuteru. Kada završite rad na kućnom kompjuteru, postoji komanda kojom šaljete izmene u repozitorijum i kada dođete na posao, možete da preuzmete kôd i nastavite sa programiranjem.

Ovaj način rada je odličan za timove, jer više ljudi može paralelno da radi na kôdu i da svi sinhronizuju nastale promene. Jedna od najočiglednijih razlika između SVN-a i GIT-a je u tome što GIT može da ima repozitorijum i na lokalnom kompjuteru. To znači da ne zavisite od pristupa Internetu. GIT je zato dosta konfuzniji, jer ima više koraka koji se tiču updateovanja i lokalnog i udaljenog repozitorijuma.

GITHUB

Možda ste sebi već postavili pitanje odakle vama centralni (server) repozitorijum. Veoma je popularan sajt Github, koji omogućava da napravite besplatne repozitorijume, pa nije loša ideja da se prijavite i napravite svoj nalog. Nije teško ispratiti uputstva i napraviti novi repozitorijum. Sada izaberite lokalni program koji pravite i njega ćete uključiti u GIT sistem za kontrolu verzija.

Pre svega, instalirajte GIT na računar preko git-scm.com/download/win. Izaberite sve po defaultu i možete u komandnoj liniji Windowsa da kucate neke od GIT komandi. Ukoliko pratite neko drugo uputstvo za GIT, moguće je da zahteva da komande kucate u Git Bash konzoli sa Linux sintaksom (dolazi uz instalaciju). Podesite pre svega user name i email, kucajte u cmd:

$ git config --global user.name „Ime Prezime”

$ git config --global user.email nekiEmail@nesto.com

Uđite u koreni (root) folder vašeg programskog kôda. Kucajte:

git init

git add . (ne zaboravite tačku)

git commit -m „vaš komentar”

Ove tri komande nisu vezane za GitHub, već samo za računar za kojim sedite. Pomoću ovih koraka ste inicijalizovali lokalni repozitorijum (napraviće se novi „.git” folder), zatim ste verzionisali sve fajlove, što znači da će se pratiti sve promene nad njima. Tek poslednja komanda vaše fajlove snima („komituje”) u lokalni repozitorijum („-m” je za dodavanje komentara, što je korisno za evidenciju istorije „komitova”). Od sada svaki put kada menjate kôd nekih fajlova možete da uradite git commit -am „vaš komentar”. Zastavica „-a” komituje sve promenjene fajlove, a ako napravite neki novi, morate ponoviti komandu add. Sada možete da iz lokalnog repozitorijuma vaš kôd vraćate na neki od prethodnih koraka.

Sledeći koraci su neophodni da biste promene poslali na udaljeni server, u ovom slučaju Github. Kucajte:

git remote add origin „URL udaljenog repozitorijuma”

git push -u origin master

URL koji treba da upišete ćete lako naći kada se ulogujete na Github. Ovaj sajt vrlo lepo prikazuje sve vezano za vaš projekat i njegovu GIT istoriju. Sada, kada imate vaš kôd na udaljenom serveru, pređite na drugi računar na kojem želite da nastavite sa programiranjem. Otvorite komandnu liniju u folderu po želji (ako želite samo da provežbate GIT, ovaj korak možete obaviti i na istom računaru, samo izaberite neki potpuno novi folder). Kucajte:

git clone ime_repozitorijuma

Sada ste skinuli projekat i inicijalizovali GIT i repozitorijum na novom računaru. Sledeći put bi umesto clone trebalo da pišete pull. Zatim, promenite nešto u kôdu i pošaljite na server:

git commit -am „opisati izmenu kôda”

git push

 
Od sada je posle izmene kôda dovoljno kombinovati git commit -am, git push i git pull. Svakako, ima tu dosta detalja, npr. umesto komande pull, koja će direktno spojiti kôd sa servera sa vašim kôdom, možete usitniti korak komandom fetch; ona će izmene sa servera snimiti samo u vaš lokalni repozitorijum, ali ne i u kôd na kojem radite, pa možete kasnije ručno iz lokalnog repozitorijuma osvežiti vaš kôd.

GIT zaključak

Iako smo opisali postupak preko komandne linije, naravno da postoje i grafički interfejsi koji olakšavaju izvođenje svih ovih koraka. I ovde u pomoć dolaze aplikacije (Tortoise za SVN, na primer) ili bilo koji IDE, preko koga je mnogo udobnije koristiti SVN ili GIT komande, uz grafički lako čitljiv prikaz promena kôda između različitih komitova. Imajte u vidu da ne morate uvek snimati i povlačiti promene celog kôda, već to možete raditi i sa pojedinačnim fajlovima.

Možda vam se neće svideti, ali svi repozitorijumi koje napravite na Githubu su javni, tj. svako može da preuzme vaš kôd (ne i da doda nešto bez dozvole). Za privatne repoe ćete morati da platite. Ovo je uobičajena praksa i ljudi koji se prijavljuju za programerske poslove često u CV stavljaju i svoj Github nalog da se vidi na čemu su radili.

Na Githubu se mogu pronaći mnogi korisni programi ili primeri pogodni za učenje programiranja. Uz to, moguće je da sami „forkujete” neki projekat i nastavite da ga nezavisno razvijate. Takođe, možete da ponudite originalnim developerima da vaše promene prihvate i uvrste u originalni program (pull request). Github je istovremeno i društvena zajednica u kojoj se komunicira sa drugim programerima.

VCS programi nude sijaset drugih naprednih opcija, na primer, možete napraviti potpuno novu granu (branch) kôda. Tada se sve izmene koje pravite događaju u novoj grani, dok originalna ostaje neizmenjena. To je zgodno kada želite da izolovano menjate kôd, dok ne postane spreman za spajanje (merge) kôda sa ostatkom ekipe. Sa druge strane, uvek može (i sigurno će) doći do toga da su neki delovi programa izmenjeni od strane više programera, tako da dolazi do konflikata. Tada je potrebno odlučiti čiji kôd zadržati, a čiji zanemariti ili možda dopisati jedan iza drugog (i dalje imate pomoć VCS-a da lakše obavite i ovaj korak).

Za kraj, pomenućemo fajl „.gitignore”. U njemu je potrebno da ubacite sve fajlove i foldere koje ne želite da delite sa drugim programerima. Ukoliko ste, recimo, projekat napravili u nekom IDE-u, taj IDE često dodaje neke svoje fajlove u projekat, kao što je recimo konfiguracioni fajl koji čuva raspored prozora u okviru IDE-a. Vi ne želite da taj fajl delite i uzimate od drugih, pa ga je potrebno staviti na ignore. Na Internetu se mogu naći gotovi ignore fajlovi za popularna radna okruženja.

Ognjen POPOVIĆ

 
 NOVE TEHNOLOGIJE
Neplanirani uticaj modernih tehnologija na ljude

 TRŽIŠTE
Novi procesori iz Intela i AMD-a

 NA LICU MESTA
Samsung QLED prezentacija
Digital Day 2017
Oracle Cloud Day
Predstavljanje NOPS kampanje
Huawei i Vlada Srbije
La Roche-Posay prezentacija
Bosch „eMagine”
DATUM 17
Product Meetup

 KOMPJUTERI I FILM
Cars 3
Despicable Me 3
Filmovi, ukratko

 SITNA CREVCA
Kako postati programer (9): baze podataka, git, konvencije
Šta mislite o ovom tekstu?

 VREMENSKA MAŠINA
3D studio, fake news i dvojezgarni CPU

 PRST NA ČELO
Lešinari i njihove priče
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2015. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 2.54
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera