Andras Radics
andras@andrasq.com | 508-520-3523 | linkedin.com/in/andrasq | github.com/andrasq
SUMMARY
Lean, fast, high throughput, low latency microservices architecture and development: low
latency high volume data pipelines, large datasets, storage schema design and query
optimization, multithreaded and distributed computation, message queues, async and evented
programming, efficiency, server capacity planning.
Expert Node.js/typescript, SQL, MongoDB, Git, Jira, Scrum/Kanban, unit testing, REST Apis,
Linux/C/Unix. Oral description into completed, tested, deployed product, I get it done.
Enjoy thinking up ways to make code run 10x faster; node.js collaborator.
If you're using setImmediate(), ioredis or mysql2, you're using some of my code.
EDUCATION
-
BS Electrical Engineering and Computer Science (OS/compilers/graphics - UC Berkeley)
-
MS Computer Science (architectures/parallelism - Stony Brook University)
EXPERIENCE
Staff Engineer, Shopify / 6 River Systems, Waltham, 2019-2023
Key member of squad working on the performance-critical microservice selecting the warehouse
orders to pick next. Helped shape and redesign the internal architecture, code reviewed,
mentored. Go-to resource for nodejs and system performance questions.
Node.js, TypeScript, Jira, Github, Kubernetes, GCP, Jenkins, Circle-CI.
-
Multithreaded the nodejs microservice, did in-depth code reviews, mentored junior developers,
refactored and sped up code.
-
Ported app with minimal source code changes from LoopBack2 to an application framework built
around Nest.js/express, wrote LB2-workalike Postgres ORM and fast Bunyan-workalike logger.
-
Improved google pubsub subsystem to more efficiently filter and extract relevant messages,
sped up job scanning and job selection,
unified and normalized job selection filters for simplicity and improved metrics gathering,
revamped test scaffolding to allow more production-like tests, implemented new features.
Open Source Developer, AndrasQ, 2013-current
Authored and maintain open source packages, including best-of-breed or one-of-a-kind utilities.
Faster setImmediate PR merged into node-v6.3.0. Node.js, Github actions.
github.com/andrasq
-
The 3x faster qtimers speedups were accepted as a pull request and appeared in
node.js 6.3.0, and were backported to older versions.
-
Best of breed: qtimers (now part of nodejs), qlist (used as denque in ioredis,
mysql2 and mariadb), qheap, qlogger, qprintf, phpdate-js, uuid-quick, microreq,
google-custom-metrics, prom-pushgateway, microrest, qtimeit, q-then, qrusage,
tzinfo, ieee-float, qrpc.
-
Larger projects: extensive test mocks library qmock, fast RPC library qrpc, full
middleware framework microrest, job runner service kqueue.
-
Open sourced the Quicklib toolkit, a PHP library for moving and processing large
volumes of data, and for building very fast web services. Components for fast data
transport, pub/sub messaging and job queue, REST applications, php co-processes, db
access, logging, caching. github.com/andrasq/quicklib
Principal Software Engineer, Kinvey, Boston, 2014-2019
Expert node.js architect responsible for the database and analytics microservices
of a BaaS (Backend-as-a-Service) product, connecting to MongoDB, Redis and MySQL.
Refactored and multithreaded service for major performance improvements, became the
in-house MongoDB performance expert.
Node.js, Nginx, MongoDB, MySQL, Jira, Github, AWS, Prometheus, Stackdriver, Docker,
Kubernetes.
-
Refactored data shipping to eliminate event loop blockage, implemented custom
db connection handling to not block queries, added first-come first-available
fair share multi-tenant query scheduling.
-
Reinvented the db data to JSON conversion resulting in 5x faster data delivery
with 4x less cpu used compared to JSON.stringify(BSON.deserialize(raw)).
-
Multithreaded the data microservice to utilize all cpu cores, with proper
start/stop and signal delivery semantics, then spearheaded the effort to halve
the number of assigned AWS servers.
-
Analyzed data flow and optimized end-user data delivery for a 65% cpu savings.
-
Transitioned code repositories from SVN to Git.
-
Go-to person for investigating server glitches, mongodb performance anomalies,
and app performance bottlenecks. Devised appropriate indexes to help slow
mongo queries, consulted for server capacity planning.
Principal Software Engineer, Netprospex, Waltham, 2013-2014
Tech lead responsible for the external-facing SaaS REST API built on an OO MVC
framework. Designed, ticketed and led team in building new microservice, and
successfully deployed to production.
Built on CentOS Linux, PHP/Apache and MySQL/Solr.
-
80/20 development/management. Supervised the project team (2-3 people):
wrote and assigned tickets, pointed work, led daily scrum, monitored
progress, and code reviewed changes. Helped project manager with triage.
-
Built a data transfer service to interface to Marketing Automation APIs
(SOAP and REST), and read and write data in a uniform, platform-neutral
format. The service presents a very simple file-based interface, is
highly modular, transfers data asynchronously, notifies via callbacks, and
makes progress status available as it goes. Wrote adapter modules for
Eloqua, Marketo, Silverpop, Salesforce, NetSuite, and a high troughput
adapter to the in-house database.
-
Rewrote the API boostrap code and transitioned it off PHP Zend onto a light
weight MVC micro-framework for a 3x speedup in call times (.15 sec down to
.05)
-
Built an external facing micro service to re-deliver results from internal
services. OAuth authentication, REST calls and responses, JSON data.
-
Derived scalability profiles, both analytical and empirical, for server
and capacity planning.
Senior Performance Engineer, Blue State Digital, Boston, 2008-2013
Part of Agile dev team coding O-O PHP with PHPUnit unit tests on a home-grown
framework. Wrote and enhanced the queueing system used to run millions of
off-line tasks daily for hundreds of client sites. Was the go-to guy for
optimization, getting 10x-25x speedups in several cases. Helped coders with
mysql schema design and query speed, php performance, space efficiency.
Consulted with sysadmins on server capacity and application impact. Coded
custom PHP extensions in C for performance boost. Technology included Apache,
Memcache, MySQL, ORM, SOA, Cassandra, Redis, RabbitMQ, AMQP, Chef, Logstash,
Capistrano, StatsD, Graphite, Nagios, Ganglia, Cacti, git, Smarty, XML, SOAP,
JSON, AJAX, PHP, PHPUnit, MySQL, InnoDB.
-
Wrote a queueing system for executing asynchronous procedure calls, each
in the calling client site context. Devised a fair scheduling algorithm
that ensures progress by all task types from all client sites even during
large backlogs. Designed for unlimited scaling across multiple servers,
multiple daemons and multiple databases, the implementation easily
sustained production rates of millions of tasks per day.
The queue was still running 10 years later.
-
Added batched running to the queueing system, making it suitable for
high-throughput message processing. Like RabbitMQ, but without rabbitmq's
limitations: with backlog tolerance, automatic load balancing, built-in
load throttling, graceful degradation, fast restarts, loss-free message
delivery, fair scheduling, limitless scaling, autonomous servers,
unlimited message types.
-
Devised numerous sql query speedups by reformulating the query, or changing
or adding indexes, or by using a different approach. 4x speedup saving
mysql results to file with a custom PHP C extension. 5x speedup inserting
objects into mysql by automatically combining the data into a single query.
-
20x speedup to all-points closest pairs geospatial search by implementing
matching with a K-D tree written in C instead of using the database.
-
25x speedup to matching records search by moving set-intersection test
out of the mysql query into a C utility.
-
10x speedup to db record insertion loop by 25x speedup to the data
preprocess portion and rewriting the ORM insertion code for another 4.5x.
-
Developed the timezone conversion functions that needed
precise mathematical correctness.
-
Developed classes to parallelize php code and support cross-thread
method calls, effectively making php multi-threaded. Used the classes
to speed up nightly batch scripts.
-
Wrote a small shared caching class 10x faster than localhost memcache.
-
Sped up ORM object selection 2.5x without altering semantics (and identified
another potential 2x with minor semantics changes) by tracing the code and
rewriting inefficient constructs.
Contract Software Engineer, Freelance, Boston, 1994-2008
Freelance contract programmer, primarily projects for one long-term client,
with occasional small projects on the side. Wrote the code that runs a chain
of photo kiosks in malls, restaurants and amusement parks across the country,
including the Cambridge Galleria and the Museum of Science. Most projects
involved image processing, human-computer interaction, image presentation and
image input/output. Persuaded company to pick Linux when transitioning away
from DOS, and took the lead in porting the code to Linux. Tools used included
C/DOS, C/Linux, Berkeley make (pmake), Perl, RCS, X11 X Windows, PHP, MySQL,
ClearCase, C++/Solaris.
-
Refactored the monolithic application into reusable modules, organized the
software infrastructure, and recombined the resulting components into two
new products.
-
Wrote a face morphing special effect and a utility to parametrically morph
portraits into caricatures. The morph was done on a triangle-by-triangle
basis on a triangulated polygon mesh, with the per-pixel color value
interpolation reusing the principles of the image rotation utility written
earlier.
-
Led the port of the photo kiosk application from DOS to Linux. Identified
areas of incompatibility and developed DOS work-alike functionality to
ease the transition (X11, getkey(), extended memory, frame buffer, chvt,
and porting the MS nmake makefile to Berkeley make.)
-
Interfaced Linux to various video capture cards, currency validators and
custom i/o cards using proprietary, OS-supported or home-grown drivers.
-
Wrote a Linux kernel device driver for a USB video camera. The driver had
to read the raw YUYV samples, recover the adjusted RGB data for each pixel,
and return the RGB image data within 1/30th of a second.
WHITEPAPERS
A sampler of my writing, more at github.com/andrasq/node-docs:
ACRONYMS
I've worked with node.js npm Typescript JavaScript Jenkins Travis-CI Coveralls.io Codecov
github OO OOP OOD TDD AWS Kubernetes Docker express mocha mocks unit tests
C C++ Unix LAMP Linux Apache Nginx MySQL MongoDB Redis ORM PHP PHPUnit Memcache
Capistrano Logstash PubSub AMQP Chef Nagios Ganglia Cacti Prometheus Stackdriver StatsD Graphite
Jira git CVS SVN Mercurial Perl sh make Smarty XML SOAP JSON AJAX pmake ctags gdb awk sed bash DOS
RCS JPEG ppm/pnm TIFF GIF HTML X11 XFree86 FreeBSD DSP LZW 80x86 i860 SPARC
SunOS Solaris AIX VAX/VMS Alpha TeX nroff
PERSONAL
I've been into computers since forever; you could find me in 8th grade
dragging around a book on Boolean algebra. I build my computers from parts,
ride my motorcycle all year round, play serious badminton, and have
bicycled from San Francisco to New York by way of Seattle.
Bumper sticker: Linux is Unix. GNU's Not Unix.
This document can be found on-line at aradics.com/andras/resume.html.
Copyright (C) 2006-2023 Andras Radics.
Last updated 6/22/2023.
|