1 year

It’s weird. It was only last summer that the whole cancer thing happened, but it feels like so much longer. It went from a simple strange blood test to a confirmed strange blood test to every-single-blood-test-ever to a biopsy and CT scan and full diagnosis within a few weeks last year. I have trouble remembering a time before cancer. And now, it’s part of everything I do and think and feel.

“it’s probably nothing, but it could be one of these…”

That’s the note I was handed by my GP after the initially-confirming blood test. Quick googling suggested it could be either nothing, something really-bad, or something really-really-bad. Referral to The Big Regional Cancer Centre and introduction to my (MY!) hematologist. More blood tests, biopsies and a CT scan showed I had the really-bad option (but, thankfully, not the really-really-bad one).

Blah blah blah. I’m still here. I still haven’t needed to start treatment. I have learned to moderate my energy level (the only real symptom so far is chronic anemia, which is an… adjustment). I hardly ride my bike anymore – when I do, it’s for a comically-short-and-easy 10km ride around my community, followed by a full day of recovery. Ouch. I drive to work. I walk more slowly. I have occasional dizzy spells, and have “the sighs” as I occasionally gulp for air.

I’m still working – everyone I work with has been extremely supportive, which I am grateful for. I’ve taken a leave of absence from my PhD program (after completing coursework and beginning to prep for candidacy). And I’m learning to not be so hard on myself for any of these things. I have good days and bad days. Sometimes more good days, sometimes more bad.

One of the weird realizations is that I need to live with less data about my health. I get monthly blood tests, and of course (of course!) have been visualizing the data in charts etc. so I can see trends and extrapolate to the OMG I AM GOING TO DIE TO DEATH crossover point. My doctor politely suggested I should give my head a shake, and he’ll be giving me results every 6 months. *twitch* But, letting go of the data has helped. It’s more important how I feel, rather than tracking some numbers.

Anyway. 1 year. Holy crap. Here’s to many more.

Fixing the YD-Recent-Images widget

I’ve been using the handy YD-Recent-Images plugin for awhile now, to generate the /photos page here on my site. It provides a widget that displays the latest n images uploaded in posts here – and provides a nice photostream view for my photoblogging here as well1 . The plugin hasn’t been updated for… 7 years!… but it works. I’ve been expecting it to start misbehaving over time, though.

The /photos page here on my site. Self-hosted photostreamy goodness.

The plugin has been working flawlessly, but I noticed it was throwing an error after the latest WordPress update to 4.9.8. Something about:

Warning: Declaration of YD_RecentImageWidget::display() should be compatible with YD_Widget::display($args, $instance) in /[redacted]/wp-content/plugins/yd-recent-images/yd-recent-images.php on line 110

That’s weird. The plugin has been working flawlessly until now. And the recent images widget on the photos page is displaying normally, so it’s still working, but with an error message blasted at the top of the page. I’m guessing2 something changed in WordPress to become more stringent about PHP classes and functions. So, I follow instructions and take a look at line 110… The display() function in yd-recent-images.php didn’t have any function parameters, but the YD_Widget::display function in the class had 2 parameters: $args and $instance.

So, being a reckless “let’s just modify it in production to see if I can get it working” “programmer”, I just modified yd-recent-images.php’s display() function (on line 110), to include the two parameters:

function display() {
became
function display( $args, $instance ) {

and hey, presto! the error message went away. Note, this is absolutely NOT the same thing as saying this fixed anything. It might be fixed. I don’t know. I just typed things until an error message went away. This is probably the absolute worst practice, but whatever. It worked. Functional trumps correct.

ps. this post was written in the fancy new Gutenberg editor. Dang. It’s slick! I don’t get the hate about it – this improves editing in many, many ways. And is backward compatible because it just creates normal HTML rather than some kind of freaky shortcode/embed nonsense.

  1. I use the Widget Shortcode plugin to embed the widget on the photos page. []
  2. totally guessing. I have no idea what might have changed, but there was a WordPress update yesterday. Who knows? could have been a coincidental PHP version update on the server… []

Using Brightspace’s “Terms and Conditions” tool

As a university, we’ve had two major issues related to the use of the campus learning management system.

  1. Sharing of personal information with third party services/companies1
  2. Copyright of materials uploaded to courses, and subsequently downloaded and shared with third parties as per above. Copyright compliance is a pretty big deal at Canadian universities.

We needed a way to provide a reminder of university policies, to provide guidance about what is allowed and not allowed, and to document that people have acknowledged these.

Brightspace has a relatively new “Terms and Conditions” tool, which provides an End User License Agreement style modal page with content after people log in – but before they advance to the main Brightspace interface. In our case, people will be coming from a single sign-on tool (CAS for main campus users and Destiny One for Cont Ed users). After they log in, they’ll be presented with something similar to this:

The initial text content of the Responsible Use statement, with some branding header stuff added for good measure

If they click the “I have read…” checkbox and then “I accept”2, they get taken to the main Brightspace homepage and they don’t see the T&C statement again3. If they click “I decline…”, they go to a page with more info. Either way, there’s an audit trail so the university can reach out with support if needed.

The statement has gone through relevant committees for revision, and is ready to go live on Monday.

Some tips, from our implementation:

  1. Implement first on a test environment, not in production. Obviously. This is a tool that inserts a modal agreement page before people get access to Brightspace, so it needs to be configured correctly the first time to prevent issues for, say, 40,000 people who suddenly see this. Implement on Test, iterate a bunch, and get it right before moving to Production. It’s best to annoy the small subset of people who are exploring Test rather than everyone on Production. (because everyone on Test will have to re-re-re-agree to the T&C every time there’s an edit. Sorry, Izzy.)
  2. Edit the content outside of Brightspace. Just In Case™. I never fully trust WYSIWYG editors. They have a way of helpfully “fixing” html. It’s best to write higher profile content outside of the editor so you have control over it – and have a full backup that’s easy to copy/paste into the HTML view of the Brightspace content editor.
  3. Editing the content of the Terms and Conditions tool triggers a reset – all people will need to re-agree to the statement if the content is edited. So, get it right the first time. Even fixing a typo or grammatical error will trigger the reset. Test it a bunch on the test environment first. I’ve been running versions of it there for a few months now, as we gave demos to various groups on campus to include them in the revision process and prepare their units for the change.
  4. Change the wording of the buttons through the Language Management tool. It’s under the “Terms and Conditions” tool, under “Page”. We changed the text of the checkbox, as well as the text of both buttons, after feedback from committees and people who are in front line support roles.
  5. Apply some branding to the page. By default, the tool provides a stark white page with the text. People will think that seems odd – has the site been hacked? is this a phishing attempt? Adding a logo can help. BUT. The content editor for the tool doesn’t allow uploads. And content within Brightspace requires a successful login to view. When the Terms and Conditions page is presented, people are in the nether space between not-logged-in and successfully-logged-in, so images and other resources need to be hosted outside of Brightspace4 – and, it needs to be on a server that runs SSL so the content is served via HTTPS. For our page, I just borrowed the live UCalgary logo (in .svg format), via HTTPS. And am crossing my fingers that the URL for that image doesn’t change because if I have to edit the T&C content it forces the reset and everyone gets to re-agree to the statement. Which is not optimal.
  6. Instead of the “Decline – I need more info” button just logging people out, we set it to take them to a page on the Provost’s website with a copy of the statement and links to get more info.

Anyway. I get to throw the switch on Monday. Bracing for… “enthusiastic” feedback emails from the community shortly afterward.

Update: Almost forgot – the plugin that runs the T&C tool needs to be activated by D2L, as well as some configuration of the login workflow. There are some bits that need to be set that aren’t visible to System Administrators – only to the super-secret D2L role.

Update 2: After a week, 11,000 people have had the “responsible use” statement displayed. All but 3 clicked “Agree” – so, either it’s not a problem, or people are doing the EULA scroll/click shuffle…

  1. homework sharing sites especially – recruiting our students to essentially copy the classlist for their courses and use that to let the company recruit students. which is a rather huge violation of privacy and the acceptable use of electronic communication policy that everyone is bound by as part of gaining access to university resources like email and Brightspace and others []
  2. not sure why the tool is designed to have this level of failsafe – we’re not launching missiles or anything… []
  3. until we reset it – likely once per year – or until we have to change the content and it resets automatically []
  4. there might be a way to do it through the LOR, but I didn’t spend much time trying to get that going []

Introducing TIDraw – simplest possible digital whiteboards

It’s not a SPLOT per se, because it’s intended for use in face-to-face learning rather than online. SPLF2FT?

At the Taylor Institute, we have a bunch of active learning classrooms – we call them “learning studios”. They’re designed to enable active group collaboration, through the design of the rooms, to the furniture available, and the technology provided. There are 50″ touch-enabled “collaboration carts”1 that can run almost any web-based tool.

One of the more common uses of the displays involves digital whiteboards. Each display has an actual physical whiteboard beside it, but the digital whiteboard integrates with the AV systems that run the room. Which means we can do things like say “hey – group 1 is doing some cool stuff. check it out!” and push their display to the projector (or even to all other displays in the room) for everyone to see. Much harder to do with traditional whiteboards.

So, when Limnu closed down at the end of 2017, we were stuck. It was by far the best digital whiteboard tool, and we were without that functionality for a while. We switched to AWWBoard, which is good, but seemed to have issues with our touch displays2. We were about to license an AWWBoard account for each collaboration cart (there are 37 of these on the main floor, plus a few more upstairs), so this would have become a pretty significant annual expense.

I was off for a couple of days this week, and between appointments for myself and for my parents I decided to try cobbling something together that could be self-hosted. I didn’t want one of the main tools that we rely on to be at risk of a company pivoting (ala Limnu) or charging more than I’m comfortable committing funds for every year (ala AWWBoard).

And so TIDraw was born. I used the really great (and lightweight) LiterallyCanvas library to turn a simple HTML5 <canvas> element into a whiteboard. That part worked in about 5 minutes. Then, I had to build a way to save snapshots of whiteboards as needed. Which took… longer… because of my rusty googling-and-coding skills. But I eventually got it to do what I had in mind. Anyone can use TIDraw, and if they hit “Save”, it converts the <canvas> to a .png file and uploads it to the server, where it’s available on a “Saved Whiteboards” page. Images are displayed in reverse-chronological order, and are automatically deleted after 7 days.

It’s the Simplest Possible Face-To-Face Tool for digital whiteboards. No logins. No chat or audio or video calls built-in. Because it’s a whiteboard, there isn’t a bunch of security around it.

Part of the draw of Limnu and AWWBoard (which is a really good whiteboard tool – don’t get me wrong!) was the possibility for collaborative drawing – having people draw on their iPads/laptops/phones while sharing a whiteboard on The Big Screen™. And, the infinite canvas – zoom and pan on and on and on as needed. Both features really never got used though – they demo well, but in practice, people just used the collaboration cart touch display without additional whiteboard drawers connected, and very rarely strayed beyond the limits of the screen that is shown initially. (and the infinite whiteboard and multitouch zoom/pan caused endless problems as people accidentally brushed against the display and sent their drawing into 1% scale or caused some other unintentional weirdness). TIDraw is simple, but that’s a strength. There’s less to go wrong, there’s less to learn. And for what 99% of people use the digital whiteboards, it does it perfectly.

It seems to work well pretty much anywhere – mac/win/ios/(probably android?). Works great on an iPad with a pencil stylus. Works on the TI Collaboration Carts using the felt stylus or finger. Perfect.

I’ve got a few things I want to tweak – most notably, a way to display the saved whiteboards better on Chrome and Firefox. They are .png files with transparent backgrounds, and Chrome kind of freaks out and doesn’t display the image over a white background, so the whiteboard image looks pretty crappy. Firefox uses a grey background to display .png files, which also looks crappy with a transparent drawing on top.(fixed, thanks to a tip from Tom Woodward)

I also want to add a bit more security around the image-saving code, to prevent bad hombres from doing things like hand crafting an “image” file that could then be executed on the server somehow…

  1. this was a working name for the stations, intended to be replaced with something more creative/meaningful, but here we are over 2 years later and it’s still “collaboration carts”. so… []
  2. the touch is sent over the network via a USB-Ethernet extender, up to the IT room upstairs, where it’s converted back to USB and passed to the Arrive Facepoint PC for processing, then the HD signal is sent over the LAN back downstairs to be displayed on the appropriate display. This design provides a whole bunch of flexibility – but also inserts a pretty noticeable latency when using applications that involve direct manipulation of on-screen content – like, say, a digital whiteboard… []

re-reclaiming my domains


I’ve moved my webstuff back to Reclaim Hosting – I had been a very very happy customer, but decided I needed to move my sites onto canadian-hosted-and-managed servers out of principle. Since then, Reclaim spun up a Canadian-hosted server (but it’s managed by a US company, so there are still… complications). But, I’ve decided to stop caring so rigidly about that. It’s just my webstuff, and it’s far more important to be a part of the Reclaim family than it is to push back in an invisible way against the insanity that is running their country.

Anyway. I’m happy to be back, wearing my Reclaim Hosting shirt with pride (as always). The migration back to Reclaim was the simplest, fastest process I’ve ever experienced. Thanks Tim & Jim!

There may be some hiccups as DNS propagates. It looks like most places now point to my new home on Reclaim’s DOA server, but some are still pointing to the cached location on my previous server. That’ll work out in the next day or so.

In the meantime, in honour of the DOA Canadian Reclaim Server…

on When Breath Becomes Air

I’d picked up a copy of the book When Breath Becomes Air by Paul Kalanithy after reading a reference to it in a NYTimes article about John McCain, and Grant gave me the nudge to actually start reading it. It’s an amazing read, about a young neurologist/budding neuroscientist, who spends his life learning about the nature of life, and death, by experiencing it.

I’m thankful that the decisions I’m faced with are happening in slow motion compared to his story, but the effects are largely the same. I’m afraid of so many things now – most notably, of leaving J. alone after putting her through the ringer.

And I’m no neurologist. I’m not saving lives. My life’s work has been to help people integrate technology into their teaching and learning. Man, that seems pretty goddamned trivial now.

I held it together until the epilogue, which was written by his wife Lucy after his death.

Some of the highlighted passages I noted as I read:

Severe illness wasn’t life – altering, it was life – shattering. It felt less like an epiphany — a piercing burst of light, illuminating What Really Matters — and more like someone had just firebombed the path forward. Now I would have to work around it.

I began to realize that coming in such close contact with my own mortality had changed both nothing and everything. Before my cancer was diagnosed, I knew that someday I would die, but I didn’t know when. After the diagnosis, I knew that someday I would die, but I didn’t know when. But now I knew it acutely. The problem wasn’t really a scientific one. The fact of death is unsettling. Yet there is no other way to live.

The man who loved hiking, camping, and running, who expressed his love through gigantic hugs, who threw his giggling niece high in the air — that was a man I no longer was. At best, I could aim to be him again.

…but knowing that even if I’m dying, until I actually die, I am still living.

…part of me wanted to be excused from picking up the yoke again.

The tricky part of illness is that, as you go through it, your values are constantly changing. You try to figure out what matters to you, and then you keep figuring it out. It felt like someone had taken away my credit card and I was having to learn how to budget. You may decide you want to spend your time working as a neurosurgeon, but two months later, you may feel differently. Two months after that, you may want to learn to play the saxophone or devote yourself to the church. Death may be a one – time event, but living with terminal illness is a process.

The way forward would seem obvious, if only I knew how many months or years I had left. Tell me three months, I’d spend time with family. Tell me one year, I’d write a book. Give me ten years, I’d get back to treating diseases. The truth that you live one day at a time didn’t help : What was I supposed to do with that day?

Maybe, in the absence of any certainty, we should just assume that we’re going to live a long time. Maybe that’s the only way forward.

Human knowledge is never contained in one person. It grows from the relationships we create between each other and the world, and still it is never complete.

“Okay,” she said. “That’s fine. You can stop neurosurgery if, say, you want to focus on something that matters more to you. But not because you are sick. You aren’t any sicker than you were a week ago.

I hadn’t ever considered that I could release myself from the responsibility of my own medical care. I’d just assumed all patients became experts at their own diseases.

There are, I imagine, two responses to that realization. The most obvious might be an impulse to frantic activity : to “live life to its fullest,” to travel, to dine, to achieve a host of neglected ambitions. Part of the cruelty of cancer, though, is not only that it limits your time ; it also limits your energy, vastly reducing the amount you can squeeze into a day. It is a tired hare who now races. And even if I had the energy, I prefer a more tortoiselike approach. I plod, I ponder. Some days, I simply persist.

and, from the epilogue written by Lucy after Paul’s death:

Paul faced each stage of his illness with grace — not with bravado or a misguided faith that he would “overcome” or “beat” cancer but with an authenticity that allowed him to grieve the loss of the future he had planned and forge a new one.

 

Slow motion train wreck in progress

Another in a series of really great articles in the Times, about cancer and dying. Fun topics that are kind of relevant.

“The most obvious” response, wrote the neurosurgeon Paul Kalanithi in “When Breath Becomes Air,” his memoir of a brilliant life cut short, “might be an impulse to frantic activity: to live life to the fullest, to travel, to dine, to achieve a host of neglected ambitions.” But cancer limits the energy for compacted living, and a longer view takes hold. “Money, status, all the vanities the preacher of Ecclesiastes described hold so little interest; a chasing after wind, indeed.”

Source: Timothy Egan | As He Lay Dying – The New York Times

I described it recently as watching a train wreck in slow motion. You know exactly what’s happening, what’s going to happen, but it’s surreal because it happens so slowly. I feel mostly fine, except that I don’t. I look mostly fine, except J notices that I’m slowly getting thinner (I disagree, but whatever).

This motivation to make the most of the time that’s left – it’s something we should all do, and not to wait until Something Bad Happens. It’s something I’m trying to do – to be more mindful of who and what is important to me.

But, that has limits. The kind of cancer I have is invisible. It’s inside every single bone, crowding out the cells that make red blood cells. So, although it’s cancer that is the cause, the only noticeable symptom is chronic anemia. Which means I get out of breath walking from my car to the office. Or walking up the stairs to my desk. Or playing ball with our dog in our back yard. Or, sometimes, just standing up. And I’m stuck in a “mental fog” much of the time, with facts, names, words hard or impossible to recall until it passes. In many ways, this would be so much easier if it was the kind of cancer that was operable – just lop off a chunk of me and be done with it. But, it’s not. So it looms there in the background, all the time, colouring every thought I have, every moment.

That kind of gets in the way of “live life to the fullest”, and it’s a pain in the ass. But I’m adapting. I drive to work, after riding my bike daily for over so many years. I walk more slowly now. I rest more. I’ve cut back – putting my PhD program on hold until. Until things get bad enough that I cry “uncle” and do a round of chemo, which will hopefully reboot the cells in my marrow by killing off the useless ones to make room.

Because it’s a cancer-as-slow-motion-train-wreck, I hear “well, if you have to get cancer, at least it was a good one!” and I know what they’re trying to say – that it’s not like I’m dying quickly, like Downie, or McCain, or so many others. But that’s also so many kinds of bullshit, because it’s definitely not “good”.

I kind of obsess about numbers. I created a visualization of some of the key blood test values over time, to make sense of what’s going on. Which then led me to do fun things like extrapolate the trend lines into the future to try to guess when the “uncle” point might be. My hematologist looked at me and said “why are you doing this to yourself? Let’s try without the data for awhile. How you feel is much more important than any of the numbers.” And, although we still run tests every month so we have the data, I’ll only see snapshots every six months when I meet with him, rather than obsessing over it every single month.

It’s a small change, but it’s already helping. Getting out of my head, and being more present. Living life to the fullest, whatever that might mean.

How data-sharing era puts our privacy at risk – The Globe and Mail

A study cited in the paper notes publisher websites utilize an average of 13.5 (and up to 70 in some cases) third parties. A visit to one popular U.S. tabloid triggered a user interaction with some 352 other web servers, according to a 2014 U.S. Senate subcommittee study of the issue.

Many of those interactions were benign; however, some of those third parties may have been using cookies or other technology to compile data on consumers without their explicit consent, according to the study. Data mined by the practice can include users’ interests, browsing history, location, and past-purchase history.

Source: How data-sharing era puts our privacy at risk – The Globe and Mail

Even anonymous data can be de-anonymized with enough data points. The web is broken, in that we think it’s doing one thing (letting people publish content) when it’s actually doing something else (surveilling everyone who comes within 100′ of a website, and using that data with no oversight or visibility).

For a real eye-opener, try running the Lightbeam Firefox add-on. It builds a visualization of the collusion between websites and data-miners.

Update: Nick Heer pointed out that the Globe and Mail article about privacy-invading trackers had an impressive 18 trackers itself, as reported by Ghostery. Awesome. (It’s showing 9 trackers for me now)

Introducing Hypercardinator

For some reason, I felt like turning my blog into something reminiscent of Hypercard. Maybe it’s nostalgia? Maybe it’s a throwback to an era from before the web? Maybe it’s an ironic attempt to de-emphasize design over content? Maybe all of those.

Anyway. I found this great Chicago-inspired webfont, released under a Creative Commons license by Giles Booth. At first, I just used a local stylesheet to force it to be used on any site, but then I realized I wanted it running on my blog full-time. But I didn’t want to have to create a new theme to do it. So, a plugin!

Hypercardinator was born. It adds a stylesheet to force ChiKareGo to be used for all content and navigation on a site. Which was a great start, but didn’t feel like it went quite far enough. So I added some styles to attempt to non-destructively force all images to render in high contrast black and white (I couldn’t figure out a way to use the more Hypercard-native Atkinson dithering, and didn’t feel like spending more time at the moment to figure it out).

It’s a trivial WordPress plugin. Try it out – if it doesn’t float your boat, just deactivate the plugin without wrecking any of your site’s config or layout.

Not using WordPress? Check out Bryan Ollendyke’s webcomponent that implements the stylesheet and webfont.

Blogging, social media, and ambient humanity

Tim Carmody, posting on Kottke.org, about Dan Cohen’s “Back to the Blog” post.

…blogging either needs its own mechanisms of ambient humanity — which it’s had, in the form of links, trackbacks, conversations, even (gulp) comments, all of which replicated at least a fraction of the buzz that social media has — or it needs a kind of escape velocity to break that gravitational pull. Gravity or speed. Or a hybrid of both.

Source: Blogging, social media, and ambient humanity

We’ve seen another way. It’s possible, and we know that because it worked for years, at internet scale. But the mechanisms of ambient humanity in the Big Silos won because most people really don’t care about the infrastructure. People just want to feel connected to people, and there was less friction in the silos – at the cost of giving up and/or losing control.

There are absolutely parallels in edtech. Instructors and students largely interact with each other online via the institutional learning management system, rather than richer distributed venues designed for each individual context. Or, rather, some courses use those interesting non-sanctioned venues anyway, because they suit their needs, but without the blessing of the institution and at risk – both personal and institutional.

Student data (names, emails, ID numbers, grades, etc) needs to be tightly managed by the institution for very good reasons – we can’t violate the privacy of our students, either through active leaks or from passive breaches due to data becoming siphoned off into other tools without our control. I get that we need to control the data. But we’re also setting up a mirror of the social-media-to-corporate-silo model, which has been shown to be harmful in so many ways.

So. How to support the decentralized needs of an incredibly diverse and interesting ecosystem of communities, while protecting sensitive personal information, without stifling the interesting and creative activities that are possible when students and instructors have more control over their own environments?