{"@attributes":{"version":"2.0"},"channel":{"title":"bauer.codes","link":"https:\/\/bauer.codes\/","description":"Recent content on bauer.codes","generator":"Hugo -- gohugo.io","language":"en-us","copyright":"Copyright \u00a9 2024 Paul Bauer","lastBuildDate":"Tue, 29 Jul 2025 00:00:00 +0000","item":[{"title":"Pull Requests Are a Poor Fit For Agentic AI","link":"https:\/\/bauer.codes\/post\/2025\/07\/ai-pull-requests\/","pubDate":"Tue, 29 Jul 2025 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2025\/07\/ai-pull-requests\/","description":"Generative AI-assisted software engineering is here to stay, with all the consequences that brings. But the form it takes and the workflows we use to wield it? We are still in the spaghetti stage of product development, throwing everything at the wall to see what sticks.\nOne workflow product teams love is AI showing up with ready-to-go pull requests (PR). PR comments prompt the AI to update the solution, and the developer\u2019s only responsibility is code review."},{"title":"Profiling Bash","link":"https:\/\/bauer.codes\/post\/2025\/04\/bash-profiling\/","pubDate":"Thu, 24 Apr 2025 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2025\/04\/bash-profiling\/","description":"What makes this bash script slow?\nProfiling GNU Bash is annoying, but then what isn&rsquo;t with Bash? perf can give you a good idea where CPU resources go if you&rsquo;re on Linux, or as I&rsquo;ve recently taken to calling it, GNU plus Linux. But Bash is usually just glue for other programs, and no sane person writes anything substantial in Bash.\nStill, launching a new shell is taking more time than normal, and we need to know what recent change to ~\/."},{"title":"10 Years of Generative AI Slop","link":"https:\/\/bauer.codes\/post\/2025\/01\/10-years-of-genai-slop\/","pubDate":"Tue, 07 Jan 2025 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2025\/01\/10-years-of-genai-slop\/","description":"2025 Help Wanted: Artificial engineer, 10 years experience required.\nHot takes on the death of software engineering are legion. Boy, are Venture Capitalists hopped up on hopium over this. Imagine if AI could replace their biggest cost! No more profit sharing with expensive, uppity laborers coders. And the &ldquo;idea guys&rdquo;? The idea guys can focus on what they do best, think amazing thoughts while a machine makes it all real."},{"title":"touch sudo","link":"https:\/\/bauer.codes\/post\/2024\/03\/touchsudo\/","pubDate":"Wed, 27 Mar 2024 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2024\/03\/touchsudo\/","description":"I like Touch ID. I like to Touch ID with sudo. I like to Touch ID with sudo in tmux.\nUse with caution\nI may or may not have trashed my \/etc\/pam.d\/sudo file a few times getting this right.\nSo before showing how to use Touch ID with sudo on Mac OS, bonus pro-tip: how to un-bork your sudo file.\ncopy \/etc\/pam.d\/sudo file to $HOME edit, make fixes use Finder, drag-n-drop edited file to \/etc\/pam."},{"title":"Protecting Equipment from Surges","link":"https:\/\/bauer.codes\/post\/2024\/02\/surge-protection\/","pubDate":"Sat, 24 Feb 2024 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2024\/02\/surge-protection\/","description":"So you have a fancy-pants Home Lab\u2122 with commercial grade switches, Proxmox local &ldquo;cloud&rdquo;, 50 Gagillion PB NVMe NAS, and that kickn&rsquo; HPE 4U server pillaged from the carcass of your failed startup.\nThat&rsquo;s $40K of expensive equipment in a cheap Alibaba rack.\nIn your basement.\nVulnerable.\nTo one hundred year floods.\nDean Winters.\nAnd a $5 garage sale blender going out in a blaze of glory.\ngoals Let&rsquo;s fix that."},{"title":"Why Paul is a Socialist*","link":"https:\/\/bauer.codes\/post\/2024\/02\/unit-testing\/","pubDate":"Wed, 21 Feb 2024 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2024\/02\/unit-testing\/","description":"* when writing unit tests\nInfo\nblog adaption of my notes on unit testing.\nTesters of the system, unit [sic]! You have nothing to lose but your (mock dependency) chains!\n&hellip;in which we discover unit test philosophy and enlightenment. And may end up on a list for googling the communist manifesto.\nTerminology Like most software development terminology, [unit testing is] very ill-defined, and I see confusion can often occur when people think that it&rsquo;s more tightly defined than it actually is."},{"title":"Fast cljfmt","link":"https:\/\/bauer.codes\/post\/2023\/01\/fast-cljfmt\/","pubDate":"Sat, 28 Jan 2023 00:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2023\/01\/fast-cljfmt\/","description":"Update 2023-01-29: I&rsquo;ve since learned that clojure-lsp also includes a GraalVM-built cljfmt.\nI wanted a Clojure code formatter that: follows the community Clojure style guide and isn&rsquo;t as agressive as zprint, so weavejester\/cljfmt runs fast enough (&lt;50ms) to use as an editor filter, invoked on save is up to date - node-cljfmt and several GraalVM packagings of cljfmt are no longer maintained uses the stdio interface as expected by editor tools like format-all cljfmt and its GraalVM native-image packaging don&rsquo;t have #4."},{"title":"Reviewing Pull Requests","link":"https:\/\/bauer.codes\/post\/2022\/12\/code-reviews\/","pubDate":"Mon, 19 Dec 2022 17:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2022\/12\/code-reviews\/","description":"Context: This is excerpted from a Datadog-internal post I wrote on code review best practices.\nProfiling teams are splitting up OKRs into 2-3 person squads. This experiment is going quite well modulo some pain points around code reviews. As few squads have the luxury of more than one backend or frontend engineer, we need to get better at inter-squad reviews.\nAlso, we&rsquo;re hiring.\nReviewing Pull Requests Reviewers and authors experience an awkward power imbalance with the scales tipped to the reviewer."},{"title":"The CDR Fell Off","link":"https:\/\/bauer.codes\/post\/2022\/04\/the-cdr-fell-off\/","pubDate":"Fri, 29 Apr 2022 11:08:11 +0000","guid":"https:\/\/bauer.codes\/post\/2022\/04\/the-cdr-fell-off\/","description":"Last month my former colleague, Chouser, invited us to work through Lisp in Small Pieces (LiSP) as a group. Forty-six of us joined the group slack and are working through Chapter 1 exercises right now. Allegedly.\nAmazon says LiSP landed in my wish list mid-2015, so it&rsquo;s high time I checked this one off. Coincidentally, 2015 is the last I worked on the LonoCloud team and wrote Clojure for a day job."},{"title":"An HAProxy, segfaulted, choose-your-own adventure","link":"https:\/\/bauer.codes\/post\/2016\/07\/haproxy-segfault-adventure\/","pubDate":"Tue, 19 Jul 2016 07:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2016\/07\/haproxy-segfault-adventure\/","description":"Originally published on Medium.\nReverse proxy routers mysteriously segfault. Docker ignores your cries for a core dump. Stack Overflow quietly smirks at your solitary misfortune. You can retreat to defetal position and give up on your microservices dream, or you can pick up your gdb, face down Docker, and go to war.\nProduction is war, and war is hell. \u2014 Bryan Cantrill, Dockercon 2015\nbackstory IBM 1401 core memory\nIn early May your team visited the Computer History Museum and enjoyed a lovely demonstration of a restored IBM 1401."},{"title":"Reactive Binary Clock, Hoplon Edition","link":"https:\/\/bauer.codes\/post\/2014\/01\/hoplon-binary-clock\/","pubDate":"Mon, 27 Jan 2014 08:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2014\/01\/hoplon-binary-clock\/","description":"Demo \u2022 Source Code\nReactive programming is taking a ride on the Computer Science pop culture carousel, and attracts an impressive list of corporate sponsors: React (Facebook), Rx (Microsoft), RxJava (Netflix), Elm (Prezi).\nIn the Clojure world, two libraries getting buzz with reactive cores are Om (built on React) and Hoplon.\nOm and a post by Fredrik Dyrkell inspired this binary clock demo in Hoplon.\nHoplon Hoplon is ambitious, seeking to unify HTML page markup and the JavaScript environment."},{"title":"Guy Lewis Steele's Wordsplit, Redux","link":"https:\/\/bauer.codes\/post\/2013\/09\/gls-wordsplit-redux\/","pubDate":"Thu, 05 Sep 2013 07:00:00 +0000","guid":"https:\/\/bauer.codes\/post\/2013\/09\/gls-wordsplit-redux\/","description":"UPDATE: 05 September 2013 (later) Thanks to some prodding from Jozef Wagner, I reworked the solution to use Clojure reducers for the combine step.\nSpeedup now nearly scales linearly with processor count.\npreviously on 24 &hellip; Guy Lewis Steele&rsquo;s Wordsplit and the Reducers - in which we applied GLS&rsquo; algorithm on clojure.core.reducers\/fold and learned some limitations. We then used some trickery to batch-reduce text sections on fork\/join and successfully split text in parallel."},{"title":"Guy Lewis Steele's Wordsplit and the Reducers","link":"https:\/\/bauer.codes\/post\/2013\/09\/gls-wordsplit-and-the-reducers\/","pubDate":"Tue, 03 Sep 2013 08:00:00 -0700","guid":"https:\/\/bauer.codes\/post\/2013\/09\/gls-wordsplit-and-the-reducers\/","description":"UPDATE: 05 September 2013 Guy Lewis Steele&rsquo;s Wordsplit, Redux, in which we address the issue raised below.\nUPDATE: 04 September 2013 A reader pointed out an issue with the benchmark, namely some lazy seqs not being realized. I updated the code and post. Now the parallel speedup, while existing, is not as impressive as previously measured. The initial observations regarding the use of reducers for this problem are still relevant. More work to come."},{"title":"quine in awk","link":"https:\/\/bauer.codes\/post\/2011\/09\/awk_quine\/","pubDate":"Fri, 09 Sep 2011 22:26:00 -0700","guid":"https:\/\/bauer.codes\/post\/2011\/09\/awk_quine\/","description":"Quines are self-printing programs. Here&rsquo;s one for fun in awk (gnu awk).\nsource quine_gawk.awk\nBEGIN{S=&#34;BEGIN{S=\\&#34;%s\\&#34;;s=S;gsub(\/\\\\\\\\\/,\\&#34;\\\\\\\\\\\\\\\\\\&#34;,s);gsub(\/\\\\\\&#34;\/,\\&#34;\\\\\\\\\\\\\\&#34;\\&#34;,s);printf(S,s)}&#34;;s=S;gsub(\/\\\\\/,&#34;\\\\\\\\&#34;,s);gsub(\/\\&#34;\/,&#34;\\\\\\&#34;&#34;,s);printf(S,s)} usage awk -f quine_gawk.awk 2&gt;\/dev\/null | diff quine_gawk.awk - "},{"title":"Quick(er)sort, Parallelism, and Fork\/Join in JDK7","link":"https:\/\/bauer.codes\/post\/2011\/05\/quickersort-fork-join\/","pubDate":"Fri, 27 May 2011 01:00:00 -0700","guid":"https:\/\/bauer.codes\/post\/2011\/05\/quickersort-fork-join\/","description":"Most men age twenty-six can boast few accomplishments. Sir Charles Antony Richard Hoare is not most men. At that age, C.A.R. Hoare invented Quicksort (pdf).\nQuicksort is typically more efficient than other comparison sorting algorithms in both auxiliary memory requirements and execution cycles. Yet, it shares the same common case time complexity limit of its peers - O(n*log n).\nParallelism is the tool to effectively breach that barrier. As a binary tree sort, Quicksort is especially suited for parallelism since multiple threads of execution can work on sorting task parts without synchronized data access."}]}}