A sample of a story.

Password guessing tools (HashCat and John the Ripper) enable users to check millions, even billions of passwords per second against password hashes. When a password is “hashed”, it is turned into a scrambled representation of itself. A user’s password is taken and the hash value is derived from a combination of the given password and a key known to the site or service. Password guessing tools make it easy to identify weak passwords when stored in this hash form. The effectiveness of the guessing software relies on its ability to test large numbers of highly likely passwords against each password hash. “Instead of exhaustively trying all possible character combinations, password guessing tools use words from dictionaries and previous password leaks as candidate passwords.” Newer, flashier password guessing tools use Markov models in conjunction with defined heuristics for password transformations (combinations of multiple words, mixed letter case and leet speak — using numbers as characters in a word e.g., …

Maximum Likelihood Estimate (MLE) primarily deals with using parameter inference to determine which parameters maximize the probability of data. This calculated parameter can be used to help you predict the outcome of future experiments.

A few relevant terms:

  • Parameter inference — the process of probabilistically inferring parameter(s) for a model in an analytical context.
  • Conditional probability — the probability of one event occurring given that another event has occurred
  • Probability density —the relationship between a sample and the likelihood of selecting that sample value at random.

Conditional Probability

Conditional probabilities are values that we use all the time in data science. The whole idea behind conditional probability is that we often have information about past events that we can use to estimate the probability of future dependent events. These probabilities won’t be 100% accurate, but will give us a more educated and complete picture of the event in question. As given in the name, these probabilities are conditional, and depend on a separate event occurance. …

Image for post
Image for post

The NoOps analysis workflow for non-technical teams


The structure of this article is as follows:

  • Introduction
  • Advantages of this workflow
  • Steps we’ll follow
  • The Process

If you’re here strictly for the tutorial, navigate down to the Steps we’ll follow section.


The “Google Stack” is becoming exceedingly popular amongst non-technical teams who need to share and analyze their data. Today we’ll learn how to leverage BigQuery and Google Data Studio to store, transform, visualize, and share our data in a cloud environment.

The process of piping data through the Google atmosphere can be a pain to get up and running. …

Learn the concepts of software testing and implement your own tests using the pytest library


If you’re already familiar with the concepts of testing and terminology as it relates to software, absolutely skip ahead to a more relevant section

  • Manual vs Automated Testing
  • Unit vs Integration Testing
  • Quick Intro to Python’s assert
  • Test Runners
  • Introducing Our Test Runner Selection: pytest
  • Working With pytest

Manual vs Automated Testing

TLDR version:

  • Manual testing involves testing features by hand, providing input, and observing output. It’s tedious
  • Automated testing is the execution of your tests by a script or scripts. It’s much faster and more robust than manual testing.

— — — — — — — — — — — —


You’ve probably already performed tests without even realizing it. Opening up your application to see if things are functioning properly/in the right place, experimenting with your features to see if they perform as expected, these are both forms of exploratory testing. …

Example from Dash Enterprise Gallery — https://dash-gallery.plotly.host/Portal/

Learn how to use element IDs and callback functions to create interactive Dash applications

Please note: To get the most out of the following material you would ideally have some OOP experience in Python, some basic knowledge of HTML elements and their uses, and a basic understanding of the Dash framework (use of layout and components). If you are unfamiliar with the Dash basics, you can check out Dash 101 for a complete walkthrough.


  • What Are Dash Callbacks?
  • A Review of IDs and Properties in Dash
  • Dash Callback Syntax
  • Write a Basic Callback (use Input to update an H3 tag)
  • Update a Graph (use Dropdown options to update the contents of a Graph component)
  • Summary…

Everything you need to get your first dashboard up and running with Dash and Python

Image for post
Image for post
Example from Dash Enterprise gallery — https://www.google.com/url?sa=i&url=https%3A%2F%2Fdash-gallery.plotly.host%2F&psig=AOvVaw3lYAA_2Vhy8D1X5vn5WCLA&ust=1607044228121000&source=images&cd=vfe&ved=2ahUKEwjnw4600LDtAhUWiZ4KHY7mAtYQr4kDegUIARCsAQ

Please note: In order to get the most out of the following material before beginning this article, you would ideally have some OOP experience in Python, some knowledge of HTML elements and their functions, and some interesting data (the data I provide here is rather boring).

What is Dash?

Dash is a (mostly) open-source framework built by Plotly and used for creating analytics-centric web applications in Python. Dash — built on top of Plotly.js, React.js, and Flask — allows you to create and deploy high-quality, highly customizable dashboards and interfaces for displaying and exploring data.

For some examples of Dash apps built by other people, check out the “Show and Tell” section of the Plotly website. This is also a great place to ask questions and explore concepts that other people in the Dash community are talking about. …

Learn how to combine and pull data from multiple sources using SQL JOINs


In this episode of SQL Crash Course, we’re going to learn how to combine multiple tables in SQL, and maximize the efficacy of our SELECT statements using a JOIN clause. We’re going to learn about the 4 different types of JOIN methods and when we might want to use each one. We’re finally going to wrap up by creating a database and some tables, adding some data, and trying to implement some JOINs ourselves.

This is episode 3 of this SQL Crash Course series. If you’re unfamiliar with SQL concepts like pulling data, creating tables, adding and deleting rows, etc. …

Learn the basics of creating tables, adding rows, and deleting data in SQLite from the console/terminal


In this installment of SQL Crash Course, we’re going to learn the difference between a SQL database and a SQL table, and how to create them both — we’re going to get a more complete look at SQL and SQLite data types in the process. We’re then going to learn how we can add and delete data from these tables, and how we can manage the tables within a database.

This is episode 2 of our SQL Crash Course series. The last article talked about what SQL is, why it’s useful, and how we can use it to select and filter data from SQL tables. We also touched on SQL data types which is a concept that’s used heavily in the following tutorials. …

Covering SQL best practices, SELECT, FROM, WHERE, AND/OR, GROUP BY, ORDER BY, and more…


We’re going to learn what SQL is, what we can use it for, and then we’re going to start writing some basic queries for selecting and filtering data from a database.

Note: We won’t actually be working with a SQL database today, we will be using Python to create a dataframe and then will use a library called pandasql to query it. If you are unfamiliar with Python, I still suggest you following the tutorial and paying attention to the SQL commands and their outputs.

What is SQL?

Data is everywhere, and more of it is being created every minute. We used to store this data on paper in giant filing cabinets but now we store it digitally in things called databases. Now, how do we easily pull the data we want from this digital database? That’s what SQL is for! SQL (Structured Query Language) is a language we use to communicate with our databases. If you want to pull, edit, or add data to a database, you can use SQL to do that. Databases can be created in a variety of architectures (giant data lakes, simple 1-table schemas ), written in a variety of languages (C++, Java), but SQL is the common ground that lets anyone access this data using universal syntax. …

Sam Thurman

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store