* 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.
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#"],
"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?
@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.
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
, twocampus
es, an ascii gate, someprotest1faces
, and one of theslogans
. A campus is five spaces and fouruniversity
things.A university, in turn, might contain urbanspaces things.
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:
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.
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.
@markcmarino, @jeremydouglass, @gripp, @samplerreality, @Leonardo.Flores thank you all! I am looking at the linguistic and cultural approach to codes.
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?
`
@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:
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.
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:
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.
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:Minification and labor / struggle is an interesting way of connecting Protestitas with our related discussion this week of Tisselli's amazon.html.