The grill I recently purchased an ASMOKE Essential ‘Smart’ pellet grill. Before purchasing it, I did what any average consumer does and watched several YouTube review videos. As it turns out, those were all astroturfed, paid content from ASMOKE. My experience convinced me to write this post as counter-programming to ASMOKE’s prolific astroturfing. This post is what I wish I had found before purchasing the ASMOKE Essential very dumb, very bad, non-essential grill. My hope is that at leas...| Posts on Adriano Caloiaro's personal blog
Problem synopsis I’m a huge fan of sqlc’s approach to code generation. I’ve seen sqlc called a reverse ORM, and I really like that moniker. However, as a sqlc newbie, I’m still discovering its edge cases. Today’s edge case is using postgres UPSERT queries with sqlc. The crux is that when upserting, it’s necessary for unique key conflicts to occur so that the UPDATE portion of the query executes. But non-null uuid Go types tend to have a zero-value of 00000000-0000-0000-0000-000000...| Posts on Adriano Caloiaro's personal blog
Mastodon While I’m in no way a Mastodon power user, I’ve really been enjoying the content that I get from my very limited Mastodon feed. I recently stopped consuming news from – hold on let’s not call it news. I recently stopped consuming useless information from a site that I won’t name. Everyone has those junk, just-for-fun sites they visit to blow off stream. You don’t have to be proud of them, and it’s fine that you visit them; every part of every day need not be productive....| Posts on Adriano Caloiaro's personal blog
TL;DR ess automates syncing .env with env.sample It’s available here on Github. The problem If you have a look through any software or infrastructure project you’ve worked on in the past, it won’t take long before you come across some “secrets”. Secrets are how we generally refer to things like passwords, API keys, and certificates that act as “identity”. If you have the secret to an identity, you or your systems are assumed to have that identity. Identities are authorized to do...| Posts on Adriano Caloiaro's personal blog
Update :: live demo now available A demo of this concept is now available at https://garbagespeak.com and the demo source code is available at https://github.com/acaloiaro/garbagespeak.com/. Intro I’ve encountered a lot of skepticism around the idea of adding dynamic behavior to Hugo sites with hugo-htmx-go-template. That skepticism is well founded, because Hugo bills itself as a static site generator. So why would anyone want to add dynamic functionality to Hugo sites when Hugo aspires to ...| Posts on Adriano Caloiaro's personal blog
Overview I’m always looking for the easy way. Certbot already makes retrieving TLS certificates from Let’s Encrypt easy. But it’s getting those certificates “into production” that tends to be less easy. This is the easy way to get Let’s Encrypt TLS certificates into production with Hashicorp’s Nomad. This is an overview of what we’ll be doing: Using Nomad’s docker driver to run docker container jobs. Using a cerbot docker image that performs a DNS-01 Challenge using Hetzner...| Posts on Adriano Caloiaro's personal blog
A rough edit of my Haflin Creek ride today. Roughly the first ~1000 ft. of vertical drop are missing from this video because the quality was too poor to include. Any by that, I mean that I don’t know how to position an action camera correctly. This was only my second time riding with a camera, and it took all of half a ride for a rock to kick up from my front tire and crack the lens. So I guess I’m in the market for a new camera? I was taking it easy on this ride since I was riding solo o...| Posts on Adriano Caloiaro's personal blog
Post-incident Sumary Hacker News Discussion To summarize this post, I was seemingly throttled by AT&T for days. See the Original Post for the full write up. While gathering data for this post and attempting solutions, I changed my LTE router’s APN, which caused it to re-authenticate to AT&T, and after I was re-authenticated I was no longer being throttled. One Hacker News user suggested that re-authenticating may have caused me to route through a different PGW (Packet Data Network Gateway) ...| Posts on Adriano Caloiaro's personal blog
Whether you think about them all the time or never at all – mountain bike brakes are what keep you alive on those gnarly descents. And while the whole braking system matters, I’m not going to talk about rotor sizes, 2-piston vs. 4-piston, or lever angle; I’m talking about the humble brake pad. I had long considered brake pad choice a foregone decision – resin (organic) pads are king and metal pads (sintered) are for Huffy! But that’s not very well informed. You should choose brake p...| Posts on Adriano Caloiaro's personal blog
I did math for the first time when I was 29 years old. This isn’t a self-deprecating snipe or feigned humility. I did math for the first time when I was 29 years old. When I finally did it for the first time – at least, the first recorded time – I didn’t know it had happened. It was six years later reading Paul Lockhart’s excellent piece entitled, “A Mathematician’s Lament” that I realized what I’d done; I’d finally done math all those years ago. At the time I was pretty s...| Posts on Adriano Caloiaro's personal blog
After figuring out a problem after hours of struggle, the simplicity of the result often belies the difficulty of the process. When I look at the final configuration that I came up with in ACEManager, everything looks simple and obvious, but the process was far from it. That’s the case nearly every time I configure a new feature on my Sierra Wireless RV55 LTE router. This device is not made for consumers. It’s built for ambulances, traffic lights, Greyhound buses, remote gas pipelines, an...| Posts on Adriano Caloiaro's personal blog
If you’re reading this, you’re probably familiar with the fact that I’m permanently roaming, and I’d be foolish not to acknowledge the importance of my wireless setup in making that possible. Getting – and staying – connected while permanently roaming is nothing like paying the local cable cabal to get your house or apartment connected. Remember the last show you binged on Netflix over the weekend? That consumed 20x most mobile users’ monthly data allotment, but you never had to...| Posts on Adriano Caloiaro's personal blog
This is less about saying farewell to Estes Park than it is about a ride I’ve been eyeing for over five years. Not only did I have the wrong bike when I was here in September, 2015, but I learned that this route existed the day after I finished an out-and-back run of Trail Ridge Road on my old Giant roady. TRR is the downhill paved segment of today’s route. There are a multitude of reasons to visit this beautiful town nestled at the base of Rocky Mountain National Park. There are endless ...| Posts on Adriano Caloiaro's personal blog
Where am I? I’ve been wanting to write about what I’ve been up to the past couple of months and keep putting it off because I convinced myself that I need to write a long and protracted post about why I’m living in a travel trailer. Oh yeah, I live in a travel trailer now. But I don’t think I’ll delve into why I felt compelled to leave NYC and become trailerfolk because it’s really not that profound or interesting. Before anyone asks – it had nothing to do with COVID-19. In fact...| Posts on Adriano Caloiaro's personal blog
This is mostly a note to my future self since I couldn’t find any documentation on using Terraform with Linode Object Storage as a Terraform state backend. With that said, I hope to save other intrepid Linode users some time if they’re lucky enough to come across this post. While I’ve explained the problem in terms of Linode, the solution here applies to any non-S3 object store compatible with the S3 API. Swap in the appropriate endpoint for your provider. Chances are, if you’ve ever ...| Posts on Adriano Caloiaro's personal blog
Hey all, just a quick post about di-tui, my new di.fm terminal UI player. I’ve been playing hours of music with this player over the past two weeks and have to say that I really love it and am proud of its ease of use and simplicity. Most people who know me know that I work almost exclusively in the terminal: tmux, mutt, slack-term, vim, and now di-tui and many more. Now I finally have great music in the terminal! I hope someone else finds it useful. Cheers| Posts on Adriano Caloiaro's personal blog
Shipping production software requires a lot of housekeeping; so much so that many developers mentally block out just how much time a day they spend endlessly shepherding their work through the release lifecycle. Does the pull request have merge conflicts? Are tests passing? Is the linter happy? Is some other automated check failing? Most of these failures require intervention; whether it’s a finicky spec failing in a test suite or something more serious like a merge conflict. Intervening on...| Posts on Adriano Caloiaro's personal blog
I finally felt compelled to write this after reading a little tidbit from a blog posted on Hacker News containing this perennial piece of technoFUD One of the downsides with JWTs is that banning users or adding/removing roles is a little harder if you need the action to be immediate. … Since the token is stored client side, there is no way to directly invalidate the token even if you mark the user as disabled in your database. Rather, you must wait until it expires. Are you sure about that,...| Posts on Adriano Caloiaro's personal blog
Do I have your attention? I’ll come clean — I don’t actually have very strong feelings about open office floor plans, but with so many people waxing hyperbolic about them, I felt that it was time someone weighed in with a contrarian opinion and matching hyperbole. DHH’s article above titled “The open-plan office is a terrible, horrible, no good, very bad idea” reduces the open-office decision to the idea that open offices look good to managers signing leases. The idea is that mana...| Posts on Adriano Caloiaro's personal blog
This is the first in what I hope becomes a series of posts on how we’re slaying the monolith at Greenhouse. Over the course of the next year, Greenhouse Engineering is aiming to break down our monolithic Rails application into a more scalable and robust collection of services. This won’t happen quickly, but it will happen deliberately and with the clear goal of safely scaling Greenhouse Recruiting into the future. This is a cross-post from Greenhouse’s Engineering blog, In the Weeds. --...| Posts on Adriano Caloiaro's personal blog
I’ve been wanting to scratch a writing itch for quite a while. Over the last twelve months I’ve had the good fortune of having visited nine countries. And every one of those trips involving some amazing stories with great people. In April, I broke my collarbone while mountain biking in Peru (I’ll do a writeup on that at another time), which provided no small amount of downtime to think about what to do with my time when I’m not out being active.| Adriano Caloiaro's personal blog
Fly.io Postgres failover fix (flyctl pg failover) This is a note to myself, meant to be succinct and helpful. I’m sharing it publicly to save others time. Most of the time Fly.io works as I expect it to, but occasionally there are edge cases that lack documentation, public announcements, or both. It’s possible that at some point Fly.io announced a breaking change and I missed it, but the behavior I observed deserves more than an announcement or silently released documentation.| Adriano Caloiaro's personal blog
Hetzner raises prices This morning I received an email from Hetzner stating that they are raising prices in the US while significantly reducing bandwidth. The largest price percentage increase is 27.52% for CPX21 servers, and the smallest is 4.17% for CX3+ servers. Bandwidth allotments are decreasing on average, across all products, 88.19% from previous allotments. I’ve been a big fan of Hetzner. Unfortunately they’ve made a feeble attempt to dress this change up in the name of “fairnes...| Adriano Caloiaro's personal blog
ChatGPT is slipping Three months ago I put code in production that utilizes gpt-4o and/or gpt-4o-mini models to analyze feedback about businesses and categorize it. The prompts instruct the models to identify categories of feedback, and in a second phase, extract some examples of what people said. This is a simplification, but it took very little effort to craft some prompts that enabled even the meager gpt-4o-mini model to do exactly that. It didn’t feel like a stretch to imagine that this...| Adriano Caloiaro's personal blog