<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pavol Z. Kutaj</title>
    <description>The latest articles on DEV Community by Pavol Z. Kutaj (@pkutaj).</description>
    <link>https://dev.to/pkutaj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F567443%2F793fb020-acc7-4b6a-9c7e-154eba68d232.png</url>
      <title>DEV Community: Pavol Z. Kutaj</title>
      <link>https://dev.to/pkutaj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pkutaj"/>
    <language>en</language>
    <item>
      <title>The Most Interesting (mostly) Tech Reads in February 2025</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Fri, 28 Feb 2025 13:12:18 +0000</pubDate>
      <link>https://dev.to/pkutaj/the-most-interesting-mostly-tech-reads-in-february-2025-1c1n</link>
      <guid>https://dev.to/pkutaj/the-most-interesting-mostly-tech-reads-in-february-2025-1c1n</guid>
      <description>&lt;h4&gt;
  
  
  Don't Believe Him (by Ezra)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.nytimes.com/2025/02/02/opinion/ezra-klein-podcast-trump-column-read.html" rel="noopener noreferrer"&gt;https://www.nytimes.com/2025/02/02/opinion/ezra-klein-podcast-trump-column-read.html&lt;/a&gt;
Perception cannot become reality so easily. Can it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Introducing self-describing JSONs
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://snowplow.io/blog/introducing-self-describing-jsons" rel="noopener noreferrer"&gt;https://snowplow.io/blog/introducing-self-describing-jsons&lt;/a&gt;
Learning about semi-structured data, this self-describing JSON approach rhymes with that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  49 Small Truths About Marriage All Couples Understand - Fatherly
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.fatherly.com/love-money/truths-about-marriage" rel="noopener noreferrer"&gt;https://www.fatherly.com/love-money/truths-about-marriage&lt;/a&gt;
Everyone thinks of leaving. That's just part of staying.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Turso is rewriting SQLite in Rust with Glauber Costa, CEO at Turso (Changelog Interviews #626)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/podcast/626" rel="noopener noreferrer"&gt;https://changelog.com/podcast/626&lt;/a&gt;
Listened to a great episode on SQLite itself on Corecursive Podcast in the past. Happy to see the challer on the block.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Beej's Guide to Network Programming
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://beej.us/guide/bgnet/html/split/what-is-a-socket.html#what-is-a-socket" rel="noopener noreferrer"&gt;https://beej.us/guide/bgnet/html/split/what-is-a-socket.html#what-is-a-socket&lt;/a&gt;
Socket Programming featured in David Beazley's famous live coding - &lt;a href="https://www.youtube.com/watch?v=MCs5OvhV9S4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=MCs5OvhV9S4&lt;/a&gt; - so as I am new to network programming, I'm glad to have some intro here to better enjoy the talk, really (not doing any of that myself)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Trumpian policy as cultural policy - Marginal REVOLUTION
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marginalrevolution.com/marginalrevolution/2025/02/trumpian-policy-as-cultural-policy.html" rel="noopener noreferrer"&gt;https://marginalrevolution.com/marginalrevolution/2025/02/trumpian-policy-as-cultural-policy.html&lt;/a&gt;
Another important take for me - on cultural change there already was one about "The vibes have changed" that came out before the election. This is an implementation of cultural change by "flooding the zone" by filling media with agenda, constant, without time taking for implementation. It's just an aggresive take on the existing discourse. Fascinating.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Fallthrough &amp;amp; Friends with Matthew Sanabria &amp;amp; Kris Brandow (Changelog &amp;amp; Friends #77)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/friends/77" rel="noopener noreferrer"&gt;https://changelog.com/friends/77&lt;/a&gt;
On documentation: what's often missing is I think my biggest gripe right now is just how few docs we have, how little documentation so many things have. But if there was a way… I think there was especially – what was it? There was one that was like the discover and learn steps. I am very frustrated often at libraries that I want to go in and understand, and there’s no “Oh, start looking here.” Or like “Here’s the basic architecture that you can then use to understand how this codebase is laid out, so you can go read the code and understand how we’ve implemented all of these things.” That documentation is almost always completely missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  QuadrupleA/sqlite-page-explorer: Visual tool to explore SQLite databases page-by-page, the way they're stored on disk and the way SQLite sees them.
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/QuadrupleA/sqlite-page-explorer" rel="noopener noreferrer"&gt;https://github.com/QuadrupleA/sqlite-page-explorer&lt;/a&gt;
SQLite (and most databases) store data in disk-block-sized pages, usually 4KB, which helps make reads and writes as fast as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Normally developers interact with databases on the "schema level" - tables, rows, and SQL. But taking a peek at the "page level" can give you some interesting insights:&lt;/p&gt;

&lt;h4&gt;
  
  
  Continuous reinvention: A brief history of block storage at AWS
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.allthingsdistributed.com/2024/08/continuous-reinvention-a-brief-history-of-block-storage-at-aws.html" rel="noopener noreferrer"&gt;https://www.allthingsdistributed.com/2024/08/continuous-reinvention-a-brief-history-of-block-storage-at-aws.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Marshmallow Test and Parenting - @desunit (Sergey Bogdanov)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://desunit.com/blog/marshmallow-test-and-parenting/" rel="noopener noreferrer"&gt;https://desunit.com/blog/marshmallow-test-and-parenting/&lt;/a&gt;
Could be applied just as well to working environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Comments - Tech's Dumbest Mistake: Why Firing Programmers for AI Will Destroy Everything
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://defragzone.substack.com/p/techs-dumbest-mistake-why-firing/comments?utm_medium=web" rel="noopener noreferrer"&gt;https://defragzone.substack.com/p/techs-dumbest-mistake-why-firing/comments?utm_medium=web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Let Brandon Cook - Cal Newport
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://calnewport.com/let-brandon-cook/" rel="noopener noreferrer"&gt;https://calnewport.com/let-brandon-cook/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Firing programmers for AI is a mistake
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=43010814" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=43010814&lt;/a&gt;
Another long thread on HN about what AI is going to do to programmers. My thoughts are on Walter Benjamin§s essay on Art and Mechanical Reproduction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Why Blog If Nobody Reads It?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://andysblog.uk/why-blog-if-nobody-reads-it/" rel="noopener noreferrer"&gt;https://andysblog.uk/why-blog-if-nobody-reads-it/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Do-nothing scripting: the key to gradual automation (2019)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=29083367" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=29083367&lt;/a&gt;
On Programmed Documentation - maybe Warp has Workflows that actually fits this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  What is the difference between len() and sys.getsizeof() methods in python? - Stack Overflow
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://stackoverflow.com/questions/17574076/what-is-the-difference-between-len-and-sys-getsizeof-methods-in-python" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/17574076/what-is-the-difference-between-len-and-sys-getsizeof-methods-in-python&lt;/a&gt;
Finding a pleasure in reading great answers for programming 100% authored by people in Stack Overflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Filtered Decks - Anki Manual
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.ankiweb.net/filtered-decks.html#:%7E:text=The%20easiest%20way%20to%20create,you%20click%20on%20a%20deck." rel="noopener noreferrer"&gt;https://docs.ankiweb.net/filtered-decks.html#:~:text=The%20easiest%20way%20to%20create,you%20click%20on%20a%20deck.&lt;/a&gt;
Pre-warming my studies with memorization session.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  htop Explained Visually
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codeahoy.com/2017/01/20/hhtop-explained-visually/" rel="noopener noreferrer"&gt;https://codeahoy.com/2017/01/20/hhtop-explained-visually/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  PBS - JOHN GARDNER - EDUCATION AND EXCELLENCE
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pbs.org/johngardner/sections/writings_speech_1.html" rel="noopener noreferrer"&gt;https://www.pbs.org/johngardner/sections/writings_speech_1.html&lt;/a&gt;
The things you learn in maturity aren't simple things such as acquiring information and skills. You learn not to engage in self-destructive behavior. You leant not to burn up energy in anxiety. You discover how to manage your tensions, if you have any, which you do. You learn that self-pity and resentment are among the most toxic of drugs. You find that the world loves talent, but pays off on character.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You come to understand that most people are neither for you nor against you, they are thinking about themselves. You learn that no matter how hard you try to please, some people in this world are not going to love you, a lesson that is at first troubling and then really quite relaxing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Intro To 'comm' Command In Linux
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.robertelder.org/intro-to-comm-command/" rel="noopener noreferrer"&gt;https://blog.robertelder.org/intro-to-comm-command/&lt;/a&gt;
Venn Diagrams for Comm - as they are usually used for JOIN&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pravidla Magic: The Gathering ( ▷ Videonávod)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.fyft.cz/mtg-clanky/magic-the-gathering-pravidla/" rel="noopener noreferrer"&gt;https://www.fyft.cz/mtg-clanky/magic-the-gathering-pravidla/&lt;/a&gt;
Learning MTG?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The Republican Party’s NPC Problem — and Ours
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=lckYPwQj_NM&amp;amp;ab_channel=TheEzraKleinShow" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=lckYPwQj_NM&amp;amp;ab_channel=TheEzraKleinShow&lt;/a&gt;
See &lt;a href="https://stratechery.com/2022/the-current-thing/" rel="noopener noreferrer"&gt;https://stratechery.com/2022/the-current-thing/&lt;/a&gt; for the analysis of the "current thing" meme.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Discovering discovery coding with Jimmy Miller (Changelog &amp;amp; Friends #80)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/friends/80" rel="noopener noreferrer"&gt;https://changelog.com/friends/80&lt;/a&gt;
Future of Code host on my favorite show. A must.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Future of AI: what happens after DeepSeek? (No One knows - but I have a guess) - YouTube
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=tjtnA8sm9ZA" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=tjtnA8sm9ZA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Achievement, here and there - by Benn Stancil
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://benn.substack.com/p/achievement-here-and-there?publication_id=23588&amp;amp;utm_campaign=email-post-title&amp;amp;r=25tz5&amp;amp;utm_medium=email" rel="noopener noreferrer"&gt;https://benn.substack.com/p/achievement-here-and-there?publication_id=23588&amp;amp;utm_campaign=email-post-title&amp;amp;r=25tz5&amp;amp;utm_medium=email&lt;/a&gt;
A variation of "The Current Thing" meme? Making pivoting the point, and the status of start-ups being greatly overestimated and being about marketing and attention grab then a more authentic value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Discovering discovery coding with Jimmy Miller (Changelog &amp;amp; Friends #80)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://changelog.com/friends/80" rel="noopener noreferrer"&gt;https://changelog.com/friends/80&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Vim After Bram: A Core Maintainer on How They’ve Kept It Going - The New Stack
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://thenewstack.io/vim-after-bram-a-core-maintainer-on-how-theyve-kept-it-going/" rel="noopener noreferrer"&gt;https://thenewstack.io/vim-after-bram-a-core-maintainer-on-how-theyve-kept-it-going/&lt;/a&gt;
I am still on Vim. Tempted to go to Neo-Vim, but to not see outputs being worth it.  at the moment. But it may be a question of time if I get to writing Python and Bash in much higher velocity in Vim.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  SED1260 - Robert Hodges
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://softwareengineeringdaily.com/wp-content/uploads/2021/05/SED1260-Robert-Hodges.pdf" rel="noopener noreferrer"&gt;https://softwareengineeringdaily.com/wp-content/uploads/2021/05/SED1260-Robert-Hodges.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Understanding Golang’s lightweight concurrency model
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@mail2rajeevshukla/unlocking-the-power-of-goroutines-understanding-gos-lightweight-concurrency-model-3775f8e696b0" rel="noopener noreferrer"&gt;https://medium.com/@mail2rajeevshukla/unlocking-the-power-of-goroutines-understanding-gos-lightweight-concurrency-model-3775f8e696b0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  yq
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mikefarah.gitbook.io/yq" rel="noopener noreferrer"&gt;https://mikefarah.gitbook.io/yq&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Discovering discovery coding with Jimmy Miller (Changelog &amp;amp; Friends #80)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/friends/80#transcript" rel="noopener noreferrer"&gt;https://changelog.com/friends/80#transcript&lt;/a&gt;
But I think the key to get into discovery coding is to be willing to not have a solution in mind. I do think that that is easier said than done. I think it’s very, very tempting anytime you’re approaching programming problems to come with solutions. And I don’t know, it sounds almost silly when I say it, but I’ve found that to be the number one thing that stops me from finding the good solutions, is that I already have a solution in mind, even if it’s just in the back of my head, and as I’m going and doing this, I will just automatically go towards that solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So step one, clear your mind, meditate… No solutions. Step two I really think is ask questions. Ask questions about the codebase, about the problem, about whatever it is that is this situation you’re in, and try to find the answers for those. And if the answers are frustrating to find, if it just takes too long to find them, build a tool that makes it really easy. And if you start there, the process of discovery coding will start becoming the easy default, because every time you want to have an answer, you already have tools available to you to help find that answer, and that ends up being like your inspiration for how to continue.&lt;/p&gt;

&lt;p&gt;So the goal is to try to make it easy to discovery-code, because if it’s not, you’re never gonna do it. So you kind of have to do the hard work up front.&lt;/p&gt;

&lt;h4&gt;
  
  
  Jr Devs - I Can't Code Anymore
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1Se2zTlXDwY" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=1Se2zTlXDwY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Don't Call Yourself A Programmer, And Other Career Advice
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/" rel="noopener noreferrer"&gt;https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/&lt;/a&gt;
Attach to profit centers - where are those in the age of AI?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Europe faces its fate as an American colony - New Statesman
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.newstatesman.com/international-politics/2025/02/jd-vance-munich-europe-russia-ukraine-trump" rel="noopener noreferrer"&gt;https://www.newstatesman.com/international-politics/2025/02/jd-vance-munich-europe-russia-ukraine-trump&lt;/a&gt;
Is what EU faces an attempt to turn it into US colony?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  DOC • Beautiful, boring, and without soul
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.doc.cc/articles/beautiful-boring-and-without-soul" rel="noopener noreferrer"&gt;https://www.doc.cc/articles/beautiful-boring-and-without-soul&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Discovering discovery coding with Jimmy Miller (Changelog &amp;amp; Friends #80)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/friends/80" rel="noopener noreferrer"&gt;https://changelog.com/friends/80&lt;/a&gt;
the key to get into discovery coding is to be willing to not have a solution in mind. I do think that that is easier said than done. I think it’s very, very tempting anytime you’re approaching programming problems to come with solutions. And I don’t know, it sounds almost silly when I say it, but I’ve found that to be the number one thing that stops me from finding the good solutions, is that I already have a solution in mind, even if it’s just in the back of my head, and as I’m going and doing this, I will just automatically go towards that solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So step one, clear your mind, meditate… No solutions. Step two I really think is ask questions. Ask questions about the codebase, about the problem, about whatever it is that is this situation you’re in, and try to find the answers for those. And if the answers are frustrating to find, if it just takes too long to find them, build a tool that makes it really easy. And if you start there, the process of discovery coding will start becoming the easy default, because every time you want to have an answer, you already have tools available to you to help find that answer, and that ends up being like your inspiration for how to continue.&lt;/p&gt;

&lt;p&gt;So the goal is to try to make it easy to discovery-code, because if it’s not, you’re never gonna do it. So you kind of have to do the hard work up front.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Digital Antiquarian
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.filfre.net/" rel="noopener noreferrer"&gt;https://www.filfre.net/&lt;/a&gt;
Something that makes me highly nostalgic and that gives soul to the gaming as I remember it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Programming with LLMs featuring David Crawshaw (Changelog Interviews #629)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/podcast/629" rel="noopener noreferrer"&gt;https://changelog.com/podcast/629&lt;/a&gt;
A different take on AI assisted coding than one you have from Primagean, who is much more skeptical. This is more specific, building Go-specific tooling and being passionate about what LLMs can do for us. Also appreciating how code-completion is a completely different paradigm than a chat-bot for AI and how cool that is, pionereed by GitHub Copilot. I am not turning it back on, I don't depend on the amount of code I write for my paycheck so I rather write by myself, working through the problems alone. Or with occational oblique strategy. Still, it is fascinating what is happening, utterly mezmerizing to watch that.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  New Junior Developers Can’t Actually Code
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nmn.gl/blog/ai-and-learning" rel="noopener noreferrer"&gt;https://nmn.gl/blog/ai-and-learning&lt;/a&gt;
Clickbait and Moral Panic or it is really different? I am surely cautious. But the great plus is you CAN build things that until now needed code. If your focus is on craft - no. If your focus is on value - absolutely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Change my mind (Changelog &amp;amp; Friends #81)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/friends/81" rel="noopener noreferrer"&gt;https://changelog.com/friends/81&lt;/a&gt;
Primagean is covering the same piece in &lt;a href="https://www.youtube.com/watch?v=pnpUK-f87zo&amp;amp;t=58s&amp;amp;ab_channel=ThePrimeTime" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=pnpUK-f87zo&amp;amp;t=58s&amp;amp;ab_channel=ThePrimeTime&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  GenAI hot takes and bad use cases (Practical AI #304)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/practicalai/304" rel="noopener noreferrer"&gt;https://changelog.com/practicalai/304&lt;/a&gt;
What's LLM are currently not good for: high throughput/low latency usecases, complete autonomy, high-stakes forecasting, not top languages (both of human and computer world), ... there is more and great!&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The return of the modern data stack - by Benn Stancil
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://benn.substack.com/p/the-return-of-the-modern-data-stack?utm_source=post-email-title&amp;amp;publication_id=23588&amp;amp;post_id=157625068&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=true&amp;amp;r=25tz5&amp;amp;triedRedirect=true&amp;amp;utm_medium=email" rel="noopener noreferrer"&gt;https://benn.substack.com/p/the-return-of-the-modern-data-stack?utm_source=post-email-title&amp;amp;publication_id=23588&amp;amp;post_id=157625068&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=true&amp;amp;r=25tz5&amp;amp;triedRedirect=true&amp;amp;utm_medium=email&lt;/a&gt;
So much fun! Which, sure, this is how databases work now. About ten years ago, they got split in half, into a bucket of data on one side, and a compute engine that runs calculations on the other. So long as the buckets are formatted correctly, you can mix and match different buckets with different calculators.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this SAP product, if it works the way I think it does, extends that idea in a couple of new ways. First, it suggests that applications, like CRMs and ERPs to CPQs and ATSs, could be one of the buckets that databases connect their calculators to. Rather than exporting data out of SAP—which is how people have done this for a while, and it clearly hasn’t gone well—SAP can simply reformat it. Then, people can bring their database—or, since it’s 2025, bring their aGeNtS—directly to the applications themselves.&lt;/p&gt;

&lt;h4&gt;
  
  
  The End of Programming as We Know It – O’Reilly
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.oreilly.com/radar/the-end-of-programming-as-we-know-it/" rel="noopener noreferrer"&gt;https://www.oreilly.com/radar/the-end-of-programming-as-we-know-it/&lt;/a&gt;
as read and commented on by primagean - &lt;a href="https://www.youtube.com/watch?v=C79mALqHI0o&amp;amp;t=1015s&amp;amp;ab_channel=ThePrimeTime" rel="noopener noreferrer"&gt;(4) The End Of Programming As We Know It - YouTube&lt;/a&gt; and I currently agree that one should invest into not be made stupid and one should be defending ones skills - if you've already aqcuired them. Is it good for lifetime? &lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>The Most Interesting (mostly) Tech Reads in January 2025</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Sun, 02 Feb 2025 21:48:06 +0000</pubDate>
      <link>https://dev.to/pkutaj/the-most-interesting-mostly-tech-reads-in-january-2025-4186</link>
      <guid>https://dev.to/pkutaj/the-most-interesting-mostly-tech-reads-in-january-2025-4186</guid>
      <description>&lt;h3&gt;
  
  
  Databases in 2024: A Year in Review // Blog // Andy Pavlo - Carnegie Mellon University
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.cs.cmu.edu/%7Epavlo/blog/2025/01/2024-databases-retrospective.html" rel="noopener noreferrer"&gt;https://www.cs.cmu.edu/~pavlo/blog/2025/01/2024-databases-retrospective.html&lt;/a&gt;
Focus on Licence Changes. I've watched too. Great changelog interview with ELK Stack Author. Great post by Antirez about his return to Redis (&lt;a href="https://antirez.com/news/144" rel="noopener noreferrer"&gt;https://antirez.com/news/144&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ask HN: Programmers who don't use autocomplete/LSP, how do you do it?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42492508" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=42492508&lt;/a&gt;
Interesting debate on VIM vs IDE. I write Bash in Vim and Python in IDE (VSCode + iPython) and although enamoured by David Baeyzley's mastery, the IDE's just where I'm at with that particular language. To each his own, I think for this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Programming as Theory Building (1985) [pdf]
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42592543" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=42592543&lt;/a&gt;
Discussions of one of my favorite papers and favorite podcast episodes (Future of Code)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bird (2024)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://mubi.com/en/de/films/bird" rel="noopener noreferrer"&gt;https://mubi.com/en/de/films/bird&lt;/a&gt;
A movie I found when listening to Fountains DC's Bug song.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Null device - Wikipedia
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Null_device" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Null_device&lt;/a&gt;
Learning about black hole register and /dev/null in bash.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Say NO to Venn Diagrams When Explaining JOINs – Java, SQL and jOOQ.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blog.jooq.org/say-no-to-venn-diagrams-when-explaining-joins/" rel="noopener noreferrer"&gt;https://blog.jooq.org/say-no-to-venn-diagrams-when-explaining-joins/&lt;/a&gt;
Return to this post as a refresher on SQL JOINs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hotel California - by Benn Stancil - benn.substack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://benn.substack.com/p/hotel-california?utm_source=post-email-title&amp;amp;publication_id=23588&amp;amp;post_id=154556809&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=true&amp;amp;r=25tz5&amp;amp;triedRedirect=true&amp;amp;utm_medium=email" rel="noopener noreferrer"&gt;https://benn.substack.com/p/hotel-california?utm_source=post-email-title&amp;amp;publication_id=23588&amp;amp;post_id=154556809&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=true&amp;amp;r=25tz5&amp;amp;triedRedirect=true&amp;amp;utm_medium=email&lt;/a&gt;
On chaotic reality crashing into life filled with simulation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Remembering Mike Maples, Sr.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hardcoresoftware.learningbyshipping.com/p/remembering-mike-maples-sr" rel="noopener noreferrer"&gt;https://hardcoresoftware.learningbyshipping.com/p/remembering-mike-maples-sr&lt;/a&gt;
All along, Mike created a culture of respect, collaboration, and most of all “promise and deliver”. He instilled in everyone the most basic notion of saying what you’re going to do and doing that well.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Greenland Is Of Growing Strategic Significance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.twz.com/news-features/why-greenland-is-of-growing-strategic-significance" rel="noopener noreferrer"&gt;https://www.twz.com/news-features/why-greenland-is-of-growing-strategic-significance&lt;/a&gt;
Reminds of a book with the title "The Revenge of Geography"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Jerry Seinfeld, Ichiro Suzuki and the Pursuit of Mastery
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.readtrung.com/p/jerry-seinfeld-ichiro-suzuki-and" rel="noopener noreferrer"&gt;https://www.readtrung.com/p/jerry-seinfeld-ichiro-suzuki-and&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI’s Uneven Arrival – Stratechery by Ben Thompson
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://stratechery.com/2025/ais-uneven-arrival/" rel="noopener noreferrer"&gt;https://stratechery.com/2025/ais-uneven-arrival/&lt;/a&gt;
An eye-opener for o3. This is a surprising and important step-function increase in AI capabilities, showing novel task adaptation ability never seen before in the GPT-family models. For context, ARC-AGI-1 took 4 years to go from 0% with GPT-3 in 2020 to 5% in 2024 with GPT-4o. All intuition about AI capabilities will need to get updated for o3, which performs at 75% for ths test.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Origins of Wokeness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://paulgraham.com/woke.html" rel="noopener noreferrer"&gt;https://paulgraham.com/woke.html&lt;/a&gt;
We should have a conscious bias against defining new forms of heresy. Whenever anyone tries to ban saying something that we'd previously been able to say, our initial assumption should be that they're wrong. Only our initial assumption of course. If they can prove we should stop saying it, then we should. But the burden of proof is on them. In liberal democracies, people trying to prevent something from being said will usually claim they're not merely engaging in censorship, but trying to prevent some form of "harm". And maybe they're right. But once again, the burden of proof is on them. It's not enough to claim harm; they have to prove it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Heroku and the Twelve-Factor App with Vish Abrams - Software Engineering Daily
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://softwareengineeringdaily.com/2025/01/14/heroku-and-the-twelve-factor-app-with-vish-abrams/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=heroku-and-the-twelve-factor-app-with-vish-abrams" rel="noopener noreferrer"&gt;https://softwareengineeringdaily.com/2025/01/14/heroku-and-the-twelve-factor-app-with-vish-abrams/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=heroku-and-the-twelve-factor-app-with-vish-abrams&lt;/a&gt;
the manifesto is getting a rewrite, driven by Heroku but being worked on collectivelly as an open-source project, great chat on current state of Heroku as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Principles - Nabeel S. Qureshi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nabeelqu.substack.com/p/principles?publication_id=107423&amp;amp;utm_campaign=email-post-title&amp;amp;r=3o9&amp;amp;utm_medium=email" rel="noopener noreferrer"&gt;https://nabeelqu.substack.com/p/principles?publication_id=107423&amp;amp;utm_campaign=email-post-title&amp;amp;r=3o9&amp;amp;utm_medium=email&lt;/a&gt;
“Aim for Chartres” (Christopher Alexander) — when doing something, aim to be the best there ever was at it. This compensates for your natural bias, which is to do something mediocre. You have to really aim to be as good as the greats.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Show HN: GUI for editing Mermaid class diagrams
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42738656" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=42738656&lt;/a&gt;
I am using Mermaid on my client meetings multiple times a week. It's just amazing. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The quiet rebellion of a little life
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42769751" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=42769751&lt;/a&gt;
Near as I can tell there is a not-insignificant part of the American psychological context that amounts to a threat of utter destitution should you not choose to keep slaving away. By Krom, America needs homeless people to show you just how far you can fall unless you keep serving the man.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Slop, Suspicion, and Writing Back
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://benjamincongdon.me/blog/2025/01/25/AI-Slop-Suspicion-and-Writing-Back/" rel="noopener noreferrer"&gt;https://benjamincongdon.me/blog/2025/01/25/AI-Slop-Suspicion-and-Writing-Back/&lt;/a&gt;
I do AI slop as well and I own it on my blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  From open source to acquired with Ashley Jeffs (Changelog Interviews #625)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://changelog.com/podcast/625" rel="noopener noreferrer"&gt;https://changelog.com/podcast/625&lt;/a&gt;
On Benthos Stream Processing, from OS to being bought by Red Panda. Very funny at times, the humor there seemed like instilled in Benthos itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Jinja (template engine) - Wikipedia
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Jinja_(template_engine)" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Jinja_(template_engine)&lt;/a&gt;
Using Jinja for a simpler task as it was a first thing that occured to me. I should have just used a built-in Template module though. I did not need any programming logic in the template just a simple placeholders.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Good Lord - by Benn Stancil - benn.substack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://benn.substack.com/p/good-lord" rel="noopener noreferrer"&gt;https://benn.substack.com/p/good-lord&lt;/a&gt;
Such a brave critique of the politics of current Silicon Valley and catching its own hypocricies. Amazing and inspiring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Antiqua et Nova: Note on the relationship between AI and human intelligence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://news.ycombinator.com/item?id=42877709" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=42877709&lt;/a&gt;
Vatican's take on AI and many respectful voices on Hacker News. I can still get surprised!&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How to combine rg with less in terminal</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Thu, 30 Jan 2025 07:58:18 +0000</pubDate>
      <link>https://dev.to/pkutaj/how-to-combine-rg-with-less-in-terminal-52f2</link>
      <guid>https://dev.to/pkutaj/how-to-combine-rg-with-less-in-terminal-52f2</guid>
      <description>&lt;h3&gt;
  
  
  USECASE
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/..." class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/..." alt="Uploading image" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The aim of this page 📝 is to explain how to paginate the results of ripgrep (&lt;code&gt;rg&lt;/code&gt;) using &lt;code&gt;less&lt;/code&gt;. This is especially useful for querying my knowledge base, which is a simple file tree full of markdown files, edited in Visual Studio Code.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;less&lt;/code&gt; is a powerful terminal pager program used to view the contents of a file one screen at a time. It allows backward and forward navigation through the file, and it is more feature-rich than other pagers like &lt;code&gt;more&lt;/code&gt;. With &lt;code&gt;less&lt;/code&gt;, you can search within the file, navigate by lines or pages, and even view files with color formatting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ripgrep (&lt;code&gt;rg&lt;/code&gt;) is a powerful tool for searching within files.&lt;/li&gt;
&lt;li&gt;To handle large search results, pipe the output to a pager like &lt;code&gt;less&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;-R&lt;/code&gt; flag is crucial for displaying colors correctly in &lt;code&gt;less&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Using ripgrep with the &lt;code&gt;--pretty&lt;/code&gt; flag and &lt;code&gt;less&lt;/code&gt; provides a great combination.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rg &lt;span class="nt"&gt;--pretty&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;search_term&amp;gt;'&lt;/span&gt; | less &lt;span class="nt"&gt;-R&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Benefits of this approach:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scroll up/down through results&lt;/strong&gt;: Navigate large outputs easily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search within results&lt;/strong&gt;: Press &lt;code&gt;/&lt;/code&gt; in &lt;code&gt;less&lt;/code&gt; to search (like vim)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserved colors and formatting&lt;/strong&gt;: Keep syntax highlighting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line numbers and file names remain visible&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy exit&lt;/strong&gt;: Press &lt;code&gt;q&lt;/code&gt; to quit &lt;code&gt;less&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyperlinks + preview&lt;/strong&gt;: with Warp, I'll get the contents of the linked file OOTB&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;https://github.com/BurntSushi/ripgrep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tecmint.com/less-command-examples/" rel="noopener noreferrer"&gt;https://www.tecmint.com/less-command-examples/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>How to Use Delta Pager without Headings</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Fri, 24 Jan 2025 13:56:03 +0000</pubDate>
      <link>https://dev.to/pkutaj/how-to-use-delta-pager-without-headings-3282</link>
      <guid>https://dev.to/pkutaj/how-to-use-delta-pager-without-headings-3282</guid>
      <description>&lt;p&gt;The aim of this page📝 is to explain how to configure Delta to omit hunk headers in git diff outputs, resulting in cleaner and more readable diffs. I have looked for it for quite some time — the feature is called Hunk Header. I have a data file of 80MB (Consul KV Dump with each KV per line) and need to compare past VS current (HEAD) version. &lt;br&gt;
• Delta is a syntax-highlighting pager for git, diff, and grep outputs.  ￼&lt;br&gt;
• By default, git diff includes hunk headers, which can clutter the output.&lt;br&gt;
• To remove these headers, configure Delta’s hunk-header-style to omit.&lt;br&gt;
• This setting is specified in the Git configuration file.&lt;br&gt;
• The configuration line to add is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[delta]
    hunk-header-style = omit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;• This configuration instructs Delta to omit the hunk header section from the output.  ￼&lt;br&gt;
• After updating the configuration, run git diff as usual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git diff -U0 &amp;lt;commit_hash&amp;gt; HEAD --color | delta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;• The -U0 option ensures only the modified lines are shown.&lt;br&gt;
• The --color option enables syntax highlighting.&lt;br&gt;
• The | delta pipes the output through Delta for enhanced formatting.&lt;br&gt;
• This setup results in a cleaner diff display, focusing solely on the changes without additional semantic headers.&lt;/p&gt;

&lt;h3&gt;
  
  
  LINKS
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/dandavison/delta/issues/364" rel="noopener noreferrer"&gt;https://github.com/dandavison/delta/issues/364&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/dandavison/delta" rel="noopener noreferrer"&gt;https://github.com/dandavison/delta&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dandavison.github.io/delta/full%E2%80%94help-output.html" rel="noopener noreferrer"&gt;https://dandavison.github.io/delta/full—help-output.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Explaining self-join in SQL</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Fri, 17 Jan 2025 11:33:07 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-self-join-in-sql-5224</link>
      <guid>https://dev.to/pkutaj/explaining-self-join-in-sql-5224</guid>
      <description>&lt;p&gt;The aim of this page📝 is to explain self-joins in SQL and how they can be used effectively.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition&lt;/strong&gt;: A self-join is a regular join but the table is joined with itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: It is used to compare rows within the same table or to create a hierarchical structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example Table&lt;/strong&gt;: A &lt;code&gt;healthcare_providers&lt;/code&gt; table with columns &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;id&lt;/code&gt;, and &lt;code&gt;supervisor_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic SQL Query&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; 
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;healthcare_providers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Representation&lt;/strong&gt;: Example data:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ┏━━━━━━━━━┳━━━━┳━━━━━━━━━━━━━━━┓
  ┃ name    ┃ id ┃ supervisor_id ┃
  ┡━━━━━━━━━╇━━━━╇━━━━━━━━━━━━━━━┩
  │ Alice   │  2 │          1    │
  │ Bob     │  3 │          1    │
  │ Carol   │  4 │          5    │
  │ David   │  5 │          NULL │
  │ Eve     │  1 │          5    │
  └─────────┴────┴───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-Join Query&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;  &lt;span class="k"&gt;SELECT&lt;/span&gt; 
      &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;reports_to&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;healthcare_providers&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
  &lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;healthcare_providers&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;supervisor_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
  &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;NULLS&lt;/span&gt; &lt;span class="k"&gt;LAST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Explanation&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aliases&lt;/strong&gt;: &lt;code&gt;e&lt;/code&gt; represents employees, &lt;code&gt;s&lt;/code&gt; represents supervisors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LEFT JOIN&lt;/strong&gt;: Ensures all employees are listed, even if they don't have supervisors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ON Clause&lt;/strong&gt;: Links &lt;code&gt;supervisor_id&lt;/code&gt; from &lt;code&gt;e&lt;/code&gt; to &lt;code&gt;id&lt;/code&gt; in &lt;code&gt;s&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SELECT Clause&lt;/strong&gt;: Retrieves employee names and their respective supervisor names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ORDER BY&lt;/strong&gt;: Sorts the result by supervisor names, keeping null values at the end.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Result&lt;/strong&gt;:
&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  | employee | reports_to |
  |----------|------------|
  | Alice    | Eve        |
  | Bob      | Eve        |
  | Carol    | David      |
  | Eve      | David      |
  | David    | NULL       |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>sql</category>
    </item>
    <item>
      <title>How to Copy/Duplicate a File Duplicate in Vim (netrw+vinegar)</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Thu, 16 Jan 2025 14:59:56 +0000</pubDate>
      <link>https://dev.to/pkutaj/how-to-copyduplicate-a-file-duplicate-in-vim-netrwvinegar-561c</link>
      <guid>https://dev.to/pkutaj/how-to-copyduplicate-a-file-duplicate-in-vim-netrwvinegar-561c</guid>
      <description>&lt;h3&gt;
  
  
  USECASE
&lt;/h3&gt;

&lt;p&gt;The aim of this page 📝 is to explain how to duplicate a file in Vim using the &lt;code&gt;netrw&lt;/code&gt; file explorer with the &lt;code&gt;vim-vinegar&lt;/code&gt; plugin.&lt;br&gt;
Spent way too much time, given that &lt;code&gt;R&lt;/code&gt; is shorthand for renaming the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv34lcj93v8g44snc77cv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv34lcj93v8g44snc77cv.gif" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;vim-vinegar&lt;/code&gt; to enhance &lt;code&gt;netrw&lt;/code&gt; usability.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;-&lt;/code&gt; to open &lt;code&gt;netrw&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mark the file with &lt;code&gt;mf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy the file with &lt;code&gt;mc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Input the new file name and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vi.stackexchange.com/questions/6254/how-do-i-copy-a-file-in-netrw" rel="noopener noreferrer"&gt;https://vi.stackexchange.com/questions/6254/how-do-i-copy-a-file-in-netrw&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vim</category>
    </item>
    <item>
      <title>Explaining DELETE vs DROP vs TRUNCATE in SQL</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Wed, 15 Jan 2025 08:10:58 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-delete-vs-drop-vs-truncate-in-sql-4e1</link>
      <guid>https://dev.to/pkutaj/explaining-delete-vs-drop-vs-truncate-in-sql-4e1</guid>
      <description>&lt;p&gt;The aim of this page📝 is to explain a difference between three similar clauses in SQL: &lt;code&gt;DELETE FROM&lt;/code&gt; vs &lt;code&gt;TRUNCATE TABLE&lt;/code&gt; vs &lt;code&gt;DROP TABLE&lt;/code&gt;. A simple one, but essential.&lt;/p&gt;

&lt;h3&gt;
  
  
  DELETE FROM
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You should be able to undo this&lt;/li&gt;
&lt;li&gt;Deletes one row at a time&lt;/li&gt;
&lt;li&gt;Logs each row in the transaction log&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LSN&lt;/code&gt; (log sequence number) is kept, too&lt;/li&gt;
&lt;li&gt;Supports &lt;code&gt;WHERE&lt;/code&gt; clause for selective row deletion
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;table&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;books&lt;/span&gt; &lt;span class="c1"&gt;-- all has been dropped&lt;/span&gt;
&lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;books&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;author&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Smith'&lt;/span&gt; &lt;span class="c1"&gt;-- only Smith's books deleted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  TRUNCATE TABLE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;faster&lt;/li&gt;
&lt;li&gt;deletes all records in a table by &lt;a href="https://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/" rel="noopener noreferrer"&gt;deallocating the data pages used by the table&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;TRUNCATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="s1"&gt;'foo.bar'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DROP TABLE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Removes the entire table structure and all data&lt;/li&gt;
&lt;li&gt;Cannot be rolled back (most DBMS)&lt;/li&gt;
&lt;li&gt;Removes table definition from database schema&lt;/li&gt;
&lt;li&gt;Frees all space associated with the table
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;tablename&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;EXISTS&lt;/span&gt; &lt;span class="n"&gt;tablename&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  LINKS
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/" rel="noopener noreferrer"&gt;https://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
    </item>
    <item>
      <title>Explaining Relation and Data Independence in SQL</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Fri, 10 Jan 2025 17:44:02 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-relation-and-data-independence-in-sql-1225</link>
      <guid>https://dev.to/pkutaj/explaining-relation-and-data-independence-in-sql-1225</guid>
      <description>&lt;h3&gt;
  
  
  USECASE
&lt;/h3&gt;

&lt;p&gt;The aim of this page📝 is to explain data independence in relational and navigational database models, with a focus on Edgar F. Codd's definition of a relation, as I am not entirely by the following &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The term "relational database" refers to the fact that the tables within it "relate" to one another—they contain common identifiers that allow information from multiple tables to be combined easily.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://mode.com/sql-tutorial/sql-joins" rel="noopener noreferrer"&gt;https://mode.com/sql-tutorial/sql-joins&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Independence&lt;/strong&gt;: Refers to the separation of the schema of a database and the application that uses the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relational Model&lt;/strong&gt;: Provides data independence, making it flexible and easier to maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Physical Data Independence&lt;/strong&gt;: Changes in physical storage do not affect logical schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logical Data Independence&lt;/strong&gt;: Changes to the logical schema do not impact how data is accessed by applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Navigational Model predating relational model&lt;/strong&gt;: Lacks data independence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tight Coupling&lt;/strong&gt;: In navigational databases, data and application logic are tightly coupled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Impact of Changes&lt;/strong&gt;: Changes to the database structure in a navigational model require updates to the application code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Relational databases allow easier updates without disrupting applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database Maintenance&lt;/strong&gt;: Easier in relational databases due to the independence of data and schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Differences&lt;/strong&gt;: Understanding the main differences between relational and navigational models helps in choosing the right database for specific needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Definition of a Relation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Edgar F. Codd's Definition&lt;/strong&gt;: In his seminal 1970 paper, "A Relational Model of Data for Large Shared Data Banks," Codd introduced the concept of a relation. He defined a relation as a set of tuples, where each tuple is a sequence of attribute values. A relation is essentially a table with rows and columns, where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rows (Tuples)&lt;/strong&gt;: Represent individual records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Columns (Attributes)&lt;/strong&gt;: Represent properties of the records.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mathematical Foundation&lt;/strong&gt;: Codd's relational model is grounded in mathematical principles of set theory and predicate logic. A relation is defined as a subset of the Cartesian product of a list of domains. Each domain represents a possible set of values for an attribute.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Schema and Instance&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schema&lt;/strong&gt;: Defines the structure of a relation, including the attribute names and their domains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance&lt;/strong&gt;: Represents the actual data stored in the relation at a specific point in time.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Relation Example&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Customers
  +------------+-------------+
  | CustomerID | Name        |
  +------------+-------------+
  | 1          | Alice       |
  | 2          | Bob         |
  +------------+-------------+

  Orders
  +---------+------------+----------+
  | OrderID | CustomerID | Amount   |
  +---------+------------+----------+
  | 101     | 1          | $150     |
  | 102     | 2          | $200     |
  +---------+------------+----------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foreign Key Relationships&lt;/strong&gt;: In the relational model, tables are related to each other through common attributes (keys). For example, the &lt;strong&gt;CustomerID&lt;/strong&gt; in the Orders table is a foreign key that relates each order to a specific customer in the Customers table. This allows for structured and flexible data management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LINKS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Codd, E. F. (1970). A Relational Model of Data for Large Shared Data Banks. Communications of the ACM, 13(6), 377-387. &lt;a href="https://dl.acm.org/doi/10.1145/362384.362685" rel="noopener noreferrer"&gt;https://dl.acm.org/doi/10.1145/362384.362685&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dl.acm.org/doi/10.1145/3649887" rel="noopener noreferrer"&gt;50 Years of Queries | Communications of the ACM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://adventofcomputing.com/?guid=3d7080df-5546-4fde-967c-1d19e91c3562" rel="noopener noreferrer"&gt;What exactly is a database - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://adventofcomputing.com/?guid=9dfb582d-815f-45b6-b16f-13ab723e66ad" rel="noopener noreferrer"&gt;What exactly is a database - part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sql</category>
    </item>
    <item>
      <title>Explaining (the need for) SQL's Common Table Expressions (CTE)</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Fri, 10 Jan 2025 12:29:13 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-the-need-for-sqls-common-table-expressions-cte-2gag</link>
      <guid>https://dev.to/pkutaj/explaining-the-need-for-sqls-common-table-expressions-cte-2gag</guid>
      <description>&lt;h2&gt;
  
  
  usecase
&lt;/h2&gt;

&lt;p&gt;The concern is documenting the use of &lt;strong&gt;COMMON TABLE EXPRESSIONS&lt;/strong&gt; as used repeatedly in Redash when creating monitoring queries / reports. Also, I ran into the order of SQL operations learning that you cannot filter a derived column in the same statement where it is defined. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. what is CTE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A CTE (Common Table Expression) is &lt;strong&gt;TEMPORARY RESULT SET&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;You can reference within another SELECT, INSERT, UPDATE, or DELETE statement&lt;/li&gt;
&lt;li&gt;i.e. you can build it and use in later query&lt;/li&gt;
&lt;li&gt;used in more complex queries&lt;/li&gt;
&lt;li&gt;they are &lt;strong&gt;EXPRESSIONS&lt;/strong&gt;, i.e. they always return a value&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. syntax
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18xlj3ykmg3yyhqieh6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18xlj3ykmg3yyhqieh6q.png" alt="Image description" width="469" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0rzyd600ala98vfe6ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0rzyd600ala98vfe6ps.png" alt="Image description" width="736" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8fc1d73es7dtxk837p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl8fc1d73es7dtxk837p2.png" alt="Image description" width="653" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;easy to learn&lt;/li&gt;
&lt;li&gt;code readibility&lt;/li&gt;
&lt;li&gt;named query gives you info about query results&lt;/li&gt;
&lt;li&gt;readable SQL is a big help to others and to you after 2 months&lt;/li&gt;
&lt;li&gt;modularity&lt;/li&gt;
&lt;li&gt;copy-pastable, re-usable&lt;/li&gt;
&lt;li&gt;CTEs can be pasted together&lt;/li&gt;
&lt;li&gt;better matches how you think about data analysis&lt;/li&gt;
&lt;li&gt;Common Table Expressions (CTE) are often used to reduce the complexity of SQL queries. &lt;/li&gt;
&lt;li&gt;Sometimes, CTEs are not just a refactoring technique; they are necessary if you want to filter on a derived column.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sometimes, CTE is a necessity - not just a refactoring technique
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;See: &lt;a href="https://mode.com/sql-tutorial/sql-case" rel="noopener noreferrer"&gt;https://mode.com/sql-tutorial/sql-case&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The following &lt;strong&gt;breaks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="n"&gt;player_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="nb"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'SR'&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="s1"&gt;'yes'&lt;/span&gt;
       &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;
       &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;"is_a_senior"&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;benn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;college_football_players&lt;/span&gt;
&lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;is_a_senior&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;"yes"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;That returnes an error &lt;code&gt;column "is_a_senior" does not exist&lt;/code&gt; occurs when referencing a derived column in the &lt;code&gt;WHERE&lt;/code&gt; clause.&lt;/li&gt;
&lt;li&gt;It is because the order of SQL query processing:

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;FROM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WHERE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GROUP BY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HAVING&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SELECT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ORDER BY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LIMIT/OFFSET&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;WHERE&lt;/code&gt; clause is evaluated before the &lt;code&gt;SELECT&lt;/code&gt; clause, causing the derived column alias (&lt;code&gt;is_a_senior&lt;/code&gt;) to be unavailable in the &lt;code&gt;WHERE&lt;/code&gt; clause.&lt;/li&gt;
&lt;li&gt;The simple solution using Common Table Expressions (CTE) (there may be others) is as follows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;player_data&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;player_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="k"&gt;CASE&lt;/span&gt; &lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="nb"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'SR'&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt; &lt;span class="s1"&gt;'yes'&lt;/span&gt;
                &lt;span class="k"&gt;ELSE&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;
           &lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;is_a_senior&lt;/span&gt;
    &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;benn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;college_football_players&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;player_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="nb"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;is_a_senior&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;player_data&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;is_a_senior&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'yes'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. sources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mode.com/sql-tutorial/sql-case" rel="noopener noreferrer"&gt;https://mode.com/sql-tutorial/sql-case&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
    </item>
    <item>
      <title>How to Build Personal Curicullum Locally in Python</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Wed, 08 Jan 2025 22:07:00 +0000</pubDate>
      <link>https://dev.to/pkutaj/how-to-build-personal-curicullum-locally-in-python-kd</link>
      <guid>https://dev.to/pkutaj/how-to-build-personal-curicullum-locally-in-python-kd</guid>
      <description>&lt;h3&gt;
  
  
  USECASE
&lt;/h3&gt;

&lt;p&gt;The aim of this page 📝 is to explain how to learn SQL with Mode's tutorial using Kevin Li's approach with an exciting &lt;a href="https://news.ycombinator.com/item?id=41909827" rel="noopener noreferrer"&gt;HN discussion&lt;/a&gt; I embarked on my journey to learn SQL using Mode's tutorial and discovered an effective learning strategy from Kevin Li. His approach emphasizes three key points:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Quickly identify foundational knowledge.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build a personal curriculum to become an expert and avoid the trap of the expert beginner.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sprint hard for the first 15-20 hours to impress initial memory, then decelerate to a more regular pace.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;To build my &lt;strong&gt;personal SQL curriculum&lt;/strong&gt;, I'm using Mode's SQL Tutorial.&lt;br&gt;
I've added an ID (MST) to track my progress, and I quickly create files with numbers and titles of lessons using web scraping with Beautiful Soup. This method allows me to organize my learning material efficiently and monitor my progress easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python Code with Explainer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Initial Setup and HTML Parsing:&lt;/em&gt;&lt;br&gt;
We start by importing necessary libraries and fetching the HTML content from Mode's SQL tutorial page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://mode.com/sql-tutorial&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Extracting Titles:&lt;/em&gt;&lt;br&gt;
Next, we find all &lt;code&gt;&amp;lt;h4&amp;gt;&lt;/code&gt; elements which contain the lesson titles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;titles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;h4&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Creating Files with Formatted Titles:&lt;/em&gt;&lt;br&gt;
Finally, we create files for each title, formatted with leading zeros and appropriate naming conventions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;titles&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;_&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.md&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Replace spaces with hyphens and add .md extension
&lt;/span&gt;    &lt;span class="n"&gt;file_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Prepend index with leading zeros (2 digits)
&lt;/span&gt;    &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Open file in append mode to create or update access timestamp
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code ensures that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML content is fetched and parsed.&lt;/li&gt;
&lt;li&gt;Titles of the lessons are extracted.&lt;/li&gt;
&lt;li&gt;Files are created with formatted titles and indices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using this script, I quickly generate organized files in my file system and add content as I progress through the curriculum. This method aligns with Kevin Li's strategy, helping me track my progress and stay motivated in my learning journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=41909827" rel="noopener noreferrer"&gt;https://news.ycombinator.com/item?id=41909827&lt;/a&gt;&lt;br&gt;
&lt;a href="https://mode.com/sql-tutorial" rel="noopener noreferrer"&gt;https://mode.com/sql-tutorial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>productivity</category>
      <category>sql</category>
    </item>
    <item>
      <title>Explaining Null Device or Black Hole Register in Vim</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Tue, 07 Jan 2025 09:08:40 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-null-device-or-black-hole-register-in-vim-5afm</link>
      <guid>https://dev.to/pkutaj/explaining-null-device-or-black-hole-register-in-vim-5afm</guid>
      <description>&lt;p&gt;The aim of this page📝 is to explain the concept of registers in Vim, particularly the black hole register, and its comparison to &lt;code&gt;/dev/null&lt;/code&gt; in Bash. I am solving an incident where our design has something similar in event streaming context — we have a stream that works like a null device and we write data there in when it has to be written but it is just to discard it. In general, this is known as &lt;a href="https://en.wikipedia.org/wiki/Null_device" rel="noopener noreferrer"&gt;null device&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vim has a special register called the black hole register.&lt;/li&gt;
&lt;li&gt;The black hole register discards data without storing it.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;_&lt;/code&gt; (underscore) to specify the black hole register.&lt;/li&gt;
&lt;li&gt;Example commands: &lt;code&gt;"_d&lt;/code&gt; (delete without storing), &lt;code&gt;"_x&lt;/code&gt; (delete character) or &lt;code&gt;"_C"&lt;/code&gt; to change the whole line without yanking its contents to a register&lt;/li&gt;
&lt;li&gt;This concept is similar to redirecting to &lt;code&gt;/dev/null&lt;/code&gt; in Bash.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/dev/null&lt;/code&gt; discards data without saving it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example in Bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"This won't be seen"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example in Vim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;"_d&lt;/span&gt;
&lt;span class="c"&gt;"_x&lt;/span&gt;
&lt;span class="c"&gt;"_C&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vimhelp.org/change.txt.html#copy-move" rel="noopener noreferrer"&gt;https://vimhelp.org/change.txt.html#copy-move&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/dev-null-in-linux" rel="noopener noreferrer"&gt;https://www.digitalocean.com/community/tutorials/dev-null-in-linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Dev/null" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Dev/null&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vim</category>
      <category>bash</category>
      <category>linux</category>
    </item>
    <item>
      <title>Explaining Transaction Count as Important Constraint for adding additional AWS Kinesis Consumers</title>
      <dc:creator>Pavol Z. Kutaj</dc:creator>
      <pubDate>Thu, 02 Jan 2025 13:34:27 +0000</pubDate>
      <link>https://dev.to/pkutaj/explaining-transaction-count-as-important-constraint-for-adding-additional-aws-kinesis-consumers-1837</link>
      <guid>https://dev.to/pkutaj/explaining-transaction-count-as-important-constraint-for-adding-additional-aws-kinesis-consumers-1837</guid>
      <description>&lt;h3&gt;
  
  
  USECASE
&lt;/h3&gt;

&lt;p&gt;The aim of this page📝 is to explain the significance of monitoring CloudWatch metrics for Kinesis streams, particularly focusing on &lt;code&gt;GetRecords.Records&lt;/code&gt; and &lt;code&gt;SampleCount&lt;/code&gt;.&lt;br&gt;
Previously, I was only monitoring the volume limits. However, transaction count limits can also become important when adding additional consumers to the stream. After adding a new consumer, I started noticing latencies and a spike in the &lt;code&gt;ReadProvisionedThroughputExceeded&lt;/code&gt; metric.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GetRecords.Records&lt;/code&gt; metric counts the number of records retrieved from a shard in a specified time period.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SampleCount&lt;/code&gt; for &lt;code&gt;GetRecords.Records&lt;/code&gt; indicates the number of &lt;code&gt;GetRecords&lt;/code&gt; operations (transactions) performed.&lt;/li&gt;
&lt;li&gt;Monitoring &lt;code&gt;SampleCount&lt;/code&gt; helps in tracking the frequency of read transactions.&lt;/li&gt;
&lt;li&gt;Kinesis stream limits each shard to five read transactions per second.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;SampleCount&lt;/code&gt; ensures staying within the transaction quota.&lt;/li&gt;
&lt;li&gt;Adding a new consumer increases read transactions, making &lt;code&gt;SampleCount&lt;/code&gt; monitoring crucial.&lt;/li&gt;
&lt;li&gt;Monitoring &lt;code&gt;GetRecords.Bytes&lt;/code&gt; gives insight into the volume of data read.&lt;/li&gt;
&lt;li&gt;Balancing &lt;code&gt;GetRecords.Records&lt;/code&gt;, &lt;code&gt;GetRecords.Bytes&lt;/code&gt;, and &lt;code&gt;SampleCount&lt;/code&gt; provides a comprehensive view of stream usage.&lt;/li&gt;
&lt;li&gt;Exceeding transaction limits can lead to throttling or performance issues.&lt;/li&gt;
&lt;li&gt;Regular monitoring helps optimize stream performance and prevent issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html" rel="noopener noreferrer"&gt;Quotas and limits - Amazon Kinesis Data Streams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/streams/latest/dev/monitoring-with-cloudwatch.html" rel="noopener noreferrer"&gt;Monitor the Amazon Kinesis Data Streams service with Amazon CloudWatch - Amazon Kinesis Data Streams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>kinesis</category>
      <category>streaming</category>
      <category>grafana</category>
    </item>
  </channel>
</rss>
