Having finished reading through the past 71 years of Hugo award winners and with the 2025 Hugo Award finalists announced, I'm planning to spend the next few months reading some of the 2025 finalists I won't be writing "reviews" of the novels by any means. I will simply be capturing my opinions about each one so I can think about them as a whole during voting. I hope to keep this up year-to-year as…
Sometime back in May 2019 I started reading award winners of the Hugo award for best novel in chronological order starting with the first novel awarded (from 1953). I regret not taking more time to document the process. I don't even recall how I decided to follow the list. I just needed something to help me to decide what to read at all. May 2019 is my best estimate based on exchange I had with my…
I have been (mostly) happily using Pipenv for many years now on all of my Python projects. Recently, I heard about UV so I'm giving it a try with the very small set of Python dependencies used for this blog.
Apple's T2 Security Chip gets itself in the way as much as possible when attempting to install Linux on a Mid 2019 Macbook Pro and a lot of the available documentation for Linux-on-the-mac online is pre-T2. After quite a bit of back and forth and eventually finding the right resources I managed to get Ubuntu installed on my MacBook Pro with everything working... except the microphone.
A few months back I started a new job with a much greater focus on development work over IT systems management. Unfortunately this has led to a pretty big drop off in amount of time spent on personal side projects, but happily my new employer is fully supportive of open source and I am able to release much of what I work on to the wider community.
A user attempting to install Baby Buddy submitted an interesting issue with the following error during the pipenv install process: THESE PACKAGES DO NOT MATCH THE HASHES FROM Pipfile.lock!. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them. docopt==0.6.2 from…
This post is part of the series, Advent of Code 2017 , where I work my way through (part of) the 2017 Advent of Code challenges in order to re-learn some of the basics of Python and reflect on some simple concepts and functionality. All my challenge code is available in cdubz/advent-of-code-2017 on GitHub. Day 16: One Billion Permutations in 0.535 Seconds Challenge: Day 16: Permutation Promenade…
This post is part of the series, Advent of Code 2017 , where I work my way through (part of) the 2017 Advent of Code challenges in order to re-learn some of the basics of Python and reflect on some simple concepts and functionality. All my challenge code is available in cdubz/advent-of-code-2017 on GitHub. Day 11: Navigating a Hexagon Grid Challenge: Day 11: Hex Ed Solution: advent-of-code-2017/11…
This post is part of the series, Advent of Code 2017 , where I work my way through (part of) the 2017 Advent of Code challenges in order to re-learn some of the basics of Python and reflect on some simple concepts and functionality. All my challenge code is available in cdubz/advent-of-code-2017 on GitHub. Day 6: max(x, key=y) Challenge: Day 6: Memory Reallocation Solution: advent-of-code-2017/06…
This post is part of the series, Advent of Code 2017 , where I work my way through (part of) the 2017 Advent of Code challenges in order to re-learn some of the basics of Python and reflect on some simple concepts and functionality. All my challenge code is available in cdubz/advent-of-code-2017 on GitHub. Day 1: zip() Challenge: Day 1: Inverse Captcha Solution: advent-of-code-2017/01 This…
I taught myself Python a few years ago by following the wonderful Learn Python the Hard Way (LPTHW) series by Zed A. Shaw . Since then, I have spent a decent amount of time in Python largely in the Django framework. Django is a lot of fun to work with because it abstracts away much of the complexities of developing a full-featured web application in Python. In this way, however, it has also led me…
Back in April, I learned about Timestrap , a self-hostable, Django -based time-tracking project from a post on HackerNews by Isaac Bythewood . As I have been learning Python in the past year or so, I reached out to Isaac and started contributing to the project. After getting familiar with the core application, I turned my attention to testing and eventually found my way to Selenium , a collection…
I was recently shopping online for a specific type of lotion (my skin seems to hate all other types). I am somewhat predisposed to avoid Amazon.com because its size and increasing dominance of online shopping concerns me as it moves closer and closer to "shopping" (in the sense that "searching" means Google to most people). However, my biggest reason for avoiding Amazon.com is simpler: it has…
Yesterday, while reviewing some logs I came across a curious entry in an Apache error log: [Wed Apr 19 08:51:48.119666 2017] [core:error] [pid 29210] (36)File name too long: [client 137.226.113.7:40907] AH00036: access to /YesThisIsAReallyLongRequestURLbutWeAreDoingItOnPurposeWeAreScanningForR esearchPurposePleaseHaveALookAtTheUserAgentTHXYesThisIsAReallyLongReques…
On Sunday, 19 March around 10AM I received an email with the subject line IMPORTANT: ProtectMyID Surveillance Alert . I was busy at the time so I flagged the message and moved on with my day. I had received these alerts a few times before when applying for credit cards and getting a home loan. While I hadn't done either of those things lately, I still was not particularly alarmed by the subject…
Having fallen behind a bit on Takeout Inspector , the 12 Years of Gmail series and some other projects, I decided to try to put something very simple together from beginning to end and actually launch it. One of my previous posts, Examining the Remnants of a Small DDoS Attack introduced me to the Python package ipwhois and the alternative WHOIS system RDAP . This eventually led me to a quick and…
After taking a look at the chat data in my export, I am finally ready to move on to some of the actual mail! Much of what I will look at here is pretty similar to what I was able to turn up with chat data. I tried to branch out a bit, bringing in a new package to create word clouds, and also refactored some of the Takeout Inspector code to form the beginning of a more "formal" report generating…
On Sunday (27 November 2016) a small website that I advise on was the victim of a DDoS attack that managed to knock the site offline. I received notice on Monday that the website was not working. I was able to ssh to the web server and quickly found that the database service was stopped. After a brief examination of the database logs (nothing too out of the ordinary), I started the service back up…
In my last post, 12 Years of Gmail, Part 4: Chat , I included eight Plotly graphs on a single page. All the graphs worked correctly, but the page was taking almost four seconds to render any content at all and up to 6-8 seconds to load completely without cached elements. By contrast, the landing page of chrxs.net takes less than a second to load with visual content rendering almost immediately.…
With the Finishing Touches in place, it's finally time to start looking at some of the data in my Google Takeout Mail export file. What better to start with than the Google Talk (or Google Chat , as I will refer to it) content stored within! I am starting with Chat because I was surprised to find it all stored in the export file. It makes sense as chat history is accessible from the Chats link in…
After spending last week Bootstrapping things and, somewhat related, working my way around Pelican , today I have tried to tie up loose ends so I can start spending more time thinking about what information I can get from all this data. While the package is far from complete, these "finishing touches" ended up being the three themes of this morning's work - Implementing a settings file Customising…
Jumping back in to Python has been just as fun as my first experiences with it. After brushing off some of the dust, I have managed to put together a (very) small package that does a couple of basic things with a Google Takeout Mail (mbox) file: Parses and standardizes the format of email addresses ; Imports key messages data in to an sqlite database ; Produces simple graphs of top recipients and…
I have been slowly migrating off of a Gmail email address for a couple of months now - I established this domain, selected an email provider, set up SPF, DMARC, etc. and finally created myself a new email address. I updated the address in all of the obvious places, but still found myself using Gmail frequently to keep up. At some point I realized that the only way to finish the migration would be…