Matthew Lang avatar

Matthew Lang

Web developer amongst other things

I found myself locked out of a recent GitLab free account I created for a specific purpose. Frustratingly, I have yet to be informed why my account was closed, and there has been no communication from GitLab. I’ve since recreated everything in GitHub. To be locked out without any communication is poor.

📷 day 3 - shadow

A person is putting on a golf green surrounded by trees under the bright sunlight.

📷 day 2 - curve

A golf course green with a sand bunker in the foreground and a red flag marking the hole, surrounded by lush greenery and stone walls.

📷 day 1 - tree

A neatly pruned, tiered tree is planted in a large pot, surrounded by a variety of plants in a nursery setting.

Web development like it's 2009

I am in favour of Simon Willison’s “no build frontend” web development approach.

If you’ve found web development frustrating over the past 5-10 years, here’s something that has worked great for me: give yourself permission to avoid any form of frontend build system (so no npm / React / TypeScript / JSX / Babel / Vite / Tailwind etc) and code in HTML and JavaScript like it’s 2009.

I’ve been building Writeabout in Sinatra, and I’ve reached the point where I need to add a bit of JavaScript to allow the changing of the light, dark, and system themes. I already have these implemented in the original Rails code as Stimulus controllers, but I’m sure it won’t be too much work to rewrite them as plain old JavaScript.

I don’t have a favourable opinion of frontend web development. I’ve always found it unnecessarily complicated and constantly changing, but rarely for the better. For the last few years, I’ve used TailwindCSS because its build step in Rails applications is minimal—the productivity gains outweigh the added complexity. Beyond small learning projects, I’ve resisted adopting anything like React or TypeScript.

I love blog posts like this. It’s about the benefits of a pen and a notebook for software developers.

That post led to another post by the author about how they take notes at work as a software developer and a few others I have read.

Definitely a blog worth subscribing to.

That’s the 2nd time in a matter of weeks I’ve used a YAML file as a data source instead of going to straight to creating a table in the database.

The YAML file bridges that gap nicely of not needing the database quite yet, but we do need to store some structured data.

That’s pretty much most of my repositories moved from GitHub to sourcehut.

Writeabout is still on GitHub but is undergoing a Sinatra rewrite. Once that’s complete, I’ll mark the one on GitHub as archived and publicise the new one on Sourcehut.

More of my projects will gradually appear on sourcehut.

Finding the Right Git Platform for Personal Projects

I migrated one of my two GitHub accounts to GitLab a few weeks ago. The move itself had nothing to do with missing features or pricing. It was primarily to try out something else that wasn’t GitHub.

At my job, I spend most of my days on GitHub. When working on my little projects, stepping back into GitHub feels like I am back at work again. With the lines blurring between work and personal coding, I started to think that when I spent time coding on my projects, it still felt like “work”.

So, for one GitHub account, I migrated that account to GitLab. It’s been a great move, and despite being on GitLab’s free tier, I can still match feature for feature what I was paying GitHub for. And when it comes to working with that account, I don’t feel like I am back at my desk.

After the move, I considered moving my other private repositories to GitLab, but GitLab would be more than I needed. It has many great tools for maintaining code bases, but I don’t need them for smaller projects.

I needed something other than GitHub or GitLab.

Enter SourceHut, created by Drew DeVault. SourceHut is a collection of open-source development tools that are a good alternative to GitHub and GitLab.

I’ve been considering using SourceHut for a while, but I have only started seriously considering it in the last couple of weeks.

Today, I created my account and initialised a single repository to get me started. A much more straightforward and basic user interface is strange, but it works. I have become accustomed to the feature-rich user interfaces of GitHub and GitLab. While SourceHut lacks many of the features found in the two bigger platforms, the simplicity of the SourceHut user interface makes it refreshing to use, with just the essentials.

Over the next few weeks, I will migrate more repositories, and then I can demote my GitHub account to be used only for work.

I’ve been having quite a positive experience with Claude.ai inside the Zed text editor. More verbose than Copilot, but definitely better results than ChatGPT and Copilot.

Golf courses are great for taking pictures.

Sunlight filters through the trees, casting shadows on a grassy landscape with a serene forest backdrop.

Finally finished my greenhouse project.

A much better use of the space and will be a better environment for growing. We’ve more flowers growing on the deck as well. Be nice when these are in full bloom.

We’ve more plans for next year. A couple of raised beds will be added for vegetables and herbs.

A small glass greenhouse with a black frame is situated on a bed of stones in a backyard garden.

A cracking for our golf club’s juniors to start their league matches. It’s looking like a draw but could still go either way.

A lush golf course features well-maintained greens, sand bunkers, and is surrounded by trees with a person visible in the distance.

I started putting the steel base down on top of my greenhouse’s foundation tonight. Hopefully, it will be fully built and ready to host some plants by next week.

Good times ahead at Green Bay?

Green Bay’s first wide receiver round 1 pick since 2002 isn’t the only reason the Packers fan base is excited. Matthew Golden had some great stats for last season and the playoffs.

In 16 games last season, he hauled in 58 receptions for 987 yards — 17.0 yards per catch — and nine touchdowns as a trusted target for quarterback Quinn Ewers. Golden saved his best play for down the stretch, posting season highs in receptions (eight) and receiving yards (162) against Georgia in the SEC Championship Game. During the Longhorns' thrilling double overtime win over Arizona State in the quarterfinals of the College Football Playoff, Golden had seven receptions for 149 yards and the game-tying touchdown in the first overtime.

Stats like this are encouraging, and hopefully, Golden can carry this production level to the Packers for many seasons to come. I’m also looking forward to seeing Christian Watson return. Having Golden and Watson on the field together gives Love a lot more options.

I’ve been using the Claude 3.7 Sonnet LLM within Zed and the results have been pretty good. Claude is a lot more verbose than my previous experience with Copilot and a few times has recognised issues around my code that I didn’t see initially.

On-course lesson for the boys today with their coach. Turned out to be a cracking day for it despite the downpour this morning.

I’m just acting as caddy for the wee yin. 😂

Three people are playing golf on a wide green course under a partly cloudy sky.

A cracking lunch today at the Upper East Side cafe in Paisley.

A plate features a sandwich with beef and cheese, waffle fries, and a small cup of brown dipping sauce.

Watched the first episode of season 2 of The Last Of Us. Absolutely loved it.

A good day with the boys on the course today. The big yin and I didn’t play too great, but the wee guy played brilliantly.

A person in a blue outfit is swinging a golf club on a grassy area surrounded by trees.

Good GitLab features for devs building on the side

Over the weekend, I spent time getting my GitLab account, working with a single repository, and migrating the CI script from GitHub to GitLab.

The biggest issue was the CI script, and why shouldn’t it be? There’s rarely a “one script fits all” regarding CI scripts. When I started this project, I had issues getting the CI script working in GitHub. After a few pushes on the one branch, I eventually got there. Migrating this script to GitLab’s CI ways was more straightforward than I thought, but I still had a few issues I managed to resolve.

In addition to all the usual source code management goodies that GitLab offers, a few stood out.

Private repositories are available on GitLab’s free tier. Having used GitLab in the past, I already knew this, but it’s refreshing to see that GitLab is sticking with offering this feature on a free tier.

Feature flags are available on GitLab’s free tier. They are a means of configuring how your code behaves by using toggles and checks to ensure that it only carries out certain functionality. I have a number of feature flags in my application, but they are all based on a YML file in the source code. I will be migrating these to GitLab, though, so that I can toggle them without having to deploy any changes to the YML file that controls them.

Error tracking is available on GitLab’s free tier. Previously, I used Sentry for this, but GitLab also uses Sentry under the hood for their own error tracking feature. Yes, I can probably get more information by having a dedicated Sentry account, but at the moment, I am just checking to see if users raise any errors in the application.

For developers building on the side, these features on GitLab’s free tier are of great value and definitely swing my vote from GitHub to GitLab. Over the next few weeks, I hope to migrate the feature flags over, use more of GitLab’s platform, and see what it can help me with.

Juggling some apps again

I’ve been juggling several app changes over the past few weeks.

Gone are the GitHub and Copilot accounts and subscriptions I used to build a product. I’ve replaced them with a GitLab account on the free tier. The GitLab free tier offers quite a lot compared to GitHub, but there are downsides, like no security alerts. However, I can manage for the moment. I’m still not sold on the GitLab Duo subscription, but I’ve covered that with the following subscription change.

I upgraded my ChatGPT account to the Plus plan over the last month, and I think I will keep it for the immediate future. It’s not quite as integrated as Copilot when it comes to assisting with coding, but it works well for diagnosing issues in my code when needed. I also use it more when searching the web for something specific. I still use DuckDuckGo for general searches that I can filter by the most relevant results, but I use ChatGPT for more targeted searches.

Finally, after a few months with Ulysses, I’m just not using it how I thought I would, so I downloaded Bear again and started moving some of my notes over to that to start using it again. Bear feels less formal than Ulysses, which is why I don’t think Ulysses is sticking for me.

We’ll see how the change goes over the next few weeks.

For the first time this year, I’m working from outside in the back garden. Over the summer, I’ll work a lot more between here and the golf club. Once all the usual chores have been done, I’ll share a picture of the back garden office.

Finally, can get a few holes in after work now the light nights are here.

A person walks across a grassy field at sunset, surrounded by trees and casting a long shadow.

After a much-needed lazy Saturday morning, I spent the afternoon doing a dry run of the base for my greenhouse. The bricks are lined up and level, but they need a final layer of concrete to keep them in place. I’m happy with the first run at it, though.