<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Charlton Austin</title>
    <link>https://charltonaustin.com/</link>
    <description>Recent content on Charlton Austin</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 20 Nov 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://charltonaustin.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Dawn of the Strategic Engineer</title>
      <link>https://charltonaustin.com/posts/2025_11_20_strategy_being_strategic_as_an_engineer/</link>
      <pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_11_20_strategy_being_strategic_as_an_engineer/</guid>
      <description>&lt;p&gt;As the 21st century marches on, technology is no longer just influencing our lives. It is reshaping our world and the&#xA;way we work. This is especially true in the field of engineering, where AI technologies are transforming not just the&#xA;work itself, but the very role of the engineer. The introduction of advanced AI technologies has automated many aspects&#xA;of the engineering process, making tasks easier and boosting productivity. However, this shift also brings about a new&#xA;challenge for engineers: how to remain relevant and valuable in an era of rapid automation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rethinking Supervision and Support in Remote Work Environments</title>
      <link>https://charltonaustin.com/posts/2025_09_21_rethink_remote_supervision/</link>
      <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_09_21_rethink_remote_supervision/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;As businesses continue to navigate the evolving landscape of remote work, many leaders grapple with the challenges of&#xA;supervision and support in a virtual environment. Remote workers may feel isolated and disconnected from their&#xA;colleagues, making it difficult for them to access the support they need to perform at their best. Although some argue&#xA;that remote work is&#xA;a &lt;a href=&#34;https://fortune.com/2023/05/05/openai-ceo-sam-altman-remote-work-mistake-return-to-office/&#34;&gt;failed experiment&lt;/a&gt;,&#xA;others believe that by embracing change and adopting creative strategies, there will be a persistent and growing benefit&#xA;to companies that embrace remote work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Value of Continuous Learning in a Startup Environment</title>
      <link>https://charltonaustin.com/posts/2025_07_14_the_value_of_conitnous_learning/</link>
      <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_07_14_the_value_of_conitnous_learning/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction:&lt;/h1&gt;&#xA;&lt;p&gt;In today&amp;rsquo;s fast-paced business landscape, one of the key drivers of success for startups is their ability to adapt and&#xA;innovate quickly. This often hinges on the team&amp;rsquo;s collective knowledge and skillset, which is why fostering a culture of&#xA;continuous learning is paramount. In this blog post, I will share my experience as a founder in creating and maintaining&#xA;a learning-focused environment within my startup, along with the benefits it has brought to my team and our company&amp;rsquo;s&#xA;growth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unlocking the Power of Diversity in Startup Hiring</title>
      <link>https://charltonaustin.com/posts/2025_05_06_unlock_diversity_in_startups/</link>
      <pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_05_06_unlock_diversity_in_startups/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;In the fast-paced and ever-evolving world of startups, the importance of diversity in hiring decisions cannot be&#xA;overstated. Building a diverse team not only ensures a broader range of perspectives and ideas, but also fosters&#xA;adaptability and resilience in changing market conditions. This post will explore the value of diversity in startup&#xA;teams and provide strategies for building a diverse workforce that can thrive in the face of uncertainty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Striking a Balance Between Speed and Quality</title>
      <link>https://charltonaustin.com/posts/2025_03_15_speed_and_quality_in_startups/</link>
      <pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_03_15_speed_and_quality_in_startups/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;When embarking on a startup journey, finding the right balance between speed and quality is crucial for success. In this&#xA;blog post, I&amp;rsquo;ll share my personal experiences and lessons learned while striving to move quickly without compromising&#xA;the quality of my product or service. From understanding the nuances of selling to setting clear expectations, I hope my&#xA;insights can help fellow entrepreneurs navigate the exciting world of startups.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-pitfalls-of-overselling-without-understanding&#34;&gt;The Pitfalls of Overselling Without Understanding&lt;/h1&gt;&#xA;&lt;p&gt;In the early stages of my startup, I found myself leaning too much on over-promising and under-delivering. I would sell&#xA;features without a clear understanding of the effort and time required to build them. This approach led to missed&#xA;deadlines and frustrated customers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why you should read the fine print</title>
      <link>https://charltonaustin.com/posts/2023_05_16_why_you_should_always_read_the_fine_print/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_05_16_why_you_should_always_read_the_fine_print/</guid>
      <description>&lt;p&gt;I was driving a truck in Iraq when the first IED exploded. I remember seeing the vehicle in front of me burst into flames and feeling the heat come through the steering wheel. My world went quiet, and everything felt distant like I was seeing the world through a fishbowl.&lt;/p&gt;&#xA;&lt;p&gt;The next thing I knew, someone was screaming at me to drive. I snapped out of my daze and hit the gas pedal. We drove as fast as we could to the nearest forward operating base.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Points What Are They Good For</title>
      <link>https://charltonaustin.com/posts/2023_05_09_points-what-are-they-good-for/</link>
      <pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_05_09_points-what-are-they-good-for/</guid>
      <description>&lt;h1 id=&#34;should-story-points-be-tied-to-time&#34;&gt;Should Story Points Be Tied to Time&lt;/h1&gt;&#xA;&lt;p&gt;I often hear people say that story points shouldn&amp;rsquo;t be tied to time. Instead, they should be based on complexity. This can be for a variety of reasons. For instance, three reasons are cited in &lt;a href=&#34;https://rubygarage.org/blog/3-reasons-to-estimate-with-story-points&#34;&gt;this article&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some tasks are difficult to estimate precisely.&lt;/li&gt;&#xA;&lt;li&gt;If one developer estimates a project but another completes the task, the estimate becomes invalid. The time needed to complete a task will vary based on a developer&amp;rsquo;s level of experience.&lt;/li&gt;&#xA;&lt;li&gt;People generally underestimate obstacles they might face and consider only the best-case scenario.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Each of these reasons presents a concrete problem that should be solved. For example, some tasks are difficult to estimate, but that doesn&amp;rsquo;t mean you should avoid estimating them. Similarly, different developers may complete tasks at different rates, but that means you should work to figure out how long it will take your team, not change estimates from time to complexity-based.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Importance of Commander&#39;s Intent in Distributed Teams</title>
      <link>https://charltonaustin.com/posts/2023_05_02_commanders-intent-in-distributed-teams/</link>
      <pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_05_02_commanders-intent-in-distributed-teams/</guid>
      <description>&lt;h1 id=&#34;commanders-intent&#34;&gt;Commander&amp;rsquo;s intent&lt;/h1&gt;&#xA;&lt;p&gt;In today&amp;rsquo;s world, distributed teams are becoming more and more common. With remote work becoming the norm, the ability for a team to work effectively together relies on everyone understanding the goal and working towards it as hard as possible. In this context, commander&amp;rsquo;s intent can be a powerful tool for teams to take advantage of opportunities and achieve their goals. In this post, we&amp;rsquo;ll explore the importance of commander&amp;rsquo;s intent in distributed teams, and how it can help smaller companies and startups to succeed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Navigating Time Zone Differences in Remote Teams</title>
      <link>https://charltonaustin.com/posts/2023_04_25_navigating-time-zone-differences-in-remote-teams/</link>
      <pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_04_25_navigating-time-zone-differences-in-remote-teams/</guid>
      <description>&lt;p&gt;In today&amp;rsquo;s globalized world, remote teams are becoming increasingly common. However, with team members located in different time zones, scheduling meetings and collaborations can become more difficult. In this blog post, we&amp;rsquo;ll explore some tips and strategies to help remote teams navigate time zone differences and work more effectively together, as well as some common pitfalls to avoid.&lt;/p&gt;&#xA;&lt;h1 id=&#34;what-doesnt-work&#34;&gt;What doesn&amp;rsquo;t work:&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No meetings at all: While it may seem like avoiding meetings altogether would solve the time zone issue, it can actually limit communication and collaboration within the team. Lack of regular meetings can lead to team members feeling disconnected from each other and the project.&lt;/li&gt;&#xA;&lt;li&gt;Leaving availability up to individuals: While it may be tempting to let team members decide their own schedules, this approach can lead to confusion and miscommunication. It requires a lot of discipline and empathy from every team member to ensure that their work hours align with other team members&amp;rsquo; schedules.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;what-does-work&#34;&gt;What does work:&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Establish clear expectations: It&amp;rsquo;s important to establish clear expectations around availability and work schedules. Let team members know what is expected of them in terms of availability for meetings and collaboration, and make sure everyone is on the same page.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Overcoming Lack of Team Cohesion in Remote Teams</title>
      <link>https://charltonaustin.com/posts/2023_04_18_overcoming-lack-of-cohesion-in-remote-environments/</link>
      <pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_04_18_overcoming-lack-of-cohesion-in-remote-environments/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;As remote work has become increasingly popular, businesses face new challenges when it comes to fostering team cohesion. Without face-to-face interactions, building camaraderie and trust can be difficult. However, there are several strategies that can help remote teams overcome these obstacles and create an inclusive and effective work environment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;encourage-teamwork-through-remote-games-and-relax-time&#34;&gt;Encourage Teamwork through Remote Games and Relax Time&lt;/h2&gt;&#xA;&lt;p&gt;One successful strategy for building team cohesion in remote teams is incorporating remote games and relaxation time during work hours. These activities allow team members to interact in a more casual setting and can help break down barriers that may exist in a purely business-focused environment. By allocating time for these activities during work hours, employees are more likely to participate and engage with their colleagues.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Communication in Remote Start-Ups</title>
      <link>https://charltonaustin.com/posts/2023_04_11_communication-in-remote-start-ups/</link>
      <pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_04_11_communication-in-remote-start-ups/</guid>
      <description>&lt;h1 id=&#34;communication-challenges-in-a-remote-startup-tips-for-overcoming-them&#34;&gt;Communication Challenges in a Remote Startup: Tips for Overcoming Them&lt;/h1&gt;&#xA;&lt;p&gt;Remote work has become increasingly popular in recent years, but it comes with its own unique set of challenges&#xA;One of the biggest hurdles that remote startups face is communication&#xA;In this post, we&amp;rsquo;ll explore some of the common communication challenges in a remote startup and provide tips for overcoming them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-work-on-communication-skills&#34;&gt;1. Work on Communication Skills&lt;/h2&gt;&#xA;&lt;p&gt;Communication is always more difficult in a remote environment&#xA;However, there are things you can do to combat this&#xA;While many people may suggest adding more meetings, this can actually kill productivity&#xA;Instead, focus on making sure your team knows and learns strong communication skills&#xA;This means respecting other people&amp;rsquo;s opinions, avoiding arguments, and taking on disagreements in a tactful manner&#xA;This doesn&amp;rsquo;t mean you should hide disagreements, but rather that you should approach them constructively.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Be an Empathetic Leader: Strategies for Effective Leadership</title>
      <link>https://charltonaustin.com/posts/2023_04_04_being-an-empathetic-leader/</link>
      <pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_04_04_being-an-empathetic-leader/</guid>
      <description>&lt;p&gt;Empathy is a critical skill for any leader who wants to build a successful and sustainable organization. It enables leaders to connect with their employees on a personal level, understand their needs and concerns, and create a positive work environment that fosters engagement and productivity. In this article, we&amp;rsquo;ll explore some practical strategies for becoming a more empathetic leader.&#xA;In the Marine Corps I was always taught to know your Marines.&#xA;I believe that is because empathy can only come through understanding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Practical Guide to Productive Weekly One-on-One Meetings with Employees</title>
      <link>https://charltonaustin.com/posts/2023_03_28_a-weekly-one-on-one-checklist/</link>
      <pubDate>Tue, 28 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_03_28_a-weekly-one-on-one-checklist/</guid>
      <description>&lt;p&gt;As a manager, it&amp;rsquo;s essential to have regular one-on-one meetings with your direct reports. These meetings allow you to stay connected with your employees, address their concerns, and give them the feedback they need to grow professionally. In this blog post, we&amp;rsquo;ll share a simple checklist to help you have effective weekly check-ins with your employees.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-checklist&#34;&gt;The Checklist:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How was last week?&lt;/li&gt;&#xA;&lt;li&gt;Is there anything I need to know about that I don&amp;rsquo;t know about?&lt;/li&gt;&#xA;&lt;li&gt;Are you waiting on me for anything?&lt;/li&gt;&#xA;&lt;li&gt;What can I do to make your life better?&lt;/li&gt;&#xA;&lt;li&gt;Do you have any feedback for me?&lt;/li&gt;&#xA;&lt;li&gt;Do you mind if we go over feedback for you?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-reasoning&#34;&gt;The Reasoning:&lt;/h2&gt;&#xA;&lt;p&gt;Having a weekly one-on-one with your direct reports may seem time-consuming, but it&amp;rsquo;s worth it. You get to know what&amp;rsquo;s going on with your employees, address any feedback you have for them, and show them that you care about their well-being. Besides, the most crucial aspect of any company is the quality of its people, so it&amp;rsquo;s essential to spend time caring for your employees.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Failure is Inevitable</title>
      <link>https://charltonaustin.com/posts/2023_03_21_failure-is-inevitable/</link>
      <pubDate>Tue, 21 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2023_03_21_failure-is-inevitable/</guid>
      <description>&lt;h1 id=&#34;failure-is-inevitable&#34;&gt;Failure is Inevitable&lt;/h1&gt;&#xA;&lt;p&gt;Dealing with failure is an inevitable part of life, especially when you&amp;rsquo;re an entrepreneur.&#xA;While it can be tempting to try to avoid failure at all costs, the truth is that failure is an essential part of the learning process. By acknowledging our failures and learning from them, we can become better, more successful versions of ourselves.&lt;/p&gt;&#xA;&lt;h1 id=&#34;how-to-learn-from-it&#34;&gt;How to learn from it&lt;/h1&gt;&#xA;&lt;p&gt;In order to learn from failure, there are three things that we must do:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why You Should Emulate Containers in Python</title>
      <link>https://charltonaustin.com/posts/2020_08_13_why-you-should-emulate-containers-in-python/</link>
      <pubDate>Thu, 13 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2020_08_13_why-you-should-emulate-containers-in-python/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;Say that you have a list of items and each item has a price.&#xA;You would like to highlight the item or items that have the lowest price.&#xA;If all of the items are the same price you wouldn&amp;rsquo;t like to highlight any of them.&#xA;We might have something like the following&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;Item&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;def&lt;/span&gt; __init__(self, name, price):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self.name = name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    self.price = price&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;items = [Item(&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;, 1), Item(&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;, 2), ...]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lowest_price = sys.float_info.max&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;all_equal = &lt;span style=&#34;font-weight:bold&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;last_price = items[0]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;for&lt;/span&gt; item &lt;span style=&#34;font-weight:bold&#34;&gt;in&lt;/span&gt; items:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt; item.price != last_price:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    all_equal = &lt;span style=&#34;font-weight:bold&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt; item.price &amp;lt; lowest_price&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lowest_price = item.price&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  item.last_price = item.price&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printable_string = &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt; all_equal:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;for&lt;/span&gt; item &lt;span style=&#34;font-weight:bold&#34;&gt;in&lt;/span&gt; items:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printable_string += item.name + str(item.price) + &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;font-weight:bold;font-style:italic&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;for&lt;/span&gt; item &lt;span style=&#34;font-weight:bold&#34;&gt;in&lt;/span&gt; items:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt; item.price == lowest_price:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      printable_string += &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;**&amp;#34;&lt;/span&gt; + item.name + str(item.price()) + &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;**&lt;/span&gt;&lt;span style=&#34;font-weight:bold;font-style:italic&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      printable_string += item.name + str(item.price()) + &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;font-weight:bold;font-style:italic&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(printable_string.rstrip(&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;font-weight:bold;font-style:italic&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is fine as long as our list is short.&#xA;Imagine though that our list was incredibly long.&#xA;You might realize that you have to traverse our items list twice.&#xA;The first time when we are finding the smallest price and testing if all prices are the same.&#xA;The second time when we want to print out the items.&#xA;Given a long enough list this would be less than ideal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pomodoro Method Follow Up</title>
      <link>https://charltonaustin.com/posts/2020_04_27_pomodoro-method-follow-up/</link>
      <pubDate>Mon, 27 Apr 2020 07:00:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2020_04_27_pomodoro-method-follow-up/</guid>
      <description>&lt;h2 id=&#34;pomodoro-technique&#34;&gt;Pomodoro Technique&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve blogged about it before.&#xA;Recently I dusted off my old method and tried to implement it.&#xA;I found that there were some rather strange problems with my old method and MacOS.&#xA;So I wanted to help some people.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-scripts&#34;&gt;The scripts&lt;/h2&gt;&#xA;&lt;p&gt;We have a few scripts.&#xA;We have a &lt;a href=&#34;https://github.com/charltonaustin/dotfiles/blob/master/bin/delayed_mac&#34;&gt;delayed_mac&lt;/a&gt; script.&#xA;This script just takes a command and a time in mins.&#xA;It executes the command that many mins later.&#xA;Next we have a &lt;a href=&#34;https://github.com/charltonaustin/dotfiles/blob/master/bin/take_a_break&#34;&gt;take_a_break&lt;/a&gt; script.&#xA;It sets a timer a timer for 5 or 15 mins later depending on your choice.&#xA;It will run the pomondoro script after time is up.&#xA;Next we have a &lt;a href=&#34;https://github.com/charltonaustin/dotfiles/blob/master/bin/pomodoro&#34;&gt;pomodoro&lt;/a&gt; script.&#xA;It asks you what your task is and then sets sets up to run the break script 25 mins later.&#xA;All of this is written to a file which is gets rolled up with a timestamp.&#xA;The scripts use &lt;a href=&#34;https://www.freebsd.org/cgi/man.cgi?query=atrun&amp;amp;sektion=8&#34;&gt;atrun&lt;/a&gt; to schedule the tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Applications Integrating On The Database</title>
      <link>https://charltonaustin.com/posts/2020_03_25_applications-integrating-on-the-database/</link>
      <pubDate>Wed, 25 Mar 2020 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2020_03_25_applications-integrating-on-the-database/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;You shouldn&amp;rsquo;t do it.&#xA;You&amp;rsquo;ve read it before.&#xA;Don&amp;rsquo;t integrate applications on the database.&#xA;The advice is relatively straightforward, but it can often be difficult to understand.&#xA;My first piece of advice is that when you have a new process it should have it&amp;rsquo;s own database.&#xA;While the overhead is often real, it is minimal compared to the pain caused when you want to pull the two processes apart later.&#xA;However, I find that people often fight against having two databases from the start.&#xA;They see the immediate pain, and either don&amp;rsquo;t know (or can&amp;rsquo;t see) the pain of the future.&#xA;If they know and then discount the immediate pain, they may be overly discounting future pain.&#xA;There is a name for this sort of bias, it is called &lt;a href=&#34;https://en.wikipedia.org/wiki/Hyperbolic_discounting&#34;&gt;hyperbolic discounting&lt;/a&gt;.&#xA;Regardless, sometimes you decide that you are going to have a single database for multiple processes.&#xA;Maybe it is because recreating many data models isn&amp;rsquo;t your idea of fun.&#xA;Perhaps it is because figuring out how to broker the communication between two apps is no fun.&#xA;So, you copy the models, or you pull them into a shared location.&#xA;You allow the database to decide what consistency looks like.&#xA;This runs smoothly for months (or even years).&#xA;Then one day you realize you can&amp;rsquo;t change one application without changing the other.&#xA;You realize they are tightly coupled, practically speaking, even if they aren&amp;rsquo;t conceptually speaking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Repo Scripts And Autoupdates</title>
      <link>https://charltonaustin.com/posts/2020_02_26_repo-scripts-and-autoupdates/</link>
      <pubDate>Wed, 26 Feb 2020 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2020_02_26_repo-scripts-and-autoupdates/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;You really want to make sure that unit tests are run every time someone commits.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;Three simple scripts.&#xA;The first should be run by all engineers that join the team.&#xA;It should do most of the installs for environment dependencies.&#xA;The second should be a pre-commit script.&#xA;This script should run your tests and anything else that you want to have happen.&#xA;The third script should be an update script.&#xA;It should be a simple script that gets run by your second script.&#xA;It should automatically update your pre-commit script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bugs In Software</title>
      <link>https://charltonaustin.com/posts/2020_01_14_bugs-in-software/</link>
      <pubDate>Tue, 14 Jan 2020 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2020_01_14_bugs-in-software/</guid>
      <description>&lt;h2 id=&#34;the-architecture-of-open-source-applications&#34;&gt;The Architecture of Open Source Applications&lt;/h2&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t seen or read &lt;a href=&#34;http://aosabook.org/en/intro1.html&#34;&gt;The Architecture of Open Source Applications&lt;/a&gt; then you are missing out.&#xA;Sure, it is a bit long.&#xA;Also, each section is written by a different writer making it slightly inconsistent.&#xA;But, there are gems throughout the book that make it worth the read.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-of-the-gems&#34;&gt;One of the gems&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example of one of the gems from the &lt;a href=&#34;http://aosabook.org/en/bdb.html&#34;&gt;Berkeley DB&lt;/a&gt; section.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Importance Of History</title>
      <link>https://charltonaustin.com/posts/2019_12_10_the-importance-of-history/</link>
      <pubDate>Tue, 10 Dec 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_12_10_the-importance-of-history/</guid>
      <description>&lt;h2 id=&#34;history-what-is-it-good-for&#34;&gt;History, what is it good for?&lt;/h2&gt;&#xA;&lt;p&gt;When I interview someone I often ask, &amp;ldquo;Where did object oriented programming (OOP) come from?&amp;rdquo;&#xA;There generally isn&amp;rsquo;t a right or wrong answer to this in the interview.&#xA;You can go look up whether a particular answer is consistent with what&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Object-oriented_programming&#34;&gt;on the internet&lt;/a&gt;.&#xA;However you could give several answers that would all be right.&#xA;You might say, &amp;ldquo;it was pioneered in Sketchpad.&amp;rdquo;&#xA;Or you might say, &amp;ldquo;it came out of the atom in LISP.&amp;rdquo;&#xA;Both are consistent with history.&#xA;Each lens can bring a distinct understanding of OOP.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Telegram Problem</title>
      <link>https://charltonaustin.com/posts/2019_11_15_the-telegram-problem/</link>
      <pubDate>Fri, 15 Nov 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_11_15_the-telegram-problem/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Write a program that takes a number w, then accepts lines of text and outputs lines of text, where the output lines have as many words as possible but are never longer than w characters.&#xA;Words may not be split, but you may assume that no single word is too long for a line.&#xA;&lt;a href=&#34;http://c2.com/cgi/wiki?TelegramProblem&#34;&gt;Source&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;solution&#34;&gt;Solution&lt;/h3&gt;&#xA;&lt;p&gt;This is a straightforward problem when it comes down to it, but it takes some thinking to get there.&#xA;We need to work through the different edge cases to figure out exactly how to make this work.&#xA;I would like to create a solution that deals with channels allowing users to send delete characters and such.&#xA;I think it would be an interesting problem in itself.&#xA;That being said, my solution starts out by initializing the output and current output so that we don&amp;rsquo;t have special cases in our for-loop.&#xA;It also sanitizes and formats the information that we will be walking over.&#xA;Next it loops through and checks to see if the line will grow to long.&#xA;If it won&amp;rsquo;t, we add to the current line output; if it will, we save the current line output to the total output and then initialize the next line output.&#xA;Finally, on our way out, we flush the last partial line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Checklist In Software Development</title>
      <link>https://charltonaustin.com/posts/2019_09_09_using-checklist-in-software-development/</link>
      <pubDate>Mon, 09 Sep 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_09_09_using-checklist-in-software-development/</guid>
      <description>&lt;h2 id=&#34;the-dream&#34;&gt;The dream&lt;/h2&gt;&#xA;&lt;p&gt;For some time I have been wanting to incorporate checklist into the development project.&#xA;My initial inspiration came from &lt;a href=&#34;http://atulgawande.com/book/the-checklist-manifesto/&#34;&gt;The Checklist Manifesto&lt;/a&gt;.&#xA;The book which was initially published in 2009 sent me frantically searching for checklists in software development.&#xA;At the time I couldn&amp;rsquo;t find any.&#xA;Today I use the treasure trove of checklists from &lt;a href=&#34;https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670&#34;&gt;Code Complete Two&lt;/a&gt; by &lt;a href=&#34;https://stevemcconnell.com/books/&#34;&gt;Steve McConnell&lt;/a&gt;.&#xA;This blog post will describe the use of checklists at my &lt;a href=&#34;https://www.tuesdaycompany.com/&#34;&gt;company&lt;/a&gt;.&#xA;Today I will set out to do a few things:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 026</title>
      <link>https://charltonaustin.com/posts/2019_08_19_euler-problem-026/</link>
      <pubDate>Mon, 19 Aug 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_08_19_euler-problem-026/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1/2&#x9;= &#x9;0.5&#xA;1/3&#x9;= &#x9;0.(3)&#xA;1/4&#x9;= &#x9;0.25&#xA;1/5&#x9;= &#x9;0.2&#xA;1/6&#x9;= &#x9;0.1(6)&#xA;1/7&#x9;= &#x9;0.(142857)&#xA;1/8&#x9;= &#x9;0.125&#xA;1/9&#x9;= &#x9;0.(1)&#xA;1/10&#x9;= &#x9;0.1 &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Where 0.1(6) means 0.166666&amp;hellip;, and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 023</title>
      <link>https://charltonaustin.com/posts/2019_07_31_euler-problem-023/</link>
      <pubDate>Wed, 31 Jul 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_07_31_euler-problem-023/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;A perfect number is a number for which the sum of its proper divisors is exactly equal to the number. For example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number.&lt;/p&gt;&#xA;&lt;p&gt;A number n is called deficient if the sum of its proper divisors is less than n and it is called abundant if this sum exceeds n.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Graphing Change Vs Cyclomatic Complexity</title>
      <link>https://charltonaustin.com/posts/2019_06_10_graphing-change-vs-cyclomatic-complexity/</link>
      <pubDate>Mon, 10 Jun 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_06_10_graphing-change-vs-cyclomatic-complexity/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;You want to know where you should be refactoring, and you are not sure where to start.&#xA;Or, you would like to better understand why you have more bugs in one part of the code than another.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-approach&#34;&gt;One approach&lt;/h2&gt;&#xA;&lt;p&gt;One thing that I like to look at when this happens is cyclomatic complexity.&#xA;That often isn&amp;rsquo;t enough to get the full picture of what is happening with code.&#xA;Another place I like to look is how often a file is changing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sudoku Using Go Lang</title>
      <link>https://charltonaustin.com/posts/2019_05_01_sudoku-using-go-lang/</link>
      <pubDate>Wed, 01 May 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_05_01_sudoku-using-go-lang/</guid>
      <description>&lt;h2 id=&#34;algorithms&#34;&gt;Algorithms&lt;/h2&gt;&#xA;&lt;p&gt;A friend of mine recently started looking for work and we were talking about the interview process.&#xA;She brought up the fact that often coding every day as a professional looks nothing like the toy problems in interviews.&#xA;This got me thinking about a surprise question that I had during an interview.&#xA;I was asked to create a Sudoku solver.&#xA;At the time I was pretty vexed.&#xA;I&amp;rsquo;ve never worked as a game programmer.&#xA;The position I was applying for was not a game programming position.&#xA;It was a standard full stack web development position.&#xA;Now I have a lot of thoughts on what interviews should look like and why.&#xA;One of them is that the interview should look at the relevant skills that are going to be used on a daily basis.&#xA;That is if you are going to be doing web development then the interview should be about well&amp;hellip; web development.&#xA;I wish I could say this is a post about hiring and interviews, but it isn&amp;rsquo;t.&#xA;Someday I&amp;rsquo;ll come back and I&amp;rsquo;ll write that post and probably gripe like an old man about hiring practices.&#xA;How those hiring practices can affect the diversity and capabilities of a team and all that jazz.&#xA;This post in a weird twist is actually about how I ended up finally writing that Sudoku solver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 010</title>
      <link>https://charltonaustin.com/posts/2019_04_19_euler-problem-010/</link>
      <pubDate>Fri, 19 Apr 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_04_19_euler-problem-010/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.&lt;/p&gt;&#xA;&lt;p&gt;73167176531330624919225119674426574742355349194934&#xA;96983520312774506326239578318016984801869478851843&#xA;85861560789112949495459501737958331952853208805511&#xA;12540698747158523863050715693290963295227443043557&#xA;66896648950445244523161731856403098711121722383113&#xA;62229893423380308135336276614282806444486645238749&#xA;30358907296290491560440772390713810515859307960866&#xA;70172427121883998797908792274921901699720888093776&#xA;65727333001053367881220235421809751254540594752243&#xA;52584907711670556013604839586446706324415722155397&#xA;53697817977846174064955149290862569321978468622482&#xA;83972241375657056057490261407972968652414535100474&#xA;82166370484403199890008895243450658541227588666881&#xA;16427171479924442928230863465674813919123162824586&#xA;17866458359124566529476545682848912883142607690042&#xA;24219022671055626321111109370544217506941658960408&#xA;07198403850962455444362981230987879927244284909188&#xA;84580156166097919133875499200524063689912560717606&#xA;05886116467109405077541002256983155200055935729725&#xA;71636269561882670428252483600823257530420752963450&lt;/p&gt;&#xA;&lt;p&gt;Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?&lt;/p&gt;&#xA;&lt;h4 id=&#34;solution&#34;&gt;Solution&lt;/h4&gt;&#xA;&lt;p&gt;This guy is a straightforward fun warm up for the day. A simple loop to walk over the numbers looking in all the possible directions (there are four). Going down and up are the same, going left and right are the same, forward-up is the same as going backward-down, and going forward-down is the same as going backward-up. Then as we traverse we keep track of the largest value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 009</title>
      <link>https://charltonaustin.com/posts/2019_03_06_euler-problem-009/</link>
      <pubDate>Wed, 06 Mar 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_03_06_euler-problem-009/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;A Pythagorean triplet is a set of three natural numbers, a &amp;lt; b &amp;lt; c, for which,&#xA;a^2 + b^2 = c^2&lt;/p&gt;&#xA;&lt;p&gt;For example, 32 + 42 = 9 + 16 = 25 = 52.&lt;/p&gt;&#xA;&lt;p&gt;There exists exactly one Pythagorean triplet for which a + b + c = 1000.&#xA;Find the product abc.&lt;/p&gt;&#xA;&lt;h4 id=&#34;solution&#34;&gt;Solution&lt;/h4&gt;&#xA;&lt;p&gt;This solution is straight forward. We satisfy the constraint that a &amp;lt; b &amp;lt; c by incrementing up by one in each variable and then we search for the solution. At first glance this might seem like an O(n^3) problem, but it&amp;rsquo;s constant, at least in the sense that we are only going to 1000 and we have no variable inputs. Mine runs fast enough. So I guess brute force it is today.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prior Art</title>
      <link>https://charltonaustin.com/posts/2019_02_18_prior-art/</link>
      <pubDate>Mon, 18 Feb 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_02_18_prior-art/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes there is the &amp;ldquo;right way&amp;rdquo; and other times there is &amp;ldquo;how it is done in the codebase&amp;rdquo;.&#xA;I would argue that a majority of the time the &amp;ldquo;right way&amp;rdquo; is the &amp;ldquo;how it is done in the codebase&amp;rdquo;.&#xA;This might seem surprising, but generally I think consistency is incredibly important in a codebase.&#xA;So while at first glance a practice might not be the accepted best practice, you shouldn&amp;rsquo;t change the codebase unless you can change everything over to the best practice.&#xA;Recently an employee that was working on a part of the codebase argued that there were sections that weren&amp;rsquo;t following best practices.&#xA;In particular the infrastructure code was centralized in one place rather than spread throughout the code in modules.&#xA;He changed the newest codebase to test out the theory.&#xA;Up to this point I was completely on board with his decisions.&#xA;You see a practice that doesn&amp;rsquo;t match with best practices, you have a an idea on how to fix it, and you try it out.&#xA;It was the next steps that I really didn&amp;rsquo;t agree with.&#xA;At this point everyone agreed it was better to go ahead and have the infrastructure code live close to the code.&#xA;But due to time constraints the rest of the code was not moved over to the new method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blameless Postmortems</title>
      <link>https://charltonaustin.com/posts/2019_01_14_blameless-postmortems/</link>
      <pubDate>Mon, 14 Jan 2019 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2019_01_14_blameless-postmortems/</guid>
      <description>&lt;h3 id=&#34;subject&#34;&gt;Subject&lt;/h3&gt;&#xA;&lt;p&gt;Why should we have blameless postmortems?&lt;/p&gt;&#xA;&lt;h3 id=&#34;context&#34;&gt;Context&lt;/h3&gt;&#xA;&lt;p&gt;I recently read &lt;a href=&#34;https://codeascraft.com/2012/05/22/blameless-postmortems/&#34;&gt;a blog post&lt;/a&gt; about blameless postmortems from &lt;a href=&#34;https://www.etsy.com/&#34;&gt;Etsy&lt;/a&gt;.&#xA;In it there was a simple question about why software engineers shouldn&amp;rsquo;t be punished:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why shouldn’t they be punished or reprimanded?&#xA;Because an engineer who thinks they’re going to be reprimanded are disincentivized to give the details necessary to get an understanding of the mechanism, pathology, and operation of the failure.&#xA;This lack of understanding of how the accident occurred all but guarantees that it will repeat.&#xA;If not with the original engineer, another one in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Election Results 2018</title>
      <link>https://charltonaustin.com/posts/2018_12_10_election-results-2018/</link>
      <pubDate>Mon, 10 Dec 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_12_10_election-results-2018/</guid>
      <description>&lt;h2 id=&#34;election-2018&#34;&gt;Election 2018&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tuesdaycompany.com/&#34;&gt;The Tuesday Company&lt;/a&gt; had the honor to work on many races over the &lt;a href=&#34;https://www.tuesdaycompany.com/midterms/&#34;&gt;midterm elections&lt;/a&gt;.&#xA;The team worked incredibly hard and managed to help in over 118 different races.&#xA;We had a chance to scale our technology on a national level and managed to have no production issues despite having an large magnitude of increased traffic.&#xA;We also learned some valuable lessons about what it means for a team to grow; both in the number of developers and in the number of users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Load And Performance Testing With Flask</title>
      <link>https://charltonaustin.com/posts/2018_11_13_load-and-performance-testing-with-flask/</link>
      <pubDate>Tue, 13 Nov 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_11_13_load-and-performance-testing-with-flask/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;At my current gig, we&amp;rsquo;ve spent some time building out our initial product.&#xA;Things have been going well, and we have been growing.&#xA;These days we started to notice that some over our API endpoints weren&amp;rsquo;t as responsive as before.&#xA;We&amp;rsquo;ve also started to increase our number of users significantly.&#xA;To that end, it was time for us to start measuring our requests and fixing them if necessary.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hope Conference 2018</title>
      <link>https://charltonaustin.com/posts/2018_08_01_hope-conference-2018/</link>
      <pubDate>Wed, 01 Aug 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_08_01_hope-conference-2018/</guid>
      <description>&lt;h3 id=&#34;context&#34;&gt;Context&lt;/h3&gt;&#xA;&lt;p&gt;This weekend I had the joy of going to the &lt;a href=&#34;http://xii.hope.net/index.html&#34;&gt;Hope Conference&lt;/a&gt;.&#xA;I&amp;rsquo;ve been going to this conference for a few years and (as usual) I had a wonderful time.&#xA;Generally speaking, the conference is filled with people who love to create, take things apart, and are curious.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-good&#34;&gt;The Good&lt;/h3&gt;&#xA;&lt;p&gt;Some of the highlights of the conference included a talk on &lt;a href=&#34;https://www.hope.net/schedule.html#-spotlight-on-securedrop-anonymous-whistleblowing-in-the-trump-era-&#34;&gt;SecureDrop&lt;/a&gt;, &lt;a href=&#34;https://www.hope.net/schedule.html#-how-your-personal-information-is-obtained-and-exploited-to-manipulate-your-emotions-your-actions-and-your-vote-&#34;&gt;a talk&lt;/a&gt; by &lt;a href=&#34;https://www.hope.net/speakers.html#Steven%20Rambam&#34;&gt;Steven Rambam&lt;/a&gt; about privacy, and &lt;a href=&#34;https://www.hope.net/schedule.html#-we-must-legislate-to-block-collection-of-personal-data-&#34;&gt;a talk about legislation and privacy&lt;/a&gt; by &lt;a href=&#34;https://xii.hope.net/speakers.html#Richard%20Stallman&#34;&gt;Richard Stallman&lt;/a&gt;.&#xA;If you get a chance and are technically inclined I would suggest you watch some of the videos &lt;a href=&#34;https://www.youtube.com/user/Channel2600&#34;&gt;here&lt;/a&gt;.&#xA;They also have a bunch of older videos from previous conferences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Does It Mean To Write Ethical Code</title>
      <link>https://charltonaustin.com/posts/2018_07_09_what-does-it-mean-to-write-ethical-code/</link>
      <pubDate>Mon, 09 Jul 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_07_09_what-does-it-mean-to-write-ethical-code/</guid>
      <description>&lt;p&gt;Recently I read a report from the 2018 stack overflow survey, &lt;a href=&#34;https://insights.stackoverflow.com/survey/2018/?utm_source=Iterable&amp;amp;utm_medium=email&amp;amp;utm_campaign=dev-survey-2018-promotion&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From the survey:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Only tiny fractions of developers say that they would write unethical code or that they have no obligation to consider the ethical implications of code, but beyond that, respondents see a lot of ethical gray.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Given the recent &lt;a href=&#34;http://money.cnn.com/2018/03/26/technology/facebook-ftc-investigation/index.html&#34;&gt;investigation&lt;/a&gt; into Facebook.&#xA;I thought it might be prudent to do a little thinking and writing about what it means to write code ethically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developing Your Team</title>
      <link>https://charltonaustin.com/posts/2018_06_04_developing-your-team/</link>
      <pubDate>Mon, 04 Jun 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_06_04_developing-your-team/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;You want to encourage people on your team to be the best they can be.&lt;/p&gt;&#xA;&lt;h2 id=&#34;some-thoughts&#34;&gt;Some thoughts&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m a big reader.&#xA;So the first thing I did when I came across this problem was to start a search on Amazon.&#xA;Admittedly I only read a few books.&#xA;I&amp;rsquo;m no guru.&#xA;I don&amp;rsquo;t even think I&amp;rsquo;m that experienced.&#xA;But I do think I&amp;rsquo;ve found a few strategies that have worked so far.&#xA;I&amp;rsquo;ve also found some dead ends, therefore this blog post is as much for myself as for anyone else.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Branch By Abstraction</title>
      <link>https://charltonaustin.com/posts/2018_05_07_branch-by-abstraction/</link>
      <pubDate>Mon, 07 May 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_05_07_branch-by-abstraction/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;I want to write code that is consistently shared with the rest of the team, but I also want trunk based development.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-branch-by-abstraction&#34;&gt;What is branch by abstraction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/in/paulhammant/&#34;&gt;Paul Hammant&lt;/a&gt; a friend and mentor of mine,&#xA;has two great articles explaining branch by abstraction &lt;a href=&#34;https://trunkbaseddevelopment.com/branch-by-abstraction/&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://paulhammant.com/blog/branch_by_abstraction.html&#34;&gt;here&lt;/a&gt;.&#xA;The basic concept is pretty easy.&#xA;Instead of having long lived branches in your version control system, you simply create an abstraction that allows you to change the behavior with only a few minor changes.&#xA;As great as this concept is, there is one thing missing.  During any explanation, I find it difficult to give decent real world examples of branch by abstraction.&#xA;Usually there are a lot of diagrams and talk about concepts, but very few solid examples.&#xA;My team has been struggling with doing this in a coherent way, so here are some examples of what it might look like in the wild.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 008</title>
      <link>https://charltonaustin.com/posts/2018_04_02_euler-problem-008/</link>
      <pubDate>Mon, 02 Apr 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_04_02_euler-problem-008/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;73167176531330624919225119674426574742355349194934&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;96983520312774506326239578318016984801869478851843&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;85861560789112949495459501737958331952853208805511&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12540698747158523863050715693290963295227443043557&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;66896648950445244523161731856403098711121722383113&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;62229893423380308135336276614282806444486645238749&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;30358907296290491560440772390713810515859307960866&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;70172427121883998797908792274921901699720888093776&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;65727333001053367881220235421809751254540594752243&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;52584907711670556013604839586446706324415722155397&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;53697817977846174064955149290862569321978468622482&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;83972241375657056057490261407972968652414535100474&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;82166370484403199890008895243450658541227588666881&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;16427171479924442928230863465674813919123162824586&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;17866458359124566529476545682848912883142607690042&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;24219022671055626321111109370544217506941658960408&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;07198403850962455444362981230987879927244284909188&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;84580156166097919133875499200524063689912560717606&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;05886116467109405077541002256983155200055935729725&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;71636269561882670428252483600823257530420752963450&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?&lt;/p&gt;&#xA;&lt;h4 id=&#34;solution&#34;&gt;Solution&lt;/h4&gt;&#xA;&lt;p&gt;This guy is a pretty fun warm up for the day. A simple loop to walk over the numbers looking in all the possible directions (there are four). Going down and up are the same, going left and right are the same, forward-up is the same as going backward-down, and going forward-down is the same as going backward-up. Then as we traverse we simply keep track of the largest value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pomodoro On Os X Updated</title>
      <link>https://charltonaustin.com/posts/2018_03_29_pomodoro-on-os-x-updated/</link>
      <pubDate>Thu, 29 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_29_pomodoro-on-os-x-updated/</guid>
      <description>&lt;h3 id=&#34;pomodoro-expanded&#34;&gt;Pomodoro Expanded&lt;/h3&gt;&#xA;&lt;p&gt;Previously I had created &lt;a href=&#34;https://charltonaustin.com/2016/11/03/pomodoro-on-os-x&#34;&gt;a post&lt;/a&gt; where I talked about using the pomodoro technique on mac OSX.&#xA;Well today I want to show how I have expanded on my original idea.&#xA;First I created this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;#! /bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;at now + $1 minutes &amp;lt;&amp;lt;&amp;lt; $2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which is a small script to run a bash command at some time in the future.&#xA;Then I created this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x=&lt;span style=&#34;font-style:italic&#34;&gt;`&lt;/span&gt;/usr/bin/osascript &lt;span style=&#34;font-style:italic&#34;&gt;&amp;lt;&amp;lt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;tell application &amp;#34;Finder&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;    activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;    set myReply to text returned of (display dialog &amp;#34;Start 25 mins: Please put in task&amp;#34; default button 1 buttons {&amp;#34;OK&amp;#34;} default answer &amp;#34;&amp;#34; with icon 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;end tell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;EOT&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;Text is: &amp;#39;&lt;/span&gt;$x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;if&lt;/span&gt; [[ -z &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt;$x&lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;&lt;/span&gt; ]]; &lt;span style=&#34;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;Done for the day&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p $HOME/work&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  touch $HOME/work/daily_pomodoro.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;font-style:italic&#34;&gt;`&lt;/span&gt;date&lt;span style=&#34;font-style:italic&#34;&gt;`&lt;/span&gt; $x &amp;gt;&amp;gt; $HOME/work/daily_pomodoro.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  delayed_mac 25 five_min&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which is little script that takes a description of what I&amp;rsquo;m going to be doing for the next 25 mins and then logs that to a file with a time.&#xA;Finally I created this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 007</title>
      <link>https://charltonaustin.com/posts/2018_03_28_euler-problem-007/</link>
      <pubDate>Wed, 28 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_28_euler-problem-007/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.&lt;/p&gt;&#xA;&lt;p&gt;What is the 10001 prime number?&lt;/p&gt;&#xA;&lt;h4 id=&#34;solution&#34;&gt;Solution&lt;/h4&gt;&#xA;&lt;p&gt;Interestingly my first attempt was the good old Sieve of Eratosthenes.&#xA;However I kept getting an out of memory error from JavaScript.&#xA;I was using NPM 3.10.3 and would get a no free memory error after GC.&#xA;My next attempt included going piece by piece and only keeping in memory as many of the composite numbers as necessary and re walking the primes.&#xA;To remove the new composite numbers.&#xA;This worked much better.&#xA;The final solution runs at a very reasonable speed and has no memory issues.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pairing Vs Code Review</title>
      <link>https://charltonaustin.com/posts/2018_03_27_pairing-vs-code-review/</link>
      <pubDate>Tue, 27 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_27_pairing-vs-code-review/</guid>
      <description>&lt;h5 id=&#34;note-this-was-written-mostly-immediately-after-i-joined-coreos-and-then-updated-this-last-week&#34;&gt;Note This was written mostly immediately after I joined CoreOS and then updated this last week.&lt;/h5&gt;&#xA;&lt;p&gt;I recently started working at &lt;a href=&#34;https://coreos.com/&#34;&gt;CoreOS&lt;/a&gt; and one thing that they do there for every change of code is a code review.&#xA;I have never had code reviews before.&#xA;I&amp;rsquo;ve mostly worked in environments where I have paired directly with people.&#xA;So I wanted to do a quick review on the differences between the two methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Starting A Company</title>
      <link>https://charltonaustin.com/posts/2018_03_26_starting-a-company/</link>
      <pubDate>Mon, 26 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_26_starting-a-company/</guid>
      <description>&lt;h2 id=&#34;why-ive-been-missing-for-almost-a-year&#34;&gt;Why I&amp;rsquo;ve been missing for almost a year&lt;/h2&gt;&#xA;&lt;p&gt;In November 2016 some friends of mine were devastated by the Trump and Clinton presidential election.&#xA;No one had expected Trump to win, and the day after the election &lt;a href=&#34;https://www.linkedin.com/in/joshbuoy/&#34;&gt;Josh Bouy&lt;/a&gt; and &lt;a href=&#34;https://www.linkedin.com/in/birnholtz/&#34;&gt;Jordan Birnholtz&lt;/a&gt;&#xA;got together for breakfast in order to think about what they could do to impact future elections.&#xA;At that breakfast Jordan realized that he knew someone who was also passionate about the recent election.&#xA;They contacted &lt;a href=&#34;https://www.linkedin.com/in/michael-luciani-64564749/&#34;&gt;Michael Luciani&lt;/a&gt; who had been an organizer in the Hillary Clinton campaign.&#xA;Michael had some great ideas on how technology could be used to help bridge the gap between campaigns and volunteers, but the team had no idea how they would execute this idea.&#xA;So they reached out Michael&amp;rsquo;s good friend &lt;a href=&#34;https://www.linkedin.com/in/sholafarber/&#34;&gt;Shola Farber&lt;/a&gt;.&#xA;Shola had also worked on the Clinton campaign and she knew how to keep things organized.&#xA;What the team needed now was a way to actually create the technology.&#xA;For better or for worse, Shola flew to NYC with Michael in tow and they reached out to me.&#xA;That’s when our team really began in ernest.&#xA;I spent the evenings and weekends of the next few months building a prototype of the software.&#xA;It was interesting, fun, and exciting to be working on something that I really cared about.&#xA;Building technology that would help people engage in the democratic process invigorated me in a way that my previous jobs hadn&amp;rsquo;t.&#xA;I love technology and for me often the best part of a job is trying to work with new technology or to manipulate technology in a novel way.&#xA;The first couple of months were extremely hard.&#xA;I worked every weekend and every evening often to the point of exhaustion and until I couldn&amp;rsquo;t work any more.&#xA;It wasn&amp;rsquo;t a healthy or sustainable pace, but it was the what I had to do to get things started.&#xA;Our first test was a very lo-fi experiment in Chicago for the 4th Ward.&#xA;It went well and we believed that continuing our proof of concept made sense.&#xA;At this point we got a few paid interns from &lt;a href=&#34;https://www.uchicago.edu/&#34;&gt;UChicago&lt;/a&gt; and &lt;a href=&#34;https://www.umich.edu/&#34;&gt;UofM&lt;/a&gt;.&#xA;We were very fortunate to have these two incredibly talented budding software engineers &lt;a href=&#34;https://www.linkedin.com/in/steven-schmatz/&#34;&gt;Steven Schmatz&lt;/a&gt; and &lt;a href=&#34;https://www.linkedin.com/in/abigail-hunter/&#34;&gt;Abi Hunter&lt;/a&gt;.&#xA;We began to build our first product the &lt;a href=&#34;https://www.tuesdaycompany.com/team-app/&#34;&gt;Team App&lt;/a&gt; and the &lt;a href=&#34;https://www.tuesdaycompany.com/team-dashboard/&#34;&gt;Team Dashboard&lt;/a&gt;.&#xA;It was rocky and we did it in a truly minimum viable product style.&#xA;We had only interns, almost no budget, and myself who could work only on nights and weekends.&#xA;We built only what was absolutely necessary for our first client and started to iterate on their feedback.&#xA;At the same time the Tuesday Company applied to be a part of the &lt;a href=&#34;https://www.highergroundlabs.com/accelerator-companies&#34;&gt;Higher Ground Labs&lt;/a&gt; accelerator program.&#xA;It was at this point that we could see things really starting to take off.&#xA;It has been nothing but a whirlwind since.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 006</title>
      <link>https://charltonaustin.com/posts/2018_03_23_euler-problem-006/</link>
      <pubDate>Fri, 23 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_23_euler-problem-006/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;The sum of the squares of the first ten natural numbers is,&lt;/p&gt;&#xA;&lt;p&gt;1^2 + 2^2 + &amp;hellip; + 10^2 = 385 The square of the sum of the first ten natural numbers is,&lt;/p&gt;&#xA;&lt;p&gt;(1 + 2 + &amp;hellip; + 10)^2 = 552 = 3025 Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 005</title>
      <link>https://charltonaustin.com/posts/2018_03_22_euler-problem-005/</link>
      <pubDate>Thu, 22 Mar 2018 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2018_03_22_euler-problem-005/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.&lt;/p&gt;&#xA;&lt;p&gt;What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?&lt;/p&gt;&#xA;&lt;h3 id=&#34;solution&#34;&gt;Solution&lt;/h3&gt;&#xA;&lt;p&gt;Now this guy is a higher order, functional dream. I first create a function that returns a function to see if a number is divisible by another number. Then I create a function that uses that creator to create a function that checks that a number is divisible by every number in the range 1 to that number inclusive. Finally I have a function that starts out skipping by the largest number in the range looking for the smallest number is divisible by every number in that range. The solution looks something like below. There are still a few optimizations that we could make. First we could simply check that the first number is an integer. This would mean we could start our range from two. Second we could remove all redundant numbers if we wanted. For instance if the number is divisible by 20 then it is all divisible by 2, 5, and 10. So we could remove those numbers. However the solution runs fast enough in my browser so I stopped where I was.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Quay With Multiple Dockerfiles</title>
      <link>https://charltonaustin.com/posts/2017_04_08_using-quay-with-multiple-dockerfiles/</link>
      <pubDate>Sat, 08 Apr 2017 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2017_04_08_using-quay-with-multiple-dockerfiles/</guid>
      <description>&lt;h1 id=&#34;the-problem&#34;&gt;The problem&lt;/h1&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s say you have the following folder layout:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app1/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;shared-infra-resources/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;continuous-integration/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      app1/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                          app1.Dockerfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      app2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                          app2.Dockerfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you would like to build app1.Dockerfile and app2.Dockerfile in your Docker registry.&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-solution&#34;&gt;The Solution&lt;/h1&gt;&#xA;&lt;p&gt;If you are using &lt;a href=&#34;https://hub.docker.com&#34;&gt;DockerHub&lt;/a&gt;.&#xA;Then you already can&amp;rsquo;t.&#xA;DockerHub doesn&amp;rsquo;t allow you to specify a context separate from your Dockerfile location.&#xA;At least they did not as of April 8, 2017.&#xA;So you can&amp;rsquo;t specify use the continuous-integration/app2/app2.Dockerfile as the Dockerfile location and the root as the context.&#xA;However, if you are using &lt;a href=&#34;https://quay.io&#34;&gt;Quay&lt;/a&gt; then you are off to a good start.&#xA;Quay has a built in build system that you can use to build your repository.&#xA;In the UI you can either upload a dockerfile or an archive and it will build it.&#xA;Via the &lt;a href=&#34;https://docs.quay.io/api/&#34;&gt;API&lt;/a&gt; you can do something very similar, you can request a build on behalf of an organization or a user by sending a post request to &lt;a href=&#34;https://quay.io/v1/repository/&#34;&gt;https://quay.io/v1/repository/&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;/&lt;!-- raw HTML omitted --&gt;/build/ .&#xA;If you look at the &lt;a href=&#34;http://docs.quay.io/api/swagger/&#34;&gt;swagger docs&lt;/a&gt; you will see you can pass in an archive url, a context, a dockerfile path, and some docker tags.&#xA;The archive url is simply a url where you can download your build files.&#xA;The context is the folder in your buildfile that the docker build will be executed from.&#xA;The dockerfile path is the location and name of the dockerfile.&#xA;Finally docker tags are arbitrary tag names that can be used to identify your build, version, or whatever other metadata you might want associated with your docker image.&#xA;The request might look something like this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 004</title>
      <link>https://charltonaustin.com/posts/2017_03_27_euler-problem-004/</link>
      <pubDate>Mon, 27 Mar 2017 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2017_03_27_euler-problem-004/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.&lt;/p&gt;&#xA;&lt;p&gt;Find the largest palindrome made from the product of two 3-digit numbers.&lt;/p&gt;&#xA;&lt;h6 id=&#34;solution&#34;&gt;Solution&lt;/h6&gt;&#xA;&lt;p&gt;Now this guy is your daily warm up kind of easy. I created two functions. The first one simply checks a number to see if it is a palindrome. The second one accepts a number finds the largest multiplication combination that is a palindrome. Now I didn&amp;rsquo;t have to go all the way to zero, but since we are looking for the largest it should work for any number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 003</title>
      <link>https://charltonaustin.com/posts/2017_03_18_euler-problem-003/</link>
      <pubDate>Sat, 18 Mar 2017 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2017_03_18_euler-problem-003/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;The prime factors of 13195 are 5, 7, 13 and 29.&lt;/p&gt;&#xA;&lt;p&gt;What is the largest prime factor of the number 600851475143 ?&lt;/p&gt;&#xA;&lt;h6 id=&#34;solution&#34;&gt;Solution&lt;/h6&gt;&#xA;&lt;p&gt;This one took a bit longer than I expected. My fist attempt was pretty naive. The idea was generate all the primes less than the number and then check if the number is divisible by the prime. At the end we simple return the largest prime number that divides the number evenly. This works up until we get to 600851475143. Then we start getting out of memory errors and it takes too long. The first attempt looks like this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 002</title>
      <link>https://charltonaustin.com/posts/2017_03_17_euler-problem-002/</link>
      <pubDate>Fri, 17 Mar 2017 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2017_03_17_euler-problem-002/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Each new term in the Fibonacci sequence is generated&#xA;by adding the previous two terms. By starting with 1 and 2,&#xA;the first 10 terms will be:&lt;/p&gt;&#xA;&lt;p&gt;1, 2, 3, 5, 8, 13, 21, 34, 55, 89, &amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;By considering the terms in the Fibonacci sequence&#xA;whose values do not exceed four million, find&#xA;the sum of the even-valued terms.&lt;/p&gt;&#xA;&lt;h6 id=&#34;solution&#34;&gt;Solution&lt;/h6&gt;&#xA;&lt;p&gt;This is a pretty straight forward problem. We generate the the Fibonacci number and as we go we can check if it isEven keeping track of the sum. Note we don&amp;rsquo;t actually have to check if the number is even. An odd integer plus an odd integer is even. So every third term we have an even integer. Which means we could just keep track of the count and add only the even integers, but the solution that is presented here goes fast enough that I didn&amp;rsquo;t really bother with it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Euler Problem 001</title>
      <link>https://charltonaustin.com/posts/2017_03_13_euler-problem-001/</link>
      <pubDate>Mon, 13 Mar 2017 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2017_03_13_euler-problem-001/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.&lt;/p&gt;&#xA;&lt;p&gt;Find the sum of all the multiples of 3 or 5 below 1000.&lt;/p&gt;&#xA;&lt;h3 id=&#34;solution&#34;&gt;Solution&lt;/h3&gt;&#xA;&lt;p&gt;The first algorithm is super straightforward. We want to simply loop over each number between the start and the end checking if the number is a multiple of 3 or 5 and then adding that to the sum. Now this is going to O(n). It isn&amp;rsquo;t bad at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pomodoro On Os X</title>
      <link>https://charltonaustin.com/posts/2016_11_03_pomodoro-on-os-x/</link>
      <pubDate>Thu, 03 Nov 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_11_03_pomodoro-on-os-x/</guid>
      <description>&lt;h3 id=&#34;pomodoro&#34;&gt;Pomodoro&lt;/h3&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t ever used the &lt;a href=&#34;http://pomodorotechnique.com/&#34;&gt;pomodoro technique&lt;/a&gt; then you are missing out.&#xA;It is a great way to stay focused on one task at a time.&#xA;It is also a good way to get yourself moving regularly.&#xA;There is just one thing I don&amp;rsquo;t like about it.&#xA;In order to have a good timer you usually have to have something that bothers your neighbor at work.&#xA;For a while I was using my phone timer which worked okay, but I&amp;rsquo;m pretty sure my work mates hated me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Review Of Test Driven Development With Go</title>
      <link>https://charltonaustin.com/posts/2016_09_12_a-review-of-test-driven-development-with-go/</link>
      <pubDate>Mon, 12 Sep 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_09_12_a-review-of-test-driven-development-with-go/</guid>
      <description>&lt;p&gt;In a &lt;a href=&#34;2016/09/02/a-review-of-an-introduction-to-programming-in-go.md&#34;&gt;previous blog entry&lt;/a&gt; I talk about my recent technical challenge with &lt;a href=&#34;https://coreos.com/&#34;&gt;CoreOS&lt;/a&gt;.&#xA;I enjoyed my interview there so much that I started doing some reading about Go.&#xA;Here&amp;rsquo;s a second book that I read that I would like to write a review about.&#xA;It&amp;rsquo;s called &lt;a href=&#34;https://leanpub.com/golang-tdd/read&#34;&gt;&lt;em&gt;Test-Driven Development With Go&lt;/em&gt;&lt;/a&gt; written by Yigal Duppen.&#xA;You can find it on leanpub and it costs $0-14.99.&#xA;I was tempted when I came across it to pay for it, but I thought maybe I&amp;rsquo;ll give it a read before I pay the author (authors have to eat too).&#xA;I&amp;rsquo;m glad I made that decision.&#xA;The content in the book is very good, but the book is far from complete.&#xA;On the bottom of the Leanpub page it says that it has been updated over two years ago and that it is only 10% finished.&#xA;This was not particularly evident to me when I was first deciding to buy it.&#xA;The author stops at Ch. 4 obviously not finished.&#xA;I think the author was on track to write a book as good as &lt;a href=&#34;https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530&#34;&gt;&lt;em&gt;Test Driven Development: By Example&lt;/em&gt;&lt;/a&gt; by Kent Beck.&#xA;The first chapters do a great job of explaining how test driven development works, and how to implement it in Go.&#xA;The example is clear and the step by step process is well done.&#xA;If the author had finished it I would have actually gone back and paid more for the book then the suggested price.&#xA;As it stands now I wish I knew Go well enough that I could go and finish it for him because someone should.&#xA;In summary you should definitely download it if you are looking for a very brief intro to test driven development in Go, but I wouldn&amp;rsquo;t pay the full suggested amount.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating A Web Api With Golang</title>
      <link>https://charltonaustin.com/posts/2016_09_10_creating-a-web-api-with-golang/</link>
      <pubDate>Sat, 10 Sep 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_09_10_creating-a-web-api-with-golang/</guid>
      <description>&lt;p&gt;I had a chance for the first time in a while to write some Go.&#xA;I was writing a simple web API that allowed a user to login with JWT.&#xA;This blog post is going to be about some of the challenges I faced along the way.&#xA;I also want to give some shout outs to other blogs that helped me get it written.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-ide&#34;&gt;The IDE&lt;/h3&gt;&#xA;&lt;p&gt;First let&amp;rsquo;s start with the IDE.&#xA;Golang has a great page with all the IDEs that it uses &lt;a href=&#34;https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins&#34;&gt;here&lt;/a&gt;.&#xA;I choose &lt;a href=&#34;https://github.com/visualfc/liteide&#34;&gt;LiteIDE&lt;/a&gt; because I remembered using it before and it being full featured as well as simple.&#xA;I can not stress how refreshing it&amp;rsquo;s simplicity is.&#xA;I could run tests, compile, and do most things pretty much with push button out of the box.&#xA;And to boot it is all open source and cross platform compatible.&#xA;Considering my experiences recently with trying to find a good IDE for JavaScript with built in debugging and test running capabilities this invigorated me.&#xA;The one thing that I wished happened better was documentation, code navigation, and code completion.&#xA;Anyone that has used IntelliJ for Java can attest to how powerful the tooling can be in Java.&#xA;Golang is a strongly typed language with great documentation.&#xA;I can only imagine that Google has some incredible tools for dealing with with these problems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Review Of An Introduction To Programming In Go</title>
      <link>https://charltonaustin.com/posts/2016_09_02_a-review-of-an-introduction-to-programming-in-go/</link>
      <pubDate>Fri, 02 Sep 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_09_02_a-review-of-an-introduction-to-programming-in-go/</guid>
      <description>&lt;p&gt;Recently I had a chance to write some &lt;a href=&#34;https://golang.org/&#34;&gt;Go&lt;/a&gt; code for the first time in a few years as part of the interview process at &lt;a href=&#34;https://coreos.com/&#34;&gt;CoreOS&lt;/a&gt;.&#xA;The challenge was actually really fun, but so as not to ruin surprise I won&amp;rsquo;t be talking about what I did during the challenge.&#xA;Suffice it to say that I had a great experience, and whether or not I get the job at CoreOS I definitely enjoyed the interview process.&#xA;That said I had such a good time with Go I decided to go looking for a book about it.&#xA;I found it kind of difficult to find reviews of any of the books so I decided to read a few, and after I was done I thought why not write about it.&#xA;So this blog post is going to be a review of &lt;a href=&#34;https://www.golang-book.com/books/intro&#34;&gt;An Introduction to Programming in Go&lt;/a&gt; by Caleb Doxsey.&#xA;The book is interesting.&#xA;Chapters 1-5 are for true beginners.&#xA;You should only really read them if you have never programmed in your life before.&#xA;They are the standard how to do you do the basics of programming.&#xA;Interestingly I don&amp;rsquo;t think I would suggest this part of the book for beginners.&#xA;Go requires a bit of a set up and it&amp;rsquo;s a compiled language.&#xA;If you are really beginning I would suggest using the Go interactive walk through or JavaScript, that way you can focus on just learning the very first steps of programming.&#xA;After chapter 5 though things get a bit more interesting.&#xA;The books covers more Go specific functionality.&#xA;If you don&amp;rsquo;t have time or an internet connection this is the perfect way to quickly digest a brief overview of the language features and gently introduce the reader to Go idioms.&#xA;In particular I like the section on next steps.&#xA;The author points out that you should read the source code to understand the &amp;ldquo;masters&amp;rdquo; in order to get better.&#xA;He also makes the valid point that most nontrivial software is made by teams so learning to be a team player is also important.&#xA;So while this book is definitely not for Go experts it is worth the quick read if you are just looking to get a brief overview of Go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Showcases And Why We Need Them</title>
      <link>https://charltonaustin.com/posts/2016_08_27_showcases-and-why-we-need-them/</link>
      <pubDate>Sat, 27 Aug 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_08_27_showcases-and-why-we-need-them/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;So my students are mostly awesome.&#xA;We have come a long way.&#xA;When we started most of them had not written any JavaScript.&#xA;In the last few weeks they have been working on their final projects&#xA;You can see them &lt;a href=&#34;https://github.com/aesTechx/special-ed&#34;&gt;here&lt;/a&gt;, &lt;a href=&#34;https://github.com/tech-crunch/lets-hangout&#34;&gt;here&lt;/a&gt;, &lt;a href=&#34;https://github.com/StirTech/TeamUp&#34;&gt;here&lt;/a&gt;, and &lt;a href=&#34;https://github.com/Sportitsu/Zarad&#34;&gt;here&lt;/a&gt;.&#xA;One thing that they haven&amp;rsquo;t had a lot of experience with is how to put a whole project together.&#xA;So we broke them into team and they are coming up with their own product to show future employers.&#xA;It has been great except for one thing.&#xA;They have been having trouble prioritizing and getting out features at a regular pace.&#xA;In Dan Ariely&amp;rsquo;s book Predictably Irrational he speaks of setting short term deadlines in order to motivate people.&#xA;So I came up with a plan to help the class along.&#xA;I proposed that we have the students do showcases every few days.&#xA;They are expected to have a feature or two in their production environment for each of the showcases (one happens on Sunday and the other on Thursday).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leaders In An Array In Clojure Basic Algorithms Part Four</title>
      <link>https://charltonaustin.com/posts/2016_08_17_leaders-in-an-array-in-clojure-basic-algorithms-part-four/</link>
      <pubDate>Wed, 17 Aug 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_08_17_leaders-in-an-array-in-clojure-basic-algorithms-part-four/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Given an array of integers, print the leaders in the array. A leader is an element which is larger than all the elements in the array to its right.&lt;/p&gt;&#xA;&lt;h3 id=&#34;solution&#34;&gt;Solution&lt;/h3&gt;&#xA;&lt;p&gt;Is was my first attempt at coming up with a solution. Naturally I used recursion and simply walked down the array seeing if every element after it was the same.&lt;/p&gt;&#xA;&lt;p&gt;The time complexity of this is O( n^2 ) which isn&amp;rsquo;t great.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving From Blogger To Clojure</title>
      <link>https://charltonaustin.com/posts/2016_08_09_moving-from-blogger-to-clojure/</link>
      <pubDate>Tue, 09 Aug 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_08_09_moving-from-blogger-to-clojure/</guid>
      <description>&lt;p&gt;Recently I had a problem with &lt;a href=&#34;http://charltonaustin.blogspot.com/&#34;&gt;my old blog&lt;/a&gt; where writing new blog posts would be buggy. Things like code formatting wouldn&amp;rsquo;t be consistent and so I moved to images of code. Which is so silly considering that it is just text. I&amp;rsquo;ve always had a bit of a problem with blogspot. I disliked the lack of control over how things are displayed and served up content. I knew that I wanted to move to HTTPS and that I was tired of working within the confines of WYSIWYG editors. So I took the plunge and decided to create a new clojure app and bought some hosting on &lt;a href=&#34;https://www.digitalocean.com/&#34;&gt;Digital Ocean&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Importance Of Toy Problems</title>
      <link>https://charltonaustin.com/posts/2016_08_06_the-importance-of-toy-problems/</link>
      <pubDate>Sat, 06 Aug 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_08_06_the-importance-of-toy-problems/</guid>
      <description>&lt;p&gt;As a software engineer I find that I rarely get to practice the fundamentals of computer science. I also rarely get a chance to practice the kinds of problems at work. At the school that I&amp;rsquo;m currently teaching one thing that the students have been doing every day is called &amp;rsquo;toy problems&amp;rsquo;. Toy problems are a pretty straight forward concept. They are problems that should make you think a bit, shouldn&amp;rsquo;t take too long, and let you exercise your programming muscles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Binary Search Of Sorted Array In Clojure Basic Algorithms Part Three</title>
      <link>https://charltonaustin.com/posts/2016_08_03_binary-search-of-sorted-array-in-clojure-basic-algorithms-part-three/</link>
      <pubDate>Wed, 03 Aug 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_08_03_binary-search-of-sorted-array-in-clojure-basic-algorithms-part-three/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Find an element in a sorted array using  binary search&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-solution&#34;&gt;The solution&lt;/h3&gt;&#xA;&lt;p&gt;The solution is pretty straight forward. I added in some printlns to get a sense of how we drill down in the recursion to find the element.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-clojure&#34; data-lang=&#34;clojure&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;font-weight:bold&#34;&gt;defn &lt;/span&gt;binary-search [v value]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;font-weight:bold&#34;&gt;loop &lt;/span&gt;[low 0 high (dec (count v))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         depth 0]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;font-weight:bold&#34;&gt;let &lt;/span&gt;[half-way (quot (+ high low)  2)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;font-weight:bold&#34;&gt;do &lt;/span&gt;(println (str &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;half-way is &amp;#34;&lt;/span&gt; half-way))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (println (str &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;low is &amp;#34;&lt;/span&gt; low))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (println (str &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;high is &amp;#34;&lt;/span&gt; high))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (println (str &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#34;depth is &amp;#34;&lt;/span&gt; depth))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (&lt;span style=&#34;font-weight:bold&#34;&gt;if &lt;/span&gt;(&amp;lt;= high (inc low))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (cond (= value (v low)) low&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (= value (v high)) high&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;font-style:italic&#34;&gt;:else&lt;/span&gt; nil)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (&lt;span style=&#34;font-weight:bold&#34;&gt;let &lt;/span&gt;[middle (quot (+ low high) 2)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (&lt;span style=&#34;font-weight:bold&#34;&gt;if &lt;/span&gt;(&amp;lt; (v middle) value)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (recur (inc middle) high (inc depth))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (recur low middle (inc depth)))))))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can call the function like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Permutations Of A String In Clojure Basic Algorithms Part Two</title>
      <link>https://charltonaustin.com/posts/2016_07_27_permutations-of-a-string-in-clojure-basic-algorithms-part-two/</link>
      <pubDate>Wed, 27 Jul 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_07_27_permutations-of-a-string-in-clojure-basic-algorithms-part-two/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;Find all permutations of a string&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-solution&#34;&gt;The solution&lt;/h3&gt;&#xA;&lt;p&gt;My first solution is comes from Java and is a recursive solution.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-clojure&#34; data-lang=&#34;clojure&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;font-weight:bold&#34;&gt;defn- &lt;/span&gt;perms [pre v]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;font-weight:bold&#34;&gt;let &lt;/span&gt;[n (count v)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;font-weight:bold&#34;&gt;if &lt;/span&gt;(zero? n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      nil      &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;font-weight:bold&#34;&gt;loop &lt;/span&gt;[i 0]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;font-weight:bold&#34;&gt;if &lt;/span&gt;(&amp;lt; i n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (&lt;span style=&#34;font-weight:bold&#34;&gt;do &lt;/span&gt;(perms (conj pre (nth v i))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (into [] (concat(first (split-at i v))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              (second (split-at (inc i) v)))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (recur (inc i)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          nil)))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It has some problems. It is recursive so vulnerable to stack overflow errors, but more than that it is pretty slow and not very idiomatic Clojure. So I went in search of a better more idiomatic implementation of this problem and I found this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Counting Frequencies Of Elements In An Array In Clojure Basic Algorithms Part One</title>
      <link>https://charltonaustin.com/posts/2016_07_20_counting-frequencies-of-elements-in-an-array-in-clojure-basic-algorithms-part-one/</link>
      <pubDate>Wed, 20 Jul 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_07_20_counting-frequencies-of-elements-in-an-array-in-clojure-basic-algorithms-part-one/</guid>
      <description>&lt;p&gt;So I&amp;rsquo;m not a CS guy. I went to school for math and I became a programmer pretty late. I also never had the obligatory algorithms class. So I&amp;rsquo;m going to start a series where I explore some algorithms coding problems.&#xA;The problem&lt;/p&gt;&#xA;&lt;p&gt;So the coding challenge is given an array with N numbers m such that m &amp;lt; N and m is a natural number count the occurrences of m.&#xA;Solution&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quitting Finance And Trying To Give Back</title>
      <link>https://charltonaustin.com/posts/2016_05_10_quitting-finance-and-trying-to-give-back/</link>
      <pubDate>Tue, 10 May 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_05_10_quitting-finance-and-trying-to-give-back/</guid>
      <description>&lt;p&gt;I took a leap this week and quit my job at HedgeServ to work for a non-profit called RBK. I moved (May 2016) to Jordan to help teach Syrian refugees how to write software. It&amp;rsquo;s a bit of a scary plan. I packed all of my stuff up, put it in storage and to take a short break from American corporate career business. The last time I made a decision like this was when I was 17 and full of craziness and I decided to join the military.  I wanted to get out of Texas and wasn&amp;rsquo;t ready to go to college. Being a bit older now, there is much less worry. I don&amp;rsquo;t have the butterflies that come with doing something unexpected and possibly life changing (at least not yet). There are some things that keep me up. What are people going to think about my leaving a company so shortly after joining it? HedgeServ has been very nice. I have promised I will contact them when I get back if I need work. It was hard to tell my mentor and friend Paul Hammant that I wanted to leave. But, such a good opportunity to use my skills to help those with the least rarely comes along and I couldn&amp;rsquo;t pass it up. Maybe this will be the start of a new adventure. Maybe I&amp;rsquo;ll fall in love with Jordan, or the company, or find meaning in helping people and can do this long term. For the time being the first session is only until August so I plan (at least for now) to return to NYC when I&amp;rsquo;m done. Hopefully I&amp;rsquo;ll have some cool blog posts about the what I get to teach while I&amp;rsquo;m there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top Down Vs Bottom Up Api Design In Clojure Part One</title>
      <link>https://charltonaustin.com/posts/2016_04_26_top-down-vs-bottom-up-api-design-in-clojure-part-one/</link>
      <pubDate>Tue, 26 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_26_top-down-vs-bottom-up-api-design-in-clojure-part-one/</guid>
      <description>&lt;h3 id=&#34;recently-in-my-last-post&#34;&gt;Recently in my last post&amp;hellip;&lt;/h3&gt;&#xA;&lt;p&gt;Recently I posted about the difference between &lt;a href=&#34;http://www.charltonaustin.com/2016/04/top-down-vs-bottom-up-api-design-in.html&#34;&gt;top down vs bottom up&lt;/a&gt; design in Clojure, if you haven&amp;rsquo;t read it then you should. This post is the second part about the differences in both code quality and experience between tope down and bottom up approaches.  You can see the commits &lt;a href=&#34;https://github.com/charltonaustin/inside_out_ouside_in/commits&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;first-impressions&#34;&gt;First impressions&lt;/h3&gt;&#xA;&lt;p&gt;It took me 14 functions using the outside-in method vs 15 functions with the inside-out method. But the number of functions doesn&amp;rsquo;t really matter. What&amp;rsquo;s more interesting maybe is the number of characters. It was 2043 for inside-out and 2122 outside-in (without white space). They were pretty close; there wasn&amp;rsquo;t much of a difference; and counting characters isn&amp;rsquo;t all that important (though my usual philosophy is &amp;rsquo;less is better&amp;rsquo;).  What about readability? Well my opinion is outside-in is marginally better. The main loop is less convoluted. Perhaps because I don&amp;rsquo;t do any stupid exit business.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clojure Sieve Of Eratosthenes</title>
      <link>https://charltonaustin.com/posts/2016_04_24_clojure-sieve-of-eratosthenes/</link>
      <pubDate>Sun, 24 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_24_clojure-sieve-of-eratosthenes/</guid>
      <description>&lt;p&gt;I was recently watching a video on Haskell that was showing how you would write a functional form of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes&#34;&gt;Sieve of Eratosthenes&lt;/a&gt;. I personally love this algorithm and was interested in what it looked like in Clojure. So I wrote this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-clojure&#34; data-lang=&#34;clojure&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;font-weight:bold&#34;&gt;defn &lt;/span&gt;sieve [number xs]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;font-weight:bold&#34;&gt;if &lt;/span&gt;(= 0 number)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    xs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (conj (sieve (dec number)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (filter #(not= 0 (mod % (first xs))) (rest xs)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (first xs))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This works, but Clojure doesn&amp;rsquo;t have tail call optimization (TCO) by default which means you can get a stack StackOverflowError. So I decided to rewrite it to use the loop and recur construct to remove the StackOverflowError. It looks like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Count Down Problem</title>
      <link>https://charltonaustin.com/posts/2016_04_20_the-count-down-problem/</link>
      <pubDate>Wed, 20 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_20_the-count-down-problem/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve been watching a wonderful &lt;a href=&#34;https://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1&#34;&gt;set of videos&lt;/a&gt; about Haskell during my lunch break. If you are interested in Haskell and functional programming I would definitely recommend the videos.&lt;/p&gt;&#xA;&lt;p&gt;I found lecture 11 particularly interesting because of a paper that was written about the content &lt;a href=&#34;http://www.cs.nott.ac.uk/~pszgmh/countdown.pdf&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The paper is interesting because it shows how you can write a proof for an implementation of a problem in Haskell, then create transformations that speed up that implementation and prove that those transformations are also correct.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top Down Vs Bottom Up Api Design In Clojure Part Zero</title>
      <link>https://charltonaustin.com/posts/2016_04_20_top-down-vs-bottom-up-api-design-in-clojure-part-zero/</link>
      <pubDate>Wed, 20 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_20_top-down-vs-bottom-up-api-design-in-clojure-part-zero/</guid>
      <description>&lt;h3 id=&#34;intro&#34;&gt;Intro&lt;/h3&gt;&#xA;&lt;p&gt;I saw a lot of presentations at &lt;a href=&#34;http://clojure-conj.org/&#34;&gt;Clojure/conj&lt;/a&gt; 2015. Most of them were really great, but one of them I was particularly interested in seeing didn&amp;rsquo;t really do it for me. It was called &lt;a href=&#34;https://www.youtube.com/watch?v=Tb823aqgX_0&amp;amp;index=13&amp;amp;list=PLZdCLR02grLrl5ie970A24kvti21hGiOf&#34;&gt;Bottom Up vs Top Down Design&lt;/a&gt; in Clojure by &lt;a href=&#34;https://github.com/markbastian&#34;&gt;Mark Bastian&lt;/a&gt;.  I thought his presentation was interesting, but it failed to touch on a couple of points that I was interested in. In an effort to learn a bit, I figured I would write post about what I was hoping the talk would actually address.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unit Testing With Higher Order Functions</title>
      <link>https://charltonaustin.com/posts/2016_04_13_unit-testing-with-higher-order-functions/</link>
      <pubDate>Wed, 13 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_13_unit-testing-with-higher-order-functions/</guid>
      <description>&lt;p&gt;Recently I was writing an interesting bit of Python software that had a couple of layers. There were some high level objects that dealt with some domain logic and then some lower level objects that did more of the nitty gritty interactions with the operating system. When I first started thinking about writing the lower level interface, I was a little afraid that writing the unit tests was going to be difficult. Wrapping up Sys.out or other IO operations in Java is a standard practice. In the past I have had some trouble patching Python modules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Does Unit Testing Make Me Slower</title>
      <link>https://charltonaustin.com/posts/2016_04_12_does-unit-testing-make-me-slower/</link>
      <pubDate>Tue, 12 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_12_does-unit-testing-make-me-slower/</guid>
      <description>&lt;h3 id=&#34;say-what&#34;&gt;Say What?&lt;/h3&gt;&#xA;&lt;p&gt;Recently I asked a coworker if a new application we were working to get into production had unit tests. His response was interesting. He said, &amp;ldquo;No, but it&amp;rsquo;s too early to have unit tests. The code hasn&amp;rsquo;t really settled and unit tests slow you down.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;My initial reaction in my head was &amp;ldquo;Whoa that&amp;rsquo;s silly&amp;rdquo;. But after some consideration and thinking about how code can be written, I&amp;rsquo;m beginning to see his point. Not the point that we shouldn&amp;rsquo;t write unit tests, rather that the way many people write unit tests can make writing code more slow.  Unit tests do slow you down some, but the rewards of being able to refactor implementations and know that your code is doing what you think it is doing makes up for any extra time you may sink into them. The sooner you can flush out bugs in the development process, the cheaper it is to fix them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing Distributed Test Reduction</title>
      <link>https://charltonaustin.com/posts/2016_04_07_writing-distributed-test-reduction/</link>
      <pubDate>Thu, 07 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_07_writing-distributed-test-reduction/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;&#xA;&lt;p&gt;I recently joined &lt;a href=&#34;https://www.hedgeserv.com/restricted/get/index.html&#34;&gt;HedgeServ&lt;/a&gt; a fintech company and one of my first tasks at the new job has been dealing with how long it takes tests to run. The company has some great end to end test coverage, but the testing time can be rather long (think hours).&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-solution&#34;&gt;The solution&lt;/h3&gt;&#xA;&lt;p&gt;Paul Hammant, my mentor of sorts wrote a &lt;a href=&#34;http://paulhammant.com/2015/01/11/reducing-test-times-by-only-running-impacted-tests/&#34;&gt;blog post&lt;/a&gt; about only running tests that actually need to be run when you change a source code set. So my job was to implement a solution that took a set of source files that were touched and only run required tests. This would mean that developers can run only tests that are affected by their source code changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Source Code Gems</title>
      <link>https://charltonaustin.com/posts/2016_04_04_python-source-code-gems/</link>
      <pubDate>Mon, 04 Apr 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_04_04_python-source-code-gems/</guid>
      <description>&lt;p&gt;So fairly regularly I read about and dip into the python source code. For some reason there seems to be a great deal of beautiful and interesting code in both the c and the standard libraries and tests for python. The other day I was doing some reading about &lt;a href=&#34;https://docs.python.org/2/howto/functional.html#passing-values-into-a-generator&#34;&gt;generators&lt;/a&gt; (I was thinking about how to marry the ideas of functional and object oriented programming) and I came across something that I found fascinating as well beautiful so I decided I should share it here on this silly little blog. It&amp;rsquo;s a full implementation of a generator built &lt;a href=&#34;https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes&#34;&gt;Sieve of Eratosthenes&lt;/a&gt; in test_generators.py.   If you are writing python and you aren&amp;rsquo;t using generators regularly then you are probably missing something.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Expression Problem</title>
      <link>https://charltonaustin.com/posts/2016_03_03_the-expression-problem/</link>
      <pubDate>Thu, 03 Mar 2016 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2016_03_03_the-expression-problem/</guid>
      <description>&lt;h3 id=&#34;what-is-the-expression-problem&#34;&gt;What is the expression problem?&lt;/h3&gt;&#xA;&lt;p&gt;The expression problem is the idea that it is easy to add new functions for simple data types without changing the data types, while it is hard to add data types without changing all the functions. At the same time it is easy to add data types with objects (complex data types), while it is hard to add functions without changing all the objects.&lt;/p&gt;&#xA;&lt;p&gt;Some great descriptions of this include chapter 6 of &lt;a href=&#34;https://sites.google.com/site/unclebobconsultingllc/&#34;&gt;Uncle Bob&amp;rsquo;s&lt;/a&gt; book &lt;a href=&#34;http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882&#34;&gt;Clean Code&lt;/a&gt;. He doesn&amp;rsquo;t actually call it the expression problem, but it is. Or you can see it on [Wikipedia(https://en.wikipedia.org/wiki/Expression_problem). Or my personal favorite because this was the first place I came across it, is in a &lt;a href=&#34;http://lampwww.epfl.ch/~odersky/papers/ExpressionProblem.html&#34;&gt;paper&lt;/a&gt; from &lt;a href=&#34;https://en.wikipedia.org/wiki/Martin_Odersky&#34;&gt;Martin Odersky&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protonmail Or Why Security Matters</title>
      <link>https://charltonaustin.com/posts/2015_11_11_protonmail-or-why-security-matters/</link>
      <pubDate>Wed, 11 Nov 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_11_11_protonmail-or-why-security-matters/</guid>
      <description>&lt;p&gt;Recently &lt;a href=&#34;https://protonmail.com/&#34;&gt;ProtonMail&lt;/a&gt; came under a &lt;a href=&#34;http://techcrunch.com/2015/11/07/protonmail-on-battling-a-sustained-ddos-attack/&#34;&gt;DDoS&lt;/a&gt; attack. I was unfortunately one of the people that was affected by this. A few years back after the [Snowden revelations I made a concerted effort to move away from services that cooperated with the NSA. That included companies like Google and Facebook. At the time ProtonMail popped up and I decided to try it out.&lt;/p&gt;&#xA;&lt;p&gt;Now I&amp;rsquo;m no security expert, but a lot of the claims made by ProtonMail do seem a bit crazy. Also I&amp;rsquo;m a bit skeptical of closed source security solutions (Telegram vs Signal &lt;a href=&#34;http://www.thoughtcrime.org/blog/telegram-crypto-challenge/&#34;&gt;anyone&lt;/a&gt;?).  In any case I figured it would be better than sticking with Gmail. My reasoning went along these lines. While true I couldn&amp;rsquo;t be certain that my data was being protected at least I wasn&amp;rsquo;t supporting Gmail who I knew was giving my data directly to the NSA. Also with ProtonMail I had a chance that my data wasn&amp;rsquo;t being mined for advertisement or mass surveillance purposes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Structual Type Systems</title>
      <link>https://charltonaustin.com/posts/2015_11_07_structual-type-systems/</link>
      <pubDate>Sat, 07 Nov 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_11_07_structual-type-systems/</guid>
      <description>&lt;p&gt;I was talking recently to a friend about programming languages and how they affect what kinds of software we write when we got on the subject of Golang. He&amp;rsquo;s a successful vice president of engineering at a ruby shop and I&amp;rsquo;m a lowly java software engineer, and yet we both agreed on one thing: what people really want is a flexible type system that allows them to rapidly write software. Him coming from the Ruby world wistfully looked off in the distance wishing he didn&amp;rsquo;t have to worry about runtime type production errors, while basking in the glory of how rapidly and concisely his team could get out code. Me on the other hand tired of slaving away writing so many extra lines of code, while sleeping comfortably with the knowledge that I was unlikely to break any servers in production through type errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging Multi  Threaded Applications</title>
      <link>https://charltonaustin.com/posts/2015_10_24_debugging-multi--threaded-applications/</link>
      <pubDate>Sat, 24 Oct 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_10_24_debugging-multi--threaded-applications/</guid>
      <description>&lt;p&gt;Recently I had debug a multithreaded application with some surprising results. Seeing as this can be a particularly tricky task for people that haven&amp;rsquo;t done it before I thought  I would write about some lessons I learned from the experience.&lt;/p&gt;&#xA;&lt;h3 id=&#34;logging-logging-logging-and-more-logging&#34;&gt;logging Logging &lt;em&gt;LOGGING&lt;/em&gt; and &lt;em&gt;MORE LOGGING&lt;/em&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Log to understand the problem. This one is hard to set up retroactively, but it is well worth the effort. Strive for logs that are meaningful, and that give you checkpoints. For instance avoid putting logs in tight loops. Unless there is something you really need to see inside of the tight loop, move the log out. If you really need to log within a tight loop think about either making the log level DEBUGGING, or only logging every nth element, or doing some other logic to really only log things that you will be interested in. In multithreaded application logging can give you clues on whether or not a thread is starved or when events are happening out of order. Most of the time logs in tight loops will be unhelpful. While some people argue that you should log everything and then use other tools to sift through them I think you will save everyone a whole lot of headaches if you try and log only what you really need. True hard disk space is cheap, true you can roll your logs often to make it easier to sift through them, but at the end of the day the simpler your logs are to sift through the more likely you are to solve the problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Feature Branches To Mainline</title>
      <link>https://charltonaustin.com/posts/2015_10_10_feature-branches-to-mainline/</link>
      <pubDate>Sat, 10 Oct 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_10_10_feature-branches-to-mainline/</guid>
      <description>&lt;p&gt;Recently at &lt;a href=&#34;http://intentmedia.com/&#34;&gt;my current company&lt;/a&gt; my team has been struggling to move from a feature branch workflow to a mainline workflow.  I&amp;rsquo;m going to define what the feature branches and mainline workflows are. Then I&amp;rsquo;m going to talk about the costs and benefits of both models. Finally I&amp;rsquo;m going to talk about why people should use the mainline workflow.&lt;/p&gt;&#xA;&lt;h3 id=&#34;feature-branch-workflow&#34;&gt;Feature Branch Workflow&lt;/h3&gt;&#xA;&lt;p&gt;So what is the feature branch workflow (at least at IntentMedia). For my current team it consisted of someone picking up a story, then creating a new branch, doing the development work, creating a pull request, seeing if the build is green on TeamCity, getting the application checked by a quality analyst, and finally merging in with master.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Pairing Comfortable</title>
      <link>https://charltonaustin.com/posts/2015_09_26_making-pairing-comfortable/</link>
      <pubDate>Sat, 26 Sep 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_09_26_making-pairing-comfortable/</guid>
      <description>&lt;p&gt;There are effectively (to me anyways) an infinite number of blog posts about the benefits and costs of pairing and what pairing is and isn&amp;rsquo;t. So I&amp;rsquo;m not going to talk about the good and bad of pairing. I&amp;rsquo;m going to assume that, like me, you want to pair and you see the benefits and costs. Instead today I&amp;rsquo;m going to talk about how I started experimenting with pairing at my most recent &lt;a href=&#34;http://intentmedia.com/&#34;&gt;job&lt;/a&gt;. For people who would like a run down of pairing see &lt;a href=&#34;http://guide.agilealliance.org/guide/pairing.html&#34;&gt;this&lt;/a&gt;, &lt;a href=&#34;http://anh.cs.luc.edu/170/Kindergarten.html&#34;&gt;this&lt;/a&gt;, or Google it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configurator Boxen Or Things To Wrangle Your Environment</title>
      <link>https://charltonaustin.com/posts/2015_09_19_configurator-boxen-or-things-to-wrangle-your-environment/</link>
      <pubDate>Sat, 19 Sep 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_09_19_configurator-boxen-or-things-to-wrangle-your-environment/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;&#xA;&lt;p&gt;One thing that I keep seeing consistently regardless of whether I&amp;rsquo;m working as a full time employee or as consultant, and that I&amp;rsquo;ve literally seen from coast to coast is developers and testers trying to simplify their local environments.  Increasingly, companies are using multiple services that allow for more module pieces of software (think micro-services).  This is nice because it can often simplify coding complexity and dependency graphs, but the flip side is that deployments can become more complex.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Refactoring Tests For Maintainability</title>
      <link>https://charltonaustin.com/posts/2015_01_28_refactoring-tests-for-maintainability/</link>
      <pubDate>Wed, 28 Jan 2015 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2015_01_28_refactoring-tests-for-maintainability/</guid>
      <description>&lt;p&gt;I just began working at Intent Media  and I&amp;rsquo;ve been spending some time getting to know the code base. I spent the other day pairing with another guy on the team to add a new feature. We needed to change one of the data models by adding a new field. So we wrote some tests specifying how we thought the new data field should work. Next we got them passing. After that we ran all the unit tests. Oh man were we in trouble. We had twenty-five test failures. I was a little surprised since we had made a pretty small change in the production code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Problems With Cucumber And Chef</title>
      <link>https://charltonaustin.com/posts/2013_03_06_problems-with-cucumber-and-chef/</link>
      <pubDate>Wed, 06 Mar 2013 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2013_03_06_problems-with-cucumber-and-chef/</guid>
      <description>&lt;p&gt;So I&amp;rsquo;ve been working on getting some cucumber functional tests to run on a remote server lately and had tons of problems. The setup included using Electric Commander to run a gradle task, which in turn ran cucumber using jruby. It was lots of fun. Let me say.&lt;/p&gt;&#xA;&lt;p&gt;This post is basically because cucumber put out a misleading &amp;ldquo;error&amp;rdquo; which when I searched google I couldn&amp;rsquo;t get any help.  So for anyone else who finds themselves in some similar situation. Even if there is only one of you. I hope it helps. So this is what gradle was actually running.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clojure Web Scraper</title>
      <link>https://charltonaustin.com/posts/2013_03_01_clojure-web-scraper/</link>
      <pubDate>Fri, 01 Mar 2013 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2013_03_01_clojure-web-scraper/</guid>
      <description>&lt;p&gt;Okay so another thing that I did this week was go to a clojure meet up. I really enjoyed it. There I met some really cool people like Anthony from WalmartLabs. In the end we created a hacker news scraper from scratch in a couple of hours. So here is a brief tutorial on how we did it. (Note I&amp;rsquo;m not that great with Clojure yet thought I do think it is rather awesome. So most of this is because Anthony is a rock star.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vagrant Chef Fun</title>
      <link>https://charltonaustin.com/posts/2013_02_27_vagrant-chef-fun/</link>
      <pubDate>Wed, 27 Feb 2013 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2013_02_27_vagrant-chef-fun/</guid>
      <description>&lt;p&gt;A couple of days ago I got a chance to see some friends of mine (Matt Urbanski and Jinwoo Baek) give a presentation on chef. It was fantastic. Afterward we had a sort of impromptu demo session on using Vagrant and Chef to get an apache server up and running. So this is going to be a quick tutorial on how to use Vagrant and Chef to get a functioning apache server up and running on a vm.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frank Cucumber</title>
      <link>https://charltonaustin.com/posts/2013_02_17_frank-cucumber/</link>
      <pubDate>Sun, 17 Feb 2013 09:03:54 -0400</pubDate>
      <guid>https://charltonaustin.com/posts/2013_02_17_frank-cucumber/</guid>
      <description>&lt;p&gt;Starting my blog again. So my blog has hopelessly become out of date. Since the last time I posted I&amp;rsquo;ve started working for ThoughtWorks, gone to India, moved to San Francisco, and finally been put onto my client. Great so now what. Since things are finally starting to settle and since my thoughts have changed on maintaining a blog I&amp;rsquo;ve decided it&amp;rsquo;s time to start blogging again. Not that anyone has read anything yet. My goal is to do it once or twice a week depending on time constraints and travel. So lets get started.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://charltonaustin.com/posts/2025_01_23_driven_talent_over_technical_expertise/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/posts/2025_01_23_driven_talent_over_technical_expertise/</guid>
      <description>&lt;h2 id=&#34;heading&#34;&gt;title: The Art of Making Trade-offs: My Experience Hiring Driven Talent over Technical Expertise&#xA;date: 2025-01-23&#xA;draft: false&#xA;description: &amp;ldquo;Learn how to strike the right balance between hiring for intelligence and drive versus technical expertise&#xA;to build a strong and successful team. Gain valuable insights into the art of making trade-offs when it comes to hiring&#xA;and building your team.&amp;rdquo;&#xA;tags: [&#xA;&amp;ldquo;management&amp;rdquo;,&#xA;&amp;ldquo;entrepreneurship&amp;rdquo;,&#xA;&amp;ldquo;hiring&amp;rdquo;,&#xA;&amp;ldquo;talent&amp;rdquo;,&#xA;&amp;ldquo;recruiting&amp;rdquo;&#xA;]&#xA;categories : [&#xA;&amp;ldquo;management&amp;rdquo;,&#xA;&amp;ldquo;entrepreneurship&amp;rdquo;,&#xA;&amp;ldquo;hiring&amp;rdquo;,&#xA;&amp;ldquo;talent&amp;rdquo;,&#xA;&amp;ldquo;recruiting&amp;rdquo;&#xA;]&lt;/h2&gt;&#xA;&lt;h1 id=&#34;the-problem&#34;&gt;The problem&lt;/h1&gt;&#xA;&lt;p&gt;Hiring the right talent is critical for the success of any company. When I was starting my first startup, I hired two&#xA;relatively inexperienced people, Hassan and Amelia, who turned out to be fantastic hires. Amelia was on her second&#xA;career and had gone through a technology bootcamp, while Hassan had a master&amp;rsquo;s of science in software engineering. They&#xA;were both hardworking, driven, and willing to learn and grow. Despite their lack of experience, they made significant&#xA;contributions to the company&amp;rsquo;s success.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://charltonaustin.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/about/</guid>
      <description>&lt;h1 id=&#34;a-blog-to-help-software-engineers-grow&#34;&gt;A Blog to Help Software Engineers Grow&lt;/h1&gt;&#xA;&lt;p&gt;This blog is a labor of love meant to give back to tech community which has helped me grow so much.&#xA;If you find tech or tech management interesting hopefully you find this blog interesting.&#xA;I believe that security, education, and software can come together to make the world a better place.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cupola-software&#34;&gt;Cupola Software&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m proud to have started a vertical SaaS &lt;a href=&#34;https://www.cupolasoftware.com/&#34;&gt;company&lt;/a&gt; in the Architecture space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Austin Consulting Inc.</title>
      <link>https://charltonaustin.com/consulting/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/consulting/</guid>
      <description>&lt;h1 id=&#34;austin-consulting-inc&#34;&gt;Austin Consulting Inc.&lt;/h1&gt;&#xA;&lt;h2 id=&#34;about-austin-consulting-inc&#34;&gt;About Austin Consulting Inc.&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to Austin Consulting Inc., a boutique consulting firm founded and operated solely by me. With a diverse&#xA;background working with Fortune 500, Ad Tech, and Finance companies, I bring a wealth of experience to provide clients&#xA;with cutting-edge solutions and unparalleled expertise.&lt;/p&gt;&#xA;&lt;p&gt;At Austin Consulting Inc., I am committed to helping clients stay ahead of the curve in today&amp;rsquo;s constantly evolving tech&#xA;landscape. As the sole operator of the company, I provide a personalized and collaborative approach to consulting. By&#xA;working closely with clients to understand their unique needs and goals, I develop customized strategies and solutions&#xA;to help them succeed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://charltonaustin.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/contact/</guid>
      <description>&lt;h2 id=&#34;contact-info&#34;&gt;Contact info&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Please see my other work at &lt;a href=&#34;https://github.com/charltonaustin&#34;&gt;GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Also feel free to reach out to me via email at &lt;code&gt;me at charltonaustin dot com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;You can also reach me through &lt;a href=&#34;https://www.linkedin.com/in/charltonaustin/&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Or you can learn more about The Tuesday Company &lt;a href=&#34;https://www.tuesdaycompany.com/&#34;&gt;here&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Privacy Policy</title>
      <link>https://charltonaustin.com/privacy_policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/privacy_policy/</guid>
      <description>&lt;h2 id=&#34;privacy-policy&#34;&gt;PRIVACY POLICY&lt;/h2&gt;&#xA;&lt;p&gt;Austin Consulting, Inc. (“&lt;strong&gt;Austin Consulting&lt;/strong&gt;,” “&lt;strong&gt;we&lt;/strong&gt;,” “&lt;strong&gt;us&lt;/strong&gt;,” or “&lt;strong&gt;our&lt;/strong&gt;”) provides this Privacy Policy to our&#xA;website visitors and customers to help you understand how we collect, use, process, and share your personal information,&#xA;and to help you understand and exercise your privacy rights.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;SCOPE AND UPDATES TO THIS PRIVACY POLICY&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This Privacy Policy applies to personal information processed by us, including on our websites, mobile applications, and&#xA;other online or offline offerings. To make this Privacy Policy easier to read, our websites, mobile applications, and&#xA;other offerings are collectively called the “Services.”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terms of Service</title>
      <link>https://charltonaustin.com/terms_of_service/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://charltonaustin.com/terms_of_service/</guid>
      <description>&lt;h2 id=&#34;terms-of-service&#34;&gt;TERMS OF SERVICE&lt;/h2&gt;&#xA;&lt;p&gt;Please read these Terms of Service (these “&lt;strong&gt;Terms&lt;/strong&gt;”) carefully. These Terms govern Austin Consulting’s provision of&#xA;software and services, and Customer’s (as defined below) use thereof, as set forth in an Order Form (as defined below)&#xA;executed between Austin Consulting, Inc. (“&lt;strong&gt;Austin Consulting&lt;/strong&gt;” or “&lt;strong&gt;we&lt;/strong&gt;”) and Customer. TOGETHER, THESE TERMS AND&#xA;ANY ORDER FORM(S) CONSTITUTE THE “&lt;strong&gt;AGREEMENT&lt;/strong&gt;.” THE AGREEMENT IS EFFECTIVE AS OF THE ORDER FORM EFFECTIVE DATE (AS&#xA;DEFINED AND SET FORTH IN THE INITIAL ORDER FORM). CAPITALIZED TERMS USED BUT NOT DEFINED HEREIN SHALL HAVE THE MEANINGS&#xA;GIVEN TO THEM IN THE ORDER FORM.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
