Links are so fundamental to web development that they're almost invisible. When we link to a third-party page, we hardly ever consider how it could become an opportunity to exploit our users. In this article, Julien Cretel introduces us to three techniques that bad actors can use to target our users and discusses how to avoid them.
Lexers are magical. They take your messy, hand-typed, human text, and convert it into a clean data structure that the computer can process. Every time you run a ruby program, use structured search or type in a date by hand, you'll find a lexer hard at work. In this article, Alex Braha Stoll pulls back the curtain to show us how lexers work and how to implement one for a simple programming language.
You'll probably never need to implement bubble sort from scratch. Just call Array#sort! But sorting algorithms are a popular interview topic for a reason. They ask a bigger question: "Sure, you know what your code does, but do you know how it works? Do you understand the subtle ways that choices you make can impact performance?" In this article, Julie Kent will walk us through the famous Bubble Sort algorithm, demonstrating how it works, how to implement it in Ruby, and how to predict its performance.
Have you ever wanted to update all your errors at once, or set defaults for incoming errors? Well, we are releasing some helpful tools for error management that we call Honeybadger Actions.
Text encoding is fundamental to programming. Web sites, user data, and even the code we write are all text. When encoding breaks, it can feel like the floor is falling out from under you. You're cast into a dimension of bitmasks and codepoints. Logs and backtraces are useless. You consider trading your text editor for a hex editor. But there's hope! In this article, Jose Manuél will show us how encoding errors happen, how they're expressed in Ruby, and how to troubleshoot them. So the next time one of these errors lands on your desk, you'll be in a better position to handle it.
When you're evaluating a language for your next project, few things are more important than available third-party libraries and the package manager that ties them together. While early versions of Go lacked a package manager, they've made up for lost time. In this article, Ayooluwa Isaiah introduces us to go's module ecosystem to help us decide if go is "a go" for our next project.
Developers make fun of legacy systems because we're scared of them. We're afraid that the tiniest change will cause the app to break in unexpected ways. We're afraid we won't realize it until a customer complains. One way to combat this fear is through testing. In this article, José Manuel shows us how to retrofit legacy systems with acceptance test suites so we can maintain them with less fear and more confidence.
If you are a software engineer, there's a good chance that deep learning will inevitably become part of your job in the future. Even if you're not building the models that directly use CNNs, you might have to collaborate with data scientists or help business partners better understand what is going on under the hood. In this article, Julie Kent dives into the world of convolutional neural networks and explains it all in a not-so-scary way.
Whoever first said that "the fastest code is no code" must have really liked memoization. After all, memoization speeds up your application by running less code. In this article, Jonathan Miles introduces us to memoization. We'll learn when to use it, how to implement it in Ruby, and how to avoid common pitfalls. Buckle up!