Jakob Gmoser


My Coding Journey

  1. Week 0
  2. Week 1
  3. Week 2
  4. Week 3 (Git commands)
  5. Week 4
  6. Week 5 (Docker commands)
  7. Week 6
  8. Week 7
  9. Week 8
  10. Week 9
  11. Week 10
  12. Week 11

Week 0

I took the decision to finally go deeper into coding, also professionally. Since the time we had programming classes in university I always thought that I want to try that at one point of time.

Now is that time. And luckily I already work in a little software development startup, so I got a few colleagues who I can consult on where to start and how to design my learning journey. I then took these inputs, and told ChatGPT to create a learning path shaped towards backend development for me based the input. The end-goal should be, that after 2 months I will be able to take on my first task in our company.

Week 1

Plan for the week:

Week 1: Introduction to TypeScript and Development Basics

  1. Learning Targets:
  2. Mini-Project: Create a basic calculator in TypeScript. This will allow you to implement conditions, take user input, and provide outputs. Push this project to GitHub.

In practice:

I signed up for the highest ranked Web Development course on Udemy based on the recommendation from a colleague. Cost: $15. Most of the week I spent with the course to revisit basic development principles (which I already knew from Java) and to learn about basic web development in HTML, CSS and JS.

I accompanied that course with reading about TypeScript. Every single colleague of mine motivated me to learn TypeScript.

In the end, I felt intrigued to make something that makes at least a little bit more sense to me than a simple calculator. I set out to develop a little tool for oncharging management for our company.

You can check it out here

What I learned:

Week 2

Plan for the week:

Week 2: Intermediate TypeScript and Introduction to Backend Development

  1. Learning Targets:
  2. Mini-Project: Use TypeScript to create a Node.js application that fetches and displays user data from a public API like the JSONPlaceholder. Handle basic errors like 404 or 500.

In practice:

The learning this week was again awesome, although I did not quite stick to the plan. I took on the task to provide a simple monitoring solution for one of our new products in testing. The possible solutions were either a Flipside Dashboard with some advanced queries and using new features or deploy a little script. For sake of having all information in one place and not having the deployment overhead we decided to go for Flipside. I spent a lot of time with SQL and Flipside this week, moved on with the Wev Development course, but didn't do any TypeScript.

I spent a lot of time this week on this dashboard

What I learned:

Week 3

Plan for the week:

Week 3: Advanced TypeScript and Introductory Scripting

  1. Learning Targets:
  2. Mini-Project: Build a mini server with Express.js in TypeScript that can read from and write to a file. Implement CRUD operations for a list of users.

In practice:

Again, a very practical week driven by what was needed in work. But anyways, when I look at the plan above, I managed to check off quite a few items: used and learned a little bit about async/await in TypeScript and I also worked a little bit with file operations ins Node.js. Most of the time I spent on setting up an Express.js server in Typescript for monitoring purposes. This week I used TypeScript a lot again, which helps with the syntax understanding.

Notes to myself on Git Flow and commands:

  1. git clone -> clone a repository
  2. git branch branchname -> create a branch
  3. git branch -> checkout branches
  4. git checkout branchname -> switch to branch
  5. git add . -> adds all files to the index to prepare for commit
  6. git commit -m "commit message" -> create a new commit with the changes and message
  7. git log -> see all commits and on which branches they happened
  8. git fetch origin master -> fetch newest version from master (only git changes)
  9. git pull -> updates local git repo AND the files in the local directory
  10. In order to merge changes from a branch:
    1. git checkout main
    2. git merge branchname
    3. :w! in order to go out of vim
    4. git push origin main -u -> in order to push it online
  11. More Git commands

What I learned:

Week 4

Plan for the week:

Week 4: Backend Frameworks, Tools, and Web3.js Introduction

  1. Learning Targets:
  2. Mini-Project: Add authentication to your Express server. Users should be able to sign up, log in, and view a private route only when authenticated. Implement a button that fetches the Ethereum balance of a hardcoded address using Web3.js.

In practice:

I couldn't spend a lot of time learning this week, as I had a lot of other stuff to do. When I had time I continued with the Udemy course and learned about using axios for server side requests, did my first Github Pull Request, learned about basic authentication methods and then started to learn about Databases. Specifically I learned the basics of MongoDB and mongoose.

What I learned:

Week 5

Plan for the week:

Continue on plan for last week and implement another mini-project where I can use all the learnings so far. Also I am going to learn Docker basics.

In practice:

These weeks is why I hold myself accountable here. Again, not really a lot of progress this week. I continued learning with Mongoose in node.js servers and also learned about some Docker basics. Two days of the week I was at a conference in Vienna, so there wasn't that much time left for coding in the end.

Notes to myself on working with Docker and important commands:

  1. docker ps -> list all running containers on the server
  2. docker exec -it "container_id" bash -> enter the container and open a bash terminal
  3. docker-compose up -d -> restart the container using docker compose

What I learned:

Week 6

Plan for the week:

Continue on plan for last week and implement another mini-project where I can use all the learnings so far.

In practice:

I implemented an event listener for mint events which are emitted by a smart contract in a NestJS based backend application. Just to figure out that the listener doesn't pick up all the events for several reasons. After discussions with a colleague we decided to take another approach and checking the logs for the event with a cron job regulary and pass the summed up values of these events. Voila! No events were missings anymore.

I also did some minor work on Flipside Boards and deployed my first little app on Streamlit Community

What I learned:

Week 7

Plan for the week:

Since last week was very practical and I implemented a minor working function in a NestJS backend, my curiosity this week takes me to frontend development, specifically React. So the plan for this week is to go through all React course lessons from the Udemy course and get a good feeling of what's possible to do with React and how it works.

In practice:

I went through some React lessons and got a good basic understanding of it. Started onboarding to my first bigger backend project.

What I learned:

Week 8

Plan for the week:

Continue onboarding to the 2 main backend projects of Brokkr. I will dive deep into the code and try to understand what the code does, how it is achieved and why it is implemented the way it is.

In practice:

This was the first time in my learning journey that I was only reading code for the most of the time. I went through the first backend project (almost finished by end of the week) more or less function call by function call in order to understand the context as good as possible. On the more fun side of this week I spun up another server on DigitalOcean and installed Dokku and a Ghost blog on it. I will publish more and more in the future on this blog but you can already be among the first subscribers here.

What I learned:

Week 9

Plan for the week:

More backend code onboarding. Understand the main things of Brokkr Backend. What does it do, how does it do that and why? Plan for this week was also to actually start coding again, by extending the current API functionality.

In practice:

Half of the week I continued to dive deep into the current Brokkr Backend code. Then I started coding again. My task was to extend the Brokkr API functionality and implement a little piece of new calculation logic. In order to accomplish this I also got onboarded to our internal backtesting tool (in Python) in order to generate some chart data. And I did another fun project this week and set up another Ghost Blog/Newlsetter, this time only with limited access for a group of friends, where each week one of us has to share an e-mail newsletter with updates from his life (since we are all remote from each other).

What I learned:

I wrote a little blog post about how to setup your own Ghost blog on any server with Dokku: Read it here.

Week 10

Plan for the week:

Coding on the Brokkr backend.

In practice:

I implemented a new route on the server which retrieves some on-chain data and I also added a new property to the already existing return object. Getting more and more in shape working with Git and Github. I learned a lot about how to structure code I write and how thorough one needs to be when writing production code. I also set up a little e-mail reminder app with Node Js in for the private blog with my friends. Each week one of us gets reminded to write a short newsletter update!

What I learned:

On the weekend I tried my luck with a CustomGPT. Say hello to ThorGPT, you can interact with Midgard API in a conversational way. Check out ThorGPT.

Week 11

Plan for the week:

Coding on the Brokkr backend.

What I learned:

Week 12

Soo many other things on my mind and to do...

Week 13

Plan for the week:

tbd

In practice:

For setting up new version of Raspberry Pi OS a new file "userconf" has to be created in root directory with "pi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Que2l1Dwq3vdJMgiZlQSbEXGaY5esVHGBNbCxKLVNqZW1" as content in order to support the standard pi & raspberry user password combination for ssh access.

What I learned: