# Davo's Portfolio *This is part of [Davo's resume](https://cdn.snart.me/hireme/). This is a living document. Revision: 0* Dear human readers, In this era of ATS and AI, I cannot thank you enough for taking your valuable time to have a look at my portfolio. Here, I present you my best efforts to showcase my work experience in simple terms for both non-technical and technical audience. I hope you enjoy. (c) 2025 David Timber ## Keywords C/C++ dev, sysadmin, network engineering Linux, OpenWrt, Qt, MSVC++, MFC, WinAPI, ffmpeg, OpenCV, OpenGL, DirectX, WebGL Embedded development, kernel development, React, ReactNative, Unity WebRTC, real-time streaming/processing, web development, frontend, backend AWS, GCP, Azure, Orchestration, Ansible, Docker, CD/CI(Github, Gitlab), libvirt ## Language Skills | Expert | Good/average | Good/average but rather not use it | | - | - | - | | C, Python, Shell | C++, PHP, Basic, CSS, SQL | Javascript, Java | ## Danusys In Korea, video surveillance is a multi-million dollar industry. Danusys has had a fair share of the market since 2007 a contractor for multiple municipal government across South Korea. wa stockholm boannews.com dailycc.net ### System architecture https://www.datapanik.org/wp-content/uploads/CCTV-Cameras-by-City-and-Country.pdf GIS showing camera locations(screenshot) A usual metropolitan city council operates 10k+ fixed camera sites. Over the dark fibre network, the video streams are relayed to the city council data centre, where the video streams are stored and monitored by the operators. A massive amount of data has to be transferred, processed, stored in real-time. Numerous contractors are involved to build the infrastructure required. Multiple technologies, including ones home-brewed by Danusys, are employed to overcome many engineering challenge to build such systems. Simplified architecture diagram Simplified diagram of Danusys VMS architecture *(This is a typical architecture of any VMS solution. The actual product names are replaced with generic tech industry jargons to avoid breach of NDA.)* #### Edge Node The video streams from multiple cameras are gathered on the edge node. A specialty hardware is used where the cameras are traditional analogue cameras to transcode the footage to modern encodings like H264 and HEVC. The video streams are encapsulated in one unified internal protocol for ease of processing, transport, and storage. The edge node is responsible for (but not limited to): - Relaying streams to the data centre - Processing footage and decision making in real-time - Track moving objects using [PTZ camera](https://en.wikipedia.org/wiki/Pan%E2%80%93tilt%E2%80%93zoom_camera) - Alerting the command centre and sounding alarms in case of events - Facial recognition and [ANPR](https://en.wikipedia.org/wiki/Automatic_number-plate_recognition) (where required) - Storing video Due to RTT(round-trip time), "edge computing"(a technique that's been popularised recently) is employed. The edge nodes are often equipped with sufficient computing power to processing video in real-time. The edge nodes operate autonomously(without the need to communicate to the data centre) to issue commands to the PTZ cameras and other peripheral devices. The edge nodes are also capable of storing video on site so that no data is lost during link failure. #### Stream Relay Agent The data link between the camera sites and the local government's data centre is often limited and unstable. To prevent network overload, real-time streams are relayed to the data centre where they're duplicated for other purposes such as storage, further analysis, and manual monitoring by human operators. The Stream Relay Agent also features conversion from and to standard streaming format(RTP/RTSP) and vendor-specific proprietary streaming protocols. #### Stream Store Agent To implement the [3-2-1 rule](https://www.seagate.com/gb/en/blog/what-is-a-3-2-1-backup-strategy/), a backend program that stores data relayed from the stream relay agent runs on the servers at the data centre. The servers are backed by enterprise data storage(SAN, directly attached SCSI HDDs). The agents are responsible for storing data for the duration required by local legislation(30 days in Korea) and deletion of data. The operators can use the front apps to access data stored on the store agents to search and view stored videos and events. #### Master Control Plane Server The master control plane server is a program that supervises overall operation. The operation includes: - Access control: user authentication and authorization - Distribution of centralised configurations to all backend and frontend nodes - Enforcing site-specific policies - Other stateful functionality: scheduled tasks, pre-programmed logic and behaviour set by site operators As the server is a crucial component of the system, the server is hosted on hardware with additional redundancies. The server also features active-backup failover. #### Front GUI Apps Typical VMS front app Multiple front-end apps are developed for client's use cases. The apps can be categorised in these feature groups: - Control Plane Manager: talks directly to the master control plane server, used to configure site-wide settings - Operator Software: used by command center operators and other external stakeholders, including police dept., defense agents, city maintenance contractors - Viewer for live and stored stream - Search engine for stored data - Diagnostics tools for experts and devs ### My Involvement Building such a complex software architecture requires a team effort. The following highlights my involvement and achievement during my time with Danusys. #### Edge Node - General maintenance - Complete rewrite of the existing vision algorithm (detailed in later section) - Other performance improvements in video decoding, memory management #### Server Products - Porting existing Windows server products to Linux - Linux tech support - Embedded Linux dev #### Codec Research (detailed in later section) #### Network and Systems Administration - HQ office net admin, sysadmin - Site net admin support --- ### Computer Vision R&D - **Project duration**: 1.5 years - **Written in**: C++ - **Platforms**: Windows, Unix-like The following diagram illustrates the pipeline of the computer vision algorithm module for object detection and tracking I myself, under the supervision senior devs, developed from scratch. Live video streams are decoded on the edge node and fed to the pipeline for analysis. The estimated background image constantly gets updated by input frames. The generated background image is then diff'd against the latest frame to extract foreground objects. The object association model then takes the extracted foreground object as input to associate them with the objects appeared in the previous frames to make the best model of the object's characteristics including travel path, direction, speed, and type of object. The information is then consumed by other modules to perform various tasks, including, but not limited to: - PTZ tracking - Preset events e.g. intrusion, loitering - AI models, facial/plate recognition The module is an amalgamation of several algorithms from various papers optimised for real-time performance and memory footprint. The module is still in use county-wide. ### Media Codec Research - **Project duration**: 6 months - **Written in**: C++ - **Platforms**: Windows, Linux Media codecs are one of the critical components of the VMS solutions. New encoding standards are release every decade whilst numerous old cameras are stuck with legacy video encoding. Some camera vendors insist on supporting their own proprietary video encoding only to circumvent patent and [licence fee](https://en.wikipedia.org/wiki/MPEG_LA) issues. It's not unusual for a VMS solutions to support more than 20+ different video and audio encodings. This calls for a good codec abstraction layers to keep the software maintainability at bay. I was tasked to bring the codec abstraction and APIs up to the modern standard. #### Hardware accelerated codec Another engineering challenge for the front apps is the large number of real-time video streams to decode simultaneously. Mid 2010 was when Intel, AMD and Nvidia started to embed ASIC video codec in the silicon die. Historically, the VMS apps had to rely soley on software-based decoding. Modern CPUs and GPUs are now capable of decoding 2-3 1080p streams at the same time. By utilising all of the hardware codecs in the CPU and GPU on a regular PC, some of the load required for video decoding can be offloaded to ASIC decoders. To put things in perspective, in a 4x4 viewing configuration, 5-6 out of 16 streams could be offloaded. Software-based codecs suffer from memory bandwidth starvation since fully decoded frames need to be transferred back and forth before they can be displayed: 1. Decoding: encoded 264/HEVC data from memory to full YUV picture to memory 1. Scaling: full YUV picture from memory to scaled down/up RGB picture to memory 1. Rendering: RGB picture from memory to VRAM framebuffer Some optimisations can help skip the step 2, but there still remains the problem of having to transfer full 1080p frames 30 times per second through the PCIe bus. ASIC codecs provide what's called "zero-copy" solution, in which encoded frames are copied to the VRAM where they are decoded directly to the frame buffer. #### SoC codec There was a brief period when the company endeavoured the venture into the consumer NVR market in effort of diversifying the B2G portfolio. This meant the development of a low-cost SoC based NVR. Many video surveillance companies are faced with the same problem and constantly try to break free from government funding by venturing into the consumer market. The major issue is the scale of the domestic market and the fact that the global market is dominated by cheap Chinese and Taiwanese brands. Although the product never saw the light of day, my expertise was required for the development of the product. I added SoC codec support and ported all the backend daemons and frontend apps. ## Hobbyist years ### Failed video game project 2018 https://youtu.be/PaBgZEkTaFw?si=rI-nD-GpPrW28bEL ### "Proone" Research Linux Worm Virus 2019 - 2022 https://github.com/dxdxdt/proone ### Book: "Dev Log" Deep dive into network engineering(work in progress). ## Open source project contributions | project | what | url | |-|-|-| | http-server | -H/--header option in line with curl(1) | https://github.com/http-party/http-server/pull/887 | | NetworkManager | Bug fix: default route pushed RIO(Router Information Option, RFC 4191) in IPv6 RA not honoured | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1666 | | TP-Link C20-v5 OpenWrt port | OpenWrt port for TP-Link Archer C20 v5, a cheap router found in Australian consumer retail | https://github.com/dxdxdt/tp-link_c20-v5.dev |