011 — Transmits Goes Mobile
Hey. How's it going? This is Ryan Hefner, and this is the All Play podcast. So once again, recording this from Transmits, the app that I'm working on. Last episode was the first recording, well, actually, the second recording ever made in the app, and that was done via the desktop.
Ryan:I then started to test it out and tried to see, you know, like, whether that would, that same code would work in mobile Safari, when the app was added to the home screen. And sure enough, in classic fashion, it did not. It turns out that the file system API is slightly different, at least in, Safari at the moment. So it only allows you to use a file system. Was it?
Ryan:File system sync access handler, and, essentially, that that runs synchronously, but it can only be ran within the, scope of a web worker. So I went down the road of it's actually surprising. This is the first time I've actually set up a a web worker. I've done some service worker stuff, in the past. But but, actually, it was it was pretty straightforward.
Ryan:Got the web worker working, tried to basically keep as much of the code that I needed and really just, like, partition out the the part that was required for writing files to the, OPFS, and got it working. So transmits now works in mobile Safari, and I also tested it in Chrome on Android. And things seem to be working pretty good. Actually, I do have one of these, like I think it's called the BOOX Palma. It's one of the e ink kinda mobile phone looking things, and it does not work in the, like, default browser that's installed on that.
Ryan:But, I installed Chrome on it, and it seemed to work fine. So I don't think too many people are gonna be using these one off browsers with transmits, or at least I'm not gonna worry about right now. But, you know, the 2 the 2 use cases of basically adding it to the home screen on iOS and then it to the home screen on Chrome or on Android, via Chrome seems to be working well. Yeah. So that's working.
Ryan:Actually, like, looking back over the last couple of weeks, I've started tracking my time on transmits. And so far, I'm, like, at about 19 hours that I've logged since, I guess, June 20th. So over the last month, I've put in about 19 hours. I'd say most of that was probably just, like, researching and playing around. I guess and then also if you start breaking that down, that's like, well, like, basically, like, 2 days change spread out over the course of a month.
Ryan:So, unfortunately, my the time that I've been able to devote to transmits hasn't been that much, but I feel like I'm making some okay progress. Actually, last week, the family, you know, me and the the kids and the family, went to the Finger Lakes for a little vacation, which was cool. And then we also happened to hit up Niagara Falls on our way back, out of Buffalo for our flight. That was pretty cool. But, yeah, that week did not result in too much getting done.
Ryan:So then, over the weekend, I basically got into the whole iOS code and, figured figured all that stuff out, which is also the reason why I I missed the episode last week. So I was kinda making up for it this week. Yeah. What else to talk about? I mean, things are going right now.
Ryan:The next thing that I wanna get kinda shimmed into the app is the whole, I wanna do, basically, you know, audio to, or speech to text transcription in the app. And so there is a WASM package that uses the open a p open AI Whisper model, and you can run that in the app locally. And so that's gonna be the next kinda little spike that I'm working on. Assuming that goes well, then next step would probably just be kinda cleaning some stuff up and also adding some additional kind of, like, organization stuff to the a p or to the interface. Right now, it just kind of has, like, default names for all the recordings and captures very little metadata, when a recording is captured.
Ryan:Not to say that needs this for the for that this needs to be blown out with a lot of extra information, but but, yeah, it's a little light right now, and there's definitely some placeholder components that, you know, aren't what the final thing is gonna be. But it's working, and, yeah, and things are going. So, hopefully, I get the WASM stuff, the the whisper WASM stuff in, and we can see how that goes. That's really the next thing. And then who knows?
Ryan:Maybe I'll start getting this out into people's hands and just let them check that out. But that's next on the on the road map. Trying to hit off like, take off all these, kind of the main technical things that I wanna at least have as, like, core parts of the app right now. I'm still kind of background churning on the whole data model and what gets synced to, you know, to, like, a central server when and and all that. But, I actually am leaning on the idea that transmits will probably just be freely accessible, for at least, like, local local recording.
Ryan:And, they say, look local use of the app until you actually wanna start, syncing across devices or or posting ups, recordings for access via, embedded pages or whatever. But that's the goal right now. So I'm I'm gonna focus on the client stuff first, making sure the recording and data is all being captured properly, still just writing it to the local file system. And then once I get that, I'll working with the transcriptions as an additional file that's saved alongside the, metadata and the actual recording. Then I'm gonna work on the data sync and all that stuff.
Ryan:So there'll be a bunch of bunch of changes there. And, and sure enough, as I keep working on all this stuff, there's just more and more potential opportunities for open source software that I am noting and kind of roughing in, to this initial version, but I'll probably end up breaking it out into, packages and and publishing those soon. I think I made reference to a file system API, package last week that with the whole web worker thing that my thoughts on that have kind of shifted a bit. And I'm still thinking through what's the best, like, ergonomic way to package that up and allow and allow for the web worker and the other the other code to work, you know, side by side and and be accessible via, like, an NPM package. It also started to make me think, I I'm probably gonna do a little bit of, like, baseline benchmarking once all this stuff is together and see if more of the file system stuff shouldn't be moved to the web worker.
Ryan:Right now, just for support purposes, I'm I'm only doing the writing via the web worker, but there's no reason why I couldn't do all the reads of the directories and files via that web worker, which would then free up the main thread. But at the same time, the what's going on in the app right now isn't super intensive, so that'd be a little bit, like, premature optimization that isn't required, but might be something interesting once this gets if, like when I package up that that package like, if or when I package up that package and, get that out. So, yeah, I think hopefully, I'm under time. I don't know. I actually need to add a little time code recorder here so I can see how much time is accrued.
Ryan:So maybe that'll also be some of the little tweaks I start making to the interface as I'm working through the Wasm stuff. But, yeah, that's my update. Again, this is the All Play podcast. I'm Ryan Heffner. You can find me on Twitter @ryanhefner .
Ryan:Check out my website, ryanhefner.com. You can follow the podcast on Twitter @allplayfm, and you can find the podcast on its website, allplay.fm. Alright. Have a great one. Later.