4. in 5. september 2024
MARIBOR
4. in 5. september 2024
MARIBOR
Vodja sekcije: Boštjan Kežmah
Sašo Karakatič, Vili Podgorelec
Muhamed Turkanović, Vid Keršič, Martina Šestak
Urška Kesmič Žveglič, Nastja Cepak
Vodja sekcije: Boštjan Grašič
Nejc Maleš, Dušan Bratuša, Matjaž Matjašec, Martin Potrč
Urban Zaletel, Kristjan Voje, Klemen Pogačnik, Uroš Brovč
Andrej Krajnc, Vojko Ambrožič, Bojan Štok
Miroslav Beranič
Vodja sekcije: Bojan Štok
Gregor Jošt, Miha Kočevar
Miha Lenko, Robert Meolic, Frank Amand
Alen Granda
Matjaž Prtenjak
Milan Gabor
Martin Domajnko, Vid Keršič
Mitja Krajnc, Tadej Ciglič, Boris Ovčjak
Leon Pahole
Vodja sekcije: Boštjan Kežmah
V prostrani, neukročeni divjini umetne inteligence se je pojavila in takoj postavila v ospredje nova vrsta: veliki jezikovni modeli. Ti orjaki s svojimi milijardami parametrov tavajo po podatkovni pokrajini, lačni vzorcev in vpogledov v obilje besedil. Toda izkoriščanje njihove moči ni enostaven podvig. Lahko so nepredvidljivi, nagnjeni k halucinacijam in se pogosto težko držijo teme. Predvsem pa jih ni preprosto udomačiti. V članku predstavljamo učinkovito orodje, s katerim lažje ukrotimo te nepredvidljive in zaletave velikane – pomensko povezovanje z lokalnim korpusom besedil. Pridružite se vznemirljivi ekspediciji v svet generiranja z razširjenim iskanjem, tehnike, ki združuje surovo moč velikih jezikovnih modelov s specifičnostjo in ustreznostjo lokalnih podatkov. Raziskali bomo, kako tak pristop k usposabljanju modela omogoči ne le učinkovito, temveč tudi vsebinsko specifično generiranje odgovorov. Predstavljajte si inteligentnega pogovornega agenta, ki lahko tekoče razpravlja o širokem naboru tem, hkrati pa zagotavlja natančne in podrobne informacije o vašem specifičnem podjetju ali panogi. Z generacijo, razširjeno s pomenskim iskanjem, te sanje postajajo resničnost. Toda pozor! Pot je polna izzivov, od primerne predhodne obdelave podatkov do zahtevnosti natančnega prilagajanja modela. Ne bojte se, saj vas bomo opremili z znanjem, s katerim boste lažje premagali te ovire in ukrotili svoj velik jezikovni model. Na preprost način bomo predstavili zapletenost tovrstnega procesa usposabljanja, vključno s strateško uporabo generiranja z razširjenim iskanjem, ki našemu modelu omogoča učinkovit dostop do lokalnih virov znanja. Pripravimo se torej na zgodbo o inovacijah in nesebičnem prizadevanju za boljši AI. Če uspemo v svojem namenu, vas prispevek ne bo opremil le s kakšnim novim spoznanjem, ampak boste tudi pripravljeni, da se podate na lastno pustolovščino z generativno umetno inteligenco v svojem domačem okolju. Na tej pustolovščini se vam rade volje pridružimo, da skupaj ukrotimo velikega dobrodušnega velikana. Naj se torej krotenje začne!
* Pri ustvarjanju zgornjega besedila nam je dobrodušno pomagal mISLec, naš lokalni inteligentni pogovorni agent.
V prispevku smo opisali primer razvoja aplikacije RAG (Retrieval-Augmented Generation). Za jezikovni model smo uporabili Chat GPT-4o, čeprav bi lahko uporabili tudi katerikoli drugi model. Aplikacija COBISS Lib, ki jo uporabljajo knjižničarji, podpira veliko funkcionalnosti in ima več 1000 oken. Podpira postopke nabave monografskih in serijskih publikacij ter elektronskih virov, obdelavo podatkov o zalogi, izvajanje postopkov v izposoji in medknjižnični izposoji itd. Ker je aplikacija in dokumentacija obsežna, smo poskusili razviti asistenta, ki bi knjižničarjem pomagal pri vsakodnevnem delu. Razvili smo programe v Javi 21, ki so markdown datoteke priročnikov razbile po odstavkih. Za vsak odstavek smo od ChatGPT zahtevali, da pripravi povzetek. Nato smo za vsak tak povzetek pripravili vektor (embeddings) ter ga shranili v vektorsko bazo, ki smo jo kreirali z uporabo javanske knjižnice JVector. Ko uporabnik postavi vprašanje, od ChatGPT zahtevamo, da generira vektor in zazna jezik uporabnika. V vektorski bazi poiščemo pet (nastavitev) najbližjih vektorjev/besedil (cosine similarity) glede na iskalni vektor. Nato od ChatGPT zahtevamo, da za uporabnikovo zahtevo na osnovi najdenih besedil generira odgovor v zaznanem jeziku. Razvili smo Javanski odjemalec do ChatGPT z uporabo odprtokodne knjižnice OpenAI-Java. Nismo pa uporabili popularne javanske knjižnice langchain4j, ki ima podporo za veliko število različnih modelov, podporo za izločanje odstavkov, tokenizacijo, generiranje vektorjev itd. Celotno pot smo želeli prehoditi sami in pri tem dobiti lastne izkušnje.
Podatkovni prostori predstavljajo odprto in povezano infrastrukturo za varno izmenjavo podatkov v skladu s skupnimi pravili, standardi in politikami. Evropska komisija je februarja 2020 predstavila Evropsko strategijo za podatke (angl. European Strategy for Data) z jasnim ciljem ustvariti enoten trg za podatke, ki bi omogočil polno izkoriščanje vrednosti podatkov v korist evropske družbe in gospodarstva. Strategija določa smernice za oblikovanje skupnih evropskih podatkovnih prostorov na več ključnih področjih: veščine, zdravje, kmetijstvo, proizvodnja, energija, mobilnost, finance ter javna uprava.
Kljub velikemu potencialu podatkovnih prostorov se soočamo z mnogimi izzivi. Ključni med njimi so zagotavljanje interoperabilnosti na različnih ravneh ter osredotočenost na dostopnost in suverenost podatkov (angl. Data Sovereignty), kar lahko ovira implementacijo minimalno funkcionalnih podatkovnih prostorov (angl. Minimum Viable Data Space – MVDS). Trenutno poteka drugi val pobud za podatkovne prostore, ki se osredotoča na širše uvajanje podatkovnih prostorov, ki presegajo specifične primere uporabe.
V tem prispevku bomo osvetlili pomen in kompleksnost arhitektur podatkovnih prostorov. Pregledali bomo trenutno stanje pristopov k vzpostavitvi podatkovnih prostorov, pri čemer se bomo osredotočili na identifikacijo in analizo izzivov v specifičnih domenah ter posameznih gradnikov in glavnih deležnikov podatkovnih prostorov.
Poudarek bomo dali na IT arhitekturnih predstavitvah, s podrobnim pregledom obstoječih pristopov in izzivov pri vzpostavitvi podatkovnih prostorov. Naša analiza bo vključevala ključne komponente, kot so integracija podatkov, upravljanje dostopa, zagotavljanje varnosti in skladnosti s predpisi, ter sodelovanje med različnimi deležniki. Tako bomo oblikovali celovito sliko o trenutnem stanju in prihodnjih usmeritvah na področju podatkovnih prostorov.
Dodatno bomo predstavili inovativni pristop, ki omogoča identifikacijo podatkov in upravljanje dostopa do njih s pomočjo decentraliziranih tehnologij.
Vodja sekcije: Bojan Štok
Paradigma neprekinjene integracije, dostave in namestitve (ang. continuous integration, delivery and deployment), pogosto označena s kratico CI/CD, je z uvedbo praks, ki pohitrijo razvoj ter izboljšajo učinkovitost in zanesljivost, korenito spremenila razvoj programske opreme. Veliko razširjenost tovrstnih praks potrjuje tudi poročilo organizacije CD Foundation iz leta 2023, ki kaže, da neprekinjeno integracijo ali namestitev uporablja skoraj vsak drugi razvijalec. Ker omenjena paradigma zahteva pogosto izvajanje določenih časovno zelo intenzivnih aktivnosti, kot so integriranje, testiranje in namestitev sprememb v produkcijsko okolje, je avtomatizacija bistvenega pomena. Za nemoteno izvajanje vseh CI/CD aktivnosti se tipično vzpostavi cevovod, ki aktivnosti poveže, in jih, v skladu s pravili ki jih definiramo, samodejno izvaja. Čeprav ima uporaba CI/CD cevovodov mnogo dokazanih prednosti, pa še vedno obstajajo ovire pri uvajanju v ustaljene procese razvoja programske opreme. Raziskave kažejo, da je vzpostavitev CI/CD cevovoda zahtevna, prav tako pa lahko neustrezno zasnovan ali implementiran cevovod v proces razvoja programske opreme vpelje več težav kot prednosti. Zato je pomembno, da se ob vzpostavitvi cevovoda dobro zavedamo morebitnih izzivov in skrbno načrtujemo njegovo strukturo ter kasnejše upravljanje.
Obstaja širok nabor orodij in tehnologij, ki omogočajo razvoj, uporabo in vzdrževanje CI/CD cevovodov, in v zadnjih letih smo priča prehodu iz samostojno gostovanih orodij, kot je Jenkins, na oblačne storitve kot so GitHub Actions, GitLab CI/CD in Azure DevOps. Opazne so tudi spremembe pri času do vključitve CI/CD cevovoda v projekt, saj so leta 2012 projekti do vzpostavitve cevovoda v povprečju potrebovali več kot eno leto, leta 2023 pa zgolj tri mesece. To lahko pomeni, da razvijalci vidijo vrednost v uporabi cevovodov, hkrati pa je z uporabo oblačnih platform vzpostavitev postala toliko bolj preprosta, da se zanjo odločajo vse hitreje. Podobno se veča tudi število projektov, ki v sklopu cevovodov uporabljajo več kot eno CI/CD tehnologijo. V zadnjih letih je bilo takšnih 20% projektov, kar kaže, da nobeno posamezno orodje ne izpolnjuje vseh zahtev razvijalcev.
Kljub veliki pomembnost skrbnega načrtovanja vzpostavitve, moramo pozornost posvetiti tudi vzdrževanju in razvoju cevovoda tekom razvoja. Kot vsaka programska oprema, se morajo tudi cevovodi pogosto dopolnjevati ali spreminjati. To je lahko zaradi slabih praks ob vzpostavitvi ali kasnejših spremembah, spremembi uporabljenih tehnologij ali prilagoditve spremembam v procesu razvoja programske opreme oz. programski opremi sami. Študije kažejo, da se v CI/CD cevovodih najbolj pogosto spreminjajo faze in opravila (ang. jobs), kar je razumljivo, saj se tako prilagajajo spremembam v programski opremi, za boljšo razumljivost, delovanje in odpravo slabih praks, pa se pogosto dodajajo komentarji in izvaja refaktoriranje konfiguracije cevovoda.
Da bi preverili izsledke raziskav in podrobneje raziskali razvoj cevovodov, smo iz platforme GitHub zajeli 1000 najbolj priljubljenih repozitorijev in njihove spremembe (ang. commits). Za lažje prepoznavanje cevovodov in faz, ki jih ti vključujejo, smo se pri repozitorijih omejili na takšne, kjer je večina kode v programskem jeziku Java, pri cevovodih pa na orodje GitHub Actions. Ugotovili smo, da cevovode vključuje 42% procentov repozitorijev, povprečno pa jih vključijo po sedmih mesecih. Skoraj vsi cevovodi so vključevali fazo gradnje, približno polovica repozitorijev je vključevala fazi izdaje in testiranja, fazo namestitve pa le manj kot petina. Analizirali smo tudi spremembe programske kode in cevovodov tekom projekta, ter ugotovili, da se ob povečanju sprememb v kodi poveča tudi število sprememb cevovodov in da spremembe cevovodov v povprečju predstavljajo 4% vseh sprememb v repozitoriju.
Čeprav je življenjski cikel razvoja programske opreme zelo dobro definiram, pa je evolucija cevovodov tekom razvoja razmeroma slabo raziskana. Spremembe v CI/CD cevovodih niso zgolj odziv na tehnične potrebe projektov, temveč odražajo tudi spreminjajoče se okolje razvojnih praks in orodij. Nenehna evolucija CI/CD cevovodov poudarja nujnost, da bolj podrobno raziščemo njihov življenjski cikel in ne le spremljamo, ampak tudi aktivno vodimo njihov razvoj.
V zadnjih treh letih smo znatno napredovali v razumevanju in implementaciji CI/CD cevovodov, kakor tudi pri vzpostavitvi in upravljanju storitev v Azure oblačnem okolju. Nekaj naših strank je imelo za cilj postavitev robustne platforme za razvoj .NET-core in/ali Java mikrostoritev in vzpostavitev učinkovitega procesa neprestane integracije ter nameščanja novih funkcionalnosti v Azure oblaku v več geografskih regijah hkrati za zagotavljanje SaaS (ang. software-as-a-service).
Podrobno bomo analizirali evolucijo cevovodov, ki so bili razviti na osnovi praktičnih izkušenj. Pregledali bomo ključne faze cevovoda za gradnjo storitev: od preverjanja okolja, stila kode (ang. linting) in formatiranja kode, do gradnje knjižnic in nenazadnje mikrostoritev, večstopenjskega testiranja, pakiranja, preverjanje ranljivosti in dostave v repozitorije. Za vsako od teh faz bomo ocenili njeno učinkovitost, pomen in potencialne izzive.
Prav tako bomo predstavili razlike in izkušnje z uporabo multi-repo in mono-repo pristopov pri razvoju distribuiranih sistemov, s posebnim poudarkom na E2E (ang. end-to-end) integracijskem testiranju. Obravnavali bomo upravljanje in vzdrževanje več testnih okolij, orodja za E2E testiranje in osvetlili najboljše prakse, pridobljene iz naših izkušenj. Razložili bomo tudi, kako razvijalci lahko lokalno izvajajo kompleksne mikrostoritvene arhitekture in so tako bolj učinkoviti pri razvoju distribuiranega sistema. Primerjali bomo razvoj posamezne mikrostoritve v ograjenem lokalnem sistemu z razvojem mikrostoritve, ki je povezana centralno integracijsko okolje že v fazi lokalnega razvoja.
Glede namestitve sistema v multi-regijskem okolju bomo razložili posebnosti arhitekture v Azure oblaku, vključno z implementacijo več AKS (ang. Azure Kubernetes Service) gruč in ostalih Azure storitev preko IaC (Infrastructure-as-Code) pristopa. Pogledali si bomo strategije za hitro namestitev (ang. hot-deploy) in elastično skaliranje v takšnem okolju. Osredotočili se bomo na globalno storitev Azure Front Door, podatkovne storitve in sam AKS.
Dodatno se bomo ustavili pri FinOps strategijah za učinkovito upravljanje stroškov v oblaku, vključno s prikazom tehnik za znatno znižanje operativnih izdatkov.
Ta predstavitev bo služila kot vpogled v naše pridobljene izkušnje bo slušatelje opremila z znanjem za nadaljnje izboljšanje praks v oblačnih tehnologijah in uporabe Kubernetes-a.
V današnjem dinamičnem okolju razvoja programske opreme, za katerega je značilen agilen pristop, se soočamo s stalnim in hitrim uvajanjem novih verzij programske opreme. Moderni pristopi k razvoju programske opreme se zgledujejo po modelu SCRUM, ki priporoča redno in pogosto izdajo posodobitev aplikacij. Posledično postane ročno vzdrževanje mobilnih naprav časovno potratno in podvrženo napakam, nasploh v primeru številnih poslovnih aplikacij ter fizičnih naprav. V tem kontekstu naglih sprememb postaja vse bolj pomembno sledenje različnim verzijam aplikacij, saj lahko ena aplikacija obstaja v več različicah, vsaka prilagojena specifičnim potrebam ali okoljem. Zato je vzpostavitev učinkovitega sistema sledenja, ki vključuje zgodovino naložitev programske opreme na odjemalce, odgovorne osebe in podrobnosti o naloženih verzijah, ključnega pomena za uspešno upravljanje razvoja in vzdrževanja aplikacij v agilnem razvojnem okolju.
V prispevku na kratko razložimo arhitekturno zasnovo lastnega sistema za upravljanje, nadzor in registracijo mobilnih naprav (ang. Mobile device management oz. MDM) v organizacijah z več poslovnimi napravami in aplikacijami. Prednost v sistemu vidimo predvsem v avtomatizaciji izvedbe posodobitev, varnosti, centraliziranem nadzoru nad vsemi registriranimi mobilnimi napravami in v prikazu njihovih osnovnih informacij. Tako je omogočena večja učinkovitost in varnost pri uporabi mobilnih naprav, izboljšano zadovoljstvo končnih uporabnikov, poenostavljen razvoj in vzdrževanje mobilnih aplikacij ter lažja in hitrejša avtomatizacija proizvodnih procesov.
Sistem temelji na vrhovni mobilni aplikaciji, ki deluje kot zaganjalnik le izbrane programske opreme, naložene na izbrani napravi. Ob zagonu so kličoči aplikaciji posredovani podatki, s katerimi lahko v dnevniških sistemih enolično določimo napravo, katera poroča zapise. Zaganjalnik je razvit tako, da omogoča zagon mobilnih aplikacij neodvisno od ogrodja v katerem je le-ta zasnovana. Dodatno je mogoče filtrirati prikaz poslovnih aplikacij glede na organizacijo in okolje. V zaganjalnik smo integrirali tehnologijo SignalR, s pomočjo katere le-ta komunicira z zalednim sistemom. Potrebuje se na primer za posredovanje lokacije GPS na zahtevo.
Programsko opremo je mogoče ob predhodni prijavi tudi posodabljati in brisati. Posodobitve potekajo popolnoma avtomatizirano, saj gradnja novih različic mobilnih aplikacij poteka na podlagi pristopa neprekinjene integracije in postavitve. Cevovod poleg ustvarjenega paketa poskrbi še za posredovanje informacije o novi različici, kar izkorišča zaganjalnik na mobilni napravi in uporabniku ponudi avtomatsko posodobitev izbrane aplikacije. Posledično smo s tem sistemom razbremenili razvijalca od ročnega posodabljanja programske opreme ter poskrbeli za minimizacijo napak, ki lahko v tem postopku nastanejo.
Na koncu opišemo še izzive, s katerimi smo se soočili ob zagonu, posodabljanju in brisanju paketov znotraj ogrodja MAUI, koristne predloge in morebitne izboljšave implementiranega sistema.
Razvoj spletnih uporabniških vmesnikov se je z uporabo frontend razvojnih ogrodij v zadnjih letih korenito spremenil (React, Angular, Vue, Svelte …). Posledično se je vrzel med frontend in backend razvojem še povečala.
V podjetju smo zaznali potrebo po razširitvi funkcionalnosti obstoječe interne spletne aplikacije za večjo učinkovitost internih timov, vendar nismo imeli prostih frontent razvijalcev, imeli pa smo razpoložljive backend razvijalce. Namesto čakanja na frontend, smo se odločili se raziskati alternativne rešitve, ki bi nam omogočile, da bi lahko razvijali sodobne frontend in backend aplikacije v istem jeziku in razvojnem okolju. Našli smo rešitev in za razvoj uporabili .NET 8 Blazor in ogrodja MudBlazor, kar bomo predstavili v članku.
Pri razvoju aplikacij s pomočjo .NET 8 Blazor lahko backend razvijalci učinkovito ustvarijo bogate in interaktivne spletne aplikacije. Blazor, kot del ogrodja .NET, omogoča razvoj enostranskih aplikacij (SPA) v jeziku C#, kar backend razvijalcem omogoča, da uporabijo svoje znanje brez potrebe po učenju dodatnega programskega jezika. To seveda poenostavi in pohitri razvoj, saj se lahko razvijalci osredotočijo na logiko in funkcionalnost aplikacije, brez potrebe po učenju novega jezika ali programskega ogrodja.
V želji da bi razvoj še bolj poenostavili, smo se odločili vpeljati knjižnico MudBlazor, ki temelji na znanem UI ogrodju Material in je zasnovana posebej za Blazor. Ponuja širok nabor vnaprej izdelanih in prilagodljivih komponent, kot so obrazci, tabele, gumbi in navigacijski elementi, kar omogoča hitro in enostavno izdelavo uporabniških vmesnikov.
S takšnim pristopom smo pridobili vse prednosti razvoja v .NET, hkrati pa zagotovili, da lahko backend in fullstack razvijalci hitro in enostavno prispevajo k izgradnji spletne rešitve. V članku bomo predstavili Blazor in MudBlazor ogrodje, strukturo samega razvoja, izzive med samim razvojem in za konec še rezultate.
Rešitev, ki je nastala kot rezultat je spletna aplikacija, ki po strukturi spominja na backend projekte in omogoča hiter in učinkovit razvoj internih aplikacij, s čimer smo opolnomočili backend razvijalce, da lažje svoje ideje predstavijo znotraj podjetja. Kot dodatek k implementaciji smo pridobili tudi peskovnik, v katerem lahko preizkusimo določene koncepte uporabniške izkušnje brez dodatnega dela za polno zasedene frontend razvijalce.
Vodja sekcije: Boštjan Grašič
Pametni števci omogočajo natančno spremljanje porabe električne energije pri gospodinjskih in poslovnih odjemalcih. V 15-minutnih intervalih beležijo podatke in jih samodejno posredujejo v merilne centre elektro distribucij (Elektro Ljubljana, Elektro Maribor, …) od koder se s pomočjo Apache Kafka prenašajo v centralno platformo za obdelavo merilnih podatkov (POMP). Celoten sistem je postavljen na lastni infrastrukturi. Namen zbiranja podatkov je obračun omrežnine na podlagi dejanske porabe energije, kar omogoča bolj transparentno in učinkovito obračunavanje stroškov. Uporabniki imajo s tem vpogled v lastno porabo in lahko lažje najdejo priložnosti za varčevanje z energijo. Dobavitelji energije pa lahko zbrane podatke uporabijo za boljše upravljanje omrežja in izboljšanje storitev. V prispevku predstavljamo naše izkušnje z optimizacijo zajema, obdelave in shranjevanja obsežnih količin podatkov. V naš sistem POMP mesečno shranimo skoraj 3 milijarde novih zapisov.
Na tržišču obstajajo številne rešitve za podatkovne zbirke časovnih vrst. Podatkovne zbirke časovne vrste (ang. timeseries), so baze, kjer podatki prihajajo iz različnih senzorjev in v časovnem zaporedju pošiljajo podatke središčni podatkovni zbirki. Pri nas smo se odločili za TimescaleDB. Le-ta je narejena kot razširitev uveljavljene relacijske podatkovne zbire PostgreSQL in se namesti kot razširitev. Prednost uporabe takšne rešitve je v tem, da je osnovna tehnologija že poznana zaposlenim v podjetju. V podjetju uporabljamo podatkovne zbirke IBM Db2 in Microsoft SQL Server za običajne operativno-transkacijske sisteme in podatkovno skladišče. Ker je PostgreSQL klasična relacijsko podatkovna zbirka, je le-ta enostavno razumljiva skrbnikom podatkovnih zbirk. TimescaleDB je osnovana na SQL-u, kar je velika prednost za razvijalce programske opreme, ki lahko uporabijo obstoječe znanje. Ker je to prostokodna rešitev, omogoča hitro prilagajanje potrebam po računalniških virih, brez da bi bili omejeni z licenčnimi pogoji programske opreme.
Kot z vsako novo tehnologijo smo imeli v podjetju na začetku nekaj porodnih težav. Navajeni smo z izdelavo običajnih operativno-transakcijskih sistemov, kjer napisan SQL in kakšen indeks na podatkovni zbirki in rešitev zadovoljivo dobro deluje. Pri podatkovni zbirki časovnih vrst, pa to niti približno ni dovolj, ker gre za velike količine podatkov in vsaka majhna nedoslednost se kaznuje s počasnim delovanjem poizvedb na podatkovnih zbirkah in veliko obremenitvijo računalniškega sistema. Prva logična izbira optimizacije je particioniranje največjih tabel. To pomeni, da s stališča aplikacije obstaja ena logična tabela, fizično pa je na podatkovni zbirki lahko tudi nekaj tisoč particij.
Nadaljevali smo z zajemom največkrat izvajajočih poizvedb nad podatki in najdlje trajajoče poizvedbe. S tem smo dobili nabor poizvedb, ki jih je potrebno optimirati. Izvajali smo analize pristopa do podatkovnih zbirk (ang. explain) in iz njega dognali spremembe, ki jih moramo narediti v podatkovnih poizvedbah. Zmanjšali smo kompleksnost tako, da smo poizvedbe poenostavili s spremembo podatkovnega modela. Namesto kompleksnih poizvedb, smo spremenili podatkovni model in šifrante podatkov napolnili s stored procedurami.
V prispevku podrobneje opisujemo naše izzive povezane z indeksacijo, agregacijo podatkov z materializiranimi pogledi, optimalnim izvajanjem same PostgreSQL podatkovne zbirke, uporabo kompresije in vzporedne obdelave podatkov. Pomembno je poznavanje narave podatkov. Imamo tri velike procese: a) inicialno nastajanje podatkov iz merilnih mest, b) validacija z nadomeščanjem manjkajočih in napačnih podatkov in c) zapis podatkov v ciljno IBM Db2 bazo, kjer se izvede preostali izračun omrežnine. Predvideli smo, da bodo podatki samo nastajali v časovni vrsti, vendar smo bili prisiljeni spreminjati podatke, pri katerem smo uvedli metodo ustreznega predrazvrščanja podatkov pred aplikativnimi obdelavami podatkov in metodo odstranjevanja mrtvih zapisov. Spisali smo skripte za optimizacijo podatkovne zbirke, ki se odvijajo vsako noč in tako čim bolje pripravijo podatkovno zbirko za učinkovito izvajanje dnevnih podatkovnih poizvedb.
Pri podatkovni zbirki je ključno, da deluje učinkovito, odzivno in s čim večjimi prilagodljivostmi, kajti le-ta je le eden izmed sestavnih delov platforme POMP, s katero smo vzpostaviti skalabilen, pretočen sistem shranjevanja velepodatkov, ki je namenjen obračunu omrežnin. Postavljeni pa so nastavki, da bo v prihodnosti razširljiva z napredno analitiko in strojnim učenjem, kar bo izboljšalo poslovne odločitve, učinkovitejše poslovanje in nove priložnosti za inovacije.
Z razvojem tehnologij strojnega učenja in globokega učenja se povečuje število praktičnih uporab v poslovnih procesih. V prispevku se osredotočamo na področje planiranja v proizvodnih podjetjih, natančneje na uporabo strojnega učenja v procesu mikroplaniranja proizvodnje (angl. production scheduling). Ta proces z vidika razvrstitve informacijskih sistemov podpirajo napredni sistemi za terminiranje in razvrščanje delovnih nalogov (ang. APS), ki obogatijo poslovne informacijske sisteme z naprednimi algoritmi za optimizacijo razporedov delovnih nalogov v proizvodnji. Z razvojem in vključenostjo tehnologije strojnega učenja pa dodatno pomagajo razreševati problem razlik med želenim trajanjem delovnih nalogov po normativih in dejansko dosegljivim trajanjem (ang. AI APS). Velike razlike so značilne za zahtevne proizvodne tehnologije, kjer proizvodnja začenja z velikimi odstopanji od želenega in se počasi, z vsako iteracijo nekaj nauči bolje in tako približuje ciljnim normativom. Planiranje takega procesa je zahtevno, saj mora planer ob vsaki iteraciji oceniti izboljšavo, popraviti napoved trajanja na podlagi podatkov o dejanski realizaciji in rahlo »priganjati« proizvodnjo, da se izboljšuje. Klasični APS tega ne zna, napredni APS z AI pa poskuša to režijsko delo posnemati in avtomatizirati (ang. RPA).
Izsledki v literaturi navajajo številne pozitivne učinke naprednih APS z AI, zaradi katerih se podjetja zanimajo za vpeljavo te tehnologije v svoje procese. Po drugi strani pa primanjkuje empiričnih študij, ki bi se osredotočale na merjenje konkretnih učinkov algoritmov strojnega učenja pri napovedovanju trajanja delovnih nalogov, kar je osnovni kriterij pri ugotavljanju dodane vrednosti in ekonomske upravičenosti tovrstnih tehnologij. Z rezultati pričujoče raziskave smo skušali to raziskovalno vrzel zapolniti.
Raziskava predstavlja študijo primera, ki smo jo izvedli v realnem okolju na vzorcu proizvodnje izdelkov podjetja Domel, kjer pri mikroplaniranju proizvodnje uporabljajo AI APS rešitev Leap slovenskega podjetja Qlector in sicer na proizvodnih tehnologijah stiskanja in brizganja. Omenjena napredna tehnologija se uporablja od leta 2021, kar zagotavlja dovolj dolgo časovno obdobje za zajem dovolj velikega vzorca podatkov za prve analize njenih učinkov.
Motiv za raziskavo je izhajal iz problema, da algoritmi strojnega učenja potrebujejo določeno količino podatkov o ponovitvah delovnih nalogov enakega izdelka na postrojenjih, pri različnih pogojih, kot so določen stroj, čas izmene, dan v tednu, usposobljenost prisotnih delavcev ipd., da lahko zagotovijo bolj natančne, smiselne in uporabne napovedne informacije. Predvidevali smo, da se točnost predvidevanja algoritmov AI APS za posamezni izdelek izboljšuje z naraščanjem števila ponovitev (iteracij) delovnega naloga za ta izdelek. Z analizo različnih testnih primerov smo ugotovili, da lahko naše predvidevanje potrdimo le deloma. Namreč, zaradi ne povsem predvidljivih razmer v proizvodni in »posebnosti« procesa proizvodnje, kjer nastopa veliko različnih bolj ali manj naključnih dogodkov, se dogaja, da algoritmi strojnega učenja generirajo veliko napako pri predvidevanju, kljub temu, da so predhodno že dosegali kvalitetne napovedi trajanja. V poglobljenih analizah smo želeli smo ugotoviti, ali je možno določiti, po kolikšnem času (t.j. po kolikšnem številu izvedenih iteracij delovnega naloga za določen izdelek) lahko zaupamo, da so rezultati AI APS dovolj natančni in zanesljivi, lahko planer izračunavanje trajanja povsem prepusti avtomatiki z AI APS. Poleg tega smo želeli ugotoviti, kaj vse vpliva na to, kako hitro se sistem AI APS stabilizira ter na kakšen način lahko v proizvodnji k temu pripomoremo.
Z izsledki raziskave podajamo konkretne izkušnje pri vrednotenju učinkov uporabe strojnega učenja pri napovedovanju trajanja delovnih nalogov kakor tudi izpostavljamo zanimive izzive, v katre bi se veljalo osredotočati v prihodnjih raziskavah. Rezultati so koristi in uporabni za podjetje, ki je v študiji primera sodelovalo, kakor tudi za ostala podjetja, ki se soočajo z izzivi uvajanja sodobnih metod strojnega učenja v svoje poslovne procese.
Hiter razvoj na področju tehnologij veriženja blokov prinaša številne inovacije in vpeljave novih poslovnih modelov na področju informacijskih tehnologij. Vpeljava hranjenja podatkov v verige blokov kot alternativa klasičnim podatkovnim bazam med drugim prinaša transparentnost podatkov, dostopnost, varnost in decentralizirano upravljanje. Navedene lastnosti s pridom izkoriščajo številne inovativne rešitve iz področja, financ, zavarovalništva, medicine in oskrbovalnih verig. Številne prednosti vpeljave hranjenja podatkov v verige blokov postavljajo temelj razvoju informacijskih rešitev, ki ponujajo učinkovito deljenje podatkov med različnimi organizacijami ali deležniki brez potreb, da bi ti med seboj vzpostavili zaupanje. Vpeljava tehnologije veriženja blokov v produkcijo okolje informacijskih rešitev, prinaša s seboj tudi številne inženirske izzive, ki jih je potrebno nasloviti v okviru razvojnega procesa tovrstnih rešitev. Naloga načrtovalcev tovrstnih sistemov je prepoznati izzive pri uporabi te tehnologije in jih uspešno premostiti.
V primerjavi z dostopnimi časi se izvedbe transakcij pri obdelavi podatkov zapisanih v verigah blokov soočajo z višjimi latentnimi časi. Pomemben faktor z vplivom na performančne lastnosti informacijskih rešitev predstavljajo tudi omejitve pri pretočnosti (angl. throughput) izvajanja transakcij. Izpostaviti je potrebno tudi izziv povezan s količino podatkov in vrsto podatkov, ki jih lahko shranjujemo v pametne pogodbe. Dodatno pa hranjenje podatkov v verigah blokov prinaša izzive povezane z omrežjem verig blokov ter komunikacijo s pametnimi pogodbami. Pametne pogodbe predstavljajo tako aplikacijsko/poslovni kot podatkovni nivo. Nespremenljivost pametnih pogodb, ki zagotavlja visoko stopnjo varnosti in zanesljivosti, prinaša tudi omejitve, saj ni možno klasično brskati in poizvedovati po podatkih, kar otežuje dostopnost in obdelavo informacij. Ta omejitev vpliva na učinkovitost in uporabnost informacijskih sistemov, ki temeljijo na verigah blokov.
Vpeljava orkestracijskega nivoja, IPFS-a za hranjenje datotek, vpeljava konzorcijih omrežij, vpeljava GraphQL indeksiranja in povpraševanje po podatkih so samo nekatere izmed tehničnih rešitev, ki uspešno naslavljajo inženirske izzive razvoja programskih rešitev, ki podatke vsaj delno hranijo v verige blokov. V prispevku povzamemo ključne inženirske izzive razvoja tovrstnih informacijskih rešitev ter predstavimo nekatere praktične rešitve za predstavljene izzive. Predstavljene rešitve opisanih izzivov črpamo iz praktičnih izkušen pri razvoju programske rešitve namenjene upravljanju kratkih prehranskih oskrbovalnih verig.
Vodja sekcije: Dean Korošec
Od leta 2022 smo bili priča nekaj odmevnim kibernetskim napadom, koliko jih je ostalo skritih ne vemo. Največ medijske pozornosti so pritegnili izsiljevalski kibernetski napadi, še zlasti na državne inštitucije in državna podjetja. V zadnjem času smo priča številnim hekerskim napadom onemogočanja dostopa do spletnih strani. Med prvimi je bila napadena spletna stran predsednice države. Napadene so bile tudi spletne strani državne uprave gov.si, državni center SI-TRUST, ki skrbi za izdajo in overjanje digitalnih potrdil, Banke Slovenije in druge. Tovrstni napadi imajo predvsem psihološki učinek z onemogočanjem dostopa do informacij in spletnih storitev.
Informacije o kibernetskih napadih, ki so se v zadnjem času zgodili v Sloveniji, večinoma izhajajo iz javnih medijev, ki pa so se v tem primeru pogosto izkazali za neverodostojne. Po drugi strani pa so uradne informacije zelo skope in splošne. V članku bo kot primer kibernetskega napada opisan napad na Upravo Republike Slovenije za zaščito in reševanje, ki kljub svojim specifičnostim lahko služi za prikaz izsiljevalskih napadov na informacijsko infrastrukturo državne uprave. Podrobneje bo opisana hekerska skupina Qilin, katere informacijska infrastruktura je bila uporabljena pri napadu in domnevno izhaja iz območja Ruske federacije.
Predstavljeni bodo trendi v razvoju orodij, ki se jih poslužujejo napadalci s poudarkom na uporabi umetne inteligence. Umetna inteligenca omogoča analizo velikega števila podatkov z namenom iskanja potencialnih tarč za kibernetski napad ali ranljivosti v sistemih izbranih tarč napada. Omogoča avtomatizacijo procesov napadov, prilagodljivost orodij za napad in s tem posledično večjo obsežnost napadov. Ni si več mogoče zamisliti učinkovito kibernetsko varnost brez uporabe umetne inteligence skupaj z aktivno protivirusno zaščito in simulacijami kibernetskih napadov.
Izsiljevalski napadi imajo običajno jasne ekonomske cilje in modele, ki sledijo novim tehnologijam v zadnjem času temelječim na umetni inteligenci, kar je garancija njihove dobičkonosnosti. Finančne posledice napadov z izsiljevalskimi virusi so v letu 2015, to je deset let po prvem enakovrstnem izsiljevalskem napadu, ocenjene na 325 milijonov dolarjev, v letu 2017 pa že slabih pet milijard dolarjev oziroma petnajstkrat več. Upoštevajoč 30% medletno rast škode v zadnjem desetletju bo škoda v leti 2031 znašala okoli 265 milijard dolarjev. Poslovni model ponujanja izsiljevalske programske oprem kot storitve je močno povečal dostopnost hekerskih orodij za izvajanje napadov.
Politično motivirani napadi na drugi strani v grobem zasledujejo dva cilja, ustvarjanje panike in negotovosti prek medijsko odmevnih dejanj in uveljavljanje političnih interesov z vpletanjem v politični in nacionalno varnostni prostor države. Namen DDOS napadov v zadnjih mesecih je bil predvsem v pridobivanju pozornosti z medijsko odmevnostjo. Mediji so takoj objavili novico o »Narodni kibernetski vojski« (People s Cyber Army), ki naj bi napadla spletne strani v Sloveniji. S svojimi objavami so po nepotrebnem popularizirali akterje in ustvarjali negotovost med ljudmi. DDOS napade lahko za relativno majhen denar najamemo na temnem spletu. Maira botnet omrežja za DDOS napade večinoma temeljijo na IOT klientih, ki jih je vse več v omrežju internet.
Zaradi povečevanja kibernetskih tveganj se tudi zakonodajalci in standardizacijska telesa prilagajajo z novimi predpisi in standardi. V zadnjih letih smo priča eksponentni rasti novosti in posodobitev, z letošnjim letom pa nas začenjajo dohitevati roki za implementacijo.
Pripravljavci večinoma trdijo, da gre za “manjše” prilagoditve. Nekaj “manjših” prilagoditev, ki jih zahtevajo spremembe na področju kritične infrastrukture, skupne ravni kibernetske varnosti, operativne odpornosti finančnega sektorja, digitalnih storitev, digitalnih trgov, umetne inteligence, varstva osebnih podatkov in informacijske varnosti po standardih ISO 27001 in ISO 27002 bomo seveda brez težav zmogli, ali ne?
Naročnik in izvajalec za nakup storitev in izdelkov s področja informacijske tehnologije praviloma skleneta pogodbo. V pogodbi dogovorita vsebino, roke in ceno storitve. Bolj natančni opredelijo tudi posebne pogoje, kot na primer pogoje hrambe podatkov naročnika, hrambo izvorne kode in podobno. Namen pogodbe je, da bo v pomoč, če se bo tekom sodelovanja zapletlo. Kadar se zaplete, se pojavi vprašanje kako lahko izvršimo v pogodbi predvidene posledice za stranko, ki je pogodbo kršila. Ali lahko to preprosto rešimo z izvršbo? Če bi bilo res tako zelo preprosto, potem bi danes že v razširjenem obsegu uporabljali kar pametne pogodbe in bi naši dogovori temeljili kar na verigi blokov. Zakaj torej še ni tako?
Družabno srečanje s koncertom Vlada Kreslina
Klub Fenix (Maribox, Loška ulica 13, Maribor, dvigalo – nivo L)
Vodja sekcije: Milan Gabor
Namestitev aplikacij na Kubernetes je dokaj enostavna, ko imamo na voljo povezavo do javnih ali privatnih registrov.
V tem članku bomo predstavili izzive, s katerimi se soočamo, ko upravljamo s Kubernetes gručami v omrežjih z omejenim dostopom. Kubernetes uporablja kontejnerje, Helm charte ter druge artefakte, ki jih tekom delovanja vleče iz internetnih in privatnih registrov. Te artefakte moramo zagotoviti v omrežju z omejenim dostopom. Ko vzdržujemo več identičnih Kubernetes gruč v omrežjih z omejenim dostopom, se soočamo s problemom sledenja verzij aplikacij ter njihove konfiguracije.
Našteli bomo nekaj načinov namestitve Kubernetes gruče v omrežja z omejenim dostopom. Predstavili bomo nekaj rešitev za prenos kontejnerjev in Helm chartov v takšna okolja. Na koncu bomo pokazali, kako lahko brez centralnega sistema za verzioniranje zagotovimo deklarativno namestitev aplikacij ter ponovljivost namestitve celotne Kubernetes gruče.
V našem podjetju smo se soočali z izzivi pri avtorizaciji poslovne logike, kar je vplivalo na učinkovitost in varnost naših storitev. V želji da bi izboljšali ta proces, smo izvedli temeljito raziskavo različnih pristopov in orodij za avtorizacijo. Osredotočili smo se predvsem na enostavnost vpeljave v trenuten proces ter hitrost vpeljave v razvojni cikel.
Po pregledu različnih rešitev smo se odločili za uporabo Open Policy Agent (OPA), ki služi kot “sidecar” za naše storitve. Omenjeno rešitev bomo predstavili v našem članku. OPA je odprtokodno orodje za enotno politiko avtorizacije, ki omogoča centralizirano in dosledno izvajanje avtorizacijskih politik. Politike dostopa v OPA so napisane v jeziku Rego, ki omogoča fleksibilno in izrazno pisanje pravil za avtorizacijo. V članku bomo prikazali pisanje politik dostopa ter prakse za maksimalno izkoriščanje prednosti naše infrastrukture tudi v tem delu.
Kot del naše rešitve je tudi vpeljava OPAL (OPA Policy Administration Layer), ki omogoča enostavno posodabljanje avtorizacijskih politik in podatkov, s katerimi deluje OPA. OPAL omogoča dinamično posodabljanje politik dostopa, kar pomeni, da lahko hitro in učinkovito prilagajamo pravila brez prekinitev delovanja storitev.
V naši infrastrukturi OPA deluje kot Policy Decision Point (PDP), kar pomeni, da je odgovoren za sprejemanje odločitev glede avtorizacije na podlagi definiranih politik dostopa. V našem pristopu smo se odločili za decentraliziran pristop uporabe PDP, ki je implementiran kot “sidecar” ob posameznih storitvah, kar zagotavlja večjo prilagodljivost in razširljivost. Ta decentralizacija omogoča hitrejše odzivne čase in boljšo porazdelitev obremenitve, saj se odločanje izvaja bližje mestom, kjer so zahteve generirane.
V članku bomo predstavili tudi spremembe in izzive pri načinu razvoja ob vpeljavi takega sistema, saj je ločeno pisanje avtorizacijskih politik na začetku povzročalo kar nekaj preglavic, predvsem v obliki pozabljenih politik dostopa in zavrnjenih zahtevkov na zaledni sistem.
Overjanje brez gesel (ang. passwordless authentication) pomeni pomemben premik od običajnih varnostnih paradigem, saj v celoti odpravlja potrebo po geslih. Namesto tega za overjanje uporabnikov uporablja sodobne mehanizme overjanja, kot so biometrija (prstni odtis, prepoznavanje obraza), strojni žetoni in mobilne naprave. Ta pristop odpravlja pogoste težave, povezane z gesli, kot so šibka gesla, njihova ponovna uporaba in dovzetnost za napade ribarjenja (ang. phishing). Z odstranitvijo gesel iz enačbe overjanje brez gesel zmanjša vektorje napadov in poenostavi uporabniško izkušnjo, zato je obetavna rešitev tako za potrošnike kot za podjetja.
Zveza FIDO (ang. Fast IDentity Online), konzorcij vodilnih v industriji, je razvila standarde FIDO2, da bi omogočila močne metode overjanja, ki ne temeljijo na geslih. FIDO2 sestavljata dva ključna elementa: protokol CTAP (Client to Authenticator Protocol) in specifikacija WebAuthn (Web Authentication). FIDO2 zagotavlja visoko raven varnosti z uporabo asimetrične kriptografije, ki je odporna proti ribarjenju, napadom s ponavljanjem (ang. reply attacks) in napadom posrednika (ang. Man-In-The-Middle). Poleg tega zagotavljajo brezhibno in uporabniku prijazno izkušnjo z integracijo z napravami, ki jih uporabniki že imajo, kot so pametni telefoni in prenosni računalniki.
Tehnologija PassKey pa temelji na načelih FIDO2 in ponuja še bolj izpopolnjen in na uporabnika osredotočen pristop k overjanju brez gesel. Tehnologija PassKey so v bistvu kriptografski pari ključev, ki so varno shranjeni v uporabnikovih napravah. Ključne značilnosti tehnologije so: se lahko uporablja v več napravah in operacijskih sistemih; s shranjevanjem ključev PassKey v varnih elementih naprav (kot so TPM ali varne enklave) je tveganje, da bi zlonamerni akterji pridobili ključ, čim manjše; postopek overjanje je poenostavljen, saj uporabnikom omogoča overjanje s preprostim biometričnim skeniranjem ali overjanje na podlagi naprave, s čimer odpravi potrebo po pomnjenju in upravljanju gesel. Tako PassKey predstavlja naslednji korak v razvoju informacijske varnosti, saj zagotavlja zanesljiv okvir, ki odpravlja pomanjkljivosti tradicionalnih metod overjanja, hkrati pa je usklajen z varnostnimi in uporabnostnimi cilji sodobnih digitalnih komunikacij.
Predstavitev bo vključevala praktično uporabo in prednosti overjanja brez gesla in tehnologije PassKey. Tako bo prikazana registracija uporabnika, postopek overjanja, kjer uporabnik dostopa do spletne storitve z uporabo tehnologije PassKey. Prav tako bo prikazana uporaba tehnologije PassKey na različnih napravah. Na koncu bo tudi predstavljen pregled varnostnih funkcionalnosti.
Zero-knowledge proofs (ZKP) so kriptografski protokoli, pri katerih dokazovalec (angl. prover) dokaže pravilnost določene trditve preveritelju (angl. verifier), ne da bi pri tem razkril kakršno koli informacijo o trditvi, razen njene pravilnosti. Zaradi te lastnosti se ZKP uporabljajo v številnih aplikacijah, saj povečujejo zasebnost in varnost uporabnikov ter varujejo njihove podatke. Čeprav so se začeli razvijati že v osemdesetih letih prejšnjega stoletja in so bili formalno definirani leta 1985, so se v praksi začeli uporabljati šele v zadnjih letih, zahvaljujoč razvoju učinkovitejših metod in algoritmov za generiranje kriptografskih dokazov. K hitremu razvoju je prispevala tudi njihova uporaba v tehnologiji veriženja blokov (angl. blockchain), na primer v L2 omrežjih z zero-knowledge rollup.
V članku predstavljamo, definiramo in opisujemo ZKP protokole, s poudarkom na zk-SNARK in zk-STARK. Dodatno se osredotočamo na dva primera njihove uporabe, in sicer na področju decentralizirane identitete ter strojnega učenja. Pri prvem primeru je glavna uporaba pri deljenju podatkov, kjer lahko uporabniki dokažejo veljavnost in vrednost svojih podatkov, ne da bi pri tem razkrili zasebne podatke. Eden najbolj razširjenih ZKP protokolov za decentralizirano identiteto je Polygon ID. Pri drugem primeru se ZKP uporabljajo za preverljivost napovedovanja modelov strojnega učenja, kjer je mogoče preveriti, ali je bil za napovedovanje uporabljen pravilen model. Ta primer uporabe je še posebej aktualen v današnjih časih, ko vse bolj uporabljamo in plačujemo za storitve, ki vključujejo strojno učenje, pri čemer je nemogoče preveriti, ali je bil uporabljen model, za katerega plačujemo.
Vodja sekcije: Mateja Verlič Brunčič
Spletne aplikacije so dandanes precej kompleksne, zato je učinkovito upravljanje asinhronih dogodkov ključnega pomena. Tradicionalni mehanizmi upravljanja dogodkov pogosto ne zadoščajo, kar vodi v zapleteno in neučinkovito programsko kodo. V ta namen imamo na voljo precej knjižnic, ki naslavljajo te izzive. Med trenutno najbolj aktualne spadajo signali, saj omogočajo bolj elegantno in učinkovito reševanje asinhronih operacij.
Signali kot koncept so tesno povezani z vzorcem opazovalec. Signali predstavljajo vrsto dogodkov, ki se lahko pošiljajo od enega dela aplikacije do drugega. So neke vrste komunikacijski kanal med različnimi deli aplikacije. Ko se zgodi dogodek (npr. sprememba v stanju), se obvesti vse opazovalce, ki so se zapisali na ta signal. To omogoča odziv na spremembe v realnem času, saj se vse relevantne dele aplikacije obvešča o spremembah, ne da bi morali samostojno preverjati stanje. Ta mehanizem poenostavi postopek gradnje interaktivnih in dinamičnih aplikacij, saj abstrahira kompleksnost ročnega upravljanja stanja in posredovanja dogodkov.
Signali kot koncept niso sicer nič novega. Prvo ogrodje, ki je omenjalo in implementiralo koncepte zelo podobne signalom, je bil Knockout.js. Knockout.js, razvit leta 2010, je bila prva knjižnica, ki je popularizirala uporabo opazovalcev in drugih reaktivnih mehanizmov, ki so omogočali avtomatsko posodabljanje uporabniškega vmesnika ob spremembah stanja. Ti koncepti so kasneje vplivali na razvoj signalov v drugih ogrodjih in knjižnicah.
Danes imamo na voljo več knjižnic in ogrodij, ki uporabljajo signale, npr. Angular, MobX, Vue ali Preact. Trenutno pa je v obravnavi tudi predlog za uvedbo signalov kot del osnovne funkcionalnosti programskega jezika JavaScript. Predlog si prizadeva standardizirati implementacijo signalov v vseh brskalnikih in okoljih, kar zagotavlja doslednost in enostavnost uporabe za razvijalce. Predlog temelji tudi na izkušnjah različnih ogrodij in knjižnic, ki so implementirale signale, kot že omenjeni MobX, Preact, RxJS, Solid in drugi.
V članku bomo najprej predstavili kaj so signali in kako delujejo. Nato se bomo osredotočili na izzive, ki jih rešujejo in njihove implementacije v različnih ogrodjih in knjižnicah. Na koncu bomo predstavili tudi praktični primer uporabe signalov v obliki razvoja spletne aplikacije.
Prispevek obrne pogled prejšnjih let na glavo. V prispevkih prejšnjih let smo se spraševali, kako (starejše) razvijalce, ki so navajeni namiznih aplikacij, naučiti dela v spletnih aplikacijah, sedaj pa se sprašujemo, kako spletno aplikacijo napisati tako, da jo lahko damo na namizje. Vprašanje, ki se smiselno pojavlja seveda je: »Zakaj bi to sploh počeli?«. Zakaj bi torej želeli spletno aplikacijo imeti kot namizno aplikacijo oz. jo gostiti sami? Odgovori so lahko različni, najpomembnejši pa je: zaupanje. Obstajajo uporabniki – tudi (ali predvsem) v poslovnem svetu, ki želijo imeti aplikacije pri sebi in ne v spletu. Če želimo spletno aplikacijo prenesti k uporabniku, je zadeva dokaj preprosta. Uporabnik pri sebi postavi spletni strežnik, ki je dosegljiv samo v njegovem poslovnem okolju in aplikacija se prenese na ta strežnik in s tem je zadeva bolj ali manj zaključena. Seveda pa se tu ne bomo ukvarjali z zares velikimi aplikacijami, ki bi razen spletnega strežnika in podatkovne baze zahtevale še druge resurse sodobnih spletnih rešitev. Toda tukaj sploh ne bomo govorili o tovrstnih aplikacijah/uporabnikih, temveč o uporabnikih, ki bi želeli imeti aplikacijo na lastnem računalniku. Tovrstna aplikacija po mora torej vsebovati vse elemente v sebi, vključno s spletnim strežnikom in podatkovno bazo ter JavaScript grafičnim uporabniškim vmesnikom, ki bo tekel bo brskalniku. Doseči torej želimo, da lahko uporabnik našo aplikacijo uporablja preko naslova http:\\localhost\xxx oz. https:\\localhost\xxx.
V prispevku predstavljamo kakšne prednosti prinaša upodabljanje spletnih aplikacij na strežniku (angl. Server-Side Rendering, v nadaljevanju SSR) v nasprotju s prikazovanjem pri odjemalcu (angl. Client-Side Rendering, v nadaljevanju CSR). SSR je tehnika spletnega razvoja, pri kateri strežnik ustvari celotne strani, prilagojene za vsako zahtevo uporabnika in jih dostavi brskalniku uporabnika. Ta pristop ponuja mnogo prednosti, vključno s hitrejšim začetnim nalaganjem strani, izboljšano optimizacijo za iskalnike in boljšo zmogljivostjo na napravah z manjšo procesorsko močjo. V uvodu bomo izpostavili s kakšnimi težavami se srečujemo kot razvijalci spletnih aplikacij s prikazovanjem pri odjemalcu in kako bi jih lahko naslovi z uporabo spletnih aplikacij na strežniku. Podrobneje bomo predstavili kaj je SSR in pregledali ogrodja, ki jih lahko uporabimo za generiranje vsebine spletnih aplikacij na strežniku kot sta Remix in Next.js. Na praktičnem primeru bomo prikazali rezultate posameznih metrik, ki so relevantne pri prikazovanju, nalaganju in delovanju spletne aplikacije. Prispevek zaključimo z razmišljanjem o časovnih, prostorskih in omrežnih obremenitvah, ki jih prinese razvijanje dotičnih spletnih aplikacij.
Zasnova obstoječe aplikacije za iskanje gradiva v knjižnicah, imenovane COBISS+, je stara že 10 let. Lani smo se odločili za arhitekturno prenovo aplikacije. Glavna arhitekturna sprememba je, da namesto JSF, jQuery in JavaScript za gradnjo uporabniškega vmesnika uporabljamo ogrodji React in Next.js, na strežniški strani pa smo zamenjali Java EE 8 z Jakarta EE 10. V prispevku bomo opisali izzive pri prehodu iz JSF/JavaScript na React/Next.js ter migraciji iz Java EE na Jakarta EE. Največ pozornosti pa bomo namenili temu, kako smo v novi generaciji aplikacije naslovili probleme robustnosti aplikacije, da se lažje odzovemo v primeru povečanega števila zahtev ali napada in v primeru, da mikrostoritve, ki jih aplikacija uporablja, bodisi niso dostopne, so preobremenjene, ali pa ne delujejo v redu. V ta namen smo uporabili knjižnico Fault Tolerance, ki je del MicroProfile specifikacije. Predstavili bomo primere uporabe razredov Timeout, Bulkhead, Retry, CircuitBraker in Fallback. Predstavili bomo tudi praktično uporabo knjižnice OpenTracing, ki je tudi del specifikacije MicroProfile in nam omogoča lažje sledenje med klici različnih mikrostoritev.
Vodja sekcije: Luka Pavlič
Ste razvijalec, soočen z izzivom izgradnje učinkovitega in točnega napovednega modela strojnega učenja, pa za to nimate ne časa, ne dovolj poglobljenega znanja? Ali vodstvo oz. poslovni partnerji od vas pričakujejo, da boste (ob vseh ostalih nalogah) poskrbeli še za razvoj inteligentnih rešitev? Ste s pomočjo tutorialov in primerov uporabe ustvarili model, ki pa ne dosega pričakovanih rezultatov? Nekaj odgovorov in praktičnih nasvetov, kako se spopasti z naštetimi izzivi, vam bomo ponudili v okviru te »hands-on« delavnice.
Strojno učenje predstavlja jedro umetne inteligence, od preprostih napovedi do najzmogljivejših generativnih orodij. Njegova uporaba se nenehno širi na nova področja in v mnoge domene ter postaja vseprisotna tehnologija, bolj ali manj skrita v vsakodnevnih opravilih. S širjenjem področij, kjer želimo uporabiti napovedne modele strojnega učenja, se nenehno veča tudi nabor nalog in izzivov, ki bi jih radi s strojnim učenjem čim bolje rešili. Razvoj in optimizacija napovednih modelov tako nista več le domena podatkovnih znanstvenikov, pač pa njihova uporaba postaja vse bolj operativna naloga običajnih razvijalcev informacijskih rešitev in IT oddelkov v podjetjih. Le-ti nimajo poglobljenih znanj o metodah umetne inteligence in algoritmih strojnega učenja, prav tako pa ne časa za razvoj specifičnih, visoko prilagojenih in optimiziranih rešitev za posamezno nalogo. Kljub temu pa bi seveda želeli rešitev, ki bi zastavljen problem reševala čim bolj točno in zanesljivo.
Dobro znana lekcija nas uči, da je potrebno za uspešno inteligentno rešitev nad zbranimi podatki uporabiti primeren model strojnega učenja. Različni sodobni algoritmi strojnega učenja so sicer dovolj univerzalni, da je z njimi možno doseči dobre rešitve za različne naloge. Njihovo vedenje prilagajamo danemu problemu z ustrezno nastavitvijo učnih parametrov. Pri tem velja, da bolj kot je algoritem kompleksen, več parametrov vpliva na njegovo delovanje. Iskanje in prilagajanje učnih parametrov konkretni nalogi je tako lahko zelo zahtevna naloga. A na srečo obstajajo dovolj preprosti in hkrati učinkoviti pristopi, ki omogočajo optimizacijo napovednih modelov tudi brez poglobljenega znanja.
Namen delavnice je na čimbolj praktičen način predstaviti možne pristope k optimizaciji napovednih modelov, četudi niste podatkovni znanstvenik. V okviru delavnice boste sami preskusili, kako lahko z uporabo knjižnic in orodij v programskem okolju Python iz povprečnih »šolskih« modelov s predstavljenimi pristopi zgradimo kakovostno rešitev. Pridobili boste znanje in veščine, ki vam bodo pomagale izboljšati napovedne modele tudi v vašem lastnem produkcijskem okolju.
Building and Deploying AI Agents Quickly with Qubinets
Izvedba delavnice v angleškem jeziku
Trajanje: 2 uri
In the fast-changing world of artificial intelligence (AI), quickly developing and deploying AI agents is essential to stay competitive and meet business needs. Qubinets is a platform that offers a solid and efficient framework for building and deploying AI agents rapidly.
Qubinets provides a complete set of tools that work well with popular machine learning frameworks and development environments. Its user-friendly interface and ready-made templates help developers create AI models faster by cutting down on repetitive coding and setup. The platform supports various AI applications, such as natural language processing, computer vision, and predictive analytics, making it suitable for different industries.
The deployment process is improved by Qubinets’ automated pipeline, which ensures that AI models are tested, validated, and scaled efficiently. This pipeline supports continuous integration and continuous deployment (CI/CD), allowing for quick updates and iterations. Additionally, Qubinets’ cloud-based infrastructure ensures that AI agents are highly available and scalable, making it easy to integrate them into existing systems.
Moreover, Qubinets includes strong monitoring and analytics tools that provide real-time insights into the performance of deployed AI agents. These tools help identify issues and optimize performance, ensuring that AI solutions work well in production environments.
Using Qubinets, organizations can speed up the time-to-market for AI solutions, improve operational efficiency, and become more agile in responding to market changes. This overview highlights the benefits of using Qubinets for building and deploying AI agents and emphasizes its role in promoting innovation and efficiency in AI development.
Keywords: AI agents, Qubinets, fast deployment, machine learning, CI/CD, cloud-native, real-time monitoring, operational efficiency, AI development.
Razvoj informacijskih rešitev, pa naj gre za zaledne, spletne, mobilne, namizne, vgrajene ali oblačne aplikacije, je skupek kompleksnih organizacijsko-tehničnih opravil, ki jih morajo opravljati ekipe strokovnjakov z različnimi znanji na učinkovit in uigran način. Izzivov, s katerimi se posamezniki in ekipe pri tem srečujejo, ne manjka.
Ideja, da bi informacijska rešitev nastala samodejno na podlagi podanih uporabniških zahtev, ni novost. Tako se raziskovalci že desetletja trudijo s preboji na različnih področjih, npr. samodejnega generiranja testnih primerkov, sistemi za predlaganje načrtovalskih odločitev ipd. Čeprav smo že uspeli doseči relativno visoko stopnjo avtomatizacije pri celi množici aktivnosti, se na področju programskega inženirstva zadnji preboji umetne inteligence kažejo kot še posebej obetavni. Inteligentni pomočniki pri pisanju programske kode so že dosegli raven, ko jih uporabljamo vsakodnevno. A potencial pristopov umetne inteligence in inteligentnih orodij se ne ustavi pri pisanju programske kode. Tako danes že poznamo in uporabljamo inteligentne pomočnike na celotnem ciklu razvoja in vzdrževanja informacijskih rešitev: generiranje programske kode na osnovi opisov uporabniških zahtev, generiranje delov programske kode, načrtovanje in ocenjevanje truda pri razvoju, detekcija defektov in predikcija napak, generiranje testnih primerkov, generiranje vhodnih podatkov v testiranje, generiranje izvajalnih okolij, prilagajanje konfiguracij ciljnim okoljem, spremljanje incidentov in samodejno odzivanje nanje, spremljanje in optimizacija stroškov produkcija, samodejno testiranje, predlaganje razvojnih nalog ipd.
Tekom delavnice se bomo podali po poti celotnega življenjskega cikla razvoja informacijskih rešitev: od vizije do predaje v uporabo in vzdrževanja. Na vsakem koraku bomo preučili ali in kako lahko orodja na osnovi sodobnih pristopov umetne inteligence pomagajo pri konkretnih izzivih. Najzanimivejša med njimi pa bomo preizkusili v praksi.
V okviru konference OTS 2024 se boste lahko preizkusili v dveh digitalnih izzivih: Ranljivosti v mini hiški in Ranljivosti v programski kodi, ki jih organiziramo v sodelovanju s podjetjem Viris.