2025-10-27 15:03:23
Hola hola!
I hope you're doing well, my friends. I had a good week of being (almost fully) offline, in prep for going back to work from maternity leave (!) and closing out October. Let's learn!
Was this forwarded to you? You can subscribe here!
Programming With Less Than Nothing 
Importing vs fetching JSON 
Solving NYT's Pips Puzzle 
React vs. Backbone in 2025 
My family and I did a little vacation this week! It was really nice. Since I go back to work next week (!!) it was good to have a "last hurrah" as a little new family of four.
I brought three books on the trip, and read two... pages. Vacationing with two babies is a VERY different experience than traveling as an adult, but not necessarily in a bad way! We were solving the same problems we do at home, but there were less of them. The variety (and sunshine) was good for my brain and I'm really happy we did it, though at the same time I would struggle to recommend flying internationally with a 2.5 year old and a 6 month old, heh. There was a blog post by Rachel Smith that I read a while back about how the family holiday is worth the work/stress/effort, and I can say heartily that she was right.
Unlock Your Career Potential with Keenesse
Feeling stuck, or ready for your next big move?
Keenesse offers personalized career coaching to help you gain crystal-clear career goals, pinpoint exciting advancement opportunities, and master crucial skills like resume optimization, interview mastery, and confident negotiation – all to land your dream role in a competitive market.
Our expert team of seasoned tech industry coaches provides tailored support at every career stage, from ambitious students to accomplished executives.
Ready? Schedule your free, no-obligation consultation today at keenesse.com.
Last week, I had you split up a string into specified widths! Good job Ten, Paul, Ross, Micah, David, Toni, Jeremias, Dave, Amine, George, and Kaartic!
This week's question:
Given a field represented as an array of 0s and 1s, where 1 means that position needs protection, you can place a scarecrow at any index, and each scarecrow protects up to k consecutive positions centered around itself (for example, for k = 3, a scarecrow at i protects i-1, i, and i+1). Return the minimum set of indices where scarecrows should be placed so that all the positions with 1 are protected. You can assume k is an odd number (or make up what happens if it's even).
Examples: 
let field = [1, 1, 0, 1, 1, 0, 1];
let k = 3;
placeScarecrows(field, k);
> [1, 4, 6]
placeScarecrows([1, 0, 1, 1, 0, 1], k)
> [1, 4]
placeScarecrows([1, 1, 1, 1, 1], 1)
> [0, 1, 2, 3, 4]
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
First Shape Found That Can’t Pass Through Itself 
Why Stories Make You Smarter Than Self-Help Books 
‘Feisty’ Otters Are Once Again Hijacking Surfboards in Santa Cruz 
Holy M0lly Guacamole: TKC's Last Hurrah 
What do you call someone who knows about marine life? 
An a-fish-ionado!
That's all for now, folks! Have a great week. Be safe, make good choices, and plan a trip!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-10-20 15:29:38
Hey friends!
I hope you had a good week. I tried pilates for the first time and am very sore... which is a good thing? Anyway, let's learn!
Was this forwarded to you? You can subscribe here!
A complete guide to HTTP caching 
50 Reasons to Build a Website 
Making the Web Accessible: The Mission Behind WP Accessibility Day 
Environment variables are a legacy mess: Let's dive deep into them 
This week, I threw a PowerPoint party! If you don't know what that is, it's pretty self-explanatory: everyone has to show up and present a PowerPoint on a topic of their choosing. Talks were as short as 5 minutes and as long as 20, depending on what people were talking about and explaining! It was really fun. We had a wide variety of presentations that covered:
I highly recommend pinging your friendly local group chat for a night like this. We got to know our friends better, we laughed hard, and learned a bunch while cheering people on!
Tired of back-and-forth reviews?
Graphite Agent is your AI reviewer that collaborates directly in your PR to help you merge faster.
It surfaces logic bugs, edge cases, and performance or security issues — and suggests safe, minimal fixes right where you work. You can ask questions, make edits, and update your PRs seamlessly, all within your review flow.
No IDE context switching. No waiting. Just faster, smarter reviews.
Last week, I had you format CSV strings! It was a toughie, good work Ten, Ross, David, Paul, Toni, Ross, Paul, and Amine!
This week's question:
Given a string str and an array of positive integers widths, write a function that splits the string into lines, each with the exact number of characters as specified by the corresponding width. Return an array of the substrings. Use the last width for any remaining characters if the array is shorter than needed.
Example: 
const str = "Supercalifragilisticexpialidocious";
const widths = [5, 9, 4];
> splitByWidths(str, widths);
> ['Super', 'califragi', 'list', 'icex', 'pial', 'idoc', 'ious']
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Photos show polar bears chilling at home in abandoned Russian research station 
800 Years of English Handwriting 
Keebfront Bigwig – The First HDPE + PBT Linear Switch (video) 
No Nonsense Tourist Info for Young People 
Where does a ghost go on vacation? 
Mali-boo! 
That's all for now, folks! Have a great week. Be safe, make good choices, and get yourself a sweet treat!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-10-13 16:14:34
Hey friends!
This week felt surprisingly fast for me. I think because my maternity leave ends soon (!), time feels unnecessarily quick, which is very rude. Anyway, let's boogie!
Was this forwarded to you? You can subscribe here!
Getting Creative With shape-outside 
A pragmatic guide to modern CSS colours 
Code golfing a tiny demo using maths and a pinch of insanity 
15 Recent Node.js Features that Replace Popular npm Packages 
Vite: The Documentary (video) 
I'm reading the book Truly Madly Guilty right now and it's pretty fun! I've enjoyed reading Liane Moriarty's books in the past (Big Little Lies, Nine Perfect Strangers, and a few others), and I like how she turns fairly ordinary lives into something suspenseful in every story I've read of hers. In this one, it's literally a bunch of people in a suburb who know each other, but something happened at a barbecue party! Dun dun dun.
Anyway, the news has been bumming me out lately (to put it quite mildly), and it's fun to get a little mysterious escape. It's early in the book so I don't know what's going to happen, so don't hold it against me if you read it and the ending isn't great. Ha!
AI is changing who builds software. But most AI coding tools ignore enterprise systems, leading to chaos and risk.
Retool is the first AI AppGen platform built for real teams. Developers and domain experts collaborate to build production-ready apps, governed by your standards, powered by your live data.
Thousands of developers trust Retool. Ready for AI-assisted development? Sign up here.
Last week, I had you create a changelog of grouped edits! LGTM Ten, Jihchi, David, Micah, Gavin, and Amine!
This week's question:
Given a CSV string where each row contains a name, age, and city (and values may be quoted, have embedded commas or escaped quotes), write a function that parses the CSV and outputs a formatted list of strings in the form: "Name, age Age, from City". Handle quoted fields containing commas and escaped quotes.
Example: 
const csv = 'name,age,city\n"Ryu, Mi-yeong",30,"Seoul"\nZoey,24,"Burbank"'
csvToList(csv)
> `
- Ryu, Mi-yeong, age 30, from Seoul
- Zoey, age 24, from Burbank
`
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Scientist learns he has won Nobel prize while on digital detox in US mountains 
The genius logic of the NATO phonetic alphabet (video) 
A cartoonist's review of AI art 
TGR x SM Shi (silver) + Alu Plate + HMX Sonja + GMK Soyamilk = Keyboard Typing Test (video) 
What kind of dog can tell time? 
A watchdog!
That's all for now, folks! Have a great week. Be safe, make good choices, and go to your local library!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-10-06 16:48:50
Howdy y'all,
I hope your October kicked off well! I admit the news kind of got me down this week, but my daughter was a flower girl in a wedding this weekend, so I'm happy to end it on a high note! Let's learn.
Was this forwarded to you? You can subscribe here!
Let's Be Specific: CSS Specificity Explained 
I want to intercept Boolean Coercion for Objects in JavaScript 
How much do you really know about media queries? 
PIRACYKILLS 
I, like many people, tried the latest Sora 2 video generation app from OpenAI. After watching it make me fail to do the worm and pass my typical AI video/image generation test prompt, I... deleted my account.
I think it's really interesting to see how far media generation models have come. But, after scrolling through the feed of the Sora 2 and seeing all the copyrighted characters acting out in ways I highly doubt would be approved by Disney/Nintendo/etc legal teams, I just don't think it's the type of app I want to contribute to. I talk about it a bit in the blog post I just linked above: I don't really like seeing images and videos generated by AI. I think they can be helpful for an artist to use as a reference, but I would never want to just consume AI slop on purpose. Like the quote on my blog's AI manifesto says: "If you couldn't be bothered to write something, I won't be bothered to read it."
Tired of waiting on approvals? Graphite helps you ship faster by breaking large pull requests into smaller, dependent ones. With stacking, each commit can be tested, reviewed, and merged on its own—so you stay productive even while others review. Stop waiting. Start shipping.
Last week, I had you find hyperfactorials! Blammo Trevor, Raymond, Ten, David, Jeremias, Gavin, Fortress, Kaartic, Andrew, Paul, Jonathan, and Amine!
This week's question:
You're building a tool that tracks component edits and groups them into a changelog. Given an array of edit actions, each with a timestamp and a component name, return an array of grouped changelog entries. Edits to the same component within a 10-minute window should be merged into one changelog entry, showing the component name and the range of timestamps affected.
Example: 
const edits = [
  { timestamp: "2025-10-06T08:00:00Z", component: "Header" },
  { timestamp: "2025-10-06T08:05:00Z", component: "Header" },
  { timestamp: "2025-10-06T08:20:00Z", component: "Header" },
  { timestamp: "2025-10-06T08:07:00Z", component: "Footer" },
  { timestamp: "2025-10-06T08:15:00Z", component: "Footer" },
];
> groupChangelogEdits(edits)
> [
    {
        "component": "Footer",
        "start": "2025-10-06T08:07:00Z",
        "end": "2025-10-06T08:15:00Z"
    },
    {
        "component": "Header",
        "start": "2025-10-06T08:00:00Z",
        "end": "2025-10-06T08:05:00Z"
    },
    {
        "component": "Header",
        "start": "2025-10-06T08:20:00Z",
        "end": "2025-10-06T08:20:00Z"
    }
]
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Hi!
This is the Jam.dev team.
We’ve taken over this spot in Cassidy’s newsletter to tell you that today at 1:15pm PT we’re going to be announcing a really big deal very exciting new engineering tool from the live stage at OpenAI!
Watch on the livestream at 1:15PT
Or you can just go here and sign up for early access before all those shlups from OpenAI do.
I turned the Lego Game Boy into a working Game Boy 
V4N4G0N Embrace - 45% Mechanical Gaming Keyboard (video) 
The Last Days Of Social Media 
In Praise of RSS and Controlled Feeds of Information 
What animal is always complaining?
The whine-oceros!
That's all for now, folks! Have a great week. Be safe, make good choices, and avoid doomscrolling!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-09-29 15:37:31
Hey friends!
We're going to be waking up this week because September is ending! But until then, let's kick back with some content.
Was this forwarded to you? You can subscribe here!
The Best CSS Unit Might Be a Combination 
JSON is not JSON Across Languages 
You may be looking for a useSyncExternalStore 
Stop using .reverse().find(): meet findLast() 
This week was a fairly offline week of cleaning around our home, potty training my toddler (highly recommend this book if you ever need some tips, it has worked super well for us), and just being with family and friends. My inbox is suffering, BUT it's been good for my brain.
That being said... I did mess around a bit with my mobile writing setup, and it's been really nice! I want to mess with it more when I can.
No sponsor this week (the economy, amirite?), but I'm still grateful you're looking here. Have a good week, check out Ductts, check out PocketCal, and dream of a calmer tomorrow.
I'd appreciate deeply if you share this newsletter with your friends, coworkers, or anyone you think might like it. Or who might hate-read it. Or who might just be bored and want another email in their inbox every week.
<3
Last week, I had you identify numbers as abundant, deficient, perfect, or amicable! YOU are the perfect ones, Sergio, Amine, Adam, George, Usman, Andrew, Pedro, Elke, David, Marco, Victor, Gavin, John, Jonathan, Neefertiti, Ten, and Paul!
This week's question:
Given the non-negative integer n , output the value of its hyperfactorial. Don't worry about outputs exceeding your language's integer limit.
Examples: 
> hyperfactorial(0)
> 1
> hyperfactorial(2)
> 4
> 
> hyperfactorial(3)
> 108
> hyperfactorial(7)
> 3319766398771200000
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Fat Bear Week is here early, and the bears are fat and playful 
Always invite Anna 
filofax original (personal size) unboxing, setup & flip-through (video) 
OwLab Spring | blu4t | DROP+MiTo Keysterine (video) 
Anyone can make a pun... but only a parent can nurture it until it's fully groan!
That's all for now, folks! Have a great week. Be safe, make good choices, and stay hydrated!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-09-22 16:53:03
Hey friends!
I hope your had a good week! Mine flew by, and I had a great time. I'll tell ya more about it below! Let's gooo.
Was this forwarded to you? You can subscribe here!
All 197 entries submitted to js13kGames 2025 
The History of Themeable User Interfaces 
React Won by Default - And It's Killing Frontend Innovation 
BlueSky Likes Components 
This week I saw Lea Salonga in concert! She was spectacular.
She sang not only her well-known hits (like "Reflection" from Mulan, "On My Own" from Les Misérables, and "A Whole New World" from Aladdin), but also a bunch of other songs from various movies and Broadway shows.
Her tour is called, "Stage, Screen & Everything In Between" and it is perfectly that. She did Disney medleys (I practically levitated when she transitioned between "Colors of the Wind" to "Let it Go"), and songs made famous by movies like "My Heart Will Go On" from Titanic, and "A Million Dreams" from The Greatest Showman.
I love musicals (on stage and off), so this felt like the perfect show for lil ol me, and I just loved it!
Stop testing your platform in prod---simulate it!
Applied Computing Research Labs built SimKube to help you test changes to your Kubernetes platform locally instead of in production. With SimKube, you can replicate your entire production Kubernetes environment on your laptop (or in your CI pipeline) and "shift left" your platform development. Want to know if your new autoscaling policy leaves pods stuck in Pending? Want to make your boss look good and save some money with better bin-packing? Want to ship a change on Friday afternoon without making your on-call mad? Simulate it first!
We've used SimKube for all these scenarios and more. Read a case study about our recent work with Astronomer, or contact us to learn how SimKube can make your Kubernetes platform better.
Last week, I had you analyze baseball scores! Home run Gavin, Ender, György, Juliano, Rafael, Paul, Ten, Taylor, David, Elke, and Stephen!
This week's question:
Write a function that determines if a number is abundant, deficient, perfect, or amicable. (Thanks Raymond for this one!)
Examples: 
whatKindOfNumber(6)
> 'perfect'
whatKindOfNumber(12)
> 'abundant'
whatKindOfNumber(4)
> 'deficient'
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Their schools banned phones. Out came the iPods and cassette players. 
Teaching Lettering to Third Graders 
I made a mechanical laptop (video) 
I didn't bring my son to a museum to look at screens 
Why did the chicken become a chef?
Because it has im-peck-able taste!
That's all for now, folks! Have a great week. Be safe, make good choices, and sit up straight!
Special thanks to Ezell, Ben, Kinetic Labs, Marta, and Flora for supporting my Patreon and this newsletter! 
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon