Course Title: Object Oriented Programming with Java, parts I & II
Provider: University of Helisinki
Price: Free
Level: Beginner
Effort: 2 modules, 6 weeks each (by ECTS reckoning, as many as 300 hours)
Prerequisites: None
Completion awards: Free certificates of completion for each module

About the course:
In short: highly recommended.

This is not a computer science course, but it doesn’t claim it is.  It really is two (nearly) completely different courses.  The first one is about learning Java syntax and semantics, and the second one is about object-oriented programming in general, and some intermediate Java-specific techniques, as well.

It’s also not a MOOC, making their URL ironic.  It’s online, and it’s open, and a lot of people take it, but it’s not Massive Open Online.  It is an online textbook, and a very cleverly written code testing system.  You’re on your own.  Allegedly there’s someone to answer your questions in a few hours on IRC, but IRC users won’t really need the help, and answers to emails might take a few days, but again, you’ll almost certainly be past that “week” by the time you get an answer.  There’s no online community, no forums, no helping each other.  It’s an online textbook, an IDE, and nothing else.

(As there’s no video of anybody reading the book or walking your through its examples, it strongly parallels Open University modules without the support.  If you’re looking for the perfect module to taste what online study is like, this is it.  Imagine this course, but eight months long instead of a few weeks.)

Part I is a tutorial for basic Java usage, and is brilliant.  It’s quick, it’s informative, it’s very accessible.  It took me a week in my spare time, and was blown away at how quickly I picked up the skills with how they were taught.

Part II has a massive jump in difficulty, especially the week-ending challenges, where you’re welcome to use any programming techniques you care to in order to solve the problem, so long as its behaviour is exactly correct.  It highlights what I really love about programming:  There’s only ever one right answer, but there are countless ways to get there.

Being presented by the University of Helsinki, it’s an English course, and the vast majority of the content is very well written.  There are some peculiarities of language, however.  For example, the course keeps referring to built-in classes as made-up classes, which is … pretty much the antithesis of built-in.  So there are a very few minor confusions.

The certificates you get at the end are very clear about what has been studied, and even states that had it been accompanied by the university’s overseen exams, each would be worth 5 ECTS.  For the 10 credits between them, that’s 20 OU credits, and a little less than TM111 or TM112.  I’m guessing it’s not quite that impressive, but it does highlight that it’s the exact course their students take, and it’s definitely fit for purpose.

I’d like to thank Newbie from a comments page for pointing me in the direction of these modules.  They’re everything the Microsoft course wasn’t.  It’s not perfect.  It doesn’t include recursion, doesn’t discuss why one method is preferable to another, and states that abstraction is very important, but doesn’t teach any actual techniques for it.  Still, it’s a coding course, not a computer science one.

A highlight for me was using both NetBeans and IntelliJ IDEA to write the code and interface it with their testing system.  It’s a slick system, and couldn’t really be better.  It’s by far the best automated evaluation I’ve ever seen of checking code, including the one from CS50.  (Also, I enjoy both NetBeans and IntelliJ, and their ability to both prompt and automate things, but found myself working about twice as fast in IntelliJ.  If you have a student email address, do yourself a favour and get a free license for the full version.  If you don’t, at least check ot the community version.)

Course Title: CS50 Introduction to Computer Science
Provider: Harvard via edX
Price: Free
Level: Introductory
Effort: 10 – 20 hours per problem set, 9 problem sets and a final, self-paced
Prerequisites: None
Completion awards: Verified Certificate available for USD$90

About the course:
A lot of people view this course as the gold standard in introductory computer science MOOCs.  Having been through it now, I’m afraid I have to disagree.  It is an amazing course, though, and the one best placed to get you into the middle of useful coding as quickly as possible.

The structure of the course follows what you might expect of a university course translated to an online MOOC: each week has a very, very long lecture, followed by shorter bits from teaching assistants highlighting important concepts, and then there’s a problem set which is a series of challenges which ostensibly can be solved using the techniques introduced that week.  There is an exponential increase in difficulty from week to week, because both the material covered is more difficult, and the amount of documentation relating to solving the challenges is reduced.  This is meant to foster habits of independent study to resolve such challenges in the future.

This structure is the first relative weakness of the course.  (Relative to the MIT CS introduction course using Python.)  The MIT course imagines education looking more like the web.  The Harvard course spends countless resources trying to make the web ape its own institution.

As a former trainer, the most important thing about educating people is keeping them awake and interested long enough to learn, so it’s really about entertaining.  The lecturer, Professor David Malan, is extremely entertaining on stage.  The format is fundamentally outdated, however.  There could be a hundred clips where there’s currently a 105 minute video, each collated, indexed, and cross-referenced.  A build-your-own lecture series could take the place of an impending Sander’s Hall nap.  MIT did this beautifully in their latest foray into CS as a MOOC.

The languages “taught” are fantastic.  They start by giving a few rules-of-thumb in Scratch, and pretend that they’ve therefore taught it.  They next spend several weeks on C, and this is an impressive tutorial for the language … for any language.  They then give a small grounding in Python, and then a cheat sheet for SQL, JavaScript, and maybe a few others.  Really, I think they’d do better by having a hard limit on two languages, because everything beyond Python was literally worse than having no experience at all.  Students are expected to meaningfully interact with those other languages, without sufficient preparation.  In solving PSets, students already know those topics, or they luck into trying the correct technique the first time, or they end up chasing their own tails for hours and hours before giving up and asking on a public forum for help.  I spent many hours answering questions in the CS50 subreddit to alleviate some of the pain of such students.  (An example is that they expect students to use object-oriented programming techniques, but never discuss what an object is, let alone what object-oriented programming is.)

I would disagree that it is an introductory module.  It may be introductory if you’re on campus at Harvard, and can stop in and chat to a staff member for twenty minutes, and you’re literally spreading this across a third of a year.  If you’re doing this on your own, you’re going to have to come with a pretty strong intuition of why computer programs don’t do what you expect, and how to troubleshoot to figure out where it all went a bit wrong.  (The tool created to understand this in C is fantastic.  Because of this, they don’t teach how to figure out how to do it when learning C, and therefore students have no concept of basic troubleshooting techniques once the module moves away from C and that tool is no longer available.)

If you survive through to the victory lap of the final (which is really just whatever personal project you want to make a video for), you’ll be ready to take on any formal CS education.  I doubt you’ll be prepared for properly undertaking independent study, however, because the theory behind the coding is often ignored.

The real time I put into this was between 4 and 12 hours per PSet (typically on the lower side), so maybe 60 hours, plus another two hours each “week” watching lectures.

I’d recommend people interested in CS and coding take this module … but only if they also undertake the MIT or UBC introductory modules.

A couple of months ago, I predicted a score on my EMA between 93% and 95%.  I’m pleased to have outperformed the prediction, and achieved a 98%.  My OAS for the rest of the module had been 97%.  It’s gratifying to see these two numbers so close, as it means my tutor was well calibrated to the overall module requirements, which means I can be confident when I rely on her recommendations going forward.  (Listening to her recommendations definitely helped in this score.)

It is all downhill from here, though.

Course Title: Learn to Program in Java (DEV276x)
Provider: Micosoft via edX
Price: Free
Level: Introductory
Effort: 6 — 10 hours per week, 4 weeks, allegedly self-paced
Prerequisites: None
Completion awards: Verified Certificate available for USD$99

About the course:

No.  Just no.  Don’t even think about taking this course.  Run away.  Invent your own rules for how you think Java might work, and use those instead, because they’re sure to be more useful than this course.

I apparently signed up for this module on the day it opened, but I’m not really sure how that happened.  Anyway, the discussion forums were filled with people enthusiastic about what they were there to do.

There was no syllabus stating what the structure of the course was.  There was no course news, no updates, no welcoming letter, nothing telling you what to click on first.  The first week’s instructions, however, made it clear that the IntelliJ IDEA was an absolute necessity for the course.  (It’s not.  Feel free to use whatever IDE you enjoy.  They do at one point discuss how to set up a new project in IntelliJ, but they skip most of the difficult steps, and get another step wrong.  I learned much more about Java following the IntelliJ instructions for setting up a new project than I did in the first two weeks of the Microsoft course.)

After a few days, several of the students had finished the first week, and even though the course description said it was self-paced, there was no second week.  Some people asked in the discussion forums when the content would become available.  Other students were asking for help on things.  Some for clarification.  There was no response from anybody associated with the course’s presentation.  They had hit a button to upload a third of the course, and run away.

One step up in seriousness was that response was necessary, because much of the documentation is wrong.  Some of it over-simplifies things by saying this-or-that doesn’t exist, when it does, or you can’t do this-or-that, when you can.  Other times, the script-reader’s information is just incorrect, and other times the questions they quiz with have 0 correct answers from which to choose.

Another step up in seriousness is that the course is completely uneven.  The script-reader reads a mind-numbingly patronising script which insults the students’ intelligence.  Then the documentation and quiz questions expect the students to have a much higher degree of understanding than what was just discussed.  (Some courses claim this is a feature encouraging outside study, but this is a different beast entirely.)  Many times, there’s no indication of a correct answer in the script or the documentation, and it can’t be learned practically by experimentation.

I refer to the “instructor” as a script reader, because that’s what she’s doing.  I have no doubt that she does understand the subject content, but she’s just reading a script, and not teaching.  Worse, it’s clear that she didn’t write the script, because she often stumbles when something is wrong, not being clear enough, or she’s simply struggling with it not being the right way to present something, but she just ploughs on through it regardless.  One (patronising) committee wrote the script, a different person read it, a different team wrote the documentation, and someone else wrote the questions, and clearly none of these people ever met each other.

There were at least two questions which showed that the person who wrote the questions had no idea how iterative loops worked.  One had a question with zero right answers, and another with two right answers.  And, of course, there’s no way to get them fixed, because nobody from the presentation is there.

Anyway, when the second week was finally released, randomly nine or ten days after the course opened, and there was still nobody to answer questions, and the documentation was worse than ever, I finally just bailed.

To sum up: No.

When the University of British Columbia‘s edX group put up information about a new MicroMasters program for Software Development, I was excited.  (I get excited by not having to pick my son up from karate, or finding paninis in the canteen.  So keep in mind I have a low threshold for that word.)  Not because of the silly certification it could bestow for US$832.50 (currently about £650), but because I loved their Systematic Programming Design series I took last year, and was looking forward to new content.  The first course in the MicroMasters series is How to Code: Simple Data, and it started in April.  I wanted to finish up this year’s university stuff before tackling it, so I jumped over there sometime last week.

For good or ill, the first two courses in the MicroMasters program are just the original three courses in the SPD series.  In the SPD series, they broke the 11 weeks up over three courses, and now they’re breaking them up over 2.  There appears to be a benefit if you do pay the optional amount for the certificates, in that you get contact time in the form of Q&A sessions with the staff, so you can ask for assistance understanding whatever is personally confounding you, and you get your final project marked by staff, too, so you’re not just going off of your own potentially flawed understanding of the material when grading your own work.  (“Mark yourself out of 10.”  “A million thousand bazillion.”  “Fair enough.”)  I don’t know that it’s worth $125, but it’s not worth nothing.  (You could buy more than 100 tacos for that.  Now tell me it’s worth it.)

Anyway, they won’t move onto the new material until August, when they apply Data Abstraction to Java.  This is good not because I care one way or the other about Java (I get as uptight about people debating programming languages used in computer science as the people who are doing the debating), but because I can see how to apply their techniques to Object Oriented Programming … Though, to be honest, it’s much easier to see after studying what I have over the last year.  Systematic Program Design isn’t OOP specific, but it is beautifully closely related.

This is just an update on my last post about maths prep for OU’s MST124 module.  Altogether I’ve given it about two and a half weeks of study and revision, and I feel completely confident with my level of maths going into MST124.

I think my breakthrough occurred when I decided that I probably should stop trying complex equations in my head or doodling on my screen with the mouse.  It was when I pulled out a pad of paper and a pen that it all slotted into place, and it turned out my brain hadn’t completely liquefied in the several decades since I’d left school; It was just super lazy.  Not a shocking realisation, then.

So I’m nearly back up to the level I was when I dropped out of high school, with exponential and logarithm manipulation added to my tool belt.  (Learning logarithms was way cool, but the Khan Academy model wasn’t set out in the most logical order.  It took going back to the beginning after I’d gotten halfway through and learned bits and pieces from other sites.)

I went back onto the OU’s Maths Choices MST124 diagnostic Are You Ready quiz last night, and this time ran away with full marks in less than 15 minutes.  A dramatic increase on the 40-something minutes it took last year for 70- or 80-something percent.  Still, that’s simply being able to crunch the numbers.  If they were to throw words like “justify” or “explain” I’d be reduced to the sludge in the bottom of my vegetable “crisper” in no time.  So I still have plenty to do this summer in terms of getting proofs down and maybe skipping a bit ahead so I’m not taken off guard.

When deciding between the MU123 and MST124 maths modules for my degree, I put a fair amount of weight on the diagnostic “Are you ready?” quiz for MST124.  It said my results were good, there were a few areas I should brush up on, but overall I should be just fine on it.

I won’t start the module until 7 October, so I’ll have to wait until then before I throw their pants doused with lighter fluid onto a telephone wire and chanting, “Burn, liar!  Burn!”

I just don’t know how prepared I really am.  See, the OU have opened up a “revise and refresh” website for MST124.  It’s amazing that they even do that.  It has diagnostic quizzes with typical questions one might encounter on various MU123 blocks.  Depending on how well you do on that, they have some cheat sheets for reminding you how to solve certain problems.  (It keeps referring me to read blocks from MU123 … Uh … probably not worth it to buy the books on eBay.)

When I do those, I perform a bit better than I did on the MST124 AYR quiz.  I note my weak areas, I study the sheets, and I do better.  But it kept feeling like it was only checking a very, very narrow section of maths at that level.

So I went to my original plan for MST124 preparation: Khan Academy!  (I can’t say enough good things about this site.  My older son enjoys it about as much as he enjoys Roblox.)  I’ve been working over there for about a week, now, shoring up as many weak spots as I can find, but that list keeps getting longer, and longer, and longer.  The site can hone in on your weaknesses the way painkiller commercials claim their product can.  And the areas of study can be very, very specific.  Like … “Sinusoidal models word problems“.  I have to decipher it before I can decide whether or not I know it and/or need it.  (I apparently do know it.  But good luck ever getting me to recognise it.)

They’re not that difficult to study, it’s just that there’s SO MANY OF THEM!  I’ve “mastered” something like 650 identified skills, and have more than 500 to go.  Granted, that’s for all the maths they can currently teach and evaluate on Khan Academy.  I won’t need anywhere near all of them by the time I start MST124.  But the skills can sometimes take an entire night.  I’ve got a hundred and thirtysomeodd days until the module starts, and a lot of those are on holiday.  In a lot of ways, the pre-study preparation feels harder than TU100 was.

Unlike TU100, though, I’m learning tons, not just practising.  And the practise is definitely necessary to get me into fighting shape again for the module.  And more practise.  And some more.  And it’s also fun.  But that part isn’t different from TU100.  I’ve really enjoyed my journey so far.

I won’t know until after I’m in the middle of it which was better for preparation: The OU MST124 preparation site, designed specifically for it, or Khan Academy, which is pretty much drinking from the fire hose.  Or Niagara Falls.  We’ll see how it goes.

One final bit for today: Results for TU100 will be in on 19 July.  My tutor will give us a cheeky heads-up if we passed or not before that, but nothing more.

With my (first draft) final assignment in the can long ago and myself recovered, I can put TU100 firmly in my rearview mirror, much like a fox run over when you’re late for the airport.  I only have to talk about it again when I get my results, which will take a while.  How did I do on my de facto EMA?  Well, let’s take a look at what it covers:

  • A four page report on concepts relating nominally to “appropriate technology” for different socioeconomic landscapes, but in reality it’s … any report ever.  I’ve definitely nailed the structure, speaking to the right audience, defining my terms, and referencing.  But it’s arbitrary and my confidence lacks any justifiable source.  In a worst-case scenario, I could lose 10 out of 30 marks, but realistically probably 5.
  • A 200 word snip from a job application cover letter.  These are essentially free points, so I’m expecting the full 10 marks, but maybe 8.
  • Sense activity, full 50 marks, ‘nough said.
  • Understanding and normalising relational databases.  The technical side of this I’m very confident with, so this is more about my ability to describe the process, and present information in an appropriate form (in this case some tables).  I’ve defined every technical term within an inch of its life.  Maybe I’ve missed something and I’ll miss 2 of the 21 marks available.
  • A task involving understanding the Data Protection Act 1998, and security and encryption.  This task is possibly the best marriage of its explicit and implicit goals, as the explicit goals mentioned are highly relevant, and the implicit goals of tailoring your message to your audience appear to be equally weighted.  I’m again unduly confident here, but we’ll hedge another 2 out of 19 marks available.
  • A page of maths and the creation of a spreadsheet, full 40 marks.
  • Argument mapping.  This one’s difficult, as there’s lots of moving parts.  There’s logic, there’s reading comprehension, there’s technical detailing … It’s specifically stated that there’s no one answer, but that’s whatever the nice version of a lie is.  A fib?  It’s a fib.  The structure and progression of the questions give the game away.  The worst part is that we’re analysing what appears to be an Italian text that’s been run through Google Translate.  I re-did this portion completely three times, so I’m not excessively proud of my chances.  Maybe 25 out of 30 marks.
  • Risk analysis and the data security CIA triad (mentioned briefly in a MOOC review roundup).  So here’s the problem: I think this one is really about presenting information in an easy to understand format.  I’ve therefore shot for the moon on this one and presented it in a non-standard but easy-to-understand format.  This could backfire like a Chevy in winter.  Worst case is maybe 6 out of 10 marks.  On the other hand, I love the irony of taking an unnecessary risk in a task about risk analysis, so I’m not changing it.

This leaves 185 marks in a worst-case scenario from 210 non-skills marks.  That’s 88%.  If we assume that I do similarly dismally on the 40 skills marks (which would be 35), that’s still comfortably in the distinction range.  How likely is my worst case scenario?  Unlikely.  Realistically, I would mark it at 93-95%.


So how do I feel about TU100?  I don’t feel overwhelmingly like it was a waste of my time, but it’s a waste of money.  That much outdated and poorly constructed material is worth maybe £500.  I had a good tutor and good support from other tutors, but not really in line with the amount of money which was spent.  It did, however, give me an excellent chance to practise my skills.  And remind me how much I hate group tasks.  It’s for the best that it’s coming to an end, and I hope they A) pull the plug on Sense, and B) stop telling people not to take Scratch courses ahead of the module if they use Scratch going forward.

And studying at the Open University?  It’s brilliant.  It’s perfectly suited to my lifestyle.  I’m glad I’m taking it slowly, as I hit quite a few personal challenges and had to keep scaling things back over and over, but I was consistently able to keep up with the work.  I’m quite happy with the study prep I did, as it worked well.  I know the rest will be harder than this year, but I’m really looking forward to the next short five years.


Onto the greener pastures of TM129 and MST124, part-time student finance loans for the next academic year opened sometime in the last few days, so that’s sorted.  Much quicker this year than last in many ways.


And that brings me to … The first year of this blog being complete!  And I’ve written a lot.  I have no idea of what I’ll write about during the summer this year, but I’ll find something to keep me busy and learning.  Certainly I’m going to tackle as much of maths as I can before MST124, and somehow I don’t think that OpenLearn is going to be of much help.

By the calendar’s reckoning, I still have five weeks of TU100 left.  By my sanity’s reckoning, I checked out about three weeks ago.  I’m going to split the difference and have everything wrapped up in about a week.

My poor sanity.  It just didn’t have what it takes.  It saw Block 5 Part 5 and Block 6, and it locked itself into a cage and started gibbering like a monkey and flinging … Well, it wasn’t happy.  TU100 gets progressively more condescending and less relevant as it goes on.  Session 1 of Block 5 Part 5 had such insultingly bad activities that it took me two weeks to swallow the bile and deal with it.

What’s wrong with the activities?  Much the same as what was wrong with OpenLearn’s Taking Your First Steps Into Higher Education.  I fear that asking for exploration but having “right” answers is going to be a theme with the OU.  By which, of course, I mean that the emperor is a kind and benevolent emperor, and his robes are as resplendant as he is wise.  And totally exist.  (Dissenting with the wisdom of the module isn’t popular with many tutors or fellow students.)

Block 6 wasn’t infuriating, for which I now rejoice.  (Yay.)  It was, however, boring and completely irrelevant.  I couldn’t even recognise it as belonging to the same module.  Session 5 is pretty much a travel blog from a trip to Nepal.  Without pictures of monkeys.  How do you write a travel blog from a trip to Nepal and you don’t include pictures of monkeys stealing wallets?

Anyhow, that’s the bad.  The great is that I’m done with the studying!  I’ll do a more proper wrap-up on that sometime next month, I expect, but for now, I want to rest for a long, long time.  But I’m going to finish up the last odds and ends of the final EMA/TMA06 first, which should be by the end of the week.  (Tutorials and tutorial-inspired rewites notwithstanding.)

My iCMA57 (the only one which contributes to the module results) came in at a 93%, and would have been higher if I’d followed my own advice about looking through the other iCMAs before hand.  It leaves my OCAS (Overall Continuous Assessment Score) at 97%, so I certainly can’t complain.  Well, clearly I can.  But not about that.  I’m really pleased with that, having come from where I came from.  Anyway, back to TMA06.

Ah, I love the smell of TMA due dates in the morning.  It smells like … Desperation.

This morning’s desperation is caused by the due date of TU100’s TMA05, which requires input from others to complete.  I hear there’s actual collaborative work going on in TM129, so this isn’t as bad as that, but it’s still enough to have some rocking back and forth and drooling.

So what’s going on?  What’s the big deal?  As mentioned previously, TMA05 requires us to create a video (or audio) presentation.  This is enough to get under most people’s skins, but they probably should have been prepared for it.  The more insidious part is that we have to offer feedback on two other presentations, and we have to evaluate the feedback given on our own presentation.  Which means that we’re at the mercy of other students to complete the assignment.

I love the impossible position educators are put in with this type of thing.  There’s no way out of it for them.  It’s the Circle of Strife:

Huh.  I thought that would end up being a circle.  Okay, it’s the Linear Sequence of Strife.  Yes, it’s unfair.  Yes, your performance will end up partially based on what others around you do or don’t do.  Educators can choose to set you up for failure in the real world by either not including group work, or by including it but not marking you down for other people’s suckitude.  Or they can help you get used to it early.

So what are you supposed to do?  Well, learn how to cope.  Here are some coping mechanisms I’ve seen used both in schools and work:

  • The Apprentice
    • With the Apprentice mechanism, you don’t worry so much about the overall end result.  In fact, the brighter the flames are in which it goes up, the less attention will be drawn to you.  As we’ve all learned by leaving the TV on when this show comes on, the plan here is simply to look for the nearest bus, and figure out which of the people around you is lightest, and therefore easiest to throw under it.
  • The Ostrich
    • Ostriches don’t actually stick their head in the sand.  That doesn’t fit my narrative, however, so Imma ignore it, and pretend they do.  You can likewise just stick your head in the sand, ignore the fact that everybody else is doing as much on the project as Simon Cowell’s girdles are to fool anyone, and just get your part done.
  • The Atlas
    • Time to take the entire project on your shoulders, and hope you don’t get squished
  • Save the Cheerleader, Save the Project
    • You could just try to rally everybody else into doing their part.  Good luck.  We’re all behind you.

My personal mechanism is the Facilitator.  I get my part done as early as humanly possible, and hope that makes things a bit easier for everybody else.  If they’re not waiting on me, it’s one less excuse they can kick their legs up and rest on.

In reality, you’re likely going to have to hope for the Tag Team.  This one holds out for the chance that there’s at least one other person on the project that’s in the same position.  Together, you start early, play the Cheerleader, take the whole thing on your shoulders, ignore what isn’t being done, and when all else (and the project) fails, you check your phone for bus schedules.

The Tag Team worked well for me this time.  I got the TMA in about two weeks ago after three or four of us all commented on each other’s presentations.  I’m expecting one or two points off for including a chart in landscape instead of portrait orientation, which someone has said got them marked down in a previous TMA, and probably two points off because my presentation expanded from the maximum allowed 90 seconds to 91 seconds when it was processed through the module’s transcoder.  So hopefully between 94 and 97 this time.  I’ll know in one or two weeks, and then I’ll post the presentation with my personal details scrubbed.


2017/3/31 Edit: I thought I’d have at least a week to redo my title page before posting up the presentation.  Nope!  I got my TMA back in just three days.  Clearly my tutor has gone a bit loopy from trying to get it all done so quickly, so I ended up with another generous full 100 marks.  I’ll take it!  As usual, it came with some great feedback for future reference.  I’ll discuss what the numbers look like now when I’m ready to move onto the de facto EMA.

This was my presentation.  As with the Shakespeare video linked above, that’s just my voice on the video, and not a speech synthesiser as was suggested in my feedback.  Heh.

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Please see acknowledgment credits for details of components used here with permission through various Creative Commons licenses.