GNU Guix (as in geeks) is one of the new type of Linux distributions that focuses on reproducibility. It’s in the class of systems that can allow for immutability, in addition to atomic updates and root less user package management. NixOS is another similar new type in this class of reproducible operating systems. Placing a Linux distribution into a container is a good way to learn about the…
Lately I’ve been twiddling with a few sufficiently complex Hugo themes and thought I’d share an interesting approach for rendering small changes quickly. In absence of a better term — “incremental writes” will do and this method works best when there’s a lot happening inside a theme that renders in the 1,000 ~ 10,000+ and beyond page range. So what’s Hugo…
The browser has a peculiar dimensionality that natively supports moving around complexity between different data and language domains. One of those domains is XML (Extensible Markup Language) and it comes practically in the form of RSS (Really Simple Syndication) Feeds, Atom Feeds, Site Maps, OPML (Outline Processor Markup Language) Outlines and other various XML representations. XSLT (Extensible…
Introduction A recent look at my web server configuration revealed that my error pages were set up in an odd way. From the base route of a domain, it’s possible to iterate over each error page starting with /400 , /401 , /402 , /403 , /404 and so on. I guess that my self wanted to verify an error page’s content and existence. It did seem like more was going on but upon further…
There’s an interesting command line browser called Lynx . It’s an extremely useful and versatile text based browser. In lynx you can dump all links on a web page as references. That’s neat. $ lynx -dump -listonly https://example.com/ References 1. https://www.iana.org/domains/example I’ve been meaning to replicate this feature, generate a list of references and stick them…
Literate Programming is a documentation first programming style pioneered by Donald Knuth . It’s writing a blog post as a light specification but with the added bonus of producing a runnable program at the end. But this isn’t a post about my hacked together attempts at literate programming — that won’t be very interesting. This is more of a small research gathering exercise…
My micro blog homepage . If you’ve visited my repositories recently you might have noticed there’s new code on the block . My writing strategy is going to change a bit with the start of my brand new micro blog . If you’d like to read more about the technical details, check out my personal projects article on the stack. The micro blog concept has become very popular. Long form…
Hugo is a static site generator program and a mighty good piece of free software. This blog has been mostly powered by hugo since about 4 years ago beginning with version 0.44 . Usually, my summary description of hugo is that it’s a blog templating system, but hugo has enough generality and versatility to be called a data templating system. Lately, I’ve been catching up to some of its…
Web browsers, search engines, and the open source technologies underpinning them have more or less bootstrapped what could be called a pseudo home shopping network ( HSN ). In many respects, the dominant language, behaviour, and environment on The Internet mirrors that of a tightly controlled, but free-to-view corporate marketplace where almost everything looks, feels, and perhaps is an…
NixOS is a Linux distribution built around the nix package manager. Since writing my first article on NixOS , it has quickly become my personal OS (Operating System) of choice for desktops, servers, and The transition process to become almost as as my imperative environments has been marred by a lot of pins and needles on the usability front, but it has been worth it. For context, you can use a…
Image showing a few links from my list of bookmarks. Over the course of cross browser testing websites, my bookmarks have become scattered and out of sync. I’ve grown too accustomed to using multiple web browsers and their various styles of bookmark management. I’ve begin consolidating my bookmarks into one location in an attempt to reduce my Internet usage. The constant researching of…
A LaTeX document. LaTeX pronounced ( /la:tech/ ), is a free typesetting system that allows you to efficiently create articles, books, white papers and other technical documents. Most scientific documents and white papers are built using this typesetting system. LaTeX is the opposite of a (What You See Is What You Get) editor. The key difference is that format is separated from content. Documents…
Note : The code in this article fails on newer versions of nix ( 2.4+ ) due to an implementation change . Take a look at this shell.nix that uses a relaxed sandbox along with the __noChroot option. The Linux distribution space is vast and fragmented. It’s the wild wild west, and that’s all right in my book. Having one distribution installed, to a lesser degree means having installed.…
Abstracts Page The intention this month was to release a post on “cooking and baking” Linux distributions from a NixOS perspective, but instead I’ll release the beginnings of my abstracts page. The abstracts page will contain short on books, media, games, and other material not directly related to programming and tech in general. We’ll kick it off with abstracts of The Art…
Updated navigation bar Time has granted a small reprieve to work on the greatest pain point of my personal website — the navigation bar. Due to sheer laziness, the navigation bar was initially implemented as three separate bars for each of the main views (tablet, phone, and desktop devices). This created unnecessary friction when adding new items. In the long term, the goal of integrating…
Using Vale in the Vim text editor If you’ve ever done any sort of continuous long form writing, you’ll eventually discover that grammar and spell checking break down and become more of a distraction than a benefit. The “one size fits all” rules for grammar and spell checking cannot hope to account for the indefinite amount of writing styles and constantly evolving word…
Note : Since NixOS version 23.05 a service module for cgit/nginx is available. Read only if you want a summary on making modules. NixOS, and by consequence nix are for freelance programmers like myself. After trying out Gitea for a while, it’s about time to switch back to cgit for hosting my public repositories. Gitea and cgit are both self hosted git front-ends — the former being more…
Image by Prawny from Pixabay intersects heavily with morality, ethics, and philosophy. The great moral quandaries of its intellectuals are boundless, but outside of their towers are those in the moral trenches compelled to answer the hard questions right now, consequences and all. Individuals who probably did not expect to hold such deciding power are now answering the weighty philosophical…
Tux My devices have seen numerous Linux distributions over the course of my computing journey. A Linux distribution is an operating system built around the Linux kernel. Many new comers to the Linux community are evangelised in, but others come in from a lack of computing freedom. I’m of the latter camp. If you are a new comer to the Linux community, then choose the first distribution that…
RSS feeds of interest A good way to improve your programming skills is to read the code that other people write. Reading code for the sake of reading code isn’t optimal — it’s more beneficial to read the code of programs that you like or use often in bite-sized chunks. My favorite ways to track open source programs are RSS (Really Simple Syndication) feeds, mailing lists, and…
NixOS on a T420 Nix and NixOS are two technologies that my eyes have been on for a few years. Nix is the independent package manager that allows for and immutable package managment and NixOS is a Linux distribution built from the ground up using Nix. of my personal infrastructure now resides on NixOS including the server that hosts this website. CentOS, the previous Linux distribution running this…
The Internet is down Software development is tightly coupled to the Internet. Some programs refuse to run or fail catastrophically without an Internet connection. For most people a computer becomes a useless pile of metal without the Internet. My circumstances have required the dreaded skill of programming without the Internet. The and infrastructure in my country royally sucks. Keeping in a state…
NixOps Source Page NixOps (Nix Operations) is a program for deploying and provisioning multiple NixOS machines in a network or cloud environment. This write up is by no means an guide but rather a commentary on my nixops approach. You can also check out krops, morph, and deploy-rs as community alternatives to nixops . You may also want to use the simpler nixos-rebuild command. nixos-rebuild switch…
NixOS NixOS is a Linux distribution built around the nix package manager. The configuration of the entire system is allowing for immutability and reproducibility. Let’s take a look at managing a user’s package environment declaratively in NixOS version 20.03 . The of NixOS dictates that there are numerous declarative methods. We can use attribute sets, build environments, or even…
Bourne-Again Shell The Bourne Again is ubiquitous among many unix-like systems. Here’s a few tweaks that are applied to my bash configuration for interactivity. Conditional Prompt Colors The color in the prompt gives a visual cue for the current environment. Green is indicative of a secure shell connection (SSH), red of root privilege, blue of the standard user, and white (an unmodified…
TS100 Soldering Iron The TS100 is a nice complement to the many soldering irons in my toolkit. Integrating technology into traditional tools can be a frustrating experience (gimmicks) but this iron’s not too bad. The TS100 uses firmware to drive its features and core functionality. The original firmware is replaced with Ralim’s TS100 firmware You can view the complete documentation at…
Kubernetes Home Page Kubernetes is an open source container orchestration tool promising a catch all solution to issues that arise when deploying applications. Kubernetes creates a framework that models how infrastructure and services should interact. The industry is trending in a direction where a of people will be running k8s (Kubernetes) setups in one form or the other. Let’s exploit…
Note : Rerunning the code in this article seems to suggest an ambiguity between the container init and the init path lxc expects across multiple NixOS versions. See this thread for a possible fix. NixOS is seen as the holy grail of management and system administration. It’s what many call a purely functional distribution [pdf] . The state is declarative — entire systems, deployment…
Demo version of this website Lately, there have been a few inquiries about deploying the source code of my website. Unfortunately for my own very few of my resources are deployed directly or entirely with Docker. You can however get an instance of this website running very quickly with linux Installing and running lxc on your system should theoretically be the hardest part. To get this up and…
Isso is a lightweight open source commenting server. Sometimes changes to an open source program can take a while to make it into a packaged version. Let’s install isso from source and get the latest fixes and features. The documentation can be tricky. Here’s my approach at installing. I’m using Linux, but the distribution doesn’t matter. In essence the installation process…
Improved Paperless Interface Paperless, now known as paperless-ng, and paperless-ngx is an open source web application for searching documents that have been indexed using OCR (Optical Character Recognition). The backend can be gutted in any way you like to run customized operations pre and post document Paperless provides a robust, quick, and hands solution for those who may want to go…
Archive Page In the absence of a search engine — an page is a simple way to find older articles quickly. Here is a quick and dirty way to create multiple archive pages with Hugo. There are a few requirements. The archive pages should be a bit modular. We should be able to just drop an archive.md file into any folder within the content directory and generate a single archive page for that…
Webring Generated by Openring Lately my fascination has moved towards the IndieWeb. Maintaining your online identity and data independently of big corporations is My website has a simple webring at the bottom of every “Webrings allow ringbearers to create a network of blogs around a shared goal where readers can choose the next, previous, and random blog in the ring.” IndieWeb: What is…
Gitea’s Home Page Running web applications from the subdirectory of a URL has its benefits. There doesn’t seem to be much talk about this It’s useful when you need to expose a web application quickly without provisioning a new subdomain and SSL certificate. For example let’s run Gitea from the subdirectory of a domain using nginx We will make Gitea accessible from a URL of…
GoAccess Dashboard for this server GoAccess is an open source server–side web log analyzer. Server side means that it will process web server logs and compile the results into a real–time graphical view. It works with many web log By default goaccess will provide a picture of the traffic to your server. This includes crawlers, bots, and various HTTP requests. We can make some changes…
Tailwind CSS Design Recently, this website of mine was redesigned. The is a stylistic book and implemented using the Tailwind CSS framework. CSS is a tight and compact CSS framework that gives one a myriad of custom design choices. “Tailwind is different from frameworks like Bootstrap, Foundation, or Bulma in that it’s not a UI kit.” “It doesn’t have a default theme,…
Note : This article is out of date. Vultr’s API v1 end of life was announced June 30, 2023 Vultr is a VPS (Virtual Private Server) hosting platform that uses KVM (Kernel–based Virtual Machine) virtualization. Signing into their website over and over again to make a snapshot can be tedious. Let’s automate this process using bash , and systemd timers. Vultr offers an excellent API…
PHP manual on var_dump This is a brilliant way to dump variables to a webserver’s error log in This is especially helpful when experimenting with POST requests in barebone environments. <? php ob_start (); var_dump ( $this ); error_log ( ob_get_clean ());
Image by akbaranifsolo from Pixabay The internet is an enormous mess of information that can be difficult to search, validate, and utilize. The common refrain today is fake news. These problems have always Nothing much has changed from then to now, except more algorithms to fight against, and information to sift through. Here are some principles learned the hard way to extract useful information…
Image by janjf93 from Pixabay Fixed navigation bars have an annoying drawback — they take up precious screen real estate. We can add headroom to any web page by automatically retracting and expanding the navigation bar on We will create a super simple implementation with vanilla JavaScript and discuss some ways to improve its behavior. First let’s add some hacker style boilerplate to…
Gitea is an awesome and Git service that can be hosted anywhere. It is open source and written in Golang. Many of my own projects are hosted across multiple Gitea instances. A standard Gitea installation will look a bit bare. We can many aspects of Gitea by overriding its default templates. This allows us to change the header, footer, and navigation sections with ease. You can also override public…
Results from a Mozilla SSH Observatory Scan SSH (Secure Shell) is a great tool, but if you ever expose SSH to the internet, you’ll soon discover a multitude of internet bots and bad actors pummeling your server. There is a clever way of mitigating this attack vector passively. Some of you might know this already, but the idea is to configure SSH to maximum Warning: This will break legacy…
Screenshot of my Firefox Setup Firefox is my Internet browser. I’ve stuck with it for a long time. Firefox’s market share has dropped considerably, but that doesn’t Here’s my take on a better Firefox experience. This list includes my favorite addons and interface Step 1: Hide the tab bar Wait what? Yes. The tab bar interface is somewhat of an anti-pattern. It’s…
Recently Google introduced a new auditing tool that scans your website and gives it a ranking score out of 100. Upon closer inspection, it looks like another front end to their Lighthouse tool or PageSpeed Insights application. While very informative, this audit gives you but a general glimpse into the possible issues a website might have. Advanced website auditing can be extensive or may even…
Example of a scam email. This showed up in my inbox today. Scammers are apparently upping their game, but not by a lot. This one was rather clever though. The sender tries to convince me that my account was hacked and attempts to extort me into paying Bitcoin to the above highlighted address. “Hello! I have bad news for you. 13/07/2018 - on this day I hacked your operating system and got…
Sublime Text is a great general purpose performant text editor. It provides a lightweight interface and an excellent plugin packaging system. While I absolutely love Vim and Geany, Sublime Text serves as a good compromise between flexibility and efficiency, especially when doing web development oriented tasks. Everyone has their preferred plugin arrangement and I’ll show you what my set up…
Hugo’s Homepage Hugo is nice because of its blog template system, static site generation abilities and generic framework structure, but sometimes you may want to add extra functionality that requires dynamic If you are also combining static elements with dynamic functions you may want to DRY your views to make everything consistent. It could be that you only want the blog of your website to…
The alternative to a static IP address is a server that keeps track of your dynamic IP address. When the IP address changes, the client will immediately notify the server of the new IP address. This is known as Dynamic DNS. One of the free DDNS services that I use is Now-DNS. I’ve noticed on pfSense version 2.3.5-RELEASE-p2 that custom client update entries will not work when the update url…
A screenshot of my remote server’s desktop Sometimes the solution to a problem is strange. Imagine a headless, remote, Linux based desktop setup where users can remote into a graphical environment. The remote desktop works great with the integrated graphics card but once it switches to discrete graphics it comes to a screeching halt. No graphical acceleration. Many discrete graphic cards now…
The other day I needed to set up a Syncthing instance on a remotely networked server that had no graphical display. I didn’t want to set it up using the command line tools and I definitely did not want to install a graphical environment on the server to access the web GUI . There is another computer with a graphical display on the local network. The only problem is that a standard syncthing…