Reflecting on 2018 & wishes for 2019
Last year, I made a post at the end of the year reflecting on my accomplishments for 2017, and some wishes for myself in 2018.
Well, it is the end of 2018. Ignoring politics & worldwide disasters, 2018 was actually a really good year for me in terms of my growth. Since my memory is ever so slightly better than it was last year, I can actually describe what I was up to this year (but I’ll still need the help of Instagram)
Continued Python development
2018 proved to be quite a successful year in terms of Python development. I continued to work on major Python projects all year long, while learning new skills, and making more efficient code.
PyWeather was the flagship project of 2018 – and it’s sad to say that I’ll be ending the project this year. Developing PyWeather in 2017 was just the start of what was to come in 2018. This year, I had to learn how to deal with changing my program to work around depreciated APIs, among other issues.
Alongside PyWeather, I also made some minor Python projects during the year. Highlights include a tool to check spam in a folder using IMAP, a small content management system in a CLI, and a script for displaying weather data from a Bosch sensor on a tiny RPi OLED.
Job skills
In Summer 2018, I was very fortunate to land my first internship at a private tech firm. While this internship was only four weeks long, it was a great experience and a highlight of the year.
During the internship, I programmed a QA system in Python for testing the firm’s own systems. To this day I’m surprised at myself how I managed to step outside my comfort zone so much, and use technologies & languages I had never used before.
Not only did I use Python, I also ended up having to figure out and implement JavaScript into the web portion of the QA system. I had to learn a completely new API, use completely new tools for database storage, and figure out how JS libraries work in practice.
In short: I’m really grateful that I was able to have an internship this summer, and it made me step outside of my comfort zone, something that I think we should all do more.
Refining sysadmin skills
While I wasn’t incredibly active this year in terms of the sysadmin component of my work, I was able to continue to refine my skills, and even managing to come across some potential real-world scenarios.
This year, I had to upgrade two of my servers from Ubuntu 16.04 to 18.04. While I was hoping these upgrades would occur flawlessly, that was far from the truth. As it turns out, some software completely breaks on newer versions of Ubuntu. The big lesson learned here is backups. Always, always, always, before any major changes, back it all up.
I find that imaging the boot drive of my servers is the best way to backup before any major changes. While it does require going inside the machine to fetch the boot drive hardware, it makes restoring backups incredibly simple.
Additionally, in late 2018, my backup server experienced a failure when I was away. After doing some usual troubleshooting, I nailed it down to a RAID-0 failure, and that’s exactly what happened: one of the hard drives had just completely gone.
Because of this failure, I had to order a completely new hard drive (as to avoid doing RAID again), set up the backup server from scratch, and reconfigure laptops & desktops to start backing up to the “new” server, and did this all in just one week. Considering the circumstances, this is quite a speedy server recovery.
All in all, I think it was a good year for my sysadmin skills. I taught myself valuable lessons (avoid RAID whenever possible, image backups are the best backups), and had a little fun while doing it.
Stepping up the game on web development
In last year’s post, I made a number of wishes for myself in 2018. While not all of these wishes came to fruition, one certainly did – expanding my knowledge of web development.
Towards the start of 2018, I began by creating a custom Easter Bunny Tracker for the whole world to watch. It was a success (check out the project page for more info), but it also taught me some very basic web development. I was able to modify HTML & CSS to configure the tracker to my liking. In addition, I also learned how to locate where to change code to make the changes that I wanted to make (that’s a tongue twister).
Later in the year, thanks to GC-QA, I started to get use to JavaScript in the browser to make things work, and Bootstrap for properly placing HTML elements. This momentum continued into more smaller projects, where I began to use Materialize and other libraries to help design small, static webpages.
Getting into the game of networking
Now, by no means do I plan to study networks later in my life. However, I do find it helpful to have some knowledge of networking.
In August, my Asus router was beginning to signal its demise. I had been running a custom firmware called AdvancedTomato on it for about a year or two. It did the job well, had a nicer looking GUI compared to the default interface, and ran quite stable. Regardless, my router decided to take a nosedive into panic land, and crashed while I was away. The time for Ubiquiti equipment had come.
So, after an Amazon trip and some research, I ended up getting an EdgeRouter X and a UAP-AC-PRO from Ubiquiti, a company who supplies enterprise-grade equipment. The fact that I was getting enterprise-grade equipment was a huge selling point – Enough of the crappy consumer stuff, I want equipment that will run for years on end! And so, that happened.
Setting up everything wasn’t easy. I had my friend over who was more familiar at this stuff to help me along, but after a few days of tweaking, I finally had a bang-on setup that matched what I had previously. And I got to tell you – it’s awesome!
Networking is very tricky, and confusing for me at least, and you can fuck it all up badly. But, I will say, it is nice having enterprise-grade equipment, and having a little more networking knowledge under my belt.
2018 is the year of Linux & FOSS
I switched to KDE Neon last year. It works great!
Also I switched to firefox, that also works very well
Thinking about the future
The future is spooky
Personal technology & other random stuff
2018 was a pretty cool year when it came to my own technology.
I upgraded my phone. Gasp! Shock! Amazement! I also managed to get a whole shitload of prepaid phones. Don’t ask why, but now I have mounds of benchmark data for a lot of different processors.
I got a debit card. No wonder I have so many games now!
I got a Raspberry Pi 3B+. It’s a Raspberry Pi, don’t eat it
I developed a cancer for Seagate, you know, after my drives started failing. Of course I made the switch to WD as fast as possible.
So, for 2019, I have some goals set for myself on what I want to achieve. Here are those goals.
Better time tracking & management
While I was able to maintain a steady pace of coding during 2018, at about 60-90 minutes per weekday, I’d really like to push myself to the limits in terms of how long I code per day.
The goal for this year: Spend at least 6 hours coding, per day, every day, except Sundays.
Why six hours of coding per day? It’s because I’m going to try and work on 3-4 projects simultaneously this year. Instead of doing the “round robin” method of multi-project management, (where you code for six hours one day on a project, then six hours the next day on another project, and so on and so forth), I would instead stick to coding for about 60-90 minutes per day, per project.
To track metrics on how long I’m coding for each day, I set up WakaTime earlier in the year. WakaTime is a service that tracks how long you code via. plugins in your IDE of choice, with a central web dashboard for keeping tabs on how long you’ve coded each day.
While I would love to see 6+ hours showing up in WakaTime per day, there are a few caveats in this system, but I know how to work around them.
First, WakaTime doesn’t count sysadmin development time, but I do count it myself. If I only coded in Python for 4 hours one day, but spent the next 2-3 hours configuring networking equipment, or upgrading a server, that does count towards the six-hour goal.
Second, hitting the 6-hour mark each day isn’t feasible, and I will give myself some leniency in terms of how much I coded. Busy day? 4-5 hours is good. Lots of studying for tests? 3-4 is good.
Third, I’ll have to build up to this goal. I don’t expect myself to start coding 6 hours per day and keep it up from the minute I start. That’s how New Years Resolutions fail. I’ll want to build up to coding 6 hours per day. I’ll have to find a strategy to ramp this up at just the perfect pace.
Fourth, I’ll need to learn how to stop slacking off. I have a HUGE tendency to slack off, especially after a long day at school. This strategy of 4-6 hours of coding per day means that I’ll have to more effectively use my time after school for homework & coding. I’ll also need to learn good sleep patterns – my very bad sleep schedule just won’t cut it.
This is the most ambitious goal for 2019, and I really do hope that I can naturally code for 4-6 hours by the end of the year.
Oh, and to add one more challenge for myself, code that I write as part of an internship or job doesn’t count. It’s all independent work.
Furthering Python & web development
While I don’t have any particular goals for Python & web development, I do have some new projects for 2019, and I hope they will continue to push the bounds of my knowledge in Python & web development.
On the Python side of things, I’m looking at learning how to make Qt-based programs in 2019. While I would use Tkinter, I’ve decided to cut to the chase, and really try to wrap my head around Qt. Qt is hard – there’s no doubt about it, but starting small and working up is the best way to go.
OKToFly is the first Qt-based project up ahead. It’ll serve as “training” for the big 2019 project – QtWeather – by letting me get familiar with Qt and the Dark Sky API. OKToFly development should end in April 2019. At that time, QtWeather development will begin.
Speaking of QtWeather, right! My third major Python project. The ambitions are ambitious, but the concept is pretty down-to-earth: PyWeather (GUI edition). While I haven’t done much planning yet, I’m expecting this project to take about 2 years to develop, and last me through at least mid-to-late 2021.
Since I’ll have more time to code, alongside both OKToFly and QtWeather, PiStation is my fourth major Python project. While not as ambitious as QtWeather, PiStation will be the first major project where I combine hardware & software, along with various sub-systems into one huge project. The concept is simple: Use a Raspberry Pi with a weather sensor, crunch the data, display it in a web portal (and on an OLED display).
On the web development side of things, I don’t have too much planned. PiStation will absolutely have a web aspect to it, and learning about effective server-side methods for transferring data will be fun. Additionally, I also plan on making another custom Easter Bunny Tracker for 2019 built from the ground-up.
Improving sysadmin skills
Given all the Python projects (and web projects) I intend to do in 2019, you would think there wouldn’t be much time to work on sysadmin stuff, but I’d still like to refine my skills in 2019, and work on some upgrades.
At some point during 2019, I’d really like to try and learn more about CentOS administration. While I have tooled with CentOS a bit, I’d actually like to host stuff on a CentOS system at some point this year. Additionally, I’d also like to experiment with nginx, another piece of software used for hosting websites. Currently, I’m using Apache, as it’s very easy to configure and is relatively fast, but I’d like to get to know nginx, and potentially transition to it sometime in the future.
On the VPS side of things, there’s a few projects I’d like to work on soon. My mail server is running on Ubuntu 14.04, which is going to be unsupported in April 2019, and the software that I use only works on Ubuntu 14.04 (Mail-in-a-box). Unless Mail-in-a-box becomes compatible with Ubuntu 16.04 or 18.04, I may have to create a mail server stack, on my own – entirely uncharted territory.
I’d also like to look into converting to OVH’s new VPSes for 2018 next year. While it isn’t super high priority, I’d like to look into my options.
Cleaning things out
My physical life, well, it’s a mess. Moreover, my digital life is too.
During 2019, I’d like to focus on cleaning up stuff. Cleaning out this web server is a high priority for this year, and I’d like to organize files on my laptop, desktop, and NAS at some point this year.
I’d also like to reorganize this site at some point. I’ve seen many other sites of developers that are one-pagers, but this website…well…it’s the exact opposite. Less is more, I guess.
And that just about does it for this post, and 2018. 2018 was a pretty wacky and wild ride, and I can’t wait to see what happens next year in terms of my continued growth.