Brian Norman
bnorm.dev
Brian Norman
@bnorm.dev
I do the clickety-clackety that make the computer go brrr!

@KotlinLang.org compiler developer at @JetBrains.com; all opinions are my own.
Speaking of slides, for DroidCon NYC, I presented "(Re)creating Magic(Move) with Compose"! I talked about how I've been writing all of my presentations recently with Compose, but still wanted MagicMove from Keynote. A fun talk exploring diff algorithms of all things: deck.bnorm.dev/dcnyc25
droidcon NYC 2025
deck.bnorm.dev
July 2, 2025 at 3:33 PM
For KotlinConf, I presented "Writing Your Third Kotlin Compiler Plugin". This talk was about much of my current (and future!) work in the Kotlin compiler. A recording is already available: youtu.be/9P7qUGi5_gc and I've made my slides available as well: deck.bnorm.dev/kc25.
Writing Your Third Kotlin Compiler Plugin | Brian Norman
YouTube video by Kotlin by JetBrains
www.youtube.com
July 2, 2025 at 3:33 PM
Current schedule for Droidcon NYC stage 1: Keynote, Jake, and then me.

*gulp*

That's not intimidating at all...
May 15, 2025 at 1:48 PM
Animated VectorPainter: gist.github.com/bnorm/d326ab...

Pulled the SVG from the website, ran it through a converter to Compose, and then manually added the animation. Animated values are based on a Transition, so it is all synced with the presentation as a child transition.
Animated VectorPainter of the bird on the KotlinConf 2025 website
Animated VectorPainter of the bird on the KotlinConf 2025 website - KotlinConfBird.kt
gist.github.com
April 13, 2025 at 5:10 PM
Not from this weekend, but I have to brag about this slide: I defined a list of code samples which are each highlighted by Storyboard using an ANTLR parser, and each transition is completely automatic thanks to a "MagicText" Composable.

LaunchedEffect to loop though samples and done.
April 12, 2025 at 9:26 PM
This weekend's Storyboard project: prototyping a presentation companion website which allows sending live reactions that rise from the bottom right of the slide. I also get a count of each reaction type for the last 15 seconds in the assistant window.

It's kinda dumb ...

... but I love it so much!
April 12, 2025 at 9:06 PM
For my project this weekend, I implemented a slider so I can seek through the animations of my slides. This is thanks to Storyboard being built on top of SeekableTransitionState.
April 6, 2025 at 11:10 PM
I think the exciting thing for both frameworks is that it's all Compose when you get to the slide content. What libraries you use from there is completely up to you! I avoid integrating my utilities directly with Storyboard, because I want someone else to build something better I can use instead!
April 3, 2025 at 3:59 PM
Compose hot-reload is *so* easy to integrate. The only complexity happens if you want to preserve presentation position when slide/step count changes. But if you are just fiddling with the content of slides, there's nothing special you should need to do.
deck.bnorm.dev/kotlinconf2025/story/src/jvmMain/kotlin/main.desktop.kt at main · bnorm/deck.bnorm.dev
Repository for hosting deck.bnorm.dev. Contribute to bnorm/deck.bnorm.dev development by creating an account on GitHub.
github.com
April 3, 2025 at 3:59 PM
I've actually seen it! I think we started on our projects around the same time? But I was pretty much done with my first presentation when you announced it. They are quite similar, but do have a few key differences which I think are useful. Maybe comes down to preference?
April 1, 2025 at 1:23 PM
Oh hey, look! PeekSource. I wrote that too!

What a trip down memory lane. These were some of my first open source contributions. Can't say enough good things about @swank.ca, @egorand.dev, and Jake. They welcomed an absolute newbie and mentored him in the ways of open source. Thank you!
kotlinx-io/core/common/src/PeekSource.kt at 0329b9d0ebbf614634f48d9f69b1e14350d4d7e2 · Kotlin/kotlinx-io
Kotlin multiplatform I/O library. Contribute to Kotlin/kotlinx-io development by creating an account on GitHub.
github.com
March 26, 2025 at 4:25 PM
Today I created a webpage with an embedded presentation that follows an active one. Thinking about using this to reveal additional content as the presentation progresses. Though maybe this would just be too distracting?

But look at that awesome animation! (Stolen from the KotlinConf website...)
March 23, 2025 at 11:10 PM
Uh oh, I think you just broke an NDA.
February 17, 2025 at 6:02 PM