I’m Breaking the Web: I’ve Come to Bury Feed2JS (maybe)

I’ve done my fair share of railing against entities that destroy web sites, be it Wikispaces, Storify, Google… today is my turn to be the reaper.

As far as I can tell, Feed2JS my long running web service that enabled ordinary humans to insert dynamic RSS feed content into web pages, is kaput. I’ve been unable to diagnose, but it seems to be an issue with cURL command inside the MagpieRSS parser library. This PHP code was released in 2004, so its startling it worked this long.

Screen shot of the Feed2JS web site "Using RSS Feeds in your web pages is just a cut and paste away"
2003-2019 Feed2JS.org

This all started in 2003 with a bit of hacking of an idea done first by David Carter-Todd in ASP, and first known as RSS2JS (here is the oldest snag Oct 2003 from the Wayback Machine). It predates thos blog, I have some early posts from May 2003 when I was first working on this.

I ran it for a decade on an Apple server at my office in Maricopa, but then it needed to move when I left my job there, and I had one volunteer take it one for a while (sorry I forget who and this is inside CogDog baseball).

The thing is the site has been running since 2013 on a server set up by a nice guy in Maryland named Brian Teller. I’ve been unable to reach him in any channels (yuck, I even slimed into LinkedIn); no response to emails, his twitter and facebook are gone. I don’t have ftp access to the server, so I cannot even post an update, or change the output to provide a message.

As of now, it means any web pages that include it will either have blank spots or just long stalls.

The thing is the domain renewal comes up on June 30. I was going to let it go, but maybe I will renew it and take the site back so I can post a proper post mortem. Just need to see if it will kill my hosting service!

15 years of free service is a pretty damn long web run.

I was really ready to just let it go and leave the tattered web, but it bothers me to do the thing I complain about– break the web. I’ve written much about the web being a fabric and we ought to take care of the tatters we weave.

So just in the process of writing this, I have decided to see what I can do about preserving the site, even if the code no longer works.

If anyone has the chops to help figure out the problems with the code (besides it being old and sloppy 1990s learning PHP code), grab a copy from GitHub. The test parser works, so it seems to be another issue, maybe with https feeds which were not much of a thing then.

Okay, no funeral today.

I will not be part of the web breaking.

Featured Image: Generated from the Custom Tombstone Maker edited to include the Feed2JS logo I made myself. Call it public domain!

A tombstone with engraved on it Feed2JS.org, 2003-2019, Could Not Parse Feeds Any More

Writer SPLOT: Escape from the WordPress Theme

It’s a work in progress, but check out this version of the TRU Writer SPLOT that is no longer tied to the original’s Radcliffe theme (hit the write menu item to try it).

All SPLOTs are single purpose tools, most built as WordPress themes stuffed with custom functionality… technically they are child themes that utilize an existing theme for the core site functions and appearance. Long ago, someone asked if they could be done as a plug-in, and I said “no” because of how much work they had to do- create back end admin options, generate and process form data, and present content out of the normal blog post scope.

Like often…

I decided to take this on again via a request from colleagues Daniel Villar and Lauren Heywood from Coventry University DMLL, who have made some of the most wide and varied use of SPLOTs.

This new site is not quite plugin yet, but what I have done is remove all of the functionality from the child theme templates, it’s all in code. This means, I was able to take the child theme, and apply it in a different parent, and It Works (as much as I could test so far).

These are the files in the TRU Writer SPLOT theme, there is functionality baked into header, footer, archive, and various page templates, and thus tied to the parent theme.

Director of files in the theme, 13 files plus 4 directories
Files in the TRU Writer Theme

The test version has moved everything into functions, so it has no dependence on the parent theme beyond rendering content.

Directory with 3 files and 3 directories
Files in the test theme

It was more than cut and paste code. The pages templates used to render the access code form and the form for writing had all the form elements and logic intertwined into the template (peek at it).

Now, the writing form is embedded into any normal page by adding this to the content:


This I knew was possible form all of the various WordPress form plugins out there. But still to work out the logic of the hidden author user account, required doing much more with WordPress hooks to do various redirects and checks before the content appears (template_redirect is my hook friend). I ran into endless duplicate header errors.

I end up checking a few things, there are query parameters sent to deal with the random link and the one to get the special edit link to send via email, but also it needs to identify if a page to be rendered is one of the two special ones with forms in them.

Previously I had done this by checking the page template (or worse, assuming that the pages were always /write and /desk). Now I have a function that looks for pages with the shortcodes used to render the forms ($pattern is either [writerdesk] or [writerform]). There are cases (the second optional parameter) where I need to return an array element for displaying these as a form, see below)

function truwriter_find_pages ( $pattern = '[]', $for_menu = false ) {
	/* find all pages with pattern passed (meant for finding desk and writing form 
	   pages based on shortcode passed                             */

	// get all pages
	$seekpages = get_pages(); 
	// if we are building a menu, insert the menu selector
	$foundpages = ($for_menu) ?  array(0 => 'Select Page') : array();
  	foreach ( $seekpages as $p ) {
  		if ( strpos( $p->post_content, $pattern ) !== false) {
  			$foundpages[$p->ID] = $p->post_title;
  	return ($foundpages);

I can also check the returned results, an empty array means no pages are using the shortcode. The plugin will create a simple page with the shortcodes if none exist.

But it also means that the pages are not limited to specific URLs – I even made this change in the regular version of TRU Writer. So you can create any page, and then it is selected as a theme option to identify it.

Both this new version and the standard TRU Writer now include a theme option to identify pages used for the two form pages.

But also to change was the way something published was rendered, as extra information is added in the SPLOT. In the original version, it’s just coded into the single.php template. To pull it out, we have to hook into the call for generating the_content to add info to the output.

// filter content on writing page so we do not submit the page content if form is submitted
add_filter( 'the_content', 'truwriter_mod_content' );
function truwriter_mod_content( $content ) {
	if ( is_single() && in_the_loop() && is_main_query() ) {
		global $post;
		// additional content for single views

		// add before content notice for previews		
		$precontent = ( is_preview() ) ? '<div class="notify"><span class="symbol icon-info"></span>This is a preview of your entry. Wwhen finished reviwing, <a href="#" onclick="self.close();return false;">close this window/tab</a> to return to the writing form. Then make any changes and click "Revise Draft" again or if it is ready, click <strong>Final Publish</strong>.</div>' : '';
		$postcontent = '';
		$wAuthor = get_post_meta( $post->ID, 'wAuthor', 1 );
		if ( truwriter_option('show_footer' ) ) {
		    $wFooter = get_post_meta( $post->ID, 'wFooter', 1 ); 
		    if ($wFooter) $postcontent .= '<p id="splotwriterfooter"><em>' . make_clickable( $wFooter ) . '</em></p>';
		$postcontent .= '<hr /><div id="splotwritermeta"><h3>' . truwriter_meta_title()  . '</h3><ul><li><span class="metalabel">Author:</span> ' . $wAuthor . '</li>
	<li><span class="metalabel">Published:</span> ' . get_the_time( get_option('date_format'), $post->ID ) . '</li>
	<li><span class="metalabel">Word Count:</span> ' . str_word_count( get_the_content()) . '</li>';
	// output estimated reading time if we are using plugin
	$postcontent .=  truwriter_get_reading_time('<li><span class="metalabel">Reading time:</span>', '</li>');

		// show the request edit link button if they have provided an email and post is published
		if ( get_post_meta( $post->ID, 'wEmail', 1 ) and get_post_status() == 'publish' ) {
			$postcontent .= '<li><span class="metalabel">Edit Link:</span> <em>(emailed to author)</em> <a href="#" id="getEditLink" class="pretty-button pretty-button-blue" data-widurl="' . get_bloginfo('url') . '/get-edit-link/' .   $post->ID . '">Request Now</a> <span id="getEditLinkResponse" class="writenew"></span></li>';
		if ( truwriter_option( 'use_cc' ) != 'none' ) {					
			$postcontent .= '<li><span class="metalabel">Rights: </span>';

			// get the license code, either define for site or post meta for user assigned						
			$cc_code = ( truwriter_option( 'use_cc' ) == 'site') ? truwriter_option( 'cc_site' ) : get_post_meta($post->ID, 'wLicense', true);
			$postcontent .= truwriter_license_html( $cc_code, $wAuthor, get_the_time( "Y", $post->ID ) ) . '</li>';
	if ( truwriter_option('show_tweet_button') ) {
			$postcontent .= '<li><span class="metalabel">Share: </span> <a href="https://twitter.com/share" class="twitter-share-button" data-hashtags="' . truwriter_option( 'hashtags' ) . '" 
<a href="https://twitter.com/share" class="twitter-share-button" data-text="' . addslashes(get_the_title()) . ' by ' .  $wAuthor . '" data-hashtags="' . truwriter_option( 'hashtags' ) . '" data-dnt="true">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?\'http\':\'https\';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+\'://platform.twitter.com/widgets.js\';fjs.parentNode.insertBefore(js,fjs);}}(document, \'script\', \'twitter-wjs\');</script></li>';

		$postcontent .= '</ul></div>';
		return $precontent . $content . $postcontent;

There is a bit of content that is prepended when we are doing a preview (a notice shown above), and then extra metadata generated by the SPLOT that comes after.

Screen shot of a published item showing the elements that are added to the output

The formatting is kept simple, but everything has CSS IDs and classes to customize it via the customizer.

So how does this become a plugin?

Apply more elbow grease.

The code pretty much can work as is. Some changes need to happen to change the theme options to plugin ones, and if I really get my act together, these should go into a Customizer interface rather than the theme admin screen I’ve used for ever. The output for the shortcodes is a lot of stringing together bits of text, it might be better broken into smaller modular functions. And it will need some more customizer options to manage some appearance issues of the forms (background color, etc).

So it’s got more work ahead. But this pretty much shows that SPLOT can work independent of the parent theme. Give it a try and let me know how it goes.

The original TRU Writer theme is still viable, and updates will happen to both going forward. Already, the work to get this demo going has flowed back into the main theme, simplifying reliance on page templates, and adding some better theme options. I doubt I will do this to all SPLOTs, this was Just To See If I Could

I doubt few readers, if any are still here, can really unravel what the bleep I am talking about. Much of this is my own mental noting. What people often did before twitter threads.

And while I think SPLOTs might have had a long run, almost 5 years, just when I start to think no one cares, come across people using them.

So SPLOT Plissken has escaped the Theme!

Featured Image: Modified one frame of YouTube video of Blick Flick’s video assignment title sequence.

One Day / Two Online Presentations

Of all days, yesterday, happened as a convergence of doing presentations at two different conferences. Fortunately, I was able to do all from the comfort of home as they were online ones.

In my late morning I did a session at the 2019 Technology, Colleges and Community (TCC) conference, which amazingly is the 24th one, and still organized by the same ringleaders, Bert Kimura and Curtis Ho, as the first one.

I went retro (surprise) for Publishing and Building Communities Around Digital Images: What’s Happened in 15 Years as a bit of re-visit of my first TCC presentation in 2004 (which was the same title up to the colon).

Back in 2004 I did presented at TCC on the idea of blogging and teaching around collections of photographs (http://mcli.cogdogblog.com/show/tcc04/photoblog/) then a thing called “photoblogging”. How far have we come with these ideas in 15 years? The photos, the camera tools, the web sites we have are much improved. But what are we doing, can we do with maybe the most accessible technology tool, once most of us have in our pockets? How can images be used to communicate via metaphor? This session will explore the use of photographs in 2018 as a field observation tool, a creative/expressive outlet, forms of protest, and the ever spreading meme.

Participants will participate in the kinds of photo scavenger hunts and daily challenges I use in media classes, and will be able to contribute/share/discuss photos directly to a “SPLOT” site (e.g one using this available WordPress theme https://github.com/cogdog/tru-collector)

I started with some setting the scene of 2004 (flip phones were the cutting edge with mayb 1 Megapixel cameras, iPod classic just out, no YouTube, and some new site called thefacebook.com). My interest came from the early blog years setting excitement for easy online publishing and finding an art teacher at the Maricopa Community Colleges who was experimenting with having his photography students share images in an online site called “Buzznet”. I looked a bit at another one called Fotolog.net where people were limited to posting one photo per day. So thought maybe there was something to a form of blogging than center more on the image than text.

There was a thing then called “moblogging” (blogging from mobile device), and posting to these sites via email. And just before I presented in April 2004, I had learned about and joined a brand new site in March called “flickr” (about the only site in my original presentation that still exists and serves its original purpose).

In yesterday’s talk I went through my interest in creativity through photos as storytelling and projects where community happened- the photo a day group in flickr originally inspired by D’Arcy Norman in 2007, Five Card flickr stories, pechaflickr, the Daily Shoot becoming the DS106 Daily Create (still going strong after some 2600 dailies since 2012), and the photo safari and sharing photo tips activities of DS106.

And ending soundly on a SPLOT (surprise) I set up at http://photos.cogdogblog.com I had started the presentation by asking participants to email a photo of where they were sitting to show “View from Where I Sit” to participate in the conference (a variation of an activity my Maricopa colleague Donna Rebadow did in text only online classes in pre-web days).

Web site with images representing photos people have shared to this site.

As I was preparing this talk, it did strike me how the TRU Collector SPLOT did provide pretty much the capabilities of those 2004 photo sharing sites (easy of publishing content centered on media, categories/tags to organize, search, archiving, syndication) but in a site I could own/manage, that would not years later end of a dead link or a site for celebrity gossip.

The presentation and lots of related links are in my Best of Show collection.

The second presentation yesterday was for PressEdConf19 the WordPress in Education twitter-based conference, a format I find extremely refreshing compared to the typical fare. Each presenter/keynote has a 20 minute slot for tweeting their slides/ideas/ comments. You get a lot out of it, whether you see it live or later, much more that watching someone in the front of the room click through slides.

I presented last year on that too frequently blogged topic, so this year aimed for sharing some small but hopefully useful, non-code requiring, tips for WordPress. The pitch for Not So Stupid WordPress Tricks (none that involve writing code) was:

There are plenty “Top 50” WordPress tricks listicles, this is not one. Maybe. From my own banging on WordPress since 2005 comes a collection of frequently used techniques, plugins, and sleight of hand put into play for educational sites. No code is touched in this production.

Yes, this was a bit of an homage to my TV watching days of David Letterman.

A TV show host stands middle of stage while a dog standing on hind legs (with the head of my own dog superimposed) pushed another dog in a toy car, that dog with the WordPress logo inserted on its head)

SPLOTs did make it the mix, as I decided each of my tweets would link to a more expanded version of the trick as one “slide” in a SPLOTPoint deck.

All the tweets were scheduled in Tweetdeck. The thing I like about this way of presenting is that all the work is done up front in the prep; there is no focus during the talk of the performance or standing in front of a group. You can almost sit back and engage like the audience.

I had to do one extra thing during the talk since I wanted to embed each tweet in the WordPress post that described one of the tricks.

With scheduled tweets, you do not know the URL for embedding until it publishes, so before the talk, each “slide” (a WordPress post) had an “insert tweet here” text. As soon as it appeared in the published column of TweetDeck, I copied the URL, and updated the WordPress post that it referenced (see an example with the tweet added).

I have all my materials, and the tweets organized together, over at the same site as my other presentations.

It was worthy during the day as I was able to follow maybe 6 other talks in the midst of doing other things. If you check the conference schedule, you will find that the tireless conference organizers have curated and added the tweets for each as a Twitter Moment. This way, the conference itself becomes an open resource.

Both of these presentations were done as support for long time colleagues who organize them- Bert Kimura at TCC, who drew me into their circle in a meeting at a conference in 2003, and Pat Lockley and Natalie Rafferty who have done a beyond heroic effort to make #PressEdConf a reality.

Two for one, and no travel involved. Okeh!

Featured Image: Re-edit of text and graphics of a Larry Williams and Johnny Watson album cover found at discogs.

Silly Media Offered at 24th TCC Conference Teaser Session

Yesterday I had the fun opportunity to talk about attributed and possibly [semi] serious use of the kinds of media people see/share all the time.

Animated GIF man shaking head side to side with text above "Do We Need to Explain What this is?"

This session was a free pre-conference teaser for the 24th annual Teaching, Colleges and Community (YCC) conference.

That’s right, 24… and it’s still being organized by the very people who did the first one, Bert Kimura and Curtis Ho from the University of Hawaii. Maybe the best little free online conference you have never heard of.

Before I go silly, I have to do my web paleontology act to dial back to a League for Innovation conference in 2003 where this smiling man named Bert asked to talk to me about the conference. At that time, the acronym as aimed at Community Colleges, and as I was doing instructional technology work at the Maricopa Community Colleges, he gently pitched the idea of getting Maricopa to participate at an institutional level. This meant I got my office to pay a single registration fee, and any employee could take part of the online conference at no cost to them. It was a fabulous PD opportunity to offer, and we got to joke about sending so many people to a conference in Hawaii (meaning they did it from their office).

Since then…

I decided in December, when the call for presentations for this year’s TCC went out, to submit a presentation- it’s actually going to be a revisit of the 2004 one and see where we have gone in 15 years in terms of communicating with shared photos.

So… when Bert and Curtis approached me last month asking if I would do the free pre-conference session they offer in March, I of course had to say yes. They said I could do the same talk, and I of course declined that offer, and pitched my silly idea.

The interest in “doing more” with media we see as entertainment (or worse) in social media goes back of course to many things DS106, but more to the studio sessions we did for the UDG Agora project- Brian Lamb led one on Meme Media: Attention-Grabbing Images And Animated Gifs and I did one one on Making Short Form Videos. It’s been a part of Networked Narratives (2017-2019). And I did a first run of Affordances of Silly Media for a group of mostly community center leaders in Melbourne Australia during my ISS Institute fellowship there in 2017.

I had lots to draw on. The platform for TCC was Adobe Connect, a platform I have not seen since leaving NMC (before 2011 then). Honestly, it’s not changed much since. I had to provide “slides” for them to upload, which of course meant, none of the GIFs moved, I just had to describe them moving and provide links (and twice during my talk Adobe Connect went down in a beach ball spiral of doom).

I thought I had packed way too much in, the Keynote presentation was 25Mb for 65 slides, many meant for fast flipping. I must have talked fast, as I got through on about 40 minutes.

We had a great audience, with folks I could see during intros from across the US, Canada, Japan, Greece (where it was 2am apparently), and even a colleague from Canberra who saw me present there in 2007.

Anyhow, I have the slides and a whole bunch of links (a lot) over in my Presentation show room

A meme image of "Grandma discovers the internet" with text "This can be serious"

And a recording of the silliness is available on the conference web site.

At least four people took up the challenge during the talk to make meme images about TCC; thanks so much to the always eager and excited Cynthia Cologne for making and sharing them.

And thanks of course to Bert and Curtis and his TCC team plus Rebecca and John Walber from Learning Times for helping run the show.

If you are looking for a great online conference experience, check out TCC in April. The theme this year is “Sustainable Learning, Accessible Technologies, & Diverse Contexts.”

Technology, Colleges and Community (TCC), is a worldwide online conference attended by university and college personnel including faculty, research associates, academic support staff, counselors, student services personnel, students, and administrators.

Join our 24th edition of this annual event to share your expertise, experiences, and knowledge relevant to the use of information technology in learning, teaching, innovation, and academic services. This event is very helpful and “friendly” to novices. It provides you with a strong foundation about teaching and learning with modern technologies.

Featured Image: TCC2019 Meme made at imgflip using the Distracted Boyfriend pic.