Am major component to the UDG Agora Project is the Challenge Bank I put into place… and after two weeks of intense use for our face to face sessions in Guadalajara, I am quivering in relief that it worked w/o going up in flames.
It got close to 37,000 accesses in that time frame, a peak of 6000 on one day:
There are over 2000 participant responses to the challenge activities.
And (gulp) it was only very lightly tested prior to use. This is not from your textbook lesson on software design.
The “Frankenstein Nod” is a bit of my own joke at my coding capability and how I ended up bolting on new functionality to what was already present. I thought of it since the Bank has its roots in DS106, and Frankenstein was my very first GIF done in December 2010 (before the DS106 Assignment Bank existed)
It Starts With DS106 (of course)
To back up, the DS106 Open Assignment Bank, brainstormed in the early days of the first open DS106, and executed amazingly by Martha Burtis, is to me the essence of what makes DS06 different from everything else. It gives participants a means to choose assignments in different media categories (rather than everyone marching to the beat of one syllabus), to create their own for others to do. When participants blogged their responses to an assignment, the use of dedicated tags would make those responses show up on the original assignment, giving a set of examples for people to explore. Paul Stacey has described it as “a highly innovative pedagogical approach to assignments”.
The premise of it was that it fed off of the Feed WordPress blog syndication that was already populating DS106, Martha’s genius was then doing a second syndication to the Assignment Bank site. I did add a small form to the DS106 site so people could add a response if they were not in the syndication flow.
I made additions to the site functionality during my UMW stint in 2012, but it truly was coded specifically for that course. I had dreams that took maybe another year to happen to turn it into something slightly more generic, that would allow others to create their own “Banks” of any kind of thing.
The DS106 Assignment Bank Theme
It is available as a WordPress Child Theme of a Basic Bootstrap Theme, available on github. The idea is that once installed, you have a bunch of admin options to configure how it operates, what kinds of things it collects, e.g. that it could be customized without coding. In its lingo, it is a bank of “Things” where things might be assignments, challenges, recipes, etc. One creates “Types” of things, and populates it was those things.
In theory, it has the capability to work like DS106 through a Feed wordpress hub, either external like DS106 or on the Bank itself.
I have quite a few blog posts about getting it to that first functional version. So far the most successful implementation has been by Karen Fasimpaur and Brad for the CLMOOC Make Bank and I was pleased to find this week that Thom Cochrane at Auckland University of Technology has a version running as a Mobile Social Media Learning Technologies Project Bank.
Bolt-Ons for the UDG Agora Challenge Bank
I have been doing heavy modifications to the theme since May 2015 in preparation for the project at UdG. When Tannis described to me the concept of the sessions built around hands on “studios” where participants were offered different challenges, I suggested the Assignment Bank theme as an option. On our visit in April 2015, I did have a basic mockup of the last version.
A significant difference is that we were not going to be having the participants publish their work on their own blogs, and given their activities were going to be done mostly in iPads, I saw an opportunity to add a new option to the system. In the previous versions, if you added a response via a form, it was simple unformatted text and a link.
I was convinced (largely after working on the TRU Writer SPLOT) I could add a rich text editor that would allow responses to be published on the site, with formatting and embedded media. This is now an option in the admin area:
If the option for linked examples is set to “yes, links go to entry on the bank site”, clicking the button to add a response yields a new kind of form:

Form to add a response to a UdG Challenge
There is a lot going on here, you might be better off going to our demo challenge set up to give people practice with the form – click the “Add a Response” button in bottom left.
Talk about challenges! Building this form. First of all, once people submit something, because they are not logged in any way to the site, there is no way for them to edit what they sent. So the new form has a whole system built in (after verifying the form info) to provide a Preview. This was pretty tricky, it is all done with client side JavaScript to generate a mockup of the preview in an overlay
It was just a few days I figured out how to get the URLs WordPress can autoembed to get converted into their auto embedded code, when the form is processed, the text area content is sent through this function:
function oembed_filter( $str ) { // filters text for URLs WP can autoembed, and returns with proper embed code // lifted somewhat from oembed-in-comments plugin global $wp_embed; // Automatic discovery would be a security risk, safety first add_filter( 'embed_oembed_discover', '__return_false', 999 ); $str = $wp_embed->autoembed( $str ); // ...but don't break your posts if you use it remove_filter( 'embed_oembed_discover', '__return_false', 999 ); return $str; }
And when saved, it looks something like this.
The other thing added to the system is an option to have a field on the submissions for people to enter their twitter name as an ID string- it can be not used, made optional, or required:
This was my crazy idea. If people could create a twitter account (they do not evne need to tweet), it becomes a unique name. So when saved, all responses are also tagged with tags like @cogdog — and this leads to be able to generate a URL that will list all work submitted to the bank– http://udg.theagoraonline.net/bank/exampletags/@cogdog… and I could build a “leaderboard” to show everyone’s effort.
This is just a page that uses some custom shortcodes I developed, sometimes used on the sidebar to show the top X responders, as well as tracking through the Creation form who made new challenges. It was rather easy after finding the get_tags or get_terms functions could be passed a name__like parameter so it looked for taxonomy items that starts with an “@”
/* ----- shortcode to generate lists of top contributors -------- */ add_shortcode("bankleaders", "bank106_leaders"); function bank106_leaders ( $atts ) { // return a list of the top responders to dailies // get the value of any passed attributes to our function // we want a number of results we should return (0=all) // and an indicator if we are looking for responders (hashtag taxonony) or contributors (tag tax) extract( shortcode_atts( array( "number" => 0, "type" => 'responders' , "exclude" => ""), $atts ) ); // Arguments to search hashtag terms // search for @ in order of highest frequency $args = array( 'number' => $number, 'orderby' => 'count', 'order' => 'DESC', 'exclude' => $exclude, 'name__like' => '@' ); if ( $type == 'contributors') { // search for terms in the custom taxonomy for regular tags $terms = get_tags( $args ); $taxpath = 'tag'; } else { // search for terms in the custom taxonomy for response tags $terms = get_terms('exampletags', $args ); $taxpath = 'exampletags'; } $out = ''; // here come the leaders! foreach ( $terms as $term) { $out .= '
'; // here ya go! return ($out); }- slug . '">' . $term->name . ' (' . $term->count . ')
'; } $out .= '
Adding on the Fly
It was a lot to ask our participants to deal with this FrankenForm, especially on *#^#ing iPads. They did not flinch.
One issue came up quickly; a number of the Challenges did nto call for participants to have a URL to link to, they were just composed like a reflective blog post or a group discussion report. So late one night I modified the form that if they put a “#” in the URL field, the form would not demand a URL and when published, the example box would be empty.
The next one came up because we had them work in groups, how to give other group members co-author credit? I devised a way to do this by letting them add additional twitter names as tags. Not ideal, but it worked. Later I had to add code to deal with the fact that people will not always remember to separate tags by commas, so now it will do space or comma delimited tags.
When You Add More Parts to the Machine
My method of adding features is that it should never change the way a previous version of the theme worked; so any new option has to have a default that it is not present or the same as the old. I do not want to break any pre-existing sites (even if there only 5 of them).
That is pretty easy with the method I use for the admin options, based on the code by Aliso the Geek, all options added to the site have a default setting.
The other thing is my post type structure is getting a tad convoluted because I use the same structure for Responses/Examples (things added as an example of doing a Challenge) and Resources/Tutorials. This goes back to the first versions, all of these had the same structure – title, link, blurb, creator name. They are designated different by the Categories applied. But now that I have some Responses that have more options, and can be long HTML content, the formats are probably it best served sitting in the same data type (it makes for a lot of testing for type of content).
But all approaches I saw for splitting them into different structures, set up problems to migrate old sites and a lot of nested code already in place.
So I shrugged and said, leave the scotch tape on.
Cosmetics and Under the Hood
I made so many changes to layouts I cannot remember- the previous versions were using an older version of the WP-Bootstrap theme, and the most recent/last one uses a lot of nifty formatting bit (Components and http://getbootstrap.com/css/) that made the format much cleaner.
Some will worry because the WP-Bootstrap is no longer being updated, but it seems to be solid for now, until there are major Bootstrap updates, and even that might not demand a big change.
I’ve got a lot of bits under the hood to be able to embed media, and to make the embedded players responsive and stuff to populate the twitter buttons and finally (after UdG) some help links for the forms and…
What Now Dr Bankenstein?
This is more of a summary of te work than an explanation, and even with rewrites for the new features, the documentation is likely five whacksocks too big.
I can set up these sites pretty easy, because my nose has been in the code a long time; I do not know how crazy it will be for someone else to do it. I am sure there is a good 10% or more I have not explained well in the docs. Maybe it means more built in work for me if I am about the only one who can use my code.
But it does bring home the point how different it is to build something “just to get it working” my usual approach, and how to build more or less a system that someone else might be able to use without my intervention.
And that will be the test. I offer no promises that my Frankencode will work for anyone else, but I will do what I can to sew up my own poor seams and welding.
But for now, it seems to be flexing like a normal arm! You are free to explore the UdG Challenge Bank to see more of a thriving Bankenstein.
Top / Featured Image Credit: My own remix of Classic Comics No 26 Frankenstein 2.JPG found as public domain in Wikimedia Commons. I have to say the terms of use is so dense I do not see how any human being can understand WTF is really public:
This work is in the public domain because it was published in the United States between 1923 and 1963 and although there may or may not have been a copyright notice, the copyright was not renewed. Unless its author has been dead for the required period, it is copyrighted in the countries or areas that do not apply the rule of the shorter term for US works, such as Canada (50 pma), Mainland China (50 pma, not Hong Kong or Macao), Germany (70 pma), Mexico (100 pma), Switzerland (70 pma), and other countries with individual treaties. See Commons:Hirtle chart for further explanation.