{"id":69062,"date":"2021-11-14T16:55:44","date_gmt":"2021-11-14T21:55:44","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/?p=69062"},"modified":"2021-11-14T16:55:44","modified_gmt":"2021-11-14T21:55:44","slug":"project-11-generative-landscape-6","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/2021\/11\/14\/project-11-generative-landscape-6\/","title":{"rendered":"Project-11: Generative Landscape"},"content":{"rendered":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<html><body><div class=\"wp-block-file\"><a class=\"p5_sketch_link\" href=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/sketch-53.js\" data-width=\"480\" data-height=\"400\">sketch<\/a><a class=\"wp-block-file__button\" href=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/sketch-53.js\" download=\"\">Download<\/a><iframe src=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/plugins\/p5-embedder\/p5_iframe.html\" class=\"p5_exampleFrame\" width=\"480\" height=\"400\"><\/iframe><pre class=\"language-javascript\"><code class=\"p5_editor language-javascript\">\/*Name:Camellia(Siyun) Wang; \nSection: C; \nEmail Address: siyunw@andrew.cmu.edu;*\/\n\/\/https:\/\/imgur.com\/DBFXrXh  coral2\n\/\/https:\/\/imgur.com\/nyf5GKY coral1\n\/\/https:\/\/imgur.com\/JXohvV2 group\n\/\/https:\/\/imgur.com\/4hO2HW1 weed\n\/\/https:\/\/imgur.com\/N4zWoA4\n\/\/https:\/\/imgur.com\/J8R7qyD beach\n\nvar beaches = [];\nvar corals1 = [];\nvar corals1n = [];\nvar corals2 = [];\nvar corals2n = [];\nvar corals2b = [];\nvar groups = [];\nvar weeds = [];\nvar weeds2 = [];\nvar stars = [];\nvar fishes = [];\nvar bubbles = [];\nvar a; \nvar b; \nvar c; \nvar d; \nvar a1;\nvar b1; \nvar c1;\nvar d1; \n\nfunction preload(){\n    backgroundImage = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/back.jpeg\");\n    coral1 = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/coral1.png\");\n    coral2 = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/coral-2.png\");\n    group = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/group.png\");\n    weed = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/weeds.png\");\n    beach = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/beach.png\");\n    star = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/starfish.png\");\n    fish = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/fish.png\");\n    fishschool = loadImage(\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/fish-school.png\");\n}\n\nfunction setup() {\n    a = random(-150,300);\n    b = random(-150,300);\n    c = random(-150,300);\n    d = random(-150,300);\n    a1 = random(1,-30);\n    b1 = random(1,-30); \n    c1 = random(1,-30);\n    d1 = random(1,-30);\n\n    createCanvas(480, 400); \n    \/\/the beach\n    var bea = makeBeach(1,400);\n    beaches.push(bea);\n\n    \/\/coral1\n    var cor1 = makeCoral1(150,200);\n    corals1.push(cor1);\n    \/\/coral1n\n    var cor1n = makeCoral1n(1000,175);\n    corals1n.push(cor1n);\n\n    \/\/coral2\n    var cor2 = makeCoral2(450,75);\n    corals2.push(cor2);\n    \/\/coral2n\n    var cor2n = makeCoral2n(1300,230);\n    corals2n.push(cor2n);\n    \/\/coral2b\n    var cor2b = makeCoral2b(1330,190);\n    corals2b.push(cor2b);\n\n    \/\/group\n    var gro = makeGroup(550,140);\n    groups.push(gro);\n\n    \/\/weed\n    var wee = makeWeed(220,55);\n    weeds.push(wee);\n    \/\/weed2\n    var wee2 = makeWeed2(850,30);\n    weeds2.push(wee2);\n\n    var star = makeStar(1200,325);\n    stars.push(star);\n\n    var fish = makeFish(1220,25);\n    fishes.push(fish);\n\n    var bubble = makeBubble(185,480);\n    bubbles.push(bubble);\n\n    frameRate(30);\n}\n\n\/\/the beach\nfunction makeBeach(xb,yb) {\n    var B = {\n        x: xb, \n        y: yb,\n        move: beachMove,\n        speed: -1.5,\n        display: beachDisplay};\n    return B;\n}\n\nfunction beachMove() {\n    this.x += this.speed;\n}\n\nfunction beachDisplay(xb) {\n   image(beach, this.x, 0,1400,400);\n}\n\nfunction updateAndDisplayBeach(){\n    for(var i = 0; i &lt; beaches.length; i++){\n        beaches[i].move();\n        beaches[i].display();\n    }\n}\n\nfunction removeBeachThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; beaches.length; i++){\n        if (beaches[i].x &lt; -1440) {\n            beaches.shift(beaches[i]);\n        }\n    }\n}\n\nfunction addNewBeach(){\n    var lastBeaches = beaches[beaches.length - 1];\n    if(lastBeaches.x &lt; -900){\n        var a = makeBeach(480,400);\n        beaches.push(a);\n    }\n}\n\n\/\/coral1\nfunction makeCoral1(xc1,yc1){\n    var C1 = {\n        x: xc1, \n        y: yc1,\n        move: coral1Move,\n        speed: -1.5,\n        display: coral1Display};\n    return C1;\n}\n\nfunction coral1Move(){\n    this.x +=this.speed;\n}\n\nfunction coral1Display(xc1,yc1){\n    image(coral1, this.x, this.y,200,200);\n}\n\nfunction updateAndDisplayCoral1(){\n    for(var i = 0; i &lt; corals1.length; i++){\n        corals1[i].move();\n        corals1[i].display();\n    }\n}\n\nfunction removeCoral1ThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; corals1.length; i++){\n        if (corals1[i].x &lt; -1440) {\n            corals1.shift(corals1[i]);\n        }\n    }\n}\n\nfunction addNewCoral1(){\n    var lastCoral1 = corals1[corals1.length - 1];\n    if(lastCoral1.x &lt; -900){\n        var a = makeCoral1(480,200);\n        corals1.push(a);\n    }\n}\n\/\/coral1n\nfunction makeCoral1n(xc1n,yc1n){\n    var C1n = {\n        x: xc1n, \n        y: yc1n,\n        move: coral1nMove,\n        speed: -1.5,\n        display: coral1nDisplay};\n    return C1n;\n}\n\nfunction coral1nMove(){\n    this.x +=this.speed;\n}\n\nfunction coral1nDisplay(xc1,yc1){\n    image(coral1, this.x, this.y,200,200);\n}\n\nfunction updateAndDisplayCoral1n(){\n    for(var i = 0; i &lt; corals1n.length; i++){\n        corals1n[i].move();\n        corals1n[i].display();\n    }\n}\n\nfunction removeCoral1nThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; corals1n.length; i++){\n        if (corals1n[i].x &lt; -1440) {\n            corals1n.shift(corals1n[i]);\n        }\n    }\n}\n\nfunction addNewCoral1n(){\n    var lastCoral1n = corals1n[corals1n.length - 1];\n    if(lastCoral1n.x &lt; -900){\n        var a = makeCoral1n(480,175);\n        corals1n.push(a);\n    }\n} \n\n\n\/\/coral2\nfunction makeCoral2(xc2,yc2){\n    var C2 = {\n        x: xc2, \n        y: yc2,\n        move: coral2Move,\n        speed: -1.5,\n        display: coral2Display};\n    return C2;\n}\n\nfunction coral2Move(){\n    this.x +=this.speed;\n}\n\nfunction coral2Display(xc2,yc2){\n    image(coral2, this.x, this.y,200,200);\n}\n\nfunction updateAndDisplayCoral2(){\n    for(var i = 0; i &lt; corals2.length; i++){\n        corals2[i].move();\n        corals2[i].display();\n    }\n}\n\nfunction removeCoral2ThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; corals2.length; i++){\n        if (corals2[i].x &lt; -1440) {\n            corals2.shift(corals2[i]);\n        }\n    }\n}\n\nfunction addNewCoral2(){\n    var lastCoral2 = corals2[corals2.length - 1];\n    if(lastCoral2.x &lt; -900){\n        var a = makeCoral2(480,75);\n        corals2.push(a);\n    }\n}\n\/\/coral2n\nfunction makeCoral2n(xc2n,yc2n){\n    var C2n = {\n        x: xc2n, \n        y: yc2n,\n        move: coral2nMove,\n        speed: -1.5,\n        display: coral2nDisplay};\n    return C2n;\n}\n\nfunction coral2nMove(){\n    this.x +=this.speed;\n}\n\nfunction coral2nDisplay(xc2n,yc2n){\n    image(coral2, this.x, this.y,200,200);\n}\n\nfunction updateAndDisplayCoral2n(){\n    for(var i = 0; i &lt; corals2n.length; i++){\n        corals2n[i].move();\n        corals2n[i].display();\n    }\n}\n\nfunction removeCoral2nThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; corals2n.length; i++){\n        if (corals2n[i].x &lt; -1440) {\n            corals2n.shift(corals2n[i]);\n        }\n    }\n}\n\nfunction addNewCoral2n(){\n    var lastCoral2n = corals2n[corals2n.length - 1];\n    if(lastCoral2n.x &lt; -900){\n        var a = makeCoral2n(480,230);\n        corals2n.push(a);\n    }\n}\n\/\/coral2b\nfunction makeCoral2b(xc2b,yc2b){\n    var C2b = {\n        x: xc2b, \n        y: yc2b,\n        move: coral2bMove,\n        speed: -1.5,\n        display: coral2bDisplay};\n    return C2b;\n}\n\nfunction coral2bMove(){\n    this.x +=this.speed;\n}\n\nfunction coral2bDisplay(xc2b,yc2b){\n    image(coral2, this.x, this.y,220,220);\n}\n\nfunction updateAndDisplayCoral2b(){\n    for(var i = 0; i &lt; corals2b.length; i++){\n        corals2b[i].move();\n        corals2b[i].display();\n    }\n}\n\nfunction removeCoral2bThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; corals2b.length; i++){\n        if (corals2b[i].x &lt; -1440) {\n            corals2b.shift(corals2b[i]);\n        }\n    }\n}\n\nfunction addNewCoral2b(){\n    var lastCoral2b = corals2b[corals2b.length - 1];\n    if(lastCoral2b.x &lt; -900){\n        var a = makeCoral2b(480,190);\n        corals2b.push(a);\n    }\n}\n\n\/\/group\nfunction makeGroup(xg,yg){\n    var G = {\n        x: xg, \n        y: yg,\n        move: groupMove,\n        speed: -1.5,\n        display: groupDisplay};\n    return G;\n}\n\nfunction groupMove(){\n    this.x +=this.speed;\n}\n\nfunction groupDisplay(xg,yg){\n    image(group, this.x, this.y,350,350);\n}\n\nfunction updateAndDisplayGroup(){\n    for(var i = 0; i &lt; groups.length; i++){\n        groups[i].move();\n        groups[i].display();\n    }\n}\n\nfunction removeGroupThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; groups.length; i++){\n        if (groups[i].x &lt; -1440) {\n            groups.shift(groups[i]);\n        }\n    }\n}\n\nfunction addNewGroup(){\n    var lastGroup = groups[groups.length - 1];\n    if(lastGroup.x &lt; -900){\n        var a = makeGroup(480,140);\n        groups.push(a);\n    }\n}\n\n\/\/weed\nfunction makeWeed(xw,yw){\n    var W = {\n        x: xw, \n        y: yw,\n        move: weedMove,\n        speed: -1.5,\n        display: weedDisplay};\n    return W;\n}\n\nfunction weedMove(){\n    this.x +=this.speed;\n}\n\nfunction weedDisplay(xw,yw){\n    image(weed, this.x, this.y,300,300);\n}\n\nfunction updateAndDisplayWeed(){\n    for(var i = 0; i &lt; weeds.length; i++){\n        weeds[i].move();\n        weeds[i].display();\n    }\n}\n\nfunction removeWeedThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; weeds.length; i++){\n        if (weeds[i].x &lt; -1440) {\n            weeds.shift(weeds[i]);\n        }\n    }\n}\n\nfunction addNewWeed(){\n    var lastWeed = weeds[weeds.length - 1];\n    if(lastWeed.x &lt; -900){\n        var a = makeWeed(480,55);\n        weeds.push(a);\n    }\n}\n\/\/weed2\nfunction makeWeed2(xw2,yw2){\n    var W2= {\n        x: xw2, \n        y: yw2,\n        move: weed2Move,\n        speed: -1.5,\n        display: weed2Display};\n    return W2;\n}\n\nfunction weed2Move(){\n    this.x +=this.speed;\n}\n\nfunction weed2Display(xw2,yw2){\n    image(weed, this.x, this.y,300,300);\n}\n\nfunction updateAndDisplayWeed2(){\n    for(var i = 0; i &lt; weeds2.length; i++){\n        weeds2[i].move();\n        weeds2[i].display();\n    }\n}\n\nfunction removeWeed2ThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; weeds2.length; i++){\n        if (weeds2[i].x &lt; -1440) {\n            weeds2.shift(weeds2[i]);\n        }\n    }\n}\n\nfunction addNewWeed2(){\n    var lastWeed2 = weeds2[weeds2.length - 1];\n    if(lastWeed2.x &lt; -900){\n        var a = makeWeed2(480,30);\n        weeds2.push(a);\n    }\n}\n\n\/\/stars\nfunction makeStar(xs,ys){\n    var S = {\n        x: xs, \n        y: ys,\n        move: starMove,\n        speed: -1.5,\n        display: starDisplay};\n    return S;\n}\n\nfunction starMove(){\n    this.x +=this.speed;\n}\n\nfunction starDisplay(xs,ys){\n    image(star, this.x, this.y,75,75);\n}\n\nfunction updateAndDisplayStar(){\n    for(var i = 0; i &lt; stars.length; i++){\n        stars[i].move();\n        stars[i].display();\n    }\n}\n\nfunction removeStarThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; stars.length; i++){\n        if (stars[i].x &lt; -1440) {\n            stars.shift(stars[i]);\n        }\n    }\n}\n\nfunction addNewStar(){\n    var lastStar = stars[stars.length - 1];\n    if(lastStar.x &lt; -900){\n        var a = makeStar(480,325);\n        stars.push(a);\n    }\n}\n\n\/\/fish school\nfunction makeFish(xf,yf){\n    var F = {\n        x: xf, \n        y: yf,\n        move: fishMove,\n        speed: -3.0,\n        display: fishDisplay};\n    return F;\n}\n\nfunction fishMove(){\n    this.x +=this.speed;\n}\n\nfunction fishDisplay(xf,yf){\n    image(fishschool, this.x, this.y,200,200);\n}\n\nfunction updateAndDisplayFish(){\n    for(var i = 0; i &lt; fishes.length; i++){\n        fishes[i].move();\n        fishes[i].display();\n    }\n}\n\nfunction removeFishThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; fishes.length; i++){\n        if (fishes[i].x &lt; -1440) {\n            fishes.shift(fishes[i]);\n        }\n    }\n}\n\nfunction addNewFishRandomly(){\n    var newFishLikelihood = 0.002; \n    if (random(0,2) &lt; newFishLikelihood) {\n        fishes.push(makeFish(480,25));\n    }\n}\n\n\/\/bubbles\nfunction makeBubble(xb,yb){\n    var B = {\n        x: xb, \n        y: yb,\n        yspeed: -3,\n        move: bubbleMove,\n        speed: -1.5,\n        display: bubbleDisplay};\n    return B;\n}\n\nfunction bubbleMove(){\n    this.x +=this.speed;\n    this.y +=this.yspeed;\n}\n\nfunction bubbleDisplay(xb,yb){\n    noStroke();\n    fill(255);\n    ellipse(this.x,this.y,10,10);\n    ellipse(this.x+a,this.y+a1,20,20);\n    ellipse(this.x+b,this.y+b1,17,17);\n    ellipse(this.x+c,this.y+c1,23,23);\n    ellipse(this.x+d,this.y+d1,15,15);\n\n}\n\nfunction updateAndDisplayBubble(){\n    for(var i = 0; i &lt; bubbles.length; i++){\n        bubbles[i].move();\n        bubbles[i].display();\n    }\n}\n\nfunction removeBubbleThatHaveSlippedOutOfView(){\n    for (var i = 0; i &lt; bubbles.length; i++){\n        if (bubbles[i].x &lt; -1440) {\n            bubbles.shift(bubbles[i]);\n        }\n    }\n}\n\nfunction addNewBubbleRandomly(){\n    var newBubbleLikelihood = 0.02; \n    if (random(0,2) &lt; newBubbleLikelihood) {\n        bubbles.push(makeBubble(185,480));\n    }\n}\n\nfunction draw() {\n    background(backgroundImage); \n\n    updateAndDisplayBubble();\n    addNewBubbleRandomly();\n    removeBubbleThatHaveSlippedOutOfView()\n\n    updateAndDisplayWeed2();\n    addNewWeed2();\n    removeWeed2ThatHaveSlippedOutOfView();\n\n    updateAndDisplayBeach();\n    addNewBeach();\n    removeBeachThatHaveSlippedOutOfView();\n\n    updateAndDisplayWeed();\n    addNewWeed();\n    removeWeedThatHaveSlippedOutOfView();\n\n    updateAndDisplayCoral2();\n    addNewCoral2();\n    removeCoral2ThatHaveSlippedOutOfView();\n\n    updateAndDisplayFish();\n    addNewFishRandomly();\n    removeFishThatHaveSlippedOutOfView();\n\n    updateAndDisplayCoral2b();\n    addNewCoral2b();\n    removeCoral2bThatHaveSlippedOutOfView();\n    updateAndDisplayCoral2n();\n    addNewCoral2n();\n    removeCoral2nThatHaveSlippedOutOfView();\n\n    updateAndDisplayGroup();\n    addNewGroup();\n    removeGroupThatHaveSlippedOutOfView();\n\n    image(fish,140,100,200,230);\n\n    updateAndDisplayCoral1();\n    addNewCoral1();\n    removeCoral1ThatHaveSlippedOutOfView();\n    updateAndDisplayCoral1n();\n    addNewCoral1n();\n    removeCoral1nThatHaveSlippedOutOfView();\n\n    updateAndDisplayStar();\n    addNewStar();\n    removeStarThatHaveSlippedOutOfView();\n\n    \n}\n<\/code><\/pre><\/div>\n\n\n<p>I find the code of this project not too complicated but rather a bit complex, because I need to create many objects to draw on the canvas. Also, the most difficult part is the first object. After successfully make the first object work, the others are much the same with subtle differences. The landscape I created is an under ocean landscape, narrating a fish&rsquo;s journey wandering around.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-1024x768.jpg\" alt=\"\" class=\"wp-image-69075\" srcset=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-content\/uploads\/2021\/11\/IMG_2458-1200x900.jpg 1200w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\"><\/figure><\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>sketchDownload \/*Name:Camellia(Siyun) Wang; Section: C; Email Address: siyunw@andrew.cmu.edu;*\/ \/\/https:\/\/imgur.com\/DBFXrXh coral2 \/\/https:\/\/imgur.com\/nyf5GKY coral1 \/\/https:\/\/imgur.com\/JXohvV2 group \/\/https:\/\/imgur.com\/4hO2HW1 weed \/\/https:\/\/imgur.com\/N4zWoA4 \/\/https:\/\/imgur.com\/J8R7qyD beach var beaches = []; var corals1 = []; var corals1n = []; var corals2 = []; var corals2n = []; var corals2b = []; var groups = []; var weeds = []; var weeds2 = []; &hellip; <a href=\"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/2021\/11\/14\/project-11-generative-landscape-6\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Project-11: Generative Landscape&#8221;<\/span><\/a><\/p>\n","protected":false},"author":676,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[115,57],"tags":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/posts\/69062"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/users\/676"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/comments?post=69062"}],"version-history":[{"count":2,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/posts\/69062\/revisions"}],"predecessor-version":[{"id":69076,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/posts\/69062\/revisions\/69076"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/media?parent=69062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/categories?post=69062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/15-104\/f2021\/wp-json\/wp\/v2\/tags?post=69062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}