Boot.dev Blog
(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).
Make Maps and Slices in Golang - A Guide to Initialization
by Lane Wagner - Boot.dev co-founder and backend engineer
There are quite a few ways to create new maps and slices in Go, for example, they can both be initialized using the make() function, the new() function, as literals, or by using the var keyword. With so many choices, which option is best? Or perhaps better asked, which one is best in your situation? Let's take a look.
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().
Concurrency In Rust; Can It Stack Up Against Go's Goroutines?
by Lane Wagner - Boot.dev co-founder and backend engineer
One of the primary goals of the Go programming language is to make concurrency simpler, faster, and more efficient. With Rust growing in popularity let's see how its concurrency mechanisms stack up against Go's.
Rust vs Go - Which Is More Popular?
by Lane Wagner - Boot.dev co-founder and backend engineer
Go and Rust are two of the hottest compiled programming languages, but which is more popular, Go or Rust?. I develop in Go full-time and love it, and I'm learning more about Rust recently - it's an exciting language. Let's explore some differences between the two and look at which is growing faster in the popularity polls.
Achieving Data Integrity Using Cryptography
by Lane Wagner - Boot.dev co-founder and backend engineer
Data integrity refers to the accuracy, legitimacy, and consistency of information in a system. When a message is sent, particularly using an untrusted medium, data integrity provides us with confidence that the message wasn't tampered with. For example, the SSL signature of Boot.dev provides confidence that the webpage and data coming from our servers are coming from us and not the NSA.
Range Over Ticker In Go With Immediate First Tick
by Lane Wagner - Boot.dev co-founder and backend engineer
The Go standard library has a really cool type - Ticker. Tickers are used when you want to do something at a regular interval, similar to JavaScript's setInterval. Here's an example:
