Site Update 2025

Table of Contents

Home Tutorials Projects Blog About Me Links

Death of the Old Site

The old version of this site was hosted using Jekyll, Ruby, Markdown, and a good old batch of glue scripts. I'd build it and deploy it via Github's free hosting

Since that point, I've become more or less addicted to Emacs, and I now use Org Mode for everything.

If you haven't tried out Org Mode, it was single handily able to convert me to Emacs. That and the fact that Spacemacs gives you Vim bindings for every command in Emacs. Like they say, Emacs is the best operating system, it just lacks an editor. Tag on Vim and it's an amazing experience.

If you're an Emacs user through and through, the Vim bindings are optional in Spacemacs, and it's just a nice method of lazy loading any package you may need during development. You can still break your left pinky if you want <3

Birth of the New Site

The new site is written in Org mode. I use Org Mode's export capabilities to recurse through all source files, and simply host the HTML it generates.

The generate command is about as simple as it gets, it's a quick elisp script based on SystemCrafters

;; Set the package installation directory so that packages aren't stored in the
;; ~/.emacs.d/elpa path.
(require 'package)
(setq package-user-dir (expand-file-name "./.packages"))
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
                         ("elpa" . "https://elpa.gnu.org/packages/")))

;; Initialize the package system
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))

;; Install dependencies
(package-install 'htmlize)


;; Load the publishing system
(require 'ox-publish)



;; Define the publishing project
(setq org-publish-project-alist
      (list
       (list "patrickcpe"
             :recursive t
             :base-directory "./src"
             :publishing-directory "./build"
             :publishing-function 'org-html-publish-to-html
             :with-author nil           ;; Don't include author name
             :with-creator nil          ;; Include Emacs and Org versions in footer
             :with-toc t                ;; Include a table of contents
             :section-numbers nil       ;; Don't include section numbers
             :time-stamp-file nil)))    ;; Don't include time stamp in file

;; Customize the HTML output
(setq org-html-validation-link nil            ;; Don't show validation link
      org-html-head-include-scripts nil       ;; Use our own scripts
      org-html-head-include-default-style nil ;; Use our own styles
      org-html-head "<link rel=\"stylesheet\" href=\"/assets/css/worg.css\" />"
      )

;; Generate the site output
(org-publish-all t)

(message "Build complete!")

Then I just have a quick shell script to call this build below:

#!/bin/sh
emacs -Q --script build-site.el # Build the site
cp assets build/ -r             # Copy over any assets I use
cp src/robots.txt build/        # And this file tells crawlers what they can search

With all that in place you get this site :)

When it comes to deployment via github I use the following github actions script:

# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages

on:
  # Runs on pushes targeting the default branch
  push:
    branches: ["master"]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  # Single deploy job since we're just deploying
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
	uses: actions/checkout@v4
      - name: Setup Pages
	uses: actions/configure-pages@v5
      - name: Upload artifact
	uses: actions/upload-pages-artifact@v3
	with:
	  # Upload entire build folder
	  path: 'build'
      - name: Deploy to GitHub Pages
	id: deployment
	uses: actions/deploy-pages@v4

You will need to configure it to deploy via actions and you may need to configure your protected publish branch, but that was simple enough.

I think the design looks nice, and it's as simple as it can come.

Where I've Been

I used to make posts back during Uni where I thought I had sooooo much work to do :) I've only been working for ~3.5 years since then but I've already worked on 5 chips somehow, gotta love crazy schedules.

Then I discovered work, and everything else in life. I've been coaching Wrestling, Jiu-Jitsu, and dealing with everything else in life.

I bought myself a house and have to deal with everything that goes along with that, and lets say that sure has been an experience.

Plans for the Future

I couldn't tell you what the future holds. If I could read the future I'd get paid a lot more. Here's some ideas I was pondering, who knows what will happen :)

  • Practical DSP Tutorials (Design and Verification in Verilog)
  • Document my Master's Work
  • Self Hosted Software and Home Servers
  • CocoTB and PyUVM Tutorials
  • Exploration of Open Source Register and Bus Generators
  • Spacemacs Verilog Layer Development
  • Pipelining my RISC-V Processor
  • Interface Protocol Tutorials (Wishbone, AXI, APB, etc.)
  • OpenLane Chip Design Flow (RTL -> GDSII)
  • Formal Methods via SymbiYosys
  • OSS/Tabby CAD Design and Formal Verification Suite
  • RISC-V Formal
  • Icarus Verilog Simulation Guide
  • Verilator Simulation Guide

Will these projects actually pan out? Will I have the motivation to keep working on them? Find out next time!




Contact: Pat@PatrickCPE.com
©PatrickCPE