A data-driven prognosis report

I have a big project ahead here at Salt - I’m going to write an entire boot camp from scratch. This is done as a single-person project and all my other colleagues are working on as normal around me.

I wanted to report my progress to them so that they know what’s happening and also that I can get some leeway of keeping my focus.

In this post, I wanted to share a very simple prognosis tool that I created based on the data that my work create. As always, it’s not perfect but it will give an accurate enough feel for where I am and when it will be done

A few words about the project

Unlike most software development projects I’ve been in the scope of this project is very clear;

  • I’m going to write slides, labs, and instructions for 13 weeks,...
Read More

Writing a Selenium test using .NET core and Visual Studio Code

I’m rediscovering my first programming love; .NET. I’m having a blast and .NET core keeps giving.

This post is one of those - I can’t believe that I couldn’t find this post on the net somewhere. Or I didn’t look hard enough.

But I wanted to setup Selnium testing, but only use .NET Core and Visual Studio Code on my Mac. Every example I saw was using older versions of .NET core (I’m writing this on .NET core 5) and/or Visual Studio, which I don’t have.


First, to make .NET and C# developement pretty good in a code editor, we need a few addons to Visual Studio:

  • C# extension

  • I also installed Prettier and added support for C# code formatting using the following snippet in my setttings.json-file

    "[csharp]": {...
    Read More

Making boring fun - bash and Node to the rescue

I rarely get paid to write code these days… or that is people rarely ask me to write code. But since I’m a programmer at heart it is one of the tools in my toolbelt, regardless of what kind of tasks I’m given.

Today I got asked:

Could you please list all Open Source Licenses we are using, and all the dependencies all our code is using.

Considering we have 130+ repositories I was what the scientist refer to as a boring task.

Let’s make it more fun with code.

I’m gonna wield my bash- and Node-swords to solve this sucker. And I was looking to do some functional programming exercises too - let’s see if we can squeeze all of that in there.

Getting the licenses out of the repos

Each repository has a package.json file that contains a Read More

When I learned a safety lesson - and did a little bit better

I like to automate repetitive and boring things I do in my daily work. This lead to that me write bash scripts from time to time, but the problem is that I’m a newbie scripter. I’m learning as I go.

And the other day I did a cardinal sin in scripting. Not only that - I decided to show the world. Now that is a point to feel ashamed or to learn. I did both.

In this post, I will tell you about how I made my curl-script a little better and a lot safer, but using an old way that’s been in curl for ages.

The background

I was waiting for the summer part of Salt to start and had an hour over. The weather was amazing and I found a nice tree to sit under. Of course, I flipped up...

Read More

Introducing ScrAdd - the script adder

I’ve been increasingly annoyed with the fact there’s no easy way to add scripts to a package.json file programmatically. It always messes up my lovely scripts for tutorial setups and other use cases. Very frustrating.

Well … until not that is.

I give you ScrAdd - the script adder.

Let’s say that you are writing a tutorial on how to test next apps. You want the readers just to get to the place where you can start to talk about code. My friend - just scradd in that command and take the rest of the day off!

npx create-next-app demo cd demo npx scradd . test "mocha . -R dot -w" npm i -D mocha 

I don’t expect this tool to be widely used and spread but I was pretty fun to write it -...

Read More

Some thoughts on scaled agile

I indirectly got a question that I thought would make a good blog post. The question came from the brilliant Emer on this LinkedIn post. That post in itself is a great read on the US Air Force’s thoughts on agile in general - great stuff in there.

Anyhow - Emer asked me:

Yes! I have read many posts by Allen Holub and our friend Woody Zuil on this. I do struggle though to find a way to practice “true” agility at a large scale. Do you have any good resources on this?

and I started to write a response but realized that I needed some more space. This blog post is that response.

Hi Emer - I am so happy to hear about your progress and to bounce ideas like this with you.

The trick with scaling is that there are no recipes...

Read More

Run react-script tests without watch

Oh, man! I’m so happy that I’m still sane. This error was about to drive me crazy.

Here’s the back story - we have about 120 repositories with a lot of exercises and tests. This is nigh on impossible to maintain by hand, so we have written scripts to verify the integrity of each repository. Each script is verifying that installation, linting, and testing works as expected.

The whole thing is built-in bash scripts and for the most part, works just fine. It’s quite rewarding to have it checked automatically, read about it here

But the repositories that have been created with create-react-app have caused problems from day one. They work just fine when we use them normally, but in the script, it’s flaky at best and just hangs at worst.

But. Now. I’ve. Found. A. Solution.

More problem

React-Scripts and Jest


Read More

Next.JS Error: No router instance found

I ran into a stupid problem I created for myself. And then I solved and that made me realize a thing about Next.JS and the server side rendering features of this framework.

I wanted to share my failures and solution to the problems I created here.

I have a page that is server-side rendered, since I’m the getServerSideProps.

One of the components on the page, reach out and grabs the router:

import { useRouter } from 'next/router'; const Header = () => { const router = useRouter(); } 

And I then added a click-handler like this:

<div onClick={router.push('/')}> ...stuff...
Read More

Uploading pictures to Firebase in React Native

It was quite some times since I wrote a programming related blog post - but now the time has come (and my programming output is poured at the Salt protips blog nowadays)

I’ve ventured a bit into React Native development and found it very enjoyable, especially in combination with Firebase stuff. But I had a really hard time finding a good example of how to upload files from my phone to the Storage services using Expo. I found this but I didn’t find it easy to follow as all of the code is in one single file.

So I took the original code and refactored it a tiny bit for better readability. My code is found here and in the post I’ll walk through some of the things that made me look twice.


The setup was plain and simple by...

Read More

Some questions about estimation and plannning

One of the most amazing things about my current job as a teacher and “head master” at Salt is to see amazing people take my material and make something more amazing with it. Or when see people start to venture down avenues that helped me (in this case agile, lean and no estimates) so much.

I got a question from Øyvind Ege - a brilliant developer from a class last spring/summer. And with his permission I will here publish his question and my response.

I hope you find it useful.

The question

Hi Marcus! Øyvind here from the summer 2020 class. I was hoping you could answer some questions I had about Agile!

I have the pain and pleasure of being both the full-stack developer and “Product Owner” (I guess, at least I am charged with “estimating” and “writing the specifications”) of a greenfield project....

Read More