<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Michael Cook</title>
    <description>The latest articles on Forem by Michael Cook (@entozoon).</description>
    <link>https://forem.com/entozoon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F331304%2F07038b09-91eb-4b90-9416-519bd7e4ac8b.png</url>
      <title>Forem: Michael Cook</title>
      <link>https://forem.com/entozoon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/entozoon"/>
    <language>en</language>
    <item>
      <title>Open Source Code in the Workplace</title>
      <dc:creator>Michael Cook</dc:creator>
      <pubDate>Mon, 10 Feb 2020 23:50:40 +0000</pubDate>
      <link>https://forem.com/entozoon/open-source-code-in-the-workplace-jmc</link>
      <guid>https://forem.com/entozoon/open-source-code-in-the-workplace-jmc</guid>
      <description>&lt;p&gt;Every progressive developer comes across the same dilemma eventually:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If we publish this package publicly, it can be maintained by the community but .. as a company, we don't want to have responsibility to maintain it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It seems a little shameful really; sitting on a cloud of generosity, handing down packages to the lowly devs of the world but offering no support and expecting said lowly lackies to keep it alive while reaping the benefits.&lt;/p&gt;

&lt;h2&gt;
  
  
  But!
&lt;/h2&gt;

&lt;p&gt;It is a completely legitimate position. If you're in a small sweatshop agency, there's very little benefit and an awful lot of investment, so it is understandable most of the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what do we do?
&lt;/h2&gt;

&lt;p&gt;Well, how about a compromise. If you find yourself about to create an abstract package that's just &lt;em&gt;crying out for open source publication&lt;/em&gt;.. why not go ahead and do just that, but with your personal account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal account!?
&lt;/h2&gt;

&lt;p&gt;Okay, not necessarily. A personal work account perhaps but even so, if you're working on this invaluable positronic brain of a tool, perhaps in your spare time (being the good little socialist worker bee that you are, with an insatiable thirst for knowledge) why ever not?&lt;/p&gt;

&lt;h2&gt;
  
  
  But they won't like that!
&lt;/h2&gt;

&lt;p&gt;Very possibly. IP is IP and if you're fiddling around during work hours, as it were, it won't go down well but there is a possible way around that..&lt;/p&gt;

&lt;h2&gt;
  
  
  Just tell me already!
&lt;/h2&gt;

&lt;p&gt;Set your company's open source account as a &lt;strong&gt;collaborator&lt;/strong&gt;. Then, when you're at work, commit with that account, or better yet a personal work account. That way, the company has the power to deal life with one hand or death with another if they so choose but also you continue to build the thing as your own entity.&lt;br&gt;&lt;br&gt;
Better yet, encourage your colleagues to get involved and maintain alongside yourself ' presenting your team to the world as a solid corpuscular body of pro-humanity development. Hench and awe-inspiring. Which looks good and feels good, just like.. &lt;em&gt;erm&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dream work makes the team work&lt;/p&gt;

&lt;h2&gt;
  
  
  Bit shady though, right?
&lt;/h2&gt;

&lt;p&gt;Nah, not at all. Consider the idea that you were two separate people: one employee, and one codey person-of-leisure. There'd be no conflict of interest there, so why not &lt;em&gt;flirt a little with splitting that personality&lt;/em&gt;, because at the end of the day, you're both working toward the same goal and improving your skills doubly so (not to mention essentially doing out-of-hours work for free).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Produce at work, perfect at home.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  I agree
&lt;/h2&gt;

&lt;p&gt;I'm glad! But what do &lt;em&gt;you&lt;/em&gt; think? Are these just the feverish ramblings of a burnt-out engineer?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Tankblade - First Game Jam!</title>
      <dc:creator>Michael Cook</dc:creator>
      <pubDate>Thu, 06 Feb 2020 12:48:25 +0000</pubDate>
      <link>https://forem.com/entozoon/tankblade-first-game-jam-44li</link>
      <guid>https://forem.com/entozoon/tankblade-first-game-jam-44li</guid>
      <description>&lt;p&gt;"Ghouls! Frickin ghouls everywhere, just my luck!&lt;br&gt;
Well, I best hop in this here spinning-top, blade-encrusted tank and start slashy smashin'."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://entozoon.itch.io/tankblade"&gt;PLAY THE GAME!&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/entozoon/tankblade"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ​Development
&lt;/h3&gt;

&lt;p&gt;This game was built entirely by myself from scratch for &lt;a href="https://itch.io/jam/lowrezjam-2019"&gt;LOWREZJAM 2019&lt;/a&gt;​ in a week, including all music, physics, graphics* etc and is completely open source​!&lt;/p&gt;

&lt;p&gt;This is my very first Game Jam submission and was a brilliant challenge - to build a game with a true resolution of 64x64 - forcing my coding to improve and encouraging a fast-and-loose development style fitting with a jam so as to, you know, actually complete a side-project for once!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The renderer itself is Pixi.js​ (a library underneath Phaser), which I can't claim to have built ^_-&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I learnt
&lt;/h2&gt;

&lt;p&gt;Game dev isn't my profession, but holy heck is a great way to improve skills! Utilising functional programming junk like currying that might not normally enter typical daily thought patterns. I highly recommend it, and especially in the context of a jam - working to that 'good enough' mentality all the while.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>javascript</category>
      <category>currying</category>
      <category>pixijs</category>
    </item>
    <item>
      <title>Reddit Live Feed</title>
      <dc:creator>Michael Cook</dc:creator>
      <pubDate>Thu, 06 Feb 2020 12:43:59 +0000</pubDate>
      <link>https://forem.com/entozoon/reddit-live-feed-15dp</link>
      <guid>https://forem.com/entozoon/reddit-live-feed-15dp</guid>
      <description>&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;Reddit posts, live, as they happen, right now, in your face!&lt;/p&gt;

&lt;p&gt;A React based site that loads all Reddit posts as soon as they're made.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://entozoon.github.io/reddit-live-feed/"&gt;Reddit Live Feed&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/entozoon/reddit-live-feed/"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Building Super Simple™ (at first) projects like this is &lt;strong&gt;always a good way to improve React knowledge&lt;/strong&gt;, plus I love the concept of seeing the entirety of Reddit sluicing in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingredients
&lt;/h3&gt;

&lt;p&gt;*React JS&lt;/p&gt;

&lt;h3&gt;
  
  
  Source
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/entozoon/reddit-live-feed/"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All Reddit posts are actually available as &lt;code&gt;.json&lt;/code&gt; files such as this, which I check every now and then in order to update the list of posts. It takes advantage of React by having the posts data stored in the components as state variables, which allows everything to automatically update on the page - for example the timestamp information (2 seconds ago, 3 seconds ago, etc).&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sketchy Mk. I</title>
      <dc:creator>Michael Cook</dc:creator>
      <pubDate>Thu, 06 Feb 2020 12:37:07 +0000</pubDate>
      <link>https://forem.com/entozoon/sketchy-mk-i-3o3l</link>
      <guid>https://forem.com/entozoon/sketchy-mk-i-3o3l</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/lWzbtICmNko"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;Real-time drawing robot. Using a SCARA arm and a web interface, it draws simultaneously to the user.&lt;/p&gt;

&lt;p&gt;This was a quick prototype, built over the course of a few evenings to see what was possible with these relatively simple (or cheap, at least) pieces of equipment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingredients
&lt;/h3&gt;

&lt;p&gt;Raspberry Pi Zero&lt;br&gt;
PCA9685 Servo Motor Driver&lt;br&gt;
MG996R Servos&lt;/p&gt;

&lt;h3&gt;
  
  
  Method
&lt;/h3&gt;

&lt;p&gt;I quickly designed the two arms using the brilliant Tinkercad website, screwing the 'shoulder' servo straight down onto an acrylic board and attaching the arms after 3D-printing.&lt;/p&gt;

&lt;p&gt;The MG996R servos for the upper/lower arm sections are connected up to the PCA9685 which has its own separate power supply from the Pi. As this project was just a prototyping exercise, the pen is simply bolted in place with a little pipe ring clip style attachment.&lt;/p&gt;

&lt;p&gt;A node server is run on the Pi which allows user interaction through a canvas web interface and Socket.IO connections. The SCARA angles for the arm joints in relation to the mouse (or finger on mobiles) position are calculated client-side (to spread the processing load), then sent to the server which sets the servo positions without hesitation via the PCA9685 node module.&lt;/p&gt;

&lt;p&gt;In this instance there is no dampening, physical or mechanical (springs) so it's.. it's pretty intense in the way it moves but it does its job!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o2vwYWsk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ry1jda8hwoostgdkt2pn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o2vwYWsk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ry1jda8hwoostgdkt2pn.jpg" alt="Good nuff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusions
&lt;/h3&gt;

&lt;p&gt;I learnt a lot in building this and hope to re-build the project from scratch with a more professional-looking aesthetic. My original idea was actually for it to draw with a pencil that never lifts off the paper and just sketches over and over to darken the drawing where needed, hence the name 'Sketchy', but in actuality using servos isn't suitable for this. Servos move relatively quickly and with strength but aren't nearly precise enough to plot accurately in this fashion, so it could never sketch out a block with a pencil - the gaps between angles too large and inprecise (too 'sketchy', ironically).&lt;/p&gt;

&lt;p&gt;However, the fact that it moves so pleasinly in real-time more than makes up for it so I'll build a more built-up version in future and possibly even a stepper-motor plotting incarnation one day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pass or Fail?
&lt;/h2&gt;

&lt;p&gt;Hard pass! As a quick prototype project it was both successful and taught me many a lesson.&lt;/p&gt;

</description>
      <category>electronics</category>
      <category>node</category>
      <category>scara</category>
    </item>
  </channel>
</rss>
