<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Susan Potter</title><link>https://www.susanpotter.net/</link><description>Recent content on Susan Potter</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 25 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.susanpotter.net/index.xml" rel="self" type="application/rss+xml"/><item><title>What if your language tooling was AI-native?</title><link>https://www.susanpotter.net/software/ai-native-language-tooling/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/ai-native-language-tooling/</guid><description>I know, I know. I almost puked writing &amp;ldquo;AI-native&amp;rdquo;, but I thought it would be a good way to get your attention. This is my elbow-in-the-ribs nudge to tool makers to get them to (thoughtfully) leverage the rich tapstry of AI capabilities into our software tools already and get over ourselves.</description></item><item><title>The Perfection Paradox: Why 'Good Enough' is Often Better</title><link>https://www.susanpotter.net/software/perfection-paradox-good-enough-better/</link><pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/perfection-paradox-good-enough-better/</guid><description>Explore the Perfection Paradox: where striving for flawlessness can hinder progress, and learn strategies to balance quality with action.</description></item><item><title>Software Optimization Through Property-Based Thinking</title><link>https://www.susanpotter.net/software/optimization-property-based-thinking/</link><pubDate>Thu, 31 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/optimization-property-based-thinking/</guid><description>Explore how to apply property-based thinking to the practice of software optimization.</description></item><item><title>Software Optimization Mental Models for Software Engineers</title><link>https://www.susanpotter.net/software/optimization-mental-models-software-engineering/</link><pubDate>Mon, 21 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/optimization-mental-models-software-engineering/</guid><description>Explore useful mental models for software engineers to apply to the practice of software optimization</description></item><item><title>The costs of digital twins and solving the 200% problem</title><link>https://www.susanpotter.net/software/the-costs-of-digital-twins-and-solving-the-200-problem/</link><pubDate>Thu, 26 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/the-costs-of-digital-twins-and-solving-the-200-problem/</guid><description>Digital twins can be valuable, but they&amp;rsquo;re not a silver bullet. Effective abstractions are crucial for managing complex infrastructure. Choose the right approach for your needs. Avoid bad abstractions that can lead to bloatedness and confusion. Focus on building powerful, intuitive interfaces.</description></item><item><title>An Ode To ISO 8601</title><link>https://www.susanpotter.net/software/an-ode-to-iso-8601/</link><pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/an-ode-to-iso-8601/</guid><description>A ISO 8601 guide to date, time, duration, interval formats and more for working developers.</description></item><item><title>Why Early-Stage Software Startups Need Strategic Engineering Leadership</title><link>https://www.susanpotter.net/software/why-early-stage-software-startups-need-strategic-engineering-leadership/</link><pubDate>Sun, 05 May 2024 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/why-early-stage-software-startups-need-strategic-engineering-leadership/</guid><description>In today&amp;#39;s economy, new businesses live or die based on their ability to deliver products and services that exceed customer needs especially since it has never been cheaper to start a software business before. Yet all too often, early-stage startups are led by founding teams who are incredible at sales, marketing, or building prototype-quality MVPs but lack the deep or strategic technical expertise required to scale their brilliant ideas into full-fledged, production-ready offerings after validating their idea.</description></item><item><title>A Haskell view of functional programming ("effectful")</title><link>https://www.susanpotter.net/software/a-haskell-tinted-view-of-functional-programming-effectful/</link><pubDate>Tue, 18 Jul 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/a-haskell-tinted-view-of-functional-programming-effectful/</guid><description>This article explores Haskell&amp;rsquo;s techniques for isolating side effects, starting with the IO monad, which encapsulates impure code to enable reasoning about pure portions. It explains IO&amp;rsquo;s benefits like sequencing effects and isolating them from infecting other code. The article then provides a high-level overview of more advanced Haskell effect systems including MTL-style monad transformers and freer algebraic effects, comparing their strengths and weaknesses through code examples. In summary, the article demonstrates Haskell&amp;rsquo;s functional approaches to managing effects through tools like IO, MTL, and freer algebras, allowing programmers to maintain purity without sacrificing real-world capabilities and enabling the construction of reliable, testable programs.</description></item><item><title>A Haskell view of functional programming (well-typedness)</title><link>https://www.susanpotter.net/software/a-haskell-tinted-view-of-functional-programming-well-typedness/</link><pubDate>Mon, 10 Jul 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/a-haskell-tinted-view-of-functional-programming-well-typedness/</guid><description>Dive into an educational journey exploring the power of strong static typing, enforcing domain-specific constraints, and ensuring the validity of values. Uncover how well-typedness enhances code reliability, maintainability, and understandability, while enabling robust composability and scalability.</description></item><item><title>TypeScript's Mapped Types</title><link>https://www.susanpotter.net/software/conjuring-typescripts-magic-with-mapped-types/</link><pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/conjuring-typescripts-magic-with-mapped-types/</guid><description>In this in-depth exploration we discover the power of mapped types in TypeScript through numerous examples. At the end working through the article you will be able to transform properties with ease, and master best practices when adopting mapped types.</description></item><item><title>Cross-runtime TypeScript Library Development: A Deno-Node Workflow</title><link>https://www.susanpotter.net/software/cross-runtime-typescript-library-development-a-deno-node-workflow/</link><pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/cross-runtime-typescript-library-development-a-deno-node-workflow/</guid><description>Are you a TypeScript developer who loves Deno&amp;rsquo;s safe and sandboxed environment and its out-of-the-box TypeScript, LSP, linting, formatting, stdlib testing and benchmarking support? Join me as I walk you through a possible workflow that combines the best of Deno tooling with Node.js compatibility.</description></item><item><title>Rapid Data Exploration with DuckDB: An In-Depth Tutorial</title><link>https://www.susanpotter.net/software/rapid-data-exploration-with-duckdb-an-in-depth-tutorial/</link><pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/rapid-data-exploration-with-duckdb-an-in-depth-tutorial/</guid><description>A comprehensive guide that explores the power of DuckDB for efficient and effective data exploration. The tutorial covers the entire process, from setting up DuckDB and loading data to advanced querying, visualization, and optimization techniques. It highlights the capabilities of DuckDB in performing advanced analytics and statistical functions, as well as creating interactive charts and graphs. With real-world case studies and examples, this tutorial equips readers with the knowledge and tools to unlock the full potential of data exploration using DuckDB, empowering data scientists, analysts, and business professionals to make informed decisions based on valuable insights gained from their datasets.</description></item><item><title>Using Conditional Types in TypeScript</title><link>https://www.susanpotter.net/software/using-conditional-types-in-typescript/</link><pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/using-conditional-types-in-typescript/</guid><description>Dive into TypeScript&amp;#39;s conditional types and discover how they empower developers to create flexible type mappings and enhance type safety. This article explores the mechanics of conditional types, demonstrates their application through practical examples, and showcases their ability to eliminate runtime bugs and improve code resilience. Embrace the power of TypeScript&amp;#39;s conditional types and unleash the full potential of your code!</description></item><item><title>Chip War: The Fight for the World's Most Critical Technology</title><link>https://www.susanpotter.net/reviews/chip-war-book/</link><pubDate>Fri, 26 May 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/reviews/chip-war-book/</guid><description>Through vivid and colorful anecdotes, historian Miller breathes life into the past, recounting the incredible stories of figures like Andy Grove and Morris Chang, who rose from the ashes of World War II to create powerhouse companies Intel and TSMC.</description></item><item><title>Discombobulated thoughts on generative artificial intelligence</title><link>https://www.susanpotter.net/software/discombobulated-thoughts-on-generative-artificial-intelligence/</link><pubDate>Sun, 21 May 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/discombobulated-thoughts-on-generative-artificial-intelligence/</guid><description>Brace yourself for a wild expedition through the tangled maze of generative artificial intelligence (AI) in this engaging and thought-provoking article. Dive into the misconceptions surrounding generative AI, explore its potential impact on the workplace and the life of a consumer, and unravel the shadows and challenges that lie ahead. Join the author on a rollercoaster ride of hope and despair, as they navigate the intricate complexities of AI&amp;#39;s power and its implications for humanity.</description></item><item><title>The Pitfalls of Serverless Hosting</title><link>https://www.susanpotter.net/software/the-pitfalls-of-serverless-hosting/</link><pubDate>Fri, 19 May 2023 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/the-pitfalls-of-serverless-hosting/</guid><description>Join us as we dive into the world of serverless hosting and uncover the hidden challenges that come with this revolutionary approach. While serverless architectures promise scalability, cost-efficiency, and ease of deployment, they also present a range of obstacles that developers need to be aware of. From cold start latency to vendor lock-in, debugging woes to resource constraints, and limited visibility to scaling challenges, we explore the pitfalls that can impact your application&amp;#39;s performance and user experience. By understanding these issues and adopting informed strategies, you can navigate the bumpy road to success in the serverless landscape.</description></item><item><title>Extracting Your Twitter Archive into DuckDB</title><link>https://www.susanpotter.net/software/extracting-your-twitter-archive-into-duckdb/</link><pubDate>Sun, 18 Dec 2022 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/extracting-your-twitter-archive-into-duckdb/</guid><description>Discover how to extract and analyze your Twitter archive using DuckDB, a lightweight and fast embeddable SQL database. This article provides step-by-step instructions for extracting data from your Twitter archive, converting it into a CSV file, and importing it into a &lt;code class="verbatim">duckdb&lt;/code> database. By leveraging the power of DuckDB, you can query your tweets based on specific criteria and gain valuable insights. Whether you&amp;#39;re interested in republishing popular tweets or exploring different data sets, this guide empowers you to make the most of your Twitter archive. Get ready to unleash the potential of your social media history with DuckDB!</description></item><item><title>Flix Series Part 1: Higher-order functions &amp; infix combinators</title><link>https://www.susanpotter.net/software/flix-series-part-1-higher-order-functions-infix-combinators/</link><pubDate>Mon, 04 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/flix-series-part-1-higher-order-functions-infix-combinators/</guid><description>This article delves into the world of functional programming with the Flix programming language with higher-order functions and user-defined infix operators.</description></item><item><title>Flix Series Part 0: Getting Started &amp; Setup</title><link>https://www.susanpotter.net/software/getting-started-with-flix-part-0/</link><pubDate>Sun, 05 Jun 2022 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/getting-started-with-flix-part-0/</guid><description>Are you ready to embark on a coding adventure with Flix? This article introduces Flix, a programming language that combines the best features of functional languages like Scala and Haskell. But that&amp;#39;s not all—Flix also brings its own innovative additions, such as row polymorphic extensible records and first-class support for Datalog constraints.</description></item><item><title>Unikernels: A Strategic Technology Assessment for Engineering Leaders</title><link>https://www.susanpotter.net/software/random-notes-on-unikernels/</link><pubDate>Sun, 19 Dec 2021 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/random-notes-on-unikernels/</guid><description>A comprehensive guide for CTOs and engineering leaders evaluating unikernels as a strategic technology investment, covering business impact, implementation considerations, and decision frameworks.</description></item><item><title>Review: Remarkable2 e-ink (paper) tablet</title><link>https://www.susanpotter.net/reviews/remarkable2-eink-tablet/</link><pubDate>Tue, 27 Jul 2021 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/reviews/remarkable2-eink-tablet/</guid><description>Unveiling my first public product review, I invite you on an exciting journey of expectations and surprises. In this comprehensive evaluation, I&amp;#39;ll share the background of my purchase, including motivations and any discounts received. Then, I&amp;#39;ll delve into vital aspects such as delivery, product quality, setup, customization, regular usage, and its transformative impact. To top it off, I&amp;#39;ll compare this product to others I own.</description></item><item><title>Track diffs by scoping file, range, function, method, class changes</title><link>https://www.susanpotter.net/software/track-diffs-by-scoping-file-range-function-method-class-changes/</link><pubDate>Tue, 22 Dec 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/track-diffs-by-scoping-file-range-function-method-class-changes/</guid><description>Discover the power of scoping change differentials in Git by focusing on specific files, line ranges, functions, methods, or classes. This article demonstrates various commands using the Ruby language repository, allowing developers to track changes in a particular semantic scope rather than at a file or directory level. Learn how to scope log diffs per file, identify diffs within a line range of a file, and limit change log noise by scoping diffs to named blocks in a file. With these techniques, you can review the history of specific code elements and gain a deeper understanding of how they have evolved over time.</description></item><item><title>TypeScript's keyof operator and possible uses</title><link>https://www.susanpotter.net/software/typescripts-keyof-operator-and-possible-uses/</link><pubDate>Sun, 18 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/typescripts-keyof-operator-and-possible-uses/</guid><description>Discover the incredible potential of the &lt;code class="verbatim">keyof&lt;/code> operator in TypeScript and revolutionize your code for a better development experience.</description></item><item><title>How to make seemingly impossible decisions</title><link>https://www.susanpotter.net/software/how-to-make-seemingly-impossible-decisions/</link><pubDate>Sat, 17 Oct 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/how-to-make-seemingly-impossible-decisions/</guid><description>Originally published as a Twitter thread starting here. In the realm of technical and people management leadership, decisions loom large, often presenting themselves as formidable challenges. But fear not! Join me on a recent coaching expedition, where I guided a colleague through the treacherous terrain of decision-making. Surprisingly, what seemed insurmountable at first turned out to be conquerable. So, let&amp;#39;s embark on this process together and unlock the secrets to confident decision-making.</description></item><item><title>JavaScript objects to TypeScript enumerations, const enums, ambient enums</title><link>https://www.susanpotter.net/software/typescript-enum-versus-const-enum/</link><pubDate>Fri, 25 Sep 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/typescript-enum-versus-const-enum/</guid><description>Learn how to leverage TypeScript&amp;#39;s enums, const enums, ambient enums and how they impact generated JavaScript code. Unveil the benefits and drawbacks of using const enums.</description></item><item><title>Using three-way diffing context for merge conflict style in Git</title><link>https://www.susanpotter.net/software/using-three-way-diffing-context-for-merge-conflict-style-in-git/</link><pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/using-three-way-diffing-context-for-merge-conflict-style-in-git/</guid><description>It recently came to my attention that not everyone overrides the default merge.conflictStyle git-config setting. So in case anyone here wanted to try something new out that would provide more context during a Git conflict resolution scenario here you go. I use diff3 which you can set like this to override the default.</description></item><item><title>Work-from-Home Work and Home Separation Tips</title><link>https://www.susanpotter.net/software/work-from-home-work-and-home-separation-tips/</link><pubDate>Sun, 23 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/work-from-home-work-and-home-separation-tips/</guid><description>Since 2006 I have been working from home (starting part-time) and ever since March (2020) friends have been asking me to write an article about how I separate my work from home life when working from home (WFH).
Define your work space Whether it&amp;#39;s a dedicated room or a corner, make your work space a place you can focus. Those with space constraints can define spaces with movable room dividers or furniture like a colleague of mine with a studio in Manhattan used to do.</description></item><item><title>Algebraic Data Types in TypeScript</title><link>https://www.susanpotter.net/software/algebraic-data-types-in-typescript/</link><pubDate>Tue, 11 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/algebraic-data-types-in-typescript/</guid><description>Note: the code for the TypeScript (to help you follow along) is available here: Encoding Algebraic Data Types in TypeScript code
Background Recently I&amp;#39;ve been reviewing TypeScript code at work. A common pattern I&amp;#39;ve observed in pull requests and some open source projects is a type that looks like the following:
type FooTag = &amp;#39;Bar&amp;#39; | &amp;#39;Baz&amp;#39; | &amp;#39;Qux&amp;#39;; type Foo&amp;lt;A&amp;gt; = { _tag : FooTag, /* Required for the &amp;#39;Bar&amp;#39; tagged values of Foo */ bar?</description></item><item><title>Algebraic Data Types: For the math(s) inclined</title><link>https://www.susanpotter.net/software/algebraic-data-types-for-the-maths-inclined/</link><pubDate>Tue, 11 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/algebraic-data-types-for-the-maths-inclined/</guid><description>Unlock the mathematical elegance of algebraic data types (ADTs) and revolutionize your understanding of data modeling! Discover how algebraic principles can determine the cardinality of ADTs, allowing you to represent an astonishing number of values. Explore the power of sum types, where you can &amp;#34;sum up&amp;#34; the cardinalities of different data constructors to find the overall cardinality of the type. Dive into practical examples, such as representing colors with RGB and CMY models, and witness how the choice of representation affects the total number of possible colors. This teaser article provides a glimpse into the fascinating world of ADTs, with recursive types and zippers waiting to be explored further. Whether you&amp;#39;re a math aficionado or just curious about the beauty of data modeling, this journey will leave you enlightened and inspired.</description></item><item><title>Thinking in Properties (and Beyond), Testing edition</title><link>https://www.susanpotter.net/talks/thinking-in-properties-testing/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/thinking-in-properties-testing/</guid><description>Slide deck from conference talk discussing how property-based testing offers a launchpad to discover and practice thinking in properties in your software development activities to test your software smarter.</description></item><item><title>Experience report deploying PureScript to AWS Serverless (Lambda)</title><link>https://www.susanpotter.net/software/experience-report-deploying-purescript-aws-serverless/</link><pubDate>Wed, 03 Jun 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/experience-report-deploying-purescript-aws-serverless/</guid><description>In this blog post, an experienced software engineer shares their successful deployment of a pure functional serverless function to AWS using PureScript. They spent around $15 per day on API Gateway and Lambda invocations without cost optimization, handling a peak load of 32k invocations per minute with low latency. The engineer highlights the need for adjustment in debugging and deployment processes and discusses challenges with tools and automation. Despite concerns, costs remained manageable, and there is potential for further optimization.</description></item><item><title>`any` versus `unknown` in TypeScript: When to use one over the other</title><link>https://www.susanpotter.net/software/any-versus-unknown-in-typescript-when-to-use-one-over-the-other/</link><pubDate>Wed, 29 Jan 2020 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/any-versus-unknown-in-typescript-when-to-use-one-over-the-other/</guid><description>Discover the critical distinctions between `any` and `unknown` in TypeScript, and unleash the full potential of static typing. Join this TypeScript journey, where I advocate for stronger types and prefer the vigilant guardian, `unknown`, whenever possible. Say goodbye to chaotic code and runtime errors, and embrace a smoother development experience with `unknown`. While `any` may seem tempting with its reckless freedom, it&amp;#39;s time to make a choice that prioritizes safety and reliability. Let&amp;#39;s delve into real-world examples and equip ourselves for an exhilarating TypeScript adventure filled with confidence and type safety.</description></item><item><title>DynamoDB: The Basics</title><link>https://www.susanpotter.net/software/dynamodb-the-basics/</link><pubDate>Wed, 30 Oct 2019 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/dynamodb-the-basics/</guid><description>Dive into the fundamentals of DynamoDB and discover its unique data modeling concepts. This article explores the similarities and differences between DynamoDB and relational databases, highlighting the importance of data modeling in DynamoDB. Learn about primary keys, secondary indices, and the flexible attributes that make DynamoDB a powerful NoSQL solution. Gain insights into access patterns, self-describing keys, and best practices for designing efficient DynamoDB tables. While cost optimization and other topics are left for future exploration, this article sets the foundation for leveraging DynamoDB effectively in your projects.</description></item><item><title>From Zero to Haskell: Lessons Learned (ZuriHac)</title><link>https://www.susanpotter.net/talks/from-zero-to-haskell-lessons-learned-zurihac/</link><pubDate>Sat, 15 Jun 2019 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/from-zero-to-haskell-lessons-learned-zurihac/</guid><description>Embarking on functional programming within an established software organization is a daunting task, but this talk reveals some secrets and wisdom acquired from experience trying to build a team this way. Discover how to manage existing systems while incorporating a functional mindset and building expertise. Learn approaches to reduce risks, foster a learning culture, and transition from ad-hoc workarounds to a profound understanding of the problem domain. Join us on this extraordinary journey of transformation and unlock the true potential of functional programming in software development.</description></item><item><title>Shorts</title><link>https://www.susanpotter.net/film/2019/05/shorts/</link><pubDate>Sat, 11 May 2019 22:41:25 -0500</pubDate><guid>https://www.susanpotter.net/film/2019/05/shorts/</guid><description>My absolute favorite format of film is the short film. Here are a list of short films I loved watching:
Re-Gifted (2018): CGI 3D short film that follows the life of a decrative ornament. 3x3 (2009): A tale of two different approaches to mastery. The Bigger Picture (2015): Two brothers struggling to cope with their elderly mother&amp;#39;s care. Round About Five (2005): A bicycle courier and a businessman share a fleeeting moment during a London rush hour.</description></item><item><title>Dynamically scaling a news and activism hub (5x traffic in 20 mins)</title><link>https://www.susanpotter.net/talks/dynamically-scaling-a-news-and-activism-hub-5x-traffic-in-20-mins/</link><pubDate>Fri, 26 Apr 2019 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/dynamically-scaling-a-news-and-activism-hub-5x-traffic-in-20-mins/</guid><description>On any given day this news discussion site can receive traffic peaks up to five times our base traffic, sometimes requiring us to scale out to double our backend app server capacity within a 10-20 minutes window (sometimes at unpredictable times). In this talk, Susan Potter will discuss DailyKos&amp;#39;s use of autoscaling in EC2 from the essential components to some gotchas learned along the way.</description></item><item><title>Socket Statistics on Linux with ss</title><link>https://www.susanpotter.net/snippets/socket-statistics-on-linux-with-ss/</link><pubDate>Wed, 03 Apr 2019 18:44:52 -0500</pubDate><guid>https://www.susanpotter.net/snippets/socket-statistics-on-linux-with-ss/</guid><description>An excellent tool when you need to troubleshoot distributed systems is ss, which provides visibility into TCP states of your live connections. Even if you know netstat this is a command you should get acquainted with because of its more powerful interface which requires fewer pipes to find the connection information you need and it is probably already installed on your favorite distribution.
In this post, we walk through a couple of examples, and then show a real-world production problem that can be diagnosed by effective use of ss.</description></item><item><title>Profunctor exploration in less than 100 lines of Haskell</title><link>https://www.susanpotter.net/snippets/profunctor-exploration-in-less-than-100-lines-of-haskell/</link><pubDate>Tue, 30 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/snippets/profunctor-exploration-in-less-than-100-lines-of-haskell/</guid><description>A snippet showing the design space around profunctors using Haskell as the teaching language Includes sighting of Strong, Choice, Cartesian and more profunctors.</description></item><item><title>Decoding lens operators</title><link>https://www.susanpotter.net/snippets/decoding-lens-operators/</link><pubDate>Sat, 21 Apr 2018 14:15:59 -0500</pubDate><guid>https://www.susanpotter.net/snippets/decoding-lens-operators/</guid><description> Notation conventions The following table provides a quick overview of conventions used in symbolic operators in the lens library.
Symbol Concept Denotes ^ getter gets value from structure ~ setter sets values in structure % over apply transformation over selected substructure = state threads state through &amp;lt;&amp;lt; before change returns value before specified change &amp;lt; after change returns value after specified change ? Maybe optionality ! force force value</description></item><item><title>Functional Operations (Functional Programming at Comcast Labs Connect)</title><link>https://www.susanpotter.net/talks/functional-operations-functional-programming-at-comcast-labs-connect/</link><pubDate>Fri, 09 Mar 2018 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/functional-operations-functional-programming-at-comcast-labs-connect/</guid><description>Maintaining configurations for different nodes and cloud resources in a [micro]service architecture has been an absolute nightmare in the past. The separation between CI/CD environments and production configuration has led to unpredictable results and false positives. Deploying code to staging and production has often resulted in unforeseen consequences that can&amp;#39;t be identified beforehand, leaving users frustrated when problems arise. This session introduces the Nix and NixOS ecosystem, which offers a transparent and reliable approach to defining and building packages. By leveraging this system, you can configure systems and test multiple machines with coordinated scenarios, providing a solid foundation for your operations. Additionally, with reliable packaging, you can establish a consistent CI/CD pipeline, ensuring that upgrading the JVM won&amp;#39;t bring your CI build servers to a halt for days. Say goodbye to operational nightmares and embrace a more controlled and dependable environment.</description></item><item><title>Economic concepts applied in software development and leadership</title><link>https://www.susanpotter.net/software/economic-concepts-applied-in-software-development-reliability-engineering-and-technical-leadership/</link><pubDate>Thu, 22 Jun 2017 15:42:40 -0500</pubDate><guid>https://www.susanpotter.net/software/economic-concepts-applied-in-software-development-reliability-engineering-and-technical-leadership/</guid><description>Discover how economics concepts can change your approach to software development, technical leadership, and reliability engineering. This article explores various economic principles and their practical applications in the tech industry. Learn how concepts like opportunity cost, causal inference, comparative advantage, thinking on the margins, and the lump of labor fallacy can provide valuable insights and help you make informed decisions. By applying these economic ideas, you can optimize resource allocation, drive efficient decision-making, and enhance the overall effectiveness of your engineering organization. Find out how cross-disciplinary knowledge can reshape your strategies and take your team to new heights.</description></item><item><title>Ruby 2.4 changes overview</title><link>https://www.susanpotter.net/snippets/ruby-2.4-changes-overview/</link><pubDate>Sun, 25 Dec 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/snippets/ruby-2.4-changes-overview/</guid><description>Unified Fixnum and Bignum into Integer It&amp;rsquo;s backward compatible too.
$ irb irb(main):001:0&amp;gt; RUBY_VERSION =&amp;gt; &amp;#34;2.3.1&amp;#34; irb(main):002:0&amp;gt; (2**100).class =&amp;gt; Bignum irb(main):003:0&amp;gt; 2.class =&amp;gt; Fixnum irb(main):004:0&amp;gt; Fixnum =&amp;gt; Fixnum irb(main):005:0&amp;gt; Bignum =&amp;gt; Bignum irb(main):006:0&amp;gt; Bogonum NameError: uninitialized constant Bogonum from (irb):6 from /home/spotter/.nix-profile/bin/irb:11:in `&amp;lt;main&amp;gt;&amp;#39; irb(main):007:0&amp;gt; quit $ nix-env -f . -iA ruby_2_4_0 replacing old ‘ruby-2.3.1-p0’ installing ‘ruby-2.4.0’ $ irb irb(main):001:0&amp;gt; RUBY_VERSION =&amp;gt; &amp;#34;2.4.0&amp;#34; irb(main):002:0&amp;gt; (2**100).class =&amp;gt; Integer irb(main):003:0&amp;gt; 2.class =&amp;gt; Integer irb(main):004:0&amp;gt; Fixnum (irb):4: warning: constant ::Fixnum is deprecated =&amp;gt; Integer irb(main):005:0&amp;gt; Bignum (irb):5: warning: constant ::Bignum is deprecated =&amp;gt; Integer irb(main):006:0&amp;gt; Bogonum NameError: uninitialized constant Bogonum from (irb):6 from /home/spotter/.</description></item><item><title>Functional and Reactive Operations</title><link>https://www.susanpotter.net/talks/functional-and-reactive-operations/</link><pubDate>Tue, 04 Oct 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/functional-and-reactive-operations/</guid><description>If we were starting greenfield development of a service or web application today we would likely employ a number of practices and design choices that are known to optimise application responsiveness, resiliency, elasticity, and/or composability. Delivering our reactive applications on top of predictable infrastructure will set our project up for success. Some of us don&amp;#39;t have that luxury. We must provision, deploy, and operationally maintain legacy monolithic Rails web applications and HTTP APIs that are hard to refactor without introducing new bugs, poorly performing, and struggle to meet user load/peak demand. Built during a prior era of the company where fast and loose practices were rewarded, startup cowboys delivered the first set of features promptly at the expense of subsequent velocity, long-term maintainability, and high risk deployments. When living in this reality, our infrastructure must be reliable or our application needs constant babysitting, leading to on-call fatigue and high staff turnover. The good news is there are core principles we can apply to produce more reproducible systems, failstop deployments, and consistent environment configurations to eliminate a large class of bugs inherent in legacy applications and minimize related business risks. This will be the focus of the session and applies to both greenfield and legacy cases. Code examples given using NixOS and Haskell, but focus remains on the underlying principles.</description></item><item><title>Put a Type On It: Idris Types as Propositions</title><link>https://www.susanpotter.net/talks/put-a-type-on-it-idris-types-as-propositions/</link><pubDate>Wed, 21 Sep 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/put-a-type-on-it-idris-types-as-propositions/</guid><description>Note from a talk I gave at Strangeloop showing how Curry-Howard can be applied to structuring types to represent logical propositions using Idris as the teaching language.</description></item><item><title>Nix in your home directory</title><link>https://www.susanpotter.net/snippets/nix-in-your-home-directory/</link><pubDate>Tue, 30 Aug 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/snippets/nix-in-your-home-directory/</guid><description>Prerequisites wget is installed tar is installed Purpose If you really don&amp;#39;t want to install Nix under /nix (or you can&amp;#39;t) then you can install Nix in your home directory like in the homedir_install.sh script included in this Gist.
Now whenever you want to run a command under Nix&amp;#39;s control, you should prefix with nixrun.
Good luck.
homedir_install.sh function install_nix() { local -r bindir=&amp;#34;${HOME}/opt/bin&amp;#34; local -r proot_url=&amp;#34;https://github.com/proot-me/proot-static-build/blob/master/static/proot-x86_64?raw=true&amp;#34; local -r nixdir=&amp;#34;${HOME}/mnt/nix&amp;#34; local -r nixver=&amp;#34;1.</description></item><item><title>To Type or not to Static Type</title><link>https://www.susanpotter.net/software/to-type-or-not-to-static-type/</link><pubDate>Sun, 01 May 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/to-type-or-not-to-static-type/</guid><description>Originally published as a Gist here: https://gist.github.com/mbbx6spp/60577af8dc4106d6e710cd804292ce20
Minor modifications in formatting and an extra line of no-judgement was added to this text from the original Gist.
Purpose, Disclaimer and Confessions This is the (mostly) no nonesense guide to studies and research that measures and/or compares a variety of facets, characteristics, or manifestations of software development in dynamically vs statically typed programming languages.
Disclaimer: For larger, more complex codebases, I do advocate for statically typed languages that also support algebraic data types (ADTs), generic types, type classes, and preferrably a form of typelevel expressiveness (e.</description></item><item><title>From Zero To Production (NixOS, Erlang)</title><link>https://www.susanpotter.net/talks/from-zero-to-production-nixos-erlang/</link><pubDate>Tue, 08 Mar 2016 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/from-zero-to-production-nixos-erlang/</guid><description>This talk will introduce the audience to the Nix packaging, &lt;a href="https://www.susanpotter.net/nixos/">NixOS&lt;/a>, and related ecosystem tools for &lt;a href="https://www.susanpotter.net/tags/erlang/">Erlang&lt;/a>/Elixir developers. By reviewing common development, testing, and deployment problems we will look at what Nix has to offer to aid Erlang/Elixir developers in these areas. From seamless developer environment bootstrapping to consistent CI environments and beyond.</description></item><item><title>Parametricity: A Practitioners Guide</title><link>https://www.susanpotter.net/software/parametricity-a-practitioners-guide/</link><pubDate>Thu, 25 Sep 2014 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/parametricity-a-practitioners-guide/</guid><description>This post is a quick and handy guide that introduces the concept of parametricity and explains how it can be leveraged in software development. The article aims to target industry practitioners familiar with mainstream languages and methods, providing them with a practical understanding of parametricity and its benefits. It discusses the prerequisites and terminology related to parametricity, including the need for &lt;em>pure&lt;/em> functions, total correctness, and support for parametric polymorphism. The article also explores different forms of reasoning, such as abduction, induction, and deduction, and their relevance to software development. Through examples and type signatures in Haskell, the article demonstrates how parametricity can enable reasoning about code and lead to more reliable and predictable software. Overall, it offers a valuable resource for developers looking to enhance their understanding and application of parametricity.</description></item><item><title>Scalaz By Example (An IO Taster)</title><link>https://www.susanpotter.net/talks/scalaz-by-example-an-io-taster/</link><pubDate>Thu, 09 Jan 2014 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/scalaz-by-example-an-io-taster/</guid><description>Explore the building blocks in Scala using Scalaz that offer enormous benefits of algebraic thinking from domain modeling, validation, data types, and even the intricate realm of distributed systems. Wield the power of Scala&amp;#39;s implicits, unleashing ad-hoc polymorphism to support functional programming abstractions like monoids, functors, applicatives and monads.</description></item><item><title>Algebraic Data Types</title><link>https://www.susanpotter.net/software/algebraic-data-types/</link><pubDate>Tue, 27 Nov 2012 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/algebraic-data-types/</guid><description>Unlock the power of algebraic data types to revolutionize your programming! Discover the flexibility of sum types, also known as tagged unions, and product types, also called record types. Dive into Scala examples and see how algebraic data types provide exhaustive and type-safe constructions. Explore the hybrid sum-product types and their applications in modeling complex domains like social network notifications. With algebraic data types, you can build robust and expressive code by combining smaller pieces into a cohesive whole. Don&amp;#39;t miss out on this opportunity to level up your programming skills!</description></item><item><title>Functional Algebra: Monoids Applied</title><link>https://www.susanpotter.net/talks/functional-algebra-monoids-applied/</link><pubDate>Sat, 10 Nov 2012 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/functional-algebra-monoids-applied/</guid><description>In functional programming, words from Category Theory are thrown around, but how useful are they really? This session looks at applications of monoids specifically and how using their algebraic properties offers a solid foundation of reasoning in many types of business domains and reduces developer error as computational context complexity increases. This will provide a tiny peak at Category Theory&amp;#39;s practical uses in software development and modeling. Code examples will be in Haskell and Scala, but monoids could be constructed in almost any language by software craftsmen and women utilizing higher orders of reasoning to their code.</description></item><item><title>Why Haskell? Embrace Correctness</title><link>https://www.susanpotter.net/talks/why-haskell/</link><pubDate>Fri, 16 Mar 2012 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/why-haskell/</guid><description>Discover the hidden gems of pure functional programming, immutability, and static typing, as we delve into the realm of elegance, robustness, and concise code. Challenge the status quo and embrace a new paradigm to unlock a world of limitless possibilities.</description></item><item><title>Erlang OTP Glossary of Terms</title><link>https://www.susanpotter.net/snippets/erlang-otp-glossary/</link><pubDate>Tue, 10 Jan 2012 00:31:13 -0500</pubDate><guid>https://www.susanpotter.net/snippets/erlang-otp-glossary/</guid><description>I am hoping this will serve as a reference for coworkers and others new to Erlang and OTP to be able to figure out the terminology easier than I had to. I learned the hard way, so you don&amp;#39;t have to!:)
Erlang/OTP - The set of libraries and conventions that are used as part of the core Erlang distribution by Ericsson to build fault-tolerant, distributed systems more effectively. OTP Release - A fully deployable distribution to run on an &amp;#34;Erlang node&amp;#34; (see below).</description></item><item><title>Dynamo: Not just for datastores</title><link>https://www.susanpotter.net/talks/dynamo-not-just-for-datastores/</link><pubDate>Mon, 19 Sep 2011 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/dynamo-not-just-for-datastores/</guid><description>Find out how to build decentralized, fault-tolerant, stateful application services using core concepts and techniques from the Amazon Dynamo paper using riak_core as a toolkit.</description></item><item><title>Distributed Developer Workflows using Git</title><link>https://www.susanpotter.net/talks/distributed-developer-workflows-using-git/</link><pubDate>Mon, 01 Aug 2011 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/distributed-developer-workflows-using-git/</guid><description>This meetup I will be walking the audience through how to setup, configure and maintain distributed development workflows using Git (the distributed VCS developers either love or hate). Much of the workflows suggested here will be applicable to other dVCSes like Mercurial, Darcs and Bazaar.</description></item><item><title>Why JSON Pointer falls short (and why XPath for JSON would be great)</title><link>https://www.susanpotter.net/software/why-json-pointer-falls-short-and-why-xpath-for-json-would-be-great/</link><pubDate>Sun, 31 Jul 2011 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/why-json-pointer-falls-short-and-why-xpath-for-json-would-be-great/</guid><description>Discover the limitations of JSON Pointer as a querying mechanism for JSON documents and the potential solution lying in XPath. This engaging article explores real-world scenarios, showcasing the challenges of extracting multiple values efficiently using JSON Pointer. It then introduces XPath, a powerful selector language known for its flexibility and descriptiveness in the XML world. Drawing a comparison between JSON Pointer and XPath, the article highlights the unmatched capabilities of XPath in retrieving data from complex JSON structures.</description></item><item><title>Erlang Meck API notes</title><link>https://www.susanpotter.net/snippets/erlang-meck-api-notes/</link><pubDate>Wed, 23 Mar 2011 01:11:30 -0500</pubDate><guid>https://www.susanpotter.net/snippets/erlang-meck-api-notes/</guid><description>Here is a snippet showing how to use the Meck API which is a mocking library in Erlang. We will show how to create a fully mocked version of an existing module, unloading mocks, removing functions from a mocked module, and getting a list of all function calls to a module.</description></item><item><title>Deploying Distributed Software to the Cloud (w/o Breaking a Sweat)</title><link>https://www.susanpotter.net/talks/deploying-distributed-software-services-to-the-cloud-without-breaking-a-sweat/</link><pubDate>Sat, 05 Mar 2011 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/deploying-distributed-software-services-to-the-cloud-without-breaking-a-sweat/</guid><description>The promise of cloud computing provides business benefits from reduced costs to increased flexibility. One struggle organizations face as they move to run on cloud infrastructure is automating complex dsitributed deployments.</description></item><item><title>Designing for Concurrency</title><link>https://www.susanpotter.net/talks/designing-for-concurrency/</link><pubDate>Sun, 22 Aug 2010 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/talks/designing-for-concurrency/</guid><description>Presenting traditional and less traditional approaches to designing concurrent systems in the 2010s using approaches that can be used across many languages and some runtimes.</description></item><item><title>Erlang's "let it fail" philosophy</title><link>https://www.susanpotter.net/software/erlangs-let-it-fail-philosophy/</link><pubDate>Sat, 30 Jan 2010 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/erlangs-let-it-fail-philosophy/</guid><description>Erlang, a powerful programming language designed for fault tolerance and high availability, challenges traditional error handling with its groundbreaking concept of &amp;#34;let it fail.&amp;#34; Instead of obsessively anticipating and accounting for every possible error scenario, Erlang embraces failures as a natural part of the system and provides tools to gracefully handle them. This philosophy revolutionizes software design by promoting a resilient approach that saves time and resources, enables rapid error detection and diagnosis, and enhances system resilience and scalability. Erlang&amp;#39;s unique features, such as lightweight processes, built-in fault tolerance, hot code swapping, and concurrency-oriented programming, make it an ideal environment for adopting the &amp;#34;let it fail&amp;#34; philosophy. However, it&amp;#39;s important to strike the right balance and identify critical failures that require immediate attention. Embracing failure in Erlang empowers developers, liberates their creativity, and transforms the software development landscape.</description></item><item><title>Predicate Algebra in Python</title><link>https://www.susanpotter.net/snippets/predicate-algebra-in-python/</link><pubDate>Mon, 09 Nov 2009 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/snippets/predicate-algebra-in-python/</guid><description>Updated for Python3 recently:
class Predicate: &amp;#34;&amp;#34;&amp;#34; Define predicate algebra. &amp;gt;&amp;gt;&amp;gt; isEven=Predicate(lambda x: x % 2 == 0) &amp;gt;&amp;gt;&amp;gt; isOdd=Predicate(lambda x: x % 2 == 1) &amp;gt;&amp;gt;&amp;gt; isEven(6) True &amp;gt;&amp;gt;&amp;gt; isOdd(6) False &amp;gt;&amp;gt;&amp;gt; isEmpty=Predicate(lambda s: s == &amp;#34;&amp;#34;) &amp;gt;&amp;gt;&amp;gt; isNotEmpty=~isEmpty &amp;gt;&amp;gt;&amp;gt; isEmpty(&amp;#34;c&amp;#34;) False &amp;gt;&amp;gt;&amp;gt; isNotEmpty(&amp;#34;&amp;#34;) False &amp;gt;&amp;gt;&amp;gt; isNotEmpty(&amp;#34;hello&amp;#34;) True &amp;#34;&amp;#34;&amp;#34; def __init__(self, predicate): self.predicate = predicate def __or__(self, other): return Predicate(lambda x: self.predicate(x) or other(x)) def __and__(self, other): return Predicate(lambda x: self.</description></item><item><title>Scala versus Erlang for Managers</title><link>https://www.susanpotter.net/software/scala-versus-erlang-for-managers/</link><pubDate>Wed, 15 Apr 2009 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/scala-versus-erlang-for-managers/</guid><description>The demise of Moore&amp;#39;s Law has ushered in a new era of multi-core processors, posing challenges for software professionals. In this article, we explore the debate between Scala and Erlang as languages at the forefront of addressing the multi-core challenge, considering factors such as legacy systems, scalability, and the availability of skilled practitioners.</description></item><item><title>SCM: The Next Generation</title><link>https://www.susanpotter.net/software/scm-the-next-generation/</link><pubDate>Thu, 25 Jan 2007 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/scm-the-next-generation/</guid><description>Have you heard of Darcs or Git? Many developers are familiar with traditional version control systems like Subversion and CVS, but the next generation of source control management will be distributed version control systems (DVCS) such as Darcs and Git. Darcs, written in Haskell, offers a user-friendly alternative to Git with some powerful features. In a recent experience using Darcs, the author found it pleasurable and efficient. As the need for concurrent work increases, exploring these cutting-edge SCM systems becomes crucial for developers.</description></item><item><title/><link>https://www.susanpotter.net/software/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/software/</guid><description>Building Financial-Grade Event Stores: Lessons from the Trenches A senior engineer&amp;rsquo;s guide to event sourcing patterns that actually work in production
Key Terms and Definitions Event Sourcing: Instead of storing what data looks like now, you store all the changes that happened to get there. Like keeping every edit in a Google Doc instead of just the final version.
Event Store: A special database that saves events (things that happened) in order, like a permanent log book.</description></item><item><title>How can I show only the files containing merge conflicts?</title><link>https://www.susanpotter.net/git/how-can-i-show-only-the-files-containing-merge-conflicts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/git/how-can-i-show-only-the-files-containing-merge-conflicts/</guid><description>To show only the files containing merge conflicts in Git, you can use the git diff command with the --name-only and --diff-filter options.
Here&amp;#39;s the command you can use:
git diff --name-only --diff-filter=U Explanation:
--name-only: This option tells Git to output only the names of the files that have differences. --diff-filter=U: This option tells Git to show only files with unmerged, or conflicted changes. This command will output a list of file names that have conflicts.</description></item><item><title>How do I delete a branch in Git locally and globally?</title><link>https://www.susanpotter.net/git/how-do-i-delete-a-branch-in-git-locally-and-globally/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/git/how-do-i-delete-a-branch-in-git-locally-and-globally/</guid><description>To delete a Git branch locally and then remotely, you can follow these steps:
Delete the local branch using the git branch command with the -d option:
git branch -d &amp;lt;branch_name&amp;gt; This will delete the local branch named &amp;lt;branch_name&amp;gt;. If the branch has unmerged changes, Git will not allow you to delete the branch. In that case, you can use the -D option instead of -d to force delete the branch.</description></item><item><title>How to show the current branch name?</title><link>https://www.susanpotter.net/git/how-to-show-the-current-branch-name/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/git/how-to-show-the-current-branch-name/</guid><description>To know what branch you are currently on in Git, you can use the git branch command. When you run this command without any options, Git will show you a list of all the branches in your repository and indicate which one you are currently on.
To see which branch you are currently on, run the following command in your Git repository:
git branch The output will look something like this:</description></item><item><title>Susan Potter is a fractional-CTO and principal software engineer</title><link>https://www.susanpotter.net/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/about/</guid><description>As a hands-on leader, I&amp;#39;ve guided teams in building type-safe software that not only delivers exceptional results but also reduces long-term maintenance costs. Connect with me to find out how we could work together.</description></item><item><title>What is NixOS and why am I excited about what it offers?</title><link>https://www.susanpotter.net/nixos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.susanpotter.net/nixos/</guid><description>I have been building, testing and deploying NixOS systems - at medium to large scales - to cloud environments like AWS and GCP since 2015 in production. I also use NixOS for my own development laptops and workstation configurations to ensure I have reproducible systems to work on and for each codebase I setup a Nix flake or Nix shell to manage codebase dependencies and reliable development environments for everyone on the team.</description></item></channel></rss>