[{"content":"Hello, My name is Gabriel Baltazart. I am currently an undergraduate student studying at the Univeristy of Alberta. My passion is taking ideas and bringing them to life.\n","date":"17 November 2025","externalUrl":null,"permalink":"/","section":"","summary":"","title":"","type":"page"},{"content":"","date":"17 November 2025","externalUrl":null,"permalink":"/tags/cloudflare/","section":"Tags","summary":"","title":"Cloudflare","type":"tags"},{"content":"","date":"17 November 2025","externalUrl":null,"permalink":"/series/personal-portfolio-site/","section":"Series","summary":"","title":"Personal Portfolio Site","type":"series"},{"content":" Introduction # In this article I describe the initial idea and design process behind creating a personal portfolio website.\nBefore writing a single line of code and making any purchases it is important to understand that exact design requirements for the website. My main audience for this website is potential recruiters. Knowing the statistic that the average recruiter spends six to seven seconds looking at a potential candidate\u0026rsquo;s resume, my goal is to showcase as much of my skills as possible on the homepage of my website. Following this idea I plan to have a video background featuring my latest project, three featured projects at the bottom of the page, and a contact button right in the center.\nGeneral Layout # It is very easy to lose hours by spending time making small changes to the HTML and CSS elements that don\u0026rsquo;t even make it into production. To avoid this, an important step in the design process was drawing a rough layout. While I could have created a professional demo in a program such as Figma, I didn\u0026rsquo;t see as much value in creating a comprehensive demo as I was working on this project alone and did not need to communicate my ideas to a supervisor or to other team members. Design requirements # The main ethos behind this project is to have a secure, easy to deploy, quick to update site where I can focus on showcasing my talents rather than a site that requires constant tweaking of the hosting configuration and website code. Below I have listed detailed requirements of this project\nLow cost The cost of running the website should not exceed my budget of $30 per year This means need to compare different top level domain names (TLDs) and registrars to find a deal that fits within my budget Low maintenance After being setup, the website should not require my constant attention to stay running on the internet This means that I will need to look into website hosting providers rather than using a self-hosted situation Content management system After the initial setup of the website, I need to be able to write and edit articles on the website without having to manage the hosting or code of the website My goal is to write articles in Markdown in the Obsidian editor and have the completed articles automatically be formatted to markup and published to the website. Responsive The website needs to be viewable on any device, this means creating a responsive design that adapts to the aspect ratio of a mobile or desktop browser There are already many examples of web dev projects that have accomplished this I will need to look into what option fits my project that best Fast loading times Following the idea that the average recruiter spends about 45 seconds on a resume, the website should be able to load quickly on a typical internet connection Good search engine optimization Ideally I would like my website to appear in search engine results for my name, this means looking into search engine optimization Secure While my website will not be handling any user data from visitors, there are still security considerations in avoiding domain hijacking and ensuring that the content of the website cannot be changed without my knowledge. Thumbnail image by Glenn Carstens-Peters on Unsplash\n","date":"17 November 2025","externalUrl":null,"permalink":"/projects/personal-portfolio-site-design-requirements/","section":"Projects","summary":"","title":"Personal Portfolio Site Design Requirements","type":"projects"},{"content":" Introduction # This article is the first article in a series covering the thought process, design, challenges, and final product of creating my personal portfolio site. Click the dropdown at the top or bottom of the article to explore the other entries in this series.\nIn this article I give a general overview of the technologies used and the workflow behind the website. Explore the other articles to learn more about the design requirements and build process of the website.\nWhile the end product provides great value in promoting my personal brand and providing a platform to showcase my skills, this project was also valuable as an opportunity to practice the engineering design process.\nTechnologies used # The main technology used in this site is a static site generator called HUGO. The biggest advantage of a static site generator compared to a dynamic site generator is speed. Each time my site is served to a client the web server only needs to provide the stored html and css files. Written in Go, HUGO is also incredibly fast at rebuilding the website when making changes to the content or the template. Unlike dynamic sites, static sites remove the need for a database which subsequently increases security by reducing the attack surface.\nMy development environment of choice for creating the website was Visual Studio Code. The ecosystem of plugins and git integration for version control made it really easy to keep track of progress during development. I could also keep my development environment organized by using the integrated terminal to run the HUGO test.\nI used GitHub as my remote repository of choice. The main reason for this choice was to increase my familiarity with a tool that is industry standard for any process that requires collaboration when writing code.\nMy service provider of choice for web hosting was Cloudflare. Out of the options I evaluated I found that the Cloudflare Workers free plan was more than enough for the traffic that I expect on my website. Cloudflare Workers is convenient as I can automate the build process of my site and configure a worker to automatically rebuild the site when a change is detected in the GitHub repository of the website.\nI chose Cloudflare as my registrar as I found their pricing to be the most transparent and cost-effective in the long term. While purchasing my domain from Cloudflare limits my choice of nameserver to Cloudflare\u0026rsquo;s nameservers, this is not an issue as Cloudflare supports all the features that I would want such as DNSSEC. In addition, having Cloudflare as my registrar and web host made setup very convenient as the DNS records were automatically generated by Cloudflare as I was configuring the web hosting.\nWorkflow # One of the key ideas behind the portfolio website was to easily write or edit articles on my website without having to manage the hosting configuration or the code of the website.\nThis led me to develop a custom workflow that integrated into the static site generation. Articles on the website are written in Obsidian, this provides me with a nice user experience as I can have a \u0026ldquo;what you see is what you get\u0026rdquo; experience while writing with Markdown, similar to a word processor such as Microsoft Word. Obsidian is the ideal editor choice due to its \u0026ldquo;file over app\u0026rdquo; philosophy, allowing me to open the content directory from the folder tree of my website as an Obsidian vault.\nOnce articles are written, I create a commit to my local git repository. Before publishing and while writing I can also preview how my articles will look on my website using the HUGO development server.\nAfter I am ready to publish my changes to the production site, I push my changes to the remote repository hosted on GitHub. The changes are then automatically detected by the Cloudflare Worker that I set up. The Cloudflare worker runs the HUGO site generation, converting all the markdown articles into beautiful markup, and the updated site is published live at gabrielbaltazart.ca\n","date":"17 November 2025","externalUrl":null,"permalink":"/projects/personal-site-overview/","section":"Projects","summary":"","title":"Personal Portfolio Site Overview","type":"projects"},{"content":"This is where the write-ups for all my projects live. Here you can explore the thought process, design requirements, build logs, and lessons learned from each of the projects that I have tackled.\nWarning The information on this site is provided “as is” for educational purposes, without warranty of any kind, express or implied\n","date":"17 November 2025","externalUrl":null,"permalink":"/projects/","section":"Projects","summary":"","title":"Projects","type":"projects"},{"content":"","date":"17 November 2025","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"17 November 2025","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":" Introduction # This article covers all the technologies that I encountered while researching possible options for this project, as well as the thought process behind the final choices that I made.\nStatic VS Dynamic Sites # The first choice I made in this project was choosing between a static or dynamic site. Unlike a website like Amazon, my website does not need to be different for each user, so there is no need for a dynamic site with a database. Hence, I chose to use a static site generator.\nThe biggest advantage of a static site generator compared to a dynamic site generator is speed. When the site is served to a client the web server only needs to provide html and css files that have already been built. Removing the database also increases security by reducing the attack surface.\nStatic Site Generator # Astro # When searching through recommendations one of the most modern static site generators I came across was Astro. The biggest selling point of Astro is fast page load times for users as no JavaScript is sent to the client by default. In addition, Astro has the ability to use React, Vue, Preact, Svelte, and Solid frameworks all within the same project. I found this options quite appealing as I like the idea of being able to expand to different frameworks in the future without having to switch technologies entirely.\nJekyll # Jekyll was the first option that I heard about when I was first researching static sites as it was mentioned in the GitHub Pages Docs. While Jekyll doesn\u0026rsquo;t have the latest features like Astro it has the advantage of being older and therefore widely supported\n11ty # 11ty was another technology that came up quite often when looking through different lists and recommendations. While newer than Jekyll it is still an established technology that has the advantage of being widely supported.\nHUGO # HUGO is yet another static site generator. The standout feature of HUGO is that it is written in GO with its own custom compiler when building the website at runtime, this results in millisecond build times even for very large websites. While I doubt that my website would become large enough to see a difference compared to the other static site generators, I still found that it was a nice feature\nFinal Choice # Ultimately there was no \u0026lsquo;correct\u0026rsquo; choice in this case as all the frameworks have good offerings. The documentation between the different technologies are about the same quality from what I had observed. I ended up choosing HUGO as I found the blowfish theme that covered all my initial design requirements and also included additional features that I hadn\u0026rsquo;t initial thought of such as: table of contents in articles, support for article series, and a search bar for the whole site.\nTLD Choice # When choosing a domain name there are many different interesting choices, notable options I found were:\n.com - Standard choice for most website .ca - TLD for canadian websites .me - ccTLD that fits well for a personal site .cv - ccTLD that fits well for a portfolio site I ended up choosing a .ca domain because the TLD has WHOIS privacy by default for individuals rather than needing to purchase an add-on from the domain registrar. While generic TLDs (gTLD) would be able to reach a global audience faster, I don\u0026rsquo;t that is less important of a factor to me. I also prefer a more standard domain name that is recognizable like .com or .ca which is why I didn\u0026rsquo;t end up going with something like .me or .cv https://www.nominus.com/en/dm/blog/country-domains/generic-tld-vs-country-code-tld-which-is-the-better-option\nDomain Registrar # Porkbun # When searching for recommended domain registrars, Porkbun is a name that came up very often in user forums as having good service. Porkbun\u0026rsquo;s offerings have WHOIS privacy included by default. However, as I plan to get a .ca domain this doesn\u0026rsquo;t matter.\nCloudflare # Cloudflare is a recognizable company that offers many services in the space of hosting, traffic routing, and DNS. Therefore, this provides quite an integrated solution. I really liked the transparent pricing that Cloudflare displays when browsing domains, showing a consistent price for every year rather than a cheap offering for the first with an expensive renewal fee.\nNamecheap # Namecheap is often recommended as a place to get good deals on domain, however for the domains that I was looking for the offerings were not any cheaper than with Cloudflare.\nFinal Choice # In my case the price of the domain name was the same between registrars that I looked at. I ended up choosing Cloudflare as my registrar of choice due to their transparent pricing and integrated hosting solutions. Keeping with the design requirement of having the website being as low maintenance as possible, I have more confidence that the company will exist for an extended period of time. This would avoid me having to switch registrars in the future.\nNote While going with a larger company may reduce the chance of choosing a company that goes out of business or suddenly dissapears, it is not guaranteed that I will not have to change my registrar in the future as evidenced with Google selling their domain sevice to Squarespace.\nI think I will go with Cloudflare because I have more confidence that the company will be around for a long time.\nWhile sites like Porkbun and Namecheap often have good deals, especially for the first year of a domain, I found that for my use case the domain prices were actually quite similar.\nNameservers # While most domain registrars allow you to either use the nameservers provided by the registrar or pick your own nameservers, domains purchased from Cloudflare are locked into using Cloudflare\u0026rsquo;s nameservers.\nWhile this may be an issue for larger websites that require advanced configuration for nameservers, Cloudflare\u0026rsquo;s nameservers already offered all the features that I needed including: DNSSEC, reliable uptime, and a worldwide network for fast DNS resolution.\nHosting Solution # The two options that I came across while doing research for hosting my website were GitHub Pages and Cloudflare Workers. Both options had free tiers that were more than sufficient for the traffic that I expect my website needs to handle. The main difference for my case is that GitHub Pages requires your website repository to be public for the free their while Cloudflare Workers doesn\u0026rsquo;t have the same limitation.\nAs I prefer to have the option to keep my website repository private, I ended up choosing Cloudflare Workers as my website hosting solution. Another advantage to Cloudflare Workers was that since I chose Cloudflare as my domain registrar, the DNS settings were automatically managed by Cloudflare when setting up Cloudflare Workers.\nThumbnail image by Hans-Peter Gauster on Unsplash\n","date":"17 November 2025","externalUrl":null,"permalink":"/projects/personal-site-research/","section":"Projects","summary":"","title":"The Research Process of Creating a Personal Portfolio Site","type":"projects"},{"content":"","date":"17 November 2025","externalUrl":null,"permalink":"/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"This is where I write detailed documentation to record processes and methods that I have learned across various fields from Linux administration tasks to small life hacks.\nWarning The information on this site is provided “as is” for educational purposes, without warranty of any kind, express or implied\n","date":"15 November 2025","externalUrl":null,"permalink":"/documentation/","section":"Documentation","summary":"","title":"Documentation","type":"documentation"},{"content":" Introduction # Changing partition sizes on Linux can be needed for many different for several different reasons. In my case I had two distros of Linux installed on my drive, as I was using the arch partition more often and was running out of space I decided to delete the Ubuntu partition and resize the arch partition to use the free space.\nThere are several different tools to manage partitions in Linux, for this guide I made use of parted, fdisk, and resize2fs\nSteps # The first step is to find the path of the drive that you want to edit. On most laptops this will be nvme0n1, however storage devices can also take the form of sda or mmcblk0. This can be done with the command\nsudo fdisk -l In my case my output contained several entries, the one of interest was\nDisk /dev/nvme1n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: WD_BLACK 1000GB Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 3A28ED7F-D92A-4B57-AFC2-09AE47D407A5 Therefore, I can see that for my laptop the storage device I want to edit is labelled nvme1n1.\nNote Even if you have already conifugred your drive in the past and therefore know the identifier, it is still valuable to check the identifier of your drive before performing any operations as it can change between reboots of hardware configuration changes.\nNext step is use the parted utility to make edits to the partition on the drive.\nsudo parted /dev/nvme1n1 Once you start the utility you will see a new prompt (parted). The command \u0026lsquo;p\u0026rsquo; will list the partitions, \u0026lsquo;rm\u0026rsquo; will delete partitions, and \u0026lsquo;resize\u0026rsquo;\nNote In my case I used command line tools for resizing the partitions on my drive, however there is also a GUI tool gparted ","date":"13 November 2025","externalUrl":null,"permalink":"/documentation/changing-partition-size/","section":"Documentation","summary":"","title":"Changing \u0026 Deleting Partitions on Linux","type":"documentation"},{"content":"","date":"13 November 2025","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":" Introduction # While many languages use the 26 letters found on most computer keyboards, languages like Chinese, Korean, Japanese, or Arabic require different input methods. On Windows the process of adding a new language is simple enough: go to settings, add a new language, and everything is set up automatically.\nOn Linux the setup requires a little more effort, however that is the tradeoff for having more control over your system. This guide was written for an Arch + Wayland + Gnome environment. I\u0026rsquo;ll be installing pinyin input as an example, however the main ideas are generally applicable for other versions.\nFont Support # It is important to install fonts to have support for displaying your input language. In my case I installed the following fonts for Chinese\nadobe-source-han-sans-cn-fonts adobe-source-han-sans-tw-fonts As a bonus you can also install fonts for other languages to prevent the characters from appearing as unknown Unicode characters when you encounter them on the online\nadobe-source-han-sans-kr-fonts adobe-source-han-sans-jp-fonts adobe-source-han-serif-jp-fonts A great resource for finding fonts is the Arch Linux Wiki localization pages\nhttps://wiki.archlinux.org/title/Localization/Korean https://wiki.archlinux.org/title/Localization/Japanese https://wiki.archlinux.org/title/Localization/Chinese Note While installing fonts you can also use this as a chance to update your emoji support. I installed noto fonts, however there are a lot of other choices that are also viable\nOn Linux fonts can be installed through the package manager similar to installing packages\nsudo pacman -S adobe-source-han-sans-cn-fonts Note You may need to restart your session for the fonts to display properly across your system\nInstalling an input method # There are many different types of input method choices for Linux. A comprehensive list can be found at https://wiki.archlinux.org/title/Input_method. For my use case I chose Fcitx5.\nFcitx5 requires a few extra components to work properly. For my language choice I needed to install a dictionary\nsudo pacman -S fcitx5-pinyin-zhwiki Gnome also requires the installation of the Input Method Panel extension to display properly. This can either be done through the AUR package gnome-shell-extension-kimpanel-git or by installing the extension from extensions.gnome.org Extention listing on extensions.gnome.org Configuration # Once all the pacakges are installed the system, the last step is to choose the desired languages. This can be done from the command line. Alternatively, there is a convieneint GUI tool that works with Fcitx5. The GUI tool can be installed with\nsudo pacman -S fcitx5-configtool Input methods can either be added by moving items from the right column over to the left column, or using the \u0026lsquo;Select system keyboard layout\u0026rsquo; option. In this example configuration the english and french keyboards were added from system layouts, and pinyin was selected from the list on the right.\nFor those who are used to the keyboard shortcuts from windows, you can change the keyboard shortcuts in the Fcitx Configuration app. The main change I made was to change \u0026ldquo;Toggle Input Method\u0026rdquo; to Super + Space And that concludes the guide, happy typing!\n","date":"12 November 2025","externalUrl":null,"permalink":"/documentation/arch---alternate-language-setup/","section":"Documentation","summary":"","title":"Arch Alternate Language Input Setup","type":"documentation"},{"content":" Introduction # When installing Gnome on Arch Linux I only installed the base packages, as a result the thumbnail generated did not work out of the box.\nSolution # In this case the fix is very simple, it just requires the installation of a few packages\nsudo pacman -S ffmpegthumbnailer gdk-pixbuf2 tumbler poppler-glib libopenraw gnome-epub-thumbnailer Package Breakdown # ffmpegthumbnailer - This package selects a frame from videos to store in the Gnome thumbnail cache folder so that it can be displayed by the file manager gdkpixbuf2 - This is a core gnome library to support image loading gdkpixbuf2-thumbnailer - This library generates thumbnails for basic image formats tumbler - This is a general thumbnail generator originally developed for XFCE, but that also works with GNOME poppler-glib - This is a thumbnail generator for PDF files libopenraw - This is a thumbnail generator for .raw image files gnome-epub-thumbnailer - GNOME package to generate thumbnails for EPUB files Additional Steps # For thumbnail generation to work properly you may also need to clear the thumbnail cache using the command\nrm -rf ~/.cache/thumbnails/* Then either restart your system or restart your file manager, in my case I restarted nautilus.\n","date":"12 November 2025","externalUrl":null,"permalink":"/documentation/arch---fixing-thumbnail-generation/","section":"Documentation","summary":"","title":"Fixing GNOME thumbnail generation in Arch","type":"documentation"},{"content":" Introduction # Mirroring the contents of two folders in Linux has many different use cases. In my case, I am looking for a way to automatically upload screenshots captured by GNOME screenshot to my cloud storage for easy access on other devices.\nSteps # The first step is to download the inotify-tools\nsudo pacman -S inotify-tools As an example I will the GNOME screenshots folder ~/Pictures/screenshots will be mirrored to ~/Pictures/Mirror. We will write a script that uses inotify-tools to move new files automatically. In my case I placed the script named screenshot-watcher.sh at ~/.local/bin.\n#!/usr/bin/env bash SRC_DIR=\u0026#34;$HOME/Pictures/Screenshots\u0026#34; DEST_DIR=\u0026#34;$HOME/pictures/Mirror\u0026#34; inotifywait -m -e close_write --format \u0026#34;%f\u0026#34; \u0026#34;$SRC_DIR\u0026#34; | while read -r FILE; do cp \u0026#34;$SRC_DIR/$FILE\u0026#34; \u0026#34;$DEST_DIR/\u0026#34; notify-send \u0026#34;Screenshot copied\u0026#34; \u0026#34;$FILE has been mirrored!\u0026#34; # optional line to send a notification when script runs done Note This script copies files from the original folder to the mirroed folder, you could replace cp with mv to insead move files\nEnsure the script is executable with\nsudo chmod +x ~/.local/bin/screenshot-watcher.sh Then to have the script run automatically we will create a service. First create a directory at ~/.config/systemd/user\nmkdir -p ~/.config/systemd/user then in that directory create the service screenshot-watcher.service\n[Unit] Description=Automatically copy new screenshots to another folder [Service] ExecStart=%h/.local/bin/screenshot-watcher.sh Restart=always RestartSec=5 [Install] WantedBy=default.target We can then enable our service with the following set of commands\nsudo systemctl --usr deamon-reload sudo systemctl --user enable --now screenshot-watcher.service Then you can check if it is running with\nsudo systemctl --usr status screenshot-watcher.service You should see the output\n● screenshot-watcher.service - Automatically copy new screenshots to another folder Loaded: loaded (/home/gabriel/.config/systemd/user/screenshot-watcher.service; enabled; preset: enabled ) Active: active (running) since Fri 2025-11-14 02:08:04 MST; 11h ago Invocation: 3c2b94c22aa84927b20bfc6daec1363c Main PID: 2855 (bash) Tasks: 3 (limit: 37794) Memory: 1.8M (peak: 3.9M) CPU: 54ms CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/screenshot-watcher.service ├─2855 bash /home/gabriel/.local/bin/screenshot-watcher.sh ├─2899 inotifywait -m -e close_write --format %f /home/gabriel/Pictures/Screenshots └─2900 bash /home/gabriel/.local/bin/screenshot-watcher.sh Nov 14 02:08:04 Polaris systemd[2846]: Started Automatically copy new screenshots to another folder. Nov 14 02:08:04 Polaris screenshot-watcher.sh[2899]: Setting up watches. Nov 14 02:08:04 Polaris screenshot-watcher.sh[2899]: Watches established. Then just test the script by adding a new file to the original folder. If everything is setup correctly you should see a notification and the file with be copied over to the mirror folder.\n","date":"10 November 2025","externalUrl":null,"permalink":"/documentation/arch---automatic-folder-mirroring/","section":"Documentation","summary":"","title":"Automatic Folder Mirroring In Linux","type":"documentation"},{"content":"Talk about how it was a good experience in learning about cyber decurity\nInteresting challenges with opsec with instead ram and stuff\nLook more into the discord for ideas on the article\n","externalUrl":null,"permalink":"/competitions/htcotb-2025/","section":"Competitions","summary":"","title":"","type":"competitions"},{"content":"Show photos of the tower we built\nTalk about how it was a good exercise in gesmwork\nPut the blender video of the tower you made\n","externalUrl":null,"permalink":"/competitions/wec-2025/","section":"Competitions","summary":"","title":"","type":"competitions"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/competitions/","section":"Competitions","summary":"","title":"Competitions","type":"competitions"},{"content":"Hello, My name is Gabriel Baltazart. I am currently an undergraduate student studying at the University of Alberta. My passion is taking ideas and bringing them to life. When I\u0026rsquo;m not working away at solving an engineering problem I can be found baking cookies, catching up on sci-fi books, or running.\nhttps://linkedin.com/in/gabriel-baltazart\nhttps://github.com/gbaltazart\n","externalUrl":null,"permalink":"/contact/","section":"","summary":"","title":"Contact","type":"page"},{"content":"","externalUrl":null,"permalink":"/templates/","section":"Templates","summary":"","title":"Templates","type":"templates"}]