Kijong Uhm, Developer in Suwon-si, Gyeonggi-do, South Korea
Kijong is available for hire
Hire Kijong

Kijong Uhm

Verified Expert  in Engineering

Embedded Software Developer Developer

Location
Suwon-si, Gyeonggi-do, South Korea
Toptal Member Since
September 17, 2021

Kijong has been a software engineer in embedded systems for 15+ years and a software project manager and development manager for 5+ years. He specializes in C on embedded Linux and has experience in C++, Java, and Python. Kijong has developed software for set-top boxes, automotive devices, and IoT devices.

Portfolio

Humax
C, C++, Java, Embedded Linux, Android TV, Linux Device Driver, Yocto, Linux...
Ubiwise
C, Linux, Embedded Linux, Linux Device Driver, Networking, Embedded Software...
Hannae Technology
C, Embedded Linux, Linux, Networking, Embedded Software, Computer Networking...

Experience

Availability

Part-time

Preferred Environment

Embedded Linux, C, C++, Android TV, Yocto, STB, Python

The most amazing...

...product I've helped develop generated $100 million in sales. I was a software developer and technical expert for the overseas co-development companies.

Work Experience

Senior Software Engineer

2006 - PRESENT
Humax
  • Developed the application software for set-top boxes on Embedded Linux and Android TV with C, C++, and Java.
  • Created the application software in the digital video recording system (DVRS) automotive device in Hyundai cars, based on Yocto.
  • Developed Linux device drivers for set-top boxes, such as video, demux, tuner, and recorder.
  • Managed the software aspects of projects from design to production.
Technologies: C, C++, Java, Embedded Linux, Android TV, Linux Device Driver, Yocto, Linux, Embedded Software, Embedded Systems, Embedded C, Embedded C++

Senior Software Engineer

2003 - 2006
Ubiwise
  • Developed device drivers on Windows CE and Linux for an audio touchscreen and a radio receiver.
  • Designed a generalized API to access digital multimedia broadcasting (DMB),. a portable TV receiver chipsets from many vendors.
  • Developed application software, including SMS and advertisement control on a cell phone.
Technologies: C, Linux, Embedded Linux, Linux Device Driver, Networking, Embedded Software, Computer Networking, Embedded Systems, Embedded C, Windows CE

Senior Software Engineer

2000 - 2004
Hannae Technology
  • Developed software for detecting dial or digit tones with an FFT algorithm and no extra hardware power.
  • Created software to connect and manage calls between internal phones.
  • Developed an xDSL device driver and application software on RTOS.
Technologies: C, Embedded Linux, Linux, Networking, Embedded Software, Computer Networking, Real-time Operating System (RTOS), Embedded Systems, Embedded C

Software Engineer

1998 - 2000
Hanwha Information Communications
  • Developed device drivers on RTOS for the Motorola 68360 CPU.
  • Created a device driver and network application software for xDSL modems.
  • Developed application software on RTOS for a telecommunications device installed near the customer.
Technologies: C, Networking, Embedded Software, Computer Networking, Real-time Operating System (RTOS), TCP/IP, Embedded Systems, Embedded C

Android TV Set-top Box

A set-top box based on Android TV and sold to J:COM, the cable TV operator in Japan. I developed the TV framework and Android apps, including the launcher, settings, and service, to communicate with the remote control app on a smartphone.

DVB Stream Analyzer

https://sourceforge.net/projects/pyucsi
A personal side project to make an SI parser library and analyze the DVB broadcasting signal for live and captured streams. I used the final output in client projects to analyze digital TV streams. The initial purpose was to learn and practice modern programming techniques such as Python, OOP, design patterns, unit testing, and TDD. As the project continued, I added and developed many features. The final application was a DVB stream analyzer capable of analyzing SI/PSI, building a channel list on an SQLite database, and displaying an EPG.

LinuxTV Device Driver

LinuxTV is a Linux device driver for receiving TV broadcast signals. My company was porting the set-top box SDK of Broadcom to the LinuxTV device driver structure for the first time. My job was to port a demux video and audio decoder and a recorder module. It worked well and was used for the POC project to receive Freeview, the UK terrestrial TV signal.

Series Recording for Freesat

As part of the project to make the set-top box for Freesat in the UK, I developed a series-recording function. This function receives the series information (such as Friends season four) from the TV broadcast, makes schedules to record the complete season without conflicting with the other recordings by selecting an alternative episode, and records the program as scheduled without disturbing the user experience.

The product had a low-performance CPU and limited memory, but this function required a lot of data searching and saving. The primary goals for the implementation were performance optimization and highly optimized memory management in RAM and Flash.

Visitor Alarm Telegram Bot

https://github.com/ukayzm/opencv/tree/master/visitor_alarm_telegram_bot
A Python program using open-source packages, such as OpenCV, face_recognition, NumPy, and Telegram. It detects a face in a video from a webcam, classifies and identifies the face, counts the appearance of the person, and sends an alarm message to Telegram on the smartphone—all in real time.

2-wheel Balancing Robot

https://github.com/ukayzm/balancing_rbt
A simple robot that balances on two wheels. I built this as a side project using an Arduino MCU, Xiaomi battery, LEGO frames, and a DC motor. I achieved the vertical angle of the robot using an MPU6050 gyro sensor, noise reduction via a Kalman filter, calculation of the output to the motor via a double PID loop, and user input by TV RCU. The speed of the motor is controlled by PWM, and its velocity is sensed by a wheel encoder.

PBX and Call Simulator

A software module to detect dial or digit tones using FFT and also generate tones. Along with those functions, I implemented private branch exchange (PBX) software, which doubled the price of our product. That function was also used to verify the quality of the products in the factory by connecting two devices in a loop and exchanging calls with each other. I volunteered to develop this module when my company was developing a phone and data multiplexer over xDSL.

Reliable Multisession Transmission Protocol (RMTP)

https://github.com/ukayzm/rmtp
A lightweight and reliable protocol for an alternative to TCP. The product was a system with two devices communicating long-distance over UART, which caused a high data loss. I voluntarily designed and implemented a transmission protocol—a simplified version of TCP—to run on top of UART, and it provided very stable communication.     

This protocol is:
• Similar to TCP in RTOS, which was expensive at the time.
• Extremely lightweight, with 961 lines of C code, including test code.
• Multisession, so it can be used by many threads simultaneously.
• Robust, with 100% transmission even in the environment of 5% packet loss.

IoT Device for Environmental Sensing

https://github.com/smartfarmathome/device
This was the POC project to implement IoT devices to collect environmental data, such as temperature and humidity, and deliver it to a smartphone via BLE. ESP32, which has BLE, is used for the device.

Key Details
• The device supports the BLE Environmental Sensing profile to transfer the temperature and humidity data.
• The BLE Environmental Sensing profile is verified with the public application, such as "nRF Connect for Mobile" and "BLE Scanner 4.0" running on iPhone.
• There are no sensors on the board for now, so the data is fake.
• The test app was deployed on Android smartphones to verify the scanning and collecting of data.

JavaScript API Performance Improvement

Our client complained that it takes too long in the browser on our Android set-top box to call a specific set of JavaScript APIs provided by my company.

Three companies were involved in the API calls:
• Company A—Web app in JavaScript
• Company B—Web Browser
• My Company—Database access and overall integration

This complex call path made the analysis challenging, and it took a few months to identify the bottleneck. I was in the center of the communication and had to write many test codes in JavaScript to prove the cause I identified.

The Cause
The browser had two processes, and the API made too many IPCs. But Company B insisted that they could not improve it because it's a design limitation in Chromium. I suggested a workaround solution to Company B: Make a cache for the object of the API to reduce the amount of IPC. They agreed to implement it, and the execution time was reduced to 25%.

Digital Video Recording System for Hyundai GV70 Car

A digital video recording system (DVRS) for Hyundai GV70 car to record video from LVDS camera for the front and Ethernet camera for the rear.

The software was based on Yocto. I implemented user scenarios such as managing recordings, generating alarms, GUI interface, and user profiles.

Python Tool to Compare Tag Files

My client company develops new embedded hardware generating binary files, so-called Tag File, with a predefined format. They provided the parser code of The Tag file in C++. I used SWIG to wrap the parser for Python and developed a Python tool to compare the binary files from the old and new hardware.

It has smart algorithms to help the user better understand the cause of the difference, such as automatically aligning the timestamp, detecting and counting missing items, and visualizing and emphasizing the error point.

Porting Z/IP Gateway to Android

Z-Wave is a wireless technology for home networks like Zigbee or Bluetooth. Z/IP Gateway is an application that allows internet Z/IP clients to contact and control nodes in a Z-Wave network. Z/IP Gateway was designed to run on Linux or RPi. I ported it to Android on MediaTek STB. I investigated its source code in C and used technologies like Linux kernel configuration, Serial Port Control, VPN, JNI on Android, IPv6, compile option for CPU architecture, CMake, etc. I finished it alone in six months, which was faster than expected.

Languages

C, Embedded C, C++, Java, Embedded C++, Bash, Bash Script, Python, JavaScript

Platforms

Embedded Linux, Linux, Android TV, Arduino, Android, Bluetooth LE, Windows CE, MS-DOS, Raspberry Pi

Other

Embedded Software, DVB-T, Embedded Systems, Performance Improvement, Embedded Development, Yocto, Linux Device Driver, Software Project Management, Computer Networking, Real-time Operating System (RTOS), TCP/IP, Performance Optimization, Memory Management, Project Coordination, Arduino IDE, Firmware, Microprocessors, Electronic Engineering, Networking, Sensor Fusion, Linux Kernel, ESP32, ESP8266, Device Drivers, Linux Kernel Drivers, Telegram Bots, Sensors & Actuators, Architecture, STB, Z-Wave

Storage

SQLite, JSON

Libraries/APIs

OpenCV

Paradigms

Unit Testing

1996 - 1998

Master's Degree in Computer Networking

Hanyang Graduate School - Seoul, South Korea

1992 - 1996

Bachelor's Degree in Electronic Engineering

Hanyang University - Seoul, South Korea

Collaboration That Works

How to Work with Toptal

Toptal matches you directly with global industry experts from our network in hours—not weeks or months.

1

Share your needs

Discuss your requirements and refine your scope in a call with a Toptal domain expert.
2

Choose your talent

Get a short list of expertly matched talent within 24 hours to review, interview, and choose from.
3

Start your risk-free talent trial

Work with your chosen talent on a trial basis for up to two weeks. Pay only if you decide to hire them.

Top talent is in high demand.

Start hiring