Category Archives: Engineering

Putting Pants on a Python

python pants

Most of the code that keeps AddThis going is JavaScript in the browser or Java on our backend servers. However, supporting the infrastructure is a fair amount of Python “glue” code. This glue covers everything from simple “scripts” to provisioning servers, analyzing DNS zones, migrating containers, generating dashboards from service discovery data, and CI jobs that build more CI jobs.

Continue reading

Announcing New Open Source Libraries: Cronus and Hermes


We are pleased to announce that we have open-sourced two additional AddThis libraries. Cronus is a lightweight cron Java library. Hermes is a programmable page speed measurement tool. The libraries have been released under the Apache License 2.0.


Cronus accepts Vixie Cron syntax and schedules actions for execution. The cronus implementation is relatively small at under 5,000 lines of code. Much of its functionality relies on the excellent JSR 310 library in Java 8 to perform date/time calculations.

Continue reading

Machine Learning – Scale is Relative


Yesterday, Amazon Machine Learning was announced on the AWS Official Blog. It’s great to see more tools developed to improve the data science workflow. It’s enabling the Web to be much more personalized. Nvidia is doing it with DIGITS and Matlab has a toolbox too. The growth of tools supporting data science makes personalization better, more accessible to companies, and easier to scale. The better the tools, the better we can do on the job. But – as always – we need to keep the whole picture in mind and watch the trade offs.

Continue reading

Reliable, Low-Latency Request-Reply with ZeroMQ

zeromqZeroMQ is a cross-platform, cross-language library that provides high level wrappers around traditional low level network sockets. Some of its most helpful features include: sockets that automatically reconnect after connection failures, making hostname connection strings easy to work with, and providing sensible defaults for buffer sizes and other parameters. However, ZMQ goes a step further than just simplifying initialization and error handling. Instead of the standard send and receive socket functions, it supports several types of socket patterns that restrict which types of sockets can pair, send, receive, as well as the sequencing of send and receive calls. Continue reading