Boot.dev Blog
HMAC and MACs - The Inner Workings of JWTs
by Lane Wagner - Boot.dev co-founder and backend engineer
HMACs and MACs are authentication codes and are often the backbone of JWT authentication systems. A Message Authentication Code (MAC) is a string of bits that depends on a secret key and is sent with a message to prove the message wasn't tampered with. HMACs are a more strict version of MACs that offer additional security benefits.
Your Parent's Internet - How to Mitigate Misinformation
by Lane Wagner - Boot.dev co-founder and backend engineer
The age of information is not what we all hoped it would be. We successfully digitized the majority of human knowledge, and we even made it freely accessible to most. Now the problem is different, we have too much information. Answers to most questions can be found in thousands of distinct places online, and the new problem is "whose information can we trust?"
HLS Video Streaming with Node.JS - A Tutorial
by Lane Wagner - Boot.dev co-founder and backend engineer
In this quick tutorial, we'll build a robust video (or music) streaming API using Node JS. Don't worry, it's surprisingly easy since we will be utilizing a modern protocol, HTTP Live Streaming, or HLS.
(Very) Basic Intro to PGP (GPG)
by Lane Wagner - Boot.dev co-founder and backend engineer
PGP, or its open-source alternative, GPG, is a program used to encrypt data such that only an authorized party can decrypt it. In this introduction, we will cover its use-cases and a high-level overview of the algorithms involved.
(Very) Basic Intro to the Scrypt Hash
by Lane Wagner - Boot.dev co-founder and backend engineer
Scrypt is a slow-by-design key derivation function designed to create strong cryptographic keys. Simply put, the purpose of the Scrypt hash is to create a fingerprint of its input data but to do it very slowly. A common use-case is to create a strong private key from a password, where the new private key is longer and more secure. Here at boot.dev, we use a similar KDF for securing user passwords.
Authenticate Users with "Sign In With Google" in Golang
by Lane Wagner - Boot.dev co-founder and backend engineer
Users love convenience. If your goal is to make it easy for users to register with your app or website, then implementing the "Sign in with Google" option should be at the top of your priority list. If you are like me, then you may find Google's documentation on the subject to be lackluster at best, and downright confusing at worst. Here we will go step-by-step through the authentication process so you can implement Google sign-in easily.
How to Create a Custom Toggle Switch Component in Vue.js
by Lane Wagner - Boot.dev co-founder and backend engineer
Custom toggle switches are a pain to code from scratch. So many lines for such a simple UI widget! In this quick tutorial, we will learn how to build a fully encapsulated toggle switch component in Vue.js. The component we're building is used currently on boot.dev's login page. Go take a look to see a live demo.
Rust Backend vs Go Backend in Web Development
by Lane Wagner - Boot.dev co-founder and backend engineer
Rust and Go are two of the industry's biggest successes when it comes to developing modern programming languages. Both languages compete in terms of backend web development, and it's a fierce competition. Golang and Rust are new languages, have growing communities, and are fast and efficient. When it comes to microservice architectures, frameworks, and apps, Rust and Go are household names on the backend.
Vue History Mode - Support Legacy Hash URLs
by Lane Wagner - Boot.dev co-founder and backend engineer
When we first launched the boot.dev's single-page-app, we were using Vue Router's default hash routing. Hash routing looks ugly to the end-user, and when you want to be able to share parts of your app via direct link those hashes can get really annoying.
What is SHA-256?
by Lane Wagner - Boot.dev co-founder and backend engineer
SHA-2 (Secure Hash Algorithm 2), of which SHA-256 is a part, is one of the most popular hash algorithms around. A cryptographic hash, also often referred to as a "digest", "fingerprint" or "signature", is an almost perfectly unique string of characters that is generated from a separate piece of input text. SHA-256 generates a 256-bit (32-byte) signature.
How to Rerender a Vue Route When Path Parameters Change
by Lane Wagner - Boot.dev co-founder and backend engineer
In single-page apps that use the Vue Router, it's common to create a path parameter that changes the behavior of a route. Often a problem occurs however when a user alters the path manually in the address bar. Manually changing the URL does not rerender the view! This can cause unexpected behavior because mounted() hooks don't fire and nested components don't reload.
Announcing a "Basic Intro to Coding" Course in JavaScript
by Lane Wagner - Boot.dev co-founder and backend engineer
The boot.dev app - our new gamified learning platform - just launched its first JavaScript coding course! This one is short, sweet, and to the point. We created a thirty-exercise, two-module course that caters to students who have never seen a single line of code before. That's right, this is a code-in-the-browser course for absolute beginners.
Boot.dev Launches Golang Crash Course - Learn Go
by Lane Wagner - Boot.dev co-founder and backend engineer
We just launched the new boot.dev computer science platform and can't be more excited. Our first crash course in Go, "Learn Go" is now available! We teach students by allowing them to write, compile, and run backend code directly in the browser.
Running Go in the Browser With Web Assembly (WASM)
by Lane Wagner - Boot.dev co-founder and backend engineer
If you are familiar with the Go Playground, then you know how convenient it is to be able to have a Go scratchpad in the browser. Want to show someone a code snippet? Want to quickly test some syntax? Browser-based code pads are helpful. On that note, I created a new playground. The cool thing about this new playground that it doesn't use a remote server to run code, just to compile it. The code runs in your browser using web assembly (WASM).
How to Make Maps in Go
by Lane Wagner - Boot.dev co-founder and backend engineer
Maps are similar to JavaScript objects, Python dictionaries, and Ruby hashes. Maps are a data structure that provides key-value mapping.
How to Get Consistent Line Breaks in VS Code (LF vs CRLF)
by Lane Wagner - Boot.dev co-founder and backend engineer
Have you ever had the problem where you submit a pull request and the diff is much larger than it should be? Maybe the code looks identical, but GitHub tells you it's completely different.
Simple Setup - Vue Linting in VS Code
by Lane Wagner - Boot.dev co-founder and backend engineer
I'm a gopher by nature, so I expect consistent styling and linting in my codebases. More importantly, I don't like to think about styling. I like to type haphazardly and then have my editor apply styles automatically on save (ctrl+s, cmd+s). If you are the same way, hopefully, this will help you in your next Vue.js project.
Go-CoNLLU - Some Much Needed Machine Learning Support in Go
by Lane Wagner - Boot.dev co-founder and backend engineer
Python is commonly seen as the AI/ML language, but is often a dull blade due to unsafe typing and being slow, like really slow. Many popular natural language processing toolkits only have Python APIs, and we want to see that change. At Nuvi, a social media marketing tool, we use Go for the majority of our data processing tasks because we can write simple and fast code. Today we are open-sourcing a tool that has helped make our ML lives easier in Go. Say hello to go-conllu.
Go's WaitGroup vs JavaScript's PromiseAll
by Lane Wagner - Boot.dev co-founder and backend engineer
In applications that are i/o heavy, it can get clunky to synchronously execute high-latency functions one after the other. For example, if I have a web page that needs to request seven files from the server before it can show the page, I need to asynchronously fetch all those files at the same time. The alternative of making each request one at a time will take much too long. This is where JavaScript's PromiseAll and Go's WaitGroup come in.
How to Sort a Slice in Go
by Lane Wagner - Boot.dev co-founder and backend engineer
Sorting is a common task in programming, and for that reason, most languages have a default sorting algorithm in their standard library. Go is one such language. Go has gone about providing sorting functionality in one of the most elegant ways possible, via an interface.
Using Concurrent Subscribers With RabbitMQ in Python (pika)
by Lane Wagner - Boot.dev co-founder and backend engineer
It's a fairly common scenario to subscribe to a Rabbit queue and process messages before acknowledging receipt. The pika package for dealing with RabbitMQ in Python however is only single-threaded out of the box. If we want to make a network or database call before each acknowledgment our subscribers can get really slow.
Don't Go To Casting Hell - Use Default Native Types in Go
by Lane Wagner - Boot.dev co-founder and backend engineer
Go is strongly typed, and with that, we get many options for simple variable types like integers and floats. The problem arises when we have a uint16, and the function we are trying to pass it into takes an int. We find code riddled with int(myUint16) that can become slow and annoying to read. In other words, when Go developers stray from the "default" type for any given type family, the code can get messy quickly.
How to Break From Nested Loops in Rust
by Lane Wagner - Boot.dev co-founder and backend engineer
Loops in Rust aren't the same as standard C-style languages. The syntax is different and there are some powerful options that make looping easier. First, let's go over some looping basics, then we will cover how to handle breaking and continuing in nested loops in Rust.
Variable Shadowing In Rust - "Let" Is Immutable But Not Constant
by Lane Wagner - Boot.dev co-founder and backend engineer
Let's take a look at some of the common pitfalls with the keywords let and mut. Then, we will learn how immutable != constant by using variable shadowing.
Quantum Programming 101: Backend Monitor
by Macauley Coggins - Researcher and Founder of Quantum Computing UK
In a previous tutorial we showed how you can get basic information on all quantum devices using backendoverview().
