Niks Kozlovs

Rīga, Latvia

   FULL STACK
IZSTRĀDĀTĀJS

Lejupielādēt CV

Septembris 2022 - Aprīlis 2023

Chili Labs

Flutter mobilo lietotņu izstrādātājs

Chili Labs es strādāju pie mobilajām lietotnēm. Visi projekti, pie kuriem strādāju, bija veidoti, izmantojot Flutter. Es strādāju gan pie jautriem projektiem, piemēram, CrochetApp, gan nopietnākiem, piemēram, Bondora. Es arī piedalījos mazākos projektos kā LTAB OCTA, kur es palīdzēju komandas biedriem dažādos uzdevumos.

  • Ieņēmumu pieaugums un funkciju izstrāde
    Lielāko daļu sava laika pavadīju, strādājot pie CrochetApp, kur es izstrādāju funkcijas, kas tiešā veidā palīdzēja dubultot lietotnes ieņēmumus. Es izveidoju push notifications, onboarding flow un vairākus Call To Action abonamentiem. Visu funkcionalitāti nodrošināja Firebase Remote Config un A/B testēšana, kas uzlaboja klientu noturēšanu un iesaisti. Es arī pievienoju attēlu augšupielādi āķiem un diegiem, izmantojot AWS S3, padarot lietotni interaktīvāku.


  • Administratora rīki un datu pārvaldība
    Es izveidoju stabilus administrēšanas rīkus satura pārvaldniekiem, tostarp rediģējamas tabulas ar validācijas loģiku. Es arī pārveidoju materiālu sistēmu: tā vietā, lai lietotnē paļautos uz statisku JSON failu, materiāli tika dinamiski sinhronizēti no datubāzes, un lietotnei tika nosūtītas tikai mainītās vērtības. Tas samazināja datu patēriņu un uzlaboja ielādes laikus.


  • Lietotņu svaiguma un stabilitātes saglabāšana
    Atjaunināju CrochetApp uz jaunāko Flutter versiju, identificēju un izlaboju salauztās izmaiņas un atjaunināju pakotnes kuras varēju. Es arī veicu pilnus lietotnes dzīves cikla uzdevumus: publicēšanu App Store un Play Store, beta versiju pārvaldību ar TestFlight, analītikas izsekošanu, lai pārliecinātos, ka izlaidumi ir stabili.


  • UI/UX uzlabojumi Pārveidoju lietotāja saskarni ar Flutter priekš Bondora lietotnes: grafiku vizualizācijas, dinamiska valūtas ievade, kas pielāgojās lietotāja lokalizācijai un formātiem, kā arī detalizēti skati, piemēram, kontu pārslēdzējs un izraksti. Šie uzlabojumi padarīja lietotni konsekventāku un lietotājam draudzīgāku.


  • Citi ieguldījumi
    Novērsu kļūdas LTAB OCTA, palīdzēju komandas biedriem ar kvalitātes nodrošināšanu un atkļūdošanu, kā arī koda pārskatīšanā un zināšanu apmaiņā par Firebase, lietotnes dzīves cikla pārvaldību un labāko praksi.

Maijs 2019 - Jūnijs 2020

Scandiweb

Full-Stack izstrādātājs

Scandiweb es strādāju pie dažādiem projektiem priekš starptautiskiem e-komercijas zīmoliem. Lielāko daļu sava laika es veltīju front-end funkciju izveidei React un to savienošanai ar back-end sistēmām, piemēram, Magento un .NET, taču es arī iedziļinājos datubāzēs.

  • E-komercijas pamatfunkcijas
    Ieviesu produktu detalizētas lapas, salīdzināšanas rīkus, izlases, iepirkumu grozus un pat pilnu reklāmas koda funkcionalitāti - sākot ar MySQL shēmas atjaunināšanu līdz tās savienošanai ar Magento, izmantojot GraphQL API.


  • Datu vizualizācija
    Izstrādāju un ieviesu statistikas komponentus (grafikus un diagrammas), padarot datus lietotājiem saprotamākus.


  • Atkārtoti lietojami komponenti un administratora logrīki
    Izveidoju React komponentus un WYSIWYG administratora paneļa logrīkus, lai veikalu īpašnieki varētu mainīt izkārtojumus un saturu bez izstrādātāja nepieciešamības.


  • Migrācijas darbi
    Palīdzēju pārvietot vecu pilna steka .NET lietotni uz modernāku iestatījumu: .NET back-end daļa + React front-end daļa. Pa ceļam izveidoju front-end komponentes un GraphQL API saskarnes.


  • DevOps pamati ar Docker
    Visiem projektiem izmantoju Docker, lai atvieglotu iestatīšanu un nodrošinātu, ka viss darbojas konsekventi vairākās vidēs.


  • Sadarbība un darbplūsma
    Cieši sadarbojos ar produktu vadītājiem, dizaineriem, QA un citiem izstrādātājiem. Rakstīju Jira pieprasījumus, novērtēju uzdevumus, ievēroju kodēšanas labāko praksi un izmantoju Git + CI darbplūsmas ar automatizētiem testiem.


  • Komandas ieguldījums
    Pārskatīju citu izstrādātāju kodu, palīdzēju ar kvalitātes nodrošināšanu, laboju kļūdas un dalījos zināšanās, lai komanda varētu virzīties uz priekšu.

Projekti

Technodom

Galvenais izstrādātājs augstas datplūsmas e-komercijas platformai (10+ izstrādātāju komanda). Es attīstījos no atsaucīgu lietotāja saskarnes komponentu ieviešanas līdz full-stack funkcionalitāti, piemēram, "Izlase" un "Produktu salīdzinājums", arhitektūras izstrādei, izmantojot React, GraphQL un Magento 2.

Technodom

Projekta pārskats

Technodom ir vadošais elektronikas tirgotājs Kazahstānā. Šī bija mana pirmā pieredze, strādājot liela mēroga Agile komandā (vairāk nekā 10 izstrādātāju). Projekts tika veidots uz Magento 2 ar ScandiPWA (React) frontend. Es progresēju no pamata frontend uzdevumu ieviešanas līdz full-stack funkciju pārvaldīšanas un milzīgas koda navigācijas.

Lietotāja saskarnes komponentu un CMS integrācija

Mans sākotnējais darbs bija vērsts uz atkārtoti lietojamu komponentu izveidi, kurus var pārvaldīt, izmantojot back-end. Es izstrādāju WYSIWYG saderīgus React komponentus, kas ļāva mārketinga komandai rediģēt informācijas blokus un banerus tiešā veidā, bez izstrādātāja palīdzības.

Technodom informācijas bloks Technodom WYSIWYG redaktors

Es arī izveidoju Produktu kartes un Produktu informācijas lapas (PDP). Dizainam bija nepieciešama sarežģīta marķēšanas loģika (pārdošanai vai jaunām precēm) un stingra atsaucība. Es izmantoju SASS ar BEM (Block Element Modifier) metodoloģiju, lai stils būtu sakārtots un viegli uzturams.

Technodom produkta karte Technodom produkta informācija

Paplašināta reaģēšanas loģika: produktu salīdzinājums

Viena no sarežģītākajām lietotāja saskarnes funkcijām, ko es izveidoju, bija produktu salīdzināšanas rīks. Tas ļāva lietotājiem atlasīt vairākus produktus un skatīt tos blakus viens otram. Tehniskās problēmas ietvēra pastāvīga stāvokļa pārvaldību, lai atlases paliktu pēc lapas atkārtotas ielādes.

Technodom produktu salīdzinājums

Pilna steka ieviešana: izlases sistēma

Mans nozīmīgākais tehniskais ieguldījums bija Izlase/Vēlmju saraksts funkcija. Tā kā šī specifiskā loģika nebija pieejama mūsu pamata pakotnē, man tā bija jāizveido no jauna visā stekā:

  1. Datubāze (MySQL): Es izveidoju pielāgotas tabulas lietotāju vēlmju saraksta glabāšanai.
  2. Aizmugurējā daļa (PHP/Magento): Es uzrakstīju loģiku šo datu atspoguļošanai.
  3. API (GraphQL): Es ieviesu pielāgotus vaicājumus un mutācijas (add, remove, fetch).
  4. Frontend (React): Es savienoju lietotāja saskarni ar šiem jaunajiem galapunktiem.
Technodom Favourites

Groza loģika un ieteikumi

Es arī strādāju pie iepirkumu groza, ieviešot cenu aprēķinus reāllaikā, preču noņemšanu un daudzuma atjauninājumus. Lai palīdzētu palielināt pārdošanas apjomus, grozā pievienoju “Produktu ieteikumu” karuseli, kas izņēma saistītās preces, pamatojoties uz lietotāja pašreizējo atlasi.

Technodom grozs Technodom groza ieteikumi

Integrācijas un komandas darbs

Papildus pamatfunkcijām es strādāju ar trešo pušu integrācijām, piemēram, Newsletter abonementu. Tas bija sarežģīti, jo tika izmantots iegults iframe, kas neatbilda mūsu vietnes dizainam. Es izmantoju iekļautu CSS injekciju un DOM manipulācijas, lai piespiestu trešās puses veidlapu izskatīties atbilstoši mūsu zīmolam.

Gūstot pieredzi, es sāku palīdzēt komandai arī ar koda pārskatiem un kvalitātes nodrošināšanu, nodrošinot, ka kods atbilst mūsu kvalitātes standartiem.

Crochet lietotne

Projekta darbības joma un komerciālā ietekme

Laikā, ko strādāju Chili Labs, es pilnībā pārņēmu Crochet lietotnes vadību. Mans darbs aptvēra visu lietotnes dzīves ciklu - sākot ar sarežģītu funkciju kodēšanu un App Store versiju pārvaldību līdz mazāk pamanāmu uzdevumu veikšanu kā Flutter versijas migrāciju un avāriju ziņošanu. Šī projekta spilgtākais moments bija manu darbu komerciālā ietekme. Pilnībā pārveidojot lietotāja pirmo iespaidu un optimizējot maksājumu plūsmu, es veiksmīgi divkāršoju lietotnes ikmēneša ieņēmumus.

Monetizācija un lietotāju noturēšana

Lai sasniegtu šo ieņēmumu pieaugumu, es risināju problēmu no diviem skatupunktiem. Vispirms es izstrādāju jaunu Onboarding funkcionalitāti. Sākotnēji lietotāji tika ievietoti lietotnē ar nelielu vadību. Es izveidoju interaktīvu daudzpakāpju onboarding plūsmu, kurā lietotāji varēja izvēlēties savus iestatījumus un nekavējoties saprast lietotnes vērtību (piemēram, pievienot dzijas vai āķus). Tas ievērojami uzlaboja lietotāju noturēšanu, nodrošinot, ka vairāk cilvēku paliek lietotnē pietiekami ilgi, lai apsvērtu abonēšanu.



Otrkārt, es pilnībā pārveidoju abonēšanas sistēmu. Es izveidoju dinamisku mehānismu, lai apkalpotu dažādus “Call to Action” ekrānus, sākot no vienkāršiem dizainiem līdz sarežģītiem video izkārtojumiem. Izmantojot Firebase Remote Config un Analytics, es veicu A/B testus, lai noskaidrotu, kura versija darbojas vislabāk. Labākas ieviešanas un uz datiem balstītas A/B testēšanas kombinācija bija tieši atbildīga par 100% ienākumu pieaugumu.

Mākoņa arhitektūra un AWS integrācija

Viena no galvenajām funkcijām, ko es izveidoju, bija digitāls katalogs lietotāju fiziskajiem rīkiem. Tam bija nepieciešama hibrīda mākoņa pieeja. Es integrēju Camera API attēlu uzņemšanai un izmantoju AWS S3 efektīvai glabāšanai, vienlaikus sinhronizējot metadatus ar Firebase. Tas ļāva man apgūt AWS SDK drošas autentifikācijas un failu augšupielādes apstrādei Flutter vidē.

Optimizācija: Sinhronizācijas “Bezsaistē vispirms”

Vissarežģītākais tehniskais izaicinājums bija dziju datubāze. Mums bija jānodrošina lietotājiem milzīgs dziju veidu datu kopums, taču tā lejupielāde no Firebase katrā lietotnes palaišanas reizē būtu bijusi neticami lēna un dārga.

Es to atrisināju, izstrādājot pielāgotu pakāpeniskas sinhronizācijas sistēmu. Lietotne saglabā lokālu JSON datubāzes kopiju un palaišanas laikā pārbauda tikai dzijas kas tika mainītas. Ja ir atjauninājumi, tā lejupielādē tikai jaunos datus; pretējā gadījumā tā tiek ielādēta uzreiz no lokālās krātuves. Šis risinājums nodrošināja, ka lietotne darbojas 100% bezsaistē.

Balss komandu funkcija

Es strādāju arī pie balss komandu funkcijas, kas ļāva lietotājiem vadīt lietotni bez rokām, kamēr tamborē. Tas ietvēra runas atpazīšanas bibliotēkas integrēšanu, lai paaugstinātu vai samazinātu rindas skaitu. Beigās šī funkcija neizdevās, bet tā bija galvenā iedvesma man strādāt pie bakalaura darba.

TinyEar

Pētījuma problēma

Bakalaura grāda iegūšanai es pētīju mobilās runas atpazīšanas tehniskos ierobežojumus. Mākonī balstīti API rada raksturīgus privātuma riskus un var rasties savienojuma problēmas, kā arī ietver augstas izmaksas, savukārt esošie bezsaistes risinājumi bieži vien cieš no sliktas precizitātes. Mans mērķis bija risināt šo problēmu, nodrošinot OpenAI Whisper modeļa precizitāti mobilajām ierīcēm pilnībā bezsaistes vidē.

Sistēmu inženierija (JNI un C++)

Es izstrādāju TinyEar kā atkārtoti izmantojamu Android bibliotēku. Galvenā problēma bija veiktspēja, jo Transformer modeļa palaišana mobilajā centrālajā procesorā prasa daudz resursus. Lai to risinātu, es apeju standarta Java izpildes slāņus. Es uzrakstīju C++ integrācijas slāni, izmantojot Java Native Interface (JNI), lai palaistu TensorFlow Lite modeļus tieši uz telefona.

Iespējas un ieviešana

1. Failu transkripcijas precizitāte Bibliotēka apstrādā audio failus, lai ģenerētu tekstu ar augstu precizitāti.

Salīdzināt ar avota audio:

2. Reāllaika apstrāde Izmantojot JNI optimizāciju, bibliotēka veic tiešraides transkripciju tieši no mikrofona straumes, nebloķējot galveno lietotāja interfeisa pavedienu.

3. Balss komandu plūsma Es ieviesu interpretatoru, kas sasaista dabisko runu ar izpildāmām funkcijām.

Veiktspēja un optimizācija

Disertācijas galvenā uzmanība tika pievērsta resursu efektivitātei. Naivs ieviešanas veids iztukšotu akumulatoru, nepārtraukti darbinot secinājumu dzinēju.

Lai to atrisinātu, es ieviesu Balss aktivitātes noteikšanu (VAD). Sistēma analizē neapstrādātu audio signālu, lai noteiktu klusumu, un aktivizē resursu ietilpīgo mašīnmācīšanās modeli tikai tad, ja ir jebkādas runāšanas pazīmes. Turklāt es ieviesu “Wake-Word” loģiku. Sistēma klausās vai tiek pateikts noteiktais atslēgvārds (piemēram, “Labi, telefons”), un izpilda komandas tikai tad, kad šī frāze tiek atpazīta.

Rezultāti

Disertācijas salīdzinošajos testos TinyEar demonstrēja ievērojamu vārdu kļūdu biežuma (WER) samazinājumu salīdzinājumā ar mantotajām bibliotēkām, piemēram, PocketSphinx. Bibliotēka pašlaik ir pieejama vietnē GitHub kā atvērtā koda risinājums privātuma fokusētām Android lietojumprogrammām.

Sophie Conran

Projekta arhitektūra un steks

Es strādāju par front-end izstrādātāju Sophie Conran, augstas klases britu virtuves piederumu zīmolam. Platforma tika veidota uz Magento 2 ar ScandiPWA front-end. Mana loma bija zīmola stingro dizaina prasību ieviešana funkcionālos React komponentēs, sazinoties ar Magento back-end sistēmu, izmantojot GraphQL.

Bezgalvas CMS integrācija (blogs)

Es biju atbildīga par vietnes bloga izstrādi. Lai mārketinga komanda varētu viegli pārvaldīt saturu, es ieviesu bezgalvas CMS darbplūsmu. Klients izmantoja standarta WYSIWYG redaktoru Magento platformā, lai izveidotu bloga ierakstus. Pēc tam es izveidoju pielāgotu React komponenti, kas ielādēja šo saturu, izmantojot GraphQL. Šī atdalīšana ļāva mārketinga komandai atjaunināt bloga saturu bez nepieciešamības pēc izstrādātāja palīdzības, vienlaikus saglabājot vietnes dizaina integritāti.

Sarežģīta lietotāja saskarnes inženierija: “Gudrā” sānjosla

Tehniski visizaicinošākā funkcija bija navigācijas sānjosla. Prasības pārsniedza standarta CSS iespējas: sānjoslai bija jābūt “lipīgai”, bet “ritināmai”.


Tā kā sānjoslas saturs bieži vien bija augstāks par lietotāja ekrānu, vienkārša position: sticky nogrieztu apakšējās opcijas. Es uzrakstīju pielāgotu JavaScript aprēķinus, kas uzrauga ritināšanas virzienu un skata loga robežas.


RunQuest (kvalifikācijas darbs)

Projekta konteksts un darbības joma

Šis projekts kalpoja kā mans noslēguma kvalifikācijas darbs Rīgas Valsts tehnikumā, kur es veiksmīgi aizstāvēju savu disertāciju ar atzīmi 8/10. Mērķis bija cīnīties pret lietotāju atbirumu fitnesa lietotnēs, izstrādājot “spēļotu” skriešanas pieredzi. Projekts nebija tikai par koda rakstīšanu, tas bija visaptverošs vingrinājums visā programmatūras inženierijas dzīves ciklā, kam bija nepieciešams 151 lappuses tehniskais dokuments, kas aptver prasību apkopošanu, sistēmas modelēšanu un ieviešanu.

Sistēmas arhitektūra

Es izstrādāju atdalītu full-stack arhitektūru, lai nodrošinātu, ka mobilais lietotne paliek viegla, kamēr serveris apstrādā sarežģīto loģiku.

Lietotnes galvenais ekrānsIzaicinājuma ekrānsDarbības skats ar vienkāršu statistikuPabeigšanas skats

Galvenās funkcijas

1. Droša autentifikācija un sesiju pārvaldība Drošība bija prioritāra kvalifikācijas prasība. Es ieviesu bezstāvokļa (stateless) autentifikāciju, izmantojot JWT (JSON Web Tokens), un nodrošināju lietotāju paroļu drošību ar bcrypt hešošanu. Tāpat ieviesu sesiju pārvaldības loģiku, lai kontrolētu tokenu derīguma termiņu un drošu to glabāšanu ierīcē.

2. “Pretkrāpšanas” un spēles loģika Tā kā lietotnē ir iesaistīta virtuāla ekonomika (monētas/XP), skrējienu validācija bija kritiski svarīga. Es izstrādāju servera puses loģiku, lai analizētu ienākošos GPS laika zīmogus un attālumu. Sistēma atzīmē skrējienus, kas pārsniedz cilvēka ātruma ierobežojumus (piemēram, izmantojot automašīnu), lai novērstu ekonomikas inflāciju.

3. Inventāra un transakciju integritāte Es izstrādāju stabilu inventāra sistēmu, kurā lietotāji var aprīkot savu avataru ar priekšmetiem. Servera pusē tiek nodrošināti stingri loģiskie ierobežojumi. Piemēram, lietotājs nevar vienlaikus aprīkot divus priekšmetus vienā un tajā pašā aprīkojuma slotā (piemēram, divas cepures).

Profesionālā izaugsme

Šis projekts bija pagrieziena punkts manā karjerā. Tā bija mana padziļinātā iepazīšanās ar rakstītajām valodām (pāreja uz Dart) un aizmugurējo sistēmu dizainu. Pieredze, dokumentējot visu dzīves ciklu, sākot no pirmās UML diagrammas līdz galīgajai APK versijai, deva man stabilu pamatu par to, kā tiek specifikēta un piegādāta profesionāla programmatūra.

Bondora Go & Grow lietotne

Projekta pārskats

Bondora Go & Grow lietotne bija nozīmīgs pagrieziena punkts manā karjerā uzņēmumā Chili Labs. Tas bija mans pirmais būtiskais ieguldījums produkcijas līmeņa mobilajā produktā. Bondora bija nepieciešama pilnīga lietotnes pārveide, pārejot no novecojuša interfeisa uz modernu, responsīvu UI, kas izstrādāts ar Flutter.

Es cieši sadarbojos ar pieredzējušu mentoru, lai realizētu šo vīziju. Kamēr mentors izstrādāja sarežģīto galveno informācijas paneli (dashboard), es uzņēmos pilnu atbildību par galveno lietotāja plūsmu ieviešanu. Tas ietvēra onboarding procesus, autentifikācijas sistēmas, kontu izvēli un detalizētus transakciju skatus.

Tehniskais izaicinājums: mantotās API integrācija

Galvenais izaicinājums bija mantotās REST API integrācija. Esošā backend infrastruktūra bija balstīta uz novecojušu arhitektūras pieeju, kas bieži radīja nekonsekventas vai nepilnīgas datu atbildes, kuras neatbilda jaunā UI prasībām.

Lai šo problēmu atrisinātu, es izstrādāju pielāgošanas loģiku, kas apvienoja un pārstrukturēja API atbildes tīrā, frontendam izmantojamā formātā. Tas prasīja ne tikai programmēšanu, bet arī rūpīgu datu attiecību analīzi, lai nodrošinātu, ka modernā saskarne darbojas korekti bez izmaiņām backend pusē.

Galvenās funkcijas un pielāgotie komponenti

Papildus standarta UI ieviešanai es izstrādāju vairākus pielāgotus komponentus, lai atbilstu finanšu nozares prasībām un lietojamības standartiem.

Kvalitātes nodrošināšana un arhitektūra

Lai nodrošinātu ilgtermiņa uzturējamību un stabilitāti, tika izmantota stingra BLoC arhitektūra kombinācijā ar MVC principiem. Mani pienākumi ietvēra:

Profesionālā izaugsme

Šis projekts būtiski paātrināja manu izaugsmi darbā ar Flutter. Tas ļāva man pāriet no apmācāmā uz patstāvīgu izstrādātāju, kas spēj uzņemties atbildību par lieliem funkcionalitātes apjomiem. Es apguvu uzņēmuma līmeņa programmatūras izstrādes sarežģītību: sākot no sadarbības ar QA komandām līdz darbam ar mantotām sistēmām, un veiksmīgi piedalījos produkta izlaišanā.

Cervera

Projekta konteksts

Cervera ir viens no vadošajiem Zviedrijas virtuves piederumu un mājas preču mazumtirgotājiem. Uzņēmums uzsāka pilnīgu platformas modernizāciju. Esošā vietne lielā mērā balstījās uz servera pusē renderētām .NET lapām, tai trūka pilnvērtīga API slāņa, un bija nepieciešama pāreja uz React balstītu vienas lapas lietotni (SPA), nepārtraucot esošās biznesa operācijas.

Mans ieguldījums

Strādājot kā front-end izstrādātājs ar back-end pienākumiem, es palīdzēju virzīt migrāciju no vairāku lapu .NET Core risinājuma uz modernu .NET un React arhitektūru. Mana galvenā loma bija savienot mantoto sistēmu ar jauno risinājumu:

Rezultāts

Pārveidotā React SPA šobrīd darbojas produkcijā, nodrošinot gludāku navigāciju, mazāk pārlāžu un vieglāk uzturamu kodu bāzi. Šī projekta ietvaros es ieguvu spēcīgu praktisko pieredzi darbā ar .NET iekšējo uzbūvi, React SPA arhitektūras pieejām un reāliem izaicinājumiem, modernizējot mantotu sistēmu, vienlaikus saglabājot vietnes nepārtrauktu darbību.

Atrodi Skolu

Projekta pārskats

Savā pirmajā hakatonā mēs ar komandu risinājām UX problēmu. Valsts dati par skolām un bērnudārziem eksistēja, bet bija paslēpti grūti izmantojamās excel lapās. Mūsu mērķis bija šos datus vizualizēt interaktīvā kartē. Projekts bija veiksmīgs, un mēs tikām izvēlēti kā finālisti un tikām uzaicināti prezentēt risinājumu LMT galvenajā birojā.

Risinājuma izstrāde

Es biju atbildīgs par frontend izstrādi, rakstot JavaScript loģiku datu iegūšanai no SQL datubāzes un to attēlošanai Leaflet.js kartes marķieros.

Datu izaicinājums: Būtiska problēma bija tā, ka sākotnējais valsts datu kopums saturēja adreses, bet ne GPS koordinātas, kas neļāva attēlot punktus kartē. Tā vietā, lai manuāli meklētu koordinātas tūkstošiem ierakstu, es izveidoju automatizētu risinājumu. Es apstrādāju adreses, izmantojot Google Maps API, lai pārvērstu tās koordinātēs. Pēc tam šo “attīrīto” datu kopu importējām SQL datubāzē, kas ļāva lietotnei darboties ar reālajai pasaulei atbilstošu precizitāti.

Projekta attēls Projekta attēls

Papildu datu izaicinājumi:
Vēl viens izaicinājums bija tas, ka trūka datu par augstskolām un profesionālajām skolām. Šo daļu nebija iespējams automatizēt, tāpēc es manuāli apkopoju un pievienoju šīs iestādes datubāzei, iekļaujot arī informāciju par profesijām un iegūstamo izglītību.

Rezultāti un profesionālā izaugsme

Šis projekts ielika pamatus manām ģeotelpiskās izstrādes prasmēm. Darbs ar Leaflet.js un datu normalizāciju ļāva man vēlāk veidot sarežģītākas lietotnes. Vēl svarīgāk, tas man iemācīja integrēt frontend loģiku ar komandas biedra backend arhitektūru un prezentēt tehniskus risinājumus augsta spiediena apstākļos.

CitySense (LATA hakatons 2019)

Koncepts: “Komforts-Pirmais” navigācija

Lielākā daļa navigācijas lietotņu optimizē tikai ātrumu. Taču kā ikdienas sabiedriskā transporta lietotājs Rīgā es zināju, ka “ātrākais” maršruts bieži nozīmē pārpildītu autobusu. Lai to risinātu, es izstrādāju CitySense maršrutētāju, kas optimizē pasažieru komfortu. Lietotne ļāva lietotājiem apmainīt dažas minūtes ceļā pret ievērojami patīkamāku un mazāk noslogotu braucienu.

Komandas attēls

Attēls no projekta, kas demonstrē, kā lietotne vizualizē autobusu noslodzi. Šajā versijā visi maršruti pilsētā ir attēloti ar nejaušu līniju biezumu. Kā prototips tam, kā tas varētu izskatīties nākotnē, tas bija pietiekami, lai demonstrētu ideju.

Projekta attēls

Izstrāde un datu loģika

Es biju vadošais full-stack izstrādātājs, izveidojot lielāko daļu lietotnes 48 stundu laikā.

Galvenais tehniskais izaicinājums bija noteikt, prognozēt autobusa noslodzi bez reāllaika sensoriem. Es izstrādāju prognozēšanas pieeju, izmantojot Rīgas Satiksmes atvērtos datus:

  1. Datu iegūšana: Analizējām biļešu (e-talonu) reģistrācijas laikus konkrētās pieturās.
  2. Prognozēšanas modelis: Tā kā pasažieru plūsma ir cikliska, mēs sasaistījām vēsturisko noslodzi ar konkrētiem laikiem.
  3. Vizualizācija: Lietotne apvienoja šos datus ar OpenStreetMap, lai attēlotu noslodzes “heatmap” gaidāmajiem transporta līdzekļiem.

Retrospektīva

Mums izdevās veiksmīgi demonstrēt funkcionējošu prototipu. Es veiksmīgi integrēju sarežģītu tehnoloģiju kopu (React, GraphQL, Laravel), darbs tik ierobežotā laikā bija vērtīga pieredze programmatūras arhitektūrā. Es sapratu, ka ātrai prototipēšanai bieži ir efektīvāk izvēlēties vienkāršāku un pazīstamu tehnoloģiju steku, nevis pārlieku sarežģīt risinājumu ar tādiem rīkiem kā GraphQL.

Ace Your Trace

Projekta konteksts

Ace Your Trace bija nedēļas nogales hakatona projekts, ko izstrādāja neliela komanda, lai palīdzētu lietotājiem ģenerēt vienkāršus, personalizētus pastaigu maršrutus COVID-19 pandēmijas laikā. Mērķis bija nodrošināt rīku apkārtnes izpētei noteiktā attālumā, kamēr publiskās vietas bija slēgtas, līdzīgi kā risinājumos, piemēram, Routeshuffle.

Neskatoties uz 48 stundu ierobežojumu, mēs izstrādājām funkcionējošu prototipu, kas ļāva lietotājiem izvēlēties sākumpunktu, ievadīt vēlamo distanci vai ilgumu un dažu sekunžu laikā iegūt ģenerētu maršrutu. Šī ātrā izpilde nodrošināja mūsu komandai 3. vietu pasākumā.

Tehniskā realizācija un funkcionalitāte

Es koncentrējos uz kartes un maršrutēšanas pamatloģiku, integrējot OpenStreetMap un Leaflet vizualizācijai. Lietotne izmanto Geolocation API, lai noteiktu lietotāja atrašanās vietu, un Directions API, lai aprēķinātu maršrutus.

Sistēma nodrošina detalizētu konfigurāciju, ļaujot lietotājiem definēt parametrus, piemēram, distanci un ilgumu. Pēc parametru iestatīšanas lietotne ģenerē maršrutu un attēlo to kartē, izmantojot polilīnijas skaidrai vizualizācijai. UI tika veidots ar reāllaika atgriezenisko saiti. Mainot iestatījumus vadības panelī, karte un maršruta dati tiek dinamiski atjaunināti bez lapas pārlādes.

Arhitektūras refaktorēšana

Hakatona versija bija funkcionāla, bet kods bija cieši saistīts un grūti paplašināms. Pēc pasākuma es pārstrukturēju projektu profesionālā, modulārā arhitektūrā, izmantojot ES6 moduļus. Es ieviesu stingru atbildību nošķiršanu (Separation of Concerns), sadalot loģiku atsevišķās klasēs:

Lai nodrošinātu labu lietotāja pieredzi, es izmantoju modernas JavaScript pieejas, tostarp Async/Await un Promise mehānismus, asinhrono pieprasījumu un kartes atjauninājumu apstrādei.

Biznesa potenciāls un tirgus izpēte

Pēc hakatona mēs izvērtējām iespēju attīstīt prototipu par pilnvērtīgu biznesa platformu. Mēs izstrādājām koncepciju, kur maršrutēšanai tiek pievienoti spēļošanas elementi, tostarp izaicinājumi, kas saistīti ar fiziskām lokācijām, atlīdzību mehānisms uzdevumu izpildei un sociālās koplietošanas funkcijas.

Mēs arī analizējām uz atrašanās vietu balstītu reklāmas modeli, kur sponsori varētu izvietot zīmola izaicinājumus vai lokācijas kartē. Šim modelim ir līdzības ar Pokémon GO sponsorētajām lokācijām un notikumu mārketinga pieejām, ko izmanto tirdzniecības centri, piemēram, Akropole Alfa, lai piesaistītu apmeklētājus. Lai gan mēs nolēmām projektu tālāk neattīstīt, šī pieredze sniedza vērtīgas atziņas par ātru prototipēšanu un uz lokāciju balstītu pakalpojumu komerciālo potenciālu.

Bankas lietotne

Bankas lietotnes pieteikšanās funkcionalitāte

Projekta konteksts

Šis projekts radās kā kursa darbs Rīgas Valsts Tehnikumā. Mērķis bija izstrādāt funkcionālu bankas lietotni, izmantojot Java un objektorientētās programmēšanas principus. Sākotnējo izstrādi es veicu patstāvīgi divu nedēļu laikā, realizējot pilnu steku, sākot no JavaFX lietotāja saskarnes līdz MySQL datubāzes integrācijai.

Vēlāk savā izstrādes ceļā es atgriezos pie šī projekta, lai to refaktorētu. Mans mērķis bija pielietot progresīvākus dizaina modeli un arhitektūras principus, kurus biju apguvis, pārvēršot projektu strukturētākā un profesionālākā risinājumā.

Arhitektūra un dizains

Lietotni strukturēju, izmantojot Model-View-Controller (MVC) modeli, lai nodrošinātu skaidru atbildību nošķiršanu:

Lai efektīvi pārvaldītu UI stāvokli, es ieviesu Observer modeli. Tas ļauj interfeisam dinamiski reaģēt uz lietotāja darbībām, piemēram, aktivizējot vai deaktivizējot transakciju pogas atkarībā no izvēlētā konta.

Galvenās funkcijas

1. Administratora funkcijas un autentifikācija

Sistēma imitē reālās bankas darbības principus, kur kontu izveide ir kontrolēts process. Es izveidoju administratora paneli, kas ļauj darbiniekiem izveidot jaunus lietotājus un kontus. Drošība bija prioritāte, tāpēc integrēju bcrypt hešošanu, lai paroles nekad netiktu glabātas atklātā veidā.

2. Kontu operācijas un biznesa loģika

Lietotnes pamatā ir finanšu operāciju apstrāde, tostarp iemaksas, izmaksas un pārskaitījumi. Es izstrādāju stingru validācijas loģiku, lai nodrošinātu datu integritāti, pārbaudot kontu eksistenci un pietiekamu līdzekļu pieejamību pirms transakciju izpildes.

Es arī ieviesu konkrētus biznesa noteikumus kas tika prasīti oriģinālajā uzdevumā, lai diferencētu kontu tipus:

3. Datu reģistrēšana un atskaites

Auditēšanas nolūkos es izveidoju žurnāla sistēmu, kas reģistrē svarīgas darbības, piemēram, kontu izveidi un līdzekļu pārskaitījumus, tieši MySQL datubāzē. Šie dati ļauj administratoriem ģenerēt atskaites un analizēt sistēmas darbību vēsturi.

Bankas lietotnes žurnāla funkcionalitāte

Refaktorēšana un iegūtās atziņas

Koda refaktorēšana sniedza būtisku izpratni par programmatūras arhitektūru. Sākotnēji es atjaunināju kontu atlikumus tieši datubāzē. Pārskatot projektu, es sapratu, ka finanšu sistēmās plašāka pieeja ir aprēķināt atlikumus no darījumu virsgrāmatas (transaction ledger).

Šis projekts bija nozīmīgs solis, lai izprastu, kā programmatiski ieviest biznesa noteikumus un cik svarīgi ir izmantot tādus pārbaudītus arhitektūras modeli kā MVC, lai kods būtu uzturams un paplašināms.

Giphy meklēšanas lietotne

Projekta pārskats un arhitektūra

Šī projekta mērķis bija izveidot cross-platform mobilo lietotni, kas integrējas ar Giphy REST API. Lai nodrošinātu uzturamību un testējamību, es strukturēju lietotni, izmantojot MVVM (Model-View-ViewModel) arhitektūras paternu. Stāvokļa pārvaldībai izmantoju Provider, kas ļauj efektīvi nodalīt biznesa loģiku no UI. Šāda pieeja nodrošina, ka interfeiss ir reaktīvs un tiek atjaunināts tikai tad, kad mainās datu stāvoklis.

Veiktspējas optimizācija

Darbs ar multivides lietotnēm prasa īpašu uzmanību veiktspējai un atmiņas pārvaldībai. Lai to nodrošinātu, es ieviesu divus galvenos optimizācijas risinājumus:

Lietotāja pieredze un stabilitāte

Svarīgs fokuss bija korekta robežgadījumu apstrāde. Es ieviesu plašu kļūdu apstrādi, lai pārvaldītu savienojuma problēmas vai nekorektas API atbildes. UI dinamiski pielāgojas un sniedz lietotājam saprotamu atgriezenisko saiti, nevis atstāj tukšu ekrānu vai izraisa lietotnes avāriju.