"Is this the lake we're running around?" My sister uttered these fateful words on a sunny day in May 2024, knowing not the events she would set into motion. For the lake she was referring to, dear reader, was none other than Lake Mälaren , which: is the third-largest freshwater lake in Sweden (after Vänern and Vättern). Its area is 1,140 km2 (440 sq mi) and its greatest depth is 64 m (210 ft).…
I'm not one for New Year's resolutions, so instead I'll simply ask myself some questions. Why can't I just go to the gym three times a week? get 10,000 steps a day even without Rover pulling me along? go for a nice long run at least once a week, even if there's snow on the ground? write something in my blog every morning, even if it's just a series of random thoughts or a bawdy limerick of my own…
In addition to spending far too much of my time doing silly things with Clojure and then even farther too much of my time writing about doing silly things with Clojure, I spend some of my time thinking about, talking about, and participating in labour organising here in Sweden. As I was talking about unions and such to Ray one day, no doubt six tangents into one of my usual rambling explorations…
Last time on "Soundcljoud gets more cloudy", I found myself deeply saddened that the eternal truths I was seeking in the music of Garth Brooks remained elusive due to my attempts to seek forward in a track were rebuffed by my browser, instead abruptly returning me to the beginning of the track. 😳 Appropriately chastened, I popped the bonnet and had a look at what my user agent was doing on my…
Last time on "Soundcljoud, or a young man's Soundcloud clonejure", I promised to clone Soundcloud, but then got bogged down in telling the story of my life and never got around to the actual cloning part. 😬 To be fair to myself, I did do a bunch of stuff to prepare for cloning, so now we can get to it with no further ado! (Skipping the ado bit is very out of character for me, I know. I'll just…
😱 Warning! This blog post is ostensibly about Clojure (of the Babashka variety), but not long after starting to write it, I found myself some 3100 words into some rambling exposition about the history of audio technology and how it intersected with my life, and had not typed the word "ClojureScript" even once (though it may appear that I've now typed it twice, I actually wrote this bit post…
Who amongst us hasn't wanted to make a podcast? And of those who, who amongst them hasn't drooled over Zencastr , which is a web-based podcast recording studio thingy? I don't even know how to answer that question, as convoluted as it got, but what I'm trying to say is that I got to see Zencastr's cool interface, and have been meaning to play around with the browser's audio / video API anyway, so…
It's Valentine's Day, so let's talk about love. Specifically, let's talk about the forty rules of love. 💕 If you haven't heard of Elif Şafak (pronounced "Shafak" in English), you are in good company, if you consider me from six years ago to be good company (no offence if you don't; we don't know each other that well—unless we do, in which case whyyyyyyyy don't you like me?). In fact, if you…
As a longtime Linux user, I often find myself starting to type a complicated command. As a longtime programmer, I often find myself thinking, "Maybe I should just automate this," and open up a whatever.sh in Emacs. As a longtime Bash scripter, I often find myself hundreds of lines into a script and looking up how to do string substition for the 60,000th time. As a recent-ish convert to Babashka ,…
Life as an Arsenal fan was pretty great last season. No expectations whatsoever going into the season meant that those non-expectations were vastly exceeded. Infinitely exceeded, in fact. Of course, that bit late in the season where we wheeled out the old cannon and proceeded to blow our own foot off was a bit disappointing, but I was able to remind myself that at the beginning of the season, I…
As I was writing yesterday's post , I wanted to count the number of posts I had written during my last involuntary vacation in the summer of 2022. There is of course a very simple way to do this: Navigate to the archive page of my blog Realise that whilst there are only (as of the writing of yesterday's post) two posts in 2024 (three as of the writing of this post, since yesterday's is now there,…
Well well well, here I am again, staring down the barrel of a month of free time thanks to the largesse of venture capitalists providing funding to enable my employer to offer me an involuntary paid vacation. 😅 So what to do with my time? Since you're reading this, you may have guessed that part of what I'm planning to do with my time is get back to writing. Apparently full time employment…
Previously on this blog, my heart was filled with sadness as I realised that archiving photos to S3 wasn't actually a Flickr replacement . Currently on this blog, my heart is filled with a steely resolve as I take my destiny into my own hands and... I guess write some CSS or something? As cartoon Drake so helpfully points out above, the S3 console is missing a few of the features that you would…
Way back when, before I got my first Macbook (the white 2006 model, so cool!) and thus had no iPhoto to keep all of my photos for me, I used some open source photo album thingy on Linux (it was so long ago that I don't even remember what it was called) on a server running under my desk with a fixed IP. Using this amazing setup, I could create photo albums and share them with family who wanted to…
Admission of guilt Between the writing of the previous post in this series and now, two things happened: I got distracted by other stuff grzm fixed the issue properly upstream! 🎉 I decided to go ahead and post this for the record, just in case there's anything useful for anyone in there, and also to clear my palate (and my conscience) for some new blogging. 😉 So here you go: Just for the record…
You remember how I've been trying to write a site analyser for my blog for the last year or so? Well, I was using DynamoDB for storing some metrics, and I realised that would bankrupt me, so I decided to use Amazon Athena run SQL queries directly on my access logs instead. That should have been a great idea, but when I fired up my REPL with awyeah-api , I got quite the unpleasant surprise: comment…
I'm giving a talk on Blambda later this month at a local meetup group or two, and since I'm an experienced speaker, the talk is completely prepared, so now I have three weeks to rehearse it... in an alternate reality where I'm not a huge procrastinator, that is. In this reality, I haven't even written an outline for the talk, despite convincing myself that I was going to do that over the holiday…
I was walking Rover this morning through the snow, listening to a podcast on the dangers of economism, when I realised that my mind had drifted away from political theory and was stuck on a work-related problem. I've learned over the years that it's completely futile to fight that and try to turn my attention back to my podcast or book or whatever I was trying to do, so I leaned into it and tried…
Last time out , I was desperately trying to understand why my beautifully crafted page-aware lazy loading S3 list objects function was fetching more pages than it actually needed to fulfil my requirements (doesn't sound very lazy to me!), but to no avail. If you cast your mind back, I had set my page size to 50, and was taking 105 objects: comment ->> list-objects logs-client prefix take 105 ;; =>…
I've been using AWS for quite a while now, and one thing that is as inevitable as death and taxes is dealing with paging. All of the APIs that return multiple items support pagination in some way, and anytime you write code that needs to act on all items, you need to handle fetching pages. My quest to parse my own access logs , is no exception, since my logs are stored in S3 and my API needs to…
Back in the beginning of June this year, I left my previous job after six years. Since I wouldn't start my new job until September 5th, I had a nice long summer vacation ahead of me! In fact, my vacation even started before my son's (who's in school) and my wife's (who's a teacher), so I would have some time on my hands. One of the things I decided to do with this abundance of time was to start…
In the last instalment of Dogfooding Blambda , we dove into the details of how the new command line interface works . This is all well and good, but it doesn't directly help us along in our lofty goal of parsing access logs for my blog. Let's stop yak shaving and get back into it! Talking to S3 The first order of business is figuring out how to grab the access logs from S3. As previously noted, I…
Yesterday's most important thing was going to my local Bauhaus (a home improvement / building supply store) to buy some clamps so that I could repair two pairs of sunglasses that I broke playing football at the beach with my son (for some reason, I can't resist a header, even when I know that each header has about a 5% chance of hitting the top of my sunglasses' frame, and each such hit has about…
In the spirit of doing the most important thing first , I started my "workday" (I'm on vacation for one more week, but I have non-recreational things that I want to do, which I define as "work" relative to the other stuff I'm doing) by creating a Github repo for this writing project I'm working on with Ray. I've typically used Google Docs for this sort of thing in the past, so I'm interested to…
Like many people, I have many things I want to do, and many fewer hours available in which to do the things than would be required to do all the things. Hence, some prioritising is necessary. I'll handwave over how to do the prioritising today, because that would be a longer post that would require research and citations and—surprise surprise!—I don't have that kind of time today. Or rather I…
I have a friend named Ray, and Ray has a dog named Eula (yes, that EULA , and yes, Ray enjoys making bad jokes). As some of you may know, I also have a dog, whose name is Rover: People with dogs must walk these dogs several times a day, and since, as previously established, Ray and I are people with dogs, we walk them several times a day. Sometimes, these walks are coordinated (either by chance or…
Before I get into what I'm actually planning to talk about in this post, allow me to make a variety of excuses for my long silence here: I've been busy I've been lazy I haven't been able to think of interesting stuff to write about Etc. And allow me to invalidate these excuses so that you don't have to: Many people are busy and yet manage to do things that they want to do. Hmm, maybe this is…
It appears that it has been one month and one day since I last hacked the blog . Hard to believe! It's easier to believe that it's been five six days (I started this post yesterday but didn't finish it until today 😬) since I last blogged . I went camping over the weekend, and still haven't finished putting my gear away! 😅 As much fun as I've been having with the actual blogging, I must say I've…
In yesterday's installment of Dogfooding Blambda , I fully intended to show y'all Blambda 's command line interface, then walk you through how I implemented it, using the amazing babashka.cli library. However, me being me, I kinda meandered all over the place, and by the time I had finished the "show" portion of Show and Tell, my dog let me know, kindly but firmly as only a dog can, that the…
When last we left the epic tale of me trying to use a thing that I made myself and then being outraged at how poorly made the thing was, I had just gotten dependencies stuffed in a lambda layer and proved that it worked by deploying a lambda that listed some files from an S3 bucket. Hurrah! Of course, I ended that post by complaining about the incredibly bad UX of the thing I had built, and a…
After a brief detour to port my blog to quickblog and enjoy some sun in Málaga, I'm back to eating yummy dogfood by trying to use Blambda to parse my HTTP access logs: jmglov/s3-log-parser . I didn't realise it until I started writing this post, but it has actually been a month since I last used Blambda; I'm sure you all remember the wacky hijinks that ensued when I tried to make Blambda work with…
It's the beginning of August and Arsenal's Premier League campaign is starting again tonight with a match against Crystal Palace. This is definitely the most excited I've been about a new season in quite a few years! The start of the first Emery season was interesting because for the first time in 20+ years, no one had any idea what to expect, and the start of the second Emery season was exciting…
Earlier this summer, I decided to switch jobs after six years at my previous company. I had joined as an engineer, but a few months into the pandemic, I had one of those "OMG what am I doing with my life?" moments that I guess quite a few people did, and asked myself why I was still at that company after almost five years (as it was in the spring of 2020). It wasn't the industry; it wasn't…
I'm back in Stockholm after 12 days in Málaga, and as usual, it's both good and bad to be back. Good because coming home after some time away feels just like, well, coming home. And bad because you're not on vacation anymore and real life with real responsibilities reminds you how much you need a vacation! 😅 Our flight landed around 19:30 last night, and the hour it took to collect our luggage…
This is our last day in Málaga, and we took a walk in the foothills of Sierra de Mijas, the mountain overlooking the little towns along the Costa del Sol south of Málaga. The vistas were really stunning, with a very Wild West feel to them. This is for a very good reason, it turns out. We met my friend Pablo in Málaga the other day for dinner, and he told us that quite a few of the classic Sergio…
In today's "news", the recent heat waves around the world are exacerbated by human-caused climate change. This is exceedingly obvious to anyone who is not trying to wilfully suspend their belief in basic facts, but where this gets more interesting is that a team of scientists from around the world, under the auspices of the World Weather Attribution project, looked at the UK heatwave from the past…
I was reading a story this morning in The Intercept about problems being faced by renters entitled " Renters in Arkansas and Nebraska Face Eviction After Governors Refuse Federal Rental Assistance ", and wow did it ever push all of my buttons all at once. The gist of the story is that the US federal government has provided emergency rental assistance money (first $25 billion in December 2020, then…
We're staying in a one-room apartment in Spain for vacation, so we've been switching on the news in the morning whilst eating breakfast. The news has been absolutely chock full of wildfires and droughts and heat warnings and this morning, torrential rains in St. Louis that caused flash floods. So yeah, signs of the Apocalypse that is climate change, met with the usual indifference in the corridors…
I've been reading a biography of a recent US political figure. Let's see if you can guess who it is from these short excerpts from the book. The reporters made another misjudgement, brought on their own sense of self-importance. [...] The reason the reporters assumed X meant it [...] was that he had insulted and attacked the press as he said it. No one could do that and survive in American…
As I mentioned a couple of days ago, we're currently on vacation in Spain. We got here on Wednesday evening, but due to some miscommunication, we had to switch accommodations on Thursday. Today, I was supposed to meet the owner of the apartment where we were originally staying to return the keys. We had agreed to meet at 11:30 at the apartment, which would take just under 30 minutes to get to from…
In the autumn of 1996, I was in my last year of high school, and the time had come to figure out what to do with my life. Luckily, I had already done so: I was going to be a computer programmer! My dad had gotten an Apple IIc when I was 8, and that machine immediately became my favourite hobby. The person he had bought it from included a dot-matix printer, one of those cool green monochrome…
The family and I are sitting on the sofa in Malaga, watching the Austria-Germany quarterfinal match in the Women's EUR0 2022. I'm of course cheering for Austria, since they have two Arsenal players (goalkeeper Manu Zinsberger and right back Laura Wienrother ), and also since they are very much the underdogs. It's halftime, and Germany are leading 1-0 due to a ball recovery in midfield and a…
Today's post comes to you from high above Europe. The family and I are on our way to Spain for a couple of weeks, headed to the beaches of Malaga. This will be our first beach trip in just over two years, and I have to admit to having forgotten how all of this flying stuff works. I couldn't find the airport parking this morning, couldn't remember how to put a luggage tag on, and definitely forgot…
I had planned to write a post today about how I found out I'd been accepted to university a few years ago (OK, I'm being generous by calling it "a few", but whatever), but things kept popping up and before I knew it, it was time for me to drive my son's friend to the airport so he could fly back to England. And then when I got back from the airport, it was time to take Rover for a walk, and then…
I watched the Sweden-Portugal match at the Women's Euro 2022, and that is definitely what I've been waiting for from Sweden! We started the tournament against the Netherlands, who are definitely a good team, but they were there for the taking and we couldn't do it. We looked very rusty against Switzerland in our second match, but managed a goal early in the second half, then conceded immediately…
It's gonna be another short one today (#📞-it-📥), as I have 55 minutes to write this post, take a shower, and walk to the bus stop so I can head into town to meet my friend Jordan for a visit to Fotografiska , a cool museum of photography. I've been hacking quite a bit on my blog over the last few days, but it's been behind the scenes stuff that speeds things up for me when I publish a new post,…
When last we left our intrepid blogger (me), he (I) had just admitted that there was a bug in his (my) caching code. 😢 But never fear! He (I) grabbed some hammock time , then grabbed his (my) trusty REPL, then set about decomplecting the caching code to make it Rich compliant. This post will detail the outcome of that decomplecting. OK, I'm getting tired of switching from third to first person,…
One of the things I learned on Tuesday was that I had a bug in the caching code on my blog (of course there's a bug in caching code; that is one of the few things you can count on in life). As any Clojure programmer would, I meditated upon the words of Rich Hickey and became enlightened. I must decomplect! Let's look at what files are produced by my blog and what could cause them to become stale.…
I had this great post for y'all today where I fixed the caching issue on my blog and then walked through how I transformed the files to a new format, all in the Clojure REPL. Except. The programmers amongst you will already be laughing knowingly as I report that in the process of fixing the caching bug, I created 42 new bugs, all of which I needed to fix before I could publish this post. I'm happy…
Today was a highly educational day in which I learned many things. Here is a non-exhaustive list in roughly chronological order: Getting woken up by the sun pouring through your window is sometimes a good thing, like when you have a 09:00 meeting that you've forgotten to set an alarm for. Having a dog that you have to walk twice a day is a wonderful thing in the summer in Stockholm. It keeps you…