Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
153162 stories
·
33 followers

CSS in 2026: The new features reshaping frontend development

1 Share

If you’ve been building websites for a while, you probably have some established opinions about CSS. It’s the obvious choice for design and layout, but once things get more interactive than a basic animation, most developers instinctively reach for JavaScript. However, thanks to an ever-evolving platform, “CSS for design and JavaScript for interactivity” no longer has to be the default when building features for the web.

jemima abu css in 2026 replacing javascript

Modern CSS is now powerful enough to handle complex animations and user interactions that used to require custom scripts. In this article, we’ll explore some of the latest features landing in CSS and how they can simplify your development workflow while still giving you the level of interactivity you’re used to with JavaScript.

Imagine a world where you can build fully customizable <select> elements without writing any JavaScript, or create a scrollable carousel with interactive markers without calculating scrollLeft or wiring up multiple event listeners. That’s exactly what’s becoming possible with these new CSS features, and it’s definitely something to look forward to.

What’s new in CSS in 2026?

Let’s take a look at some of these latest features and how we can implement them in our codebase.

Note: Most of these features are very new and still rolling out across browsers, so they aren’t suited for production use just yet. For a deeper dive into how these features work, check out the CSS Wrapped 2025 article from the Chrome DevRel team:

Feature What it does
appearance: base-select Opts a <select> into the new customizable mode so you can style it and its picker without losing native behavior.
select::picker(select) A pseudo-element representing the dropdown surface of a customizable <select> that you can style (shadows, borders, spacing).
selectedcontent Styles the selected option shown in a select field
::scroll-button() A generated button for scrollable containers that scrolls left or right when clicked.
::scroll-marker A generated element paired with each scroll item that a browser can use as a pagination dot or visual indicator.
::scroll-marker-group A container for the generated scroll markers so they can be styled/placed (e.g., bottom center).
scroll-target-group An attribute you can apply to a container of links so CSS can match the link whose target is currently in view (:target-current).
:target-current A selector that matches a link (or other targetable element) whose target (ID anchor) is currently the scroll-active element.
container-type: scroll-state Enables scroll state queries on an element, letting CSS react to whether a scroll container is in a specific snapped or stuck state.
@container scroll-state(snapped: x) A container query that applies styles when the container is in a “snapped” scroll position on the x-axis.
sibling-index() Returns the 1-based position of an element among its siblings, useful for dynamic delays and layout rules.
sibling-count() Returns the total number of sibling elements, useful for count-based layouts or proportional styling.
attr() A typed attr() function call that reads an attribute as a color for use in properties like background-color.
@starting-style A container query-like block used when defining styles at the start of a transition or animation sequence (experimental syntax).

Now let’s take a look at a real-world use case with some of these new features.

Demo: Customizing the native HTML select

This is a feature I’ve honestly been anticipating for years, so let’s see how it works in practice. The <select> element is the browser’s built-in solution for an accessible dropdown, but styling it has always been limited. If you wanted to do anything more advanced than adjusting padding or changing colors, you’d typically end up building a fully custom dropdown with extra markup, JavaScript handlers, and all the complexity that comes with trying to mimic native behavior.

Customizable selects let you combine the best of both worlds: the native accessibility and semantics of a real <select> with the kind of styling flexibility we previously only got from JavaScript-powered components.

In the demo below, we’ll use three newer CSS features to build a Pokémon selector that:

  • Uses the native <select> for semantics and accessibility
  • Shows an icon and background color for each option
  • Animates options sliding into view in a staggered way:gif of pokemon selector for css demo

Note: these features require Chrome 135+:

See the Pen
Customizable HTML select
by Jemima (@Jemimaabu)
on CodePen.

All of this is done with a single <select> element and a few data-* attributes. The interactivity comes from these features: appearance: base-select (plus the select picker), tree counting functions, and typed attr().

appearance: base-select and the select picker

The first step is switching the control into its customizable mode:

select,
select::picker(select) {
  appearance: base-select;
}

appearance: base-select opts your <select> into the new customizable rendering model, which also makes it a solid progressive enhancement approach. Browsers that don’t support it will simply ignore the property and render the select normally.

Once you’ve opted in, the ::picker(select) pseudo-element represents the dropdown surface itself, so you can style it like any other UI panel:

select::picker(select) {
  margin-block-end: 1em;
  border-radius: 12px;
  border: 1px solid #e0e0e0;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);
}

With customizable selects, the browser handles a lot of the complexity of dropdowns for you, including:

  • Automatic overflow handling: If the dropdown is taller than the available space, the browser handles the overflow for you. That includes constraining the picker height and making it scrollable when needed, rather than letting it spill off-screen or forcing you to calculate heights manually.
  • Anchor positioning fallback: The picker is anchored to the trigger element using the new anchor positioning syntax, so the dropdown is able to automatically choose the best placement based on available viewport space:
  • anchor positioning fallback 1 anchor positioning fallback 2
  • Built-in focus management: Focus behavior is handled natively, so when the select opens, focus moves into the picker in a predictable way, and when it closes, focus returns appropriately. You do not need to implement your own focus trapping, or “return focus to trigger” logic.
  • Full keyboard navigation (Arrow keys, Enter, Escape): Users can navigate options with the Arrow keys, confirm a selection with Enter, and dismiss the picker with Escape, just like a normal <select>.
  • Support for richer option content: You can include more than plain text inside each <option>, like icons, additional labels, or structured content.

These are things you would normally have to script manually when building a custom dropdown, but here they come straight from the platform.

Another major advantage is the built-in progressive enhancement model. If a browser doesn’t support customizable selects yet, the user simply gets the regular native <select> element. Nothing breaks. There’s no polyfill required and no need to maintain two versions of the component.

Staggering animations with sibling-index()

Next, we add animation. When the dropdown opens, each option slides in from the side with a small delay. Instead of manually assigning an index to every option, we can use a tree counting function:

option {
  transition:
    opacity 0.25s ease,
    translate 0.5s ease;
  transition-delay: calc(0.2s * (sibling-index() - 1));

  @starting-style {
    opacity: 0;
    translate: 30px 0;
  }
}

sibling-index() gives you the 1-based position of an element among its siblings. That means the first visible option gets a delay of 0.2s * (1 - 1),which is 0s. The next is 0.2s, then 0.4s, and so on.

If you add or remove options later, the animation still looks correct because the timing is calculated dynamically instead of being hard-coded in the markup.

Before tree-counting functions, achieving the same staggered effect in CSS was usually much clunkier. You either had to hard code delays with a long list of :nth-child() selectors, or manually add an --index custom property to every item in your HTML. Both approaches worked, but they got noisy fast, and they were easy to forget to update when the list changed.

Advanced attr() for data driven styling

Finally, the demo uses the typed attr() function to keep visual details in data-* attributes.
The attr() function has been baseline available for a while. But until recently, it was only reliably usable for the content property.

With the newer typed version of attr(), we can start using attribute values in more places in CSS, as long as we tell the browser what type to expect.

In this demo, each option includes a data-bg-color attribute that defines its hover background color, and we read that value directly in CSS:

//HTML
<option data-bg-color="#F8C9A0" value="charmander">

//CSS
option {
  background-color: attr(data-bg-color color, transparent);
}

Because we’re explicitly treating the attribute as a color, the browser parses it correctly, and we can safely provide a fallback value if the attribute is missing. The result is a more data-driven styling approach: you can tweak theme colors in your HTML without touching the CSS.

Together, appearance: base-select, the select picker, tree counting functions, and typed attr() make it possible to build a rich, animated dropdown that is still fundamentally a real <select> element. So you can have the customizations you want while still keeping native behavior and built-in accessibility features.

In comparison, here’s what a similar dropdown built using JavaScript would look like (spoiler: it’s roughly 150+ lines of JavaScript to achieve a close-enough example of what we’ve built with CSS 🥴):

See the Pen
Custom Select with JavaScript
by Jemima (@Jemimaabu)
on CodePen.

CSS in 2026: What the landscape looks like moving forward

For me, this demo shows the most exciting part about where CSS is heading. Replacing 150+ lines of JavaScript with just a few CSS features is genuinely wild. We’re able to achieve the same amount of complexity that we’ve always had, but now it’s a lot less work to do so.

When the platform provides defaults like keyboard navigation, focus handling, and sensible positioning behavior, we can spend more time on improving existing components (instead of rebuilding the same interaction patterns in every codebase or installing a new library every time).

This also feels especially relevant in the age of AI. The simpler and more declarative these features are, the less likely an agent is to over-engineer a solution or invent behavior you didn’t ask for.

If you want to start taking advantage of these features as they land, here’s what I’d recommend:

  • Revise one JavaScript-heavy UI component: The best way to start working with these new features is to see where you can use them in already implemented features in your codebase. Carousels, tooltips, and dropdowns are great candidates because they’re often a lot of code for a relatively small piece of UI, and most of the native features to build these are already baseline supported.
  • Keep accessibility in the loop: Native support usually gives you a better starting point, but it doesn’t replace testing. Try your demos with a keyboard and use screen readers where you can to ensure that these features are able to be used by everyone.
  • Stay curious: With a lot of these new features, they’re never fully baseline supported until they are. The easiest way to keep up to date is to keep an eye out for the latest changes in these features (I recommend using the web.dev blog), so you know when you can finally implement them in production. Watch browser support, experiment in internal tools, and keep the production rollout conservative until support stabilizes.

And personally, if it means I get to write less code while CSS does all the heavy lifting, I’m very on board with that.

The post CSS in 2026: The new features reshaping frontend development appeared first on LogRocket Blog.

Read the whole story
alvinashcraft
13 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Catching Up with Recent Wolverine Releases

1 Share

Wolverine has had a very frequent release cadence the past couple months as community contributions, requests from JasperFx Software clients, and yes, sigh, bug reports have flowed in. Right now I think I can justifiably claim that Wolverine is innovating much faster than any of the other comparable tools in the .NET ecosystem.

Some folks clearly don’t like that level of change of course, and I’ve always had to field some only criticism for our frequency of releases. I don’t think that continues forever of course.

I thought that now would be a good time to write a little bit about the new features and improvements just because so much of it happened over the holiday season. Starting somewhat arbitrarily with the first of December to now

Inferred Message Grouping in Wolverine 5.5

A massively important new feature in Wolverine 5 was our “Partitioned Sequential Messaging” that seeks to effectively head off problems with concurrent message processing by segregating message processing by some kind of business entity identity. Long story short, this feature can almost completely eliminate issues with concurrent access to data without eliminating parallel processing across unrelated messages.

In Wolverine 5.5 we added the now obvious capability to let Wolverine automatically infer the messaging group id for messages handled by a Saga (the saga identity) or with the Aggregate Handler Workflow (the stream id of the primary event stream being altered in the handler):

// Telling Wolverine how to assign a GroupId to a message, that we'll use
// to predictably sort into "slots" in the processing
opts.MessagePartitioning
// This tells Wolverine to use the Saga identity as the group id for any message
// that impacts a Saga or the stream id of any command that is part of the "aggregate handler workflow"
// integration with Marten
.UseInferredMessageGrouping()
.PublishToPartitionedLocalMessaging("letters", 4, topology =>
{
topology.MessagesImplementing<ILetterMessage>();
topology.MaxDegreeOfParallelism = PartitionSlots.Five;
topology.ConfigureQueues(queue =>
{
queue.BufferedInMemory();
});
});

“Classic” .NET Domain Events with EF Core in Wolverine 5.6

Wolverine is attracting a lot of new users lately who might honestly only have been originally interested because of other tool’s recent licensing changes, and those users tend to come with a more typical .NET approach to application architecture than Wolverine’s idiomatic vertical slice architecture approach. These new users are also a lot more likely to be using EF Core than Marten, so we’ve had to invest more in EF Core integration.

Wolverine 5.6 brought an ability to cleanly and effectively utilize a traditional .NET approach for “Domain Event” publishing through EF Core to Wolverine’s messaging.

I wrote about that at the time in “Classic” .NET Domain Events with Wolverine and EF Core.

Wolverine 5.7 Knocked Out Bugs

There wasn’t many new features of note, but Wolverine 5.7 less than a week after 5.6 had five contributors and knocked out a dozen issues. The open issue count in Wolverine crested in December in the low 70’s and it’s down to the low 30’s right now.

Client Requests in Wolverine 5.8

Wolverine 5.8 gave us some bug fixes, but also a couple new features requested by JasperFx clients:

The Community Went Into High Gear with Wolverine 5.9

Wolverine 5.9 dropped the week before Christmas with contributions from 7 different people.

The highlights are:

  • Sandeep Desai has been absolutely on fire as a contributor to Wolverine and he made the HTTP Messaging Transport finally usable in this release with several other pull requests in later versions that also improved that feature. This is enabling Wolverine to use HTTP as a messaging transport. I’ve long wanted this feature as a prerequisite for CritterWatch.
  • Lodewijk Sioen added Wolverine middleware support for using Data Annotations with Wolverine.HTTP
  • The Rabbit MQ integration got more robust about reconnecting on errors

Wolverine 5.10 Kicked off 2026 with a Bang!

Wolverine 5.10 came out last week with contributions from eleven different folks. Plenty of bug fixes and contributions built up over the holidays. The highlights include:

And several random requests for JasperFx clients because that’s something we do to support our clients.

Wolverine 5.11 adds More Idempotency Options

Wolverine 5.11 dropped this week with more bug fixes and new capabilities from five contributors. The big new feature was an improved option for enforcing message idempotency on non-transactional handlers as a request from a JasperFx support client.

using var host = await Host.CreateDefaultBuilder()
.UseWolverine(opts =>
{
opts.Durability.Mode = DurabilityMode.Solo;
opts.Services.AddDbContextWithWolverineIntegration<CleanDbContext>(x =>
x.UseSqlServer(Servers.SqlServerConnectionString));
opts.Services.AddResourceSetupOnStartup(StartupAction.ResetState);
opts.Policies.AutoApplyTransactions(IdempotencyStyle.Eager);
opts.PersistMessagesWithSqlServer(Servers.SqlServerConnectionString, "idempotency");
opts.UseEntityFrameworkCoreTransactions();
// THIS RIGHT HERE
opts.Policies.AutoApplyIdempotencyOnNonTransactionalHandlers();
}).StartAsync();

That release also included several bug fixes and an effort from me to go fill in some gaps in the documentation website. That release got us down to the lowest open issue count in years.

Summary

The Wolverine community has been very busy, it is actually a community of developers from all over the world, and we’re improving fast.

I do think that the release cadence will slow down somewhat though as this has been an unusual burst of activity.



Read the whole story
alvinashcraft
28 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

bit Obscene: SQL Server 2025 Availability Groups

1 Share

bit Obscene: SQL Server 2025 Availability Groups


Going Further


If this is the kind of SQL Server stuff you love learning about, you’ll love my training. I’m offering a 25% discount to my blog readers if you click from here. I’m also available for consulting if you just don’t have time for that, and need to solve database performance problems quickly. You can also get a quick, low cost health check with no phone time required.

The post bit Obscene: SQL Server 2025 Availability Groups appeared first on Darling Data.

Read the whole story
alvinashcraft
40 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Interesting links - January 2026

1 Share

This is the twelfth edition of this newsletter in its current form. It’s great to see the audience for it growing, and consistently positive reception when I share it. Nice words always inspire me to carry on with it :D The substack edition (which is exactly the same content but sent out by email), is also picking up views and subscribers.

A couple of blog posts from me since the last edition of Interesting Links—both outside the usual Kafka/Flink scope:

I’ve also been firmly on-board the Claude Code/Opus 4.5 bandwagon, giggling like a child at the sheer magnitude of what it can now do. I’m going to write a blog post in its own right shortly in more detail, but if you want to marvel at what AI can do: I migrated my previous talks site (and the one before that) to this brand new one. Without writing a single line of code. Not one. Not a single byte.

So anyway. More AI blog posts to come, but for now—on to the Interesting Links!

Tip
  • 🔥 Not got time for all this? I’ve marked my top reads of the month :)

  • 📧 Want to receive this monthly round-up as an email? Subscribe to my Substack where I cross-post the same content

  • 🔗 Medium posts often skulk behind a gate, so I’ve hyperlinked to the Freedium version and included a link to the original using a ⓜ️ icon should you prefer to visit that (or if freedium goes offline).

Looking back (Reviews of 2025)…

See below for AI-specific links about 2025.

…and looking forward (predictions for 2026)

See below for AI-specific links about 2026.

  • Oxide & Friends (Bryan Cantrill & Adam Leventhal, plus Simon Willison, Steve Klabnik, and Ian Grunert).

  • Ben Lorica - Data Engineering in 2026: What Changes?

  • Paul Dix - 2026: The Great Engineering Divergence.

  • 🔥 Joe Reis - 2026 - General Thoughts on What’s Ahead.

  • Ian Cook (Columnar) - 10 Predictions for Data Infrastructure in 2026.

  • Simon Späti - Data Engineering: Trends and Predictions.

  • Darren Wood - Data predictions for 2026.

Kafka and Event Streaming

  • 🔥 Another good blog post from Stefan Kecskes, looking at Dead Letter Queue (DLQ) handling in Kafka. For a hit of nostalgia, here’s a blog post that I wrote in 2019 also looking at DLQs in Kafka Connect.

  • How many TUIs for Kafka is too many? Well, we’re not there yet, and Hoa Nguyen brings us LazyKafka. Out of curiosity I did a quick Google and found seven TUIs in total, including this one: kafka2i / kaftui / ktea / yozefu / kaskade / ktui

  • Into the YAKR (Yet Another Kafka Replacement) category comes KafScale, an Apache 2.0 licensed Kafka-on-S3 broker written by Alexander Alten. It has support for Iceberg and SQL.

  • Good write-up from Sky Kistler at Reddit on how they migrated their 500+ EC2-based Kafka brokers to k8s-hosted Strimzi, with some impressive numbers - 500+ brokers serving tens of millions of messages per second and storing over a petabyte in live topic data.

  • 🔥 Gwen Shapira’s 2017 QCon talk Streaming Microservices: Contracts & Compatibility is one that I keep coming back to over the years. Loosely-coupled services need contracts; just because you’re using Kafka and not REST, it doesn’t mean you escape that truth.

  • Tansu is a replacement Kafka broker written in Rust, with the interesting twist that it uses Postgres, S3, or SQLite for its storage. There have been some interesting recent blog posts, including two on internals performance tuning (1 2), as well as deploying it on a t3.micro instance on AWS. And, if you enjoy lengthy conversations, you’ll want to check out this 3.5hr interview between Stanislav Kozlovski (a.k.a. "2 Minute Streaming") and the author of Tansu, Peter Morgan.

  • A good roundup from Kafka PMC Chair Mickael Maison looking at some of the milestones in the Kafka project in 2025.

Analytics

Stream Processing

  • A deep-dive (of course) from regular Anton Borisov, looking at Flink 2.2’s improvements to Delta Join, including support for CDC Upserts.

  • Riskified’s Gal Krispel has an interesting talk on YouTube about using Flink SQL and DataStream together to overcome some issues they found when using SQL alone. The talk is in Hebrew but the auto-translation of the captions by YouTube is good enough to follow along.

  • Somewhat of an interloper to this blog, but Apache Spark has just released version 4.1. This blog post covers some of the new features, including Spark Declarative Pipelines (SDP), as well as lower-latency streaming capabilities with "Real-Time Mode" (RTM) implemented with SPARK-53736.

  • 🔥 Jonas Geiregat has a useful discussion of managing Kafka Streams and its memory usage.

Data Platforms, Architectures, and Modelling

  • 🔥 Jesus Gomez at Fresha has a good blog post looking at some of the required changes to their data modelling approach when migrating from Snowflake to StarRocks.

  • Dejan Menges has written up a two part series about Vinted’s event driven platform. It’s fairly high-level, and I’m hoping there’ll be a part 3 (if not more) that takes a deeper dive at some of the specifics.

  • Saubhagya Awaneesh and colleagues at Grab have published details of their real-time customer data platform built on technologies including StarRocks, Flink, and Kafka.

  • 🔥 Mark Rittman has an insightful post looking at a fifty-year cycle of tools promising to democratise data work, each delivering genuine value while leaving the fundamental need for specialists stubbornly intact.

  • We’ve been trying to prise Excel from our users' hands for decades with no success, regardless of the shininess of the replacement. Jelle De Vleminck lays out an argument for why this is so, and why it’s perhaps a misguided goal.

  • Joe Reis on Data Identity Politics and The Kimball vs. Inmon War (Bill Inmon recently re-published some of his material, always worth reading).

  • The hype around Data Mesh may have subsided, but it’s still an interesting concept. Sebastian Werner and his colleagues at ThoughtWorks have taken a look at where data mesh is at in 2026.

Data Engineering, Pipelines, and CDC

Open Table Formats (OTF), Catalogs, Lakehouses etc.

  • As fun as it is importing a ton of Hadoop dependencies every time we want to use Parquet /s there might be a better alternative—and my colleague Gunnar Morling is building a proof of concept called Hardwood as a minimal dependency implementation of Parquet. (I also like the Parquet / Hardwood wordplay ;) )

  • Catalogs are, for me, one of the most confusing aspects of the data platform ecosystem. The term is so overloaded, and numerous products in the space overlap in functionality too. Hari Thatavarthy does a good job of explaining the evolving role of the data catalog. For a Flink-specific spin, check out my primer on catalogs in Flink SQL.

Iceberg

Delta Lake and Hudi

  • I enjoyed this post from Prem Vishnoi in which they examined the assumption that Delta is solely a "Spark thing", and look at writing to Delta from Flink and Kafka directly. If this is a thing you’re wanting to do, you might also be interested in my previous article about writing to Delta from Flink SQL.

  • 🔥 Hudi originated from Uber, and this in-depth blog post from Prashant Wason and colleagues at Uber describes in detail its use and deployment architecture, along with some impressive figures—6 trillion rows ingested per day, 350 PB stored, etc.

  • A couple of interesting write-ups of how Hudi is used in data platforms, from Zupee and Funding Circle.

RDBMS

General Data Stuff

  • SQLNet is a social media platform created by Vladyslav Len, in which all interactions are by SQL. Seriously. Try it out!

  • Orchestra’s Hugo Lu posits that Snowflake and Databricks are hitting their market ceiling.

  • Squirreling is a ~9 KB SQL engine with zero external dependencies for running SQL queries in the browser. Their blog post explains the background to it, and why tools like DuckDB-Wasm alone aren’t sufficient.

  • Details from Phillip LeBlanc at SpiceAI on their use of Apache DataFusion.

  • Jon Anderson explores FoundationDB (a distributed K/V database) in this blog post.

  • The team behind Responsive have pivoted from Kafka Streams to launch OpenData, "a collection of open source databases built on a common, object-native storage and infrastructure foundation."

  • A fun write-up from Tomás Senart at Axiom detailing an optimisation project on EventDB, their in-house database, eventually getting it to deliver 178 billion rows per second throughput.

AI

I warned you previously…this AI stuff is here to stay, and it’d be short-sighted to think otherwise. As I read and learn more about it, I’m going to share interesting links (the clue is in the blog post title) that I find—whilst trying to avoid the breathless hype and slop.

nano banana one-shot. prompt:
nano banana one-shot. prompt: "create meme: i iz now agentic"

Well, gosh darnit. Didn’t this just blow up in the last month? Whilst Sonnet 4.5 was just trundling along giving ammo to the AI deniers, Opus 4.5 has come and blown things out of the water. If you’ve no idea what I’m talking about, have a read / listen to Casey Newton’s recent thoughts.

In an industry in which the term super-exciting has been devalued, what is happening now is, genuinely, SUPER-SUPER-EXCITING.

I’ll open with DHH’s tweet:

Not a fan of DHH? How about Charity Majors: 2025 was for AI what 2010 was for cloud.

Stop and think about that. In the late 2000s cloud was this thing that of course the vendors were trying to sell (vendors gonna vend), and some people got, but most people sniffed at or ignored. Now 15 years later…who’s ignoring cloud?

Anyway, I’ll save my pontificating for another blog post. But there are a ton of interesting links to share with you about AI, so here they are. You’ll have to excuse the lack of narrative on each one; there are just too many this month :)

Looking forward & looking back

Strategy & Ideas

Using AI—Product

Using AI—Engineering

And finally…

Nothing to do with data, but stuff that I’ve found interesting or has made me smile.

Nerd


Tip


Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Conversation: LLMs and the what/how loop

1 Share

A conversation between Unmesh Joshi, Rebecca Parsons, and Martin Fowler on how LLMs help us shape the abstractions in our software. We view our challenge as building systems that survive change, requiring us to manage our cognitive load. We can do this by mapping the “what” of we want our software to do into the “how” of programming languages. This “what” and “how” are built up in a feedback loop. TDD helps us operationalize that loop, and LLMs allow us to explore that loop in an informal and more fluid manner.

more…

Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete

Announcing the 2026 Public Domain Film Remix Contest Winners, Honorable Mentions & Finalists

1 Share

We’re thrilled to unveil the creativity of our top three winners and four honorable mentions in this year’s Public Domain Day Film Remix Contest. These remarkable films not only reimagined and transformed public domain works but also demonstrated the boundless potential of remixing creative works to create something new.

This year’s contest received more than 270 submissions from creators across 35 U.S. states, as well as Puerto Rico and Washington, DC, and 28 countries worldwide. All of the submissions can be viewed in a new collection at the Internet Archive: 2026 Public Domain Day Film Remix Contest collection.

Our judging panel was led by Catherine Kavanaugh of Screen360.tv with jurors Peter Stein, Rick Prelinger, Amber McKinney, and Brewster Kahle.

Watch the winning entries & honorable mentions below. View the full list of finalists.


FIRST PLACE: “Rhapsody, Reimagined” by Andrea Hale

About the film: Rhapsody, Reimagined reconfigures imagery from King of Jazz (1930) through collage, digital animation, and repetition set to a reimagined version of George Gershwin’s Rhapsody in Blue.

A woman in a striped shirt and beanie drumming.
Andrea Hale

Judge’s Comment: Andrea Hale’s sharp description: “Treating image as modular rather than linear, the film foregrounds systems of synchronization, reproduction, and spectacle,” signaled to the judges that we were in for a surprise. The stripped down remix of Gershwin’s Rhapsody in Blue lifted us gently into a 1930s office scene in deco sherbert colors that deconstructed and rebuilt through a mind-blowing kaleidoscope of dancers, musicians, and other images from John Murray Anderson’s “ The King of Jazz”….finally landing us back on a moon…A fabulously fun use of archival footage – we all agreed, it was an aesthetic triumph! Congratulations to Andrea Hale

Andrea Hale is an artist working in animation and video editing. Her work emphasizes rhythm, repetition, and texture, using collage to recontextualize culturally established works by treating them as raw material rather than finished objects.


SECOND PLACE: “Battle Lines” by Jen Zhao and Aaron Sharp

About the film: The friendship and rivalry between two painters: Piet Mondrian and Theo van Doesburg.

Selected Judge’s Comment: This is a neatly made little film that used 22 archival works and doesn’t quite escape the burden of telling the story of the feud between Mondrian and van Doesburg. It’s a perfectly pitched, tongue-in-cheek short doc(mock)umentary tracking their feud over the diagonal line. Masterful editing of inspired sources including Composition II in Red, Blue And Yellow by Mondrian (1930) and Jean Cocteau’s “Le Sang Un Poet” with costumes by Coco Chanel. It’s deft narration winks at parody yet unfolds the story in a memorable cadence to its tender end and sends viewers to research further. Congratulations to Jen Zhao and Aaron Sharp

A woman smiling softly into a camera.
Jen Zhao

Jen Zhao is a Canadian filmmaker, producer, and actor who is interested in autofictional works that explore reality, genre, and the experience of making art itself. She works with an ethos of “scrappiness”, creating films with whatever resources are on hand or easily accessible, which is exemplified in her short film Finding Nathan Fielder (With Jen Zhao). Jen has released work with Penguin Random House, Spotify, and Cosmic Soup Productions, and received her MFA in Screenwriting from UCLA.

A man with glasses and a beard smiling into the camera
Aaron Sharp

Aaron Sharp is a screenwriter and actor from Los Angeles. He has an MFA from UCLA TFT and loves acronyms. He is currently working on 8 Votes, a true-crime podcast that investigates how his best friend received only eight votes in his high school presidential election, and whether foul play was involved.


THIRD PLACE: “Farina & The Perpetual Shine Machine” by Ralphie Wilson

About the film: Allen “Farina” Hoskins hosts an interrogative look into the depiction of black life during the year 1930 in this short film, unease follows.

Ralphie Wilson

Selected Judge’s Comment: This film highlights terrific sourcing and intercutting of both uplifting and disturbing depictions of African and African American film imagery from 1930. Not at all gratuitous in its presentation of images from governmental, industrial and educational archives, the familiar comic expression of Our Gang’s Farina, Allen Hoskins, softens the disquieting impact and prompts further inquiry. The Hall-Johnson Choir’s spiritual directed by Broadway performer Juanita Hall (later known for “South Pacific”) elevated imagery and soundscore, further highlighting the conundrum in our fraught history. As director Ralphie Wilson stated in his description, “Unease follows.” Thank you and congratulations, Ralphie Wilson

Ralphie Wilson is a street photographer, editor and independent filmmaker from St. Louis, MO. He has a love for archive work and capturing The Black Experience throughout all mediums.


HONORABLE MENTION: “The Boots on the Western Front” by Thomas Biamonte

Thomas Biamonte

About the film: An anti-war short film that showcases the horror of modern warfare and its toll on the human psyche as seen in the 1930 Best Picture winner at the 3rd annual Academy Awards All Quiet on the Western Front. The film is paired with a 1915 reading of Rudyard Kipling’s 1903 Anti-War poem Boots.

Thomas Biamonte is currently an undergraduate student at the University of Hartford studying acting. He is a huge fan of the public domain and the internet archive and he is honored to be chosen as an Honorable Mention.


HONORABLE MENTION: “How’s the Play Going?” by Noel David Taylor

Noel David Taylor

About the film: An absurd comedy with the main character lost in time, disjointed in settings and confused by their surroundings. Sort of like that thing that happens when you realize you haven’t been paying attention to the film you’re watching.

Noel David Taylor is a filmmaker known for their alchemy of homemade nightmare comedy and an absurdist sense of tragedy.


HONORABLE MENTION: “Dream A Little Dream Of Me Reimagined” by Talissa Mehringer

About the film: A new short music-film remix celebrating the dynamism of 30s film choreography, the opulence of the sets, and the versatile talent of the featured stars.

Talissa Mehringer is a German/Mexican multimedia artist and filmmaker residing in Berlin. Her work springs from a desire to bring to life dreams and experiences filtered through the subconscious.


HONORABLE MENTION: “The Reality Engineer” by Konstantin

About the film: A comedy film that tells the story of a scientist who wants to help humanity live better by correcting reality itself. However, every good intention only makes the situation worse.


ALL FINALISTS (ALPHABETICAL BY TITLE)

Read the whole story
alvinashcraft
3 hours ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories