The PostgreSQL Global Development Group today announced the release of PostgreSQL 17, the latest version of the world's most advanced open source database. PostgreSQL 17 builds on decades of open source development, improving its performance and scalability while adapting to emer … | Continue reading
When managing files on macOS, you might often need to batch rename multiple files, such as changing their extensions. While there are various ways to do this, using Zsh (Z Shell) is one of the most efficient, especially with the built-in zmv function. In this post, I'll guide you … | Continue reading
This post is not advice, it's what's working for me. It's easy to pick up bad habits and hard to create good ones. Writing down what's working for me helps me maintain any good habits I've worked hard to develop. Here's an unordered list of 10 things that have helped me increase … | Continue reading
Here's a classic question that I've asked and been asked in many job interviews: "What happens when you type a URL into your browser's address bar and hit Enter?" A good answer includes a basic explanation of DNS, networking and the structure of an HTTP request and response. But … | Continue reading
I came across this example of how nice and concise Elixir can be. It's a simple Github API client that does quite a bit in a small space. I like it. Elixir can pack a lot into a little. I do have doubts if I'm over compacting it a bit but but frankly I like this. Here's a simple … | Continue reading
I like how applying the lean concept of small batches to UX had a direct impact on software design and quality. The cherry on top is that the Edit/Save overhead seems to be negligible, which is another proof point that smaller batches, despite having higher overhead, lead to high … | Continue reading
Manipulating history is very common for developers who work with Git regularly. Indeed, developers often need to remove commits from the Git history. Luckily, Git provides many commands to make this operation possible. Let's get to it 😎. Step 0 - Preparation Before manipu … | Continue reading
Here are 10 practical tips to for better Vue applications ⚠️ This post links to an external website. ⚠️ | Continue reading
Super quick tip I use all the time but people may not be aware - @github maintains a list of gitignores (with 161k ⭐️!) for every single language and you can clone them into your project with a oneliner: npx gitignore Just in case someone here doesnt know, now you do. The git r … | Continue reading
VMware Desktop Hypervisor products Fusion and Workstation are used by millions of people every day to run virtual machines on their Windows, Linux and Mac computers. They give users the ability to quickly and easily build "local virtual" environments to install other operating sy … | Continue reading
A subtlety of Ecto.Query.preload is that it makes an extra DB query. To avoid this you need to explicitly do the join yourself. E.g. see below how the first query loads the teams with a separate SELECT but the second loads the users and teams all at once. So, if you do this: 1Rep … | Continue reading
A subtlety of Ecto.Query.preload is that it makes an extra DB query. To avoid this you need to explicitly do the join yourself. E.g. see below how the first query loads the teams with a separate SELECT but the second loads the users and teams all at once. So, if you do this: 1Rep … | Continue reading
When I set out to write this blog post, it was initially titled "Elixir Cheatsheet for JavaScript Developers." Halfway through writing the post, I realized I had more than seven pages worth of content — far from a cheatsheet. There were so many interesting points of comparison an … | Continue reading
Part 2 of José Valim covering ChatGPT's new UI. "It's a paradox for a server-side framework to have so many affordances and abstractions on the client." ⚠️ This post links to an external website. ⚠️ | Continue reading
Exceptions are often a better way to handle errors than returning them as values. We argue that traditional exceptions provide better user and developer experience, and show that they even result in faster execution. ⚠️ This post links to an external website. ⚠️ | Continue reading
In @ChromeDevTools you can hide network requests from Chrome extensions! Great for focusing on just your code when performance profiling. source | Continue reading
hether you are a developer, data analyst, QA engineer, DevOps person, or product manager - SQLite is a perfect tool for you. Here is why. A few well-known facts to get started: SQLite is the most common DBMS in the world, shipped with all popular operating systems. SQLite is serv … | Continue reading
A few weeks ago I gave a keynote at Strange Loop called Making Hard Things Easy. It's about why I think some things are hard to learn and ideas for how we can make them easier. Here's the video, as well as the slides and a transcript of (roughly) what I said in the talk. ⚠️ This … | Continue reading
If you want a very short read, here is the quick version of why I believe GitHub won and why you're probably using the site to this day. I can boil it down to exactly two reasons that happened to resonate with each other at the perfect frequency. GitHub started at the right time … | Continue reading
PHP's reflection capabilities are powerful tools that allow you to inspect and manipulate class information at runtime. One handy use case is fetching class constants dynamically. However, if you're working with inheritance, you may want to filter out constants that come from a p … | Continue reading
Back in the 1990s, before anything was cool (or so my children tell me) and at the dawn of the Age of the Meme, a couple of college students invented a game they called the "Six Degrees of Kevin Bacon". The conceit behind the Six Degrees of Kevin Bacon was that actor Kevin Bacon … | Continue reading
When developing a web application in Elixir, you may occasionally need to schedule a task to run at regular intervals, like sending email notifications, cleaning up old records, or triggering a background process. While there are libraries like Quantum or Oban that make this task … | Continue reading
Getting coffee with a bunch of local tech leaders, I surprised myself with how stridently I argued why companies should hire junior engineers. Lately, BigTech only wants elite squads of Staff devs that can "hit the ground running" on the big (often AI) initiative. It's been remar … | Continue reading
Recently, one of the developers of the Rust for Linux project, Wedson Almeida Filho, resigned from the project. In his parting message, he linked a video of a filesystem maintainer shouting at him. Afterward, Asahi Lina, developer of the Apple GPU drivers for Linux (which have no … | Continue reading
Jacob Kaplan-Moss kicked off this fascinating conversation about uv on Mastodon recently. It's worth reading the whole thing, which includes input from a whole range of influential Python community members such as Jeff Triplett, Glyph Lefkowitz, Russell Keith-Magee, Seth Michael … | Continue reading
Vue 3.5 has just dropped this week, and it's packed with some nice features and improvements. I have been digging through the release notes and playing around with the new features, so let me glance over the highlights! ⚠️ This post links to an external website. ⚠️ | Continue reading
This piece answers whether the built-in security of macOS is enough to forgo a third-party antivirus solution, and how admins can document that security for a SOC 2 audit. ⚠️ This post links to an external website. ⚠️ | Continue reading
I've run into a problem where I've used an attribute casted as an array in a Laravel resource and I wanted to preserve the keys of that array. By default, Laravel will re-index the array, which is not what I wanted. To preserve the keys, you can use the preserveKeys method on the … | Continue reading
We wrote previously about how much we enjoyed using LiveView with LiveSvelte. Since then, we've open sourced a lot of LiveView/LiveSvelte code. I thought it would be a good time to share the design patterns that have emerged with this stack so far. I'll focus primarily on how we … | Continue reading
Phoenix's LiveView has polarized our team. Compared to SPA, there are components and features that we're able to build 2-3x faster. Conversely, there are components and features that are frustrating to build or feel very counterintuitive. Said another way, LiveView makes a lot of … | Continue reading
Webhooks are a supplement to many APIs. With a webhook system in place, System B can register to receive notifications about certain changes to System A. When a change occurs, System A pushes the change to System B, usually in the form of making an HTTP POST request. Webhooks are … | Continue reading
A while ago, MySQL version 9 was released and I wanted to keep using version 8 to stay in sync with our production systems. I found out that Homebrew allows you to pin packages to a specific version so that won't accidentally get upgraded when running brew upgrade. Here's how you … | Continue reading
Honestly, these three lines of code should be all you need to show somebody the immense power of Elixir. With just one function call, you can parallelise a task over all available CPUs. One! 1# Counts the characters in each word and returns the overall sum. 2# 3# Task.async_strea … | Continue reading
In the first post of this mini-series, we learned how to implement basic permissions for your schemas, how to group them into roles, and how to assign the roles to our users. We used the role to check a user's permissions in our Phoenix Controllers. Our controllers lie at the out … | Continue reading
Hey folks, before we begin: Salespeople can be persistent, can't they? The other day, one tried to sell me a coffin. I told him that's the last thing I need! Anyways. Today, we'll look into how to set up a basic roles and permissions (RAP) system with Phoenix and Ecto. I got this … | Continue reading
PostgreSQL has native support for objects stored as JSON as actually binary JSON (or JSONB). With JSONB format, you can add index do the column for faster and more efficient reads. Even though the format supports both storing arrays of maps and nested maps, I suggest making it si … | Continue reading
If you've used Ruby before, background job queues are a tool you might reflexively reach for when building applications in Elixir. While such solutions exist, you may find that they aren't used that much in Elixir, which might leave you wondering why. I mean, don't Elixir applica … | Continue reading
Departure mono is a monospaced pixel font with a lo fi technical vibe. ⚠️ This post links to an external website. ⚠️ | Continue reading
In de wielersport worden er veel termen gebruikt die nergens anders worden gebruikt. ⚠️ This post links to an external website. ⚠️ | Continue reading
You might know that you can add a .iex.exs file to your project to have some code executed when you start an IEx session. But did you know that you can also have a global .iex.exs file? This file is located in your home directory and is executed every time you start an IEx sessio … | Continue reading
One of the typical issues with pagination is if you have more filters with GET parameters on your page. How to keep them from disappearing when the user clicks to visit /?page=2? ⚠️ This post links to an external website. ⚠️ | Continue reading
One way to guard against out-of-memory errors in applications is to add some swap space to your server. In this guide, we will cover how to add a swap file to an Ubuntu 20.04 server. ⚠️ This post links to an external website. ⚠️ | Continue reading
Build a hybrid search engine with semantic, full-text, and fuzzy search - all within Postgres Search is hard. It's a critical part of many apps, but getting it right isn't easy. This is especially true for RAG-pipelines where the quality of retrieval can make or break the entire … | Continue reading
Given our company's role enabling SAML SSO, I often hear about the SSO Tax. It's usually pretty negative; people feel strongly about this stuff. The SSO Tax For those of you less familiar with the SSO Tax, you may find an overview of single sign-on (SSO) helpful. More briefly, si … | Continue reading
Like your versioning scheme, your changelog is a vital and oft-overlooked method of communication to your users. Unfortunately, it's easy to write a changelog, but hard to write a great one. The Keep a Changelog project offers some good high-level guidelines, but speaking as some … | Continue reading
Pom was a Belgian comic artist, best known as the creator of the humorous adventure series, 'Piet Pienter en Bert Bibber' (1951-1995). While barely known outside Flanders, the comic enjoys a cult following to this day. The stories are marked by odd verbal jokes, cynical comedy an … | Continue reading
When you see a small bug or error in a repository, a common refrain is to submit a pull request to fix it. To submit a pull request with a correction is an act of kindness to the maintainers. It allows the maintainers to review the change and accept it with a click. But it's a bi … | Continue reading
Remember the chat bot hype circa 2016? Well, seeing as we have the ability to implement chat with far greater capabilities at our disposal, I couldn't help but create my own Slack bot powered by LLMs. At the moment, it doesn't do a whole lot, but it is available to shoot the shit … | Continue reading