Post Job Free
Sign in

Project Developer

Location:
San Jose, CA
Posted:
January 30, 2013

Contact this candidate

Resume:

A home of cross-platform portable software development

George Y.

SENIOR SOFTWARE DEVELOPER

abqedy@r.postjobfree.com

Phone: +1-408-***-****

San Jose, CA

SUMMARY

Over eighteen years of commercial software development experience, mostly in Linux/cross-platform environment, and in embedded environments.Over two years of Android development experience, several released applications available on Amazon and Google Play.Proficient in architecture design, software development, deployment, maintenance, and project management.Developed portable, high-available networking UNIX and Windows server applications.Designed and developed programming languages, bytecode compilers and VMs to run them.Ported existing software to different operation systems, and hardware platforms.Reviewed existing software for potential patent and licensing issues.Designed and analyzed (crypto, security, efficiency) protocols.Binary-level executable analysis, and reverse engineering experience, including Windows and Linux executables, kernel drivers, and non-x86 executables.Good communication skills, including outside communications with customers. Team leader experience, able to work under minimal supervision.No issues with travel, have visited partners and customers in different states and overseas. Speak Russian and Ukrainian languages.U.S. citizen, authorized to work for any U.S. employer.

SKILLS

C, C++, Perl. Proficient with Nokia (formely Trolltech) Qt framework. Those are my tools of trade. Most of the time I write performance-critical software which needs to be portable between Linux, FreeBSD, Mac OS X and MS Windows.Expert knowledge in porting existing software to different compilers, operating systems and hardware platforms, including the emerging ones. I have done a lot of it, and bugs in compilers which generate invalid Assembler code, do not scare me.Reasonable experience with PHP, HTML/CSS, basic SQL – good enough to implement a simple website, skin-based UI, Web automation or client-server communications.Reasonable Android development experience using Java and C w/JNI. Has developed and released several Android applications; two are available at the Google Play and Amazon AppStore.Experienced in using SDL and FFMpeg libraries to play and export video files.Good experience in reverse engineering and binary analysis, including non-x86 architectures. This includes malware analysis, and developing decompilers for the bytecode languages (to simplify automatic malware analysis).Expert knowledge in TCP/IP networking applications, building high-available servers, and boosting the application network performance. Familiar with most well-known Internet protocols.Familiar with cvs, subversion and Mercurial source code versioning systems.Proficient in using cross-compilers for generating stable, reproduceable builds covering all necessary architectures, including creating Windows, FreeBSD and OpenBSD builds on a Linux machine.Expert knowledge in Linux (OpenSuSE, RedHat etc), using Linux as everyday OS at home and work for the last ten years. Have enough knowledge and experience to install FreeBSD, OpenBSD, NetBSD, Mac OS X, Microsoft Windows, Solaris, HPUX and other operating systems, and administer them for development or QA purposes.Familiar with development boards, U-Boot, TFTP, NFS and other aspects of embedded development. Know how to clean up fans or replace memory chips.Familiar with OpenSSL toolkit, used it for securing proprietary protocols, certificate-based authentication, CA and certificate management.Extensive use of cross-compilers (gcc-based), virtual machines (VMware or kvm-based) and build scripts/build systems to simplify simultaneous support for multiple operating systems running on different hardware architectures.

EMPLOYMENT HISTORY (see also )

July 2008 – present

Senior Unix Software Developer at, Santa Clara, CA

Developed the Android bytecode analyzer and the Android malware detection engine while working closely with the anti-malware research team. Created the anti-malware SDK for Android platform which used Java and C modules accessed through the JNI interface.Provided development support for OEM partners who integrated BitDefender technology into their products. Suggested the best integration scenarios to fit the partner requirements, explained the SDK functionality, and worked closely with partners development teams or outside companies. Partners varied from small startups to large multinational companies, and development support included e-mail communication, phone calls, using partners’ bug tracking system, and on-site visits.Worked directly with different development teams in company headquarters (Bucharest, Romania) to help finising various important tasks. This includes both everyday email and phone communications, and traveling to the company Bucharest office 3-5 times a year. Taught the developers the best practices for portable programming, and enchanced the teams’ productivity by suggesting and helping with deployment of different tools, such as cross-compilers to make builds faster, easier and more reliable.Created the module which offloaded part of anti-virus engine functionality on a video card (GPU) using OpenCL for compatibility between NVidia and ATI/AMD video cards.Developed a GUI anti-virus application to scan USB drives. The application was using Qt 4.Implemented a portable ICAP anti-malware server. The multithreaded server was implemented using epoll/kqueue and handled 1500 concurrent connections using four worker threads. The project also required implementing test ICAP client which was used to test both the functionality and the performance of the product. Both the server and the client were written in C++, and supported Linux and FreeBSD.Participated in code reviews to ensure that the company products do not use the third party code which is licensed under the terms which would impose undue burden on the company. Helped to find the original library license if necessary, to interpret what kind of burden it creates for the company and whether it is acceptable, and to find the suitable alternatives for those libraries where the license terms were confusing or not available.Ported the anti-malware and anti-spam engines to MIPS platform, supporting 32, n32 and 64 ABI with minimal code changes. Involved writing MIPS Assembly code, and debugging porting problems using MIPS debugger in Assembly, as the environment had no debugging information.Ported the anti-malware engine to x86_64 Linux while using the same anti-malware database created for x86_64 Windows. Linux and Windows use different calling conventions on x86_64, so this required research, writing and debugging stubs in x86-64 Assembler.Ported the anti-malware engine to ARM platform, supporting LE ARM with OABI and EABI. Involved writing code in ARM Assembler, debugging the machine code without symbols loaded, and writing automatic tools to find the part of the source code where the crash happened.Participated in patent reviews to ensure that the company technology does not infringe specific patents.Rewrote the mirroring application written in PHP to work on PHP5, support Curl and work on MS Windows.Participated in creating the new portable API for the SDK. Ported the existing BitDefender SDK to Linux/Unix, including x86_64 build. The goal was to keep the code portable between platforms, including future platforms.Wrote and maintained the developer documentation for all the SDKs. The documentation was written for OEM partners, and included generic SDK information, HOWTO section (“If you want that, here’s how to do it”), and the API reference. Carefully explained all known problems the partners might get into during the SDK integration, based on my past experience. The total size of all the documentation written was over 400 pages.Implemented a portable Client-Server anti-malware SDK, including the documentation and examples. The SDK could work as either multithreaded or multiprocess mode. Both the server and the client were written in C++, and supported Linux and FreeBSD on different hardware architectures.Designed the API, wrote and maintained the developer documentation for Anti-Spam, Anti-Phishing and Parental Control SDKs.

Aug 2005 – May 2008

Senior Unix Software Developer at, San Jose, CA

Worked closely with multiple development teams of Kaspersky Lab OEM partners to help them to integrate our technology into their products. Provided development help and support in form of e-mail communication, source code review, remote debugging and on-site visits when necessary.Developed a kernel module for Mac OS X 10.4+ to provide on-access scanning capatibilities for Kaspersky Anti-Virus for Mac. This required extensive studying of existing MacOS X documentation and available source code, and a lot of experimental work. Provided the kernel module, and the user-level interface library with clean API to communicate with the kernel module. The target module worked on both PowerPC and Intel-based Mac’s. The module was written in C++, the userspace library was written in C++.Reviewed Kaspersky implementations, and worked with the legal team to form a legal opinion confirming that the product implementation does not infringe a specific patent. Educated the developers about patents, how to read them and and how to make sure the implementation does not infringe a patent.Ported the anti-virus engine to Mac OS X, and PowerPC CPU. A challenge was to use a single blob of precompiled machine code both on PowerPC Linux and PowerPC Mac OS X, which use different calling convention ABIs. This was solved by learning the PowerPC Assembler language, and writing necessary stubs which handle the difference in calling convention.Ported the anti-virus engine to Cavium MIPS arhitecture, and then to a proprietary partner OS. The challenges were: completely new architecture the engine has never supported, the tight schedule for the project, and the undocumented and non-standard toolchain. Created a workaround to handle calling conversion between ABI and non-ABI calls as well as between o32 and n32 ABI calls, which required knowledge of MIPS Assembler language. After studying the toolchain, created a script to make the toolchain standard with no impact to the Partner projects, adjusted to a non-standard toolchain.Ported the anti-virus engine to AMD x86_64 CPU. Wrote a patch to gcc compiler to generate warnings in appropriate places, which greatly speed up the porting process.Modified a gcc compiler source code, for gcc to be able automatically generate byte order-independend machine code. This was intended to easy the porting of the software between little-endian and big-endian hardware platforms. The integration patch was written in C.After talking to partners’ software developers who used our technology, created a new API for Kaspersky SDK, and completely rewrote the SDK documentation for developers. Both SDK and documentation addressed most issues the partners complained about. After the new version was released, the number of SDK integration support issues decreased dramatically, and allowed more efficient use of company resources.

Feb 2001 – Aug 2005

Senior Software Developer, Product Architect at, Moscow, Russia

Designed and developed an automate software build system, which handled the whole UNIX software building process for all Kaspersky Lab Unix products. The system handled everything from the checking out the application source code to the producing ready-to-install packages. The system supported all UNIX flavors we needed to use, which included several Linux and FreeBSD distributions, an OpenBSD distribution, different versions of Solaris (x86 and Sparc), and HP-UX. The system was designed as a central web server (apache) with database server (mysql), a set of scripts written in PHP and C++, and a client script written in Perl. A web management console was implemented for release engineers. The system supported builds using any compilers available, including gcc cross-compilation, native compilation, and compilation in VMWare virtual machines.Developed generic solution for running Kaspersky Anti-virus engine on non-x86 hardware platforms. The challenge was to implement an x86 CPU emulator, which would be able to execute an x86 machine code, used in the anti-virus database. Also developed an ELF object file loader to support replacing x86 code modules with native modules. The emulator was written in C++, the ELF loader was written in C. Also Perl was used extensively to parse and prepare x86 data units.Designed and developed a Kaspersky Antivirus on-access file monitor for Linux and FreeBSD. The software purpose was to ensure that only the files which have been scanned by the anti-virus are accessed, so all the file operations were intercepted, the virus check was done, and only then the file operation was allowed to continue (or not). Developed both the kernel part (a kernel module), and a user-space daemon, which communicated with it through the /proc interface. The kernel module was written in C, and the user-space daemon was written in C++.Analyzed and developed two decompilers for some proprietary BASIC-type languages. The purpose for these decompilers was to recreate the source code from the bytecode which would have the same functionality as the original (with lost symbol information, of course). This source code was used by the anti-virus experts to analyze the malware, as well as by automatic malware analysis system. The challenge was that neither the source code, nor the bytecode reference was available. Therefore a lot of analytical work was done, including disassembling with IDA and SoftIce, and writing complex Perl scripts to analyze produced data. Then the decompilers were developed using portable C++.Designed and developed Kaspersky Anti-Virus for Sun Messaging Server. Very strict timeline, and undocumented proprietary integration protocol, which needed to be decyphered, made it an interesting project. Solved as two-computer solution with two networking daemons on both ends, a protocol agent implementation running on Sun Sparc, and the AV engine on a Linux end. Everything was written on C++ except the agent, which was written in plain C.Designed and developed Kaspersky Anti-Virus for HPUX Openmail. There was no official way to integrate the anti-virus with this product, so the way was found utilizing the ELF format knowledge, and binary audit tool (IDA). Solved as two-computer solution with the integration shared library on HPUX end, and a networked AV engine on a Linux end. Networked AV engine was written on C++, and the library was written in C.Ported several modules, including the anti-virus kernel, from MS Windows platform to several hardware and software platforms, including x86 (Linux, FreeBSD, OpenBSD), Sparc (Solaris), HP-UX, and ARM (Linux). The challenge was that the original code was written without having portability in a mind, so a lot of code was simply non-portable, and had to be rewritten. Developed a compatibility library, which goal was to simplify the porting process. Wrote the documentation, and made a presentation for company software developersabout portability issues, with instructions how to write portable code.Supervised a team of four Unix software developers and a dedicated QA engineer, analyzing the product requirements, preparing design documents, developing the components architecture, creating and maintaining project plans, and writing reports using MS Project and MS Office/OpenOffice. Made decisions regarding tools used for development, external libraries and tools.

Feb 2000 – Feb 2001

Software Developer at, Kiev, Ukraine

Led the team of developers for the fast and secure credit card transaction server for a large financial customer. The server worked with AmEx terminals over a TCP/IP network using the ISO 8583 protocol. Designed and developed the server part of the client-server solution, using C++ as a primary language. Implemented a parser and generator of ISO8583 messages according to ISO 8583 standard. Implemented a network stack, socket pool and connection manager. Also developed a test AmEx terminal, using Perl, to simplify automatic testing process. The application primary platform was Sparc Solaris, but as the application was written portable, it was possible to run the QA on Linux, saving the company money and the time.Designed and developed an object-oriented Java-like language compiler, and its bytecode interpreter, so it was possible to distribute just a compiled bytecode, and not the source code itself. The purpose of language was to enable the client-provided MS Word-like application with the ability to execute the scripts created by a user. Because the most users of the application were not programmers, the main goal of creating such a language was to be simple, secure and powerful. The goal was reached. The language compiler was developed using flex/bison as grammar parsers, and the rest of code was written in portable C++, so it worked both under MS Windows and UNIX flavors. Also the extensive use of Perl scripts to generate the language class templates and language documentation allowed saving the project time and cost.Ported several complex Lotus Domino Windows plug-ins to Linux, Solaris and AIX OS. The challenge was to learn the Lotus Domino SDK, and the differences between Windows and Linux SDK very quickly because of the tight project schedule. The plugins were written in C and C++, with extensive use of threads and IPC objects (semaphores and shared memory).

Jun 1997 – Feb 2000

Software Developer at, Lviv, Ukraine

Designed and developed the software to run the company paging communication system. The software included a gateway between an SMTP e-mail server and a pager (with built-in SNPP protocol support), and an automatic consumer roaming system. Everything was done on Linux platform, using OpenSSL certificate management to increase security. The application was written in C++, and the additional hook scripts were written in Perl.Designed and developed a MS Windows MFC program to control the Motorola CNET device (hardware TNPP-compatible POCSAG coder and transmitter) through a COM port. Implemented a complete TNPP protocol specification, according to documentation provided by Motorola. After the migration to Linux had started, the application was ported to Linux using Trolltech Qt. The application was written using Visual C++ and MFC, and then ported to Linux using Trolltech Qt and gcc.Designed and developed a Linux application to add additional services for our customers: DTMF paging, and Voicemail. Implemented the hardware driver using the Motorola-provided special hardware and specifications, the Voicemail database using MySQL, and the administrator panel, using Perl and apache. The application was written on C++, the driver was written on plain C.Created a hardware POCSAG protocol encoder, designed and developed a DOS and Linux device driver for this encoder. The purpose of application was to create a POCSAG-compatible stream using serial port, to manage a hardware radio transmitter. The challenge was to maintain very strict timings. The software was written on C for DOS using Watcom C, and later rewritten for Linux using gcc, and a Linux kernel module.Created a hardware POCSAG signal receiver, designed and developed a software decoder and transmitted message integrity checker. This made the transmitting system fail-safe. The receiver was developed for MS Windows 95, and written using Visual C++ with MFC.

Jan 1996 – May 1997

Software Developer at Eles, Ltd, Lviv, Ukraine

Developed a set of libraries to handle image processing and conversion in the embedded hardware.

May 1993 – Dec 1995

Software Developer at Lvov Attraction, Lviv, Ukraine

Extended the functionality of existing x86-based arcade machines; fixed firmware bugs, added Ukrainian localization and reprogrammed it to accept new Ukrainian currency.

FREELANCE PROJECTS

Those projects were done as part-time work, in the areas where I felt the necessity to boost up my skills or to solve an interesting technical problem.

2010-2012

C++/Jave development at

Participated in designing the cloud application architecture. Suggested some key features, created and maintained design documents. Used my general knowledge of client-server architecture, Unix networking, and OpenSSL.Designed and developed the networking server which tracks different cloud components, helps them to find each other, retrieve the information about other connected components, and initiate inter-component communications. The server supports up to 50,000 simultaneous connections, uses client and server certificates for mutual authentication, uses TLS for encryption, and will support scaling. The server was written in C++, used epoll and OpenSSL.Designed and developed the certificate authority which handled all necessary certificate generation for every component. The authority included a set of PHP scripts to automatically generate and approve certificates for various components, as well as a web site to manage the authority remotely. Besides the certificate generation, the web site included the user roles, and the management interface. Used PHP and openssl with some AJAX and CSS.Troubleshooted and fixed the Java connector part to support client certificate authorization.

2008-2011

Python porting / Qt GUI development at Lexam Research

Ported a huge (over 120 widgets, dialogs and windows) user interface application from Python to C++. The main challenge with the port was knowledge of Python, which I had to learn. The functionality was also extended as requested by the customer. The project was written in C++ using Qt 4, uses gcc on Unix, and MinGW and NSIS installer on MS Windows. Perl scripts were also created to convert a large number of dialogs into UI files. A set of build scripts has been created to build both Windows and Linux version directly from Linux workstation using cross-compiled MinGW compiler and NSIS for Linux.

Summer 2009

Networking / ICAP Linux development at

Created an ICAP server for intercepting the HTTP traffic to detect the leaked information. The server supported a requested subset of ICAP commands plus mandatory minimum required by RFC. The server passed the content to an external shared library using the agreed upon interface which was discussed with, and approved by the company. The server supported 204, keep-alive and other advanced options, but provided workarounds for the ICAP clients which did not support them. Written in portable C++, ICAP server was developed primarily for Linux, but should work on any other platform with pthreads.

2006-2009

GUI / Qt development for Linux/Windows at

Ported the plasma engine simulation toolkit to Qt4 and Linux. The main challenge was to port the graphics code, which used Dislin graphics library. Dislin was a closed-source library with a sparse documentation, which did not document its internals, so some black box testing was required. The project was written in C++ using Qt 4. The project has been completed with two people, another person working under my supervision.Implemented the complex GUI to a scientific application. The GUI was mostly used on Microsoft Windows, but since there was a possibility to run the application on OS X the Qt Toolkit was used again. The GUI was very complex, having more than 60 dialog windows, and a dozen of custom widgets, so the proper architecture and separating common code was a must. While the GUI itself wasn’t a major challenge, the number of windows, and their combinations, required a lot of efforts to keep the code base maintenable, since the whole project has been done by one person. The expression evaluator module required good knowledge of bison and flex as well as their integration into C++ language, and into qmake build system. The project was written in C++ using Qt 4, uses gcc and rpm on Unix, and MinGW and NSIS installer on MS Windows. A set of build scripts has been created to build both Windows and Linux version directly from Linux using cross-compiled MinGW compiler and NSIS for Linux. The project took approximately one man-year of part-time work.Ported the physics simulation toolkit to Windows/Linux/MacOSX port using Qt4. The original source code was written in C++ using xlib X Window functions, so X Window knowledge was required to complete the port. An imporant requirement was to provide the source code compatibility with applications using the toolkit.

2006-2007

System library development at

Created a generic abstraction interface to provide the company’s application a consistent interface to intercept and sometime alter the system calls across Linux operating systems. The goal was to add extra functionality to any application without having access to the application source code. This new functionality allowed the application designed to manipulate local files, to access and manipulate files and other objects on remote computers. The project required deep systems level knowledge to overcome implementation differences across multiple operating systems. The project was coded in C/C++ using GCC and has been tested on Linux Red Hat 7.3 and above.Created a method to intercept and change the Win32 API calls for a specific Windows binary. The goal was to add extra functionality to any application without having access to the application source code, or patching it. This new functionality allowed the application designed to manipulate local files, to access and manipulate files and other objects on remote computers. The project required deep understanding of PE files format, Windows system calls and good knowledge of x86 Assembler to write a loader and to debug problems. The project was coded in C++ and x86 assembler using mingw and MSVC, and supported Windows 2000, XP and 2003.

2006-2007

GUI / Qt development for Windows at

Developed a GUI according to the draft specification. The company had to make the product available on a very short call. The goal was to develop GUI for the data processing library according to the API provided. While the GUI itself was not that complex, requiring only several custom widgets and had less than ten total windows, the very short deadline was a challenge – five calendar days (with two weekend days) for the whole project, including QA and integration. The development was done on Linux using Qt4, and additionally tested and debugged on Windows. KDevelop and Visual C++ were used as IDEs. The project was finished on time.

OPEN SOURCE PROJECTS

The author and the developer of following Open Source projects, which are freely available:

is a free open-source Qt/KDE based viewer for CHM (Compiled Help Manual) files, which has a lot of unique features, including tab browsing. It is the only CHM viewer, which supports KDE natively. Stable, mature version, started in early 2005. Successfully ported it to a pure Qt4 application, without using qt3-support, in 2007. Released under GNU General Public License. is an open-source Qt based lyrics editor for Karaoke songs in popular formats. It used SDL and FFMpeg to play music files, and export the lyric videos. Released under GNU GPL Open Source License., open-source Media Center. This is a full-feature cross-platform media center application, which is completely open-source. Developed the part responsible for playing karaoke, and showing the synchronized lyrics.Canon PIXMA MP210 scanner backend driver for . This is an open-source scanner driver for PIXMA MP210 scanner, created by reverse engineering the USB protocol between the scanner and Windows PC. The protocol was captured under Microsoft Windows XP using USBTrace, then studied utilizing my USB bus knowledge, and the driver was written in C according to SANE tcejorpcode guidelines. Used SysNucleus USBTrace version 2.0, and gcc as C compiler. Was completed in September 2007, and released under GNU GPL Open Source License.. This is an open-source IRC client-side library, which handles everything someone needs to build their own IRC client or bot. Stable, mature version, started in 2004 and completed in 2005. Released under GNU GPL License.

PROFESSIONAL CERTIFICATION

Certified by in 2004 in more than 40 tests, including:

Master C/C++. Passed the C Programming, C++ Programming, and C++ Fundamentals tests.Master Perl. Passed the Perl test with the highest score possible - 5.0.Master in UNIX development. Passed the Linux Programming, UNIX Programming, and UNIX Korn Shell Scripting tests.Master in web server development. Passed PHP 4, ASP and CGI Scripting tests.Master in UNIX Administration. Passed Linux Administration (General and RedHat), UNIX Administration (Solaris and Solaris 8), MySQL 3.23 Administration (4.91 score), Apache 1.3.12 Administration (5.0 score), and TCP/IP Administration tests.

REFERENCES

Excellent professional and personal references available.

Search for:NavigationRecent Posts

In Re: LivingSocial class action

Help to fight Internet censorship!

ArchivesCategoriesMeta

Copyright © 2005-2013 UlduzSoft

Powered by

Copyright © 2005-2013 UlduzSoft



Contact this candidate