2025-05-19 11:51:15
Hello!
It's mid-May, hey hey! I hope you had a good week. I'm in the thick of new baby times still, but slowly coming up for air.
Let's read!
Was this forwarded to you? You can subscribe here!
Creating Flower Shapes using clip-path: shape()
How to have the browser pick a contrasting color in CSS
Gamedev.js Jam 2025 winners
Basecoat component library
Why we are still using 88x31 buttons
I've been in a funk this week. I think I'm impatient with how long recovery takes from major surgery/giving birth/all that jazz. I've been through this before, so I know that it's normal to take a while. I should understand that both my body and my brain need time to recover.
But... I miss coding, and being creative, and making things in general. And unfortunately, when my loving family gives me time to do those things, all I can think about is that I should be cleaning something, or catching up on sleep, or taking care of my babies, and I end up spiraling around that. It's annoying.
Anyway, there's no solution here except to wait it out, give myself some grace, and enjoy some newborn cuddles (which are pretty fun, I gotta admit). This really is a time period that not enough people talk about!
Gen AI tools can simplify integration, boost security, and speed application delivery.
Learn how in this Amazon Web Services (AWS) webinar.
Last week, I had you add operators to make a valid expression! Y'all did awesome David, Ten, Kasia, Muhammad, Neha, and Elke!
This week's question:
Write a function that draws an ASCII art cube of given height n
.
Example:
> drawCube(2)
"
+----+
/ /|
+----+ |
| | +
| |/
+----+
"
> drawCube(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)
Why is there a $1,000 fine for building a nuclear bomb in Chicago?
Thoughts on Thinking
Petrichor
LZ erGhost with GMK Katakana
I don't trust stairs. They're always up to something.
That's all for now, folks! Have a great week. Be safe, make good choices, and look at the clouds!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-05-12 12:23:00
Helllloooo!
I hope your week was a good one. Mine was packed with sleepless nights, but good days. And Happy Mother's Day to all of the moms and mom-figures out there! Let's go!
Was this forwarded to you? You can subscribe here!
Quickly checking HTTP response headers
CSS shape() Commands
Electron ain't bad, actually
Guitar Chords in CSS
I had a bit of mental space this week to write about my second c-section experience! It's kind of a graphic one, as a warning, but if you or anyone you know might be getting a c-section (or two) at some point, it could be a useful read! Beyond that... it's been very hectic on my end still getting used to having two kiddos around, but I'm grateful.
Also, thanks Stephen for the shoutout in your blog! I love seeing when folks redo their portfolios.
Gen AI tools can simplify integration, boost security, and speed application delivery.
Learn how in this Amazon Web Services (AWS) webinar.
Last week, I had you return string prefixes. I made some sleepy typos in the examples, thanks for your patience y'all! Anyway, good work Jeremias, ashuzon, David, Ten, Ramsés, Muhammad, Leo, Joey, Kracekumar, Kasia, Prashil, Elke, and Neha!
This week's question:
Given two integers origin
and target
, add operators in the origin
number to make it equal target
, if possible. You can return just one, or all possibilities for this!
Examples:
> addOperators(123, 6)
> ["1*2*3", "1+2+3"]
> addOperators(3456237490, 9191)
> [] // none possible
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Defining Comics
Why is everything binary? (video)
Best-selling keyboard switches of April 2025
Daily weather report by Ninn Salaün
People are making apocalypse jokes like there's no tomorrow!
That's all for now, folks! Have a great week. Be safe, make good choices, and lean on your community!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-05-05 13:29:00
Hey friends!
I hope you had a good week! Mine was very tiring with a brand new baby at home, but good. Let's gooo!
Was this forwarded to you? You can subscribe here!
IKEA's web fonts
All 420 entries from Gamedev.js Jam 2025
GSAP 3.13: now free!
Giving V8 a Heads-Up: Faster JavaScript Startup with Explicit Compile Hints
Welp, I've finished week 1 of being a parent of TWO babies. Whew. It's been exhausting, but also somewhat easier than I expected? I think experience really does help. We're not as stressed about funky noises or anything, and we know how to burp a baby and change a baby and... generally how to keep one alive.
...But also we have a toddler at the same time.
Anyway. I'm in the trenches over here, but hanging in there. My newborn is chilling watching me write this, and I can say with certainty that all of the pains of pregnancy, the c-section, and the hormonal swings are worth it.
The State of Devs survey is now open to participation, and unlike previous "State of" surveys it covers everything except code: career, workplace, but also health, hobbies, and more. Come take our most important (and most fun!) survey yet!
It takes a few minutes. Make your voice count!
Last week, I had you compress an array of characters! Good work Kracekumar, Kyle, Neha, Miguel, Ross, Austin, Andrew, Ashuzon, Roodz, David, Muhammad, Ten, Jeremias, and Danny!
This week's question:
Write a function that takes a list of strings and returns the longest string that is a prefix of at least two strings in the list.
Examples:
longestCommonPrefix(["flower","flow","flight"])
"flow"
longestCommonPrefix(["dog","racecar","car"])
""
longestCommonPrefix(["interstellar","internet","interval"])
"inter"
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
"Final Usonian home" by Frank Lloyd Wright completed in Ohio
Qazikat wireless keyboard with Hydrangea keycaps
Using Pigeons & Poop Jokes to Teach Kids About Digital Minimalism
Chongqing, the world’s largest city - in pictures
Rest in peace, boiled water.
You will be mist!
That's all for now, folks! Have a great week. Be safe, make good choices, and treasure your sleep!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-04-28 13:13:17
Hey friends!
Assuming all has gone well since I hit the "schedule" button on this issue... I just gave birth! Ahh! Baby! But there's still stuff to leeeearn!
Was this forwarded to you? You can subscribe here!
Creating CSS Theme Variables from a JS file
What Does It Really Mean For A Site To Be Keyboard Navigable
CSS color-mix() Demo
Hiding elements that require JavaScript without JavaScript
I... just had a baby!! So this is gonna be short because I've now got a brand-spankin'-new kid to keep alive. As I write this, before actually giving birth, I'm nervous and excited. A friend of mine asked the (very nerdy) question, "if your baby were a React component what would it be?" and I said, "whatever it is, I am ready to unmount it," because oh my word, these final days of pregnancy are HARD. So, onwards and upwards to some sleepless nights, but with a little less physical strain (we hope), ha!
Boost team morale and encourage peer-to-peer praising, directly on Slack!
Sparkles is an app for Slack that makes awarding kudos fun. Simply add "++" next to your co-worker's Slack handle, and Sparkles will award them a sparkle!
Sparkles have no intrinsic value, but it’s a fun way to give kudos. As the numbers tally up, users can be proud of how many sparkles they have accumulated.
Who on your team deserves a Sparkle today? Get started and learn more at sparklesapp.com!
Last week, I had you calculate ingredient amounts for a recipe! I got as many submissions as I could pre-baby so if I missed ya, sorry about that! That being said, really great job Neha, Leyan, Ten, Miguel, Muhammad, Emeka, Dave, Andrew, Chase, Austin, David, Kyle, Elke, Chris, Kracekumar, Ross, Nick, and John!
This week's question:
Given an array of characters chars
, compress it such that consecutive duplicate characters are replaced with the character followed by the count of duplicates. If the count is 1
, omit it.
Examples:
> compress(["a", "b", "b", "b", "c"])
> ["a", "b", "3", "c"]
> compress(["a", "a", "b", "b", "c", "c", "c"])
> ["a", "2", "b", "2", "c", "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)
This blog is hosted on a Nintendo Wii
What async communication behaviors lead to better outcomes for software engineers?
Hypertext TV
BAYS60 by Deadline Studio keyboard with doys.dat.1 keycaps
A dad washes his car with his son.
After a while, the son says, "why can't you just use a sponge?"
That's all for now, folks! Have a great week. Be safe, make good choices, and give yourself some grace!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-04-21 14:26:28
Hey friends!
If you celebrate it, Happy Easter! Or Passover! Or mid-April! Let's learn.
Was this forwarded to you? You can subscribe here!
Typography troubles: Balancing lines in Japanese & Korean
Lessons Learned from Recreating a Styled Dialog
Astro 5.7
Withdrawal of the Records and Tuples proposal for ECMAScript
I am, as of writing, officially on maternity leave! I'm due to give birth this week and it's kind of blowing my mind that by the time the next issue of this comes out, I'll have another little human in my life.
That being said, it was a mad rush to "the finish line" to get stuff done at work before I was officially out!
And one more personal thing, I finished up working with Stack Overflow on their newsletter, blog, and podcast! End of an era blog post is here. Good ending, good timing with a new kiddo, and onwards and upwards!
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 sum a connected path in a grid! Awesome job Muhammad, Ten, Kyle, Nick, Saleh, and Neha!
This week's question:
Given an array of objects representing ingredients (each with a name and amount per serving), and a target number of servings, write a function to calculate the required amount of each ingredient for the target servings. Return the results as an array of objects with name and amount. Can you do this in less than 5 lines? In one?
Example:
const ingredients = [
{ name: "flour", amount: 200 }, // 200g per
{ name: "sugar", amount: 100 }, // 100g per
{ name: "eggs", amount: 2 } // 2 eggs per
];
const targetServings = 3;
> calculateIngredients(ingredients, targetServings);
> [
{ name: "flour", amount: 600 },
{ name: "sugar", amount: 300 },
{ name: "eggs", amount: 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)
(you might see some repeat questions for the next few weeks because... new baby)
Inside Africa's Food Forest Mega-Project (video)
Grid650 with Teal Wavez module + GMK Hammerhead Light
Still Tasty
A lack of frequency increases the pressure to deliver quality
What's the worst thing about ancient history class?
The teachers tend to Babylon.
That's all for now, folks! Have a great week. Be safe, make good choices, and see ya on the other side!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon
2025-04-14 11:45:51
Hola hola!
We made it to mid-April, where does the time go?? I hope you had a good week. Let's get learnin'!
Was this forwarded to you? You can subscribe here!
Tauri vs. Electron: performance, bundle size, and the real trade-offs
Mastering default values in JavaScript with the nullish coalescing (??) operator
CSS Bursts with Conic Gradients
Better typography with text-wrap pretty
A steam locomotive from 1993 broke my yarn test
I pumped out a bunch of content this past week!
For work, I morphed a post about MCP that I wrote for my own blog last week into something a bit more business-y, and shipped the latest episode of The Download!
I also blogged a bunch of other stuff:
Anyway, for the 8th (!) newsletter anniversary raffle last week, winners will be pinged this week! Thanks for entering, y'all!
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 generate Leyland numbers. Ya did great David, Muhammad, Elke, Ten, Austin, Jeremias, Patrycja, Nick, Levi, and Neha!
This week's question:
Given a 2D grid of integers, find the largest sum of any connected path of cells. A path consists of horizontally or vertically adjacent cells (no diagonals) and cannot reuse cells. Return the largest sum.
Examples:
const grid1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const grid2 = [
[5, 3],
[2, 8]
];
largestPathSum(grid1)
> 45 // (1 → 2 → 3 → 6 → 9 → 8 → 7 → 4 → 5)
largestPathSum(grid2)
> 18 // (5 → 3 → 8 → 2)
(you can submit your answers by replying to this email with a link to your solution, or share on Bluesky, Twitter, LinkedIn, or Mastodon)
Custom Gochu60 keyboard
What is manga lettering?
Avoid these 5 tape measure mistakes (video)
Leaf Color and Shape Enhance Cooling Effect
What kind of tree fits in your hand?
A palm tree!
That's all for now, folks! Have a great week. Be safe, make good choices, and get the rest you need!
Special thanks to IceSloth, Ezell, Sebastián, Ben, Kinetic Labs, and Marta for supporting my Patreon and this newsletter!
cassidoo
website | blog | github | bluesky | twitter | patreon | twitch | codepen | mastodon