Build your own
Twitter bot!

blinry

{
"food": ["Gulasch", "Milchreis", "Schnitzel", "Obstsalat", "Risotto", "Kartoffelbrei"],
"activity": ["programmier", "debug", "hack", "code", "frickel", "löt", "strick", "häkel"],
"event": ["nacht", "tag", "abend", "wochenende", "morgen", "vormittag", "mittag", "woche"],
"origin": ["#food##activity##event# 2018"]
}

Tracery!

by Kate Compton (@GalaxyKate)

Editor: brightspiral.com/tracery/

Getting started

{
"origin": ["Medientheather", "Studio", "Vortragssaal", "OpenHUB", "CodeHUB", "AckerSpace"]
}

Expansions

{
"day": ["Donnerstag", "Freitag", "Samstag", "Sonntag"],
"time": ["11:30", "15:00", "17:00", "22:30"],
"place": ["Medientheather", "Studio", "Vortragssaal", "OpenHUB", "CodeHUB", "Ackerspace"],

"origin": ["am #day# um #time# im #place#"]
}

Modifiers: .a

{
"person": ["computer scientist", "engineer", "pentester", "open source developer"],
"origin": ["#person.a# walks into a bar..."]
}

Modifiers: .s

{
"person": ["computer scientist", "engineer", "pentester", "open source developer"],
"origin": ["two #person.s# walk into a bar..."]
}

Modifiers: .capitalize

{
"person": ["computer scientist", "engineer", "pentester", "open source developer"],
"sentence": ["#person.a# walks into a bar..."],

"origin": ["#sentence.capitalize#"]
}

Modifiers: .capitalizeAll

{
"person": ["computer scientist", "engineer", "pentester", "open source developer"],
"sentence": ["#person.a# walks into a bar..."],

"origin": ["#sentence.capitalizeAll#"]
}

Example: HTTP status codes

{
"firstdigit": ["1", "2", "3", "4", "5"],
"seconddigit": ["0", "1", "2", "3", "4", "5", "9"],
"digit": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
"number": ["#firstdigit##seconddigit##digit#"],

"simplething": ["content", "range", "payload", "length", "entity", "upgrade", "request",
                "gateway", "timeout", "information", "choice", "payment", "expectation",
                "teapot", "precondition", "request header field", "loop",
                 "network authentication"],
"thing": ["#simplething#", "#property# #simplething#", "multi-#simplething#"],
"property": ["long", "short", "large", "non-authoritative", "partial", "permanent",
             "unauthorized", "misdirected", "unprocessable"],
"what": ["OK", "detected", "found", "allowed", "required", "created", "accepted", "used",
         "moved", "forbidden", "acceptable", "gone", "failed", "satisfiable", "locked",
         "implemented", "unavailable", "extended"],
"verb": ["reset", "repeat", "use", "switch"],
"explanation": ["#thing# not #what#", "no #thing#", "use #thing#", "bad #thing#",
                "switch #thing#", "too many #thing#s", "insufficient #thing#",
                "#thing# detected", "#thing# too #property#", "#thing# #what#",
                "#thing# error", "switching #thing#s", "processing #thing#",
                "#property# #thing#", "#verb# #thing#", "already #what#", "multiple #thing#s",
                "#what# permanently", "not #what#", "#what#", "I'm a #thing#",
                "#thing# timeout"],

"origin": ["#number# #explanation.capitalize#"]
}

Example: Technologic

{
"verb": ["buy", "use", "break", "fix", "trash", "change", "mail", "charge", "point", "zoom",
         "press", "snap", "work", "write", "cut", "paste", "save", "load", "check"],
"longverb": ["upgrade", "erase", "rewrite", "unzip", "unlock", "update", "rename", "format"],
"line1": ["#verb# it, #verb# it, #verb# it, #verb# it"],
"line2": ["#verb# it, #verb# it, #verb# - #longverb# it"],
"origin": ["#line1#
#line2#
#line1#
#line2#"] }

Example: Cooking inspiration

{
"wholesimplesolid": ["apple", "pear", "potato", "chocolate bar", "onion", "red onion", "walnut", "carrot", "pineapple", "chicken", "corn cob", "tomato", "cucumber", "egg", "fig", "garlic clove", "zucchini", "avocado", "kiwi", "kohlrabi", "leek", "lemon", "lime", "litchi", "watermelon", "olive", "orange", "oyster", "mushroom", "fish", "bell pepper", "ice cube", "pumpkin", "anchovy", "cherry", "squid", "coconut", "mango", "strawberry", "cauliflower", "broccoli", "almond", "apricot", "aubergine", "artichoke", "banana", "beetroot", "raspberry", "blackberry", "blueberry", "chili"],
"nonwholesimplesolid": ["pork", "beef", "ham", "minced meat",  "spinach", "pasta", "tofu", "corn", "cheese", "feta cheese", "spaghetti", "garlic", "peanuts", "popcorn", "quark", "pizza dough", "bread", "tortellini", "gnocchi", "aspargus", "bacon", "shrimps", "beans", "brussel sprouts", "mozzarella", "cabbage", "cashews", "celery"],
"solidadjective": ["sliced", "peeled", "raw", "cooked", "frozen", "roasted", "dried", "steamed", "organic", "fresh", "whole", "shredded", "boiled", "chopped", "minced", "smoked", "ground", "aged", "blanched", "canned"],
"nonwholesolid": ["#nonwholesimplesolid#", "#solidadjective# #nonwholesimplesolid#", "#solidadjective# #solidadjective# #nonwholesimplesolid#"],
"wholesolid": ["#wholesimplesolid#", "#solidadjective# #wholesimplesolid#", "#solidadjective# #solidadjective# #wholesimplesolid#"],
"solidingredient": ["#wholesolid#", "#nonwholesimplesolid#", "#nonwholesimplesolid#", "#wholesolid.s#", "#wholesolid.a#"],

"looseingredient": ["flour", "sugar", "salt", "rice", "bulgur", "cardamom", "caviar", "peanut butter", "dill", "marmelade", "mustard", "yoghurt", "nutmeg", "vanilla extract", "brown rice", "brown sugar", "wasabi", "nutritional yeast", "yeast", "chili powder", "oregano", "ground pepper", "butter", "cinnamon", "ground nutmeg", "miso paste", "cocoa powder", "baking powder", "chickpeas", "caramel",  "basil", "rolled oats", "lentils", "raisins", "mayonnaise", "ground almonds", "ground coffee", "amaranth", "anise", "baking soda", "bay leaf", "breadcrumbs", "buckwheat", "camenbert", "cayenne pepper"],

"simplefluid": ["milk", "water", "chicken broth", "buttermilk", "rum", "red wine", "white wine", "coffee", "sweet cream", "espresso", "tea", "honey", "ketchup", "lemon juice", "vegetable oil", "olive oil", "sake", "barbecue sauce", "vegetable stock", "soy sauce", "soy milk", "corn syrup", "oyster sauce", "hot sauce", "squid ink", "orange juice", "apple juice", "food coloring", "#wholesimplesolid# juice", "#wholesimplesolid# oil", "#wholesimplesolid# concentrate", "absinthe", "beer", "brandy", "champagne"],
"fluidadjective": ["frozen", "warm", "boiling", "hot", "cold", "chilled", "fresh", "concentrated", "aged", "strong"],
"fluidingredient": ["#simplefluid#", "#fluidadjective# #simplefluid#"],

"ingredient": ["#solidingredient#", "#looseingredient#", "#fluidingredient#"],

"dish": ["sandwich", "cocktail", "croquette", "baguette", "terrine", "tart", "smoothie", "shake", "ragout", "quiche", "salad", "pie", "burger", "cake", "beverage", "drink", "appetizer", "snack", "soup", "pizza", "cookies", "stew", "casserole", "ice cream", "jelly", "waffles", "risotto", "pudding", "noodles", "lemonade", "curry", "rice", "pralines", "wraps", "lasagne", "bread", "hotpot", "dessert", "lasagna",  "lunch", "dinner", "pancakes", "spread", "biscuits", "candy"],
"style": ["breakfast", "rustic", "special", "dairy free", "vegan", "birthday", "british", "belgian", "chinese", "easy", "french", "halal", "indian", "japanese", "exotic", "mexican", "party", "soul", "summer", "thanksgiving", "vietnamese", "wedding", "winter", "greek", "italian", "gluten free", "german", "family reunion", "arabic", "simple", "fast", "quick", "halloween", "christmas", "new year's", "romantic", "traditional", "delicious", "healthy", "fitness", "savory", "tasty", "sweet", "light", "hot", "spicy", "incredible", "awesome", "world's best", "moist", "grandma's", "modern", "classic", "new-style", "surprise", "budget", "easter", "thai", "african", "no-cook"],
"nameproperties": ["#style#", "#dish#", "#style# #style#", "#style# #dish#", "#wholesimplesolid#", "#fluidingredient#", "#simplefluid#", "#style# #wholesimplesolid#", "#style# #fluidingredient#"],
"name": ["#nameproperties# #dish#", "#dish# with #ingredient#"],

"combination": ["#ingredient# and #ingredient#", "#ingredient# + #ingredient#", "#ingredient# & #ingredient#", "#ingredient#, #ingredient#, and #ingredient#", "#ingredient# + #ingredient# + #ingredient#", "#ingredient# & #ingredient# & #ingredient#"],
"preorigin": ["#combination#", "#name#"],
"origin": ["#preorigin.capitalize#"]
}

More ideas

  • RFCs
  • Git commands
  • source code
  • memes
  • poems
  • bug reports

Recommendations

  • many top-level forks
  • rules with many options (find a corpus?)
  • crowd-source variants

Workshop time!

  1. prototype an idea in brightspiral.com/tracery/
  2. find a nice Twitter handle (up to 15 characters)
  3. register the account
  4. turn off mail notifications!
  5. (verify the account)
  6. link it to cheapbotsdonequick.com
  7. paste your grammar, refine it, save it
  8. add avatar, header, and bio
  9. tweet about it! #GPN18 @blinry

Thanks for being here! <3

Advanced Tracery feature: Saving data

{
"person": ["computer scientist", "engineer", "pentester", "open source developer"],
"sentence": ["#subject1.a# and #subject2.a# walk into a bar. The #subject1# says to the #subject2#: ..."],

"origin": ["#[subject1:#person#]sentence.capitalize#"]
}

Advanced CBDQ feature: SVG

{
"origin": ["Tweet text {svg <svg xmlns=\"http://www.w3.org/2000/svg\"
                             xmlns:xlink=\"http://www.w3.org/1999/xlink\"
                             width=\"1000\" height=\"1000\"></svg>}"]
}