• Finding Broken Links

    HTML powers the web, in great part by providing a way to link to other content. Every website maintainer dreads having broken links: Those that when followed result in a document that is no longer there.

    I remember that when I first learned to hand-write HTML (yes, last century) I used a Windows utility called Xenu’s Link Sleuth. It allowed me to check my site for broken links. I don’t use Windows anymore, but wget turns out to have everything I need.

    Based on an article by Digital Ocean, I created a script that checks for broken internal1 links:

    #!/usr/bin/env bash
    # Finds broken links for a site
    #
    # Usage
    # find_broken_links http://localhost:3000
    
    ! wget --spider --recursive --no-directories --no-verbose $1 2>&1 | grep -B1 -E '(broken link!|failed:)'
    

    It uses wget to spider (or crawl) a given URL and recursively check all links. All output is redirected and filtered to print only the broken links or other failures. The ! before the invocation inverts the process output: grep typically returns a non-zero (error) code if there is no output, but in this case we consider that a success.

    Running against this blog found 3 broken links!

    Now, my Makefile has a test target:

    test:
      find_broken_links http://127.0.0.1:4000
    

    I run it before every deployment (including posting this very post), to ensure I have not introduced bad link :-)

    1. By default, wget will not spider links in other hosts, but can be configured with --span-hosts to do so, to also check that external links are still valid. While I consider a broken internal link something that I must fix, a broken external link is something that another website operator broke. Their url is no longer valid, but I don’t necessarily want to do anything about it. 

    Read on →

  • The REPL: Issue 90 - February 2022

    What do you really get from IDE-driven development?

    The author reflects on why development with an IDE is not that useful. In effect, it creates a local maximum that can trap you into thinking it’s a global maximum.

    In effect, as my friend experienced in his coding class, these sorts of things don’t make better programs and don’t make us better programmers. We end up knowing less than we should and get less than we deserve.

    I’ve never warmed to IDEs myself. I’ve typically found them too constraining and wanting to take over all of my development workflow at once: How I setup my project, how I declare dependencies, how I setup my tests, how I compile my code. It feels like an all or nothing affair. I’ve long1 preferred a programmer’s editor: Syntax highlighting, code navigation, and the ability to automate when I want it.

    That Wild Ask A Manager Story

    This article references a story that was new to me: The person interviewed is not the same person that shows up for work. This author’s takeaway is interesting. Instead of overreacting, he would do nothing:

    The premise here is simple: designing a human process around pathological cases leads to processes that are themselves pathological.

    1. Last century, my editor of choice was Edit++. Except for the command palette, it’s capabilities are not that different than Atom, my preferred editor today. 

    Read on →

  • The REPL: Issue 89 - January 2022

    The UX on this Small Child Is Terrible

    This is pretty funny. Reminds me of Introducing JIRA Jr. Project Tracking… for kids

    In Defence of the Boring Web

    I made the exact same decisions as the author to create this very website: Markdown source, a static site generator, little javascript (in my case none), and a minimalist theme. However, I don’t think boring is a good word. My dictionary defines it as:

    not interesting; tedious: I’ve got a boring job in an office.

    Instead, I would use a word that connotes tried-and-true, simple, adequate for the job. Reliable comes to mind.

    On the Various OSS Fauna

    I didn’t know about WikiFauna. I like the idea a lot: To outline the different roles that people can take to contribute to the project. I am not sure about fauna as a term, or that calling folks elves, cyclops, fairies, gnomes is useful at all.

    Nate Berkopec does a great job in adapting the idea to OSS and correctly points out that most OSS is volunteer work: You decide your level of involvement.

    Read on →

  • Playing Evil Wordle With Unix

    It seems that nowadays everyone is playing Wordle. And for good reason. It is a lot of fun! There is an evil variant, Evil Wordle that is, well, evil:

    There’s no word set by default. Every time you guess, I look at all possible 5-letter words that would fit all your guesses, and choose the match pattern that results in the most possible words. My goal is to maximize the amount of guesses it takes to find the word.

    Let’s play with unix tools at our disposal. To be on the same playing field, I took a peek at the source in the browser, and downloaded the list of words that are part of the game dictionary:

    Read on →

  • The REPL: Issue 88 - December 2021

    Programmers Should Stop Celebrating Incompetence

    DHH is well known for kicking up a storm. I don’t always agree with him. In this case, I do. We can strive for competence and embrace newcomers to programming. Software challenge us to learn new things all the time, but that doesn’t mean that we don’t know anything.

    Against my better judgement to never look at the comment section, I glanced at some of the reaction on Twitter. A lot of the objections seem to be saying “Stop telling people they can’t look up things on the internet”. Example:

    You must have everything you need to know to do your job memorized You know, like doctors and lawyers and mechanical engineers Riiiight

    DHH didn’t say any of that. He said that you should be working to improve your knowledge in the areas that you choose, and not pretend like no one knows anything.

    Be Curious, Not Judgmental

    It is tempting to trash others work and belittle it. It can make us feel bigger, smarter, better. It is not conducive to learning and deep insight. If instead we adopt a curios mindset, the results can be quite different. The post illustrates the point well.

    How to rest well

    This post by Alex Soojung-Kim Pang reinforces my belief that rest is a competitive advantage. Being well-rested improves cognition. Downtime, and time for hobbies is important and should be prioritized. “All work” is a terrible mindset.

    Read on →