<?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>DEV Community: Ben Overmyer</title>
    <description>The latest articles on DEV Community by Ben Overmyer (@bovermyer).</description>
    <link>https://dev.to/bovermyer</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%2F23213%2Fff1f26a8-5c1a-4e94-8130-68d0c809de22.png</url>
      <title>DEV Community: Ben Overmyer</title>
      <link>https://dev.to/bovermyer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bovermyer"/>
    <language>en</language>
    <item>
      <title>Building fantasy worlds with Go</title>
      <dc:creator>Ben Overmyer</dc:creator>
      <pubDate>Tue, 21 Apr 2020 13:44:06 +0000</pubDate>
      <link>https://dev.to/bovermyer/building-fantasy-worlds-with-go-40dg</link>
      <guid>https://dev.to/bovermyer/building-fantasy-worlds-with-go-40dg</guid>
      <description>&lt;p&gt;For the last two years, I've been &lt;a href="https://github.com/ironarachne/world"&gt;working on a system that generates fantasy worlds&lt;/a&gt; in a simulationist fashion. It is currently in two parts: a back end API written in Go, and a front end web application written in PHP with Laravel. You can see it in action at &lt;a href="https://ironarachne.com"&gt;Iron Arachne&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For this article, I'll write exclusively about the back end part, as that's where all of the important functionality is contained.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a World is Made, Step by Step
&lt;/h2&gt;

&lt;p&gt;At the moment, the code necessary to generate an entire coherent planet is not complete. So, the system works with smaller parcels, each randomly constructed.&lt;/p&gt;

&lt;p&gt;Each piece of the system is interrelated with others. However, there is a natural starting point for this. The first step in building a world is to create the terrain. This is done by creating "regions" of arbitrary size. Each region has an altitude, temperature, humidity, distance from the equator, distance from and direction to the nearest mountains, and distance from and direction to the nearest ocean. Those statistics are then used to generate a climate for the region. The climate is mostly about wind speed, wind direction, and precipitation. From there, a biome is generated for the region, based on both the region's statistics and the climate's statistics. The biome is something like "tropical rainforest" or "temperate deciduous forest." The biome determines what traits animals and plants will need to have to live there. Finally, the seasons for the region are generated based on all of the above. Distance from the equator is taken into account for how many and how varied the seasons are.&lt;/p&gt;

&lt;p&gt;After that geographic information is generated, the next step is to populate the region. This starts with animals and plants generated based on the biome. After that, mineral and soil composition are generated.&lt;/p&gt;

&lt;p&gt;The next step is to generate a culture for the region. First, a rough constructed language is generated. This will be used to name the culture as well as unique things found within its influence, and to feed other systems later. Next, things like music style, building style, clothing style, and other cultural accoutrements are generated. Finally, an originating fantasy race and a religion or philosophical outlook are generated.&lt;/p&gt;

&lt;p&gt;After a culture is created, then a civilization is created. This consists of a ruler or rulers, towns, and organizations. The ruler is a character built from the race. Towns and organizations also have unique characters. Characters are detailed enough to warrant their own article, so I won't go into them more here. Organizations have specific goals and traits, as well as types - for example, wizarding schools, or mercenary companies. Towns are even more complex, as they have producers of various professions and a chain of goods that they can produce based on available resources from the environment and the skill of the producers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generators, Consumers, and Generated Objects
&lt;/h2&gt;

&lt;p&gt;In order to avoid massive amounts of duplicate data being passed around to the various packages and their functions, I implemented a pattern of generators, consumers, and discrete generated objects. Generators are data structures that contain a lot of additional information required for creating the generated objects, but are not necessary for representing that object. For example, a geographic region, its climate, biome, and so forth is necessary for generating a culture. However, the culture data structure doesn't contain the geographic region. Whenever a consumer uses a culture to generate something that also needs geographic information, it also requires the geographic region as an argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Package Structure
&lt;/h2&gt;

&lt;p&gt;The API is comprised first and foremost of a series of dozens of Go packages. Each of these packages is responsible for one aspect of the system. There is a package for generating geographic data. There is a package for working with languages. There is a package for generating music styles. There is a package for working with living species.&lt;/p&gt;

&lt;p&gt;Each of these packages is designed to be as self-contained as possible. While the API itself relies on many of them, each package has only one or two dependencies on other packages within the project. Managing this dependency chain is an important part of the process, but it's only tangential to the real work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Ancestors
&lt;/h2&gt;

&lt;p&gt;Animals, plants, trees, insects, monsters, and races all make use of the same Species data structure. They expand upon it in different ways, but are ultimately treated as the same type of object. As a result, there are some interesting possibilities in place. For example, traits of one Species could be grafted onto another - say, a human magically altered with plant features. This is not widely used yet, but it's there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;I'm currently working on the system that generates a coherent planet of thousands of these arbitrary regions. This is one of the most important systems currently missing from the project, as it will fundamentally tie together everything else. Procedurally generated world maps are popular, but there is a lot of math involved. It's easy to get sucked into simulating a particular detail and ignore the wider picture.&lt;/p&gt;

&lt;p&gt;I hope to write more articles like this in the future exploring this project and related disciplines.&lt;/p&gt;

</description>
      <category>go</category>
      <category>procgen</category>
    </item>
    <item>
      <title>Physical and Mental Conditioning for Developers</title>
      <dc:creator>Ben Overmyer</dc:creator>
      <pubDate>Wed, 10 Jul 2019 17:29:32 +0000</pubDate>
      <link>https://dev.to/bovermyer/physical-and-mental-conditioning-for-developers-1ojl</link>
      <guid>https://dev.to/bovermyer/physical-and-mental-conditioning-for-developers-1ojl</guid>
      <description>&lt;p&gt;We tend to focus too much on developing the skills for our jobs. We neglect a very important component of our performance: ourselves!&lt;/p&gt;

&lt;p&gt;Physical and mental health both determine the ceiling for your job performance. While you might be adept at writing device driver software, your ability to execute on that particular skill hinges on whether your mind and body will &lt;em&gt;let&lt;/em&gt; you. If you're mentally and physically exhausted, you are far more likely to make mistakes or take longer to do a particular task.&lt;/p&gt;

&lt;p&gt;Toward that end, you should include both physical and mental training in your daily life. Neither is easy, but both are necessary. Diet is also extremely important, but it's outside the scope of this post.&lt;/p&gt;

&lt;p&gt;There is a lot of great reading available on this subject. I'll list a handful of bullet points for you to look into further.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: I am not a doctor, nor a psychologist. The following is based on my own experiences and research. Consult a physician before attempting any drastic changes in exercise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Physical Training
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Goals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Maintain flexibility&lt;/li&gt;
&lt;li&gt;Maintain good posture&lt;/li&gt;
&lt;li&gt;Develop pushing strength&lt;/li&gt;
&lt;li&gt;Develop pulling strength&lt;/li&gt;
&lt;li&gt;Maintain moving stamina&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Points to Iterate On
&lt;/h3&gt;

&lt;p&gt;The following are specific ways to work on the above goals.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strength training:&lt;/strong&gt; Practice lifting and pulling heavy things. Your body counts as a heavy thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endurance training:&lt;/strong&gt; Practice moving around quickly enough to get your heart rate up for longer periods of time than you're used to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility training:&lt;/strong&gt; Practice stretching whenever possible and practical. Yoga is good for this. Acroyoga is better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular movement:&lt;/strong&gt; Practice getting up and moving around for at least five minutes every hour.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mental Training
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Goals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose and maintain a positive attitude&lt;/li&gt;
&lt;li&gt;Manage expectations effectively&lt;/li&gt;
&lt;li&gt;Use positive self-talk&lt;/li&gt;
&lt;li&gt;Maintain concentration&lt;/li&gt;
&lt;li&gt;Set realistic goals&lt;/li&gt;
&lt;li&gt;Manage anxiety effectively&lt;/li&gt;
&lt;li&gt;Manage emotions effectively&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Points to Iterate On
&lt;/h3&gt;

&lt;p&gt;The following are areas to iterate on that will assist in developing the above skills.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Goal-setting:&lt;/strong&gt; Practice setting goals of varying complexity and time constraints, recording your results, and then altering future goal criteria based on the outcome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-talk:&lt;/strong&gt; Whenever you catch yourself thinking negatively about yourself, practice inverting that thought into a positive version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breathing:&lt;/strong&gt; Practice being both aware of your breathing and controlling it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualization:&lt;/strong&gt; Practice imagining a positive future state of what you're working on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routines:&lt;/strong&gt; Practice setting and maintaining routines, particularly in the morning and evening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mindfulness:&lt;/strong&gt; Whenever possible, practice mindful awareness of yourself and your surroundings. Avoid multitasking.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>physical</category>
      <category>mental</category>
      <category>conditioning</category>
      <category>training</category>
    </item>
    <item>
      <title>Do you know what you optimize for?</title>
      <dc:creator>Ben Overmyer</dc:creator>
      <pubDate>Wed, 26 Jun 2019 14:44:29 +0000</pubDate>
      <link>https://dev.to/bovermyer/do-you-know-what-you-optimize-for-2ndb</link>
      <guid>https://dev.to/bovermyer/do-you-know-what-you-optimize-for-2ndb</guid>
      <description>&lt;p&gt;As developers, we spend a fair amount of time optimizing code.&lt;/p&gt;

&lt;p&gt;However, we also spend a lot of time optimizing our behavior. Often we are unaware of this.&lt;/p&gt;

&lt;p&gt;For example, if you choose to park close to the door when you drive to work, you are optimizing for something. If you choose to park at the back of the parking lot, you are optimizing for something else. You may not be aware of what you're optimizing for, though, and that's the point of this post. You might just be deciding on something without fully understanding why.&lt;/p&gt;

&lt;p&gt;Try paying attention to one particular action you take that you normally do without thinking. What are you optimizing for when you do it? What &lt;em&gt;could&lt;/em&gt; you optimize for?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>mindfulness</category>
    </item>
    <item>
      <title>A concise guide to application orchestration tools</title>
      <dc:creator>Ben Overmyer</dc:creator>
      <pubDate>Thu, 25 Apr 2019 15:48:31 +0000</pubDate>
      <link>https://dev.to/bovermyer/a-concise-guide-to-application-orchestration-tools-34hn</link>
      <guid>https://dev.to/bovermyer/a-concise-guide-to-application-orchestration-tools-34hn</guid>
      <description>&lt;p&gt;So here's your situation. You want to get your apps into production and manage your infrastructure as code. There are three good options for this. But which one should you pick? There are cloud vendor specific options, but I'm only going to address vendor-neutral options here.&lt;/p&gt;

&lt;p&gt;Basically, you have three main options. They are Docker Swarm, Kubernetes, and Hashicorp Nomad. &lt;/p&gt;

&lt;p&gt;If you need to manage VMs as well as containers, then use &lt;a href="https://www.nomadproject.io/"&gt;Hashicorp Nomad&lt;/a&gt;. It's designed for hybrid environments.&lt;/p&gt;

&lt;p&gt;If you have a small environment or set of environments that is purely containerized, use &lt;a href="https://docs.docker.com/engine/swarm/"&gt;Docker Swarm&lt;/a&gt;. It's simple to use and reliable.&lt;/p&gt;

&lt;p&gt;If you have a large container environment that requires complex orchestration rules, use &lt;a href="https://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;. It's powerful and handles edge cases well.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>orchestration</category>
      <category>docker</category>
    </item>
    <item>
      <title>I'm a senior "DevOps" consultant in the Midwest, Ask Me Anything!</title>
      <dc:creator>Ben Overmyer</dc:creator>
      <pubDate>Wed, 24 Apr 2019 13:02:51 +0000</pubDate>
      <link>https://dev.to/bovermyer/i-m-a-senior-devops-consultant-in-the-midwest-ask-me-anything-3odi</link>
      <guid>https://dev.to/bovermyer/i-m-a-senior-devops-consultant-in-the-midwest-ask-me-anything-3odi</guid>
      <description>&lt;p&gt;I work as a "DevOps" engineer for a local consulting shop in the upper Midwest. I've been a level designer, a front-end dev, a "webmaster," a back-end engineer, and an engineering manager before this.&lt;/p&gt;

&lt;p&gt;Ask me anything, and I'll try to answer the best I can.&lt;/p&gt;

</description>
      <category>ama</category>
    </item>
  </channel>
</rss>
