Skip to main content Alex Collie's blog

Posts

2025

  1. Choosing a gRPC communication strategy

    Overview of the problem

    One of the key parts of the design of my search engine is the ability for the spiders to send the pages which they have explored to a central point. Additionally, a more conventional design might use a push/pull system, so the conductor polls each spider in turn and requests the pages which it has seen using pagination. This has several problems.

  2. Search Engine Update 1

    As, I mentioned in my last post . I’ve been busy building my search engine lately, and it’s been a lot of fun diving deep into Kubernetes and learning how to set everything up from scratch.

    Overview of the System

    Diagram of the full search engine

  3. Building a Search engine

    I was re-reading “I am feeling lucky” and this inspired me, so I have decided to create a search engine. This is a very ambitious project; however, it will teach me a lot about building a micro service with Kubernetes all from scratch.

    My plan is to refactor the spider to use a relational database. I am learning towards each spider having its own SQLite db. Then create a service which can go to the spiders and get their current crawl and add them to a central DB. This will create a single graph of all the visited notes.

  4. How does my router know how to get to Google.com

    At first glance, this question might seem trivial. However, the process behind a browser loading a webpage is a complex marvel that we take for granted every day—handling millions of requests and intricate routing to reach servers like Google’s. Let’s take a journey into this process.

    We’ll break it down into two main steps: first, discovering the site’s address, and second, retrieving data from that site. For the sake of brevity, some details will be simplified.

2024

  1. 2024 Review

    As 2024 draws to an end, it’s time for me to reflect on the year’s achievements and challenges.

    Professional

    Overall, 2024 was a year of growth, and I’m really happy with the improvement in the quality of my work. Here’s what I learned and worked on:

  2. 2025 Goals

    I want to put these out in the open in order to give my self some accountability.

    1. More Blog posts

    I have started more this year (2024) however I want to continue this trend into 2025. The goal is 1 post a month.

  3. Apps I found useful in 2024

    As the year draws to a close, I thought I would reflect on some of the apps I found really useful in 2024.

    1. Things3

    I have been using Things3 for around six years, and it has been working really well for keeping me focused. In particular, I love having the lock screen widget to pressure me into completing daily tasks.Website things3

  4. Hello Hugo

    I have been a happy WordPress user for the past eight years. It has served me well, but the time has come to explore other options for hosting my blog.

    My Requirements for a New Platform

    Before choosing a new platform, I outlined a few key requirements

  5. Deep vs Wide problems and Icebergs

    I recently had to explain why a task was taking longer than expected, and I needed a place to vocalise my thoughts, so here we go. In my experience generally there are two kinds of problems which tasks can be put into(not some tasks can be both). Wide problem being something is not necessarily difficult to implement but it’s changes require changes all over the code bases, an example being a blocking mechanism. Deep problems are problems which will be complex but in a very limited domain. An example might be adding a new feature which is distinct and does not rely on too much other code. Image of wide vs deep problems

  6. Binary Search explained

    I believe in order to understand something you need to be able to explain it to somebody else.

    In that light here is me helping you helping me. I will try and do this for other data structures and algorithms.

    Binary search is a search method for searching in a ordered list. Order in this sense meaning the list has a hierarchy that might be purely numeric/temporal but it also could be lexicographical like alphabetical ordering.

  7. How I would Learn Programming from Scratch

    I have been programming earnestly for about 8 years and professionally for 5 years. I have experience in front-end development, back-end development, and data science. My path is fairly traditional, considering I initially learned by myself and then continued my education as part of my undergraduate studies and during my placement year.

    1. Start with Python. Regardless of whether you plan on learning front-end, back-end, or data science, Python will help you grasp the fundamentals without getting bogged down in syntax, which is something I struggled with initially. While syntax is important, it can be a barrier for many people. I started with Java, which wasn’t a horrible idea, but I spent a lot of time learning higher-level concepts like OOP that were only useful much later on.
    2. Start creating things as soon as possible. There can be a temptation to watch YouTube videos, follow guides, and copy and paste the results, but this often gives a false sense of learning. When it came to tasks outside the domain of these guides, I struggled. Instead, look up how to do the specific subtasks needed but not the entire project. Learning a language is similar: knowing words and syntax is important, but knowing how they fit together leads to fluency. Example projects to start with include a diary application, a to-do list, and Hangman. All of these are CLI utilities, so you won’t get bogged down in display methods.
    3. Learn how to read documentation. It might sound trivial, but being able to read and fully understand documentation without examples is a key skill that will be invaluable in the future.
    4. Start reviewing other code and look at how projects are structured, particularly on GitHub.
    5. Experiment with other areas of programming. For example, if you are interested in making websites, try learning JavaScript or TypeScript. If you are interested in making applications, try using Tkinter. If you are into making games, consider looking at Godot.

    It’s important to have fun while learning. If you don’t enjoy the learning process, you might find programming hard to enjoy. Learning new skills is a massive part of programming, and it’s a constant journey of learning from others.

  8. Making a cloud Native webcrawler in Go

    map of internet Over the past few weeks I have been making a webcralwer. I wanted to do it as way to get better at Go with useful for learnings for Graph databases as well as being fun. The project made use of cloud native items such as AWS SQS, DynamoDB and optionally Neptune which could be swapped out for Neo4j.

    What is a webcrawler?

    A webcrawler or web spider is a program which visits a website, and fetches all of the links on that site and then visits them. This is how sites like Google/Bing/DuckDuckGo get the pages to populate when searching.