Building Better Products

A blog dedicated to building software that is more efficient, less faulty, and more secure

Haskell Reflections Part 2: What Haskell Taught Me

Haskell Reflections Part 2: What Haskell Taught Me Disclaimers All of my thoughts and opinions here are entirely my own, and do not reflect the opinions of my associates, my employer, or anyone else. What Haskell Has Taught Me In my last blog post, I talked about what I thought about the Haskell programming language, and how it stacked up to my expectations of it. If you haven’t read it yet, I would recommend reading it before reading this post.
Read more →

1 Year With Haskell, Part I

Haskell, A Year in Production Foreword Disclaimers All of my thoughts and opinions here are entirely my own, and do not reflect the opinions of my associates, my employer, or anyone else. I am not an expert in Haskell. I have a year of shipping it, and most of that year has been focused on a single repository. It is entirely possible that every negative thing I have to say about Haskell is my own skill issue.
Read more →

What I've Been Doing and Where I'm Going in 2024

Happy March! My blog has been a little quiet in the new year, and I just wanted to make a quick post today explaining where I’ve been, what I’ve been doing, and where I’m going. My 2024 So Far Moving First and foremost, I’ve been moving, which makes it hard to dedicate hours to blogging and exploring code. I’m in my current place until the end of April, and after that I’ll be moving again.
Read more →

When Is Done Actually Done?

When is Something ‘Good Enough’? I introduced my last blog post with a short story, and I really liked how that felt, so I’m going to do that again here. A Short Story to Illustrate the Question Story 1: Hanger Imagine that you’ve gotten home from a long day at work. It was a long and hard day, with many fires to be put out. You’re tired. You’re greasy. You’re hangry.
Read more →

What I Learned from Recording my Coding

What I’ve Learned from Recording Myself Coding Recently, I read this article, talking about how the way to become better, if not one of the best, at any skill. I agreed with some of the article, and disagreed with some of the article. If nothing else, it got me thinking about how I’m trying to be a better engineer. In the article, the author talks about recording yourself while working on your craft, and using this recording as a way to make your mistakes easier to spot and correct.
Read more →

Every C++ Feature You Need to Get Started

EDIT: I started this blog post in November, then I got sick, and advent of code has started. I’ll continue updating this blog post, but for now, I want what’s already done published more than I want to wait on a complete post. I’ll update this with what I need whenever I get the chance in this chaotic month. Every C++ Feature You Need to Get Started I’m going to be learning C++ during advent of code 2023.
Read more →

What Language am I using for Advent of Code 2023?

Advent of Code 2023 First, a Short Story Pretend you’re me, a few months from now. You log into work at the startup that employs you, and you start working on yesterday’s ticket. By chance, you log into AWS console to test something. You notice something on your way to whatever service you needed to look at. COSTS UP 3482% COMPARED TO LAST MONTH uhhh…. what? We should look at that.
Read more →

Ruby Parameter Passing: A Quick Reference

Ruby Variables: A Quick Reference This is meant to be a quick reference to bookmark if you don’t work on Ruby code all that often, it’s not meant to be a deep dive into the language Passing Values into Functions There are several ways to pass values into functions. Regular Parameter Passing This is the standard way of doing things, and it looks like this: def foo(val1, val2) puts val1 puts val2 end def bar() foo("Hello,", "World") end bar() output:
Read more →

Dvorak Part 2

Dvorak Part 2 Like many Canadians, I recently went home for Thanksgiving. Among the turkey, the home repairs, and the excitement of a new kitten, I got asked to do some general IT work for friends and family. Unfortunately, my nonstop use of the dvorak layout in the last 3 months has completely destroyed my ability to work on a QWERTY keyboard. For me, this is unacceptable. I need to be able to work on other people’s computers.
Read more →

Haskell Tutorial Part 2

Haskell Tutoriall Part 2 In this part 2 of our Haskell tutorial, I’m going to show you how to install Haskell from scratch on your computer. Part 1: Install GHCUP For this tutorial, we’ll be using ghcup, an all-in one tool to install the following the ghc compiler (haskell’s most popular compiler) cabal (haskell’s package manager, similar to npm in javascript) stack (a layer around cabal that makes sure packages work together nicely) the haskell language server (HLS) (a language server, resposible for things like “go to definition” and intelligent autocomplete) With that, let’s get into it!
Read more →

Pivot Fast

When, How, and Why to Pivot Fast In this article I’m going to be reflection on something that I’ve experienced a few times over the last few weeks, and I want to formalize my thoughts on. What is Pivoting Fast? I don’t claim to be coining a term, as a quick google search will show tons of other advice on the topic, however I do claim to have made this discovery independently.
Read more →

Linked Lists Compared

Linked Lists Functional, Procedural, and Object Oriented; Part 1 Over the last 2 weeks, I’ve been building a singly linked list implementation from scratch in Haskell, Ruby, and C. I originally did it just to become a little bit more sharp in these languages, but what I found was really interesting, so I thought I would share my findings in a blog post. What is a Linked List? A linked list is one of the most foundational data structures in computer science.
Read more →

Fill the Gaps

Fill the Gaps in Your Knowledge As a junior software engineer, you are pretty much guaranteed to be learning a lot constantly, especially as you start. That’s good. That’s great even. On the job you’ll inevitably be learning new things with every ticket you take on. This is normal, as nobody comes out of school or bootcamp or an online course knowing all that their first job is going to expect of them.
Read more →

Dvorak

Learning Dvorak About 2 weeks ago I started learning the dvorak keyboard layout. Below are my thoughts. Initial Motivations It seems most people learn dvorak to type faster. From what I had found on the internet, there isn’t much proof that an increase in typing speed is guaranteed. Thus, while I believe in being efficient with my tools, this wasn’t my incentive for learning this keyboard layout. Instead, I learned it because I’m at the start of what I hope will be a very long and successful career as a software engineer, and I want to limit the risk of repeated-use injuries.
Read more →

Advice

Advice If you’ve been alive for more than 3 hours, you’ve probably been given some advice. Some of it might have been good, the rest probably wasn’t. How are you supposed to tell the difference? Allow me to give you some advice on that. My Metaphor Imagine every person on Earth was a mountaineer with one goal: Find the highest place they can and stay there as long as possible.
Read more →

Haskell Tutorial Part 1

Haskell Tutorial Part 1: Introduction to the Language and Concepts Part 1: What is Haskell? Haskell is a general purpose programming language, like Java or Python. It is compiled, often with the GHC compiler, and like Java, it has strong static typing. Unlike Python or Java, Haskell follows a Functional Programming paradigm, but more on that in Part 2. Haskell is also lazy-evaluated, meaning that any code that isn’t needed for a return value in a function is never evaluated.
Read more →

Always learning

Learning is a Journey that Never Ends And with that in mind, I’m still trying to learn. Learning Go Go is a newer language that is all the buzz these days. I’ve heard great things from friends and peers, and now that I’m done my degree I have some time to learn it. I’ve been reading “Go Programming” by John P. Baugh, and while it’s not the most recent or comprehensive book on the topic, I got it for free second-hand.
Read more →

What I'm doing in October 2022

Projects Projects Projects! I’ve always got some projects on the go, and I thought I would provide some updates since many of these projects aren’t visible on github. Current Projects Running the UVIC CyberSecurity Club This year the UVIC Cybersecurity club was started, and I’m currently our first VP Finance and Administration. On top of all the work keeping club finances in order, as well as the work for organizing events, I’m also learning a ton about cyber security so that I can teach new members these skills.
Read more →

Using Hugo To Create A Blog

Situation Background When I decided to finally take my personal blog off of my LAN and put it up on the open internet, I had to decide What technologies I wanted to use. While the blog was still small with only a few posts, now was a good time to make any migrations that I wanted to make. What I had Before Previously, my blog an old WordPress instance running on an old laptop I had flashed with a copy of Ubuntu Server.
Read more →

Tips for Running a University Club

I’ve been working with university clubs since I started my engineering degree at UVIC in 2017. In that time, I’ve been a part of 5 clubs, been a leader in 2, and seen many student clubs thrive and fail. I thought I would share some of my experiences here for those looking to do the same What to expect I’m going to be honest with you, it’s a lot of work.
Read more →

How I’m Improving my Operational Security (OpSec)

I’m always trying to improve my daily OpSec. This will be a tutorial examining and explaining this process, as I have done it. I have put each step I’ve taken in the increasing order of difficulty. Many of these steps are platform-agnostic, so if you’re using windows or mac there will be things for you to learn too! What Have I Already Done Keep Software Updated This is probably the most important item on this list, and it is first for a reason.
Read more →

Choosing a new Cell Phone

Written in January 2022, for reference. It’s far past time that I say goodbye to my Samsung Galaxy S7. It has served me 5 faithful years of service through the end of high school and most of University. But it hasn’t gotten a software update in 3 years, and software is running slower and slower. Its second battery is keeping less charge every day. It’s time for an upgrade. It was probably time for an upgrade a year ago.
Read more →

Haskell type keyword reference manual

In this short blog post, I will explain the difference between data, type, newtype, class, and instance keywords in haskell and how they all work together. This is not meant to be an in-depth tutorial, but just a reference guide. If you program occasionally in haskell and just want a quick reference, bookmark this page. data: This just defines a new data type in haskell. Several examples are below: Record Syntax (a row in a database):
Read more →

My thoughts on Rob Martin's Craftsman's Oath

The oath (in the most recent form that I could find online) is as outlined below: I will not produce harmful code. The code that I produce will always be my best work. I will not knowingly allow code that is defective in either behaviour or structure to accumulate. I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.
Read more →

Why I use a Tiling Window Manager on my Home Computer

I use my computer a lot. I use my computer for work, I use my computer for school, I even use my computer for leisure. I consider it basic professionalism to be as efficient and proficient with the tools of my trade as possible. I want the slowest part of the system between my brain, my fingers, and what’s on the screen to be my brain. For me, the tiling window manager is the most efficient way I have found to interact with my computer.
Read more →