<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>John Bellone</title>
    <link>https://jbellone.blog/</link>
    <description>Technology executive. Gamer. &lt;a href=&#34;https://byteswisdom.com&#34;&gt;Podcaster&lt;/a&gt;. &lt;a href=&#34;https://bsky.app/profile/jbellone.dev&#34;&gt;Opinions are mine.&lt;/a&gt;</description>
    <pubDate>Sun, 05 Apr 2026 22:46:39 +0000</pubDate>
    <image>
      <url>https://i.snap.as/Z0MYWOgb.jpg</url>
      <title>John Bellone</title>
      <link>https://jbellone.blog/</link>
    </image>
    <item>
      <title>Using buf with Rust+Tonic</title>
      <link>https://jbellone.blog/using-buf-with-rust-tonic?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[I spent entirely too much time working on a build script that leverages the Buf dependency manager (with the schema registry) to generate server and client gRPC bindings. This feels like it should be a turn key thing.&#xA;&#xA;https://gist.github.com/johnbellone/01fffbdbbf7c107177ab6112001a6dfd]]&gt;</description>
      <content:encoded><![CDATA[<p>I spent entirely too much time working on <a href="https://gist.github.com/johnbellone/01fffbdbbf7c107177ab6112001a6dfd">a build script</a> that leverages the <a href="https://buf.build">Buf dependency manager</a> (with the schema registry) to generate server and client gRPC bindings. This feels like it should be a turn key thing.</p>

<p><script src="https://gist.github.com/johnbellone/01fffbdbbf7c107177ab6112001a6dfd.js"></script></p>
]]></content:encoded>
      <guid>https://jbellone.blog/using-buf-with-rust-tonic</guid>
      <pubDate>Wed, 16 Jul 2025 02:41:17 +0000</pubDate>
    </item>
    <item>
      <title>New Ride: Mustang Mach 1</title>
      <link>https://jbellone.blog/new-ride?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;!--more--&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/eDQyxQkx.jpeg" alt=""/></p>


]]></content:encoded>
      <guid>https://jbellone.blog/new-ride</guid>
      <pubDate>Sun, 01 Jun 2025 20:29:04 +0000</pubDate>
    </item>
    <item>
      <title>Pit Barrel Junior</title>
      <link>https://jbellone.blog/pit-barrel-junior?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[I do not normally write reviews for products and I sure as hell am not getting paid to write this review (although, Pit Barrel, I&#39;ll accept any goodies you want to send my way). The story of the Pit Barrel business is better than the product they produce: Noah Glanville served in the United States Navy, upon his return, he and his wife went through constant prototyping and tweaking to build the cooker/smoker that is sitting in my backyard right now. I personally haven&#39;t verified how much of that story is true, but they build a damn good product and I feel great supporting it.&#xA;&#xA;#Barbecue #Cooking #Summer&#xA;&#xA;!--more--&#xA;&#xA;Last week, after spending weeks teetering back and forth about purchasing the Pit Barrel Junior Cooker/Smoker, I finally pulled the trigger on it. Over the course of the pandemic I have been poking and prodding some folks that are much more knowledgeable than me.&#xA;&#xA;  A whole chicken, smoked with applewood, rubbed with olive oil and Pit Barrel&#39;s All Purpose Rub.&#xA;&#xA;A big motivation for me for purchasing this cooker/smoker was the fact that it was charcoal. At the new house, we decided to go with a propane grill out of ease, but there was a big part of me that wasn&#39;t happy with some of the results. You aren&#39;t getting an applewood smoked chicken on that bad boy.&#xA;&#xA;  The chicken hanging vertically in the smoker with the Turkey Hanger accessory.&#xA;&#xA;My next experiment will be a smoked turkey and some ribs. If all goes well this may be the new Thanksgiving tradition because it is a helluva lot easier than cooking and basting the bird in the oven. It is 7am when I am writing this post and I am getting hungry just looking at that chicken. I am going to go raid the leftovers and have a few bites. After this pandemic is over, you&#39;re welcome to stop by if you provide the chicken and beer.]]&gt;</description>
      <content:encoded><![CDATA[<p>I do not normally write reviews for products and I sure as hell am not getting paid to write this review (although, <a href="https://pitbarrelcooker.com/">Pit Barrel</a>, I&#39;ll accept any goodies you want to send my way). The <a href="https://pitbarrelcooker.com/pages/the-company">story of the Pit Barrel business</a> is better than the product they produce: Noah Glanville served in the United States Navy, upon his return, he and his wife went through constant prototyping and tweaking to build the cooker/smoker that is sitting in my backyard right now. I personally haven&#39;t verified how much of that story is true, but they build a damn good product and I feel great supporting it.</p>

<p><a href="https://jbellone.blog/tag:Barbecue" class="hashtag"><span>#</span><span class="p-category">Barbecue</span></a> <a href="https://jbellone.blog/tag:Cooking" class="hashtag"><span>#</span><span class="p-category">Cooking</span></a> <a href="https://jbellone.blog/tag:Summer" class="hashtag"><span>#</span><span class="p-category">Summer</span></a></p>



<p>Last week, after spending weeks teetering back and forth about purchasing the <a href="https://pitbarrelcooker.com/products/14-pit-barrel-junior">Pit Barrel Junior Cooker/Smoker</a>, I finally pulled the trigger on it. Over the course of the pandemic <a href="https://jbellone.blog/virtual-coffee-time/">I have been poking and prodding</a> some folks that are much more knowledgeable than me.</p>

<blockquote><p><img src="https://i.snap.as/f8RHTF1U.jpg" alt=""/> A whole chicken, smoked with applewood, rubbed with olive oil and <a href="https://pitbarrelcooker.com/products/all-purpose-pit-rub-2-5-lb-bag">Pit Barrel&#39;s All Purpose Rub</a>.</p></blockquote>

<p>A big motivation for me for purchasing this cooker/smoker was the fact that it was charcoal. At the new house, we decided to go with a propane grill out of ease, but there was a big part of me that wasn&#39;t happy with some of the results. You aren&#39;t getting an applewood smoked chicken on that bad boy.</p>

<blockquote><p><img src="https://i.snap.as/ofR011wW.jpg" alt=""/> The chicken hanging vertically in the smoker with the <a href="https://pitbarrelcooker.com/collections/hanging-accessories/products/stainless-steel-turkey-hanger">Turkey Hanger accessory.</a></p></blockquote>

<p>My next experiment will be a smoked turkey and some ribs. If all goes well this may be the new Thanksgiving tradition because it is a helluva lot easier than cooking and basting the bird in the oven. It is 7am when I am writing this post and I am getting hungry just looking at that chicken. I am going to go raid the leftovers and have a few bites. After this pandemic is over, you&#39;re welcome to stop by if you provide the chicken and beer.</p>
]]></content:encoded>
      <guid>https://jbellone.blog/pit-barrel-junior</guid>
      <pubDate>Tue, 13 Oct 2020 02:01:48 +0000</pubDate>
    </item>
    <item>
      <title>Virtual Coffee Time</title>
      <link>https://jbellone.blog/virtual-coffee-time?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[A few months ago, in an effort to inject a little bit of calm and normalcy at the beginning of our work week, my leadership team adopted a Monday morning &#34;coffee hour&#34; on Zoom. We&#39;ve always been a distributed team – primarily out of Kansas City, Birmingham and Washington D.C. – but it wasn&#39;t until the pandemic was well underway that we began this weekly ritual.&#xA;&#xA;#Leadership #Remote&#xA;&#xA;!--more--&#xA;&#xA;I have been in a distrubted team – as a leader or an individual contributor – for nearly a decade of my career. But like most people the pandemic made me feel like a prisoner in my own home. The world hit a pause button on nearly every aspect of life. Many, including myself, dove headfirst into the grind of work and spent more hours in front of the keyboard even if it wasn&#39;t productive.&#xA;&#xA;The only rule of Monday coffee time is that we try to stay away from work topics because we want everyone to step back from their obligations and have a little bit of genuine human interaction. Quite surprisingly, we have never actually talked about our morning beverages of choice. Some of the more recent topics that have come up:&#xA;&#xA;Pandemic parenting&#xA;Kansas City Chiefs&#xA;Homemade wedding cakes&#xA;Methods of smoking turkey/chicken&#xA;Hiking and bicycling&#xA;Home improvements&#xA;Past travels&#xA;&#xA;For those of you that have been considering carving some time out of your week to bond with your team we have found this to be an especially good way to begin the work week. Those of us that have been in a distributed work environment for awhile may say that this isn&#39;t new or original, but I think we can all appreicate the stress and difficulty over the past seven months. And for some of us it may continue well into the next year.&#xA;&#xA;So try it out. If you don&#39;t have a topic in mind there&#39;s always the weather.]]&gt;</description>
      <content:encoded><![CDATA[<p>A few months ago, in an effort to inject a little bit of calm and normalcy at the beginning of our work week, my leadership team adopted a Monday morning “coffee hour” on Zoom. We&#39;ve always been a distributed team – primarily out of Kansas City, Birmingham and Washington D.C. – but it wasn&#39;t until the pandemic was well underway that we began this weekly ritual.</p>

<p><a href="https://jbellone.blog/tag:Leadership" class="hashtag"><span>#</span><span class="p-category">Leadership</span></a> <a href="https://jbellone.blog/tag:Remote" class="hashtag"><span>#</span><span class="p-category">Remote</span></a></p>



<p>I have been in a distrubted team – as a leader or an individual contributor – for nearly a decade of my career. But like most people the pandemic made me feel like a prisoner in my own home. The world hit a pause button on nearly every aspect of life. Many, including myself, dove headfirst into the grind of work and spent more hours in front of the keyboard even if it wasn&#39;t productive.</p>

<p>The only rule of Monday <em>coffee time</em> is that we <em>try</em> to stay away from work topics because we want everyone to step back from their obligations and have a little bit of genuine human interaction. Quite surprisingly, we have never actually talked about our morning beverages of choice. Some of the more recent topics that have come up:</p>
<ul><li>Pandemic parenting</li>
<li>Kansas City Chiefs</li>
<li>Homemade wedding cakes</li>
<li>Methods of smoking turkey/chicken</li>
<li>Hiking and bicycling</li>
<li>Home improvements</li>
<li>Past travels</li></ul>

<p>For those of you that have been considering carving some time out of your week to bond with your team we have found this to be an especially good way to begin the work week. Those of us that have been in a distributed work environment for awhile may say that this isn&#39;t new or original, but I think we can all appreicate the stress and difficulty over the past seven months. And for some of us it may continue well into the next year.</p>

<p>So try it out. If you don&#39;t have a topic in mind there&#39;s always the weather.</p>
]]></content:encoded>
      <guid>https://jbellone.blog/virtual-coffee-time</guid>
      <pubDate>Tue, 13 Oct 2020 01:46:23 +0000</pubDate>
    </item>
    <item>
      <title>Modern Blogging with Ghost</title>
      <link>https://jbellone.blog/modern-blogging-with-ghost?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Over the last 20+ years my personal blogging has been marred with fits and starts. The services/platforms/tools that I have used to host my words are countless – I literally can&#39;t name them all – but I had thought that I found a platform in Mediumwith a balance of style, customization and best of all dead simple tooling. All of that changed about a year ago when, like many other Internet businesses, their model for revenue changed and I was constantly begged to pay money to read other people&#39;s thoughts.&#xA;&#xA;#Technology #Blogging #HowTo&#xA;&#xA;!--more--&#xA;&#xA;Now, I am all for ensuring that content creators are paid, but after having a &#34;taste&#34; of the platform as it was I didn&#39;t really see myself wanting to contribute to it. That led me to take a look at the Ghost platform. This post isn&#39;t really about why I chose Ghost but a major reason was because of how dead simple it is to self-host.&#xA;&#xA;Before we get into the nerdy technical bits it is important to note that rather than self-hosting on Digital Ocean (or some other cloud provider) you can pay a yearly fee to have a managed version with Ghost Pro. It was my decision to not go down that road because I want the flexibility to modify the source code myself. It also happens to be quite a bit cheaper with only minimal risk.&#xA;&#xA;Domain Purchase&#xA;&#xA;There are a countless number of vendors that offer the ability to purchase a domain name. In this example, I have used Google Domains, but you can use any service that fits your needs. In some cases, certain Top Level Domains (TLD) are only offered from specific vendors, e.g. the .dev TLD from Google, which obviously will force your purchase one way or another. But for the common extensions you can use any registrar.&#xA;&#xA;  The domain for this blog was purchased using Google Domains.&#xA;&#xA;Most modern registrars offer an initial configuration for DNS nameservers and a user interface to manage records. We&#39;ll be adding an A record after we set up the Ghost instance in Digital Ocean.&#xA;&#xA;Set Up Ghost with Digital Ocean&#xA;&#xA;  Digital Ocean&#39;s Marketplace offers 1-Click installation of Ghost and many other applications.&#xA;&#xA;Digital Ocean offers an excellent Marketplace that has 1-click installations for many different types of software. The single click creation of a droplet running Ghost is foolproof. This will bring you to the instance creation page that has a whole lot of toggles, but my suggestions for setting up a simple installation of Ghost:&#xA;&#xA;Set the hostname to the domain name you purchased for your blog.&#xA;$10/month instance with 2GB ram and 1 CPU.&#xA;Select a region nearest to your core audience.&#xA;Tag your instance with blog for quick searching.&#xA;Add instance backups for $2/month.&#xA;&#xA;After you click the Create Droplet button and the instance finishes booting you&#39;ll see the public IPV4 address. This is what you&#39;re going to use to configure the A record in your registrar&#39;s domain configuration.&#xA;&#xA;Configure Domain&#xA;&#xA;  The data for the A record is the IPV4 address of the new Digital Ocean instance.&#xA;&#xA;Now that your instance is available the final external step is to configure the DNS A record for the domain. Most people are going to want to add two records:&#xA;&#xA;The @ A record, e.g. https://jbellone.blog/&#xA;The www CNAME record, e.g. https://www.jbellone.blog/&#xA;&#xA;The data component on the A record is the IPV4 address of your Digital Ocean droplet and the data component on the CNAME record would be set to @. But if you&#39;re using Google Domains, you can leverage smart forwarding and forego the second record.&#xA;&#xA;  Google Domains gives you the option of setting up smart forwarding.&#xA;&#xA;The domain forwarding option allows the most flexibility and if your registrar offers it you should definitely take advantage. After the records are set up it is time to follow the Getting Started Guide from the Digital Ocean marketplace. This will walk you through the initial set up of the instance.&#xA;&#xA;Your First Post&#xA;&#xA;If you&#39;ve made it to this point you&#39;re ready to start configuring your Ghost installation. My suggestion would be to walk through the Settings and set up all of the parameters for your blog, e.g. title, description and theme. There are also a whole set of integrations that you can leverage with social accounts such as Twitter to automate the posting.&#xA;&#xA;If you run into any trouble feel free to reach out to me on Bluesky_or send me an e-mail.]]&gt;</description>
      <content:encoded><![CDATA[<p>Over the last 20+ years my personal blogging has been marred with fits and starts. The services/platforms/tools that I have used to host my words are countless – I literally can&#39;t name them all – but I had thought that I found a platform in <a href="https://medium.com/">Medium</a>with a balance of style, customization and best of all dead simple tooling. All of that changed about a year ago when, like many other Internet businesses, their model for revenue changed and I was constantly begged to pay money to read other people&#39;s thoughts.</p>

<p><a href="https://jbellone.blog/tag:Technology" class="hashtag"><span>#</span><span class="p-category">Technology</span></a> <a href="https://jbellone.blog/tag:Blogging" class="hashtag"><span>#</span><span class="p-category">Blogging</span></a> <a href="https://jbellone.blog/tag:HowTo" class="hashtag"><span>#</span><span class="p-category">HowTo</span></a></p>



<p>Now, I am all for ensuring that content creators are paid, but after having a “taste” of the platform as it was I didn&#39;t really see myself wanting to contribute to it. That led me to take a look at the <a href="https://ghost.org/">Ghost</a> platform. This post isn&#39;t really about <em>why</em> I chose Ghost but a major reason was because of how dead simple it is to self-host.</p>

<p>Before we get into the nerdy technical bits it is important to note that rather than self-hosting on Digital Ocean (or some other cloud provider) you can pay a yearly fee to have a managed version with <a href="https://ghost.org/pricing/">Ghost Pro</a>. It was my decision to not go down that road because I want the flexibility to modify the <a href="https://github.com/johnbellone/TryGhost">source code</a> myself. It also happens to be quite a bit cheaper with only minimal risk.</p>

<h3 id="domain-purchase" id="domain-purchase">Domain Purchase</h3>

<p>There are a countless number of vendors that offer the ability to purchase a domain name. In this example, I have used <a href="https://domains.google/">Google Domains</a>, but you can use any service that fits your needs. In some cases, certain <a href="https://en.wikipedia.org/wiki/Top-level_domain">Top Level Domains (TLD)</a> are only offered from specific vendors, e.g. the <strong>.dev</strong> TLD from Google, which obviously will force your purchase one way or another. But for the common extensions you can use any registrar.</p>

<blockquote><p><img src="https://i.snap.as/9XbPCbqn.png" alt=""/> The domain for this blog was purchased using <strong><a href="https://domains.google/">Google Domains</a></strong>.</p></blockquote>

<p>Most modern registrars offer an initial configuration for DNS nameservers and a user interface to manage records. We&#39;ll be adding an <a href="https://en.wikipedia.org/wiki/List_of_DNS_record_types">A record</a> after we set up the Ghost instance in Digital Ocean.</p>

<h3 id="set-up-ghost-with-digital-ocean" id="set-up-ghost-with-digital-ocean">Set Up Ghost with Digital Ocean</h3>

<blockquote><p><img src="https://i.snap.as/j569s2VM.png" alt=""/> <a href="https://marketplace.digitalocean.com/">Digital Ocean&#39;s Marketplace</a> offers <a href="https://marketplace.digitalocean.com/apps/ghost">1-Click installation of Ghost</a> and many other applications.</p></blockquote>

<p><a href="https://m.do.co/c/e547caed128e">Digital Ocean</a> offers an excellent <a href="https://marketplace.digitalocean.com/">Marketplace</a> that has 1-click installations for many different types of software. The s<a href="https://marketplace.digitalocean.com/apps/ghost">ingle click creation of a droplet</a> running Ghost is foolproof. This will bring you to the instance creation page that has a whole lot of toggles, but my suggestions for setting up a simple installation of Ghost:</p>
<ul><li>Set the <em>hostname</em> to the <em>domain name</em> you purchased for your blog.</li>
<li>$10/month instance with 2GB ram and 1 CPU.</li>
<li>Select a region nearest to your core audience.</li>
<li>Tag your instance with <em>blog</em> for quick searching.</li>
<li>Add instance backups for $2/month.</li></ul>

<p>After you click the <em>Create Droplet button</em> and the instance finishes booting you&#39;ll see the public IPV4 address. This is what you&#39;re going to use to configure the A record in your registrar&#39;s domain configuration.</p>

<h3 id="configure-domain" id="configure-domain">Configure Domain</h3>

<blockquote><p><img src="https://i.snap.as/Twa7xs5P.png" alt=""/> The data for the <a href="https://en.wikipedia.org/wiki/List_of_DNS_record_types">A record</a> is the IPV4 address of the new Digital Ocean instance.</p></blockquote>

<p>Now that your instance is available the final external step is to configure the DNS A record for the domain. Most people are going to want to add two records:</p>
<ul><li>The @ A record, e.g. <a href="https://jbellone.blog/">https://jbellone.blog/</a></li>
<li>The <em>www</em> CNAME record, e.g. <a href="https://www.jbellone.blog/">https://www.jbellone.blog/</a></li></ul>

<p>The data component on the A record is the IPV4 address of your Digital Ocean droplet and the data component on the CNAME record would be set to @. But if you&#39;re using Google Domains, you can leverage smart forwarding and forego the second record.</p>

<blockquote><p><img src="https://i.snap.as/ejuvKtLb.png" alt=""/> Google Domains gives you the option of setting up smart forwarding.</p></blockquote>

<p>The domain forwarding option allows the most flexibility and if your registrar offers it you should definitely take advantage. After the records are set up it is time to follow the <a href="https://cloud.digitalocean.com/marketplace/5ba19753fc53b8179c7a0076?i=9e0881">Getting Started Guide</a> from the Digital Ocean marketplace. This will walk you through the initial set up of the instance.</p>

<h3 id="your-first-post" id="your-first-post">Your First Post</h3>

<p>If you&#39;ve made it to this point you&#39;re ready to start configuring your Ghost installation. My suggestion would be to walk through the <em>Settings</em> and set up all of the parameters for your blog, e.g. title, description and theme. There are also a whole set of integrations that you can leverage with social accounts such as Twitter to automate the posting.</p>

<p>If you run into any trouble feel free to reach out to me on <em><a href="https://bsky.app/profile/jbellone.dev">Bluesky</a></em>or <a href="mailto:me@jbellone.blog">send me an e-mail</a>.</p>
]]></content:encoded>
      <guid>https://jbellone.blog/modern-blogging-with-ghost</guid>
      <pubDate>Fri, 28 Aug 2020 01:57:07 +0000</pubDate>
    </item>
    <item>
      <title>New CTO Tips</title>
      <link>https://jbellone.blog/new-cto-tips?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[As an engineer, I am always looking to leverage tools and processes to make my life more efficient. I have been managing people for a good part of my career, but when I made the leap to leading a larger organization most of the tips/tricks I have learned didn&#39;t necessarily scale. Your goal must be to optimize your time to solve problems where technology can accelerate the business and product.&#xA;&#xA;#Leadership #Management&#xA;&#xA;!--more--&#xA;&#xA;Time Management&#xA;&#xA;If you are lucky enough to have an executive assistant they can work with you to ensure that you are using your time as effectively as possible. But not everyone is that lucky so here are a few tips that will set you up right. Guard your time wisely; the less you waste the less personal time you&#39;ll be spending.&#xA;&#xA;Ask for and review agendas for your meetings. Otherwise cancel it.&#xA;&#xA;Try to schedule the bulk of your 1:1 meetings on the same day each week.&#xA;&#xA;Use color coded calendar categories to manage your day at a glance.&#xA;&#xA;Set aside blocks of time for administrative chores. Yes, that includes reviewing and answering emails.&#xA;&#xA;Use the &#34;out of office&#34; meeting designation to block out personal time.&#xA;&#xA;Equipment&#xA;&#xA;Most people will receive their work equipment on the first day that they start and, unless you&#39;re in an extremely progressive organization, will rarely have a say in the make or model. Remember: you&#39;re the head tech guy so you can basically get whatever you want but don&#39;t abuse the privilege.&#xA;&#xA;That standing desk is most likely a waste of money but a good desk chair isn&#39;t.&#xA;&#xA;Invest in a good pair of wireless headphones. You&#39;re going to be using them.&#xA;&#xA;One big, high-resolution monitor goes a lot further than two or three.&#xA;&#xA;A laptop with one USB-C connection for charging, video and peripherals is pretty much panacea.&#xA;&#xA;Use a wired microphone for important meetings. It really does sound better.&#xA;&#xA;People&#xA;&#xA;This is where you&#39;ll end up spending most of your time because people are the lifeblood of any organization. It is the truth that culture will eat strategy for breakfast, lunch and dinner; so its important to work well with your peers. But it doesn&#39;t stop there: be ready to go in front of customers and prospects.&#xA;&#xA;Most problems aren&#39;t technical and won&#39;t be solved with technology.&#xA;&#xA;You shouldn&#39;t be making technical decisions. If you are, that&#39;s a problem.&#xA;&#xA;It is your job to convince the business and product teams that agile isn&#39;t magic.&#xA;&#xA;Talk to your exiting employees. You&#39;ll always learn something.&#xA;&#xA;Don&#39;t play politics with your team.&#xA;&#xA;I do not think that any of these are unique to the type or size of the organization. There is only so much energy and time that you can input into the system. So spend your time wisely.]]&gt;</description>
      <content:encoded><![CDATA[<p>As an engineer, I am always looking to leverage tools and processes to make my life more efficient. I have been managing people for a good part of my career, but when I made the leap to leading a larger organization most of the tips/tricks I have learned didn&#39;t necessarily scale. Your goal must be to optimize your time to solve problems where technology can accelerate the business and product.</p>

<p><a href="https://jbellone.blog/tag:Leadership" class="hashtag"><span>#</span><span class="p-category">Leadership</span></a> <a href="https://jbellone.blog/tag:Management" class="hashtag"><span>#</span><span class="p-category">Management</span></a></p>



<h3 id="time-management" id="time-management">Time Management</h3>

<p>If you are lucky enough to have an executive assistant they can work with you to ensure that you are using your time as effectively as possible. But not everyone is <em>that</em> lucky so here are a few tips that will set you up right. Guard your time wisely; the less you waste the less personal time you&#39;ll be spending.</p>
<ol><li><p>Ask for and review agendas for your meetings. Otherwise cancel it.</p></li>

<li><p>Try to schedule the bulk of your 1:1 meetings on the same day each week.</p></li>

<li><p>Use color coded calendar categories to manage your day at a glance.</p></li>

<li><p>Set aside blocks of time for administrative chores. Yes, that includes reviewing and answering emails.</p></li>

<li><p>Use the “out of office” meeting designation to block out personal time.</p></li></ol>

<h3 id="equipment" id="equipment">Equipment</h3>

<p>Most people will receive their work equipment on the first day that they start and, unless you&#39;re in an extremely progressive organization, will rarely have a say in the make or model. Remember: you&#39;re the head tech guy so you can basically get whatever you want but don&#39;t abuse the privilege.</p>
<ol><li><p>That standing desk is <em>most likely</em> a waste of money but a good desk chair isn&#39;t.</p></li>

<li><p>Invest in a good pair of wireless headphones. You&#39;re going to be using them.</p></li>

<li><p>One big, high-resolution monitor goes a lot further than two or three.</p></li>

<li><p>A laptop with one USB-C connection for charging, video and peripherals is pretty much panacea.</p></li>

<li><p>Use a wired microphone for important meetings. It really does sound better.</p></li></ol>

<h3 id="people" id="people">People</h3>

<p>This is where you&#39;ll end up spending most of your time because people are the lifeblood of any organization. It is the truth that culture will eat strategy for breakfast, lunch and dinner; so its important to work well with your peers. But it doesn&#39;t stop there: be ready to go in front of customers and prospects.</p>
<ol><li><p>Most problems aren&#39;t technical and won&#39;t be solved with technology.</p></li>

<li><p>You shouldn&#39;t be making technical decisions. If you are, <em>that&#39;s</em> a problem.</p></li>

<li><p>It is <strong>your</strong> job to convince the business and product teams that agile isn&#39;t magic.</p></li>

<li><p>Talk to your exiting employees. You&#39;ll always learn something.</p></li>

<li><p>Don&#39;t play politics with your team.</p></li></ol>

<p>I do not think that any of these are unique to the type or size of the organization. There is only so much energy and time that you can input into the system. So spend your time wisely.</p>
]]></content:encoded>
      <guid>https://jbellone.blog/new-cto-tips</guid>
      <pubDate>Wed, 19 Aug 2020 00:25:22 +0000</pubDate>
    </item>
    <item>
      <title>Hydration of a Chef Server</title>
      <link>https://jbellone.blog/hydration-of-a-chef-server?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[At Bloomberg my team is tasked with supporting infrastructure for all of our consumer and subscription web properties. We have been using Chef to solve some of our problems around configuration management. Most of our recipes were built using Chef Solo and eventually deployed on our cloud infrastructure without a Chef Server. As we began to plan to deploy software services to the teams that we support we quickly began to realize that it would be nearly impossible to manage multiple node deployments without Chef Server.&#xA;&#xA;#Technology #HowTo #DevOps&#xA;&#xA;!--more--&#xA;&#xA;Requirements&#xA;&#xA;Our immediate need was to provision a Chef Server for our build infrastructure that we would be distributing to about twenty teams. But in addition to this we have brought in Chef to train several classes of our developers. After the classes concluded there were many requests for individual Chef Server tenancies for testing.&#xA;&#xA;Using Chef Server within our infrastructure was an afterthought because most of our virtual machines had a very short lifespan. Since we could have several dozen development teams wanting their own Chef Server deployments we needed a solution to not only easily deploy a Chef Server, but to hydrate it with the data necessary for each OpenStack tenancy. This included both user and client authentication information.&#xA;&#xA;After a bit of back and forth I was able to isolate the requirements for our Chef Server infrastructure:&#xA;&#xA;It must use the Chef Server community cookbook and the Omnibus packages provided by Chef;&#xA;&#xA;It should be quick and easy to deploy a new instance because we may be doing so for several dozen tenancies in OpenStack;&#xA;&#xA;All user and client keys should be generated locally and the server should be hydrated during the initial convergence run;&#xA;&#xA;Playing With Metal&#xA;&#xA;I was first introduced to Chef Metal at this past year’s ChefConf where John Keiser gave an excellent talk. My team has a lot of experience using Vagrant, but it made much more sense to me to include a metal recipe with our Chef infrastructure cookbook. It could serve as both a teaching aide, and would also make our internal cookbooks much more versatile. Throughout the discovery process I found the community Chef Server Populator cookbook, ended up completely rewriting it to use Chef resources to modify the Chef Server, and ultimately used Chef Zero to bootstrap everything.&#xA;&#xA;Using Chef Metal I was able to easily distribute a recipe with our Chef infrastructure cookbook that would provision a Chef Server very easily using the machine resource. The recipe that I began with looked very similar to what is below. It first laid down changes to the base operating system using our base cookbook, and simply used the community cookbook to install the Chef Server from the Omnibus packages. It was very straight forward.&#xA;&#xA;Unfortunately I still needed to hydrate the local data into the newly minted Chef Server. Luckily for me the cats over at Heavy Water Operations have solved this problem and provided the Chef Server Populator cookbook. There were only a few minor modifications that I needed to make to support client validation keys. But other than that everything seemed to be smooth sailing.&#xA;&#xA;Chef Zero&#xA;&#xA;At first, with only a few minor changes, the Chef Server Populator cookbook seemed to be the answer to my problems. I had a few cases that were not covered, but these were all pretty simple extensions. It was natural and made sense to convert our Chef infrastructure cookbook into a Chef repository and use Chef Zero as an in-memory Chef Server during the initial provisioning.&#xA;&#xA;That worked out quite well at first. I was able to cobble together a simple Rake task to generate and write out the private and public keys to JSON data bag items. My metal recipe started to look a lot more complex than I had initially intended, and it didn’t seem as clean as I thought it could be. As I was reading through the code for the Chef Metal Fog driver a light bulb went off in my head: I could use the Cheffish gem Chef resources and build the data on the fly!&#xA;&#xA;Chef within Chef&#xA;&#xA;I ended up completely rewriting the Chef Server Populator cookbook. My fork now used the Chef resources provided by the Cheffish gem to read from data bag items and create the user and client records against the Chef Server node. The beauty of this approach is that I no longer had to execute clunky knife commands since in Chef 11 erchef exposed an API to pass both user and client public keys. The cookbook is now much more clean and simple to grok.&#xA;&#xA;The code for creating the user and client keys was also able to use the same Chef resources from Cheffish. Instead of operating against our newly provisioned Chef Server it executed against the in-memory server provided by Chef Zero.&#xA;&#xA;Using keys which are generated inside of the metal recipe is not idempotent. There were two ways that I went about solving this problem. This first was merely reading in the private keys off disk and delegating the generation to some external process. The second would be to use the Chef resource to generate private keys and allow it to manage if they needed to be updated or not. Ultimately it worked out that if the keys were generated outside of the metal recipe it was much more straightforward. Here is a full example where keys for clients were generated outside, but user keys are generated on the fly:&#xA;&#xA;https://gist.github.com/johnbellone/5a72111898c7709dddeb&#xA;&#xA;Tying The Bow&#xA;&#xA;The final result was a complete cookbook refactor which uses Chef resources to hydrate a newly provisioned Chef Server. The default recipe uses node attributes and creates both client and user resources on the new server. A data bag recipe uses a Chef data bag search to find items and applies them to the node attributes prior to including the default recipe.&#xA;&#xA;Since Chef Zero provides a fully functioning in-memory Chef Server we are able to use Chef resources to add data bag items with locally generated public keys. When using the Chef Metal recipe this data is now made accessible to the data bag search, and thus it gives us an elegant way to hydrate a Chef Server. I have provided an example of this inside of my fork of the cookbook which illustrates all of the steps above.&#xA;&#xA;As I mentioned at the top of this post I originally started work on this solution to allow us to quickly deploy our build infrastructure to multiple tenancies within our private cloud. In a future post I will explain how my team was able to create an easily deployable continuous integration framework using the community Jenkins recipe.&#xA;&#xA;If you are reading this post and are interested in joining our growing group of Chef technologists at Bloomberg feel free to reach out to me. We are hiring!]]&gt;</description>
      <content:encoded><![CDATA[<p>At <a href="http://jobs.bloomberg.com/search/?q=chef">Bloomberg</a> my team is tasked with supporting infrastructure for all of our consumer and subscription web properties. We have been using Chef to solve some of our problems around configuration management. Most of our recipes were built using Chef Solo and eventually deployed on our cloud infrastructure without a Chef Server. As we began to plan to deploy software services to the teams that we support we quickly began to realize that it would be nearly impossible to manage multiple node deployments without Chef Server.</p>

<p><a href="https://jbellone.blog/tag:Technology" class="hashtag"><span>#</span><span class="p-category">Technology</span></a> <a href="https://jbellone.blog/tag:HowTo" class="hashtag"><span>#</span><span class="p-category">HowTo</span></a> <a href="https://jbellone.blog/tag:DevOps" class="hashtag"><span>#</span><span class="p-category">DevOps</span></a></p>



<h3 id="requirements" id="requirements">Requirements</h3>

<p>Our immediate need was to provision a Chef Server for our build infrastructure that we would be distributing to about twenty teams. But in addition to this we have brought in <a href="https://getchef.com/">Chef</a> to train several classes of our developers. After the classes concluded there were many requests for individual Chef Server tenancies for testing.</p>

<p>Using Chef Server within our infrastructure was an afterthought because most of our virtual machines had a very short lifespan. Since we could have several dozen development teams wanting their own Chef Server deployments we needed a solution to not only easily deploy a Chef Server, but to hydrate it with the data necessary for each OpenStack tenancy. This included both user and client authentication information.</p>

<p>After a bit of back and forth I was able to isolate the requirements for our Chef Server infrastructure:</p>
<ol><li><p>It must use the <a href="https://github.com/opscode-cookbooks/chef-server">Chef Server community cookbook</a> and the <a href="https://github.com/opscode/omnibus-chef-server">Omnibus packages provided by Chef</a>;</p></li>

<li><p>It should be quick and easy to deploy a new instance because we may be doing so for several dozen tenancies in OpenStack;</p></li>

<li><p>All user and client keys should be generated locally and the server should be hydrated during the initial convergence run;</p></li></ol>

<h3 id="playing-with-metal" id="playing-with-metal">Playing With Metal</h3>

<p>I was first introduced to <a href="https://github.com/opscode/chef-metal">Chef Metal</a> at this past year’s ChefConf where <a href="http://slides.com/jkeiser/chef-metal">John Keiser gave an excellent talk</a>. My team has a lot of experience using Vagrant, but it made much more sense to me to include a metal recipe with our Chef infrastructure cookbook. It could serve as both a teaching aide, and would also make our internal cookbooks much more versatile. Throughout the discovery process I found the community <a href="https://github.com/hw-cookbooks/chef-server-populator">Chef Server Populator cookbook</a>, ended up completely rewriting it to use Chef resources to modify the Chef Server, and ultimately used Chef Zero to bootstrap everything.</p>

<p>Using Chef Metal I was able to easily distribute a recipe with our Chef infrastructure cookbook that would provision a Chef Server very easily using the <em>machine resource.</em> The recipe that I began with looked very similar to what is below. It first laid down changes to the base operating system using our base cookbook, and simply used the community cookbook to install the Chef Server from the Omnibus packages. It was very straight forward.</p>

<p>Unfortunately I still needed to hydrate the local data into the newly minted Chef Server. Luckily for me the cats over at <a href="http://hw-ops.com/">Heavy Water Operations</a> have solved this problem and provided the <a href="https://github.com/hw-cookbooks/chef-server-populator">Chef Server Populator cookbook</a>. There were only a few minor modifications that I needed to make to support client validation keys. But other than that everything seemed to be smooth sailing.</p>

<h4 id="chef-zero" id="chef-zero">Chef Zero</h4>

<p>At first, with only a few minor changes, the Chef Server Populator cookbook seemed to be the answer to my problems. I had a few cases that were not covered, but these were all pretty simple extensions. It was natural and made sense to convert our Chef infrastructure cookbook into a Chef repository and use <a href="https://github.com/opscode/chef-zero">Chef Zero</a> as an in-memory Chef Server during the initial provisioning.</p>

<p>That worked out quite well at first. I was able to cobble together a simple Rake task to generate and write out the private and public keys to JSON data bag items. My metal recipe started to look a lot more complex than I had initially intended, and it didn’t seem as clean as I thought it could be. As I was reading through the code for the <a href="https://github.com/opscode/chef-metal-fog">Chef Metal Fog driver</a> a light bulb went off in my head: I could use the <a href="https://github.com/opscode/cheffish">Cheffish gem</a> Chef resources and build the data on the fly!</p>

<h4 id="chef-within-chef" id="chef-within-chef">Chef within Chef</h4>

<p>I ended up completely rewriting the Chef Server Populator cookbook. <a href="https://github.com/johnbellone/chef-server-populator">My fork</a> now used the Chef resources provided by the Cheffish gem to read from data bag items and create the user and client records against the Chef Server node. The beauty of this approach is that I no longer had to execute clunky knife commands since in Chef 11 erchef exposed an API to pass both user and client public keys. The cookbook is <a href="https://github.com/johnbellone/chef-server-populator">now much more clean and simple to grok</a>.</p>

<p>The code for creating the user and client keys was also able to use the same Chef resources from Cheffish. Instead of operating against our newly provisioned Chef Server it executed against the in-memory server provided by Chef Zero.</p>

<p>Using keys which are generated inside of the metal recipe is not idempotent. There were two ways that I went about solving this problem. This first was merely reading in the private keys off disk and delegating the generation to some external process. The second would be to use the Chef resource to generate private keys and allow it to manage if they needed to be updated or not. Ultimately it worked out that if the keys were generated outside of the metal recipe it was much more straightforward. Here is a full example where keys for clients were generated outside, but user keys are generated on the fly:</p>

<p><script src="https://gist.github.com/johnbellone/5a72111898c7709dddeb.js"></script></p>

<h4 id="tying-the-bow" id="tying-the-bow">Tying The Bow</h4>

<p>The final result was a complete <a href="https://github.com/johnbellone/chef-server-populator">cookbook refactor</a> which uses Chef resources to hydrate a newly provisioned Chef Server. The default recipe uses node attributes and creates both client and user resources on the new server. A data bag recipe uses a Chef data bag search to find items and applies them to the node attributes prior to including the default recipe.</p>

<p>Since Chef Zero provides a fully functioning in-memory Chef Server we are able to use Chef resources to add data bag items with locally generated public keys. When using the Chef Metal recipe this data is now made accessible to the data bag search, and thus it gives us an elegant way to hydrate a Chef Server. I have provided an example of this <a href="https://github.com/johnbellone/chef-server-populator/blob/master/examples/chef-server.rb">inside of my fork of the cookbook</a> which illustrates all of the steps above.</p>

<p>As I mentioned at the top of this post I originally started work on this solution to allow us to quickly deploy our build infrastructure to multiple tenancies within our private cloud. In a future post I will explain how my team was able to create an easily deployable continuous integration framework using the <a href="https://github.com/opscode-cookbooks/jenkins">community Jenkins recipe</a>.</p>

<p>If you are reading this post and are interested in joining our growing group of Chef technologists at Bloomberg feel free to reach out to me. <a href="http://jobs.bloomberg.com/search/?q=chef">We are hiring</a>!</p>
]]></content:encoded>
      <guid>https://jbellone.blog/hydration-of-a-chef-server</guid>
      <pubDate>Sat, 18 Oct 2014 00:24:05 +0000</pubDate>
    </item>
    <item>
      <title>Keeping Cool in The Face of Disaster</title>
      <link>https://jbellone.blog/keeping-cool-in-the-face-of-disaster?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In Washington, during the peak of Hurricane Sandy, my power went out. The wind outside was howling, the UPS that my MacBook was connected to began to scream, and my Comcast Internet was hosed. We were in the middle of manually failing over our application servers to our New Jersey datacenter, and now I had to continue on my T-mobile tethered cellphone.&#xA;&#xA;#Technology #Leadership #Storytime&#xA;&#xA;!--more--&#xA;&#xA;Disaster recovery (DR) is serious business. When a catastrophe strikes you’re never completely prepared. At Bloomberg, as I imagine most large companies, we take care in designing our systems to be reslient. For us, this means highly available, uninterrupted service for all of our clients. In order to be able to sustain a complete datacenter outage we must be fully confident in our automated solutions for failover. A disaster recovery plan is no good if it hasn’t been tested and a disaster is the wrong time to execute that test.&#xA;&#xA;Wikipedia says that there are seven tiers to disaster recovery but this gives a thousand foot view of how to plan for the technical portion of business continuity. From experience there are a few practical actions you and your team can take to keep your cool during a disaster.&#xA;&#xA;Reboot your machines on a regular basis.&#xA;&#xA;Years ago, any system administrator worth their salt laughed at those who counted their uptime in years. If you never reboot your machine how can you be sure that it will actually come back online in a usable state? A few thousand dollars worth of hardware is no good if you are not sure how to QC it before putting it in front of customer traffic. Spend the time and make a checklist of the services that you want to come online automatically after booting.&#xA;&#xA;Work towards making your scalable systems ephemeral.&#xA;&#xA;Scaling your application out horizontally does not immediately mean that the individual nodes are capable of spinning up and down without any major problems. This often means designing all of your services with high availability in mind. This is much more than just sticking HAProxy in front of all your application endpoints. You need to be sure that your applications and services will fail gracefully, or better yet, swing to their alternate slave.&#xA;&#xA;Don’t put all your eggs in one basket.&#xA;&#xA;When deploying physical hardware in a datacenter you wouldn’t put it all on the same power circuit. Unfortunately there is often no longer physical access to hardware. All provisioning is performed over the wire. How much sense would it make for all of your company’s virtual machines all being tenants on the same physical hardware? Not much at all! If possible ask your service provider if their compute services are rack aware.&#xA;&#xA;Package complex steps into shell scripts.&#xA;&#xA;If you cannot automatically orchestrate a failover of a machine take the time and define a clear and concise shell script to perform the work. It is much easier in documentation to point to a single bash script which illustrates the more complex procedures. In the middle of the night your operations staff may not have any context in the problem that they’re trying to solve. Rather than calling an all hands on deck they can run through a list of procedures.&#xA;&#xA;Clearly document manual procedures. The analog way.&#xA;&#xA;This brings me to the final item on the checklist. There’s a lot of companies out there that offer digital solutions for organizing your team and their work. Did you know that the popular Heroku Platform as a Service is built on top of Amazon Web Services? If that fancy SaaS application which contains all of your documents goes offline you’re now unable to bring your systems back online manually. Spend the time and physically document procedures and distribute it to all of your team members. Especially your operations staff.&#xA;&#xA;These are only but a few action points that you must cover while planning for business continuity. As I mentioned above this is serious business. You should begin first with hiring a proper operations staff, and remember that these should not_ be the same people that are your developers. Writing code and managing infrastructure are two completely separate beasts. But your engineers should start by designing their systems to sustain failure at any level in your stack.&#xA;&#xA;I hope that these steps help you while planning for failure. If you find this useful give me a shout and let me know!&#xA;&#xA;  !--more--&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>In Washington, during the peak of Hurricane Sandy, my power went out. The wind outside was howling, the UPS that my MacBook was connected to began to scream, and my Comcast Internet was hosed. We were in the middle of manually failing over our application servers to our New Jersey datacenter, and now I had to continue on my T-mobile tethered cellphone.</p>

<p><a href="https://jbellone.blog/tag:Technology" class="hashtag"><span>#</span><span class="p-category">Technology</span></a> <a href="https://jbellone.blog/tag:Leadership" class="hashtag"><span>#</span><span class="p-category">Leadership</span></a> <a href="https://jbellone.blog/tag:Storytime" class="hashtag"><span>#</span><span class="p-category">Storytime</span></a></p>



<p>Disaster recovery (DR) is serious business. When a catastrophe strikes you’re never completely prepared. At Bloomberg, as I imagine most large companies, we take care in designing our systems to be reslient. For us, this means highly available, uninterrupted service for all of our clients. In order to be able to sustain a complete datacenter outage we <em>must</em> be fully confident in our automated solutions for failover. A disaster recovery plan is no good if it hasn’t been tested and a disaster is the wrong time to execute that test.</p>

<p>Wikipedia says that there are <a href="http://en.wikipedia.org/wiki/Seven_tiers_of_disaster_recovery?ref=jbellone.blog">seven tiers to disaster recovery</a> but this gives a thousand foot view of how to plan for the technical portion of business continuity. From experience there are a few practical actions you and your team can take to keep your cool during a disaster.</p>

<h3 id="reboot-your-machines-on-a-regular-basis" id="reboot-your-machines-on-a-regular-basis">Reboot your machines on a regular basis.</h3>

<p>Years ago, any system administrator worth their salt laughed at those who counted their uptime in <em>years.</em> If you never reboot your machine how can you be sure that it will actually come back online in a <em>usable</em> state? A few thousand dollars worth of hardware is no good if you are not sure how to QC it before putting it in front of customer traffic. Spend the time and make a checklist of the services that you want to come online automatically after booting.</p>

<h3 id="work-towards-making-your-scalable-systems-ephemeral" id="work-towards-making-your-scalable-systems-ephemeral">Work towards making your scalable systems ephemeral.</h3>

<p>Scaling your application out horizontally does not immediately mean that the individual nodes are capable of spinning up and down without any major problems. This often means designing all of your services with <a href="http://en.wikipedia.org/wiki/High_availability?ref=jbellone.blog">high availability</a> in mind. This is much more than just sticking <a href="http://haproxy.1wt.eu/?ref=jbellone.blog">HAProxy</a> in front of all your application endpoints. You need to be sure that your applications and services will fail gracefully, or better yet, swing to their alternate slave.</p>

<h3 id="don-t-put-all-your-eggs-in-one-basket" id="don-t-put-all-your-eggs-in-one-basket">Don’t put all your eggs in one basket.</h3>

<p>When deploying physical hardware in a datacenter you wouldn’t put it all on the same power circuit. Unfortunately there is often no longer physical access to hardware. All provisioning is performed over the wire. How much sense would it make for all of your company’s virtual machines all being tenants on the same physical hardware? Not much at all! If possible ask your service provider if their compute services are <a href="http://www.rackspace.com/blog/open-compute-gains-more-awareness-at-openstack-summit/?ref=jbellone.blog">rack aware</a>.</p>

<h3 id="package-complex-steps-into-shell-scripts" id="package-complex-steps-into-shell-scripts">Package complex steps into shell scripts.</h3>

<p>If you cannot automatically orchestrate a failover of a machine take the time and define a clear and concise shell script to perform the work. It is much easier in documentation to point to a single bash script which illustrates the more complex procedures. In the middle of the night your operations staff may not have any context in the problem that they’re trying to solve. Rather than calling an all hands on deck they can run through a list of procedures.</p>

<h3 id="clearly-document-manual-procedures-the-analog-way" id="clearly-document-manual-procedures-the-analog-way">Clearly document manual procedures. The analog way.</h3>

<p>This brings me to the final item on the checklist. There’s a lot of companies out there that offer digital solutions for organizing your team and their work. Did you know that the popular <a href="http://www.heroku.com/?ref=jbellone.blog">Heroku</a> Platform as a Service is built on top of <a href="http://aws.amazon.com/?ref=jbellone.blog">Amazon Web Services</a>? If that fancy SaaS application which contains all of your documents goes offline you’re now unable to bring your systems back online manually. Spend the time and physically document procedures and distribute it to all of your team members. Especially your operations staff.</p>

<p>These are only but a few action points that you must cover while planning for business continuity. As I mentioned above this is <em>serious</em> business. You should begin first with hiring a proper operations staff, and remember that these should <em>not</em> be the same people that are your developers. Writing code and managing infrastructure are two completely separate beasts. But your engineers should start by designing their systems to sustain failure at any level in your stack.</p>

<p>I hope that these steps help you while planning for failure. If you find this useful give me a shout and <a href="http://twitter.com/johnbellone?ref=jbellone.blog">let me know</a>!</p>

<blockquote>
</blockquote>
]]></content:encoded>
      <guid>https://jbellone.blog/keeping-cool-in-the-face-of-disaster</guid>
      <pubDate>Tue, 17 Sep 2013 04:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>