Niks Kozlovs
Rīga, Latvia
F U L L S T A C K IZSTRĀDĀTĀJS Darbs Izglītība
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.
Septembris 2020 - Jūnijs 2024
Latvijas Universitāte Bakalaura grāds datorzinātnēs
Datorzinātņu studijas LU nodrošināja stabilu teorētisko pamatu un praktisko pielietojumu apvienojumu. Tās aptvēra dažādas jomas, tostarp programmēšanu, datu struktūras, algoritmus, datubāzes, operētājsistēmas un projektu vadību.
Galvenā pieredze:
Bakalaura darbs: Izstrādāju mobilo lietotni, kas integrē balss komandu funkcionalitāti, nodrošinot lietotāja mijiedarbību bez roku palīdzības.
Simulēts projekts uzņēmumam “Latvijas Dzelzceļš”: Sadarbojos komandā, lai simulētu projektu uzņēmumam “Latvijas Dzelzceļš”, ietverot visaptverošus plānošanas dokumentus, piemēram, GANTT diagrammas, kvalitātes vadības plānus un riska pārvaldības stratēģijas.
Pētniecības prasmes: Uzlaboju savas spējas pētīt tēmas un pielietot iegūtās zināšanas reālās pasaules risinājumos.
Galvenās prasmes un secinājumi:
Programmēšana un rīki: Apguvu vairākas programmēšanas valodas un ietvarus, pielietojot tos praktiskos uzdevumos un diplomdarbos.
Projektu vadība: Ieguvu praktisku pieredzi projektu plānošanā, risku novērtēšanā un komandas sadarbībā, izmantojot simulētus reālās pasaules projektus.
Tīrs kods: Vienā no maniem kursiem mūsu grupa apsprieda un ieviesa tīra koda principus, kurus esmu pielietojis savos personīgajos projektos un darbā kopš tā laika.
Septembris 2016 - Jūnijs 2020
Rīgas Valsts Tehnikums Profesionālā izglītība - Programmēšanas Tehniķis
Studiju laikā Rīgas Valsts tehnikumā es izveidoju spēcīgu pamatu gan programmēšanas teorijā, gan praksē :
Programmēšana: Iemācījos izstrādāt algoritmus, rakstīt un atkļūdot kodu vairākās valodās un ievērot labu kodēšanas praksi.
Datubāzes: Ieguvu praktisku pieredzi ar datubāzēm, tostarp strukturējot datus, rakstot vaicājumus un veidojot nelielas lietojumprogrammas, kas strādāja ar saglabāto informāciju.
Tīmekļa izstrāde: Izpētīju tīmekļa programmēšanu un interneta tehnoloģijas, veidojot vienkāršas tīmekļa vietnes un apgūstot klienta un servera komunikācijas darbību.
Tīklošana: Strādāju ar datorsistēmām un tīkliem. Es instalēju un konfigurēju programmatūru, uzturēju darbstacijas un izveidoju nelielus lokālos tīklus.
Praktizēju programmatūras kvalitātes nodrošināšanas metodes, piemēram, komentēšanu, testēšanu un drošības un uzticamības nodrošināšanu lietojumprogrammās.
Iemācījos izmantot pareizos tehniskos rīkus problēmu risināšanai, sākot no pareizās programmēšanas vides izvēles līdz esošo risinājumu uzlabojumu ierosināšanai.
Šī teorijas, laboratorijas darbu un reālu projektu darba kombinācija man deva praktisku pamatu, uz kura es balstos kopš tā laika.
Projekti Technodom Full-stack izstrāde Kazahstānas lielākajam elektronikas tirgotājam. Es paplašināju savu darbību no lietotāja saskarnes komponentu veidošanas līdz pamata back-end funkciju (PHP/MySQL) un React stāvokļa loģikas izstrādei
Scandiweb React Magento 2 PHP MySQL GraphQL SASS/BEM ScandiPWA
Crochet Lietotne Es pārņēmu atbildību pār šo Flutter lietotni, dubultojot tās ieņēmumus, veicot stratēģisku A/B testēšanu un izstrādājot pielāgotu bezsaistes datu sinhronizācijas sistēmu
Chili Labs Flutter Firebase AWS S3 A/B Testēšana
TinyEar (Bakalaura Darbs) Bezsaistes Android runas atpazīšanas bibliotēka. Es izstrādāju JNI integrāciju, lai mobilajās ierīcēs darbinātu OpenAI Whisper modeli ar pielāgotām baterijas optimizācijām.
Android Kotlin C++ (JNI) TensorFlow Lite OpenAI Whisper Machine Learning
Sophie Conran Augstas klases zīmola front-end daļas izstrāde, izmantojot ScandiPWA un Magento 2. Izstrādāju pielāgotus headless CMS komponentus un sarežģītas lietotāja saskarnes darbību
Scandiweb React Magento 2 ScandiPWA GraphQL Headless CMS
RunQuest (Kvalifikācijas Darbs) Visaptveroša full-stack mobilā lietotne, kas padara fitnesu jautrāku caur spēļošanu. Izstrādāta, izmantojot Flutter, Node.js un GraphQL, kā mans noslēguma kvalifikācijas darbs.
Flutter Node.js GraphQL MySQL JWT Auth System Architecture Google Maps API
Bondora Go & Grow lietotne Bondora mobilās investīciju lietotnes pārbūve ar pilnu UI/UX pārveidi, izmantojot Flutter.
Chili Labs Flutter Android iOS REST API BLoC Unit Testi Grafiki
Cervera Migrēju mantotu .NET e-komercijas vietni uz modernu React SPA, vienlaikus strādājot gan front-end, gan back-end slāņos.
Scandiweb .NET React SCSS/Sass JavaScript MySQL
Atrodi Skolu (Open Data hakatons) Finālistu projekts Open Data hakatonā. Ģeotelpiska tīmekļa lietotne izglītības iestāžu vizualizācijai, balstīta uz normalizētiem valsts datiem.
JavaScript OpenStreetMap Leaflet SQL Atvērtie dati
CitySense (LATA hakatons 2019) Vadošais izstrādātājs sabiedriskā transporta optimizācijas lietotnei. Izmantojām Rīgas Satiksmes atvērtos datus, lai prognozētu sabiedriskā transporta noslodzi
React Laravel GraphQL OpenStreetMap Leaflet Datu inženierija
Ace Your Trace (GreenTech 2019 hakatons) Interaktīva tīmekļa lietotne personalizētu pastaigu maršrutu ģenerēšanai COVID-19 pandēmijas laikā
HTML CSS JS OpenStreetMap Leaflet Directions API
Bankas lietotne Pilnvērtīga bankas lietotne, izstrādāta Java valodā, demonstrējot OOP prasmes un modernas programmatūras izstrādes principus.
Java JavaFX MySQL Docker MVC arhitektūra
Giphy meklēšanas lietotne Flutter lietotne, kas izmanto MVVM un Provider priekš augstas veiktspējas attēlu meklēšanai.
Flutter Provider MVVM REST API Dart
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.
Lasīt vairāk
✖
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.
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.
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.
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ā:
Datubāze (MySQL): Es izveidoju pielāgotas tabulas lietotāju vēlmju saraksta glabāšanai.
Aizmugurējā daļa (PHP/Magento): Es uzrakstīju loģiku šo datu atspoguļošanai.
API (GraphQL): Es ieviesu pielāgotus vaicājumus un mutācijas (add, remove, fetch).
Frontend (React): Es savienoju lietotāja saskarni ar šiem jaunajiem galapunktiem.
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.
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.
Ievade: “Rādīt laiku” → Darbība: Parāda pulksteni.
Ievade: “Sasveicinieties” → Darbība: Izvada sveicienu.
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.
Loģika: Ja lietotājs ritina uz leju, sānjosla paliek piesprausta, līdz tiek sasniegta apakšdaļa. Ja tie ritina uz augšu, tas atkal izlīdzinās uz augšu.
Rezultāts: Šī loģika nodrošina, ka lietotājs vienmēr var piekļūt pilnai izvēlnei neatkarīgi no ekrāna izmēra, radot elegantu, lietotnei līdzīgu sajūtu, kas ir būtiska luksusa lietotāja pieredzei.
Jūsu pārlūkprogramma neatbalsta video tagu.
✖
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.
Mobilais klients (Flutter): Es izmantoju Flutter tā starpplatformu iespēju dēļ. Lietotne apstrādā ģeogrāfisko atrašanās vietu (Google Maps) un sensoru sapludināšanu (GPS + akselerometrs), lai izsekotu lietotāja kustību reāllaikā.
API slānis (GraphQL): Es ieviesu GraphQL API, izmantojot graphql-yoga. Tas bija stratēģisks lēmums, lai ļautu mobilajai lietotnei vaicāt precīzas datu prasības (piemēram, konkrētu inventāra statistiku) vienā HTTP pieprasījumā, samazinot datu izmantošanu mobilo ierīču lietotājiem.
Datubāze (MySQL): Es izstrādāju normalizētu relāciju datubāzi , lai nodrošinātu datu integritāti. Shēmai bija nepieciešama sarežģīta kartēšana Many-to-Many attiecībām, jo īpaši attiecībā uz lietotāju inventāriem un sociālajiem grafikiem (draugi/izaicinājumi).
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.
Pielāgots valūtas ievades lauks: Izveidoju dinamisku ievades lauku, kas reāllaikā formatē vērtības lietotāja ievades laikā. Tas automātiski pielāgojas atstarpju un atdalītāju formātam, kā arī ievēro konfigurējamus maksimālos darījumu limitus.
Interaktīvs konta panelis (dashboard): Ieviesu loģiku dinamisku finanšu datu attēlošanai, tostarp interaktīvus grafikus un detalizētus transakciju pārskatus.
Pārveidotas lietotāja plūsmas: Izstrādāju pilnu Login, konta pārskata un detalizētu skatu ciklu, nodrošinot kvalitatīvu lietotāja pieredzi no lietotnes palaišanas līdz investīciju pārvaldībai.
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:
Unit testēšana: Rakstīju produkcijas līmeņa unit testus visām jaunajām funkcijām, nodrošinot pilnu loģikas pārklājumu. Šī pieeja bija kritiska finanšu lietotnē, kur aprēķinu kļūdas nav pieļaujamas.
Cross-platform izstrāde: Nodrošināju, ka lietotne darbojas un tiek attēlota konsekventi gan iOS, gan Android ierīcēs, ņemot vērā platformu specifiskās nianses UI līmenī.
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:
Migrācija: Migrēju UI komponentus uz React un pārveidoju lietotāja plūsmas darbam SPA modelī.
Back-end pielāgošana: Refaktorēju esošo .NET kontrolieru loģiku, lai klientam tiktu piegādāti strukturēti dati, nevis HTML.
Pārejas risinājumi: Situācijās, kad API vēl nebija pieejami, izveidoju pagaidu datu nodošanas mehānismus, izmantojot script tagus, lai saglabātu funkcionalitātes nepārtrauktību.
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.
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.
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.
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, kā prognozēt autobusa noslodzi bez reāllaika sensoriem. Es izstrādāju prognozēšanas pieeju, izmantojot Rīgas Satiksmes atvērtos datus :
Datu iegūšana: Analizējām biļešu (e-talonu) reģistrācijas laikus konkrētās pieturās.
Prognozēšanas modelis: Tā kā pasažieru plūsma ir cikliska, mēs sasaistījām vēsturisko noslodzi ar konkrētiem laikiem.
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:
Settings: pārvalda lietotāja iestatījumus un ievades validāciju.
MapController: apstrādā kartes mijiedarbību un renderēšanas loģiku.
RoutingService: pārvalda API izsaukumus un maršrutu aprēķinus.
UIController: apstrādā lietotāja interfeisa notikumus un DOM atjauninājumus.
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
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:
Model: definē datu entītijas (lietotāji, konti, transakcijas) un biznesa loģiku.
View: pārvalda lietotāja interfeisu, izmantojot JavaFX un FXML izkārtojumus.
Controller: apstrādā lietotāja ievadi, validācijas loģiku un atjaunina modeli.
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:
Kredītkonti: lietotāji saņem 5% atlaidi transakciju komisijām.
Krājkonti: lietotāji saņem 5% bonusu iemaksām, izņemot iekšējos pārskaitījumus starp saviem kontiem.
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.
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:
Tīkla optimizācija (debouncing): Lai izvairītos no API ierobežojumiem un samazinātu datu patēriņu, es izstrādāju pielāgotu “Debouncer” mehānismu. Tas aizkavē API pieprasījumu līdz brīdim, kad lietotājs pārtrauc ievadi, būtiski samazinot liekos pieprasījumus.
Bezgalīga lapošana (infinite pagination): Tā vietā, lai ielādētu tūkstošiem attēlu vienlaikus, es ieviesu lazy loading pieeju. Lietotne seko lietotāja ritināšanai un automātiski ielādē nākamo GIF kopu, kad tiek sasniegts saraksta beigu tuvums, nodrošinot gludu ritināšanu un zemu atmiņas patēriņu.
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.