Dependency Confusion


A security researcher named Alex Birsan recently wrote about a new type of attack called Dependency Confusion. Alex’s post gives a great overview of the attack, but provides little insight into mitigating this security risk. Here are some ways to identify if your development process is vulnerable to this attack and how to prevent it. […]

Tooling a Python Project: Part 2, Optional Tools

In Part 1 we took a look at the basic tools necessary for any Python project.  Now we’ll look at a couple of tools that add additional structure and can help make your development experience as smooth as possible. Black The proper way to format code is an old argument among programmers (see the infamous […]

Tooling a Python Project: Part 1, Basic Tooling

In this two part series, we’re gong to take a look at some of the most important tools to be aware of when starting a new Python project.  For this series we’ll assume you’re using Python 3 since the Python 2 EOL is coming up in 2020. Let’s dive in. Poetry In order to get […]

Refactoring Part 4: Implementing New Functionality

In Part 3 we did some major refactoring and added new tests.  Now that we’ve refactored out everything, we’re prepared to remove our dependence on the UI in our tests, refactor the remaining UI pieces, and implement our feature. Introducing a method seam The first step in removing out dependence on the UI is providing […]

Refactoring Part 3: More Testing

In Part 2 we started adding unit tests and refactoring for our new feature.  Now we’ll finish up the rest of the changes and then move on to separating out the UI code so we can generate the appropriate number of boxes to represent doors.  As a refresher, the changes we need to make are: […]

Refactoring Part 2: Tests and Seams

In Part 1 we took a look at how to get our Monty-Hall simulator into a test harness so we could start refactoring to add N doors functionality.  In this part, we’ll look at how we can refactor and write test cases to make our code more maintainable while making new functionality easy to add. […]

Refactoring Part 1: Working with Legacy Code

In this series we will look at how we can improve the design of a piece of legacy code in order to add new functionality and make the code easier to maintain.  First, lets take a look at the code we’ll be dealing with. If you’re not familiar with the Monty-Hall problem, take a […]

Sentry: self-hosted installation using Docker

In the last post, we looked at the difference between self-hosting Sentry versus the SaaS option.  In this post, we’ll do a deeper dive on self-hosting Sentry and take a look at some possible pitfalls you may encounter. In order to self-host your Sentry installation, there are a couple of resources you’ll need to look […]

Sentry: Deciding how to deploy for your environment

In the last post, we discussed exception tracking tools and introduced Sentry as a best in breed solution.  Due to its open source nature, Sentry has two options for deployment: SaaS and Self Hosting. SaaS Sentry’s SaaS pricing model has 4 tiers: Developer – Free for a single developer working on a personal project Team […]

Sentry: Understanding How Software Fails

Sentry exception trackers best solution

Software breaks in production.  When it breaks, it’s important to have all the information about how and why it broke available.  Collecting this data is often a simple task, but it’s important to choose the right tool to get the most out of your data. Simple log files The simplest way to track the behavior […]