Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Participants: Derya Akbaba * Ben Allen * Natalia-Rozalia Avlona * Kirill Azernyi * Erin Kathleen Bahl * Natasha Bajc * Lucas Bang * Tully Barnett * Ivette Bayo * Eamonn Bell * John Bell * kiki benzon * Liat Berdugo * Kathi Berens * David Berry * Jeffrey Binder * Philip Borenstein * Gregory Bringman * Sophia Brueckner * Iris Bull * Zara Burton * Evan Buswell * Ashleigh Cassemere-Stanfield * Brooke Cheng* Alm Chung * Jordan Clapper * Lia Coleman * Imani Cooper * David Cuartielles * Edward de Jong * Pierre Depaz * James Dobson * Quinn Dombrowski * Amanda Du Preez * Tristan Espinoza * Emily Esten * Meredith Finkelstein * Caitlin Fisher * Luke Fischbeck * Leonardo Flores * Laura Foster * Federica Frabetti * Jorge Franco * Dargan Frierson * Arianna Gass * Marshall Gillson * Jan Grant * Rosi Grillmair * Ben Grosser * E.L. (Eloisa) Guerrero * Yan Guo * Saksham Gupta * Juan Gutierrez * Gottfried Haider * Nabil Hassein * Chengbo He * Brian Heim * Alexis Herrera * Paul Hertz * shawné michaelain holloway * Stefka Hristova * Simon Hutchinson * Mai Ibrahim * Bryce Jackson * Matt James * Joey Jones * Masood Kamandy * Steve Klabnik * Goda Klumbyte * Rebecca Koeser * achim koh * Julia Kott * James Larkby-Lahet * Milton Laufer * Ryan Leach * Clarissa Lee * Zizi Li * Lilian Liang * Keara Lightning * Chris Lindgren * Xiao Liu * Paloma Lopez * Tina Lumbis * Ana Malagon * Allie Martin * Angelica Martinez * Alex McLean * Chandler McWilliams * Sedaghat Payam Mehdy * Chelsea Miya * Uttamasha Monjoree * Nick Montfort * Stephanie Morillo * Ronald Morrison * Anna Nacher * Maxwell Neely-Cohen * Gutierrez Nicholaus * David Nunez * Jooyoung Oh * Mace Ojala * Alexi Orchard * Steven Oscherwitz * Bomani Oseni McClendon * Kirsten Ostherr * Julia Polyck-O'Neill * Andrew Plotkin * Preeti Raghunath * Nupoor Ranade * Neha Ravella * Amit Ray * David Rieder * Omar Rizwan * Barry Rountree * Jamal Russell * Andy Rutkowski * samara sallam * Mark Sample * Zehra Sayed * Kalila Shapiro * Renee Shelby * Po-Jen Shih * Nick Silcox * Patricia Silva * Lyle Skains * Winnie Soon * Claire Stanford * Samara Hayley Steele * Morillo Stephanie * Brasanac Tea * Denise Thwaites * Yiyu Tian * Lesia Tkacz * Fereshteh Toosi * Alejandra Trejo Rodriguez * Álvaro Triana * Job van der Zwan * Frances Van Scoy * Dan Verständig * Roshan Vid * Yohanna Waliya * Sam Walkow * Kuan Wang * Laurie Waxman * Jacque Wernimont * Jessica Westbrook * Zach Whalen * Shelby Wilson * Avery J. Wiscomb * Grant Wythoff * Cy X * Hamed Yaghoobian * Katherine Ye * Jia Yu * Nikoleta Zampaki * Bret Zawilski * Jared Zeiders * Kevin Zhang * Jessica Zhou * Shuxuan Zhou

Guests: Kayla Adams * Sophia Beall * Daisy Bell * Hope Carpenter * Dimitrios Chavouzis * Esha Chekuri * Tucker Craig * Alec Fisher * Abigail Floyd * Thomas Forman * Emily Fuesler * Luke Greenwood * Jose Guaraco * Angelina Gurrola * Chandler Guzman * Max Li * Dede Louis * Caroline Macaulay * Natasha Mandi * Joseph Masters * Madeleine Page * Mahira Raihan * Emily Redler * Samuel Slattery * Lucy Smith * Tim Smith * Danielle Takahashi * Jarman Taylor * Alto Tutar * Savanna Vest * Ariana Wasret * Kristin Wong * Helen Yang * Katherine Yang * Renee Ye * Kris Yuan * Mei Zhang
Coordinated by Mark Marino (USC), Jeremy Douglass (UCSB), and Zach Mann (USC). Sponsored by the Humanities and Critical Code Studies Lab (USC), and the Digital Arts and Humanities Commons (UCSB).

Twitterbot code: JSON simplified codes like natural language

edited January 21 in 2020 Code Critiques
* Tittle: @Protestitas' Protestitas
  • Author: Leonardo Flores
  • Year: 2017/2018
  • Link: https://cheapbotsdonequick.com/source/Protestitas
  • Language: JavaScript
  • Snippet:
    "cacerolazoprotesters" :["🍳#protesterfaces#🥄🎶", "🥘#protesterfaces#🥄🎶", "Ϙ#protesterfaces#🥄🎶"],
    "featuredslogans" :["#PRslogans#", "#PRslogans#", "#PRslogans#", "#PRslogans#", "#postrickyslogans#"],
    "rickyslogans" : ["¡\#FUERARICKY", "¡\#RICKYRENUNCIA", "¡RICKY RENUNCIA YA", "¡FUERA RICKY", "¡RICKY VETE YA", "¡RICKY DICTADOR", "¡RICKY CORRUPTO", "¡RICKY RENUNCIA AHORA", "¡\#RICKYRENUNCIAAHORA", "¡\#UNNUEVOPUERTORICO"],
    "rickyslogans2" : ["¡RICKY TE BOTAMOS", "¡RICKY PA' FUERA", "¡RICKY NO VUELVAS", "¡FUERA RICKY", "¡\#UNNUEVOPUERTORICO"],
    "postrickyslogans" : ["¡ESTAMOS PENDIENTES", "¡DEJEN EL POLITIQUEO", "¡NO MAS CORRUPCION", "¡BOTAMOS A RICKY Y LOS PODEMOS BOTAR", "¡\#UNNUEVOPUERTORICO", "¡FUERA PIERLUISI", "¡\#RENUNCIA WANDA"],

Just have a look and analyse this for me please!!

Comments

  • @Waliya, so this is an excerpt of code from @Leonardo.Flores ' Tiny Protest bot. Great. It's written in Tracery on CheapBotsDoneQuick.

    Can you get us started by guiding us in the direction you want us to go? What do you want to explore about this code? Based on what you know about it, what questions do you have about its meaning? Just few lines of the interpretation you are already formulating or questions you have will help a lot.

  • edited January 21

    Just to add to the description with links from the bot page: The output of the bot is here:

    https://twitter.com/Protestitas/

    and the source for Tracery is here:

    https://github.com/galaxykate/tracery

    and an example output is:

    Parts of the code look are highly visual, looking like this:

    "sun" : ["🌦️ ", "🌥️", "🌤️", "⛅", "☀️️"],
    "shoes" : ["👟👟 ", "👞👞", "👠👠", "👡👡", "👢👢"],
    "skythings" : ["☁️️ ", "⛈️ ", "🌧️ ", "🌨️ ", "🌩️ ", "✈️️ ", "🛩️ ", "🚁 ", "🦅 ", "🕊️ ", "🚁 ", "🚁 ", "🚁 ", "🚁 ", "🚁 "],
    "buildings" : ["🏛️", "🏢", "🏦", "🏨", "🏪", "🏬", "🏭", "🏟️", "🏗️","🏛️", "🏢", "🏦","#urbanspaces#"],
    "governmentbuildings" : ["🏛️", "🏢", "🏦", "🏬", "🏛️", "🏢"],
    "urbanspaces" : ["🌲", "🌳", "🌴", "⛲"],
    "university" : ["🏛️", "🏢", "🏬", "🏛️", "🏢", "🏟️","#urbanspaces#", "#spaces#"],

  • @jeremydouglass said:
    "buildings" : ["🏛️", "🏢", "🏦", "🏨", "🏪", "🏬", "🏭", "🏟️", "🏗️","🏛️", "🏢", "🏦","#urbanspaces#"],
    "governmentbuildings" : ["🏛️", "🏢", "🏦", "🏬", "🏛️", "🏢"],
    "urbanspaces" : ["🌲", "🌳", "🌴", "⛲"],
    "university" : ["🏛️", "🏢", "🏬", "🏛️", "🏢", "🏟️","#urbanspaces#", "#spaces#"],

    "urbanspaces" appears in the buildings list and also as a key in the dictionary. is this an example of the lists being used as a grammar? i.e., anywhere there is a building there can also be an urbanspace?

  • edited January 22

    @markcmarino What is the semantic link between the codes and the generated composite tweets that will point to the poetic intention? What are poetics in this code above?

  • @gripp That's pretty much exactly it. Tracery lets you embed lists into other lists. So #urbanspaces is a subset of #buildings, but it is also a subset of #university. Earlier in the Tracery code, I see that #urbanspaces also appears alongside #buildings, both in a list called #cityobjects:

    "cityobjects" : ["#spaces#", "#buildings#", "#urbanspaces#", "#buildings#", "#buildings#", "#buildings#", "#buildings#"],

    What stands out for me in these lines is the city/urban slant of the protests. There is no #ruralspaces list. I would guess this a reflection of where actual protests tend to happen (cities), or at least where media coverage of protests tend to happen. But the bot then leaves out the possibility of protests happening in non-urban spaces, say, in the middle of clear cutting Amazon rainforest, or at a isolated detention center on the border.

    This points to a partial answer at @Waliya's questions, about poetic intention. The bot is not designed to imagine _all _kinds of protests, just certain, urban-based protests.

  • edited January 22

    @gripp said:
    "urbanspaces" appears in the buildings list and also as a key in the dictionary. is this an example of the lists being used as a grammar? i.e., anywhere there is a building there can also be an urbanspace?

    I believe this is right. I haven't written anything Kate Compton's Tracery in some time, but I believe that the basic idiom is to composite random selections from lists within lists within lists within lists. There are some simple examples on the Tracery README:

    https://github.com/galaxykate/tracery

    So here is a Tweet from an hour ago:

    It looks like it is a "blockedgates" tweet, which consists of a sky1, two campuses, an ascii gate, some protest1faces, and one of the slogans. A campus is five spaces and four university things.

    "blockedgates" : ["#sky1#\n\n#campus#\n#campus#\n______________\\[||||||\\]_______________\n#protest1faces#\n#slogans#!"],
        "campus" : ["#spaces##spaces##spaces##spaces##spaces##university##university##university##university#"],
    

    A university, in turn, might contain urbanspaces things.

    "university" : ["🏛️", "🏢", "🏬", "🏛️", "🏢", "🏟️","#urbanspaces#", "#spaces#"],
    
    "urbanspaces" : ["🌲", "🌳", "🌴", "⛲"],
    

    So when it tweeted a blockedgates, it included two campuses, and there was a small chance that some of those eight random university objects would be chosen as urbanspaces objects -- and one was, and it was selected to be a fountain! It might have been a tree instead -- but never a frying pan.

  • So, an interesting thing about this bot. It's set up to be a multi-use protest bot. If you look at its structure, you'll see this line up top:

    "origin": ["#protesttype#"],

    Origin tells you the pattern of a typical Tweet. Every Tweet will Tweet out what is in the #protesttype# array. To find out what the protesttype is, look to:

        "protesttype" : ["#infront#", "#march1faces#", "#facessurroundbuilding#", "#street1faces#", "#street2faces#", "#street3faces#", "#street4faces#", "#street5faces#", "#teargasfaces#", "#capitolioshoes#", "#blockedgates#"],
    

    That means, choose one of these lists, and pull something from it. Which then sends you to various other lists. For example, "Infront"

    "infront" : ["#sky1#\n\n#city#\n#street#\n#protest1faces#\n#spaces##spaces##slogans#!"],

    However, this bot, clearly produces other protests. For example:
    "deprecatedprotesttype" : ["#infront#", "#march1people#", "#march1faces#", "#peoplesurroundbuilding#", "#facessurroundbuilding#", "#teargasfaces#"],

    Presumably, this was another phrasing of the same protest grammar. But there is evidence of how Leo repurposes the bot over time, or applies it to different situations, beyond what we can find in the Twitterlog.

    Consider the category for slogans, for example.
    First, there's the slogan du jour is: "#featuredslogans#":

    Currently
    "featuredslogans" :["#PRslogans#", "#PRslogans#", "#PRslogans#", "#PRslogans#", "#postrickyslogans#"],

    But there are also other slogans:
    "guncontrolslogans", "womenslogans", "rickyslogans", etc.

    So unlike some other bots, TinyProtest is set up to be a repurposable bot, a king of Tracery-style megaphone, that can be activated to speak to whatever injustice Leo wants to turn it. As far as I can tell.

  • edited January 23

    Hi folks,

    I'm honored and thrilled to see this thread on @protestitas! Thanks, Waliya for bringing it to the conversation and for everyone's insightful readings of it.

    Here's a little context that may be of use. @protestitas is a fork of @tinyprotests (https://twitter.com/TinyProtests). @tinyprotests started in 2017 and used to have both US and PR based protests. So some of the deprecated code you see actually belongs to that earlier version of @tinyprotests. When I forked it in 2018, each developed in its own direction, but they share some code DNA.

    Here's the current code for @TinyProtests: https://cheapbotsdonequick.com/source/TinyProtests

    The slogans (from both) are drawn from real protests, both in the US and PR. The urban locations it imagines are a reflection of where the protests have been happening in both countries.

    And yes, I focus its protests to address, support, and amplify current protests.

  • edited January 25

    @markcmarino, @jeremydouglass, @gripp, @samplerreality, @Leonardo.Flores thank you all! I am looking at the linguistic and cultural approach to codes.

       "slogans" : ["#featuredslogans#"],
            "guncontrolslogans" :["GUN REFORM NOW", "GUN CONTROL NOW", "NO MORE MASS SHOOTINGS", "ARE WE NEXT?GUN REFORM NOW", "DON'T SHOOT!", "PRAYER ALONE DOES NOTHING", "SHIELD OUR STUDENTS", "END GUN VIOLENCE", "NO MORE ASSAULT WEAPONS", "MARCH FOR OUR LIVES", "WE WANT POLICY AND CHANGE", "NEVER AGAIN", "DISARM HATE", "PROTECT KIDS, NOT GUNS", "THE NRA HAS BLOOD IN ITS HANDS", "ARMS ARE FOR HUGGING", "STUDENTS DEMAND ACTION", "THE ONLY .45 WE WANT FIRED IS TRUMP", "WE MARCH FOR THOSE\nWHO HAD TO RUN", "GUN CONTROL MATTERS", "ENOUGH IS ENOUGH", "VOTE THEM OUT", "LIVES BEFORE BRIBES", "STOP GUN VIOLENCE", "WE ARE STUDENTS\nWE ARE CHANGE", "ALLOW RESEARCH ON GUN VIOLENCE", "NO MORE THOUGHTS & PRAYERS", "FEAR HAS NO PLACE IN OUR SCHOOLS", "NOT ONE MORE"],
             "womenslogans" : ["A WOMAN'S PLACE IS IN THE RESISTANCE", "A WOMAN'S PLACE IS IN THE REVOLUTION", "WE WILL NOT BE SILENT", "WE GRAB BACK", "GRAB THE PATRIARCHY BY THE BALLS","WOMEN'S RIGHTS ARE HUMAN RIGHTS", "WOMEN DESERVE EQUAL PAY", "EQUAL RIGHTS FOR WOMEN", "CLOSE THE PAY GAP", "END RAPE CULTURE", "END SEXUAL HARASSMENT", "POWER TO THE POLLS", "TOGETHER WE RISE", "HEAR OUR VOTE", "LOOK BACK MARCH FORWARD", "¡NO MÁS VIOLENCIA CONTRA LA MUJER", "¡TODAS ESTAMOS EN PELIGRO", "GOD IS COMING AND SHE IS PISSED", "THE FUTURE IS FEMALE"],
        "USslogans" : ["THE POWER OF THE PEOPLE IS STRONGER\nTHAN THE PEOPLE IN POWER", "BOMBING FOR PEACE\nIS LIKE FUCKING FOR VIRGINITY","NO ONE IS FREE\nWHEN OTHERS ARE OPPRESSED", "FUCK YOU CHEETO VOLDEMORT", "THEY TRIED TO BURY US\nTHEY DIDN'T KNOW WE WERE SEEDS", "CLIMATE CHANGE IS REAL", "THE SYSTEM HAS FAILED US", "IF YOU'RE NOT ANGRY\nYOU'RE NOT PAYING ATTENTION", "HATE DOES NOT MAKE AMERICA GREAT", "BUILD KINDNESS NOT WALLS", "THE OCEANS ARE RISING\nAND SO ARE WE", "BLACK LIVES MATTER", "MAKE LOVE NOT WAR", "TAX THE RICH", "IMPEACH TRUMP", "TAX THE RICH", "HEALTHCARE FOR ALL", "TRANS RIGHTS ARE HUMAN RIGHTS", "TRANS PEOPLE ARE NOT A BURDEN", "RESPECT EXISTENCE\nOR EXPECT RESISTANCE", "DEMILITARIZE THE POLICE", "LOVE IS LOVE", "SILENCE IS COMPLICITY", "SILENCE IS BETRAYAL", "NO HUMAN IS ILLEGAL", "HEALTHCARE IS A HUMAN RIGHT", "TAX THE RICH, NOT THE POOR", "ALL POWER TO THE PEOPLE", "WHOSE STREETS? OUR STREETS", "THERE IS NO PLANET B", "END ADJUNCTIFICATION", "OUR COUNTRIES ARE NOT SHITHOLES", "YOUR FOREIGN POLICIES CREATE SHITHOLES", "MAKE AMERICA BETTER AGAIN", "WHOSE SHUTDOWN? \\#TRUMPSHUTDOWN", "DEPORT DONALD NOT DREAMERS", "SAVE DACA YOU PIECE OF CACA"],
        "scienceslogans" : ["BOMBING FOR PEACE\nIS LIKE FUCKING FOR VIRGINITY", "CLIMATE CHANGE IS REAL", "THE OCEANS ARE RISING\nAND SO ARE WE",  "THERE IS NO PLANET B", " \\#MARCHFORSCIENCE", "DEFEND, DON’T DEFUND SCIENCE", "SCIENCE, NOT SILENCE", "SCIENCE IS THE SOLUTION"],
        "educationslogans" : ["FUND THE FUTURE", "MAKE OUR SCHOOLS GREAT AGAIN", "IF YOU CAN READ THIS\nTHANK A TEACHER","FLUNK YOU MOTHER FRACKERS", "SUPPORT OUR TEACHERS", "FUND PUBLIC EDUCATION", "TEACHERS DESERVE A RAISE", "FUND OUR SCHOOLS", "SAVE OUR SCHOOLS"],
        "PRslogans" : ["¡EL PUEBLO UNIDO JAMAS SERA VENCIDO", "¡AUDITEN LA DEUDA", "¡LA UPR SE DEFIENDE", "¡FUERA A LA JUNTA", "¡QUIEN NIEGA AUDITORIA\nOCULTA FECHORIA", "¡QUE LA DEUDA LA PAGUEN LOS RICOS", "¡NO A LA DEUDA", "¡SE ACABARON LAS PROMESAS", "¡AUDITORIA YA", "¡NO A LA REFORMA LABORAL", "¡NO A LA JUNTA", "¡PUERTO RICO UNIDO", "¡PARO NACIONAL", "¡EL OBRERO SE RESPETA", "¡PUERTO RICO CONTRA LA JUNTA", "¡LA DEUDA NO ES NUESTRA ES DEL IMPERIO", "¡EL ENCANTO DE MI ISLA NO SE CUBRE CON CENIZAS", "COLONIALISM IS A CRIME", "¡PUERTO RICO IS NOT FOR SALE", "¡JUNTA CONTROL FISCAL ESCLAVITUD COLONIAL", "¡NO MAS CENIZAS", "¡CERO DESPIDOS", "¡CON LA EDUCACIÓN NO SE JUEGA", "¡SI HAY CORRUPCIÓN\nHAY REVOLUCIÓN", "¡CANDELA CANDELA LA UPI DA CANDELA", "¡SI NO NOS DEJAN SOÑAR NO LES DEJAREMOS DORMIR", "¡ARRIBA LOS DE ABAJO", "RESPETA MI EXISTENCIA O ESPERA RESISTENCIA", "PREFIERO SER REBELDE A SER ESCLAVA", "¡MI EDUCACIÓN LA QUIERO PÚBLICA", "¡NO A LA DEFORMA EDUCATIVA", "¡NO A LAS ESCUELAS CHARTER", "¡LA EDUCACIÓN PÚBLICA SE DEFIENDE", "¡LA EDUCACIÓN ES UN DERECHO\nNO UN PRIVILEGIO", "¡EN DEFENSA DE LA EDUCACIÓN PÚBLICA", "!LA EDUCACIÓN NO ES UN NEGOCIO", "¡CUANDO LA TIRANÍA ES LEY\nLA REVOLUCIÓN ES EL ORDEN", "!AQUÍ MANDA EL PUEBLO", "\\#PARONACIONAL", "#UPRslogans#", "¡CONSTRUYAMOS OTRA VIDA", "!DENUNCIA TU INDIGNACION", "¡MUERTE A LA DICTADURA COLONIAL"],
        "UPRslogans" : ["¡LA UPR SE DEFIENDE", "¡FUERA A LA JUNTA", "¡NO A LA DEUDA", "¡ASAMBLEA ESTUDIANTIL", "¡NO AL PLAN FISCAL", "¡NO A LA JUNTA DE CONTROL FISCAL", "¡CANDELA CANDELA LA UPI DA CANDELA", "¡LA EDUCACIÓN PÚBLICA SE DEFIENDE", "¡NO AL PLAN FISCAL UPR", "\\#ASAMBLEARUM", "¡LUCHA SI, ENTREGA NO", "¡SALVEMOS NUESTRO PLAN DE RETIRO", "¡HONREN LOS CONVENIOS COLECTIVOS", "¡CERO SUBCONTRATOS", "¡CONTRATEN PERSONAL NUEVO", "¡MEJOREN NUESTRAS CONDICIONES DE TRABAJO", "¡PROTEJAN EL PLAN MÉDICO", "¡NUESTRO RETIRO SE RESPETA", "¡NO A LAS APP"],
        "NORMALshortslogans" : ["¡AUDITEN LA DEUDA", "¡LA UPR SE DEFIENDE", "¡FUERA A LA JUNTA", "¡NO A LA DEUDA", "¡SE ACABARON LAS PROMESAS", "¡AUDITORIA YA", "¡NO A LA REFORMA LABORAL", "¡NO A LA JUNTA", "¡PUERTO RICO UNIDO", "¡PARO NACIONAL", "¡EL OBRERO SE RESPETA", "¡PUERTO RICO CONTRA LA JUNTA", "¡NO MAS CENIZAS", "¡CERO DESPIDOS", "¡CON LA EDUCACIÓN NO SE JUEGA", "¡ARRIBA LOS DE ABAJO", "¡MI EDUCACIÓN LA QUIERO PÚBLICA", "¡NO A LAS ESCUELAS CHARTER", "¡LA EDUCACIÓN PÚBLICA SE DEFIENDE", "LA EDUCACIÓN NO ES UN NEGOCIO"],
        "respuesta" : ["¡ÚNETE A LA MARCHA!", "¡PROTESTA CON NOSOTROS!", "¡MARCHAMOS POR TI!", "¡MARCHAMOS POR TUS DERECHOS!", "¡UNIDOS VENCEREMOS!", "¡HOY VIENEN POR NUESTROS DERECHOS\nMAÑANA VIENEN POR LOS TUYOS", "¡SOMOS IGUALES!", "¡SOMOS ALIADOS!", "¡ACOMPÁÑANOS!"]
    }
    

    slogans" : ["#featuredslogans#"] generates all the nano-texts (tweets) as slogans when it runs on Twitter. I noticed English dominance over Spanish language in the dictionary for English has 454 words whereas Spanish 409 words. We can see distinction between English and Spanish in expression. Where Spanish uses few words, English uses many words. We can still deduced that the intention of the artist is to say few things for Hispanics but talk elaborate in English because the major target audience is US. Don't forget that @Protestitas was first created in English as @TinyProtests. So translating English to Spanish does not depend on language itself but the sens. We can see again the psycholinguistic tendency here whereby his intentionality is revolt using short expression because he is angry. Or can we say Spanish linguistic structure is simpler whereas that of English is complex?

    `

  • edited January 27

    @Leonardo.Flores said:
    @tinyprotests started in 2017 and used to have both US and PR based protests. So some of the deprecated code you see actually belongs to that earlier version of @tinyprotests. When I forked it in 2018, each developed in its own direction, but they share some code DNA.

    @Leonardo.Flores -- do you have the TinyProtests code version history from that time? I think it would be enlightening to do a diff, but a diff with the version your forked would be even more informative than just comparing the contemporary versions....

    For people interested in working with this code (or code like it) that is a fork, and not familiar with diff tools: because Protestitas is a fork that was created by modifying the source code of TinyProtests, computing a diff on two documents can be a really useful tool in understanding a question like "how is Protestitas different from TinyProtests?" This will show a list of which lines that were removed, which lines were added, and which lines were changed between:

    1. https://cheapbotsdonequick.com/source/TinyProtests
    2. https://cheapbotsdonequick.com/source/Protestitas

    NOTE: If this version of TinyProtests has not been updated since Protestitas forked it then the differences can be attributed to the Leonardo Flores. If TinyProtests has changed, however, then the differences cannot be read in such a straightforward way.

    You can compare the two source codes using an online text diff webservice -- for example, text-compare.com or diff-now.com -- or you can use the diff tool built into or available as a plugin for many free programming editors (TextMate, Atom, Sublime, VS Code et cetera).

    Although this reveals that the English slogans in Protestitas are inherited from TinyProtests, it doesn't show which of those lines are still reachable by the generator. One thing I like about Protestitas is that it is feels like a working document and a collection of ideas. Some of the code is inactive. In some cases this is perhaps because it is inherited and vestigial, in others the unreachable code might indicate a draft. For one example, Protestitas inherits "scienceslogans", but, like the other English language content, those aren't reachable anymore through slogans --> featuredslogans, so they never appear in any output. Protestitas inherits "sadfaces" -- then adds "happyfaces", never uses them (as far as I can tell) -- or else TinyProtests deleted happyfaces post-fork, but Protestitas never did. So the code contains 454 words of English strings to print ... but (almost) none of that language/data will become output.

    One final observation is that it is often useful to see the authoring and debugging tools available to work with particular code. For example, first playing around with the online tutorial and then pasting the code to examine into the Tracery online editor. I actually had to run Protestitas through a JSON tidy before it would load in the editor, but then it was highly useful for inspecting output.

  • @jeremydouglass said:

    @Leonardo.Flores -- do you have the TinyProtests code version history from that time? I think it would be enlightening to do a diff, but a diff with the version your forked would be even more informative than just comparing the contemporary versions....

    I unfortunately don’t, unless CBDQ keeps a version log. I think to compare current contemporary versions, as you have done, @jeremydouglass, yield a sense of distance between the two versions.

    If we had access to this early code, 3 things would be noteworthy:

    1. The original protest configurations were designed for 140 characters. Some of those protest types are still operational.
    2. The original protests used the now-deprecated “allprotesters” variable, which is contains emoji protesters with bodies, professions, and skin tones. I have since shifted away from that to produce protests with face emoji, which communicate their emotional impact more clearly and are harder to confuse with police, vehicles, and buildings.
    3. The original protest slogans were generated. I shifted to real protest slogans because they were more interesting to read, rooted the protests, and because they didn’t produce problematic slogans. For example, you can’t modify “Black lives matter” without undermining it, which is precisely what it’s detractors attempted with slogans like “blue lives matter” or “all lives matter.”

    Here’s a link to early tweets by that account: https://twitter.com/search?q=(from:tinyprotests)+until:2017-08-27+since:2017-01-27

  • Oh, and one more thing that may be of interest to this thread. Tiny Protests and Protestitas came back together in the Fall 2018 issue of Taper #2: Poems of Two.

    Here's a link to "Tiny Protests / Protestitas."

    The source code may be worth looking at to see an artist's statement and to examine what makes it into a version of the code that is no more than 2kb in size. Sweating it down to a minimalist 2k version is a way of highlighting importance.

  • @Leonardo.Flores said:
    The source code may be worth looking at to see an artist's statement and to examine what makes it into a version of the code that is no more than 2kb in size.

    For those who didn't catch it, you can only read the "artist's statement" by inspecting the source code of the page, where it inside an HTML comment in the <head> tag -- the statement is not navigable. I am reposting it below:

    <!-- "Tiny Protests / Protestitas ", Copyright (C) 2018 Leonardo Flores
    
    Copying and distribution of this file, with or without modification,
    are permitted in any medium without royalty provided the copyright
    notice and this notice are preserved. This file is offered as-is,
    without any warranty.
    
    This is from the second issue of Taper: Poems of Two, Fall 2018:
    
    https://taper.badquart.to/2/tiny_protests_protestitas.html
    
    This work is inspired by the protests that have emerged in the past
    few years both in the United States and Puerto Rico, two nations that
    have been joined politically, economically, and culturally since the
    USA invaded PR in 1898 during the Spanish-American war.
    
    Puerto Rico is currently a commonwealth and, while we have US
    citizenship and supposed self-rule, we are ruled by the US government
    without being able to vote for the Presidency or Congress. We only
    have one representative with voice and no vote in Congress. We get
    some federal benefits, don't pay federal taxes, and have fought in US
    wars since WW1. US economic policies have led Puerto Rico to
    bankruptcy and we are currently under the control of a Fiscal Control
    Board, appointed by a Republican Congress, that imposes neoliberal
    policies and austerity measures on Puerto Rico. The political party in
    power in Puerto Rico is a right-wing pro-Statehood party that is
    ideologically aligned with the Fiscal Control Board, so we are
    enjoying a clear view of what right-wing economic and social policies
    have to offer. In all of Puerto Rico's government offices and
    buildings, the US and PR flags fly together, a reminder that our
    realities and politics are intertwined.
    
    The connections between PR and the US (where more Puerto Ricans live
    than in our islands) and our struggles under Republican control and
    Trump's presidency inspired me to create the @TinyProtests bot, which
    initially generated both US and PR themed protests. I recently forked
    this bot into @TinyProtests for the US
    (https://twitter.com/TinyProtests) and @Protestitas
    (https://twitter.com/protestitas) for PR. For the past few years,
    these bots have been informed by real protests, incorporating
    different protest configurations and slogans to highlight the poetic
    qualities of real protest language, as it is chanted, carried in
    signs, and circulated in social media. The bots frequently go on
    thematically focused solidarity protests with whatever real protests
    and marches in the US and PR.
    
    This e-poem brings both bots together under one protest
    configuration——  the street march——  and intersperses a selection of
    their slogans. We are united in a struggle against the same social
    ills our right-wing governments currently support—— racism, sexism,
    homophobia, transphobia, classism, imperialism, xenophobia,
    nationalism—— and in favor of responsible economic, environmental, and
    social policies.
    
    This work is dedicated to all who struggle!
    -->
    

    @Leonardo.Flores said:
    Sweating it down to a minimalist 2k version is a way of highlighting importance.

    Minification and labor / struggle is an interesting way of connecting Protestitas with our related discussion this week of Tisselli's amazon.html.

Sign In or Register to comment.