Work Experience

Jan 2025 - Present
Senior Software Developer (PHP)
Paysera Bulgaria
Sofia/Plovdiv, Bulgaria
System maintainance and development of payment and financial solutions.
2018 - 2024
Teaching Assistant - Part time
University of Groningen - Faculty of Science and Engineering
Groningen, Netherlands
Sep 2024 - Nov 2024: Information Security
Feb 2024 - Apr 2024: Computer Graphics
Sep 2023 - Nov 2023: Information Security
Feb 2023 - Apr 2023: Computer Graphics
Apr 2022 - Jun 2022: Artificial Intelligence 1
Sep 2021 - Nov 2021: Information Security
Sep 2021 - Nov 2021: Imperative Programming
Feb 2021 - Apr 2021: Computer Graphics
Apr 2020 - Jun 2020: Artificial Intelligence 1
Apr 2019 - Jun 2019: Artificial Intelligence 1
Sep 2017 - Nov 2017: Imperative Programming
Feb 2017 - Sep 2024
Web Developer / Student Assistant - Part time
University of Groningen - Faculty of Economics and Business
Groningen, Netherlands
Assitance with web development of projects intended for research of consumer behavior and well-being.
Nov 2014 - Aug 2016
Web Developer - Full time
SoftwareGroup Bulgaria Ltd.
Sofia, Bulgaria
Development and R&D into various project involving microfinancing and payment intermediate.
Nov 2013 - Aug 2014
Backend Developer - Full time
Sofia University "St. Kliment Ohridski"
Sofia, Bulgaria
Development of project critical to the university processes - particularly the admission procedure.

Education

Sep 2016 - Present
Artificial Intelligence
University of Groningen - Faculty of Science and Engineering
Groningen, Netherlands
Bachelor degree
Sep 2010 - July 2014
Software Engineering
Sofia University "St. Kliment Ohridski"
Sofia, Bulgaria
Bachelor degree
Sep 2003 - July 2008
Electronic Technician - Computer Systems
Sofia Professional High-School of Electronics "John Atanasoff"
Sofia, Bulgaria
Secondary education

Technical Skills

Group Skills
PHP PHP, Symfony, Doctrine/DQL
JavaScript JavaScript, TypeScript, NodeJS, ExpressJS, VueJS, AngularJS, Sequelize, WebGL, WebGPU, WebRTC
Python Python, Numpy, Pandas, Ctypes
C/C++ C++20/C++23, STL, CMake, Qt, OpenGL, Vulkan, SDL2, Linux, POSIX, udev, Win32
DevOps Nginx, Apache2, Docker, Docker-Compose, Git, CI/CD
UI/UX CSS3, SCSS/SASS, XML, XSLT/XSL-FO, DOM Components, Progressive Web Apps (PWA), Twig Templates
Databases MySQL/MariaDB, MSSQL, PostgreSQL, MongoDB
Testing PHPUnit, PHPStan, Mocha, C8, NYC, GTest, GMock, Lcov, GDB, Valgrind
AI Python, Robot OS (ROS), Webots, NAO (robot), LLM
Other Android, Java SE, Assembly (x86), Matlab, R, GDB, LCov, Doxygen

Language Skills

Language Reading Listening Writing Speaking
Bulgarian Native Native Native Native
English C1 C1 C1 C1
Dutch A1 A1 A1 A1

English: TOEFL (2016) + BSc in RUG

Dutch: RUG language center (2017)

Soft Skills

Group Skills
Social Teaching, Course Organization, Teamwork, Gaming
Personal Adaptability Teamwork Critical Thinking Problem Solving

Projects*

* Only projects that are currently online and still maintained are included. A lot more projects and details are available on the LinkedIn profile page.

Student Admission Campaign Portal for Sofia Univeristy "St. Kliment Ohridski"

  • Duration: Feb 2013 - Jun 2014
  • Environment: Work/Professional
  • Description: Organizing the entire admission process, including all administrative documents for upcoming students and staff in the largest university in Bulgaria.
  • URL: https://online.uni-sofia.bg
  • Skills: PHP, Symfony, Twig, JavaScript, MySQL, MSSQL, Doctrine, Requirements Gathering, Software Architecture, Stackholder meetings, Linux, Windows, Angular, XSLT, XSL-FO, Apache FOP
Project details

What does the project do?

The admission campaign portal is intended for both students (public side) and university administration (private side). It overhauls the admission campaign process of the university by automating certain tasks and provides pre-filled paper documentation, which is extensively used by the university administration.

Here is a comparison of the public process of student admission in Sofia University “St. Kliment Ohridski” before and after we launched the admission portal.

Before the admission portal is released After the admission portal is released

The students visit the main university building to fill-in the registration forms and pay the document processing fee.

The student registers online, fill-in the registration documents at home and pays the document processing fee online or at an easyPay™ desk.

The student must either do their own research which exams are necessary for the program they desire, or consult with the university student desk.

The portal assists the student in selecting the right exams for their desired program.

The student must visit the university building again at the start of every exam period to get information where and when the exam will take place, and take a student identification ticket they need to bring on the exam.

The student can check online the date and time of the exam and print the student identification ticket they need to bring.

The student must attend the exam on the assigned date and time. Each student is assigned a seat based on its student ID.

Distribution of seats in available halls of the university buildings, as well as any documentation associated with the people invigilating the exams is manually prepared by the university staff.

The university staff defines rules for the exam seat distribution. Based on those rules, as well as information about the layout of exam halls, the admission portal uses algorithms to assign seats and outputs the necessary documentation for the university staff.

After the student attends the exam, the student can check their grade and ranking online.

After the student attends the exam, the student can check their grade and ranking online.

Once all exam sessions are finished the university has several ranking sessions. Each program has a limited number of slots. The students are ranked according to their score and assigned by their program wishlist order. Since not every admitted student signs up, the university can do 2 or 3 ranking sessions, until all slots are filled.

If a student is admitted and wishes to sign up, they must visit the university building and fill-in the admission documents and certify their student book, and pay a document processing fee again.

If the student is admitted, they can fill-in the sign up documents online, and pay the document processing fee online or at an easyPay™ desk.

As shown in the table above, the old process requires the student to visit the university building at least 4 times. This is not really attractive for students living in the province.

The admission portal is designed so it can accommodate the old process as well. The university staff can register a student and fill-in the documentation, preserving the process before the admission campaign portal is launched. The students not comfortable with computers and the internet can still apply using the old process. They can still access the portal in a limited read-only manner to view their exam results, but cannot be fully authenticated to change their status online.

The admission portal does not only assist students, but also university staff in providing a central database for all student applications and admission, and outputs the necessary paper documents for all staff involved in the admission campaign. The portal integrates the functionality of several legacy individual proprietary systems that did not communicate with each other.

How did the project contribute to my skills?

My involvement with this project started at the same time I was studying in the Software Engineering program in Sofia University. While it was not what originally I have been contracted for, my role in this project unintentionally changed to handle more software engineering tasks. Together with my supervisor and the director of the University Center for Information and Communication Technologies (i.e. my employer), I have taken the following additional responsibilities:

  • Evaluate the current university systems;
  • Attend and plan meetings with the administration responsible for the admission campaign and other interested parties and gather requirements;
  • Coordinate with the development team and decide on a system architecture and set of technologies to use;
  • Evaluate the system after each iteration and repeat the above steps;

Additionally, the project contributed to the following technical skills:

  • PHP+Apache2 Stack with MySQL Databases;
  • Symfony2 framework;
  • Linux/Bash automation and process management;
  • Apache™ FOP - A software for generating PDF documents from XSLT/XSL-FO on XML model;
  • XML document processing using Document Object Model (DOM);
  • XSLT and XSL-FO;
  • Integration with 3rd party APIs, like ePay™ API for online payment;
  • Security principles and information privacy;

Note: The ePay™ and easyPay™ are trademark of ePay Bulgaria - a Bulgarian payment processor and gateway.

  • ePay™ is responsible for online payment through Bulgarian banking system for people having a bank account;
  • easyPay™ is an extensive network network of small offices or checkout desks distributed around Bulgaria. The offices allow people without bank accounts to pay in cash for their utility bills or process ePay™ online payments. In villages and settlements without dedicated easyPay™ offices, easyPay™ can partner with established local traders to provide the same services.

R&D into offline and low-internet-speed web application for microfinance

  • Duration: Jun 2015 - Aug 2016
  • Environment: Work/Professional
  • Description: R&D into offline web and secure synchronization of financial middleware services in microfinancing.
  • URL: https://mis.thesavix.org
  • Skills: NodeJS, JavaScript, MySQL, MSSQL, Linux, Windows, JIRA, Redmine
Project details

What did the projects do?

As part of the R&D team in SoftwareGroup Bulgaria Ltd. The company is focused on microfinance in specific countries around the world. When I joined the company, the company's main market was in Kenya and Ghana. By the time I left the company, the company operated in seven countries around the world.

My involvement with the company projects focused on R&D functionality for new and existing projects. The goal of this projects were:

  • Research into offline websites: update, maintain and extend a system used in agent banking, to allow the agent to access the system from their device when the internet service for the device is unreliable or missing.
  • Research into secure synchronization: allow transactions to be securely synchronized with the banking system, without repetition, and without trusting the agent's device clock.
  • Integration with a local mobile operator API to provide a USSD interface for various types of transactions: utility bills payment, airline ticket reservation, etc.
  • Migrating existing company proprietary legacy infrastructure to a more standard approach using NodeJS.
  • Create a system that can easily write specifications of third-party proprietary APIs and transition data from one API to another: API-to-API CMS.

How did the project contribute to my skills?

Technical challenges

Working in SoftwareGroup Bulgaria Ltd. was the first time I had the opportunity to transition from PHP/Apache2 stack websites to websites operating in a NodeJS in a professional environment. With NodeJS the process of how a web server can be scripted can be customized to a higher degree.

Additionally, unlike general information websites, the company niche market offered usage of way more complex and technologically challenging projects, that required the use of more complex security processes. For example, synchronization between two devices is technologically a simple task using the existing libraries and tools, but synchronization between a secure server and trusted app on an untrusted device is technologically challenging and more interesting to code than the average presentational website.

Unfortunately, the company also operated with its own proprietary legacy unnamed technologies, loosely described as XML wrappers for MSSQL and a significant amount of proprietary third-party APIs. Adapting to new APIs and software frameworks I have never worked with before, is a skill on its own, but also due to the majority of those APIs and frameworks do not have an official name, I cannot mention them in this resume.

Integrating online grocery store simulation into Qualtrics survey

  • Duration: Feb 2017 - Sep 2024
  • Environment: Work/Professional
  • Description: Assisting the research process into customer satisfaction and well-being of factulty of economics and business (FEB) in University of Groningen, by providing web development tasks and intragrating the existing system into 3rd party services like Qualtrics Survey API.
  • URL: https://marktplazaonline.nl
  • Skills: NodeJS, JavaScript, MySQL, Twig Templates, Docker, API Integration
Project details

What did the projects do?

The Faculty of Economic and Business of the University of Groningen have several research projects in the subject of consumer behavior and well-being. The research main form of data collection is surveys made on the Qualtrics platform, a platform that allows high customization including code/programming-based customization.

The project consists of two parts:

  • Developing a grocery store simulation within Qualtrics;
  • Developing external grocery store simulation and integrating it with Qualtrics;

Implementation of a grocery store within Qualtrics is limited to 30 products per question, as each product represents an answer/choice of a question. The advantage of this method is that all necessary code and settings are stored within the Qualtrics survey, no external website required.

Implementing an external grocery store implemented the following requirements:

  • Each participant must register within the external website and the data collected from the external website for that participant must be linked to the data collected from the Qualtrics survey.
  • The participant must finish the grocery shopping to continue the survey.
  • The linkage between the two systems must be as seamless as possible.

The researcher can set up various settings for the simulated store like product suggestions, showing caloric contents, showing the product NutriScore, etc. allowing the researcher to split the participant in various groups. The settings can be linked with particular participants' groups based on settings in the Qualtrics survey.

How did the project contribute to my skills?

As part of this project I am responsible for developing a grocery store simulator website for the external store, assisting in organizing large quantities of product information efficiently. This includes scraping publicly available information from existing grocery stores, extracting information from nutrition label images (OCR), and full-stack development of a website with specific needs.

The website for the external grocery store was developed on a NodeJS-based stack, and it is using MariaDB database. The website itself does not use any kind of frontend framework, as its primary goal is to look as consistent as possible on all devices and any error or inconsistency must be recorded and reported, meaning more code would result in a more complex error handling procedure.

Academic Projects

Programming a NAO robot to play football

Project details

What did the projects do?

The purpose of this project is to make a NAO robot - a robot designed to play football (a.k.a. soccer). The robot must:

  • Locate a ball in a football field;
  • Walk up to the ball;
  • Align itself so it stands between the ball and the goal;
  • Kick the ball in the direction of the goal;
  • And ultimately: score a goal;

All this must be done without the robot falling down.

For the purposes of this exercise, we were provided with:

  • Bindings of the NAO API and Robot OS for Python;
  • Software for creating time graphs of the individual robot joints to design a kick;
  • Color-based object recognition for locating the ball on the football field;
  • Some integrated behavior: rotate in-place and walk forward;
  • Webots simulator to validate the behavior before executing on a physical robot;

How did the project contribute to my skills?

This project presented a unique challenge, as it was the first time we programmed a physical system, as well it was the first time we programmed in RobotOS and used Webots. For me, personally, it was the first time using python for a complete project and one of the first times I programmed something in Python. Therefore, the project was a unique challenge to adaptability and handling a new language and new environment.

The project itself was the first time we programmed something that controls a physical system. As such it was an opportunity to understand the operations of physical systems better. For example, even integrated walking behavior that comes with the NAO robot might work in a simulation and fail in the physical robot, since the simulation does not account for the elasticity of the artificial grass the robot is walking on. While the university theory covers the unpredictability of the physical world, this was the first time dealing with that in practice.

Programming a Kinova robotic arm

  • Duration: Apr 2018 - Jun 2018
  • Environment: Academic
  • Description: Programming a classifier to select appropriate grasping method for Kinova robotic arm.
  • Video: https://www.youtube.com/watch?v=slQRmJi0RT4
  • Skills: Python, Numpy/Scipy, RobotOS (ROS), Kinova (robotic arm) Machine Learning
Project details

What did the projects do?

The Kinova robotic arm is a robotic arm, with two fingers capable of grasping and moving physical objects. The purpose of this software is to analyze an image of a camera and use a classifier to select an appropriate grasping method for the arm. Tall and thin objects must be grasped on the side, while box objects must be grasped along the shortest axis and never by a diagonal.

How did the project contribute to my skills?

The project involved programming in Python, using bindings for RobotOS and Kinova API. In addition the project required working with several image processing libraries, as well as programming image processing algorithms and using the information to perform supervised training of a classifier.

Analysis of fine-tuning of a large language model on text summarization *

  • Duration: Sep 2024 - Nov 2024
  • Environment: Academic
  • Description: Analysis of the parameter-efficient fine-tuning method known as LoRA on the quality of text summarization by pre-trained large language model.
  • * Upcoming
  • Skills: Python, Numpy/Scipy, CUDA/GPU parallelization, PyTorch, Neural Networks, Natural Language Processing, Transformer architecture

Personal and Fun Projects

Prototype of a commission computation task

Prototype of a vault game

  • Duration: Oct 2024
  • Environment: personal
  • Description: A progressive web app for a game where the player try to hack into a vault.
  • URL: https://github.com/Dragiyski/vault-game
  • Skills: JavaScript, TypeScript, Pixi.JS, GSAP, Vite, Webdriverio, Google Workbox, Progressive Web Apps, Git

Signals and Sinks (for ECMAScript)

  • Duration: May 2023
  • Environment: personal
  • Description: ECMAScript tc39 have a proposal making syntax changes to ECMAScript to introduce Signals to ECMAScript/JavaScript (https://github.com/tc39/proposal-signals). This project is a prove-of-concept that all of the core functionality of the signals can be implemented without syntax changes to ECMAScript.
  • URL: https://github.com/Dragiyski/sns
  • Skills: JavaScript, Mocha, C8, Git

3D math library for WebGL/WebGPU

  • Duration: Mar 2023
  • Environment: personal
  • Description: A math performant library for 3D math compatible with OpenGL functions, that allow fine-tuning the memory alignment requirements of 3D data passed to the GPU.
  • URL: https://github.com/Dragiyski/3d-math
  • Skills: JavaScript, EJS, Mocha, C8, Git

Fun project: A web page to read and write the language of the video game Tunic (Secret Legend)

  • Duration: May 2022
  • Environment: personal
  • Description: Allow reading and writing in the artificial language of the video game, including a guide.
  • URL: https://dragiyski.github.io/tunic
  • Skills: HTML, JavaScript Speech Generation

G-Ray: Implementation of real-time raytracing for the Web

Project details

What did the projects do?

The goal of this project is to implement real-time raytracing in a web browser. It was implemented as a side project alongside my job as Teaching Assistant in the Computer Graphics course in University of Groningen. The course required students to implement two things:

  • Implementing a real-time rendering of a scene using OpenGL;
  • Implementing a raytracer that generate a single frame (on the CPU) of a scene described in JSON format;

The questions this project should answer are:

  • Can existing browser APIs for GPU have sufficient features to implement raytracing;
  • Can this algorithm operate in real time and how many primitives can display in real time;

At the time this project started the only possible way to work with intensive graphics applications in a browser was WebGL2. Since then a new WebGPU API has been developed by the W3C working group and at the current stage it is not sufficiently and well implemented in modern web browsers. This project should be revisited in the future.

How did the project contribute to my skills?

This project allowed me to get familiar with graphics programming by solving a practical problem. Namely, I got familiar with the following technologies and programming languages OpenGL, Vulkan API, WebGL2, WebGPU, the GLSL language and the WGSL language.

In addition, for real-time raytracing the index must be developed for any complex model/mesh. The index itself is developed in Python using the Numpy library as this is the most suitable option for developing a prototype with a reasonable performance.

Switch keyboard layout using Alt+Shift combination in Linux

  • Duration: Aug 2021 (only)
  • Environment: personal
  • Description: Solves a long-standing issue in Linux when using modifier-only keys to switch keyboard layouts (for example between Latin and Cyrillic).
  • URL: https://github.com/Dragiyski/alt-shift-toggle
  • Skills: Linux, C++, Python, libudev, X11, XKB, Linux IPC
Project details

What did the projects do?

Allow changing the keyboard layout in linux using the key combination Alt+Shift, the same key combination as Windows.

This is a pretty niche project intended for people that use multiple keyboard layouts, like people using cyrillic and the Linux operating system. On Windows, switching a keyboard layout happens when Alt and Shift keys are pressed and one of them is released. The last part is important, as many developer software uses the Alt+Shift combination for keyboard shortcuts. For example, the Alt+Shift+F combination is often used to format code. Alt+Shift behavior on Windows does not interfere with those shortcuts.

Unfortunately, modifying the behavior of the linux XKB library to allow global keyboard shortcuts on key release of a modifier key requires major overhaul of how XKB handles global shortcuts, something the XKB maintainers are unwilling to do for the very niche group of Windows developers that moved to Linux and have native language that do not use the latin alphabet exclusively.

Fortunately, on linux there are multiple ways to handle a problem, and in this case it is possible to develop a third-party service that performs this simple action without modifying any of the XKB, and the Xserver code. This project is one such solution.

How did the project contribute to my skills?

The project involved writing for linux, including getting familiar with Linux interprocess communication and how keyboard input is handled in Linux

Additionally, the project involved detecting when a new keyboard is plugged in, as laptops can plug and unplug external keyboards.

Finally, the project faced the problem with Xserver lifetime. The key press/release detection mechanism required root access and thus installed as a service. But the Xserver has an authentication mechanism for the main user and it is started later in the boot sequence. As such, the project is implemented as two different applications that use the provider-subscriber model implemented using linux signals to communicate to each other, as this was easier to implement.

Overall, the project required in-depth learning of the linux processes and how linux handle hardware, which is useful background knowledge for writing for applications and servers in a linux environment.

Image color analyzer

  • Duration: Oct 2016
  • Environment: personal
  • Description: Analyze color composition of an image and outputs the most prevalent colors.
  • URL: https://dragiyski.github.io/su-dm-colors/
  • Skills: HTML, JavaScript, Web Workers

Fun project: DXBall-inspired HTML game

  • Duration: Nov 2014
  • Environment: personal
  • Description: A small game written in HTML/JavaScript inspired by DXBall video game.
  • URL: https://dragiyski.github.io/dxball
  • Skills: HTML, JavaScript

Fun project: Labyrinth game

Project details

The game was originally written in Netwide-Assembly (NASM) / Intel x86 for the 512-byte program challenge as shown in this forum post https://forum.osdev.org/viewtopic.php?t=20006. However, the game did not fit the 512-byte when written in x86 assembly, it contained the random number generator (XORSHIFT), graphics drawing, but not enough space for keyboard controls. As such this is a port of the original assembly code to Win32. Some aspects of the original assembly code (namely the random number generator) are preserved.

Instead the submission for the 512-byte context was replaced by a memory browser, allowing to have hex editor (but readonly) interface to all the memory in the first 4GiB in less than 510 bytes. As visible by the poll, the project did not win, but shared a 3rd place with another project (2 votes).

Personal project: Windows Process Information

Project details

A very useful tool for debugging, although superseded by Microsoft's process information tool. This tool allows you to quickly look at what DLLs process loaded, find their absolute path and quickly identify suspicious activity.