Weekly Web Harvest for 2019-01-13

  • Wrest control from a snooping smart speaker with this teachable ‘parasite’ | TechCrunch
    “We looked at how cordyceps fungus and viruses can appropriate and control insects to fulfill their own agendas and were inspired to create our own parasite for smart home systems,” explain Karmann and Knudsen in a write-up of the project here. “Therefore we started Project Alias to demonstrate how maker-culture can be used to redefine our relationship with smart home technologies, by delegating more power from the designers to the end users of the products.”
  • Elad Blog: Interesting Markets: 2019 Edition
    Just as there was a prior prosumer wave as part of IT productivity 1.0, we are experiencing a new “devsumer” wave, where consumers are more likely to take on lighter versions of developer-like work and products.

    A number of products have emerged that allow people to build simple software applications, or to use templated applications for their own work flow or productivity. You can think of this as taking a SQL database or excel spreadsheet and turning it into an app platform. These companies include Airtable and, in a vertical way specific to internal tools, Retool.

    In a different market segment, Notion and Coda are focused on the future of docs & productivity software, while other companies, such as Zapier and IFTTT allow you to simply stitch together APIs into workflows. There is the old saying that money is made by either bundling or unbundling products or services. Devsumer companies are virtually re-bundling disparate productivity tools into single companies.

  • The Kids (Who Use Tech) Seem to Be All Right – Scientific American
    Technology use tilts the needle less than half a percent away from feeling emotionally sound. For context, eating potatoes is associated with nearly the same degree of effect and wearing glasses has a more negative impact on adolescent mental health.
  • RIBOCA review: A disturbingly tangible Anthropocene – We Make Money Not Art
    In October 2012, the artist selected a lone tree alongside a dyke of the Rhine, in the Ruhr area, one of the most heavily industrial regions of Europe. Once the first leaves began to fall in early autumn, he and his team collected them, preserved them, painted them and then re-attached them to the tree using a fine wire and a mechanical cherry-picker. This painstaking task continued until mid-November, by which time the tree had shed all of its foliage and the leaves had all been reattached.
  • Dropgangs, or the future of darknet markets • Opaque Link
    The other major change is the use of “dead drops” instead of the postal system which has proven vulnerable to tracking and interception. Now, goods are hidden in publicly accessible places like parks and the location is given to the customer on purchase.

    geocaching for criminals ????

Gravity Forms Registration – Add User to Multiple Sites

You’ve got a scenario where someone is signing up to multisite via Gravity Forms’ user registration plugin. The following function will automatically add them to as many additional sites as you’d like.

add_action( 'gform_user_registered', 'many_site_registration_save', 10, 3 );

function many_site_registration_save( $user_id, $feed, $entry ) {
	$sites = array(25,26,27,28); //the IDs of the sites you want the user added to
	foreach ($sites as $site) {
		add_user_to_blog($site, $user_id, 'author'); //the last variable is the desired role for the user

Weekly Web Harvest for 2019-01-06

  • Programming Sucks
    Also, the bridge was designed as a suspension bridge, but nobody actually knew how to build a suspension bridge, so they got halfway through it and then just added extra support columns to keep the thing standing, but they left the suspension cables because they’re still sort of holding up parts of the bridge. Nobody knows which parts, but everybody’s pretty sure they’re important parts.


    This is what it is to learn programming. You get to know your useful tools, then you look around, and there are some handy new tools nearby and those tools show you the bottomless horror that was always right next to your bed.


    Remember that stuff about crazy people and bad code? The internet is that except it’s literally a billion times worse. Websites that are glorified shopping carts with maybe three dynamic pages are maintained by teams of people around the clock, because the truth is everything is breaking all the time, everywhere, for everyone. Right now someone who works for Facebook is getting tens of thousands of error messages and frantically trying to find the problem before the whole charade collapses. There’s a team at a Google office that hasn’t slept in three days. Somewhere there’s a database programmer surrounded by empty Mountain Dew bottles whose husband thinks she’s dead. And if these people stop, the world burns.

  • The Revenge of the Intuitive | WIRED
    But now I’m struck by the insidious, computer-driven tendency to take things out of the domain of muscular activity and put them into the domain of mental activity. This transfer is not paying off.
  • This Workplace Is a Family Now, Dammit – McSweeney’s Internet Tendency
    “We’re so glad you joined the family at this underfunded public school. Remember, you’re just like a mother or father figure to these kids. You teach them, take care of them, feed them, and oh yeah — take a bullet for them, even though your salary puts you right on the poverty line for this area. We’re just your typical traditional family that preys on each other’s altruism, and could be invaded unexpectedly at any minute by a crazed relative with a restraining order. Anyway, have a nut-free brownie!”

Show Posts in Same Category on Gravity Forms Post Creation

The goal here is to have someone create some content in a particular category (using Gravity Forms) and then end up seeing content from other people that is in that same category.

There are lots of ways to do this but this in a simple and dynamic way. It has the added benefit of requiring no coding knowledge. It does rely on the Display Posts plugin and Gravity Forms.

View of the Gravity Form  Confirmation Text display.

This is all it takes to show content from the same category in the Text confirmation display area. Sure you could also redirect to a category page but this gives you the ability to customize quite a bit more. I can use offset=”1″ to omit the post the person just submitted. I could go father and add/display only posts that are also tagged “awesome.” I could include excerpts, featured images etc. Nice and easy but lots of options.

Hey you submitted something in the {Post Category:2} category. You should see more stuff in the {Post Category:2} below.

(pretend there's a square bracket here)display-posts category="{Post Category:2}" offset="1" ]

Weekly Web Harvest for 2018-12-30

  • What’s Next for Hack Education
    I am hoping that the shift away from compiling all the goings-on for that weekly news round-up will give me more time to think deeply and critically about education and technology, instead of perpetually being enraged by how many terrible and silly things are marketed as “solutions” by folks who just want to sell a product or service – some aware, some unaware that their very well-funded load of futurist bullshit is pretty damn dystopian.

    —best wishes to Audrey as I couldn’t do more than skim those weekly round-ups because I found them so deeply depressing

  • The Chaos – Gerard Nolst Trenité
    classic English poem containing about 800 of the worst irregularities in English spelling and pronunciation.
  • Why Data Is Never Raw – The New Atlantis
    “Raw data is both an oxymoron and a bad idea; to the contrary, data should be cooked with care.” “Raw” carries a sense of natural or untouched, while “cooked” suggests the result of cognitive processes. But data is always the product of cognitive, cultural, and institutional processes that determine what to collect and how to collect it. In this sense, “raw data” is indeed a contradiction in terms. In the ordinary use of the term “raw data,” “raw” signifies that no processing was performed following data collection, but the term obscures the various forms of processing that necessarily occur before data collection.
  • Microsoft/jericho: A learning environment for Interactive Fiction games.
    Jericho is an environment that connects learning agents with interactive fiction games. Jericho uses Frotz and Ztools to provide a fast, python-based interface to Z-machine games.
  • Wielding Rocks and Knives, Arizonans Attack Self-Driving Cars – The New York Times
    “They didn’t ask us if we wanted to be part of their beta test,”

Gravity Forms + Mermaid JS = Decision Flowcharts

A flowchart that was created by filling out a Gravity Form.

I was building something in JSPlumb the other day1 and it prompted Tim to ask if we could build flowcharts based on survey responses so that respondents could see their choices in context. I thought we could and it led to this simple example2 that I think will have lots of interesting and broad applications down the road.

This is one of those things that is halfway to an actual answer. It gives you the foundation to build specific things pretty quickly without a lot of technical knowledge but it does require attention to detail and understanding some logical3 writing patterns. My semi-coding audience may be mostly in my mind but it works for me and maybe for our ALT Lab R+D group. If this ends up expanding well, it’s possible Jeff will make it into a more substantial solution plugin like he’s done so well with a number of other things that started out this way.

Foundational Elements

This uses Gravity Forms and a little plugin I made to add the Mermaid css and js to posts. The plugin also adds a little content filter to add the data to WordPress without it getting messed up by the editor.

I went back and forth on which way I’d create the flowcharts. I opted for Mermaid because I though the semi-coding syntax was more approachable and handled most of the scenarios I could imagine being desired without adding a huge technical overhead.

#1 – Building the Flowchart

First, I wanted to build the generic flowchart. Using Mermaid that’s pretty pleasant. You can see the whole CodePen example here but the main piece is below. There are six questions with the connections between them and the connection labels below them. I thought I could indicated choices by bolding the lines (replacing the double dash with a double equals sign). You can see that in A==Yes==>B and B==Yes==>D.

graph TB
A("Do you think online service
learning is right for you?")
B("Do you have time to design
a service learning component?")
C("What is the civic or public purpose of your discipline?
How do you teach that without service learning?")
D("Do you have departmental or school
support to plan and implement service learning?")
E["Are you willing to be a trailblazer?"]
F["What type of service learning to you want to plan?"]


Integrating Gravity Form Choices

Now what I need to do was make sure that the choices ended up reflected in data that builds the flowchart. This looks more complex than it really is. You can download the example form and import it to your Gravity Forms if that helps.

First, we’re going to store the data in a custom field named ‘mermaid’ and then we are going to integrate some Gravity Forms conditional shortcodes in the content template option that is such a great part of Gravity Forms.

The initial piece of Mermaid templating will be the same no matter what. It builds our boxes and adds the question text. I added some line breaks to make things a bit easier to read.

graph TB
A("Do you think online service
learning is right for you?")
B("Do you have time to design
a service learning component?")
C("What is the civic or public purpose of your discipline?
How do you teach that without service learning?")
D("Do you have departmental or school
support to plan and implement service learning?")
E["Are you willing to be a trailblazer?"]
F["What type of service learning do you want to plan?
{What type and method of service learning best fit your course? (Check all that apply):11}"]

Now we have to figure out what the survey responses are and bold things if they’ve been chosen. We have three possible states, yes, no, or neither option was selected. You can see those three options (in that order) below. The merge_tag is the question number and the value element is the response.

The whole piece is below. You can see that the details matter but it’s closer to HTML or markdown than it is coding. My fear is that it makes real programming people shut down because it’s so verbose and it intimidates non-programmers because it looks like programming.

graph TB
A("Do you think online service
learning is right for you?")
B("Do you have time to design
a service learning component?")
C("What is the civic or public purpose of your discipline?
How do you teach that without service learning?")
D("Do you have departmental or school
support to plan and implement service learning?")
E["Are you willing to be a trailblazer?"]
F["What type of service learning do you want to plan?
{What type and method of service learning best fit your course? (Check all that apply):11}"]

The plugin portion is on Github but I’ll break it down quickly below using the inline comments. One nice tweak is having the Gravity Form automatically redirect the person submitting the form to the post they just created.

function mermaid_load_scripts(){
    wp_enqueue_style( 'mermaid-css', 'https://cdnjs.cloudflare.com/ajax/libs/mermaid/6.0.0/mermaid.css' );
    wp_enqueue_script('mermaid-js', 'https://cdnjs.cloudflare.com/ajax/libs/mermaid/6.0.0/mermaid.js', null, 1, true);
    wp_enqueue_script('mermaid-basic',  plugin_dir_url( __FILE__ ) . 'js/mermaid-basic.js', 'mermaid-js', 1, true);
add_action('wp_enqueue_scripts', 'mermaid_load_scripts');

//adds mermaid custom field data above the post if the custom field exists
add_filter( 'the_content', 'write_mermaid_data' );  
 function write_mermaid_data( $content ) { 
    $post_id = get_the_ID(); 
    if (get_post_meta($post_id, 'mermaid', true)) {
        $mermaid_data = get_post_meta($post_id, 'mermaid', true);
        $content =  '<div class="mermaid">' . $mermaid_data . '</div>' . $content; // puts it above content . . . .         
    return $content;

//automatically takes form submitter to the post the form just made
add_action('gform_after_submission', 'alt_gform_redirect_on_post', 10, 2);
function alt_gform_redirect_on_post($entry, $form) {
    $post_id = $entry['post_id'];
    $url = get_site_url() . "/?p=" . $post_id;

Future Work

We can now spin up other forms like this pretty quickly. The reflection on the choices will be where things get more interesting and with more complex choice structures there will be more to analyze. We can also just write flowcharts in the Mermaid syntax which is a nice option for certain disciplines. I’ve also been thinking more and more of building a Choose Your Own Adventure theme for WordPress and this might open up some really nice options there as well (both for authoring and seeing how your choices played out in the narrative).

1 I’ll get to the blog post eventually.

2 Give it a shot if you feel like it. It is on a demo site.

3 Not code, but certainly not conversational writing. This is the kind of semi-code that I’d teach people rather than assuming everyone will need to write javascript or objective C.

Weekly Web Harvest for 2018-12-16

  • That Isn’t a Mistake – dy/dan
    But the vast majority of the work we label “mistakes” is students doing exactly what they meant to do.

    We just don’t understand what they meant to do.

    Teaching effectively means I need to know what a student knows and what to ask or say to help her develop that knowledge. Calling her ideas a mistake transforms them from a window into her knowledge into a mirror of my own, and I am instantly less effective.

  • Influencers Are Faking Brand Deals – The Atlantic
    The owner of one sunglasses brand, who asked to remain anonymous so as not to alienate anyone in the influencer community, said the practice has put him in a tough position as a stream of mid-level influencers post mediocre-quality sponsored content seemingly on his behalf, without his approval or control.
  • Byrne’s Euclid
    A reproduction of Oliver Byrne’s celebrated work from 1847 plus interactive diagrams, cross references, and posters designed by Nicholas Rougeux
  • Federal court says NY ban on nunchucks unconstitutional
    The ruling went over the history of the ban, and said it “arose out of a concern that, as a result of the rising popularity ‘of ‘Kung Fu’ movies and shows,? ‘various circles of the state’s youth’ — including ‘muggers and street gangs’ — were ‘widely’ using nunchaku to cause ‘many serious injuries.’”
  • ??? CORN FACTS ??? on Twitter: “You are slowly realizing it has literally been years, maybe decades, since you ate any meal made without corn.”
    Corn is not a _food_.
    Corn is a _platform_.

  • How to read this book – The Cliff Nest
    The book will include multiple cybersecurity and/or technical challenges which will invite the readers to look around the internet. Some are part of the story, while others will ask the readers to propose a solution with a character name that will tell the solution in the story.
  • arbtt: the automatic, rule-based time tracker
    arbtt, on the other hand, is a time tracker that gets out of the way. Its core component (arbtt-capture) silently captures data about what you are doing, completely autonomously. No interaction required, no distraction possible. This information is continuously stored in a log file. A separate tool (arbtt-stats) the allows you to investigate this data, at whatever time is convenient to you, by using simple text-based rules.

    One big advantage of this approach is that you do not need to know in advance what queries you are interested in. Since the rules are applied in real-time when you are evaluating your data, and not when recording it, your raw data is always intact, and you can add more rules and forgotten special cases later.

  • Facebook made itself indispensable to media companies, “pivoted to video,” changed its mind, and triggered a industrywide mass extinction event / Boing Boing
    Then came the day that Facebook announced the “pivot to video,” a rare, clear, ringing instruction to the media companies: MAKE VIDEO. Video: the most expensive, difficult-to-skim content there is, and there’d better be a lot of it.


    It was fraud. Video, it turned out, was hard to make and hard to casually skim, but video viewership numbers are the very easiest to cook, meaning that Facebook could use all that pivoting video to rip off its advertisers.

  • After Some Careful Consideration, Our Family is Pivoting and Becoming a VR Startup – McSweeney’s Internet Tendency
    That is why, starting today, we will be restructuring our focus from being a loving, suburban family to being a lean, cutthroat virtual reality software company. Trust us, it’s the right move for our family at this time.

Weekly Web Harvest for 2018-12-09