<div dir="ltr"><h1 id="gmail-about-this-rattlegram-test-pwa" style="box-sizing:inherit;margin:0px 0px 0.5em;padding:0px;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif">About This Rattlegram Test PWA</h1><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">Thursday, August 17, 2023</p><h3 id="gmail-install-the-web-app" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#install-the-web-app" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Install the Web App</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">This test Rattlegram Web App is available at <a href="https://rattlegram.k0ozk.com/" rel="nofollow" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Rattlegram.<span style="box-sizing:inherit;font-style:inherit;font-weight:inherit;font-family:Consolas,Monaco,BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.1em">K0OZK</span>.com</a>.</p><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">If you're using a compatible browser, you should see an install icon in the browser address bar or a prompt at the bottom of your mobile screen. It's very likely we'll find problems with this test PWA. I did only minimal wrapping of Ahmet Inan's Example 3 JS code. (I just noticed that in Airplane Mode, hitting Refresh will break the installed app. I'm sure that I just need to configure the Service Worker correctly.)</p><h3 id="gmail-dsp-wasm-pwa" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#dsp-wasm-pwa" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">DSP, WASM, PWA</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">I've published this basic Progressive Web Application using <a href="https://www.aicodix.de/example3/" rel="noopener noreferrer" target="_blank" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Example 3 from Ahmet Inan's 2019 Digital Signal Processing Library/Web Assembly work</a>.</p><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">This basic app will allow us to test the PWA, DSP, WASM, and access to audio and GPS on various devices to see if pursuing a device-agnostic/single codebase PWA could be beneficial. I've tested the PWA on Windows and Android 11. It should work on all PWA and Web Assembly-compliant browsers. It should be "installable" on those devices as well.</p><h3 id="gmail-why-pwa" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#why-pwa" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Why PWA?</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">In addition to watching all available presentations on Ribbit, I read the emails archived in the ORI mailing lists. Josh Datko raised the issue of a PWA in the July discussion. I think a PWA will speed up development and adoption. It'll also allow us to deploy Windows/Mac/Linux support at the same time as mobile. There'd be no need for device-specific apps. No app store. The PWA should run–and be installable–on IOS, Android, Windows, Mac, Chrome, Linux, Arduino?—virtually anything with a browser that supports the necessary features.</p><h3 id="gmail-in-an-emergency-situation" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#in-an-emergency-situation" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">In an Emergency Situation</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">No Internet. The App Store and Play Store are inaccessible. No one can use Ribbit if they've not already installed it.</p><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px"><em style="box-sizing:inherit">But a PWA could be distributed via an ad-hoc web server at the EOC or even one running <span style="box-sizing:inherit;color:rgb(54,54,54);font-weight:700">on your smartphone.</span></em></p><h3 id="gmail-imagine" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#imagine" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Imagine...</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">No internet. I join your phone's hotspot. I scan the QR code on your phone. My browser loads the Ribbit PWA and asks if I want to install it. Of course! Then I turn on my hotspot and offer the PWA to the next ham. I think this could be done.</p><h3 id="gmail-development-and-deployment" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#development-and-deployment" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Development and Deployment</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">This test PWA is set up with CI/CD. The latest release is built and deployed to the production site within a couple minutes of code being pushed to the repository. By using Pull Requests, a preview website is automatically created. We can use the preview to test and approve the latest release. Then, with one click, we release the latest awesomeness.</p><h3 id="gmail-update-the-app-on-all-your-devices" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#update-the-app-on-all-your-devices" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Update the App on All Your Devices</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">No need to reinstall the app. My experience is that if you right-click/refresh or close/open the app, your device is instantly updated to the latest release. This is not simply "a cached webpage." This is a full-blown installed application on par with every other app. When properly configured, it should continue to run without Internet access indefinitely. And we can add message caching so they'll be uploaded once the Internet is accessible.</p><h3 id="gmail-under-the-hood" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#under-the-hood" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Under the Hood</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px"><a href="https://github.com/richclingman/rattlegram-pwa" rel="noopener noreferrer" target="_blank" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">Public Repository for this PWA</a>.</p><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">This PWA is built using Nuxt3/VueJs3 with its Content module (see the simple blog pages), and Bulma CSS/SASS. It's currently hosted on my paid Netlify account. Netlify offers free accounts that should support the Ribbit development and full deployment.</p><h3 id="gmail-how-i-discovered-ribbit" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#how-i-discovered-ribbit" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">How I Discovered Ribbit</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px"><em style="box-sizing:inherit">Just this past weekend,</em> I came across the Ribbit presentation in the <a href="https://www.youtube.com/watch?v=TGzgIjEt9wA" rel="noopener noreferrer" target="_blank" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">RATPAC videos</a> and have watched "every" Ribbit video and tried out the Android Rattlegram app. Awesome! Great work on the concept, algorithm, and app. Great presentations! I decided to try Ahmet Inan's DSP functions in a PWA to see if it's a viable concept. I've worked with Web Audio API, but never combined C++ and Javascript to get Web Assembly apps. This is my first real attempt at a PWA, so I'm sure there are a lot of things to be enhanced.</p><h3 id="gmail-_73" style="box-sizing:inherit;margin:1.3333em 0px 0.6666em;padding:0px;font-size:1.5em;color:rgb(54,54,54);line-height:1.125;font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif"><a href="https://rattlegram.k0ozk.com/blog/about#_73" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none">73</a></h3><p style="box-sizing:inherit;margin:0px 0px 1em;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px">I'm a software engineer -- full-stack, back-end, and cloud. And I'm an Extra Class Amateur (without much actual radio experience other than 2m).</p><p style="box-sizing:inherit;margin:0px;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px"><a href="https://k0ozk.com/" rel="noopener noreferrer" target="_blank" class="gmail-pr-3" style="box-sizing:inherit;color:rgb(72,95,199);text-decoration-line:none;padding-right:0.75rem">Rich Clingman, <span style="box-sizing:inherit;font-style:inherit;font-weight:inherit;font-family:Consolas,Monaco,BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1.1em">K0OZK</span></a><br style="box-sizing:inherit">Ozark, Missouri, USA</p><p style="box-sizing:inherit;margin:0px;padding:0px;color:rgb(74,74,74);font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px"><br></p></div>