Paul's Thoughts on Computing and Other Stuff

I'm Paul Parks, a software consultant based in Singapore. This was once the web site for my freelance consulting company, but now it's a repository for my articles on software, computing, and any other topics I might feel like pontificating upon.

If you'd like to know more about my skills and background, please take a look at my resume.

If you find any of these articles interesting, or if you'd like more information on a particular topic, let me know.

  • Sudoku

    I didn't like most of the Sudoku apps I found, so I decided to write one as a fun little evening and weekend project. It lets you edit and share games.

  • Fixing the Plumbing

    Imagine you live in a house where none of the taps have handles. The way you turn on the water is by reaching underneath the sink and turning the shutoff valve to control the flow of the water to the sink. Imagine further that this is the only kind of house you've ever lived in, so you've never known anything different.

  • Discovering the Power of Guitar

    I was a shy kid who wasn't the type to attract attention to myself. When it came to girls, I might as well have been invisible. Then, one day, I brought my guitar to school.

  • How Many Years of Pizza Do You Have?

    When I was job hunting, one of the most common questions I would get from recruiters was, "How many years of experience do you have with XYZ technology?" I thought of an analogy to explain why it's so difficult for technology professionals to answer accurately, especially at the senior level.

  • The Next Train to Bracknell

    During one of my many trips to England, I was at a train station late one night, trying to get back to my hotel after visiting with a good friend and colleague. I was still new to the train system, and I wasn't sure if the next train approaching went to Bracknell, where I was staying.

  • Barcode Flash Cards

    I'm getting back into the retail point-of-sale space, and I needed a way to brush up on my skills at identifying barcode symbologies on sight, so I cooked up a little web app that generates barcode flash cards.

  • "That sounds so much more exotic than here!"

    My first trip to England was in the summer of 2013. I spent all of June and July there, embedded with a team at Fujitsu in Bracknell, Berkshire, designing an NCR self-service checkout system for the UK Post Office. I stayed at a hotel in Bracknell and walked to the Fujitsu office each morning. It was nice to be outside of London and all of its hustle and bustle. Other than the fact that I was l...

  •  · Updated
    Just Spell the Month

    There was once a software project that was run by an American company for a client in the UK. One of the project documents mentioned a deliverable with the date 10-05-2013. The client was, of course, expecting this deliverable to be completed on the tenth of May, but the team in the US was delighted to find that it wasn't due until October 5th. Fortunately, the American team lead (who also happ...

  • I Hate Screenshots of Text

    During the course of a regular working day, I receive a lot of screenshots like this from well-meaning colleagues:

  • Act Now Before Price Increase

    This is an actual, honest-to-goodness advertisement clipped from the Atlanta Journal-Constitution a few years ago.

  •  · Updated
    Parks' Laws of Debugging

    Over my life as a software developer, I've collected several rules of thumb that guide me in my work, but these two "laws" have been remarkably useful. Like a lot of so-called laws in software development, they're just heuristics, but they have held up so many times that I assume they're true until proven otherwise.

  • On Travelling

    I use train tickets and boarding passes as bookmarks, which of course makes me a weirdo in a couple of ways....

  • Vibe Coding

    It seems everyone's talking about "vibe coding" and how anyone can write Space Invaders in an afternoon. That's great, if you want Space Invaders, but what if you want to create something that's never been done, at least not in the way you envision it? No AI agent is going to write that for you, precisely because it's never been done.

  •  · Updated
    Résumé of Paul Parks

    Fitting almost 35 years of professional experience into a four-page Microsoft Word document is a daunting task!

  •  · Updated
    Excel Employee Capacity Spreadsheet

    Once, when working for a professional-services organisation, I managed a team of business analysts and another team of software engineers. As professional-services employees, they were assigned to customer projects, sometimes more than one project at a time. Our organisation had KPIs for employee utilisation, so making sure employees were assigned to enough proje...

  • Personas In the Wild

    If you've been around software product management long enough, you've encountered the concept of "personas," which are fictional characters that represent types of system users. I've used those from time to time to distill user requirements and to keep myself, and my team, focused on our users.

  • Becoming a Developer Overnight, In Only Five Years

    This post was inspired by an article on Cal Newport's site that caused me to reflect on my path to my current career.

  •  · Updated
    New Website Design

    I'm in the process of porting my site to ASP.NET Razor Pages using .NET 7.0, hosted on Azure. I'm still very early in the process, so it's quite rough around the edges, but it's already much easier to use that my old host on WordPress.

  •  · Updated
    FizzBuzz

    The FizzBuzz test is just one of those things you have to write, apparently. Before anyone asks, here is mine, in C++.

  •  · Updated
    Set-Associative Cache in C#, Part 2: Interface Design

    This is part 2 of a three-part series on implementing a set-associative cache in C#. In part 1, we looked at how set-associative caches work and sketched out the basic design. In this part, we’ll expand on the design a bit more and define a code interface for the cache. In part 3, we’ll turn the design into working code.

  •  · Updated
    Set-Associative Cache in C#, Part 1: Analysis & Initial Design

    A couple of weeks ago, I had never heard of a set-associative cache. Then, I was assigned an interview exercise on HackerRank entitled “Set-Associative Cache Optimization”. (I won’t give away the company or any details about the exercise, since that wouldn’t be fair.) Since I hadn’t heard of such a cache, I decided to learn about it and implement one in C# before...

  •  · Updated
    Barbecue and Project Management

    As I begin to write this article, it’s 8:30 on the Saturday morning of Memorial Day weekend, the de facto start of the summer season in the United States. In most parts of the country, and especially in the South where I live, that means it’s also barbecue season.

  •  · Updated
    Scheduling Every Minute, Revisited

    Late last year, I published an article entitled “How I Plan Every Minute of My Day to Stay Productive,” where I described my personal daily workflow of planning the tasks that I need to accomplish and then adjusting that plan as necessary throughout the day. I have a new job now, so I want to post an update on how well the approach is working in a new environment with ne...

  •  · Updated
    Conway’s Game of Life

    I realized one day that I had never implemented Conway’s Game of Life, which is something of a rite of passage for young computer-science students. As I opted for a more non-traditional path to the software profession, I somehow missed that fun, even though I’ve made a point of implementing other computer-sciency things like it.

  •  · Updated
    How I Plan Every Minute of My Day to Stay Productive

    Over the years, I have progressed from being a software developer who focuses on code all day, to a designer who designs and codes, to a technical lead who communicates a design and technical strategy to a team of developers, to a technical and project lead who leads developers in the implementation of a project while communicating with customers and other stakeholders. ...

  •  · Updated
    pbrain Language Compiler

    The pbrain programming language is an extension I made to the Brainf**k programming language that adds the ability to define and call procedures. If you’re wondering about the asterisks in the name of the programming language, it’s because the name is rather rude. That’s why I decided to use a name for my extension that a good bit tamer. After all, my Mom and my kids still read my site from tim...

  •  · Updated
    WinDragSens – Graphical Drag Sensitivity Utility

    In response to a comment regarding the console-based version of the drag sensitivity utility, I’ve created a new version of the utility that includes a graphical interface and a means of testing the drag settings in the interface.

  •  · Updated
    Dragsens – Console-based Drag Sensitivity Utility

    Inspired by an article by Raymond Chen about how to correctly change the Windows mouse drag sensitivity, I wrote a simple utility called dragsens. It's a small command-line utility that will allow you to change the number of pixels the mouse has to travel before a drag operation is initiated. Just download and unzip the utility, then run it at the command line.

  •  · Updated
    Master Foo and the Technical Recruiter

    I found Eric Raymond’s Unix Koans of Master Foo several years ago and simply loved them. Like the Zen koans they are taken from, they are a succinct way to communicate concepts of software development, specifically as they relate to the Unix development subculture.

  • George Orwell and Effective Coding

    I spend a lot of time and effort trying to get better at the craft of software development. My goal every day is to fall asleep as a better programmer than the one that awoke that morning. While this involves a lot of reading and practice within the field, I usually learn more by studying older disciplines since software development is still such a young craft.

  • COMPUTE! Magazine Archives!

    I love the Internet! I just found an archive of COMPUTE! magazine, which is the magazine that taught me how to program in the 1980's. Just recently I was lamenting not keeping every single issue I ever had (which was most of them), but now I can flip back through them any time. Looking through the site really brought back some memories of when I first started ...