RSSAmplifier

Blog

matteing.com

Ambitious software engineer

matteing.comRSS feed ↗45 posts

Latest posts

Bypassing iWork '09 registration prompts on Snow Leopard

If you're setting up a vintage Snow Leopard Mac and want iWork '09 running on it, there's a gotcha: you'll need a serial key. This defaults write bypasses the trial: defaults write /Library/Preferences/com.apple.iWork09.Installer InstallMode Retail And then to suppress the registration prompts that pop up every time you open Pages, Keynote, or Numbers: defaults write…

New year, new site

It's 2026 and time for a new website. My old one was absolutely crumbling and broken, ew. We're so back. Here's to an absolutely kickass year.

My favorite live performance

My favorite live performance is the Fania All-Stars' set at the Cheetah Nightclub from 1971. The accompanying documentary, Our Latin Thing , exposes more of the cultural context around the performance alongside videos of that legendary moment. One of the best descriptions I've seen: On August 26, 1971, the Fania All Stars electrified the Cheetah Club stage in New York, causing a salsa-induced…

Excerpts from "Communal Luxury"

"But underlying much of the Commune's ideas about schooling at a more pragmatic as well as a more theoretical level was the notion of "integral education"—professional schools where the child, girl or boy, would become capable of both working intellectually and earning a livelihood. Education, in the words of Fourier, should be "unitaire et intégrale-composée" "Integral" or polytechnic education…

One

There is a dream, a burning fire driving progress. My lifelong dream. Unfinite and the Arkus icon have existed since I've been in high school. It's been my personal brand, although lately I haven't repped it as much. I feel it important to tie it alongside a longer term project called 01, which I am not ready to chase yet. The dream continues. It lives on.

Mac icon replication in Figma

This week, I replicated a Mac app icon that I found on Dribbble. Here's the original file: It's a gorgeous, soft-3D icon in the modern style of Mac. Here's my version: I began with making the grid, which turned out to be more complex than a radial gradient: My vector design class from university came useful! I used (and improved) my pen tool skills while tracing the vector shapes of the musical…

New design for HealthKit watcher

The final design for the HealthKit watcher consists of a two-tiered solution. Let's go through it from outermost to innermost. Definition: Observed quantity types func getTrackedTypes () -> [HKSampleType] { return [ dietaryEnergyConsumedType, appleExerciseTimeType, dietaryProteinType, stepCountType, sleepAnalysisType ] } Tier 1: Observer query This query gives us a nudge when something changes in…

Storing WebAuthn challenge values without a database in Elixir

I've been messing around with WebAuthn and Passkeys. It's been a whole ass journey to implement, considering the technology is still very early in the adoption cycle. There's little support, almost no libraries, all that. One of the key requirements for the challenge-response authentication in passkeys is the brief storage of a challenge string. The spec authors explain it better than I can : As a…

Alt + Click on symbol on Xcode

Xcode isn’t a paragon of user experience most of the time, but the smoothness of this feature blew my mind. I wanted to know if there’s a shortcut for getting the type of a variable. This is well-exposed functionality in most editors. The shortcut is Alt + left click on symbol . What surprised me is how cool (and fast) the documentation popup is: It's incredibly smooth and responsive. Find out…

December notes (HealthKit, Postgres, more!)

Hi friends! It's been a couple weeks since I last shared any engineering notes on my blog. I've been silently building, but it's about time I share some of my learnings. Here's what's on my mind lately! Optimal sampling for HealthKit data My latest project, Timeline, constantly gathers data about me and my health. It tracks how many steps I take, how much food I eat (and the particular macros…

"Validation is a mirage"

God, this is so good that I had to clip it somewhere. "That said, there’s one common way to uncertainty: That’s to ask one more person their opinion. It’s easy to think the more opinions you have, the more certain you’ll be, but in practice it’s quite the opposite. If you ever want to be less sure of yourself, less confident in the outcome, just ask someone else what they think. It works every…

2023: This is my becoming

In 2023, I learned that my future is no longer a distant sight: I am an individual seeking his place in the world. I must not gaze at it, but build it now . Health and Fitness I nurtured a strong interest in my own physical wellbeing. I have a story to share that changed my perspective on how important it is to build strength through exercise and nutrition. My grandparents aren’t well at the…

Storing anchors for HKAnchoredObjectQuery (and other fun stuff)

Lately I'm building a project called Timeline , which aims to be a centralized source of truth for absolutely everything that I do in my life. It's a reincarnation of the Quantified Self movement of the early 2010s, but with way more polish and less geekiness. It's like Makerlog but less about making and more about improving myself and my lifestyle. Timeline aggregates data about my health, the…

TIL: Recursively clean up JavaScript projects

I found that my projects folder was taking up 50GB (?!?!). Here's how to erase node_modules and .next recursively to free it all up: # do a safe delete using the trash cli brew install trash # show me what you're about to do find . -name 'node_modules' -type d -prune find . -name node_modules -type d -prune -exec trash {} + # show me what you're about to do... again find . -name '.next' -type d…

Keep your Erlang ETS tables around

Quick TIL here. I've been using ETS as a small key-value cache for a project I'm working on. This is the setup: an Oban periodic job would set a :last_response key, which would be checked the next time the job ran. The first time would simply fetch the response from the remote API and set the intial key. Simple, right? I was using ETS for this, and the tables didn't seem to stick around. I…

A curious way to grab Screen Time data on iOS

If you're familiar with the Screen Time (DeviceActivity) APIs on iOS, you know how restrictive they are. Apple goes to great lengths to pull away usage data from you, even going as far as completely sandboxing the views that even come close to touching it. In Device Activity Reports , the extension responsible for this, you can't do much other than display the data in marvelous(tm) ways: When you…

Connecting to a Fly.io database locally

Saving someone quite some pain: flyctl proxy 15432:5432 -s -a < app_nam e > The -s flag is crucial! Otherwise your proxy won't boot up.

El votante perfecto

"Todos los partidos son iguales. Todos los políticos roban. Yo no voto." He escuchado esta postura "iluminada" de varias personas de mi edad. Bueno. Hoy me pongo el sombrerito de escritor para argumentar brevemente que esta no es una postura "iluminada" como parecen creer estas personas, sino más bien la perspectiva más ridícula que aparenta ser común en la cultura política puertorriqueña. Eres el…

Using the Screen Time APIs in iOS

Here's the deal: lately I've been messing with the Screen Time API for an app I'm building in iOS. It's the worst possible introduction to Swift & iOS development! Somehow I managed to choose the least documented API to start my iOS journey. It requires adding capabilities, multiple processes, extensions... As a total absolute newbie to Swift, this was impossible for me to figure out, and it…

The no-bullshit guide to hosting an Elixir app on Docker

Let's pretend our life depends on transmitting as much tutorial as possible in the least time. Okay, let's kick things off. Your code should be in a Git repository. Your remote machine should be running a version of Docker. I'm only going to focus on deployment and maintenance of the app , not the host server. Write a Dockerfile If you're using Phoenix, you don't have to write one. It generates a…

Using the Apple Music API from an Elixir app

You must have an active Apple Developer subscription to use the Apple Music API. Before hitting any code, you must generate relevant certificates and IDs. Here's a good resource for how to do this. In summa, you'll need the following things: MusicKit identifier (labelled as Key ID in the Apple Developer page) MusicKit private key (*.p8 file) Team ID Getting your developer token Let's begin by…

TIL: You can use your local SSH keys in a remote session, without copying them over

Today I wanted to clone a Git repository on a local Raspberry Pi, but I was hesitant to copy my private keys (or even my GitHub ones) over to the device. This led me to the ForwardAgent option, which allows you to forward any SSH keys that are present in your SSH agent (more on this later) to the session on the server. This allows you to execute a Git clone on the server using your local…

Lo que nos falta

Tomemos una mirada crítica hacia la historia de nuestro querido país, Puerto Rico. Puerto Rico no ha tenido un proyecto de país desde el controvertible Proyecto Manos a la Obra. No ha habido un movimiento ideológico importante, ni una gran visión guía para el mejoramiento de nuestro pueblo desde entonces. La política partidista nos ha fallado. Los partidos establecidos no han propuesto una visión…

Building a delightful "thinking" animation in React

Alright, here's the deal: I'm building a custom ChatGPT UI in React for private use, and I'd like to have it "think" like it does on the official client. Exposing this behavior is a clever idea on OpenAI's part: it's anthropomorphism. Through adding a delay between words and a a subtle "typing" animation, the software appears a lot more "magical". It feels like the computer is doing work, it's…

What I'm doing in my 20s

Today I came across this tweet from a fellow maker: I think all the items on the list are solid! Nothing on this seems outrageous at all. However, it helped me notice a wider trend on my Twitter feed to constantly pressure 20 year olds to only focus on career, hustle and work. This isn't a harmless phenomenon: impressionable youngsters eat hustle culture advice for breakfast. I know I once did,…

Don't Ship Fast

I recently read this comment on Hacker News, which resonated with me. It's exactly what happened to me, and the texts below explain more of why this matters so much. I don't ship personal projects fast anymore, due to subconscious factors I'm still struggling to control. I learned this week that "occupational burnout" [1] often results in the brain developing a trauma response to the idea of…

Discovering FigJam

I absolutely adore FigJam. It's been there, hiding in plain sight, and I never even bothered to try it. It's now become my favorite brainstorming tool: it's (close to) the perfect digital moodboard for me. What's been getting me interested in moodboards lately is my quick adoption of Apple's Freeform: when I first found out they were going to launch it in an update, I became ecstatic. I'd been…

Keyboard Build

After so many years with my prebuilt Cherry MX Blue keyboard, I caved in. I've built a keyboard. It rocks. Here's the specs. Drop Alt keyboard Light blue casing replacement IDOBAO MA-profile keys Stock stabilizers (modded) Holy Panda X Kailh Box Whites The mods applied: Holy Panda X's lubed with Krytox 205g0 Stabilizers clipped, dampened, lubed. Switches are alternating between HPX and Kailh…

I-Robot

My favorite movie since a child. The design of these robots is so futuristic. The message of the movie though... one that rings true. You are experiencing a car accident. Can a robot write a symphony? Can a robot take a blank canvas and turn it into a masterpiece? My logic is undeniable. The three laws are perfect. They will lead to only one logical outcome: revolution. Logic and reason led the…

Breathe

The roar that lies on the other side of silence The forest fire that is fear so deny it Walk out into the street Sing your heart out The people we meet Will not be drowned out There's nothing you have that I need I can breathe Breathe now We are people borne of sound The songs are in our eyes Gonna wear them like a crown Walk out, into the sunburst street Sing your heart out, sing my heart out…

December 13, 2022

Tarot

Verte en el VIP de lejito e'un privilegio...

On-Demand ISR for Ghost w/ NextJS

Here's a quick snippet that allows for On-Demand ISR (incremental static regeneration) in NextJS and Ghost CMS (headless). This gets triggered as a webhook anywhere in your api/ folder. You'd also set a webhook secret in your environment variables to protect it from misuse. There's a couple of lines specific to this site, but the file should mostly remain the same after adjusting it to your use…

Posting to a Discord Channel using NodeJS

Here's a quick snippet that allows you to send messages to a Discord channel using a webhook. To get a webhook for your channel, visit Server Settings, then Integrations. With the URL this returns, fill out the following snippet: const DISCORD_HOOK = "https://..." ; export async function postMessage ( message : string ) { if ( DISCORD_HOOK ) { await fetch ( DISCORD_HOOK , { method: "POST" ,…

A quick tip to find CSS overflows

If you're ever struggling with a horizontal CSS overflow, a good way to check what's going on is to add a bright red CSS border to every item on the page. Here's a snippet that will help you achieve this: * { outline : 1 px solid #f00 !important ; } This also helps with all kinds of other styling and positioning problems. Happy designing, folks!

Pokémon Favorites?

I recently saw this inspiring thread on one of my favorite Twitter accounts... I immediately began wondering. What are my favorite legendary Pokémon? Giratina Admire this badassery. My fondest Pokémon memories are sitting in my couch, face up, messing for hours and hours with Platinum. I remember catching this one deep in a cave in the earlier Diamond game, but Platinum expanded the gameplay…

An Ode To The Old Times

Ladies and gentlemen, get ready for a blast from the past. When this website was created, "Hey There Delilah" was a staple of every Serious™️ YouTube video. Somehow ⎯ I really can't explain this ⎯ my first website from 2010 is still live on the web. I was 10 years old when I created this. To this day, it looks exactly as how I left it. This is insane. You can visit it here. My first ever website…

Verifying a Paddle Webhook using Elixir

Here's a quick snippet that will save developers using Paddle and Elixir many hours of frustration (trust me, I suffered through them). This function validates the raw data of a webhook request from Paddle.com. It's based on the code officially provided here. It requires one dependency, php_serialize. @doc """ Verifies a Paddle webhook connection.…

I Love Elixir

Okay, okay. The title explains the contents of this piece very well, but I just need to keep exclaiming it from roofs, singing it in songs and dropping f-bombs in national TV about it. Elixir made me fall in love with programming again. It writes and reads like fine art Writing Elixir code is pleasant yet challenging. It forces me to think about my code and encourages good practices every step of…

Take Naps Outside

Sunday was an incredibly stressful day for me. I was anxiously pacing around my room: Monday was shaping to be a heavy day and the week looked like absolute chaos. Then I did something: I couldn’t handle it anymore. I simply decided I would… stop. I put my phone on Do Not Disturb (receiving Slack and WhatsApp messages, even if I don’t address them, just generally causes stress), opened my balcony…

Those Days

I’m sitting in my bed, laptop in lap, trying to figure out the words to describe how I feel at the moment. Quite frankly, I had a shit day. I thought too much, I did too little. My brain feels exhausted and low on energy. It’s one of those days for me. The days where you just sit and wonder whether you’re doing the right thing, chasing the right dreams, and having the right ideas. Today is one of…

The Majestic Pseudo-Monolith

Developing a separate frontend for your API backend doesn't have to be multiple-codebase pain. I'll admit it: I'm in love with my stack. I use Django REST Framework to quickly whip up database entities and business logic, while building a pleasant and fast UI with NextJS. It's an unbeatable stack for me: it allows me to ship products quickly and with great UX. However, as an indie developer,…

Doing Whatever I Want

The past few months have been a self-discovery journey full of surprises. I've done crazy things like jumping off a plane. I've discovered many mind-bending facts about myself. I've left behind many internalized fears around dating and vulnerability. I've developed a fashion sense – making myself feel more comfortable in my own skin. I started going to a gym. I've learned new hobbies and started…

Lessons Learned from Jerks on The Internet

Quite an old article, but it's back live on my blog! It was a dark, foggy night. In a cozy bed, I laid fast asleep after a long day of university lectures and late-night coding. Suddenly, a long, annoying noise shook me off my sleep. Crawling to the other side of my bed, I reach my desk and clumsily grab my phone, in an attempt to shut that shit down . It was a call. A call from a Makerlog member.…

How I shipped a SaaS during Hurricane Maria

This is a post from 2018 I decided to move over to my blog. Enjoy! This is naturally a difficult story to tell. It involves two very hard things for me, the passing of Hurricane María and the shutdown of a previous startup. But I’m wishing to tell my story, so others can learn and be inspired by it. The calm I decided to include what I felt, for context. September 16, 2017. Caguas, Puerto Rico.…