<?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[Console by CodeSee.io]]></title><description><![CDATA[Join thousands of engineers, VCs, and early stage CTOs in subscribing to a weekly roundup of the latest in open-source software, curated by the CodeSee.io team.]]></description><link>https://console.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!mcsv!,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%2F09e15c36-e7b8-4247-9dbc-81fa9e00d056_720x720.png</url><title>Console by CodeSee.io</title><link>https://console.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 15 Jun 2026 18:47:48 GMT</lastBuildDate><atom:link href="https://console.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[CodeSee Inc.]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[console@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[console@substack.com]]></itunes:email><itunes:name><![CDATA[Ana Mogul]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ana Mogul]]></itunes:author><googleplay:owner><![CDATA[console@substack.com]]></googleplay:owner><googleplay:email><![CDATA[console@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ana Mogul]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Console #196 - Top Open Source Projects of the Week 🔥]]></title><description><![CDATA[Featuring Game dev, git, and streaming projects]]></description><link>https://console.substack.com/p/console-196</link><guid isPermaLink="false">https://console.substack.com/p/console-196</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 11 Feb 2024 20:10:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7b8d7d3c-b5ad-42eb-a8b6-7233db4cc2f9_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong>Javalin</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PKRq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PKRq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 424w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 848w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 1272w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PKRq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png" width="252" height="68.04" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:216,&quot;width&quot;:800,&quot;resizeWidth&quot;:252,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Logo&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="Logo" title="Logo" srcset="https://substackcdn.com/image/fetch/$s_!PKRq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 424w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 848w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 1272w, https://substackcdn.com/image/fetch/$s_!PKRq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f104ee-585d-4e5c-80b7-650938c067bd_800x216.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>A simple and modern Java and Kotlin web framework.</p><p><strong>language:</strong> Kotlin <strong>stars: </strong>6999 <br><strong>repo:</strong><a href="https://github.com/javalin/javalin"> github.com/javalin/javalin</a><br><strong>site: </strong><a href="https://javalin.io/">javalin.io</a></p><h4><strong><a href="https://github.com/Textualize/toolong">Toolong</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eZ1G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eZ1G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eZ1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg" width="152" height="152" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:152,&quot;bytes&quot;:82263,&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_!eZ1G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eZ1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec38fa-893c-4375-ba8d-fa02f59dc2f0_512x512.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A terminal application to view, tail, merge, and search log files (plus JSONL).</p><p><strong>language: Python stars:</strong> 737<br><strong>repo:</strong> <a href="https://github.com/Textualize/toolong">github.com/Textualize/toolong</a><br><strong>site</strong>: <a href="https://www.textualize.io/">textualize.io</a></p><h4><strong><a href="https://github.com/popcorn-official/popcorn-desktop">Popcorn Time</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5rG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5rG4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5rG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png" width="140" height="140" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:140,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Popcorn Time&quot;,&quot;title&quot;:&quot;Popcorn Time&quot;,&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="Popcorn Time" title="Popcorn Time" srcset="https://substackcdn.com/image/fetch/$s_!5rG4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!5rG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f852d4-3f30-4b6f-a0bd-2927267ba234_200x200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player.</p><p><strong>language: </strong>JavaScript<strong> stars:</strong> 8490<br><strong>repo:</strong> <a href="https://github.com/popcorn-official/popcorn-desktop">github.com/popcorn-official/popcorn-desktop</a><br><strong>site</strong>: <a href="https://popcorntimeapp.netlify.app/">popcorntimeapp.netlify.app</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h4><strong><a href="https://github.com/frappe/erpnext">ERPNext</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h2iS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h2iS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h2iS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png" width="88" height="88" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:88,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!h2iS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!h2iS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eaf8b92-4fbd-464d-ae56-9822dc355ff3_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Free and Open Source Enterprise Resource Planning (ERP)</p><p><strong>language: </strong>Python <strong>stars: </strong>16219<br><strong>repo:</strong> <a href="https://github.com/frappe/erpnext">github.com/frappe/erpnext</a><br><strong>site: </strong><a href="https://erpnext.com/">erpnext.com</a></p><h4><strong><a href="https://github.com/djanderson/aho">aho</a></strong></h4><p>A Git implementation in AWK. This is a toy project to explore some of the internals of Git and newer features of GNU AWK.</p><p><strong>language:</strong> Awk <strong>stars:</strong> 705<br><strong>repo:</strong> <a href="https://github.com/djanderson/aho">github.com/djanderson/aho</a></p><h4><strong><a href="https://github.com/stride3d/stride">Stride</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nw0V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nw0V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 424w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 848w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 1272w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nw0V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png" width="352" height="107.712" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:153,&quot;width&quot;:500,&quot;resizeWidth&quot;:352,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The stride logo, a geometrical 'S' in the form of a cube&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="The stride logo, a geometrical 'S' in the form of a cube" title="The stride logo, a geometrical 'S' in the form of a cube" srcset="https://substackcdn.com/image/fetch/$s_!Nw0V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 424w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 848w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 1272w, https://substackcdn.com/image/fetch/$s_!Nw0V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09fd320a-9a7a-4a5c-aaf4-7591afcad3ee_500x153.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Stride is an open-source C# game engine for realistic rendering and VR. The engine is highly modular and aims at giving game makers more flexibility in their development.</p><p><strong>language: C#</strong> <strong>stars:</strong> 6007<br><strong>repo:</strong> <a href="https://github.com/stride3d/stride">github.com/stride3d/stride</a><br><strong>site:</strong> <a href="https://stride3d.net/">stride3d.net</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-196/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-196/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #195 -- Top open source projects of the week 🎉]]></title><description><![CDATA[Featuring search engines, finance, and AI tools.]]></description><link>https://console.substack.com/p/console-195</link><guid isPermaLink="false">https://console.substack.com/p/console-195</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Mon, 05 Feb 2024 02:58:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e285afa1-ba0e-4446-9c4a-441b408f164b_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/StractOrg/stract">Stract</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8WFA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8WFA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 424w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 848w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 1272w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8WFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg" width="192" height="50.37362637362637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:382,&quot;width&quot;:1456,&quot;resizeWidth&quot;:192,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!8WFA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 424w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 848w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 1272w, https://substackcdn.com/image/fetch/$s_!8WFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60b56997-6dca-44a4-a2f7-710193790f0b_366x96.svg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Stract is an open source web search engine targeted towards tinkerers and developers.</p><p><strong>language:</strong> Rust <strong>stars: </strong>180<br><strong>repo:</strong> <a href="https://github.com/StractOrg/stract">github.com/StractOrg/stract</a><br><strong>site: </strong><a href="https://stract.com/">stract.com</a></p><h4><strong><a href="https://github.com/mitsuhiko/rye">Rye</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nLh_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nLh_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 424w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 848w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 1272w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nLh_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg" width="124" height="124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:124,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!nLh_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 424w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 848w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 1272w, https://substackcdn.com/image/fetch/$s_!nLh_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88269af1-aa4f-4322-986c-9c2cfc39a51f_250x250.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>a Hassle-Free Python Experience</p><p><strong>language: stars:</strong><br><strong>repo:</strong> <a href="https://github.com/mitsuhiko/rye">github.com/mitsuhiko/rye</a><br><strong>site</strong>: <a href="https://rye-up.com/">rye-up.com</a></p><h4><strong><a href="https://github.com/maybe-finance/maybe">Maybe</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7p0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7p0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 424w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 848w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 1272w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7p0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png" width="304" height="160.61761158021713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:829,&quot;resizeWidth&quot;:304,&quot;bytes&quot;:153744,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!7p0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 424w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 848w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 1272w, https://substackcdn.com/image/fetch/$s_!7p0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6c1a24e-8c8c-4db2-8aed-59ae711b172e_829x438.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The OS for your personal finances</p><p><strong>language:</strong> Rust <strong>stars:</strong> 15023<br><strong>repo:</strong> <a href="https://github.com/maybe-finance/maybe">github.com/maybe-finance/maybe</a><br><strong>site:</strong> <a href="https://maybe.co/">maybe.co</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h4><strong><a href="https://github.com/apple/pkl">Pkl</a></strong></h4><p> A configuration as code language with rich validation and tooling. </p><p><strong>language:</strong> Java <strong>stars: </strong>1477<br><strong>repo:</strong> <a href="https://github.com/apple/pkl">github.com/apple/pkl</a><br><strong>site: </strong><a href="https://pkl-lang.org/">pkl-lang.org</a></p><h4><strong><a href="https://github.com/danielmiessler/fabric">Fabric</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5kZM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5kZM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 424w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 848w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 1272w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5kZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png" width="181" height="100.4087591240876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:228,&quot;width&quot;:411,&quot;resizeWidth&quot;:181,&quot;bytes&quot;:91762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!5kZM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 424w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 848w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 1272w, https://substackcdn.com/image/fetch/$s_!5kZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b5dcce0-8f3a-4648-b8b1-c24e42317d62_411x228.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>fabric is an open-source framework for augmenting humans using AI.</p><p><strong>language: </strong>Python<strong> stars:</strong> 4403<br><strong>repo:</strong> <a href="https://github.com/danielmiessler/fabric">github.com/danielmiessler/fabric</a></p><h4><strong><a href="https://github.com/argmaxinc/WhisperKit">WhisperKit</a></strong></h4><p>Swift native speech recognition on-device for iOS and macOS applications.</p><p><strong>language: </strong>Swift <strong>stars: </strong>773<br><strong>repo:</strong> <a href="https://github.com/argmaxinc/WhisperKit">github.com/argmaxinc/WhisperKit</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-195/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-195/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #194 -- An Interview with Geoff of OSMnx - Python for Street Networks]]></title><description><![CDATA[Featuring Zed, Fish, and OpenGFW]]></description><link>https://console.substack.com/p/console-194</link><guid isPermaLink="false">https://console.substack.com/p/console-194</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 28 Jan 2024 19:39:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e8c90b51-415f-4ec9-b100-10d5514570fe_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/zed-industries/zed">Zed</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DLY2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DLY2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DLY2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg" width="92" height="92" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:92,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;@zed-industries&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="@zed-industries" title="@zed-industries" srcset="https://substackcdn.com/image/fetch/$s_!DLY2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DLY2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a31249-fcd7-4e1f-be9a-9d1a6cfe8c68_200x200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.</p><p><strong>language: </strong>Rust <strong>stars:</strong> 13668<br><strong>repo:</strong> <a href="https://github.com/zed-industries/zed">github.com/zed-industries/zed</a><br><strong>site: </strong><a href="https://zed.dev/">zed.dev</a></p><h4><strong><a href="https://github.com/apernet/OpenGFW">OpenGFW</a></strong></h4><p>OpenGFW is a flexible, easy-to-use, open source implementation of GFW (Great Firewall) on Linux.</p><p><strong>language: </strong>Go<strong> stars:</strong> 4601<br><strong>repo:</strong> <a href="https://github.com/apernet/OpenGFW">github.com/apernet/OpenGFW</a></p><h4><strong><a href="https://github.com/fish-shell/fish-shell">Fish Shell</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iX5g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iX5g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iX5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png" width="130" height="130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:130,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;@fish-shell&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="@fish-shell" title="@fish-shell" srcset="https://substackcdn.com/image/fetch/$s_!iX5g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!iX5g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ed7ca91-7c71-45de-bfbd-4fa78e3906c1_200x200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Fish is a smart and user-friendly command line shell for macOS, Linux, and the rest of the family. fish includes features like syntax highlighting, autosuggest-as-you-type, and fancy tab completions that just work, with no configuration required.</p><p><strong>language: </strong>Rust<strong> stars:</strong> 23845<br><strong>repo:</strong><a href="https://github.com/fish-shell/fish-shell"> github.com/fish-shell/fish-shell</a><br><strong>site:</strong> <a href="https://fishshell.com/">fishshell.com</a></p><h4><strong><a href="https://github.com/gboeing/osmnx">OSMnx</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-sKh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-sKh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 424w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 848w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 1272w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-sKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png" width="194" height="183.00666666666666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:300,&quot;resizeWidth&quot;:194,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;OSMnx: Modena Italy networkx street network in Python from OpenStreetMap&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="OSMnx: Modena Italy networkx street network in Python from OpenStreetMap" title="OSMnx: Modena Italy networkx street network in Python from OpenStreetMap" srcset="https://substackcdn.com/image/fetch/$s_!-sKh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 424w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 848w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 1272w, https://substackcdn.com/image/fetch/$s_!-sKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2c515da-1e6e-40ca-b5b7-0f340039036d_300x283.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>OSMnx is a Python package to easily download, model, analyze, and visualize street networks and other geospatial features from OpenStreetMap.</p><p><strong>language:</strong> Python <strong>stars:</strong> 4526  <br><strong>repo:</strong> <a href="https://github.com/gboeing/osmnx">github.com/gboeing/osmnx</a><br><strong>docs:</strong> <a href="https://osmnx.readthedocs.io/en/stable/">osmnx.readthedocs.io/en/stable/</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Loving the newsletter? Subscribe for free to get the next issue!</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><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/gboeing">Geoff</a> of OSMnx - Python for Street Networks</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!osNe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!osNe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!osNe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!osNe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!osNe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!osNe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg" width="326" height="326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:326,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/4977197?v=4&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="https://avatars.githubusercontent.com/u/4977197?v=4" title="https://avatars.githubusercontent.com/u/4977197?v=4" srcset="https://substackcdn.com/image/fetch/$s_!osNe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!osNe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!osNe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!osNe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F740c0a32-5549-41bc-a6da-5f5a8d0f32e5_460x460.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">Geoff Boeing</figcaption></figure></div><p><strong>Hey Geoff! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I grew up in the Los Angeles suburbs. I am mostly self-taught with programming, but I took a couple Java classes in college. My PhD is in city and regional planning from UC Berkeley. While at Berkeley I taught myself Python, which I work with the most for spatial science computing. I&#8217;m currently a professor at USC, and I previously worked as a professor at Northeastern University and as a postdoc at Berkeley.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>No specific favorite, but most of my research tools revolve around the scientific Python stack, and particularly the geospatial science ecosystem. That includes tools like GeoPandas, Shapely, Rasterio, Cartopy, PySAL, and so forth.</p></blockquote><p><strong>Why was OSMnx started?</strong></p><blockquote><p>I started it as the toolkit underlying my doctoral dissertation (which analyzed US street networks&#8217; geometric and topological properties).</p></blockquote><p><strong>How does OSMnx work?</strong></p><blockquote><p>OSMnx is a Python package to easily download, model, analyze, and visualize street networks and other geospatial features from OpenStreetMap. You can download and model walking, driving, or biking networks with a single line of code then analyze and visualize them. You can just as easily work with urban amenities/points of interest, building footprints, transit stops, elevation data, street orientations, speed/travel time, and routing.</p><p>Using OSMnx&#8217;s graph module, you can retrieve any OpenStreetMap spatial network data (such as streets, paths, rail, canals, etc) from the Overpass API and model them as NetworkX MultiDiGraphs (that&#8217;s a directed multigraph with possible self-loops and parallel edges). Using OSMnx&#8217;s features module, you can search for and download OpenStreetMap geospatial features (such as building footprints, grocery stores, schools, public parks, transit stops, etc) from Overpass API as a GeoPandas GeoDataFrame. This uses OpenStreetMap tags to search for matching elements. OSMnx can also geocode queries for you.</p><p>Once you&#8217;ve got a model, you can find nearest nodes/edges to coordinates, solve shortest paths, calculate network statistics, plot networks, and more.</p></blockquote><p><strong>Why Python?</strong></p><blockquote><ol><li><p>Because the existing geospatial and network science ecosystems are rich to build upon</p></li><li><p>Because it&#8217;s a standard language for urban planners, engineers, and geographers to work with</p></li><li><p>Because it has a low barrier to entry for new non-technical audiences to get started using tools built in Python</p></li></ol></blockquote><p><strong>Where did the name for OSMnx come from?</strong></p><blockquote><p>OpenStreetMap (OSM) + NetworkX (nx)</p></blockquote><p><strong>Who, or what was the biggest inspiration for OSMnx?</strong></p><blockquote><p>I wrote a paper about that! <a href="https://geoffboeing.com/publications/right-tools-for-job/">https://geoffboeing.com/publications/right-tools-for-job/</a></p></blockquote><p><strong>Are there any overarching goals of OSMnx that drive design or implementation? If so, what trade-offs have been made in OSMnx as a consequence of these goals?</strong></p><blockquote><p>Well the central goal is to be easy to use so that it &#8220;just works.&#8221; The original goal was to make something so dead simple that anyone could figure it out on Day 1 of learning Python. What that means in practice is you just need one line of pretty intuitive code to completely download and model the street network (or other infrastructure) of any city in the world. Then just 1 more line of code to calculate a large suite of statistics and indicators, or to visualize the network. The tradeoff has been building out a lot of under-the-hood code to handle a lot of different possibilities to make it all work relatively seamlessly.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in OSMnx, so far?&nbsp;</strong></p><blockquote><p>I talk about this in the paper I linked earlier (regarding the project&#8217;s inspiration): there&#8217;s lots of data on OpenStreetMap, but traditionally it was difficult or required a bunch of ad hoc code to turn it all into a graph-theoretic model for network analytics. OSMnx makes it automatic and theoretically-sound (from an urban/transport geography perspective, and from a network science perspective).</p><p>In particular, one thing OSMnx does automatically for you is &#8220;correct&#8221; the network topology. Its simplification module automatically processes the network&#8217;s topology from the original raw OpenStreetMap data, such that nodes represent intersections/dead-ends and edges represent the street segments that link them. This takes two primary forms: graph simplification and intersection consolidation.</p><p>Graph simplification cleans up the graph&#8217;s topology so that nodes represent intersections or dead-ends and edges represent street segments. This is important because in OpenStreetMap raw data, ways comprise sets of straight-line segments between nodes: that is, nodes are vertices for streets&#8217; curving line geometries, not just intersections and dead-ends. OSMnx simplifies this topology by eliminating non-intersection/dead-end nodes while retaining the complete true edge geometry as an attribute on the simplified edge. This has the side benefit of making most network algorithms run much faster, because most scale with the node count.</p><p>Intersection consolidation is important because many real-world street networks feature complex intersections and traffic circles, resulting in a cluster of graph nodes where there is really just one true intersection as we would think of it in transportation engineering or urban design. Similarly, divided roads are often represented by separate centerline edges: the intersection of two divided roads thus creates 4 nodes, representing where each edge intersects a perpendicular edge, but these 4 nodes represent a single intersection in the real world. OSMnx can consolidate such complex intersections into a single node and optionally rebuild the graph&#8217;s edge topology accordingly.</p></blockquote><p><strong>What were the existing projects lacking that made you consider building something new?</strong></p><blockquote><p>What I needed just didn&#8217;t really exist. You can download raw OpenStreetMap data easily, but that didn&#8217;t help me build models with it. Tools like OSRM are great, but didn&#8217;t help me calculate the network statistics and indicators I was looking for. It was really a gap in the toolkit that needed filling.</p></blockquote><p><strong>Can you share some real-world use cases or applications where OSMnx has been particularly beneficial?</strong></p><blockquote><p><a href="https://github.com/marceloprates/prettymaps">Pretty Maps</a> has been a really cool downstream use of OSMnx. <em>(<a href="https://console.substack.com/i/112248158/interview-with-marcelo-of-pretty-maps">Console Interview</a> with Marcelo of Pretty Maps)</em></p><p>I used OSMnx for this project (<a href="https://geoffboeing.com/2019/09/urban-street-network-orientation/">https://geoffboeing.com/2019/09/urban-street-network-orientation/</a>) studying street network orientation around the world, which got a lot of attention at the time.</p><p>I have also used it for visualizing street network &#8220;form&#8221; around the world to convey how urban planning and local geography shape urban patterns (for example, <a href="https://geoffboeing.com/2017/01/square-mile-street-network-visualization/">https://geoffboeing.com/2017/01/square-mile-street-network-visualization/</a>)</p><p>I also liked this study from last year that built on some of my work: <a href="https://www.nature.com/articles/s41586-022-04486-7">nature.com/articles/s41586-022-04486-7</a></p></blockquote><p><strong>Is OSMnx intended to eventually be monetized if it isn&#8217;t monetized already?</strong></p><blockquote><p>Nope, despite my wife&#8217;s protestations, this is my gift to the world.</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>Honestly I&#8217;m just proud to have made something that other people find useful. I hate the tendency to endless reinvent the wheel in academic spatial science projects, and I think OSMnx has saved a lot of people a lot of time, while opening up new research avenues to lots of folks who needed a tool like this.</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>One of the nice things about being a professor is you get to choose how you spend your time (as long as you meet the job requirements of teaching X number of classes each semester and publishing Y number of papers to earn tenure). In many ways, supporting this open-source project *IS* my day job because it&#8217;s the toolkit that underlies most of my empirical and theoretical research.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Constantly. As an academic, it&#8217;s just part of the landscape. I like to joke with my PhD students that being a professor means you have to work 70 hours a week&#8230; but you get to pick which 70 hours. Fortunately, I get winter break and summers off, so I can relax and go hiking in the San Gabriel Mountains and traveling for extended periods of time.</p></blockquote><p><strong>What is the best way for a new developer to contribute to OSMnx?</strong></p><blockquote><p>I keep the issue board pretty clean on GitHub, but there are always a few things open. I&#8217;m always looking for help with those. In particular right now, folks with experience in adding type annotations to existing codebases would be much appreciated.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>I&#8217;m hoping to release v2 sometime in 2024. It will add type annotations and offer a new streamlined API that removes a few old deprecated ways of doing things in favor of leaner, more efficient ways.</p></blockquote><p><strong>Are there any other projects besides OSMnx that you&#8217;re working on?</strong></p><blockquote><p>I am also on the executive team of this project: <a href="https://www.healthysustainablecities.org/">healthysustainablecities.org</a> that builds spatial software for calculating indicators of the built environment and its accessibility and walkability in collaboration with local partners around the world.</p></blockquote><div><hr></div><p><em>Like the interview? Receive more interviews like these of your favorite open source projects by subscribing to the free newsletter!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #193 -- An Interview with Alain of Planify - Task manager for GNU/Linux]]></title><description><![CDATA[Featuring redb, Spotube, and Street Complete.]]></description><link>https://console.substack.com/p/console-193</link><guid isPermaLink="false">https://console.substack.com/p/console-193</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 21 Jan 2024 17:49:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/53384132-10c5-4dcc-a73e-8ce8688ad80b_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/cberner/redb">redb</a></strong></h4><p>An embedded key-value database in pure Rust</p><p><strong>language: </strong>Rust <strong>stars:</strong> 2618 <br><strong>repo:</strong> <a href="https://github.com/cberner/redb">github.com/cberner/redb</a><br><strong>site: </strong><a href="https://www.redb.org/">redb.org</a></p><h4><strong><a href="https://github.com/KRTirtho/spotube">Spotube</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9sWI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9sWI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9sWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png" width="184" height="103.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.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;:184,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Spotube Logo&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="Spotube Logo" title="Spotube Logo" srcset="https://substackcdn.com/image/fetch/$s_!9sWI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!9sWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac94f40-3ea2-4817-83d5-bec68cef4fcf_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#127911; Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop &amp; mobile! </p><p><strong>language: </strong>Dart<strong> stars: </strong>14259 <br><strong>repo:</strong> <a href="https://github.com/KRTirtho/spotube">github.com/KRTirtho/spotube</a><br><strong>site</strong>: <a href="https://spotube.krtirtho.dev/">spotube.krtirtho.dev</a></p><h4><strong><a href="https://github.com/streetcomplete/StreetComplete">Street Complete</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6DKx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6DKx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 424w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 848w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 1272w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6DKx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg" width="128" height="128" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:128,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;App Icon&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="App Icon" title="App Icon" srcset="https://substackcdn.com/image/fetch/$s_!6DKx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 424w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 848w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 1272w, https://substackcdn.com/image/fetch/$s_!6DKx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa7e240-ec1a-480d-a538-66fb53539b09_96x96.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>StreetComplete is an easy-to-use editor of OpenStreetMap data available for Android. It can be used without any OpenStreetMap-specific knowledge. It asks simple questions, with answers directly used to edit and improve OpenStreetMap data</p><p><strong>language: </strong>Kotlin <strong>stars:</strong> 3492 <br><strong>repo:</strong> <a href="https://github.com/streetcomplete/StreetComplete">github.com/streetcomplete/StreetComplete</a><br><strong>f-droid:</strong> <a href="https://f-droid.org/packages/de.westnordost.streetcomplete/">f-droid.org/packages/de.westnordost.streetcomplete/</a></p><h4><strong><a href="https://github.com/alainm23/planify">Planify</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v9xN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v9xN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v9xN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg" width="118" height="118" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/835651f4-2884-401b-b898-fdd0ba264825_128x128.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:118,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Planify Icon&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="Planify Icon" title="Planify Icon" srcset="https://substackcdn.com/image/fetch/$s_!v9xN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!v9xN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F835651f4-2884-401b-b898-fdd0ba264825_128x128.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Task manager with Todoist support designed for GNU/Linux &#128640; </p><p><strong>language:</strong> Vala <strong>stars:</strong> 2570<br><strong>repo:</strong> <a href="https://github.com/alainm23/planify">github.com/alainm23/planify</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Find these projects and the interview interesting? Subscribe to the free newsletter to receive the next issue!</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><h3><strong>&#127897;&#65039; Interview with Alain of Planify - Task manager with Todoist support designed for GNU/Linux</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F9Aa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F9Aa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F9Aa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg" width="292" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:292,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/33765137?v=4&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="https://avatars.githubusercontent.com/u/33765137?v=4" title="https://avatars.githubusercontent.com/u/33765137?v=4" srcset="https://substackcdn.com/image/fetch/$s_!F9Aa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F9Aa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e67b38e-db6f-4045-9dc1-c1aa7b7a4d39_460x460.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">Alain</figcaption></figure></div><p><strong>Hey Alain! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>Hi. I&#8217;m Alain. I'm a nerdy Peruvian guy living in Cusco. I love technology in every form and medium, learning new things every day, and constantly tackling new challenges. I started programming when I was 14 years old and currently I work as a frontend developer. I'm also an open source indie developer. I love music, spending time with my family and creating new things all the time.</p></blockquote><p><strong>Who or what are your biggest influences as a developer?</strong></p><blockquote><p>I don't think I have an influence at all, since I was a child I always liked to create and have things in order, and being a developer allows me to express it.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>I like to program and keep things simple, this makes my code look like it was written by a beginner, I like to use if else instead of switch, I avoid using do while, and I have a fascination for formatting my code without using Prettier.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>I currently use Fedora as operating system, VS Code as code editor, Gnome Calendar to have all my meetings synchronized and Planify and Todoist as task manager.</p></blockquote><p><strong>Why was Planify started?</strong></p><blockquote><p>Planify was created more than 5 years ago and was very much inspired by the design lines of the elementary OS project which I was a contributor to at some point. I created it as a necessity when trying to find a task manager for Linux that was up to the task, had a nice design and good functionalities. Planify was my first interaction with indie development and the use of Vala and Gtk.</p></blockquote><p><strong>How does Planify work?</strong></p><blockquote><p>Planify is a native desktop application, written in Vala, Gtk4 and libadwaita, uses a SQLite database to store the tasks and is synchronized with Todoist. so as not to have the app isolated on the computer.</p></blockquote><p><strong>Where did the name for Planify come from?</strong></p><blockquote><p>Planify was initially called Planner, and the name was kept until version 3, there was always discussion as there was a Gnome project with the same name (Gnome Planner). For version 4, it was decided to rewrite the application from scratch migrating to Gtk4 and libadwaita apply to Gnome Circle and change the name to Planify.</p></blockquote><p><strong>Who, or what was the biggest inspiration for Planify?</strong></p><blockquote><p>Planify is inspired by several popular task managers such as Things 3, Todoist, Planny, Tasks. From which we have taken a bit of each, both in design and functionality.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Planify, so far?</strong></p><blockquote><p>Planify has several design and development achievements that I was very proud to be able to implement.</p><p>1. Open a task detail: Initially the tasks are shown in one line, when you click on it, it expands and shows the full detail in a beautiful animation and superfluid. This requires a lot of coordination to reveal and hide elements, its implementation is simple but I think unique in a Linux app.</p><p>2. Calendar event display: This feature allows you to view calendar events in Today and Upcoming views. It syncs with the default calendar app in Gnome.&nbsp;</p><p>3. Drag and drop and magic button: The drag and drop functionality feels natural and the magic button allows you to add tasks where you want and in the order you want.&nbsp;</p></blockquote><p><strong>What was the most surprising thing you learned while working on Planify?</strong></p><blockquote><p>Planify was my first project in production. I started it when I was just starting my career as a developer. I think I learned a lot about design patterns, architecture, best practices, performance improvement, etc.</p></blockquote><p><strong>How did Planify get popular?</strong></p><blockquote><p>I consider Planify to be popular for its design and great attention to detail. Many of the UI elements are well thought out and friendly to what the user already knows and it syncs with Todoist which is the most popular task manager.</p></blockquote><p><strong>What is the release process like for Planify?</strong></p><blockquote><p>We don't have an official release schedule or development roadmap, mostly because I'm the only developer, but there is a long list of feature requests that I hope to land very soon.</p></blockquote><p><strong>Is Planify intended to eventually be monetized?</strong></p><blockquote><p>Planify is currently free to download and will probably remain so forever. The way to maintain the project is thanks to donations, there are not many, but knowing that the software is useful for someone and reading their thanks is the best way to motivate me.</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>I liked the time when Planify exploded in popularity, I received messages of gratitude every day and there were several reviews of the app. As an anecdote the DTO of Doist (the company behind Todoist) contacted me and congratulated me for the work I did with their API to synchronize Todoist and gave me a premium account until 2030.&nbsp;</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>Planify is not a full time project and not my only job, I take advantage of the moments I have free a couple of hours in the morning and weekends.</p></blockquote><p><strong>What is the best way for a new developer to contribute to Planify?</strong></p><blockquote><p>If you are a developer and have basic knowledge in Vala and Gtk you could help me with some bug fixes or improvements, there is a long list of feature requests to implement. If you are not a developer, don't worry, you could also help me with translations or documentation.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>I would like Planify to be the best task manager for Linux, with support for multiple services and better features over time.</p></blockquote><p><strong>What motivates you to continue contributing to Planify?</strong></p><blockquote><p>It motivates me to know that many people use Planify.</p></blockquote><p><strong>Are there any other projects besides Planify that you&#8217;re working on?</strong></p><blockquote><p>Not at the moment, but I have another music player application called Byte that I would like to port to Rust and Gtk4. I think Rust is gaining a lot of ground in desktop development and its community is growing by leaps and bounds.</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>I like to know that many new indie developers are appearing to build many apps and create a new community, there is always something to learn and improve if it already exists.</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>I started as a translator and then fixed small bugs that I found in the app I was using. I consider that independent development is a great opportunity to get involved and learn, most of these projects are maintained by only one person and the code is not so big and complex.</p></blockquote><div><hr></div><p><em>Loved the story of Planify? Subscribe to the free newsletter to receive interviews with more open source projects! </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #192 -- Interview with John of Foliate, an e-book reader for Linux]]></title><description><![CDATA[Featuring Shoelace, GitUI, and Celestia]]></description><link>https://console.substack.com/p/console-192</link><guid isPermaLink="false">https://console.substack.com/p/console-192</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 14 Jan 2024 18:27:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cd6e0750-9d59-4551-ad4f-65d0e6b57d8f_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/shoelace-style/shoelace">Shoelace</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yrWI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yrWI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 424w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 848w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 1272w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yrWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg" width="250" height="74.69093406593407" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:435,&quot;width&quot;:1456,&quot;resizeWidth&quot;:250,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Shoelace&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="Shoelace" title="Shoelace" srcset="https://substackcdn.com/image/fetch/$s_!yrWI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 424w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 848w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 1272w, https://substackcdn.com/image/fetch/$s_!yrWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b9394ea-9b7d-4795-81e1-5d560111d2d5_516x154.svg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>A collection of professionally designed, every day UI components built on Web standards. Works with all frameworks as well as regular HTML/CSS/JS.</p><p><strong>language: </strong>TypeScript <strong>stars:</strong> 11081<br><strong>repo:</strong> <a href="https://github.com/shoelace-style/shoelace">github.com/shoelace-style/shoelace</a><br><strong>site: </strong><a href="https://shoelace.style/">shoelace.style</a></p><h4><strong><a href="https://github.com/extrawurst/gitui">GitUI</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iuKP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iuKP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 424w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 848w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 1272w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iuKP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png" width="182" height="109.2" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1000,&quot;resizeWidth&quot;:182,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!iuKP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 424w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 848w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 1272w, https://substackcdn.com/image/fetch/$s_!iuKP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41ec3d2-a5ef-4706-b625-be4767f2203a_1000x600.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p> Blazing &#128165; fast terminal-ui for git written in rust &#129408; </p><p><strong>language: </strong>Rust<strong> stars:</strong> 15984<br><strong>repo:</strong> <a href="https://github.com/extrawurst/gitui">github.com/extrawurst/gitui</a></p><h4><strong><a href="https://github.com/CelestiaProject/Celestia">Celestia</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p3vs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p3vs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 424w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 848w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 1272w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p3vs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png" width="108" height="108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:150,&quot;resizeWidth&quot;:108,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Celestia&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="Celestia" title="Celestia" srcset="https://substackcdn.com/image/fetch/$s_!p3vs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 424w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 848w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 1272w, https://substackcdn.com/image/fetch/$s_!p3vs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a9e69-f770-471c-b8d8-9f36531c13ef_150x150.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A real-time space simulation that lets you experience our universe in 3D.</p><p><strong>language:</strong> C++ <strong>stars:</strong> 1567<br><strong>repo:</strong> <a href="https://github.com/CelestiaProject/Celestia">github.com/CelestiaProject/Celestia</a><br><strong>site:</strong> <a href="https://celestiaproject.space/">celestiaproject.space</a></p><h4><strong><a href="https://github.com/johnfactotum/foliate">Foliate</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mkWV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mkWV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mkWV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg" width="112" height="112" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:112,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!mkWV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!mkWV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0904665-eec2-4efe-95b9-dafa3705f6d4_128x128.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Read e-books in style. Foliate is an e-book reader for Linux.</p><p><strong>language:</strong> JS <strong>stars:</strong> 4692<br><strong>repo:</strong> <a href="https://github.com/johnfactotum/foliate">github.com/johnfactotum/foliate</a><br><strong>site:</strong> <a href="https://johnfactotum.github.io/foliate/">johnfactotum.github.io/foliate/</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Liking these projects and the interview? Subscribe for free to get the next issue!</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><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/johnfactotum">John</a> of <a href="https://github.com/johnfactotum/foliate">Foliate</a>, an e-book reader for Linux</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BFi8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BFi8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 424w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 848w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 1272w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BFi8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png" width="1456" height="927" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:927,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot&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="Screenshot" title="Screenshot" srcset="https://substackcdn.com/image/fetch/$s_!BFi8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 424w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 848w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 1272w, https://substackcdn.com/image/fetch/$s_!BFi8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f5a36f5-90bc-4916-b77b-531b06bbe9fa_2644x1684.png 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><strong>Hey John! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I became interested in building websites when I was quite young, but I never had any formal programming education and was mostly self-taught. Probably related to this, I seem to have an aversion towards complicated frameworks and prefer the more artisanal or what one might even call amateurish approach to development. I started out with PHP, but I&#8217;ve forgotten most of it at this point. Now I use JavaScript unless I have no choice, mostly simply out of familiarity, and also because of its ubiquity. But I also like how dynamic and expressive it is, particularly how easy it is to define anonymous, first-class functions.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>For JavaScript, I prefer four spaces for indentation and no semicolons. In my humble opinion, two space indentation is terrible. It&#8217;s too small. It makes everything unreadable. And adding semicolons requires extra keystrokes for very little benefit, and it also adds noise when reading the code. Unfortunately, I seem to be in the minority. For some reason, people who use four spaces seem to like semicolons (the classic Crockford style), and people who don&#8217;t use semicolons tend to prefer two spaces (Standard style). And then the most popular Google/Airbnb style uses two spaces <em>and</em> semicolons.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>GNOME Text Editor. Many people like to use fancy editors or IDEs, but personally I love the simplicity of working in a simple text editor.</p></blockquote><p><strong>Why was Foliate started?</strong></p><blockquote><p>I wanted to open EPUB files, but the existing projects were all lacking. I chanced upon Marta Milakovic&#8217;s blog, where she talked about the Google Summer of Code project where she was developing an e-book app for GNOME using WebKitGTK and Epub.js (as far as I know, that work was never really finished or released). So I decided to try building my own app with Epub.js in a WebView. And that&#8217;s how Foliate started.</p></blockquote><p><strong>How does Foliate work?</strong></p><blockquote><p>Foliate is a GTK app written in JavaScript, using GJS. It uses a WebKitGTK WebView for rendering the contents of the e-book. Previously, it used Epub.js, but now it has its own renderer called <a href="https://github.com/johnfactotum/foliate-js">foliate-js</a>, which is available as a separate library and included in Foliate as a git submodule. The renderer works similarly to Epub.js: it&#8217;s completely client-side and serves the contents in iframes with blob URLs, and it uses CSS multicolumn to handle pagination.</p></blockquote><p><strong>Why did you pick GTK?</strong></p><blockquote><p>I chose GTK mainly because I have personally been using GNOME and other desktop environments in the GTK ecosystem. GTK has bindings in many languages, and JavaScript was the one I was most familiar with.</p></blockquote><p><strong>Where did the name for Foliate come from?</strong></p><blockquote><p>The name was derived from &#8220;folio&#8221;, which means &#8220;leaf&#8221;, a term with various meanings connected to books and printing. The concept of a leaf, as illustrated in Foliate&#8217;s icon, is also related to the practice of drying and preserving leaves in books, where the leaf could also serve as a bookmark.</p></blockquote><p><strong>Are there any overarching goals of Foliate that drive design or implementation? If so, what trade-offs have been made in Foliate as a consequence of these goals?</strong></p><blockquote><p>I would say the biggest goal is simplicity, even if it means sacrificing efficiency or functionality sometimes. For example, unlike most other e-book apps, Foliate uses flat JSON files instead of a database. This makes everything dead simple, but without indexing, you can&#8217;t query the data efficiently.</p></blockquote><p><strong>What were the existing projects lacking that made you consider building something new?</strong></p><blockquote><p>I wanted something that (1) integrates well with the GNOME desktop, (2) is a &#8220;file viewer&#8221; that doesn&#8217;t require importing/copying/modifying files, (3) with a simple and distraction-free UI.</p></blockquote><p><strong>What was the most surprising thing you learned while working on Foliate?</strong></p><blockquote><p>I&#8217;m surprised at how often people (myself included) neglect to read specs carefully when implementing various standards. For example, EPUB has a spec called CFI (Canonical Fragment Identifiers). Recently, I did a quick review and discovered that most libraries and apps have incorrect CFI implementations. Another example is that I recently reimplemented OPDS support in Foliate, and I was surprised by the mistakes I made in the old version related to not reading the relevant specs. It&#8217;s easy to assume that things are correct if you&#8217;re just looking at a few examples, but sometimes even the tests could be incorrect or fail to cover some edge cases.</p></blockquote><p><strong>Is Foliate intended to be eventually monetized?</strong></p><blockquote><p>I started accepting donations recently. In the future I&#8217;m thinking that it could become pay-what-you-want similar to how elementary OS and elementary apps work today.</p></blockquote><p><strong>How did the project get popular?</strong></p><blockquote><p>It received some initial attention after it was made available on Flathub, and after that it was picked up by a couple of blogs and on Hacker News. The people behind Flathub and the GNOME ecosystem have done a terrific job enabling developers to distribute apps and reach users easily.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Taking a break helps. But it&#8217;s easy to feel restless when you remember that there are people out there using and possibly depending on the app. So I try to remind myself that per the license, the app comes with absolutely no warranty, which certainly helps me sleep better at night.</p></blockquote><p><strong>If you plan to continue developing Foliate, where do you see the project heading next?</strong></p><blockquote><p>I would like to make a version of Foliate with only Web technologies, such as a progressive web app, a WebExtension, or possibly an Electron app. This will make it available on more platforms, especially on Windows where there doesn&#8217;t seem to be many e-book apps available, particularly since the demise of EPUB support in Edge (unlike say, macOS, where there&#8217;s Apple Books).</p></blockquote><p><strong>What motivates you to continue contributing to Foliate?</strong></p><blockquote><p>Mostly because I use it myself, but I&#8217;d also like to think of it as building something that helps the dissemination of knowledge, which makes me feel like being part of something greater than merely maintaining a simple utility app.</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>Most answers to this question today would probably include the word &#8220;AI&#8221;. The common adage is that code is read far more often than it is written. Right now there&#8217;s a lot of emphasis on AI writing the code but far less on reading the code. It would be interesting to see how AI could be used to grapple with the increasing complexity in software.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>I think the GNOME people have worked hard to build an ecosystem, and we&#8217;re starting to see a sort of Renaissance of indie apps on the platform.</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>I would say: start small. It is a capital mistake to try to bring big changes without engaging with the maintainer first. Even more often, people are discouraged from contributing due to the sheer size or complexity of the codebase. In these cases, it helps to start small and move gradually from there.</p></blockquote><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-192/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-192/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #191 -- Interview with Bernhard of ACID Chess - Chess computer for nerds, by nerds]]></title><description><![CDATA[Featuring Harlequin, Maestro, and ACID Chess]]></description><link>https://console.substack.com/p/console-191</link><guid isPermaLink="false">https://console.substack.com/p/console-191</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 07 Jan 2024 19:48:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/182f3958-2348-4998-bbee-b836298d8273_1280x700.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/tconbeer/harlequin">Harlequin</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z-33!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z-33!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 424w, https://substackcdn.com/image/fetch/$s_!z-33!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 848w, https://substackcdn.com/image/fetch/$s_!z-33!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 1272w, https://substackcdn.com/image/fetch/$s_!z-33!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z-33!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg" width="440" height="275.6043956043956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:440,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Harlequin&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="Harlequin" title="Harlequin" srcset="https://substackcdn.com/image/fetch/$s_!z-33!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 424w, https://substackcdn.com/image/fetch/$s_!z-33!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 848w, https://substackcdn.com/image/fetch/$s_!z-33!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 1272w, https://substackcdn.com/image/fetch/$s_!z-33!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45939df8-4801-447e-9b6c-916b7ea5ef89_1482x928.svg 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>The SQL IDE for your terminal.</p><p><strong>language:</strong> Python <strong>stars: </strong>1240<br><strong>repo:</strong> <a href="https://github.com/tconbeer/harlequin">github.com/tconbeer/harlequin</a><br><strong>site: </strong><a href="https://harlequin.sh/">harlequin.sh</a></p><h4><strong><a href="https://github.com/llenotre/maestro">Maestro</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ssg3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ssg3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 424w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 848w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ssg3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png" width="346" height="192.22222222222223" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:720,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;neofetch&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="neofetch" title="neofetch" srcset="https://substackcdn.com/image/fetch/$s_!ssg3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 424w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 848w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ssg3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a2f0ff7-4381-4253-86d2-05a17f6cf330_720x400.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Maestro is a lightweight Unix-like kernel written in Rust. The goal is to provide a lightweight operating system able to use the safety features of the Rust language to be reliable.</p><p><strong>language: </strong>Rust<strong> stars:</strong> 2002 <br><strong>repo:</strong> <a href="https://github.com/llenotre/maestro">github.com/llenotre/maestro</a><br><strong>site</strong>: <a href="https://blog.lenot.re/">blog.lenot.re</a></p><h4><strong><a href="https://github.com/ierror/acid-chess">ACID Chess</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yKEj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yKEj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 424w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 848w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 1272w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yKEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png" width="126" height="190.353515625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1547,&quot;width&quot;:1024,&quot;resizeWidth&quot;:126,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Logo&quot;,&quot;title&quot;:&quot;Logo&quot;,&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="Logo" title="Logo" srcset="https://substackcdn.com/image/fetch/$s_!yKEj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 424w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 848w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 1272w, https://substackcdn.com/image/fetch/$s_!yKEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01cfbdd5-f659-4d1c-958c-43f55e95b3fb_1024x1547.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>ACID Chess is a chess computer written in Python, which can be used with any board. By filming the board, the contour of the board is recognized, and the positions of the individual pieces can be determined.</p><p><strong>language: </strong>Python <strong>stars:</strong> 12<br><strong>repo:</strong> <a href="https://github.com/ierror/acid-chess">github.com/ierror/acid-chess</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Like the newsletter? Subscribe for free to receive the next issue &#128071;</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><h3><strong>&#127897;&#65039; Interview With <a href="https://github.com/ierror">Bernhard</a> of ACID Chess - Play Chess by filming the board</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!llQq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!llQq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!llQq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!llQq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!llQq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!llQq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg" width="462" height="346.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:462,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How it works - over the board&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="How it works - over the board" title="How it works - over the board" srcset="https://substackcdn.com/image/fetch/$s_!llQq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!llQq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!llQq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!llQq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc369b9ff-6411-43f8-bbea-192e97ffad0a_640x480.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><strong>Hey Bernhard! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I live in Munich and work for a company that manufactures computer-aided dental restorations. Previously I worked in a consultancy where we supported our customers in collecting and analyzing large amounts of data.&nbsp;</p><p>My father has always had computers (even in the pre-internet era). He showed me a few things in Basic and gave me one of his books. That's how I got into programming.</p><p>My favorite programming languages are Python, sometimes Perl and JavaScript - I also like C# for GUI projects at work.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>The way we develop software in the corporate world today often leads to unnecessarily complex systems. Clean coding, object-oriented programming or other "sacred" patterns often lead us to focus more on ourselves and our software than on the actual problem. Don't get me wrong, these patterns are absolutely legitimate. I often wish that people would think about how to structure code in such a way that it is easy to read and doesn't simply follow a pattern.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>Is &#8220;Linux&#8221; a valid answer? :)</p></blockquote><p><strong>Why was ACID Chess started?</strong></p><blockquote><p>I've enjoyed playing a game of chess over the board from time to time for a few years now. When discussing the games and trying to understand why a game has taken such and such a turn, beginners are often overwhelmed. At some point, I came up with the idea of simply recording the game with the camera and recognising the moves using image recognition. The sequence of moves can then be fed into an engine for analysis. Using this as a basis to build a chess computer was somehow obvious.</p></blockquote><p><strong>How does ACID Chess work?</strong></p><blockquote><p>A camera films the chessboard, which is analyzed on the basis of individual frames.</p><p>In the first step, the board contour is determined, the board is cutted, transformed and cut into 64 squares. The squares are then classified to determine the game state.</p><p>1. Recognising the board contour: In order to prevent unnecessary dirt from interfering with the recognition of the individual board squares, the outline of the board is recognised first. To do this, I trained a neural network - the "Board Segmentation Model" - the border of the board is extracted from the outline of the board using openCV. The four corner points are then determined from this line. With the help of the 4 points, the board can be cut out and a "birds eye view" of the board can be created with a 4-point perspective transformation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qk0u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qk0u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 424w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 848w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 1272w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qk0u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png" width="460" height="217.73333333333332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:568,&quot;width&quot;:1200,&quot;resizeWidth&quot;:460,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Qk0u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 424w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 848w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 1272w, https://substackcdn.com/image/fetch/$s_!Qk0u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe45266e2-c9e7-4c5b-a669-543c8dd0bfb7_1200x568.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>2. Cutting the board into 64 squares: From the "birds eye view" image of the board, OpenCV algorithms (medianBlur, auto_canny, HoughLinesP, ...) are then used to adaptively extract nine horizontal and nine vertical lines. Once these lines have been found, the image can be cut into 64 squares.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VXF-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VXF-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 424w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 848w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 1272w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VXF-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png" width="242" height="199.045" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:800,&quot;resizeWidth&quot;:242,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!VXF-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 424w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 848w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 1272w, https://substackcdn.com/image/fetch/$s_!VXF-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F129cc158-b826-4cc0-be1f-273ea206ca32_800x658.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>3. The classification of the squares: As I do not have enough training data available, I have decided not to recognise the individual figures, but to train only three classes for the "Square Classification Models":</p><p>1. is the square occupied by a black piece?</p><p>2. is the square occupied by a white piece?</p><p>3. is the square free?</p><p>Assuming that the board is in the starting position, all the necessary information is available to determine the orientation of the board and to recognise the moves.</p></blockquote><p><strong>Where did the name for ACID Chess come from?</strong></p><blockquote><p>While experimenting with OpenCV and the chessboard images, I created some crazy visualizations. A mate said "it looks like a chessboard on drugs" - that's how it got its name.</p></blockquote><blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in ACID Chess, so far</strong><br><br>The recognition of the board contour and the recognition of the horizontal / vertical lines to intersect the square.</p><p><strong><a href="https://acid-chess.readthedocs.io/en/latest/dev/neural_networks.html">https://acid-chess.readthedocs.io/en/latest/dev/neural_networks.html</a></strong></p></blockquote><p><strong>What was the most surprising thing you learned while working on ACID Chess?</strong></p><blockquote><p>Previously I only had theoretical knowledge of neural networks. The level that PyTorch and other frameworks have reached today makes it possible to extend existing networks and train your own network without having to study documentation for months.</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>The whole chain, starting with the crawling of board images, data cleaning, classification, training of the models, and the GUI part of the application was written completely by myself.</p></blockquote><p><strong>How do you balance your work on side projects like these with your day job and other responsibilities?</strong></p><blockquote><p>With my day job, I occasionally have to work late in the evening or at the weekend, but generally I have very regular working hours. In summer, I cycle long distances a lot, but in winter I miss that. These side projects are a good balance at winter times.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>The chess computer already works very well for me and a few friends. If you're not on Apple hardware, there are still a few things to improve. I also hope to receive better training data in the future, which I can use to significantly improve the stability of the board recognition and the square classification.</p></blockquote><p><strong>Are there any other projects besides ACID Chess that you&#8217;re working on?</strong></p><blockquote><p>I'm working with a friend on a software to manage bike tours. However, this has not yet reached a release-ready status &#128578;&nbsp;</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>AI will simplify and improve many things in software development, such as vulnerability detection, code reviews and so on. Whether this leads to better products, depends, as is so often the case, on how we use the tools.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>When I look at open source projects such as Linux, FreeBSD or the Django framework, for example, I am very confident that we will continue to see good open source software. Monetising open source software will continue to be difficult for "small developers". I have no idea how this could be improved, but I hope that better ways will be found in the future.&nbsp;</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>Read the contribution guidelines and simply start with it. Even if you have no idea about the big picture, you can often get involved in projects through smaller issues. In my experience, the other developers are usually very helpful and are always happy to get involved.</p></blockquote><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-191/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-191/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #190 - Coolest Open Source projects of the week 🔥]]></title><description><![CDATA[Featuring mobile apps, music streaming, React, and other software]]></description><link>https://console.substack.com/p/console-190</link><guid isPermaLink="false">https://console.substack.com/p/console-190</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Mon, 01 Jan 2024 11:10:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3d0ec3ad-5f21-48c3-a918-491ee482fe31_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/Hamza417/Inure">Inure</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u_Ae!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u_Ae!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 424w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 848w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 1272w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u_Ae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png" width="95" height="94.39682539682539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:313,&quot;width&quot;:315,&quot;resizeWidth&quot;:95,&quot;bytes&quot;:71763,&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_!u_Ae!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 424w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 848w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 1272w, https://substackcdn.com/image/fetch/$s_!u_Ae!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3a0283-6f9d-4693-8a28-b636967ba0c8_315x313.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>An elegant and beautiful premium Android app manager for both rooted and non-rooted devices with a built-in terminal, analytics panel and an independent custom theme engine.</p><p><strong>language: </strong>Kotlin <strong>stars:</strong> 729<br><strong>repo:</strong> <a href="https://github.com/Hamza417/Inure">github.com/Hamza417/Inure</a></p><h4><strong><a href="https://github.com/plasmicapp/plasmic">Plasmic</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Y-A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Y-A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 424w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 848w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 1272w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Y-A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png" width="120" height="60" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:184,&quot;width&quot;:368,&quot;resizeWidth&quot;:120,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Plasmic&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="Plasmic" title="Plasmic" srcset="https://substackcdn.com/image/fetch/$s_!8Y-A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 424w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 848w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 1272w, https://substackcdn.com/image/fetch/$s_!8Y-A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3de726ce-e9fd-4853-9bcb-1032fdd4a7d2_368x184.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Plasma is a visual builder for React. Build apps, websites, content and integrate with your codebase.</p><p><strong>language: </strong>TypeScript<strong> stars: </strong>3527<br><strong>repo:</strong> <a href="https://github.com/plasmicapp/plasmic">github.com/plasmicapp/plasmic</a><br><strong>site</strong>: <a href="https://www.plasmic.app/">plasmic.app</a></p><h4><strong><a href="https://github.com/louislam/dockge">Dockge</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CwMq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CwMq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 424w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 848w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 1272w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CwMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg" width="94" height="94" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:94,&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_!CwMq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 424w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 848w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 1272w, https://substackcdn.com/image/fetch/$s_!CwMq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F970e0860-e0db-4877-b91f-a8980c39aede_640x640.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager.</p><p><strong>language:</strong> TypeScript <strong>stars: </strong>4897<br><strong>repo:</strong> <a href="https://github.com/louislam/dockge">github.com/louislam/dockge</a><br><strong>site:</strong> <a href="https://dockge.kuma.pet/">dockge.kuma.pet</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h4><strong><a href="https://github.com/Sangwan5688/BlackHole">BlackHole</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mCG5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mCG5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mCG5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png" width="206" height="115.875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:206,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Repo Banner&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="Repo Banner" title="Repo Banner" srcset="https://substackcdn.com/image/fetch/$s_!mCG5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!mCG5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9013b-defc-47ed-b20b-b84541f5128c_1280x720.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A Music Player App made with Flutter.</p><p><strong>language:</strong> Dart <strong>stars:</strong> 8460<br><strong>repo:</strong> <a href="https://github.com/Sangwan5688/BlackHole">github.com/Sangwan5688/BlackHole</a><br><strong>F-droid: </strong><a href="https://f-droid.org/packages/com.shadow.blackhole/">f-droid.org/packages/com.shadow.blackhole</a></p><h4><strong><a href="https://github.com/twentyhq/twenty">Twenty</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b2wv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b2wv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 424w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 848w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 1272w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b2wv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg" width="106" height="106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:106,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Twenty logo&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="Twenty logo" title="Twenty logo" srcset="https://substackcdn.com/image/fetch/$s_!b2wv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 424w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 848w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 1272w, https://substackcdn.com/image/fetch/$s_!b2wv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52dcf94f-4a03-4505-858b-4b86fb7cbb67_136x136.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Building a modern alternative to Salesforce, powered by the community.</p><p><strong>language: </strong>TypeScript<strong> stars: </strong>6805<br><strong>repo:</strong> <a href="https://github.com/twentyhq/twenty">github.com/twentyhq/twenty</a><br><strong>site</strong>: <a href="https://twenty.com/">twenty.com</a></p><h4><strong><a href="https://github.com/udecode/plate">Plate</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fsVZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fsVZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 424w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 848w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fsVZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png" width="338" height="176.89285714285714" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4315a742-6794-4442-9135-b38b20036e76_2400x1256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:338,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;hero&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="hero" title="hero" srcset="https://substackcdn.com/image/fetch/$s_!fsVZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 424w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 848w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 1272w, https://substackcdn.com/image/fetch/$s_!fsVZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4315a742-6794-4442-9135-b38b20036e76_2400x1256.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The rich-text editor for React</p><p><strong>language: </strong>TypeScript <strong>stars: </strong>5750<br><strong>repo:</strong> <a href="https://github.com/udecode/plate">github.com/udecode/plate</a><br><strong>site:</strong> <a href="https://platejs.org/">platejs.org</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-190/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-190/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #189 - Interview with Elia of Opal - a Ruby to JavaScript source-to-source compiler]]></title><description><![CDATA[Featuring qsv, OSMnx, and more]]></description><link>https://console.substack.com/p/console-189</link><guid isPermaLink="false">https://console.substack.com/p/console-189</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 24 Dec 2023 20:44:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7924c567-aac6-4a1c-9c3b-272fad243a24_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/jqnatividad/qsv">qsv</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UJm3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UJm3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 424w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 848w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 1272w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UJm3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png" width="97" height="124.89137380191693" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:403,&quot;width&quot;:313,&quot;resizeWidth&quot;:97,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;qsv logo&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="qsv logo" title="qsv logo" srcset="https://substackcdn.com/image/fetch/$s_!UJm3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 424w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 848w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 1272w, https://substackcdn.com/image/fetch/$s_!UJm3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e8a90f2-cf48-4ff7-9834-ad2887611654_313x403.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>qsv (Quicksilver) is a command line program for querying, indexing, slicing, analyzing, filtering, enriching, transforming, sorting, validating &amp; joining CSV files.</p><p><strong>language:</strong> Rust <strong>stars:</strong> 1085 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/jqnatividad/qsv">github.com/jqnatividad/qsv</a><br><strong>site: </strong><a href="https://qsv.dathere.com/">qsv.dathere.com</a></p><h4><strong>OSMnx</strong></h4><p>OSMnx is a Python package to easily download, model, analyze, and visualize street networks and other geospatial features from OpenStreetMap.</p><p><strong>language: </strong>Python<strong> stars:</strong> 4478 <strong>last commit:</strong> 2 weeks<br><strong>repo:</strong> <a href="https://github.com/gboeing/osmnx">github.com/gboeing/osmnx</a><br><strong>site</strong>:<a href="https://osmnx.readthedocs.io/"> osmnx.readthedocs.io</a></p><h4><strong><a href="https://github.com/opal/opal">Opal</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1BRW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1BRW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 424w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 848w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 1272w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1BRW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png" width="124" height="124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:420,&quot;resizeWidth&quot;:124,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:&quot;Opal logo by Elia Schito&quot;,&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="Opal logo by Elia Schito" srcset="https://substackcdn.com/image/fetch/$s_!1BRW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 424w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 848w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 1272w, https://substackcdn.com/image/fetch/$s_!1BRW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f24fc0-1fe2-4ec5-ad2e-12f1cd500abf_420x420.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Opal is a Ruby to JavaScript source-to-source compiler. It also has an implementation of the Ruby corelib and stdlib</p><p><strong>language:</strong> Ruby <strong>stars:</strong> 4780 <strong>last commit:</strong> a month<br><strong>repo:</strong> <a href="https://github.com/opal/opal">github.com/opal/opal</a><br><strong>site:</strong> <a href="https://opalrb.com/">opalrb.com</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h3><strong>&#127897;&#65039; Interview with Elia of Opal - a Ruby to JavaScript source-to-source compiler</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3LM4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3LM4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3LM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:280,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/1051?v=4&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="https://avatars.githubusercontent.com/u/1051?v=4" title="https://avatars.githubusercontent.com/u/1051?v=4" srcset="https://substackcdn.com/image/fetch/$s_!3LM4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3LM4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffba61626-785c-441a-9fc2-3458fcb967e7_460x460.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><strong>Hi Elia, Let&#8217;s start with your background! Where are you from, where have you worked in the past, how did you learn to program, and what languages or frameworks do you like?</strong></p><blockquote><p>Hi! I&#8217;m from Italy, I&#8217;ve been working as a software developer for about 15 years now, and I'm not one of those early childhood programmers that started with Basic and a Commodore 64, I had my initial encounter with programming in high school, whe I was really fascinated by DHTML and the ability to make things move on the screen, at the time I printed and read the online Netscape guide to JavaScript with really poor understanding of technical English and without understanding much of it.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>I don't know if it's controversial, but I was always attracted to making things beautiful for the user, or code reader, and that's what got me hooked into Ruby, it's really a beautiful language, with the same beauty of some mathematical formulas, and I think that's what makes it so appealing to many people. From this kind of love for the next person experiencing your app or code I think all sorts of good things come out, like the attention to details, the care for the user experience, the care for the code readability, but also the right amount of pragmatism to make things work and be useful. Having the individual person at the center is what matters, not a group or a "higher good" or a "greater good", but the single person, you can always sacrifice an individual person for the "greater good" but when you care for the next person you can't do that. I like that Ruby is released yearly on Christmas day, that's ultimately the message of Christmas, and the drive behind Ruby.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>I think I owe a lot to TextMate, and its main merits are two. The first one is that it's so well integrated with macOS that just by learning it you learn a lot about the OS, ultimately making it your IDE, fully espousing the consistency and "just works" approach that made Apple so successful. The second one is its extremely elegant way of solving extendability, going full on with the Unix philosophy of small commands that can interact with each other through piping and environment variables, I am still amazed that to this day the commenting in TextMate is handled by a Ruby script. The whole programming community owes it a lot, and modern VSCode is still full of references to TextMate throughout its documentation, as a testament to the profound impact it had.</p></blockquote><p><strong>What are you currently learning?</strong></p><blockquote><p>Programming wise and outside of my main open-source work I'm having some fun reimplementing TextMate features on VSCode, those are nice little puzzles to solve that have a practical application. I'm likely the only user to my extension for TextMate expats but it's ok, I kinda like being in such a niche.</p></blockquote><p><strong>Why was Opal started?</strong></p><blockquote><p>Can't say for sure as I wasn't the original author. But I can say how I bumped into it. It was circa 2011 and I was working on my first JavaScript-only project. At the time we still had to support IE7 and Coffescript was the new kid on the block, so new that we didn't dare use it on client's code. After falling for most of the now infamous JavaScript "WAT" moments I was looking for something better, and started researching projects compiling Ruby to JavaScript. I found a few, but Opal was the only one that was actually usable, and I started polishing it so I could use it in my projects. In 2012 I had the first bit of Ruby code running in production on the browser, and writing Ruby code for the browser was a real joy. I was hooked, and I started contributing more and more to Opal, eventually becoming the maintainer in 2015.</p></blockquote><p><strong>How does Opal work? </strong></p><blockquote><p>The way Opal works is very similar to most other languages compiling to JavaScript. It all starts with parsing code into what's called an abstract syntax tree, which then gets transformed into JavaScript code. The one thing that sets Opal apart from other attempts at porting Ruby to the browser is that it tries to fully leverage the underlying JavaScript engine by reusing its native objects and methods. This means that when you write&nbsp;<code>a = [1, 2, 3]</code>&nbsp;in Ruby, Opal will actually create a JavaScript array, and when you call&nbsp;<code>a.map { |x| x * 2 }</code>&nbsp;Opal will actually call the native JavaScript&nbsp;<code>map</code>&nbsp;method on the array passing an anonymous function that multiplies the value by 2. This approach has a few advantages, the first one is that it's really fast, the second one is that it's really small, and the third one is that it's really easy to debug. Just recently we were able to reimplement the Ruby&nbsp;<code>Hash</code>&nbsp;class using the native&nbsp;<code>Map</code>&nbsp;object, and this resulted in both speed and size improvements.</p></blockquote><p><strong>Where did the name for Opal come from?</strong></p><blockquote><p>The name was chosen in reference to the Ruby gemstone by the original author, Adam Beynon, referencing the famous gemstone that can be found in Australia. Of course the reference is I think it's a great name, Opal gemstones are really beautiful and I love Australia.</p></blockquote><p><strong>Who, or what was the biggest inspiration for Opal?</strong></p><blockquote><p>For me Coffeescript was really instrumental in opening my eyes to the possibility of writing Ruby code for the browser, I think Adam had a few other projects compiling Objective-C and other languages into JavaScript.</p></blockquote><p><strong>Are there any overarching goals of Opal that drive design or implementation? If so, what trade-offs have been made in Opal as a consequence of these goals?</strong></p><blockquote><p>This kind of venture is deemed to have lots of trade-offs, for example in early days one great Ruby feature like&nbsp;<code>method_missing</code>&nbsp;wasn't supported. Surprisingly though, we've seen contributions for many things that previously seemed impossible. Although we have great support for Node.js and other server-side environments, our main target platform is still the browser.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Opal, so far?</strong></p><blockquote><p>I think the most challenging problem was module inclusion (either via&nbsp;<code>include</code>&nbsp;or&nbsp;<code>prepend</code>) and the&nbsp;<code>super</code>&nbsp;keyword. The reason is that Ruby has a very complex inheritance model, and it's not easy to mirror that in JavaScript. We've been able to do it tho, using the prototype chain. That part is very challenging to reason about given its meta nature, but we need to give credit to JavaScript for being so flexible that a solution was eventually found.</p><p>For anyone interested in the details, I strongly encourage giving a read to the official&nbsp;<a href="https://github.com/opal/opal/blob/master/HACKING.md">Hacking guide</a>&nbsp;and to the parts of the&nbsp;<code>runtime.js</code>&nbsp;file&nbsp;dedicated to core object and classes initialization.</p></blockquote><p><strong>Are there any competitors or projects similar to Opal? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p>If we're willing to define it so, we've recently got a newer "competitor" in the official Ruby support for WebAssembly, but I wouldn't treat it as a real competitor as our mission is to get Ruby on the browser and we can only root for an official viable solution. On the other hand it's still in its early days and, given its size, it's not suitable for generic web-application code except for a few good use cases.</p></blockquote><p><strong>What was the most surprising thing you learned while working on Opal?</strong></p><blockquote><p>I think the most surprising thing is how much you can do with so little code. The core of Opal is really small, and it's really surprising how much you can do with it. I think it's a testament to the power of Ruby, and the power of JavaScript as well. I also learned so much about both Ruby and JavaScript, that I think trying to implement additional features in Opal is a great way to improve both skills for any Ruby developer also working with JavaScript.</p></blockquote><p><strong>What is your typical approach to debugging issues filed in the Opal repo?</strong></p><blockquote><p>We have a weekly meeting where we discuss issues and PRs, and we try to give feedback as soon as possible. We do our best to stay abreast of everything but sometimes we miss things, and we're always happy to be pinged on issues and PRs. We also have a&nbsp;<a href="https://opalrb.slack.com/">Slack channel</a>&nbsp;where we're always happy to help.</p></blockquote><p><strong>What is the release process like for Opal?</strong></p><blockquote><p>We keep track of unreleased changelog entry in a separate file and we have a few scripts that will merge that into the main changelog file and bump the version number. We then tag the release and push it to Ruby gems using Bundler's gem helper tasks. We also have a few other scripts that will update the website and the documentation. The whole process is pretty smooth and we're able to release a new version in a matter of minutes.</p></blockquote><p><strong>Is Opal intended to eventually be monetized if it isn&#8217;t monetized already? If so, how? If it&#8217;s already monetized, what is your main source of revenue?</strong></p><blockquote><p>Opal is not monetized, and it's not intended to be, at least directly. Being a language implementation it won't have any monetizable application on its own. We maintain a funding page that we use to sustain infrastructure costs and possibly a website redesign, but that's about it. We're always open to sponsorships and donations and I think that has been the case for some fixes and recent features, I think that's a great model for open-source projects of this kind. I'm also personally thankful to my employer,&nbsp;<a href="https://nebulab.com/">Nebulab</a>, for allowing me to spend some of my time on Opal.</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>At some point I had a few ecommerce stores fully running their JavaScript code on Opal with a homegrown framework written in a hundred lines of Ruby. Those stores were very large fashion ecommerce stores serving tens of thousands of users a day.</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>I realized early on that I need to be in for the marathon and not the sprint, so I keep it best-effort and I try to keep it fun, having maintainers burn out it's a lose-lose scenario for any open-source project. Open source is a gift to the world, by the maintainers, I'm grateful for all the open-source I have the privilege to use, and I think this is a healthy attitude toward it.</p></blockquote><p><strong>What is the best way for a new developer to contribute to Opal?</strong></p><blockquote><p>I think the best way is to start using it, and report any issue or missing feature. If anyone wants to go deeper it's a treasure trove of puzzles to solve, thanks to Ruby's&nbsp;<a href="https://github.com/ruby/spec">spec project</a>&nbsp;providing a comprehensive test suite for the language. As mentioned above also have a&nbsp;<a href="https://github.com/opal/opal/blob/master/HACKING.md">Hacking guide</a>&nbsp;that can help anyone get started.</p></blockquote><p><strong>If you plan to continue developing Opal, where do you see the project heading next?</strong></p><blockquote><p>There are some themes that we'd like to explore and some features we need to support better. We're looking into things like dead-code-elimination for reducing the bundle size even more for compiled projects and into improving the support for modules and importmaps. We're also exploring the possibility of supporting the new Ruby WebAssembly implementation featuring a compatible API so it's easier to write code that can run both. But there are so many ideas that it is hard to come up with a full list, things like using JavaScript symbols for Ruby symbols and method ids, automatic JavaScript libraries wrappers, and so on.</p></blockquote><p><strong>What motivates you to continue contributing to Opal?</strong></p><blockquote><p>After all these years I still love a good puzzle and I still love Ruby, it keeps me sharp on the language and on JavaScript, and although I regret not having any big production app running on Opal anymore, I still cherish providing such a great tool to the people using it everyday.</p></blockquote><p><strong>Are there any other projects besides Opal that you&#8217;re working on?</strong></p><blockquote><p>As part of my day Job I work every day on Solidus, the Rails e-commerce framework, lately I also had some involvement in&nbsp;<a href="https://github.com/github/view_component">View Component</a>, and I wrote an&nbsp;<a href="https://github.com/nebulab/erb-formatter">ERB-formatter for VSCode</a>&nbsp;to scratch my own itch that got some traction. As mentioned, I'm also maintaining a&nbsp;<a href="https://marketplace.visualstudio.com/items?itemName=elia.vscode-textmate">VSCode extension for stranded TextMate users</a>&nbsp;that I use myself, but I jokingly gave it 5 stars on the VSCode marketplace because I really enjoy it .</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>Everyone's talking about AI, and I won't make an exception. As many I swing between interpreting my fears of it taking over the world in a Terminator-like fashion and the hope that it's a sort of luddite instinct that will eventually turn into developers just being more productive.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>I think open-source greatly increased efficiency and thus value-generation across the world, and at the same time it opened opportunities for many people that otherwise wouldn't have had them. I think it's a great thing and I hope it will continue to exist and thrive.</p></blockquote><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-189/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-189/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #188 - Coolest open-source projects of the week 🔥]]></title><description><![CDATA[Featuring AI, fitness, design, and other projects]]></description><link>https://console.substack.com/p/console-188</link><guid isPermaLink="false">https://console.substack.com/p/console-188</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 17 Dec 2023 20:16:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/573fbc5d-6db2-431f-b701-d81ad8b04719_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/threestudio-project/threestudio">threestudio</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CayC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CayC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 424w, https://substackcdn.com/image/fetch/$s_!CayC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 848w, https://substackcdn.com/image/fetch/$s_!CayC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!CayC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CayC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png" width="222" height="50.925824175824175" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:334,&quot;width&quot;:1456,&quot;resizeWidth&quot;:222,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;threestudio&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="threestudio" title="threestudio" srcset="https://substackcdn.com/image/fetch/$s_!CayC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 424w, https://substackcdn.com/image/fetch/$s_!CayC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 848w, https://substackcdn.com/image/fetch/$s_!CayC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!CayC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95451b9c-a1f4-464f-a8af-2c5a0ce79d87_4984x1144.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>threestudio is a unified framework for 3D content creation from text prompts, single images, and few-shot images, by lifting 2D text-to-image generation model</p><p><strong>language:</strong> Python <strong>stars:</strong> 4133<br><strong>repo:</strong> <a href="https://github.com/threestudio-project/threestudio">github.com/threestudio-project/threestudio</a></p><h4><strong><a href="https://github.com/TomBursch/kitchenowl">Kitchen Owl</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q-op!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q-op!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 424w, https://substackcdn.com/image/fetch/$s_!q-op!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 848w, https://substackcdn.com/image/fetch/$s_!q-op!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 1272w, https://substackcdn.com/image/fetch/$s_!q-op!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q-op!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png" width="114" height="150.88235294117646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:136,&quot;resizeWidth&quot;:114,&quot;bytes&quot;:15132,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!q-op!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 424w, https://substackcdn.com/image/fetch/$s_!q-op!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 848w, https://substackcdn.com/image/fetch/$s_!q-op!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 1272w, https://substackcdn.com/image/fetch/$s_!q-op!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4d1bbbe-96aa-409f-a51e-8f26cdbe9cf8_136x180.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>KitchenOwl is a smart self-hosted grocery list and recipe manager. Easily add items to your shopping list before you go shopping. You can also create recipes and get suggestions on what you want to cook.</p><p><strong>language: </strong>Python<strong> stars:</strong> 752<br><strong>repo:</strong> <a href="https://github.com/TomBursch/kitchenowl">github.com/TomBursch/kitchenowl</a><br><strong>site</strong>: <a href="https://kitchenowl.org/">kitchenowl.org</a></p><h4><strong><a href="https://github.com/mullvad/mullvadvpn-app">Mullvad VPN</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xNbK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xNbK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xNbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png" width="138" height="138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:138,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;@mullvad&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="@mullvad" title="@mullvad" srcset="https://substackcdn.com/image/fetch/$s_!xNbK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!xNbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eb0d434-714f-4ea9-b2e0-446b725c8635_200x200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The Mullvad Browser is a privacy-focused web browser designed to minimize tracking and fingerprinting.</p><p><strong>language:</strong> C++ <strong>stars:</strong> 909<br><strong>repo:</strong> <a href="https://github.com/mullvad/mullvad-browser/tree/mullvad-browser-115.6.0esr-13.0-1">github.com/mullvad/mullvad-browser</a><br><strong>site:</strong> <a href="https://mullvad.net/en/browser">mullvad.net/en/browser</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h4><strong><a href="https://github.com/facebook/Rapid">Rapid</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!97rc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!97rc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!97rc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!97rc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!97rc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!97rc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg" width="232" height="121.8956043956044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:232,&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_!97rc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!97rc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!97rc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!97rc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadc2651a-7a37-4299-9416-935d2963bf34_1826x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Rapid is a web-based modern editor for OpenStreetMap. Rapid integrates advanced mapping tools, authoritative geospatial open data, and cutting-edge technology to empower mappers to get started quickly.</p><p><strong>language:</strong> JavaScript <strong>stars:</strong> 382<br><strong>repo:</strong> <a href="https://github.com/facebook/Rapid">github.com/facebook/Rapid</a><br><strong>site: </strong><a href="https://rapideditor.org/">rapideditor.org</a></p><h4><strong><a href="https://github.com/OpenTracksApp/OpenTracks">OpenTracks</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rkGa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rkGa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 424w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 848w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 1272w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rkGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg" width="98" height="98" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:98,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!rkGa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 424w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 848w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 1272w, https://substackcdn.com/image/fetch/$s_!rkGa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe445f3a-8151-4bf2-957a-dfa80b477786_100x100.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>OpenTracks is a sport tracking application that completely respects your privacy. </p><p><strong>language: </strong>Java<strong> stars:</strong> 788<br><strong>repo:</strong> <a href="https://github.com/OpenTracksApp/OpenTracks">github.com/OpenTracksApp/OpenTracks</a><br><strong>site</strong>: <a href="https://opentracksapp.com/">opentracksapp.com</a></p><h4><strong><a href="https://github.com/lobehub/lobe-chat">Lobe Chat</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GoYw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GoYw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 424w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 848w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 1272w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GoYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp" width="112" height="112" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:128,&quot;width&quot;:128,&quot;resizeWidth&quot;:112,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!GoYw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 424w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 848w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 1272w, https://substackcdn.com/image/fetch/$s_!GoYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49942c57-679b-43ab-9c2d-2e44c25c52c3_128x128.webp 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Outfit Anyone: Ultra-high quality virtual try-on for Any Clothing and Any Person </p><p><strong>language:</strong> TypeScript <strong>stars:</strong> 11496<br><strong>repo:</strong> <a href="https://github.com/lobehub/lobe-chat">github.com/lobehub/lobe-chat</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-188/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-188/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #187 - Interview with Mathias Wulff of AlaSQL - a JS SQL Database for browser and Node.js]]></title><description><![CDATA[Featuring RaspAP, Silex, and AlaSQL]]></description><link>https://console.substack.com/p/console-187</link><guid isPermaLink="false">https://console.substack.com/p/console-187</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 10 Dec 2023 18:44:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c5b0bad6-7e56-4ff1-b606-4f80bdafcbd0_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/RaspAP/raspap-webgui">RaspAP</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NxvD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NxvD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NxvD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png" width="80" height="80" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:80,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/78154814?s=200&amp;v=4&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="https://avatars.githubusercontent.com/u/78154814?s=200&amp;v=4" title="https://avatars.githubusercontent.com/u/78154814?s=200&amp;v=4" srcset="https://substackcdn.com/image/fetch/$s_!NxvD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!NxvD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc6a423-aff6-406f-8925-1d6a0b1f990a_200x200.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>RaspAP is feature-rich wireless router software that just works on many popular Debian-based devices, including the Raspberry Pi.</p><p><strong>language: </strong>PHP <strong>stars: </strong>4145 <br><strong>repo:</strong> <a href="https://github.com/RaspAP/raspap-webgui">github.com/RaspAP/raspap-webgui</a><br><strong>site: </strong><a href="https://raspap.com/">raspap.com</a></p><h4><strong><a href="https://github.com/silexlabs/Silex">Silex</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xnS8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xnS8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 424w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 848w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 1272w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xnS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png" width="194" height="69.7719298245614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:82,&quot;width&quot;:228,&quot;resizeWidth&quot;:194,&quot;bytes&quot;:4643,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!xnS8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 424w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 848w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 1272w, https://substackcdn.com/image/fetch/$s_!xnS8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5bd94cb4-40d2-45ab-ac36-6e689b501abb_228x82.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Silex is a no-code tool for building websites. It also lets you code when needed. It can be used online, offline or in a JAMStack project.</p><p><strong>language: </strong>TypeScript<strong> stars:</strong> 1847<br><strong>repo:</strong> <a href="https://github.com/silexlabs/Silex">github.com/silexlabs/Silex</a><br><strong>site</strong>: <a href="http://www.silex.me/">silex.me</a></p><h4><strong><a href="https://github.com/AlaSQL/alasql">AlaSQL</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dhQd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dhQd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 424w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 848w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 1272w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dhQd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png" width="104" height="104" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:450,&quot;resizeWidth&quot;:104,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AlaSQL logo&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="AlaSQL logo" title="AlaSQL logo" srcset="https://substackcdn.com/image/fetch/$s_!dhQd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 424w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 848w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 1272w, https://substackcdn.com/image/fetch/$s_!dhQd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d16b75d-904b-4105-a7ad-2d5aa67f9314_450x450.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>AlaSQL is an open source SQL database for JavaScript with a strong focus on query speed and data source flexibility for both relational data and schemaless data. It works in the web browser, Node.js, and mobile apps.</p><p><strong>language:</strong> JavaScript <strong>stars:</strong> 6774<br><strong>repo:</strong> <a href="https://github.com/AlaSQL/alasql">github.com/AlaSQL/alasql</a><br><strong>site:</strong> <a href="http://alasql.org/">alasql.org</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/mathiasrw">Mathias Wulff</a> of AlaSQL - a JS SQL Database for browser and Node.js</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!htPJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!htPJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 424w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 848w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!htPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg" width="248" height="248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:797,&quot;width&quot;:797,&quot;resizeWidth&quot;:248,&quot;bytes&quot;:73563,&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_!htPJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 424w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 848w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!htPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb02fcca7-4ecd-413b-804e-da8ac9472aff_797x797.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">Mathias Wulff</figcaption></figure></div><p><strong>Hey Mathias! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>Born and raised in the heart of Denmark, my journey into the realm of programming was as much a product of my environment as it was of my curiosity. Denmark, with its robust educational system and a culture that encourages exploration and innovation, was the perfect incubator for my growing interest in technology. My early days weren't filled with the usual video game escapades; instead, I found myself fascinated by the inner workings of Windows 95, diving into regedit, eager to tweak and learn. This early exploration set the stage for a career driven by a desire to understand and manipulate the digital world.</p><p>Other than a few websites in the late 90s my programming journey began with a TI-83 calculator. Programming in TI-Basic, similar to Basic but with calculator-specific features, I learned the importance of efficient code structure, initially constrained by the belief that variables could only be single letters because of the examples in the manual. A misconception that forced me to plan ahead and think creatively within the limitations.</p><p>My professional path has been diverse. Starting as a fullstack developer, I ventured through various roles: a consultant, a technical product manager, and a CTO. Now, as the Head of Technology in a company offering online tutoring, I apply my accumulated knowledge to create impactful educational technologies. Each role offered unique insights, but the underlying theme has always been my desire to understand the human aspect of harnessing technology to solve complex problems successfuly.&nbsp;</p></blockquote><p><strong>Who or what are your biggest influences as a developer?</strong></p><blockquote><p>My biggest influence has been _unwriter, an enigmatic figure who emerged during the tumultuous times of Bitcoin's second major fork. _unwriter's approach to solving problems wasn't just innovative; it was transformative. They tackled challenges at levels I hadn't even considered. The real eye-opener was not the volume of their output but the depth and breadth of their problem-solving approach. It wasn't just about writing code; it was about reimagining possibilities.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>I've always leaned towards Yoda Conditions, placing the constant before the variable in comparisons. It's a practice born from a blend of experience and a bit of suffering. But my broader, and perhaps more intriguing, opinion is about the nature of software itself. Software, in essence, is invisible. Yes, there are UI elements, but the system, the logic, and the architecture reside in the realm of the unseen. This invisibility makes software creation an art of aligning mental models across diverse groups. It's about creating a shared vision, a common language that transcends the barriers of different technical and non-technical perspectives.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>Surge.sh and Bun (Both CLI tools) hold a special place in my heart. Using them feels like being understood and anticipated by someone who cares deeply about your needs. They're like a thoughtful aunt who's known you since childhood, always ready with exactly what you need before you even realize it. These tools don't just aid in programming; they extend the programmer's mind, making the development process not just easier but more intuitive and enjoyable.</p></blockquote><p><strong>What are you currently learning?</strong></p><blockquote><p>I'm currently navigating the delicate balance between being hands-on and empowering others to take the lead. It's a dance of involvement and delegation, of knowing when to step in and when to step back. On a technical front, I'm exploring the capabilities and limitations of Large Language Models. Understanding their strengths and how to integrate them into workflows is a fascinating challenge. It's about harnessing their potential to inspire and augment human creativity and efficiency.</p></blockquote><p><strong>Why was AlaSQL started?</strong></p><blockquote><p>AlaSQL was the brainchild of Andrey Gershun, a programmer whose brilliance is unmatched in my experience. His need for a client-side SQL solution led to the creation of AlaSQL. I wasn't there at the inception, but having worked closely with Andrey, I can attest to his genius. His ability to see a need and create a tool that addresses it so elegantly is nothing short of remarkable.</p></blockquote><p><strong>How does AlaSQL work? </strong></p><blockquote><p>AlaSQL works by taking the SQL queries you write and converting them into equivalent JavaScript code. This conversion process allows users to manipulate data with the familiarity of SQL, coupled with the versatility of JavaScript. At its essence, AlaSQL recognises your need to filter, select, and manipulate data and simplifies the daunting task of implementing the code.&nbsp;</p></blockquote><p><strong>Where did the name for AlaSQL come from?</strong></p><blockquote><p>The name AlaSQL is a nod to its nature &#8211; it's SQL, but with a twist. "A la" implies a likeness to SQL, but with unique adaptations and additions that make it more suited to the client-side development experience. It's a blend, a fusion of SQL's structure with JavaScript's flexibility and quirks.</p></blockquote><p><strong>Are there any overarching goals of AlaSQL that drive design or implementation? If so, what trade-offs have been made in AlaSQL as a consequence of these goals?</strong></p><blockquote><p>Our overarching goal with AlaSQL has always been to create a tool that 'just works'. Developer experience is at the forefront of our design philosophy. We aim for SQL-99 compatibility and reasonable speed, but these goals come with trade-offs. The SQL parser and lexical analysis, for example, are extensive but necessary for the robustness and versatility we offer. One of our long-term visions is to integrate AlaSQL as a build step in bundlers, allowing for a more streamlined, efficient deployment of code. This approach would be ideal for static SQL but presents challenges for dynamically generated code.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in AlaSQL, so far?</strong></p><blockquote><p>One of the most challenging and rewarding aspects of working on AlaSQL has been bridging the gap between SQL's Abstract Syntax Tree (AST) and executable JavaScript code. The ability to translate complex SQL queries into efficient JavaScript operations is a feat that required deep understanding and creative problem-solving.</p></blockquote><p><strong>Are there any projects similar to AlaSQL? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p>Back in 2014, the tech landscape was different, especially in the realm of browser capabilities and JavaScript libraries. At that time, projects like jSQL and an emerging SQLite in the browser were notable. However, AlaSQL distinguished itself by focusing on being lightweight and more attuned to the needs of client-side development. It was a response to a gap in the market, providing features and ease of use that others lacked, tailored for the web developers of that era.</p></blockquote><p><strong>What was the most surprising thing you learned while working on AlaSQL?</strong></p><blockquote><p>One of the most enlightening aspects of working on AlaSQL has been the depth of Andrey Gershun's coding genius. Initially, it was a challenge to fully grasp the intricacies and innovations of his code. His approach to problem-solving and system design was ahead of its time, and understanding his methods provided valuable lessons in advanced programming and innovative thinking for me.</p></blockquote><p><strong>What is your typical approach to debugging issues filed in the AlaSQL repo?</strong></p><blockquote><p>When tackling bugs in AlaSQL, my approach is systematic. I start by recreating the issue in the command-line interface of AlaSQL. Then, I dive into the debugging process using 'bun --inspect-brk', which allows me to step through the code, trace the execution flow, and understand the root cause of the issue.&nbsp;</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>I'm immensely proud of the consistent contributions from our community. AlaSQL feels like a collective effort, a place where everyone comes together for a common cause &#8211; to make this tool better, not just for personal gain but for the sheer joy and satisfaction it brings. It's a testament to the spirit of open-source development.</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>I treat my work on AlaSQL as a form of mental relaxation, akin to solving puzzles. This approach allows me to engage with open-source projects in a way that is refreshing rather than taxing. It's a balancing act that involves knowing when to immerse myself in these projects and when to let it be.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Burnout struck hard during the COVID-19 pandemic, a period when everything, including open-source participation, and staying on top of emails, seemed overwhelming. My response was to embrace this phase, allowing myself to step back and take time for rest and relaxation. This period of stepping away was crucial for my mental health and helped me return to my regular level of energy and perspective.</p></blockquote><p><strong>What is the best way for a new developer to contribute to AlaSQL?</strong></p><blockquote><p>For new developers looking to contribute to AlaSQL, I recommend starting with issues marked as 'good first issue'. Engage with the community, seek guidance, and dive into understanding the codebase. The most important aspect is learning to navigate and interpret the code, a skill that can be honed by using debugging tools like Bun for an enhanced and efficient development experience.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>Looking ahead, AlaSQL is poised for significant evolution. Our focus is on modernizing the codebase, moving towards a modular structure that aligns with contemporary coding practices. We're also contemplating a lighter version of AlaSQL, catering to users who need less complexity but still desire the core functionalities. The idea of integrating AlaSQL into the build process remains a fascinating yet daunting prospect &#8211; one that promises to open new frontiers in efficiency and functionality.</p></blockquote><p><strong>What motivates you to continue contributing to AlaSQL?</strong></p><blockquote><p>The motivation for continuing with AlaSQL stems from the sheer joy of solving puzzles. It's about the challenge, the satisfaction of finding solutions, and the thrill of creating something that not only works but works beautifully.</p></blockquote><p><strong>How did AlaSQL get popular?</strong></p><blockquote><p>AlaSQL's rise to popularity is a testament to its utility and effectiveness. With 180k monthly downloads via npm and 3 million loads from websites, its widespread adoption speaks to its relevance and reliability. Its success is rooted in its ability to provide a powerful yet user-friendly SQL interface in the browser, meeting a critical need in the web development community.</p></blockquote><p><strong>Are there any other projects besides AlaSQL that you&#8217;re working on?</strong></p><blockquote><p><a href="https://github.com/mathiasrw/rexreplace/">Rexreplace</a> is definitely my darling pet-project. It gives you a smooth experience in performing search and replace operations from the command line. It's tailored to be part of one-liners and build scripts. The power lies in how the syntax instills confidence in what you're doing (in contrast to balancing awk, find, sed, and grep), and you also have the ability to use JavaScript to refine your actions further.</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>The landscape of software development is poised for a transformative shift, especially with the advent of large language models. These models are becoming akin to peer programmers, capable of handling complex coding tasks. The key skill in this evolving landscape will be the ability to precisely articulate what you want to achieve. This shift signifies a move from traditional coding, where the emphasis is on how to write the code, to a more intent-driven approach, where the focus is on what the end goal is. Developers will need to hone their skills in defining problems and objectives clearly, as language models take on the more routine or intricate coding tasks.&nbsp;By simplifying the coding process and reducing the barrier to entry, we open the door to a more diverse range of voices and perspectives, hopefully leading to a significant shift in the demographic landscape of the industry. This is particularly crucial in addressing the current gender imbalance in the field, which is heavily skewed towards men. By making software development more approachable and less daunting, we can encourage a more balanced representation of genders, leading to a more inclusive and varied tech community. This change isn't just about fairness; it's about enriching the field with different viewpoints and experiences, which is essential for true innovation and progress.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>I believe the mindset for supporting open-source projects through financial means is already present, but what has been missing is an infrastructure that truly supports nano-payments. This kind of system would allow for small financial contributions to be distributed efficiently across a project's (deep) dependency chain. For instance, a donation worth $1 could be split and shared among the various dependencies that make a project possible. This approach would transform how open-source projects are funded, ensuring a more sustainable and equitable distribution of resources. By overcoming the technical challenges of implementing such a system, we can leverage the existing goodwill in the community to create a more robust and self-sustaining open-source ecosystem.</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>For those making their first steps into open-source, remember that every contribution, no matter its size, is deeply appreciated. When you're ready to start, focus on asking clear and concise questions. This helps not only in getting the guidance you need but also in making it easier for others in the community to assist you. It's important to understand the basics and communicate this understanding clearly. When presenting examples or issues, keeping them succinct and precise will facilitate better understanding and support. The open-source community thrives on collaboration, and every new voice adds value to the ongoing conversation. We welcome you to join in and contribute in any way you can!</p></blockquote><p><strong>What is one question you would like to ask another open-source developer that I didn&#8217;t ask you?</strong></p><blockquote><p>What was the driving force that prompted you to dive into your project? Understanding this can shed light on the diverse range of inspirations and passions that fuel open-source contributions. Each developer's journey is unique, and knowing what sparks that initial interest can provide valuable insights into the personal stories and motivations that enrich the open-source community.</p></blockquote><p><strong>Which open source maintainer should we interview next?</strong></p><blockquote><p>The creator of Bun would be an excellent choice for your next interview. Bun is a notable project in the open-source community, and the maintainer's insights and experiences would undoubtedly be valuable. Learning about their journey, challenges, and the vision behind creating Bun could offer a wealth of knowledge and inspiration to both current and aspiring open-source contributors.</p></blockquote><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-187/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-187/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #186 - Interview with Felienne of Hedy - a language for children to learn programming]]></title><description><![CDATA[Featuring Front Matter, Fluvio, and Hedy]]></description><link>https://console.substack.com/p/console-186</link><guid isPermaLink="false">https://console.substack.com/p/console-186</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 03 Dec 2023 18:48:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d96326d7-63f4-4933-9beb-2ff18a1e5f81_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor - <a href="https://posthog.com/?utm_source=console&amp;utm_campaign=console">PostHog</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://posthog.com/?utm_source=console&amp;utm_campaign=console" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yuEk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yuEk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png" width="446" height="234.15" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:446,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://posthog.com/?utm_source=console&amp;utm_campaign=console&quot;,&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_!yuEk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!yuEk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a40b416-f986-4575-a25b-7f89861911cf_1200x630.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><a href="https://posthog.com/?utm_source=console&amp;utm_campaign=console">PostHog</a> is an open-source, all-in-one suite of product and data tools including product analytics, session replay, feature flags, A/B testing, and surveys.</p><p>From testing in product to analyzing user retention to running NPS surveys, PostHog supports it all. It is a single place to help you test, launch, and analyze new features to help you build a better product.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://posthog.com/?utm_source=console&amp;utm_campaign=console&quot;,&quot;text&quot;:&quot;Get started for free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://posthog.com/?utm_source=console&amp;utm_campaign=console"><span>Get started for free</span></a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/estruyf/vscode-front-matter">Front Matter</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_4Ga!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_4Ga!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 424w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 848w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 1272w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_4Ga!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png" width="396" height="198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:506,&quot;width&quot;:1012,&quot;resizeWidth&quot;:396,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Front Matter&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="Front Matter" title="Front Matter" srcset="https://substackcdn.com/image/fetch/$s_!_4Ga!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 424w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 848w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 1272w, https://substackcdn.com/image/fetch/$s_!_4Ga!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F729f2edc-31b1-4906-a699-6113a058aa2b_1012x506.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Front Matter is a CMS running straight in Visual Studio Code. Can be used with static site generators like Hugo, Jekyll, Hexo, NextJs, Gatsby, and many more.</p><p><strong>language:</strong> TypeScript <strong>stars:</strong> 1570<br><strong>repo:</strong> <a href="https://github.com/estruyf/vscode-front-matter">github.com/estruyf/vscode-front-matter</a><br><strong>site: </strong><a href="https://frontmatter.codes/">frontmatter.codes</a></p><h4><strong><a href="https://github.com/infinyon/fluvio">Fluvio</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BVav!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BVav!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 424w, https://substackcdn.com/image/fetch/$s_!BVav!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 848w, https://substackcdn.com/image/fetch/$s_!BVav!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 1272w, https://substackcdn.com/image/fetch/$s_!BVav!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BVav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg" width="394" height="122.58379120879121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:453,&quot;width&quot;:1456,&quot;resizeWidth&quot;:394,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A visual of a data pipeline with filter, map, and other streaming operations&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="A visual of a data pipeline with filter, map, and other streaming operations" title="A visual of a data pipeline with filter, map, and other streaming operations" srcset="https://substackcdn.com/image/fetch/$s_!BVav!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 424w, https://substackcdn.com/image/fetch/$s_!BVav!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 848w, https://substackcdn.com/image/fetch/$s_!BVav!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 1272w, https://substackcdn.com/image/fetch/$s_!BVav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba2e644f-3e16-4e80-a704-5e4005826616_797x248.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Fluvio is a high-performance distributed data streaming platform that's written in Rust, built to make it easy to run real-time applications.</p><p><strong>language: </strong>Rust<strong> stars:</strong> 2165 <br><strong>repo:</strong> <a href="https://github.com/infinyon/fluvio">github.com/infinyon/fluvio</a><br><strong>site</strong>: <a href="https://www.fluvio.io/">fluvio.io</a></p><h4><strong><a href="https://github.com/hedyorg/hedy">Hedy</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sjvG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sjvG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 424w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 848w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 1272w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sjvG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png" width="96" height="96" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:96,&quot;width&quot;:96,&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_!sjvG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 424w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 848w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 1272w, https://substackcdn.com/image/fetch/$s_!sjvG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792ce5fe-4889-4b68-85a0-dad925bd53a3_96x96.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Hedy is a gradual programming language aimed at teaching programming and teaching Python. It teaches using different levels.</p><p><strong>language:</strong> Python <strong>stars:</strong> 1072 <br><strong>repo:</strong> <a href="https://github.com/hedyorg/hedy">github.com/hedyorg/hedy</a><br><strong>site:</strong> <a href="https://www.hedy.org/">hedy.org</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Loving these projects and the interview? Subscribe to the free newsletter to receive the next issue!</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><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/Felienne">Felienne</a> of Hedy - a language for children to learn programming</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eSms!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eSms!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 424w, https://substackcdn.com/image/fetch/$s_!eSms!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 848w, https://substackcdn.com/image/fetch/$s_!eSms!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 1272w, https://substackcdn.com/image/fetch/$s_!eSms!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eSms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp" width="196" height="245" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:768,&quot;resizeWidth&quot;:196,&quot;bytes&quot;:37094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!eSms!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 424w, https://substackcdn.com/image/fetch/$s_!eSms!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 848w, https://substackcdn.com/image/fetch/$s_!eSms!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 1272w, https://substackcdn.com/image/fetch/$s_!eSms!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F384aaed3-3b76-4c74-b819-745d6b8b60c0_768x960.webp 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">Felienne Hermans teaches CS at Vrije Universiteit Amsterdam</figcaption></figure></div><p><strong>Hey Felienne! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I have the, maybe traditional, backstory of &#8220;teaching myself how to program&#8221; when I was a preteen. Playing with BASIC, making silly programs for myself, making games. After high school, I went on to major in computer science. I used to work mainly in C# but for a few years I mainly use Python! I really like the freedom that Python offers to sketch your thinking.</p></blockquote><p><strong>What's an opinion you have that most people don't agree with?</strong></p><blockquote><p>Investing in explicitly memorizing syntax you use often is totally worth the effort. Of course you do pick up some things just by using code, but if you want to get more effective, learning syntax is a great (and easy) way to get better.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>There can never be meaningful guidelines for &#8220;readable code&#8221;. </p><p>Apart from the basic coding style guidelines, like using Camel case or using verbs in function names, what is readable depends too much on your personal experience and knowledge. Is a list comprehension inherently more readable than a for loop doing the same? It only depends on whether you have seen and used comprehensions before.&nbsp;</p><p>Readable code also depends on the task at hand. Is code duplication bad? It depends! If you are making a small change it is not helpful, but if you are trying to get a grasp of the whole code base, duplication helps because it is easier to find information. Are long methods bad? Yes if you are navigating the code base, no if you want to understand control flow.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>GitHub desktop! Having, I think, a reasonable understanding of how git works, I have tried and failed to deeply understand how to operate the git command line, but the basics just do not make sense to me. Many of the operations does do not align with my thinking about how stuff works. The UX, which I think we can certainly speak of for a command line too is just horrible, and made only for people who have already drunk liters of the kool aid. Like why is &#8220;checkout&#8221; making a new branch? There is no logic!</p><p>GitHub desktop places a usable UX over git, with revolutionary ideas like a button that is called &#8220;new branch&#8221; for making a new branch. I don&#8217;t get why people still prefer the command line for simple things, for I would say 90% of the tasks, you can use Desktop. (of course I sometimes use the command line for very complex merge conflicts but that is really limited to a few times a year).</p></blockquote><p><strong>What is your favorite book and why?</strong></p><blockquote><p>Let/s limit this to books about programming! Certainly &#8220;<a href="https://www.amazon.com/Working-Public-Making-Maintenance-Software/dp/0578675862">Working in Public</a>&#8221; has made a huge impact on me recently. It gave me vocabulary for the things I was struggling with in managing Hedy. The book talks about how open source has changed from projects that were, in essence, clubs in which people knew each other, because the burden of entry was high (which of course in itself was very problematic too!) to projects that are more performances, in which a small group of people work &#8220;in public&#8221; and a large group of casual contributors dip in and out of the project, because with GitHub everyone can so easily open issues and pull requests, without really knowing the project.</p></blockquote><p><strong>If you had to suggest 1 person developers should follow, who would it be?</strong></p><blockquote><p>Grady Booch, most well known as the creator of UML, but nowadays both fighting AI nonsense on Twitter, and standing up for diversity and inclusion in the field.&nbsp;</p></blockquote><p><strong>Why was Hedy started?</strong></p><blockquote><p>As with most projects I think, to solve my own problem! I was teaching middle schoolers programming (aged 12), and they found Scratch and other block-based languages to be too childish, they wanted a &#8220;grown up&#8221; language. That is of course very fitting for that age group; teenagers want to do stuff that adults do too. However, textual languages like Python or JavaScript are made to work with as a professional, they are not made to learn with. Just outputting something like &#8220;hello&#8221; already requires brackets and quotation marks, which for novices is very distracting. You can&#8217;t really learn about the <em>concept</em> of printing, without also learning a lot of syntax. And for more advanced concepts like conditionals or loops, the syntax is even weirder. Many of the kids in my class would eventually learn how to type &#8220;for i in range(4):&#8221; but they did not really grasp repetition as an idea.&nbsp;</p><p>And, the error messages were so cryptic, especially for non-English speakers that I was teaching. What is a &#8220;Syntax error&#8221;, why is this &#8220;indent&#8221; &#8220;unexpected&#8221;. I had to run around all the time to put out small syntax fires, rather than talk about the cool things that kids could achieve with programming.</p><p>So I thought&#8230; What if I make a programming language that works in small steps? First we teach a concept, and then we slowly add the syntax. So first <strong>print hello</strong>, and then <strong>print &#8220;hello&#8221;</strong> and then <strong>print(&#8220;hello&#8221;)</strong>. In the winter of 2019 I made the first prototype, just to be used in my class. </p><p>After a year, 100.000 Hedy programs had been created, and we had received several translations like Spanish and French, so I knew I was onto something! Fast forward to today when we have about 400.000 people on the site monthly, and are available in 47 languages, including non-latin languages like Simplified Chinese and Hindi and right to left languages like Arabic and Urdu. In terms of open source, we have over 350 contributors to date, and we merge about 75 pull requests a month. So it has been quite a ride!</p></blockquote><p><strong>How does Hedy work?</strong></p><blockquote><p>We have a really cool (hand drawn) overview of the architecture in our Wiki:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nbdP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nbdP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nbdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg" width="398" height="616.9" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1550,&quot;width&quot;:1000,&quot;resizeWidth&quot;:398,&quot;bytes&quot;:250025,&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_!nbdP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nbdP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52697474-8ac5-4a14-b85c-cc7e515380e6_1000x1550.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>It summarizes what we do: The basic idea of Hedy is that we allow learners to write code using the Hedy syntax, in a web page. The code page, and other web pages, are rendered by Flask (a Python web framework), using templates in Jinja.</p><p>When running Hedy code from the webpage, the Hedy code is converted (transpiled) into Python on the server side, using the Lark parser framework. The transpiled Python code is sent to the front-end and run in the front-end using Skulpt, a Python interpreter written in JavaScript.</p></blockquote><p><strong>Why did you pick Python?</strong></p><blockquote><p>I chose Python because I knew Python, and because the Hedy learning trajectory leads to Python. This is also why we transpile to Python, because it is close to Hedy. In retrospect, this was maybe not the best move, because it means we have to rely on Skulpt to execute the Python in the browser. I really hope browsers will implement running Python so we can do that in a more direct way! (it is too late I feel for us to still switch to generation JavaScript directly).</p></blockquote><p><strong>Where did the name for Hedy come from?</strong></p><blockquote><p>Hedy<strong> </strong>is named after <a href="https://en.wikipedia.org/wiki/Hedy_Lamarr">Hedy Lamarr</a>! She is most known as a movie actress, but she was also an inventor, who helped develop the &#8220;frequency hopping&#8221; algorithm that you use everyday, since it is in Wi-Fi routers!&nbsp;</p></blockquote><p><strong>Who, or what was the biggest inspiration for Hedy?</strong></p><blockquote><p>Kids in my classes that were struggling with error messages, especially the girls who would come in a bit nervous already into programming class. If they first thing you then see is &#8220;SyntaxError, unexpected EOL&#8221; it is easy to think you are not smart enough to be good at computers.</p></blockquote><p><strong>Are there any overarching goals of Hedy that drive design or implementation?</strong></p><blockquote><p>Yes, we have even documented our design goals for the language: <a href="https://github.com/hedyorg/hedy/wiki/Hedy-Language-Design">https://github.com/hedyorg/hedy/wiki/Hedy-Language-Design</a>! There is sometimes a trade off and to be honest we have sometimes sinned a bit against the design, because you want to have a language that is simple, but you also want kids to build cool programs that they are excited about. So some early levels add concepts (like sleep and clear screen) that are maybe a bit early in the learning trajectory but add depth.&nbsp;</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Hedy, so far? And what was the most surprising thing you learned?</strong></p><blockquote><p>Everything to do with localization, specifically for non-Latin languages. Did you know Arabic numerals (0, 1, 2, ..9) are not used in Arabic? I certainly did not know that before I started working on the Arabic version of Hedy. There were so many things to think about! The use of accents is another interesting issue, in French, repeat is &#8220;rep&#233;t&#233;&#8221;, but what if a kid uses &#8220;repete&#8221;? Is that a syntax error or should it be allowed?&nbsp;</p><p>English is a really simple language in terms of spelling, and therefor in PL design, a lot of concepts from other languages have not been considered. Like, we have the concept of &#8220;case sensitivity&#8221; but not of &#8220;diacritic sensitivity&#8221; to decide between &#8220;rep&#233;t&#233;&#8221; and &#8220;repete&#8221; because English does not have accents. While localizing Hedy I ran into so many issues I ended up writing a paper about it: <a href="https://www.felienne.com/archives/7668">felienne.com/archives/7668</a>.</p></blockquote><p><strong>If you could teach every 12 year old in the world one thing, what would it be and why?</strong></p><blockquote><p>What we are trying to do with Hedy is teaching all kids that programming can be learned. Many kids without prior programming experience, often girls and kids without a computer at home, feel programming is scary and not for them. Existing solutions don&#8217;t really address that well. Visual programming languages like Scratch don&#8217;t &#8220;scaffold&#8221;; they don&#8217;t tell you where to get started and how to approach things. Textual languages on the other hand, like Python or JavaScript start with throwing error messages around before kids have a chance to figure out if programming is for them, or even what programming *is*.&nbsp;</p><p>We teach them that even though, like with all subjects, some kids go fast and some so slow, some reach far and others just take a steps, everyone can do a little bit of programming!</p></blockquote><p><strong>If I gave you $10 million to invest in one thing right now, where would you put it?</strong></p><blockquote><p>Hedy! We have so many things to explore still, improving error messages, helping teachers get better insights into what kids are doing and where they are struggling, using a combination of parsing and AI to translate programs from one natural language to the other so that all kids can learn from each other!</p></blockquote><p><strong>What are you currently learning?</strong></p><blockquote><p>Managing a large open source project. Hedy was never really meant to be a large project and in the beginning I really did not know how to manage it, in various ways! I did not really look at code in depth, when people submitted PR&#8217;s I mainly looked at whether it was working, and whether the code was not terrible, but I did not look at whether the style fit the project, or whether the&nbsp;</p></blockquote><p><strong>What have you been listening to lately?</strong></p><blockquote><p>In terms of music? Bob Dylan, always. The thing about Dylan&#8217;s music is that there is a Dylan album for every mood, he has old school blues, but also stuff more leaning towards gospel, jazz, and pop. So whatever you are in the mood for, Dylan is the way to go.</p><p>In terms of (tech) podcasts, I love &#8220;<a href="https://www.techwontsave.us/">tech won&#8217;t save us</a>&#8221; and &#8220;<a href="https://www.nytimes.com/column/hard-fork">the hard fork</a>&#8221;.</p></blockquote><p><strong>How do you separate good project ideas from bad ones?</strong></p><blockquote><p>One answer to that is that I am a teacher, and I teach with Hedy myself, so I often have a feel for features that could help teachers. As a maintainer, I also have a lot of contact with other teachers that use Hedy, on our Discord channel with regulars, and in workshops we give to new teachers. But sometimes we still invest in &#8220;the wrong&#8221; features because they are interesting to build, or because we think something will be helpful while it is not.</p></blockquote><p><strong>What&#8217;s the funniest GitHub issue you&#8217;ve received?</strong></p><blockquote><p>I am not sure if this is really funny, but there was someone who made an issue (<a href="https://github.com/hedyorg/hedy/issues/1908">github.com/hedyorg/hedy/issues/1908</a>) about quotation marks in my LICENSE file. I kindly asked him to bugger off after this issue/PR. It was interesting because I told him stuff like this was really overwhelming for maintainers, and after a while he replied saying that he has muted the repo since he was also overwhelmed with activity from it.</p><p>But looking back at this interaction, it is nice to observe that I have grown so much as a maintainer. Nowadays, I would not even accept such a silly PR and tell people a lot earlier that this type of behavior is harmful. We now also have strong community guidelines about unwanted suggestions, and a Discord server where we hang out with each other to joke about this kind of stuff.</p></blockquote><p><strong>What is your typical approach to debugging issues filed in the Hedy repo?</strong></p><blockquote><p>For errors about the Hedy language, I almost always start with writing a test and see if I can reproduce the error from a test. If I get there, I know fixing it will be doable. We are really big on TDD like development for the language part. See that it breaks, fix the test, see that no other tests are broken and then try to improve. We have a lot of manually written tests for the language, but we also have a test set of about 10.000 programs created by kids previously, which we also shouldn&#8217;t break with new changes (or at least not unintentionally).</p></blockquote><p><strong>What is the release process like for Hedy?</strong></p><blockquote><p>Every merge to main goes to our test environment, where we sometimes invite teachers to try out stuff, and where we also manually test some front-end features to see if all goes well and looks well. Usually we deploy the test environment to hedy.org every Friday late afternoon. This makes sense for us since then our traffic is lowest since schools are out :)&nbsp;&nbsp;</p><p>Although every core contributor could do this, in practice I am always the one doing this (I am not even sure they know they could, haha!)</p></blockquote><p><strong>Is Hedy intended to eventually be monetized?</strong></p><blockquote><p>It is meant to be free and open source. I think it is quite wicked actually that schools spend so much money on software (and other digital materials!) while there are so many people that would build software and materials for free. I am happy that may tools for programming (code.org, Scratch, us) are showing that software can be both useful and user friendly and also free for schools.&nbsp;</p><p>We are funded mainly by government subsidies from the Dutch government and occasional donations on GitHub (which are nice, of course) and a lot of volunteer effort!</p></blockquote><p><strong>What are you most proud of?&nbsp;</strong></p><blockquote><p>Hedy definitely helped me in my career, because it got me the award for best CS researcher of the Netherlands (a small country, but still). But I think the best moment was when after schools were closed because of Covid, in the summer of 2021 I saw kids working with Hedy in real life, for the first time. Seeing the product come to live, to really see kids interact with it, was mind-blowing!</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>It is a bit hard to say because as an academic, it is not so well defined what my job is.&nbsp; Certainly inventing new things is my job, so a big part of Hedy is just what I am supposed to do.</p></blockquote><p><strong>What is the best way for a new developer to contribute to Hedy?</strong></p><blockquote><p>Be excited about what Hedy is! Our docs explain that our most successful contributors fall in love with the idea, goals and philosophy of Hedy first, and look around to see where help is needed. Less successful contributors find small issues that bug them and submit pull requests without looking at issues that we created.&nbsp;</p><p>If you start to love Hedy, join a bi-weekly contributors meeting. I think one of the best things I have done for my own enjoyment is start to have online meetings with regulars. It eases further (so often written) communication so much if you get to speak to each other, and we laugh a lot about silly ideas and plans and mistakes. It really created a team feeling and I am surprised I don&#8217;t see this more often in OS projects. It is so worth the hour I put in every two weeks!</p></blockquote><p><strong>What motivates you to continue contributing to Hedy?</strong></p><blockquote><p>The emails we get from people all around the world telling me their teaching has gotten so much better with Hedy, that their students are learning more and having more fun! It really shows we are on the right track.&nbsp;</p></blockquote><p><strong>Are there any other projects besides Hedy that you&#8217;re working on?</strong></p><blockquote><p>None at the moment, because:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FKrc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FKrc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 424w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 848w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 1272w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FKrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png" width="1456" height="693" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3298077-54a7-4309-8147-19251506e844_1600x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:693,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!FKrc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 424w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 848w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 1272w, https://substackcdn.com/image/fetch/$s_!FKrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3298077-54a7-4309-8147-19251506e844_1600x762.png 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></blockquote><p><strong>Do you have any other project ideas that you haven&#8217;t started?</strong></p><blockquote><p>I have been forever dreaming about a better refactoring tool (one to perform &#8220;cognitive refactorings&#8221; as I outline in my book) but I know I will never build that, it is too much work on top of everything. Throwing it out here so maybe someone else will haha!</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>GPT and Copilot and the like of course is an interesting development that has people reflect on their practice a lot. If done well they can really improve productivity, I recently used GPT to explain to me how to use a certain API, and it was impressively helpful, it really saved me a lot of search time! But it can also generate senseless stuff, or code with subtle bugs that are hard to spot. So I hope we will invest less in the hype and more in the &#8220;if done well&#8221; part. I certainly believe in GPT for code more than for text, because it can be executed, so many (not all!) errors are caught early on.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>I don&#8217;t know. &#8220;Working in Public&#8221; does paint a bit of a bleak picture in which the small number of maintainers will not be able to keep up with all contributors and users needing their attention. And I fear for a world in which that attention will also have to be split with &#8220;smart&#8221; bots that auto generated PR with an issue text as prompt! That is a dark side of GPT I see, sadly.&nbsp;</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>Find an issue you think you can do (maybe look for things labeled &#8220;good first issue&#8221;) and then reach out to the maintainers as documented in the docs. Some people want to get an email or a Discord message, others state that you can just go for it, but look at the preferences and follow these! That gives you the best chance of getting positive feedback.</p></blockquote><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Loved this interview? Receive more like these every week by subscribing for free!</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><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #185 -- Coolest open source projects of the week]]></title><description><![CDATA[Featuring cloud, Ruby, gaming, and other projects]]></description><link>https://console.substack.com/p/console-185</link><guid isPermaLink="false">https://console.substack.com/p/console-185</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 26 Nov 2023 18:54:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/66c1b6d5-e174-4ca9-8a96-1cd4134f9ca7_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/mail-in-a-box/mailinabox">Mail-in-a-Box</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u6n6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u6n6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 424w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 848w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 1272w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u6n6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png" width="214" height="126.0453074433657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:618,&quot;resizeWidth&quot;:214,&quot;bytes&quot;:43531,&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_!u6n6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 424w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 848w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 1272w, https://substackcdn.com/image/fetch/$s_!u6n6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e994d2-cf95-40b3-8943-ebeb93503be0_618x364.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Mail-in-a-Box helps individuals take back control of their email by defining a one-click, easy-to-deploy SMTP+everything else server: a mail server in a box.</p><p><strong>language:</strong> Python <strong>stars:</strong> 12803 <strong>last commit:</strong> a month<br><strong>repo:</strong> <a href="https://github.com/mail-in-a-box/mailinabox">github.com/mail-in-a-box/mailinabox</a><br><strong>site: </strong><a href="https://mailinabox.email/">mailinabox.email</a></p><h4><strong><a href="https://github.com/flippercloud/flipper">Flipper</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bJfw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bJfw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 424w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 848w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 1272w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bJfw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png" width="76" height="76" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:76,&quot;width&quot;:76,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Flipper Cloud&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="Flipper Cloud" title="Flipper Cloud" srcset="https://substackcdn.com/image/fetch/$s_!bJfw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 424w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 848w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 1272w, https://substackcdn.com/image/fetch/$s_!bJfw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F494dafcc-b5e9-4ff4-a3e2-595895a6122e_76x76.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Beautiful, performant feature flags for Ruby. Flipper gives you control over who has access to features in your app. Enable or disable features for everyone, as you like.</p><p><strong>language: </strong>Ruby<strong> stars: </strong>3434 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/flippercloud/flipper">github.com/flippercloud/flipper</a><br><strong>site</strong>: <a href="https://www.flippercloud.io/docs/introduction">flippercloud.io</a></p><h4><strong>Ansel</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!88B8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!88B8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 424w, https://substackcdn.com/image/fetch/$s_!88B8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 848w, https://substackcdn.com/image/fetch/$s_!88B8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 1272w, https://substackcdn.com/image/fetch/$s_!88B8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!88B8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png" width="197" height="55.68533333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8900316-a41d-4f66-982c-5ef7262cc694_375x106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:106,&quot;width&quot;:375,&quot;resizeWidth&quot;:197,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Ansel&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="Ansel" title="Ansel" srcset="https://substackcdn.com/image/fetch/$s_!88B8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 424w, https://substackcdn.com/image/fetch/$s_!88B8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 848w, https://substackcdn.com/image/fetch/$s_!88B8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 1272w, https://substackcdn.com/image/fetch/$s_!88B8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8900316-a41d-4f66-982c-5ef7262cc694_375x106.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Ansel is an open-source photo-editing software for digital artists. A darktable fork minus the bloat, plus some design vision.</p><p><strong>language:</strong> C <strong>stars:</strong> 422 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/aurelienpierreeng/ansel">github.com/aurelienpierreeng/ansel</a><br><strong>site: </strong><a href="https://ansel.photos/en/">ansel.photos</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div><hr></div><h4><strong><a href="https://github.com/Bixilon/Minosoft">Minosoft</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZcSl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZcSl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 424w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 848w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 1272w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZcSl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png" width="90" height="90" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:64,&quot;width&quot;:64,&quot;resizeWidth&quot;:90,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Minosoft&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="Minosoft" title="Minosoft" srcset="https://substackcdn.com/image/fetch/$s_!ZcSl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 424w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 848w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 1272w, https://substackcdn.com/image/fetch/$s_!ZcSl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3ea2e2-2ef4-404e-bd55-f5fa5cbae245_64x64.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>An open source Minecraft reimplementation written from scratch.</p><p><strong>language:</strong> Kotlin <strong>stars:</strong> 638 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/Bixilon/Minosoft">github.com/Bixilon/Minosoft</a></p><h4><strong><a href="https://github.com/Moosync/Moosync">Moosync</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c2mu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c2mu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 424w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 848w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 1272w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c2mu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png" width="102" height="102" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:592,&quot;width&quot;:592,&quot;resizeWidth&quot;:102,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;moosync logo&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="moosync logo" title="moosync logo" srcset="https://substackcdn.com/image/fetch/$s_!c2mu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 424w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 848w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 1272w, https://substackcdn.com/image/fetch/$s_!c2mu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff60b0014-90c1-4aaf-b9be-0981fda473da_592x592.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Music player capable of playing local audio or from YouTube, Spotify and many more </p><p><strong>language:</strong> JS <strong>stars:</strong> 648 <strong>last commit:</strong> 3 months<br><strong>repo:</strong> <a href="https://github.com/Moosync/Moosync">github.com/Moosync/Moosync</a><br><strong>site:</strong> <a href="https://moosync.app/">moosync.app</a></p><h4><strong><a href="https://github.com/jordan-cutler/path-to-senior-engineer-handbook">Path to Senior Engineer</a></strong></h4><p>This repo is a handbook with all the resources you need to reach Senior Software Engineer! Contains courses, communities, etc.</p><p> <strong>stars: </strong>1604 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/jordan-cutler/path-to-senior-engineer-handbook">github.com/jordan-cutler/path-to-senior-engineer-handbook</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-185/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-185/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #184 - Interview with Paul of Grist - a modern relational spreadsheet with Python support]]></title><description><![CDATA[Featuring Frigate, Tusky, and Grist]]></description><link>https://console.substack.com/p/console-184</link><guid isPermaLink="false">https://console.substack.com/p/console-184</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Mon, 20 Nov 2023 01:01:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/09c30bac-3670-4c2d-9452-c25bbe7e99db_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/blakeblackshear/frigate">Frigate</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!acx6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!acx6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 424w, https://substackcdn.com/image/fetch/$s_!acx6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 848w, https://substackcdn.com/image/fetch/$s_!acx6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 1272w, https://substackcdn.com/image/fetch/$s_!acx6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!acx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png" width="278" height="79.07555555555555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:128,&quot;width&quot;:450,&quot;resizeWidth&quot;:278,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;logo&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="logo" title="logo" srcset="https://substackcdn.com/image/fetch/$s_!acx6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 424w, https://substackcdn.com/image/fetch/$s_!acx6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 848w, https://substackcdn.com/image/fetch/$s_!acx6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 1272w, https://substackcdn.com/image/fetch/$s_!acx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50173372-31e9-4c60-9982-7b1c6aafe9f0_450x128.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>A complete and local NVR designed for Home Assistant with AI object detection. Uses OpenCV and Tensorflow to perform realtime object detection locally for IP cameras.</p><p><strong>language: </strong>Python <strong>stars:</strong> 10876 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/blakeblackshear/frigate">github.com/blakeblackshear/frigate</a><br><strong>site: </strong><a href="https://frigate.video/">frigate.video</a></p><h4><strong><a href="https://github.com/tuskyapp/Tusky">Tusky</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CI4n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CI4n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 424w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 848w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 1272w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CI4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png" width="192" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!CI4n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 424w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 848w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 1272w, https://substackcdn.com/image/fetch/$s_!CI4n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0761f68d-c724-422a-8d9c-8c7d0af874dc_192x192.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>An Android client for the microblogging server Mastodon</p><p><strong>language: </strong>Kotlin<strong> stars:</strong> 2285 <strong>last commit:</strong> a week<br><strong>repo:</strong> <a href="https://github.com/tuskyapp/Tusky">github.com/tuskyapp/Tusky</a><br><strong>site</strong>: <a href="https://tusky.app/">tusky.app</a></p><h4><strong><a href="https://github.com/gristlabs/grist-core">Grist</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O0wr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O0wr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 424w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 848w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 1272w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O0wr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png" width="250" height="88" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:88,&quot;width&quot;:250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Grist&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="Grist" title="Grist" srcset="https://substackcdn.com/image/fetch/$s_!O0wr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 424w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 848w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 1272w, https://substackcdn.com/image/fetch/$s_!O0wr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96fea7a6-a358-4d04-88c8-8b9d85c1bc0a_250x88.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Grist is a modern relational spreadsheet. It combines the flexibility of a spreadsheet with the robustness of a database to organize your data and make you more productive.</p><p><strong>language:</strong> JS <strong>stars:</strong> 5350 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/gristlabs/grist-core">github.com/gristlabs/grist-core</a><br><strong>site:</strong> <a href="https://www.getgrist.com/">getgrist.com</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Get high quality projects and interviews like these directly in your inbox by subscribing to the free newsletter!</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><h3><strong>&#127897;&#65039; Interview with Paul of Grist - a modern relational spreadsheet with Python support</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yV9A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yV9A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yV9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg" width="279" height="279" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:603,&quot;resizeWidth&quot;:279,&quot;bytes&quot;:125506,&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_!yV9A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yV9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c651426-778c-40c1-9d8c-bd2a231e5ff7_603x603.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><strong>Hey Paul! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I grew up on a small farm in rural Ireland, milking cows and herding goats. On the weekends, I learned to program on a <a href="https://en.wikipedia.org/wiki/ZX81">ZX81</a>, by sneaking up to it when my older siblings weren&#8217;t around, and randomly tweaking their programs to see what happened. While doing so, I noticed that I was indoors, warm, sipping tea, and not getting kicked or head-butted by farm animals. I wanted more of that sort of thing, so I went on to study computer engineering at the University of Limerick. After that, perhaps from nostalgia for the goats, I did a doctorate at MIT on robots that poke things to learn about them. If a robot ever pokes you to learn about you, my apologies (if you didn&#8217;t like it), or you&#8217;re welcome (if you did). This was the C/C++ phase of my life. Then I did some machine learning and computer vision at a small startup in NYC, for an early live video search engine that could detect people talking to their cats, streaming their coding sessions, or strumming guitars. This was my Python period. After that company was bought by Axon/Taser for use in law enforcement and surveillance, I moved on to another small startup in NYC that has so far had only the most benign of applications: Grist Labs. There&#8217;s still some Python in my life, but now Typescript dominates.</p></blockquote><p><strong>Who or what are your biggest influences as a developer?</strong></p><blockquote><p>I&#8217;ve a son in high school who is somewhat into tech, and I pay close attention to what he and his buddies get into. When they hacked together a Wordle variant by extracting some JSON from an academic paper on comparative linguistics, and getting ChatGPT to render it as a website, I knew it was time to pay attention. I also follow a lot of current and recent grad students, since that&#8217;s another good source of fresh ideas. For example <a href="https://twitter.com/geoffreylitt/">Geoffrey Litt</a> has an interesting vision for the future of software, and spent a lot of time wrestling with reactive databases (very relevant to Grist).</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>At some point, I sat down to write a programming language called CosmicOS (<a href="https://cosmicos.github.io/">cosmicos.github.io</a>) for communicating with extraterrestrials. That&#8217;s not controversial exactly, but I do sometimes feel judged when I talk about it. For me, it is an interesting puzzle in communication, logic, simulation, and programming language design, and that&#8217;s all. Please don&#8217;t jump to the conclusion that I believe aliens have been coming to Earth to probe us! We have robots for that!</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>Git. People complain, but those who lived through the before-times know that they were AWFUL. Also, it sounds like a breed of small goat.</p></blockquote><p><strong>Why was Grist started?</strong></p><blockquote><p>Grist is the brainchild of Dmitry Sagalovskiy. He was trying to do some organizing for the New York Math Circle <a href="https://www.nymathcircle.org/">nymathcircle.org</a>, a math club. First they used a spreadsheet, which was easy but didn&#8217;t do everything needed. Then they used a custom site, with Django, MySQL, etc. That could do more, but needed a lot of nursing along. With Grist, stuff that almost works in a spreadsheet can actually work for real, with no need for app building. I joined the project because I&#8217;d had similar frustrations in some volunteer work for the Data Commons Co-op <a href="https://datacommons.coop/">datacommons.coop</a>, an organization with a kind of &#8220;bottom-up Google&#8221; vision. One of things we were trying to do at the Data Commons Co-op was to make a pooled directory of "alternative economy" organizations - cooperatives, community gardens, food co-ops, buying clubs, time banks, and so on. The Co-op's members are not individuals, but rather umbrella groups such as the US Federation of Worker Co-ops or the Solidarity Economy Network. Several of the Co-op's members had previously tried to run big splashy directories that proved expensive to maintain and failed once funding ran low. We wanted to reduce costs and raise quality by pooling effort. There's a lot of "gotchas" to avoid when doing that, I learned. One that struck me in particular was how important it was that groups were free to decide their own rules for who is "in" or "out" of the directory. Looking for agreement here is the path to madness, and not actually necessary. The technical challenge of designing a directory that could be efficiently added to and queried by each community from its own perspective was very interesting. It left me wanting to pitch in to make a really effective tool for data projects of all kinds. I felt bad that as programmers we have all these nice things for collaborating around code, but whenever I saw a group try to work on data together it looked so painful. It really doesn&#8217;t have to be that way.</p></blockquote><p><strong>How does Grist work?</strong></p><blockquote><p>Grist has three main parts. First, there&#8217;s a relational database (SQLite). The tables in your Grist spreadsheet are stored exactly as tables in SQLite, with all special spreadsheet fanciness kept in separate metadata tables. That separation does make for some extra work, for example when tables and columns are renamed, but it draws a reassuringly clear line between data and layout. The second part of Grist is a &#8220;data engine&#8221;, written in Python, whose purpose is to implement the best parts of spreadsheets, such as formulas and dependency-tracking between cells. Grist uses Python formulas, with Excel-like macros available via Python implementations. The third part of Grist is a node server to enable live collaboration and to enforce a very flexible security model. A cute trick in Grist is that you can use formulas to define who has access to data. So if there&#8217;s some very specific rule you have about who can see which rows, based on who the user is and what exactly is in the row, you can totally make that happen. This is a game-changer, since it means you can invite people to collaborate on a spreadsheet that in the past you&#8217;d have to keep at a distance, forcing you to do awful things like manually importing their emailed CSVs or (worse) randomly-formatted Excel files. Beyond that, Grist is extensible in a few ways. If you know how to write some HTML/JS/CSS to render a page from some JSON input (like my son and his friends did with ChatGPT), then you can immediately apply that to spreadsheet data in Grist. Grist will take care of sorting, filtering, and linking the data with the rest of the UI. So for example if we hadn&#8217;t created a map widget, you could do it yourself pretty easily, and others could use your widget without fuss.</p><p>Everything needed to view, edit, and collaborate on spreadsheets is open sourced. Some material used to operate our own SaaS, and some features developed for particular enterprise clients, are not. We&#8217;ve packaged Grist in a few forms: as a ready-to-go docker image for use as a server, as a desktop app (handy for offline use), and compiled to pure JavaScript for use on static websites without any special back-end.</p></blockquote><p><strong>Where did the name for Grist come from?</strong></p><blockquote><p>It is a portmanteau of Grid and List. I suppose we could have called it L&#239;d instead?</p></blockquote><p><strong>Who, or what was the biggest inspiration for Grist?</strong></p><blockquote><p>Frankly for me the biggest inspiration is sites like GitHub that have had a big impact on collaborative coding. I aspire to have something like that impact, this time for collaborative data. There&#8217;s a long road to go.</p></blockquote><p><strong>Are there any overarching goals of Grist that drive design or implementation? If so, what trade-offs have been made in Grist as a consequence of these goals?</strong></p><blockquote><p>The initial vision for Grist was a desktop spreadsheet app, with sharing via end-to-end encryption, and with none of your data stored or accessible outside your devices. We heard a lot of enthusiasm for the idea, but had a hard time getting people to actually install the app. So we switched to making a more conventional web app, where data is stored in a central server and there&#8217;s nothing to install locally. That really helped adoption, but was definitely a trade-off. There are hooks in Grist sitting and waiting for the day we can return our attention to this.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Grist, so far?</strong></p><blockquote><p>Granular access control was a doozy. I mentioned this feature earlier, but to recap: People often make copies of spreadsheets because there&#8217;s someone who should see just part of it, not the whole thing - but then the spreadsheets get out of sync quickly. We wanted to make this whole mess unnecessary, by allowing very flexible access control. We wanted to allow expressing access control as formulas, reusing experience that many spreadsheet users already have. So you could say, for example, that a user should be able to see rows for cities they manage, and be able to edit the ones assigned to them. Making the whole system efficient, and able to correctly propagate live changes to all users despite their differences in access rights was challenging. I think we only managed to do it because of a period of enforced tranquility during the pandemic lock-downs. We are currently working on a new vision for access control that we hope will make it not only flexible, but also easy, so even more users can take advantage of it. Our codename for this project is WYSIWYS (&#8220;What You See Is What You Share&#8221;). Under the hood, it will translate visual layouts into the rules needed to protect your data. If you want to dip into the granular access code, a lot of it lives <a href="https://github.com/gristlabs/grist-core/blob/5f0c3bd8545256b4d3310ace197aace284ce8633/app/server/lib/GranularAccess.ts#L251">here</a>.</p></blockquote><p><strong>Are there any projects similar to Grist? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p>Airtable is often mentioned, as it is a spreadsheet/database hybrid. For me, I want a data container that can go anywhere the data is - in the cloud, on a desktop, on an airgapped network etc, and I want to be sure the container will work into the indefinite future. Airtable isn&#8217;t that. Baserow is sometimes mentioned also. I think it got started a few years after Grist. Something I value about Grist is the robustness of its data format. You can download a spreadsheet and upload it again in a different Grist installation without any fuss. You can read data from it with regular SQLite tooling. I feel I can trust it as an archive format. Baserow goes another route, using PostgreSQL for storage. That&#8217;s a great choice, and I hope Grist will support it too in future, but it does mean that individual spreadsheets are not as naturally self-contained as they were with, say, Excel.</p></blockquote><p><strong>What was the most surprising thing you learned while working on Grist?</strong></p><blockquote><p>That a small team building something general purpose, rather than solving a specific problem as all the sage advice urges, can actually succeed to a remarkable extent. It is a very delicate balancing act. Hats off to Dmitry for getting us this far.</p></blockquote><p><strong>How popular is Grist? How did it get popular? </strong></p><blockquote><p>We are big in France! Grist has seen heavy use at a very cool agency in the French government for coordinating local and regional projects, L&#8217;Agence Nationale de la Coh&#233;sion des Territoires (ANCT - here&#8217;s <a href="https://donnees.incubateur.anct.gouv.fr/toolbox/grist">their description of Grist</a>). The main reasons they like us are that we are open source, have good quality code, and plenty of features. They are particular fans of granular access control. They run probably the largest Grist service apart from ourselves, and have contributed many wonderful fixes and features. In the world at large, I&#8217;d say we&#8217;re just starting to get significant attention. We&#8217;ve had a few lucky posts on the selfhosted subreddit, and a couple of front-page Hacker News stories that have raised our profile in the tech community. Successful Appsumo and Product Hunt launches have helped also.</p></blockquote><p><strong>What is your typical approach to debugging issues filed in the Grist repo?</strong></p><blockquote><p>We have a very large and robust collection of tests, so most problems are caught long before they get to users. But if they do get through, there&#8217;s no real magic to figuring out the problem. One approach is to work with the user to find a way to replicate the issue, and then to strip things out until the problem goes away. Then you know that somewhere between the starting point and the ending point lies the problem, and you can just step between them to find it.</p></blockquote><p><strong>What is the release process like for Grist?</strong></p><blockquote><p>We aim for a monthly pulse, with coordination between the technical side of releasing a new stable version by our development team, and preparation of a <a href="https://support.getgrist.com/newsletters/">lovely newsletter</a> describing what has changed in the month by our marketing team. For our SaaS, we deploy changes on a weekly cycle, with disruptive changes behind temporary feature flags.</p></blockquote><p><strong>How is Grist monetized?</strong></p><blockquote><p>We have a SaaS, standing ready and willing to host your Grist spreadsheets so you don&#8217;t have to, with free and paid plans. We also have some enterprise clients. Because we were bullied into it, it is possible to sponsor us on GitHub, and a small number of very determined philanthropists do so. We are planning to release Grist on marketplaces such as the AWS Marketplace, so people can choose to pay for the convenience of delegating installation and configuration of self-managed Grist sites to us.</p></blockquote><p><strong>What are you most proud of? </strong></p><blockquote><p>When I hear developers from ANCT (the French government agency I mentioned) describe to others how and why they use Grist, and see the impact it is having, it gives me goosebumps. Recently we were co-presenting at a conference with them, and I got to see the full scope of their work. I realized that what they&#8217;ve built with Grist aligns closely with the vision of the Data Commons Co-op I volunteered at, but executed with way better funding. It makes me excited to close the circle and bring lessons from Grist users back to the grass-roots projects that originally motivated me to get into all this.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Yes, I&#8217;ve come close. As Grist gets more widely known, we&#8217;ve also been scaling up our team, but there are some weeks when it feels like everything everywhere all at once is happening, and that&#8217;s too many things. I believe I deal with it by reflecting on my place in the universe and letting perspective soak back in. I have one of those small disks that says &#8220;The world was created for me&#8221; on one side, and &#8220;I am dust and ashes&#8221; on the other, and flipping that back and forth can help. I also become grumpy and reclusive, which can do wonders for naturally reducing my workload too.</p></blockquote><p><strong>What is the best way for a new developer to contribute to Grist?</strong></p><blockquote><p>If you are comfortable building and running tests, check out the &#8220;<a href="https://github.com/gristlabs/grist-core/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">good first issue</a>&#8221; label on the Grist repository. If you are more comfortable making web pages, you could read up on <a href="https://support.getgrist.com/widget-custom/">custom widgets</a> and then think of a clever new way to visualize data in a table and add that. It can be as simple as a web page rendering some JSON you are handed by Grist. A pedigree chart for goats, perhaps, or an interpretation of some data as sheet music.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>We&#8217;ve got a lot of fun features under development, some in collaboration with ANCT. I&#8217;d love to see two or three more ANCT-level contributors to the project, to get more done faster. Spreadsheets have a long tail of features that are really critical to someone, so there&#8217;s a lot to do. Any capable teams out there for whom Grist is great but would be better with just a few more key features, let&#8217;s talk!</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>It is hard to predict. LLMs and other models seem likely to change software development as much as the invention of the if statement. They are a new and very different building block, full of caprice and whimsy, which is not really a problem we&#8217;ve had to deal with in computer science before. I&#8217;m looking forward to it.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>I see open-source software as being the space within which humanity&#8217;s long term digital culture and treasure is accreting. Commercial software is important and impactful in the moment, but ultimately froth on a deeper tide. I was struck, when reading <a href="https://en.wikipedia.org/wiki/Vernor_Vinge">Vernor Vinge</a>&#8217;s books, by his vision of software archaeologists in a distant future where, for example, buried deep in their infrastructure, the <a href="https://en.wikipedia.org/wiki/Unix_time">Unix epoch</a> is still a thing. A glorious vision!?</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>Before making a pull request, open an issue first to describe what you&#8217;d like to do, and why, and to check if the work would be welcome. Try to look at things from the perspective of the project maintainer. Everything you do will create work for them, from answering your questions, to reviewing your work, to suggesting improvements. So take a little extra time to make things easy for them any way you can. Don&#8217;t be discouraged by hostile or unresponsive people! Persist a bit, then move on - there are many happy, generous souls out there.</p></blockquote><p><strong>What is one question you would like to ask another open-source developer that I didn&#8217;t ask you?</strong></p><blockquote><p>What would you be doing with your life if we hadn&#8217;t somehow taught sand to think?</p></blockquote><p><strong>Back to you, what would you be doing with your life if we hadn&#8217;t somehow taught sand to think?</strong></p><blockquote><p>Trying to convince something even more unlikely to think? I have a whole theory of how to build logic gates with interwoven vines. Come to think of it, I used that as part of CosmicOS (e.g. here&#8217;s a <a href="https://cosmicos.github.io/COS_D.html">D gate</a> which compiles to <a href="https://cosmicos.github.io/message.html#section51">this</a> in the message).</p></blockquote><div><hr></div><p><em>Loved this interview? Want to get the future ones too? Subscribe to the free newsletter now!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #183 - Interview with Stypox of New Pipe - A libre streaming front-end for Android ]]></title><description><![CDATA[Featuring Librum reader, Ladder, and Livewire.]]></description><link>https://console.substack.com/p/console-183</link><guid isPermaLink="false">https://console.substack.com/p/console-183</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 12 Nov 2023 19:00:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b10f66d5-eb31-47c7-92d1-76ddeaf863f0_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/Librum-Reader/Librum">Librum</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BPj-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BPj-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 424w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 848w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 1272w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BPj-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg" width="78" height="78" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:78,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!BPj-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 424w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 848w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 1272w, https://substackcdn.com/image/fetch/$s_!BPj-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2329eed-3630-4f0f-87d4-ca7cd46cf828_42x42.svg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Librum is an e-book reader with which you can manage your own online library and access it from any device anytime, anywhere. It has features like note-taking, bookmarking, and highlighting.</p><p><strong>language:</strong> C++ <strong>stars:</strong> 1321 <strong>last commit:</strong> 5 days<br><strong>repo:</strong> <a href="https://github.com/Librum-Reader/Librum">github.com/Librum-Reader/Librum</a><br><strong>site: </strong><a href="https://librumreader.com/">librumreader.com</a></p><h4><strong><a href="https://github.com/everywall/ladder">Ladder</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FIkw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FIkw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 424w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 848w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 1272w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FIkw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg" width="90" height="90" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:90,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!FIkw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 424w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 848w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 1272w, https://substackcdn.com/image/fetch/$s_!FIkw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81240d8f-1dd8-4289-a04e-f6e6c3fbcf50_512x512.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Ladder is a web proxy to help bypass paywalls. This is a self hosted version of <a href="https://1ft.io">1ft.io</a> and <a href="https://12ft.io">12ft.io</a>.</p><p><strong>language: Go stars:</strong> 1995 <strong>last commit:</strong> today<br><strong>repo:</strong><a href="https://github.com/everywall/ladder"> github.com/everywall/ladder</a></p><h4><strong><a href="https://github.com/livewire/livewire">Livewire</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OBiv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OBiv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 424w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 848w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OBiv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png" width="222" height="63.42857142857143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:416,&quot;width&quot;:1456,&quot;resizeWidth&quot;:222,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Livewire Logo&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="Livewire Logo" title="Livewire Logo" srcset="https://substackcdn.com/image/fetch/$s_!OBiv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 424w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 848w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 1272w, https://substackcdn.com/image/fetch/$s_!OBiv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c27d2bc-d0a9-47e2-af86-432e8a910fba_3978x1136.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Livewire is a full-stack framework for Laravel that allows you to build dynamic UI components without leaving PHP.</p><p><strong>language: PHP stars:</strong> 21004 <strong>last commit:</strong> 1 day<br><strong>repo:</strong> <a href="https://github.com/livewire/livewire">github.com/livewire/livewire</a><br><strong>site</strong>: <a href="https://livewire.laravel.com/">livewire.laravel.com</a></p><h4><strong><a href="https://github.com/TeamNewPipe/NewPipe/">NewPipe</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!76Im!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!76Im!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 424w, https://substackcdn.com/image/fetch/$s_!76Im!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 848w, https://substackcdn.com/image/fetch/$s_!76Im!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 1272w, https://substackcdn.com/image/fetch/$s_!76Im!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!76Im!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png" width="110" height="110" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:256,&quot;resizeWidth&quot;:110,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!76Im!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 424w, https://substackcdn.com/image/fetch/$s_!76Im!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 848w, https://substackcdn.com/image/fetch/$s_!76Im!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 1272w, https://substackcdn.com/image/fetch/$s_!76Im!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce9fc63e-7a14-4d14-a602-2a25c1c250f6_256x256.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A libre lightweight streaming front-end for Android which supports YouTube, PeerTube, SoundCloud, and more</p><p><strong>language:</strong> Java <strong>stars:</strong> 26036 <strong>last commit:</strong> 2 weeks<br><strong>repo:</strong> <a href="https://github.com/TeamNewPipe/NewPipe/">github.com/TeamNewPipe/NewPipe</a><br><strong>site:</strong> <a href="https://newpipe.net/">newpipe.net</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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"><em><strong>Get high quality projects and interviews like these directly in your inbox by subscribing to the free newsletter!</strong></em></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><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/Stypox">Stypox</a> of New Pipe - A libre streaming front-end for Android</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v8iE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v8iE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 424w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 848w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 1272w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v8iE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png" width="901" height="535" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:535,&quot;width&quot;:901,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:396962,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!v8iE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 424w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 848w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 1272w, https://substackcdn.com/image/fetch/$s_!v8iE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e2842c-3888-42b5-a47a-f589a6f93a68_901x535.png 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><strong>Hey! Thanks for joining us! Let us start with your background.</strong>&nbsp;</p><blockquote><p>I am Stypox, I am Italian and European, and I am currently studying computer science at University. I am fond of free software and have contributed to various projects since I learned how to code. I especially like building mobile applications because they can easily provide services to users right from their phone. I like modern technologies and I recently learned and used Rust (which I would strongly suggest even for e.g. backends), Kotlin (less verbose and less error-prone than Java) and Jetpack Compose (far better than normal Android development).<br>An interesting clue about how I started to code is the following: I was on a long trip by car and had nothing to do, so I decided to start to read a random C++ guide online. I got so excited about it that by the following long trip, I had already bought the book &#8220;The C++ Programming Language&#8221;.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>It seems like programming languages and frameworks are becoming more and more cluttered and slow, up to the point where the constant chip speedups do not keep up anymore. This is a serious problem for older devices that used to work well 5 years ago, but now are just too slow. I think we should stop putting layers of abstractions on top of one another, but rather reinvent frameworks and programming languages to achieve modernity and ease of use without sacrificing performance. Two great examples of this are Jetpack Compose and Rust, which provide modern and fast APIs.</p></blockquote><p><strong>Why was NewPipe started?</strong></p><blockquote><p>Back when NewPipe started, no serious YouTube frontend for Android existed. Therefore, NewPipe was created to provide a FOSS YouTube experience without trackers and with some additional features the official app doesn&#8217;t have.</p></blockquote><p><strong>How does NewPipe work?</strong></p><blockquote><p>NewPipe obtains the information to show on the screen in basically the same way a browser does it. Therefore, it makes requests to YouTube servers, pretending to actually be a browser, and it gets back data.</p></blockquote><p><strong>Where did the name for NewPipe come from?</strong></p><blockquote><p>One initial name proposal was GnuTube, however, considering such a name would have probably caused trademark issues, the &#8220;Gnu&#8221; was turned into &#8220;New&#8221;, and the &#8220;Tube&#8221; into &#8220;Pipe&#8221;.</p></blockquote><p><strong>Are there any overarching goals of NewPipe that drive design or implementation? If so, what trade-offs have been made in NewPipe as a consequence of these goals?</strong></p><blockquote><p>NewPipe does not only want to be a frontend for YouTube, but it also wants to promote streaming services that are more free. For this reason, multiservice support was introduced a few years ago, including support for PeerTube.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in NewPipe, so far? </strong></p><blockquote><p>I would like to turn this question around: &#8220;what is the biggest problem that has NOT been solved yet?&#8221;. NewPipe&#8217;s player has been quite buggy from the beginning, and the code kept growing into spaghetti. Every time we fixed a part of the player, some other part would break, wasting a lot of user and developer time. We tried to do various refactors of the player, and although things have improved, we don&#8217;t think it&#8217;s possible to continue with the current structure and we would like to start afresh on that component.<br>Issues:&nbsp; <a href="https://github.com/TeamNewPipe/NewPipe/issues/8616">https://github.com/TeamNewPipe/NewPipe/issues/8616</a> <a href="https://github.com/TeamNewPipe/NewPipe/issues/7673">https://github.com/TeamNewPipe/NewPipe/issues/7673</a> <br>Refactor attempts: <a href="https://github.com/TeamNewPipe/NewPipe/pull/8170">https://github.com/TeamNewPipe/NewPipe/pull/8170</a> <a href="https://github.com/TeamNewPipe/NewPipe/pull/5371">https://github.com/TeamNewPipe/NewPipe/pull/5371</a>&nbsp;</p></blockquote><p><strong>Are there any projects similar to NewPipe? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p>NewPipe was one of the first apps of its kind, but later many more alternatives emerged, e.g. Invidious, SkyTube. Also, the fact that NewPipe&#8217;s extractor is separate from the app allowed some projects to use it directly without reinventing the wheel, e.g. LibreTube, Piped. Some community-maintained forks of NewPipe exist, too: e.g. NewPipe x SponsorBlock, NewPipe preunified, BraveNewPipe, &#8230;</p></blockquote><p><strong>How did the project get popular?</strong></p><blockquote><p>For various reasons:</p><ul><li><p>publishing the app on F-Droid has provided a lot of visibility among FOSS supporters</p></li><li><p>there has been some media coverage</p></li><li><p>NewPipe was trending on Hacker News a couple of times</p></li><li><p>thanks to some NewPipe features that the official YouTube app doesn&#8217;t have, NewPipe could spread among non-techy people, too</p></li></ul></blockquote><p><strong>What are you most proud of?&nbsp;</strong></p><blockquote><p>When people have different ideas about how UIs should behave, it can be difficult to find a solution fitting everyone. This usually requires a deep understanding of the reasons behind the various standings in the community. A case when a common solution was successfully found was when we needed to add more buttons to the video details page: <a href="https://github.com/TeamNewPipe/NewPipe/pull/4534#issuecomment-741700417">https://github.com/TeamNewPipe/NewPipe/pull/4534#issuecomment-741700417</a></p></blockquote><p><strong>Did NewPipe ever face any legal issues?&nbsp;</strong></p><blockquote><p>This is how close we got to legal issues, however it ended well in a few days without us doing anything, so I don&#8217;t think it counts that much: <a href="https://newpipe.net/blog/pinned/announcement/newpipe-net-dmca-google-search/">https://newpipe.net/blog/pinned/announcement/newpipe-net-dmca-google-search/</a></p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>That&#8217;s quite a difficult question. Working on open-source and on personal programming projects is often a source of happiness and satisfaction for me, so whenever I have time, I am more than happy to spend it on those things. However, considering that I am still studying, my timetable is quite messed up, and it happens quite often that I don&#8217;t have time to work on any open source or personal project for months. I always try to keep an eye on issues and IRC messages though, to find out about emergencies.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Burnout for me happens when the next thing that needs to be done is quite big, but I&#8217;ve been out of the loop for a while, e.g. because of other duties. I tend to use some willpower anyway, and if that doesn&#8217;t work, I may set the project aside for some time and try to focus on something more exciting to get out of the burnout.</p></blockquote><p><strong>What is the best way for a new developer to contribute to NewPipe?</strong></p><blockquote><p>We would like to rewrite large chunks of the codebase soon, so contributors can chip in on <a href="https://github.com/TeamNewPipe/NewPipe/discussions/10118">https://github.com/TeamNewPipe/NewPipe/discussions/10118</a>. We are not open for new pull requests at the moment, except for bug fixes.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>We are planning a big rewrite to bring more stability and a modern look into NewPipe. Maintaining the current code has gotten a bit complicated, and we would like to switch to newer technologies. <a href="https://github.com/TeamNewPipe/NewPipe/discussions/10118">https://github.com/TeamNewPipe/NewPipe/discussions/10118</a>&nbsp;</p></blockquote><p><strong>Are there any other projects besides NewPipe that you&#8217;re working on?</strong></p><blockquote><p>I am building a FOSS voice assistant for Android named Dicio: <a href="https://github.com/Stypox/dicio-android">https://github.com/Stypox/dicio-android</a>. It already works, although it&#8217;s not perfect and has a limited number of skills available. I started this big project because I did not find any FOSS and on-device alternative to Google assistant.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>AI seems to be the next big thing, and there has been some open-source activity about it recently. It&#8217;s not impossible for open-source AI projects to keep up with big corporations, however there are still some things that need to be figured out, starting from the definition of when open AI really is. Which requirements do we need among these three, to define an AI as open: need open models, open training data and open source training code? And even if a project has all three, how can the normal user benefit from this, considering that AI models are generally not reproducible and require a lot of computational power and disk space to train and self-host?</p></blockquote><div><hr></div><p><em>Thanks for reading Console by CodeSee.io! Subscribe for free to receive the next interview.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #182 - Interview with Alberto of Solidus - an open source eCommerce framework]]></title><description><![CDATA[Featuring Fleet, NewPipe, and Spin]]></description><link>https://console.substack.com/p/console-182</link><guid isPermaLink="false">https://console.substack.com/p/console-182</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 05 Nov 2023 18:31:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0f1ded24-57f9-4396-816f-69e3a50c12db_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/fleetdm/fleet">Fleet</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://github.com/fleetdm/fleet" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R8O-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 424w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 848w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 1272w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R8O-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png" width="154" height="61.66346153846154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:583,&quot;width&quot;:1456,&quot;resizeWidth&quot;:154,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fleet logo, landscape, dark text, transparent background&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://github.com/fleetdm/fleet&quot;,&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="Fleet logo, landscape, dark text, transparent background" title="Fleet logo, landscape, dark text, transparent background" srcset="https://substackcdn.com/image/fetch/$s_!R8O-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 424w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 848w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 1272w, https://substackcdn.com/image/fetch/$s_!R8O-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb7fee2-e4e7-4274-a730-f9bb3f6d9300_2000x801.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Open-source platform for IT and security teams with thousands of computers. Designed for APIs, GitOps, webhooks, YAML, and humans.</p><p><strong>language:</strong> Go <strong>stars:</strong> 1674 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/fleetdm/fleet">github.com/fleetdm/fleet</a><br><strong>site: </strong><a href="https://fleetdm.com/">fleetdm.com</a></p><h4><strong><a href="https://github.com/TeamNewPipe/NewPipe/">NewPipe</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://github.com/TeamNewPipe/NewPipe/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jlHq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 424w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 848w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 1272w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jlHq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png" width="106" height="106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:256,&quot;resizeWidth&quot;:106,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://github.com/TeamNewPipe/NewPipe/&quot;,&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_!jlHq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 424w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 848w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 1272w, https://substackcdn.com/image/fetch/$s_!jlHq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e377c1b-b2c9-4c31-8fb1-3540b208b8cd_256x256.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A libre lightweight streaming front-end for Android. Supports YouTube, SoundCloud, etc</p><p><strong>language: </strong>Java<strong> stars:</strong> 25859 <strong>last commit:</strong> a week<br><strong>repo:</strong> <a href="https://github.com/TeamNewPipe/NewPipe/">github.com/TeamNewPipe/NewPipe</a><br><strong>site</strong>: <a href="https://newpipe.net/">newpipe.net</a></p><h4><strong><a href="https://github.com/fermyon/spin">Spin</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://github.com/fermyon/spin" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!00Q3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 424w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 848w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 1272w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!00Q3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png" width="186" height="79.45879120879121" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:1456,&quot;resizeWidth&quot;:186,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;spin logo&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://github.com/fermyon/spin&quot;,&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="spin logo" title="spin logo" srcset="https://substackcdn.com/image/fetch/$s_!00Q3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 424w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 848w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 1272w, https://substackcdn.com/image/fetch/$s_!00Q3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1dddc2a4-68b4-44b9-aebb-d83544c51cc9_1873x800.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.</p><p><strong>language:</strong> Rust <strong>stars: </strong>4252 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/fermyon/spin">github.com/fermyon/spin</a><br><strong>site:</strong> <a href="https://developer.fermyon.com/spin/v2/index">developer.fermyon.com/spin</a></p><h4><strong><a href="https://github.com/solidusio/solidus">Solidus</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://github.com/solidusio/solidus" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CE1K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 424w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 848w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 1272w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CE1K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg" width="236" height="45.38461538461539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:1456,&quot;resizeWidth&quot;:236,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Solidus logo&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://github.com/solidusio/solidus&quot;,&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="Solidus logo" title="Solidus logo" srcset="https://substackcdn.com/image/fetch/$s_!CE1K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 424w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 848w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 1272w, https://substackcdn.com/image/fetch/$s_!CE1K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7033a3-4cb6-44d5-acfe-9b13b6bce703_800x154.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Spin is the open source developer tool for building and running serverless applications powered by WebAssembly.</p><p><strong>language:</strong> Ruby <strong>stars:</strong> 4781 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/solidusio/solidus">github.com/solidusio/solidus</a><br><strong>site:</strong> <a href="https://solidus.io/">solidus.io</a></p><div><hr></div><p><em><strong>Get high quality projects and interviews like these directly in your inbox by subscribing to the free newsletter!</strong></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/kennyadsl">Alberto</a> of <a href="https://github.com/solidusio/solidus">Solidus</a> - an open source eCommerce framework</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Avhi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Avhi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Avhi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg" width="206" height="206" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:206,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/167946?v=4&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="https://avatars.githubusercontent.com/u/167946?v=4" title="https://avatars.githubusercontent.com/u/167946?v=4" srcset="https://substackcdn.com/image/fetch/$s_!Avhi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Avhi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d867989-2003-40eb-b402-4086ad5930b3_460x460.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Alberto Vena</figcaption></figure></div><p><strong>Hey Alberto! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>I&#8217;m Alberto from Chieti, a small town in the center of Italy. After I graduated in Computer Science in Rome, where I learned to code, I decided that the chaotic life wasn&#8217;t for me and I returned to my town with the goal of trying to live where a work-life balance is not a dream.</p><p>With my study-fellow Matteo Latini, living in another small city in Italy and a talented local designer Davide Di Stefano, we started <a href="https://nebulab.com/">Nebulab</a>, a web development company that specializes in e-commerce and grow from 3 to some dozen of people all around the globe.&nbsp;</p><p>Today, I&#8217;m the CTO of the company, and I'm still very connected with the code. My favorite language and framework are Ruby and Ruby on Rails, because they maximize the productivity of small teams, which is particularly important for us to help companies of any size.</p></blockquote><p><strong>Who or what are your biggest influences as a developer?</strong></p><blockquote><p>I&#8217;d say DHH (David Heinemeier Hansson). He is the creator of Ruby and Rails, and I respect its work and consistency over the years with the open source and its love for pragmatism. I read all the books he wrote with his partner Jason Fried, and the culture we are at Nebulab is also highly inspired by their thoughts.&nbsp;</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>Too many people push for using the latest trending technology before thinking about the real advantages to the health of the company they are working for. In particular, I&#8217;m generally against re-writing things instead of improving the existing ones. Most of the time, in my experience, it ends up costing more than fixing the actual problem with the current technology and, especially when it&#8217;s decided by some C-level or manager, it negatively impacts the team morale and long-term productivity.&nbsp;</p></blockquote><p><strong>Why was Solidus started?</strong></p><blockquote><p>It&#8217;s a long, long story; let me try to summarize it as much as I can. Solidus is a fork of <a href="https://spreecommerce.org/">Spree</a>, a popular open-source e-commerce platform, back in the days of the first DTCs explosion. When the company behind the project was acquired, it was clear that it was about to lose its open-source nature, so Solidus was born. A big chunk of the Spree community moved to Solidus and contributed until today to what it is.&nbsp;</p></blockquote><p><strong>How does Solidus work?</strong></p><blockquote><p>Technically, Solidus is a Ruby on Rails Engine, which is a sort of plug-in that you can attach to any Rails application. Solidus enhances this application with the skeleton of functionalities needed to run an e-commerce store, leaving all the freedom to change it in any part as your business needs. It also provides a starter storefront, which is a ready-to-use template that any store can change with literally no limitation.</p></blockquote><p><strong>Where did the name for Solidus come from?</strong></p><blockquote><p>It comes from the ancient Roman coin (<a href="https://en.wikipedia.org/wiki/Solidus_(coin)">https://en.wikipedia.org/wiki/Solidus_(coin)</a>) with a reference to the SOLID design principles (<a href="https://en.wikipedia.org/wiki/SOLID">https://en.wikipedia.org/wiki/SOLID</a>).</p><p>Is there a better name for an e-commerce platform whose target is developers? Probably, but I still love it.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Solidus, so far?&nbsp;</strong></p><blockquote><p>One of the problems we solved has been making some of the most important piece of the business logic code pluggable. Instead of telling people to monkey-patch existing classes to change their behavior, we made the whole behavior swappable with a configuration class. If you need that class to do extra things, you can define your own, which inherits from the original, and add what you need. Here&#8217;s an example of the exposed configuration: <a href="https://github.com/solidusio/solidus/blob/main/core/lib/spree/app_configuration.rb#L414">https://github.com/solidusio/solidus/blob/main/core/lib/spree/app_configuration.rb#L414</a>. With that, each store can quickly build its own logic to merge orders without patches here and there.</p></blockquote><p><strong>What was the most surprising thing you learned while working on Solidus?&nbsp;</strong></p><blockquote><p>Well, it's the sheer diversity of needs in e-commerce. No matter how robust and flexible you build a system, there's always someone who'll throw a curveball at you with a unique requirement. It's like trying to create a one-size-fits-all glove in a world where everyone has different shaped hands. You've got your standard features, sure, but then comes along a merchant who needs something so specific, it's almost bespoke. This really drove home the point that in e-commerce, 'universal' is more a direction than a destination. It keeps you on your toes, constantly learning and innovating. And honestly, that's what makes this field so exciting.</p></blockquote><p><strong>How is Solidus currently monetized?</strong></p><blockquote><p>It&#8217;s not. Companies working with Solidus contribute to the project via GitHub. We are also collecting community donations via our <a href="https://opencollective.com/solidus">Open Collective account</a>. A group of stakeholders among community members chooses how to spend those funds, which is generally for events or support larger initiatives, like <a href="https://solidus.io/blog/the-future-of-solidus">the Admin UX redesign</a> we are currently working on.&nbsp;</p></blockquote><p><strong>Do you have any suggestions for someone trying to make their first contribution to an open-source project?</strong></p><blockquote><p>Don&#8217;t be afraid to make mistakes. In my experience, a common aspect of the personality of open-source enthusiasts is the will to help people. This is what happened to me at the beginning as well: by just submitting a patch and showing genuine interest in solving problems, even without the proper skill set, I saw a lot of people trying to help out with what I was missing in order to understand the codebase better and complete my contribution. Being &#8220;mentored&#8221; while solving a specific problem I was facing kinda unlocked my growth for that specific area and made me a better developer; that&#8217;s precisely what I love about the open-source community. Of course, there are also people who are not willing to help and seem annoyed when contributions are not coming precisely as expected. To mitigate that, reading and sticking to the contributing guidelines of each project will help a lot, and when it&#8217;s not enough, well, you did your part! If your patch is rejected, you most likely have something to learn anyway. Move on to the next contribution!</p></blockquote><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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 Console by CodeSee.io! Subscribe for free to receive the next interview.</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><em>Loved this post? Why not share it?</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-182?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://console.substack.com/p/console-182?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #181 - Story of LocalSend, a cross-platform alternative to AirDrop]]></title><description><![CDATA[Featuring Geany, MarkText, and LocalSend]]></description><link>https://console.substack.com/p/console-181</link><guid isPermaLink="false">https://console.substack.com/p/console-181</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 29 Oct 2023 19:35:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d4500d70-f01a-47c8-be3b-60355f93a648_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/geany/geany">Geany</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YJhy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YJhy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 424w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 848w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 1272w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YJhy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg" width="122" height="122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:122,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!YJhy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 424w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 848w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 1272w, https://substackcdn.com/image/fetch/$s_!YJhy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022906a4-8ca7-4503-b708-b77b6ff02150_48x48.svg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Geany is a small and lightweight integrated development environment.</p><p><strong>language: C</strong> <strong>stars:</strong> 2840 <strong>last commit:</strong> 1 day<br><strong>repo:</strong> <a href="https://github.com/geany/geany">github.com/geany/geany</a><br><strong>site: </strong><a href="https://www.geany.org/">geany.org</a></p><h4><strong><a href="https://github.com/marktext/marktext">MarkText</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O6As!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O6As!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!O6As!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!O6As!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!O6As!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O6As!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png" width="144" height="144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:200,&quot;resizeWidth&quot;:144,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/36623013?s=200&amp;v=4&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="https://avatars.githubusercontent.com/u/36623013?s=200&amp;v=4" title="https://avatars.githubusercontent.com/u/36623013?s=200&amp;v=4" srcset="https://substackcdn.com/image/fetch/$s_!O6As!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 424w, https://substackcdn.com/image/fetch/$s_!O6As!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 848w, https://substackcdn.com/image/fetch/$s_!O6As!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 1272w, https://substackcdn.com/image/fetch/$s_!O6As!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea77e7f3-4538-4e05-ab4a-30b3c9729b54_200x200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>MarkText is a simple and elegant markdown editor focused on speed and usability.</p><p><strong>language: </strong>JS <strong>stars: </strong>42026 <strong>last commit:</strong> Aug 2023<br><strong>repo:</strong> <a href="https://github.com/marktext/marktext">github.com/marktext/marktext</a><br><strong>site</strong>: <a href="https://www.marktext.cc/">marktext.cc</a></p><h4><strong><a href="https://github.com/localsend/localsend">LocalSend</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZIqN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZIqN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZIqN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png" width="98" height="98" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:98,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;LocalSend Logo&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="LocalSend Logo" title="LocalSend Logo" srcset="https://substackcdn.com/image/fetch/$s_!ZIqN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!ZIqN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e27a46b-5fa5-4084-97d5-41f8fcbd99b4_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>LocalSend is an open source cross-platform alternative to AirDrop.</p><p><strong>language: </strong>Flutter <strong>stars: </strong>21331 <strong>last commit: </strong>2 days <br><strong>repo:</strong> <a href="https://github.com/localsend/localsend">github.com/localsend/localsend</a><br><strong>site:</strong> <a href="https://localsend.org/">localsend.org</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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"><em><strong>Get high quality projects and interviews like these directly in your inbox by subscribing to the free newsletter!</strong></em></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><h3><strong>&#127897;&#65039; Interview with <a href="https://github.com/Tienisto">Tien</a> of <a href="https://github.com/localsend/localsend">LocalSend</a> - An open source cross-platform alternative to AirDrop</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hVKH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hVKH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hVKH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg" width="312" height="312" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:312,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/38380847?v=4&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="https://avatars.githubusercontent.com/u/38380847?v=4" title="https://avatars.githubusercontent.com/u/38380847?v=4" srcset="https://substackcdn.com/image/fetch/$s_!hVKH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hVKH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ea7159c-a7f1-433e-a8de-c5cdf3dedf4f_460x460.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">Tien Do Nam</figcaption></figure></div><p><strong>Hey Tien! Thanks for joining us! Let us start with your background.</strong>&nbsp;</p><blockquote><p>Hi! I was born in Germany and my parents came from Vietnam.</p><p>Java was my first programming language. I found a really good German YouTube tutorial channel, &#8220;<a href="https://www.youtube.com/user/TheMorpheus407">The Morpheus Tutorials</a>,&#8221; and I watched every episode, programming some simple games with Java.</p><p>When I went to university, I learned many more languages. For a long time, Kotlin was my favorite, but eventually, I discovered Flutter. Since then, I&#8217;ve been eager to use Flutter in my first job.</p><p>Luckily, I found an open position at a software company that focuses on developing mobile apps with Flutter. I worked there for two years before deciding to become self-employed. Now, I develop products for clients and work on my own projects as well.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p>To me, Python is overrated. I prefer programming languages that are statically typed. With Python, the code might look simpler, but you lose a lot of information if you don&#8217;t document your code properly. Of course, the same goes for JavaScript.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p>Git and IntelliJ.</p></blockquote><p><strong>What are you currently learning?</strong></p><blockquote><p>I&#8217;m dabbling a bit in Rust.</p></blockquote><p><strong>Why was LocalSend started?</strong></p><blockquote><p>My sisters have different operating systems, and it was quite a challenge to share large numbers of photos and videos without compression from one device to another. We tried some open-source alternatives like Snapdrop, but unfortunately, the service was down at that time.</p><p>I wanted a solution that didn&#8217;t require any third-party service. I played around with <a href="https://pub.dev/packages/shelf">shelf</a> (a Flutter HTTP server package) a bit and realized that it works on all operating systems, including iOS and Android. After three weeks, I released the app on the App Store and Play Store with minimal features, like file selection and sending. The Windows version followed shortly after.</p></blockquote><p><strong>How does LocalSend work?&nbsp;</strong></p><blockquote><p>LocalSend sets up a server on each device, and they discover each other by broadcasting a UDP message. Most importantly, file transmission is just a POST request &#8212; it&#8217;s essentially a file upload.</p></blockquote><p><strong>Why did you pick Flutter?</strong></p><blockquote><p>I like Flutter because it allows you to build cross-platform apps with very little effort. I don&#8217;t think I could have undertaken this project alone if I had chosen another framework.</p></blockquote><p><strong>Are there any projects similar to LocalSend? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p>Snapdrop is quite similar to LocalSend. The main issue with it is that it requires a third-party server. I wanted a solution that is completely independent of external networks.</p></blockquote><p><strong>What was the most surprising thing you learned while working on LocalSend?</strong></p><blockquote><p>Developing apps for Linux is really challenging. Without the contributions from the community, it would have been very difficult to create an app that works across all distributions. Even today, there are some issues that I can&#8217;t fix on my own.</p></blockquote><p><strong>How did the project get popular?</strong></p><blockquote><p>I think a Chinese website featured my app during the New Year. I can&#8217;t speak Mandarin, but I was really interested in how they discussed my app. In the following months, LocalSend gained users organically as more and more people wrote about it on the internet.</p></blockquote><p><strong>Is LocalSend intended to eventually be monetized if it isn&#8217;t monetized already? If so, how?</strong></p><blockquote><p>I don&#8217;t plan to monetize LocalSend. I&#8217;m happy to receive donations, but they&#8217;re just a nice extra.</p></blockquote><p><strong>What are you most proud of?&nbsp;</strong></p><blockquote><p>I&#8217;m proud that LocalSend has garnered so much attention in such a short timeframe! I&#8217;ve even had clients from Germany compliment my GitHub profile because of LocalSend.</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>Usually, I divide my workload into days. For example, I might work on LocalSend for an entire day and then spend the next day working for my clients. Of course, if the workload becomes too much, I have to prioritize my actual job.</p></blockquote><p><strong>What is the best way for a new developer to contribute to LocalSend?</strong></p><blockquote><p>They can open issues on GitHub (especially with concrete reproduction steps), make minor UX improvements, or help translate the app into other languages!</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>I want LocalSend to support Bluetooth and Wi-Fi Direct file sharing, though both features require a deep understanding of low-level technologies.</p><p>Unfortunately, the Flutter ecosystem isn&#8217;t quite ready for that yet, so implementing these features would take a lot of time.</p><p>However, I also plan to provide a CLI version of LocalSend, so you can run a server without a GUI. This feature is more feasible, and I&#8217;ve already made some preparations for v1.12.0, so you can expect a CLI version soon.</p></blockquote><p><strong>What motivates you to continue contributing to LocalSend?</strong></p><blockquote><p>Like many developers, I enjoy seeing people use and appreciate my software. This project has also helped me build a reputation as a skilled developer.</p></blockquote><p><strong>Where do you see open-source heading next?</strong></p><blockquote><p>Open-source software reduces costs for consumers, as more and more open-source projects compete with commercial alternatives. In my opinion, open source offers significant marketing advantages to a project, especially within the IT community. People appreciate it, and so do I.</p></blockquote><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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 Console by CodeSee.io! Subscribe for free to receive the next interview.</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><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #180 - Interview with Niaz of LibrePhotos - self-hosted open source photo management service]]></title><description><![CDATA[Featuring LinkWarden, Free certifications, and LibrePhotos]]></description><link>https://console.substack.com/p/console-180</link><guid isPermaLink="false">https://console.substack.com/p/console-180</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 22 Oct 2023 19:27:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/87852d24-bdf1-4985-9fd5-c79806738e00_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/linkwarden/linkwarden">LinkWarden</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7v75!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7v75!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 424w, https://substackcdn.com/image/fetch/$s_!7v75!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 848w, https://substackcdn.com/image/fetch/$s_!7v75!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 1272w, https://substackcdn.com/image/fetch/$s_!7v75!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7v75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png" width="118" height="118" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc8063af-9121-4496-9e50-449f38b92033_320x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:320,&quot;width&quot;:320,&quot;resizeWidth&quot;:118,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!7v75!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 424w, https://substackcdn.com/image/fetch/$s_!7v75!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 848w, https://substackcdn.com/image/fetch/$s_!7v75!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 1272w, https://substackcdn.com/image/fetch/$s_!7v75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc8063af-9121-4496-9e50-449f38b92033_320x320.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>LinkWarden is a self-hosted, open-source collaborative bookmark manager to collect, organize, and archive webpages.</p><p><strong>language:</strong> TypeScript <strong>stars:</strong> 2835 <strong>last commit:</strong> 2 days<br><strong>repo: </strong><a href="https://github.com/linkwarden/linkwarden">github.com/linkwarden/linkwarden</a><br><strong>site:<a href="https://linkwarden.app/"> </a></strong><a href="https://linkwarden.app/">linkwarden.app</a></p><h4><strong>Free Certifications</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y9zT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y9zT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 424w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 848w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 1272w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y9zT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png" width="273" height="55.29113924050633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:144,&quot;width&quot;:711,&quot;resizeWidth&quot;:273,&quot;bytes&quot;:129469,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!y9zT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 424w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 848w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 1272w, https://substackcdn.com/image/fetch/$s_!y9zT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5e77fce-941c-40d0-a27b-9713a31534c0_711x144.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A curated list of free courses &amp; certifications by the cloud study network.</p><p><strong>stars:</strong> 10391 <strong>last commit:</strong> today <br><strong>repo:</strong> <a href="https://github.com/cloudcommunity/Free-Certifications">github.com/cloudcommunity/Free-Certifications</a></p><h4><strong><a href="https://github.com/LibrePhotos/librephotos">LibrePhotos</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nUAz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nUAz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 424w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 848w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 1272w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nUAz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png" width="250" height="178.57142857142858" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&quot;width&quot;:1456,&quot;resizeWidth&quot;:250,&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_!nUAz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 424w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 848w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 1272w, https://substackcdn.com/image/fetch/$s_!nUAz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c68aef5-5a90-402a-b266-a0cd53ad7d1b_1920x1371.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A self-hosted open source photo management service.</p><p><strong>language:</strong> Python <strong>stars:</strong> 5999 <strong>last commit:</strong> last week<br><strong>repo:</strong> <a href="https://github.com/LibrePhotos/librephotos">github.com/LibrePhotos/librephotos</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Get high quality projects and interviews like these directly in your inbox by subscribing for free!</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><h3><strong>&#127897;&#65039; Interview With Niaz of <a href="https://github.com/LibrePhotos/librephotos">LibrePhotos</a>: self-hosted open source photo management service</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DKU7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DKU7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DKU7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg" width="212" height="212" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:460,&quot;resizeWidth&quot;:212,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://avatars.githubusercontent.com/u/6658807?v=4&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="https://avatars.githubusercontent.com/u/6658807?v=4" title="https://avatars.githubusercontent.com/u/6658807?v=4" srcset="https://substackcdn.com/image/fetch/$s_!DKU7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DKU7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F515c3eaa-ad71-4cce-b086-6c434f0bf8a6_460x460.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Niaz Faridani-Rad</figcaption></figure></div><p><strong>Hey Niaz! Thanks for joining us! Let us start with your background.</strong></p><blockquote><p>Hello! Thank you for this interview. Let me tell you a bit about myself.</p><p>I was born in Germany, and I've primarily worked at the "Amt f&#252;r Statistik Berlin-Brandenburg" (Office for Statistics Berlin-Brandenburg) throughout my career. We are a german government entity and create all the statistics about Berlin, and it&#8217;s surrounding areas. At the moment, I'm actively involved in maintaining their website, which you can find at <a href="https://www.statistik-berlin-brandenburg.de/">statistik-berlin-brandenburg.de</a>.</p><p>My journey into the world of programming began when I was quite young. As a kid, I was obsessed by the game "Age of Empires 2", which sparked in becoming a game developer.</p><p>Since then, I pretty much knew I wanted to learn to program, so I picked a high school which offered me the opportunity to do so.</p><p>I continued to learn programming by pursuing a formal education in computer science. I did a bachelor's degree in computer science at university, and am currently in the process of completing my master's thesis with the title &#8221;Image Captioning in Personal Photo Management: A Comparative Study of Different Techniques&#8221; in the field of media and computer science.</p></blockquote><p><strong>Who or what are your biggest influences as a developer?</strong></p><blockquote><p>At this point, one of my most significant influences is Andreas Kling, the maintainer of Serenity OS. I find his approach to development truly inspiring. What stands out to me is his belief in the idea that "you can develop everything yourself." This perspective has had a profound impact on how I view technical complexity in software development.</p><p>For example, many people believe that it is impossible to write a browser from scratch. The Serenity OS project did it anyway, and the hand-made browser Ladybird is just very impressive and already supports a ton of websites.</p></blockquote><p><strong>Why was LibrePhotos started?</strong></p><blockquote><p>The inception of LibrePhotos is an interesting story that came about somewhat unexpectedly. It all began when I faced a challenging experience &#8211; a rejection from a job interview. To provide some background, I had applied for a TypeScript backend role after having already been a Java developer for two years. I had no prior experience in TypeScript at that point, but I had a referral at that company who encouraged me to apply anyway.</p><p>After successfully completing the technical interview, I then got rejected after I talked to the product manager. What made this rejection stand out was not the typical "not a good fit" reason, but rather that I was considered "too junior" for the role.</p><p>In response to this situation, I decided to channel my energy and anger into something constructive. I took a chance and decided to dive into working with <a href="https://github.com/hooram/ownphotos">Ownphotos</a>, the precursor of LibrePhotos, with the intention of fixing a small bug to show to myself that I am by no means a developer who is too junior to dive into a complex codebase.&nbsp;</p><p>As I made progress and successfully fixed the bug, I shared my achievement with the Ownphotos community on Discord. To my surprise, my contribution and enthusiasm sparked a wave of excitement within the Ownphotos community. People were genuinely excited about the work I was doing. This outpouring of support and enthusiasm from the community ultimately led to the birth of LibrePhotos. Since the fork, we added way more features than the original project and have built a community around it.</p><p>So, in a way, LibrePhotos was born out of a desire to turn a setback into an opportunity and a small bug fix into a community-driven project.</p></blockquote><p><strong>How does LibrePhotos work?&nbsp;</strong></p><blockquote><p>Here's a behind-the-scenes technical overview:</p><p>The web frontend of LibrePhotos is written in React in combination with Redux Toolkit, and we leverage <a href="https://mantine.dev/">Mantine</a> as a component library.&nbsp;</p><p>There is a proof of concept app written in React Native and at some point we want to share the state management between the app and the web frontend.</p><p>Both frontends communicate over a REST API, with the backend.</p><p>The REST API also enable third party app developers to create their own apps. For example, UhuruPhotos, which is a native android application.</p><p>The core of LibrePhotos, the backend, is built using Python and leverages the Django web framework. We use it in combination with the Django Rest Framework (DRF) to create RESTful APIs.</p><p>PyTorch, a deep learning framework, plays a significant role in LibrePhotos for various machine learning tasks.&nbsp;</p><p>For background job processing, LibrePhotos relies on Django Q2. This library provides a framework for handling asynchronous tasks.</p></blockquote><p><strong>How does LibrePhotos handle face recognition and other AI tasks? </strong>D<strong>oes it do it locally?</strong></p><blockquote><p>It's all done locally, which means all the models and infrastructure are shipped too. It's a tricky thing to do as we have a wide variety of users. On the one hand, we have people on low-end devices with no computer science background, and on the other hand, there are Sys Admins running actual servers with Kubernetes. The one side complains about processing speed and the other side wants more accuracy and scaling options. We usually pick a default configuration, which works on most systems, while we hide more advanced options in the settings. As I will examine different image captioning models for my master thesis, I will implement a more modular architecture for shipping the models, which should help with that problem. The user can then choose the best model for their system, including quantized models for the very low end and state-of-the-art models for the high end.</p></blockquote><p><strong>Are there any overarching goals of LibrePhotos that drive design or implementation? If so, what trade-offs have been made in LibrePhotos as a consequence of these goals?</strong></p><blockquote><p>We are trying to solve to answer the w4 questions (what, where, when and who) for each image automatically or semiautomatically, as this is how people interact with a photo library.</p><p>For example, we have reverse geocoding, which turns coordinates into places you can search for, object detectors to find out what's in the image, semantic image search which helps you find phrases which match images, face clustering to find out who is in the image and a pretty complex engine to determine the correct timestamp.&nbsp;</p><p>We have a clear preference to implement an automated system first, which leads to a not so great experience if you prefer manual editing of metadata.</p></blockquote><p><strong>Are there any projects similar to LibrePhotos? If so, what were they lacking that made you consider building something new?&nbsp;</strong></p><blockquote><p>A lot of people have the idea that LibrePhotos is something new, but actually if you take into account that it is a fork of Ownphotos, we are the oldest one. Ownphotos was started in 2017 and Photoprism for example was started in 2018.</p><p>The biggest difference between us and Photoprism is, that our scope is bigger. We want to handle uploading / backing up images, and we want to ship apps in the future.&nbsp;</p><p>Immich is also a great option, but it does run a pretty complicated architecture and&nbsp; prefers importing into its own file structure over scanning existing galleries.</p></blockquote><p><strong>What was the most surprising thing you learned while working on LibrePhotos?</strong></p><blockquote><p>Before taking over as the maintainer, I only had development experience. Managing an open source project on the other hand needs a more diverse skill set. I am still learning how to do that.</p><p>It broadened my understanding why companies rely so much on telemetry these days. It was very surprising to me that power users who want new features are way more vocal than users who want less bugs. Also, users that donate money or pay money are usually in the later part, which makes estimating the impact of a feature vs a bug fix complicated.</p></blockquote><p><strong>What do you think about the state of self-hosting?</strong></p><blockquote><p>It is definitely growing a lot, but the biggest issue is still sustainability. While there is now a new model for open source called commercial open source software, it&#8217;s not yet clear how it will play out.&nbsp;</p><p>VCs have figured out, that acquiring users by open sourcing the core product to compete with existing SaaS offerings can work out great. This leads to way more funding, which leads to more software, which is self-hostable. The goal at the moment is not revenue or profitability, which means in the short term we will have a lot of great software which is free and open source.&nbsp;</p><p>After a couple of years, however, these solutions will get monetized to justify the investments, which will put features behind paywalls, closing the source code or changing the license.</p></blockquote><p><strong>How popular is LibrePhotos?&nbsp;</strong></p><blockquote><p>We do not track anything, but Docker, Discord and GitHub do. We have 2.3 million docker pulls, ~1600 members on discord and ~6000 GitHub stars.</p></blockquote><p><strong>Is LibrePhotos intended to eventually be monetized? If so, how?</strong></p><blockquote><p>We will continue to only monetize by donations. I haven&#8217;t found a good way to monetize it in another way yet. SaaS does not make sense as this is pretty much the same business model as the big players and managed hosting does not seem to be that popular in the consumer space.</p><p>I applied for a grant from the <a href="https://prototypefund.de/en/">Prototype fund</a> in Germany, which would provide me with half a year of funding, but I did not get selected yet. Maybe research is another option, but I haven't found a concrete way to do this.</p><p>There is also not that much money in the space. The most monetized FOSS solution Photoprism and my estimation is that they make around 5k&#8364; a month. Donations in FOSS also seem to be a winner takes all phenomenon, which means smaller project get exponentially less.&nbsp;</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p>I am very proud that LibrePhotos made it into an <a href="https://arstechnica.com/gadgets/2021/06/the-big-alternatives-to-google-photos-showdown/">Ars Technica article</a> and that this project was in a <a href="https://news.ycombinator.com/item?id=25588712">popular Hacker News post</a>. The only thing that is missing is a high ranking place on ProductHunt, and then I have all the essential nerd bragging rights haha</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p>My job is pretty chill, so it&#8217;s easy to do some work in my free time. My studies however need more alignment. I usually pick courses where I can continue to work on LibrePhotos. Uploading and adding backing up images in the proof of concept was for example work I did for a course and my master thesis right now is about improving the automatic image captioning capabilities of LibrePhotos.</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p>Yes, for a while I had the ambition to do this full time after my studies. However, last year it became clear to me, that this is not an option based on the current trajectory.</p><p>I took a break for a bit, while I recalibrated how I align myself better with the project. Doing this as part of my studies was part of the solution, but I also switched to a more relaxed release schedule, gave myself more permission to not respond immediately to issues or pull request and scaled down the amount of public relation work I did.</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p>There will be a new and novel way to do automatic image captioning in LibrePhotos. I will probably combine Blip with LLAMA 2 and see how many use cases it can cover and what will be possible with it. It's kind of experimental, but I am excited where this will lead.&nbsp; This is all part of my master thesis, which means I will definitely do it, I even got a deadline when I have to hand it in and everything.</p><p>Otherwise, I will merge the pull requests contributors submit. If you want something added to LibrePhotos, you can anytime open one up. I am pretty open about new features and am not too strict about it as long as it improves the core product.</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p>To me, it looks like the stack changes less often than it did in the past. We now have a lot of well established open source languages and frameworks. This means we will find less new ways of doing things and will focus more on more performant solutions and an ecosystem, where you can do everything in the language you like. Good examples of this are JavaScript and Python.</p><p>While LLMs seem to be helpful when coding, they still need a lot of human supervision. Programmers will get a bit more productive, but it will not be anything game-changing.</p></blockquote><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Liked this interview? Subscribe to Console to receive the next one in your inbox!</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><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #179 - Interview with Kevin and David of Valhalla - Open source routing engine for OSM]]></title><description><![CDATA[Featuring Leantime, IGL, and Valhalla]]></description><link>https://console.substack.com/p/console-179</link><guid isPermaLink="false">https://console.substack.com/p/console-179</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 15 Oct 2023 17:39:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1d2440ce-fdf0-4ca5-9dd4-17f3c26a7c08_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor - <a href="https://newsletter.posthog.com/">Product for Engineers</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FIyP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FIyP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 424w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 848w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 1272w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FIyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png" width="1456" height="291" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:291,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:311680,&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_!FIyP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 424w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 848w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 1272w, https://substackcdn.com/image/fetch/$s_!FIyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80935602-23f9-4627-b932-8e1552ddf3a3_2000x400.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><a href="https://newsletter.posthog.com/">Product for Engineers</a>&nbsp;is PostHog&#8217;s newsletter dedicated to helping engineers improve their product skills.&nbsp;<a href="https://newsletter.posthog.com">Subscribe for free</a>&nbsp;to get curated advice on building great products, lessons (and mistakes) from building PostHog, deep dives on top startups, and&nbsp;<em>very</em>&nbsp;cute hedgehog illustrations.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/&quot;,&quot;text&quot;:&quot;Subscribe for Free&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.posthog.com/"><span>Subscribe for Free</span></a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/Leantime/leantime">Leantime</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GSfZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GSfZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 424w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 848w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 1272w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GSfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp" width="194" height="52.097527472527474" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:391,&quot;width&quot;:1456,&quot;resizeWidth&quot;:194,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Leantime Logo&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Leantime Logo" title="Leantime Logo" srcset="https://substackcdn.com/image/fetch/$s_!GSfZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 424w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 848w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 1272w, https://substackcdn.com/image/fetch/$s_!GSfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e59c86f-d01f-4757-84f9-e80f80770f30_1500x403.webp 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Leantime is a strategic project management system for non-project managers. </p><p><strong>language:</strong> PHP <strong>stars:</strong> 3147 <strong>last commit: </strong>today<br><strong>repo:</strong> <a href="https://github.com/Leantime/leantime">github.com/Leantime/leantime</a><br><strong>site: </strong><a href="https://leantime.io/">leantime.io</a></p><h4><strong><a href="https://github.com/facebook/igl">Intermediate Graphics Library</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2mBV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2mBV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 424w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 848w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 1272w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2mBV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg" width="198" height="89.48076923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:1456,&quot;resizeWidth&quot;:198,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;IGL Logo&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="IGL Logo" title="IGL Logo" srcset="https://substackcdn.com/image/fetch/$s_!2mBV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 424w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 848w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 1272w, https://substackcdn.com/image/fetch/$s_!2mBV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F331c2932-b580-4072-ae88-2fa8dd53a43f_500x226.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A cross-platform library that commands the GPU. It encapsulates common GPU functionality with a low-level cross-platform interface. IGL is designed to support multiple backends implemented on top of graphics APIs like OpenGL and Vulkan with a common interface.</p><p><strong>language: </strong>C++<strong> stars:</strong> 2527 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/facebook/igl">github.com/facebook/igl</a><br><strong>site: </strong><a href="https://facebook.github.io/igl/">facebook.github.io/igl</a></p><h4><strong><a href="https://github.com/valhalla/valhalla">Valhalla</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D7fX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D7fX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 424w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 848w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 1272w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D7fX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png" width="277" height="95.73732718894009" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:225,&quot;width&quot;:651,&quot;resizeWidth&quot;:277,&quot;bytes&quot;:45041,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!D7fX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 424w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 848w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 1272w, https://substackcdn.com/image/fetch/$s_!D7fX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cedd92f-d71d-436e-a31a-521b89632b10_651x225.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Valhalla is an open source routing engine and accompanying libraries for use with OpenStreetMap data. It also includes tools like time+distance matrix computation, isochrones, elevation sampling, map matching and tour optimization.</p><p><strong>language:</strong> C++ <strong>stars:</strong> 3791 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/valhalla/valhalla">github.com/valhalla/valhalla</a><br><strong>site:</strong> <a href="https://valhalla.github.io/valhalla/">valhalla.github.io/valhalla</a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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"><em>Console is a free newsletter about open source software, bringing you high quality projects and interviews with maintainers every week.</em></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><h3><strong>&#127897;&#65039; Interview With <a href="https://github.com/kevinkreiser">Kevin</a> and <a href="https://github.com/dnesbitt61">David</a> of Valhalla - Open source routing engine for OSM</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!imkP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!imkP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 424w, https://substackcdn.com/image/fetch/$s_!imkP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 848w, https://substackcdn.com/image/fetch/$s_!imkP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!imkP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!imkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png" width="562" height="281.385989010989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:729,&quot;width&quot;:1456,&quot;resizeWidth&quot;:562,&quot;bytes&quot;:2414809,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!imkP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 424w, https://substackcdn.com/image/fetch/$s_!imkP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 848w, https://substackcdn.com/image/fetch/$s_!imkP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!imkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9498ccd9-ee82-44ec-af44-a5cdf34883cf_2560x1282.png 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">Kevin Kreiser and David Nesbitt</figcaption></figure></div><p><strong>Hey Kevin and David! Thanks for joining us! Let us start with your backgrounds</strong></p><blockquote><p><strong>Kevin: </strong>I&#8217;m from a tiny village called East Hanover in Pennsylvania. I got interested in programming and started learning it seriously in 2000 when I was in 11th grade thanks to a teacher who happened to also be a graduate professor at Penn State. Fresh out of a comp-sci undergrad program at Millersville, I started out in graphics programming building &#8220;video games for surgeons&#8221;. From there I went into a PhD program at the University of Delaware but dropped out of that to join Dave at MapQuest. Since then I&#8217;ve been working on mapping as a sub-genre of comp-sci ever since. Over the years I&#8217;ve worked at Mapzen (where we created Valhalla), Mapbox and now at Snapchat. C++ was my first language, has been my primary language throughout my (15 year) career and is still my favorite language by far though I like to use python and bash when the situation calls for it.</p><p><strong>David:</strong> I am from Lancaster, Pennsylvania and now live near Port Deposit, Maryland. I&#8217;ve been in the software industry for over 40 years. I started at The Johns Hopkins University Applied Physics Laboratory doing mapping and computer graphics work while developing prototype naval command and control systems for nearly 18 years. I also taught Computer Graphics for the Johns Hopkins University Engineering for Professionals masters program for over 20 years. I spent nearly 15 years at MapQuest leading development of their driving directions software. I then moved to Mapzen, which is where we started Valhalla, and then to Mapbox (which uses Valhalla). I now work at Hammerhead Navigation (part of SRAM), developing mapping and navigation systems for bicycle head units - also using Valhalla.</p><p>I have worked with C++ for most of my career, and it is by far my favorite development language. Python is quite useful as well.</p></blockquote><p><strong>What happened to the video games for surgeons?</strong></p><blockquote><p><strong>Kevin:</strong> It was a start-up called verify technologies. It was mildly successful in the US for a while, but eventually wasn't able to compete with other US companies that not only had the software but also had hardware patents on the bits you needed for simulating the instruments the surgical residents used to train with.</p></blockquote><p><strong>What&#8217;s your most controversial programming opinion?</strong></p><blockquote><p><strong>Kevin:</strong> node.js is a psyop</p><p><strong>David:</strong> I&#8217;m not sure it is controversial, but event driven software is difficult for me. No matter how hard I try, RxJava just baffles me. There must be better ways!</p><p>I also have never been a fan of XML and JSON as data transfer mechanisms. In Valhalla, we use protocol buffers, which are much more efficient.</p></blockquote><p><strong>What is your favorite software tool?</strong></p><blockquote><p><strong>Kevin:</strong> I&#8217;ve been really liking CLion and really all the JetBrains tools lately regarding software development.</p><p><strong>David:</strong> I&#8217;ve been doing Android programming lately and appreciate Android Studio. However, I&#8217;m old school though and still mostly use vi for C++ development, with occasional use of Visual C++. Maybe it is time to try CLion.</p></blockquote><p><strong>Why was Valhalla started?&nbsp;</strong></p><blockquote><p><strong>Kevin: </strong>Mapping solutions generally need to provide three separate but interconnected high-level bits of functionality. Those are: Search, Display and Routing. Valhalla was meant to solve the latter at an open source mapping API start-up called Mapzen which was run out of the Samsung Accelerator program (a start-up incubator). At the time the open source routing engine scene was still fairly young which allowed us (the team that conceived of Valhalla) the opportunity to build one from scratch by focusing on a few novel primary features not seen in competitors.</p><p><strong>David:</strong>&nbsp; When Valhalla was started, there were many routing solutions handling driving routes pretty well. However, other modes of transportation were second class citizens. Bicycles, pedestrian, motor scooters, and mulit-modal routing didn&#8217;t have the support and quality as automobile routing.</p></blockquote><p><strong>How does Valhalla work?</strong></p><blockquote><p><strong>Kevin: </strong>This is quite a difficult question to answer simply because of the scope of the project but I&#8217;ll give it a try. Valhalla may likely be best understood by some of its design goals/philosophies coupled with a description of some of its components. Valhalla is a C++ library which provides a number of APIs centered around the key problem of routing, directions and wayfinding. The library is accessible via python bindings, an HTTP api or by calling the C++ library directly. The library is divided into several core bits of functionality:</p><p>Data-processing - to turn OSM data into a compacted and normalized graph</p><p>Routing - finding a path through the graph at run time</p><p>Directions - annotating that path with maneuvers and natural language descriptions of how to follow the path</p><p>The data processing is done offline and consists of pulling in OSM-formatted data, elevation, transit, historical traffic patterns or other data sources and building a graph that we can route on. Routing and directions are performed at request time.</p><p>Design-wise, Valhalla uses a tiled hierarchical data structure to store the graph. Each tile adheres to a custom binary format that requires (almost) no parsing. This allows Valhalla to memory-map the data and do a little bit of pointer arithmetic to facilitate graph searches. Tiles also lend themselves well to smaller footprint devices like cell phones.</p><p>Once a path is found it is annotated with maneuvers and text descriptions and the route itself is serialized to JSON (or protocol buffers) for the client/caller to consume in their application.</p><p>There are lots of different APIs apart from the typical A to B &#8220;shortest path&#8221; algorithm. Additionally, Valhalla supports real-time traffic conditions, adheres to time of day restrictions and allows for a large variety of customization of the &#8220;type&#8221; of route at request time.</p><p><strong>David: </strong>I will add to what Kevin states above. While Valhalla does not directly support navigation along a prescribed path (generated from Valhalla&#8217;s routing methods), the information from Valhalla readily supports navigation and guidance. Valhalla&#8217;s maneuver generation (calling out where turns require guidance to the user) and directions are first class. Also, many commercial mapping data sources focus on driving. OSM (until recently) has had much better support for pedestrian and bicycling than commercial sources, and Valhalla enhances the ability to route and navigate for these travel modes.</p></blockquote><p><strong>How does Valhalla support real-time traffic conditions and adhere to time of day restrictions?</strong></p><blockquote><p><strong>Kevin:</strong> The algorithms support tiled real-time data sources that, if present on the machine where the services are running, will be used to influence the computed route. We do this by creating a tar file which has real time tiles in it, initially blank. Then it is the system integrators job to write a process that updates the tar file on the fly. The routing process has this tar memory mapped, and the "sidecar" process also memory maps this same tar for writing updates.</p><p>We leave the process of getting those updates from whatever traffic data provider up to the person administrating the service. Since there are infinite ways the data could look or be delivered, it's best not to have too much of an opinionated stance there and let that up to individuals and their specific project needs.</p></blockquote><p><strong>Who, or what, was the biggest inspiration for Valhalla?</strong></p><blockquote><p><strong>Kevin: </strong>I had been working at MapQuest with Dave and the rest of the Valhalla team for around 6 years. For the first 2 years I worked on the routing side of the maps API equation, but for the remaining 4 years I had been the lead developer on the display side creating visual map tiles that the end user would see. Unfortunately, MapQuest decided it wanted to relocate its primary development office out of Lancaster, Pennsylvania (where it was founded) and focus more on its office in Denver, Colorado. At that time Mapzen was looking to expand its offerings to include routing so we decided to join and become the team supporting that effort.</p><p>Divide and conquer is an old idea. If you can break a problem into many smaller easier to solve problems, and solve them individually, then getting the full solution is only a matter of scale. Not surprisingly, mapping, especially the display part of the problem, exploits this design paradigm. Specifically, we break the visual map into tiles and send those to the client/caller who wants to display them. In this way they can decide on how much of the map they want to see to some level of granularity, they can decide on the level of parallelism they want to use in fetching the tiles, and they can use the tiling (since its a uniform grid) as a cache key to avoid having to always fetch data if its data they had fetched before.</p><p>I suggested to Dave that when we join Mapzen we should consider tiling the graph; meaning we would chop the graph into a uniformly gridded (spatially) set of data blobs. He and I then briefly talked about how such a data structure could exist and maintain a proper topology. Mapzen was an open source company so we knew it would be open. Dave&#8217;s experience in routing made it clear that there had to be some degree of hierarchy in the graph structure (for performance reasons). This is when Dave said to me &#8220;We should call it T.H.O.R.: tiled hierarchical open-source routing&#8221;. To which I said, &#8220;there&#8217;s going to be a lot more components, we should call it Valhalla and each piece can be one of the Norse mythological figures&#8221;.</p><p><strong>David: </strong>THOR was just one of the components of Valhalla - there are other code directories (not really libraries, rather groupings of code under the Valhalla umbrella) that we named with the Norse theme. Valhalla ties it together under a single repository. Kevin answered this quite thoroughly. Kevin&#8217;s idea of tiling the routing graph is a crucial part of Valhalla. It is a key differentiator and one that allows Valhalla to be successfully used in mobile environments.</p></blockquote><p><strong>Are there any overarching goals of Valhalla that drive design or implementation? If so, what trade-offs have been made in Valhalla as a consequence of these goals?</strong></p><blockquote><p><strong>Kevin:</strong> There are several &#8220;requirements&#8221; that we adhere to as far as design/implementation goes:</p><ul><li><p>It should run on very modest hardware (Raspberry Pi, old android phones) with very modest resources</p></li><li><p>The graph should contain general attribution so that at request time we can customize what makes the &#8220;shortest path&#8221; by weighting the graph attributes differently depending on request parameters</p></li><li><p>The router should work with an incomplete graph (if you are missing tiles the router will still route)</p></li><li><p>Data will remain backward and forward compatible within the same major version</p></li></ul><p>The primary trade-offs we&#8217;ve hit so far are not being able to change around the graph data structure so that we don&#8217;t break data compatibility. We also trade run-time performance for the sake of request-time customizability.</p><p><strong>David:</strong> The idea of tiling the routing graph has been key to allowing Valhalla&#8217;s use in mobile navigation applications. At Hammerhead, we have successfully used Valhalla for bicycle routing and navigation on custom Android hardware with modest processing power, memory, and storage.</p></blockquote><p><strong>What is the most challenging problem that&#8217;s been solved in Valhalla, so far?&nbsp;</strong></p><blockquote><p><strong>Kevin:</strong> It&#8217;s a very imprecise answer, but the final composition of all the parts that make the final user-facing API is the most significant problem that the software solves. There is incredible complexity in tying all the pieces together in a coherent and usable way I&#8217;ve already mentioned some, but there are a lot of discrete pieces:</p><ul><li><p>The offline ETLs (there are at least 5 different data sources we combine)</p></li><li><p>Online ETLs for real-time traffic conditions and incidents</p></li><li><p>The system for customizing the path finding to match the users request-time preferences</p></li><li><p>Supporting like 8 modes of travel on a single dataset</p></li><li><p>The spatial indexing system so we can find candidate edges in the graph given input coordinates</p></li><li><p>The 8 different graph traversal algorithms that accomplish different tasks on the network</p></li><li><p>The maneuver generation and system for localization the narrative that go with a given maneuver</p></li><li><p>Different serializers depending on which of the 8 different APIs you called</p></li><li><p>The operational design and componentry that ensures request isolation for maximal server stability</p></li></ul><p><strong>David:</strong> I&#8217;m not sure if it is truly solved, but developing a solution for isochrones was challenging and interesting. Isochrones allow a visual representation of where one can travel within specific time increments.</p></blockquote><p><strong>Are there any projects similar to Valhalla? If so, what were they lacking that made you consider building something new?</strong></p><blockquote><p><strong>David: </strong>The closest I can think of are <a href="https://github.com/Project-OSRM/osrm-backend">OSRM</a> (Open Source Routing Machine) and <a href="https://github.com/graphhopper/graphhopper">GraphHopper</a>. </p><p>OSRM is open source and very fast/efficient for solving many routing problems. However, it is not readily usable on low-end systems and mobile devices. Also, it is not very flexible - if you want to adjust costing (which is key to determining the lowest cost path) you have to regenerate the data. So it trades off customization and flexibility for high performance.</p><p>I&#8217;m not sure how much of GraphHopper is open source. It was somewhat mature when we started Valhalla. It is written in Java and has some customization as well as more performant options similar to OSRM. The main drawback compared to Valhalla is that it isn&#8217;t tailored to mobile environments. I think they supported an Android build at one time, but later they dropped support.</p></blockquote><p><strong>What was the most surprising thing you learned while working on Valhalla?</strong></p><blockquote><p><strong>Kevin:</strong> Memory-mapping is one of the most useful tools that kernel designers ever thought of and I thank them every day for it. It allows you to do amazing things on very modest hardware. If you&#8217;ve not played with it, you should give it a try and spend a day learning about it.</p><p><strong>David: </strong>I agree with Kevin on this one, though I learned about memory mapping a long time ago. I have successfully used memory mapping across many projects and organizations, starting with memory mapping with Unix workstations in the early 1990s. Being able to efficiently access data from files without copying to local structures or classes is such an advantage over other approaches.&nbsp; In Valhalla, we structure the routing graph in such a way that when computing routes we can use pointers to memory mapped locations and cast them to structures (or classes) that we can immediately access in code. This is quite efficient!</p></blockquote><p><strong>Where is Valhalla currently being used?</strong></p><blockquote><p><strong>Kevin:</strong></p><ul><li><p>Tesla client/server-side navigation</p></li><li><p>Mapbox (and its automotive customers like BMW)</p></li><li><p>Mapillary (acquired by Facebook/Meta)</p></li><li><p>Many many start-ups that want to focus on their core competency rather than build their own router</p></li></ul><p><strong>David: </strong>I will add that Valhalla has been used in several bicycle navigation computers (small devices mounted near the handlebars). The company I work for uses Valhalla. I also believe that Wahoo does as well (they did several years ago).</p></blockquote><p><strong>Does Valhalla get support from companies that are using it? </strong></p><blockquote><p><strong>Kevin:</strong> Yep, a number of the contributors use Valhalla in their day jobs, which leads to contributions here and there, both large and small.</p><p><strong>David: </strong>If you count the occasional code contribution back to Valhalla, then I would say yes.</p></blockquote><p><strong>Is Valhalla intended to eventually be monetized?</strong></p><blockquote><p><strong>Kevin: </strong>No. Valhalla is technically part of the Linux Foundation. This allows us to seek funding for its development using Linux Foundation procedural guidance but thus far we haven&#8217;t needed to take advantage of that. Other private companies do monetize Valhalla as part of their own API offerings or as part of their primary product as a feature to paying customers, but the open source project is maintained by its founders, and we have never had plans to monetize it. I, for one, would oppose such an idea.</p><p><strong>David:</strong> No.</p></blockquote><p><strong>What are you most proud of?</strong></p><blockquote><p><strong>Kevin:</strong> I took great pride in working with the Tesla engineers to integrate Valhalla into their in-car navigation system, as well as with the BMW engineers on their integration as well. The automotive industry is an incredibly interesting and highly competitive space, and I&#8217;m proud that Valhalla could serve those use-cases.</p><p><strong>David:</strong> Automobile navigation is an exciting (though highly competitive) industry, and I take pride seeing its use in this industry. However, as a long time cyclist, I really enjoy seeing my work with Valhalla used in this space.</p></blockquote><p><strong>How do you balance your work on open-source with your day job and other responsibilities?</strong></p><blockquote><p><strong>Kevin:</strong> Over time, I&#8217;ve evolved primarily into a mentorship role. This means I do code review, design and Q and A on other folks who are cutting their teeth on the code-base. From time to time, I will jump in and implement something if the scope is manageable time-wise. I have a big family (6 kids) and so I&#8217;m primarily only able to contribute in the mornings, nights and weekends as most of the rest of my time is dominated by my day job and my family&#8217;s needs.</p><p><strong>David:</strong> I leave most of the Valhalla open source work to Kevin and others, only occasionally responding to questions and issues.&nbsp;</p></blockquote><p><strong>Have you ever experienced burnout? How did you deal with it?</strong></p><blockquote><p><strong>Kevin:</strong> Yes. When you work for a company that primarily sells access to APIs and you are successful, you will end up inevitably courting many different companies with different needs all at once. The trick to navigating that is finding ways to kill 2 birds (requested features) with one stone (implementation/developer time) but often we are talking about killing 2 birds, a zebra, maybe an elk and a whale and it's just not possible to find a way to meet all their needs without dedicating separate efforts.</p><p>The only way to deal with it is to prioritize the various animals you&#8217;re hunting (is the metaphor still working?), assign developer resources starting at the top of the priority list and take some estimates. You&#8217;ll then need to negotiate on timelines with each animal individually and see what you need to juggle around. The problem is over constrained so at the end of the day you have to be ok with failing to bag some of your wild game.</p><p><strong>David:</strong> I can&#8217;t think of any times I felt truly burnt out in my career. I moved to part-time employment this year after 41 years of full time work as a software engineer. I guess that is one way to alleviate burnout!</p></blockquote><p><strong>Where do you see the project heading next?</strong></p><blockquote><p><strong>Kevin:</strong> Every day, a new person posts an issue asking about: can it do X thing? The answer can sometimes be &#8220;no and it likely will never do,&#8221; but more often than not the answer is &#8220;interesting, we could do it like this, is that what you are thinking, cool to make it happen I would suggest&#8230;&#8221;</p><p><strong>David:</strong> I could see Valhalla adding support for navigation and guidance, so it can be more easily used in mobile solutions. For now, navigation support is left to the developers who integrate Valhalla into their project.</p></blockquote><p><strong>Are there any other projects besides Valhalla that you&#8217;re working on?</strong></p><blockquote><p><strong>Kevin:</strong> There is a library called <a href="https://github.com/kevinkreiser/prime_server">prime_server</a> which Valhalla uses for its operational concerns. It's the thing that we wrap the library with to handle request-flow through the different pieces of the library in an operationally sound way. The API is very stable, but here and there we find issues, patch them, and upgrade Valhalla to take advantage of them.</p><p><strong>David:</strong> No.</p></blockquote><p><strong>Where do you see software development heading next?</strong></p><blockquote><p><strong>Kevin:</strong> Is this my cue to jump onto the AI bandwagon? Call me a skeptic or maybe a romantic but I truly hope that AI does not become a primary tool engineers make use of in the near future. At least not in the way that the evangelists would like us to believe, i.e. the AI writes your code for you after you rattle off a few natural language commands to it.</p><p>Don&#8217;t get me wrong, it could be great for a bit of task management or menial work. For example, in Star Trek the captain would say things like: &#8220;Computer, how many life forms are on that Borg Cube?&#8221; I could see a reasonable integration in an IDE where the AI does analytics on a code-base to help inform the engineer rather than to do the engineer's work for him. The engineer could say something like: &#8220;Find me instances of that object which never call their ::Foo method&#8221;.</p><p>I remember when people thought map-reduce was going to change the world, or when they thought machine learning was going to change the world. And to a degree they did; they became tools we use to solve problems. With AI, it could be another generic tool but the generative bits, I&#8217;m skeptical that they could be used for anything other than trivial tasks. The purpose of the AI is to take what it&#8217;s seen, identify patterns, and, in some form, regurgitate those that match the user&#8217;s intent or combination of intents. While combinations could be somewhat novel the components will not truly be. I don&#8217;t really want to think that engineering, which essentially requires a person to invent new things, will be boiled down to whatever things engineers of the past did as understood by an AI that was trained on them. I would prefer engineering to remain a discipline where the potential for truly novel ideas continues to exist.</p><p><strong>David: </strong>I don&#8217;t think about this much. I remember in the 1990s when virtual reality was the next big thing. Then the hype died down and virtual reality found its uses (though not for everything the hype predicted). Same thing seems to happen every few years.</p></blockquote><div><hr></div><p><em>Liked this interview? Subscribe to the free newsletter to receive the next one in your inbox! </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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://console.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>Interested in sponsoring the newsletter, or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #178 - Top open source projects of this week ⚡]]></title><description><![CDATA[Featuring AI, cloud, and GNOME projects]]></description><link>https://console.substack.com/p/console-178</link><guid isPermaLink="false">https://console.substack.com/p/console-178</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 08 Oct 2023 17:15:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cedace6c-bbe7-4d96-9eca-b034d89fbe59_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/clickvote/clickvote">Clickvote</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C7ZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C7ZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 424w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 848w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 1272w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C7ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png" width="190" height="62.61363636363637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:145,&quot;width&quot;:440,&quot;resizeWidth&quot;:190,&quot;bytes&quot;:56713,&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_!C7ZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 424w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 848w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 1272w, https://substackcdn.com/image/fetch/$s_!C7ZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0021f7d-cf2c-4535-b8cc-5de60d7c2ab1_440x145.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Add upvotes, likes, and reviews to any context.</p><p><strong>language:</strong> TypeScript <strong>stars:</strong> 1281 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/clickvote/clickvote">github.com/clickvote/clickvote</a><br><strong>site: </strong><a href="https://clickvote.dev/">clickvote.dev</a></p><h4><strong>gpt-pilot</strong></h4><p>gpt-pilot is a dev tool that writes scalable apps from scratch while the developer oversees the implementation </p><p><strong>language: Python stars:</strong> 5929 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/Pythagora-io/gpt-pilot">github.com/Pythagora-io/gpt-pilot</a></p><h4><strong><a href="https://github.com/kestra-io/kestra">Kestra</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M96v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M96v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 424w, https://substackcdn.com/image/fetch/$s_!M96v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 848w, https://substackcdn.com/image/fetch/$s_!M96v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 1272w, https://substackcdn.com/image/fetch/$s_!M96v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M96v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png" width="246" height="63.82954545454545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:137,&quot;width&quot;:528,&quot;resizeWidth&quot;:246,&quot;bytes&quot;:52949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!M96v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 424w, https://substackcdn.com/image/fetch/$s_!M96v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 848w, https://substackcdn.com/image/fetch/$s_!M96v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 1272w, https://substackcdn.com/image/fetch/$s_!M96v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0a3985f-85e0-4c54-9fbc-27b26e506645_528x137.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Kestra is a universal open-source orchestrator that makes both scheduled and event-driven workflows easy.</p><p><strong>language:</strong> Java <strong>stars:</strong> 4359 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/kestra-io/kestra">github.com/kestra-io/kestra</a><br><strong>site:</strong> <a href="https://kestra.io/">kestra.io</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Not subscribed to Console? Subscribe now to get a list of cool open-source projects and an interesting interview every week!</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><h3><strong><a href="https://github.com/orhun/daktilo">daktilo</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y5Yb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png" width="206" height="206" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:206,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5Yb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dc9cf71-7319-4f1a-ae37-cf292efec908_1024x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>daktilo is a small command-line program that plays typewriter sounds every time you press a key. It also offers the flexibility to customize keypress sounds to your liking.</p><p><strong>language:</strong> Rust <strong>stars:</strong> 586 <strong>last commit:</strong> today<br><strong>repo:</strong><a href="https://github.com/orhun/daktilo"> github.com/orhun/daktilo</a><br><strong>site: </strong><a href="https://daktilo.cli.rs/">daktilo.cli.rs</a></p><h4><strong><a href="https://github.com/fail2ban/fail2ban">fail2ban</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BWuN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BWuN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 424w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 848w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 1272w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BWuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png" width="265" height="93.81136950904393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:137,&quot;width&quot;:387,&quot;resizeWidth&quot;:265,&quot;bytes&quot;:7505,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!BWuN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 424w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 848w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 1272w, https://substackcdn.com/image/fetch/$s_!BWuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F141f9a9d-8140-4644-9c44-3b96447e1fe9_387x137.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Daemon to ban hosts that cause multiple authentication errors</p><p><strong>language: Python stars:</strong> 8843 <strong>last commit:</strong> 2 weeeks<br><strong>repo:</strong> <a href="https://github.com/fail2ban/fail2ban">github.com/fail2ban/fail2ban</a><br><strong>site</strong>: <a href="http://www.fail2ban.org/">fail2ban.org</a></p><h4><strong><a href="https://github.com/hugolabe/Wike">Wike</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BlfF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BlfF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BlfF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg" width="172" height="172" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:172,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Wike&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="Wike" title="Wike" srcset="https://substackcdn.com/image/fetch/$s_!BlfF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 424w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 848w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 1272w, https://substackcdn.com/image/fetch/$s_!BlfF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3ae5ab9-be27-4df7-956c-336284756b23_128x128.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Wikipedia Reader for the GNOME Desktop </p><p><strong>language:</strong> Python <strong>stars: </strong>192 <strong>last commit:</strong> 3 days<br><strong>repo:</strong> <a href="https://github.com/hugolabe/Wike">github.com/hugolabe/Wike</a><br><strong>site:</strong> <a href="https://hugolabe.github.io/Wike/">hugolabe.github.io/Wike</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-178/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-178/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item><item><title><![CDATA[Console #177 -- Top Open Source projects of the Week]]></title><description><![CDATA[Featuring Cloud, hardware, and analytics projects]]></description><link>https://console.substack.com/p/console-177</link><guid isPermaLink="false">https://console.substack.com/p/console-177</guid><dc:creator><![CDATA[Ana Mogul]]></dc:creator><pubDate>Sun, 01 Oct 2023 18:01:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c1827185-4ced-4581-896b-5267a8adf6a0_1600x836.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#129309; Sponsor</strong></h3><p>This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at <a href="mailto:osh@codesee.io">osh@codesee.io</a></p><div><hr></div><h3><strong>&#127959;&#65039; Projects</strong></h3><p><em><strong>Browse through open source projects on <a href="https://opensourcehub.io">OpenSourceHub.io</a>, add your project to get more exposure and connect with other maintainers and contributors!</strong></em></p><h4><strong><a href="https://github.com/mckinsey/vizro">Vizro</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z8UV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z8UV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 424w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 848w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 1272w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z8UV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png" width="190" height="159.0728021978022" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1219,&quot;width&quot;:1456,&quot;resizeWidth&quot;:190,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Z8UV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 424w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 848w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 1272w, https://substackcdn.com/image/fetch/$s_!Z8UV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0356c4a0-6662-486b-9bfd-3ad40f8596c7_2873x2406.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Vizro is a toolkit for creating modular data visualization applications. Rapidly self-serve the assembly of customized dashboards in minutes - without the need for advanced coding or design experience.</p><p><strong>language:</strong> Python <strong>stars:</strong> 997 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/mckinsey/vizro">github.com/mckinsey/vizro</a><br><strong>site: </strong><a href="https://vizro.readthedocs.io/en/stable/">vizro.readthedocs.io/en/stable</a></p><h4><strong><a href="https://github.com/usebruno/bruno">Bruno</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FrGX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FrGX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 424w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 848w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 1272w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FrGX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png" width="101" height="91.10244988864143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:405,&quot;width&quot;:449,&quot;resizeWidth&quot;:101,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!FrGX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 424w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 848w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 1272w, https://substackcdn.com/image/fetch/$s_!FrGX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b383af4-8b57-4f0a-88b0-c4e8d4222f73_449x405.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Opensource IDE for exploring and testing APIs. Lightweight alternative to postman/insomnia.</p><p><strong>language: </strong>JS<strong> stars:</strong> 1088 <strong>last commit:</strong> today<br><strong>repo:</strong> <a href="https://github.com/usebruno/bruno">github.com/usebruno/bruno</a><br><strong>site</strong>: <a href="https://www.usebruno.com/">usebruno.com</a></p><h4><strong><a href="https://github.com/postgresml/postgresml">PostgresML</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OEMm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OEMm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 424w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 848w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 1272w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OEMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg" width="70" height="100" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2080,&quot;width&quot;:1456,&quot;resizeWidth&quot;:70,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;PostgresML&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="PostgresML" title="PostgresML" srcset="https://substackcdn.com/image/fetch/$s_!OEMm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 424w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 848w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 1272w, https://substackcdn.com/image/fetch/$s_!OEMm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57ac470e-af79-4e30-ac0e-2a7c7224f84a_350x500.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>PostgresML is a machine learning extension for PostgreSQL that enables you to perform training and inference on text and tabular data using SQL queries.</p><p><strong>language:</strong> Rust <strong>stars:</strong> 4168 <strong>last commit:</strong> 1 day<br><strong>repo:</strong> <a href="https://github.com/postgresml/postgresml">github.com/postgresml/postgresml</a><br><strong>site:</strong> <a href="https://postgresml.org/">postgresml.org</a></p><div><hr></div><p><em><strong>Join thousands of other open-source enthusiasts and developers in the <a href="https://discord.gg/opensource">Open Source Hub Discord server</a> to continue the discussion on the projects in this week's email!</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://console.substack.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">Not subscribed to Console? Subscribe now to get a list of cool open-source projects and an interesting interview every week!</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><h4><strong><a href="https://github.com/configu/configu">Configu</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!80Re!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!80Re!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 424w, https://substackcdn.com/image/fetch/$s_!80Re!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 848w, https://substackcdn.com/image/fetch/$s_!80Re!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 1272w, https://substackcdn.com/image/fetch/$s_!80Re!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!80Re!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg" width="110" height="110" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:110,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;configu icon&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="configu icon" title="configu icon" srcset="https://substackcdn.com/image/fetch/$s_!80Re!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 424w, https://substackcdn.com/image/fetch/$s_!80Re!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 848w, https://substackcdn.com/image/fetch/$s_!80Re!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 1272w, https://substackcdn.com/image/fetch/$s_!80Re!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F760b152b-da50-4788-a1cc-5b6ded65a37e_400x400.svg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Configu is a simple and generic standard for managing and collaborating software configurations. It is built to provide a flexible and extensible process for storing and orchestrating configuration data across different environments and systems.</p><p><strong>language:</strong> TypeScript <strong>stars: </strong>1209 <strong>last commit:</strong> 4 days<br><strong>repo:</strong> <a href="https://github.com/configu/configu">github.com/configu/configu</a><br><strong>site: </strong><a href="https://configu.com">configu.com</a></p><h4><strong><a href="https://github.com/cubefs/cubefs">CubeFS</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!--LA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!--LA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 424w, https://substackcdn.com/image/fetch/$s_!--LA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 848w, https://substackcdn.com/image/fetch/$s_!--LA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 1272w, https://substackcdn.com/image/fetch/$s_!--LA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!--LA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png" width="206" height="65.64835164835165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:1456,&quot;resizeWidth&quot;:206,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CubeFS&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="CubeFS" title="CubeFS" srcset="https://substackcdn.com/image/fetch/$s_!--LA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 424w, https://substackcdn.com/image/fetch/$s_!--LA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 848w, https://substackcdn.com/image/fetch/$s_!--LA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 1272w, https://substackcdn.com/image/fetch/$s_!--LA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae49d8b6-8753-43e1-8da2-54c1d3950a0b_1828x582.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>CubeFS is a cloud native unstructured data storage.</p><p><strong>language: </strong>Go<strong> stars:</strong> 3934 <strong>last commit:</strong> 4 days<br><strong>repo:</strong> <a href="https://github.com/cubefs/cubefs">github.com/cubefs/cubefs</a><br><strong>site</strong>: <a href="https://cubefs.io/">cubefs.io</a></p><h4><strong><a href="https://github.com/davidhampgonsalves/life-dashboard">life-dashboard</a></strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yebL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yebL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 424w, https://substackcdn.com/image/fetch/$s_!yebL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 848w, https://substackcdn.com/image/fetch/$s_!yebL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 1272w, https://substackcdn.com/image/fetch/$s_!yebL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yebL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png" width="238" height="314.84304932735427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:446,&quot;resizeWidth&quot;:238,&quot;bytes&quot;:419858,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&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_!yebL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 424w, https://substackcdn.com/image/fetch/$s_!yebL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 848w, https://substackcdn.com/image/fetch/$s_!yebL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 1272w, https://substackcdn.com/image/fetch/$s_!yebL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5952a15d-aa0f-47f5-88aa-8997e2598857_446x590.png 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>E-Iink based dashboard for everyday life. Low power, heads up display running on a Kindle.</p><p><strong>language:</strong> Go <strong>stars: </strong>1229 <strong>last commit:</strong> 2 days<br><strong>repo:</strong> <a href="https://github.com/davidhampgonsalves/life-dashboard">github.com/davidhampgonsalves/life-dashboard</a></p><div><hr></div><p><em>Want to join the conversation about one of the projects featured this week?  Drop a comment, or see what others are saying!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://console.substack.com/p/console-177/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://console.substack.com/p/console-177/comments"><span>Leave a comment</span></a></p><p><em>Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at <strong><a href="mailto:osh@codesee.io">osh@codesee.io</a></strong> or mention us <a href="https://twitter.com/ConsoleWeekly">@ConsoleWeekly</a>!</em></p>]]></content:encoded></item></channel></rss>