Category: Software Development

  • A change of paradigm

    People used to have to go to a library when they needed to research something.

    Software developers used to have to buy physical books to try and learn or debug something.

    And then the internet and search engines appeared.

    Software developers used to have to visit Stack overflow and GitHub issues to try and learn or debug something.

    And then LLMs appeared.

    They’re not perfect and sometimes get things wrong, but the technology changed how we approach problem solving (and they can only get better!).

  • Bare bones Docker containers

    Ever since I started using Docker, six years ago, I’ve wanted to use it for every single thing I work on, be it a project from my day job or a hobby project I’d like to start.

    Back in January, I wrote about wanting to learn React and automated deployments using GitHub Actions. I learned about the latter and tried to do the former but got stuck in the initial setup and gave up.

    How are these two things related? Well, I got stuck trying to create and run a node environment with Docker. A downside of getting used to Docker is that it now feels dirty installing and configuring stuff directly in my host OS. There’s a lot of valid reasons to avoid doing it but that’s not the point of this post.

    I’ve tried to learn React, Node, Go, and Python, and every single time I would get stuck trying to create a Docker environment for each of those languages and frameworks. It was a combination of a lack of experience with them (and their ecosystem) and a lack of information on using Docker for development. There actually is a lot of info out there but for some reason most of, if not all, the examples and tutorials are directed to containerize existing applications, which I don’t have because I’m starting from scratch.

    I’ve been looking for a way to setup a container with a Linux OS and just the language installed so I can tinker with it and install anything I need inside… and I finally found it.

    It turns out I wasn’t using the right terms when searching because the information was there.

    By adding these two lines to a container specification in the compose.yml file, it makes it an interactive one where you can log into and do whatever you need to:

    stdin_open: true # docker run -i
    tty: true        # docker run -t

    This helps me because the last line of my Dockerfile would look like this:

    CMD ["/bin/bash"]

    That’s not a long lasting process so if you try to run the container the normal way, it’ll automatically stop and exit.