<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Lucas Roesler</title>
    <link>https://lucasroesler.com/posts/</link>
    <description>Recent content in Posts on Lucas Roesler</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 16 Sep 2023 00:00:00 +0200</lastBuildDate><atom:link href="https://lucasroesler.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Have your Debian cake and eat it too</title>
      <link>https://lucasroesler.com/posts/2023/0-mixing-package-sources-in-debian/</link>
      <pubDate>Sat, 16 Sep 2023 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2023/0-mixing-package-sources-in-debian/</guid>
      <description>I recently switched to Debian because I wanted a rock solid plain Gnome environment for my daily driver / work laptop. The main downside is that even Debian testing is a bit more conservative with updates than I would like for certain applications. Normally I would use and recommend Flatpak, but there are a few edge cases where I need to use the Debian package, which leads me to today&amp;rsquo;s post.</description>
    </item>
    
    <item>
      <title>Hard won lessons about Github Actions: Really fixed it this time, number 42.</title>
      <link>https://lucasroesler.com/posts/2022/2-github-actions-lessons/</link>
      <pubDate>Thu, 27 Oct 2022 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2022/2-github-actions-lessons/</guid>
      <description>&lt;p&gt;I have spent the two weeks modernizing a long dormant project at Contiamo. Not only did this require updating various dependencies and subsequently parts of the code base, but it also meant updating an old Jenkinfile into a Github Action workflow. 😬😬😬&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go 1.18 Released</title>
      <link>https://lucasroesler.com/posts/2022/1-go-1.18-release/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2022/1-go-1.18-release/</guid>
      <description>Go 1.18 was released last week (March 15) and I have finally had a chance to play with it. I have been excited for it in the month leading to the release, reading almost every preview that I saw on Twitter, and the release has not disappointed! I think the last release that got me this excited was 1.16, when they added embed.
Today, I want to share a few of things that made me a bit more excited than usual for a Go release.</description>
    </item>
    
    <item>
      <title>Gluten Free Pancakes</title>
      <link>https://lucasroesler.com/posts/2022/0-gluten-free-pancake/</link>
      <pubDate>Mon, 03 Jan 2022 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2022/0-gluten-free-pancake/</guid>
      <description>Anyone that knows that knows me also knows that breakfast (American breakfast) is one of my favorite meals. Eggs, bacon, pancakes, waffles, home fries, coffee, orange juice, and more. I love it all. Cooking is not something I normally talk about. However, for various reasons, I have needed to learn more about gluten free cooking and I have finally found/create a recipe for gluten free pancakes. I am tired of recreating it and looking up various conversions, so I writing it down here.</description>
    </item>
    
    <item>
      <title>A foray into OpenTelemetry with OpenFaaS</title>
      <link>https://lucasroesler.com/posts/2021/opentelemetry-and-openfaas/</link>
      <pubDate>Sun, 12 Dec 2021 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2021/opentelemetry-and-openfaas/</guid>
      <description>I have always been a fan of tracing. My first taste of it was with NewRelic, but the development of OpenTracing and more recently OpenTelemetry have made it an easy must have in every project I start. I have created a new walk-through: Tracing and Observability with OpenFaaS to show you how to add OpenTelemetry to your Python Flask functions.
This post won&amp;rsquo;t go through the walk-through, the walk-through already does that.</description>
    </item>
    
    <item>
      <title>Easy settings management for Python functions with Pydantic</title>
      <link>https://lucasroesler.com/posts/2021/pydantic-settings-for-openfaas-functions/</link>
      <pubDate>Tue, 03 Aug 2021 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2021/pydantic-settings-for-openfaas-functions/</guid>
      <description>File this under quick tips and tricks for Python functions in OpenFaas.
I just learned about Pydantic&amp;rsquo;s support for reading settings from secret files and it fits perfectly with secrets in OpenFaaS. If you love Python or you are writing Python functions in OpenFaas, this is a great way to simplify your configuration parsing.
I am going to keep this short and sweet. Let&amp;rsquo;s say you have an OpenFaas function that needs to access a database.</description>
    </item>
    
    <item>
      <title>Using Tox and PyTest with OpenFaaS</title>
      <link>https://lucasroesler.com/posts/2021/test-python-functions/</link>
      <pubDate>Sat, 06 Mar 2021 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2021/test-python-functions/</guid>
      <description>I think it is an uncontroversial statement to say testing is important in software development. Writing tests may not always be fun, but nothing is a sweet as that moment when a unit test catches a bug before you deploy.
In OpenFaaS we have tons of tests in each project, even the certifier itself runs a short suite of end-to-end tests. But, not all of our function templates have first class testing support.</description>
    </item>
    
    <item>
      <title>Event driven functions powered by Postgres</title>
      <link>https://lucasroesler.com/posts/2021/event-driven-faasd-with-postgres/</link>
      <pubDate>Sat, 30 Jan 2021 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2021/event-driven-faasd-with-postgres/</guid>
      <description>&lt;p&gt;An event-driven architecture can let you seamlessly extend your application or improve the scalability, if you can handle the eventual consistency. But your app may not be ready for this yet, or you don&amp;rsquo;t own the code in the app. A recently added a feature to &lt;a href=&#34;https://github.com/openfaas/faasd&#34;&gt;&lt;code&gt;faasd&lt;/code&gt;&lt;/a&gt; got me thinking about event driven architecture powered by the Postgres WAL. Which means we can seamlessly extend your app without needing to change the app!&lt;/p&gt;
&lt;p&gt;This post will show you how to quickly deploy Postgresql along with an event listener and some custom functions. From there it’s up to you what you build.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Customizing the keyboard layout on the Dell XPS 13</title>
      <link>https://lucasroesler.com/posts/2021/custom-linux-keyboard-layout/</link>
      <pubDate>Sun, 10 Jan 2021 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2021/custom-linux-keyboard-layout/</guid>
      <description>Fixing the Dell XPS arrow keys using XKB</description>
    </item>
    
    <item>
      <title>Moving the data directory of Multipass and Docker</title>
      <link>https://lucasroesler.com/posts/2020/multipass-data-partition/</link>
      <pubDate>Sun, 13 Dec 2020 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2020/multipass-data-partition/</guid>
      <description>&lt;p&gt;This weekend was my first adventure in &lt;a href=&#34;https://snapcraft.io/&#34;&gt;Snaps&lt;/a&gt;. Unfortunately, this adventure quickly devolved into a murder mystery, for my hard drive. The first snap I try to compile triggers a &amp;ldquo;disk is almost out of space&amp;rdquo; notification?! Turns out building Snaps requires a surprising amount of disk space. But it wasn&amp;rsquo;t entirely Multipass&amp;rsquo; fault, my good old friend Docker was eating up a decent chunk of my disk too.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Action Packed Functions</title>
      <link>https://lucasroesler.com/posts/2019/openfaas-github-actions/</link>
      <pubDate>Sat, 28 Sep 2019 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2019/openfaas-github-actions/</guid>
      <description>A quick review of GitHub Actions and how to use them for CI/CD of your OpenFaaS Functions</description>
    </item>
    
    <item>
      <title>Developing OpenFaaS KinD-ly</title>
      <link>https://lucasroesler.com/posts/2019/kind-development-for-openfaas/</link>
      <pubDate>Sun, 14 Apr 2019 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2019/kind-development-for-openfaas/</guid>
      <description>Creating an isolated OpenFaaS Development environment with KinD</description>
    </item>
    
    <item>
      <title>When sequential tests aren&#39;t</title>
      <link>https://lucasroesler.com/posts/2019/golang-parallel-testing/</link>
      <pubDate>Sat, 02 Feb 2019 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2019/golang-parallel-testing/</guid>
      <description>A brief reminder that go will default to testing packages in parallel</description>
    </item>
    
    <item>
      <title>Golang long-polling: a tale of server timeouts</title>
      <link>https://lucasroesler.com/posts/2018/golang-server-timeouts/</link>
      <pubDate>Sun, 29 Jul 2018 00:00:00 +0200</pubDate>
      
      <guid>https://lucasroesler.com/posts/2018/golang-server-timeouts/</guid>
      <description>&lt;p&gt;I recently had a week long battle implementing HTTP long-polling. As so often
happens in long debugging session in software development, my final fix was
one line!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Struct embedding for custom dev responses</title>
      <link>https://lucasroesler.com/posts/2018/golang-struct-embedding/</link>
      <pubDate>Sat, 27 Jan 2018 00:00:00 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2018/golang-struct-embedding/</guid>
      <description>&lt;p&gt;I had to learn about Go struct embedding the other day and I wanted to document my
fix. In my use case I wanted to add some extra information to an API response to include
some meta data from kubernetes cluster and/or some extra error information.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Deploying a private registry in Docker Swarm</title>
      <link>https://lucasroesler.com/posts/2017/docker-registries-in-docker-swarm/</link>
      <pubDate>Mon, 09 Oct 2017 12:00:00 +0000</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/docker-registries-in-docker-swarm/</guid>
      <description>&lt;p&gt;At &lt;a href=&#34;https://contiamo.com&#34;&gt;Contiamo&lt;/a&gt; I am currently working a project that will eventually integrate with &lt;a href=&#34;https://www.openfaas.com/&#34;&gt;OpenFaaS&lt;/a&gt;.  I am really excited about this project because we will soon bring some serverless magic to data scientists that use Contiamo.  That is, once I figure out how to deploy a private Docker registry inside a Docker Swarm.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Berlin and Golang</title>
      <link>https://lucasroesler.com/posts/2017/starting-golang/</link>
      <pubDate>Wed, 02 Aug 2017 11:00:00 -0400</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/starting-golang/</guid>
      <description>&lt;p&gt;At the beginning of the month I left &lt;a href=&#34;https://teem.com/&#34;&gt;Teem&lt;/a&gt; I was Director of Engineering and it was and still is a great company.  There are some amazing developers there, so if you are looking for a job in SLC, hit them up.  This weekend (Aug 5) I will be moving to Berlin to start a new role at &lt;a href=&#34;https://www.contiamo.com/&#34;&gt;Contiamo&lt;/a&gt; and will be working on the &lt;a href=&#34;https://docs.contiamo.com/en/labs/&#34;&gt;Labs feature&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Home Brewers Association Ruthless Rye Clone</title>
      <link>https://lucasroesler.com/posts/2017/beer-hba-ruthless-rye-clone/</link>
      <pubDate>Sat, 08 Jul 2017 00:00:00 +0000</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/beer-hba-ruthless-rye-clone/</guid>
      <description>&lt;p&gt;This recipe is inspired by the &lt;a href=&#34;https://www.homebrewersassociation.org/homebrew-recipe/sierra-nevada-ruthless-rye-clone/&#34;&gt;Seirra Nevada Ruthless Rye Clone&lt;/a&gt; written up by the Home Brewers Association.  I have adjusted it to be a partial mash recipe with about 8 lbs of grains.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Salt City Brew Supply Orange Honey Wheat</title>
      <link>https://lucasroesler.com/posts/2017/beer-scbs-orange-honey-wheat/</link>
      <pubDate>Sat, 24 Jun 2017 00:00:00 +0000</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/beer-scbs-orange-honey-wheat/</guid>
      <description>&lt;p&gt;I just finished my first official &amp;ldquo;summer beer&amp;rdquo; of the year, an Orange Honey Wheat.  This one was inspire by my wife while at the store &amp;ldquo;you should do this one, it uses Utah honey!&amp;rdquo;, thank you &lt;a href=&#34;http://techlady.ninja&#34;&gt;tech lady ninja&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>SSL Expiry Quick and Simple</title>
      <link>https://lucasroesler.com/posts/2017/ssl-expiration-checking/</link>
      <pubDate>Sun, 11 Jun 2017 11:00:00 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/ssl-expiration-checking/</guid>
      <description>&lt;p&gt;Ever have that feeling you are forgetting something right as you leave work? You are probably thinking about your keys or your lunch box but I am talking about your SSL certificate.  They don&amp;rsquo;t last forever, we know this when we setup SSL but that doesn&amp;rsquo;t stop it from sneaking up on us.  It has happened to the big guys like &lt;a href=&#34;https://thenextweb.com/apps/2015/04/30/oops-instagram-forgot-to-renew-its-ssl-certificate/#.tnw_9kCFpT58&#34;&gt;Instagram&lt;/a&gt; and &lt;a href=&#34;http://www.pcworld.com/article/2906216/expired-google-certificate-temporarily-disrupts-gmail-service.html&#34;&gt;Google&lt;/a&gt;, at &lt;a href=&#34;http://status.teem.com/incidents/ddtys5ss4mw5&#34;&gt;Teem recently&lt;/a&gt;, and of course for myself with my own home server.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Your API&#39;s rat nest</title>
      <link>https://lucasroesler.com/posts/2017/api-rats-nest/</link>
      <pubDate>Mon, 05 Jun 2017 21:22:00 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/api-rats-nest/</guid>
      <description>&lt;p&gt;Recently, I have seen several articles talking about RESTful API design.  Of
course this is also a common topic of discussion for the engineers at Teem.  I
want to use (and write) APIs that are easy to understand and explain and the
fastest way to complicate your API is nested routes. Just don&amp;rsquo;t do it! Do not
create nested routes in your API.  Let&amp;rsquo;s keep our APIs simple and create one
endpoint per resource and if filters are needs, use GET parameters. This is
simpler to document and simpler to maintain and ultimately, easier to use.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Take Care of Your People</title>
      <link>https://lucasroesler.com/posts/2017/take-care-of-your-people/</link>
      <pubDate>Sun, 21 May 2017 22:00:00 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/take-care-of-your-people/</guid>
      <description>&lt;p&gt;When I first started this blog, I started with &lt;a href=&#34;https://lucasroesler.com/posts/2017/management-philosophy/&#34;&gt;My Management Philosophy&lt;/a&gt;.  In short,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;be a multiplier for your team and reduce friction&amp;hellip;
Successful managers make other people better at their jobs, “multiplying”
their productivity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When I wrote this, I was focusing on the ideas as a guide. &amp;ldquo;Should I do X?
Does it multiply my team&amp;rsquo;s effort?  Does it simplify their job?&amp;rdquo; Underlying
this is that good leadership requires &lt;em&gt;empathy&lt;/em&gt; and &lt;em&gt;trust&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Living Our Culture at Teem via Peer Reviews</title>
      <link>https://lucasroesler.com/posts/2017/how-we-live-the-teem-engineering-values/</link>
      <pubDate>Sat, 22 Apr 2017 12:16:11 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/how-we-live-the-teem-engineering-values/</guid>
      <description>&lt;p&gt;About a year ago we set down to document the core values of the engineering at
Teem. After a lot of discussion we narrowed it to three core ideas&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;maximize positive impact&lt;/li&gt;
&lt;li&gt;communicate&lt;/li&gt;
&lt;li&gt;be a good friend&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I would add one more unofficial value: mentorship and continuous learning.
About the same time we also started thinking about how we describe/define an
engineers career path and we quickly realized that measuring progress is hard
and that measuring commitment to our core values is even harder.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Delete or not to delete</title>
      <link>https://lucasroesler.com/posts/2017/delete-or-not-to-delete/</link>
      <pubDate>Sun, 02 Apr 2017 00:00:00 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/delete-or-not-to-delete/</guid>
      <description>Should you remove data from the database or simply mark it as deleted?</description>
    </item>
    
    <item>
      <title>How I Git</title>
      <link>https://lucasroesler.com/posts/2017/how-i-git/</link>
      <pubDate>Sun, 19 Mar 2017 00:00:00 -0600</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/how-i-git/</guid>
      <description>&lt;p&gt;Perhaps the one piece of ubiquitous technology that you will find at any new
tech company is &lt;code&gt;git&lt;/code&gt;.  There are a couple of other technologies that you will
probably find, like AWS, but &lt;code&gt;git&lt;/code&gt; is the only one I expect to find everywhere. It is
also, surprisingly, many developers number one frienemy.  I want to share some
of my favorite tips and tweaks that I have used over the years to make it all
friend and never my enemy.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>A spring Hefe</title>
      <link>https://lucasroesler.com/posts/2017/beer-spring-hefeweizen/</link>
      <pubDate>Sun, 05 Mar 2017 00:00:00 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/beer-spring-hefeweizen/</guid>
      <description>&lt;p&gt;A traditional Bavarian Hefeweizen: medium body, cloudy, malty, and spicy,
with a smooth mouth-feel and dense, whipped-cream head.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Zero downtime deploys: A tale of Django migrations</title>
      <link>https://lucasroesler.com/posts/2017/automatic-migration-validation/</link>
      <pubDate>Mon, 20 Feb 2017 00:00:00 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/automatic-migration-validation/</guid>
      <description>&lt;p&gt;At Teem, we aim for zero down-time deploys; so, one of the most
important things we must validate is that things will not break mid-deploy!&lt;/p&gt;
&lt;p&gt;The most sensitive step of the deploy process is the changes to our database.
Prior to the automation I am about to describe, validation of the database
migrations required specialized knowledge about Postgres, the changes to the
application model, load on the database for that model, and a bit of general
experience. This obviously slows down reviews and subsequently deploys. Worse,
it was simply too easy to miss problem migrations when depending on only peer
reviews. To make our lives easier we created a series of validation checks to
ensure that each database migration will be backwards compatible.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Postgres Joins and Django Querysets</title>
      <link>https://lucasroesler.com/posts/2017/django-queryset-optimizing-joins/</link>
      <pubDate>Mon, 06 Feb 2017 20:00:00 +0000</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/django-queryset-optimizing-joins/</guid>
      <description>Dealing with inefficient joins in Django&amp;rsquo;s ORM</description>
    </item>
    
    <item>
      <title>My Management Philosophy</title>
      <link>https://lucasroesler.com/posts/2017/management-philosophy/</link>
      <pubDate>Sun, 29 Jan 2017 20:00:00 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/management-philosophy/</guid>
      <description>&lt;p&gt;The other day I was having lunch with a friend when he asked what resources I
use to learn about management and tech leadership in general. I will share
some recommendations at the end, but my answer to him got me thinking about
my philosophy around management and how to be good at it, which is what I really
want to share here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR: be a multiplier for your team and reduce friction.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Spicy Winter Porter</title>
      <link>https://lucasroesler.com/posts/2017/beer-spicy-winter-warmer/</link>
      <pubDate>Sun, 15 Jan 2017 13:48:19 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/beer-spicy-winter-warmer/</guid>
      <description>&lt;p&gt;I just finished my winter beer.  I usually do one dark spicy beer for the winter
season. Last year was the &amp;ldquo;Better Not Pout Stout&amp;rdquo;, this year is the less
excitingly named &amp;ldquo;Spicy Winter Porter&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>hello</title>
      <link>https://lucasroesler.com/posts/2017/hello/</link>
      <pubDate>Sun, 15 Jan 2017 00:00:00 -0700</pubDate>
      
      <guid>https://lucasroesler.com/posts/2017/hello/</guid>
      <description>&lt;p&gt;Welcome! This is just a test post, a proof of life.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
