Freelance full-stack software engineer
Hire Me!
I’ve been contributing to projects either as the solo coder or a
technical lead on a small team. I bring value to my clients by helping them chose and implement software that serves their business.
Past projects include:
- saving money by optimizing clients' cloud setup
- managing full software lifecycle, including planning, coding and
deployment on cloud (AWS) or on-premises (Docker, VMs, bare metal)
- video: transcoding and delivery of a video archive to web browsers and
live streaming with HLS and WebRTC.
- interactive 3D visualization of technical measurements with contextual information (tech stack: WebGL, Three.js, RxJS)
- 2D charts with various twists, including data transfers and rendering with varying levels of detail
- UIs with synchronized maps, video, and charts
- performance optimization by profiling and, if required, rewriting specific parts in C++
- complex Excel reports optimized for printing (language: C#)
Across most projects we used:
- DevOps practices
- Git
- Docker
- Continuous Integration
- Markdown
- Unit tests
Also a powerlifter (-75kg. 145kg squat, 100kg bench-press, 180kg deadlift).
,,,~,=Z,Z:::7=ZI7:~+~~~::,:::::::~:::::,,,,:::~+++II7777777777777777777777777777
?7:O,,:+??::=~OIZZZ7::=I+,:::::=+=,+,78+N:::7+=+++II7777777777777777777777777777
7+?O~7$?+7+=77Z?I+++=I?$+O=+++7ZI+ZOZO$$7DDD8===++?III77I77777777777777777777777
$I$?$+:=~Z++7=~=~~?~+?II+$N7O888DDNDODDZODMM8MN$M?IIII7IIII777777777777777777777
+$7$++:7::~+==+$+~=?=I7Z$ZOOO8DDDNN8DDD8O$$8DMDN?7IIIIIIIIII7IIII777777777777777
IZOZ=I==+=7===+:~+I:==$I88DO8D8DMNDMN8?O8ZDZ8ON87NIIIIIIIIIIIIII7IIIII7777777777
?:=+$ZIII~7~~+~,~~:+=7$Z~ND88ZONDNDNNODNO8OIZOIN8MOIIIIIIIIIIIIIIII7IIII77777III
ZOOOO$+++=I~+O??=?=II787DD8DNMNNDD8DDNZ7MOZO$ZMON8MM87IIIIIIIIIIIIIIIIIII7III7II
ZOZOZZZZ$IZ7?=+?~I~=O$DOD8NDDDNDD88D88Z8$$8Z?+7$NDNMN?OIIIIIIIIIIIIIIIIIIIIIIIII
Z7+ZOZ$$OI+7+?I?$I:=+D8DND888888OOZ??I7+ZZZZZ8OD77ODND8IIIIIIIIIIIIIIIIIIIIIIIII
$:~::~ZZOZZZZZZ$Z7$I7$MNND8OOOOI$7$7?I?II+IZ$$DZDZ:$:M$OIIII??IIIIIIIIIIIIIIIIII
~?++:=Z=Z7OZZZOZO?I~?ZMD8ZZ$Z$$?7I77?=~,:~:~:~~?7$O77ON8O?I?+IIIIIIIIIIIIIIIIIII
===+~=:II:$=7?ZZZI,,~~88ZZ$77$7II7II+~,~::::~:~~~~?$ZOONOO=7IIIIIIIIIIIIIIIIIIII
ZI=$:Z+=$7?O+O7=?I7,?IDZZZ777?I?++==:~,,::,:~~~~~~~IZIDD8+777IIIIIIIIIIIIIIIIIII
O8OOZ7Z$IZ:~~$=~I,+=Z$OZZ$7I?=~~~=~~::,,,::::~===:==?$8NMNZI?III?8NNIIIIIIIIIIII
ZOZIOOO8ZO$=:~~~$++7=DZZ$77I+=~~====~::::,,,:~=~=~+IZOD8DO87IIII88DOO$IIIIIIIIII
Z$I+Z?$Z~Z$O:=$I+I7~=8OZ$$$$II+==+++=~==~~,,~:~~~=I7O8DON8OIIII$M87?O?II?IIIIIII
7Z$=:~$I:~$$:.+7=7+I.OZII$Z$7$II???IIZOO$$I??===~=+I8D8DMD$?????IOMN77?$~:~II??I
$Z$7$I:~O?77ZO=~Z=~==O$ODD8DOOZZ$IZZOOOOOO$$II7I==+7$Z88Z8?????????78DOO8I?::???
8D87$$??:==+ZZ+?$ZZZZ$OOOOO8888O=,+O8DNNNMND8$+?=~~?7OO88???????????IOOO88Z:~~~?
ZDD8$$Z$Z8OZ+ZZZO8+:??$Z8DMMDNDI~,:7O8OOZ7???=~:~~~?7OOOZ$+?????????IZO8DD8O,M7+
$DDDDDO8$Z$?~~I7I~~?:~$8ZZO88OO+,::::::~:~::,:,:~~~=IIO?=Z???????????Z88888D=?OI
O$DDDD88$8O$??$$ZO~===OZOOOOZZ7=,::::,::::::,:::~===7,$Z+???+????????O888OOO~8ZI
=?Z$OZ8DD8$8$I7IZ$=~~=$ZZ$$I$?+~:::~~=$+~~~:::~~===+=:~~~:+?++??????+O8OO$=8=OZI
IZ+:ZZZZ$$DO887$Z77ZOZZ7?+?ZZ$7I+++=~=$ZZI=~~~~=+++===:::=++++++++++?$OO$+=OZO??
7,ZZ+?O7ZZZOO$N8I$$$7I$ZII$OZDZOZDDD$~:~IOZI++=++===~~:,:++++++++++++ID8Z+~?$+++
~.$7$OZ$ZZZ$7$IZ?+?+7ZZ$ZZOZO88888OO+~===+OZ?=?====~=Z7IZ++++++++++++ZO8ZDN??+++
:~?O$ZZZ7IZOZ=I??7I??$D$Z8OOOOOOO$=:~:~~+7$+7+$======O$OD++++++++++++ZO88DZ?=+++
$++7Z=ZOZ$ZOOZZ$?7Z77$Z+ZZOZZ888OZZ$ZOOZDDZ?++?===+=$$:7I++++++++++++OD87Z7I~+++
$$$OOOO$O$ZZZO8Z?O?IZO7Z$Z888OOI7???++~~~~??++++++++::~:++++++++++++8ZI:+~:I?+++
?O$$$7ZZZOOOZ$8D8Z??8O=ZIZOOZZZ$77$7??~~~~=+?????+?+,::~++++++++++=+OOO=$D==++++
O,ZI..7$OOOOZO$+ZOO888OZI$ZZZZZO8Z7I+=~=~==++???+II,,::~:O?++==~===?ODOOND?+?+++
ZZ$ZZ$ZOO$:ZZO88888$8888O8$ZZOOO?I?~~::~~==++?I$$?::,:,,888D=++====OODD8I?+7II7$
$Z$IO$??++==~:8DDDD8DO8D888~ZZ777??+=:~=+=?+I$Z$~~::,:IDDNMD8D$??++O8DDD7?+$7?$I
+???+++?++?++=+8NMMNDDODD88NZ$O$7$7???IIIZ$OOO7+=~~:::DNN,..8DDD8+?888?OZNN8OD88
7777IZIZZZZZZZ$ZZOMMD8O88888$OOO?OO$7OOOD888OI+==~~::8NND8..IDDDDDDD8$~DDMDN88ND
$Z77=~~OZ=:~O777$~NMMDOD888D7:M888O88D8OOOOOI?+===~~~NN:8DM...DDDDNNDNDDDN8NMNN8
77III?=~::~=~...,:.NMNND888D$$O$8Z7ZOOOOOOOII??++==~MN,..8DD...DNDDNNNDNNNN8DMNM
8O7??IZ?~:,, .....7NNMMMD887.:$ZO:.?ZOOOOO$$II??+==+DMD,..8D:...NDDDNNNNNNDDD8DM
OI7I?$$8I=~Z,......DNNNDN8D,?~?+?Z~,=ZOOOOZ$7II????8M.NN.,~DD...NDDNDDNNNNNDNND8
7$77?I$88$IO.......7D8D888D,?IOOZ$Z,+$ZOOOOZ$7IIIINMI,DND,~.D8...MDDDNNDDDNNDDDD
7$$$778ZNO$7::,,,,,I$O7NN8ZI$$8O8$8+=$$ZOOOOZ$77$NMM.,,MNO::DDN.. 8DDNDDDNNDDDDD
+ZZ$ZDONODD$+NZ~+8+IION$$~7ODO88?I?+NMMZZZZZOOZNMMMMN.,~DD,..DDN...DDDDDDDNDDDDD
NZ$$$OMO8OZN$I++~=DNDZ777II7$$O77$+$MMMMOOZOONNMMMMMND,~DN,..MDD....DDNDDDDNDDDD
M+Z777$$$77778MD$OZ7777D8ZI7777II=MMNMMMDNDMMMMM$MMMDD$~DD8..,DDD. .ODDDDNDDDDDD
888D887$7777DZO$Z877$7D8Z87$O$$+:~MMMMMMMMMMMMMMM$MNNN:,7DD...,D8M...8DDDDDDDDDD
DDDD:8777$$88D$DN7$$D8DD8$7ZZ77,=MM$MMMMMMMMMMMMM8MNMN.,=DDD...8DD....DDDDDDDDDD
DDDN87II7$8DNNZ$8$$NZZN8D87$$$D$:MMNMMMMMMMNMMMMMMNMNNN::DDD....DDD. ODDNDDDDDD
DNN=D7II$88N7OOZZ$ZZ$Z$NDOZZ$$Z,,MOMMMMMMMMMMMMMMMMMNNN,::DDN .8887 .888DDDD8D
NMMN7$ND8D88MN$NNOO8DNDDND78ON=~.MZMMMMMMMMMMMMMMNMNMNN.,,8DO. ..DDD .888DDD8D
ND8$78ZZD$DD8NNNZ$ZZODDOZO8:::==,MNMMMMMMMMMMMMMMNMNNNN...88DD ..O88~. .8O88O8D8
If you want to learn how some popular design patterns look in JavaScript I recommend you to read The Comprehensive Guide to JavaScript Design Patterns by Marko Mišura. It argues why learning design patterns is important and shows some examples. However, the post was written in 2015. Since then JavaScript has evolved and obsoleted some common patterns that we were used to in the past.
Making a “class” in JavaScript was a Wild West before ES6.
Read More »
Prime numbers. Somehow boring and yet fascinating topic in mathematics. A number is a prime number if it’s divisible by one and by itself. In contrast composite numbers are divisible by one, itself and one or more other numbers.
Primes: 2, 3, 5, 7, 11, 13... Composites: 4 = 2 * 2, 6 = 2 * 3, 8 = 2 * 2 * 2, 10 = 2 * 5... It’s all so simple and obvious when numbers are small.
Read More »
Just last week I installed a Chrome extension called Privacy Badger. It is supposed to protect you from third party scripts included on websites that might track you. It does that by checking content loaded from other third-party domains. The side effect of this extension was that you suddenly begin to notice which sites include external scripts. I’d say I am not surprised by them on social media sites and other sites where I mostly consume the content.
Read More »