The Importance of Pair Programming with Tuple's Johnny Marler
Read full transcript 27 segments
-
Hi, I'm Scott Hansselman. This is Hi, I'm Scott Hansselman. This is another episode of Hansel Minutes. Today another episode of Hansel Minutes. Today another episode of Hansel Minutes. Today I'm chatting with Johnny Marlor. He's a I'm chatting with Johnny Marlor. He's a I'm chatting with Johnny Marlor. He's a lead Windows developer at Tupil. How are lead Windows developer at Tupil. How are lead Windows developer at Tupil. How are you, sir? you, sir? you, sir? >> I am very doing good. How are you doing? >> I am very doing good. How are you doing? >> I am very doing good. How are you doing? >> Very well. Thanks for hanging out with >> Very well. Thanks for hanging out with >> Very well. Thanks for hanging out with me today. I was checking out Tupil at uh me today. I was checking out Tupil at uh me today. I was checking out Tupil at uh at tupil.app. Tuple.app. at tupil.app. Tuple.app. at tupil.app. Tuple.app. Uh as I always like to install whatever Uh as I always like to install whatever Uh as I always like to install whatever the new hotness is. And one of the the new hotness is. And one of the the new hotness is. And one of the things I think is common for developers things I think is common for developers things I think is common for developers and hopefully it's not a weird thing to and hopefully it's not a weird thing to and hopefully it's not a weird thing to say is I think to myself, what did they say is I think to myself, what did they say is I think to myself, what did they write this in? You know, like I've got write this in? You know, like I've got write this in? You know, like I've got I've installed Claude and I've installed I've installed Claude and I've installed I've installed Claude and I've installed CatchPT and I've installed Copilot and CatchPT and I've installed Copilot and CatchPT and I've installed Copilot and it all feels like everyone's just doing it all feels like everyone's just doing it all feels like everyone's just doing web views. It's just like a web view. web views. It's just like a web view. web views. It's just like a web view. Here's a canvas. I'm going to do some Here's a canvas. I'm going to do some Here's a canvas. I'm going to do some HTML in a box. But Tupil uh is HTML in a box. But Tupil uh is HTML in a box. But Tupil uh is immediately it's like this is native. immediately it's like this is native. immediately it's like this is native. Someone wrote this like driving stick Someone wrote this like driving stick Someone wrote this like driving stick shift. shift. shift. >> Yeah. >> Yeah. >> Yeah. >> Is that is that a good guess? >> Is that is that a good guess? >> Is that is that a good guess? >> Yeah. I know that's that's a good >> Yeah. I know that's that's a good >> Yeah. I know that's that's a good summary. I I guess like normal apps it summary. I I guess like normal apps it summary. I I guess like normal apps it kind of makes sense to use the web kind of makes sense to use the web kind of makes sense to use the web because they contain usually contain a because they contain usually contain a because they contain usually contain a lot of Chrome or UI and Tupil's kind of lot of Chrome or UI and Tupil's kind of lot of Chrome or UI and Tupil's kind of the opposite. We we actually the opposite. We we actually the opposite. We we actually intentionally try to avoid having a lot intentionally try to avoid having a lot intentionally try to avoid having a lot of Chrome or UI in the way of Chrome or UI in the way of Chrome or UI in the way >> kind of hide out.
-
>> kind of hide out. >> kind of hide out. >> Yeah, it's it's it's not about >> Yeah, it's it's it's not about >> Yeah, it's it's it's not about connecting to your computer. It's more connecting to your computer. It's more connecting to your computer. It's more about connecting to other humans. M. about connecting to other humans. M. about connecting to other humans. M. >> And so if you really want to get if >> And so if you really want to get if >> And so if you really want to get if you're optimizing for that, it's you're optimizing for that, it's you're optimizing for that, it's actually more important to get the actually more important to get the actually more important to get the system APIs correct. Like you want to be system APIs correct. Like you want to be system APIs correct. Like you want to be talking directly to your system because talking directly to your system because talking directly to your system because it knows the best way to transfer video it knows the best way to transfer video it knows the best way to transfer video over the network and audio. So that's over the network and audio. So that's over the network and audio. So that's what we're optimizing for. You know, what we're optimizing for. You know, what we're optimizing for. You know, it's it's it's it's a little bit more of it's it's it's it's a little bit more of it's it's it's it's a little bit more of a, you know, different use case than the a, you know, different use case than the a, you know, different use case than the typical app, I would say. typical app, I would say. typical app, I would say. >> Now, Tupal works on Windows 10 and >> Now, Tupal works on Windows 10 and >> Now, Tupal works on Windows 10 and Windows 11, but also works on Mac and Windows 11, but also works on Mac and Windows 11, but also works on Mac and works on both Intel and Apple Silicon. A works on both Intel and Apple Silicon. A works on both Intel and Apple Silicon. A lot of people have abandoned Mac, Intel, lot of people have abandoned Mac, Intel, lot of people have abandoned Mac, Intel, Silicon, like is it all the same Silicon, like is it all the same Silicon, like is it all the same codebase and you just like pound define codebase and you just like pound define codebase and you just like pound define your way to glory? your way to glory? your way to glory? >> Yeah, I wish it did it did start out uh >> Yeah, I wish it did it did start out uh >> Yeah, I wish it did it did start out uh being written specifically for Mac OS. being written specifically for Mac OS. being written specifically for Mac OS. >> And they were they started to before I >> And they were they started to before I >> And they were they started to before I came on port it to Linux. And so at that came on port it to Linux. And so at that came on port it to Linux. And so at that point they started to take some of the point they started to take some of the point they started to take some of the common stuff and make make an engine. So common stuff and make make an engine. So common stuff and make make an engine. So the engine's all C++ which is the common the engine's all C++ which is the common the engine's all C++ which is the common codebase.
-
codebase. codebase. >> Mac OS which I'm not familiar with. I >> Mac OS which I'm not familiar with. I >> Mac OS which I'm not familiar with. I think there there's a lot of Objective C think there there's a lot of Objective C think there there's a lot of Objective C in the Mac OS app and you know there's in the Mac OS app and you know there's in the Mac OS app and you know there's Swift as well sprinkled in there but Swift as well sprinkled in there but Swift as well sprinkled in there but yeah they started um before me adding yeah they started um before me adding yeah they started um before me adding Linux support and they they ended up Linux support and they they ended up Linux support and they they ended up using a flat pack for that um which was using a flat pack for that um which was using a flat pack for that um which was the initial version that is now no the initial version that is now no the initial version that is now no longer supported and we're we're going a longer supported and we're we're going a longer supported and we're we're going a different direction for Linux now but different direction for Linux now but different direction for Linux now but yeah we we pulled all the common parts yeah we we pulled all the common parts yeah we we pulled all the common parts into a C++ engine which uh has been into a C++ engine which uh has been into a C++ engine which uh has been working well. working well. working well. >> Oh okay so interesting. So you as a lead >> Oh okay so interesting. So you as a lead >> Oh okay so interesting. So you as a lead Windows developer consume the kind of Windows developer consume the kind of Windows developer consume the kind of upstream C++ engine, but doesn't that upstream C++ engine, but doesn't that upstream C++ engine, but doesn't that engine at some point though need to call engine at some point though need to call engine at some point though need to call SIS calls? It needs to call Win32 APIs. SIS calls? It needs to call Win32 APIs. SIS calls? It needs to call Win32 APIs. It needs to call Mac APIs. Do you have a It needs to call Mac APIs. Do you have a It needs to call Mac APIs. Do you have a say into how that C++ looks or do you say into how that C++ looks or do you say into how that C++ looks or do you stay on the outside shell on the Windows stay on the outside shell on the Windows stay on the outside shell on the Windows side? side? side? >> That's a good question. So I I would say >> That's a good question. So I I would say >> That's a good question. So I I would say our biggest core piece of piece of our biggest core piece of piece of our biggest core piece of piece of codebase is actually WebRTC. codebase is actually WebRTC. codebase is actually WebRTC. um that's kind of like the backbone that um that's kind of like the backbone that um that's kind of like the backbone that that the engine mostly interacts with.
-
that the engine mostly interacts with. that the engine mostly interacts with. So, WebRTC itself has tons of system So, WebRTC itself has tons of system So, WebRTC itself has tons of system level APIs. Um but when you when you level APIs. Um but when you when you level APIs. Um but when you when you start talking about like your UI or uh start talking about like your UI or uh start talking about like your UI or uh you know the application specific stuff, you know the application specific stuff, you know the application specific stuff, the platform specific stuff now that's the platform specific stuff now that's the platform specific stuff now that's all outside of the engine inside of what all outside of the engine inside of what all outside of the engine inside of what we would call the app layer. we would call the app layer. we would call the app layer. >> So, >> So, >> So, >> so this is a good opportunity to explain >> so this is a good opportunity to explain >> so this is a good opportunity to explain like what Tupil does, right? So, this is like what Tupil does, right? So, this is like what Tupil does, right? So, this is a remote pair programming app. Is this a remote pair programming app. Is this a remote pair programming app. Is this meant for interviews or is this meant meant for interviews or is this meant meant for interviews or is this meant for you and I to pair up on something? for you and I to pair up on something? for you and I to pair up on something? >> Yeah, it's it's meant for programmers >> Yeah, it's it's meant for programmers >> Yeah, it's it's meant for programmers specifically tailored to like make specifically tailored to like make specifically tailored to like make working seamless and easy uh and quick. working seamless and easy uh and quick. working seamless and easy uh and quick. So, like one of the things we found is So, like one of the things we found is So, like one of the things we found is it's sometimes hard to get pairing it's sometimes hard to get pairing it's sometimes hard to get pairing going. Like you got to message somebody, going. Like you got to message somebody, going. Like you got to message somebody, you might have to start a calendar you might have to start a calendar you might have to start a calendar invite. So, with Tupil, it's just one invite. So, with Tupil, it's just one invite. So, with Tupil, it's just one click to call somebody to just get in click to call somebody to just get in click to call somebody to just get in that meeting. And it's for there's that meeting. And it's for there's that meeting. And it's for there's shared control by default. So you don't shared control by default. So you don't shared control by default. So you don't have to like change some sort of setting have to like change some sort of setting have to like change some sort of setting to allow the other person to take over to allow the other person to take over to allow the other person to take over your screen or to to draw on your your screen or to to draw on your your screen or to to draw on your screen. Everything's just enabled by screen. Everything's just enabled by screen. Everything's just enabled by default. And it's just usually one click default. And it's just usually one click default. And it's just usually one click to do almost anything. Um, and Tupil to do almost anything. Um, and Tupil to do almost anything. Um, and Tupil also stays out of your way. So we're also stays out of your way. So we're also stays out of your way. So we're not, you know, putting some sort of not, you know, putting some sort of not, you know, putting some sort of Chrome over that's covering your code.
-
Chrome over that's covering your code. Chrome over that's covering your code. We we by default make webcams small and We we by default make webcams small and We we by default make webcams small and kind of in the corner. So, there's just kind of in the corner. So, there's just kind of in the corner. So, there's just a lot of like little things like that a lot of like little things like that a lot of like little things like that that kind of make Tupal nice that kind of make Tupal nice that kind of make Tupal nice specifically for programmers. Um, along specifically for programmers. Um, along specifically for programmers. Um, along with like all the performance things with like all the performance things with like all the performance things we're doing, the the fact that we're a we're doing, the the fact that we're a we're doing, the the fact that we're a native app, it's not hogging your CPU, native app, it's not hogging your CPU, native app, it's not hogging your CPU, so you you can still compile your code so you you can still compile your code so you you can still compile your code while you're sharing your screen and while you're sharing your screen and while you're sharing your screen and pairing. pairing. pairing. >> Yeah, that's a great point. Like trying >> Yeah, that's a great point. Like trying >> Yeah, that's a great point. Like trying to use Zoom or Teams to pair program to use Zoom or Teams to pair program to use Zoom or Teams to pair program involves like you said a call or an involves like you said a call or an involves like you said a call or an appointment. You do the thing, you share appointment. You do the thing, you share appointment. You do the thing, you share the screen, you throw pixels across the the screen, you throw pixels across the the screen, you throw pixels across the wire like however you choose to do it. wire like however you choose to do it. wire like however you choose to do it. Somebody somebody's at 4K, somebody's at Somebody somebody's at 4K, somebody's at Somebody somebody's at 4K, somebody's at 1080p, and then you have to do the whole 1080p, and then you have to do the whole 1080p, and then you have to do the whole give control. Are you sure you want to give control. Are you sure you want to give control. Are you sure you want to give control? It's a whole dance. And give control? It's a whole dance. And give control? It's a whole dance. And I've when you when you get with someone I've when you when you get with someone I've when you when you get with someone who's a programmer who types really who's a programmer who types really who's a programmer who types really fast, that lag fast, that lag fast, that lag >> as they type and then they wait for it >> as they type and then they wait for it >> as they type and then they wait for it to show up on your, you know, in your to show up on your, you know, in your to show up on your, you know, in your environment in your VS Code is just environment in your VS Code is just environment in your VS Code is just torture. Like as good as Teams and Zoom torture. Like as good as Teams and Zoom torture. Like as good as Teams and Zoom are, there's there's a lag for typing are, there's there's a lag for typing are, there's there's a lag for typing and it's very uncomfortable.
-
and it's very uncomfortable. and it's very uncomfortable. >> That matters a lot to developers. Pretty >> That matters a lot to developers. Pretty >> That matters a lot to developers. Pretty much everybody at Tupil is a developer. much everybody at Tupil is a developer. much everybody at Tupil is a developer. And so these are the sorts of things And so these are the sorts of things And so these are the sorts of things that we really pay attention to that if that we really pay attention to that if that we really pay attention to that if there's any sort of lag and you're there's any sort of lag and you're there's any sort of lag and you're trying to type and code it uh it's not trying to type and code it uh it's not trying to type and code it uh it's not good. So that's something that we good. So that's something that we good. So that's something that we immediately flag and and try to optimize immediately flag and and try to optimize immediately flag and and try to optimize out. out. out. >> That's really interesting because you >> That's really interesting because you >> That's really interesting because you think about like screen sharing as a as think about like screen sharing as a as think about like screen sharing as a as a a muggle, as a regular person. I think a a muggle, as a regular person. I think a a muggle, as a regular person. I think that if I asked my non-technical that if I asked my non-technical that if I asked my non-technical partner, she would say this is just like partner, she would say this is just like partner, she would say this is just like a solved problem. Like screen sharing is a solved problem. Like screen sharing is a solved problem. Like screen sharing is a thing. We just it's it's universal. a thing. We just it's it's universal. a thing. We just it's it's universal. But then you start thinking about things But then you start thinking about things But then you start thinking about things like, you know, Nvidia cloud or Xbox like, you know, Nvidia cloud or Xbox like, you know, Nvidia cloud or Xbox gaming. They're trying to get that down gaming. They're trying to get that down gaming. They're trying to get that down to like nanoseconds, to like nanoseconds, to like nanoseconds, like not milliseconds, but nancond. They like not milliseconds, but nancond. They like not milliseconds, but nancond. They want to make that as as fast as want to make that as as fast as want to make that as as fast as possible. So screen sharing isn't a possible. So screen sharing isn't a possible. So screen sharing isn't a solved problem if you have a a niche you solved problem if you have a a niche you solved problem if you have a a niche you want to fill like this needs to work for want to fill like this needs to work for want to fill like this needs to work for gamers or this needs to work for coders gamers or this needs to work for coders gamers or this needs to work for coders and it sounds like you've optimized for and it sounds like you've optimized for and it sounds like you've optimized for typing in an editor with more than one typing in an editor with more than one typing in an editor with more than one mouse and more than one keyboard.
-
mouse and more than one keyboard. mouse and more than one keyboard. >> Yeah and it's definitely a selfish >> Yeah and it's definitely a selfish >> Yeah and it's definitely a selfish endeavor when you are a programmer and endeavor when you are a programmer and endeavor when you are a programmer and you start writing tools for programmers you start writing tools for programmers you start writing tools for programmers um you the big motivation is because you um you the big motivation is because you um you the big motivation is because you want a better tool. So that that's one want a better tool. So that that's one want a better tool. So that that's one of the big appealing things about Tupal of the big appealing things about Tupal of the big appealing things about Tupal for me is I love writing developer for me is I love writing developer for me is I love writing developer tools, you know, stuff that makes your tools, you know, stuff that makes your tools, you know, stuff that makes your builds easier, um your editor, things builds easier, um your editor, things builds easier, um your editor, things like that. It's it's it's, you know, my like that. It's it's it's, you know, my like that. It's it's it's, you know, my thing. So Tupil is a great fit for me thing. So Tupil is a great fit for me thing. So Tupil is a great fit for me and uh it's yeah, it's it's fun to work and uh it's yeah, it's it's fun to work and uh it's yeah, it's it's fun to work on that sort of thing to make our lives on that sort of thing to make our lives on that sort of thing to make our lives easier. easier. easier. >> Do you think that Windows native Windows >> Do you think that Windows native Windows >> Do you think that Windows native Windows apps, which is something that you have a apps, which is something that you have a apps, which is something that you have a lot of experience in, is a dying art? lot of experience in, is a dying art? lot of experience in, is a dying art? Are there few people that know how to do Are there few people that know how to do Are there few people that know how to do this? Well, this? Well, this? Well, >> yeah. Anytime I've told people uh that >> yeah. Anytime I've told people uh that >> yeah. Anytime I've told people uh that we're doing native Windows, they they we're doing native Windows, they they we're doing native Windows, they they you know, give me their blessing. Like I you know, give me their blessing. Like I you know, give me their blessing. Like I I'm sorry that you have to go through I'm sorry that you have to go through I'm sorry that you have to go through that pain. But I also think I have a bit that pain. But I also think I have a bit that pain. But I also think I have a bit of Stockholm syndrome, right? I've been of Stockholm syndrome, right? I've been of Stockholm syndrome, right? I've been doing Windows for so long, it feels doing Windows for so long, it feels doing Windows for so long, it feels like, you know, that old friend that, like, you know, that old friend that, like, you know, that old friend that, you know, has some some rough edges, but you know, has some some rough edges, but you know, has some some rough edges, but you learn to you learn to love them you learn to you learn to love them you learn to you learn to love them because you understand them and you're because you understand them and you're because you understand them and you're familiar with them. So, I feel like I familiar with them. So, I feel like I familiar with them. So, I feel like I have a a parasocial relationship with have a a parasocial relationship with have a a parasocial relationship with Raymond Chen from from reading so much Raymond Chen from from reading so much Raymond Chen from from reading so much of his writing on the the inner workings of his writing on the the inner workings of his writing on the the inner workings of Windows. And now I get like excited of Windows. And now I get like excited of Windows. And now I get like excited to do something interesting in Windows.
-
to do something interesting in Windows. to do something interesting in Windows. So, you know, one of the features that So, you know, one of the features that So, you know, one of the features that we have like app fail that was when I we have like app fail that was when I we have like app fail that was when I when I first started on Windows, I don't when I first started on Windows, I don't when I first started on Windows, I don't think I would have had any idea on how think I would have had any idea on how think I would have had any idea on how to implement that. But now that I've to implement that. But now that I've to implement that. But now that I've gotten so familiar, um, it's it's just gotten so familiar, um, it's it's just gotten so familiar, um, it's it's just like a fun challenge, you know, a fun like a fun challenge, you know, a fun like a fun challenge, you know, a fun puzzle to solve, and I have all these puzzle to solve, and I have all these puzzle to solve, and I have all these niche tools and and niche tools and and niche tools and and knowledge that that helps me do knowledge that that helps me do knowledge that that helps me do something like that, which is fun. something like that, which is fun. something like that, which is fun. >> So, App Veil that you just brought up is >> So, App Veil that you just brought up is >> So, App Veil that you just brought up is an app that keeps windows that you don't an app that keeps windows that you don't an app that keeps windows that you don't want to be shared from being shared. So, want to be shared from being shared. So, want to be shared from being shared. So, if I go right now and I share my screen if I go right now and I share my screen if I go right now and I share my screen in the web browser that we're talking in in the web browser that we're talking in in the web browser that we're talking in or on Teams or on on Zoom, in the old or on Teams or on on Zoom, in the old or on Teams or on on Zoom, in the old days, it felt like they were basically days, it felt like they were basically days, it felt like they were basically just doing a screenshot, you know, 10 15 just doing a screenshot, you know, 10 15 just doing a screenshot, you know, 10 15 frames a second and then doing all of frames a second and then doing all of frames a second and then doing all of the diff work locally, but there's like the diff work locally, but there's like the diff work locally, but there's like basically screen sharing APIs now, basically screen sharing APIs now, basically screen sharing APIs now, right? like do operating operating right? like do operating operating right? like do operating operating systems have have noticed that people systems have have noticed that people systems have have noticed that people wanted to share their screens that wanted to share their screens that wanted to share their screens that hitting print screen 20 times a second hitting print screen 20 times a second hitting print screen 20 times a second is not scalable and we we we share that.
-
is not scalable and we we we share that. is not scalable and we we we share that. So there is there a screen sharing API So there is there a screen sharing API So there is there a screen sharing API in in Windows? in in Windows? in in Windows? >> Yeah. So I guess a bit of the history >> Yeah. So I guess a bit of the history >> Yeah. So I guess a bit of the history initially started out there's an API initially started out there's an API initially started out there's an API called GDI called GDI called GDI >> and GDI was like a like an abstract nice >> and GDI was like a like an abstract nice >> and GDI was like a like an abstract nice uh high level API for doing graphics and uh high level API for doing graphics and uh high level API for doing graphics and they had a they had a they had a >> graphics device interface. >> graphics device interface. >> graphics device interface. >> Yep. Exactly. And and Tupil actually >> Yep. Exactly. And and Tupil actually >> Yep. Exactly. And and Tupil actually started out mostly using GDI itself. started out mostly using GDI itself. started out mostly using GDI itself. Tupil's development has kind of followed Tupil's development has kind of followed Tupil's development has kind of followed alongside the history of Windows where alongside the history of Windows where alongside the history of Windows where we've moved from the older technologies we've moved from the older technologies we've moved from the older technologies to the newer stuff. So now we're using to the newer stuff. So now we're using to the newer stuff. So now we're using like DirectX, Direct 2D. Um the new like DirectX, Direct 2D. Um the new like DirectX, Direct 2D. Um the new screen capture API. There's there's a screen capture API. There's there's a screen capture API. There's there's a newer one that we haven't fully newer one that we haven't fully newer one that we haven't fully implemented yet, but uh there's a implemented yet, but uh there's a implemented yet, but uh there's a slightly older one which they both share slightly older one which they both share slightly older one which they both share most of the code. We now capture the most of the code. We now capture the most of the code. We now capture the screen from the Windows compositor via screen from the Windows compositor via screen from the Windows compositor via graphics textures, so GPU textures. And graphics textures, so GPU textures. And graphics textures, so GPU textures. And so it's called DXGI, I think, so it's called DXGI, I think, so it's called DXGI, I think, duplication something graphics. I don't duplication something graphics. I don't duplication something graphics. I don't remember the the the term, but yeah, now remember the the the term, but yeah, now remember the the the term, but yeah, now we get back a GPU texture. And uh this we get back a GPU texture. And uh this we get back a GPU texture. And uh this there's there's an interesting story there's there's an interesting story there's there's an interesting story with this too because, with this too because, with this too because, you know, now that AI is is such a big you know, now that AI is is such a big you know, now that AI is is such a big part of of so many people's jobs, I can part of of so many people's jobs, I can part of of so many people's jobs, I can say that because of AI, we actually have say that because of AI, we actually have say that because of AI, we actually have a more efficient screen capture a more efficient screen capture a more efficient screen capture implementation. specifically because implementation. specifically because implementation. specifically because with AI, I was actually able to write a with AI, I was actually able to write a with AI, I was actually able to write a shader that would keep the screen on the shader that would keep the screen on the shader that would keep the screen on the GPU and do the YUV conversion on the GPU and do the YUV conversion on the GPU and do the YUV conversion on the GPU. So, I had to write like a custom GPU. So, I had to write like a custom GPU. So, I had to write like a custom shader for that and that's not something shader for that and that's not something shader for that and that's not something that I'm super familiar with. So,
-
that I'm super familiar with. So, that I'm super familiar with. So, because of AI, I was able to like because of AI, I was able to like because of AI, I was able to like immediately ask it, hey, how would you immediately ask it, hey, how would you immediately ask it, hey, how would you write this shader? And you know, the write this shader? And you know, the write this shader? And you know, the thing that it gave me like kind of thing that it gave me like kind of thing that it gave me like kind of worked like didn't really work that worked like didn't really work that worked like didn't really work that well, but it gave me that starting point well, but it gave me that starting point well, but it gave me that starting point so that I could actually get to the so that I could actually get to the so that I could actually get to the finish line in a reasonable amount of finish line in a reasonable amount of finish line in a reasonable amount of time. And so now all of our users have time. And so now all of our users have time. And so now all of our users have benefited because they're using less CPU benefited because they're using less CPU benefited because they're using less CPU to capture that screen and send it, you to capture that screen and send it, you to capture that screen and send it, you know, eventually get it sent over the know, eventually get it sent over the know, eventually get it sent over the network. network. network. >> Yeah. The rise of screen sharing goes >> Yeah. The rise of screen sharing goes >> Yeah. The rise of screen sharing goes beyond just like Zoom and COVID and beyond just like Zoom and COVID and beyond just like Zoom and COVID and Teams and everyone being remote. It's Teams and everyone being remote. It's Teams and everyone being remote. It's also things like the Xbox Game Bar, like also things like the Xbox Game Bar, like also things like the Xbox Game Bar, like Discord, like Twitch, and people use to Discord, like Twitch, and people use to Discord, like Twitch, and people use to go and call Windows.graphics.capture, go and call Windows.graphics.capture, go and call Windows.graphics.capture, which is effectively like hitting print which is effectively like hitting print which is effectively like hitting print screen really fast. screen really fast. screen really fast. >> And then DirectX, the the the interface >> And then DirectX, the the the interface >> And then DirectX, the the the interface for that most games use. And the DXGI for that most games use. And the DXGI for that most games use. And the DXGI that you keep saying, that DirectX that you keep saying, that DirectX that you keep saying, that DirectX graphics infrastructure graphics infrastructure graphics infrastructure >> basically lets you see how many graphics >> basically lets you see how many graphics >> basically lets you see how many graphics cards there are and how many buffers cards there are and how many buffers cards there are and how many buffers there are and how many display modes there are and how many display modes there are and how many display modes there are and then grab those rendered there are and then grab those rendered there are and then grab those rendered frames out. So it was largely to get frames out. So it was largely to get frames out. So it was largely to get gamers to have high, you know, high gamers to have high, you know, high gamers to have high, you know, high speed graphics capturing things like speed graphics capturing things like speed graphics capturing things like OBS, the open broadcasting studio use OBS, the open broadcasting studio use OBS, the open broadcasting studio use it. So I would guess when you upgrade it it. So I would guess when you upgrade it it. So I would guess when you upgrade it to DXGI you're going to see or you have to DXGI you're going to see or you have to DXGI you're going to see or you have seen huge performance improvements like seen huge performance improvements like seen huge performance improvements like gamer level speed.
-
gamer level speed. gamer level speed. >> Yeah. No, we we and WebRTC because it >> Yeah. No, we we and WebRTC because it >> Yeah. No, we we and WebRTC because it supports uh screen sharing typically in supports uh screen sharing typically in supports uh screen sharing typically in your browser. It has its own your browser. It has its own your browser. It has its own implementation of this stuff and we were implementation of this stuff and we were implementation of this stuff and we were using that initially. Um, but eventually using that initially. Um, but eventually using that initially. Um, but eventually we ended up implementing our own version we ended up implementing our own version we ended up implementing our own version of the DXGI API and just like squeezing of the DXGI API and just like squeezing of the DXGI API and just like squeezing out I think I think we were like out I think I think we were like out I think I think we were like averaging you know 50 60 milliseconds to averaging you know 50 60 milliseconds to averaging you know 50 60 milliseconds to like capture that screen and get it to like capture that screen and get it to like capture that screen and get it to the encoder to send over the network and the encoder to send over the network and the encoder to send over the network and I think we saved like 20 or 25 extra I think we saved like 20 or 25 extra I think we saved like 20 or 25 extra milliseconds by implementing it milliseconds by implementing it milliseconds by implementing it ourselves and like using a threading ourselves and like using a threading ourselves and like using a threading model that made sense with WebRTC. model that made sense with WebRTC. model that made sense with WebRTC. >> So um you know it takes work uh but >> So um you know it takes work uh but >> So um you know it takes work uh but that's that's what we like to do. That's that's that's what we like to do. That's that's that's what we like to do. That's that's the fun part. So app veil v e i l that's the fun part. So app veil v e i l that's the fun part. So app veil v e i l veils puts a veil over you know veils puts a veil over you know veils puts a veil over you know sensitive apps like you might have you sensitive apps like you might have you sensitive apps like you might have you know quickbooks or something and you're know quickbooks or something and you're know quickbooks or something and you're sharing your screen you don't want sharing your screen you don't want sharing your screen you don't want someone to accidentally see your someone to accidentally see your someone to accidentally see your QuickBooks if you're grabbing the pixels QuickBooks if you're grabbing the pixels QuickBooks if you're grabbing the pixels as they get all the way out onto the as they get all the way out onto the as they get all the way out onto the graphics card and you know we're really graphics card and you know we're really graphics card and you know we're really really close to the to the glass of the really close to the to the glass of the really close to the to the glass of the monitor at this point. Uh, how would you monitor at this point. Uh, how would you monitor at this point. Uh, how would you then cover something up that had then cover something up that had then cover something up that had sensitive information like a social sensitive information like a social sensitive information like a social security number or a window that security number or a window that security number or a window that contained sensitive information if it's contained sensitive information if it's contained sensitive information if it's if it's so close to the glass?
-
if it's so close to the glass? if it's so close to the glass? >> Yeah, I I asked the same question like >> Yeah, I I asked the same question like >> Yeah, I I asked the same question like when we first had this we we added this when we first had this we we added this when we first had this we we added this feature to Mac OS and I was just feature to Mac OS and I was just feature to Mac OS and I was just thinking there I have no idea how we're thinking there I have no idea how we're thinking there I have no idea how we're going to do this on Windows, but I did going to do this on Windows, but I did going to do this on Windows, but I did some research and I found out that some research and I found out that some research and I found out that Windows actually has some built-in Windows actually has some built-in Windows actually has some built-in support for this. So they have a concept support for this. So they have a concept support for this. So they have a concept of um I guess you could maybe say secure of um I guess you could maybe say secure of um I guess you could maybe say secure windows or like windows that should not windows or like windows that should not windows or like windows that should not be shown uh when you're capturing your be shown uh when you're capturing your be shown uh when you're capturing your screen. Um and you can you can have two screen. Um and you can you can have two screen. Um and you can you can have two behaviors. You can either have the behaviors. You can either have the behaviors. You can either have the window show up as a black box when it's window show up as a black box when it's window show up as a black box when it's captured by the screen or you can have captured by the screen or you can have captured by the screen or you can have it just completely gone so you can see it just completely gone so you can see it just completely gone so you can see what's behind it. But the problem with what's behind it. But the problem with what's behind it. But the problem with that was only the process that creates that was only the process that creates that was only the process that creates the window is allowed to change that the window is allowed to change that the window is allowed to change that attribute. attribute. attribute. So somebody online on GitHub had some So somebody online on GitHub had some So somebody online on GitHub had some project that I found and what they would project that I found and what they would project that I found and what they would do is they would use the classic DLL do is they would use the classic DLL do is they would use the classic DLL injection. So I I don't know if you're injection. So I I don't know if you're injection. So I I don't know if you're familiar with DL injection, but it's familiar with DL injection, but it's familiar with DL injection, but it's it's super interesting if you ever like it's super interesting if you ever like it's super interesting if you ever like look into it, but there's like there look into it, but there's like there look into it, but there's like there just happens to be like some APIs uh just happens to be like some APIs uh just happens to be like some APIs uh which one is it like create thread which one is it like create thread which one is it like create thread happens to have the same signature as happens to have the same signature as happens to have the same signature as like load library. So like you can like load library. So like you can like load library. So like you can execute this like you can you can load execute this like you can you can load execute this like you can you can load like the the the DL that loads DLS. Um like the the the DL that loads DLS. Um like the the the DL that loads DLS. Um the function off the top of my head it's the function off the top of my head it's the function off the top of my head it's like lo it might be load dl I can't like lo it might be load dl I can't like lo it might be load dl I can't remember or load library remember or load library remember or load library >> there's load library there's load >> there's load library there's load >> there's load library there's load library a load library w depending on library a load library w depending on library a load library w depending on with with with >> and then create thread create remote >> and then create thread create remote >> and then create thread create remote thread thread thread >> create yeah you use a create remote >> create yeah you use a create remote >> create yeah you use a create remote thread and then you you map in a bit of thread and then you you map in a bit of thread and then you you map in a bit of the remote processes memory put the DLL
-
the remote processes memory put the DLL the remote processes memory put the DLL name that you want in that memory and name that you want in that memory and name that you want in that memory and then call load library uh on the remote then call load library uh on the remote then call load library uh on the remote uh process so with all that you can just uh process so with all that you can just uh process so with all that you can just basically inject arbitrary code into the basically inject arbitrary code into the basically inject arbitrary code into the remote process remote process remote process So this was this was the project that I So this was this was the project that I So this was this was the project that I found that did this and this is not how found that did this and this is not how found that did this and this is not how tupal ended up doing it but it was like tupal ended up doing it but it was like tupal ended up doing it but it was like okay so we can we can change these okay so we can we can change these okay so we can we can change these windows in other processes using this windows in other processes using this windows in other processes using this injection method. Um luckily we didn't injection method. Um luckily we didn't injection method. Um luckily we didn't have to do like such a hacky have to do like such a hacky have to do like such a hacky implementation. We ended up using what implementation. We ended up using what implementation. We ended up using what are called Windows hooks. And this also are called Windows hooks. And this also are called Windows hooks. And this also solved the second problem which was once solved the second problem which was once solved the second problem which was once we get that window and we were able to we get that window and we were able to we get that window and we were able to like turn it invisible or turn it black. like turn it invisible or turn it black. like turn it invisible or turn it black. Uh we need a way to be able to have a Uh we need a way to be able to have a Uh we need a way to be able to have a window behind it or alongside of it that window behind it or alongside of it that window behind it or alongside of it that shows it's being veiled. And so what we shows it's being veiled. And so what we shows it's being veiled. And so what we end up doing was since we're hooking end up doing was since we're hooking end up doing was since we're hooking into the window uh we get all the window into the window uh we get all the window into the window uh we get all the window messages for every single window on the messages for every single window on the messages for every single window on the system and we can see okay they're about system and we can see okay they're about system and we can see okay they're about to show a window. Is this a window we to show a window. Is this a window we to show a window. Is this a window we want to veil? Okay, let's set that want to veil? Okay, let's set that want to veil? Okay, let's set that window attribute to make sure it's not window attribute to make sure it's not window attribute to make sure it's not visible in screen capture. So that visible in screen capture. So that visible in screen capture. So that there's basic should be impossible if there's basic should be impossible if there's basic should be impossible if it's if it's correct to ever get a it's if it's correct to ever get a it's if it's correct to ever get a window inside the screen capture um window inside the screen capture um window inside the screen capture um using this method. And our window that using this method. And our window that using this method. And our window that we put behind to show that it's being we put behind to show that it's being we put behind to show that it's being veiled and this also gets captured so veiled and this also gets captured so veiled and this also gets captured so the the remote user knows also that the the remote user knows also that the the remote user knows also that there's a window there being veiled. It there's a window there being veiled. It there's a window there being veiled. It completely stays in sync uh when you completely stays in sync uh when you completely stays in sync uh when you change the size. there's no like lag change the size. there's no like lag change the size. there's no like lag that the the the veil uh border like that the the the veil uh border like that the the the veil uh border like >> right. Yeah. You you would imagine if >> right. Yeah. You you would imagine if >> right. Yeah. You you would imagine if you moved the thing really fast or if
-
you moved the thing really fast or if you moved the thing really fast or if you resize it really fast maybe you'd you resize it really fast maybe you'd you resize it really fast maybe you'd see a peak of something. You're saying see a peak of something. You're saying see a peak of something. You're saying it's not it's literally not possible by it's not it's literally not possible by it's not it's literally not possible by virtue of the way the pipeline works. virtue of the way the pipeline works. virtue of the way the pipeline works. There's not a I'm moving this and then I There's not a I'm moving this and then I There's not a I'm moving this and then I cover it. cover it. cover it. >> Exactly. >> Exactly. >> Exactly. >> It's it's happening in a different >> It's it's happening in a different >> It's it's happening in a different order. And and it's worth calling out order. And and it's worth calling out order. And and it's worth calling out that of course if people are listening that of course if people are listening that of course if people are listening and they're thinking well DLL injection and they're thinking well DLL injection and they're thinking well DLL injection is you know a bad thing. You could do is you know a bad thing. You could do is you know a bad thing. You could do malicious things like steal data. malicious things like steal data. malicious things like steal data. Absolutely you could. But it's also used Absolutely you could. But it's also used Absolutely you could. But it's also used every day for very legitimate reasons every day for very legitimate reasons every day for very legitimate reasons like debugging. Like if you're using a like debugging. Like if you're using a like debugging. Like if you're using a debugger you're using DL injection. The debugger you're using DL injection. The debugger you're using DL injection. The fact that you didn't use that and fact that you didn't use that and fact that you didn't use that and instead went with window hooks is great. instead went with window hooks is great. instead went with window hooks is great. The window hook for things like uh WM The window hook for things like uh WM The window hook for things like uh WM keyboard or WM paint like those are keyboard or WM paint like those are keyboard or WM paint like those are normal window messages. You're basically normal window messages. You're basically normal window messages. You're basically saying, "I want to hear about everything saying, "I want to hear about everything saying, "I want to hear about everything you do so I can get my chance to have you do so I can get my chance to have you do so I can get my chance to have something to be said about it." It something to be said about it." It something to be said about it." It sounds like a very compatible way to do sounds like a very compatible way to do sounds like a very compatible way to do things. things. things. >> Yeah. Yeah. It's it's I think it would >> Yeah. Yeah. It's it's I think it would >> Yeah. Yeah. It's it's I think it would be compatible, you know, back to Windows be compatible, you know, back to Windows be compatible, you know, back to Windows 98, you know, something crazy. So 98, you know, something crazy. So 98, you know, something crazy. So >> So what is the relationship between >> So what is the relationship between >> So what is the relationship between Appail and Tupil though? Like is is Appail and Tupil though? Like is is Appail and Tupil though? Like is is Appail just a thing you wanted to make Appail just a thing you wanted to make Appail just a thing you wanted to make or is Appvail part of Tupil so that if or is Appvail part of Tupil so that if or is Appvail part of Tupil so that if I'm sharing my screen and I'm doing pair I'm sharing my screen and I'm doing pair I'm sharing my screen and I'm doing pair programming, I don't accidentally give programming, I don't accidentally give programming, I don't accidentally give away information that I don't want to away information that I don't want to away information that I don't want to show.
-
show. show. >> Yeah, exactly. It's just a feature uh >> Yeah, exactly. It's just a feature uh >> Yeah, exactly. It's just a feature uh within Tupil. Uh we I've never thought within Tupil. Uh we I've never thought within Tupil. Uh we I've never thought about like making app fail its own about like making app fail its own about like making app fail its own thing, but that that could be a thing. thing, but that that could be a thing. thing, but that that could be a thing. >> Like you could put one suggestion if I >> Like you could put one suggestion if I >> Like you could put one suggestion if I could be so bold is you could put it could be so bold is you could put it could be so bold is you could put it into uh Windows Power Toys. into uh Windows Power Toys. into uh Windows Power Toys. >> Yeah, you totally could, >> Yeah, you totally could, >> Yeah, you totally could, >> right? like call call the Power Toys >> right? like call call the Power Toys >> right? like call call the Power Toys folks, let them know that this would be folks, let them know that this would be folks, let them know that this would be a really cool thing and then everyone a really cool thing and then everyone a really cool thing and then everyone would get to use that and that's kind of would get to use that and that's kind of would get to use that and that's kind of a living advertisement for whatever else a living advertisement for whatever else a living advertisement for whatever else y'all are doing. So, you know, there's y'all are doing. So, you know, there's y'all are doing. So, you know, there's lots of companies that have like their lots of companies that have like their lots of companies that have like their main their main thing and then they have main their main thing and then they have main their main thing and then they have the little CIS internals utilities that the little CIS internals utilities that the little CIS internals utilities that they that they give out to the people. they that they give out to the people. they that they give out to the people. >> Yeah. Yeah. That's not that's something >> Yeah. Yeah. That's not that's something >> Yeah. Yeah. That's not that's something to consider for sure. to consider for sure. to consider for sure. >> Now, was that done in C++ as well or did >> Now, was that done in C++ as well or did >> Now, was that done in C++ as well or did you use something like Zigg or another you use something like Zigg or another you use something like Zigg or another kind of language like Rust that uh can kind of language like Rust that uh can kind of language like Rust that uh can talk to Win32 APIs? talk to Win32 APIs? talk to Win32 APIs? >> Yeah. So that's interesting because um >> Yeah. So that's interesting because um >> Yeah. So that's interesting because um the big a big part of AFL is actually the big a big part of AFL is actually the big a big part of AFL is actually written in Zigg. Um and there's a written in Zigg. Um and there's a written in Zigg. Um and there's a technical reason for that. Um the the technical reason for that. Um the the technical reason for that. Um the the way the way a window hook works is it way the way a window hook works is it way the way a window hook works is it works actually similarly to DL works actually similarly to DL works actually similarly to DL injection. injection. injection. >> Mhm.
-
>> Mhm. >> Mhm. >> You basically make a DL and then that DL >> You basically make a DL and then that DL >> You basically make a DL and then that DL gets loaded through the OS into the gets loaded through the OS into the gets loaded through the OS into the processes that the when the hook needs processes that the when the hook needs processes that the when the hook needs to run. So the DL itself is written in to run. So the DL itself is written in to run. So the DL itself is written in zig and by doing that we don't have to zig and by doing that we don't have to zig and by doing that we don't have to link in uh lib C and I think I think link in uh lib C and I think I think link in uh lib C and I think I think nowadays when you try to link in lib C nowadays when you try to link in lib C nowadays when you try to link in lib C uh adds about like 2 megabytes to the uh adds about like 2 megabytes to the uh adds about like 2 megabytes to the binary. So I think like in the end it binary. So I think like in the end it binary. So I think like in the end it ends up being like a couple hundred ends up being like a couple hundred ends up being like a couple hundred kilobytes and so that's kind of a big kilobytes and so that's kind of a big kilobytes and so that's kind of a big uh percentage in change just by add just uh percentage in change just by add just uh percentage in change just by add just by just by writing it in the C or C++ by just by writing it in the C or C++ by just by writing it in the C or C++ language you have to add two megabytes language you have to add two megabytes language you have to add two megabytes to every single binary. to every single binary. to every single binary. >> Oh wow. So well >> Oh wow. So well >> Oh wow. So well >> that's just unnecessary. You don't want >> that's just unnecessary. You don't want >> that's just unnecessary. You don't want the overhead. the overhead. the overhead. >> Yeah. I mean like most most programs >> Yeah. I mean like most most programs >> Yeah. I mean like most most programs don't use most of what's in lib C it you don't use most of what's in lib C it you don't use most of what's in lib C it you know know know if especially if you're a small program if especially if you're a small program if especially if you're a small program right you're probably using a handful of right you're probably using a handful of right you're probably using a handful of functions. So but you have to take the functions. So but you have to take the functions. So but you have to take the whole entire C library and link it to whole entire C library and link it to whole entire C library and link it to there might be like linker optimiz there might be like linker optimiz there might be like linker optimiz optimizers that can like you know tree optimizers that can like you know tree optimizers that can like you know tree shake the and get it to be smaller.
-
shake the and get it to be smaller. shake the and get it to be smaller. Now, did you tell when you were work Now, did you tell when you were work Now, did you tell when you were work when you worked at Tupil, did you say, when you worked at Tupil, did you say, when you worked at Tupil, did you say, you know, we're doing this in Zigg and you know, we're doing this in Zigg and you know, we're doing this in Zigg and they might say, "That's a weird obscure they might say, "That's a weird obscure they might say, "That's a weird obscure language that's not C. You shouldn't do language that's not C. You shouldn't do language that's not C. You shouldn't do that." Or does leadership just go, "Hey, that." Or does leadership just go, "Hey, that." Or does leadership just go, "Hey, cool. Knock yourself out. I've never cool. Knock yourself out. I've never cool. Knock yourself out. I've never heard of that language. Enjoy." heard of that language. Enjoy." heard of that language. Enjoy." >> It's actually funny because um I do a >> It's actually funny because um I do a >> It's actually funny because um I do a lot of work on GitHub and um I made a lot of work on GitHub and um I made a lot of work on GitHub and um I made a project called Zigg Up, which is one of project called Zigg Up, which is one of project called Zigg Up, which is one of the main version managers for Zigg. And the main version managers for Zigg. And the main version managers for Zigg. And so the um CTO at the time, his name is so the um CTO at the time, his name is so the um CTO at the time, his name is Spencer, starred my project. And I Spencer, starred my project. And I Spencer, starred my project. And I that's how I learned about Tupil is I that's how I learned about Tupil is I that's how I learned about Tupil is I checked out. Oh, it's a C guy's a CTO. checked out. Oh, it's a C guy's a CTO. checked out. Oh, it's a C guy's a CTO. What's what's his company? And I watched What's what's his company? And I watched What's what's his company? And I watched the pitch for Tupal and was immediately the pitch for Tupal and was immediately the pitch for Tupal and was immediately like, oh, this these are my kind of like, oh, this these are my kind of like, oh, this these are my kind of people like they care about performance people like they care about performance people like they care about performance like like okay, let's let me let me see like like okay, let's let me let me see like like okay, let's let me let me see if they're looking for anybody. And and if they're looking for anybody. And and if they're looking for anybody. And and they were looking for a Linux guy. So I they were looking for a Linux guy. So I they were looking for a Linux guy. So I got hired as a Linux guy after that. And got hired as a Linux guy after that. And got hired as a Linux guy after that. And so the the guy knew that I was a Zigg so the the guy knew that I was a Zigg so the the guy knew that I was a Zigg person. And I do I do try to like sneak person. And I do I do try to like sneak person. And I do I do try to like sneak Zigg in where I can. Um, and I think at Zigg in where I can. Um, and I think at Zigg in where I can. Um, and I think at this point, uh, it's it's not like, you this point, uh, it's it's not like, you this point, uh, it's it's not like, you know, it's not mainly written in Zig, know, it's not mainly written in Zig, know, it's not mainly written in Zig, but there's definitely a lot of but there's definitely a lot of but there's definitely a lot of tentacles that Zigg has. A lot of the tentacles that Zigg has. A lot of the tentacles that Zigg has. A lot of the build system is using, uh, cool things build system is using, uh, cool things build system is using, uh, cool things from Zigg and like this DL. And our from Zigg and like this DL. And our from Zigg and like this DL. And our installer is written in Zig because has installer is written in Zig because has installer is written in Zig because has the exact same problem. Our installer is the exact same problem. Our installer is the exact same problem. Our installer is like 12 megabytes. And so adding just like 12 megabytes. And so adding just like 12 megabytes. And so adding just writing it in C, you know, this few writing it in C, you know, this few writing it in C, you know, this few hundred lines program would add make it hundred lines program would add make it hundred lines program would add make it 14 megabytes. So that's like a you know 14 megabytes. So that's like a you know 14 megabytes. So that's like a you know 20% increase in the size just for 20% increase in the size just for 20% increase in the size just for writing it in C. So but I I really enjoy writing it in C. So but I I really enjoy writing it in C. So but I I really enjoy Zigg. I think it's a great language and
-
Zigg. I think it's a great language and Zigg. I think it's a great language and and I want to do more of it. So and I want to do more of it. So and I want to do more of it. So >> two things I want to say. One is just uh >> two things I want to say. One is just uh >> two things I want to say. One is just uh a shout out to like the the Zigg a shout out to like the the Zigg a shout out to like the the Zigg friends. I want to make sure that no one friends. I want to make sure that no one friends. I want to make sure that no one comes for me in the comments because comes for me in the comments because comes for me in the comments because when I say Zig is this weird little you when I say Zig is this weird little you when I say Zig is this weird little you know obscure language. There's all these know obscure language. There's all these know obscure language. There's all these languages like Erlang and Zigg where languages like Erlang and Zigg where languages like Erlang and Zigg where people are doing interesting, delightful people are doing interesting, delightful people are doing interesting, delightful work, but like the dark matter developer work, but like the dark matter developer work, but like the dark matter developer that like is just working at, you know, that like is just working at, you know, that like is just working at, you know, the IT department of like some random the IT department of like some random the IT department of like some random company may not have ever heard of Zig. company may not have ever heard of Zig. company may not have ever heard of Zig. Like if you're not the hacker news Like if you're not the hacker news Like if you're not the hacker news crowd, you've never heard of it. But it crowd, you've never heard of it. But it crowd, you've never heard of it. But it is a zero dependency drop in CC++ is a zero dependency drop in CC++ is a zero dependency drop in CC++ compiler. It does cross compilation out compiler. It does cross compilation out compiler. It does cross compilation out of the box. It's tiny. And I think I of the box. It's tiny. And I think I of the box. It's tiny. And I think I told you when we when we met the first told you when we when we met the first told you when we when we met the first time that like I would have bet time that like I would have bet time that like I would have bet incorrectly like when the Zigg fellas incorrectly like when the Zigg fellas incorrectly like when the Zigg fellas >> Yeah. >> Yeah. >> Yeah. >> had the idea. I was like this kid, God >> had the idea. I was like this kid, God >> had the idea. I was like this kid, God bless him. You know what I mean? I I bless him. You know what I mean? I I bless him. You know what I mean? I I would have and I would have not quote would have and I would have not quote would have and I would have not quote unquote invested time or emotion and I unquote invested time or emotion and I unquote invested time or emotion and I would have said, you know, this is one would have said, you know, this is one would have said, you know, this is one of those hobby things. But gosh darn it, of those hobby things. But gosh darn it, of those hobby things. But gosh darn it, if they haven't built a big old if they haven't built a big old if they haven't built a big old community, you know, it's a it's a community, you know, it's a it's a community, you know, it's a it's a simple language. It's fast as heck.
-
simple language. It's fast as heck. simple language. It's fast as heck. Which brings me to my comment. I thought Which brings me to my comment. I thought Which brings me to my comment. I thought it's funny that you're like, "Yeah, this it's funny that you're like, "Yeah, this it's funny that you're like, "Yeah, this would be two megs and that would be 12." would be two megs and that would be 12." would be two megs and that would be 12." And I'm like, I know websites with And I'm like, I know websites with And I'm like, I know websites with bigger PGs than that. And they're like, bigger PGs than that. And they're like, bigger PGs than that. And they're like, "Okay, shipping that website." Like, "Okay, shipping that website." Like, "Okay, shipping that website." Like, I've go to websites now. You go to like I've go to websites now. You go to like I've go to websites now. You go to like the Verge, you hit F12, and you're like, the Verge, you hit F12, and you're like, the Verge, you hit F12, and you're like, "That's a 25meg website." But you're "That's a 25meg website." But you're "That's a 25meg website." But you're shipping executables that do 10 times shipping executables that do 10 times shipping executables that do 10 times more in half the size. more in half the size. more in half the size. >> Yeah. I just downloaded the uh the >> Yeah. I just downloaded the uh the >> Yeah. I just downloaded the uh the software for this microphone. 500 software for this microphone. 500 software for this microphone. 500 megabyte download to like control the megabyte download to like control the megabyte download to like control the lights. lights. lights. >> 500 megs to have the microphone for the >> 500 megs to have the microphone for the >> 500 megs to have the microphone for the podcast. Thank you for your sacrifice. >> Shout out to Zigg. I need to get some >> Shout out to Zigg. I need to get some Zig folks on the show because like these Zig folks on the show because like these Zig folks on the show because like these are the delightful things that are are the delightful things that are are the delightful things that are happening and what makes open source happening and what makes open source happening and what makes open source happen and the fact that it's so well happen and the fact that it's so well happen and the fact that it's so well compatible with C and C++. It's just a compatible with C and C++. It's just a compatible with C and C++. It's just a you know Rust and Zigg are really doing you know Rust and Zigg are really doing you know Rust and Zigg are really doing interesting things right now I think in interesting things right now I think in interesting things right now I think in the in the space. Yeah, I I just did a the in the space. Yeah, I I just did a the in the space. Yeah, I I just did a podcast with um and hook I I hooked up podcast with um and hook I I hooked up podcast with um and hook I I hooked up the last guy did a podcast with Loris.
-
the last guy did a podcast with Loris. the last guy did a podcast with Loris. So Loris is the VP community of Zigg, so So Loris is the VP community of Zigg, so So Loris is the VP community of Zigg, so I can totally um uh hook you guys up. I can totally um uh hook you guys up. I can totally um uh hook you guys up. >> Yeah, that'd be fun. So writing native >> Yeah, that'd be fun. So writing native >> Yeah, that'd be fun. So writing native Windows apps, it's 2025, you banged it Windows apps, it's 2025, you banged it Windows apps, it's 2025, you banged it out in C++ with a little bit of Zigg. out in C++ with a little bit of Zigg. out in C++ with a little bit of Zigg. It's a dying art, but you're getting It's a dying art, but you're getting It's a dying art, but you're getting things down into the milliseconds now. things down into the milliseconds now. things down into the milliseconds now. How do you even debug that? like how do How do you even debug that? like how do How do you even debug that? like how do you squeeze out 20 milliseconds? Uh are you squeeze out 20 milliseconds? Uh are you squeeze out 20 milliseconds? Uh are you unit testing? Are you do you have an you unit testing? Are you do you have an you unit testing? Are you do you have an automated testing suite at the higher automated testing suite at the higher automated testing suite at the higher level? Like where do you where did you level? Like where do you where did you level? Like where do you where did you find those milliseconds? find those milliseconds? find those milliseconds? >> I I think I'm going to give you an >> I I think I'm going to give you an >> I I think I'm going to give you an answer you may not expect. I So I'm a answer you may not expect. I So I'm a answer you may not expect. I So I'm a big fan of uh like the handmade big fan of uh like the handmade big fan of uh like the handmade community. I don't some people may have community. I don't some people may have community. I don't some people may have heard of this but it's uh Casey heard of this but it's uh Casey heard of this but it's uh Casey Murritori kind of inspired by his stream Murritori kind of inspired by his stream Murritori kind of inspired by his stream and he gives a really good talk on this and he gives a really good talk on this and he gives a really good talk on this subject and to summarize it he just says subject and to summarize it he just says subject and to summarize it he just says basically basically basically write code that doesn't suck like write write code that doesn't suck like write write code that doesn't suck like write code that's code that's code that's I mean that's basically the gist of what I mean that's basically the gist of what I mean that's basically the gist of what he's saying but like if good is what he's saying but like if good is what he's saying but like if good is what you're saying you're saying you're saying >> it's a skill issue maybe but >> it's a skill issue maybe but >> it's a skill issue maybe but >> it's a skill issue I'm saying that as >> it's a skill issue I'm saying that as >> it's a skill issue I'm saying that as someone who's like losing to Silk Song someone who's like losing to Silk Song someone who's like losing to Silk Song right now and everyone on the line is right now and everyone on the line is right now and everyone on the line is like get good.
-
like get good. like get good. >> Exactly. Right. >> Exactly. Right. >> Exactly. Right. >> But I I'll tell you I have I do have a >> But I I'll tell you I have I do have a >> But I I'll tell you I have I do have a really good profiler. It's called Super really good profiler. It's called Super really good profiler. It's called Super Luminal. Um it's just you just install Luminal. Um it's just you just install Luminal. Um it's just you just install it and with any program you can just run it and with any program you can just run it and with any program you can just run it. It gives you like symbols full it. It gives you like symbols full it. It gives you like symbols full profile of everything. It's amazing. profile of everything. It's amazing. profile of everything. It's amazing. I've only had to use it a handful of I've only had to use it a handful of I've only had to use it a handful of times. Um, and it's usually just to like times. Um, and it's usually just to like times. Um, and it's usually just to like find out um, okay, is this like are we find out um, okay, is this like are we find out um, okay, is this like are we gonna be better off using this GDI thing gonna be better off using this GDI thing gonna be better off using this GDI thing or this DirectX thing or something like or this DirectX thing or something like or this DirectX thing or something like really high level like what's the right really high level like what's the right really high level like what's the right approach to doing this or like should we approach to doing this or like should we approach to doing this or like should we should we be caching this sort of should we be caching this sort of should we be caching this sort of objects? But like I said, I've only used objects? But like I said, I've only used objects? But like I said, I've only used it a handful of times. In general it a handful of times. In general it a handful of times. In general though, you know, after you've been though, you know, after you've been though, you know, after you've been programming for for, you know, 15 years, programming for for, you know, 15 years, programming for for, you know, 15 years, as as much programming as I've done in as as much programming as I've done in as as much programming as I've done in that time as well, you just kind of like that time as well, you just kind of like that time as well, you just kind of like learn like these are the things that you learn like these are the things that you learn like these are the things that you should do, these are the things that you should do, these are the things that you should do, these are the things that you shouldn't do. And now it's just you shouldn't do. And now it's just you shouldn't do. And now it's just you don't really have to spend a lot of time don't really have to spend a lot of time don't really have to spend a lot of time thinking about performance if you just thinking about performance if you just thinking about performance if you just write code a certain way. I guess write code a certain way. I guess write code a certain way. I guess >> interesting. >> interesting. >> interesting. >> You do have to learn, you know, there's >> You do have to learn, you know, there's >> You do have to learn, you know, there's a lot. a lot. a lot. >> So just for for context, Casey Murritori >> So just for for context, Casey Murritori >> So just for for context, Casey Murritori uh had a project called Handmade Hero.
-
uh had a project called Handmade Hero. uh had a project called Handmade Hero. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. >> And the idea was, you know, this daily >> And the idea was, you know, this daily >> And the idea was, you know, this daily source code archives and you can still source code archives and you can still source code archives and you can still buy these if you go to buy these if you go to buy these if you go to computerenhance.com or mollyrocket.com, computerenhance.com or mollyrocket.com, computerenhance.com or mollyrocket.com, but the idea was write a thing from but the idea was write a thing from but the idea was write a thing from scratch. Like I I've talked about this scratch. Like I I've talked about this scratch. Like I I've talked about this on the podcast before, the idea of learn on the podcast before, the idea of learn on the podcast before, the idea of learn to drive stick shift, you know, and it's to drive stick shift, you know, and it's to drive stick shift, you know, and it's a little bit I would argue it's a little a little bit I would argue it's a little a little bit I would argue it's a little gatekeepy because like we're at a time gatekeepy because like we're at a time gatekeepy because like we're at a time now where you could build a Call of Duty now where you could build a Call of Duty now where you could build a Call of Duty clone in Unity and like, you know, hello clone in Unity and like, you know, hello clone in Unity and like, you know, hello world is I'm already walking around in a world is I'm already walking around in a world is I'm already walking around in a 3D world. So, like in a moment where we 3D world. So, like in a moment where we 3D world. So, like in a moment where we have like Uber where you're just like, have like Uber where you're just like, have like Uber where you're just like, "Yeah, a guy just picked me up and drove "Yeah, a guy just picked me up and drove "Yeah, a guy just picked me up and drove me over there." Other people are like, me over there." Other people are like, me over there." Other people are like, "I'm going to do it in Pico8 and I'm "I'm going to do it in Pico8 and I'm "I'm going to do it in Pico8 and I'm going to do it in 4K and like I'm going going to do it in 4K and like I'm going going to do it in 4K and like I'm going to make a 3D engine from scratch and I'm to make a 3D engine from scratch and I'm to make a 3D engine from scratch and I'm going to read the Doom source code." going to read the Doom source code." going to read the Doom source code." It's it's very interesting to see who is It's it's very interesting to see who is It's it's very interesting to see who is choosing to use these tools and go that choosing to use these tools and go that choosing to use these tools and go that way and who is choosing to do it from way and who is choosing to do it from way and who is choosing to do it from scratch. And I think there's value in scratch. And I think there's value in scratch. And I think there's value in both depending on what you're trying to both depending on what you're trying to both depending on what you're trying to accomplish. accomplish. accomplish. >> Oh, for sure. For sure. Yeah. you uh >> Oh, for sure. For sure. Yeah. you uh >> Oh, for sure. For sure. Yeah. you uh this is definitely the approach where this is definitely the approach where this is definitely the approach where you're making like like like I said like you're making like like like I said like you're making like like like I said like tupil right it's for developers we we tupil right it's for developers we we tupil right it's for developers we we care about this stuff care about this stuff care about this stuff >> and it's funny you mentioned the the >> and it's funny you mentioned the the >> and it's funny you mentioned the the Doom stuff uh Casey Muratori also Doom stuff uh Casey Muratori also Doom stuff uh Casey Muratori also speaking of since you're from Microsoft speaking of since you're from Microsoft speaking of since you're from Microsoft did you ever uh follow the like did you ever uh follow the like did you ever uh follow the like controversy that happened with him and controversy that happened with him and controversy that happened with him and the Windows terminal the Windows terminal the Windows terminal >> oh was he the guy who was salty and he >> oh was he the guy who was salty and he >> oh was he the guy who was salty and he did the whole back and forth with the did the whole back and forth with the did the whole back and forth with the terminal people and they said such and terminal people and they said such and terminal people and they said such and such a thing is not possible and he's such a thing is not possible and he's such a thing is not possible and he's like yeah it is and then he went off and
-
like yeah it is and then he went off and like yeah it is and then he went off and did it and then they had a little back did it and then they had a little back did it and then they had a little back and forth. and forth. and forth. >> Yeah. Yeah. >> Yeah. Yeah. >> Yeah. Yeah. >> Yeah. I remember that. I didn't >> Yeah. I remember that. I didn't >> Yeah. I remember that. I didn't recognize that that was the same person. recognize that that was the same person. recognize that that was the same person. I probably would have handled that with I probably would have handled that with I probably would have handled that with a different tone of voice a different tone of voice a different tone of voice >> but that is that is an interesting thing >> but that is that is an interesting thing >> but that is that is an interesting thing when it's always fun when you're doing when it's always fun when you're doing when it's always fun when you're doing open source to say I don't think this is open source to say I don't think this is open source to say I don't think this is possible and then that's called nerd possible and then that's called nerd possible and then that's called nerd sniping. Have you ever been nerd sniped? sniping. Have you ever been nerd sniped? sniping. Have you ever been nerd sniped? Oh, I all I that I'm fall victim to that Oh, I all I that I'm fall victim to that Oh, I all I that I'm fall victim to that all the time. all the time. all the time. >> Right. So, nerd sniping is when you tell >> Right. So, nerd sniping is when you tell >> Right. So, nerd sniping is when you tell a programmer something is not possible. a programmer something is not possible. a programmer something is not possible. >> Yeah. >> Yeah. >> Yeah. >> And then they can't function and they >> And then they can't function and they >> And then they can't function and they stop everything and they go off and they stop everything and they go off and they stop everything and they go off and they go, I must quit my job and solve go, I must quit my job and solve go, I must quit my job and solve problem. Right. So, you got nerd sniped problem. Right. So, you got nerd sniped problem. Right. So, you got nerd sniped when someone told you to make appvail when someone told you to make appvail when someone told you to make appvail and then you went and did it. And uh and then you went and did it. And uh and then you went and did it. And uh Yeah. I didn't realize that that was the Yeah. I didn't realize that that was the Yeah. I didn't realize that that was the same person. same person. same person. >> Yeah. Yeah. In fact, I took his source >> Yeah. Yeah. In fact, I took his source >> Yeah. Yeah. In fact, I took his source code. He wrote a terminal and and code. He wrote a terminal and and code. He wrote a terminal and and published it. And um I don't know if published it. And um I don't know if published it. And um I don't know if you're familiar with Ghosty and Mitchell you're familiar with Ghosty and Mitchell you're familiar with Ghosty and Mitchell Hashimoto's project. Hashimoto's project. Hashimoto's project. >> Um so I contributed a uh a Windows port >> Um so I contributed a uh a Windows port >> Um so I contributed a uh a Windows port to Ghosty to Ghosty to Ghosty >> and that's very generous of you.
-
>> and that's very generous of you. >> and that's very generous of you. >> I have the Stockholm syndrome with >> I have the Stockholm syndrome with >> I have the Stockholm syndrome with Windows and now I like find it fun to Windows and now I like find it fun to Windows and now I like find it fun to like add Windows support. I I just got like add Windows support. I I just got like add Windows support. I I just got um a native wind32 back end merged into um a native wind32 back end merged into um a native wind32 back end merged into ray for example too as well. Um, but ray for example too as well. Um, but ray for example too as well. Um, but yeah, for some reason yeah, for some reason yeah, for some reason >> Windows Windows gets a bad name. Like I >> Windows Windows gets a bad name. Like I >> Windows Windows gets a bad name. Like I like Windows. Like I'm like Windows. Like I'm like Windows. Like I'm non-denominational. I've got a Mac non-denominational. I've got a Mac non-denominational. I've got a Mac sitting like right here that's updating. sitting like right here that's updating. sitting like right here that's updating. I've got I use WSL. I do all of my I've got I use WSL. I do all of my I've got I use WSL. I do all of my development for websites in containers development for websites in containers development for websites in containers in WSL. But I I literally enjoy Windows. in WSL. But I I literally enjoy Windows. in WSL. But I I literally enjoy Windows. I don't have Stockholm Central. I enjoy I don't have Stockholm Central. I enjoy I don't have Stockholm Central. I enjoy it. it. it. >> So I kind of reject that that phrasing. >> So I kind of reject that that phrasing. >> So I kind of reject that that phrasing. >> I I have definitely come to appreciate >> I I have definitely come to appreciate >> I I have definitely come to appreciate the design of Windows. I'm I I'm very the design of Windows. I'm I I'm very the design of Windows. I'm I I'm very impressed with the the whole way that impressed with the the whole way that impressed with the the whole way that the windowing system works, the the windowing system works, the the windowing system works, the messaging system. Um I think like I've messaging system. Um I think like I've messaging system. Um I think like I've heard the term thrown around like actor heard the term thrown around like actor heard the term thrown around like actor pattern, pattern, pattern, >> but um >> but um >> but um >> like I said, I think it's just Stockholm >> like I said, I think it's just Stockholm >> like I said, I think it's just Stockholm syndrome, but maybe it's actually syndrome, but maybe it's actually syndrome, but maybe it's actually legitimately good. But but at first it legitimately good. But but at first it legitimately good. But but at first it seems like overly complicated, but when seems like overly complicated, but when seems like overly complicated, but when you realize all the benefits of it, the you realize all the benefits of it, the you realize all the benefits of it, the way they did the windowing system, I way they did the windowing system, I way they did the windowing system, I think is is probably, you know, genius think is is probably, you know, genius think is is probably, you know, genius and probably and probably and probably >> well, I think one of the things that >> well, I think one of the things that >> well, I think one of the things that Windows doesn't get credit for, and I Windows doesn't get credit for, and I Windows doesn't get credit for, and I would also shout out to Tupil for would also shout out to Tupil for would also shout out to Tupil for working like on older versions of working like on older versions of working like on older versions of Windows, is we don't get credit for Windows, is we don't get credit for Windows, is we don't get credit for compatibility. Like I've like my compatibility. Like I've like my compatibility. Like I've like my favorite laptop is an ARM laptop and I favorite laptop is an ARM laptop and I favorite laptop is an ARM laptop and I can run x64. I can run x86. I it the can run x64. I can run x86. I it the can run x64. I can run x86. I it the thing like no one I did not notice when
-
thing like no one I did not notice when thing like no one I did not notice when I moved to ARM other than it got cooler I moved to ARM other than it got cooler I moved to ARM other than it got cooler and the battery life got more. And on my and the battery life got more. And on my and the battery life got more. And on my x64 machine that I'm on right now, if I x64 machine that I'm on right now, if I x64 machine that I'm on right now, if I want to run like dosbox X and I want to want to run like dosbox X and I want to want to run like dosbox X and I want to run VyCalc from 1977, it still runs. But run VyCalc from 1977, it still runs. But run VyCalc from 1977, it still runs. But I've got a Mac that's a Mac Pro I've got a Mac that's a Mac Pro I've got a Mac that's a Mac Pro >> and I tried to upgrade it to a Mac 26 >> and I tried to upgrade it to a Mac 26 >> and I tried to upgrade it to a Mac 26 and it was like, "Nope, sorry bud. and it was like, "Nope, sorry bud. and it was like, "Nope, sorry bud. >> You're on >> You're on >> You're on >> I love for the rest of your life." >> I love for the rest of your life." >> I love for the rest of your life." >> You can take a binary that was compiled >> You can take a binary that was compiled >> You can take a binary that was compiled in the early 90s and run it on modern in the early 90s and run it on modern in the early 90s and run it on modern Windows. Like exactly Windows. Like exactly Windows. Like exactly >> that's insane. There's an entire like >> that's insane. There's an entire like >> that's insane. There's an entire like application compatibility layer. Talk application compatibility layer. Talk application compatibility layer. Talk about DNL inject DL injection where about DNL inject DL injection where about DNL inject DL injection where Windows notices you're trying to call Windows notices you're trying to call Windows notices you're trying to call old APIs and like you can still run old APIs and like you can still run old APIs and like you can still run Microsoft money 95 and it'll be like oh Microsoft money 95 and it'll be like oh Microsoft money 95 and it'll be like oh he's going to call that I'm going to he's going to call that I'm going to he's going to call that I'm going to redirect him over there and it will redirect him over there and it will redirect him over there and it will work. So like shout out to app compat work. So like shout out to app compat work. So like shout out to app compat people for making that happen. people for making that happen. people for making that happen. >> Yeah, that's that's definitely one big >> Yeah, that's that's definitely one big >> Yeah, that's that's definitely one big benefit that Windows and other platforms benefit that Windows and other platforms benefit that Windows and other platforms are suffering because they don't have are suffering because they don't have are suffering because they don't have that compatibility. I think that could that compatibility. I think that could that compatibility. I think that could be a big reason why, you know, Linux be a big reason why, you know, Linux be a big reason why, you know, Linux never has has such a struggle like never has has such a struggle like never has has such a struggle like taking up more of the market because taking up more of the market because taking up more of the market because they don't have that backward they don't have that backward they don't have that backward compatibility. Lionus himself, Lionus compatibility. Lionus himself, Lionus compatibility. Lionus himself, Lionus Torvalds, he makes a scuba software and Torvalds, he makes a scuba software and Torvalds, he makes a scuba software and he does not distribute binaries for he does not distribute binaries for he does not distribute binaries for Linux. He distributes binaries for Linux. He distributes binaries for Linux. He distributes binaries for Windows and Mac OS because it's too damn Windows and Mac OS because it's too damn Windows and Mac OS because it's too damn hard.
-
hard. hard. >> Well, look, look at how games work. Like >> Well, look, look at how games work. Like >> Well, look, look at how games work. Like I'm I'm I'm gesturing to my right where I'm I'm I'm gesturing to my right where I'm I'm I'm gesturing to my right where my Steam Deck is. And the geniuses that my Steam Deck is. And the geniuses that my Steam Deck is. And the geniuses that work on things like Proton to make like work on things like Proton to make like work on things like Proton to make like most of the games that are running on most of the games that are running on most of the games that are running on Steam Deck, which is Linux, are compiled Steam Deck, which is Linux, are compiled Steam Deck, which is Linux, are compiled for Windows. And there's that legendary for Windows. And there's that legendary for Windows. And there's that legendary blog post that says that the only blog post that says that the only blog post that says that the only reliable Linux API is the Windows reliable Linux API is the Windows reliable Linux API is the Windows AI. Right? If you want your app to run AI. Right? If you want your app to run AI. Right? If you want your app to run great on Linux, write it to the Windows great on Linux, write it to the Windows great on Linux, write it to the Windows API. Which like wind32 is forever. God API. Which like wind32 is forever. God API. Which like wind32 is forever. God help us. Gosh, that's that's hilarious. help us. Gosh, that's that's hilarious. help us. Gosh, that's that's hilarious. And we've thought about too, like, hey, And we've thought about too, like, hey, And we've thought about too, like, hey, uh, we should work on Linux again. Can uh, we should work on Linux again. Can uh, we should work on Linux again. Can we just take the Windows app and run it we just take the Windows app and run it we just take the Windows app and run it on Linux? Maybe that's how we on Linux? Maybe that's how we on Linux? Maybe that's how we >> maybe, right? Like there's a lot of cool >> maybe, right? Like there's a lot of cool >> maybe, right? Like there's a lot of cool stuff going on. stuff going on. stuff going on. >> Yeah, I think we need to change a couple >> Yeah, I think we need to change a couple >> Yeah, I think we need to change a couple more things in the app. Um, but yeah, more things in the app. Um, but yeah, more things in the app. Um, but yeah, that that potentially like I'm kind of that that potentially like I'm kind of that that potentially like I'm kind of half joking about that. So, half joking about that. So, half joking about that. So, >> yeah. Well, well, people can find Tupal >> yeah. Well, well, people can find Tupal >> yeah. Well, well, people can find Tupal at tuple.app at tuple.app at tuple.app on online. Where can they find you? on online. Where can they find you? on online. Where can they find you? Presumably on GitHub. Yeah, my I have Presumably on GitHub. Yeah, my I have Presumably on GitHub. Yeah, my I have like a four-letter, but it's Marlor 8997 like a four-letter, but it's Marlor 8997 like a four-letter, but it's Marlor 8997 is my username on GitHub. Um, and other is my username on GitHub. Um, and other is my username on GitHub. Um, and other other various places.
-
other various places. other various places. >> Yeah, if you just put in Marlor 8997, >> Yeah, if you just put in Marlor 8997, >> Yeah, if you just put in Marlor 8997, you go immediately to Johnny's World on you go immediately to Johnny's World on you go immediately to Johnny's World on GitHub where you can go and see ZigUp GitHub where you can go and see ZigUp GitHub where you can go and see ZigUp and Anyzig and all the fun stuff that and Anyzig and all the fun stuff that and Anyzig and all the fun stuff that you're working. That is a very green you're working. That is a very green you're working. That is a very green GitHub graph. You should be very proud GitHub graph. You should be very proud GitHub graph. You should be very proud of your work. of your work. of your work. >> Oh, thank you. >> Oh, thank you. >> Oh, thank you. >> Are you Googling yourself right now? >> Are you Googling yourself right now? >> Are you Googling yourself right now? This is great to end on. I'm going to This is great to end on. I'm going to This is great to end on. I'm going to end the podcast on Johnny is googling end the podcast on Johnny is googling end the podcast on Johnny is googling himself just to confirm that he can find himself just to confirm that he can find himself just to confirm that he can find his stuff. his stuff. his stuff. >> I can. Yeah. >> I can. Yeah. >> I can. Yeah. >> Fantastic. Well, thanks so much for >> Fantastic. Well, thanks so much for >> Fantastic. Well, thanks so much for spending time with me today. spending time with me today. spending time with me today. This has been another episode of Hansel This has been another episode of Hansel This has been another episode of Hansel Minutes and we'll see you again next Minutes and we'll see you again next Minutes and we'll see you again next week.
Summary
The discussion centers on the native development of the Tuple app, contrasting it with typical web view-based applications. Key subjects include system APIs, direct interaction with the OS for optimal performance in video and audio transfer, and the challenges of maintaining a unified codebase across Windows and Mac. The takeaway is that for applications requiring deep system integration and peak performance, native development utilizing system APIs is crucial, rather than relying on generic web views.