{"id":5415,"date":"2021-05-10T09:28:49","date_gmt":"2021-05-10T13:28:49","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/?p=5415"},"modified":"2021-05-10T09:28:50","modified_gmt":"2021-05-10T13:28:50","slug":"project-2-masks-off-anishwar-tirupathur-and-elise-delgado","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/5415\/project-2-masks-off-anishwar-tirupathur-and-elise-delgado\/","title":{"rendered":"Project 2: Masks Off &#8211; Anishwar Tirupathur and Elise Delgado"},"content":{"rendered":"\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Automatic.mp4\"><\/video><\/figure>\n\n\n\n<p><strong>CONCEPT:<\/strong><\/p>\n\n\n\n<p>Masks Off is a project that investigates the proxy face or, in other words, the face upon the face. The masks that are constructed as a result of this investigation juxtapose the abstracted face of the wearer&#8217;s partner on top of that of the wearer and the partner&#8217;s environment upon the wearer. The mask takes data from the partner&#8217;s environment in order to activate the masks. In the case of Elise&#8217;s mask, the position of Anishwar&#8217;s head while wearing his mask sends data to Elise&#8217;s mask in order to activate the pneumatic and speaker of the Bluefruit. Anishwar&#8217;s mask is activated by the level of darkness in Elise&#8217;s environment which causes the pneumatic in his mask to inflate and the speaker on his Bluefruit to play tones. <\/p>\n\n\n\n<p>The team decided to explore the concept of the proxy face and the juxtaposition of distant people and environments on another because they were interested in analyzing the significance and implications of the remote digital communication that has become popularized during the Covid-19 pandemic through the symbol of the mask which has taken on a new prominence and significance during this time period. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"1006\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-1024x1006.jpg\" alt=\"\" class=\"wp-image-5416\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-1024x1006.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-300x295.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-768x755.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-973x956.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks-508x499.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/Design-Diagram-for-Masks.jpg 1456w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Concept Sketch<\/figcaption><\/figure>\n\n\n\n<p><strong>EXECUTION:<\/strong><\/p>\n\n\n\n<p>We decided to overlap tulle over fabric since the embroidery was much easier on the tulle. Elise stitched the designs into the tulle to create the faces and attached the tulle to the fabric underneath. For Anishwar, we used the lace &#8216;sheet&#8217; that Elise sewed together. For Elise, we used the stretchy metallic fabric. The masks were pretty jarring in imagery and interesting at the same time.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"768\" height=\"1024\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-768x1024.jpg\" alt=\"\" class=\"wp-image-5466\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-768x1024.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-225x300.jpg 225w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-1152x1536.jpg 1152w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-1536x2048.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-973x1297.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-508x677.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5172-1-scaled.jpg 1920w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>Anishwar&#8217; Mask<\/figcaption><\/figure>\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\/IMG_5170-1024x1024.jpg\" alt=\"\" class=\"wp-image-5465\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-1024x1024.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-300x300.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-150x150.jpg 150w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-768x768.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-1536x1536.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-2048x2048.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-88x88.jpg 88w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-973x973.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5170-508x508.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"763\" height=\"1024\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-763x1024.jpg\" alt=\"\" class=\"wp-image-5468\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-763x1024.jpg 763w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-224x300.jpg 224w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-768x1030.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-1145x1536.jpg 1145w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-1526x2048.jpg 1526w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-973x1305.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-508x682.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/05\/IMG_5181-scaled.jpg 1908w\" sizes=\"(max-width: 763px) 100vw, 763px\" \/><figcaption>Elise&#8217;s Mask<\/figcaption><\/figure>\n\n\n\n<p><strong>PROCESS:<\/strong><\/p>\n\n\n\n<p>Our process begin with experimenting on what we wanted the masks to incorporate and how might they look. Anishwar drew sketches of ideas and the one below was what we ultimately went with. The idea was to create a proxy face on top of our own and involve lights and noise when reacting to the other&#8217;s environment. Our final tweaked those processes.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/IMG_6738-584x1024.jpg\" alt=\"This image has an empty alt attribute; its file name is IMG_6738-584x1024.jpg\" width=\"457\" height=\"801\" \/><figcaption>First Sketches<\/figcaption><\/figure>\n\n\n\n<p>The idea for the masks came from the runway, looking at the work of John Galliano. You can see the influence in our work as we used tulle and bold colors as well as the black thread detailing in Anishwar&#8217;s mask. Elise&#8217;s mask also used embroidery detailing and tulle but in a red thread.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/mask3.jpeg\" alt=\"This image has an empty alt attribute; its file name is mask3.jpeg\" width=\"267\" height=\"401\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/mask-1-790x1024.jpeg\" alt=\"This image has an empty alt attribute; its file name is mask-1-790x1024.jpeg\" width=\"268\" height=\"347\" \/><\/figure>\n\n\n\n<p>After gathering the basic idea, we chose to look at the working parts. We experimented with pneumatics before we got the motor pump. Once we got the motor, we also made sure to add holes to that the inflatables could relax between pumping cycles. The final inflatables were smaller round bladders.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/IMG_5067-768x1024.jpg\" alt=\"This image has an empty alt attribute; its file name is IMG_5067-768x1024.jpg\" \/><\/figure>\n\n\n\n<p>We also experimented with the design aspects, looking at embroidery and the fabric that we could use. When making the final mask, the embroidery foot on the sewing machine was eating up the tulle and making holes, so we chose to do hand-stitching with embroidery floss when making the faces.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/IMG_6744-1-1024x768.jpg\" alt=\"This image has an empty alt attribute; its file name is IMG_6744-1-1024x768.jpg\" \/><figcaption>Anishwar&#8217;s Embroidery Experimentation<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-content\/uploads\/2021\/04\/IMG_5114-768x1024.jpg\" alt=\"This image has an empty alt attribute; its file name is IMG_5114-768x1024.jpg\" \/><figcaption>Lace used for Anishwar&#8217;s mask<\/figcaption><\/figure>\n\n\n\n<p>After we figured out our working parts, we combined our efforts to create the final masks. We had a lot of trouble getting the code to work over the bridge and that took a lot of our time. The final masks also used a double layer of fabric, one with embroidery and the other to give more structure and color. The pneumatics were placed under the masks, either with elastic around the head or attached to the inside of the mask. <\/p>\n\n\n\n<p><strong>ANISHWAR&#8217;S CODE:<\/strong><\/p>\n\n\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# cpb_pump_control.py\n\n# Demonstrate control of an air pump based on a DC motor driven via a MOSFET\n# transistor driver circuit *or* a DRV8833 motor driver in a single-ended mode.\n#\n#  1. The driver PWM input           connects to A2\n#  2. The battery ground line        connects to GND\n\n# Related documentation:\n# https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/pwmio\/index.html#module-pwmio\n# https:\/\/circuitpython.readthedocs.io\/projects\/motor\/en\/latest\/api.html#module-adafruit_motor.servo\n\n# ----------------------------------------------------------------\n# Import standard Python modules.\nimport time, math, sys\n\n# Import the board-specific input\/output library.\nfrom adafruit_circuitplayground import cp\n\n# Import the low-level hardware libraries.\nimport board\nimport pwmio\nimport supervisor\n\n# ----------------------------------------------------------------\n# Initialize hardware.\n\n# Create a PWMOut object on pad A2 to generate control signals.\npwm = pwmio.PWMOut(board.A3, duty_cycle=0, frequency=20000)\n\n# ----------------------------------------------------------------\n# Initialize global variables for the main loop.\n\nphase_angle = 0.0\ncycle_duration = 12                       # seconds per cycle\nphase_rate  = 2*math.pi \/ cycle_duration  # radians\/second\nnext_pwm_update = time.monotonic_ns()\nnext_status_update = time.monotonic_ns()\ntoneCheck = True\nnextSound = time.monotonic_ns()\npitch = 329\npitchTwo = 293\nnextPrint = time.monotonic_ns()\ntokens = []\nmotionDuration = 0\nsoundDuration = 0\nsoundDurationTwo = 0\nlastNow = time.monotonic_ns()\n# ----------------------------------------------------------------\n# Enter the main event loop.\nwhile True:\n    # Read the current integer clock.\n    #print (pitch)\n    now = time.monotonic_ns()\n    soundNow = time.monotonic_ns()\n\n    elapsedTime = now - lastNow\n    lastNow = now\n\n    x,y,z = cp.acceleration\n    if now &amp;gt;= nextPrint:\n        print(pwm.duty_cycle)\n        nextPrint = now + 2000000000\n        if x &amp;gt; 1 or y &lt; 0:\n            print(&quot;start&quot;)\n            if x &amp;gt;= 1.25:\n                print(&quot;go&quot;)\n            elif y &lt; 0:\n                print(&quot;onward&quot;)\n    if supervisor.runtime.serial_bytes_available:\n        line = sys.stdin.readline()\n        tokens = line.split()\n        if line.startswith(&quot;begi&quot;):\n            motionDuration = 7050000000\n        if line.startswith(&quot;now&quot;):\n            soundDuration = 500000000\n        if line.startswith(&quot;geronimo&quot;):\n            soundDurationTwo = 500000000\n    # If the time has arrived to update the servo command signal:\n    if soundDuration &amp;gt; soundDurationTwo:\n        soundDurationTwo = 0\n    elif soundDurationTwo &amp;gt; soundDuration:\n        soundDuration = 0\n    if motionDuration &amp;gt; 0:\n        if now &amp;gt;= next_pwm_update:\n            next_pwm_update += 20000000  # 20 msec in nanoseconds (50 Hz update)\n            pwm_level = 0.5 + 0.5 * math.sin(phase_angle)\n\n            # convert a unit-range (0 to 1) pwm_level to a 16-bit integer representing a fraction\n            new_duty_cycle = min(max(int(pwm_level * 2**16), 0), 2**16-1)\n\n            # If the new value is less than a reasonable minimum, clamp to zero.\n            # The pump motor will stall if the PWM fraction is too low; this turns\n            # it off instead.\n            if new_duty_cycle &lt; 48000:\n                pwm.duty_cycle = 0\n            else:\n                pwm.duty_cycle = new_duty_cycle\n\n            phase_angle = (phase_angle + phase_rate * 0.01) % (.5 * math.pi)\n\n        # If either button is pressed, override the generated servo signal and run the motor.\n        if cp.button_a or cp.button_b:\n            pwm.duty_cycle = 2**16-1\n\n        # If the time has arrived to display the status:\n        if now &amp;gt;= next_status_update:\n            next_status_update += 500000000  # 0.5 sec in nanoseconds (2 Hz update)\n        motionDuration -= elapsedTime\n    else:\n        pwm.duty_cycle = 0\n\n\n\n    if soundDuration &amp;gt; 0:\n        if soundNow &amp;gt;= nextSound:\n            if pitch == 329:\n                pitch = 493\n                cp.stop_tone()\n                cp.start_tone(pitch)\n                nextSound = soundNow + 500000000\n            elif pitch == 493:\n                pitch = 329\n                cp.stop_tone()\n                cp.start_tone(pitch)\n                nextSound = soundNow + 500000000\n            soundDuration -= elapsedTime\n    elif soundDurationTwo &amp;gt; 0:\n        if soundNow &amp;gt;= nextSound:\n            if pitchTwo == 293:\n                pitchTwo = 466\n                cp.stop_tone()\n                cp.start_tone(pitchTwo)\n                nextSound = soundNow + 500000000\n            elif pitchTwo == 466:\n                pitchTwo = 293\n                cp.stop_tone()\n                cp.start_tone(pitchTwo)\n                nextSound = soundNow + 500000000\n            soundDurationTwo -= elapsedTime\n    else:\n        cp.stop_tone()\n<\/pre>\n\n\n<p><strong>ELISE&#8217;S CODE:<\/strong><\/p>\n\n\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/pwmio\/index.html#module-pwmio\n# https:\/\/circuitpython.readthedocs.io\/projects\/motor\/en\/latest\/api.html#module-adafruit_motor.servo\nimport time, math, sys\nfrom adafruit_circuitplayground import cp\nimport board\nimport pwmio\nimport supervisor\npwm = pwmio.PWMOut(board.A3, duty_cycle=0, frequency=20000)\nphase_angle = 0.0\ncycle_duration = 12                       # seconds per cycle\nphase_rate  = 2*math.pi \/ cycle_duration  # radians\/second\nnext_pwm_update = time.monotonic_ns()\nnext_status_update = time.monotonic_ns()\ntoneCheck = True\nnextSound = time.monotonic_ns()\npitch = 329\npitchTwo = 293\nnextPrint = time.monotonic_ns()\nmotionDuration = 0\nsoundDuration = 0\nsoundDurationTwo = 0\nlastnow = time.monotonic_ns()\n\nwhile True:\n    # Read the current integer clock.\n    #print(cp.light)\n    now = time.monotonic_ns()\n    soundNow = time.monotonic_ns()\n\n    elapsed_time = now - lastnow\n    lastnow = now\n\n    if now &amp;gt;= nextPrint:\n        nextPrint = now + 2000000000\n        if cp.light &lt; 100:\n            print(&quot;begi&quot;)\n            if cp.light &lt; 81 and cp.light &amp;gt;= 21:\n                print(&quot;now&quot;)\n            elif cp.light &lt; 20:\n                print(&quot;geronimo&quot;)\n        else:\n            print(&quot;bright&quot;)\n\n\n    if supervisor.runtime.serial_bytes_available:\n        line = sys.stdin.readline()\n        #print(line)\n        #tokens = line.split()\n        if line.startswith(&quot;start&quot;):\n            motionDuration = 9000000000\n        if line.startswith(&quot;go&quot;):\n            soundDuration = 5000000000\n        if line.startswith(&quot;onward&quot;):\n            soundDurationTwo = 5000000000\n        # If the time has arrived to update the servo command signal:\n    if motionDuration &amp;gt; 0:\n        if now &amp;gt;= next_pwm_update:\n            next_pwm_update += 20000000  # 20 msec in nanoseconds (50 Hz update)\n            pwm_level = 0.5 + 0.5 * math.sin(phase_angle)\n\n            # convert a unit-range (0 to 1) pwm_level to a 16-bit integer representing a fraction\n            new_duty_cycle = min(max(int(pwm_level * 2**16), 0), 2**16-1)\n\n            # If the new value is less than a reasonable minimum, clamp to zero.\n            # The pump motor will stall if the PWM fraction is too low; this turns\n            # it off instead.\n            if new_duty_cycle &lt; 48000:\n                pwm.duty_cycle = 0\n            else:\n                pwm.duty_cycle = new_duty_cycle\n\n            phase_angle = (phase_angle + phase_rate * 0.020) % (1 * math.pi)\n\n        # If either button is pressed, override the generated servo signal and run the motor.\n        if cp.button_a or cp.button_b:\n            pwm.duty_cycle = 2**16-1\n\n        # If the time has arrived to display the status:\n        if now &amp;gt;= next_status_update:\n            next_status_update += 500000000  # 0.5 sec in nanoseconds (2 Hz update)\n            #print(pwm.duty_cycle)\n        motionDuration -= elapsed_time\n    else:\n        pwm.duty_cycle = 0\n        cp.stop_tone()\n    if soundDuration &amp;gt; soundDurationTwo:\n        soundDurationTwo = 0\n    elif soundDurationTwo &amp;gt; soundDuration:\n        soundDuration = 0\n\n    if soundDuration &amp;gt; 0 and soundDurationTwo == 0:\n        if soundNow &amp;gt;= nextSound:\n            if pitch == 329:\n                pitch = 493\n                cp.stop_tone()\n                cp.start_tone(pitch)\n                nextSound = soundNow + 500000000\n            elif pitch == 493:\n                pitch = 329\n                cp.stop_tone()\n                cp.start_tone(pitch)\n                nextSound = soundNow + 500000000\n        soundDuration -= elapsed_time\n    elif soundDurationTwo &amp;gt; 0 and soundDuration == 0:\n        if soundNow &amp;gt;= nextSound:\n            if pitchTwo == 293:\n                pitchTwo = 466\n                cp.stop_tone()\n                cp.start_tone(pitchTwo)\n                nextSound = soundNow + 500000000\n            elif pitchTwo == 466:\n                pitchTwo = 293\n                cp.stop_tone()\n                cp.start_tone(pitchTwo)\n                nextSound = soundNow + 500000000\n        soundDurationTwo -= elapsed_time\n    else:\n        cp.stop_tone()\n<\/pre>\n\n\n<p><strong>REFLECTION:<\/strong><\/p>\n\n\n\n<p>If there was more time, the team would have liked to make more masks and potentially create an installation with multiple of these masks being animated and producing sound together. It would have been interesting to explore this current iteration of the project in different contexts. The primary location for testing the final version of this project was the College of Fine Arts building; however, it would be interesting to see how the masks would be affected if used outside or in vastly more distant locations. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>CONCEPT: Masks Off is a project that investigates the proxy face or, in other words, the face upon the face. The masks that are constructed as a result&#8230;<\/p>\n","protected":false},"author":82,"featured_media":0,"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\/5415"}],"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\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/comments?post=5415"}],"version-history":[{"count":10,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts\/5415\/revisions"}],"predecessor-version":[{"id":5481,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/posts\/5415\/revisions\/5481"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/media?parent=5415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/categories?post=5415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-376\/s2021\/wp-json\/wp\/v2\/tags?post=5415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}