James ByarsJekyll2021-11-21T15:20:36-06:00https://jamesbyars.github.io/James Byarshttps://jamesbyars.github.io/james@ernesttech.comhttps://jamesbyars.github.io/articles/Good-Leaders-Ask-Great-Questions2021-11-21T00:00:00-06:002021-11-21T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h1 id="overview">Overview</h1>
<p>Coming soon, overview of this book and sentiment</p>
<h2 id="notes">Notes</h2>
<p>When facing a problem with an unknown solution ask the following questions:</p>
<ol>
<li>Why do we have this problem?</li>
<li>How do we solve this problem?</li>
<li>What specific steps must we take to solve this problem?</li>
</ol>
<hr />
<p>Ask tough questions of oneself</p>
<hr />
<p>Three Questions People Ask of Their Leaders</p>
<ol>
<li>Can you help me? (Competence)</li>
<li>Do you care for me? (Compassion)</li>
<li>Can I trust you? (Character)</li>
</ol>
<hr />
<p>When leaders learn and live good values, they make themselves more valuable and lift the value of other people</p>
<p>Good leaders exhibit three qualities</p>
<ol>
<li>Humility: understanding your place in the bigger picture</li>
<li>Authenticity: being comfortable in your own skin</li>
<li>Calling: have a purpose bigger than you</li>
</ol>
<hr />
<p>Identifying Leaders to grow</p>
<ol>
<li>Influence- do they influence others</li>
<li>Capacity - do they have the potential to grow and develop</li>
<li>Attitude - do they desire to grow and develop themselves</li>
<li>Chemistry - do we like each other</li>
<li>Passion - are they self motivated</li>
<li>Character - are they grounded</li>
<li>Values - are our values compatible</li>
<li>Teamwork - do they work well with others</li>
<li>Support - do they add value to me</li>
<li>Creative - can they find possibilities in the impossible</li>
<li>Options - can their contribution give me options</li>
<li>10 percent - are they in the top 10% of those on the team</li>
</ol>
<hr />
<p>Others are more likely to listen to us if first we listen to them</p>
<hr />
<p>Communication tip: Ask people to tell me something I NEED to hear but may not WANT to hear.</p>
<hr />
<p>Good leaders ask great questions that inspire others to dream more, think more, learn more, do more, and become more.</p>
<hr />
<p>Questions to ask team members, customers</p>
<ol>
<li>What do you think?</li>
<li>How can I serve you?
<ol>
<li>What could I do for you that would make your job easier, make you more successful, and make the team better?</li>
</ol>
</li>
<li>What do I need to communicate?</li>
<li>Did we exceed expectations?</li>
<li>What did you learn?
<ul>
<li>Ask after meetings or situations to inspire inspection and adaptation. People start to think about what they learned in anticipation of this question</li>
</ul>
</li>
<li>Did we add value?</li>
<li>How do we maximize this experience?</li>
<li>What do I need to know?</li>
<li>How do we make the most of this opportunity?</li>
<li>How are the numbers?</li>
<li>What am I missing?</li>
</ol>
<hr />
<p>Rule of 5 for improvement</p>
<ol>
<li>Read</li>
<li>Write</li>
<li>Think</li>
<li>Ask questions</li>
<li>File what you learn</li>
</ol>
<hr />
<p>Positive supportive people to add to a team</p>
<ol>
<li>Believers - people who believe in you and your vision</li>
<li>Achievers - people who contribute to the team with excellence</li>
<li>Conceivers - people who bring good ideas to the table</li>
<li>Relievers - people who compliment your skills and abilities</li>
</ol>
<hr />
<p>Let loneliness drive you to aloneness. When you are feeling the weight of leadership, find ways to get by yourself and think things through.</p>
<hr />
<p>“Were any great men born in this village?” - “No, only babies.”</p>
<hr />
<p>Demonstrating competence as a leader</p>
<ul>
<li>Work hard - people respect a hard worker</li>
<li>Think ahead - begin with the end in mind</li>
<li>Demonstrate excellence - the better you are the higher your credibility</li>
<li>Follow through - bring things to completion</li>
</ul>
<hr />
<p>Establishing character</p>
<ul>
<li>Care about the people you lead</li>
<li>Make things right</li>
<li>Tell the truth</li>
</ul>
<hr />
<p>What really matters to you?</p>
<ul>
<li>What makes me sing?
<ul>
<li>Identifies joy</li>
</ul>
</li>
<li>What makes me cry?
<ul>
<li>Touches your heart</li>
</ul>
</li>
<li>What makes me dream?
<ul>
<li>Sparks your imagination</li>
</ul>
</li>
<li>What makes me excel?
<ul>
<li>Strengths</li>
</ul>
</li>
<li>What makes me different?
<ul>
<li>Uniqueness</li>
</ul>
</li>
</ul>
<hr />
<p>Onboarding as a new leader</p>
<ol>
<li>Strengthen relationships</li>
<li>Earn peoples trust</li>
<li>Position team members appropriately</li>
<li>Create clear expectations</li>
<li>Determine peoples capacity</li>
</ol>
<hr />
<p>“Motivation is always in direct proportion to the level of expectations “</p>
<hr />
<p>Raising the bar for employees</p>
<ul>
<li>Are you reaching your maximum potential?</li>
<li>What would you like to do better?</li>
<li>Do you know how to reach your maximum potential?</li>
<li>Can I help you?</li>
</ul>
<p>Law of Magnetism - Who you are is who you attract</p>
<hr />
<p>Traits for identifying motivated people</p>
<ol>
<li>Positive attitude</li>
<li>Can articulate specific goals for their life</li>
<li>Initiators</li>
<li>Proven track record of success</li>
</ol>
<hr />
<p>“When you made the choice to start, you made the choice to finish. It’s not two choice; it’s one.”</p>
<p>Tips to help people become finishers</p>
<ol>
<li>Show them the big picture</li>
<li>Give them accountability</li>
<li>Help them schedule their time</li>
<li>Provide a work partner</li>
<li>Reward only finished work</li>
</ol>
<hr />
<p>If you give effort to negative people you must ask yourself:</p>
<ul>
<li>How much of my energy will I let them take?</li>
<li>How much of my time will I let them take?</li>
<li>How much of my focus will I let them take?</li>
<li>How much of my joy will I let them take?</li>
<li>How much of the resources will I let them take?</li>
</ul>
<p>These questions help you realize the cost to keeping negative/unproductive people</p>
<hr />
<p>Inspiring a team</p>
<ul>
<li>Share your passion - contagious</li>
<li>Paint the picture of a better future</li>
<li>Show how their role makes a difference</li>
<li>Challenge them to keep growing</li>
</ul>
<p>“When we have made our last climb, we are old, whether forty or eighty” - Fred Smith</p>
<p><a href="https://jamesbyars.github.io/articles/Good-Leaders-Ask-Great-Questions">Good Leaders Ask Great Questions</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on November 21, 2021.</p>https://jamesbyars.github.io/articles/Observations-Of-Complexity-Struggles-In-Software-Systems2020-03-09T00:00:00-05:002020-03-09T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h1 id="observations-of-complexity-struggles-in-software-systems">Observations of Complexity Struggles In Software Systems</h1>
<p>Software systems tend to grow over time as does complexity between components or services. One of the major challenges in software engineering is managing the complexity of a system (that is, keeping the complexity low) even as the system grows. This post will attempt to provide some insight into ways to identify growing complexity and make the argument for effective complexity management.</p>
<h2 id="common-indicators-of-complexity-issues">Common Indicators of Complexity Issues</h2>
<ul>
<li>Long, manual testing cycles</li>
<li>Error prone deployments</li>
<li>General anxiety around deployments</li>
<li>“We have tests in place but it still broke!”</li>
<li>Simple changes affect many different pieces of the system</li>
<li>“Why wasn’t this issue identified in code review?”</li>
</ul>
<h2 id="when-complexity-isnt-managed">When Complexity Isn’t Managed</h2>
<p>In many systems we see complexity increasing faster than the number of changes, or features. This results in each change to the system being more difficult, time consuming, and risky than the last.</p>
<h2 id="effective-complexity-management">Effective Complexity Management</h2>
<p>When complexity is effectively managed the effort to make a change begins to taper off after a short period of time. Effective complexity management results in the system being designed to promote change. Designing for change means designing for safety of change - a way for the system to self-verify the change has not had a negative impact.</p>
<p>This benefit isn’t without a tradeoff. Notice when the graphs are overlaid the change effort when complexity is not actively managed starts out lower as opposed to when complexity is actively managed, where the change effort starts higher. This initial spike in effort is an investment in managing complexity by creating initial architectures and designs that support change.</p>
<p>We observe a period of investment in managing complexity where returns are below that of not actively managing complexity. However there is a point in time where poorly managed complexity begins to skyrocket where well managed complexit</p>
<p><a href="https://jamesbyars.github.io/articles/Observations-Of-Complexity-Struggles-In-Software-Systems">Observations of Complexity Struggles In Software Systems</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on March 09, 2020.</p>https://jamesbyars.github.io/articles/5-Things-Software-Engineers-Must-Consider-With-Every-Change2019-12-11T00:00:00-06:002019-12-11T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h1 id="5-things-software-engineers-must-consider-with-every-change">5 Things Software Engineers Must Consider With Every Change</h1>
<p>World class engineering organizations must be able to deliver system changes to
production in minutes, not months, weeks, or days. Along the road to attaining
this goal, engineering teams must figure out how to make releases a
“non-event” - that is, releases aren’t special and they require no more attention
than any other event. This article outlines 5 considerations engineers should
consider that cut across 5 advanced software engineering
concepts: <strong>Continuous Delivery, Built-in Quality, Consider the Whole System,
Continuous Monitoring, You Build It - You Run It</strong>. These considerations are by
no means complete, but will serve as a solid foundation for progress.</p>
<h2 id="continuous-delivery--">Continuous Delivery -</h2>
<h3 id="how-could-we-deploy-changes-without-releasing-them">How could we deploy changes without releasing them?</h3>
<p>Technology delivery methods have advanced far beyond traditional development
and deployment models. Building the engineering and business capacity to
deliver working, valuable software to customers on demand and as frequently
as possible is now a necessary step to creating world class engineering
teams. It may seem that increasing the frequency of software delivery
would increase organizational risk; however, according to industry
research (https://services.google.com/fh/files/misc/state-of-devops-2019.pdf)
higher frequency software delivery is correlated with reduced risk and
increased quality.</p>
<p>This does not mean turning teams loose into the wild wild west. Instead, teams
take steps to build competency and capability coupled with advanced delivery
and testing patterns, building confidence in pipelines and processes along the
way. New techniques require new vocabulary, here are a few definitions to
clear the air:</p>
<ul>
<li><u>Continuous Deployment</u> - process of migrating changes into an environment
with every successful build, ideally, a production environment. Changes
migrated do not need to be made visible or available to clients.</li>
<li><u>Continuous Delivery</u> - making a change visible or available to clients, this
does not, and should not, require a deployment.</li>
<li><u>Release</u> - I prefer to use release and Continuous Delivery interchangeably.</li>
</ul>
<h4 id="tipstrickstools">Tips/Tricks/Tools</h4>
<ul>
<li>Feature flags - Java - <a href="https://www.togglz.org">Togglz.org</a></li>
<li><a href="https://martinfowler.com/bliki/BlueGreenDeployment.html">Blue/Green Deployment</a></li>
<li><a href="https://martinfowler.com/bliki/CanaryRelease.html?ref=wellarchitected">Canary releases</a></li>
</ul>
<h2 id="built-in-quality--">Built-in Quality -</h2>
<h3 id="how-can-we-prove-the-solution-works">How can we prove the solution works?</h3>
<p>Consider the following example from a more established engineering domain, Civil
Engineering. A bridge must be built to cross a large creek/small river. What
<em>doesn’t happen</em> is the engineer takes an educated guess at what needs to be
done, builds the bridge, and then walks/drives over it to test that it will
stand.</p>
<p>The engineer starts by understanding the constraints and forces at
play in the environment in which the bridge lives:</p>
<ul>
<li>How much weight the bridge must support at any given time?</li>
<li>At what speed will persons/vehicles cross the bridge?</li>
<li>What type of ground material will the bridge rest on?</li>
<li>What is the flow rate of the river/creek (what is the maximum flow rate
the bridge must resist)?</li>
<li>What kind of weather conditions will the bridge encounter?</li>
<li>How much flex in the bridge is tolerable?</li>
<li>What frequency will inspections occur?</li>
<li>What is the desired lifespan of the bridge?</li>
<li>Etc…</li>
</ul>
<p>The engineer takes each of these constraints and designs the bridge, testing
each component individually, and then the integration between components
prior to building the bridge. Bridges built in the midwest that has a variety
of hot and freezing days will be built using different materials than a
bridge in Florida, for example.</p>
<p>Software Engineering requires a similar thought process of understanding
constraints and engineering a solution. Each of the constraints should
be tested as we go to prevent a faulty component from entering a
production environment.</p>
<h4 id="tipstrickstools-1">Tips/Tricks/Tools</h4>
<ul>
<li>Many facets to this concept, unit, integration, and functional tests.</li>
<li>Quality cannot be <em>added</em> on top once a change is complete, that is
quality assurance. Quality must be <em>built in</em> to the change.</li>
<li>Useful techniques include Test Driven Development (TDD), Behavior
Driven Development (BDD), etc…</li>
</ul>
<h2 id="consider-the-whole-system--">Consider the Whole System -</h2>
<h3 id="how-will-the-change-integrate-with-the-system-and-what-impact-could-it-have">How will the change integrate with the system and what impact could it have?</h3>
<p>Considering the whole system requires engineers to take a step back and
evaluate not only how the change will impact their area, but consider how
the change will impact the organization as a whole. What should a team do
if the best solution will benefit them directly but create a negative impact
on two other teams? How should they approach going about making the
tradeoff? The answer, it depends.</p>
<p>A few potential questions to ask:</p>
<ul>
<li>How will changes impact the way data flows through the system?</li>
<li>How will the change affect monitoring solutions in place?</li>
<li>How will upstream or downstream clients be impacted?</li>
<li>Who might need to be aware of the change?</li>
<li>How might the change affect the sales team or prospects?</li>
</ul>
<h4 id="tipstrickstools-2">Tips/Tricks/Tools</h4>
<p>Integration is difficult, especially in a microservices architecture. Yes,
API’s should have clearly defined interfaces, be predictable, and isolate
breaking changes via API versioning, but those alone don’t cover all scenarios.</p>
<p>One useful technique for managing inter-service integration is
<a href="https://martinfowler.com/articles/consumerDrivenContracts.html">Consumer Driven Contracts</a>,
which Spring Boot supports
(<a href="https://spring.io/guides/gs/contract-rest/">Spring Contract Guide</a>) or you
can easily roll your own. Each producer/consumer create a contract
(potentially real json request & response, for example) for a variety of
scenarios. Then each party can run tests against those contracts to verify
each of the scenarios are handled. The same procedure can be used for
message queues/streams. Sample messages are created and included in test
resources and each build of the system checks that all contracts are met.</p>
<h2 id="you-build-it-you-run-it--">You Build It, You Run It -</h2>
<h3 id="how-will-teams-be-the-first-to-know-if-a-change-fails-in-production">How will teams be the first to know if a change fails in production?</h3>
<p>Accountability in software engineering creates a culture of ownership. When
software engineers feel ownership of their product; quality, communication,
and speed to market improve - all of which benefit the organization as a
whole. Simply assuming an on call engineer can triage and handle issues is
unsustainable and possibly extends outages and response times.</p>
<p>Additionally, running your own services in production provides fast feedback
to errors and performance issues that might not have been thoroughly thought.<br />
Engineering teams can respond in near real time to feedback, learning as
they go how best to engineer their services to reduce operational noise and
improve service reliability.</p>
<h4 id="tipstrickstools-3">Tips/Tricks/Tools</h4>
<ul>
<li>Create team (product) level dashboards.</li>
<li>Failures & errors trigger alerts to teams as necessary.</li>
<li>Track and classify failures to identify common failure points. Prioritize
and address these issues in addition to regular work.</li>
</ul>
<h2 id="continuous-monitoring--">Continuous Monitoring -</h2>
<h3 id="are-there-any-team-product-level-kpis-to-measure-the-change-impact">Are there any team (product) level KPIs to measure the change impact?</h3>
<p>Teams that run their own services, deploy frequently, and build in quality
will need to see how their applications are performing in production.<br />
Monitoring allows teams to measure how changes impact baseline measures and
provides fast feedback into the health of services.</p>
<p>Teams are responsible for their own metrics. Metrics are created when
they are useful and should be deleted when no longer useful. Each team
should have their own dashboard to visualize KPIs for services and include
appropriate alerting should a threshold be met. Dashboards include
information such as request throughput, transaction times, and other
operational measures.</p>
<h4 id="tipstrickstools-4">Tips/Tricks/Tools</h4>
<ul>
<li>Each team owns their own dashboard and metrics <strong>in plain view</strong>. These
metrics, or a subset, can be flowed to enterprise monitoring tools as well.</li>
<li>Identify KPIs for teams (products).</li>
<li>Failure alerting processes and tools.</li>
<li>Should a failure occur that does not trigger an alert or show up on the
dashboard, a new metric should be added and monitored.</li>
</ul>
<p><a href="https://jamesbyars.github.io/articles/5-Things-Software-Engineers-Must-Consider-With-Every-Change">5 Things Software Engineers Must Consider With Every Change</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on December 11, 2019.</p>https://jamesbyars.github.io/tutorials/Create-Your-Own-VPN-On-AWS-For-Free2018-07-09T00:00:00-05:002018-07-09T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h2 id="create-your-own-vpn-on-aws-for-free">Create Your Own VPN on AWS For Free</h2>
<p>Tutorial video on creating your own FREE VPN server on AWS with OpenVPN.</p>
<p>Learn how to create all the necessary components to have your very own VPN server. Plus,
I’ll show you how to connect to your VPN!</p>
<p>We’ll be using the following AWS Services</p>
<ul>
<li>AWS Elastic IP</li>
<li>AWS EC2 Instance</li>
<li>AWS Security Groups</li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/nENfIjvb5P4" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<p><a href="https://jamesbyars.github.io/tutorials/Create-Your-Own-VPN-On-AWS-For-Free">Create Your Own VPN On AWS For Free Tutorial</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on July 09, 2018.</p>https://jamesbyars.github.io/articles/Learning-Post-Template2018-05-10T00:00:00-05:002018-05-10T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>What is it?</p>
<p>What do I use it for?</p>
<p>What did I use to learn it?</p>
<p>How could I apply it?</p>
<p>Pros?</p>
<p>Cons?</p>
<p>Examples?</p>
<p><a href="https://jamesbyars.github.io/articles/Learning-Post-Template">Learning Post Template</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on May 10, 2018.</p>https://jamesbyars.github.io/tutorials/AWS-VPC-Public-Private-Subnet-Tutorial2018-04-20T00:00:00-05:002018-04-20T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>About the series:</p>
<h2 id="aws-vpc-overview">AWS VPC Overview</h2>
<p>Quite simply, a quick overview of an AWS VPC. A VPC, or Virtual Private Cloud, is a way to segregate a
Public Cloud, like Amazon Web Services, into Private Clouds. The ‘V’ in VPC is for Virtual because the
cloud is virtually isolated using tools and techniques such as
<a href="https://en.wikipedia.org/wiki/Software-defined_networking">SDN (Software Defined Networking)</a>. Of course,
there are different techniques used to create Virtual Private Clouds, but this is outside of the scope
of this video.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/nNxny_HiGRo" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="aws-subnets-overview">AWS Subnets Overview</h2>
<p>Subnets, short for Sub-Networks, are isolated networks where access can be controlled. Subnets have a
defined set of IP addresses. A VPC may contain one or many Subnets. AWS uses
<a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing">CIDR (Classless InterDomain Routing)</a> notation
to define subnet IP addresses. Using Subnets can help isolate AWS resources, for example, creating a
Public Subnet, one which can be accessed from the Internet, versus a Private Subnet, one that cannot be
accessed from the open Internet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/sUMBXbabTbc" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="aws-cidr-overview">AWS CIDR Overview</h2>
<p><a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing">CIDR (Classless InterDomain Routing)</a> is a
notation used to allocate or route network traffic using IP addresses. A group of IP addresses is known as
a ‘block’. CIDR notation defines a <a href="https://en.wikipedia.org/wiki/Subnetwork">netmask</a> to represent a block
of IP addresses. Routers use the netmask to decide where to send network traffic.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/jAn3bNvyUWM" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="create-vpc-with-public--private-subnets">Create VPC With Public & Private Subnets</h2>
<p>We create our first VPC with Public and Private Subnets. At this point, we haven’t secured anything. There isn’t
a good way to validate that what we built actually works yet. That is where the next few videos come into
play.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/WW7iVXsUD68" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="create-public--private-security-groups">Create Public & Private Security Groups</h2>
<p><a href="https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html">AWS Security Groups</a> are
also known as Virtual Firewalls. They give the ability to control incoming and outgoing traffic. A Private
Subnet really isn’t private until the Security Group defines the rules to prevent Internet traffic from
being routed through the firewall. Similarly, a Public Subnet isn’t public until it explicitly allows
traffic from the Internet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/rLXNbZoxxps" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="launch-ec2-instance-into-public-subnet">Launch EC2 Instance Into Public Subnet</h2>
<p>This video shows how to launch an AWS resource, in this case an EC2 Web Server, into the Public Subnet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/BpCjVje32tc" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="launch-ec2-instance-into-private-subnet">Launch EC2 Instance Into Private Subnet</h2>
<p>This video shows how to launch an AWS resource, in this case an EC2 Web Server, into the Private Subnet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/s6hOIgidCIw" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="validate-public-subnet-access">Validate Public Subnet Access</h2>
<p>A quick demonstration of a couple ways to validate that our Public Subnet is working as expected.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ebBjoteEdME" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="validate-private-instance-inaccessible-from-public-internet">Validate Private Instance Inaccessible From Public Internet</h2>
<p>Demonstrate how the Private Subnet is not accessible from the Internet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ANXms1DdelE" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<h2 id="validate-private-subnet-accessible-from-public-subnet">Validate Private Subnet Accessible From Public Subnet</h2>
<p>Validate the networking and virtual firewall rules work to only allow access from the Public Subnet.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6W8Zs_oZO8M" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<p><a href="https://jamesbyars.github.io/tutorials/AWS-VPC-Public-Private-Subnet-Tutorial">AWS VPC With Public And Private Subnets Tutorial</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on April 20, 2018.</p>https://jamesbyars.github.io/articles/Cloud-Foundry-Organizations-And-Spaces2018-01-12T00:00:00-06:002018-01-12T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p><a href="https://cloudfoundry.org/">Cloud Foundry</a> is an open source
<a href="https://en.wikipedia.org/wiki/Platform_as_a_service">PaaS</a> (Platform-As-A-Service) service
used to abstract infrastructure details from development teams. I will be
producing a ‘Getting Started’ article to accelerate the learning curve at
some time in the future. This article will focus on a two concepts
provided by Cloud Foundry, Organizations and Spaces, to assist development
organizations with application management.</p>
<p><img src="https://jamesbyars.github.io/images/cloud-foundry/cf-logo.png" alt="CloudFoundryLogo" /></p>
<h1 id="organizations">Organizations</h1>
<p>An organization provides a high level management interface and access
control. I think of the <a href="https://cloudfoundry.org/">Cloud Foundry</a>
(CF) Organization to be synonymous with a department in a business.</p>
<p>To give an example, if I was an Insurance Company running CF I could
segment the departments of the company into CF Organizations:</p>
<ul>
<li>Personal Insurance</li>
<li>Business Insurance</li>
<li>Commercial Insurance</li>
<li>etc…</li>
</ul>
<h3 id="benefits-of-using-cloud-foundry-organizations">Benefits of using Cloud Foundry Organizations</h3>
<p>Each <a href="https://cloudfoundry.org/">Cloud Foundry</a> organization has its
own domain. This feature can be used to segment an organizations
services.</p>
<p>Organizations are setup to allow individual users to have access to the
organization. In the above insurance company example we can enforce
authentication and authorization for each organization, so a developer
in the Personal Insurance organization would not have access to make a
change in the Business Insurance organization (unless said permission
was explicitly set, of course).</p>
<p><a href="https://cloudfoundry.org/">Cloud Foundry</a> organizations are configurable
to set resource limits to prevent services in one organization from hogging
resources, causing an issue with another organization. Additionally,
resource consumption can be monitored to make allocation decisions.</p>
<p><img src="https://jamesbyars.github.io/images/cloud-foundry/cf-orgs-spaces.png" alt="CloudFoundryLogo" /></p>
<h1 id="spaces">Spaces</h1>
<p>Applications and services deployed to
<a href="https://cloudfoundry.org/">Cloud Foundry</a> (CF) are scoped to
spaces with each organization containing one to many spaces.</p>
<p>Using my previous example of an Insurance Company. Within each organization
we would organize our services into spaces. Each space may contain a
component of that particular department. So for the Commercial Insurance
department we may have a space for:</p>
<ul>
<li>Underwriting</li>
<li>Claims</li>
<li>Correspondence</li>
<li>Analytics</li>
<li>etc…</li>
</ul>
<p>Spaces allow for finer grained authentication and authorization security. Each
user can be assigned a role that grants permissions for specific
activities. For example, a user with the “Space Developer” and another
user with the “Space Auditor” roles can both view all the same things,
however the user with “Space Developer” has additional permissions to
create/edit/delete/rename services, applications, and routes.</p>
<p>To view all roles and permissions for an organization have a look at the
matrix at <a href="http://docs.cloudfoundry.org/concepts/roles.html#roles">Roles and Permissions for Active Orgs</a>.</p>
<h1 id="cloud-foundry-organizations-and-spaces-summary">Cloud Foundry Organizations and Spaces Summary</h1>
<p><a href="https://cloudfoundry.org/">Cloud Foundry</a> organizations and spaces provide
ways to organize compute resources in natural ways. There are clear
benefits to creating separate organizations for departments in a large
organization. Adding the ability to group resources into distinct
spaces provides simplified tools for monitoring and security. Users are
created at the organization level to allow general access to the
organization in Cloud Foundry. Each space can create its own roles
and permissions to create more fine grained access controls.</p>
<p>The concept of spaces encourages modular application design with low
coupling.</p>
<p><a href="https://jamesbyars.github.io/articles/Cloud-Foundry-Organizations-And-Spaces">Cloud Foundry Organizations and Spaces</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on January 12, 2018.</p>https://jamesbyars.github.io/articles/2017-Chicago-Marathon2017-10-09T00:00:00-05:002017-10-09T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>I ran my first marathon in 2017 - it was the Bank of America Chicago Marathon and
it was incredible. I am going to write a little about the experience
so I remember it better and so others can enjoy.</p>
<h1 id="why-did-i-decide-to-do-this">Why did I decide to do this?</h1>
<p>If you have been following my posts you know that I have been running for a
couple years now. I started with a 5k and worked my way up to a 10k and
half-marathon. I was never really sure that I wanted to run a marathon
because I knew how much strain it put on the body. With the encouragement of
others I decided to join the Ronald McDonald House charity race team. In
exchange for being able to register for the race (normally one must qualify),
I pledged to raise $1500 in order to keep families close.</p>
<h1 id="marathon-training">Marathon Training</h1>
<p>The charity race team provided us with a self assessment and based on the
results recommended a training plan put together by a professional running
coach. The plan was very similar to what you might find when looking for
plans online.</p>
<p>I began training months in advance, gradually increasing my mileage. Working
through the different workouts specified in the training plan. I travel a lot
for work so it proved challenging to adhere strictly to the plan - I did my
best.</p>
<p>Throughout the training I dealt with pain. From blisters to knee pain, to
shin splints, I just had to persevere.</p>
<h1 id="race-day">Race Day</h1>
<p>I woke up extra early in order to make it to the pre-race hospitality tent
provided by Ronald McDonald House Charities. Nutrition is very important
and even though I don’t always eat the best wanted to make sure my body had
what it needed for the event.</p>
<p>It was about a 35 minute walk to the hospitality tent that morning - I think
I left the hotel at 5:30 AM.</p>
<p>From there I went to the starting line, all runners are grouped into a
corral - I was in ‘H’. Once our time to start came, we made our way up
to the starting line and waited for the official ‘GO!’.</p>
<p>The first 13 miles flew by, I had a great pace going and was thinking all
would be well. Was I ever wrong. Starting in the 13th mile my knees began
to feel swollen. Each step shot pain through my knee. By the time I got to
mile 14 I decided that I needed to let the pain die down so I slowed to a
brisk walk.</p>
<p>I began to feel encouraged as the pain went away after about half a mile. I
start to run, wanting to get back into my groove from the first half. About a
quarter mile later my hamstrings locked up - cramps, mainly in my left leg. I
had no choice but to walk, limping heavily. A police officer monitoring the
course asked me if I was OK - of course I said I was fine, just a cramp.</p>
<p>As I worked the cramp out I decided to pick up running again and was OK doing
so. Until about a half-mile later, when the cramps came back. This was
somewhere in mile 15. I walked, waited for the cramps to subside, then ran
until they came back.</p>
<p>I did this cycle from mile 15 - 24. It. Was. Miserable. At one point
around mile 19 I remember being so exhausted and in so much pain that when
attempting to wipe some sweat off my nose with my hand I missed my entire
face. I went back again, after laughing of course, and I missed a second
time. This scared me a bit, but I had been informed of the effects running
for extended periods would have on the brain. I persevered.</p>
<p>Finally, I see mile 24 coming up. I have been doing this run/walk thing for
a few hours now over nearly 10 miles. I wanted to finish strong. I was not
going to walk across that finish line. I started to run, cramps and all, and
I did not stop until I crossed that line.</p>
<h1 id="post-race">Post Race</h1>
<p>I cried, but no tears came out. I cannot explain what came over me, but I
cried. I was too dehydrated for tears to exist. As I made my way back to
the hospitality tent I was so excited to find somewhere to sit. Being on your
feet, running, for 5 hours and 15 minutes is a lot.</p>
<p>I did it.</p>
<p><img src="https://jamesbyars.github.io/images/2017-chicago-marathon/2017-Chicago-Marathon-Finisher-Certificate.png" alt="CertificateOfCompletion" /></p>
<p><a href="https://jamesbyars.github.io/articles/2017-Chicago-Marathon">2017 Chicago Marathon</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on October 09, 2017.</p>https://jamesbyars.github.io/articles/Gus-World-Famous-Fried-Chicken2017-05-19T00:00:00-05:002017-05-19T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>While visiting Memphis, TN our Uber driver from the night before told us about
<a href="http://gusfriedchicken.com">Gus’s World Famous Fried Chicken</a> and the guy seemed to know what he was
talking about so we decided to give it a try.</p>
<p>The outside of the building spoke to me, I don’t like really fancy places, I care
about what is in the inside…the food!</p>
<p><img src="https://jamesbyars.github.io/images/guss-fried-chicken-memphis-tn/GusFriedChicken-Building.png" alt="TheBuilding" /></p>
<p>Inside feels just like it should, cozy, southern, like a southern kitchen.</p>
<p><img src="https://jamesbyars.github.io/images/guss-fried-chicken-memphis-tn/GusFriedChicken-Inside.png" alt="Inside" /></p>
<p>I chose the 3 piece white meat plate, and opted for two helpings of mac-n-cheese instead of
beans and coleslaw - As recommended by our driver who claimed that, “you don’t go there
for the sides, Mac-N-Cheese is the only one worth getting.”</p>
<p><img src="https://jamesbyars.github.io/images/guss-fried-chicken-memphis-tn/GusFriedChicken-3Piece.png" alt="3Piece" /></p>
<p>Gus’s is known for their Hot Chicken, meaning the breading has a bit of a kick to it. Some
of those who dined with me thought it was hot, I added plenty of Louisiana Hot Sauce in order
to bring it up to a satisfactory level.</p>
<p>We finished off the mean with a deep fried blueberry pie. Was it good? I guess. I would
have preferred Strawberry or Apple.</p>
<p>Let me tell you, there will be a brick in your stomach after putting this one away!</p>
<p><a href="https://jamesbyars.github.io/articles/Gus-World-Famous-Fried-Chicken">Hot Fried Chicken, Gus's World Famous Fried Chicken</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on May 19, 2017.</p>https://jamesbyars.github.io/articles/Best-Thing-I-Have-Done-For-My-Career-Outside-Of-Software2017-04-22T00:00:00-05:002017-04-22T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>“Never satisfied and always thirsting for knowledge and continuous improvement” – this
phrase defines me better than any other set of words in the english language. I believe
it is both my reason for success and my biggest weakness. And that is OK.</p>
<p>I’m always reflecting on where I can improve in both my life and my career, how can I be
more efficient, what can I learn that will give me an advantage. Over the past three
years I can point to one single activity that has benefited me the most in both my personal
and professional life: RUNNING.</p>
<p>I started running 3 years ago and couldn’t run for more than half a mile at a time. I
persevered through soreness, ankle injury, knee pain, shin splints, 100 degree summers,
and 10 degree winters. I’ve emerged as a strong runner and just completed my first
half-marathon, an accomplishment of which I am very proud.</p>
<p><img src="https://jamesbyars.github.io/images/2017-04-22-half-marathon-completion-certificate.png" alt="CertificateOfCompletion" /></p>
<p>I’ve noticed that I’m mentally stronger, I refuse to give up. When I’m tackling a hard
problem at work, I’m more patient and that is important. When I’m struggling to keep up
in my personal life and things get hard, I know I can make it because I’ve already
practiced my “never quit” attitude.</p>
<h2 id="how-i-run">How I run</h2>
<p>I have a couple rules for running</p>
<ol>
<li>Never stop - this is the most important, when I run, I never stop and walk. If things get
hard and I need to catch my breath I may slow down, but I never stop.</li>
<li>Set and follow SMART goals. If you don’t know what SMART goals are I suggest stopping
reading here and <a href="https://en.wikipedia.org/wiki/SMART_criteria">read about SMART Goals</a>.</li>
</ol>
<p>That’s it, two rules. Never quit and always be working towards a goal.</p>
<p><a href="https://jamesbyars.github.io/articles/Best-Thing-I-Have-Done-For-My-Career-Outside-Of-Software">The Best Thing I've Done For My Career Outside of Software</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on April 22, 2017.</p>https://jamesbyars.github.io/tutorials/AWSCasts-VPC-Public-and-Private-Subnets2017-04-21T00:00:00-05:002017-04-21T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>I’ve decided to start building a tutorial series in which I target intermediate Amazon Web Services (AWS)
subjects. I’ve found that there are a lot of beginner focused AWS tutorials out there, but not many focused
on intermediate and advanced users. This tutorial is the first of (hopefully) many. I’m looking for users
to request content they are interested in learning more about whether it be in the comments below or in the
comments section of YouTube. Thanks for watching and I hope I can help you learn more about AWS!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/NqdjOdQ-yYs" frameborder="0" allowfullscreen=""></iframe>
<p><a href="https://jamesbyars.github.io/tutorials/AWSCasts-VPC-Public-and-Private-Subnets">Creating an AWS VPC With Public & Private Subnets</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on April 21, 2017.</p>https://jamesbyars.github.io/articles/Flushing-DNS-Cache-OSX2016-10-03T00:00:00-05:002016-10-03T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h1 id="why-flush-local-dns-cache">Why Flush Local DNS Cache?</h1>
<p>I’ve been spending a lot of time lately working on configuring web apps running
on AWS with domains that have been purchased from
<a href="https://domains.google.com/registrar">Google Domains</a>
(Yea, I have a legitimate reason for not using Route 53, but I’ll save that for
another post).</p>
<p>I need to flush DNS cache regularly, like every few minutes in order to validate
my DNS config changes. I’m leaving the TTL of my records set at 5 minutes.</p>
<h2 id="the-script">The Script</h2>
<script src="https://gist.github.com/jamesbyars/8f2967a1d71b9e0e954efec5bf8494be.js"></script>
<p>Please note: I referenced https://support.apple.com/en-bw/HT202516 while creating
this post.</p>
<h1 id="still-have-to-wait-on-dns">Still have to wait on DNS</h1>
<p>Just because you flush your local DNS cache doesn’t mean the change you made
to your DNS record will have propagated through the DNS system. Use the dig
command to verify your changes have take effect.</p>
<p><a href="https://jamesbyars.github.io/articles/Flushing-DNS-Cache-OSX">Flushing the DNS Cache On OS X</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on October 03, 2016.</p>https://jamesbyars.github.io/articles/Jenkins-Backup-Jenkins-Config-To-S32016-08-08T00:00:00-05:002016-08-08T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h1 id="why-backup-build-jobs">Why backup build jobs?</h1>
<p>I’m running a containerized Jenkins instance for my CI jobs and wanted an easy
way to ensure my build configs would persist even if something happened to my
Jenkins container.</p>
<h2 id="my-options">My options</h2>
<p>I could have used a Docker volume, or created a custom AMI,
or even created an AWS volume from my AMI that could be mounted on any other AMI.</p>
<h2 id="why-didnt-i-do-these-things">Why didn’t I do these things?</h2>
<p>None of the above options made sense. Had I used a Docker volume I would have had
to persist that volume somewhere, creating additional overhead.</p>
<p>If I chose to create a custom AMI that contained my configs then anytime I
updated my CI configurations I would have had to build a new AMI…doesn’t
help me move faster.</p>
<p>What about creating a Volume in EC2? Same problem, any time I update something
in Jenkins I would have to create a new volume.</p>
<h1 id="the-solution">The Solution</h1>
<p>I created a Jenkins job that runs daily. This job tar’s and gzip’s my configs
and uploads it to an S3 bucket (The job requires the Jenkins S3 plugin). Builds
are versioned and maintained in a persisted state.</p>
<h2 id="build-job-shell">Build Job (shell)</h2>
<script src="https://gist.github.com/jamesbyars/31266615b9560399bbb54014c67b75c6.js"></script>
<p>Please note: I referenced http://www.clausconrad.com/blog/backup-jenkins-configuration-to-s3
while creating this script.</p>
<p><a href="https://jamesbyars.github.io/articles/Jenkins-Backup-Jenkins-Config-To-S3">Jenkins Automated Backup To AWS S3</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on August 08, 2016.</p>https://jamesbyars.github.io/android/Android-ListView-Height2015-08-09T00:00:00-05:002015-8-9T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>Looking around the internet I’ve seen several ways to set the height of a ListView. Upon
further reading I came across a <em>best</em> way. One thing I learned is a ListView should never
be nested inside a ScrollView since the ListView grows to hold all its contents (makes
sense once you hear that, right?).</p>
<p>I wasn’t directly adding the ListView to the ScrollView, instead I had a fragment
container which I used to swap in and out views and the ScrollView was the parent of my
parent container.</p>
<h1 id="the-layout">The layout</h1>
<script src="https://gist.github.com/jamesbyars/7acce25a885bf1c6efb5.js"></script>
<p><a href="https://jamesbyars.github.io/android/Android-ListView-Height">Android ListView Set Height Properly</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on August 09, 2015.</p>https://jamesbyars.github.io/articles/Site-Purpose2015-08-08T00:00:00-05:002015-8-8T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<h3 id="purpose">Purpose</h3>
<p>Through my daily (and nightly) work I encounter problems. Keeping with software engineer
style, Google.com is my best friend. What I find time and time again are StackOverflow
questions marked as duplicates, blog posts from 3 years ago, and ‘10 mortgage tips your
bank doesn’t want you to know’. Even in my personal work, I have hit similar issues and
thought to myself, “How did I solve that one?” Enough is enough, I’m starting my own
list of learnings, common implementations, etc…</p>
<p><a href="https://jamesbyars.github.io/articles/Site-Purpose">My Purpose and Vision</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on August 08, 2015.</p>https://jamesbyars.github.io/articles/Creature_of_Habit2014-08-08T00:00:00-05:002015-8-8T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>As a programmer I think one of the most important attributes one can have is consistency
and the ability to analyze situations. Through my career I have found a consistant set
of problems faced in projects.</p>
<h3 id="creature-of-habit">Creature of Habit</h3>
<p>I would call myself a creature of habit - just listen to my morning routine…</p>
<ul>
<li>Wake up, walk downstairs</li>
<li>Make 6 cups of coffee</li>
<li>Pee</li>
<li>Make a Peanut Butter and Jelly sandwich (Smucker’s Seedless Blackberry Raspberry & Smooth JIF)</li>
<li>Pour my coffee over 1 ice cube</li>
<li>Sit in my spot at the table and proceed with breakfast</li>
<li>Take my shower and go to work</li>
</ul>
<p>To me, this makes logical sense. I know that from the time I wake up until the time I leave
for work 35 minutes go by, and I know it works - I’ve been doing it for years!</p>
<h3 id="im-not-alone">I’m not alone!</h3>
<p>I’m not the only one who finds comfort in patterns. As a Software Engineer I study and
implement design patters. Design Patters provide a common, proven, peer reviewed solution
to common problems. Many highly skilled engineers I have talked to recommend learning
design patterns as one of the best way to improve one’s skills.</p>
<p>Writers of <a href="https://en.wikipedia.org/wiki/Design_Patterns">Design Patterns, Elements of Reusable Object-Oriented Software</a>,
aka “The Gang of Four Book”, recognized the need for patterns and published their book way back
in 1994. Personally, I am a big fan of the <a href="http://shop.oreilly.com/category/series/head-first.do">Head First Series</a>,
so I chose to start with <a href="http://shop.oreilly.com/product/9780596007126.do">Head First Design Patterns</a>.</p>
<h3 id="i-love-patterns">I love patterns</h3>
<p>With software patterns I am able to analyze the task at hand and choose the appropriate
solution. The solutions follow a consistant implementation and are open to customization
to meet project requirements.</p>
<p><a href="https://jamesbyars.github.io/articles/Creature_of_Habit">Creature of Habit</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on August 08, 2014.</p>https://jamesbyars.github.io/personal/introducing-notepad2014-07-19T00:00:00-05:002014-07-19T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>Notepad is a Jekyll theme which is very simple, clean and beautiful. This theme is good for any blog.</p>
<p>Main Features:
Zurb Foundation 5 - css framework
Fullscreen post covers with header wich will be bright or dark according to background image
Fast and light
Font Awesome
Disqus comments integration
You can set post image covers by using only Ghost narkdown editor just place something like this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>![cover-image](http://path-to-your-image.jpg)
</code></pre></div></div>
<p>You can also place other images witch will be put in text.</p>
<p><img src="https://jamesbyars.github.io/images/cover3.jpg" alt="Laptop" /></p>
<p>You can use Foundation Grid, but you need to write html in Ghost markdown editor (this isn’t hard):</p>
<p>Example - two columns:</p>
<div class="row">
<div class="small-12 medium-6 columns">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Explicabo blanditiis pariatur, odio amet voluptas fugiat veniam quos ratione unde aperiam, aspernatur, dolores tempore nam. Vitae facere ipsum soluta architecto quisquam doloremque facilis commodi debitis atque, porro nesciunt modi reiciendis natus beatae aperiam cupiditate expedita eum, doloribus, obcaecati excepturi autem! Perferendis quam, deserunt illum ipsa repellendus nesciunt eum qui repellat est possimus natus quod ducimus excepturi fugit, tempore, dolores maiores esse?</p>
</div>
<div class="small-12 medium-6 columns">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Explicabo blanditiis pariatur, odio amet voluptas fugiat veniam quos ratione unde aperiam, aspernatur, dolores tempore nam. Vitae facere ipsum soluta architecto quisquam doloremque facilis commodi debitis atque, porro nesciunt modi reiciendis natus beatae aperiam cupiditate expedita eum, doloribus, obcaecati excepturi autem! Perferendis quam, deserunt illum ipsa repellendus nesciunt eum qui repellat est possimus natus quod ducimus excepturi fugit, tempore, dolores maiores esse?</p>
</div>
</div>
<p><a href="http://foundation.zurb.com/docs/">More info about Foundation framework</a></p>
<p><a href="https://jamesbyars.github.io/personal/introducing-notepad">Introducing Notepad</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on July 19, 2014.</p>https://jamesbyars.github.io/articles/theme-elements2011-03-10T00:00:00-06:002013-05-31T00:00:00-00:00James Byarshttps://jamesbyars.github.iojames@ernesttech.com
<p>Below is just about everything you’ll need to style in the theme. Check the source code to see the many embedded elements within paragraphs.</p>
<h1 id="heading-1">Heading 1</h1>
<h2 id="heading-2">Heading 2</h2>
<h3 id="heading-3">Heading 3</h3>
<h4 id="heading-4">Heading 4</h4>
<h5 id="heading-5">Heading 5</h5>
<h6 id="heading-6">Heading 6</h6>
<h3 id="body-text">Body text</h3>
<p>Lorem ipsum dolor sit amet, test link adipiscing elit. <strong>This is strong</strong>. Nullam dignissim convallis est. Quisque aliquam.</p>
<p><em>This is emphasized</em>. Donec faucibus. Nunc iaculis suscipit dui. 53 = 125. Water is H<sub>2</sub>O. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. The New York Times <cite>(That’s a citation)</cite>. <u>Underline</u>. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus.</p>
<p>HTML and <abbr title="cascading stylesheets">CSS<abbr> are our tools. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus.</abbr></abbr></p>
<h3 id="blockquotes">Blockquotes</h3>
<blockquote>
<p>Lorem ipsum dolor sit amet, test link adipiscing elit. Nullam dignissim convallis est. Quisque aliquam.</p>
</blockquote>
<h2 id="list-types">List Types</h2>
<h3 id="ordered-lists">Ordered Lists</h3>
<ol>
<li>Item one
<ol>
<li>sub item one</li>
<li>sub item two</li>
<li>sub item three</li>
</ol>
</li>
<li>Item two</li>
</ol>
<h3 id="unordered-lists">Unordered Lists</h3>
<ul>
<li>Item one</li>
<li>Item two</li>
<li>Item three</li>
</ul>
<h2 id="tables">Tables</h2>
<div class="row">
<div class="large-12 columns">
<table>
<thead>
<tr>
<th width="200">Table Header</th>
<th>Table Header</th>
<th width="150">Table Header</th>
<th width="150">Table Header</th>
</tr>
</thead>
<tbody>
<tr>
<td>Content Goes Here</td>
<td>This is longer content Donec id elit non mi porta gravida at eget metus.</td>
<td>Content Goes Here</td>
<td>Content Goes Here</td>
</tr>
<tr>
<td>Content Goes Here</td>
<td>This is longer Content Goes Here Donec id elit non mi porta gravida at eget metus.</td>
<td>Content Goes Here</td>
<td>Content Goes Here</td>
</tr>
<tr>
<td>Content Goes Here</td>
<td>This is longer Content Goes Here Donec id elit non mi porta gravida at eget metus.</td>
<td>Content Goes Here</td>
<td>Content Goes Here</td>
</tr>
</tbody>
</table>
</div>
</div>
<h2 id="code-snippets">Code Snippets</h2>
<p>Syntax highlighting via Pygments</p>
<figure class="highlight"><pre><code class="language-css" data-lang="css"><span class="nf">#container</span> <span class="p">{</span>
<span class="nl">float</span><span class="p">:</span> <span class="nb">left</span><span class="p">;</span>
<span class="nl">margin</span><span class="p">:</span> <span class="m">0</span> <span class="m">-240px</span> <span class="m">0</span> <span class="m">0</span><span class="p">;</span>
<span class="nl">width</span><span class="p">:</span> <span class="m">100%</span><span class="p">;</span>
<span class="p">}</span></code></pre></figure>
<h2 id="buttons">Buttons</h2>
<p>Make any link standout more when applying the <code class="language-plaintext highlighter-rouge">button</code> class.</p>
<p><a href="#" class="button">Default Button</a></p>
<p><a href="https://jamesbyars.github.io/articles/theme-elements">Theme Elements</a> was originally published by James Byars at <a href="https://jamesbyars.github.io">James Byars</a> on March 10, 2011.</p>