<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Stephen Lazaro</title>
    <link rel="self" type="application/atom+xml" href="https://slazaro.net/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://slazaro.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-03-25T00:00:00+00:00</updated>
    <id>https://slazaro.net/atom.xml</id>
    <entry xml:lang="en">
        <title>The Vibes Are Off</title>
        <published>2025-03-25T00:00:00+00:00</published>
        <updated>2025-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            Stephen Lazaro
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/blog/the-vibes-are-off/"/>
        <id>https://slazaro.net/blog/the-vibes-are-off/</id>
        
        <summary type="html"><h2 id="introduction">Introduction</h2>
<p>As a rule, I do not try to make it my business what tools other people are using to accomplish their goals. If you want to use Emacs, that's fine by me. IntelliJ's refactor tools a lifesaver? Have at it.</p>
<p>I am not, for example, opposed to the usage of tools like Github Copilot that have a strong element of human direction where users find them appropriate.</p>
<p>However, there is a line where I think things do require comment.</p>
<p>If we are to be engineers, and we ought, then that comes with an obligation to ensure that our work in producing software is undertaken in a socially responsible way.</p>
<p>Consequently, if a tool cannot be used in a socially responsible way, we have an obligation to point that out.</p>
<p>It's my suspicion that the current style of "vibe coding" and the tools that back them, in the current social context, are difficult to use responsibly.</p>
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Laws, Law Tests, and Implementing Typeclasses</title>
        <published>2024-10-01T00:00:00+00:00</published>
        <updated>2024-10-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            Stephen Lazaro
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/blog/laws-law-tests-and-implementing-typeclasses/"/>
        <id>https://slazaro.net/blog/laws-law-tests-and-implementing-typeclasses/</id>
        
        <summary type="html"><h2 id="introduction">Introduction</h2>
<p>Something I have left purposefully under-specified in my <a href="https://slazaro.net/blog/fallback-as-ordering/">previous</a> <a href="https://slazaro.net/blog/comonads-and-authentication-as-context/">posts</a> is that most of those abstractions obey <em>laws</em>.</p>
<p>Those laws are important features of those abstractions — they specify the conditions for <em>validity</em> of an implementation.</p>
<p>In general, we would like to be able to <em>test</em> for any of our implementations that the laws do hold. Doing so would give us confidence in the validity and relaibility of our implementations.</p>
<p>In order to do so, we'll have to implement several typeclasses, and I'll show you how that can be done in detail. In that respect, you can also see this post as a sequel to my <a href="https://slazaro.net/blog/how-to-find-the-right-cats-import/">post on cats imports and typeclass structure</a>.</p>
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Comonads and Authentication as Context</title>
        <published>2024-09-27T00:00:00+00:00</published>
        <updated>2024-09-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Stephen Lazaro
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/blog/comonads-and-authentication-as-context/"/>
        <id>https://slazaro.net/blog/comonads-and-authentication-as-context/</id>
        
        <summary type="html"><p>Sometimes I don't have a fully fleshed out design, or even really an idea, but just an intention to explore a space. I often find that writing is an okay way to start to think out those ideas, even if they don't obviously go to something shippable.</p>
<p>This is one of those. You shouldn't really expect everything here to be fully worked out or confirmed to be working, this is more a gesture in a direction and an attempt to connect some ideas together.</p>
<h2 id="what-is-a-comonad">What is a comonad?</h2>
<p>Eventually, I want to try and think about one way you might model a phenemonen using an abstraction called a comonad, but to do that we have to get to a place where we can talk about that concept.</p>
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Resume</title>
        <published>2024-09-25T00:00:00+00:00</published>
        <updated>2024-09-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/resume/"/>
        <id>https://slazaro.net/resume/</id>
        
        <summary type="html"><p>You can find a summary of my experiences in the workplace below, going back all the way to my teens.</p>
<p>Feel free to disregard what doesn't interest you.</p>
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Fallbacks as Implicit Ordering</title>
        <published>2024-09-19T00:00:00+00:00</published>
        <updated>2024-09-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Stephen Lazaro
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/blog/fallback-as-ordering/"/>
        <id>https://slazaro.net/blog/fallback-as-ordering/</id>
        
        <summary type="html"><h2 id="introduction">Introduction</h2>
<p>A common thing in software engineering is to fallback through a series of outcomes depending on a condition. This blog post aims to discuss some different ways to express this in Scala, and maybe suggest some forms of expression not all Scala programmers have thought about.</p>
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Find the Right Cats Import (And Why They&#x27;re Like That)</title>
        <published>2024-09-10T00:00:00+00:00</published>
        <updated>2024-09-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Stephen Lazaro
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://slazaro.net/blog/how-to-find-the-right-cats-import/"/>
        <id>https://slazaro.net/blog/how-to-find-the-right-cats-import/</id>
        
        <summary type="html"><h2 id="introduction">Introduction</h2>
<p><a rel="noopener" target="_blank" href="https://typelevel.org/cats/">cats</a> is, if you haven't heard of it, a popular library for providing various basic abstractions for typed functional programming in Scala. Many of these abstractions provide powerful primitives for expressing yourself in a more declarative and abstract way.</p>
<p>Unfortunately, new users often find it difficult to know how to gain access to the appropriate primitives for their situation, even after they begin to understand what typeclass provides those primitives.</p>
<p>I have a friend, an experienced Scala software engineer, who still to this day asks me how I know an incantation when I need something from cats. "How did I memorize all these?", he will say.</p>
<p>The answer, like most such tricks, is that I didn't. I am constitutionally incapable of internalizing raw, heterogeneous information like that.</p>
<p>What I <em>did</em> do is internalize a rule, a rule that lets me reliably find the import I need — a rule this blog post will try to explain to you.</p>
<p>If you see the rule and don't understand it then in the following section I'll provide a discussion of typeclasses and their components in the <code>cats</code> encoding in Scala. After that  we'll revisit the rule with our new knowledge, hopefully making it even easier to internalize and apply freely.</p>
</summary>
        
    </entry>
</feed>
