Data collection in times of sickness both personal and global

Two weeks ago, I caught a sinus infection on the return flight from Disneyland (before the parks were closed down for health concerns; the trip feels like a lifetime ago). Since hospitals and doctors’ offices are getting slammed right now, I knew that making an appointment would not be prudent, so I called and requested an antibiotic prescription (they seemed grateful to have me not clutter their office and get others sick).

Throughout the entirety of my medication period, I took my temperature, sometimes several times a day. I wanted to keep tabs on how my illness progressed, and of course look out for possible COVID-19 symptoms in case my infection was weakening my immune system enough for another viral invader to take purchase (fortunately, this was not the case, and my typical old season-and-travel-influenced nasal drip ran its course as expected).

In the course of taking my temperature and adding the results to the Health app on my iPhone for tracking, I wrote up an iOS shortcut that I could trigger the temperature input via Siri. Maybe someone else will find some use in this, so here’s a link (requires permission to write health data, obvs).

Since I was recording my temperature like crazy, I now have fun visualized data!

Got a lot of high 96°F ratings which felt a bit low as a baseline, but then again, I never have this volume of body temperature data available to me, so perhaps I run cooler than I thought. Only got to 99° once and that was after a much-needed outdoor walk, so I’d chalk that up to a slightly elevated heart rate. Average of 97.44° is within expected ranges and also happens to align with the average temperature in recent studies.

So after all that, no fever (and no COVID-19; I’ve been sheltering in place since I got off that plane, especially as the global pandemic started to ramp up). Only some fun with data collection. Which, as self-quarantine activities go, isn’t the worst way to pass the time.

Manual Apple Store Gift Card Link Creation for Apple Wallet

Just because this took me way too long to figure out:

If you have an Apple Store gift card you’re unable to scan into Apple Wallet via the iPhone camera (in my case, because I had a digital gift card from a third party that just provided card number and PIN, no QR code to be found), manually create a URL formatted as follows:

https://storepass.apple.com/pc/v1/card/################/AAAAAAAAAAAAAAAA

Replace ################ with the gift card number, and AAAAAAAAAAAAAAAA with the PIN, then click the link on your Mac or iOS device to generate the Apple Wallet confirmation prompt. C’est fait!

HTML5 Video Playlist: A Brief Kludge

Twitter buddy @adecelle issued a challenge:

The listing in question describes how to replace an HTML5 video source in sequence; basically, it lets a single <video> tag change its movie in the course of playing the video, resulting in a YouTube-style playlist. Problem was, in the form presented on the site, there was no intuitive way to add x more videos, and the second video in the sequence would loop forever. It had been awhile since I had gotten to practice some coding, so I figured I’d give it a go.

As it turns out, this was a difficult nut to crack. My repeated Google searches on how to construct an HTML5 video playlist yielded a handful of code examples from various sources, but these examples were apparently written completely off the cuff and were more broken than the Apple code. Eventually I had to cobble snippets from multiple sources to make a functional output with the desired capabilities:


<script type="text/javascript">

function myEndedListener(){
var myVideo = document.getElementsByTagName(‘video’)[0];
myVideo.addEventListener(‘ended’,myNewSrc,false);
}

function myNewSrc() {
var myVideo = document.getElementsByTagName(‘video’)[0];
myVideo.src=”videoplaylisttest2.m4v”;
myVideo.removeEventListener(‘ended’,myNewSrc,false);
myVideo.load();
myVideo.play();
myVideo.addEventListener(‘ended’,myNewSrc2,false);
}

function myNewSrc2() {
var myVideo = document.getElementsByTagName(‘video’)[0];
myVideo.src=”videoplaylisttest3.m4v”;
myVideo.removeEventListener(‘ended’,myNewSrc2,false);
myVideo.load();
myVideo.play();
myVideo.addEventListener(‘ended’,myNewSrc3,false);
}

function myNewSrc3() {
var myVideo = document.getElementsByTagName(‘video’)[0];
myVideo.src=”videoplaylisttest4.m4v”;
myVideo.removeEventListener(‘ended’,myNewSrc3,false);
myVideo.load();
myVideo.play();
}

</script>

<video controls src=”videoplaylisttest1.m4v”>
</video>

Example site (H.264 videos in MP4 containers; YMMV)

I was particularly proud of finding the bug on the Apple developer page: the event listener keeping tabs on the ‘ended’ state of video playback (when the video reaches its end) was reloading the same video over and over again when playback concluded. It was on the Opera Developer Community page that I found the solution in removeEventListener() (their multiple video example, for the record, was fairly unusable as well, but I appreciate their help in coming up with a solution).

The end result is messy code, to be certain. I’m fairly confident that someone more technically savvy and JavaScript-fluent could come up with a cleaner solution, but as Paul told me, the important thing is that it fulfills the function (tested on Safari 4.0.5 for Mac OS X Snow Leopard and MobileSafari 3.1.3 for iPhone 3GS; the initial autoplay doesn’t work on the iPhone but the sequential JavaScript fu works like a charm on both).

“Why post all this JavaScript/HTML5 stuff on your sporadically-updated blog about video games and stuff?”, I hear you ask? Simply put, I wanted to add something to the search results pool in the hope that someone else can stumble upon this tiny corner of the Internet and benefit from all this legwork. Good luck, wayward e-vagrant!

[discuss]

The Friggin’ Future

On a recent trip to Seattle, I once again realized just how amazing it is to live in The Friggin’ Future. With an iPhone 3GS (basically an extension of my arm at this point), I was able to:

•get walking directions from airport to hotel, around the city and back again, including light rail and bus routes with scheduled times (Maps, OneBusAway)
•consult user-submitted restaurant recommendations (Yelp)
•track spending (iBank)
•record the entirety of a concert (Camera) (don’t worry, it was w00tstock and was released under a Creative Commons license)
•keep hundreds of friends and well-wishers up to date up to the minute on happenings (Tweetie)

(I didn’t even get into really fancy stuff like geotracking the whole trip via Dopplr, mostly because I only just discovered Dopplr today. I TOTALLY would have though)

As much as this sort of thing has become commonplace, I can’t help but stop and marvel at times. It wasn’t terribly long ago that the notion of a pocket-sized device that could accomplish all these feats was in the realm of science fiction. But even the tricorders of Star Trek future history are primitive when compared to what has actually been created. The creators of that program could not have conceived of a worldwide network with virtually unlimited information at our fingertips (if you recall, most Treks had all their data stored locally on computers onboard their starships, basically servers with warp drive; I suppose if your ship can outrun data transfer speeds, a long-range Wi-Fi network might become a thing of novelty… but as is so often the case when Star Trek comes up, I digress).

Though I didn’t realize it when I bought my first iPhone in 2007, the device has become an absolute necessity in my life. It is my lifeline to the outside world on a level of profundity that a landline telephone could never hope to achieve. True, it has been a steady source of content consumption as my portable car stereo and TV (though the iPad has taken over the latter function with gusto), but it’s also the primary connection through which I socialize with a myriad of friends and well-wishers online. Some might express concern at eschewing real relationships for so-called “fake” ones with Internet folk, but I fail to see the distinction when the only difference is the means with which we communicate.

I’ve been obsessing a bit lately over one Amber Case, cyborg anthropologist, futurist and Singularity enthusiast (so perhaps you can understand my obsession). She argues that everyone in this modern age is a cyborg, as we all utilize technology to some degree to augment our physical bodies. It’s a compelling thought experiment (see more in her entertaining and informative lecture on prosthetic culture), and I hope it makes everyone realize the importance of devices like the iPhone (or your brand of choice) in their daily lives. Technology interconnects us on a deep level, and connects us all to something much bigger than ourselves.

And it’s exciting to live in a time where we can take it for granted. That’s when you know it’s The Friggin’ Future.

Oh yeah, add another bullet point for:

•update blog (WordPress)

[discuss]