Wow, it's been a while since the last post. The reason this took so long was because the Pomodoro Clock project itself took so long to complete! See here for the code in all its glory.
I did the set up so that it can eventually be refactored to submit to the freeCodeCamp's version of their project. Yes, I do like my twofers.
Overall, this thing took about 19 hrs and 35 minutes to complete. Why? Because I had to do it over and I added some options that did not work out.
The project started with the styling which was my favorite part because it was so straight forward to me. That didn't take too long, probably just a handful of hours.
Then coding up the functionality began.
I started by tracking the actual time with use of the Date() object and some help from w3schools. I went this route because it is supposed to be more accurate than just using setInterval by itself. But it was really freaking hard to get a pause and resume type functionality working with the setIntervals and clearIntervals. I was able to get it paused, but not resumed, or resumed incorrectly, or there would be some bug that affected it. It was a mess.
Eventually, I decided to just straight up use setInterval() by itself without relying on Date() to track the time. So that was about 5-6 hours wasted. It was actually so much simpler this way and I was able to get the pausing and resuming up and running very quickly!
By then, it was pretty much working as intended, but I planned from the start of the project that I wanted to use a progress bar.. or rather, a progress circle. I found a neat library aptly named ProgressBar.js which seemed to fit the bill. I got it working!... but only if you do not use the pause functionality. If you do use pause, bugs start presenting itself with the progress bar by either doubling in time or some other weird stuff. So then we have another 5-6 hours spent on trying to get it working. After some searching around, it appears that others who also wanted to use a pause functionality encountered the same problems.
To fix it was to edit the library itself and I am not quite there in terms of ability yet (especially since it also uses SVG which I only just started reading about). That and I was ready to be done with the project and move on already! So I called it a close, with a promise that I will build my own built-in progress bar.
After fiddling with the project for so long, I reasoned that it would be very simple to implement my own progress bar using JS to change the styles in CSS based on the % completed. And it was! While it is not the slickest thing in the world, it does and (generally) looks like how I envisioned it.
Sometimes, you just got to Keep it Simple, Stupid. (KISS)
And lastly, I am really pleased to finally finish the Web Development 101 section in the Odin Project!
Gee, I wonder where I got that idea for the progress circle from?
Showing posts with label FreeCodeCamp. Show all posts
Showing posts with label FreeCodeCamp. Show all posts
Thursday, August 22, 2019
Tuesday, August 6, 2019
Day 121: Javascript Calculator Project Completed!
The Javascript Calculator project with keyboard support was not as terrible in terms of bug squashing (and general frustration) as the Etch-A-Sketch Project.
Two points of interested of this project was that:
Two points of interested of this project was that:
- When I began, I started going down this weird rabbit hole of pushing the clicked numbers into an array and then joining them for calculations. There were other funky stuff I was trying as well that I don't quite remember. It was a not insignificant (to me) amount of code written up that I ultimately ended up tossing out the whole thing and starting all over.
- One of the extra credit assignments in the Odin Project is to include keyboard support. I wrote up that bit pretty quickly and it worked for the most part, but had weird bugs that included other characters that was strangely (to me) not being filtered out by the conditional. I had used "keyup" as the eventlistener and tried a few things to fix that bug. Eventually, I decided to try using "keydown" instead. Literally just switching out one word, "keyup" to "keydown" worked! I still don't quite understand why and will need to read up on the differences between the two.
Overall, it was a really enjoyable project! FreeCodeCamp also has this project as part of their front end libraries certification, which I was planning to just submit both to TOP and FFC in one go. However, I decided to hold off on submitting to FCC since this calculator was written entirely in JS. I am still taking my time going through the React and Redux sections and eventually would like to refactor the code to use those libraries in the future since the whole point of the project for the FCC certification is to get more experience with them.
The next project I will be working on is the Pomodoro Clock project which again is an assignment in both TOP and FCC. I will be taking the same steps, working with it in vanilla JS and then later refactoring to React/Redux.
Wednesday, July 17, 2019
Day 101: Round 2 of the #100DaysOfCode
Yesterday was my 100th day for my #100DaysOfCode. There really wasn't much fanfare other than a post to Instagram:
And a quick tweet about it:
Honestly, I was too busy working on the latest project to really make a big deal out of it.
I am glad to have completed Angela Yu's Bootcamp and the FCC Algorithm and Data Structures certificate before day 100 though.
I have no plans to stop doing #100DaysOfCode until I actually make a career change into software development.
The next few goals will be to complete the Modern Javascript Bootcamp course on Udemy with Andrew Mead.
As a quick note: my gold standard for Udemy instructors is still Angela Yu, but Andrew Mead is a really close second. They have very similar teaching styles with the demonstrations and then challenges. I also find Andrew's method in using NodeJS to teach Javascript to be unique too! Since it gets you used to the terminal (although I have been mostly going through his projects on the console with codesandbox.io so I can code on any computer). I am already making plans to purchase his NodeJS and his GraphQL courses when I finish up other courses/projects.
The other Udemy courses I also intend to go through are my already purchased Complete Web Developer in 2019: Zero to Mastery course by Andrei Neagoie (already about halfway through), the Modern React Bootcamp by Colt Steele, and Advanced CSS and Sass by Jonas Schmedtmann. For most cases, I will try to get through the parts I am already familiar with ASAP and focus on the challenges and projects in these courses. Other more advanced courses I would like to get are ones on MongoDB and D3. While I could purchase these courses now, I really don't want to get into the trap of throwing money at something just so I can feel like I am being productive. So I am forcing myself to complete the courses I already have before getting more.
For projects, I have plans to go through (most of) the projects list on The Odin Project. with the first one being a simple Rock, Paper, Scissors game. A few of these projects are also similar to the various freeCodeCamp projects or the projects in the Javascript30 course by Wes Bos, so it's like I can multi-task with my projects! Not that I am getting bonus points or anything like that from anyone (but myself) but it's nice to feel like I am being efficient, no? The whole point really is to build the damn thing already and get some projects under my belt.
In the meantime, I am going to throw some Edabit or Codewars problems in here and there as well as watching Linkedin Learning videos (formally called Lynda.com) during my down time. I usually don't code along with the LL videos because the courses are often really short (like 1-2 hours) and they really do not go as in depth as I prefer. These are usually reserved for winding down before bed or as I am commuting.
I am not doing any one specific course or set of projects in a linear fashion, but sort of all of them at once as I am going through my curriculum, which is loosely following in the order that freeCodeCamp laid out.
And a quick tweet about it:
Today is #Day100 of my #100DaysOfCode!— AnnCanCode (@AnnCanCode) July 17, 2019
Huzzah!
Currently working through the projects on #theOdinProject https://t.co/kYclTFh4mF
So now what? I'm starting another 100 days! Gotta keep going!#CodeNewbie #Javascript #WomenWhoCode #LearnToCode
Honestly, I was too busy working on the latest project to really make a big deal out of it.
I am glad to have completed Angela Yu's Bootcamp and the FCC Algorithm and Data Structures certificate before day 100 though.
I have no plans to stop doing #100DaysOfCode until I actually make a career change into software development.
What's Next?
The next few goals will be to complete the Modern Javascript Bootcamp course on Udemy with Andrew Mead.
As a quick note: my gold standard for Udemy instructors is still Angela Yu, but Andrew Mead is a really close second. They have very similar teaching styles with the demonstrations and then challenges. I also find Andrew's method in using NodeJS to teach Javascript to be unique too! Since it gets you used to the terminal (although I have been mostly going through his projects on the console with codesandbox.io so I can code on any computer). I am already making plans to purchase his NodeJS and his GraphQL courses when I finish up other courses/projects.
The other Udemy courses I also intend to go through are my already purchased Complete Web Developer in 2019: Zero to Mastery course by Andrei Neagoie (already about halfway through), the Modern React Bootcamp by Colt Steele, and Advanced CSS and Sass by Jonas Schmedtmann. For most cases, I will try to get through the parts I am already familiar with ASAP and focus on the challenges and projects in these courses. Other more advanced courses I would like to get are ones on MongoDB and D3. While I could purchase these courses now, I really don't want to get into the trap of throwing money at something just so I can feel like I am being productive. So I am forcing myself to complete the courses I already have before getting more.
For projects, I have plans to go through (most of) the projects list on The Odin Project. with the first one being a simple Rock, Paper, Scissors game. A few of these projects are also similar to the various freeCodeCamp projects or the projects in the Javascript30 course by Wes Bos, so it's like I can multi-task with my projects! Not that I am getting bonus points or anything like that from anyone (but myself) but it's nice to feel like I am being efficient, no? The whole point really is to build the damn thing already and get some projects under my belt.
In the meantime, I am going to throw some Edabit or Codewars problems in here and there as well as watching Linkedin Learning videos (formally called Lynda.com) during my down time. I usually don't code along with the LL videos because the courses are often really short (like 1-2 hours) and they really do not go as in depth as I prefer. These are usually reserved for winding down before bed or as I am commuting.
I am not doing any one specific course or set of projects in a linear fashion, but sort of all of them at once as I am going through my curriculum, which is loosely following in the order that freeCodeCamp laid out.
Saturday, July 13, 2019
Day 097: The freeCodeCamp JavaScript Algorithms and Data Structures Certificate!
Look mom! I got the thing!
This was after completing their last problem: JavaScript Algorithms and Data Structures Projects: Cash Register.
![]() |
| Mom, it was a harrowing ordeal to get this thing! |
As you know, I track my time coding or learning to code with Toggl. How much time did I spend on this the last problem? In total about 9 hours and 52 minutes.
Holy mother... why?
The long and short of it is that you need to know the value of each of the currency item in order to solve the problem. I had set my penny to $0.1 instead of $0.01.
I basically solved this damn thing like 3 different ways after working with that incorrect original reference data the whole time, but could not get why the heck it was not solving. Part of the reason was because I was adamant on getting it done on July 12th so I kept cranking at the problem up until around 3am in the evening until I finally gave up for the day due to sheer exhaustion.
So roughly 9.5 hours was spent banging my head on this thing. In the end, I asked my husband for help and after a series of questions of why... that we identified that my penny was off by a decimal in like 10 mins. FML
And after that, the problem was solved as a whole pretty quickly after writing out the last bit of logic for the insufficient funds cases.
I should have given it a rest and/or asked for help much sooner. The bulk of the solution was written out and validated in about 2-3 hours and it would have been solved by then if it wasn't for being off by the decimal. I kept hammering at why it was not working with a tired brain which worked against me. And my stubbornness (which is amplified with the tired territory) pretty much made me avoid asking for help until I became desperate. I really need to stop doing that and be better about knowing when to stop and knowing when to ask for help!
So the takeaway from working through all these algorithms is not the content itself (though I did learn lots!) but mostly about myself in how to be a better person and a better programmer.
Now that this is done and over with, I still want to solve the remainder of the Intermediate Algos that I skipped, but I want take a break from algos problems in general for a few days so I can move on to the Front End Libraries section in FCC, the more fun and creative bits.
I am pretty pleased that I manged to get the second certificate before my 100 days on Tuesday!
Now that this is done and over with, I still want to solve the remainder of the Intermediate Algos that I skipped, but I want take a break from algos problems in general for a few days so I can move on to the Front End Libraries section in FCC, the more fun and creative bits.
I am pretty pleased that I manged to get the second certificate before my 100 days on Tuesday!
Wednesday, July 10, 2019
Day 094: FCC Intermediate Algorithms: Wherefore art thou
Currently, I am only about halfway through the FCC Intermediate Algos section. I had initially skipped Intermediate Algorithm Scripting: Wherefore art thou since it is dealing with objects and objects are not my cup of tea, but then I encountered another problem with objects so might as well get this one done before moving on, yes?
I really like working with challenges that have arrays. I understand it and enjoy it. But when you throw an object into the mix, I start having problems. And then you add objects into arrays or arrays into objects and nest them in some way or another, my eyes get crossed!
It is partially because the object references the location and not really the values itself (or something like that). So when you compare the following "same" objects in the below array, the result is a false. Try to iterate through that mess and you can get a sense as to why it confuses the heck out of me.
But objects is in part what makes Javascript OOP, so I better get used to it.
The FCC challenge requires the following:
Being aware of the conditions of objects and key value pairs that make it hard for me, how did I initially tackle the problem? I used Object.keys() and Object.values() to convert the array of objects into an array of arrays, combining the keys and the values as "keys+Values" with use of the for.. in loop, something like the below as an example.
Midway through writing up my answer, I realized that it was probably a very inefficient and um... bad way to work with objects in getting to the solution.
So I peeked at the hints.
I was on the right path to use the Object.keys(), but I wasn't using it correctly. And filter() and Object.hasOwnProperty() also made an appearance.
I didn't quite consider using filter() because it is a method on an array, not object. Since they are objects, I kind of agonized over that and overlooked the fact that it was an array of objects. So filter will work fine in this case. It almost always does with these matching type problems.
In my own words, filter() accepts a condition and returns that which is true or "passes the test implemented by the provided function" (per MDN). You plop in a true or false function and it gives you an array of whatever values are true to the condition.
Okay, it sounds like I have to write function that checks whether any part of the source matches the submitted collections array by looping through the array (of objects). And somewhere along the way, hasOwnProperty comes into play in there. I'm not sure if I ever used hasOwnProperty and how that comes to play. So what does it do?
It is similar to collection[i] because remember that it is built in that filter() will iterate through the arrays so there won't be an actual need to iterate through the array. Though of course it is still possible to solve this problem without filter by indeed using nested for loops to iterate through the collection and checking against the source.
Step 5. Now we write the logic so that when we iterate through the collections to check if the values of the sourceKey (the last name) match. Filter accepts a boolean value and normally outputs the items that are true to the logic and removes those that are false. In MDN's example, if the function checks for all the strings in an array greater than a length of 6, it will only return an array with those strings that are true to the function.
So I initially had in the following in my if statement:
Success!.. or is it?
It solved the first and second test case but not the remaining.
Why!?
Well, my initial answer also returned any of the whole object in the collection if it matched one single key+value pair from the source, whereas it should only return the object if it matches all key+value pairs in the source. So just because I match 1 key+value pair in the source, it returned the whole object. This is obviously not what I want if there is more than one key+value pair in the source.
This is also where I spent most of the time puzzling through and could not get why it was not working. I tried a few different things that did not work out. So after an hour to trying, I peeked at the answer and saw right away... that it was reversed on their end. I applied it to my answer and of course it solved right away!
But why?
Step 6. Since filter accepts a boolean value and returns the bits that are true, the logic should identify the objects in the collections array doesn't match all the key+value pairs in the source first and mark them as false (so it is not included in the output) then return all else as true after the for loop.
That's it. I have such a hard time even considering this route in using filter() or map() to define items as false first and return all else true as a way to filter more specifically. I am hoping I get better at this with time!
I really like working with challenges that have arrays. I understand it and enjoy it. But when you throw an object into the mix, I start having problems. And then you add objects into arrays or arrays into objects and nest them in some way or another, my eyes get crossed!
It is partially because the object references the location and not really the values itself (or something like that). So when you compare the following "same" objects in the below array, the result is a false. Try to iterate through that mess and you can get a sense as to why it confuses the heck out of me.
const testArr = [
{ key1: "value1", key2: "value2" },
{ key1: "value1", key2: "value2" }
];
console.log(testArr[0] === testArr[1]); // false
But objects is in part what makes Javascript OOP, so I better get used to it.
The FCC challenge requires the following:
Make a function that looks through an array of objects (first argument named "collections") and returns an array of all objects that have matching name and value pairs (second argument named "source"). Each name and value pair of the source object has to be present in the object from the collection if it is to be included in the returned array.
whatIsInAName(
[
{ first: "Romeo", last: "Montague" },
{ first: "Mercutio", last: null },
{ first: "Tybalt", last: "Capulet" }
],
{ last: "Capulet" }
);
// should return [{ first: "Tybalt", last: "Capulet" }].
Being aware of the conditions of objects and key value pairs that make it hard for me, how did I initially tackle the problem? I used Object.keys() and Object.values() to convert the array of objects into an array of arrays, combining the keys and the values as "keys+Values" with use of the for.. in loop, something like the below as an example.
const srcKey = Object.keys(source);
for ( let i = 0 ; i < collection.length ; i++){
for (let key in collection[i]) {
console.log(key + ":" + collection[i][key]);
}
}
Midway through writing up my answer, I realized that it was probably a very inefficient and um... bad way to work with objects in getting to the solution.
So I peeked at the hints.
I was on the right path to use the Object.keys(), but I wasn't using it correctly. And filter() and Object.hasOwnProperty() also made an appearance.
I didn't quite consider using filter() because it is a method on an array, not object. Since they are objects, I kind of agonized over that and overlooked the fact that it was an array of objects. So filter will work fine in this case. It almost always does with these matching type problems.
In my own words, filter() accepts a condition and returns that which is true or "passes the test implemented by the provided function" (per MDN). You plop in a true or false function and it gives you an array of whatever values are true to the condition.
Okay, it sounds like I have to write function that checks whether any part of the source matches the submitted collections array by looping through the array (of objects). And somewhere along the way, hasOwnProperty comes into play in there. I'm not sure if I ever used hasOwnProperty and how that comes to play. So what does it do?
The hasOwnProperty() method returns a boolean indicating whether the object has the specified property as its own property (as opposed to inheriting it). --MDN
I am going to need to use it to check if the objects in the collection has the properties of the source. Fair enough.
So cue the many searches and hours spent on this problem and I finally gave up and took a look at their code solution.
I came close to their basic solution. Most of the bits and bobs were in the right place, but I could not get the condition statement right. /sigh Always foiled by that ! operator. Here's my completed solution after reviewing theirs:
Why does this work? Let's deconstruct this a bit using the first test case.
Step 1. We need to use Object.keys() which will return the object's name for the key value pairs. We need this information because our task is to find the one that matches with the source. In this case, we need to match the last names (key and value).
So cue the many searches and hours spent on this problem and I finally gave up and took a look at their code solution.
I came close to their basic solution. Most of the bits and bobs were in the right place, but I could not get the condition statement right. /sigh Always foiled by that ! operator. Here's my completed solution after reviewing theirs:
function whatIsInAName(collection, source) {
const sourceKey = Object.keys(source);
function existsInArray(obj) {
for (var i = 0; i < sourceKey.length; i++) {
if (obj[sourceKey[i]] !== source[sourceKey[i]]) {
return false;
}
}
return true;
}
return collection.filter(existsInArray);
}
Why does this work? Let's deconstruct this a bit using the first test case.
Step 1. We need to use Object.keys() which will return the object's name for the key value pairs. We need this information because our task is to find the one that matches with the source. In this case, we need to match the last names (key and value).
Step 2. To simplify matters a bit, I created the "sourceKey" which is the "Object.keys(source)" to keep the code a bit cleaner. You can indeed use something like "Object.keys(source)[i]" later in the conditional part of your code, but it gets harder to read. At least for me this is the case. This code produces the following:
Step 3. In peeking at the hints, I found that filter() needed to be used. So in this case, it is a matter of filtering out the objects in the array that does have the same sourceKey and sourceKey value and returning the objects that match in its entirety, even the parts such as the first names and values that do not match.
I am still wrapping my head around filter(), reduce() and the like, so I rely very heavily on the documentation and the examples therein to continue. I found the Filtering invalid entries from JSON example to be particularly helpful. So I create a function to check if the source key, i.e. the last name exists in the provided collection.
Step 4. I create the "existsInArray()" function that essentially takes in an array of objects as the parameter (which is the collection) which will be run later when used in conjunction with filter(). I'm, largely following the example in MDN where were will need to call the following eventually:
This is the same as checking through the below:
console.log(Object.keys(source))
// returns "last"
Step 3. In peeking at the hints, I found that filter() needed to be used. So in this case, it is a matter of filtering out the objects in the array that does have the same sourceKey and sourceKey value and returning the objects that match in its entirety, even the parts such as the first names and values that do not match.
I am still wrapping my head around filter(), reduce() and the like, so I rely very heavily on the documentation and the examples therein to continue. I found the Filtering invalid entries from JSON example to be particularly helpful. So I create a function to check if the source key, i.e. the last name exists in the provided collection.
Step 4. I create the "existsInArray()" function that essentially takes in an array of objects as the parameter (which is the collection) which will be run later when used in conjunction with filter(). I'm, largely following the example in MDN where were will need to call the following eventually:
return collection.filter(existsInArray)
This is the same as checking through the below:
console.log(collection[i][sourceKey[j]]);
// is same as
console.log(collection[i].last)
// returns all the last names
It is similar to collection[i] because remember that it is built in that filter() will iterate through the arrays so there won't be an actual need to iterate through the array. Though of course it is still possible to solve this problem without filter by indeed using nested for loops to iterate through the collection and checking against the source.
Step 5. Now we write the logic so that when we iterate through the collections to check if the values of the sourceKey (the last name) match. Filter accepts a boolean value and normally outputs the items that are true to the logic and removes those that are false. In MDN's example, if the function checks for all the strings in an array greater than a length of 6, it will only return an array with those strings that are true to the function.
So I initially had in the following in my if statement:
if (obj[sourceKey[i]] === source[sourceKey[i]]) {
return true;
}
Success!.. or is it?
It solved the first and second test case but not the remaining.
Why!?
Well, my initial answer also returned any of the whole object in the collection if it matched one single key+value pair from the source, whereas it should only return the object if it matches all key+value pairs in the source. So just because I match 1 key+value pair in the source, it returned the whole object. This is obviously not what I want if there is more than one key+value pair in the source.
This is also where I spent most of the time puzzling through and could not get why it was not working. I tried a few different things that did not work out. So after an hour to trying, I peeked at the answer and saw right away... that it was reversed on their end. I applied it to my answer and of course it solved right away!
But why?
Step 6. Since filter accepts a boolean value and returns the bits that are true, the logic should identify the objects in the collections array doesn't match all the key+value pairs in the source first and mark them as false (so it is not included in the output) then return all else as true after the for loop.
for (...){
if (obj[sourceKey[i]] !== source[sourceKey[i]]) {
return false;
}
}
return true;
That's it. I have such a hard time even considering this route in using filter() or map() to define items as false first and return all else true as a way to filter more specifically. I am hoping I get better at this with time!
Tuesday, July 9, 2019
Day 093: Copy & Paste Hell, Diffchecker is Your Friend
I'm still working through the freeCodeCamp's intermediate algos. Next up was this problem Intermediate Algorithm Scripting: Convert HTML Entities which asks to convert the characters &, <, >, " (double quote), and ' (apostrophe), in a string to their corresponding HTML entities.
Easy peasy! I thought to myself since I am starting to get very comfortable with Regular Expressions and that was what I intended to use. I wrote up my code by copying and pasting the HTML entities from the of test cases below the buttons.
I press run the tests... and for some reason, some parts did not work? I spent the next 30 mins wondering wtf I did wrong. Googled up why it didn't work as well as the solutions on how to make it work. Working through it in the console or codesandbox gave me the correct answer with what I originally wrote as well. By all accounts on StackOverflow and such, I had the right answer... but the tests were not passing on FCC.
I sometimes check out the hints but I really hate looking at the solution. But after nearly an hour (my cue to start getting help) at this, I gave up and looked at how FCC did it.... and it was nearly identical to their intermediate solution. WTF?! And yes, I also checked to make sure their solution actually passed their test and it did.
And then it finally dawned on me that I might have some weird characters somewhere that FCC is not reading, so I fired up Diffchecker to confirm my suspicions..... and yep.. there's a hidden blank character that I got from when I copied and pasted the HTML entities from the FCC site.
After removing those bits from my code, the tests all passed with flying colors. /sigh
Easy peasy! I thought to myself since I am starting to get very comfortable with Regular Expressions and that was what I intended to use. I wrote up my code by copying and pasting the HTML entities from the of test cases below the buttons.
![]() |
| Huh? |
I press run the tests... and for some reason, some parts did not work? I spent the next 30 mins wondering wtf I did wrong. Googled up why it didn't work as well as the solutions on how to make it work. Working through it in the console or codesandbox gave me the correct answer with what I originally wrote as well. By all accounts on StackOverflow and such, I had the right answer... but the tests were not passing on FCC.
![]() |
| PS get a codesandbox.io account and you can code anywhere! |
I sometimes check out the hints but I really hate looking at the solution. But after nearly an hour (my cue to start getting help) at this, I gave up and looked at how FCC did it.... and it was nearly identical to their intermediate solution. WTF?! And yes, I also checked to make sure their solution actually passed their test and it did.
And then it finally dawned on me that I might have some weird characters somewhere that FCC is not reading, so I fired up Diffchecker to confirm my suspicions..... and yep.. there's a hidden blank character that I got from when I copied and pasted the HTML entities from the FCC site.
After removing those bits from my code, the tests all passed with flying colors. /sigh
Monday, July 8, 2019
Day 092: Long Weekend Coding Retrospective, Personal Hackathon
Not that I announced it or anything, but I did another "Personal Mini Bootcamp" this past long weekend (July 4 though July 7). Since I am more precisely tracking only productive time (no break times) with Toggl, I figured it would be more reasonable to do at least 6 hours of coding or learning to code each day as opposed to the original 8hr/day. Also, if it is where I am just watching a video and not coding or trying out the examples in the videos, I count the time viewing for half (or less, depending on how much I am learning from the content).
While I knew I needed to do another one of these Personal Mini Bootcamp sessions, I only decided on July 2nd that I will be attempting it during the my long weekend since my workplace decided to give everyone a free day off on Friday, July 5th. In all, it gave me 4 whole days of coding and getting back on track.
I had a lot of courses/videos/assignments that were incomplete, so the main goal was to move on to functional programming and ES6 and asynchronous JS and wrap up those courses and videos and take occasional breaks with the FCC Intermediate Algorithms section.
As you know, I finished Angela Yu's Web Dev Bootcamp course, I also finally completed the Intro to Javascript course on Codecademy. The last few sections in this course were indeed ES6 and async JS hence the delay on completing it.
The past 2 weeks has been all about functional programming and ES6 so it was really nice doing all of these from various sources at the same time. And no surprise, a great deal of the weekend was focused on APIs, implementing them, practicing with them and creating it. I also made a very simple implementation of the Dad Joke API on Codepen (which I also need to update to include the errors and such).
For those Lynda videos that I stopped midway because I didn't want to get too ahead of myself, I finished most of them often while I was eating or on my indoor bike, counting for half time. So of course the content was further reinforcement on ES6, async JS, and functional programming. The last bits of the Angela Yu bootcamp was also all about APIs as well. It was neat how everything fell into place like that.
Another side effect of the weekend was actually finally starting to push projects onto Github and getting more comfortable with that.
I did go easy on the hours on July 4th proper (because bbqs and whatnot), but on average it does work out to be a tiny bit over 6 hours per day for the 4 day weekend. And I am also happy to say that I finally broke the 30 hour/week barrier to clock in a total of 32 hours and 13 mins for the week of July 1 through July 7 (Monday through Sunday). Woo! My general goal is to get in at least 20 hours of coding each week, which I have only achieved 2x previous to this week in the past 13ish weeks. /sigh
As an aside, I really need to think of a new name for the "Personal Mini Bootcamp" because its kind of misleading? I originally had that name because I was going through the Angela Yu Web Dev Bootcamp as my curriculum for that first weekend. I also originally chose the 8 hours so I would know what it feels like to be coding for 8+ hours a day like a full-time bootcamp student. But in reality, these weekend sessions are more like a very focused attempt to get some hours of code time in. Maybe "Personal Hackathon" might be a better name for it? Yeah, I think it makes more sense.
While I knew I needed to do another one of these Personal Mini Bootcamp sessions, I only decided on July 2nd that I will be attempting it during the my long weekend since my workplace decided to give everyone a free day off on Friday, July 5th. In all, it gave me 4 whole days of coding and getting back on track.
I had a lot of courses/videos/assignments that were incomplete, so the main goal was to move on to functional programming and ES6 and asynchronous JS and wrap up those courses and videos and take occasional breaks with the FCC Intermediate Algorithms section.
As you know, I finished Angela Yu's Web Dev Bootcamp course, I also finally completed the Intro to Javascript course on Codecademy. The last few sections in this course were indeed ES6 and async JS hence the delay on completing it.
The past 2 weeks has been all about functional programming and ES6 so it was really nice doing all of these from various sources at the same time. And no surprise, a great deal of the weekend was focused on APIs, implementing them, practicing with them and creating it. I also made a very simple implementation of the Dad Joke API on Codepen (which I also need to update to include the errors and such).
For those Lynda videos that I stopped midway because I didn't want to get too ahead of myself, I finished most of them often while I was eating or on my indoor bike, counting for half time. So of course the content was further reinforcement on ES6, async JS, and functional programming. The last bits of the Angela Yu bootcamp was also all about APIs as well. It was neat how everything fell into place like that.
Another side effect of the weekend was actually finally starting to push projects onto Github and getting more comfortable with that.
I did go easy on the hours on July 4th proper (because bbqs and whatnot), but on average it does work out to be a tiny bit over 6 hours per day for the 4 day weekend. And I am also happy to say that I finally broke the 30 hour/week barrier to clock in a total of 32 hours and 13 mins for the week of July 1 through July 7 (Monday through Sunday). Woo! My general goal is to get in at least 20 hours of coding each week, which I have only achieved 2x previous to this week in the past 13ish weeks. /sigh
As an aside, I really need to think of a new name for the "Personal Mini Bootcamp" because its kind of misleading? I originally had that name because I was going through the Angela Yu Web Dev Bootcamp as my curriculum for that first weekend. I also originally chose the 8 hours so I would know what it feels like to be coding for 8+ hours a day like a full-time bootcamp student. But in reality, these weekend sessions are more like a very focused attempt to get some hours of code time in. Maybe "Personal Hackathon" might be a better name for it? Yeah, I think it makes more sense.
Tuesday, July 2, 2019
Day 086: Intermediate Algorithm Scripting (FCC)
![]() |
| I like the new FCC redesign! (recolor?) |
At any rate, I am now heading into the Intermediate Algorithm Scripting section of FCC. I am trying to apply the Functional Programming principles to solving these challenges, so it is taking a bit longer to work through the problems.
What really helped me learn in the past was to collect a massive sheet of notes that I may or may not refer back to, but the act of putting it somewhere seems to help me understand it better some how? Or at the very least, it is good reference material. So here it is.
Intermediate Algorithm Scripting: Diff Two Arrays
I solved something similar in Edabit, but like I said, I wanted to get more practice in with the methods am not yet familiar with. I got that I needed to concat() the strings and knew filter() was the likeliest method that would help me find the answer, but I had some help from the Internets and StackOverflow to get the conditional statement correctly with the use of ! and includes() which I am not yet familiar with, nor would it be something I would have thought to use right away. I also poked around with trying to figure out how to refactor it a bit into all arrow functions, but rather move on to the next problem after a few failed attempts.
function diffArray(arr1, arr2) {
var filterUnique = arr1.concat(arr2).filter((elem) => {
if (!arr1.includes(elem) || !arr2.includes(elem)) {
return elem;
}
})
return filterUnique;
}
Monday, July 1, 2019
Day 085: Finding the Sum of Consecutive Numbers with Javascript (Easy Mode w/ Carl Gauss)
While I am still digesting all the information from the Functional Programming section in FCC, I started to poke around the Intermediate Algorithm Scripting section. Low and behold, the first challenge was to Sum All Numbers in a Range.
I know that FCC wants us to do a loop, but that's boring since' I've already done a type of problem like this at least twice in Edabit and Codewars. After solving the problem there I was able to review how other folks solved this problem and recall that a few have used a formula, so cue up Google to search around. Gauss on Arithmetic Sequences hit the spot! The site goes into length about the formula and why/how it works. But I found what I was looking for here:

Where n is the number of integers.
Or for the purpose of applying it to the problem, I will use the below simplified formula.

And below are two versions of the answer. (Equations created with CodeCogs)
Easy peasy! I think it's still good to practice writing out the loop as well. However, I am at the point where I've done enough of these arithmetic challenges that I'm getting clued into the fact that there is likely a formula for most things. If it doesn't break anything in JS, why not use it?
I know it is not recommended to do this, but compared to other folks that started around the same time I did, including some of those with zero HTML+CSS experience, I feel like I am about a month or two behind them in terms of progress. If we're using FCC as a yardstick, they're all in and around the Data Visualization section and I am still stuck in the Algorithm and Data Structures.
However! I am aware that the working like a Japanese salaryman hours that my day job demanded ate up 2.5 weeks in May and then getting into the funk due to the stolen phone/invasion of privacy last month severely demotivated me for another 2 weeks or so. I also took a long detour into Udemy courses (which I still plan on finishing) as well so FCC is not the best yardstick really. I guess that works out to be why I am "a month behind."
We all know the reasons why you should not compare your current self with someone else. Everyone learns differently and may have other circumstances in their lives that may help or hinder progress. Someone spending time between semesters at their parents home, covering their room and board will probably have more time to learn than I would since I have that day job eating up 9+ hours of my weekday (if you add in commute time). And I am probably better off in terms of being able to dedicate time to learning than a working parent with kids (and kudos to them!).
But the reason I follow these folks is not only for the camaraderie, but because I find myself feeling pretty hopeless and demotivated and I actually feel like the comparisons actually help motivate me! What it boils down to is that they are able to dedicate a whole lot more hours then I can (whatever their circumstances) whereas I sometimes only squeak by with the minimum 1 hour a day (or less on a handful of days). It makes me want to find ways to get in more hours! In fact, this was the reason I got out of my funk from last month.
Also seeing someone else's progress is extremely gratifying to me as well. The thought of "I can get there too as long as I put in the time!" is the first thing that crosses my mind.
So as long as you are aware that this is not a race, I don't think comparisons are inherently a bad thing. There are always ways to turn it on its head and use it to your advantage.
I know that FCC wants us to do a loop, but that's boring since' I've already done a type of problem like this at least twice in Edabit and Codewars. After solving the problem there I was able to review how other folks solved this problem and recall that a few have used a formula, so cue up Google to search around. Gauss on Arithmetic Sequences hit the spot! The site goes into length about the formula and why/how it works. But I found what I was looking for here:
Where n is the number of integers.
Or for the purpose of applying it to the problem, I will use the below simplified formula.
And below are two versions of the answer. (Equations created with CodeCogs)
function sumAll(arr) {
let min = Math.min(...arr);
let max = Math.max(...arr);
return ((max - min + 1)/2)*(min + max)
}
const sumAllCodeGolf = (arr) => ((Math.max(...arr) - Math.min(...arr) + 1)/2)*(Math.min(...arr) + Math.max(...arr));
Easy peasy! I think it's still good to practice writing out the loop as well. However, I am at the point where I've done enough of these arithmetic challenges that I'm getting clued into the fact that there is likely a formula for most things. If it doesn't break anything in JS, why not use it?
Quick Retrospective
Since it is Day 85 and I am 15 days away, I figured this was in order.I know it is not recommended to do this, but compared to other folks that started around the same time I did, including some of those with zero HTML+CSS experience, I feel like I am about a month or two behind them in terms of progress. If we're using FCC as a yardstick, they're all in and around the Data Visualization section and I am still stuck in the Algorithm and Data Structures.
However! I am aware that the working like a Japanese salaryman hours that my day job demanded ate up 2.5 weeks in May and then getting into the funk due to the stolen phone/invasion of privacy last month severely demotivated me for another 2 weeks or so. I also took a long detour into Udemy courses (which I still plan on finishing) as well so FCC is not the best yardstick really. I guess that works out to be why I am "a month behind."
We all know the reasons why you should not compare your current self with someone else. Everyone learns differently and may have other circumstances in their lives that may help or hinder progress. Someone spending time between semesters at their parents home, covering their room and board will probably have more time to learn than I would since I have that day job eating up 9+ hours of my weekday (if you add in commute time). And I am probably better off in terms of being able to dedicate time to learning than a working parent with kids (and kudos to them!).
But the reason I follow these folks is not only for the camaraderie, but because I find myself feeling pretty hopeless and demotivated and I actually feel like the comparisons actually help motivate me! What it boils down to is that they are able to dedicate a whole lot more hours then I can (whatever their circumstances) whereas I sometimes only squeak by with the minimum 1 hour a day (or less on a handful of days). It makes me want to find ways to get in more hours! In fact, this was the reason I got out of my funk from last month.
Also seeing someone else's progress is extremely gratifying to me as well. The thought of "I can get there too as long as I put in the time!" is the first thing that crosses my mind.
So as long as you are aware that this is not a race, I don't think comparisons are inherently a bad thing. There are always ways to turn it on its head and use it to your advantage.
Tuesday, June 25, 2019
Day 079: Accessing Objects with Variables
Still working through the FCC Javascript Algorithms And Data Structures section and I am going through them pretty quickly thanks to all the practice I got on Codewars and Edabit as well as Angela Yu's Bootcamp (which I still haven't finished by the way. Currently at 90% done... need to finish soon!). I am hoping to get the certification for this section sooner rather than later. No specific date, other than "soon". Whenever I list a date, I seem to jinx it where something shitty occurs and derails me for a bit.
But I digress. So I also managed to finish two of the projects for the certification, the Palindrome Checker and the Telephone Number Validator (Regex). I think they are the two easier projects (and I actually enjoyed regex?) so I expect to spend a bit more time working through the other ones. I already looked ahead and they seem pretty difficult!
Anyways, I just want to plop the bit below as a reminder to myself on how to access through the keys of an object, in the below example is by using the For In loop (which I need more practice with).
I got really tripped up with this one. Just a note to myself that I need to use brackets when accessing the key values with a variable!
It was something I was banging my head over for about 30 mins. /bleh
Oh yeah, I changed the blog subdomain from anncc.blogspot.com to anncodes.blogspot.com. Not sure why I didn't think of that to begin with..
But I digress. So I also managed to finish two of the projects for the certification, the Palindrome Checker and the Telephone Number Validator (Regex). I think they are the two easier projects (and I actually enjoyed regex?) so I expect to spend a bit more time working through the other ones. I already looked ahead and they seem pretty difficult!
Anyways, I just want to plop the bit below as a reminder to myself on how to access through the keys of an object, in the below example is by using the For In loop (which I need more practice with).
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
function countOnline(obj) {
// change code below this line
let count = 0;
for (let user in obj) {
console.log(obj[user]["online"])
if (obj[user].online === true){
count++;
}
}
return count;
// change code above this line
}
console.log(countOnline(users));
I got really tripped up with this one. Just a note to myself that I need to use brackets when accessing the key values with a variable!
obj[user]["online"] or obj[user].online
It was something I was banging my head over for about 30 mins. /bleh
Oh yeah, I changed the blog subdomain from anncc.blogspot.com to anncodes.blogspot.com. Not sure why I didn't think of that to begin with..
Sunday, June 23, 2019
Day 077: Finally Out of the Slump? Coding/Algorithm Challenges
As I eluded to in my tweet, I was still feeling some sort of way after the theft and invasion of privacy so much so that it affected me a lot more than I care to admit. It still really bothers me even now.
Like I really couldn't bring myself to do anything productive and only squeaked by with "coding" by watching (and sometimes coding along) with videos CSS, NodeJS and such. But thankfully a member from my Daily Accountability group suggested doing Codewars problems together which really helped get me out of the slump.
I really enjoyed it when I did the Lighthouse Labs 30 day challenge. But now that I am kind of having a go at it myself, I am finding the challenges on these types of sites really addicting. And I get to learn more about JS and practice to boot!
So far, I've signed up for:
I think I will stick with those 3 for now. 3 is even probably a bit much right now.
I like the Codewars set up the most, though it can get really slow at times. Edabit is a close second and is much faster. Hackerrank can be confusing at times with their instructions and set up (or maybe it's the issues with the particular set of challenges I've encountered), but so far so good. What is great about all of them is that they display other user solutions after you complete your own which also has been a great learning experience to see how more experienced folks do it. This sometimes leads me down a rabbit hole of learning about different methods and getting more exposure to them.
Basic Algorithm Scripting: Return Largest Numbers in Arrays
Probably not the most efficient code in the world, but I was pretty happy with solving this one. It is close to the basic solution they presented.
Basic Algorithm Scripting: Title Case a Sentence
I solved a similar one to this particular challenge in Codewars (or was it Edabit?), but it was done with the basics length and iterating through the array with a for loop. I needed some practice with using map() and came up with the below. It's a bit of "code golf" (for me at least). I also got some use out of substring() as well!
Basic Algorithm Scripting: Chunky Monkey
Only because I wanted to get more practice out of a while loop, I came up with the following answer which is similar-ish to one of their advanced solutions. I also ended up using slice() and originally attempted to push it into an array assuming that it removes the items from the array, but slice doesn't work that way. After peeking at the rest of the solutions, what I wanted to use was splice() which does actually remove the elements from the array.
Basic Algorithm Scripting: Mutations
A tiny bit more code golfing.
JavaScript Algorithms and Data Structures Projects: Telephone Number Validator
This one was a doozy. I was initially very scared of regular expressions, but after going through the RegEx section in the FCC, it's not so bad! Especially when you have a handy tool like Regex101 with you.
I was surprised at how close I came to their basic solutions. My answers aren't a perfect match but it still works. That's what I love about programming.. there's more than one right answer!
[73/100] Have been in a slump lately that coding has been like pulling teeth. But I've added doing at least 1 #CodeWars problem to the daily tasklist and it's been helping out a ton. Even a small win really helps with motivation! #100DaysOfCode #CodeNewbie— AnnCanCode (@AnnCanCode) June 19, 2019
Like I really couldn't bring myself to do anything productive and only squeaked by with "coding" by watching (and sometimes coding along) with videos CSS, NodeJS and such. But thankfully a member from my Daily Accountability group suggested doing Codewars problems together which really helped get me out of the slump.
I really enjoyed it when I did the Lighthouse Labs 30 day challenge. But now that I am kind of having a go at it myself, I am finding the challenges on these types of sites really addicting. And I get to learn more about JS and practice to boot!
So far, I've signed up for:
I think I will stick with those 3 for now. 3 is even probably a bit much right now.
I like the Codewars set up the most, though it can get really slow at times. Edabit is a close second and is much faster. Hackerrank can be confusing at times with their instructions and set up (or maybe it's the issues with the particular set of challenges I've encountered), but so far so good. What is great about all of them is that they display other user solutions after you complete your own which also has been a great learning experience to see how more experienced folks do it. This sometimes leads me down a rabbit hole of learning about different methods and getting more exposure to them.
FreeCodeCamp Challenges
Even better was finding out that FCC had challenges in their JS Algorithms & Data Structures section. I mean, I probably peeked ahead at them when I started FCC way back when and thought to myself that it all looks like gibberish and that it will make sense to me in time... well, now's the time! I guess I want to save some of my answers that I was particularly pleased with.Basic Algorithm Scripting: Return Largest Numbers in Arrays
Probably not the most efficient code in the world, but I was pretty happy with solving this one. It is close to the basic solution they presented.
function largestOfFour(arr) {
let answer = [];
for (let i = 0 ; i < 4 ; i++) {
let maxNum = arr[i][0];
for (let j = 0 ; j < 4; j++){
if (arr[i][j] > maxNum) {
maxNum = arr[i][j];
}
}
answer.push(maxNum);
}
console.log(answer);
return answer;
}
Basic Algorithm Scripting: Title Case a Sentence
I solved a similar one to this particular challenge in Codewars (or was it Edabit?), but it was done with the basics length and iterating through the array with a for loop. I needed some practice with using map() and came up with the below. It's a bit of "code golf" (for me at least). I also got some use out of substring() as well!
function titleCase(str) {
let arr = [];
str.toLowerCase().split(" ").map(x => arr.push(x[0].toUpperCase() + x.substring(1)));
return arr.join(" ");
}
titleCase("I'm a little tea pot");
Basic Algorithm Scripting: Chunky Monkey
Only because I wanted to get more practice out of a while loop, I came up with the following answer which is similar-ish to one of their advanced solutions. I also ended up using slice() and originally attempted to push it into an array assuming that it removes the items from the array, but slice doesn't work that way. After peeking at the rest of the solutions, what I wanted to use was splice() which does actually remove the elements from the array.
function chunkArrayInGroups(arr, size) {
let answer = [];
let add = 0;
while (answer.length < arr.length/size) {
answer.push(arr.slice(0+add,size+add))
add = add + size;
}
console.log(answer)
return answer;
}
Basic Algorithm Scripting: Mutations
A tiny bit more code golfing.
function mutation(arr) {
for (let i = 0 ; i < arr[1].length ; i++){
if (arr[0].toLowerCase().indexOf(arr[1].toLowerCase()[i]) < 0) {
return false;
}
}
return true;
}
JavaScript Algorithms and Data Structures Projects: Telephone Number Validator
This one was a doozy. I was initially very scared of regular expressions, but after going through the RegEx section in the FCC, it's not so bad! Especially when you have a handy tool like Regex101 with you.
FCC's regex /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/
MY regex /^1?\-?\s?(\(\d{3}\)|\d{3})\-?\s?\d{3}\s?\-?\d{4}$/
I was surprised at how close I came to their basic solutions. My answers aren't a perfect match but it still works. That's what I love about programming.. there's more than one right answer!
Tuesday, May 28, 2019
Day 052: Personal Bootcamp Debrief
So it's Tuesday now and the long weekend has come and gone. How did my personal bootcamp go?
It was really tiring, but a GREAT experience. I didn't want to spend too much time blogging about it while it was going one since I wanted to dedicate most of the time during the weekend to coding and learning to code. I posted some thoughts on instagram during the weekend.
Day 1:
Day 3:
The plan is to do something like this once a month and maybe drag some folks from my accountability group into it as well, if they want to jump in for a day or so.
As for how far I got through the material (Angela Yu's Web Dev Bootcamp), I was at 23% of the course having just finished the Bootstrap section when I started the weekend. I ended the weekend at completing 66% of the course and am into the first few videos on JSON and API.
The second day was much better because I took a long break in the middle so it was like 2 medium sized coding sessions vs one big long one on the first day. It was also mostly working on a project that day (building a Simon Says game) so that added variety. I also kind of stayed up until 2am in the morning that evening watching more of the videos after finishing the project because I felt like I was on a roll.
The last day was a bit shorter (since I got in those hours in the AM ), so it was not bad in terms of total hours required for the daytime. I did do the minimum number of hours on the last day so I can enjoy the long weekend and let my brain rest for a little. In all, I did clock in bout 25.5 hours of learning and coding in the past 3 days.
I must say, I really enjoyed the projects in this bootcamp. When she introduces you to a concept, there is a bit of code-along happening. Then there's the pausing before each mini challenge so you can work through the concepts on your own before you unpause and she goes over it. For the big projects (what she calls "boss level challenges), she lays down the to-do's for each step and you tackle them one by one. At the end, she goes over the whole project. I opted to not review her solutions unless I feel really stuck (and am happy, but annoyed with myself to say that I peeked only once during the Simon Says challenge).
You know I already had that problem before where the initial look at the code makes me wonder how in the world I can ever get to that point. But those step-by-step to-do requests really help remind me that this is what programming is all about. They are all little steps to get to the final product. And when your app works and you look back at the code, everything actually makes sense!
For Andrei's ZTM course, I will skip the parts that I am comfortable with (HTML, CSS, JS basics), use the parts I am not yet comfortable with as review on 2x speed, and delve into the projects for the experience. I am also interested in his more intermediate course, the Complete Junior to Senior Web Developer Roadmap (2019) and figured I ought to see if I like his teaching style before jumping into another 30+ hour course. Use the coupon code LEVELUPZTM to buy his course fo $10.99 without having to wait for a sale.
The focus of the list is projects, projects, PROJECTS! Which is why Wes Bos' JS30 is on the list as well as the Odin Project. I was actually slowly going through TOP Web Dev 101 as bedtime reading, so I am about 33% done with it already. It follows along nicely with Angela Yu's bootcamp contents this past weekend. In TOP, I am skipping the parts related to Ruby or Rails, but might revisit that in the future. TOP just seems to have some really great projects and the curriculum is constantly being updated (contrary to what they say on the internets).
In the middle of all this, I do intend to do the challenges and projects on FCC as well. I would like to get the full stack FCC certification eventually! FCC is kind of where it all started, so of course it is always on the list. I do admit that the website alone was not enough for me to understand the material (sometimes the wording of the challenges confused me) hence my branching out to Codecademy, Lynda, and Udemy which has been working well in helping me learn.
Okay, this post was a lot longer than intended, but it is really good to create a roadmap for myself to tackle in the next few months. This also helps to know what I am doing for my next Personal Bootcamp!
It was really tiring, but a GREAT experience. I didn't want to spend too much time blogging about it while it was going one since I wanted to dedicate most of the time during the weekend to coding and learning to code. I posted some thoughts on instagram during the weekend.
Day 1:
Day 3:
The plan is to do something like this once a month and maybe drag some folks from my accountability group into it as well, if they want to jump in for a day or so.
As for how far I got through the material (Angela Yu's Web Dev Bootcamp), I was at 23% of the course having just finished the Bootstrap section when I started the weekend. I ended the weekend at completing 66% of the course and am into the first few videos on JSON and API.
Sort of Daily Breakdown
I was mentally wiped out the first day since it was pretty much a continuous 8+ hours of learning and coding.The second day was much better because I took a long break in the middle so it was like 2 medium sized coding sessions vs one big long one on the first day. It was also mostly working on a project that day (building a Simon Says game) so that added variety. I also kind of stayed up until 2am in the morning that evening watching more of the videos after finishing the project because I felt like I was on a roll.
The last day was a bit shorter (since I got in those hours in the AM ), so it was not bad in terms of total hours required for the daytime. I did do the minimum number of hours on the last day so I can enjoy the long weekend and let my brain rest for a little. In all, I did clock in bout 25.5 hours of learning and coding in the past 3 days.
What I Learned
I feel like I learned SO much! The three big things: being more comfortable with the DOM, being introduced to NodeJS, and finally learning the CLI/Git/Version Control. The next bits would be to get through the API section (which is also very cool!), moving on to databases, RESTful API, and authentication and security. I would like to finish the course by the end of this coming weekend, but we will see how that goes since it depends on how much time it takes to get through the projects.![]() |
| Hi NodeJS. I am so excited to meet you! |
You know I already had that problem before where the initial look at the code makes me wonder how in the world I can ever get to that point. But those step-by-step to-do requests really help remind me that this is what programming is all about. They are all little steps to get to the final product. And when your app works and you look back at the code, everything actually makes sense!
What's Next?
I know I haven't finished Angela's course yet, but I am already looking ahead. Here are my next to-do's:- Finish Angela Yu's Web Dev Bootcamp
- Andrei Neagoie's Zero to Mastery Course (yes another kind of intro course)
- Wes Bos' Javascript 30 (more projects!)
- The Odin Project Web Development 101 (ignoring Ruby and Rails)
- The Odin Project Javascript course (ignoring anything with Ruby and Rails)
- KhanAcademy HTML/JS (good as a break of sorts, for fun & DOM refresher)
- Build The Damn Thing personal projects
- Free Code Camp challenges/projects
- Finish up the old to-do list as bedtime refresher
For Andrei's ZTM course, I will skip the parts that I am comfortable with (HTML, CSS, JS basics), use the parts I am not yet comfortable with as review on 2x speed, and delve into the projects for the experience. I am also interested in his more intermediate course, the Complete Junior to Senior Web Developer Roadmap (2019) and figured I ought to see if I like his teaching style before jumping into another 30+ hour course. Use the coupon code LEVELUPZTM to buy his course fo $10.99 without having to wait for a sale.
The focus of the list is projects, projects, PROJECTS! Which is why Wes Bos' JS30 is on the list as well as the Odin Project. I was actually slowly going through TOP Web Dev 101 as bedtime reading, so I am about 33% done with it already. It follows along nicely with Angela Yu's bootcamp contents this past weekend. In TOP, I am skipping the parts related to Ruby or Rails, but might revisit that in the future. TOP just seems to have some really great projects and the curriculum is constantly being updated (contrary to what they say on the internets).
In the middle of all this, I do intend to do the challenges and projects on FCC as well. I would like to get the full stack FCC certification eventually! FCC is kind of where it all started, so of course it is always on the list. I do admit that the website alone was not enough for me to understand the material (sometimes the wording of the challenges confused me) hence my branching out to Codecademy, Lynda, and Udemy which has been working well in helping me learn.
Okay, this post was a lot longer than intended, but it is really good to create a roadmap for myself to tackle in the next few months. This also helps to know what I am doing for my next Personal Bootcamp!
Sunday, April 21, 2019
Day 014: Order & Syntax
I started on the Javascript part of the FCC exercises and was going through them pretty quickly due to a tiny bit of experience in js years ago and going over the Programming Foundations: Fundamentals with Simon Allardice.
That is, until I got to the Stand in Line exercise.
I am probably going to get some terminology wrong but I am explaining it in newbie/layman terms as I understand it.
So for this exercise, I knew I needed to push() and shift() - easy enough concepts. But I just could not get it right. It could have been the confusing-to-me instructions or the existence of the testArr. But after about 30 mins of banging my head over it, I am ashamed to admit that I looked at the hint which gave the solution. /bleh
Even so, I was still not understanding why the solution was why it was even after another 30 minutes of trying to dig up the reasoning. That feeling of maybe I'm not smart enough started to creep in so I decided to take a break. After lunch and a quick gaming session, I still wasn't feeling confident enough to go back to figuring it out. So I hopped on the indoor cycle for an hour and watched the first half of the JavaScript Essential Training with Morten Rand-Hendriksen (who is also great as well!). I realized I might be missing something and just needed to keep familiarizing myself with the rules.
I got to this part and just had to take a screenshot. Cue the eureka! light bulb.
One of the things that tripped me up was that I was trying to fit the testArr variable into the standInLine function even though they didn't have much to do with each other at that point. I was even including numbers in my push() and shift() even though the code had not even assigned numbers yet!
The initial task was to create the instructions inside the functions first. I should have looked closer on the arr and item parameters from the function. Which is what should be used in the statements inside the function body. /doh!
The testArr was defined after the function and then later called upon in the display code that made use of the standInLine function. Remember, the function are instructions that can be used again and again by other variables. Even if you create a new variable of testArr2 and assign 11, 12, 13 to it, you can later use the same standInLine function to remove the first value and add in a new value.
After you get the solution, give the below a whirl after to see what I mean:
I do have a tendency to put the cart before the horse (like, I'm one of those people who does not mind spoilers and may even look them up myself), so I just have to remember that the order is really, really important in Javascript and every other language out there and I really need to stop trying to get ahead of myself.
Lastly, I included Syntax in the blog title because I am finding that most of my other mistakes are syntax related as opposed to logic mistakes. I am the queen of typos. I also often find myself missing a bracket or quotation here and there that breaks the code. I am not sure if there are ways to improve on this other than relying on the text editors or ide's to help me on preventing name typos and getting into the habit of opening and closing things before adding in the body... I am all ears if you have suggestions!
That is, until I got to the Stand in Line exercise.
I am probably going to get some terminology wrong but I am explaining it in newbie/layman terms as I understand it.
So for this exercise, I knew I needed to push() and shift() - easy enough concepts. But I just could not get it right. It could have been the confusing-to-me instructions or the existence of the testArr. But after about 30 mins of banging my head over it, I am ashamed to admit that I looked at the hint which gave the solution. /bleh
Even so, I was still not understanding why the solution was why it was even after another 30 minutes of trying to dig up the reasoning. That feeling of maybe I'm not smart enough started to creep in so I decided to take a break. After lunch and a quick gaming session, I still wasn't feeling confident enough to go back to figuring it out. So I hopped on the indoor cycle for an hour and watched the first half of the JavaScript Essential Training with Morten Rand-Hendriksen (who is also great as well!). I realized I might be missing something and just needed to keep familiarizing myself with the rules.
I got to this part and just had to take a screenshot. Cue the eureka! light bulb.
![]() |
| Morten is my best friend now. |
The initial task was to create the instructions inside the functions first. I should have looked closer on the arr and item parameters from the function. Which is what should be used in the statements inside the function body. /doh!
function nextInLine(arr, item) The testArr was defined after the function and then later called upon in the display code that made use of the standInLine function. Remember, the function are instructions that can be used again and again by other variables. Even if you create a new variable of testArr2 and assign 11, 12, 13 to it, you can later use the same standInLine function to remove the first value and add in a new value.
After you get the solution, give the below a whirl after to see what I mean:
var testArr2 = [11,12,13];
console.log("Before: " + JSON.stringify(testArr2)); console.log(nextInLine(testArr2, 14)); // Modify this line to test console.log("After: " + JSON.stringify(testArr2));
I forgot that and tried to cram everything together. Judging from the forum, a whole lot more people than just me made the same mistake. The Python tutor tool for Javascript also really helped visualize the computing.I do have a tendency to put the cart before the horse (like, I'm one of those people who does not mind spoilers and may even look them up myself), so I just have to remember that the order is really, really important in Javascript and every other language out there and I really need to stop trying to get ahead of myself.
Lastly, I included Syntax in the blog title because I am finding that most of my other mistakes are syntax related as opposed to logic mistakes. I am the queen of typos. I also often find myself missing a bracket or quotation here and there that breaks the code. I am not sure if there are ways to improve on this other than relying on the text editors or ide's to help me on preventing name typos and getting into the habit of opening and closing things before adding in the body... I am all ears if you have suggestions!
Friday, April 19, 2019
Day 012: FCC Responsive Web Development Certificate
Hey I got the thing!
Super pumped!
The portfolio project is nothing to write home about. I mostly focused on the overall layout and making it responsive. https://codepen.io/4nn/full/NmMxPQ
I could have put in more little effects here and there with the link hovers, but that's the stuff I already know how to do (for the most part) and didn't really want to spend too much time on that. I do like the look of the minimalism and may even use it as an actual portfolio while I am learning.
So now I finally get to jump into JavaScript! So excited!
I'm still going through Programming Foundations: Fundamentals with Simon Allardice on Lynda.com which I think is an excellent primer. I will probably check out a few more js courses on Lynda as I am working through it in FCC as well. The point is to figure out what works best for me. So far, I am liking the working and reading through a topic on FCC and watching videos in tandem process for learning.
I'm not sure how long the JavaScript Algo and Data Structures section would take, but my goal is to get through it in a month with all the additional materials included. I imagine the bulk of the time will be spent working through the projects. I do have some low level algorithm and data structure understanding from work (lots of spreadsheets, reporting, running simple algos for random selection), so hopefully that will help a bit in those parts.
Onwards and upwards!
Super pumped!
The portfolio project is nothing to write home about. I mostly focused on the overall layout and making it responsive. https://codepen.io/4nn/full/NmMxPQ
I could have put in more little effects here and there with the link hovers, but that's the stuff I already know how to do (for the most part) and didn't really want to spend too much time on that. I do like the look of the minimalism and may even use it as an actual portfolio while I am learning.
So now I finally get to jump into JavaScript! So excited!
I'm still going through Programming Foundations: Fundamentals with Simon Allardice on Lynda.com which I think is an excellent primer. I will probably check out a few more js courses on Lynda as I am working through it in FCC as well. The point is to figure out what works best for me. So far, I am liking the working and reading through a topic on FCC and watching videos in tandem process for learning.
I'm not sure how long the JavaScript Algo and Data Structures section would take, but my goal is to get through it in a month with all the additional materials included. I imagine the bulk of the time will be spent working through the projects. I do have some low level algorithm and data structure understanding from work (lots of spreadsheets, reporting, running simple algos for random selection), so hopefully that will help a bit in those parts.
Onwards and upwards!
Labels:
100DaysOfCode,
CSS,
FreeCodeCamp,
HTML,
Milestones,
NoZeroDays
Subscribe to:
Posts (Atom)












