<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Softinio's Notes on Software Engineering]]></title><description><![CDATA[Salar Rahmanian's thoughts and notes on Software Engineering, Distributed systems,  Scala, NixOS, Haskell and Swift Lang.]]></description><link>https://notes.softinio.com</link><image><url>https://substackcdn.com/image/fetch/$s_!zTl0!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8e66d942-2ebd-4b9c-ad62-dda01025327a_1280x1280.png</url><title>Softinio&apos;s Notes on Software Engineering</title><link>https://notes.softinio.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 17 May 2026 07:03:19 GMT</lastBuildDate><atom:link href="https://notes.softinio.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Salar Rahmanian]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[softinio@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[softinio@substack.com]]></itunes:email><itunes:name><![CDATA[Salar Rahmanian]]></itunes:name></itunes:owner><itunes:author><![CDATA[Salar Rahmanian]]></itunes:author><googleplay:owner><![CDATA[softinio@substack.com]]></googleplay:owner><googleplay:email><![CDATA[softinio@substack.com]]></googleplay:email><googleplay:author><![CDATA[Salar Rahmanian]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 8]]></title><description><![CDATA[Companion Newsletter of www.softinio.com]]></description><link>https://notes.softinio.com/p/softinios-notes-on-software-engineering-a0c</link><guid isPermaLink="false">https://notes.softinio.com/p/softinios-notes-on-software-engineering-a0c</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Tue, 05 Mar 2024 01:42:23 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="360" height="499.9850299401198" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3711,&quot;width&quot;:2672,&quot;resizeWidth&quot;:360,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;white Good News Is Coming paper on wall&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="white Good News Is Coming paper on wall" title="white Good News Is Coming paper on wall" srcset="https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1485115905815-74a5c9fda2f5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxuZXdzbGV0dGVyfGVufDB8fHx8MTcwOTUxOTY1MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@jontyson">Jon Tyson</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Welcome to issue 8 of my notes.</p><h3><strong>&#127775; Welcome to My Latest Personal Tech Dive! &#127775;</strong></h3><p>Hey there! It's been a whirlwind of activity on my end, and I'm excited to share some significant updates that I've been working on to enhance our journey through the tech landscape together. Let's jump right in:</p><h4>&#128640; Big News: My Blog's Fresh Look &amp; Unified YouTube Content!</h4><p>I'm thrilled to share that my blog has undergone a major transformation! This isn't just about a new coat of paint&#8212;it's a deep clean and consolidation of my content to ensure you get a superior user experience focused on speed and ease of access. I want every visit to be a delight, with everything you need right at your fingertips.</p><p>&#128279; <strong>Discover the New Blog Here:</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.softinio.com&quot;,&quot;text&quot;:&quot;www.softinio.com&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.softinio.com"><span>www.softinio.com</span></a></p><p>As for my YouTube presence, I've streamlined my channels into one, organizing everything into playlists for easier navigation. This means no matter what you're interested in, you'll find it quickly and without hassle.</p><p>But here's an important distinction: while my YouTube channel serves as a great platform for sharing, my self-hosted PeerTube website is where all my videos live <strong>ad-free</strong>. That's right, an uninterrupted, clean viewing experience, just for you. And the best part? If you're on Mastodon, you can use your account to comment on or like my content directly on PeerTube. It's all about creating a seamless, interactive community across platforms.</p><p>&#128279; <strong>Subscribe to My YouTube Channel:</strong> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.youtube.com/@Salar_Rahmanian&quot;,&quot;text&quot;:&quot;YouTube&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.youtube.com/@Salar_Rahmanian"><span>YouTube</span></a></p><p><br>&#128279; <strong>Watch all the content Ad-Free on PeerTube:</strong> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com&quot;,&quot;text&quot;:&quot;watch.softinio.com&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com"><span>watch.softinio.com</span></a></p><div><hr></div><h3>&#127760; My New Mastodon Home!</h3><p>I've been a part of the Mastodon community for a while now, embracing the decentralized, open nature of social media. But I'm taking it a step further by setting up my own Mastodon instance. This isn't just a new address; it's my new home on the internet where I'll be sharing updates, engaging in discussions, and connecting with you on a more personal level.</p><p>If you've been following me on Mastodon, I need you to make a small but crucial update: <a href="https://social.softinio.com/@softinio">follow me on my new instance</a>. This move is all about creating a space where we can have richer, more meaningful interactions.</p><p>&#128279; <strong>Join Me on My New Mastodon Instance:</strong> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://social.softinio.com/@softinio&quot;,&quot;text&quot;:&quot;Mastodon&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://social.softinio.com/@softinio"><span>Mastodon</span></a></p><p>Look forward to a future post where I'll delve deeper into the benefits of decentralized social media and how our new Mastodon space can enhance our conversations and community engagement.</p><div><hr></div><h3>&#127908; Talks I Did at Conferences</h3><p>In fall I had the privilege of doing talks at two prestiges conferences here in the San Francisco Bay Area.</p><p>Both of my talks were focused on Using Nix and NixOS as your ultimate tool as part of your development workflow. </p><h4>Scale By The Bay 2023</h4><p>Big thank you to <a href="https://twitter.com/ChiefScientist">Alexy Khrabrov</a> and <a href="https://twitter.com/o1i_io">Oli Makhasoeva</a> and team for having me as speaker. It was awesome being part of <a href="https://www.scale.bythebay.io">Scale By the Bays</a> 10th Anniversary conference. Truly the best independent developer conference in the Bay Area.</p><p>For full details of my talk with links to its recording and slides visit:</p><p><strong><a href="https://www.softinio.com/talks/streamline-your-development-workflow/">Streamline Your Development Workflow: Harnessing the Power of NixOS and Nix Package</a></strong></p><h4>PyBay 2023</h4><p>Big thank you to <a href="https://twitter.com/JamesAbel">James Abel</a>, <a href="https://twitter.com/PolkPhebe">Phoebe Polk</a> and team for having me as speaker at <a href="https://twitter.com/py_bay">PyBay</a> 2023. </p><p>For full details of my talk with links to its recording and slides visit:</p><p><strong><a href="https://www.softinio.com/talks/elevating-python-development-with-nix/">Elevating Python Development with Nix Package Manager</a></strong></p><div><hr></div><h3>&#128240; What have I been reading this week</h3><p>These are some of the articles I have read this week that I have really enjoyed:</p><h4><strong>Building a functional, effectful Distributed System from scratch in Scala 3</strong></h4><p><a href="https://chollinger.com/blog/2023/06/building-a-functional-effectful-distributed-system-from-scratch-in-scala-3-just-to-avoid-leetcode-part-1/">Link to article</a></p><p>I loved how the author spent his time whilst looking for his next opportunity. Inspired to do more with Scala 3 and find the time for more side projects.</p><p>As a data engineer the author realized that all data platforms he uses are build on top of distributed system so he embarked on creating one of his own using Scala 3 and Cats Effect.</p><p>This is fantastic way to learn and keep your skills sharp.</p><h4><strong>Open sourcing Pingora: our Rust framework for building programmable network services</strong></h4><p><a href="https://blog.cloudflare.com/pingora-open-source">Link to article</a></p><p>Cloudflare announced in this article the open sourcing of their latest framework.</p><blockquote><p>Pingora is a Rust async multithreaded framework that assists us in constructing HTTP proxy services.</p></blockquote><p></p><div><hr></div><p>That&#8217;s all for this issue. I am working on a lot of new content for 2024 that will be published on <a href="https://www.softinio.com">my Blog</a> so if you haven&#8217;t subscribed to my newsletter here please do so to be informed of all my new posts.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[You got Agda in my Haskell?]]></title><description><![CDATA[By Ryan Orendorff]]></description><link>https://notes.softinio.com/p/you-got-agda-in-my-haskell</link><guid isPermaLink="false">https://notes.softinio.com/p/you-got-agda-in-my-haskell</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sun, 12 Feb 2023 17:11:32 GMT</pubDate><enclosure url="https://substack-video.s3.amazonaws.com/video_upload/post/102485191/a78d91a6-5e9a-4301-a7fd-89dd35fb907b/transcoded-00000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In January 2023, I had the great pleasure of welcoming Ryan Orendorff as a speaker to <a href="https://www.sfhaskell.com/">Bay Area Haskell User Group</a> with this awesome talk.</p><p>I am making recordings of the meetups I arrange available here on my newsletter first so be sure to subscribe to be the first to view them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com/w/xreydeDYNeWrZzKnYr2U5v&quot;,&quot;text&quot;:&quot;Watch on PeerTube&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com/w/xreydeDYNeWrZzKnYr2U5v"><span>Watch on PeerTube</span></a></p><h4>You got Agda in my Haskell? By <a href="https://ryan.orendorff.io/">Ryan Orendorff</a></h4><p></p><p>One of your coworkers seems to write the most amazing Haskell code. It never breaks and it always fits the requirements precisely. You&#8217;ve never seen your coworker put in a bug fix for their code ever. One day you decide to ask them how they obtained these inhuman powers. With a huge grin on their face, they say &#8220;why that&#8217;s because I wrote all my provably correct code in Agda!&#8221; </p><p>In this talk, we will talk about a new tool called <a href="https://jesper.sikanda.be/posts/agda2hs.html">agda2hs</a> which allows programmers to translate dependently typed Agda code into clean Haskell code, enabling the extraction of provably correct programs. We will look into specific examples on how the code can be used to prove that a piece of code has some desired specification such as invertibility. </p><p></p><h4>About our speaker </h4><p>Hi! My name is <a href="https://ryan.orendorff.io/">Ryan Orendorff</a>, and I enjoy working on type theory, functional programming, linear algebra, and data privacy. If I am not working on those things you can likely find me on a mountain somewhere. </p><p>Personal page and Blog: <a href="https://ryan.orendorff.io/">https://ryan.orendorff.io/ </a></p><p>Event details: <a href="https://www.meetup.com/bay-area-haskell-user-group/events/290844236/">https://www.meetup.com/bay-area-haskell-user-group/events/290844236/</a> </p><p>For more information about Bay Area Haskell and Functional Programming User Group visit: <a href="https://www.sfhaskell.com">https://www.sfhaskell.com</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/you-got-agda-in-my-haskell/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/you-got-agda-in-my-haskell/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Easy incremental builds with GHC 9.4 (Haskell)]]></title><description><![CDATA[By Harry Garrood]]></description><link>https://notes.softinio.com/p/easy-incremental-builds-with-ghc</link><guid isPermaLink="false">https://notes.softinio.com/p/easy-incremental-builds-with-ghc</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Wed, 28 Dec 2022 02:59:14 GMT</pubDate><enclosure url="https://substack-video.s3.amazonaws.com/video_upload/post/93285990/ad92b425-e16b-4c20-8a74-c58f30f01291/transcoded-00000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In November 2022 we had the pleasure of welcoming Harry Garrood as a speaker to <a href="https://www.sfhaskell.com/">Bay Area Haskell User Group</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com/w/dWHeMjvDs937etjuKkjHNW&quot;,&quot;text&quot;:&quot;Watch on PeerTube&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com/w/dWHeMjvDs937etjuKkjHNW"><span>Watch on PeerTube</span></a></p><p><strong>Easy incremental builds with GHC 9.4 by</strong> <a href="https://harry.garrood.me/">Harry Garrood</a></p><p>One of the new features in GHC 9.4 is that GHC determines whether a source file has changed by checking its hash rather than its modification timestamp. I'll discuss why this is useful and how it can dramatically speed up your CI builds!</p><p><strong>About our speaker</strong></p><p><a href="https://harry.garrood.me/">Harry Garrood</a> is a software engineer based in Scotland, currently working with Mercury. He used to do a lot of OSS work, having been part of the PureScript core team, but now he spends less of his free time thinking about code, and more of it playing trombone, swimming, and playing video games.</p><p>Follow <a href="https://twitter.com/hdgarrood">Harry on Twitter</a> and <a href="https://github.com/hdgarrood">GitHub</a>. Do visit his <a href="https://harry.garrood.me/">blog</a>.</p><p><strong>Event details:</strong> <a href="https://www.meetup.com/bay-area-haskell-user-group/events/288894864/">https://www.meetup.com/bay-area-haskell-user-group/events/288894864/</a></p><p><strong>For more information about Bay Area Haskell and Functional Programming User Group visit:</strong></p><p><a href="https://www.sfhaskell.com">https://www.sfhaskell.com</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/easy-incremental-builds-with-ghc/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/easy-incremental-builds-with-ghc/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[A Tour through Swift Attributes]]></title><description><![CDATA[By Marco Eidinger]]></description><link>https://notes.softinio.com/p/a-tour-through-swift-attributes</link><guid isPermaLink="false">https://notes.softinio.com/p/a-tour-through-swift-attributes</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Wed, 21 Dec 2022 07:53:41 GMT</pubDate><enclosure url="https://substack-video.s3.amazonaws.com/video_upload/post/92017335/de6f5b32-804e-4ea1-b537-ecd4c2813dfb/transcoded-00000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In November 2022, I had the great pleasure of welcoming Marco Eidinger as a speaker to <a href="https://www.sfswift.com">Swift Language User Group (San Francisco)</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com/w/d6jiJFm5hEFrzmKw9kdgXC&quot;,&quot;text&quot;:&quot;Watch on PeerTube&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com/w/d6jiJFm5hEFrzmKw9kdgXC"><span>Watch on PeerTube</span></a></p><p><strong>A Tour through Swift Attributes By <a href="https://blog.eidinger.info/">Marco Eidinger</a></strong></p><p>Learn about System Programming Interfaces (SPI) in Swift (aka @_spi ) and other Swift Attributes and how/when to use those attributes.</p><p><strong>About our speaker</strong></p><p><a href="https://blog.eidinger.info/">Marco Eidinger</a> is a Swift developer working on open source and enterprise mobile SDKs for iOS and macOS developers.</p><p>He writes weekly articles about Swift and iOS development and created open-source tools like:</p><ul><li><p><a href="https://github.com/MarcoEidinger/SwiftPlantUML">SwiftPlantUML</a>, an Xcode extension and command-line tool, to generate UML class diagrams from Swift code.</p></li><li><p><a href="https://github.com/MarcoEidinger/XCSnippetsApp">XCSnippetsApp</a>, an macOS application to explore code snippets from the Swift and iOS community, view and edit the snippets before adding them conveniently to Xcode.</p></li><li><p><a href="https://github.com/MarcoEidinger/swift-package-dependencies-check">swift-package-dependencies-check</a>, a GitHub action to detect outdated versions of your Swift package dependencies.</p></li></ul><p>Follow <a href="https://twitter.com/MarcoEidinger">Marco on Twitter</a> and do visit his <a href="https://blog.eidinger.info/">blog</a>.</p><p><strong>Event details:</strong> <a href="https://www.meetup.com/swift-language/events/289345691/">https://www.meetup.com/swift-language/events/289345691/</a></p><p><strong>For more information about Swift Language User Group (San Francisco) visit:</strong></p><p><a href="https://www.sfswift.com">https://www.sfswift.com</a> and Follow us on <a href="https://twitter.com/sfswift">Twitter</a> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/a-tour-through-swift-attributes/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/a-tour-through-swift-attributes/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Beginner-friendly introduction to Free Monads]]></title><description><![CDATA[By Dmitrii Kovanikov]]></description><link>https://notes.softinio.com/p/beginner-friendly-introduction-to</link><guid isPermaLink="false">https://notes.softinio.com/p/beginner-friendly-introduction-to</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Wed, 14 Dec 2022 06:40:37 GMT</pubDate><enclosure url="https://substack-video.s3.amazonaws.com/video_upload/post/90559618/4a4238eb-156f-49e9-99d2-ba43c7c8868e/transcoded-00000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In November 2022, I had the great pleasure of welcoming Dmitrii Kovanikov as a speaker to <a href="https://www.sfhaskell.com">Bay Area Haskell User Group</a> with this awesome talk.</p><p>I am making recordings of the meetups I arrange available here on my newsletter first so be sure to subscribe to be the first to view them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com/w/i55qwe9FiyHRzsTkYYJLhU&quot;,&quot;text&quot;:&quot;Watch on PeerTube&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com/w/i55qwe9FiyHRzsTkYYJLhU"><span>Watch on PeerTube</span></a></p><p><strong>Beginner-friendly introduction to Free Monads by <a href="https://kodimensional.dev/">Dmitrii Kovanikov</a></strong></p><p>In this talk, I'd like to look into several diverse problems, their possible solutions and discuss drawbacks of with these ad-hoc solutions. After that, I'm going to introduce the idea of Data-Oriented Programming. I'll build the concept of Free Monad from ground up and explain the uniform approach for all the demonstrated different problems. I'm also going to discuss the drawbacks of Free Monads.</p><p><strong>About our speaker - <a href="https://kodimensional.dev/">Dmitrii Kovanikov</a></strong><br>Functional Programming is one of my passions, and it has been a part of my professional life for quite a while already. I'm a Senior Software Engineer and I've been using Haskell in production, teaching and OSS for 7 years.</p><p>I do tons of open-source work including mentoring people, creating educational resources and maintaining projects. I'm an author and maintainer of dozens OSS libraries and applications. I also had been teaching Haskell at ITMO University for several years to undergrad students. I love making complicated topics accessible and sharing my knowledge with others!</p><p>Personal page and blog: <a href="https://kodimensional.dev">https://kodimensional.dev</a></p><p>Twitter: <a href="https://twitter.com/chshersh">https://twitter.com/chshersh</a><br>GitHub: <a href="https://github.com/chshersh">https://github.com/chshersh</a></p><p><strong>Event details:</strong> <a href="https://www.meetup.com/bay-area-haskell-user-group/events/288894864/">https://www.meetup.com/bay-area-haskell-user-group/events/288894864/</a></p><p><strong>For more information about Bay Area Haskell and Functional Programming User Group visit: </strong></p><p><a href="https://www.sfhaskell.com">https://www.sfhaskell.com</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/beginner-friendly-introduction-to/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/beginner-friendly-introduction-to/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Announcing Silicon Valley Nix / NixOS User Group]]></title><description><![CDATA[https://www.svnix.com]]></description><link>https://notes.softinio.com/p/announcing-silicon-valley-nix-nixos</link><guid isPermaLink="false">https://notes.softinio.com/p/announcing-silicon-valley-nix-nixos</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Tue, 22 Nov 2022 18:50:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0Lvk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Lvk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Lvk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Lvk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2944094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Lvk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0Lvk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6df8ed33-e9cb-4b83-8263-dc8b9da42333_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I am excited to announce that I am starting a new meetup group in the Bay Area.</p><h1>Silicon Valley Nix / NixOS User Group </h1><p>The focus of this meetup group is to support all contributors and users interested in <a href="https://nixos.org/">Nix and NixOS</a> to get together to learn from each other, hack on Nix related projects and to help evangelize to increase adoption of Nix and NixOS.</p><h2>How do I join the meetup group?</h2><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.meetup.com/silicon-valley-nix-nixos-user-group/&quot;,&quot;text&quot;:&quot;Meetup&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.meetup.com/silicon-valley-nix-nixos-user-group/"><span>Meetup</span></a></p><h2>What is NixOS and Nix? </h2><p><strong>Nix</strong> is a package manager that comes with its own language that you use to create packages with. The language is functional and it allows you to create cross platform and cross distribution builds of packages. It most important goal is for all builds to be reproducible. </p><p><strong>NixOS</strong> is a Linux distribution that leverages Nix package manager and its language for system configuration. </p><h2>Will these events be in-person or online?</h2><p>We will be starting in person events from January 2023. We will  be running online events also. When possible we will also stream our in person events online also.</p><p>You should consider becoming a member of our meetup group regardless of where you are located if you have an interest in Nix and NixOS as we look forward to meeting you at our online events.</p><h2>Can I see a recording of the events?</h2><p>Yes, we will publish the recordings of our events in <a href="https://notes.softinio.com">this newsletter</a>, so subscribe to be informed when they are published &#128071; </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The recordings will also be published on our <a href="https://watch.softinio.com/c/softinio/videos">PeerTube</a> instance and <a href="https://www.youtube.com/channel/UCx317LNd-AlbTcE_0FkdJcg/featured">YouTube</a> channel at a later date.</p><h2>I want to chat and keep in touch with the organizers and other members, how do I do that? </h2><p>We have a Matrix chat room you can join to keep in touch &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://matrix.to/#/#svnix:matrix.org&quot;,&quot;text&quot;:&quot;Matrix Chat Room&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://matrix.to/#/#svnix:matrix.org"><span>Matrix Chat Room</span></a></p><p>We look forward to chatting with you on Matrix.</p><h2>Other Resources about our meetup group</h2><p>Visit our website for more information, including how to submit your talk if you want to speak at our meetup and details of our code of conduct</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.svnix.com&quot;,&quot;text&quot;:&quot;svnix.com&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.svnix.com"><span>svnix.com</span></a></p><p>Follow us on Twitter </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/svnixug&quot;,&quot;text&quot;:&quot;@svnixug&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://twitter.com/svnixug"><span>@svnixug</span></a></p><h2>We are looking for volunteers to become event hosts / co-organizers of our meetup group</h2><p>If you are interested in helping with organizing events, hosting events and helping us with finding speakers get in touch.</p><p>I am hoping to put a team of organizers with aligned goals for the meetup together so our joint effort can result in regular events. </p><p>My dream is to have an event every week. A job one person cannot do.</p><h2>Can you host our in person events at your companies office? </h2><p>To be able to host our events in person we rely on kind companies in the Bay Area to host our events in return for some benefits such as help with your hiring and talking about your open positions at our events or simply for getting your engineering organization recognized by the greater community.</p><p>If this is something you can help us with please get in touch.</p><h2>How to contact us</h2><ul><li><p>Our Meetup groups <a href="https://matrix.to/#/#svnix:matrix.org">Matrix chat room</a></p></li><li><p>Chat with our organizer, <a href="https://matrix.to/#/@softinio:matrix.org">Salar Rahmanian directly on Matrix</a></p></li><li><p><a href="https://www.meetup.com/messages/?new_convo=true&amp;member_id=189858257&amp;name=Salar+Rahmanian">Message organizer on Meetup</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 7]]></title><description><![CDATA[Welcome to issue 7 of my notes.]]></description><link>https://notes.softinio.com/p/softinios-notes-on-software-engineering</link><guid isPermaLink="false">https://notes.softinio.com/p/softinios-notes-on-software-engineering</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sun, 06 Nov 2022 16:23:34 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="607" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;black and yellow i love you print textile&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="black and yellow i love you print textile" title="black and yellow i love you print textile" srcset="https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1622300896044-e26a911ca3db?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxzZXZlbnxlbnwwfHx8fDE2Njc2OTQ0MTA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@marcel_eberle">Marcel Eberle</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Welcome to issue 7 of my notes.</p><h2>Moving back to Substack</h2><p>I originally started my newsletter here on substack, but later moved it to <a href="https://www.getrevue.co">Revue</a>. It wasn&#8217;t the right decision and it lead to me writing less. I have now corrected this mistake and have moved back to substack as you can see. Thank you for your patience and apologize for the indecision.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>I am organizing Meetups again</h2><p>Sticking with the theme of reversing any decision I make &#128514;&#129315; if you all recall back in <a href="https://www.softinio.com/post/all-good-things-come-to-an-end/">April 2021 I stepped down from organizing meetups</a>, however in December 2021 I took over as organizer of <a href="https://www.sfhaskell.com">Bay Area Haskell &amp; Functional Programming User Group</a> and in March 2022 I took over as organizer for <a href="https://www.sfswift.com">Swift Language User Group (San Francisco)</a>.</p><p>I am hopeful that in 2023 we can hopefully start arranging in person events again. So far, finding a venue to host the event has been a challenge especially as a lot of companies have not returned to office life yet.</p><p>All good though, I have continued arranging online events when possible. Online events are great too, they have given me the ability to arrange talks from some world class speakers that are not local to me and our meetup here in the Bay area.</p><h4>Recordings of Meetups event in 2022 so far</h4><h5>Namespaced DeBruijn Indices By Gabriella Gonzalez</h5><div id="youtube2-Ku9-hmf1Qkw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Ku9-hmf1Qkw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Ku9-hmf1Qkw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h5><strong>Supercharging Data with SQL and Haskell By Ozgun Ataman</strong></h5><div id="youtube2-moX3CLBGRmQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;moX3CLBGRmQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/moX3CLBGRmQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h5><strong>Server-side Swift State Of The Union By Tim Condon</strong></h5><div id="youtube2-Te0aCoenCMg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Te0aCoenCMg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Te0aCoenCMg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Upcoming Events</h3><ul><li><p>Swift Language User Group (San Francisco): <a href="https://www.meetup.com/swift-language/events/289345691/">A Tour through Swift Attributes By Marco Eidinger</a></p></li></ul><div><hr></div><h2>Rise of Mastodon and the Fediverse</h2><p>I have been a long standing advocate and user of free software and open source software. Few years back I joined a <a href="https://joinmastodon.org">mastodon</a> instance called <a href="https://fosstodon.org">Fosstodon</a>.</p><h3>What is Mastodon you ask? </h3><p>You can think of it as a twitter alternative, that is not owned by a single company or person, but rather anyone can start their own service. These services can federate with each and communicate with one another using a standardized protocol called <a href="https://activitypub.rocks">Activitypub</a>.</p><p>The official Mastodon documentation probably explains all this better than me so have a <a href="https://docs.joinmastodon.org">read</a>.</p><h3>Why I joined Mastodon / Fosstodon</h3><p>Fosstodon is an instance of Mastodon for anyone with an interest in free and open source software. I joined as I wanted to read content and make friends and network with other nerds with this interest. </p><p>I have really enjoyed being part of this community. The kind of content shared and the people I networked with I would never have been able to do in the same way on twitter.</p><p>One thing though, hardly any of my friends or people I follow on twitter have been on any mastodon instance/server and if they were they were not active.</p><h3>The Rise</h3><p>Since Elon Musk bought Twitter a lot of people have started using Mastodon. This has lead to some of the more famous instances getting slow and needing further investment in their infrastructure. Some have even closed registration. </p><p>On the positive side I can now interact with some of my twitter buddies on mastodon also.</p><p>It is always nice to see free software getting more adoption and more people using services not run by big corporations.</p><h3>What are your options for joining Mastodon</h3><p>One of the great things about mastodon is regardless of which instance you join, you can move to another instance easily in the future. So just join one that appeals to you and as you learn more about it and if you prefer somewhere else later you can move.</p><p>If I was joining today I would probably join one of these instances, and this is more based on what areas and topics interest me, that is functional programming or free and open source software: </p><ul><li><p><a href="https://fosstodon.org">fosstodon</a> - this is where I am now. Focused on Free and Open source software</p></li><li><p><a href="https://functional.cafe/about">functional.cafe</a> - Functional Programming focus</p></li><li><p><a href="https://types.pl/about">types.pl</a> - Functional programming, programming language theorists and mathematicians</p></li><li><p><a href="https://mathstodon.xyz/about">mathstodon</a> - All things Maths</p></li><li><p><a href="https://linuxrocks.online/about">Linux Rocks</a> - All things Linux</p></li></ul><p>Of course you have the option to host it yourself under your own domain too. And if you want your own instance but want to have it managed by someone else you have that option too via <a href="https://masto.host">https://masto.host</a> and others.</p><h3>My thoughts on Twitter and Mastodon</h3><p>I really like Twitter and everyone on there I interact with. I have no plans to leave twitter or change how I use it. I see Mastodon as a complement to twitter not as a replacement. </p><p>I do think there is value in using both especially if you find an instance on Mastodon with conversations that are inline with your interests that may not be as focused available on twitter like I did.</p><h3>Useful Resources on Mastodon</h3><ul><li><p><a href="https://kevquirk.com/how-does-mastodon-work/">How does mastodon work</a></p></li><li><p><a href="https://kevquirk.com/getting-started-with-mastodon/">Getting Started with Mastodon</a></p></li><li><p>If you join, follow me: <a href="https://fosstodon.org/@softinio">@softinio@fosstodon.org</a></p></li></ul><h3>Do you have any questions about Mastodon? </h3><p>&#128071; Ask me anything about it using comments here &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/softinios-notes-on-software-engineering/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/softinios-notes-on-software-engineering/comments"><span>Leave a comment</span></a></p><div><hr></div><h2>Articles and Blogs I enjoyed Reading</h2><ul><li><p><a href="https://alexn.org/blog/2022/10/03/execute-shell-commands-in-java-scala-kotlin/?pk_campaign=twitter">Execute Shell Commands in Java/Scala/Kotlin By Alexandru Nedelcu</a></p></li><li><p><a href="https://www.haskellforall.com/2022/10/how-to-correctly-cache-build-time.html">How to correctly cache build-time dependencies using Nix By Gabriella Gonzalez</a></p></li><li><p><a href="https://blog.kubukoz.com/flakes-first-steps/">Flakes first steps by Jakub Koz&#322;owski</a></p></li><li><p><a href="https://simonwillison.net/2022/Oct/29/the-perfect-commit/">The Perfect Commit By Simon Willison</a></p></li><li><p><a href="https://spectrum.ieee.org/functional-programming">Why functional programming should be the future of software development</a></p></li></ul><div><hr></div><h2>Talks I enjoyed watching</h2><div id="youtube2-8Ab3ArE8W3s" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;8Ab3ArE8W3s&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/8Ab3ArE8W3s?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-UJA4PGKny2k" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;UJA4PGKny2k&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/UJA4PGKny2k?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2>Thank you!</h2><p>Thank you for taking the time to read this issue of my notes. Hope some of the information you found was useful to you. Please share with your network. </p><p>I leave you with a picture of a new wine I tried couple of weeks ago that I really liked! Wine to try tips welcome in comments below &#128071; too as well as any thing you all want to discuss related to this post.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DDTy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DDTy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DDTy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg" width="480" height="640" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/dff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79523,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DDTy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DDTy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdff647a7-0a0d-4d19-bd15-e213bd2fc00e_480x640.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 6]]></title><description><![CDATA[Some exciting news, I have launched my own PeerTube video site as an alternative to YouTube. Read all about it here on my blog:]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-6</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-6</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sat, 27 Nov 2021 19:53:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/btObxP-5oZA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Some exciting news, I have launched my own PeerTube video site as an alternative to YouTube.</p><p>Read all about it here on my blog:</p><div><hr></div><p><strong><a href="https://www.softinio.com/post/announcing-my-new-site-for-great-technical-video-content/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Announcing My New Site for Great Technical Video Content | Salar Rahmanian</a> &#8212; <a href="https://www.softinio.com/post/announcing-my-new-site-for-great-technical-video-content/">www.softinio.com</a></strong></p><p>I am thrilled to announce my new video website watch.softinio.com, a place for great technical talk content ad free and free from commercial sponsorship.</p><p>Better late than never, I finally started producing my own content too. I made an introduction video summarizing the content I am planning to create</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://watch.softinio.com/w/uyNLZr9rtqZEKzTUg5CRJK&quot;,&quot;text&quot;:&quot;Watch my Video&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://watch.softinio.com/w/uyNLZr9rtqZEKzTUg5CRJK"><span>Watch my Video</span></a></p><p>I have been a lifelong fan and user of vim and when <a href="http://neovim.io">Neovim</a> came out I moved to it and have been using <a href="http://neovim.io">Neovim</a> ever since. I finally took the plunge and wrote my first ever plugin. I wrote it using Lua and I must admit really enjoyed doing it so more plugins using Lua to come.</p><p>My plugin is an extension to the awesome <a href="https://github.com/nvim-telescope/telescope.nvim">telescope</a> that allows you to search the <a href="https://index.scala-lang.org/">scaladex index</a> for packages you want to add to your Scala project and add to your project from within Neovim.</p><p><strong><a href="https://github.com/softinio/scaladex.nvim?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">GitHub - softinio/scaladex.nvim: Neovim and Telescope plugin to search the scaladex index</a> &#8212; <a href="https://github.com/softinio/scaladex.nvim">github.com</a></strong> Neovim and Telescope plugin to search the scaladex index - GitHub - softinio/scaladex.nvim: Neovim and Telescope plugin to search the scaladex index</p><div id="youtube2-btObxP-5oZA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;btObxP-5oZA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/btObxP-5oZA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Scala, Java and the JVM</h2><p><strong><a href="https://www.linkedin.com/posts/scala-center_scalacenter-scalacenter-scalacenter-activity-6868893289307758593-VbaN/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Scala Center on LinkedIn: #scalacenter #scalacenter #scalacenter</a> &#8212; <a href="https://www.linkedin.com/posts/scala-center_scalacenter-scalacenter-scalacenter-activity-6868893289307758593-VbaN/">www.linkedin.com</a></strong> &#129345;&#129345;&#129345; We&#8217;re thrilled to announce that #scalacenter is now active on LinkedIn! As an open source ...</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/akkateam/status/1461646923497156610&quot;,&quot;full_text&quot;:&quot;We know you've been eager to use Akka natively on Scala 3, and are happy to announce the experimental _3 snapshots from 2.6.17+70-9b174a31-SNAPSHOT onwards have no remaining known problems!\n\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://doc.akka.io/docs/akka/snapshot/project/scala3.html\&quot;>doc.akka.io/docs/akka/snap&#8230;</a>\n&quot;,&quot;username&quot;:&quot;akkateam&quot;,&quot;name&quot;:&quot;Akka Team&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Nov 19 10:45:57 +0000 2021&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:32,&quot;like_count&quot;:124,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://github.com/akka/akka/issues/30243&quot;,&quot;image&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4182da23-88c1-42ae-bfec-1b8ec625c60d_1200x600.png&quot;,&quot;title&quot;:&quot;scala3: publishing scala 3 artifacts &#183; Issue #30243 &#183; akka/akka&quot;,&quot;description&quot;:&quot;There are 2 ways Akka can support Scala 3: by making sure our 2.13.x artifacts work from Scala 3, and by publishing our own Scala 3 artifacts. This is an &amp;#39;umbrella issue&amp;#39; to track progress ...&quot;,&quot;domain&quot;:&quot;github.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p><strong><a href="https://databricks.com/blog/2021/10/19/introducing-apache-spark-3-2.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Introducing Apache Spark&#8482; 3.2 - The Databricks Blog</a> &#8212; <a href="https://databricks.com/blog/2021/10/19/introducing-apache-spark-3-2.html">databricks.com</a></strong> Learn more about the latest release of Apache Spark&#8482;, version 3.2, including pandas API on Spark, Adaptive Query Execution, and ANSI mode and how you can begin using it through Databricks Runtime 10.0.</p><p><strong><a href="https://www.microsoft.com/en-us/research/blog/synapseml-a-simple-multilingual-and-massively-parallel-machine-learning-library/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">SynapseML: A simple, multilingual, and massively parallel machine learning library - Microsoft Research</a> &#8212; <a href="https://www.microsoft.com/en-us/research/blog/synapseml-a-simple-multilingual-and-massively-parallel-machine-learning-library/">www.microsoft.com</a></strong> Today, we&#8217;re excited to announce the release of SynapseML (previously MMLSpark), an open-source library that simplifies the creation of massively scalable machine learning (ML) pipelines. Building production-ready distributed ML pipelines can be difficult, even for the most seasoned developer. Composing tools from different ecosystems often requires considerable &#8220;glue&#8221; code, and many frameworks aren&#8217;t designed with [&#8230;]</p><p><strong><a href="https://jducoeur.medium.com/a-philosophy-of-testing-1-introduction-dc5b7b43a211?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">A Philosophy of Testing 1: Introduction | by Mark "Justin" Waks | Nov, 2021 | Medium</a> &#8212; <a href="https://jducoeur.medium.com/a-philosophy-of-testing-1-introduction-dc5b7b43a211">jducoeur.medium.com</a></strong> I&#8217;ve been programming for the better part of forty years, in several dozen different languages. Those environments vary a lot, and many things have changed, but more than you might think has stayed&#8230;</p><p><strong><a href="https://kstefanj.github.io/2021/11/24/gc-progress-8-17.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">GC progress from JDK 8 to JDK 17</a> &#8212; <a href="https://kstefanj.github.io/2021/11/24/gc-progress-8-17.html">kstefanj.github.io</a></strong> JDK 17 has been out for a few months and it&#8217;s not just packed with new language features. The performance boost compared to older JDK versions is also really significant. It becomes especially clear when compared to the previous LTS releases, JDK 8 and JDK 11. Much of the improved performance comes from new features and optimizations in the JVM and in this post the focus will be on the improvements done in the area of garbage collection.</p><h2>Functional Programming and Category Theory</h2><p><strong><a href="http://www.cs.nott.ac.uk/~pszgmh/cat.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Introduction to Category Theory</a></strong> The aim of this course is to teach the basics of category theory, in a way that is accessible and relevant to computer scientists. The emphasis is on gaining a good understanding the basic definitions, examples, and techniques, so that students are equipped for further study on their own of more advanced topics if required.</p><p><strong><a href="https://www.cambridge.org/core/journals/journal-of-functional-programming/article/on-the-correctness-of-monadic-backward-induction/0F71FFE6AE1222E77F52341C695E366A?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">On the correctness of monadic backward induction | Journal of Functional Programming | Cambridge Core</a></strong> On the correctness of monadic backward induction - Volume 31</p><p><strong><a href="https://www.cambridge.org/core/journals/journal-of-functional-programming/article/abs/type-and-scopesafe-universe-of-syntaxes-with-binding-their-semantics-and-proofs/8A0865F34313BA65F4FE46D4522B4568?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">A type- and scope-safe universe of syntaxes with binding: their semantics and proofs | Journal of Functional Programming | Cambridge Core</a></strong> A type- and scope-safe universe of syntaxes with binding: their semantics and proofs - Volume 31</p><h2>Other</h2><div id="youtube2-DcmUA6nEkWs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;DcmUA6nEkWs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/DcmUA6nEkWs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Happy thanksgiving all</h2><p>I wish all my family, friends, coworkers, subscribers, and followers a very Happy thanksgiving. I am thankful for all of you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pOzY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pOzY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pOzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pOzY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pOzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47f9ffe8-4b75-4814-ba86-f82fb1d624d8_2048x2048.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thanksgiving 2021</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 5]]></title><description><![CDATA[It has been an exciting few weeks since my last newsletter. Java 17 launched with some exciting features. Apache Spark PR to add support for Scala 2.13 got merged. And Kafka 3 was released.]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-5</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-5</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sat, 25 Sep 2021 18:26:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/72W_VvFRqc0" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It has been an exciting few weeks since my last newsletter. Java 17 launched with some exciting features. Apache Spark PR to add support for Scala 2.13 got merged. And Kafka 3 was released.</p><div><hr></div><h2>Scala</h2><p>Spark support for Scala 2.13 is merged &#127881;</p><p><strong><a href="https://issues.apache.org/jira/browse/SPARK-25075?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">[SPARK-25075] Build and test Spark against Scala 2.13 - ASF JIRA</a></strong></p><p><strong><a href="https://antoine-doeraene.medium.com/cross-platform-mobile-dev-with-scala-and-capacitor-54e69b62b50c?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Cross-Platform Mobile dev with Scala and Capacitor | by Antoine Doeraene | Jul, 2021 | Medium</a> &#8212; <a href="https://antoine-doeraene.medium.com/cross-platform-mobile-dev-with-scala-and-capacitor-54e69b62b50c">antoine-doeraene.medium.com</a></strong> These last years, the trend has been to export web technologies out of the browser, into the desktop (e.g., electron) and more and more into Mobile Applications (e.g., Ionic). Whether or not we like&#8230;</p><h2>Swift</h2><p><strong><a href="https://developer.apple.com/videos/play/wwdc2021/10253/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Write a DSL in Swift using result builders - WWDC21 - Videos - Apple Developer</a> &#8212; <a href="https://developer.apple.com/videos/play/wwdc2021/10253/">developer.apple.com</a></strong> Some problems are easier to solve by creating a customized programming language, or &#8220;domain-specific language.&#8221; While creating a DSL...</p><p><strong><a href="https://www.donnywals.com/what-are-swift-concurrencys-task-local-values/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">What are Swift Concurrency&#8217;s task local values? &#8211; Donny Wals</a> &#8212; <a href="https://www.donnywals.com/what-are-swift-concurrencys-task-local-values/">www.donnywals.com</a></strong> If you've been following along with Swift Concurrency in the past few weeks, you might have come across the term "task local values". Task local values are&#8230;</p><p><strong><a href="https://www.youtube.com/watch?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter&amp;v=-c7f-D-peUY">What are monads &#8211;&nbsp;Daniel Steinberg on&nbsp;Swiftly Speaking</a> &#8212; <a href="https://www.youtube.com/watch?v=-c7f-D-peUY">www.youtube.com</a></strong> In this excerpt from Swiftly Speaking, Daniel Steinberg talks about monads. For the full interview, click here: https://youtu.be/FxUK_RnTpvA?t=29</p><h2>Java</h2><p>Java 17 launched on September 14th, 2021. I am pretty excited about this release as it does include some features that I have used in other languages like Scala such as sealed classes and pattern matching using improved switch statements. This release is also LTS. Excited to use Java 17.</p><p><strong><a href="https://www.theregister.com/2021/09/14/java_17/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Java 17 arrives with long-term support: What's new, and is it falling behind Kotlin? &#8226; The Register</a> &#8212; <a href="https://www.theregister.com/2021/09/14/java_17/">www.theregister.com</a></strong> Text blocks, sealed classes, switch expressions, records, and more</p><h2>Kafka</h2><p><strong><a href="https://www.confluent.io/blog/apache-kafka-3-0-major-improvements-and-new-features/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Apache Kafka 3.0 - Major Improvements, Breaking API Changes, and New Features</a> &#8212; <a href="https://www.confluent.io/blog/apache-kafka-3-0-major-improvements-and-new-features/">www.confluent.io</a></strong> I&#8217;m pleased to announce the release of Apache Kafka 3.0 on behalf of the Apache Kafka&#174; community. Apache Kafka 3.0 is a major release in more ways than one. Apache</p><h2>Other</h2><p><strong><a href="https://www.benkuhn.net/blub/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">In defense of blub studies | benkuhn.net</a></strong> Why it&#8217;s worth it to deeply understand the fiddly, boring-seeming details of the computer systems you use every day.</p><div id="youtube2-72W_VvFRqc0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;72W_VvFRqc0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/72W_VvFRqc0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><strong><a href="https://martin.kleppmann.com/papers/debs21-keynote.pdf?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Thinking in Events: From Databases to DistributedCollaboration Software</a></strong></p><p>This is the paper associated with the above talk by Martin Kleppmann</p><p><strong><a href="https://pathelland.substack.com/p/dont-get-stuck-in-the-con-game-v3?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Don't Get Stuck in the CON Game (V3) - by Pat Helland - Scattered Thoughts on Distributed Systems</a> &#8212; <a href="https://pathelland.substack.com/p/dont-get-stuck-in-the-con-game-v3">pathelland.substack.com</a></strong> Consistency, convergence, and confluence are not the same! Eventual consistency and eventual convergence aren&#8217;t the same as confluence, either.</p><p><strong><a href="https://medium.com/graalvm/graalvm-at-facebook-af09338ac519?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">GraalVM at Facebook. Facebook is using GraalVM to accelerate&#8230; | by Alina Yurenko | graalvm | Jul, 2021 | Medium</a> &#8212; <a href="https://medium.com/graalvm/graalvm-at-facebook-af09338ac519">medium.com</a></strong> Facebook is using GraalVM to accelerate its Spark workloads and reduce memory &amp; CPU usage. Keep reading to learn about their migration story, performance improvement results, and future plans.</p><p><strong>Category Theory</strong></p><p>Discovered a new <a href="https://www.youtube.com/channel/UCIyDqfi_cbkp-RU20aBF-MQ/featured">YouTube channel</a> on Category Theory</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2></h2><p></p>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 4]]></title><description><![CDATA[It has been an exciting few weeks since the last issue of this newsletter.Scala 3 was released with great amount excitement and enthusiasm from the Scala community. It has certainly got off to a great start with a lot of the popular 3rd party libraries already updated to support Scala 3.Apple's WWDC2021 conference was this week. Exciting times for the Swift Programming Language adding many new concurrency features to the language such as Actors & Async Await. I watched a few of the talks and was really impressed by the quality. I will be busy next few weeks trying to catch up and watch more of them.]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-4</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-4</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sat, 26 Jun 2021 17:51:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8L1q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F40b08f1d-bb98-48bc-bfcf-f15ea1c44a50_399x648.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It has been an exciting few weeks since the last issue of this newsletter.</p><p>Scala 3 was released with great amount excitement and enthusiasm from the Scala community. It has certainly got off to a great start with a lot of the popular 3rd party libraries already updated to support Scala 3.</p><p>Apple's WWDC2021 conference was this week. Exciting times for the Swift Programming Language adding many new concurrency features to the language such as Actors &amp; Async Await. I watched a few of the talks and was really impressed by the quality. I will be busy next few weeks trying to catch up and watch more of them.</p><div><hr></div><h2>Scala</h2><p><strong><a href="https://www.scala-lang.org/blog/2021/05/14/scala3-is-here.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Scala 3 is here!&#127881;&#127881;&#127881; | The Scala Programming Language</a> &#8212; <a href="https://www.scala-lang.org/blog/2021/05/14/scala3-is-here.html">www.scala-lang.org</a></strong> After 8 years of work, 28,000 commits, 7,400 pull requests, 4,100 closed issues &#8211; Scala 3 is finally out. Since the first commit on December 6th 2012, more than a hundred people have contributed to the project. Today, Scala 3 incorporates the latest research in type theory as well as the industry experience of Scala 2. We&#8217;ve seen what worked well (or not so well) for the community in Scala 2. Based on this experience we&#8217;ve created the third iteration of Scala &#8211; easy to use, learn, and scale.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/scala_lang/status/1393139114535444484&quot;,&quot;full_text&quot;:&quot;&#127930;&#127930;&#127930;\n\nAfter 8 years of work, 28,000 commits, 7,400 pull requests, 4,100 closed issues &#8211; Scala 3 is finally out!\n\nRead more here: <a class=\&quot;tweet-url\&quot; href=\&quot;https://scala-lang.org/blog/2021/05/14/scala3-is-here.html\&quot;>scala-lang.org/blog/2021/05/1&#8230;</a>&quot;,&quot;username&quot;:&quot;scala_lang&quot;,&quot;name&quot;:&quot;Scala&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri May 14 09:40:22 +0000 2021&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:997,&quot;like_count&quot;:2714,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://scala-lang.org/blog/2021/05/14/scala3-is-here.html&quot;,&quot;image&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/40b08f1d-bb98-48bc-bfcf-f15ea1c44a50_399x648.png&quot;,&quot;title&quot;:&quot;Scala 3 is here!&#127881;&#127881;&#127881;&quot;,&quot;description&quot;:null,&quot;domain&quot;:&quot;scala-lang.org&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>Its also time to add JDK17 to your scala builds, great success with the community build with a the few issues being resolved and fixed</p><p><strong><a href="https://contributors.scala-lang.org/t/scala-community-build-on-jdk-17/5153?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Scala community build on JDK 17 - Announcements - Scala Contributors</a> &#8212; <a href="https://contributors.scala-lang.org/t/scala-community-build-on-jdk-17/5153">contributors.scala-lang.org</a></strong> I encourage all Scala open-source maintainers to add JDK 17 to their CI matrices. Now&#8217;s a good time, since 17 is feature-frozen, the final release is expected in September, and it will be a &#8220;LTS&#8221; (long-term support) rele&#8230;</p><p>Really pleased to see <a href="https://typelevel.org/">Typelevel</a> migrating to Discord complementing the already established Scala Discord server.</p><p><strong><a href="https://typelevel.org/blog/2021/05/05/discord-migration.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Typelevel.scala | Discord Migration</a></strong> Let the Scala compiler work for you. We provide type classes, instances, conversions, testing, supplements to the standard library, and much more.</p><p>On the subject of Scala discord server. There is now a channel for content creators. If you have any suggestions for a topic to be covered, join in the conversation.</p><p><strong><a href="https://discord.com/invite/scala?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Join the Scala Discord Server!</a> &#8212; <a href="https://discord.com/invite/scala">discord.com</a></strong> the Scala programming language | 1,826 members</p><p><a href="https://deanwampler.github.io/">Dean Wampler</a> updated 3rd edition of his book Programming Scala covering Scala 3 is out now in all formats including print. Fun fact the second edition of this book was the first book I bought and read to learn Scala. Its a great book from a great author.</p><p><strong><a href="https://deanwampler.github.io/books/programmingscala.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Programming Scala</a></strong> Programming Scala, Third Edition covers Scala 3. It was published June, 2021 by O'Reilly Media. You can read it on the O'Reilly online learning platform or purchase ebook or print copies from these sellers:</p><p><a href="https://gvolpe.com/">Gabriel Volpe</a> also published the second edition of his popular book: Practical FP in Scala. Its still in my backlog of books to read but everyone I speak keeps telling how great it is.</p><p><strong><a href="https://leanpub.com/pfp-scala?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Practical FP in Scala: A&#8230; by Gabriel Volpe [PDF/iPad/Kindle]</a> &#8212; <a href="https://leanpub.com/pfp-scala">leanpub.com</a></strong> A practical book aimed for those familiar with functional programming in Scala who are yet not confident about architecting an application from scratch. Together, we will develop a purely functional application using the best libraries in the Cats ecosystem, while learning about design patterns and best practices.</p><p>A New course on Coursera called Effective Programming in Scala was launched thanks to the efforts of the <a href="https://scala.epfl.ch/">Scala Center</a> and <a href="http://julien.richard-foy.fr/">Julien Richard-Foy</a></p><p><strong><a href="https://www.coursera.org/learn/effective-scala?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Effective Programming in Scala | Coursera</a> &#8212; <a href="https://www.coursera.org/learn/effective-scala">www.coursera.org</a></strong> Offered by &#201;cole Polytechnique F&#233;d&#233;rale de Lausanne. Scala is an expressive, versatile, and safe programming language. In this course, you ... Enroll for free.</p><p>I was excited to find a new resource for learning about Cats Effect. I am really disappointed at myself for not knowing about this sooner</p><p><strong><a href="https://github.com/slouc/concurrency-in-scala-with-ce?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">GitHub - slouc/concurrency-in-scala-with-ce: Introduction to concepts of asynchronous and concurrent programming in Scala, based on the Cats Effect library.</a> &#8212; <a href="https://github.com/slouc/concurrency-in-scala-with-ce">github.com</a></strong> Introduction to concepts of asynchronous and concurrent programming in Scala, based on the Cats Effect library. - slouc/concurrency-in-scala-with-ce</p><p><a href="https://www.chris-kipp.io/">Chris Kipp</a> started a monthly event on twitch called <strong>Tooling talks</strong> where he interviews and talks about tooling. The first edition of this event kicked off with an interview with <a href="https://geirsson.com/">&#211;lafur P&#225;ll Geirsson</a> which was very insightful.</p><div id="youtube2-85OfN0aRjDk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;85OfN0aRjDk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/85OfN0aRjDk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Looking to migrate from Scala 2 to Scala 3, here is a talk on this very topic by <a href="https://twitter.com/meriamlachkar">Meriam Lachkar </a>of the <a href="https://scala.epfl.ch/">Scala Center</a></p><div id="youtube2-RDY3NMZYWwY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;RDY3NMZYWwY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/RDY3NMZYWwY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Swift</h2><p>One of the most exciting announcements at WWDC2021 was the addition of Async/Await and Actors to the Swift programming language.</p><p><strong><a href="https://developer.apple.com/videos/play/wwdc2021/10192/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">What&#8216;s new in Swift - WWDC21 - Videos - Apple Developer</a> &#8212; <a href="https://developer.apple.com/videos/play/wwdc2021/10192/">developer.apple.com</a></strong> Join us for an update on Swift. Discover the latest language advancements that make your code easier to read and write. Explore the...</p><p><strong><a href="https://developer.apple.com/videos/play/wwdc2021/10132/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Meet async/await in Swift - WWDC21 - Videos - Apple Developer</a> &#8212; <a href="https://developer.apple.com/videos/play/wwdc2021/10132/">developer.apple.com</a></strong> Swift now supports asynchronous functions &#8212; a pattern commonly known as async/await. Discover how the new syntax can make your code...</p><p><strong><a href="https://developer.apple.com/videos/play/wwdc2021/10133/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Protect mutable state with Swift actors - WWDC21 - Videos - Apple Developer</a> &#8212; <a href="https://developer.apple.com/videos/play/wwdc2021/10133/">developer.apple.com</a></strong> Data races occur when two separate threads concurrently access the same mutable state. They are trivial to construct, but are notoriously...</p><h2>Other</h2><p><strong><a href="https://queue.acm.org/detail.cfm?id=2884038&amp;utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Immutability Changes Everything - ACM Queue</a></strong> There is an inexorable trend toward storing and sending immutable data. We need immutability to coordinate at a distance, and we can afford immutability as storage gets cheaper. This article is an amuse-bouche sampling the repeated patterns of computing that leverage immutability. Climbing up and down the compute stack really does yield a sense of d&#233;j&#224; vu all over again.</p><p><strong><a href="http://www.jerf.org/iri/post/2958?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Functors and Monads For People Who Have Read Too Many "Tutorials" - iRi</a></strong> Title is literally true. This may not be the best place to learn about these concepts for the first time, because I'm going to focus on knocking down the misconceptions about them.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 3]]></title><description><![CDATA[I want to start this issue of with some personal news. After 7 or so years of organizing technical talks at a number of meetups I have decided to move on. Read more about it on my blog post announcing it below.]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-3</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-3</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Sat, 24 Apr 2021 06:31:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lcVt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I want to start this issue of with some personal news. After 7 or so years of organizing technical talks at a number of meetups I have decided to move on.</p><p>Read more about it on my blog post announcing it below.</p><div><hr></div><p><strong><a href="https://www.softinio.com/post/all-good-things-come-to-an-end/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">All Good Things Come to an End | Salar Rahmanian</a> &#8212; <a href="https://www.softinio.com/post/all-good-things-come-to-an-end/">www.softinio.com</a></strong> After having spent the last seven years organizing technical talks at several meetups I have decided to step down and move on.</p><p>My last meetup event was at <a href="http://sfscala.org">San Francisco Scala Meetup</a> with a talk by <a href="https://lewisjkl.com/">Jeff Lewis</a> of <a href="https://scalamonthly.com/about/">Scala Monthly</a> fame with an Introduction to <a href="https://github.com/typelevel/cats-parse">Cats Parse</a>. A very fitting last event with a great talk and surrounded by friends attending the event both on zoom and on twitch. Thank you all for attending and making it special.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lcVt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lcVt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lcVt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg" width="1456" height="851" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:851,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!lcVt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lcVt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8336ec9f-3075-4788-a08a-86ab146f497c_6040x3530.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Thank you all for attending my last event</figcaption></figure></div><p>You can view the recording of this event and great talk here:</p><div id="youtube2-wreCg30pyts" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wreCg30pyts&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/wreCg30pyts?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><strong>In March we had two great talks</strong></p><p><a href="https://www.scalawilliam.com/">William Narmontas</a> of <a href="https://www.scala-algorithms.com/">Scala Algorithms</a> with a talk on How to survive algorithms in Scala</p><div id="youtube2-Ee2Y9V5ePVo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Ee2Y9V5ePVo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Ee2Y9V5ePVo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><a href="https://www.chris-kipp.io/">Chris Kipp</a> with a talk on A Metals Retrospective</p><div id="youtube2-DRKx1a19c80" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;DRKx1a19c80&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/DRKx1a19c80?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Upcoming Events</h2><p><strong><a href="https://www.scalacon.org/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">ScalaCon. A series of virtual conferences brought to you by Scala eXchange and Scala Days</a> &#8212; <a href="https://www.scalacon.org/">www.scalacon.org</a></strong> A series of virtual conferences brought to you from Scala eXchange and Scala Days</p><h2>Releases and What's new</h2><p><strong><a href="https://github.com/typelevel/cats-effect/releases/tag/v3.0.0?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Release v3.0.0 &#183; typelevel/cats-effect &#183; GitHub</a> &#8212; <a href="https://github.com/typelevel/cats-effect/releases/tag/v3.0.0">github.com</a></strong> The pure asynchronous runtime for Scala. Contribute to typelevel/cats-effect development by creating an account on GitHub.</p><p><strong><a href="https://scalameta.org/metals/blog/2021/04/06/tungsten.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Metals v0.10.1 - Tungsten &#183; Metals</a> &#8212; <a href="https://scalameta.org/metals/blog/2021/04/06/tungsten.html">scalameta.org</a></strong> We're happy to announce the release of Metals v0.10.1, which mainly concentrated</p><p><strong><a href="https://eed3si9n.com/sbt-1.5.0?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">sbt 1.5.0 | eed3si9n</a></strong> Hi everyone. On behalf of the sbt project, I am happy to announce sbt 1.5.0. This is the fifth feature release of sbt 1.x, a binary compatible release focusing on new features. sbt 1.x is released under Semantic Versioning, and the plugins are expected to work throughout the 1.x series.</p><p><strong><a href="https://github.com/typelevel/fs2/releases/tag/v3.0.2?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Release v3.0.2 &#183; typelevel/fs2 &#183; GitHub</a> &#8212; <a href="https://github.com/typelevel/fs2/releases/tag/v3.0.2">github.com</a></strong> Compositional, streaming I/O library for Scala. Contribute to typelevel/fs2 development by creating an account on GitHub.</p><h2>Great articles and blog posts to read</h2><p><strong><a href="https://blog.colinbreck.com/engineering-management-three-books-and-three-videos/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Engineering Management: Three Books and Three Videos</a> &#8212; <a href="https://blog.colinbreck.com/engineering-management-three-books-and-three-videos/">blog.colinbreck.com</a></strong> I declined a number of opportunities to lead a team because I knew the role demanded an enormous change from that of an engineer. I still wanted to be solving technical challenges, in a state of flow, for hours a day. Equally important, I wanted to build a team with</p><p><strong><a href="https://softwaremill.com/what-ive-learned-from-signal-server-source-code/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">What I've learned from Signal server source code | SoftwareMill</a> &#8212; <a href="https://softwaremill.com/what-ive-learned-from-signal-server-source-code/">softwaremill.com</a></strong> Looking into other people's code lets us learn new facts and techniques. Here are lessons learned from Signal server source code.</p><p><strong><a href="https://www.cambridge.org/core/journals/journal-of-functional-programming/article/lambda-calculus-with-algebraic-simplification-for-reduction-parallelisation-extended-study/6B54DF4F6E295C414DE8A4029FE8B1F1?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Lambda calculus with algebraic simplification for reduction parallelisation: Extended study | Journal of Functional Programming | Cambridge Core</a></strong> Lambda calculus with algebraic simplification for reduction parallelisation: Extended study - Volume 31</p><p><strong><a href="https://typista.org/lean-for-scala-programmers-3/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Lean for Scala programmers - Part 3 | Typista.org</a> &#8212; <a href="https://typista.org/lean-for-scala-programmers-3/">typista.org</a></strong> Dependent Types and Type Classes</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 2]]></title><description><![CDATA[Welcome to the latest issue of my newsletter.Since the publication of the first issue of this newsletter as you can see I have migrated off of substack and moved to Revue. If you had subscribed to my newsletter on substack your subscription would have been migrated over to Revue. You will receive an email from Revue confirming your subscription to comply with GDPR regulations so please accept that of course if you would like to maintain your subscription to my newsletter. If you had not subscribed to my newsletter before, please subscribe as I have lots of awesome content planned for the year ahead that I will share with you via my newsletter. Why did I move to Revue? After giving Substack a try I reached the conclusion that Revue is a better fit for what I am after, namely the following reasons:Revue focuses on being a Newsletter and nothing else Revue provides some out of the box integrations that makes it easier for me to curate the content of my newsletter. For example I can easily add content I may have shared on Twitter.Revue provides me with access to their API. As a software engineer I see this as a benefit as it will enable me to create my own integrations and automate more of my workflow.What have I been up to?Since the last issue I have hosted 3 Scala Meetup events with 4 greats talks:]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-2</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-2</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Mon, 22 Mar 2021 03:56:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/9TR--8gAcZ8" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the latest issue of my newsletter.</p><p>Since the publication of the <a href="https://notes.softinio.com/p/softinio-s-notes-issue-1">first issue</a> of this newsletter as you can see I have migrated off of substack and moved to Revue. If you had subscribed to my newsletter on substack your subscription would have been migrated over to Revue. You will receive an email from Revue confirming your subscription to comply with GDPR regulations so please accept that of course if you would like to maintain your subscription to my newsletter.</p><p>If you had not subscribed to my newsletter before, please subscribe as I have lots of awesome content planned for the year ahead that I will share with you via my newsletter.</p><h2>Why did I move to Revue?</h2><p>After giving Substack a try I reached the conclusion that Revue is a better fit for what I am after, namely the following reasons:</p><ul><li><p>Revue focuses on being a Newsletter and nothing else</p></li><li><p>Revue provides some out of the box integrations that makes it easier for me to curate the content of my newsletter. For example I can easily add content I may have shared on Twitter.</p></li><li><p>Revue provides me with access to their API. As a software engineer I see this as a benefit as it will enable me to create my own integrations and automate more of my workflow.</p></li></ul><h2>Note / Update (November 2022)</h2><p>I actually moved back to substack.com as I found it better fit for my newsletter publication for many reasons. </p><h2>What have I been up to?</h2><p>Since the last issue I have hosted 3 Scala Meetup events with 4 greats talks:</p><div><hr></div><div id="youtube2-9TR--8gAcZ8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;9TR--8gAcZ8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/9TR--8gAcZ8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><a href="https://www.youtube.com/redirect?event=video_description&amp;redir_token=QUFFLUhqbUxDY1JHTjEwX0N3Tl9vcm90YWJZQ2cxYkdTd3xBQ3Jtc0ttdkdwMXBJVTVMNG1IMndvSThjVVdwUlhpYzZSNk9WSlJhbVEzU3pJMHBNS0lQOHU3cDZZOG41aUxaWnQtd29KZkJFWmk4Qm9LRUlwVzJhX3hXbjRBclVMM3JWMnlMM2NFOVRscFRuT01HWlBYN3l0Zw&amp;q=https%3A%2F%2Ftwitter.com%2Farosien">Adam Rosien</a> of Inner Product LLC kicked the year off with a wonderful talk on Essential effects covering Cats Effect and introducing his new book on this topic. A Highly recommended book which I can't wait to read. You can find details of his book and purchase it <a href="https://essentialeffects.dev/">here</a>.</p><div id="youtube2-0XJuq3DYqF8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0XJuq3DYqF8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0XJuq3DYqF8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Sandeep Virdi returned to SF Scala meetup for a talk on his implementation of <a href="http://Fast Serializable Multi-Version Concurrency Controlfor Main-Memory Database Systems">Fast Serializable Multi-Version Concurrency Controlfor Main-Memory Database Systems</a> using Scala and ZIO.</p><p>The other two talks have not been published so will include in my next newsletter.</p><h2>Upcoming Events</h2><p><strong><a href="https://www.meetup.com/scala-phase/events/276052376?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Adam Rosien: An Introduction to Cats Effect | Meetup</a> &#8212; <a href="https://www.meetup.com/scala-phase/events/276052376">www.meetup.com</a></strong> Wed, Mar 24, 2021, 7:30 PM: Cats Effect is a library that makes it easy to write code that effectively uses multiple cores and doesn&#8217;t leak resources. This makes building complex applications, such as</p><p><strong><a href="https://www.meetup.com/bay-area-ai/events/277024081/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">KUDO for MLOps: Kubernetes Universal Declarative Operator | Meetup</a> &#8212; <a href="https://www.meetup.com/bay-area-ai/events/277024081/">www.meetup.com</a></strong> Thu, Mar 25, 2021, 4:00 PM: While the rise of Kubernetes has been meteoric, deployment of stateful services onto Kubernetes is still in its infancy. While tooling to build operators to handle the natu</p><p><strong><a href="https://www.meetup.com/sfjava/events/276586491/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Good Code, Bad Code, and Vulnerable Code | Meetup</a> &#8212; <a href="https://www.meetup.com/sfjava/events/276586491/">www.meetup.com</a></strong> Wed, Apr 7, 2021, 6:30 PM: ZOOM ONLY - REGISTER FOR EVENT TO GET ZOOM URLJoin the zoom at 6:30 pm US pacific time! The audio doesn't start until we do, so don't worry if you don't hear anything at fir</p><p><strong><a href="https://www.meetup.com/SF-Scala/events/276753362/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Introduction to Cats Parse By Jeff Lewis | Meetup</a> &#8212; <a href="https://www.meetup.com/SF-Scala/events/276753362/">www.meetup.com</a></strong> Wed, Apr 14, 2021, 5:30 PM: This event will be streamed on Twitch (please log into twitch before the event starts). Once you RSVP you will see the link to twitch to join!For the hallway track and to a</p><h2>Latest from the world of Scala and Java</h2><h2>Java 16 Released</h2><p>Exciting to see Java 16 released with some nice anticipated features like Records and Sealed classes.</p><p><strong><a href="https://inside.java/2021/03/16/the-arrival-of-java16/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">The arrival of java 16! &#8211; Inside.java</a></strong> Further demonstrating Java&#8217;s path of continued innovation, Oracle is proud to announce the general availability of Java 16 representing the sixth feature release as part of the six-month cadence. This level of predictability allows developers to more easily manage their adoption of innovation thanks to a steady stream of expected changes ...</p><p><strong><a href="https://www.scalawilliam.com/jdk16-scala-top5/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">JDK 16's Top 5 for Scala</a> &#8212; <a href="https://www.scalawilliam.com/jdk16-scala-top5/">www.scalawilliam.com</a></strong> Every improvement to Java is an improvement to Scala. Here are my top 5 from Java 16.</p><p><strong><a href="https://jamesward.com/2021/03/16/the-modern-java-platform-2021-edition/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">The Modern Java Platform - 2021 Edition - James Ward</a></strong> Many developers were burned by the overly complex world of Java back in the early 2000s. The Gang of Four patterns and middleware / J2EE / Java EE led to ridiculous levels of alleged decoupling as is evident in this sequence diagram from an open source J2EE ecommerce system I worked on in 2002: Back in 2014 I wrote about how things had changed: Java Doesn&#8217;t Suck &#8211; You&#8217;re Just Using it Wrong.&nbsp; But six years have passed since I wrote that and things have continued to improve, making the Java platform a fantastic option when building microservices, data pipelines, web apps, mobile apps, and more.&nbsp; Let&#8217;s walk through some of the &#8220;modern&#8221; (as of 2021) aspects to the Java platform.</p><h2>Great articles and blog posts to read</h2><p><strong><a href="https://contramap.dev/posts/2021-01-22-functional_design/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Functional Design | Francis Toth / Contramap</a></strong> This is a long due post following the talks given recently at Dawscon, CodeMesh, and Scala Toronto about Functional Design (slides are available here). This post has been updated since its first publication. As noticed by Alwin and following this conversation, the name IO can be confusing so it has been replaced by Console. Considering the amount of material available today, Software Design is rather intimidating.</p><p><strong><a href="https://www.lihaoyi.com/post/FromFirstPrinciplesWhyScala.html?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">From First Principles: Why Scala?</a></strong> Scala, first appearing in 2004, is neither an old stalwart nor a new player in the programming language market. This post will discuss the unique combination of features that Scala provides and how it compares to other languages on the market, diving beneath the superficial experience to explore the fundamentals of the language. From this, you will learn why you might consider including Scala as a valuable addition to your programming toolbox.</p><p><strong><a href="https://blog.shipreq.com/post/compilers_are_hard/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Compilers are hard | ShipReq Blog</a> &#8212; <a href="https://blog.shipreq.com/post/compilers_are_hard/">blog.shipreq.com</a></strong> Writing (something like) a compiler is hard. Here I explore what some of the difficulties are, and provide some strategies to ensure you still maintain quality.</p><p><strong><a href="https://blog.colinbreck.com/masking-the-problem-representing-complex-state-without-strings/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">Masking the Problem: Representing Complex State Without Strings</a> &#8212; <a href="https://blog.colinbreck.com/masking-the-problem-representing-complex-state-without-strings/">blog.colinbreck.com</a></strong> A number of factors have contributed to the widespread use of strings for representing complex information in computing. HTTP, a text-based protocol, and HTML, a text-based mark-up language, became the foundations of the Internet. JSON, which is essentially a formatted string of keys and values, became ubiquitous for HTTP APIs</p><p><strong><a href="https://www.scalawilliam.com/importance-scalajs/?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">The importance of Scala.js</a> &#8212; <a href="https://www.scalawilliam.com/importance-scalajs/">www.scalawilliam.com</a></strong> Scala.js has the potential to change the way we compute.</p><h2>Latest Releases</h2><p><strong><a href="https://github.com/spotify/magnolify?utm_campaign=Softinio%27s%20Notes%20on%20Software%20Engineering&amp;utm_medium=email&amp;utm_source=Revue%20newsletter">GitHub - spotify/magnolify: A collection of Magnolia add-on modules</a> &#8212; <a href="https://github.com/spotify/magnolify">github.com</a></strong> A collection of Magnolia add-on modules. Contribute to spotify/magnolify development by creating an account on GitHub.</p><h2>Announcements</h2><h2>Jobs</h2><p>Our friends at Tweag who as you know are big contributors and evangelists of Nix are looking to hire for a number of roles related to Nix, Scala and Functional Programming in case anyone is interested (please share), details as follows:</p><p>Software Engineer - Developer Productivity</p><p><a href="https://meet.meetup.com/ls/click?upn=SDNnya-2FgLI6CfUa8do8Zd3AxqhcTTvSSlR0nc81L5eh18QlY61564LT4ko0Q4fzfiSHiWAYzWmeg5h1BbRgg-2Fw-3D-3DVjki_m6oHfU6Zp6DqHSQVLPTj4GSxQM4qUVvOnIxX2IYcPpl1YXjmcqPiUw6mtQbUBf3fNHeYMfRmoVr7nj0DArSMPmQXsnK4KVRbgry1qrwi2KoDevVZ6Jbcv-2BWM0gVg1Hk-2BkQMTho3BOLgxiOpHTSw08JBCimNWx82jn0P9WM9n6RkQTuzk3uWbU3FYQj58QWR3q3VW-2B-2BPMsAbWSBwYl8Os3I6TJbxbP8MUZ8oLJssX-2BiPIK0x2VoSrvxiaOIniFXS-2FTpA16GD3sqDhc4IvqM9KT0F-2FY1Brl2RDqDT4gWZgpPKmeQRrthsk6boWTPvVwRSQOk6iIU2K3vpQw2PRvtNS9lia7FDr7Zu40Lr8OQ7dR4CoKAwpztOGNTgtj7YVAzGYun6VI4Jd08sb-2BzSAmQMsNdVzhK5V-2FnD9y4SGW9OSdnaiAaqgNksasx55dZ4dTqYwkEX0EELHhzHstatzVzWAsLsiHeEEQl9Aeb191x7t0hmkaVk4ag27kq2Iz7h-2BOuN4F9LuC-2FytNmF1oFTeu6UFyGn-2F3CX7MvuzIu95ABcCDVTrg-2F7Ma6813FnxcEFKXfi4zJxZ6ISB4R7tgGT7256fPorZnHojsBlOwgnaQMPE1Gy2nasV7S1s4h8BoSkoXYd2mIo-2BLoWaZiHkWjU0nYDFrQ-3D-3D">https://boards.greenhouse.io/tweag/jobs/4212663002</a></p><p>A Nix knowledge is not needed, but is a big plus.</p><p>Functional Engineer</p><p><a href="https://meet.meetup.com/ls/click?upn=SDNnya-2FgLI6CfUa8do8Zd3AxqhcTTvSSlR0nc81L5eh18QlY61564LT4ko0Q4fzfLTxEx-2B7Qix6a5jHrTStEBA-3D-3D0r5u_m6oHfU6Zp6DqHSQVLPTj4GSxQM4qUVvOnIxX2IYcPpl1YXjmcqPiUw6mtQbUBf3fNHeYMfRmoVr7nj0DArSMPmQXsnK4KVRbgry1qrwi2KoDevVZ6Jbcv-2BWM0gVg1Hk-2BkQMTho3BOLgxiOpHTSw08JBCimNWx82jn0P9WM9n6RkQTuzk3uWbU3FYQj58QWR3q3VW-2B-2BPMsAbWSBwYl8Os3I6TJbxbP8MUZ8oLJssX-2BiPIK0x2VoSrvxiaOIniFXS-2FTpA16GD3sqDhc4IvqM9KT0F-2FY1Brl2RDqDT4gWZgpPKmeQRrthsk6boWTPvVwRSQOk6iIU2K3vpQw2PRvtNS9lia7FDr7Zu40Lr8OQ7dR4CoKAwpztOGNTgtj7YVAzGYun6VI4Jd08sb-2BzSAmQMsNdVzhK5V-2FnD9y4SGW9OSdnaiAaqgNksasx55dZ4dTqYwkEX0EELHhzHstatzVzWAsLsiHeEEQl9Aeb191x7t0hmkaVk4ag27kq2Iz7h-2BOuN43C6fQSP2-2FkTB4-2B8aR-2FnN0Iv4yhDp04VRFPpRlQTRGtdyhrmNIxwPNMqUdM3iYonZl5twUxmfqF-2Fsnog4HrrsZg96AplKnvIKhS5lC3C3VVXor5xAi6zob1TDcnE3UxBvhSLyJECVVk1QIxxFxdi09w-3D-3D">https://boards.greenhouse.io/tweag/jobs/4129385002</a></p><p>Experience with at least one functional programming language (Haskell, Scala, OCaml, Erlang, Clojure, etc).</p><p>Scala Engineer</p><p><a href="https://meet.meetup.com/ls/click?upn=SDNnya-2FgLI6CfUa8do8Zd3AxqhcTTvSSlR0nc81L5eh18QlY61564LT4ko0Q4fzfh2zEb0-2F3vYXW-2F91g8rCCKg-3D-3DmV6W_m6oHfU6Zp6DqHSQVLPTj4GSxQM4qUVvOnIxX2IYcPpl1YXjmcqPiUw6mtQbUBf3fNHeYMfRmoVr7nj0DArSMPmQXsnK4KVRbgry1qrwi2KoDevVZ6Jbcv-2BWM0gVg1Hk-2BkQMTho3BOLgxiOpHTSw08JBCimNWx82jn0P9WM9n6RkQTuzk3uWbU3FYQj58QWR3q3VW-2B-2BPMsAbWSBwYl8Os3I6TJbxbP8MUZ8oLJssX-2BiPIK0x2VoSrvxiaOIniFXS-2FTpA16GD3sqDhc4IvqM9KT0F-2FY1Brl2RDqDT4gWZgpPKmeQRrthsk6boWTPvVwRSQOk6iIU2K3vpQw2PRvtNS9lia7FDr7Zu40Lr8OQ7dR4CoKAwpztOGNTgtj7YVAzGYun6VI4Jd08sb-2BzSAmQMsNdVzhK5V-2FnD9y4SGW9OSdnaiAaqgNksasx55dZ4dTqYwkEX0EELHhzHstatzVzWAsLsiHeEEQl9Aeb191x7t0hmkaVk4ag27kq2Iz7h-2BOuN4vitOtW0GT-2FnJ6hzJOnqm30zLhaH-2FmAdK9craCg2V95-2F9znHj4tXXXEK32wh51jUQjaceq9KsCfwIRqy38132jthfNzp1yI-2FS5iDmkLeD-2BmpZqEmbHgv9zb3EIvIFP2GPwiMts0YshazfFeU2vdgdRw-3D-3D">https://boards.greenhouse.io/tweag/jobs/5099374002</a></p><p>Strong knowledge of a JVM language such as Java or Scala.</p><h2>Thank you</h2><p>Thank you for reading my newsletter &#128591; &#127863;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Softinio's Notes on Software Engineering - Issue 1]]></title><description><![CDATA[Welcome to the very first edition of my newsletter.]]></description><link>https://notes.softinio.com/p/softinio-s-notes-issue-1</link><guid isPermaLink="false">https://notes.softinio.com/p/softinio-s-notes-issue-1</guid><dc:creator><![CDATA[Salar Rahmanian]]></dc:creator><pubDate>Wed, 30 Dec 2020 18:49:00 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;MacBook Pro, white ceramic mug,and black smartphone on table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="MacBook Pro, white ceramic mug,and black smartphone on table" title="MacBook Pro, white ceramic mug,and black smartphone on table" srcset="https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1499750310107-5fef28a66643?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwzMDAzMzh8MHwxfHNlYXJjaHw4fHxuZXdzbGV0dGVyfGVufDB8fHx8MTY2Nzc4MjY2Mw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@andrewtneel">Andrew Neel</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Welcome to the very first edition of my newsletter.</p><h2>Thoughts on options for writing and publishing technical blogs?</h2><p>With every edition of my newsletter I would like to bring up one discussion point that I would like to share my thoughts on and discuss and get feedback by way of comments from my readers.</p><p>I read a lot of technical blogs and books and over the years have become familiar with most of the options used by various authors. One pattern that I have noticed is some platforms become hip for a period of time, then fall out of favor which results in the authors writings having either less traffic or them having to move their blogs.</p><p>As a result, what I think is best is to own your content and the platform it&#8217;s on as the source of truth that never changes. By all means, other platforms can be used to give your writings a wider audience.</p><p>For <a href="https://www.softinio.com/">my blog</a> I use <a href="https://gohugo.io/">Hugo</a>, which enables me to write my blog using markdown. I publish it on AWS s3 via GitHub. Of course, there are other options open to you for hosting your own content, including even using <a href="https://wordpress.com/">Wordpress</a>.</p><h3>What about medium.com</h3><p>I see a lot of technical authors use <a href="https://www.medium.com/">medium.com</a> to publish. They make it easy to get up and running with writing and immediately you have an audience. Don&#8217;t fall for this though, easy is not always the best option.</p><p>They fall under the category of hip today, not necessarily still hip tomorrow (look at Tumblr and blogger for examples).</p><p>Also, as a reader, I find their user experience pretty poor, mainly caused by their paywall system to the point that I have stopped using them all together and have removed all apps. This is a shame, as I am missing out on some authors publications that only post there. Their paywall system exists to be ad free and to help authors make some money from their publications, but quite honestly for the normal average author and reader it doesn&#8217;t work. The amount an author will earn from a readers subscription is nominal in my opinion for most authors. It can only mount to anything worth talking about, if you have a global following like a celebrity or a politician. As a result their subscription doesn&#8217;t present enough value to the reader in my opinion.</p><p>However, on a positive note, they do support canonical urls. If you post the same blog on more than one site you will be penalized by search engines such as google. However by supporting canonical urls (a url that points to the original posting of your article) you won&#8217;t be penalized. This is great as it means you can have you posts elsewhere on a platform that you own, but then have a copy of it on medium for the audience. They even make it easy for you to import your post from your site to medium for this purpose and automatically adding the canonical url for you. Their import functionality is quirky though I have never been able to just import and publish, it always has issues that end up requiring manual editing for me and hence due to lack of time I haven&#8217;t used this functionality yet.</p><h3>What about substack.com</h3><p>I always wanted to have a newsletter and/or have a means of informing the readers of my blog that I have something new posted, however I never took the plunge as I didn&#8217;t want to be responsible for managing users info myself and worried about its legal requirements. Substack handles all that hence I finally took the plunge and now have a newsletter here on Substack.</p><p>I really like Substack. Don&#8217;t just look at it as platform for running newsletters. It is actually a very viable option for publishing on. I am not a lawyer, but looking at its legal terms, I own my content and am able to export it and take it with me elsewhere with ease. Just this one point means I would be content to have my posts here as the source of truth with the only compromise being I don&#8217;t own the platform. Its builtin newsletter functionality enables you to build an audience and gain new audience immediately.</p><p>Also, note that for a one time fee you can even have your own custom domain with them.</p><p>If you wish to monetize your content, you have the option to create your own subscription options, make your own decision on whats available to free subscribers and what content available to paying subscribers. The amount you charge for your plans is up to you and Substack just takes a small percentage of it for processing the payments. This model is, in my opinion, better for content creators. It even overlaps on providing some of the benefits <a href="https://www.patreon.com/">Patreon</a> provides content creators.</p><p>I might consider moving all of my content to Substack in the future. For now I am sticking with keeping my technical blog as is for the benefit of owning its platform and I prefer to write technical posts using markdown and using the git PR flow for publishing my technical work.</p><p>One thing to note is that Substack currently do not support canonical url&#8217;s (hope they will one day). Hence I would not use Substack to crosspost duplicates of your posts from elsewhere.</p><h3>What about dev.to</h3><p>I am new to <a href="https://dev.to/">dev.to</a> and have no experience of using it as an author, but I thought it is worth a mention.</p><p>It is very focussed on software developers and engineers and is easy to join via your GitHub SSO. Their service is all open source and there is no paywall.</p><p>They even support the canonical url I mentioned that medium.com supports. Which means you have no reason to not to cross post your posts there.</p><p>According to their FAQ page you do own your articles too.</p><h3>What shall I do?</h3><ol><li><p>Have a source of truth that you own for your blog by having it on your own platform</p></li><li><p>Build your own audience by having a newsletter on Substack</p></li><li><p>Cross post on external services that support canonical URLS</p></li></ol><p>You can combine options 1 and 2 and just have Substack as your source of truth blogging platform with the only compromise being that you don&#8217;t own the platform yourself.</p><p>Where do you currently publish your blog? What are your thoughts?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/p/softinio-s-notes-issue-1/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softinio.com/p/softinio-s-notes-issue-1/comments"><span>Leave a comment</span></a></p><h2>What have I been up to lately</h2><ul><li><p>In November I had the privilege of doing a talk at <a href="https://scalebythebay2020.sched.com/event/e54O/acting-lessons-for-scala-engineers-with-akka-and-zio">Scale By The Bay 2020</a> on the Actor model which included talking about <a href="https://akka.io/">akka</a> and <a href="https://zio.github.io/zio-actors/">ZIO Actors</a>. Recording of my talk has already been published <a href="https://www.youtube.com/watch?v=AQXBlbkf9wc">on YouTube here</a>. As a companion to this talk I also wrote 3 blog posts about it:</p><ul><li><p><a href="https://www.softinio.com/post/introduction-to-the-actor-model/">Introduction to the Actor Model</a></p></li><li><p><a href="https://www.softinio.com/post/introduction-to-akka-typed-using-scala/">Introduction to Akka Typed Using Scala</a></p></li><li><p><a href="https://www.softinio.com/post/introduction-to-zio-actors/">Introduction to ZIO Actors</a></p></li></ul></li><li><p>I spend most of the 1980s and 1990s using and being a fan of <a href="https://en.wikipedia.org/wiki/Model_M_keyboard">IBM Model M</a> keyboards. I missed having one, so I took the plunge and bought the latest version of it. <a href="https://www.softinio.com/post/unicomp-new-model-m-keyboard/">Here is my short unboxing and review of it</a>.</p></li><li><p>I have started learning the <a href="https://swift.org/">Swift Programming Language by Apple</a> for fun. Must admit, really enjoying it. It is a really nicely thought out language with great tooling. I am currently going through this <a href="https://books.apple.com/us/book/the-swift-programming-language-swift-5-3/id881256329">book</a>, getting familiar with xcode and its tooling and to practice developing a small CLI app using <a href="https://github.com/apple/swift-argument-parser">this argument parser library</a>.</p></li></ul><h2>Upcoming Tech Talks I have arranged</h2><p>I will be announcing my upcoming events here on my newsletter first before anywhere else.</p><p>You can find out about the technical talks and meetups I organize by visiting </p><p>https://www.sfbayareatechies.com/</p><p> where you can join our slack and discord communities. If you would like to do a talk at one of my meetups please send me details via <a href="https://www.sfbayareatechies.com/#talk">this form</a>.</p><p>All the events are online at the moment due to Covid19 so you can attend from were ever you are on <a href="https://www.twitch.tv/softinio">Twitch (follow me to be notified)</a>.</p><h3>January 2021</h3><p>We have the great privilege of welcoming <a href="https://twitter.com/arosien">Adam Rosien</a> of <a href="https://www.inner-product.com/">Inner Product</a> to <a href="https://twitter.com/sfscala">San Francisco Scala Meetup</a> with a talk on:</p><blockquote><p>effects: cats-effect, concurrency, concurrent state machines, my (upcoming) book about effects in scala (</p><p>https://essentialeffects.dev</p><p>)</p></blockquote><p>Exact date and time to be confirmed.</p><h3>February 2021</h3><p>We have the great privilege of welcoming back <a href="https://twitter.com/_svirdi">Sandeep Virdi</a> to <a href="https://twitter.com/sfscala">San Francisco Scala Meetup</a> on <strong>February 4th, 2021</strong> <strong>at 5.30pm</strong> with a talk on:</p><blockquote><p>Kiar - Key/Value store with MVCC based Transaction System</p></blockquote><h2>Scala - Latest news</h2><h3>The Scala Book</h3><p><a href="https://alvinalexander.com/">Alvin Alexander</a> wrote an introduction to Scala book. He has kindly donated it to the Scala Center and the Scala community. Read about it <a href="https://alvinalexander.com/scala/scala-book-free/">here</a> where you can download the ebook versions for free. The book is also available online now on Scala&#8217;s website <a href="https://docs.scala-lang.org/overviews/scala-book/introduction.html">here</a>. It is also my understanding that he has spent time contributing to the <a href="https://docs.scala-lang.org/scala3/book/introduction.html">Scala 3 Book online</a>.</p><p>Thank you Alvin for contributing so much to the Scala community.</p><h3>Official Scala Discord Community</h3><p>The Scala community has always been famous for using <a href="https://gitter.im/">gitter</a> for keeping in touch with the community. Great news is to offer choice, a Discord community was also setup about a year ago. This alternative is now official and now listed on the <a href="https://www.scala-lang.org/community/">Scala community page</a>. Coinciding with this discord was kind enough to provide a vanity URL for the community.</p><p>To join discord visit: <a href="https://discord.gg/scala">https://discord.gg/scala</a></p><h3>New Scala Library providing easy integration with OAuth2 providers&nbsp; using sttp</h3><p><a href="https://twitter.com/kubukoz">Jakub Koz&#322;owski</a> and <a href="https://twitter.com/OcadoTechnology">Ocado Technology</a> open sourced a new Scala library to provide easy integration with OAuth2 providers&nbsp;using the awesome http client library from Softwaremill <a href="https://sttp.softwaremill.com/en/latest/">sttp</a>. Details: <a href="https://github.com/ocadotechnology/sttp-oauth2">sttp-oauth2</a></p><h3>New Release of Scala Metals</h3><p>I continue to enjoy Scala Metals. This month saw a new release <a href="https://scalameta.org/metals/blog/2020/12/19/lithium.html">Metals v0.9.8</a> adding:</p><ul><li><p>Ability to export worksheet evaluations.</p></li><li><p>Scala 3.0.0-M3 support.</p></li></ul><h2>Talks and Videos to watch</h2><ul><li><p>All the videos from <a href="https://www.youtube.com/playlist?list=PLNESult6cnOnd7df_2OYBcxdJxzP72tZq">Scale By The Bay 2020 are now available</a></p></li><li><p><a href="https://www.youtube.com/watch?v=EiGGfH5hMMA">Lorenzo Gabriele did a tutorial on using Scala.js with Snowpack and Scalablytyped</a></p></li><li><p><a href="https://www.youtube.com/watch?v=jWJ5A1irH_E">Scala 3: Python 3 or Easiest Upgrade Ever? by Daniel Spiewak</a></p></li><li><p><a href="https://twitter.com/justinhj">Justin Heyes-Jones</a> recently launched a new <a href="https://www.youtube.com/channel/UCkLlM1rb1zQcTjZ7HCf2zpg/videos">YouTube Channel</a> creating awesome short videos on Functional Programming and Scala. They are very well made and of high quality. I have a long list of conference videos to catch up on, but the short nature of Justin&#8217;s videos has made it possible for me to watch all of them even when busy.</p></li></ul><h2>Other news</h2><ul><li><p>Cloudflare launched a new privacy focused web analytics service as an alternative to Google Analytics. It appears to be free so I am excited to try it out in the future. Details: <a href="https://blog.cloudflare.com/privacy-first-web-analytics/">Cloudflare Web Analytics</a></p></li></ul><h2>Thank you</h2><p>Thank you reading my first blog. Hope you found it useful. As I do more I will probably try to improve on its format from what it is here. In the meanwhile, if you have something that you would like me to feature in my newsletter please get in touch with me.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softinio.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Softinio's Notes on Software Engineering! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>