LambdaCron – Scheduling MediaMath’s Financial Platform

// 10.30.2017 // Open Source

MediaMath’s Financial Platform team (FINP) is responsible for building a scalable, stable and secure platform for management of all internal financial data. We serve as the authoritative source of record and support all financial processes (e.g., billing, forecasting, compensation, auditing, etc.) and provide internal clients with access in support of their reporting and analysis needs. In the last year, the FINP has been renovating its infrastructure moving to a service-oriented architecture and joining the trend of serverless architecture. In our thinking, using a serverless architecture allows for the team to reduce daily operations and spend more time in business-related work. […]

Released: MediaMath iOS Event Pixel SDK

// 06.13.2017 // Open Source

A simple framework for firing MediaMath Pixels Until recently, we offered a native objective-C iOS library for firing MM Event pixels. This worked well for many of our clients but had one key shortcoming. AFNetworking provides indispensable high-level network abstractions for many iOS developers. However, developers often use their own, potentially incompatible, versions of AFNetworking. This introduced an overhead of maintaining a library with all versions of AFNetworking. There was a simpler solution. Get rid of AFNetworking. The new iOS SDK is: 100% native 100% open source -100% AFNetworking It also offers some nifty new functionality over the previous release. […]

Apache Flink® at MediaMath: Rescaling Stateful Applications in Production

// 06.13.2017 // Data Science

This article was originally posted by DataArtisans, on June 12, 2017. Every once in awhile, Amazon Web Services experiences a service disruption, and millions of internet users around the globe panic as their favorite apps and websites cease to function. A short time later, the issue is resolved, and it’s back to business as usual. Most people move along with their day, eventually forgetting the micro-crisis altogether. But it’s not so simple for the software engineers whose companies are built on top of AWS and who are responsible for recovering from the disruption. Such was the case for MediaMath, a programmatic marketing company […]

Queryable States in ApacheFlink – Part 2: Implementation

This is part 2 of the blog Queryable States in Apache Flink. In the previous blog, we saw how Apache Flink enabled Queryable States. In this part, we will create a Streaming Job with Queryable States and create a QueryClient to query the state. I assume that Flink is already installed and setup. If not you can check out my earlier blog post on installation here. I will be using a Tumbling window in this example, to read about Windows in Flink, please read this blog post. All the code used in this blog post will be available on my GitHub. Creating the Pipeline Let […]

QueryableState in Apache Flink – Part 1

QueryableStates allows users to do real-time queries on the internal state of the stream without having to store the result on to any external storage. This opens up many interesting possibilities since we no longer need to wait for the system to write to the external storage (which has always been one of the main bottlenecks in these kinds of systems). It might be even possible to not have any kind of database and make the user facing applications directly query the stream, which will make the application faster and cheaper. This might not be applicable to all the use […]

A Tale of TwoTails – Mutual tail recursion in Scala

TwoTails is a compiler plugin written to add support to Scala for mutual tail recursion. While Trampolines or trampolined style recursion solve the direct need, they require explicit construction by a developer and add overhead in the form of additional data structures. Unfortunately, building a “native” solution directly into Scalac without using trampolines is not a straightforward task, even with basic tail recursion. In the latest version, a second compilation scheme has been introduced solving an issue peculiar to the JVM which the first scheme was not able to properly address. I’ll discuss both the motivation behind this new scheme […]