Sljedeća situacija stvarno se jest dogodila prije više od dvadeset godina (kako vrijeme leti), kad je autor teksta u prvoj IT tvrtki u kojoj se zaposlio, radio na razvoju potpuno novog softverskog rješenja. Pri tome su po prvi put korišteni nova baza podataka i novi razvojni alat bez ikakvog prethodnog iskustva s tim alatima. Tijekom razvoja sustava u bazu smo ručno dodavali različite vrste testnih podataka, kako bismo odmah mogli testirati to što razvijamo. Nakon dovršetka prve verzije baš smo bili zadovoljni time kako sve skupa izgleda i radi.
https://catalog.data.gov/dataset/: Jedna od najvećih kolekcija javno dostupnih podataka.
A onda su od prvog potencijalnog korisnika stigli njegovi stvarni podaci. Njih je trebalo „prepisati“ iz korisnikovog zastarjelog sustava u naš novi. Umjesto nekoliko desetaka naših testnih podataka, sad su se u bazi podataka odjednom pojavili milijuni stvarnih slogova. Rezultat - sve je odjednom postalo strašno sporo, zbog čega smo morali krenuti u ozbiljan redizajn i optimizaciju baze podataka te samog softvera.
Kvaliteta zraka u New Yorku: Primjer javno dostupne kolekcije podataka u JSON formatu
Ovakva situacija bila bi sigurno izbjegnuta da nam je tijekom razvoja bila dostupna jednaka količina podataka kao i kod pravog testiranja. Ovom tvrdnjom ujedno stižemo do glavne teme današnjeg teksta. Odgovora na pitanje kako najlakše nabaviti prikladne podatke koji su potrebni za što stvarnije testiranje novog IT sustava. U istom tekstu pozabavit ćemo se također korištenjem dva dodatna softverska alata za rukovanje s podacima, jer mogu poprilično pomoći kod rukovanja različitim vrstama podataka.
Kako do slobodnih izvora različitih vrsta podataka?
Budući da je pristup što stvarnijim podacima iz prakse dosta bitan preduvjet za optimalan razvoj i testiranje novog softvera (kao i za brojne druge namjene), tvrtke se u praksi snalaze na različite načine.
Kvaliteta zraka u New Yorku: Isti podaci u XML formatu
Najjednostavniji način dobivanja podataka za razvoj i testiranje novih aplikacija su različite demo baze podataka koje se mogu pronaći praktički za svaku od poznatih baza podataka. Riječ je o dobro poznatim primjerima kao što su AdventureWorks za Microsoft SQL Server ili Employees za MySQL. Problem s ovakvim izvorima podataka je u tome što je tu prije svega riječ o podacima namijenjenima demonstraciji korištenja samih sustava za upravljanje bazom podataka. Pitanje je koliko ih možete iskoristiti kod razvoja vlastitog IT rješenja. Na primjer, teško da bilo koju od navedene dvije baze možete iskoristiti kao polazište za razvoj nekakvog sustava za korištenje u meteorologiji ili stočnoj farmi.
Drugi, vrlo dobar - mogli bismo čak reći odličan - izvor podataka su slučajevi kad neka tvrtka već od prije ima svoje vlastite korisnike s ogromnim bazama stvarnih podataka. One se mogu iskoristiti za razvoj svakakvih nadogradnji sustava ili čak razvoj potpuno novih rješenja ispočetka. U ovom slučaju, riječ je o jako „dobrim“ podacima, jer su to stvarni podaci kakvi se pojavljuju u praksi. Bar je bilo tako dok se nije pojavio General Data Protection Regulation (GDPR). Ako se morate striktno pridržavati svih njegovih odredbi, teško da možete potencijalnom istražitelju objasniti zašto tolike korisnikove podatke stalno držite kod sebe i zašto ih koristite. U praksi se može dogoditi da se GDPR ignorira u ovom pogledu, pa se podaci i dalje čuvaju i koriste kod razvoja i testiranja aplikacija jednako kao prije, čak i kad ne bi trebali.
https://publicapis.io/: Polazište za pristup različitim vrstama podataka preko API poziva
https://www.avoindata.fi/en: Polazište za pristup različitim vrstama podataka u Finskoj
Treći način na koji se može doći do velikih izvora podataka je da ih sami pripremite u nekakvim generatorima podataka. Njih možete napisati sami, ili iskoristiti nešto što već postoji. Na primjer, u vlastiti generator podataka upišete niz imena, prezimena, naziva ulica, brojeva i gradova, a onda prepustite generatoru da generira onoliko tisuća izmišljenih osoba koliko vam je potrebno za testiranje. Loša strana ovog pristupa je da morate potrošiti određeno vrijeme na pisanje generatora (ili upoznavanje s nekim od dostupnih), a ni tako pripremljeni podaci ne moraju biti baš relevantni. Ako ste generator pripremili tako da ravnomjerno generira osobe po svim mjestima Hrvatske, onda to nije relevantno s obzirom na stvarnu distribuciju stanovništva po različitim dijelovima zemlje. A vi baš radite na sustavu za optimizaciju isporuke paketa po vlastitim paketomatima na području Hrvatske. Preostaje li nam još nešto što možemo koristiti kao izvor podataka? Srećom, odgovor je - postoji! Vladine i nevladine organizacije, te različite tvrtke širom svijeta pripremaju javno dostupne baze podataka za različite namjene. Ako uspijete pronaći neku kolekciju podataka tako da je po sadržaju usporediva s onim što planirate raditi, eto zbilja odličnog izvora podataka za razvoj vaših budućih aplikacija. I ne samo za razvoj aplikacija. Takve kolekcije možete koristiti za brojne dodatne scenarije, kao što su isprobavanje alata za različite vrste analiza podataka, treniranje AI alata i slično.
Jedan od najvećih izvora različitih vrsta takvih podataka dostupan je korisnicima na web adresi https://catalog.data.gov/dataset/. U trenutku pisanja ovog teksta, bilo je dostupno točno 306.094 kolekcija podataka. Treba odmah biti iskren te naglasiti da unatoč tako velikom popisu izvora podataka, nisu svi oni uvijek stvarno dostupni za korištenje. Umjesto toga, kod pokušaja pristupa određenim podacima ponekad ćete dobiti poruke da je privremeno nedostupan server s nekom od kolekcija podataka ili neku drugu grešku. Ipak, uz dovoljnu dozu upornosti, nakon određenog vremena vjerojatno ćete uspjeti pristupiti podacima koji vas zanimaju.
https://data.gov.hr/: Portal otvorenih podataka u Hrvatskoj
https://data.gov.hr/ckan/dataset: Trenutno dostupni izvori podataka u Hrvatskoj
Na prvi pogled prilično veliko ograničenje spomenutih podataka je u tome što se vrlo veliki dio odnosi isključivo na područje SAD-a, ali postoje i globalno orijentirane kolekcije, to jest kolekcije povezane s nekim drugim teritorijem. S druge strane, ovdje se mogu pronaći zbirke meteoroloških i drugih vrsta podataka, kakve inače baš nije jednostavno pronaći. Dovoljno velika i relevantna kolekcija podataka za područje SAD-a ipak vam može pomoći da razvijete novi sustav i za druga područja, a onda na kraju samo zamijenite podatke pravim, lokalnim podacima.
Podaci se sa spomenute lokacije mogu preuzeti u većem broju različitih formata. Neki od njih baš i nisu previše podobni za spremanje u baze podataka (npr. HTML ili slobodni TXT podaci), ali su zato drugi sasvim pogodni za učitavanje u relacijske baze (CSV, JSON i drugi slični formati). Najčešće se za to mogu koristiti alati izravno dostupni u popisu dodatnih alata svake od poznatijih baza podataka (različite vrste alata za uvoz podataka).
U nastavku navodimo kako izgleda jedan izdvojeni segment takvih podataka. Riječ je o podacima o kvaliteti zraka u New Yorku kroz duži vremenski period.
…
[
“row-bd3j-mxka-rfdy”,
“00000000-0000-0000-33D4-298A0260170E”,
0,
1712774929,
null,
1712774929,
null,
“{ }”,
“179772”,
“640”,
“Boiler Emissions- Total SO2 Emissions”,
“Number per km2”,
“number”,
“UHF42”,
“409”,
“Southeast Queens”,
“2015”,
“2015-01-01T00:00:00”,
“0.3”,
null
],
[
“row-sssh.drev~5ik7”,
“00000000-0000-0000-824A-2029F18E2D9F”,
0,
1712774929,
null,
1712774929,
null,
“{ }”,
“179785”,
“640”,
“Boiler Emissions- Total SO2 Emissions”,
“Number per km2”,
“number”,
“UHF42”,
“209”,
“Bensonhurst - Bay Ridge”,
“2015”,
“2015-01-01T00:00:00”,
“1.2”,
null
],
[
“row-6u49_s7nm~hh25”,
“00000000-0000-0000-1A79-0D17226D2164”,
0,
1712774929,
null,
1712774929,
null,
“{ }”,
“178540”,
“365”,
“Fine particles (PM 2.5)”,
“Mean”,
“mcg/m3”,
“UHF42”,
“209”,
“Bensonhurst - Bay Ridge”,
“Annual Average 2012”,
“2011-12-01T00:00:00”,
“8.6”,
null
],
…
Dodatni pozitivni „nusproizvod“ ovog primjera (kao i drugih sličnih kolekcija podataka) je to što na temelju takvih podataka (pogotovo ako ih preuzmete u samoopisnom formatu kao što je XML) osim samog korištenja podataka, možete dobiti ideju ili pomoć kod modeliranja vlastite baze podataka. Pogotovo ako razvijate sustav na nekakvom potpuno novom području s kojim baš i niste previše upoznati.
Ponekad otvoreni podaci ne moraju biti dostupni korisnicima na ovako izravan način, nego im se treba pristupati preko API sučelja. Na web adresi https://publicapis.io/category/government možete pronaći kako se na takav način može pristupiti javnim podacima koje nude vlade širom svijeta, a na matičnoj adresi https://publicapis.io/ dostupan je još širi popis različitih izvora. Kao netko tko razvija vlastita IT rješenja, trebali biste biti u mogućnosti iskoristiti takve podatke bez obzira na tehnologiju koju koristite za pristup podacima preko API sučelja.
Pogledajmo kako to izgleda na još jednom primjeru - recimo, na primjeru Finske. Preko odgovarajuće veze na prethodnoj stranici moguće je stići do adrese https://www.avoindata.fi/en, a odatle nastaviti prema podacima koji se dalje nude izravno preko kolekcija podataka ili API poziva.
Samo po sebi nameće se sljedeće pitanje. Kakva je situacija po tom pitanju u Hrvatskoj? Do otvorenih podataka se kod nas stiže preko portala otvorenih podataka (https://data.gov.hr/), dok se same kolekcije podataka (u trenutku pisanja teksta bilo ih je točno 2.758) nalaze na adresi https://data.gov.hr/ckan/dataset. Podaci su za preuzimanje dostupni u sličnim formatima kao i u SAD-u, pa dalje istraživanje onoga što je trenutno dostupno u Hrvatskoj možete nastaviti i sami. Na primjer, možete provjeriti kako se točno u Hrvatskoj koriste podaci iz sustava „e-Građani“ (veza e-Građani - statistika).
I odgovarajućih alata za obradu
Kad uspijete pronaći podatke koji vam trebaju, preostaje vam da ih što jednostavnije iskoristite za različite namjene. Tu prije svega mislimo na uvoz podataka, transformaciju u neku drugu vrstu podataka i druge slične operacije. Kao IT profesionalac sigurno već imate alate za tako nešto. Za one koji tek kreću u svijet razvoja aplikacija, u nastavku teksta opisat ćemo dva zgodna alata, koji sigurno mogu pomoći kod nekoliko vrlo bitnih operacija u vezi s podacima. Što ne znači da ih ne možete iskoristiti i kao IT profesionalac. Pogotovo ako do sada još niste čuli za njih.
SQLines
(https://www.sqlines.com/)
Na ovoj web adresi dostupna su zapravo dva različita alata: SQLines SQL Converter i SQLines Data. Prvi od navedenih alata namijenjen je pretvaranju različitih vrsta SQL naredbi između posebnosti u sintaksi za velik broj popularnih baza podataka, dok je drugi namijenjen za brzo i jednostavno „prepisivanje“ podataka između različitih sustava.
Što to konkretno znači? Pretpostavimo da ste u svoju bazu podataka (na primjer, Microsoft SQL Server) uvezli veliku količinu podataka iz nekog od ranije spomenutih javno dostupnih izvora podataka, a onda na temelju toga napravili svoju novu aplikaciju. Naknadno ste dobili priliku da dodatno plasirate isto rješenje, ali tako da podaci na zahtjev korisnika moraju biti spremljeni u MySQL i/ili Oracle i/ili IBM DB2.
Iako za SQL postoje standardi za to kako bi trebale izgledati SQL naredbe, proizvođači baza podataka u njih ugrađuju svoje posebnosti. Bilo zato da bi zadržali kompatibilnost prema svojim ranijim sustavima prije donošenja određenog standarda, bilo zato da mogu naglasiti kako njihov proizvod upravo u tim razlikama ima određene prednosti u odnosu na proizvode drugih tvrtki.
Kao uobičajeni primjer za ovu tvrdnju, možemo navesti dobro poznate razlike u ograničavanju broja vraćenih slogova u postavljenim upitima. Ponekad je to konstrukcija u obliku „SELECT TOP X …“, a drugi put „SELECT … LIMIT X“. Međusobne razlike kod DDL SQL naredbi zaduženih za definiranje različitih objekata u bazi podataka (tablica, indeksa, pogleda…) su u pravilu još izraženije. To posebno vrijedi ako želimo iskoristiti neku bazu podataka do krajnjih granica. U tom slučaju se u naredbe dodaju različita optimizirana proširenja pojedinih objekata - to jest, posebnosti različitih proizvođača. Na primjer, „fino podešavanje“ različitih karakteristika indeksa, kao što je način popunjavanja memorijskih stranica indeksiranim podacima.
Evo jednog vrlo jednostavnog primjera na kojem se vide takve razlike u definiraju objekata u bazi podataka. Sljedeća naredba stvara novu tablicu s primarnim ključem u Microsoft SQL Serveru uz automatsko povećanje vrijednosti kod dodavanja novog sloga:
CREATE TABLE Employee(
EmployeeID int IDENTITY(1,1) NOT NULL,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL,
EMail nvarchar(50) NULL,
Phone nvarchar(20) NULL,
ManagerID int NOT NULL,
DepartmentID smallint NULL,
CONSTRAINT PK_Employee_EmployeeID PRIMARY KEY (EmployeeID, ManagerID)
)
Njezin oblik za MySQL je vrlo sličan, ali ipak različit.
CREATE TABLE Employee(
EmployeeID int AUTO_INCREMENT NOT NULL,
FirstName nvarchar(50) NOT NULL,
LastName nvarchar(50) NOT NULL,
EMail nvarchar(50) NULL,
Phone nvarchar(20) NULL,
ManagerID int NOT NULL,
DepartmentID smallint NULL,
CONSTRAINT PK_Employee_EmployeeID PRIMARY KEY (EmployeeID, ManagerID)
);
Primijetite malu (ali ipak vrlo bitnu razliku) u načinu na koji se definira automatsko povećanje vrijednosti stupca s primarnim ključem. Ako ste poznavatelj obje baze, takvu promjenu nije teško napraviti. Međutim, ako ne poznajete dobro obje baze, sigurno ćete potrošiti određeno vrijeme na pronalaženje uputa ili postavljanje upita nekom AI sustavu za rješavanje problema. A opet, čak i ako ste vrhunski poznavatelj obje baze, stvari se poprilično kompliciraju u slučajevima kad je potrebno prevesti cijelu shemu baze podataka od više stotina tablica s jednog sustava na drugi.
Prvi od spomenuti alata (SQLines SQL Converter) namijenjen je rješavanju upravo opisanog problema, to jest pretvaranju SQL naredbi iz sintakse jednog sustava u sintaksu drugog sustava. Pri tome je takvo pretvaranje podržano za praktično sve relevantne, relacijski orijentirane baze podataka (SQL Server, Oracle, MySQL, IBM DB2 i tako dalje). Bitno je spomenuti i to da se alat stalno nadograđuje, kako bi što bolje podržao različita proširenja koja u SQL standard neprekidno dodaju proizvođači baza podataka. Ili ih sa sobom donose nove verzije SQL standarda.
Alat možete koristiti tako da ga prvo sa stranica proizvođača preuzmete na vlastito računalo, otpakirate i pokrenete bez potrebe za nekom posebnom instalacijom (podržani su Windows i Linux sustavi). Ili ga čak možete koristiti izravno online na web stranicama proizvođača (https://www.sqlines.com/online). Uz pomoć ovog alata (lokalnom verzijom ili online) možete u jednom ili više koraka prevesti sve SQL DDL naredbe, kako biste strukturu baze podataka prenijeli između različitih vrsta baza podataka.
Teoretski biste pomoću spomenutog alata u većem broju koraka mogli prenijeti i same podatke. Prvo biste iz prvog sustava napravili izvoz podataka u niz SQL Insert naredbi, pomoću Converter alata biste nakon toga pretvorili te iste naredbe u sintaksu drugog sustava, te ih na kraju izveli u drugi sustav za uvoz podataka. Što biste mogli primijeniti relativno komotno kod male količine podataka, ali bi kod baza podataka reda veličine nekoliko milijuna slogova nešto takvo bilo sasvim nepraktično ili nemoguće.
https://www.sqlines.com/online: Online alat za prevođenje SQL naredbi između različitih baza podataka
Zato su proizvođači razvili drugi specijalizirani alat (SQLines Data). Namjena ovog alata je izravno kopiranje samih podataka između različitih sustava, što se izvodi puno elegantnije (te prije svega brže) nego kad bismo za taj postupak koristili prvi alat. Alat Data očekuje da u odredišnoj bazi podataka već postoji shema podataka, što znači da taj dio morate najprije pripremiti pomoću prvog alata Convert.
Za razliku od prvog alata, za drugi alat ne postoji online verzija, nego ga morate koristiti isključivo na vlastitom računalu. Što je zapravo sasvim logično. Slanje podataka iz prve baze podataka na server proizvođača samog alata, pa nakon toga preuzimanje u drugu bazu podataka (možda čak na istom lokalnom računalu gdje je početna baza) bilo bi potpuno nepotrebno rasipanje vremena i resursa.
Spomenimo na ovom mjestu kako proizvođač za oba alata garantira da se kod njihovog lokalnog korištenja ne izvodi nikakva razmjena podataka sa serverom proizvođača, to jest, da je u potpunosti zagarantirana privatnost podataka. Oba alata se mogu koristiti besplatno sa svim svojim mogućnostima u periodu od 14 dana, nakon čega ih treba platiti za neograničeno korištenje. Cijene licenci se kreću od 395, odnosno 295 dolara za pojedinačno računalo na godišnjoj razini. Kad se prethodne dvije činjenice povežu međusobno, sasvim se lako stiže do ideje izbjegavanja bilo kakvog plaćanja alata. Čak i ako se nakon 14 dana ni jedan od alata više ne bude mogao koristiti na jednom lokalnom računalu zbog ugrađene interne zaštite, pokrenut ćete alate na drugom lokalnom računalu (ili čak virtualnoj mašini), pa zato ne postoji nikakva potreba za plaćanjem.
Prijenos podataka između baza: Za to se može koristiti alat SQLines Data
I to bi možda moglo biti ostvarivo, da proizvođač u oba alata nije dodao vrlo originalan način zaštite. Autor teksta smatra - čak genijalno smišljen način zaštite. Naime, oba alata u svojoj neplaćenoj verziji (čak i ako se koriste u dozvoljenom 14-dnevnom probnom periodu) tijekom izvođenja mogu slučajno „preskočiti“ pojedini podatak.
Drugim riječima, prvom od spomenutih alata može se dogoditi da preskoči poneki stupac u slučajno izabranoj tablici prilikom konverzije složene sheme podataka. A alat za prijenos podataka može u višemilijunskom prijenosu slogova također zaboraviti prenijeti pokoji slog.
Oboje je jasno istaknuto na pratećim uputama, tako da u slučaju da vam se alati stvarno dopadaju, nema druge da ih stvarno i platite. U protivnom bi se moglo dogoditi da jako puno vremena i živaca potrošite na to da pronađete što je stvarno „izgubljeno u prijevodu“. Tek kad nakon plaćanja dobijete kodove za licencirano korištenje, oba alata više ne izvode nikakve preskoke tijekom korištenja.
SQLPage
(https://sql-page.com/)
Prije detaljnijeg opisa što točno radi alat SQLPage, zamislimo sljedeći scenarij. Na temelju nekog od javnih izvora podataka pripremili ste (bar demonstracijske) podatke za svoj novi sustav, pa ih namjeravate pokazati krajnjem korisniku. Prije toga ste (najčešće zato da uopće dobijete posao u odnosu na konkurenciju) dogovorili s korisnikom nerealno kratki rok za isporuku rješenja. Budući da nema šanse da ga ispoštujete, bilo bi sjajno kad biste na brzinu mogli pripremiti bar nešto, kako biste korisniku demonstrirali da ozbiljno radite na razvoju. Bilo bi još bolje ako mu možete pokazati prvi pogled na podatke, tako da ih može pregledati, komentirati, a po potrebi i samostalno korigirati.
I tu sad na velika vrata upada upravo SQLPage. Što točno omogućava ovaj alat? Izuzetno brzu (skoro pa nemoguće brzu) izradu web stranica povezanih s podacima, a sve to samo korištenjem sintakse SQL naredbi. Da, dobro ste pročitali. Za izradu prilično elegantnih i prije svega upotrebljivih stranica nije potrebno koristiti nikakve posebne web alate, pa čak niti poznavati uobičajene web tehnologije kao što su HTML, CSS, JavaScript, PHP, GO ili nešto slično. Umjesto toga, sve pripremate samo korištenjem SQL-a i minimalnim upoznavanjem s alatom SQLPage. Dovoljno je da proučite samo one dijelove koji su vam doista potrebni u određenoj situaciji.
Pogledajmo kako to sve skupa funkcionira na konkretnom primjeru instalacije, pokretanja i dorade web stranica.
https://beta.datapage.app/: Web lokacija s pripremljenom infrastrukturom za SQLPage rješenja
Korak 1
Sa stranica proizvođača potrebno je preuzeti ZIP datoteku i raspakirati je u neki folder na Windows računalu. Kao rezultat raspakiravanja dobiva se izvršna datoteka sqlpage.exe.
Alat se može instalirati i na druge operativne sustave poput Maca ili više verzija Linuxa. Za dodatne informacije o tome kako se to radi, možete konzultirati upute na web stranicama proizvođača, jer to prelazi okvire ovog teksta.
Uz pomoć lokalne verzije alata pripremit ćemo rješenje, a onda na sličan način možemo napraviti instalaciju alata na nekom web serveru, gdje će se naše rješenje izvoditi tako da bude dostupno korisnicima. Ako vam je tako jednostavnije i/ili brže, za samo korištenje svojeg web rješenja možete koristiti infrastrukturu samog proizvođača, jer je tamo to sve već pripremljeno. Samo trebate instalirati svoje rješenje. Dodatne informacije o ovakvoj mogućnosti korištenja možete pronaći na adresi https://beta.datapage.app/.
Korak 2
Nakon pokretanja prije spomenute izvršne datoteke, na vašem računalu aktivira se lokalni web server, čiji početni sadržaj možete otvoriti tako da u preglednik kao njegovu adresu upišete točno sljedeći sadržaj: http://localhost:8080/
Ako je sve do sada prošlo u redu, o tome će se u pregledniku pojaviti odgovarajuća poruka. Na istoj stranici bit će prikazana lokacija u koju korisnik može postavljati svoje vlastite datoteke tijekom razvoja. Budući da je autor teksta kod pripreme primjera raspakirao i pokrenuo izvršnu datoteku u mapi d:\SQLPage, upravo ta mapa predstavlja korijen (root) za novo web rješenje.
Korak 3
Sad stižemo do najzanimljivijeg dijela – samog razvoja web rješenja. Već smo spomenuli da se sve izvodi u varijanti SQL jezika, tako da bi vam to trebalo biti dobro poznato, budući da stalno radite s podacima.
Čak se i sam sadržaj vašeg SQL koda sprema u datoteku s nastavkom .sql. U ovom konkretnom slučaju, to je datoteka test.sql sa sadržajem navedenim u nastavku teksta. Pripremili smo odmah na temelju nekoliko primjera iz uputa malo složeniji primjer, kako bismo pokazali različite mogućnosti alata. Sasvim razumljivo, u tom slučaju morate u pregledniku otvoriti adresu: http://localhost:8080/test.sql
Lokalni SQLPage server: Aktivira se nakon pokretanja izvršne datoteke i dostupan je na adresi http://localhost:8080
SELECT ‘text’ AS component, ‘SQLPage test za VIDI’ AS title;
SELECT
‘card’ AS component;
WITH random_choice AS (
SELECT RANDOM() % 2 AS coin_flip
)
SELECT
CASE
WHEN coin_flip = 0 THEN ‘Heads’
ELSE ‘Tails’
END AS title,
CASE
WHEN coin_flip = 0 THEN ‘You win this toss :)’
ELSE ‘You lose this toss :(‘
END AS description,
CASE
WHEN coin_flip = 0 THEN ‘https://re-bol.com/heads.jpg’
ELSE ‘https://re-bol.com/tails.jpg’
END AS top_image
FROM random_choice;
CREATE TABLE IF NOT EXISTS things (items TEXT);
SELECT ‘form’ AS component, ‘Add item:’ AS title; SELECT ‘Item’ AS name;
INSERT INTO things(items) SELECT :Item WHERE :Item IS NOT NULL;
SELECT ‘list’ AS component, ‘Items:’ AS title; SELECT items AS title FROM things;
SELECT
‘table’ AS component,
‘Static Data Table’ AS title,
TRUE AS sort,
TRUE AS search;
SELECT
‘Alice’ AS ‘First Name’,
‘Smith’ AS ‘Last Name’,
‘Ova e-mail adresa je zaštićena od spambota. Potrebno je omogućiti JavaScript da je vidite.’ AS ‘Email’
SELECT
‘Bob’,
‘Jones’,
‘Ova e-mail adresa je zaštićena od spambota. Potrebno je omogućiti JavaScript da je vidite.’;
SELECT
‘map’ AS component;
SELECT
‘Statue of Liberty’ AS title,
40.6892 AS latitude,
-74.0445 AS longitude;
SELECT
‘chart’ AS component,
‘bar’ AS type,
‘Favorite pets’ AS title;
SELECT
‘Cat’ AS label,
35 AS value;
SELECT
‘Dog’ AS label,
45 AS value;
SELECT
‘Fish’ AS label,
Kakva se web stranica dobije izvođenjem prethodnih „SQL naredbi“ možete vidjeti na pratećim slikama uz tekst.
Objasnimo ukratko kakvi su rezultati izvođenja svake od pojedinačnih SQL naredbi:
- Samo prikazuje početni dio (naslov stranice).
- Pokazuje kako se uz pomoć generatora slučajnih brojeva mogu prikazivati različite slike na stranici (ovdje je zapravo riječ o dvije međusobno povezane SQL naredbe).
- Ovaj dio implementira cijeli mali sustav za unos podataka u bazu koji kod prvog izvođenja po potrebi priprema tablicu za spremanje podataka (ako ne postoji od prije).
- Prikaz većeg broja podataka u obliku tablice.
- Prikaz karte s točno određenom lokacijom.
- Prikaz podataka u obliku grafikona.
SQLPage početni sadržaj: Pokazuje da je sve u redu te mapu na računalu gdje se može nastaviti s razvojem
Na temelju ovog primjera može se vidjeti da je pomoću jednostavnih SQL naredbi na stranicu moguće postaviti prilično komplicirane tehnologije. Ako vam sve to nije dovoljno, onda po potrebi možete uključiti korištenje različitih sadržaja generiranih na drugim serverima, kao što to pokazuje sljedeći primjer.
SELECT
‘card’ AS component,
‘Multiple remote applications running in iFrames’ AS title,
2 AS columns;
SELECT
‘Message Board (Bootstrap, Plain JS, Bottle)’ AS title,
‘https://server.py-thon.com:8450’ AS embed,
‘iframe’ AS embed_mode,
‘350’ AS height;
SELECT
‘Embedded Image Uploader (Brython, Flask)’ AS title,
‘http://216.137.179.125:8023’ AS embed,
-- https://server.py-thon.com:8443/?sort_by=name&order=asc
‘iframe’ AS embed_mode,
‘350’ AS height
SELECT
‘3D Message (NiceGUI)’ AS title,
‘http://216.137.179.125:9090’ AS embed,
‘iframe’ AS embed_mode,
‘350’ AS height
SELECT
‘Editable Cards (Streamlit, Dataset, SQLAlchemy)’ AS title,
‘http://216.137.179.125:8501’ AS embed,
‘iframe’ AS embed_mode,
‘350’ AS height
SELECT
‘card’ AS component,
1 AS columns;
SELECT
‘Contacts & Auth: Ova e-mail adresa je zaštićena od spambota. Potrebno je omogućiti JavaScript da je vidite. 12341234’ AS title,
‘http://server.py-thon.com:5001’ AS embed,
‘iframe’ AS embed_mode,
‘500’ AS height;
Spomenimo da SQLPage kao svoju podrazumijevanu bazu za spremanje podataka koristi SQLite bazu. Naredba CREATE TABLE iz prvog primjera upravo je u njoj pripremila tablicu za spremanje podataka. Po potrebi možete napraviti spajanje na druge baze podataka. Upravo ono što nam je potrebno da bismo podatke iz vlastitog sustava učinili dostupnima korisniku.
U slučaju korištenja neke od komercijalnih baza podataka sa znatno složenijom strukturom tablica, u posebnoj datoteci prvo navodite cijelu shemu baze. Nešto slično kao:
create table users (
id int primary key IDENTITY(1,1),
name varchar(255) not null
);
create table groups (
id int primary key IDENTITY(1,1),
name varchar(255) not null
);
create table group_members (
group_id int not null,
user_id int not null,
constraint PK_group_members primary key (group_id, user_id),
constraint FK_group_members_groups foreign key (group_id) references groups (id),
constraint FK_group_members_users foreign key (user_id) references users (id)
);
…
SQLPage Test 1: Početni dio testne stranice
SQLPage Test 2: Završni dio testne stranice
A onda u glavnoj .sql datoteci samo navodite naredbe za rukovanje podacima u bazi.
Nadalje, podržan je popriličan odabir elemenata za pripremu formi za unos ili detaljan pregled podataka – od naslova do različitih vrsta elemenata na formi. Na taj način možemo jednostavno napraviti i stranicu pomoću koje korisnik može dodavati, ispravljati i brisati podatke, ako u njima uoči nekakve nepravilnosti.
Također, postoji mehanizam kretanja između većeg broja stranica s nastavkom .sql. Slično kao što tradicionalni linkovi omogućavaju kretanje između HTML stranica. To znači da se pomoću alata SQLPage može razviti puno kompliciranije rješenje od samo jedne obične stranice s nekim sadržajem. Kako bi se omogućilo da samo točno određeni korisnici mogu pristupiti podacima, to jest, da ne budu baš javno dostupni svakome (ako su postavljeni na neki javno dostupni web server), SQLPage ima ugrađen jednostavan mehanizam za autentikaciju korisnika. Sigurno već pogađate - i ta implementacija je riješena pomoću SQL naredbi. Nešto u stilu:
set username = (
SELECT username
FROM sessions
WHERE sqlpage.cookie(‘session_token’) = id
AND created_at > datetime(‘now’, ‘-1 day’) -- require the user to log in again after 1 day
);
SELECT
‘redirect’ AS component,
‘/’ AS link -- redirect to the front page if the user is logged in
WHERE $username IS NOT NULL;
…
Primjer kako se izvodi povezivanje sa SQL serverom, kao i brojni drugi složeniji primjeri, dostupni su u odgovarajućem repozitoriju na web adresi: https://github.com/sqlpage/SQLPage
Drugim riječima, teško da postoji sustav koji bi brže generirao rješenja za prikaz i upravljanje podacima na webu. Ako ste u vremenskoj stisci te nekad trebate nešto brzo pripremiti u nemogućem roku, svakako se sjetite ovog alata. Eventualni nedostatak je to što različita rješenja izgledaju međusobno slično, iako se to može dosta „zakamuflirati“ korištenjem različitih slika na pojedinim stranicama, izborom drugačijih ikona iz skupa podržanih ikona i slično.
A ako se baš želite zainatiti te izmijeniti cijeli SQLPage na bilo koji zamislivi način, njegov cjelokupni kod napisan u programskom jeziku Rust dostupan je u istom repozitoriju. Tako da po potrebi možete SQLPage može pretvoriti u potpuno drugačiji, a još uvijek iznimno jednostavan i brz razvojni alat.
I da ne zaboravimo spomenuti, SQLPage je potpuno besplatan za korištenje.
SQLPage napredniji primjer: Uključuje i korištenje Python koda
https://github.com/sqlpage/SQLPage: Repozitorij s brojnim primjerima i samim izvornim kodom za SQLPage