{"id":5330,"date":"2021-05-06T00:58:46","date_gmt":"2021-05-06T04:58:46","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/?p=5330"},"modified":"2021-05-06T11:16:43","modified_gmt":"2021-05-06T15:16:43","slug":"project-2-desk-pets-kanvi-and-yael","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/5330\/project-2-desk-pets-kanvi-and-yael\/","title":{"rendered":"Project 2: Desk Pets &#8211; Kanvi and Yael"},"content":{"rendered":"\n<h3><strong>Concept<\/strong><\/h3>\n\n\n\n<p>The two of us were interested in exploring a rivalry between two devices that respond to very deliberate stimulus and communicate that stimulus between each other. We were drawn to the idea of creating small expressive creatures that beg for the users attention and compete with each other almost as siblings do. We were also interested in creating a sort of &#8216;counter&#8217; that is communicated back and forth through the MQTT connection in order to keep track of which Desk Pet is in the lead and which is losing.<\/p>\n\n\n\n<p>We see the narrative as two connected desk pets that both seek to gain more attention from their users than the other. They communicate to the user and to each other through idle movement, boasting when they receive more attention, and begging when they are receiving less than their other pair.<\/p>\n\n\n\n<h3><strong>Process <\/strong><\/h3>\n\n\n\n<p>Our initial ideas for how to express a rivalry between two Desk Pets was through the stretching and folding of fabric. In order to determine the best type of fabric to use and the best type of connection to the servos, we did a few material studies.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"599\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-1024x599.jpg\" alt=\"\" class=\"wp-image-5159\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-1024x599.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-300x176.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-768x449.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-1536x899.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-2048x1198.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-973x569.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/ditto-vibes-508x297.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"muslin 1\" width=\"620\" height=\"465\" src=\"https:\/\/www.youtube.com\/embed\/NAGqzG_Tj5w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>The two of us quickly found that muslin and wooden sticks were too stiff to generate our desired effects. From there, we moved on to fabrics that stretched more. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"stretchy 1\" width=\"620\" height=\"465\" src=\"https:\/\/www.youtube.com\/embed\/HHRNvFQPPd0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Along with the fabric tests, we also considered different mounting options for the servos. We began rather ambitious, expecting the use of 4 servos per person. By the end, we were able to cut the servos down to 2 per person, but maintain 4 points of contact by doubling up on each servo. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"833\" height=\"1024\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-833x1024.jpg\" alt=\"\" class=\"wp-image-5134\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-833x1024.jpg 833w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-244x300.jpg 244w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-768x945.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-1249x1536.jpg 1249w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-973x1197.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image-508x625.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/image.jpg 1513w\" sizes=\"(max-width: 833px) 100vw, 833px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Project 2 - Prototype 1 - both servos\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/bQh-oa2DSIY?start=5&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Once we had the method of movement and the best type of fabric and connection figured out, we were driven to finding a better form for out Desk Pet. The flat fabric was ideal for stretching, but it lacked depth and character. This inspired the new form of the Desk Pet that also included a more expressive face.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"498\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-1024x498.jpg\" alt=\"\" class=\"wp-image-5237\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-1024x498.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-300x146.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-768x373.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-1536x747.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-2048x996.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-973x473.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/20210429_084324-508x247.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>This new form inspired our idea for where to place the touch sensor. Making the head itself the sensor proved to be too difficult, but it shone a light on the option of making the touch sensor something detached that still rests atop the head- a hat! We stuck a touch sensor between the fabric attached to the hat to pit it between the form and the fabric and connected it accordingly to allow for the Desk Pet to respond to touch stimulus. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"1024\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-1024x1024.jpg\" alt=\"\" class=\"wp-image-5293\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-1024x1024.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-300x300.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-150x150.jpg 150w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-768x768.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-1536x1536.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-2048x2048.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-88x88.jpg 88w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-973x973.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153725-508x508.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We created three different states for our Desk Friends.<\/p>\n\n\n\n<p>Jealous begging and happy movements:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desk Friend - Begging and Happy Movements\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/_oU_FNmSapY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Lonely movements:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desk Friend - Lonely Movements\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/ueGgI2v8QME?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3><strong>Execution<\/strong><\/h3>\n\n\n\n<p>Our final Desk Pet looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-1024x1024.jpg\" alt=\"\" class=\"wp-image-5294\" width=\"617\" height=\"617\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-1024x1024.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-300x300.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-150x150.jpg 150w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-768x768.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-1536x1536.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-2048x2048.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-88x88.jpg 88w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-973x973.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/20210501_153325-508x508.jpg 508w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"598\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-1024x598.jpg\" alt=\"\" class=\"wp-image-5354\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-1024x598.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-300x175.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-768x448.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-1536x897.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-2048x1196.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-973x568.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Screen-Shot-2021-05-06-at-12.49.43-AM-508x297.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desk Friends by Yael and Kanvi\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/frezG8ja7zg?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3><strong>Code<\/strong><\/h3>\n\n\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Kinetic Fabrics S21\n# Kanvi and Yael\n\n# -----------------------------------------\n# Import the standard Python time functions.\nimport time\n\n# Import the low-level hardware libraries.\nimport board\nimport digitalio\nimport analogio\n\nimport pwmio\nfrom adafruit_circuitplayground import cp\nfrom adafruit_motor import servo\n\nimport supervisor\nimport sys\n\nanalogin = analogio.AnalogIn(board.A2)\n\n# Create a PWMOut object on pad SDA A5 to generate control signals.\npwm1 = pwmio.PWMOut(board.A5, duty_cycle=0, frequency=50)\n\n# Create a PWMOut object on pad A3 to generate control signals.\npwm2 = pwmio.PWMOut(board.A3, duty_cycle=0, frequency=50)\n\n# Create a Servo object which controls a hobby servo using the PWMOut.\nservo1 = servo.Servo(pwm1, min_pulse=1000, max_pulse=2000)\n\n# Create a Servo object which controls a hobby servo using the PWMOut.\nservo2 = servo.Servo(pwm2, min_pulse=1000, max_pulse=2000)\n\n# adjust these for indivudal projects\nHAPPY_START = 0\nHAPPY_STOP = 30\nHAPPY_SERVO2_OFFSET = 60\n\nBEG_START = 90\nBEG_STOP = 10\n\n#########################################\n\n\ndef getVoltage(pin):  # helper\n    return (pin.value * 3.3) \/ 1023\n\n\ndef happy(level):\n    for i in range(10):\n        for angle in range(HAPPY_START, HAPPY_STOP, 1):\n            servo1.angle = angle\n            servo2.angle = angle + HAPPY_SERVO2_OFFSET\n            time.sleep(0.1 \/ level)\n\n        for angle in range(HAPPY_STOP, HAPPY_START, -1):\n            servo1.angle = angle\n            servo2.angle = angle + HAPPY_SERVO2_OFFSET\n            time.sleep(0.1 \/ level)\n\n\ndef beg():\n    for i in range(10):\n        for angle in range(HAPPY_START, HAPPY_STOP, 1):\n            servo1.angle = angle\n            time.sleep(0.1)\n\n        for angle in range(HAPPY_START, HAPPY_STOP, 1):\n            servo2.angle = angle + HAPPY_SERVO2_OFFSET\n            time.sleep(0.1)\n\n        for angle in range(HAPPY_STOP, HAPPY_START, -1):\n            servo1.angle = angle\n            time.sleep(0.1)\n\n        for angle in range(HAPPY_STOP, HAPPY_START, -1):\n            servo2.angle = angle + HAPPY_SERVO2_OFFSET\n            time.sleep(0.1)\n\n\ndef neglect():\n    for i in range(2):\n        for angle in range(BEG_START, BEG_STOP, -1):\n            servo2.angle = angle\n            time.sleep(0.02)\n\n        for angle in range(BEG_STOP, BEG_START, 1):\n            servo2.angle = angle\n            time.sleep(0.02)\n\n        for angle in range(BEG_STOP, BEG_START, 1):\n            servo1.angle = angle\n            time.sleep(0.02)\n\n        for angle in range(BEG_START, BEG_STOP, -1):\n            servo1.angle = angle\n            time.sleep(0.02)\n\n\npetCount = 0\nlonely = 0\n\nwhile True:\n    if supervisor.runtime.serial_bytes_available:\n        line = sys.stdin.readline()\n        print(&quot;hi&quot;)\n        if line == &quot;beg lots&quot;:\n            reading = getVoltage(analogin)\n            # print(&quot;Analog Voltage: %f&quot; % reading)\n            while reading &lt; 10:\n                beg()\n            happy(16)\n\n    reading = getVoltage(analogin)\n    #print(&quot;Analog Voltage: %f&quot; % reading)\n\n    if reading &amp;gt; 10:\n        petCount += 1\n    else:\n        lonely += 1\n\n    if petCount == 16:\n        print(&quot;beg lots&quot;)\n        happy(petCount)\n        petCount = 0\n        lonely = 0\n\n    if lonely &amp;gt; 50:\n        neglect()\n        lonely = 0\n\n    time.sleep(0.2)\n\n<\/pre>\n\n\n<h3><strong>Conclusion and Reflection<\/strong><\/h3>\n\n\n\n<p>This project was so much fun! We had a lot of fun building these Desk Pets and their accompanying code. The material and servo studies at the beginning were extremely helpful in informing our final outcome and we expect these studies to continue to inform our design decisions in future projects to come. The combination of several servos and various levels of input were also challenging to implement at first but very worthwhile by the end of the project.<\/p>\n\n\n\n<p>There is so much more that the two of us would love to develop had we more time to continue working on these Desk Pets. Our initial concepts included multiple stimulus inputs including light and sound along with touch. We both feel that had we more time, the project would be much more compelling with those additional inputs to create different outputs that aren&#8217;t in the current project. In our initial concept, we also discussed having a visual &#8216;counter&#8217; that displayed how ahead or behind the users Desk Pet was with attention received. We chose to leave it out in this iteration due to not having a good way of connecting the circuit playground to the constructed Desk Pet. We felt that by having the counter elsewhere on the table, flashing bright lights at the user, it would be too distracting and take away from the interesting folding and stretching of the fabric. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concept The two of us were interested in exploring a rivalry between two devices that respond to very deliberate stimulus and communicate that stimulus between each other. We&#8230;<\/p>\n","protected":false},"author":81,"featured_media":5362,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[12],"tags":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts\/5330"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/comments?post=5330"}],"version-history":[{"count":16,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts\/5330\/revisions"}],"predecessor-version":[{"id":5377,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts\/5330\/revisions\/5377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/media\/5362"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/media?parent=5330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/categories?post=5330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/tags?post=5330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}