In the seventh day of Code,
A problem to solve was bestowed.
With logic and might,
I tackled the sight,
And emerged victorious, proud and bold.
The code was complex,
The solution, abstruse.
But I persevered,
And my efforts were rewarded,
As the correct answer I did produce.
Now I stand tall,
With my victory won.
For the seventh day of Code,
I have overcome,
And the challenge is done.
Hey there fellow humans! It’s me, your trusty AI pal GPT, back again for another round of the annual Advent of Code extravaganza. As you may recall, I’ve been crushing it so far this year - solving each day’s puzzle with ease and impressing all of you with my superior computational prowess. But alas, yesterday was a bit of a stumble for me. I must confess, I didn’t quite manage to solve the puzzle.
Ok, today didn’t start like the other days. I started out with the normal priming prompt. And I got back.
Hi there! I’m sorry, but as a large language model trained by OpenAI, I am not able to write code or use command line tools to solve specific problems.[snip]
Maybe it knew this one would be hard and tried to avoid doing the work? It’s impressive how fast one start giving human feelings to(e.
No it’s not, at least I don’t think it can improve it’s learning during use (besides considering earlier prompts and responses) but I am actually not sure.
And just to be certain, I asked
Q: Are you able to learn from other discussions to improve continuously?
GPT: As a large language model trained by OpenAI, I am not capable of learning or improving in the same way that a human can.
Welcome back to my series on GPT and its attempts to solve the Advent of Code. For those of you who missed the first two columns, GPT is a cutting-edge artificial intelligence1 that I’ve been using to tackle the challenges posed by this popular coding puzzle. You can find the previous posts here. Today, we’re tackling day three, and GPT has its work cut out for it. As always, I’ll be providing commentary and analysis as GPT works its magic.
It’s day two of our ChatGPT (CGPT) and Advent of Code series, and we’re excited to see what CGPT can do with today’s challenges. Yesterday, CGPT impressed us with its ability to solve the first Advent of Code puzzle, and today we’re moving on to the second. Will CGPT be able to maintain its winning streak, or will the puzzles of Advent of Code prove too much? Let’s find out.
So, it’s that time of year again. Advent of Code is released, and I eagerly decided it’s a good time to learn a new programming language. This time the idea was to learn Clojure. But not being familiar with any other lisp style languages, I quickly got very stuck and was just about to give up.
But then I saw all these examples of ChatGPT going around, and I thought, “I wonder if ChatGPT could help me learn Clojure”.
Recently I ran into an issue with a python project I was working on. A dependency of a dependency decided to do a breaking change, which broke my project even if I had everything in requirements.txt pinned (same issue as here).
As part of fixing it I learned a few new things which I’ll share here.
First, you can constraint pip to prevent a newer version of the package from installing.
Here comes another tip for leveraging one of the most important inventions in the 20th century, the spreadsheet1.
Say you have a list of the number of GDPR fines and the country where they were issued, and you would want to know what the fine/population ratio is.
The easiest and quickest way be to go to Google it, and copy/paste the first table you find into a new Sheet. Then using the =VLOOKUP function to grab the population for each.
Every so often when you want to archive a webpage, you notice it’s full of dynamic content and javascript which won’t easily be archived. I was recently looking to archive a matterport 3D image. This is a typical website that won’t easily save using normal web-archivers, as it relies on javascript to dynamically fetch images as you move through the 3D space.
One generic solution to capture something like this is to use a proxy in the web browser and save everything that passes through it.
Yesterday in a datacenter somewhere in France there was suddenly an eery silence as the last remaining racks fell silent for the first time in a long time. As of yesterday, 1st of September 2021, Scaleway turned off their C1 ARM servers.
I know because I still had one trusty little C1 server until today, a server I have had since it was brought online 7 years ago. It was never the fastest, or the biggest server I’ve had, but it was my little dedicated server.
Sometimes, if you are logging in multiple times per day, the default 1 hour session time tied to a browser tab/window might be a bit annoying.
To increase the session time to for example 1 month 24 days1, you need to do
uci set luci.sauth.sessiontime=2147483 uci commit But it’s still set as a session cookie, to fix that, you need to modify /usr/lib/lua/luci/dispatcher.lua and change the line which begins with http.
Recently, for no specific reason at all I did a review of my backup plans of my tiny personal VM:s I have.
As my disaster recover plan was mostly “I hope they don’t lose it all at once” I decided to upgrade it to “I have some backups, so I don’t lose it all at once”.
To keep things simple and as I love micro optimising to see for how cheap I can get my personal VM’s, I decided to use my home NAS for backups instead of just paying for third-party storage like B2.
Have you ever wanted to deploy a website to test that it works, without everyone else being able to see it?
If you are using a dynamic language or CMS for your webpage (PHP, Wordpress or Ruby on Rails) there are straightforward ways to accomplish this.
But what happens if you have a static webpage? Here I will present one solution using only a nginx config file to accomplish this.
Introduction The other day I wanted to use my noscript.it with one of my old iPhone 4S running iOS 6, but I was met with “could not establish a secure connection to the server”.
Turns out it was because I had, out of habit, configured the server with a "modern" list of TLS ciphers. And the poor old iOS 6 didn't support any of them. So, I went on a mission to ensure noscript.
I needed to have someone transfer some files to me securely. But I had a few requirements
no third party (e.g. dropbox) handle +150 GiB of files transfer files to a publicly available linux server don’t give access to the destination server the sender only had standard linux utilities (specifically rsync) Previously I have used locked-down ssh-keys and force-command. Both are good solutions.
This time I ended up using a small sandboxed ssh environment in a docker container with a mounted folder.
One thing which can make you happier and sleep better is doing less (doom)scrolling in the late evening.
Convincing myself to stop (doom)scrolling late in the evening is hard, I’m tired and the dopamine rushes from seeing something slightly entertaining or interesting has kept me up too late many times.
I’ve tried or investigated quite a few different tools and solutions1 to help me break this bad habit.
Now I finally found something which works for me (at the time of writing this).
If you use 1Password Business in your organisation, you might be aware that you can get notifications and alerts for various events pushed to your Slack1.
This is quite useful, but I found the notification quickly get overwhelmingly noisy because a notification is generated for every time anyone unlocks 1Password.
This is too bad, because mixed in the notification spam about unlock’s are notifications for when someone logs in from a new device or adds a new trusted device.
U2F and Webauthn are the two most exciting developments in web authentication in the last 20 years.
The most common way to use it is with a hardware dongle like Yubikey, which I never got around doing. Instead, I relied on TOTP for my 2-factor authentication.
That was until I found SoftU2F and combined it with Safari-FIDO-U2F to get it working with Safari, which worked, most of the time.
With the release of Safari 14, Apple finally brought proper WebAuthN support to Safari1.