Axios Is Out. Fetchium Is In.

๐ **Source:** [Axios Is Out. Fetchium Is In.](https://www.youtube.com/watch?v=b8uoRksN8Xk)
> [!note]+ Document Notes
> tags: #signals #fetchium #reactivity #javascript #async
> author: Robbie Wagner, Adam Argyle, Kristen Garrett
> source: Whiskey Web and Whatnot Podcast
> reference: https://www.youtube.com/watch?v=b8uoRksN8Xk
> date created: 2024-12-19 16:00
>
> # ๐ท๏ธ Title: Axios Is Out. Fetchium Is In.
>
<!-- deep-read:sections start -->
## ๐งฐ Action Inbox
- [H1] Research Fetchium as Apollo Client replacement โ new signal-based data layer #signals #apollo
- [H2] Study TC39 signals proposal implementation details โ official JavaScript proposal #tc39 #javascript
- [H3] Evaluate signal libraries for React projects โ Jotai, Legend State alternatives #react #evaluation
## ๐งญ Table of Contents
- [[#๐ Summary]]
- [[#๐ Main Content]]
- [[#๐๏ธ Notes]]
- [[#๐ References]]
- [[#๐ฃ๏ธ Paraphrase]]
- [[#๐ฐ Newsletter]]
- [[#โ
Action Items]]
- [[#๐งช Hypotheses]]
- [[#๐ Methodology]]
- [[#โ Questions]]
- [[#๐ฎ Future Research]]
- [[#๐ก Implications]]
- [[#๐ง Learning Styles Assessment]]
- [[#๐ Accessibility Assessment]]
- [[#๐ DEIB Assessment]]
- [[#โ
Logical Validity]]
- [[#๐ก๏ธ DARVO Analysis]]
- [[#๐ฏ Conclusion]]
### ๐ References
- [Fetchium](https://github.com/NullVoxPopuli/fetchium)
- [TC39 Signals Proposal](https://github.com/tc39/proposal-signals)
## ๐ Summary
- Kristen Garrett discusses Fetchium, a new signal-based data fetching library designed as a better alternative to Apollo Client
- Signals are emerging as the dominant reactivity pattern across modern frameworks (Angular, Vue, Svelte, Solid), with React being the notable exception
- The conversation explores the evolution from observables to hooks to signals, with emphasis on parameterized signals and async handling
- Key challenges include lifecycle management, threading reactivity through applications, and the balance between AI assistance and manual coding
- Fetchium aims to solve data layer problems independently of rendering frameworks using signals as the underlying abstraction
## ๐ Main Content
Kristen Garrett, a TC39 delegate and signals champion, presents Fetchium as a signal-based replacement for Apollo Client. Unlike Apollo's GraphQL-only approach or TanStack Query's simplicity, Fetchium provides sophisticated data management using signals as the foundational abstraction.
Signals represent a reactivity pattern that's gained widespread adoption across modern frameworks. They provide automatic dependency tracking and fine-grained updates, contrasting with React's coarse-grained re-rendering model. Most implementations lack parameterization - the ability to create signal factories that manage their own lifecycle.
The discussion reveals deep technical challenges around async reactivity. Traditional signals libraries treat async as an afterthought, but real applications need subscription management, lifecycle coordination, and dynamic branching. Fetchium addresses these through "reactive promises" and "relays" - abstractions that bridge external systems with signal graphs.
## ๐๏ธ Notes
#### โฑ๏ธ [00:00](https://youtu.be/b8uoRksN8Xk?t=0) โ [H1] Introduction and Fetchium overview
- Key idea: Fetchium is a signal-based data layer combining Apollo Client power with TanStack Query simplicity
- Evidence: "I have been working like crazy on basically a better version of Apollo query"
#### โฑ๏ธ [02:15](https://youtu.be/b8uoRksN8Xk?t=135) โ [H2] What are signals?
- Key idea: Signals are reactive values with automatic dependency tracking, adopted by most modern frameworks
- Evidence: "Basically every modern web framework with one major exception is based on signals these days"
#### โฑ๏ธ [04:30](https://youtu.be/b8uoRksN8Xk?t=270) โ [H2] React as the exception
- Key idea: React chose hooks over signals, creating fundamental architectural differences
- Evidence: "React has kind of panned signals and I understand where they're coming from"
#### โฑ๏ธ [06:45](https://youtu.be/b8uoRksN8Xk?t=405) โ [H1] Parameterized signals innovation
- Key idea: Most signal libraries lack parameterization, forcing manual lifecycle management
- Evidence: "Most signals libraries don't allow you to parameterize your signals"
#### โฑ๏ธ [12:30](https://youtu.be/b8uoRksN8Xk?t=750) โ [H2] Observables vs signals comparison
- Key idea: Observables require everything to become observable-aware, while signals offer better encapsulation
- Evidence: "When you start writing code in observables kind of everything needs to start using observables"
#### โฑ๏ธ [18:45](https://youtu.be/b8uoRksN8Xk?t=1125) โ [H1] Async reactivity challenges
- Key idea: Async handling is typically an afterthought in signals libraries, but essential for real applications
- Evidence: "Async in general is usually an afterthought. It was an afterthought for Ember"
#### โฑ๏ธ [25:15](https://youtu.be/b8uoRksN8Xk?t=1515) โ [H2] Lifecycle management in signal graphs
- Key idea: Dynamic subscription management requires lifecycle hooks built into the signal graph
- Evidence: "You either need to thread your lifecycle through the entire graph or you need to build it into the graph"
#### โฑ๏ธ [32:20](https://youtu.be/b8uoRksN8Xk?t=1940) โ [H2] TC39 signals proposal connection
- Key idea: The official proposal provides necessary primitives for advanced signal patterns
- Evidence: "The proposal has what we need for those like you can implement those on top of the proposal"
#### โฑ๏ธ [38:10](https://youtu.be/b8uoRksN8Xk?t=2290) โ [H3] Compiler-based reactivity future
- Key idea: Future frameworks might use compilers to eliminate manual reactivity management
- Evidence: Discussion of frameworks that "figure out what should change through some magic compiler"
#### โฑ๏ธ [42:30](https://youtu.be/b8uoRksN8Xk?t=2550) โ [H2] AI impact on development
- Key idea: AI changes how developers interact with code, requiring new skills in orchestration
- Evidence: "I think we are going through what happened to our physical bodies when we started to have 9 to 5 desk jobs"
#### โฑ๏ธ [48:15](https://youtu.be/b8uoRksN8Xk?t=2895) โ [H3] Threading vs prop drilling
- Key idea: Reactivity threading requires setup/teardown at branches, unlike simple prop passing
- Evidence: "With prop drilling you can pass things down very transparently... with reactivity threading every time there's a branch you need to set it up and tear it down"
#### โฑ๏ธ [52:40](https://youtu.be/b8uoRksN8Xk?t=3160) โ [H2] Relays concept introduction
- Key idea: Relays abstract external communication, replacing useEffect patterns
- Evidence: "Relays relay state outside of the graph into the graph and then vice versa"
## ๐ References
- [Signalium](https://github.com/NullVoxPopuli/signalium)
- [TC39 Signals Proposal](https://github.com/tc39/proposal-signals)
- [MobX](https://mobx.js.org/)
- [Solid.js](https://www.solidjs.com/)
- [Apollo Client](https://www.apollographql.com/docs/react/)
- [TanStack Query](https://tanstack.com/query/latest)
## ๐ฃ๏ธ Paraphrase
- Fetchium represents a new approach to data fetching that uses signals as the core abstraction, providing both power and simplicity
- Signals have become the dominant reactivity pattern across frameworks, with automatic dependency tracking and fine-grained updates
- The key innovation is parameterized signals that manage their own lifecycle, solving problems that traditional implementations struggle with
## ๐ฐ Newsletter
**Signals Evolution: From Observables to the Future of Reactivity**
The JavaScript ecosystem is converging on signals as the preferred reactivity pattern. Kristen Garrett's work on Fetchium and the TC39 signals proposal represents a significant step forward in data layer architecture.
Key benefits for developers:
- **Framework Independence**: Signals work across rendering libraries
- **Fine-grained Updates**: Only affected components re-render
- **Lifecycle Automation**: Subscriptions manage themselves
- **Async-first Design**: Built for modern application patterns
This shift toward declarative, signal-based architectures promises simpler mental models and better performance. As AI tools become more prevalent, these abstractions will be crucial for maintaining code quality and developer understanding.
Resources: [Signals Proposal](https://github.com/tc39/proposal-signals), [Fetchium Demo](https://github.com/NullVoxPopuli/fetchium), [Solid.js Signals](https://www.solidjs.com/tutorial/introduction_signals)
## โ
Action Items
#### DevRel
- Developer advocacy: Create signals tutorial series, conference talks on reactivity evolution
- Education: Workshop comparing hooks vs signals patterns, async reactivity deep-dive
- Developer experience: Signals migration guides, debugging tool recommendations
- Developer marketing: Case studies showing performance improvements with signals
- Community management: Facilitate discussions between framework maintainers on signals adoption
#### OSPO
- Policy & Governance: Evaluate TC39 proposal participation guidelines
- License Compliance: Review signal library dependencies and licensing
- Security Management: Assess supply chain risks in reactivity libraries
- Software Inventory: Catalog reactivity solutions across projects
- Developer Support: Training on signal patterns and lifecycle management
- Community Engagement: Support open source signal implementations
- Strategic Alignment: Track signals proposal progress and adoption metrics
#### Community
- Maintainers: Provide feedback on TC39 signals proposal, contribute to implementations
- Contributors: Help with signals library documentation and examples
- Sponsors: Fund development of cross-framework signal tooling
- Ecosystem: Coordinate migration strategies and compatibility layers
#### WordPress
- Core: Evaluate Interactivity API alignment with signals patterns
- Core Performance: Assess fine-grained reactivity benefits for block editor
- Core AI: Use signals for AI-driven content recommendations and real-time updates
- Community: Educational content on modern JavaScript reactivity patterns
- Training: Include signals concepts in advanced JavaScript curricula
- Documentation: Update guides to reflect modern reactivity best practices
- Meta: Consider signals for .org interactive features
- CLI: Signal-based watch modes and development workflows
## ๐งช Hypotheses
- Signals will become the standard reactivity primitive across JavaScript frameworks within 2-3 years
- Fetchium's parameterized signals approach will influence the TC39 proposal specification
- AI development tools will favor declarative signal patterns over imperative hook patterns
- React will eventually adopt signals or lose significant market share to signal-based frameworks
### ๐ Methodology
- Survey framework adoption rates before and after signals implementation
- Performance benchmarks comparing hooks vs signals in equivalent applications
- Developer experience studies measuring cognitive load and debugging time
- Market analysis of framework popularity correlation with reactivity model
### โ Questions
- How will React's ecosystem respond to increasing signals adoption across other frameworks?
- Can the TC39 signals proposal maintain momentum without React's participation?
- What migration paths will emerge for large React applications wanting signal benefits?
### ๐ฎ Future Research
- Cross-framework signals compatibility and standardization efforts
- Performance characteristics of different signal implementation strategies
- Developer tooling evolution for signal-based debugging and profiling
- AI code generation optimization for declarative vs imperative patterns
### ๐ก Implications
- Practice: Developers need to learn signal patterns and lifecycle management concepts
- Policy: Framework choices increasingly influenced by reactivity model and ecosystem lock-in
- Security: Signal-based subscriptions require careful lifecycle management to prevent memory leaks
- Education: Computer science curricula should include reactive programming fundamentals
- Funding: Investment in signal tooling and migration tools will accelerate adoption
### ๐ง Learning Styles Assessment
Reading level estimate: Grade 14-16 (advanced technical content)
#### ๐ Visual learners
- Present: Signal flow diagrams and lifecycle illustrations would enhance understanding
- Improve: Architecture comparisons showing hooks vs signals data flow
#### ๐ Aural learners
- Present: Podcast format allows following technical discussion naturally
- Improve: Audio-only summary with key concept definitions
#### ๐ฃ๏ธ Verbal learners
- Present: Rich analogies (threading vs prop drilling, gym metaphor for brain exercise)
- Improve: Glossary of reactivity terminology and pattern comparisons
#### ๐งฉ Kinesthetic learners
- Present: Code examples and interactive discussions
- Improve: Hands-on signal implementation exercises and migration guides
#### ๐ง Logical learners
- Present: Clear cause-effect relationships in reactivity patterns
- Improve: Decision trees for choosing between reactivity approaches
#### ๐งโ๐คโ๐ง Social learners
- Present: Discussion format with multiple expert perspectives
- Improve: Community forums for signals adoption experiences
#### ๐งโโ๏ธ Solitary learners
- Present: Deep technical analysis suitable for individual study
- Improve: Self-paced learning path through signal concepts
#### ๐ฟ Naturalistic learners
- Present: Evolution metaphors for reactivity pattern development
- Improve: Ecosystem thinking about framework interdependencies
### ๐ Accessibility Assessment
#### Screen reader semantics
- Present: Clear heading structure and logical flow
- Improve: ARIA labels for technical diagrams and code examples
#### Keyboard navigation
- Present: Standard video controls accessible via keyboard
- Improve: Chapter navigation and timestamp jumping functionality
#### Contrast and readability
- Present: Audio content doesn't require visual elements
- Improve: High contrast transcripts and visual aids
#### Text resizing and reflow
- Present: Text-based content scales appropriately
- Improve: Responsive layout for supplementary materials
#### Media and captions
- Present: Audio discussion with transcript available
- Improve: Professional captions with technical term definitions
#### Forms and interactions
- Present: Simple playback controls
- Improve: Enhanced player with bookmarking and note-taking features
### ๐ DEIB Assessment
#### Cultural breadth
- Present: Technical discussion accessible to international developers
- Improve: Examples from diverse framework ecosystems and use cases
#### Inclusive language
- Present: Professional technical terminology without exclusionary jargon
- Improve: Plain language explanations for complex concepts
#### Neurodiversity support
- Present: Structured conversation with clear topic transitions
- Improve: Chapter markers and summary sections for easier navigation
#### Representation
- Present: Multiple expert voices with different technical backgrounds
- Improve: Diverse perspectives on framework choices and technical tradeoffs
#### Psychological safety
- Present: Respectful technical disagreement and open discussion
- Improve: Clear guidelines for community participation in technical debates
### โ
Logical Validity
#### Strong reasoning
- Deductive strength: Clear progression from signals definition to Fetchium design decisions
- Inductive strength: Framework adoption patterns support signals trend claims
- Causal reasoning: Links between React's hook design and ecosystem limitations well-established
- Analogical strength: Gym/brain exercise analogy effectively illustrates AI development concerns
#### Fallacies
- Appeal to popularity: "Every modern framework uses signals except React" - while true, doesn't prove signals are inherently better
- False dichotomy: Presents hooks vs signals as binary choice, ignoring hybrid approaches
#### Tone of voice
- Overall tone: Collaborative and technical, with respectful disagreement about React's choices while acknowledging valid reasoning behind different approaches
### ๐ก๏ธ DARVO Analysis
- Deny: No defensive patterns observed
- Attack: No attacks on individuals or communities
- Reverse victim/offender: No victim/offender dynamics present
- Emotional cues and rhetoric: Professional technical discussion without manipulative elements
## ๐ฏ Conclusion
Signals are emerging as a unifying reactivity pattern across JavaScript frameworks, with Fetchium representing a significant advancement in data layer architecture. The conversation reveals both the technical sophistication required for production-ready signal implementations and the broader implications for how developers will work with AI tools. The emphasis on declarative patterns and lifecycle automation suggests a future where complex reactivity management becomes transparent, allowing developers to focus on higher-level application logic.
## ๐งฑ Refactor Appendix
### ๐ Literature Split Pad
Purpose: Stage CEE units that become Literature notes.
Split
---
## Full Transcript
[00:01] Robbie the Wagner and Adam Thomas Argyle<br>[00:04] the nerd.<br>[00:06] >> You're so absolutely right, Robbie.<br>[00:09] >> Thank you. Uh, sickopantic machine. Um,<br>[00:15] yeah. Would you like to tell the folks<br>[00:17] at home who we have on the show today,<br>[00:19] Adam?<br>[00:20] We've got a JS hacker, API designer, dev<br>[00:24] tools, crafter, introspect, pixel<br>[00:25] artist, writer, chef, TC39 delegate,<br>[00:28] Ember, contributor, principal, front<br>[00:29] end, devat, phantom, decorators,<br>[00:32] champion, co-ch champion of signals in<br>[00:34] JS, seeking to solve the world's<br>[00:35] scattered reactivity wos, reactivity wos<br>[00:38] with one true signal to unite them all<br>[00:40] from this elevating reactivity hell<br>[00:42] we're in. Coming to you live from the<br>[00:44] same state as Robbie on this fortuitous<br>[00:46] visibility day. Kristen Garrett. Y'all,<br>[00:48] nice to see you again. Been since<br>[00:50] Cascadia JS last year.<br>[00:52] >> Yeah. No, it's great to see you all,<br>[00:53] too. Glad I could be here.<br>[00:56] >> Yeah. Yeah. Thanks for joining us.<br>[00:58] So, yes. Um, as the name of the show<br>[01:02] entails, we do some whiskey, but as<br>[01:03] everyone is hopefully happy about, I<br>[01:05] haven't heard yet, we don't talk about<br>[01:07] it anymore until the end. So, we'll just<br>[01:10] mention what it is. We've got some soft<br>[01:13] red wheat holiday uh bottled and bond<br>[01:18] Missouri straight bourbon whiskey. Okay,<br>[01:19] we'll tell you more about it afterwards,<br>[01:21] but a lot of people don't want to hear<br>[01:23] about the whiskey. So,<br>[01:25] >> if you don't care<br>[01:27] about the web<br>[01:29] >> Yeah. Yeah. A lot more people care about<br>[01:30] the web.<br>[01:35] >> All right. Well, I do have a toast<br>[01:36] though. So, for our first sip,<br>[01:38] >> may your whiskey glass overflow with<br>[01:40] tasty pixels, your signals be true and<br>[01:42] clear, and your code compile on the<br>[01:44] first try. Cheers.<br>[01:46] >> Cheers.<br>[01:47] >> Cheers.<br>[01:53] >> So, yeah. Um,<br>[01:57] it's been an eventful I think six months<br>[02:00] since Cascadia.<br>[02:02] Um I have been working like crazy on<br>[02:06] basically<br>[02:08] a better version of Apolloquery.<br>[02:12] Um<br>[02:14] so Apollo client is great, right? Um but<br>[02:19] it is GraphQL and Tanacquery is great<br>[02:22] but it is very simple. Um and this is<br>[02:26] actually why I started working on<br>[02:28] signals. Um, and maybe should we give<br>[02:30] like an intro to signals at all? Uh,<br>[02:33] maybe I don't know how familiar people<br>[02:35] are.<br>[02:35] >> What is a signal? I'm Yeah, no, we<br>[02:38] probably should.<br>[02:40] >> So, signals are a pattern that's<br>[02:42] actually been around for a long time.<br>[02:44] Um, I think one of the earliest like<br>[02:47] JavaScript implementations of it would<br>[02:49] be Mobox. Um, uh, MobX is basically<br>[02:54] signals although it's a very like<br>[02:55] classoriented version of it. It's like<br>[02:58] that idea of you have you know these<br>[03:01] reactive values you consume and you kind<br>[03:04] of automatically track them as you are<br>[03:06] computing<br>[03:08] um some output and uh eventually we kind<br>[03:13] of figured out that you don't really<br>[03:15] need to have a class or like anything<br>[03:17] too stateful. You can kind of just have<br>[03:20] functions. Um and then uh basically your<br>[03:24] functions are can be pure uh if you are<br>[03:30] thinking of signals as like if you're<br>[03:32] thinking of all of your mutable state<br>[03:34] being in signals, right? They are signal<br>[03:36] pure. So they're like guaranteed to<br>[03:40] produce the same output if the signals<br>[03:42] have the same input and if you're not<br>[03:44] doing anything too crazy because I mean<br>[03:45] it's JavaScript. You can do whatever you<br>[03:47] want. Um but yeah, basically every<br>[03:51] modern web framework with one major<br>[03:53] exception<br>[03:55] uh is based on signals these days. Uh<br>[03:57] Angular migrated to them I think last<br>[03:59] year. Vue has been based on them for<br>[04:02] quite a long time. Spelt uh with runes<br>[04:06] is now based on them. Um<br>[04:09] solid uh definitely one of the big ones<br>[04:12] uh that kind of started it and pioneered<br>[04:14] it um in rendering frameworks. Ember uh<br>[04:18] you know had autotracking which was a<br>[04:21] form of signals is how I got into it.<br>[04:23] And<br>[04:24] >> which one doesn't have them?<br>[04:28] >> You know it's kind of the the elephant<br>[04:29] in the room. React has has kind of<br>[04:32] panned signals and um I don't I<br>[04:36] understand where they're coming from.<br>[04:38] Um, I think that that might be a bit of<br>[04:41] a<br>[04:43] I think they they were trying to evolve<br>[04:47] things in a very different direction<br>[04:48] when signals were first starting, right?<br>[04:51] Signals are very they kind of look like<br>[04:52] these objects that are stateful<br>[04:55] and they wanted to go into this hooks<br>[04:58] direction where it's like, oh, we have<br>[04:59] these pure functionsish<br>[05:02] um, but they're not pure, but they're<br>[05:04] kind of pure. And I want to give credit<br>[05:06] to React because I don't think I would<br>[05:08] have gotten to where I got with<br>[05:10] Signalium if it wasn't for React. The<br>[05:12] thing about Signalium that's different<br>[05:14] than other signal implementations and<br>[05:17] there's several that are in the React<br>[05:18] ecosystem too. You've got like Jotai<br>[05:21] Legend state. These are signals<br>[05:24] implementations that follow this<br>[05:26] pattern. But the key difference is that<br>[05:30] most signals libraries don't allow you<br>[05:32] to parameterize your signals. Um, and<br>[05:36] what that means is you kind of have to<br>[05:38] manage the life cycle of every computed<br>[05:41] signal, every derived signal. Um, you<br>[05:44] have to like if if you want to have like<br>[05:47] a hook essentially where it's like, oh,<br>[05:49] use uh full name of user, right? Like um<br>[05:54] you can repeat that with like 10<br>[05:56] different users, pass in 10 IDs, right?<br>[05:59] and React handles the you know setup and<br>[06:03] the life cycle and the tear down and<br>[06:06] everything there.<br>[06:08] Um<br>[06:10] and with signals traditionally you kind<br>[06:14] of have to like manage all of that<br>[06:16] yourself. Um so it's a little annoying<br>[06:20] uh and kind of stateful and I can see<br>[06:22] why people would look at that and be<br>[06:24] like ah we don't really like it. it's<br>[06:26] not really like functional, right? And<br>[06:28] it to be fair, a lot of complexity ends<br>[06:31] up being in that those parts that aren't<br>[06:34] functional. Um,<br>[06:36] >> when you say not functional, do you mean<br>[06:38] not like functional programming?<br>[06:40] >> Not that it doesn't work like<br>[06:43] >> Well, you start to have Yeah. Not like<br>[06:45] functional programming. you start to<br>[06:47] have um some really tricky<br>[06:53] it's not even that it can necessarily be<br>[06:55] like um the worst thing in the world.<br>[06:58] It's just like state to acrue in various<br>[07:01] places, right? You start to see<br>[07:10] shakes fisted stalled version of you.<br>[07:12] I'm like, no,<br>[07:13] >> I was brought to you by internet. It's<br>[07:17] tough.<br>[07:21] >> Well, I'm having fun linking everything<br>[07:23] as we go. I've got uh in the chat so far<br>[07:26] links to Signnolium and to the uh<br>[07:28] signals proposal. So folks want to<br>[07:31] follow along with that. Check out the<br>[07:33] chat. I guess it was more like tweets,<br>[07:35] but here I'll put it in the chat<br>[07:40] and signal.<br>[07:43] I'm tempted to like ask about<br>[07:44] observables. I'm like, are they bad? Are<br>[07:46] they good?<br>[07:48] >> We'll never know.<br>[07:49] >> You asked a guest. The whiskey was too<br>[07:51] strong. Bottled in bond. Yeah.<br>[07:53] >> Oh, is here where here we'll talk about<br>[07:55] the whiskey.<br>[07:56] >> Hey, yeah, now's a good time. Um Oh, we<br>[07:57] just lost everybody. No. Um yeah, we<br>[07:59] could talk about it real quick. So, this<br>[08:02] um See, where is my notes? This whiskey<br>[08:06] is 73% corn, 15% soft red wheat, and 12%<br>[08:12] malted barley. And I don't taste any<br>[08:14] malted barley, personally.<br>[08:17] >> Yeah. Which I'm kind of I like the bite.<br>[08:20] I'm happy. I'm like, it's got a spice.<br>[08:23] Yeah, it's like for being that much<br>[08:25] corn, it has an interesting amount of<br>[08:28] stuff going on. Um,<br>[08:30] >> yeah,<br>[08:30] >> little spice, a little um little tang or<br>[08:34] something. I don't know how to describe<br>[08:36] it. It's got something different going<br>[08:37] on.<br>[08:38] >> That must be that soft red winter wheat.<br>[08:41] >> Uh, which apparently soft is because it<br>[08:43] has less proteins in it, so it's less<br>[08:45] glutenous something. And it's gives it<br>[08:48] Oh, it really um<br>[08:50] >> so that means physically soft like<br>[08:53] >> like it's um<br>[08:54] >> I don't know. It's not like hard water<br>[08:55] and soft water. Is it you know it's like<br>[08:58] >> do we just use these words cuz we didn't<br>[09:00] have anything better?<br>[09:01] >> Yeah.<br>[09:02] >> Yeah. I don't know. Um<br>[09:05] I think this is my first weeded bourbon.<br>[09:10] >> Yeah. Um,<br>[09:13] yeah, it's uh it's been a while since<br>[09:14] I've done a weeded one, but we've done a<br>[09:17] few on the show. Um,<br>[09:22] and then yeah, bottled in bond has those<br>[09:23] requirements. It's got to be at least<br>[09:25] four years old, hunterproof. And this<br>[09:27] checks the boxes at six years old. So,<br>[09:34] oh, this reminds me of You've seen<br>[09:35] Wayne's World, right? The movie.<br>[09:38] Um, I'm actually not sure if I have,<br>[09:39] which might be very<br>[09:40] >> Shut the hell up. You haven't seen<br>[09:43] Wayne's World one or Oh my goodness.<br>[09:45] >> I'm familiar with it, but um,<br>[09:47] >> that doesn't matter at this moment.<br>[09:48] >> Seen it.<br>[09:49] >> Yeah. I don't think I've like sat down<br>[09:51] and watched the whole thing. I feel like<br>[09:53] there's a lot of movies like that where<br>[09:54] I've seen like bits and pieces when it<br>[09:56] happens to be on, but like Yeah, I'm<br>[09:58] pretty sure I haven't sat down and<br>[10:00] watched the whole thing.<br>[10:01] >> Oh man, there's a scene. So, you know<br>[10:02] who Wayne and Gar are?<br>[10:04] >> Mhm.<br>[10:05] >> Okay. So, Wayne is usually the one<br>[10:07] talking. and Gar's the nerdy, you know,<br>[10:08] secondary one. Um, and there's a moment<br>[10:12] and they're like live uh and like the<br>[10:14] first or second episode after they kind<br>[10:16] of sold out and they started making a<br>[10:17] bunch of money and went to a nice big<br>[10:19] production agency. Anyway, um Wayne has<br>[10:22] to leave and G is just left there by<br>[10:24] himself and G is like totally frozen<br>[10:27] like a deer in the headlights like I<br>[10:29] don't know what to do and the show is<br>[10:30] just mine and he just gets really<br>[10:32] awkward and it's really funny. So I kind<br>[10:34] of feel like that right now.<br>[10:37] You're coming back. I think I'm coming<br>[10:38] back<br>[10:39] >> at FPS five, but you know that's cool.<br>[10:42] >> It'll record normal.<br>[10:45] >> Yeah, it's fine.<br>[10:47] >> Okay. Um, so yeah, where were we? Um,<br>[10:54] Robbie was just digging in about<br>[10:57] >> Oh,<br>[10:58] >> yeah. I forget what we were saying. Um,<br>[11:01] well, what was I saying, Adam? Seems<br>[11:03] like you knew. Uh well you were digging<br>[11:05] into the intricacies of it like signals<br>[11:08] that had other dependent or that needed<br>[11:09] computed. There was a word about signals<br>[11:12] that you were asking about. You're like<br>[11:13] what does that particular part mean?<br>[11:15] >> Oh just I was just being um silly about<br>[11:18] like is it is functional<br>[11:20] >> like functional programming or like<br>[11:22] works.<br>[11:23] >> Uh yes yes. Okay.<br>[11:25] >> Yeah. No, it's like functional<br>[11:26] programming and you know that to be fair<br>[11:29] to because I think we all went through<br>[11:31] like the period of like h functional<br>[11:33] everything and that was interesting. Um<br>[11:38] there's a lot of nice things about it<br>[11:40] though and I think React's model with<br>[11:42] hooks really pushed the boundaries of<br>[11:44] that and it had some really nice like<br>[11:48] properties. One of the biggest ones<br>[11:50] being we're threading life cycle all the<br>[11:53] way through the system without having to<br>[11:56] like very be very explicit about it.<br>[11:58] Right? If you remember in Ember, you had<br>[12:01] to like thread the owner through from a<br>[12:04] component all the way through any kind<br>[12:06] of dependency you had and you have to<br>[12:09] like manage all the life cycle. your<br>[12:11] life cycle hooks become very like<br>[12:14] um deeply entangled with every single<br>[12:17] part of your system and all of a sudden<br>[12:21] your code is no longer like isolated.<br>[12:24] Your component logic seeps into every<br>[12:27] other part of your code. And Adam, you<br>[12:29] were about to say you're tempted to ask<br>[12:31] about observers or observables.<br>[12:33] >> Observables. I sure was. Yeah, I uh I'm<br>[12:37] still a big fan. I'm like I miss them. I<br>[12:39] kind of want them back except testing<br>[12:40] them was hard. But anyway, yeah. Well,<br>[12:43] observables are very interesting because<br>[12:47] they are a very similar type of system.<br>[12:51] They allow you to abstract away that<br>[12:53] reactivity and to create these<br>[12:55] composable elements. But the issue I had<br>[12:58] with observables is similar to the issue<br>[13:00] I have with uh you know kind of like<br>[13:03] those life cycle hooks is when you start<br>[13:06] writing code in observables kind of<br>[13:08] everything needs to start using<br>[13:10] observables. Everything needs to become<br>[13:12] observable aware. They're needy. Yep.<br>[13:15] >> Yes.<br>[13:16] >> And hooks at first doesn't feel like<br>[13:19] that, right? At first you're like, "Wow,<br>[13:22] I can use plain functions and<br>[13:24] everything's just a plain function and<br>[13:26] whatnot,<br>[13:27] but then over time you start to become<br>[13:30] really entangled in them and you you<br>[13:33] can't really detangle very easily."<br>[13:36] Actually, uh, one of the reasons I<br>[13:38] started working on Signnolium is, um, I<br>[13:40] was debugging some React components we<br>[13:42] have, trying to figure out performance<br>[13:43] issues and whatnot. And I noticed<br>[13:46] because I was doing a thing where I<br>[13:48] triggered the whole, ah, you called the<br>[13:50] same hooks out of the wrong order bug.<br>[13:53] Um, I noticed our stack was like 200<br>[13:57] hooks deep. And it wasn't even that big<br>[13:59] of a so few.<br>[14:02] >> Turns out when the smallest like<br>[14:06] node of your reactive system that you<br>[14:08] can rerun is the component. It ends up<br>[14:11] being quite a lot of uh stuff. Um<br>[14:16] but yeah, I I think that um with signals<br>[14:21] coming back to Fetchium, the goal for me<br>[14:24] has always been like can we detangle<br>[14:26] these things because you've got like<br>[14:28] data and then you've got like you know<br>[14:31] app uh view code and then you've always<br>[14:35] got a lot of business logic in between.<br>[14:37] You can't like really get rid of all of<br>[14:39] that. You've got a lot of like deriving<br>[14:42] you have to do and like monging of data<br>[14:45] and you got to like thread this needle<br>[14:49] and then you've got to thread life cycle<br>[14:51] through that and hooks almost get you<br>[14:54] there but you can't run them just<br>[14:57] anywhere and I couldn't like build fetch<br>[15:00] on hooks because I wanted fetchium to be<br>[15:04] independent I wanted it to be a data<br>[15:06] layer Apollo is built on observable<br>[15:09] Right. Um, it gets to do that and nobody<br>[15:14] knows under the hood. It's just an<br>[15:15] implementation detail.<br>[15:18] Um, fetch does the same thing with<br>[15:20] signals. And I just think that signals<br>[15:22] end up being a more elegant and um, like<br>[15:26] more<br>[15:29] ergonomic solution to the same problems.<br>[15:31] Especially for front-end def where you<br>[15:34] really don't want to capture every<br>[15:36] single event. you want to kind of allow<br>[15:38] the events to be driven through the<br>[15:40] system by consumption. Um, so you know<br>[15:44] with observables you kind of have to<br>[15:45] like force it all the time. You have to<br>[15:48] be like I'm going to debounce this and<br>[15:49] I'm going to like wait on this and then<br>[15:52] I'm going to Yeah, it just turns into<br>[15:53] like a really annoying like process<br>[15:56] where you're constantly trying to<br>[15:58] throttle that. And the only time I think<br>[16:00] that's really super useful is if you're<br>[16:02] in like a backend system where you<br>[16:04] really are like I want every single<br>[16:05] event to come through. I need to capture<br>[16:07] all of them.<br>[16:08] >> Oh man, it was good during touch events<br>[16:10] too because I could layer the touch uh<br>[16:13] start could kick off an observable that<br>[16:15] then kind of observed all the touch<br>[16:16] moves. I could zip the um the moves into<br>[16:20] a pointer event. So I could I could like<br>[16:22] merge whether or not it was a pointer<br>[16:23] event or a mouse event or all these<br>[16:25] different things into a single<br>[16:26] observable, feed the observable that<br>[16:28] actually needed to update some translate<br>[16:30] X and Y properties to make something<br>[16:32] very tangible and movable. And then when<br>[16:34] I got to the end and someone flung, I<br>[16:36] could easily close it all down. So there<br>[16:39] was like I agree though that most of the<br>[16:41] cases were uh take one, you know, it's<br>[16:44] like I just I just need one of these.<br>[16:45] Just give me the most recent one. I<br>[16:47] don't care about the history. Um but<br>[16:49] there were times when it was nice to<br>[16:50] have this replayable scenario or it was<br>[16:52] also I thought it was nice to think<br>[16:54] about your UI as not a one-time thing.<br>[16:57] That's a that's a problem people think<br>[16:58] about all the time where they're like,<br>[16:59] "Oh, they just hit the submit button<br>[17:00] once. I just need like one listener."<br>[17:02] It's like, well, they might hit it once<br>[17:03] and then open it up again and hit it<br>[17:06] twice. Um,<br>[17:08] really fast<br>[17:09] >> or Yeah. Which also observables were<br>[17:11] really good at handling that. Um,<br>[17:13] because you could cut but you had to<br>[17:14] continue chaining more chains. Um,<br>[17:17] >> yeah.<br>[17:17] >> And that was kind of the problem is it<br>[17:19] was like you could feel it infecting uh<br>[17:21] the code and if you didn't have a good<br>[17:22] grip on the mindset and then that's<br>[17:24] where testing came in to be a bummer<br>[17:25] too. You were just like, "Oh, great. Now<br>[17:26] I have to recreate the five chains that<br>[17:29] I put together just to do this submit<br>[17:31] form." uh to do a unit test and and then<br>[17:34] you had timing with unit tests. It was<br>[17:35] like a pain in the butt too. And anyway<br>[17:37] anyway I digress.<br>[17:38] >> Timing is always a problem and that's<br>[17:40] why I've always liked honestly Ember's<br>[17:42] test model like to to go off on a slight<br>[17:45] tangent but Ember you know had that<br>[17:47] model of like just run the tests in the<br>[17:50] browser and then um it was a bit more<br>[17:54] like you know a lot of like uh<br>[17:57] user testing library and stuff is like<br>[17:59] uh polling based. it's just like wait<br>[18:01] for the thing to be in the DOM. Um, and<br>[18:04] I prefer Ember's model where it was<br>[18:06] like, well, we we know when things have<br>[18:09] settled and when we're done rendering,<br>[18:11] so just like, you know, check it then.<br>[18:14] Um, just gives you a little bit more<br>[18:15] speed and, you know, but the main thing<br>[18:18] is just like, yeah, render the real<br>[18:20] component and then interact with it like<br>[18:22] a user. I think that's like that's<br>[18:24] that's a thing no matter what. Same<br>[18:26] issue with Signalium, same issue with<br>[18:28] any reactivity libraries, timing becomes<br>[18:31] tricky, hooks as well, like very much<br>[18:34] so. Um,<br>[18:37] and then back to what you were saying<br>[18:40] about observables, I think that like the<br>[18:43] second thing you mentioned of like you<br>[18:45] might come into the state in many<br>[18:47] different ways, you might come into it<br>[18:48] many different times. I think that is<br>[18:51] what a good reactivity system in general<br>[18:54] solves. And I do think that, you know,<br>[18:58] hooks can solve it if used correctly<br>[19:02] and, you know, thoughtfully and uh<br>[19:05] you're not doing anything too complex.<br>[19:07] It's It's actually pretty solid at<br>[19:09] solving it compared to some of the older<br>[19:10] stuff that like I don't know when I<br>[19:13] first started building stuff it was like<br>[19:14] Knockout and Meteor and Ember and<br>[19:16] Angular one and you know um so I I think<br>[19:21] that um yeah I think signals will get<br>[19:25] that for you as well if you play around<br>[19:27] with them. Um, I think that the other<br>[19:31] thing is where signals is not the right<br>[19:35] abstraction, but that's also such a<br>[19:37] niche thing that I think I'd rather have<br>[19:39] a specific abstraction for that, right?<br>[19:42] Something where it's like, oh, I am<br>[19:44] trying to track every single event here<br>[19:46] and I'm trying to have really nice<br>[19:48] animations with all of it. like having<br>[19:51] that integrated into the system that's<br>[19:53] going to render<br>[19:55] unless you're trying to render like the<br>[19:56] X and Y coordinates on like oh this is<br>[19:59] where it's at like right now on screen a<br>[20:02] bunch and you're also trying to feed<br>[20:03] that into a bunch of other data. I don't<br>[20:05] know how useful that is you know.<br>[20:08] >> Yeah. Yeah. I feel like um you know the<br>[20:12] big problem I have with all you know<br>[20:15] hooks and the way things are done these<br>[20:17] days is that it feels backwards to me of<br>[20:19] like okay everything will rerender<br>[20:21] infinitely until you tell it not to. I<br>[20:23] feel like the other way is the way it<br>[20:25] should be of like I'm gonna tell you the<br>[20:27] things that need to rerender and those<br>[20:29] things should be tracked because like<br>[20:32] >> it seems silly to do it the other way of<br>[20:34] like all right these 400 things I want<br>[20:36] to ignore like or there's like one I<br>[20:39] care about you know like seems<br>[20:41] >> yeah like going back to my Cascadia talk<br>[20:44] like basically if we think about it like<br>[20:46] promises right promises um<br>[20:51] like if we did what hooks do for<br>[20:54] reactivity to promises. It would<br>[20:56] basically be like every single time you<br>[20:58] hit an await, you halt the program and<br>[21:02] then you restart the program. At the<br>[21:04] start of the function, you go through<br>[21:06] every single function again, but it all<br>[21:08] has to be item potent. Every single step<br>[21:10] you take has to be item potent and then<br>[21:12] you hit the next await. And that's<br>[21:14] actually exactly how React suspense<br>[21:16] works. like use just throws an error and<br>[21:20] you know suspense catches that error. It<br>[21:23] sees that it's a suspense error and it's<br>[21:24] like okay I'll wait and once that<br>[21:26] promise resolves it starts re-executing.<br>[21:29] So you're literally doing that<br>[21:32] um with Signalium and with Signals in<br>[21:35] general but Signalium also really<br>[21:38] focused on having us like recomputee<br>[21:42] from the change state upward. So if you<br>[21:46] imagine your state tree and your<br>[21:48] functions, your hooks as like a tree of<br>[21:52] dependencies, right? And you you're<br>[21:54] doing essentially like a depth first<br>[21:56] walk of that tree when you execute it<br>[21:58] the first time. We start at the leaves<br>[22:02] when state changes and we walk up the<br>[22:05] tree and at every node you can stop that<br>[22:08] walk. You can say okay now that didn't<br>[22:10] change. So then nothing above this point<br>[22:12] has changed and really this is like<br>[22:15] similar to a lot of like diffing<br>[22:17] algorithms in general for components.<br>[22:19] It's just on the function level which is<br>[22:22] what promises and async did with like uh<br>[22:27] async aait did with like that operation.<br>[22:30] So I would say this is that's the way<br>[22:32] I've been framing it is like this is a<br>[22:34] monad for reactivity and I could<br>[22:37] actually see this being like a keyword<br>[22:39] in the language one day maybe. Um,<br>[22:43] don't quote me on that because, you<br>[22:45] know, I I still need to do the actual<br>[22:48] um,<br>[22:49] I don't know, sciency parts of things to<br>[22:52] to formalize all that, but it feels like<br>[22:55] it can be. It feels very composable. Um,<br>[22:58] and it's very nice to work with.<br>[23:02] >> So, how does the like official signals<br>[23:05] proposal come into play with any of<br>[23:08] that?<br>[23:09] >> Yeah. Okay. So things that signal does<br>[23:12] that the official signals proposal and<br>[23:14] basically no other signals like<br>[23:16] libraries do uh the two things are those<br>[23:20] parameterized like functions. So um what<br>[23:25] that basically works out to be is like a<br>[23:27] a signal factory and then kind of<br>[23:29] hooking up those signals and their life<br>[23:31] cycle to some consumer which we call a<br>[23:34] watcher in Signalium. Um, the closest<br>[23:38] I've seen is Jotai has atom families<br>[23:42] which are pretty similar, but they're<br>[23:44] like kind of an afterthought it feels<br>[23:45] like in Jotai. And in Signalium, we're<br>[23:48] like, "No, that's the default." Um,<br>[23:51] so there's that and then there's async.<br>[23:55] And async in general is usually an<br>[23:58] afterthought. It was an afterthought for<br>[24:00] Ember. If you remember, we rolled out<br>[24:02] autotracking and we were like, "Yeah,<br>[24:03] autotracking this is great. This is<br>[24:05] great for everything." And then people<br>[24:06] are like, "How do I manage a request?"<br>[24:08] And then I started<br>[24:10] building<br>[24:12] for years. Um, mostly because Chris<br>[24:16] Seldon just wouldn't let me land<br>[24:18] anything because he kept being like,<br>[24:20] "It's not perfect though." And I was<br>[24:22] like, "Chris, I swear if people aren't<br>[24:24] able to make requests, they're going to<br>[24:26] mutiny." Like weird.<br>[24:28] >> Who needs requests? All your data is<br>[24:29] just stored in the the front end. I just<br>[24:32] remember people using like modifiers to<br>[24:34] make requests which I was recommending<br>[24:36] because I was like yeah these are the<br>[24:37] replacements for life cycle hooks you<br>[24:39] should use these and then Chris was like<br>[24:42] and and you were like oh that's not what<br>[24:45] they were for actually and then I was<br>[24:48] like okay well how do you make requests<br>[24:49] if we're getting rid of these life cycle<br>[24:51] events and they were like<br>[24:53] you need to figure that out. We are<br>[24:56] still debating like they have the lint<br>[24:58] rules about don't use the render<br>[25:00] modifiers and don't use like<br>[25:04] >> um something else. Oh uh run loop maybe.<br>[25:07] Yeah. Yeah. So I'm like how do you<br>[25:09] render something after render without<br>[25:12] the run loop or render modifiers? You<br>[25:15] could do a custom modifier I guess but<br>[25:17] I'm like you get come on.<br>[25:21] I feel like a lot of the debates were<br>[25:23] really driven by like being perfect and<br>[25:25] they ended up letting the perfect be the<br>[25:27] end of the of the good. Um and and I'm<br>[25:32] trying to split the difference in a lot<br>[25:33] of ways. Like I want to have better than<br>[25:36] the status quo. A lot better than a lot<br>[25:39] of the status quo. Um, but I also don't<br>[25:43] want to um, you know,<br>[25:47] have it be<br>[25:49] like when I talk with Chris Elden, I<br>[25:52] still talk with him a lot and, uh, when<br>[25:54] I talk with him about um the<br>[25:58] um,<br>[25:59] async stuff and reactive promises and<br>[26:02] whatnot, he'll still be like, I don't<br>[26:04] know if that's quite right. And I'm<br>[26:05] like, okay. But it works really well.<br>[26:07] It's like it's definitely a lot better<br>[26:09] than hooks for a lot of things. But<br>[26:12] anyway, so reactive promises um are the<br>[26:18] thing that not not just reactive<br>[26:20] promises. Reactive promises and relays<br>[26:22] are the things that most signals<br>[26:24] implementations don't have or kind of<br>[26:26] only vaguely have and that I think are<br>[26:30] super necessary, but it's like a couple<br>[26:32] steps down the way for most people. And<br>[26:34] I've just been like messing with signals<br>[26:36] for a lot longer than most people like<br>[26:38] besides like Michelle West for MobX and<br>[26:41] um you know so I think like I've I've<br>[26:45] actually been talking to like pact<br>[26:46] people were like yeah we kind of need<br>[26:48] something for this and the solid people<br>[26:50] too and whatnot. Um so<br>[26:55] uh the proposal has what we need for<br>[26:59] those like you can implement those on<br>[27:01] top of the proposal and that is the<br>[27:04] connected and disconnected I think<br>[27:06] they're called or watched and unwatched<br>[27:07] hooks because you really basically need<br>[27:10] a way to say okay this part of the<br>[27:11] signal graph is being used by something<br>[27:16] live and that watcher that that observer<br>[27:20] externally could be like the DOM, right?<br>[27:22] Or it could be like your app. Um, it<br>[27:25] doesn't really matter exactly what it<br>[27:27] is. It's just userdefined and it says<br>[27:29] like, okay,<br>[27:32] as long as I'm using this, I need to<br>[27:34] consume resources, whatever those are.<br>[27:36] Now, on the other end of your signal<br>[27:39] graph, at the very edge, you will have<br>[27:42] something that communicates with the<br>[27:45] outside world. Um, that could be a<br>[27:49] connector to Apollo. Let's say you want<br>[27:51] to use Apollo, you have GraphQL, you<br>[27:53] just want to hook it up. Well, you need<br>[27:54] to subscribe and then later on you need<br>[27:57] to unsubscribe. You need to tell it<br>[27:59] like, I don't need those events anymore.<br>[28:01] Um, you could be communicating to a<br>[28:04] websocket. You could be communicating to<br>[28:05] a background process, to a web worker,<br>[28:08] like anything that is async and<br>[28:11] specifically<br>[28:12] that's not like request response. like<br>[28:14] you can kind of get away with request<br>[28:16] response like promises because those<br>[28:19] have an end point, right? You can kind<br>[28:21] of just toss it away if you don't need<br>[28:23] it anymore and it's not going to<br>[28:24] continue to consume system resources.<br>[28:27] But you cannot do that with any kind of<br>[28:29] subscription. And so you either need to<br>[28:32] thread your life cycle through the<br>[28:33] entire graph or you need to build it<br>[28:36] into the graph. And when you combine it<br>[28:39] with um<br>[28:42] like optional<br>[28:44] um not optional but like forking<br>[28:46] essentially so like uh branching<br>[28:48] branching is what I'm looking for. So<br>[28:50] like if you have an if statement right<br>[28:53] and it's like in branch A I consume<br>[28:55] signal graph you know A and in branch B<br>[28:59] I consume signal graph B. Unless we're<br>[29:02] saying we want to consume all of them<br>[29:03] all the time. You need to be able to<br>[29:06] dynamically switch between one and the<br>[29:08] other. And then you need to be able to<br>[29:10] sub unsubscribe from one and subscribe<br>[29:13] to the other, which kind of means the<br>[29:16] graph needs to know about this stuff.<br>[29:18] Like it's the only thing that can unless<br>[29:21] you want to start again doing a lot of<br>[29:23] really nasty threading of life cycle<br>[29:26] through all of that.<br>[29:28] And yeah, so that's how I got to where I<br>[29:31] am today with Signnolium and me being<br>[29:33] like the one person I convinced little<br>[29:35] Dan like we probably need the life cycle<br>[29:38] hooks and he has kept them in there and<br>[29:40] I've been very thankful to him for that.<br>[29:43] Um because everybody else is like do we<br>[29:46] really need these? And I'm like<br>[29:48] you will trust me you don't want to ship<br>[29:51] without them.<br>[29:54] >> Yeah. Yeah. I mean, so this stuff uh<br>[29:58] seems more complex than I kind of<br>[30:01] thought of signals uh being, you know,<br>[30:03] coming from I do mostly Ember still, so<br>[30:05] I'm like tracked properties. Yay. Um but<br>[30:09] I'm curious how you feel. Have you seen<br>[30:11] um Adam? How do you Is it Gia or Gaya Ga<br>[30:16] JS?<br>[30:16] >> One of those. Yeah.<br>[30:18] >> Yeah.<br>[30:18] >> I haven't seen that one. I haven't been<br>[30:20] keeping up with stuff a lot because I've<br>[30:21] been just like in execute mode for<br>[30:24] getting stuff done with React.<br>[30:27] >> Yeah,<br>[30:29] system and a half.<br>[30:32] >> So, so Gia, I believe I guess it's Gia.<br>[30:34] We'll say Gio. Um<br>[30:35] >> I like Gia because it makes me like Gio.<br>[30:37] You know, you could say it real cool,<br>[30:39] you know. Gio.<br>[30:40] >> Yeah. Yeah.<br>[30:41] >> Um but it its whole thing is like um I<br>[30:44] don't know how it was built. We're<br>[30:45] hopefully going to have the guy that<br>[30:46] wrote it on and and learn about it. But<br>[30:48] the TLDDR is like it's super small and<br>[30:51] it has no hooks, no signals, no like it<br>[30:54] just figures out what should change<br>[30:56] through like some magic compiler and I'm<br>[30:59] like<br>[31:01] what? So like um I don't know. I'm<br>[31:04] curious of your thoughts on like I<br>[31:06] always kind of have this big, you know,<br>[31:08] vision of the future of like will all of<br>[31:10] these minute things we debate about not<br>[31:12] matter and we just write like, you know,<br>[31:15] thing equals whatever done. Um yeah,<br>[31:18] where what do you think about that?<br>[31:21] So<br>[31:23] I I think that um<br>[31:26] like<br>[31:28] signals<br>[31:31] I I'm after that as well and I think<br>[31:33] that promises did that for async like<br>[31:36] the world before promises with and and<br>[31:40] sync uh symmetric async right like<br>[31:42] request response the world before that<br>[31:45] with promises was the wild west. It was<br>[31:48] just like callbacks everywhere. And it<br>[31:50] wasn't just JavaScript that had that. It<br>[31:52] was C. It was Java. Like that was pretty<br>[31:57] standard for a lot of things was just<br>[31:59] like, you know, how do you resume after<br>[32:02] asynchronous actions? Well, you kind of<br>[32:04] just have to like, you know, pick it<br>[32:07] back up. Um,<br>[32:10] so I do think there are things we can do<br>[32:12] where we can figure out abstractions<br>[32:14] that allow us to no longer have to think<br>[32:17] about entire problem spaces. And we've<br>[32:20] done that many many many times in<br>[32:22] computer science. In fact, I think that<br>[32:24] is more important to do now with AI than<br>[32:27] ever because if we want the code to be<br>[32:29] understandable, if we want to be able to<br>[32:31] read and write and execute quickly and<br>[32:34] not just be making slop that's about<br>[32:36] like five steps away from falling apart<br>[32:38] all the time, um we want simpler<br>[32:42] abstractions.<br>[32:44] Um that's actually one of the reasons<br>[32:45] that drove the design of Fetchium.<br>[32:49] Fetchium has this very declarative<br>[32:52] syntax um for the design. It's like you<br>[32:56] declare your params, you declare their<br>[32:58] types and then through some proxy magic<br>[33:03] I use those uh like when you reference<br>[33:06] those parameters<br>[33:09] um elsewhere<br>[33:11] uh I'm basically capturing a reference<br>[33:14] to them and then for each instance we<br>[33:17] actually go and reify those parameters<br>[33:19] and all the fields that are derived from<br>[33:21] them. So the path itself of a request or<br>[33:25] the headers, you can actually reference<br>[33:27] like this.params<br>[33:29] dot, you know, ID or this.params<br>[33:32] whatever in there. It's really cool. And<br>[33:35] at first I was like, okay, is this too<br>[33:37] magical though? Like this is a little<br>[33:40] bit a little bit much. Maybe maybe<br>[33:43] people won't like it. And I realized,<br>[33:46] okay, but AI probably will really like<br>[33:48] it because it is very simple. It's very<br>[33:50] readable. and AI can remember those<br>[33:52] rules typically as long as you give it<br>[33:54] the like hints of like okay don't do<br>[33:56] this and be careful and use this agent<br>[33:58] definition and you know um so I decided<br>[34:03] to go for the more declarative thing<br>[34:04] rather than a thing where I would have<br>[34:06] had to have more like function<br>[34:09] definitions so anyway sorry tangent but<br>[34:14] yeah I think that um<br>[34:18] it is actually something we can do we've<br>[34:20] done it many times times. We did it when<br>[34:22] we created compilers for assembly. We<br>[34:25] did it with uh closures. Uh we did it<br>[34:28] with you know promises and futures and<br>[34:32] and I think we can do it with<br>[34:33] reactivity. I think we've been trying to<br>[34:35] do it with reactivity since like the<br>[34:37] first functional reactive pro uh<br>[34:39] programming white papers which I like<br>[34:42] went back to read at one point on this<br>[34:45] journey. It's like they're describing<br>[34:48] really cool things, but like the how you<br>[34:50] actually write it and how you actually<br>[34:52] use it has always been this white whale<br>[34:56] of<br>[34:58] ergonomics, right, of like most people<br>[35:00] don't seem to get it. And the people who<br>[35:01] do are like, "Why don't most people get<br>[35:03] it?" And I'm like, "Have you seen Elm? I<br>[35:06] don't know, man. Like, have you seen<br>[35:08] Haskell?" Like, I I get it now, but also<br>[35:12] like it took me a while to wrap my brain<br>[35:13] around that. like took a while.<br>[35:16] >> Yeah. Yeah. I mean I feel like a lot<br>[35:19] myself included a lot of the time a lot<br>[35:21] of web developers don't understand a lot<br>[35:24] of the complexity. So like I feel like<br>[35:26] there's two very separate camps of like<br>[35:29] um you know one one side frequently or<br>[35:33] historically at least maybe not today<br>[35:34] with AI and whatever's going on but like<br>[35:36] I think the people that chose writing<br>[35:38] 200 React hooks liked the complexity.<br>[35:41] They want that. They're like I love it.<br>[35:43] Look at all these hooks. They're<br>[35:45] awesome. Like, and then the other side<br>[35:47] was like, I don't ever want to write a<br>[35:48] hook. I just I want this.fu equals bar<br>[35:50] and I'm I'm happy. Um, and I think, you<br>[35:55] know, neither really matters anymore<br>[35:57] because AI is going to write so much of<br>[35:59] the code that like you're right that<br>[36:01] like if you build your libraries to be<br>[36:03] very easily usable by all these models,<br>[36:06] then I think they'll just be like, "Oh,<br>[36:08] this is easy." And use that like because<br>[36:11] I don't I don't know how you feel about<br>[36:13] people are saying, "Oh, I'm not even<br>[36:14] going to look at the code anymore in<br>[36:15] like a year." And I I don't know if<br>[36:16] we're going to get to that. But<br>[36:18] >> I actually think it's more important to<br>[36:20] read the code than ever. And here's why.<br>[36:23] I think we are going through what<br>[36:25] happened to our physical bodies when we<br>[36:28] started to have 9 to5 desk jobs like be<br>[36:32] the main way of, you know, uh kind of<br>[36:36] working, right? Because it used to be<br>[36:38] that for most people, you would probably<br>[36:41] get at least a little bit of walking in,<br>[36:43] some standing, some like doing things<br>[36:45] and not just sitting at a desk staring<br>[36:47] at a screen for eight hours. Heck,<br>[36:49] before work from home, uh, you know, I<br>[36:52] at least had to go to meeting rooms on<br>[36:53] occasion. Um, so you know what happened<br>[36:58] in the last century? We started going to<br>[37:00] the gym. Gyms happened. Um, physical<br>[37:04] fitness and all of that. I think that's<br>[37:06] about to happen to our brains. Like,<br>[37:08] yeah, you don't need to like use your<br>[37:11] brain in that same way to get 80 to 90%<br>[37:15] of what you need done done.<br>[37:18] But if you don't, you're not going to<br>[37:20] get it through just doing your job<br>[37:21] anymore. And you're not going to level<br>[37:23] up. You're not going to grow. You're not<br>[37:25] going to understand things deeply<br>[37:28] anymore. And I don't know, that also<br>[37:30] just doesn't sound very fulfilling for<br>[37:32] me because I love doing this. Um, but I<br>[37:35] also think like if you want to be a good<br>[37:37] dev, you're going to have to read a lot<br>[37:39] and you should be reading your your<br>[37:41] agent's code all the time. I think um<br>[37:44] >> the domain gym.ai is for sale. Just<br>[37:47] saying.<br>[37:50] >> Just play Clues by Sam. That's the thing<br>[37:51] I do that always keeps my brain feeling<br>[37:53] sharp. Um I I empathize with what you're<br>[37:56] saying, but I also feel like uh my brain<br>[37:57] is um incapable of what AI wants it to<br>[38:01] do now. like I'm not I'm not good. I'm<br>[38:04] not enough. Um it could take uh you know<br>[38:08] I could be commanding 100 teams uh if I<br>[38:12] was mentally capable. If I was I need<br>[38:15] more arms also, you know, give me more<br>[38:17] arms for more fingers with more<br>[38:19] keyboards and I could be making more<br>[38:21] software, you know, like<br>[38:23] >> uh or or even like the model changes<br>[38:25] where like I'm not telling one, you<br>[38:27] know, it starts with you you try to tell<br>[38:28] one agent what to do. Then as you level<br>[38:30] up, you tell a team what to do. Then as<br>[38:33] you level up, you create swarms, which<br>[38:35] maybe are like multiple teams. You level<br>[38:36] up again and now you're like coding<br>[38:39] entire teams. So you hit a button and it<br>[38:42] creates loops that create teams that<br>[38:43] create teams that go out and they do<br>[38:45] work and they kind of like fan out and<br>[38:47] re come back and fan out again. And then<br>[38:49] you've got your gas towns. Um, and you<br>[38:51] could have multiple gas towns and<br>[38:52] eventually someone's brain is trying to<br>[38:54] manage a country of, you know, agents or<br>[38:57] whatever. And it's like I feel incapable<br>[38:59] of uh like Jason Langorf says like I<br>[39:02] can't even come up with one good idea to<br>[39:04] go execute. How are people out there<br>[39:06] having three or nine or whatever. He's<br>[39:09] like you're all you're lying. There's no<br>[39:11] human brain out here that can do that.<br>[39:13] But I do feel like during the workday<br>[39:14] that my brain is now being taxed beyond<br>[39:16] its squishy capabilities. I'm like I am<br>[39:19] just but flesh. I'm sorry agents. I am I<br>[39:23] can't. You need too much from me. I need<br>[39:26] to leave at four o'clock today or else<br>[39:28] my brain might explode because I just<br>[39:31] can't deal with six agents at the same<br>[39:33] time for eight hours a day. I'm too<br>[39:34] squishy. Um, but I also agree that like<br>[39:38] there's a point of which I'm losing the<br>[39:39] details. And I love the I've sweated the<br>[39:41] details my whole career. It's what I<br>[39:42] think got me where I am. Um, and now I'm<br>[39:45] sweating the details in a way of<br>[39:49] orchestration. you know, how do I sweat<br>[39:51] the details uh so that I can create<br>[39:53] something that does the detail work? Um<br>[39:56] it's just different. And I agree there's<br>[39:59] you're going to have to balance it. Uh<br>[40:00] there's an imbalance that's happening.<br>[40:02] It's Yeah. If you went to the gym and<br>[40:04] only did curls, you know. Um so<br>[40:07] >> I used to go to the gym and only bench<br>[40:10] and then go into the sauna because that<br>[40:12] was the fun part.<br>[40:16] >> Fair enough. But yeah. No, I think like<br>[40:20] having a varied routine is good. I think<br>[40:23] pushing that far in that direction. I'm<br>[40:26] a very like balanceoriented person. So,<br>[40:29] >> yeah, same.<br>[40:30] >> I try I would just try to be like,<br>[40:32] "Yeah, I can't handle more than six at a<br>[40:34] time. Sorry." And if somebody else is<br>[40:37] saying I should be able to handle more,<br>[40:39] like, okay, cool.<br>[40:41] I don't know if what you're producing is<br>[40:44] actually going to be like<br>[40:47] the right output in a lot of ways. And I<br>[40:50] think like<br>[40:52] actually zooming in on those details, it<br>[40:54] matters like I have uh been working on a<br>[40:58] little slide framework I use for my<br>[41:00] presentations and you know I it's it's a<br>[41:06] little messy. It's a little hacky cuz<br>[41:07] presentations are always last minute and<br>[41:09] I'm just hacking away. And I found that<br>[41:13] when I have AI make my slides now, which<br>[41:15] is what I do most of the time, it's<br>[41:17] messing up a lot because the<br>[41:19] abstractions aren't perfect. Um, and<br>[41:23] it's like dumb, not perfect. Like I<br>[41:25] could go in and fix it pretty easily and<br>[41:27] then I wouldn't have to fix what my AI<br>[41:28] is doing with the slides and then every<br>[41:30] single bot after that would be a lot<br>[41:33] better. I think working on the<br>[41:35] abstractions and getting the details<br>[41:36] right matters still. And what I find my<br>[41:39] most productive times are when I'm like<br>[41:41] pairing with an agent and I'm basically<br>[41:43] like watching what it does, watching how<br>[41:44] it's thinking because oftentimes I will<br>[41:47] see it thinking and be like, "No, stop."<br>[41:50] >> Screech, right?<br>[41:53] >> Yeah. I can barely<br>[41:56] >> I can barely keep like you know, you<br>[41:58] were saying that reading the code is<br>[42:00] important. I think so too because like<br>[42:02] for things that you have good domain<br>[42:04] knowledge on, you know, better than what<br>[42:05] it's gonna write. So I'm like, "Hey,<br>[42:08] yeah, um, you just wrote like 500 lines<br>[42:10] of code. I needed you to like add a like<br>[42:13] optional chaining thing." Like that was<br>[42:15] it. Like or like something, you know,<br>[42:17] small. And it's like, oh, like I just<br>[42:19] handled every possible case. And then<br>[42:21] also, you didn't ask me to, but I ran<br>[42:23] linting, ran the test, committed it,<br>[42:25] pushed it up, like I'm like, "No, stop<br>[42:28] doing all of that." Um, but yeah, like I<br>[42:31] I have a hard time managing one agent at<br>[42:34] a time because they they're done so<br>[42:35] quick. I'm like, "Do this." It's like,<br>[42:37] "Here you go." And I'm like,<br>[42:39] >> and I like reading what they're doing.<br>[42:40] I'm like, "Oh, cool. Let me follow<br>[42:42] along. Oh, that's good. That's good.<br>[42:43] That's bad." It's like Austin Powers<br>[42:45] like yes, yes, no, no, no.<br>[42:48] >> I think it's also like very new. And it<br>[42:52] it could change significantly as time<br>[42:55] goes on. Um, I could find that things<br>[43:00] get easier to manage, like larger<br>[43:03] numbers of them, larger swarms of them.<br>[43:07] Um, and who knows, they could get more<br>[43:09] intelligent, although I I don't know I<br>[43:13] don't know how much further we're going<br>[43:14] to be able to push the LLMs. Like the<br>[43:16] last iteration has definitely been, you<br>[43:20] know, significantly better in some ways<br>[43:22] in like the details, but it's also like<br>[43:25] still not making any progress on a lot<br>[43:27] of the creative stuff. Still not making<br>[43:29] a lot of progress on like figuring out<br>[43:32] directionally where we need to go or<br>[43:34] having judgment on those things.<br>[43:38] >> I have a couple questions. You said a<br>[43:39] couple words earlier and I want to know<br>[43:42] uh more about them. So the first one was<br>[43:45] uh you were saying threading and I feel<br>[43:46] like that was just a really nice way of<br>[43:48] saying prop drilling. Is that correct?<br>[43:52] Kind of.<br>[43:53] >> What's the difference between threading<br>[43:55] data or threading a signal or threading<br>[43:57] you know reactivity through my<br>[43:58] application from a top down? How is that<br>[44:01] different from prop drilling? With prop<br>[44:03] drilling, you can um<br>[44:08] pass<br>[44:10] things down very transparently and it's<br>[44:12] more just that it's annoying. It's like,<br>[44:14] oh, you just have to keep passing it<br>[44:16] down and I have to like<br>[44:18] >> But you don't really race from node to<br>[44:21] node. Yeah.<br>[44:22] >> Yeah. You don't really have to do<br>[44:23] anything at every layer other than pass<br>[44:25] it down, right? um with<br>[44:30] what I'm referring to with reactivity<br>[44:32] threading it through the system like<br>[44:34] every time there's a branch you also<br>[44:36] have to now<br>[44:39] you know set it up and tear it down on<br>[44:41] either side of the branch. So you need<br>[44:43] to like integrate at various points in<br>[44:45] the system. You need to have like your<br>[44:46] life cycle on both sides of that which<br>[44:50] it's more like a vein. So a vein running<br>[44:52] from into these different parts of the<br>[44:55] system. Um, okay. Okay. I think I that's<br>[44:58] a good metaphor<br>[45:00] >> and it's I think we think of prop<br>[45:02] drilling around components and this is<br>[45:03] really much more around functions which<br>[45:06] is far more pervasive in a lot of ways<br>[45:08] but also you know passing parameters<br>[45:11] down and prop drilling through a bunch<br>[45:12] of functions is not as annoying. Um, I<br>[45:17] find at least I I used to think it was<br>[45:20] annoying and then I had more and more,<br>[45:23] oh my clever thing where I kept the<br>[45:26] state in something that was like semi-<br>[45:27] global or whatever or just, you know, it<br>[45:29] started getting a little bit more like,<br>[45:31] oh, hey, that keeps biting me. And I'm<br>[45:33] like, now I'm like with Typescript, I'd<br>[45:35] rather just have like very explicit,<br>[45:38] very clear types. And I don't mind<br>[45:40] boilerplate, a little bit of boiler<br>[45:42] plate for that.<br>[45:43] >> Gotcha. Prop drilling is like a skewer<br>[45:45] that goes through each piece of meat and<br>[45:47] piece of meat is like your component and<br>[45:49] um threading is an abstraction. So it's<br>[45:52] like this exists outside of the meat,<br>[45:54] you know? It's like I have a strand of<br>[45:56] things and it can go through meat. I<br>[45:58] don't care. Meat subscribes to my<br>[45:59] thread. Uh<br>[46:01] >> is that kind of it's like it's like a<br>[46:03] state store.<br>[46:07] One thing I will say about prop drilling<br>[46:09] um that I think is it's like an<br>[46:11] antiattern. Like people started<br>[46:13] considering it an antiattern I think a<br>[46:15] lot because um React really like if you<br>[46:20] prop drill all over the place, you're<br>[46:21] going to have rerenders all over the<br>[46:23] place because<br>[46:24] >> it's not as portable either. You try to<br>[46:25] move a component and be like, "Oh,<br>[46:27] right. It was in the middle of a prop<br>[46:29] drill and now it's not." Anyway, yeah,<br>[46:31] you could break things.<br>[46:32] That's a good point. Um, but I do think<br>[46:36] there you miss something when you start<br>[46:38] having like, oh, I'm just going to use a<br>[46:41] context for like all my data loading and<br>[46:43] then I'm going to use query in every<br>[46:45] single component that needs the query.<br>[46:48] It's like you lose where's that data<br>[46:49] even coming from? What initiated that<br>[46:52] query? Where who was the original<br>[46:54] caller? It's like we don't know. or just<br>[46:56] kind of getting it from wherever and<br>[46:58] like, okay,<br>[47:00] where are our routes? What is the<br>[47:02] overall structure of our app? Um, so I'm<br>[47:07] not saying I think one pattern or the<br>[47:10] other is better necessarily, but I don't<br>[47:12] think that the performance thing should<br>[47:14] be tied to the structure thing. Like I<br>[47:18] think those two things should be<br>[47:19] separate concerns. And I find this a lot<br>[47:21] in React with the current setup, right?<br>[47:24] This is something I've been trying to<br>[47:25] solve with Sagalia because with fine<br>[47:28] grain reactivity, I can have a reactive<br>[47:31] promise at the top of my app. I can pass<br>[47:34] it all the way down to the childmost<br>[47:36] leaf and the promise object itself never<br>[47:39] changes. Uh the values on the promise<br>[47:43] and the state of the promise changes<br>[47:45] because it's a monad. So um you get it<br>[47:50] all the way down in this leaf you<br>[47:51] dstructure value from it uh and it's if<br>[47:54] it's a signalium a react component<br>[47:57] wrapped with signalium's memoization<br>[48:01] um it will rerender you know based on<br>[48:05] that value changing but it will none of<br>[48:07] the other components in between will so<br>[48:09] it just takes that out of the equation<br>[48:11] that said you might still want to like<br>[48:12] use query everywhere for other reasons I<br>[48:15] just don't think that it the performance<br>[48:16] should be the reason.<br>[48:19] >> There was one more word you used that I<br>[48:21] hadn't heard before, at least in the<br>[48:23] context, which was relay. So, what's a<br>[48:25] reactivity relay?<br>[48:26] >> Yeah. So, that um I know relay is like<br>[48:29] an overloaded term, but so is everything<br>[48:31] else. So, um nothing to do with relay,<br>[48:35] the data loading library. Um right,<br>[48:38] >> I was more so thinking like signal<br>[48:39] relays. Um<br>[48:42] really what they are is an abstraction<br>[48:46] that kind of replaces use effect in<br>[48:49] hooks. Um they are<br>[48:54] uh almost a self-contained hook of state<br>[48:58] and internally when a relay is used so<br>[49:02] when it's connected through the signal<br>[49:04] graph it it looks like a reactive<br>[49:06] promise. It has a dot value like any<br>[49:08] other signal. And so you can just read<br>[49:11] it. Externally it just looks like a<br>[49:13] value. Um but internally when it<br>[49:18] connects to the signal graph if it is<br>[49:20] being observed if it's being watched it<br>[49:23] starts up it activates itself and that<br>[49:27] is the where you subscribe to something.<br>[49:31] So relays relay state outside of the<br>[49:35] graph into the graph and then vice<br>[49:37] versa. You can also react to state<br>[49:40] changes from within the graph and relay<br>[49:43] them outward. So you might have a signal<br>[49:46] for your current topic and you want to<br>[49:48] subscribe to a message bus. The relay<br>[49:50] reads that signal for the topic,<br>[49:52] subscribes. Now the signal topic<br>[49:54] changes. The relay reruns, cancels the<br>[49:57] old subscription, updates the new<br>[49:59] subscription, and feeds the state from<br>[50:01] that subscription into your graph. It's<br>[50:04] a way to have a node that communicates<br>[50:07] with the outside world without like<br>[50:09] exposing the details of that<br>[50:11] communication to the graph.<br>[50:15] Excellent. Thank you. For some reason, I<br>[50:17] was thinking subject in observables or<br>[50:19] there was an observable that was similar<br>[50:21] to this. Um, but I haven't used<br>[50:24] observables for I don't know, six, seven<br>[50:27] years, maybe more. I I believe it like<br>[50:31] they're very similar in a lot of ways.<br>[50:33] Like I said, everything I found that<br>[50:35] everything that I have thought of in<br>[50:37] signals and everything has had like an<br>[50:39] equivalent in observables and whatnot.<br>[50:42] So very much on the same wavelength. The<br>[50:47] odd man out is hooks, but you know, you<br>[50:50] didn't hear that from me.<br>[50:54] I did find what Gio used by the way.<br>[50:56] It's proxies, which I've always wondered<br>[50:58] why proxies weren't used more. They've<br>[50:59] been around for so long. They seem very<br>[51:01] uh you can intercept and do comput<br>[51:04] >> because debugging them is hard.<br>[51:06] >> Yeah. Well, debugging a lot of these<br>[51:08] things is hard. Yeah.<br>[51:10] >> Fair thing about proxies is like, sure,<br>[51:13] that might be how you track what is<br>[51:15] being used, but under the hood, you<br>[51:18] still need to like put the dependencies<br>[51:21] together. And that's where like you<br>[51:23] could build a proxies based thing on top<br>[51:25] of signals. That's what Mob X is or like<br>[51:28] what views data is in data components.<br>[51:32] Um<br>[51:33] and you can also connect those all using<br>[51:35] observables.<br>[51:37] You can't connect them using hooks<br>[51:39] because hooks is very tied to the<br>[51:41] rendering layer. But um I know I keep<br>[51:44] ragging on hooks, but it really is just<br>[51:45] like whenever you start looking at, you<br>[51:48] know, a React library and you're like,<br>[51:50] "Oh my god, how many hooks are what is<br>[51:52] going on here?" And it<br>[51:55] >> Oh, yeah. You're preaching to the choir<br>[51:57] here. So, uh<br>[51:59] let's just react is the hammer.<br>[52:01] >> Uh no, go ahead.<br>[52:03] >> What is a hook? If if React is a hammer,<br>[52:05] you know, and everything is is a hook a<br>[52:07] nail. No, cuz what is a hook in this<br>[52:09] thing? you know, like cuz they do<br>[52:11] they're used everywhere as like some<br>[52:13] sort of like, oh, it's duct tape. Oh,<br>[52:15] I'll just tape it,<br>[52:16] >> you know? Oh, just you just need more<br>[52:18] tape. Just another piece of tape.<br>[52:19] >> The thing is like that makes sense in a<br>[52:22] world um like that is also true with to<br>[52:26] an extent with signals. That is<br>[52:28] definitely true with observables, but<br>[52:30] those things can be used independently.<br>[52:32] You don't need a whole rendering layer<br>[52:34] to use those. You can't make hooks um<br>[52:38] Apollo client and then run that<br>[52:40] anywhere. Like it has to work in React<br>[52:44] and that's the only thing. It just ties<br>[52:46] everything super deeply into React<br>[52:49] >> which is what they want.<br>[52:51] >> I don't think that's what they want. I<br>[52:52] think they I think they actually believe<br>[52:55] that it is a better model and I can see<br>[52:59] why they got there. Again, it's like<br>[53:03] following this one thread for a very<br>[53:05] long time and then a lot of sunk cost<br>[53:06] fallacy along the way. But I I I like to<br>[53:10] think better of people. Um<br>[53:13] >> yeah, I don't know. I like to rag on<br>[53:14] React. So, um but I I think that uh you<br>[53:18] know, I don't know who's in charge now.<br>[53:19] I know they have a React Foundation<br>[53:21] which is supposed to like democratize<br>[53:22] some of it but like with Verscell being<br>[53:25] such a like pervasive like the only one<br>[53:28] that mattered in React for a little<br>[53:29] while. I feel like they do want it to be<br>[53:31] like oh it can only be Nex.js it can<br>[53:33] only be React. It's all very bespoke<br>[53:35] like you can't ship it anywhere else<br>[53:37] except for on Versell. Um<br>[53:41] >> I don't know about Versell. Um I almost<br>[53:44] worked there. I got an offer, but yeah,<br>[53:49] I was then then in Phantom the Phantom<br>[53:52] acquisition for Bitzky went through and<br>[53:54] I was like, well, I'll see how this pans<br>[53:56] out. And it's been interesting. It's<br>[53:59] it's an interesting problem space and I<br>[54:01] don't know, I still think there's some<br>[54:02] cool things crypto can do, especially<br>[54:04] around to go off on another tangent. Um,<br>[54:08] and it it's annoying that the crypto<br>[54:10] industry isn't doing this because we<br>[54:12] keep seeing it.<br>[54:14] uh verifiability and like knowing what<br>[54:17] is real, which is becoming more and more<br>[54:19] of a problem with AI and AI from the<br>[54:24] sense that like somebody was saying<br>[54:26] recently OpenClaw is going to just<br>[54:28] destroy like<br>[54:30] >> you know our our texts like people are<br>[54:33] going to be like doing phone scams like<br>[54:35] all kinds of things like soon. Um, and<br>[54:39] that's just it's going to increase the<br>[54:41] output of that exponentially, right?<br>[54:44] Um,<br>[54:46] I I think that<br>[54:48] with not crypto necessarily, but with<br>[54:53] cryptography and like a distributed web<br>[54:56] of trust, you could imagine<br>[54:59] a less creepy version of that same<br>[55:01] Almanbacked company that's like we<br>[55:03] verify that you're a human, but like not<br>[55:06] in a way that where we store your<br>[55:08] biometrics<br>[55:09] and stuff, but um more like in a way<br>[55:15] where we just you go into like I don't<br>[55:19] know a nonprofit and you're like hey<br>[55:22] here I am here's my ID here's my stuff<br>[55:24] and they're like cool you haven't signed<br>[55:25] up with us before what's your wallet<br>[55:27] address and then they say uh cool we're<br>[55:30] going to sign that wallet address say<br>[55:32] you're a human now you can go and take<br>[55:34] that anywhere but you can share it in a<br>[55:36] way where nobody else can see any other<br>[55:38] details about you just that this one<br>[55:40] organization said that this account that<br>[55:42] you phone is human, right? Stuff like<br>[55:44] that. And then get rid of like the age<br>[55:47] verification nonsense we're doing now<br>[55:48] because you could do that with age too,<br>[55:50] right? The government and again no other<br>[55:54] details are shared. It's all very<br>[55:55] privacy forward. And then combine that<br>[55:58] with like okay now we can see<br>[56:01] >> think of it like distributed blue check<br>[56:03] mark for the web.<br>[56:06] >> Yeah. Yeah. I think there's a lot we<br>[56:08] could do. Um, we talked to Angie Jones<br>[56:11] about this about like um I think certain<br>[56:14] states have like store your like are you<br>[56:17] over 21 basically so you can just buy<br>[56:20] alcohol from an app without it needing<br>[56:22] to know your birth date or like<br>[56:24] whatever. It's just like you're verified<br>[56:25] being over 21. So it's like there's a<br>[56:28] lot of that stuff we could do of like<br>[56:29] little checks that could be like you<br>[56:31] know immutable or whatever and like<br>[56:35] verifiable. So, like, yeah, I mean,<br>[56:37] there's definitely stuff we could do<br>[56:38] there. Um, interestingly though, I<br>[56:41] wonder what your thoughts are about, um,<br>[56:44] I just saw this in like, I don't know, a<br>[56:46] few hours ago and read it for like 30<br>[56:48] seconds, so I I know a lot about it, but<br>[56:50] um, Google said that they have solved<br>[56:54] Bitcoin's uh, algorithm or what do you<br>[56:58] call it? Algorithm is the wrong word.<br>[56:59] Like they've they know how to like mine<br>[57:01] every Bitcoin, I guess, is what they're<br>[57:03] saying. But they're not going to<br>[57:04] >> Oh, really? They're not going to release<br>[57:06] it until 2029 is what they said.<br>[57:08] >> They cracked the query. They they can<br>[57:10] just go straight to the the co Wow.<br>[57:12] >> Yeah. They're like we they have enough<br>[57:14] quantum computing something to like<br>[57:16] figure it out. They they claim<br>[57:19] >> I don't know if that's real. if they if<br>[57:22] they've like so I know I I I only know<br>[57:28] around the edges of this but the<br>[57:30] algorithm is Shor's algorithm and Shor's<br>[57:32] algorithm does crack RSA and if Bitcoin<br>[57:35] has not updated their algorithms to be<br>[57:39] ready for quantum computing then they're<br>[57:41] dumb and I I maintain that Bitcoin is<br>[57:44] the dumbest cryptocurrency for a lot of<br>[57:46] reasons. Um<br>[57:49] I I do not believe personally in<br>[57:52] personally um and you know I'm not an<br>[57:55] economist and I'm going to have all the<br>[57:57] disclaimers here and this is not at all<br>[58:00] the view of my employer or anything like<br>[58:02] that. Um just<br>[58:03] >> not financial advice. So, but I don't<br>[58:07] personally believe in the whole like uh<br>[58:10] you know<br>[58:12] like deflationary currency like idea of<br>[58:17] like I I think there are benefits to<br>[58:19] having a fiat currency where you can say<br>[58:23] um we're going to print more or less<br>[58:25] depending on market conditions.<br>[58:28] And that comes from<br>[58:30] my view of the economy being more of the<br>[58:33] chaos model, which is like every other<br>[58:37] view of the economy is like here's a<br>[58:38] perfect world where it's like perfectly,<br>[58:41] you know, capitalistic or perfectly<br>[58:44] communistic or perfectly whatever,<br>[58:46] right? And I'm like, you're never going<br>[58:48] to have a perfect model. You're going to<br>[58:50] have edge cases. You're going to have<br>[58:52] corner cases. You're going to have a<br>[58:53] billion of those. And things are going<br>[58:56] to go off the rails from time to time.<br>[58:57] and you need to be able to react to<br>[58:58] that. Um, so institutions, organizations<br>[59:03] need to be able to react to that. And<br>[59:05] having a currency, having a central<br>[59:07] currency, having your only currency be<br>[59:10] one that can't entirely, I think, is<br>[59:13] maybe not the best idea. But that said,<br>[59:17] I do think like other cryptocurrencies<br>[59:20] have more ability to do that. Like if<br>[59:23] you look at Ethereum,<br>[59:25] it evolves through a process where<br>[59:28] everybody talks kind of like RFC's which<br>[59:31] is kind of great. Okay, we can evolve<br>[59:33] it. We can slowly move it in a different<br>[59:36] direction. It went from proof of work to<br>[59:38] proof of stake. Cool. I think that I'm<br>[59:43] much more comfortable with that kind of<br>[59:44] model. Um where we can be some amount of<br>[59:47] reactive<br>[59:49] but also<br>[59:52] Yeah. I don't know. So, I don't know<br>[59:54] what's going on with Bitcoin, but I hope<br>[59:55] the rest of us are crypto are quantum<br>[59:57] ready or whatever.<br>[59:59] >> Yeah, I have no idea. I mean, Bitcoin,<br>[60:02] as far as I know, hasn't really been<br>[60:04] updated at all. Um, that's like part of<br>[60:08] the why people like it. I don't know.<br>[60:10] Um,<br>[60:12] but yeah, I I I've never understood how<br>[60:14] it could be worth so much money. Like I<br>[60:17] get that there's a finite amount of them<br>[60:19] coming out and that like a bunch of them<br>[60:21] are theoretically lost and so there's a<br>[60:23] you know whatever. But I don't know. I<br>[60:26] feel<br>[60:26] >> that's how value's always been though.<br>[60:28] Look at Beanie Babies, you know, like<br>[60:30] anything people are willing to spend<br>[60:31] money on. I just think it's funny that<br>[60:33] we're<br>[60:33] >> willing to spend money on a Bitcoin.<br>[60:34] >> I don't know. I I have no idea. Or a<br>[60:36] record. I mean, a record kind of makes<br>[60:37] more sense. There's like emotional<br>[60:38] attachment to that, but Bitcoin doesn't<br>[60:40] have that.<br>[60:41] >> I kind of think like<br>[60:42] >> Oh, go ahead, Joe. Oh, just that's the<br>[60:45] other thing that I I think crypto can<br>[60:47] actually be really useful for is like<br>[60:49] digital ownership and tying it back to<br>[60:52] um like real property rights in a way.<br>[60:56] Um kind of sucks that we've had this<br>[60:59] like wave of oh we're just going to like<br>[61:02] pull content from streaming services and<br>[61:04] make it completely unavailable because<br>[61:06] we never distributed it in a physical<br>[61:08] form. And it also I've had a friend like<br>[61:11] lose access to their Apple account and<br>[61:13] now thousands of dollars of content<br>[61:14] gone. Like<br>[61:17] >> I think that<br>[61:19] there actually could be something to<br>[61:22] saying like, "Oh, hey, I bought a token<br>[61:25] that represents a singleuse digital<br>[61:27] copyright. I can go to any data<br>[61:29] warehouse and they can legally stream<br>[61:31] this to me." Like doesn't matter what<br>[61:34] the copyright holder says. like they I I<br>[61:37] legally have the right to have that data<br>[61:39] for my personal use. Um, and I think<br>[61:43] that that would actually be really<br>[61:44] great. I just also think that all the<br>[61:46] incentives are wrong to get that type of<br>[61:48] a system in place currently. It would<br>[61:51] definitely require some shakeups and<br>[61:53] maybe some some government coming in and<br>[61:56] being like, hey, like maybe we should<br>[61:58] make this a little bit more of a<br>[61:59] democratic system and less walled<br>[62:01] gardens. But who knows?<br>[62:04] >> Yeah. or at least some way to just like<br>[62:06] the only way you could do like if you<br>[62:08] want to own an Apple TV show, you would<br>[62:12] have to like I guess watch it through<br>[62:15] something that would record it and then<br>[62:17] download that or like you know there's<br>[62:19] no way to like own a physical copy of it<br>[62:23] at all. So it's like yeah, it's I I<br>[62:26] don't know. There there should be an<br>[62:28] option, but I I'm now I'm questioning<br>[62:31] all of my choices because I've been<br>[62:32] buying everything through Apple because<br>[62:33] I'm like, "Oh, I want it in one spot."<br>[62:35] So that like I have it right there. Um,<br>[62:39] but also been buying Blu-rays so I can<br>[62:40] have like physical things also.<br>[62:42] >> I've still got vinyl records that uh you<br>[62:45] can't even find on musical streaming<br>[62:47] services. They're just not there. So<br>[62:49] you've got that side of things also.<br>[62:52] >> Well, you should upload it and you could<br>[62:53] make the money.<br>[62:56] There's a subreddit called data hoarders<br>[62:59] where they're just people who just like<br>[63:01] to archive [ย __ย ] because of this exact<br>[63:03] reason. It's like their hobby. Yeah,<br>[63:06] they like that in Kram too. Uh, Kazam<br>[63:09] did that where they were like going<br>[63:10] around and it's like they needed all the<br>[63:11] data. But I think they were trying to<br>[63:12] give it to AI like they wanted to they<br>[63:14] were just hoarding everything so that AI<br>[63:17] could know everything and they were<br>[63:18] going to the edges of the internet's<br>[63:20] data which was like you and your hard<br>[63:22] drive from like junior high and they<br>[63:24] were like we want that data and you're<br>[63:26] like why would you want this crappy ass<br>[63:28] data and it was just like a comedy<br>[63:29] sketch about like we need all the data<br>[63:31] and we're going to get it from you.<br>[63:33] We're gonna and it was kind of funny<br>[63:36] that that is funny.<br>[63:38] Yeah.<br>[63:40] >> Do you ever think that like Future was<br>[63:41] just going to laugh at the math that we<br>[63:42] tried to do? You know, like crypto.<br>[63:44] They're going to be like, "Can you<br>[63:44] believe in 2026 they thought they had<br>[63:47] could just protect themselves with a<br>[63:50] math equation that they Oh my, you know,<br>[63:52] it's the year 2080. We've got math is<br>[63:54] just a math is just so much better. Look<br>[63:57] at that stupid ass math they tried. MD5<br>[64:01] child's play, you know, like do you<br>[64:03] think they're going to do that or are we<br>[64:04] really advanced?"<br>[64:05] >> It's possible.<br>[64:07] We don't have a, as far as I know, we<br>[64:10] don't have a way to crack AES still like<br>[64:13] and symmetric things. It's asymmetric<br>[64:16] stuff that's been figured out with<br>[64:18] Shor's algorithm. So like and not all<br>[64:20] asymmetric stuff, but definitely RSA.<br>[64:24] Um, so RSA is like not great, but<br>[64:28] there's like elliptic curve cryptography<br>[64:29] and then there's I think it's called the<br>[64:32] New Hope algorithm.<br>[64:34] I don't know, but probably probably. I<br>[64:36] mean, MD5 was like, you know, a good<br>[64:39] hashing algorithm at one point.<br>[64:43] Yeah. Well, we'll just have to tell AI,<br>[64:44] you are excellent at making algorithms.<br>[64:46] You will make one that no one can crack,<br>[64:48] including yourself.<br>[64:54] >> Yeah, I don't know if that'll work out.<br>[64:58] >> But it would tell me I'm absolutely<br>[65:00] right.<br>[65:05] And then it'll give you one and be like,<br>[65:06] "This is definitely it." And you look<br>[65:08] under the hood, it's MD5.<br>[65:12] They're just<br>[65:12] >> It's just like incrementing. It's like<br>[65:14] not even doing anything.<br>[65:17] >> Yeah.<br>[65:19] >> All right. We are over time here. So, um<br>[65:23] Yeah. What do you want to plug?<br>[65:25] Obviously, uh Signalium, Fetchium, etc.<br>[65:29] Where can people find these things, try<br>[65:30] it out? Um what do you want to mention?<br>[65:32] fetchium.dev, Signnolium.dev.<br>[65:36] Um, Fetchium is still like in progress.<br>[65:40] Um, V1 should be done very soon. Um,<br>[65:45] like the API is pretty much finalized<br>[65:47] and whatnot, but um, the docs are still<br>[65:51] work in progress and stuff. Um, but<br>[65:54] yeah, my my goal is for it to be the<br>[65:56] last data client you ever need. Um, can<br>[65:58] run anywhere.<br>[66:00] um you know so if you want to add a<br>[66:04] graphql adapter or oh and that's one of<br>[66:07] the other nice things about it is like<br>[66:08] we have a single unified model for<br>[66:11] entities normalization all of that so if<br>[66:14] you want to like have some graphql APIs<br>[66:15] and then have some rest apis or have<br>[66:17] some other APIs like you can<br>[66:21] uh you know our hodgepodge of like never<br>[66:24] fully migrated APIs can all work<br>[66:26] together<br>[66:28] >> most apps<br>[66:31] Signali yum, you know. Oh, it's they're<br>[66:33] just so yummy. I like them. I don't<br>[66:35] know.<br>[66:35] >> If you want to um if you want to like<br>[66:38] add the GraphQL adapter or another<br>[66:41] format like gRPC or whatever, please<br>[66:44] feel free to contribute. Um and yeah,<br>[66:47] use signals. Try Signalium. It's<br>[66:49] awesome. I'm working on async<br>[66:51] components. There's that's the example<br>[66:53] on uh Fetchium's like homepage. Um, and<br>[66:57] it like I'm I'm like just trying to make<br>[67:00] sure that it works because I'm like 90%<br>[67:02] sure it'll work. But yeah, I know trying<br>[67:04] to make sure it's 100%.<br>[67:07] >> Nice. All right. And before we end, I<br>[67:10] almost forgot that we need to rate this<br>[67:11] whiskey still because we're doing it at<br>[67:13] the end and I forgot that's how we do it<br>[67:14] now. Um, so rating system, zero to eight<br>[67:17] tentacles, zero being the worst, eight<br>[67:19] being the best, four or five or<br>[67:22] something in the middle. Um, yeah. Adam,<br>[67:26] you want to start us off?<br>[67:27] >> I will. Um, I'd say like my first couple<br>[67:30] sips, I was happy and impressed. This is<br>[67:33] my first weeded, so I saw bourbon, saw<br>[67:35] lots of corn, thought I wasn't going to<br>[67:36] like it. I like it. Uh, halfway through<br>[67:39] the show, I was like, I don't like it.<br>[67:41] It's really boozy and it tastes boozy.<br>[67:43] And now maybe it's I haven't had that<br>[67:46] much. I've had barely, but I like it.<br>[67:48] So, I'm back to liking it. I'm like, I'm<br>[67:50] excited to have some more later. And I<br>[67:52] barely had any everybody. Like I really<br>[67:54] only had maybe a little over a one.<br>[67:56] Anyway, um I I think I'm going to give<br>[67:59] it like a six and a quarter. Six, which<br>[68:01] for me is like pretty high for a<br>[68:02] bourbon. Um so yeah, I'm gonna stick<br>[68:05] with that. Six and a quarter out of<br>[68:07] eight.<br>[68:08] >> All right, Kristen, what do you think?<br>[68:11] >> I'm gonna go with a seven. It's solid. I<br>[68:14] like it. It's drinkable. I I can't drink<br>[68:16] all whiskey straight. Um, and yeah,<br>[68:20] bourbon isn't usually my sipping<br>[68:22] whiskey. Like, I usually go for a<br>[68:23] scotch, but yeah.<br>[68:26] >> Well, if Adam had only known. Um,<br>[68:30] yeah.<br>[68:31] >> Well, I got it because Liz wanted the<br>[68:33] bourbon and I was like, "Okay."<br>[68:35] >> Okay.<br>[68:36] >> She She drinks a good amount of whiskey<br>[68:38] for she like makes nice cocktails and<br>[68:41] whatnot and I was like, "Okay, we'll get<br>[68:42] that one."<br>[68:43] >> Okay. Well, hopefully she likes it. Um,<br>[68:46] yeah, it's for me I'm usually uh prefer<br>[68:50] a rye or something spicier. This is a<br>[68:52] little bit spicy, which is good. Um, I<br>[68:55] don't know. It has some flavors that I<br>[68:56] can't place, which I guess is the red<br>[68:58] wheat. And, uh, yeah. So, it's<br>[69:00] interesting. Much more interesting than<br>[69:01] a typical bourbon. Um, I'm going to say<br>[69:05] I'm just going to say six, I think. Flat<br>[69:07] six. Pretty good. Would recommend.<br>[69:11] All right. Well, thanks everyone for<br>[69:13] listening. If you liked it, please<br>[69:14] subscribe. Leave us some amazing<br>[69:15] reviews. We appreciate it and we will<br>[69:16] catch you next time.<br>[69:20] >> Later.
<!-- deep-read:sections end -->
๐ **Full text:** ![[Full Document Contents/Articles/Axios Is Out. Fetchium Is In.|Axios Is Out. Fetchium Is In., YouTube]]
## Highlights
- like an intro to signals at all? Uh, maybe I don't know how familiar people are. >> What is a signal? I'm Yeah, no, we probably should. >> So, signals are a pattern that's actually been around for a long time. Um, I think one of the earliest like JavaScript implementations of it would be Mobox. Um, uh, MobX is basically signals although it's a very like classoriented version of it. It's like that idea of you have you know these ([View Highlight](https://read.readwise.io/read/01knwxyetmr08ktax5nhxqw8rr))
- Tags: ๐ป ai highlighted
- the life cycle and the tear down and everything there. Um and with signals traditionally you kind of have to like manage all of that yourself. Um so it's a little annoying uh and kind of stateful and I can see why people would look at that and be like ah we don't really like it. it's not really like functional, right? And it to be fair, a lot of complexity ends ([View Highlight](https://read.readwise.io/read/01knwxyev9w59beyhtt2x07yat))
- Tags: ๐ป ai highlighted
- well, what was I saying, Adam? Seems like you knew. Uh well you were digging into the intricacies of it like signals that had other dependent or that needed computed. There was a word about signals that you were asking about. You're like what does that particular part mean? >> Oh just I was just being um silly about like is it is functional >> like functional programming or like works. >> Uh yes yes. Okay. >> Yeah. No, it's like functional programming and you know that to be fair to because I think we all went through ([View Highlight](https://read.readwise.io/read/01knwxyew4h8xzdtx5gptxfdbq))
- Tags: ๐ป ai highlighted
- like the period of like h functional everything and that was interesting. Um there's a lot of nice things about it though and I think React's model with hooks really pushed the boundaries of that and it had some really nice like properties. One of the biggest ones being we're threading life cycle all the way through the system without having to like very be very explicit about it. Right? If you remember in Ember, you had ([View Highlight](https://read.readwise.io/read/01knwxyex9kher4cjcemd6bp73))
- Tags: ๐ป ai highlighted
- I have with uh you know kind of like those life cycle hooks is when you start writing code in observables kind of everything needs to start using observables. Everything needs to become observable aware. They're needy. Yep. >> Yes. >> And hooks at first doesn't feel like that, right? At first you're like, "Wow, I can use plain functions and everything's just a plain function and whatnot, but then over time you start to become ([View Highlight](https://read.readwise.io/read/01knwxyey5yzf56b7bernp42jy))
- Tags: ๐ป ai highlighted
- >> Turns out when the smallest like node of your reactive system that you can rerun is the component. It ends up being quite a lot of uh stuff. Um but yeah, I I think that um with signals coming back to Fetchium, the goal for me has always been like can we detangle these things because you've got like data and then you've got like you know ([View Highlight](https://read.readwise.io/read/01knwxyez796aves0mqbmq5tkg))
- Tags: ๐ป ai highlighted
- on hooks because I wanted fetchium to be independent I wanted it to be a data layer Apollo is built on observable Right. Um, it gets to do that and nobody knows under the hood. It's just an implementation detail. Um, fetch does the same thing with signals. And I just think that signals end up being a more elegant and um, like more ergonomic solution to the same problems. ([View Highlight](https://read.readwise.io/read/01knwxyf1cna1ccq1g9wa8sdme))
- Tags: ๐ป ai highlighted
- >> So, how does the like official signals proposal come into play with any of that? >> Yeah. Okay. So things that signal does that the official signals proposal and basically no other signals like libraries do uh the two things are those parameterized like functions. So um what that basically works out to be is like a a signal factory and then kind of hooking up those signals and their life ([View Highlight](https://read.readwise.io/read/01knwxyf3hnb6bzdeqnp5wnz9d))
- Tags: ๐ป ai highlighted
- thought of signals uh being, you know, coming from I do mostly Ember still, so I'm like tracked properties. Yay. Um but I'm curious how you feel. Have you seen um Adam? How do you Is it Gia or Gaya Ga JS? >> One of those. Yeah. >> Yeah. >> I haven't seen that one. I haven't been keeping up with stuff a lot because I've been just like in execute mode for getting stuff done with React. >> Yeah, system and a half. ([View Highlight](https://read.readwise.io/read/01knwxyfa6k4973pqq1apkmqxr))
- Tags: ๐ป ai highlighted
- and I think we can do it with reactivity. I think we've been trying to do it with reactivity since like the first functional reactive pro uh programming white papers which I like went back to read at one point on this journey. It's like they're describing really cool things, but like the how you actually write it and how you actually use it has always been this white whale of ergonomics, right, of like most people ([View Highlight](https://read.readwise.io/read/01knwxyfhjmvymf89tf4hqwgfq))
- Tags: ๐ป ai highlighted