GitLab CI: Deploy to FTP / SFTP with lftp

Lately, I’ve been using GitLab CI more and more to replace my Jenkins server. The main purpose is to run unit tests on my code and to deploy it to various services. A few older projects still require deployment to a shared web hosting provider using FTP or SFTP.

To handle that I’ve been using lftp, an open source utility that can upload files over various network protocols such as FTP, SFTP, HTTP, fish and even torrents. It is, however, a bit tricky to configure and get the hang of it. So let me walk you through my setup.

Continue reading →


Three years on YouTube

It's been three years since I started my YouTube channel, Simply Explained. In previous years (2017, 2018) I wrote blog posts where I reflected on what I did right, wrong and what I would improve. This year is no exception, so here we go!

Continue reading →


Signing Transactions (Javascript blockchain, part 4)

This is part 4 of my blog posts series in which we create a blockchain in Javascript. In the previous blog posts, we added wallets and mining rewards to our simple blockchain. But the current implementation doesn't validate transactions. We can effectively spend money from someone else's wallet! Let's fix that.

Continue reading →


Implement Content Security Policy with AWS S3 and CloudFront

About a week ago I found out that Troy Hunt had published a new course about modern web security. I decided to check out the introduction video and that made me realize that I don't have a Content Security Policy (CSP) for my website. In fact, I was missing a lot of security headers... Time to get up to speed!

Continue reading →


Transactions & Mining Rewards (Javascript blockchain, part 3)

This is part 3 of my blog posts series in which we create a blockchain in Javascript. In the previous blog posts we created a simple blockchain and implemented proof-of-work to protect it from spammers and attackers. However we made some shortcuts along the way: our blockchain can only store 1 transaction in a block and there are no rewards for miners. Let’s fix that!

Continue reading →


Older posts

Next page →