{"id":2393,"date":"2019-02-10T12:01:11","date_gmt":"2019-02-10T03:01:11","guid":{"rendered":"https:\/\/www.codedojo.com\/?p=2393"},"modified":"2022-01-07T19:06:19","modified_gmt":"2022-01-07T10:06:19","slug":"spawning-annoying-black-holes-in-fortnite-to-force-a-kid-to-exercise","status":"publish","type":"post","link":"https:\/\/www.codedojo.com\/?p=2393","title":{"rendered":"Spawning annoying black holes in Fortnite to force a kid to exercise"},"content":{"rendered":"<p><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/05\/playstep_thumb_506_285.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2490\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/05\/playstep_thumb_506_285.jpg\" alt=\"\" width=\"506\" height=\"285\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/05\/playstep_thumb_506_285.jpg 506w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/05\/playstep_thumb_506_285-300x169.jpg 300w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/a><\/p>\n<p>Sure, there are ways to get exercise while gaming. Virtual reality and music games like Dance Dance Revolution come to mind.<\/p>\n<p>But <strong>that&#8217;s all worthless<\/strong> when your kid just wants to play Fortnite.<\/p>\n<p>Behold, the PlayStep!<\/p>\n<p>Edit:&nbsp; Also check out the <a href=\"https:\/\/www.codedojo.com\/?p=2763\">PlayStep Mini<\/a>, a $10 version!<\/p>\n<p><iframe loading=\"lazy\" title=\"Kid being forced to pedal to play Fortnite (Seth&#039;s hardware hacks: PlayStep)\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/0a57RYg7ysY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>This thing forces him to work up a sweat. This post details what methods I used and issues I had making it.&nbsp; (Github source code for the program that runs on the Pi&nbsp;<a href=\"https:\/\/github.com\/SethRobinson\/RTPlayStep\">here<\/a>&nbsp;for anybody who wants to make one)<\/p>\n<p>Building a screen blanker connected to exercise isn&#8217;t a new idea (see the end of this post for related links I found) but my version does have some novel features:<\/p>\n<ul>\n<li>Dynamically modifies the video and audio of the game&#8217;s HDMI signal to do things like partially obscure the screen in random ways<\/li>\n<li>Uses an energy bank so you can save up game time.&nbsp; This means you can madly pedal in the lobby and still sit in a chair during the critical parts of Fortnite<\/li>\n<\/ul>\n<p>I first built a cheap version (~$120 in parts).&nbsp; It just blanks the screen when you&#8217;re out of energy, and uses an LCD screen to show energy left.<\/p>\n<p>I then did a better but more expensive way (~$700 in parts) but it&#8217;s a lot cooler.<\/p>\n<div id=\"attachment_2410\" style=\"width: 635px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2410\" class=\"wp-image-2410 size-large\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled-1024x736.jpg\" alt=\"\" width=\"625\" height=\"449\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled-1024x736.jpg 1024w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled-300x216.jpg 300w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled-768x552.jpg 768w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled-624x449.jpg 624w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/playstep_labeled.jpg 1200w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><p id=\"caption-attachment-2410\" class=\"wp-caption-text\">The expensive version with HDMI in\/out, the &#8220;enclosure&#8221; is a plastic basket thing from the dollar store<\/p><\/div>\n<h2><strong>Things both ways have in common:<\/strong><\/h2>\n<ul>\n<li>Use a Raspberry Pi 3B+ (a $40 computer with hardware GLES acceleration) with the Retropie distro &#8211; I start with it because its mouse\/keyboard\/GLES\/SDL works out of the box with Proton SDK where normal Raspian requires tweaking\/compiling some things<\/li>\n<li>Use <a href=\"https:\/\/www.rtsoft.com\/wiki\/doku.php?id=proton:raspi_setup\">Proton SDK<\/a>&nbsp;for for the app base (allows me to design\/test on Windows, handles abstraction for many platforms so I can write once but run everywhere)<\/li>\n<li>Use&nbsp;<a href=\"https:\/\/www.adafruit.com\/product\/158\">hall effect sensors<\/a> to detect the pedal down position on each pedal via the Pi&#8217;s GPIO, this way a kid can&#8217;t cheat, he&#8217;s forced to move the full range of the stepper<\/li>\n<li>The sensors are placed on a stepper exerciser.&nbsp; I used a USB connector for the wiring so I could unplug\/replace it later if I wanted to setup a different exercise machine, like if I ever got a stationary bike.<\/li>\n<\/ul>\n<div id=\"attachment_2396\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_5.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2396\" class=\"wp-image-2396 size-full\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_5.jpg\" alt=\"\" width=\"600\" height=\"450\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_5.jpg 600w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_5-300x225.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2396\" class=\"wp-caption-text\">Yes, I&#8217;m about to duct tape an electrical taped sensor to a pencil that has been zip-tied in place. What? I never said I was pro<\/p><\/div>\n<h2>A note on using USB cables for wires and my idiocy<\/h2>\n<p>Each hall effect sensor requires three wires.&nbsp; We have two sensors.&nbsp; So we need to run six wires from the Pi GPIO pins?&nbsp; WRONG! We only need four because the power and ground can be shared between them.<\/p>\n<p>Update: This was dumb, I later just used the built in hall effect sensor these steppers already have.&nbsp; You just need one, it doesn&#8217;t force the same range but it&#8217;s good enough.<\/p>\n<p>So I thought hey, I&#8217;ll use USB cables and connectors laying around as they have four wires in them. (until we get to USB 3+ cables, but ignore that)<\/p>\n<p>Then I thought, if I could find a simple USB Y splitter, it will be easier to share the power\/ground with the two sensors . (I&#8217;m not actually using this as a USB connection, it&#8217;s just so I can use the wire and handy plugs)<\/p>\n<p>Wow, I found this for cheap on Amazon:<\/p>\n<div id=\"attachment_2399\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2399\" class=\"wp-image-2399 size-full\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_1.jpg\" alt=\"\" width=\"600\" height=\"445\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_1.jpg 600w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_1-300x223.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2399\" class=\"wp-caption-text\">Perfect!&nbsp; A lowly USB splitter that I&#8217;m sure just has no fancy electronics hidden inside<\/p><\/div>\n<p>So I partially wired it up but when testing found that the middle pins had no continuity.&nbsp; Can you guess why?<\/p>\n<div id=\"attachment_2397\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_3.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2397\" class=\"size-full wp-image-2397\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_3.jpg\" alt=\"\" width=\"600\" height=\"480\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_3.jpg 600w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/usb_3-300x240.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2397\" class=\"wp-caption-text\">WHAT THE HELL IS THIS INSIDE THE CABLE?!<\/p><\/div>\n<p>It&#8217;s got a hub or something hidden in the connector.&nbsp; I never plugged it into an actual PC or I might have noticed.&nbsp; No wonder it didn&#8217;t work.&nbsp; I removed the electronics part (it was a horror, I shouldn&#8217;t be allowed near soldering irons) and it worked as expected. Moral of the story is, I&#8217;m dumb, and don&#8217;t trust USB splitters to just split the wires.<\/p>\n<h2><strong>The cheap way (just screen blanking with LCD panel)<\/strong><\/h2>\n<p><iframe loading=\"lazy\" title=\"PlayStep cheap LCD version\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/xUSoH6U1Mzs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>My &#8220;cheap&#8221; way ignores rendering anything graphical (It doesn&#8217;t output any HDMI itself) and just shows a single &#8220;energy count&#8221; number on an LCD screen.&nbsp; When it gets low, the game&#8217;s HDMI signal will be completely shut off until it goes positive again.&nbsp; In the video above I&#8217;m using little buttons to test with instead of the stepper.<\/p>\n<p>Edit: Check out this <a href=\"https:\/\/www.codedojo.com\/?p=2763\">all-in-one more svelte version I did more recently<\/a><\/p>\n<p>To help the user notice the screen is about to shut off it makes a beeping noise as the counter nears zero.<\/p>\n<p>I suggest never testing this at an airport, can&#8217;t stress that enough really.<\/p>\n<p><strong>So how can a Raspberry Pi turn on\/off the game&#8217;s HDMI signal?<\/strong><\/p>\n<div id=\"attachment_2400\" style=\"width: 510px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/hdmi_splitter.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2400\" class=\"wp-image-2400 size-full\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/hdmi_splitter.jpg\" alt=\"\" width=\"500\" height=\"329\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/hdmi_splitter.jpg 500w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/hdmi_splitter-300x197.jpg 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-2400\" class=\"wp-caption-text\">A splitter with no USB power = a dead signal<\/p><\/div>\n<p>This is hacky but it works &#8211; I took an old 1X2 HDMI splitter and powered it from one of the Pi&#8217;s USB ports.&nbsp; (lots of electronics these days use a USB plug for power)<\/p>\n<p>I only use one of the outputs on the splitter as I don&#8217;t really need any splitting done.<\/p>\n<p>It&#8217;s possible to kill the power on a specific Pi USB port using a utility called <a href=\"https:\/\/github.com\/mvp\/uhubctl\">uhubctrl<\/a>.<\/p>\n<p>So when the player is out of &#8220;energy&#8221;, I kill the USB port powering the HDMI splitter by having my C++ code run a system command of:<\/p>\n<pre>.\/uhubctl -a off -p 2<\/pre>\n<p>And because the HDMI splitter is now unpowered, the signal dies killing the game screen.<\/p>\n<p>After turning the USB port back on (replacing &#8220;off&#8221; with &#8220;on&#8221;) it will power up and start processing the HDMI signal again.&nbsp; Originally I was using the Pi to turn on\/off an entire AC outlet but that seemed like overkill &#8211; I was thinking maybe turning off an entire TV or something, but meh.<\/p>\n<p>So the big downsize of this method is it takes up to 5 seconds for the HDMI splitter to turn back on, and your TV to recognize the signal again.&nbsp; It works but&#8230; not optimal.&nbsp; Also, in my case I don&#8217;t really have a good place to put the LCD screen or speaker for the beeping. (might make more sense on a stationary bike instead of a stepper)<\/p>\n<p><strong>Alternate way to disable the HDMI signal :<\/strong> Instead of this no-wiring hack, maybe instead run it through an HDMI cable but put one of the pins into a relay to turn that pin on\/off?&nbsp; Might be the same effect but cheaper and simpler.. although, which pin?!<\/p>\n<h2>The expensive but better way (offers more options with images and audio)<\/h2>\n<p>There isn&#8217;t enough drama in simply turning the HDMI signal on\/off &#8211; wouldn&#8217;t it be better if holes started spawning randomly over your actual gameplay and you had to pedal to remove them as your screen became increasingly obscured?!&nbsp; There are a million options, really.<\/p>\n<p>The Raspberry Pi can generate the graphics (thanks GLES) and audio but we need a way to overlay its HDMI output over the game&#8217;s HDMI signal with no noticeable latency costs at 60fp.<\/p>\n<p>This is known as a chroma key effect.&nbsp; (Side note: I once bought a $5,000 video mixer in the 90s so I could do live-effects like this, a&nbsp;WJ-MX 50.&nbsp; Just saw one on ebay for $100, damn it&#8217;s big)<\/p>\n<div id=\"attachment_2404\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/v02hd.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2404\" class=\"size-full wp-image-2404\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/v02hd.jpg\" alt=\"\" width=\"300\" height=\"159\"><\/a><p id=\"caption-attachment-2404\" class=\"wp-caption-text\">The V-02HD.&nbsp;A lot cheaper than $5,000.<\/p><\/div>\n<p>The cheapest stand-alone way I found to do it these days is a <a href=\"https:\/\/proav.roland.com\/global\/products\/v-02hd\/\">Roland V-02HD video switcher<\/a>. (I bought it for $664 USD from Amazon Japan)<\/p>\n<p>Does anybody know a<strong> better\/cheaper alternative<\/strong>? If I could figure out a no latency way to overlay with an alpha channel instead of just chroma that would really be ideal.<\/p>\n<p>Edit: The <a href=\"https:\/\/www.amazon.com\/Blackmagic-Design-ATEM-Mini-Switcher\/dp\/B07XZKRDLB\">Atem Mini HDMI Live<\/a> switcher looks like it would work too, it&#8217;s a bit cheaper.<\/p>\n<p>Further edit: Check out the <a href=\"https:\/\/www.codedojo.com\/?p=2763\">$10 version I built<\/a>, although it lacks the bells and whistles<\/p>\n<p>It&#8217;s pricey, but it works perfectly.&nbsp; It has the following features of interest:<\/p>\n<ul>\n<li>Remembers all settings when powered on, including chroma key mode and color\/sensitivity<\/li>\n<li>Can disable auto-detection so inputs 1 and 2 are always the same even if input is turned off<\/li>\n<li>Can disable all buttons\/levers on it so accidental changes won&#8217;t happen (we don&#8217;t need them active, it&#8217;s just a black box to us)<\/li>\n<li>It&#8217;s pretty small for a video switcher<\/li>\n<li>Mixes audio into the HDMI signal from both inputs<\/li>\n<li>No noticeable latency<\/li>\n<\/ul>\n<p>Although I didn&#8217;t need or use it, it&#8217;s worth noting that it can show up as a USB MIDI device and be controlled via MIDI signals.&nbsp; I did not need those features but that&#8217;s pretty cool, assuming the Pi could work with it, you could do transitions between inputs or enable\/disable effects.<\/p>\n<h2>The Software<\/h2>\n<div id=\"attachment_2413\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/PlayStep_chroma.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2413\" class=\"wp-image-2413 size-full\" src=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/PlayStep_chroma.jpg\" alt=\"\" width=\"600\" height=\"367\" srcset=\"https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/PlayStep_chroma.jpg 600w, https:\/\/www.codedojo.com\/wp-content\/uploads\/2019\/02\/PlayStep_chroma-300x184.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2413\" class=\"wp-caption-text\">With no color keying, this is what the raw Pi video out looks like<\/p><\/div>\n<p>The software to control things uses Proton SDK with its SDL2 backend and WiringPi for the GPIO to read from the sensors.&nbsp; It&#8217;s modified from the RTBareBones example.<\/p>\n<p>It uses a <strong>config.txt<\/strong> file to adjust a couple things:<\/p>\n<pre>max_energy|600\nenergy_timer|1000\nenergy_per_move|7<\/pre>\n<p style=\"margin-top: 1.71429rem; margin-bottom: 1.71429rem; font-size: 1.28571rem;\"><a href=\"https:\/\/github.com\/SethRobinson\/RTPlayStep\">PlayStep Source code on github<\/a><\/p>\n<p>Here&#8217;s <a href=\"https:\/\/www.rtsoft.com\/wiki\/doku.php?id=proton:raspi_setup\">some info on how to compile Proton examples<\/a>.<\/p>\n<p>To allow the Pi to correctly output 1080P HDMI even if the switcher hasn&#8217;t booted up yet, I edited the&nbsp;<strong>\/boot\/config.txt<\/strong>&nbsp; and set:<\/p>\n<pre>hdmi_force_hotplug=1\nhdmi_drive=2<\/pre>\n<p>To fix remove the unnecessary border I also set:<\/p>\n<pre>disable_overscan=1<\/pre>\n<h2>Final thoughts<\/h2>\n<p>Might be fun to simply design Pi powered pedal games that use the stepper as a controller.&nbsp; You could then output straight to a TV or TFT screen without worrying about the spendy chroma-keying solution.<\/p>\n<p>I mean, sure, my kid would refuse to play it, but it could be a funny thing to show at a meet-up or something.<\/p>\n<h2>Related things to check out<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.instructables.com\/id\/Cycflix-Exercise-Powered-Entertainment\/\">Cycflix: Exercise Powered Entertainment<\/a>&nbsp;&#8211; Uses a laptop to pause netflix if you don&#8217;t pedal fast enough.&nbsp; He connected an arduino directly to the existing stationary bike electronics to measure pedaling, smart.<\/li>\n<li><a href=\"https:\/\/www.instructables.com\/id\/No-TV-unless-you-exercise\/\">No TV unless you exercise!<\/a>&nbsp;&#8211; Arduino mounted on a stationary bike cuts RCA signal via a relay if you don&#8217;t pedal enough.&nbsp; Uses a black\/white detector for movement rather than hall effect sensors.<\/li>\n<li><a href=\"http:\/\/www.d2tech.net\/ourbrochure.shtml\">TV Pedaler<\/a> &#8211; A commercial product that blanks screen if you don&#8217;t pedal enough that is still being sold? The website and product seem really old (no HDMI support) but they accept Paypal and the creator&nbsp;<a href=\"https:\/\/www.instructables.com\/id\/No-TV-unless-you-exercise\/\">posted here<\/a>&nbsp; a few years ago about <a href=\"https:\/\/patents.google.com\/patent\/US6179746B1\/en\">his 1999 patent<\/a> and warned about &#8220;copying&#8221;.&nbsp; Hrmph.&nbsp; His patent covers a bunch of random ideas that his machine doesn&#8217;t use at all. Patents like this are dumb, good thing it says &#8220;Application status is Expired &#8211; Fee Related&#8221; I guess.<\/li>\n<li><a href=\"https:\/\/www.amazon.com\/EnterTRAINER-Power-Your-TV-Exercise\/dp\/B000F8KUN4\">The EnterTRAINER<\/a> &#8211; This defunct commercial device is basically a TV remote control with a heart monitor you strap to your chest.&nbsp; Controls volume and TV power if your heart rate goes too low.&nbsp;<a href=\"https:\/\/www.amazon.com\/gp\/customer-reviews\/R1EDW3PRQHXHI7\/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&amp;ASIN=B000F8KUN4\">Its hilarious infomercial<\/a>&nbsp;was posted in one of the reviews.<\/li>\n<li>The <a href=\"https:\/\/www.youtube.com\/watch?v=tO9_HiWiXdU\">123GoTV KidExerciser<\/a> &#8211; Ancient commercial product that lets you use your own bike in the house to blank the TV if not pedalled fast enough.&nbsp;&nbsp;Company seems gone now.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Sure, there are ways to get exercise while gaming. Virtual reality and music games like Dance Dance Revolution come to mind. But that&#8217;s all worthless when your kid just wants to play Fortnite. Behold, the PlayStep! Edit:&nbsp; Also check out the PlayStep Mini, a $10 version! This thing forces him to work up a sweat. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,16,30,6],"tags":[],"class_list":["post-2393","post","type-post","status-publish","format-standard","hentry","category-development","category-proton","category-raspberry-pi","category-tech-tips"],"_links":{"self":[{"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/posts\/2393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2393"}],"version-history":[{"count":18,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/posts\/2393\/revisions"}],"predecessor-version":[{"id":2779,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=\/wp\/v2\/posts\/2393\/revisions\/2779"}],"wp:attachment":[{"href":"https:\/\/www.codedojo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codedojo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}