2025-11-17 16:51:30
Hey friends!
I hope you had a good week! Mine was fairly busy at work, but all good things. My kiddos are finally not sick for the first time in a minute, and I'm VERY grateful!
Anyway, let's learn.
Was this forwarded to you? You can subscribe here!
Typewriter web component
CSS Gamepad API Visual Debugging With CSS Layers
Perfecting Baseline
How I Taught GitHub Copilot Code Review to Think Like a Maintainer
This week was a weird one with Veteran's Day in the U.S. right in the middle of the week, but it was fun too to celebrate my wedding anniversary, see good friends, and hang out with my babies. My toddler is actually starting to play with our 6 month old, which is very exciting, even though it's mostly her pretending to cook while he's sitting there like a blob, but... still!
I also wrote and coded some stuff that isn't public yet, but if you wanna hang out with me on the internet, I'm streaming again on Thursdays! This past week we triaged and worked on some pull requests in the repository for PocketCal!
Angular v21: The Adventure Begins
Save the Date: November 20, 2025
Ready to shake up how you build apps? Angular v21 is coming in hot with Signal Forms, Angular Aria headless components, and a leveled-up MCP Server. Imagine forms that actually vibe with your code, AI-powered tools that get out of your way, and accessibility upgrades baked in.
Learn more and add it to your calendar here!
Last week, I had you merge two arrays! Awesome job Nate, Gavin, Micah, Vincent, Ross, David, Miguel, Ten, Kaartic, Toni, and Juliano,!
This week's question:
Given a positive integer n, write a function that returns an array containing all integers from 1 to n, where each integer i appears exactly i times in the result. For example, 3 should appear 3 times, 5 should appear 5 times, and so on. The order of the integers in the output array does not matter.
Example:
> repeatedIntegers(4)
> [1, 2, 2, 3, 3, 3, 4, 4, 4, 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)
U.S. Mint In Philadelphia Presses Final Pennies As The 1-Cent Coin Gets Canceled
World Map of Human Ideas
36ribs keyboard
Points of contact – a short history of door handles
Why should you never ever fart in an Apple store?
Because there are no Windows!
That's all for now, folks! Have a great week. Be safe, make good choices, and take time to appreciate a cool tree!
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-11-10 16:56:04
Helllloooo!
I don't know about your neck of the woods, but it is SNOWING here in Chicago as I write this. It feels early, but I'm embracing it and playing Christmas music. Let's learn!
Was this forwarded to you? You can subscribe here!
Interactive Fluid Typography
Staggered Animation with CSS sibling-* Functions
The Scope Creep: A Game
How did I get here?
Grayscale testing: The missing step in color accessibility
This was my first "real" week back to work from maternity leave (I had done a bit of work the week before, but with the team at GitHub Universe, this was my first week with everyone around)! It was A Lot™ but not in a bad way! There was a bunch of just general catch-up to do, some roles switched around, some team changes, and meetings on meetings on meetings.
That being said, it was pretty fun! I revived my livestream channel (and will be streaming again on Thursdays), and wrote a blog post about the results of this year's Octoverse report. It's bittersweet and weird to be back at work, but I'm feeling optimistic!
Get personalized career coaching with Keenesse
Keenesse offers 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. Also, if you have a professional development budget you want to use before the end of the year, now's the time!
Last week, I had you plan a chess knight's move! Checkmate Taylor, David, Ten, Jihchi, Micah, Amine, Gavin, Kaartic, and Toni!
This week's question:
You are given two sorted arrays, a and b, where a has a large enough size buffer at the end to hold b (which can be spaces, zeroes, or nulls). Write a function to merge b into a in sorted order.
Example:
let a = [1, 3, 5, 0, 0, 0];
let b = [2, 4, 6];
> merge(a, b)
> [1, 2, 3, 4, 5, 6]
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
I Want You to Understand Chicago
Making content is awful now (video)
Blueberry Milk Tactile Sound Test | Drop CSTM80 (video)
The Farmers' Almanac: A Fond Farewell
Past, present, and future walked into a bar.
It was tense!
That's all for now, folks! Have a great week. Be safe, make good choices, and get to know your neighbors!
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-11-03 15:43:56
Hey friends!
Happy November! I hope you had a good week. I enjoyed being with the family and making silly CSS jokes. Let's learn!
Was this forwarded to you? You can subscribe here!
The killer feature of Web Components
The Origin Story of JavaScript (video)
Start implementing view transitions on your websites today
Building Triska the Ninja Cat: A js13k Dev Story
Super Simple Full-Bleed & Breakout Styles
This next week is my first "real" week back at work from maternity leave! I was "kind of" back this past week, but because GitHub Universe took place, I had the luxury of mostly just catching up on emails and security trainings. I'm excited to gab with my team again and work on cool things for developers.
Also! I was a judge in the Bad UX World Cup Finals and it was delightful and devastating how wonderful and terrible the entries were. Check them out!
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 place scarecrows in a field! Do you know who also is outstanding in their field? Micah, Ten, Paul, David, Kaartic, Toni, Amine, and Dani!
This week's question:
Given he current position of a knight as [row, col] in an 8x8 chess board represented as a 2D array, write a function to return all valid moves the knight can make. Extra credit: Do this for every chess piece!
Example:
knightMoves([4, 4])
> [[2, 3], [2, 5], [3, 2], [3, 6], [5, 2], [5, 6], [6, 3], [6, 5]]
knightMoves([0, 0])
> [[1, 2], [2, 1]]
knightMoves([1, 2])
> [[0, 0], [0, 4], [2, 0], [2, 4], [3, 1], [3, 3]]
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
How Stenographers Type at 300 Words Per Minute (video)
Fields in motion
Virtual Zine Library
Beautiful words in one language
What do you call a pig's favorite move in karate?
A pork chop!
That's all for now, folks! Have a great week. Be safe, make good choices, and stay curious!
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-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