{"id":11,"date":"2021-10-22T02:48:04","date_gmt":"2021-10-22T02:48:04","guid":{"rendered":"https:\/\/blogs.oregonstate.edu\/kreynolds\/?p=11"},"modified":"2021-10-22T02:48:04","modified_gmt":"2021-10-22T02:48:04","slug":"environment-is-everything","status":"publish","type":"post","link":"https:\/\/blogs.oregonstate.edu\/kreynolds\/2021\/10\/22\/environment-is-everything\/","title":{"rendered":"Environment Is Everything"},"content":{"rendered":"\n<p>Like a lot of other people in this program, I&#8217;m already a Software Engineer for my day job. One of the most frustrating but valuable things for any given project can be setting up the work environment for rapid development. If there is a long feedback cycle between making a change and determining if it was the correct change, then development is slow, error-prone, and altogether unrewarding. Sometimes thats an unavoidable side-effect of the task at hand, but much of the time a long feedback cycle can be vastly improved.<\/p>\n\n\n\n<p>This project is a complex one that has to integrate custom robotics hardware, modules to interface to that hardware that must interact with each other, and a web-based interface to expose user control and status to the system. We as developers don&#8217;t have access to the actual robotics so we are developing code in a vacuum for our sponsor to integrate later.<\/p>\n\n\n\n<p>Here is an example of a design decision that involves some extra work, but them also speeds development and offers additional features. Instead of the web interface directly speaking to the robotics hardware (may not be scalable for multiple users, or unnecessarily expose the robot to DoS or various other attacks), it will be speaking mostly to an interstitial database that will maintain state and sensor readings, and that state will be updated by the robot. This abstraction layer lets us do two things:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>It puts a layer of protection between the robot and the potential hostile external network (this important because this system controls objects in the physical world which can be used to cause harm\/damage)<\/li><li>Allows me to write a virtual robot that updates the state so that the UI can be developed in a vacuum.<\/li><\/ol>\n\n\n\n<p>All the real robot has to do is update the database in the same way, which should be easy enough once the schema is defined. Virtual robot is extra work, but having it there will make everything else <em>so much easier!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Like a lot of other people in this program, I&#8217;m already a Software Engineer for my day job. One of the most frustrating but valuable things for any given project can be setting up the work environment for rapid development. If there is a long feedback cycle between making a change and determining if it&hellip; <a class=\"more-link\" href=\"https:\/\/blogs.oregonstate.edu\/kreynolds\/2021\/10\/22\/environment-is-everything\/\">Continue reading <span class=\"screen-reader-text\">Environment Is Everything<\/span><\/a><\/p>\n","protected":false},"author":11604,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"_links":{"self":[{"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/users\/11604"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":1,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":12,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/posts\/11\/revisions\/12"}],"wp:attachment":[{"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/kreynolds\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}