Gnarly Learnings from April 2023

Engineering Insights

#
Min Read
Published On
March 13, 2025
Updated On
March 24, 2025
Gnarly Learnings from April 2023

At the Gnar we are always reading, watching, and listening in order to keep our skills sharp and our perspectives fresh. Here are some of the resources we learned from this month.

CSS Supports Trigonometry Functions

Trig functions in CSS make it easier to rotate objects and let us avoid using magic numbers. For example, sin(60 degrees) expresses the developer's intent more clearly than 0.866025.

Action Mailer Now Supports *_deliver Callbacks

Three callbacks (before_deliver, after_deliver, around_deliver) have been added to Action Mailer. You may have strong feelings about callbacks and I probably tend to agree with you, but sometimes they are the right tool to reach for. The described use cases for this include updating an Active Record model's delivered_atwhich is especially useful when dealing with async deliveries), handling delivery errors, and executing tasks that require a delivery provider's message_id.

Useful Tips for Using GitHub Copilot

Like any other tool, GitHub Copilot has a learning curve. This article from GitHub developer advocate Rizel Scarlett gives us a few tips to quickly improve the quality of Copilot suggestions. One thing I didn't realize: Copilot uses your open tabs to provide context for the questions you ask! That tip in and of itself really helped me make better use of the tool in my day-to-day work.

CSS text-wrap: balance

Chrome Canary now includes a new experimental CSS feature, text-wrap: balance, that evaluates line breaks to balance blocks of text. As developers, we often look for solutions that help to keep text consistent regardless of final font size, screen size, and language, which are often unknown. This property aims to mitigate those concerns, though it is not without its challenges. It is currently limited to four wrapped lines (and under) and presents some performance considerations due to the iterative technique used to perform the wrapping.

TypeScript's infer

TypeScript's Conditional types have allowed developers to build internal type logic based on types provided to the conditional-Model<string> might have subtle differences in signature from Model<number>. Now, TypeScript has given us infer, allowing us to identify and refer to dynamic type values from within a Conditional type. It sounds like a lot - and it kind of is, the uses for this are pretty niche! - but once you wrap your head around it, you'll have a powerful new TypeScript tool in your arsenal.

Contributors:

Learn more about how The Gnar builds software.

Author headshot
Written by
, The Gnar Company

Related Insights

See All Articles
Product Insights
We Turned a Phone Call Into a Working Product in 48 Hours. Here's Exactly How.

We Turned a Phone Call Into a Working Product in 48 Hours. Here's Exactly How.

Watch what happens when a one-hour phone call becomes a working application in 48 hours. We walk through exactly how Context-Driven Development turns a single conversation into a competitor analysis, feature prioritization, full PRD, and production-grade software with Stripe billing, user accounts, and an admin dashboard—using AI-assisted agentic development with a human architect in the loop.
News
Is Your Team Ready for AI? Here's How to Find Out in 2 Minutes

Is Your Team Ready for AI? Here's How to Find Out in 2 Minutes

Most teams aren't getting real value from AI tools — not because the tools don't work, but because their foundations aren't ready. Discover the five factors that predict AI success and take a free 2-minute assessment to find out where your team stands.
Product Insights
AI Integration Agency With Guaranteed Outcomes

AI Integration Agency With Guaranteed Outcomes

Stop the "Vanished Agency" cycle. As a premier AI integration agency, The Gnar Company moves beyond flashy demos by wiring AI into your CRM and ERP to trigger real actions. Get a successful AI implementation with guaranteed outcomes and our signature 12-month bug-free warranty.
Previous
Next
See All Articles