Skip to content

Latest commit

 

History

History
executable file
·
959 lines (499 loc) · 47.3 KB

log.md

File metadata and controls

executable file
·
959 lines (499 loc) · 47.3 KB

100 Days Of Code - Log

Day 99 - 100: July 31, Wednesday

Today's Progress: Setting up debugging TypeScript Jest tests in VS Code is a ?@$%&*! nightmare pure joy. I feel a blog post coming on. Worked on my Ultimate-Tic-Tac-Toe AI bot for codingame.com.

Thoughts Nothing to report.

Link(s) to work

  1. Ultimate Tic Tac Toe

Day 98: July 29, Monday

Today's Progress: Have you ever implemented a Monte Carlo Tree Search algorithm? Don't! I have, and now I'm left with an uncontrollable twitch in my right eye. But seriously, it's a lot of fun, if not exactly trivial. Yes, I'm still working on my Ultimate-Tic-Tac-Toe AI bot for codingame.com.

Thoughts Nothing to report.

Link(s) to work

  1. Ultimate Tic Tac Toe

Day 97: July 29, Monday

Today's Progress: Worked on my Ultimate-Tic-Tac-Toe AI bot for codingame.com. Bitboards and bitmasks are the shiz. Of course, my code is now an incomprehensible mess...

Thoughts Nothing to report.

Link(s) to work

  1. Ultimate Tic Tac Toe

Day 93-96: July 28, Sunday

Today's Progress: Worked on the Beer Song and Say exercises on exercism.io. Also worked on optimizing my Ultimate-Tic-Tac-Toe AI bot for codingame.com.

Thoughts Nothing to report.

Link(s) to work

  1. exercism
  2. Ultimate Tic Tac Toe

Day 92: July 24, Wednesday

Today's Progress: Worked on the Proverb and House exercises on exercism.io. That's enough creepy nursury rhymes for one day.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 91: July 23, Tuesday

Today's Progress: Worked on the Matrix and ISBN Verifier exercises on exercism.io. I close my eyes and still see Regular Expressions.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 90: July 22, Monday

Today's Progress: Worked on implementing a Variable Length Quantity encoder and decoder. I think I've used bitwise operators more today than I did in all of the past 3 years.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 87-89: July 21, Sunday

Today's Progress: Worked on solutions to different exercise on exercism.io, but mainly spent some time getting familiar with Blazor and Blazor-State.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 86: July 18, Thursday

Today's Progress: Worked on solutions to the Two Bucket exercise on exercism.io.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 85: July 17, Wednesday

Today's Progress: Worked on solutions to the Phone Number and Largest Series Product exercises on exercism.io. TIL that you can implement a [Symbol.iterator] function as a generator function, saving you the trouble of returning an object that conforms to the iterator protocol.

Thoughts Nothing to report.

Link(s) to work

  1. exercism
  2. Collections

Day 84: July 16, Tuesday

Today's Progress: Worked on solutions to the Acronym and Anagram exercises on exercism.io.

Thoughts Nothing to report.

Link(s) to work

  1. exercism

Day 83: July 15, Monday

Today's Progress: Implemented game end mechanics in my 7 Wonders game engine and tried (and probably failed) to decouple my backend from my frontend code using interfaces and dependency injection.

Thoughts Nothing to report.

Link(s) to work

  1. 7 wonders

Day 79-82: July 14, Sunday

Today's Progress: Worked on solutions to the Isogram, Roman Numerals and Series exercises on exercism.io.

Thoughts I coded about an hour every day between July 10 and 14 but I forgot to log and Tweet.

Link(s) to work

  1. exercism

Day 78: July 10, Wednesday

Today's Progress: Finally got my random Pareto number generator visualization working. Refactored my solution to the Pig Latin exercise on exercism.io and implemented a Victory Points Counter class in my 7 Wonders game engine.

Thoughts Nothing to report.

Link(s) to work

  1. Random
  2. exercism
  3. 7 wonders

Day 77: July 9, Tuesday

Today's Progress: Looked into generating bounded random Pareto numbers, couldn't get it to work. Refactored my solution to the Pangram exercise, and worked on a solution to the Twelve Days and Pig Latin exercises, on exercism.io.

Thoughts Nothing to report.

Link(s) to work

  1. Random
  2. exercism

Day 76: July 8, Monday

Today's Progress: Implemented dicarding and earning coins in my 7 Wonders game engine. Also played around with visualizing random number generation with a normal distribution.

Thoughts Nothing to report.

Link(s) to work

  1. 7 wonders
  2. Random

Day 75: July 7, Sunday

Today's Progress: My 7 Wonders game engine now has the mechanism in place to step through turns and ages. Next up: discarding and earning coins.

Thoughts Nothing to report.

Link(s) to work

  1. 7 wonders

Day 74: July 6, Saturday

Today's Progress: Played around with Perlin Noise some more.

Thoughts Nothing to report.

Link(s) to work

  1. Random

Day 73: July 5, Friday

Today's Progress: Played with Perlin Noise.

Thoughts Nothing to report.

Link(s) to work

  1. Random

Day 72: July 4, Thursday

Today's Progress: Had fun visualizing the randomness of Math.random using the HTML Canvas.

Thoughts Nothing to report.

Link(s) to work

  1. Random

Day 71: July 3, Wednesday

Today's Progress: Worked on implementing a card deck shuffler using the Fisher–Yates algorithm.

Thoughts Nothing to report.

Link(s) to work

  1. 7 wonders

Day 70: July 2, Tuesday

Today's Progress: Implemented functions to generate Wonder cards and Constructions cards in my 7 Wonders game engine.

Thoughts Nothing to report.

Link(s) to work

  1. 7 wonders

Day 69: July 1, Monday

Today's Progress: Worked on a .CSV parser to get card data into my 7 Wonders game engine. Refactored my solution to the "Bob" exercise on exercism.io.

Thoughts I've been thinking alot about how to find the right level of abstraction when solving problems with code. Easier said then done. Striking a balance between pragmatism, meaningfulness, readability and reusability is not easy.

Link(s) to work

  1. 7 wonders
  2. Bob

Day 68: June 30, Sunday

Today's Progress: Worked on AI player name generation and player supplied name validation for my 7 Wonders game engine.

Thoughts My head is empty.

Link(s) to work

  1. 7 wonders

Day 67: June 29, Saturday

Today's Progress: Found an excel file on boardgamegeek.com with all of 7 Wonders's cards' charateristics. Converted those to CSVs to use in my 7 Wonders game engine. Probably saved myself a few hours of work. Started implementing the game setup phase.

Thoughts I've been learning a lot live coding on Twitch and interacting with other devs. Makes me realize that I would probably grow much faster as a developer if I worked as part of a team for a while.

Link(s) to work

  1. 7 wonders

Day 66: June 28, Friday

Today's Progress: Started work on a 7 Wonders game engine in Node.js. Had a great time on Twitch and got some good pointers from #sleeplessbytes and others.

Thoughts There is so much I have yet to learn but it's interesting how it seems to get easier and easier to take on new knowledge and concepts. The more I learn, the easier it is to learn.

Link(s) to work

  1. 7 wonders

Day 65: June 27, Thursday

Today's Progress: Optimized the remove and search methods of the Binary Search Tree in my collections library.

Thoughts I often end up coding in the morning and then again in the evening. Having to take 10 minutes every night to log my activity and post to Twitter is kind of a drag. Maybe I should just log after my morning sessions and include what I did in the PM the previous day.

Link(s) to work

  1. Collections

Day 64: June 26, Wednesday

Today's Progress: Optimized the insertion method of the Binary Search Tree in my collections library.

Thoughts Logging my activity everyday and posting it to Twitter is starting to feel like a chore. I'm trying to make my logs and posts interesting and it takes me too long to do. Going forward, I won't worry too much about because otherwise I'll find my self resenting it.

Link(s) to work

  1. Collections

Day 63: June 25, Tuesday

Today's Progress: Implemented the deletion algorithm for my binary search tree class. A little more complex than I thought, especially for nodes with 2 children, but it works like a charm.

Thoughts As I'm now seriously thinking about applying for programming job I find myself wondering what kind of projects I should pursue in order to showcase my abilities.

Link(s) to work

  1. Collections

Day 62: June 24, Monday

Today's Progress: Started implementing the Binary Search Tree class. I got the insertion method done. Implemented a Comparable interface to make it flexible.

Thoughts Last day of the long weekend and frankly I can't wait to get back to my routine.

Link(s) to work

  1. Collections

Day 61: June 23, Sunday

Today's Progress: Decided to make my generic binary tree class into an abstract class. Binary search tree implementations will extend it. Found this cool visualization library. Looking forward to trying it to visualize the inner working of my data structures.

Thoughts Sooooooo tiiiiiiiirrrrreeeedd!!!

Link(s) to work

  1. Collections

Day 60: June 22, Saturday

Today's Progress: Took a step back from WAVL trees and decided to implement a generic binary tree.

Thoughts I know I've said this before but this weekend really showed me that context switching sucks. It feels like coding for only an hour is almost like not coding at all. So I coded for two and half hours and went to bed late. Tomorrow morning is going to be painful.

Link(s) to work

  1. Collections

Day 59: June 21, Friday

Today's Progress: Toyed with WAVL tree implementation.

Thoughts Barely got my hour of code in today... but I did.

Link(s) to work

  1. Collections

Day 58: June 20, Thursday

Today's Progress: After some further performance testing and research, decided it would be worth implementing a SortedMap and SortedSet backed by a binary search tree. They don't beat a hash table for sets and gets but they allow for more efficient range queries.

Thoughts I have a three day conference coming up and it's going to be a real challenge to get my coding in.

Link(s) to work

  1. Collections

Day 57: June 19, Wednesday

Today's Progress: Tested performance of SortedMap vs JS built-in Map. I was thinking of maybe implementing a SortedMap using a binary search tree but when I compared other JS implementations against the buil-in Map it didn't look like there was any advantage to do that.

Thoughts Nothing much to say here today.

Link(s) to work

  1. Collections

Day 56: June 18, Tuesday

Today's Progress: Implemented Stack and Queue data structures in my Collections library.

Thoughts Considered implementing a Linked List but I don't really think there is a use case for it in JavaScript seeing how most popular JavaScript engines have super optimized the built-in Array.

Link(s) to work

  1. Collections

Day 55: June 17, Monday

Today's Progress: Completed the Pythagorean Triplet exercise on exercism.io.

Thoughts Took the day off yesterday. Needed a mental break. Spent some time with friends and played video games.

Link(s) to work

  1. Pythagorean Triplet

Day 54: June 15, Saturday

Today's Progress: Added a generic Collection interface and abstract class to my helper functions.

Thoughts Didn't have much time to code today.

Link(s) to work

  1. Collection

Day 53: June 14, Friday

Today's Progress: Solved the Sum of Multiples and Grains exercises on exercism.io.

Thoughts Solved Grains using recursiveness and the with math. Recursive functions are cool, but not the most performant.

Link(s) to work

  1. Sum of Multiples
  2. Grains

Day 52: June 13, Thursday

Today's Progress: Solved the Luhn and Complex Numbers exercises on exercism.io.

Thoughts Complex numbers are indeed complex. Thanks to Khan Academy for helping me understand them a little better.

Link(s) to work

  1. Complex Numbers
  2. Luhn

Day 51: June 12, Wednesday

Today's Progress: Solved the Perfect Numbers exercise on exercism.io. Worked through chapter 12 of Bob Nystrom's excellent book Crafting Interpreters and the interpreter now works with Classes.

Thoughts The debugger is like magic. It's amazing how you freeze time and travel through your code at your own pace while examining the program's state every step of the way.

Link(s) to work

  1. Perfect Numbers
  2. lox-ts

Day 50: June 11, Tuesday

Today's Progress: Worked on the Last Crusade - Ep2 puzzle on codingame.com. Worked through chapter 11 of Bob Nystrom's excellent book Crafting Interpreters which introduced a resolver for static scoping but it introduced some bugs and I have yet to figure out where the problem is.

Thoughts Debugging late at night when you're tired is useless... just go to bed, you'll figure it out in the morning.

Link(s) to work

  1. Last Crusade - Ep2
  2. lox-ts

Day 49: June 10, Monday

Today's Progress: Started the Last Crusade - Ep2 puzzle on codingame.com. Worked some more on the interpreter for the Lox programming language described in Bob Nystrom's excellent book Crafting Interpreters. Finished chapter 10 and the interpreter now deals with functions, including closures.

Thoughts Had a bit of a frustrating moment today when I couldn't get Rollup to behave the way I wanted to. JS tooling can be so frustrating sometimes. The lack of convention can be quite problematic at times.

Link(s) to work

  1. Last Crusade - Ep2
  2. lox-ts

Day 48: June 9, Sunday

Today's Progress: Worked some more on the interpreter for the Lox programming language described in Bob Nystrom's excellent book Crafting Interpreters. The interpreter now deals with if statements, logical operators, while and for loops.

Thoughts Have I mentioned before how much fun working on a programming language interepreter is? It's fun, so much fun.

Link(s) to work

  1. lox-ts

Day 47: June 8, Saturday

Today's Progress: Barely got my hour in today. I beefed up my Array2D class by adding getIndicesDirectionOf() methods. I got the idea while working on the Last Crusade puzzle yesterday.

Thoughts I'm running into a weird problem with Rollup where it throws an error when I import a class from a file that is higher up the hierarchy than the package root directory. Will have to look into this.

Link(s) to work

  1. Array2D class

Day 46: June 7, Friday

Today's Progress: Solved the Last Crusade - Ep1 puzzle on codingame.com. Worked some more on the interpreter for the Lox programming language described in Bob Nystrom's excellent book Crafting Interpreters. The interpreter now deals with statements, assignement and scope.

Thoughts Gosh darnit! It's impossible to have an original idea anymore. I stumbled on this free online book by Bob Nystrom called 'Crafting Interpreters'. The book is relatively new, in fact it's not even quite finished yet. So I got this great idea: I'm going to write an interpreter for the little language he invented for the book (Lox) - I mean, how many people are even going to do that - and then I'm going to write an extension for it in VS Code.

I'm half way done with the interpreter and I'm about to test it on a .lox file - .lox extension made sense but nowhere in the book does he suggest using that extension.

As soon as I create the file, VS Code displays a pop up that says there is an extension that can help with .lox files. At that point I'm thinking 'Oh, there must be some other kind of language or program that uses that extension', so I click on it out of curiosity.... Grrrr!!! someone beat me to it. And looking at the changelog, by about 5 weeks. This is almost depressing.

But I'm not giving up. The guy only did a syntax highlighter, I'm going to double down. That's right dberezin, I see your syntax highlighter and raise you a fullon language server, with autocomplete, error-checking, jump-to-definition etc... and then... a debugger.

Link(s) to work

  1. Last Crusade - Ep1
  2. lox-ts

Day 45: June 6, Thursday

Today's Progress: Solved Closest Number puzzle on codingame.com.

Thoughts Enjoyed pair programming with Steve Cramer. It is a learned skill though. At one point I kind of got lost and I guess I didn't communicate that clearly. It made keeping up with the rest of the coding session a bit of a challenge. That's on me. In the future, I'll have to make sure that we put on the brakes if I can't keep up, and not be afraid to look dumb because I'm not 'getting it'.

Link(s) to work

  1. Closest Number

Day 44: June 5, Wednesday

Today's Progress: Paired program with Steven T. Cramer again on the Closest Number puzzle on codingame.com. Worked some more on the interpreter for the Lox programming language described in Bob Nystrom's excellent book Crafting Interpreters. I'm writing it in TypeScript and it's running in Node.js. I also did a bit of work modifying a Ghost blog template for a local non-profit.

Thoughts I live coded on Twitch for about 1 hour and a half before I realized my mic was muted. I really need to come up with a pre-stream check list.

Link(s) to work

  1. Closest Number
  2. lox-ts

Day 43: June 4, Tuesday

Today's Progress: Paired program with Steven T. Cramer on the Closest Number puzzle on codingame.com. Started implementing an interpreter for the Lox programming language described in Bob Nystrom's excellent book Crafting Interpreters.

Thoughts Man, writing an interpreter is some next level geek stuff and I love it. Also had a really fun time pair programming today. Must do it again soon.

Link(s) to work

  1. Closest Number
  2. lox-ts

Day 42: June 3, Monday

Today's Progress: Solved the Skynet Revolution - Episode 1 puzzle on codingame.com. Had to debug a problem where the codingame engine would not deal with an iterator properly. Once I converted it to an array, everything worked fine. DO NOT USE ITERATORS IN CODINGAME. Also set up a test database for my Service Reporter project.

Thoughts Live streaming my coding sessions is a lot of fun when I get to engage with other knowledgeable coders.

Link(s) to work

  1. Skynet Revolution
  2. Service Reporter

Day 41: June 2, Sunday

Today's Progress: Worked on customizing my Ghost blog's template. It uses handlebars which I had never used but was easy enough to figure out thanks to the documentation and the fact that the syntax is very similar to the one used in Angular.

Thoughts Some creative avoidance today. There are a few projects that I have started, and a few that I really should start, that aren't as fun as some of the other stuff I'm working on right now but would probably create more value and I found a way to busy myself with other things. It wasn't a complete waste though, I did write a new blog post.

Link(s) to work

  1. Blog

Day 40: June 1, Saturday

Today's Progress: Refactored my solution to the 'Space Age' exercise on exercism.io. I used an enum to store some constants that I had spread out in several methods.

Thoughts I think I've said this before but ironically enough, I find it harder to get some coding in on the weekends than during the week. Something to keep in mind when planning my projects. I tend to think that I'll be able to spend a lot of time on my projects on the weekend but invariably I find myself busy with various social engagements and other responsabilities.

Link(s) to work

  1. Space Age

Day 39: May 31, Friday

Today's Progress: Started the Skynet Revolution - Episode 1 puzzle on codingame.com. It involves graph theory and the breadth first search algorithm. Also worked on making a Array2D class as I have noticed that many of the puzzle I work on involve the use of 2D arrays and I'm getting tired of reimplementing them everytime. The class extends the built-in Array class and adds methods to lookup items immediately adjacent to a given position, in each of cardinal and intercardinal directions.

Thoughts Forgot to log my activity before going to bed. Coding is fun... logging not so much... but I do see the value in doing it.

Link(s) to work

  1. Skynet Revolution
  2. Array2D class

Day 38: May 30, Thursday

Today's Progress: Completed the Pangram and Bob exercises on exercism.io. Pretty happy with my solutions. Instead of making a map keys representing every letter in the alphabet, I chose to iterate over the ASCII character codes with a for loop.

Thoughts So it's decided. I want to make programming my full time occupation, but I want to work remote. If I'm going to make a career change that involves taking a salary cut, I atleast want to have the perk of being able to work from wherever I want.

Link(s) to work

  1. Pangram
  2. Bob

Day 37: May 29, Wednesday

Today's Progress: Solved the Rearrange string to two numbers puzzle on codingame.com.

Thoughts I'm seriously starting to think about making a career change and going into programming full time. I love that s***!

Link(s) to work

  1. Rearrange string to two numbers

Day 36: May 28, Tuesday

Today's Progress: Started work on the Rearrange string to two numbers puzzle on codingame.com. Looks simple enough when you read the short description... do not be deceived.

Thoughts I love working on puzzles and algorithms but I find it harder to get motivated to work on some of my app ideas.

Link(s) to work

  1. Rearrange string to two numbers

Day 35: May 27, Monday

Today's Progress: Completed the Seam Carving puzzle on codingame.com. Learned a little about cron jobs while working on my service reporter app.

Thoughts I learned a lot about debugging and the VS Code debugger while working on this puzzle. I feel like I've come out of this a much stronger developper.

Link(s) to work

  1. Seam Carving
  2. Service Reporter

Day 34: May 25, Saturday

Today's Progress: Worked a bit on my service reporter app. Resisted the urge to pull in a front-end framework and instead learned how to use new URLSearchParams(window.location.search) to access url query parameters.

Thoughts I hadn't worked on this repo in about 10 days. Context switching really is a b****, it took me longer than I thought it would just to figure out where I had left things and what to do next.

Link(s) to work

  1. Service Reporter

Day 33: May 24, Friday

Today's Progress: On the road back from my workation for most of the day. Just had time to do a little bit of debuggind of my Seam Carving algorithm. I also mentored a few exercises on exercism.io.

Thoughts This was the first day that I had to skip live streaming my coding session. I feel empty inside.

Link(s) to work

  1. Seam Carving

Day 32: May 23, Thursday

Today's Progress: Added the possibility to remove more than one seam at a time to my Seam Carving algorithm. Had to spend some time in the debugger and learned how to use conditional break points.

Thoughts I'm learning to wield the power of the debugger more and more and moving away from console log debugging. It really is a powerful tool and quite enjoyable to use once you start to know what you're doing.

Link(s) to work

  1. Seam Carving

Day 31: May 22, Wednesdday

Today's Progress: Made good progress on the Seam Carving algorithm.

Thoughts Received good pointers on how to do TDD with more complex algorithms. One of the reasons I was having a hard time using TDD with this problem is that I started with complex test case inputs. By reducing the complexity of the input, it allowed me to implement the algorithm more gradually. For instance, instead of using a 100 pixels by 100 pixels image as input, I started with a 1 pixel by 1 pixel, and then 2 pixel by 1 pixel etc.

Link(s) to work

  1. Seam Carving

Day 30: May 21, Tuesday

Today's Progress: Worked on the Seam Carving algorithm.

Thoughts Today was hard. A lot of context switching and I couldn't figure out how to write some of my code using TDD. Spend two hours coding and not much to show for it. Very frustrating.

Link(s) to work

  1. Seam Carving

Day 29: May 20, Monday

Today's Progress: So excited about this new puzzle on codingame.com. I have started implementing the main algorithm for Seam Carving.

Thoughts Really struggling with TDD. I like the idea and principle of it but I almost always find myself at a point where it seems to make more sense to implement something in a private method, which means I can't test it in isolation. I do the next best thing which is test the public method that calls this private method but it seems like the whole red green refactor cycle gets stretched and I end up writing way too much code before I get to run a passing test. This is even worse when my public method encapsulates an algorithm that is implemented in 4 or 5 different private methods.

Link(s) to work

  1. Seam Carving

Day 28: May 19, Sunday

Today's Progress: Fooled around with subclassing JS primitives. Also tried my hand at C# today on cyber-dojo.org.

Thoughts Learning C# on cyber-dojo may not be the best idea as it's just a plain text editor. I think I might give it a try in VSCode or Visual Studio instead. Intellisense is a boon for discovering new Types and syntax.

Link(s) to work

  1. MyString

Day 27: May 18, Saturday

Today's Progress: Completed Mine Field kata. Refactored to use a functional solution with small mapping and reducer functions.

Thoughts Man I love coding, but sometimes I get so frustrated when I have to task switch througout the day. Especially when working on solving more complex problems that involve math and algorithms. I hate having to stop midway picking it back up again later. I feel like I waste so much time reviewing what I had done previously.

Link(s) to work

  1. Mine Field Kata

Day 26: May 17, Friday

Today's Progress: Worked on mine field kata.

Thoughts I have a love-hate relationship with TDD. I like how it drives my design but at the same time I sometimes feel like I end up painting myself into a corner because of it. I too often realize, after working on something for an hour or two, that there is a much better design for what I'm trying to do and it wouldn't be too much work to just scrap my current solution and start from scratch but because of the work I put into building the test suite and the additional work required in building the new one, I stick with the not so great solution.

Link(s) to work

  1. Mine Field Kata

Day 25: May 16, Thursday

Today's Progress: Finally completed the solution to 'Bender - Episode 1'.

Thoughts Found myself wondering when to use private vs public and wether or not getters and setters are an anti-pattern. Will have to investigate some more.

Link(s) to work

  1. Bender - Episode 1

Day 24: May 15, Wednessday

Today's Progress: Made really good progress with the 'Bender - Episode 1' today.

Thoughts Live coding on Twitch can be a lot of fun. Especially when fellow coders drop by and interact.

Link(s) to work

  1. Bender - Episode 1

Day 23: May 14, Tuesday

Today's Progress: Set up testing and debugging in VSCode for my codingame projects. F5 baby!!!

Thoughts The debugger in VSCode is truly amazing. Not necessarily the easiest thing to configure when you have special cases like running jest on TypeScript code but still, I'm impressed.

Link(s) to work

  1. Bender - Episode 1

Day 22: May 13, Monday

Today's Progress: Worked on the 'Bender - Episode 1' puzzle on codingame.com. Mostly refactoring stuff. Gave up trying to use the State pattern.

Thoughts These past two days have been rough. I get frustrated when I don't have enough time to code and I hate having to stop half way through something. Context switching is a b****.

Link(s) to work

  1. Bender - Episode 1

Day 21: May 12, Sunday

Today's Progress: Added MongoDB connection and models using Mongoose and Typegoose.

Thoughts Getting my mandatory one hour of coding in is much harder on weekends. Still, pretty happy I haven't missed a day yet.

Link(s) to work

  1. Service Reporter

Day 20: May 11, Saturday

Today's Progress: Spent 2 and half hours mentoring on exercism.io but I guess that doesn't really count as coding. Started work on a tiny web app for my personal use. Played around with HTML forms and express.js server.

Thoughts Mentoring on exercism.io is a lot of fun. I think I learn as much as I help others doing it.

Link(s) to work

  1. Service Reporter

Day 19: May 10, Friday

Today's Progress: Worked on the 'Bender - Episode 1' puzzle on codingame.com. Learned about the state pattern.

Thoughts The State pattern seems strange to me. On the surface it seems to encourage composition, but if you have many, many States that are similar to each other, you'll probably end up using some sort of inheritance hierarchy. Also, the tight coupling between the context and the states and between the states themselves makes me uneasy. I could be wrong, I still have to play with the pattern to fully understand it.

Link(s) to work

  1. Bender - Episode 1

Day 18: May 9, Thursday

Today's Progress: Solved the 'Order of Succession' puzzle on codingame.com. Got to use a tree data structure and depth first search algorithm. It had been a while. Also wrote up a blog article on the left shift bitwise operator.

Thoughts Writing blog articles really doesn't come easy. I can't help but feel that every subject has already been thoroughly written about. Yet, it does help cement in my mind things I have just learned.

Link(s) to work

  1. Order of Succession
  2. An introduction to the left shift bitwise operator

Day 17: May 8, Wednesday

Today's Progress: Solved the 'Bank Robbers' puzzle on codingame.com. Learned that x * 2 ** y === x << y.

Thoughts It was fun to get reaquainted with permutations and combinations equations. Some of the 'easy' puzzles on codingame.com are not all that easy.

Link(s) to work

  1. Bank Robbers

Day 16: May 7, Tuesday

Today's Progress: Solved the 'River I' and 'River II' puzzles on codingame.com. Used a Set to do some caching and optimise my solution.

Thoughts This was the first time where I really saw a use for JS' relatively new Set data structure. At first, my solution was doing alot of duplicate computation. I introduced a cache using Set and dramatically improved my solution's performance.

Link(s) to work

  1. The River I
  2. The River II

Day 15: May 6, Monday

Today's Progress: Solved the 'Max Rect' puzzle on codingame.com. Ended up using the Hill Climbing algorithm I have been using on another project. Beats having to try to reason with 5 nested loops. Added WebWorker to demo of Macronutrients Optimiser.

Thoughts I really enjoy using these stochastic algorithms to solve problems. They are much more fun to code and use than pure brute force or mathematical algorithms. Why do all this hard worl to try to find the best answer when you can let the computer do the work and find a good enough answer. It's a very pragmatic way of solving problems.

Link(s) to work

  1. Robbery Optimisation
  2. Macronutrients Optimiser

Day 14: May 5, Sunday

Today's Progress: Built a demo of a small 'app' that uses my Macro Nutrients Optimizer algorithm.

Thoughts Working in pure HTML and TS without a framework was eye opening. We often take for granted what front-end frameworks do for us. I wouldn't want to develop an entire app this way. Still, for very small throwaway projects like this, going vanilla makes sense.

Link(s) to work

  1. Macronutrients Optimiser

Day 13: May 4, Saturday

Today's Progress: Added early stopping to the Hill Climbing algorithm used in the Macronutrients optimizer. The algorithm will now stop if a certain time limit has been reached or if a result of a certain presicion has been reached. Also implemented a minimum weight for ingredients to avoid recipes where ingredients were set to 0 grams.

Thoughts The class is starting to get a little to be for my taste, I'm going to have to refactor soon as I keep adding functionality. I'm also going to have to implement some tests, didn't exactly develop this TDD style.

Link(s) to work

  1. Macronutrients Optimiser

Day 12: May 3, Friday

Today's Progress: Worked some more on the optimization problem submitted by @DashBarkHuss. I added the Random Restart meta-algorithm and am quite pleased with the results.

Thoughts Algorithms are so much fun. I can understand why people would want to work on games instead of web apps. I often feen like they are mostly about CRUD operations and very little interesting business logic. Tomorrow, I'll implement Stochastic Hill-Climbing instead of Steepest Ascent Hill Climbing, which is what I'm using at the moment, and see if it'll improve the results even more.

Link(s) to work

  1. Macronutrients Optimiser

Day 11: May 2, Thursday

Today's Progress: Worked on solving an optimization problem for @DashBarkHuss and the 'Robbery Optimisation' puzzle on codingame.com. Refreshed my understanding of the Hill Climbing algorithm.

Thoughts Both problems were a bit harder to solve than I initally thought. Sometimes you need to take a step back and really think things through. Watching me do a lot of thinking out loud and very little coding probably didn't make for the most interesting live coding session on Twitch.

Link(s) to work

  1. Macronutrients Optimiser
  2. Robbery Optimisation

Day 10: May 1, Wednesday

Today's Progress: Worked through the 'Hamming', 'Scrabble Score' and 'Space Age' exercises on exercism.io.

Thoughts 'Scrabble Score' was interesting. It was the first time I got to use a Map with keys of type Array.

Link(s) to work

  1. Hamming
  2. Scrabble Score
  3. Space Age

Day 9: April 30, Tuesday

Today's Progress: Finished the 'Allergies', 'Raindrops' and 'ETL' exercises on exercism.io. Finished work on xmentor CLI.

Thoughts The 'Allergies' exercise was the first time I had to use a bitmask and bitwise operations. I'm glad I got to learn about it because I can see myself reaching for this in the future. Thanks to gluegun I think making CLI tools has the dangerous potential of becoming like a drug to me.

Link(s) to work

  1. Allergies
  2. Raindrops
  3. ETL
  4. xmentor

Day 8: April 29, Monday

Today's Progress: Worked through the 'Protein translation', 'Nucleotide count' and started the 'Allergies' exercises on exercism.io. Started working on a CLI to automatically download and run tests on student exercises on exercism.io. I call it xmentor for now.

Thoughts I had fun working on these relatively simple exercises. I ended learning about TS index signatures. Making CLI tools is a lot of fun. I just love automating stuff.

Link(s) to work

  1. Protein translation
  2. Nucleotide count
  3. xmentor

Day 7: April 28, Sunday

Today's Progress: Made a mockup of QTsum, a Quentin Tarantino themed placeholder text generator inspired by Jeffsum and started writing the html and css.

Thoughts I need to get better at CSS. It's the only tech where I seem to have a hard time remembering what does what. There's just so many options.

Link(s) to work

  1. QTsum mockup
  2. QTsum repo

Day 6: April 27, Saturday

Today's Progress: Refactored the new command in Vts-CLI's using the Chain of Responsibility pattern.

Thoughts Implementing the CoR pattern was fun and I learned a lot. Hesitated between CoR and Builder pattern. Time will tell if I made the right choice.

Link(s) to work

  1. Vts - Vanilla TypeScript Starter

Day 5: April 26, Friday

Today's Progress: Solved the LUMEN puzzle on codingame.com. Refactored some of Vts-CLI's code.

Thoughts Got a little lazy with the refactoring, but all in all I'm pleased with the solution I have used for this puzzle. Recursion for the win!

Link(s) to work

  1. Lumen
  2. Vts - Vanilla TypeScript Starter

Day 4: April 25, Thursday

Today's Progress: Started working on the LUMEN puzzle on codingame.com. Pushed version 1.1.0 of Vts-CLI to NPM. Added the option to setup a web project using parcel as a bundler.

Thoughts Ran into some weird problems with the way Rollup seemed to output my TS code. Will have to look into that.

Link(s) to work

  1. Lumen
  2. Vts - Vanilla TypeScript Starter

Day 3: April 24, Wednesday

Today's Progress: Solved the 'Ghost Legs' puzzle on codingame.com. Polished my Vts CLI project and published it on NPM (vts-cli).

Thoughts An interesting puzzle to solze. It took me awhile to wrap my head around the problem space but once I figured a strategy to solve the problem it was relatively easy to solve. Spent almost 20 minutes refactoring afterwards to make it more readable.

I used Gluegun to make the CLI tool and it was a real pleasure to use. Very easy to learn and quite powerful. I'm looking forward to automating alot of stuff with this little tool.

Link(s) to work

  1. Ghost Legs
  2. Vts - Vanilla TypeScript Starter

Day 2: April 23, Tuesday

Today's Progress: I've gone through the 'RNA Transcription' exercise on the Typescript track on exercism.io. I've also worked on creating a small cli tool to generate Vanilla Typescript library starter code.

Thoughts The 'RNA Transcription' was a fun exercise. Though the problem was relatively easy to solve it gave me the opportunity to use some language features like enum and type that I haven't used much in the past.

I'm almost done with the first version of my cli tool. I'll add a bit of polish, refactor the code and then it'll be ready to publish to NPM.

Link(s) to work

  1. RNA Transcription
  2. Vts - Vanilla TypeScript Starter

Day 1: April 22, Monday

Today's Progress: I've gone through the 'reverse string', 'triangle' and 'collatz conjecture' exercises on the Typescript track on exercism.io.

Thoughts It feels nice to start a new challenge that will get me coding everyday. The fact that I'm logging everything on Github and stream on Twitch is great for accountability.

Link(s) to work

  1. Reverse String
  2. Triangle
  3. Collatz Conjecture