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…
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…
"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…
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.
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
"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…
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…
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…
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…
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…
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…
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…
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,…
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…
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…
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…
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…
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…
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…
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" ,…
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!
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…
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…
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.…
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…
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…
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…
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,…
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…
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.…
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.…