<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Marios Assiotis on [code, food, stuff] while(1)</title><link>https://tahinipie.com/</link><description>Recent content in Marios Assiotis on [code, food, stuff] while(1)</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 04 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tahinipie.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Retailers That Do Not Want My Money</title><link>https://tahinipie.com/posts/retailers-that-do-not-want-my-money/</link><pubDate>Sun, 04 Oct 2026 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/retailers-that-do-not-want-my-money/</guid><description>There are some retailers with physical presence I truly enjoy shopping from. Perusing the aisles of Home Depot is always fun and a good way to start a DIY project you didn&amp;rsquo;t know you needed to start. Playing with cooking gadgets and shiny pots &amp;amp; pans at Williams-Sonoma is a great way to quickly run out of counter-space. The workout clothes at Lululemon are buttery soft. And the truly helpful and knowledgeable people working at REI are always there to help fit a hiking backpack properly.</description></item><item><title>The Unbearable Weight of Load Bearing</title><link>https://tahinipie.com/posts/unbearable-weight-of-load-bearing/</link><pubDate>Wed, 08 Jul 2026 16:00:40 -0600</pubDate><guid>https://tahinipie.com/posts/unbearable-weight-of-load-bearing/</guid><description>Back in January, with the frontier models ramping up their coding capabilities, I got the itch to sit in front of a computer and start building something again.</description></item><item><title>A fully reactive ad serving platform using Scala &amp; akka-streams</title><link>https://tahinipie.com/posts/reactive-ad-serving-akka-streams/</link><pubDate>Tue, 03 Nov 2020 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/reactive-ad-serving-akka-streams/</guid><description>I wrote a follow-up on Tubi&amp;rsquo;s Ad Server build-out on our engineering blog.</description></item><item><title>A fully reactive ad serving platform using Scala &amp; Akka-Streams (Part 1: Before the Auction)</title><link>https://tahinipie.com/posts/reactive-ad-serving-akka-streams-part-1/</link><pubDate>Wed, 06 Nov 2019 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/reactive-ad-serving-akka-streams-part-1/</guid><description>I wrote a post on Tubi&amp;rsquo;s Engineering blog on how we build out our ad server.</description></item><item><title>Staying agile without Agile</title><link>https://tahinipie.com/posts/staying-agile-without-agile/</link><pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/staying-agile-without-agile/</guid><description>I wrote a guest post on Tubi&amp;rsquo;s Engineering blog on a lightweight process for managing fast moving product development.</description></item><item><title>Grandma's Famous Roast Rabbit in Wine</title><link>https://tahinipie.com/posts/grandma-rabbit-stew/</link><pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/grandma-rabbit-stew/</guid><description>My grandma is 85 years old, and somehow still manages to make me my favorite dish every time I visit Cyprus</description></item><item><title>Dubrovnik</title><link>https://tahinipie.com/posts/dubrovnik/</link><pubDate>Tue, 24 Jul 2018 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/dubrovnik/</guid><description>&lt;p&gt;I got a chance to visit Dubrovnik in Croatia during this summer vacation. I have been extremely fortunate, not only to grow up on one of the most gorgeous places on earth but also to be given the opportunity to travel quite a bit. So it takes a lot for me to admit that Dubrovnik is truly a very beautiful place, with breathtaking views anywhere you go.&lt;/p&gt;</description></item><item><title>Crispy Crunchy Airy Yummy Waffles</title><link>https://tahinipie.com/posts/waffles-waffles-waffles/</link><pubDate>Wed, 14 Feb 2018 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/waffles-waffles-waffles/</guid><description>&lt;p&gt;There&amp;rsquo;s not a lot of foods you can make that are universally adored and destined to make you somebody&amp;rsquo;s favorite person. Sweet or savory, waffles are one of those food items, even pancake folks cannot say no to! As such, I&amp;rsquo;ve been working to up my waffle game over the years. I&amp;rsquo;m proud of my waffles and I&amp;rsquo;ve even managed to scale it up and now make waffles for the entire Tubi TV San Francisco office every Valentine&amp;rsquo;s day.&lt;/p&gt;</description></item><item><title>Spark Structured Streaming at Tubi (Part I)</title><link>https://tahinipie.com/posts/spark-structured-streaming-at-tubi-part-1/</link><pubDate>Wed, 27 Dec 2017 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/spark-structured-streaming-at-tubi-part-1/</guid><description>I wrote a guest post on Tubi&amp;rsquo;s Engineering blog on using Spark Structured Streaming to power real-time data pipelines at Tubi.</description></item><item><title>RecSys 2017</title><link>https://tahinipie.com/posts/recsys-2017/</link><pubDate>Thu, 31 Aug 2017 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/recsys-2017/</guid><description>&lt;p&gt;I attended RecSys'17 for the first time this year in Lake Como. I am not really an ML practitioner and RecSys is an academic conference, so I was largely out of my element. That being said, it was extremely beneficial to be exposed to so much innovation happening in the field of recommendations.&lt;/p&gt;</description></item><item><title>Security Questions</title><link>https://tahinipie.com/posts/security-questions/</link><pubDate>Tue, 26 Apr 2016 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/security-questions/</guid><description>No, I don’t remember what my favorite vegetable was as a child.</description></item><item><title>I joined Tubi TV as CTO</title><link>https://tahinipie.com/posts/joining-tubi-tv/</link><pubDate>Sun, 31 Jan 2016 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/joining-tubi-tv/</guid><description>I recently joined Tubi TV as their first CTO</description></item><item><title>How we increased our click-through rates using bandits in Python and Redis</title><link>https://tahinipie.com/posts/bandits/</link><pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/bandits/</guid><description>&lt;p&gt;Back in the days of print &amp;amp; TV advertising, it was practically impossible to accurately measure the effectiveness of an advertising campaign. Today with digital ads we can accurately track how many people saw an ad, for how long, whether they clicked on it and if they ended up purchasing the advertised product. Given that advertisers can close the loop, it makes sense for advertising technology to try and systematically make better choices about what ads it displays to whom in as real-time as possible.&lt;/p&gt;</description></item><item><title>Rethinking online advertising by respecting the user: The load time chapter</title><link>https://tahinipie.com/posts/rethinking-ads-load-time/</link><pubDate>Fri, 30 Oct 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/rethinking-ads-load-time/</guid><description>This is the first installment in a series of posts detailing the steps we are taking to make Imprint a pleasant and non-intrusive online advertising experience</description></item><item><title>JayBird BlueBuds X pseudo-review</title><link>https://tahinipie.com/posts/jaybird-review/</link><pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/jaybird-review/</guid><description>I am not really a product reviewer, the things that matter to me are rarely the things I see mentioned in professional product reviews. With that being said, I wanted to share some thoughts on a…</description></item><item><title>Vanilla and Blueberry Crème Brûlée</title><link>https://tahinipie.com/posts/creme-brulee/</link><pubDate>Wed, 26 Aug 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/creme-brulee/</guid><description>Credit goes to ChefSteps for this one. Follow the recipe on chefsteps.com with two minor modifications:</description></item><item><title>Engineering Talent Wars</title><link>https://tahinipie.com/posts/engineering-talent-wars/</link><pubDate>Sat, 22 Aug 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/engineering-talent-wars/</guid><description>Engineering talent is hard to come by in SF, we work with what we have</description></item><item><title>Watch your JSON</title><link>https://tahinipie.com/posts/watch-your-json/</link><pubDate>Tue, 18 Aug 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/watch-your-json/</guid><description>&lt;p&gt;I spent some time this weekend improving the performance of the server-side request processing logic for Imprint. This particular code path executes on every request for an Imprint impression, which on a casual day is around 10k requests / sec. The logic is fairly straight forward but several steps are required before we can send a single byte back to the client. A non-exhaustive list of computations required:&lt;/p&gt;</description></item><item><title>A simple caching strategy</title><link>https://tahinipie.com/posts/simple-caching-strategy/</link><pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/simple-caching-strategy/</guid><description>We frequently read stories about growing % in six months and somewhere along the way they hit a scalability wall. Requests dropped, users suffered. Many prayers and goat sacrifices later, the problem…</description></item><item><title>The Network is Reliable</title><link>https://tahinipie.com/posts/network-is-reliable/</link><pubDate>Wed, 13 May 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/network-is-reliable/</guid><description>Those who design systems with the assumption that the network is reliable, have never experienced the joy of an IRC netsplit as kids</description></item><item><title>The secret to great looking Native Ads Colors Colours Kolors</title><link>https://tahinipie.com/posts/native-ad-colors/</link><pubDate>Wed, 06 May 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/native-ad-colors/</guid><description>A number of people have recently complimented us on how the Sidelines’ native ad unit looks great no matter where it is displayed and no matter what the content is. Having a seamless look and feel is…</description></item><item><title>Sleep and Android</title><link>https://tahinipie.com/posts/sleep-android/</link><pubDate>Thu, 16 Apr 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/sleep-android/</guid><description>You know you haven’t slept enough when you wake up and your phone hasn’t fully charged yet</description></item><item><title>Pancetta Wrapped Halibut</title><link>https://tahinipie.com/posts/pancetta-halibut/</link><pubDate>Sat, 04 Apr 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/pancetta-halibut/</guid><description>If you are looking to make a quick seafood lunch that looks semi-impressive, this recipe is for you. We wrap halibut in pancetta to keep it moist, pan-sear to crispy up the pancetta and finish it in…</description></item><item><title>Updating Table Schema in Google BigQuery</title><link>https://tahinipie.com/posts/bigquery-schema-update/</link><pubDate>Wed, 25 Mar 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/bigquery-schema-update/</guid><description>&lt;p&gt;In every analytics system design, no matter how much you plan what events you gather and what properties to store for each event, there are bound to be omissions. Or sometimes code improvements present themselves that allow for better semantic normalization of the same raw data. Google BigQuery does not allow us to change field names or types and rightly so; in an analytics backend data is assumed to be immutable. We can however append new fields or make some required fields optional. I’m including some code that goes hand in hand with the &lt;a href="http://marios.io/2015/01/13/google-bigtable-schema-inference/"&gt;infer schema&lt;/a&gt; snippet I posted a while back. Note that I’ve removed error checks and retry logic for brevity. Unfortunatley Google APIs 500 fairly often so I strongly recommend you code defensively.&lt;/p&gt;</description></item><item><title>My Most Frequently Used Shell Command</title><link>https://tahinipie.com/posts/frequent-shell-command/</link><pubDate>Mon, 23 Mar 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/frequent-shell-command/</guid><description>ps aux | grep chrome | grep -v grep | awk &amp;lsquo;{print $2}&amp;rsquo; | xargs sudo kill -9</description></item><item><title>A good user experience according to car rental companies</title><link>https://tahinipie.com/posts/car-rental-ux/</link><pubDate>Sat, 21 Mar 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/car-rental-ux/</guid><description>No, it is not possible to detach the keys, you need to carry all three. Banana for scale</description></item><item><title>Devops Refactoring: Working with Ansible on AWS EC2</title><link>https://tahinipie.com/posts/ansible-aws-ec2/</link><pubDate>Mon, 02 Mar 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/ansible-aws-ec2/</guid><description>Much like we refactor code for maintenability, every now and then it pays to take a look at our infrastructure and see if there is anything we can improve. For example, recently I decided to shutdown…</description></item><item><title>Django Upgrade Quickhack — Adding quotes to url template tags.</title><link>https://tahinipie.com/posts/django-url-quotes/</link><pubDate>Fri, 30 Jan 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/django-url-quotes/</guid><description>&lt;p&gt;Over the past few days, I have been busy upgrading a few libraries we were using to gain much needed new functionality. Amongst those is upgrading DJango 1.4 to 1.6 to get the new User model as well as be able to drop the PGBouncer dependancy because DJango 1.6 supports persistent database connections. Unfortunately, as of Django 1.5, the url template tag requires the argument to be a string or context variable, which means I have to scour through a few hundred templates and change tags from something like {% url post post.slug %} to {% url “post” post.slug %}. Well, instead of doing that, here is a handy regular expression to do the replacement for us:&#10;&lt;code&gt;s/(\{% url[\s]+?)([^&amp;quot;'\s][^\s]+)/$1'$2'/g&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Google BigTable Schema Inference</title><link>https://tahinipie.com/posts/bigtable-schema-inference/</link><pubDate>Tue, 13 Jan 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/bigtable-schema-inference/</guid><description>&lt;p&gt;I have recently undertaken the task of rebuilding our analytics stack at Sidelines. I’ll share more details as to what motivated me to do so and why in a later post. One of the solutions I’m exploring, is streaming data to be queried by &lt;a href="https://cloud.google.com/bigquery/what-is-bigquery"&gt;Google BigQuery&lt;/a&gt;. The basic premise is that each event will have its own table and each event carries a lot of properties to give it context. For example, a click on a brand creative will contain properties describing the user that clicked, such as browser, screen resolution, etc. It will also have properties around the type of creative; was an image used? What was the resolution? How long was the title? What was the template. Overall, each event averages to about 50 different properties. The problem I faced, is that Google BigQuery requires the table schema to be defined prior to inserting data. Some other services I’m exploring like &lt;a href="http://keen.io/"&gt;Keen.io&lt;/a&gt; are kind enough to do the schema inference for you. Because I really didn’t want to define schemas for all these events, I wrote a quick script that will create the JSON required to create the table prior to inserting the first event.&lt;/p&gt;</description></item><item><title>Server Empathy</title><link>https://tahinipie.com/posts/server-empathy/</link><pubDate>Mon, 05 Jan 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/server-empathy/</guid><description>Our longest running box on AWS EOL :'(</description></item><item><title>First Meal of 2015 (Guide to French Toast)</title><link>https://tahinipie.com/posts/french-toast/</link><pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/french-toast/</guid><description>I’m not really a breakfast person. Growing up in Cyprus, breakfast is typically a frappe and some figs in the summer. That’s why, whenever I have to make breakfast, I resort to my secret weapon, the…</description></item><item><title>Being Truly Asynchronous With Tornado</title><link>https://tahinipie.com/posts/tornado-async/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/tornado-async/</guid><description>&lt;p&gt;In the past few days I’ve had the chance to play a bit with Tornado, a non-blocking web server for Python similar to node.js. Tornado works by using something like epoll or whatever I/O event notification exists in the system. Tornado is single threaded and works like a fancy while (True) loop. As a consequence, whenever we do some blocking I/O (e.g. database call) the web server cannot process other requests. While that may not be a big deal on very low traffic sites or if your I/O subsystem is extremely fast, it starts becoming an issue as your traffic grows or if you’re hosted on something like Amazon AWS; notorious for its slow and inconsistent disk I/O performance. The biggest problems that I encountered with Tornado are: 1) the lack of robust asynchronous libraries for things like DB access and 2) Python’s own awkwardness when dealing with async code. NodeJS programmers don’t have any of these problems because the community writes software with async in mind and Javascript as a language offers anonymous blocks which make callback style code tolerable. The purpose of this post is to encourage Python programmers using Tornado to pay attention to their blocking calls or if they don’t need any of the features that Tornado offers, stick to a WSGI server such as uwsgi or gunicorn.&lt;/p&gt;</description></item><item><title>The Hashing Trick</title><link>https://tahinipie.com/posts/hashing-trick/</link><pubDate>Sat, 10 Nov 2012 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/hashing-trick/</guid><description>&lt;p&gt;If you are doing any sort of classification with thousands of features (as is common in text classification) and need to update your Bag of Words models online, then you&amp;rsquo;ll find this rather simple technique very handy. At some point while developing &lt;a href="http://sidelinesapp.com"&gt;Sidelines&lt;/a&gt;, we were using LDA to cluster tens of thousands of articles in topics (this is no longer the case however). After extracting the text we would: 1) Remove stop words, 2) Construct a dictionary to map each word to a unique id, frequency tuple and 3) Prune that dictionary to remove very rarely used and very often used words. The biggest problem we faced was running out of memory as we&amp;rsquo;d have to make a pass over all our data to construct this dictionary. Even if we tried to segment our corpus and split them into different machines, keeping these huge dictionaries in memory was a pain, while swapping to disk was extremely slow.&lt;/p&gt;</description></item><item><title>Making Sense Out of Naive Bayes Probability Estimates</title><link>https://tahinipie.com/posts/naive-bayes-probabilities/</link><pubDate>Tue, 26 Jun 2012 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/naive-bayes-probabilities/</guid><description>&lt;p&gt;Most introductory textbooks on supervised learning algorithms examine the algorithm from a single classification point of view, meaning we only need to decide if an item belongs to a certain class or not. Multi-class classification, an instance of the same problem is typically done by training multiple such binary classifiers for each pair of classes. There are various improvements over these techniques, but very few papers examine how to get meaningful probability estimates out of a learning algorithm. At &lt;a href="http://sidelines.co" title="Sidelines"&gt;Sidelines&lt;/a&gt;, we use the probability output of some of our classifiers to predict how relevant a sports news article is to a specific team. We then use that input as part of our ranking algorithm. For example, this article is mostly about the &lt;a href="http://sidelines.co/team/boston-celtics/"&gt;Boston Celtics&lt;/a&gt; and it should rank high in a Celtics feed, but Mavericks&amp;rsquo; fans would also be somewhat interested although it should not rank as high in their feed. To get good probability estimates though, some offline experimentation is needed. An untuned instance of Naive Bayes would tend to give estimates either near 0 or near 1 with very few articles inbetween. I&amp;rsquo;m speculating that this is because of the large number of words very frequently repeated in all documents. Mizil and Caruana examine methods to tune a variety of algorithms in their 2005 paper &amp;ldquo;&lt;a href="http://dl.acm.org/citation.cfm?id=1102351.1102430"&gt;Predicting Good Probabilities With Supervised Learning&lt;/a&gt;&amp;rdquo;. The authors test two calibration methods, Platt Scaling and Isotonic Regression for SVMs, Logistic Regression, Decision Trees, KNN, Naive Bayes, etc. They conclude that a) Platt Scaling works best when the calibration set is small and works best with max margin algorithms such as SVMs, b) Isotonic Regression usually outperforms Platt Scaling when the calibration set is large and it is the calibration method of choice for Naive Bayes. How to use Isotonic Regression for calibration is described in detail by Zadrozny and Elkan in &amp;ldquo;&lt;a href="http://dl.acm.org/citation.cfm?id=775151"&gt;Transforming Classifier Scores into Accurate Multiclass Probability Estimates&lt;/a&gt;&amp;rdquo;. Same paper also goes into detail about the multiclass case but we&amp;rsquo;ll leave that for another time. Here is the methodology one can use to calibrate NB:&lt;/p&gt;</description></item><item><title>String searching using Aho-Corasick</title><link>https://tahinipie.com/posts/aho-corasick/</link><pubDate>Sun, 26 Feb 2012 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/aho-corasick/</guid><description>&lt;p&gt;At &lt;a href="http://sidelinesapp.com/"&gt;Sidelines&lt;/a&gt;, we frequently need to quickly identify which athletes a news article may be talking about. Most of the time, a number of machine learning classifiers make sure that the article gets correctly labeled, but sometimes we need to run the title or even the entire text of the article against our database of athlete names. Using pre-compiled regular expressions does not scale (we have thousands of athletes and staff names in our database) and running each keyword against the target text would be too slow.&lt;/p&gt;</description></item><item><title>Power of k random choices</title><link>https://tahinipie.com/posts/k-random-choices/</link><pubDate>Wed, 31 Aug 2011 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/k-random-choices/</guid><description>&lt;p&gt;This is one of my favorite results of all times. A really simple neat trick that any developer can use in a variety of situations without really having to understand how it works. Think of the following hypothetical: you have a bunch of bins and a bunch of balls and you want to load up the bins as evenly as possible. If the bins and the balls were of same size, a round-robin strategy would work well. If they were not, you’d expect that just putting a ball in a bin at random would work well, however here we propose a different scheme that will perform better. Pick two bins at random and put the ball in the least loaded bin.&lt;/p&gt;</description></item><item><title>Q-Digest</title><link>https://tahinipie.com/posts/q-digest/</link><pubDate>Sun, 31 Jul 2011 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/q-digest/</guid><description>&lt;p&gt;Continuing on the same note as the &lt;a href="http://papercruncher.wordpress.com/2010/03/02/stream-algorithms-order-statistics/"&gt;Greenwald-Khanna post&lt;/a&gt;, we discuss another novel data structure for order statistics called Q-Digest. Compared to GK, Q-Digest is much simpler, easier to implement and extends to a distributed solution very easily. The data structure was designed with sensor networks in mind, where minimizing radio transmission overhead is of paramount importance.  It originally appeared in &lt;a href="http://portal.acm.org/citation.cfm?id=1031495.1031524&amp;amp;coll=DL&amp;amp;dl=GUIDE&amp;amp;CFID=37587759&amp;amp;CFTOKEN=20903388"&gt;this paper&lt;/a&gt; by Shrivastava et al&lt;/p&gt;</description></item><item><title>Stream Algorithms: Order Statistics</title><link>https://tahinipie.com/posts/stream-order-statistics/</link><pubDate>Tue, 02 Mar 2010 00:00:00 +0000</pubDate><guid>https://tahinipie.com/posts/stream-order-statistics/</guid><description>&lt;p&gt;Assume you have a web farm and you are collecting response times for user requests. You could have hundreds of millions or even billions of data points and you want to know how your service is doing. You could maintain a running average, but averages are sensitive to outliers, not to mention that you’d need to also look at the standard deviation. Quantiles are a better way to summarize your data. They allow you to answer questions such as “what percent of requests finished faster than x milliseconds” or “what is the maximum response time for 90% of my requests”. Problem with quantiles is that you normally need to keep all the data in memory. If you lets say have 1 billion data points, you’d need about 3.5GB of RAM to store each as an integer.&lt;/p&gt;</description></item><item><title>About</title><link>https://tahinipie.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tahinipie.com/about/</guid><description>&lt;p&gt;All lists are dynamically allocated and ever expanding&lt;/p&gt;</description></item><item><title>Resume</title><link>https://tahinipie.com/resume/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tahinipie.com/resume/</guid><description/></item></channel></rss>