During the COVID-19 pandemic, I made it a habit to add something to this blog every couple of days. I was busy then (surprise!), I am busy now. What changed? Priorities. The phrase “you have to make time for it” was something that didn’t sit well with me for a number of years. When I first heard the phrase, it was probably in reference to some responsibilities that I had shirked on, thus the negative association. I have come around to truly appreciate the phrase for what it is and use it myself. If I don’t prioritize something, it will not happen. I will fill my time with other things first and whatever task it is will either be forgotten or discarded. I am not discarding a number of things, including this webpage. Eventually, using this page and others, I will organize and collate the important items in my life digitally. This will probably take a long time (probably a lifetime). For now here are a few projects of mine that I would like to showcase over the past few years particularly using the Rust programming language.
Here is my fork of the rustlings project with my solutions as patches applied on the trunk. I added a small bit of CI for Gitlab to ensure that my solutions complete the exercises correctly. I periodically update this by pulling the upstream changes into a staging branch, rebasing my changes onto that branch (fixing any conflicts that appear), making small tweaks to exercises that have been updated, getting CI to pass, then merging into the main branch. This means that I have quite a collection of my own solutions to a number of exercises that test knowledge on the basic components of the Rust programming language.
This project is simply a TCP server that takes messages sent over the socket to the server and resends it to all connected sockets/clients. It is a fun way to spin up a really small chat room really quickly (assuming that you can telnet over your local network and type in all the right ip addresses :-)). I was going to turn this project into something with a small tui (text user interface) but UI is never really my game.
This project was my final project for the intro to operating systems course at University of Massachusetts Amherst. This undergrad course allowed for a project type of your choosing - as long as it was an individual project. Most of this course was done in C and C++. I wanted to do a Rust rewrite of one of the projects, and after some debating on which project could remain as faithful to the original implementation, I decided the filesystems project was a good start. The implemented file system is extraordinarily limited, and a file is used as a proxy for an actual block device, but it does have some of the basic components of filesystems implemented (free block list, inodes, block pointers). It does not implement in its current state many essential features of modern filesystems such as directories, permissions, superblock(s), indirect blocks, journaling, etc. Finally, this project contains multiple layers: extensive documentation, unit/system testing, github ci/cd, and a few other tools. This implementation also attempts to remain on feature parity with the project itself. This cause me to learn about the #[repr(C)] macro in Rust which forces the underlying representation to match that of a C struct. Initially, I got the filesystem to work, but because the Rust representation of data and the C representation of data were no identical, the data written to the proxy block device was different between the two implementations.
I have a few other small project written in Rust that aren’t worth sharing here - either because most of the code was derived from someone/somewhere else or because the project is so incomplete that it does not work/isn’t worth sharing. A good example of this is the two-part project that initial motivated me to learn the Rust programming language: C library of datastructures as presented in CS187, and a C library of algorithms as presented in CS311. These two projects are related to eachother in that I wanted to use the datastructures library in the implementation of the algorithms library. Both I chose to write in C for a few reasons: practice in C, manually managing memory, difficulty, performance. These two projects never came to full fruition, however the datastructures project did make some strides (see libds).
I lost some interest in the project when I started dealing with the dependency injection required for custom types. Say you’re making a binary tree out of char[] types, how do you determine the strings ordinality? The answer is you can’t for every type, at least not within the library. A way to do this is let the user specify their own comparison function and inject that function to be used inside the implementation of the binary tree. This uses functions pointers, “void *” types, and feels a little like bending C to feel more object oriented, all things that were displeasing to me even though they were (maybe) necessary evils. The answer for me here… a language that had a more comprehensive type system while still remaining low-level - thus Rust. Essentially, I wanted to be able to have the power of generics (like C++ templates really), without the horrors of C++. Eventually I will take those projects and resurrect them from the land of C and put them in Rust so that I may work past those barriers I ran into long ago, but for now I have much more pressing tasks to attend to.
The final word on Rust projects I have tried includes some very low level work trying to write something to make a disk image that boots via BIOS and then hangs, a dumb kernel if you will, to learn some of the necessary steps of booting to an operating system. I had a good name for this ‘ferrOS’, probably derived/inspired from ferrous-systems and the work that I’ve seen by folks like phil-opp and japaric. For some time I was following the blog by phil-opp here.
That’s the most complete list of Rust projects and information about them that I can gather for now.
After years of work at the University of Massachusetts Amherst, I graduated this past spring. I got to experience and learn at lot at UMass and will be looking back on it with rose-colored glasses. I had the opportunity to continue my studies and do a masters degree at UMass in computer science. Due to a program offered by the university, and my desire to join industry quickly, I opted for their accelerated Master’s program. This required that I take graduate courses that were to be stripped from my undergraduate transcript and put onto my graduate transcript. Interestingly, most of the courses I ended up taking circa fall 2021 - spring 2023 were heavily skewed towards machine learning systems and data science but what I’ve ended up enjoying in industry is working with embedded systems and hardware.
I took a number of courses that were heavily focused in theory (Algorithms for data science, Indep. Study, Quantum Information Systems, Cryptography) and some more practice oriented courses (Machine Learning, Operating Systems, Computer Networks, a number of mathematics courses). In the end my piece of advice to students at University of Massachusetts Amherst, particularly those following a similar path to my own, would be to not focus on perfection in coursework. Spend time around your classmates - some of the most creative, intelligent, and passionate individuals I have ever met I first started talking to when they sat next to me in class. If you are feeling particularly inspired, the university is perhaps one of the only places where you can take the helm (so to speak) and dive into something of your own. This path may seem risk and challenging, but if you do it for long enough and well enough (and you’re lucky), you can become a researcher->Ph.D.->Post-Doc->Professor and get funding to work on something truly of your own making, how incredible!
A applied to a number of universities through the graduate application process, primarily focused on Master’s programs in computer science and was accepted to University of California Los Angeles, Carnegie Mellon University, and my undergraduate institution University of Massachusetts Amherst. While this decision was difficult, especially since leaving UMass meant a more expensive and unfamiliar program, I did decide to attend CMU for a Master’s in Software Engineering (focus in Embedded Systems). I have many people to thank for this process along the way which I will not list here.
The end of my undergraduate experience was particularly significant as it meant that my long time girlfriend and I would no longer have to be in a long-distance relationship. She, the incredible person she is, also decided that she would join me to Pittsburgh, something that I am grateful for. To kick off the summer, Lillian and I finally went on a road-trip that I had been planning for a few months across the United States. This is something that deserves its own post (or many!) to detail more about this trip. We traveled about across 25 U.S. states, over 10 national parks, a number of national monuments (I don’t have a detailed list of these, there were many), 15,000 miles of driving, about 28 days of van-lifing inside of a converted SUV. I highly recommend it for anyone who hasn’t tried: an impromptu trip with sufficient time set-aside but little to no constraints on where and when you can go (no reservations, appointments, etc). After this trip concluded, I spent a little time working in Burlington, VT at BETA technologies and then moved to Pittsburgh PA.
CMU has kept me incredibly busy so far. I am impressed and still overwhelmed by the sheer scale of resources, opportunities, and information that I am exposed to but I try to be a sponge for it all. Currently I am considering a number of different courses to take next semester as an elective (something quantum, something systems like O.S., something machine learning, something computer networking) but I do not have the information I need yet to make that decision. A stale blog that lacks recent posts should be deleted, thus here I am. And hopefully will be.
Cloudflare always seemed like an interesting company/service to me, especially the lava lamps that they have. I finally put my website behind cloudflare (for a number of reasons) and configured everything earlier today to get it working again. The main sticking point for me was Github re-issuing an SSL certificate for the website after the DNS change. I also added an email address that forwards to my personal email with a jackchampagne.com extension.
The main reason that I put the website behind cloudflare was because of their Yubikeys offer (10 for $10 each discounted price). I have always wanted a set of yubikeys but found them to be cost prohibitive.
Its been 3 months…
Since my family moved, I have not been home (due to school) long enough to set up my server again. Anyways a few things have happened. Last Tuesday I had an interview with BETA Technologies for the embedded systems team. The next day (Wed, 4/13/22) I got the offer! Super excited about that. Talked to Jason Wolfson at AirCycler today to let him know that I am not coming back and chatted about aircraft for a bit. I have stumbled across another video that I find extremely good and was inspired to make a curated list of some of the best youtube videos I have watched over the years. The videos will be loosely educational, hopefully leaving the watchers with a sense of satisifaction and having learned something new or seen something beautiful
Thank you! Jack
This site continues to evolve as I work on my self-hosting project at home with gateway. I have transitioned most of the notetaking that I did here into Obsidian because of multiple reasons including quality, markdown linking support, graph view, and more.
One important note that I want to make is to check out math animations for some fun animations that aren’t public facing.
This blog was a technical project that I am moving to my private server in order to have more control over the hosting and build process of the static pages.
Thank you! Jack
There is a reason why I love free and open-source software. I love open-source because the code is auditable, security can be reviewed just by looking at the source, the software isn’t an opaque black box, and it creates a community around a piece of software.
Each one of these has side-effects that are, for the most part, beneficial to everyone.
The ‘Free’ in free and open-source software does not primarily represent the price (although all free software does not cost money). The ‘Free’ stands for freedom. That is, the freedom to use, distribute, modify software as you please. This is a beautiful thing. There is no such thing as ‘sunsetting’ a free and open-source software project, the community of those who use the software have the freedom to maintain it. You are protected from feature regression of features that you need. Paywalls for features shouldn’t be a thing, and if a project is truly free and open-source, you can modify it and redistribute as you wish.
In a sense, free and open-source software is like writing software where the code that gets put in is democratically accepted by a project community. If a project maintainer goes haywire and starts accepting questionably contributions and changes to their project, the community can make a fork. If the fork is truly better than the original, there is no reason why it can’t become the dominant and most widely-used version.
I like machines, tools, and ideas that last forever. People buy lathes from the 1960s because they are reasonably accurate but will last forever. Free and open-source software are the software tools that will last me forever. Because of that I am willing to put in the time now to find, learn, and configure said software for a lifetime of utility.
Watching a lot of George Hotz recently. I am deeply inspired by his skills and his constant focus on his work. comma.ai and his new streams about the cherry computer are deeply interesting to me and I find that his content in general relates very well with my studies in statistics, mathematics, data science, machine learning, deep learning, and general computer science.
I started my REU (TRIPODS @ University of Massachusetts, Amherst) on Monday the 7th and since then have trained multiple models on my computer (actually my laptop because it has cuda cores). I am working on implementing a g-convolution into a new network to try and improve my preformance on a rotated and mirrored MNIST dataset. I haven’t quite figured out how each of the dimensions to my convolution is going to fit into the training but progress is coming along.
In other news, I am not so sure I want to stay with hugo. The popularity of jekyll really helps with finding themes and general documentation for me.
Been a while
I am going to be honest, last week was such a blur. On monday, I got home after a weekend with my mom and now its already Saturday afternoon. A lot of this has to do with how I’ve been spending my time, the workload at the end of the week due to exams, and also taking care of my family’s puppy Ivy.
I have two ideas of things that I want to do programming wise:
I would love to keep my minecraft configurations up to date effortlessly. Litematica is very cool and useful.
I’m not sure what I should write here today but I am sure I will have more stuff to write about after this weekend.
And we are back in Duxbury! After finishing up classes this morning, Lillian and I headed back to Duxbury to take Ivy to her first vet visit (Today!). Hailey and my father stayed home today and they instead took her which took some time pressure off of me. Once I got home, me and Lillian sat down on the couch and promptly took a 20 minute power nap (a really good one too might I add!)
This weekend was fantastic, lots of activities, canning, good food, and tons of laughs. Lillian and I left on Friday (9/18) at around 3ish so that we could make it in time for dinner to my moms. We made an italian style dinner with spaghetti and used the bread from brothers for olive oil dipping goodness. The meatballs in the tomato sauce were perfectly cooked and balanced everything out quite well.
The following day, we had a slow morning followed by a busy afternoon of going to farm stands to get ingredients (corn, tomatoes, and such) for tomorrow. We got back up to the lake and took the four wheeler out for a bit (which is in great shape!)… the dirt bike unfortunately did not want to start. We went to Norte, a mexican style restaurant in Stephentown, NY and the food was extremely delicious. Next time I go, I know I can fall back on a chicken chimichanga, the tortilla outside was perfection. We socialized with Mark Prescott, Ben, and Martha towards the end of our evening there and headed back to the camp where I gave Lillian a grueling Calc II lesson on integration, derivatives, and the definition of an integral (which she understood quite well). Zonk
On Sunday, we woke up, had some breakfast and starting doing homework almost right away. It was a busy day and also I got to see for the first time how much more homework Lillian had this semester over me (1st semester was equal, 2nd semester was busy for me, this one was busy for her). We then drove up the mountain to Dyken pond to do some chores, canning and also making of horseradish. Ron showed Mark, Ben, Me, my mom, Chris, and Lillian how to make horseradish from the roots. My mom gave me a brief walkthrough reminding me the steps of tomato canning.
It is very messy but that is what makes it fun. Lillian and I had homework to do so we went back down the hill to get the rest of her math quiz done. I had taught her a lot of concepts and heplful things to know when she is doing integration. She really hooked on to the integration with e^x in the integrand which was cool to see. Then from there, she really understood what u substitution was doing (reverse chain rule). Doing reverse product rule (integration by parts) was a little more difficult as getting across the theory is hard to do intuitively for me. I gave her the mnemonic LIATE which really helped and lots of reminders about u = and dv = integrations. Always always always don’t forget your dx’s! The integral is equal to 0 without them.
We had a prime beef roast which was yummy and later that night we also made a delicious batch of pretzels. Incredibly, I was able to figure out how to do a four way braid without ever doing one before, and putting it into a pretzel form! Nice and salty.
After getting the coffee jitters out before bed, I slept almost completely uninterrupted in the cold until my 8am bio class.
Five guys was the play on the drive home, Bye bye for now!
On the couch with Lillian. In center Berlin and feeling sleepy.