A confidence interval is a good way to express the uncertainty in an estimate. This post is about how to calculate approximate confidence intervals in portable (mostly) standard SQL using bootstrapping . We’ll also see that BigQuery is surprisingly fast at running the required bootstrap calculations, which makes it easy to add a confidence interval to nearly any point estimate you calculate in…
This post is the third in a short series about automated testing in node.js web applications with Docker. So far, we have looked at backend testing and frontend testing . This post will be about end-to-end testing, which covers both frontend and backend together. To illustrate, we’ll continue building and testing our example application: a simple TODO list manager, which comprises a RESTful…
This post is the second in a short series about automated testing in node.js web applications with Docker. Last time, we looked at backend testing ; this time, we’ll look at frontend testing. To illustrate, we’ll continue building and testing our example application: a simple TODO list manager. So far, we’ve built and tested a RESTful API to manage the task list: # Create a task 'foo'. $ curl…
My last post covered the basics of how to get a node.js application running in Docker. This post is the first in a short series about automated testing in node.js web applications with Docker. It boils down to running npm test in a Docker container, which may not seem like it should require multiple blog posts! However, as an application gets more complicated and requires more kinds of testing,…
Update (2019-10-10): This post was discussed on Hacker News . Way back in 2016, I wrote Lessons from Building a Node App in Docker , which has now helped over a hundred thousand people Dockerize their node.js apps. Since then there have been many changes, both in the ecosystem and how I work with node in Docker, so it was due for an overhaul. In this updated tutorial, we’ll set up the socket.io…
This post is based on the following talk. Abstract: Learn how to train a driverless car to drive around a simulated race track using end-to-end deep learning — from camera images to steering commands. Key techniques used include deep neural networks, data augmentation, and transfer learning. This was a course project, so I'll introduce the key ideas and talk about the practical steps needed…
Updates 2018-04-10 This post was discussed on Hacker News . So far in this series on the mathematics of 2048 , we’ve used Markov chains to learn that it takes at least 938.8 moves on average to win, and we’ve explored the number of possible board configurations in the game using combinatorics and then exhaustive enumeration . In this post, we’ll use a mathematical framework called a Markov…
Updates 2017-12-11 This post was discussed on Hacker News . This post is the third in a series. Next: Optimal Play with Markov Decision Processes . So far in this series on the mathematics of 2048 , we’ve seen that it takes at least 938.8 moves on average to win, and we’ve obtained some rough estimates on the number of possible states using combinatorics. In this post, we will try to refine those…
Updates 2017-09-25 There was some lively discussion about this article on Hacker News . This post is the second in a series. Next: Counting States by Exhaustive Enumeration . In my last 2048 post , I found that it takes at least 938.8 moves on average to win a game of 2048 . The main simplification that enabled that calculation was to ignore the structure of the board — essentially to throw the…
Updates 2017-09-25 There was some lively discussion about this series on Hacker News . This post is the first in a series. Next: Counting States with Combinatorics . As part of a recent revamp, 2048 ’s “You win!” screen started reporting the number of moves it took to win, which made me wonder: how many moves should it take to win? In this post, we’ll answer that question by modeling the game of…