Day 45: It's all over now
Today's the day, the final day. So even though we presented yesterday, our real final projects were not due until Friday morning to submit in front of the judges. So last night I started going through all of my code and cleaning it up, I had a lot of duplicated or nonfunctional code. I also had to clean up a lot of my styling because I only really had basic styling just to get the layout working.
I spent time cleaning each page and component one by one. It was nice doing this, because it helped me understand my code better and I caught some errors and duplicates. Also I was kinda upset because even though I completed my MVP, I didn't push as hard as I could've. I really imagined my final project being way more impressive than it wound up being. But the reason I was okay with not adding any extra wow features was because I really wanted to learn and understand what I was doing. And because I didn't rush and try and complete everything, I felt that I could actually understand what was going on. It took a while for everything to click, but once it did it was worth it.
But you can't help but look around at other people and see how amazing their work is and feel inferior. Only three people would be selected and I knew that I would be in fourth place. There were three people in our class that had amazing projects that were completed and complex. Mine was completed, minimalist but had no wow factor. So I knew unless I added a cool new feature I would never be able to get into the top three. So I was okay with making the best final product I could.
So the final day starts and we met some of the judges, who were all from different areas in the tech community. Then we had to explain our app and code to each judge or pair of judges for 7 minutes. After that we moved to the next judge and repeated. We had to do this five times. The first time I went it felt much easier because the second time it just feels like you're repeating yourself. Also my local app crashed during my presentation but luckily I had my full app deployed on heroku. It didn't have the most up to date code, but it did everything I needed it to. Some of the judges were interested in the code, some in the design, and others in the backend or frontend. So you had to adjust to each judge. But it was really hard to do in a short amount of time.
After everyone went, we waited for them to decide the winners. And as predicted the 3 people I thought would win, did. Then after the announcement multiple judges came up and told me that I was among the top projects but they could only chose three, so that's why I didn't make it. I was 100% ok with that, my other classmates deserved it way more than me, they had better apps and code. But it felt nice to know that the work that I did was respected and understood. Then because I didn't get picked, I could go leave and relax because the three winners had to prepare for their final pitch to the public. The final projects were presented and Jennie won, with her project Sailaroo, which was just amazing and I loved her app, and she worked very hard and deserved it. The best part is we always worked together, so being friends with the winner, is the second best thing to winning.
I never thought the time would fly by this fast, and that I'd have so much fun spending 12 hours a day coding on a computer. I wouldn't trade this experience for anything. I had an amazing time!
Now to see what the future holds.
Day 44: Finishing Touches
I had to start today with the understanding that if I can't get any new features working before lunch time, they would need to be cut from the final demo. This is because as soon as I try to add new features, I tend to break other ones. So instead of trying to get everything done last minute, I need to focus on cleaning up and structuring all my existing code.
So the first thing I tried was to start passing the user id as a parameter so you could view other people's profiles. This presented a new issue because this needed context to know if you were on your profile or not. I understood that I could do that, but as soon as I started, I realized I could not get this user story to done by the end of the day, so I compromised. I created a global feed that allows any user to see all the posts that exist on my service. Then when you go to your profile you can see just your posts and blogs. The hope is to be able to click on the posts in the feed and go to that user's profile. Also be able to follow people and customize your feed as well as be able to keep posts private and add blogs to a feed.
I was able to get the global feed thing working pretty easily, but I couldn't pass the username, only the user id. So it's not perfect but it's usable. After I got that done, I started bug squashing because I was still having some display glitches. Then it was time to deploy. There were always errors with this, but luckily our teacher was able to walk us through it and I was able to get my app live and running with the database working. For now the app only works on mobile, but it still works on heroku. After we came back from lunch, I started cleaning my code up, because I had a lot of unnecessary stuff leftover. We then presented our apps to our class which was nice to see what everyone was working on, but it was kind of sad because it is all coming to an end. Tomorrow is the end, we pitch to the judges and then the final three present, and then we are released into the real world.
What am I going to do with my free time.....sleep and code I guess.
I don't want it to end!
Day 43: Accepting Reality
I woke up today in a bad mood. I think I was just so stressed about finishing my final project and the anxiety that this program ending, so I just couldn't relax. So I decided to just sleep in another hour and hope that when I woke up I'd be in a better mood, and it worked. I realized that morning that there was no way I would be able to get everything in my app I wanted done on time. Also I was just very frustrated with my design and layout, that I just felt unaccomplished and demotivated. So I just decided to finish my MVP and understand everything I created and how it works.
It's hard being around other talented people to not compare yourself to them. I look around and see all these amazing projects and I just feel like mine can be so much better. Then I remembered that I came to this bootcamp to boost my knowledge and skills, not to have the best design or to create my own startup, but rather just learn the skills I need to be an asset to any dev team or company. I can’t expect to make a complete clone of medium in two weeks.
So when I entered class today I set my mind on finishing the final step of my app, which is to see all the posts that belong to a blog, and also only see posts that belong to that blog. So I talked it out with someone, so I could see what I had to do. Because my databases were designed with zero redundancy, I had to make sure all my searches were perfect. I realized I needed to use the id of the blog I clicked on as the filter value for my GET request and then it should show all posts that belong to that blog….and viola….it actually worked.
I was so happy and proud of myself. I actually understood what I needed to do, and did it. This is when I felt much better about my app, because as long as I know what I'm doing, I don't care if my app is perfect or not. After that I went and started fixing some bugs and fixed my routing. I then decided to ask a friend to help me with the photo upload because she was able to do it. That also proved to be more difficult than expected. The way I was uploading a photo was in an edit form and the photo data wasn’t being saved in time for the form update. So I restructured the form and the function and got it to work. Then it wasn't displaying but it was because there was no directory set in the back end for static files. In the end I was able to finish it before the day was over.
Even though at times I feel like I know nothing, I have actually learned so much in a short amount of time.
Nervous for the future
Day 42: Console Cleaning
For the first two projects and most of the bootcamp I haven't really asked the TA's or teachers for help. Mostly because I'm just a person that likes to figure stuff out myself and I realized the most valuable skill as a developer is to learn how to learn on your own. But of course, there were times that I was just stuck or had no idea, and I almost always asked a friend or partner and they could help. But because Angular is new to all of us, there are some questions that can only be answered by someone experienced.
So I had a list of bugs and errors in my console that needed addressing. So, I got the teacher to go through them all, and there were so many tiny errors that were compounding and making everything worse. As he showed me them, it became obvious what my mistakes were and that I had some things working by luck. It just goes to show that sometimes you need perspective to see your code with clarity.
Now I had blogs and posts, but I needed a way to add the post to a blog if you want. I had this with a drop down that showed all created blogs, and it was working. Now I just wanted to pass the id of the selected blog to the POST document so it would save the blog id. I was on the right track, but the teacher helped me solve it and it worked right away. It felt nice to just solve a bunch of errors at once and just clean everything up.
Ask for help more often, because it can help give you clarity even if you think you understand everything.
I really see the value of having a team of people working on something.
Day 41: Blog Time
I did some work on the weekend, tweaking the style, creating the navbar and the left side pop out navigation menu. So, I came in Monday morning with some new components and I needed to add some extra functionality to them. I needed the side menu to change depending on if you were logged in or not. I was able to do that and have the proper links displaying easily. I then moved the logout function to navbar, so you can logout whenever you want. The biggest thing I needed to do for today was to create the blog service. It isn't much of a blogging app without the ability to create blogs and add posts to your blogs.
I updated the blog model on the backend and frontend. Then I created the blog route on the backend that was very similar to the post route. Then all I had to do on the front end was to make the Blog service with Angular to be able to do all the backend calls to my database. This wasn’t too bad, because it was very similar to everything I had already done with the posts. The only difference is that you’re able to click on blogs and see that blog in a separate page. This meant I had to pass along the blog id as a parameter so that I could get the data of that blog in the blog page. Luckily one of our learning units had an example that I was able to follow and after some tweaking I was able to get to work. The only thing was that I didn’t have a form to create a blog. So, I just created a separate form to create a blog so that I could see a list of my created blogs and be able to click on each one and see it on a separate page.
I should've spent more time earlier getting all the routes and services done and worry less about the components and CSS.
This actually isn't too bad…
Day 40: First part of the app down..so much more to go.
I spent most of the week structuring my app, I thought I would have a lot of the basic functionality working by now, so that I could focus on design and flow the second week. Wrong....oh so wrong. I did not anticipate that passport and the whole login/logout would take 2 days to get working. So, my biggest focus for today was to get the form to create a post to your account working, as this is the core aspect of my app.
I started on the backend with model and everything I needed for the post. I have it structured so that the posts are a separate collection and just store the userId of the current person logged in. I then had to write the route for the post. All of this was okay because I had done it before. The hard part was Angular. Because you must create a service and then call that service in the components. Then you have to make the form in Angular using ngModels and having a handleFormSubmit function.
All this stuff isolated makes sense, but when you have to create and write in like 5 separate files just to simply add something to the database, it can be a bit overwhelming. So, after taking a while to get that all written of course I had spelling mistakes and errors that I had to go and correct. Then nothing happened. After some troubleshooting, I realized I hadn't imported the data model for user on the backend so that it wasn't adding the current user's id to their posts, and this broke everything. Nothing would be added to the database until this was fixed.
With that working I was able to display the posts in the profile that were created in the form. The issue was these posts were global, not just the ones that are part of your profile. I then had to filter the GET all posts function by userId. So, before the day was over I had the core functionality of my app working. There still is no way to add that post to a blog or see other people's posts, but I felt accomplished. Then we had to watch the UX/UI's final presentations, so I was basically done for the day at 3pm. Next week is going to be a lot of stress!
Understanding your data structure is vital, and also how that will be representing in routes.
Only a few more days left, and this is all over. It went by so fast.
Day 39: Passport Problems
Today I spent most of the day just being frustrated. Even though we learned the backend in a short amount of time, I felt that I was able actually understand everything. And when we did the project we had direction and an idea of what to do. Now with Angular, how we use the backend is different. It is just a web API for our data, which in concept is fine. But when we generated views in the backend it was easy to understand how to get the data and display it. Now we have to handle the routes on the backend and frontend, and they are in two different syntaxes.
Then you have to make sure your service is accurate and passed to all the components that need it. Also passport was pretty easy for me on the backend. But now that we have to pass that information to the frontend and allow Angular to know if the user is logged in or not. So I had the login/signup working but I didn’t understand how it worked. I mean I get the theory but all the code that is needed to make it work on the frontend just confuses me.
Then we had to create other functions so that when you redirect the next page would have the data it needs. Then we also had to destroy the service when the component was no longer being used. So I just felt like I had no idea what I was doing, and I was very demotivated. I love the frontend and creating beautiful functional apps, but I feel like I'm not actually using the power of Angular because I am so frustrated with passport and keeping track of if the user is signed in or not.
I can say that I know the MEN stack, but I still need some more Angular practice to claim MEAN.
There has to be a better way to handle login!
Day 38: Time to actually code
I spent the first two days thinking through my app, creating wireframes and organizing the files. But I hadn't actually written any code the first two days. I started the day off creating the models in the front and back end and generating all the pages, components and services I needed. I then created the welcome, login and signup pages in Angular. I had to then create the routes and link them together, and everything actually worked.
I was happy because I had three pages of my app done, but they didn't actually do anything. So then I was stuck between whether I should work on the login/signup process or start on some forms to see if I can get the data added to the database and display it with Angular. I decided to try and do the login/signup because it was very easy for me with passport on the backend with express.
I learned very quickly that it is not easy at all on Angular. I needed to have the service, then the routes and authorized routes. Then I needed to have all the passport configuration in the backend and also a way to create sessions and allow all the components of Angular to know the status of the user. Luckily our teacher created an example on GitHub for us to use, but even with that I was still getting errors. So after the day was over, a few of us stayed after and worked on it together with someone who had it working. After a few hours and some beers, the login and sign up function was working!!
Working alone now after working on a team, proves how hard it is to do a Full Stack App by yourself. We all just started working together and sharing our code because it's really the only way we can get it all done.
I want to work on a team!
Day 37: Too much to do, too little time
So it's day two of our final projects and the panic is starting to set in a little more. I finished up the wireframes and user flow for mobile, then once that was done I did the wireframes for the desktop. As I did this I realized I don't even like my design that much, especially for desktop because it's just basically a blown up mobile version. But I don't really have time to completely redesign the layout, so I just need to focus on making everything work and being consistent, then I can style once the program is over.
Now that I have how the app would look and work, I needed to generate the app for the frontend and backend. I wanted to make sure I created them correctly the first time. I made sure to create the Angular app using Sass to make it easier than changing it later. Then I had to create the express app and delete all the parts I wouldn't need and add all the extra files I would need to handle the authorization. After I did this, I went to push them to their separate github repos, but I accidentally pushed the front and back to the frontend repo. So I had to spend time fixing all that.
Then after that I somehow deleted the gitignore so the node modules were pushed as well, so I had to fix that. The final thing I did for the day was to create my data models for my app which are currently user, post and blog. I spent time making sure I had everything I needed in the model and that it wasn't redundant and that everything I needed could be accessed using just the user id. By this time the day was over and I was getting stressed because I realized how much stuff I have to do, and I don't have enough time. What happens with these projects is that a little bug can appear and consume your whole day.
Time management will be essential to whether or not I get my MVP finished in time.
Will I be able to do this all?
Day 36: Well hello there...
Today marks the start of our two weeks to work on our final project. So if everything goes according to plan you will be reading this post on my app. Awkward….I have been just writing all these posts in a word document because there wasn't a simple blogging platform that I liked. Medium is probably the closest to what I like, but it is more for article or one off publications, it's not really the best for blog creation. So my idea, as you should already know was to have the single post idea still supported but group them into blogs. This way you can just post your thoughts but add that post to a blog if you want so you can group your thoughts and allow people to see all the grouped posts. The hardest part was and still is the core functionality and layout. Because I want to keep it simple and easy to use, but also functional. There are so many features I want to have but with only two weeks I need to keep focused.
**This post was original written for minimo**
It's hard having to create something from scratch, it's much easier to just code what you're told.
I want to do everything…which means I will have nothing.
Day 35: It's all coming to an end
Today is the last day of our learning modules. We still have some content to cover on Monday but we will not be learning all day, we have to start our projects. Today we just worked on yesterday's daily exercise about recipes using the client and server. This wound up taking almost the entire day. The daily exercise wasn’t actually that hard it was just getting familiar with the setup of having a client and server. The server was already setup for us, which is the part I needed to practice more. So we just needed to be able to create routes passing the data through using services but have it linked the backend API. So it was just a lot of mistakes and errors in passing through all the data as usual. I would have everything set up correctly but it wouldn’t work because I was just missing one curly brace in the HTML. And eventually we were able to get things posted in the database using a form and button. And while it seems so simple, it took a lot of effort. I think I just need to start working on my project so I learn all this better by doing.
I still need more practice about how it all fits together, linking the backend with Angular.
Time to start another project…the final project.
Day 34: My brain is full
Today we went started with the pair programming from yesterday because we didn’t get to it. It was basically the same as the daily exercise we did yesterday, so I already knew how to do it. The only difference is that this one had a form and we had to use Angular's form method to get everything from the form and allow it to execute a function. This was difficult because we never learned it. So we went over it as a class, and it wasn't too bad, but again it was just a bunch of new specific syntax rules that we weren't used to. Then we switched to under sting how this would work with our REST API and router on the backend. How we were going to pass all the data from a database to our angular front end. This was something that was fine in theory but once we started the coding, I just couldn't follow it. It was just too much information and my brain shut down. I need to just play around with it myself to learn, but now I just need a break to practice.
I never thought I would miss doing everything in the backend.
We only have one day left of learning? It just flew by!
Day 33: Ok, now it's getting complicated
So far everything we did in Angular wasn't super difficult. It was usually similar to things we did on the front end static design or on the backend with express. It just added some new syntax or a way of doing something, but it wasn't anything super crazy, just took some practice. But today we just built a trello style to-do app with Angular but it included a lot of new concepts. Using pipes, services, models, pages and components.
So we had learned a lot of these separately but not all together. One at a time it wasn't too difficult, but linking everything together and passing all the data through, and thinking about the parent and child components just added a lot of complexity. So our daily exercise for that day was focused just mainly on services and routes. Luckily we did the example in class because we were able to get all of the daily exercise done by referencing that app. The hardest part was remembering all the new syntax to use in the html and also importing and using the service. The routing wasn't too bad because we only had one page that linked to another based off id.
I'm starting to understand why people warned me that learning Angular in a week is difficult.
We still have to link this with the backend?
Day 32: It's just getting started
Today continued the learning of Angular. So far everything we have done in Angular hasn't been that bad, it has just been a different way of doing the same things we already did. So I was able to do yesterday's daily exercise pretty easily but today we started adding more complexity. Most of it wasn't too bad until we started talking about pipes. It's already a lot of work keeping track of all the folders and components of angular, then using pipes to manipulate the data adds another layer.
I want to learn more...
Day 31: Angular
I really wanted to learn the MEAN stack because I have always been interested in the front end and really wanted to learn front-end frameworks especially Angular and React. Those are quite intimidating to a new learner, so that was a big factor in my joining the boot camp. So now that we did the MEN part of the stack we learned how to make apps but using the server to generate everything instead of relying on the frontend. Today we learned TypeScript which is what Angular uses throughout its framework.
TypeScript is cool but it's always a lot of work to switch to something new. Then we looked at an already created Angular app, and there were so many files and folders. But after playing around and creating some components it started to make sense. Overall it wasn't too bad but I don't think we really scratched the surface of what Angular can do. The daily exercise dipped my toe in the water, but I'm excited to create an entire SPA using Angular.
I think I'm going to miss all this learning.
Last week of learning, it went so fast.
Day 30: Just a few more minutes…
So today is the day of the presentation of our app. Most of our app was done and the route and farms were being added to the database, now we just needed to display them in the user's profile and be able to click and see back on the map. My partner did the route and I did the farm, but he did not push his code to Github so I couldn't start working on displaying it in the profile. So I just started to create cards with the info that would be displayed in the profile section.
My partner came in later and then gave me his code which had all the info I needed to get the info displayed in the account. Of course there were some glitches and bugs that we had so solve along the way. But we were running out of time so we couldn't get the functionality working to be able to display the saved routes/places on the map from the profile account. I just chose to clean up the input form and make it more user friendly along with changing it from Italian to English. Then I made sure the entire app was usable on mobile.
With a few minutes left, I pushed it all to heroku and we had our final app to present. We were the first to present and we were trying to get his mac to display but the adapter was broken, and when I walked away to find another, I tripped over the HDMI cable and broke it, so we had to find another. We just presented over airplay. The presentation went great, we had a small glitch where the signup took us back to the login versus the search page, but it wasn’t a big deal. Then we had enough time to show the mobile UI and ended exactly at 7 minutes. It was a huge relief to be done. Also it was nice to see everyone else's final projects. It was so cool to see all the work we accomplished in such a small amount of time. Being part of a class learning together makes the process so much more enjoyable. We learn so much from each other. I can't believe next week is our last week of classes and after that it is just two weeks to work on our own apps.
Takeaways: It is almost impossible to have every feature you want implemented in one week, so it is important to define your MVP and required user stories to make sure you have a complete user flow.
Feels so good to be done, but I'm still thinking about all the other things that need to be done.
Day 29: Database hell
Now that we have all the routes and views of our app working and linked, the map with the core functionality added to our app, the most important part is getting all the data from the map to be stored and linked to the user. So we first started to make sure that when we saved the route, all that info was being saved into a separate collection in our database. That worked right away with no issues. Then we were able to store the userId in the route collection, but we wanted to also do the opposite, store an array of routeId's belonging to a user. This proved more difficult because we wanted to just have this happen once a user stores a route, otherwise nothing should happen.
So we wrote a method for our GoogleMapsData schema that finds the current user's id and pushes the just created route id into the user schema routes, which is an array. The method wasn't difficult to write, it was just getting it to work in the route. We had it under the save() function for saving a new route, which wasn't working. So after just looking at our code we were able to find the right place and it worked right away. After that we had to do the same thing for places, which was easy because it was basically the same thing as the routes. We decided not to link the routes and places for now, because we wouldn't have enough time to implement the features related to saved places per route.
Don't wait until the last minute to deal with your database because that was the core functionality and we were cutting it very close.
Just save the route id in the user schema…it's so simple, why won't it work?
Day 28: Stress fracture
I intentionally waited a day to write this blog post because I knew it would be pointless to write it right after the day was over. Today was a normal day with getting the map into our premade app, so that we can actually use the functionality. Most of the day was just cleaning the code and restructuring the layout so everything fit.
Then before we did our practice presentation our teacher said the final presentation would be 7 minutes. I asked if it would be a hard 7 minutes or would there be a buffer. This led to a huge misunderstanding of what I was asking and turned into a debate over the point of the presentation. I originally just asked the question because the UX/UI teams had strict time limits that would cut off the presentations. As a student in the bootcamp I am interested in learning and seeing other people's work than having super formal presentations. In the end the answer was that we would have a time limit but allow people to wrap it up and not interrupt them. I think we were all just stressed and getting used to all the changes. Since the beginning of the program we have had a lot of changes in teachers, schedules etc. So we just lack clarity at time, and it's hard to communicate that.
I need to learn how to express myself better during a misunderstanding and not start to get angry or upset, just take a step back and see what is going on.
I just asked a simple question...
Day 27: It's starting to come together
So I came in today and started putting all the HTML and Sass I did into the views, and having just the main layout render the navbar, CSS and links. Then I had to make sure all the links/buttons were actually going to the correct route. For the most part they all worked, we had some spelling errors and naming errors that stopped some from working, but we got that fixed pretty quickly.
Then we had to make sure the login/signup was working. It worked pretty quickly, but the Facebook and Google logins were not working, so we just ignored that for now. Then we had to make all the profile pages hidden unless you are logged in. We just did that with the ensureloggedIn function passport provides. Gabriele then went to tweak the map and the data while I started adding the EJS to the views so that we can remove the login/sign if you are already logged in and instead show your username and a logout button. We got this working after I realized that I can't spell and that was breaking everything.
We then had a bug that was breaking our app once we were logged in. We wanted to block the landing page from being the default page when you are logged in but rather redirect to the main search page. This was creating a bunch of errors in our app, because it would try to go to the home page but it was blocked. Then we realized we had an ensureloggedin function for our home instead of ensurelogged out, so it would only show the home page if you are logged out. So by the end of the day, we could click through every option in the app, the only thing missing is the map and passing through all the data, which we should be able to take care of tomorrow, which should give a day to bug squash and actually give the app some proper styling.
So many bugs just come from basic spelling mistakes.
Things are actually going smooth...for now.
Day 26: Time to apply our knowledge
Today was official the start of our project week. I worked on the wireframe and user flow over the weekend so that I could start writing all the HTML and CSS for all our views, while Gabriele worked on getting all the map functionality working. So I spent most of the first day just creating all the HTML and making sure all the layouts were working and giving them some base level responsiveness so that the sections would move responsively before we start adding all the components and the map. Then we went through the routes together to decide where each action would take you and what view and data it would have to show. I then cleaned up all the folder, files and the app.js file to make sure everything was linked and working. I also had the passport logic separate and made sure that was working. So by the end of the day we had all our basic views, the routes working, our user database working, and the map working but on a separate file.
Time flies when you are just focused on one project and can invest time in it.
I think we might actually have this app done by the end of the week.
Day 25: Fun in dysfunctional
Today was definitely a Friday. The weather has been rainy and we have just been slowly going crazy. I woke up late because I was up late cooking for our Hacksdinner potluck event. I got there a half hour late and the other half of the class still hadn't shown up. So everyone else was late and just sluggish. When my partner eventually came we started going through the layout and flow of our app. He started working on the Google Maps API which is crucial to our functionality. I started setting up all the files/folders and linking and naming everything. I then started wireframing and setting up some of the routes. By then Gabriele had actually had the core functionality with Google maps working. This was amazing because I was planning for it to take days to do. This means we have much more time to focus on a clean UI and managing our databases and routes.
After that the UX/UI people had presentations we were able to attend. It was nice to finally see what they are working on, because in the future we will have to get used to working with a design team. We then got paired with a UX/UI person to work with on our app. But because we didn't even know how the flow should go, I just told her not worry too much, once we have something started she can give us feedback. After that it was time to eat and have some beers because it’s the weekend and next week is all about the project!
Working on a project with a partner is great, especially if your partner is able to solve complex things is a short amount of time.
TGIF...it could'nt have come any sooner.
Day 24: Put it all together
Today we just walked through the creation of a Kickstarter style clone. Most of it was already created so it was more looking at the existing code and taking it apart. This app is closer to what we will have to produce for our final project. The problem for me is that I can look at someone else's code and understand it, but when it comes time to create it, I find new obstacles that I don't know how to solve. I much rather just play around with some code and see what happens.
Then we went into the pair programming which was using the google maps and places API with autocomplete. This was very difficult, I was able to get the autocomplete working pretty quickly but getting it to display the search result on the map was difficult. My partner was also getting frustrated, and we need to use something similar for our project. So after some frustration he just started playing with the API related to how we need to do it for our project. I was trying to finish my Tumblr clone. I was getting the picture uploaded in the database but it was not displaying. Finally after some tweaking which was just a tiny syntax error that was ruining everything, I got it to work. Which I was happy about because being able to upload and display a picture is a useful skill that will come in handy for our project. But towards the end of the day, I just couldn't focus, we spend all day in a room together and I was getting stir crazy.
Sometimes it's hard to focus on a small task when you know you have a bigger one looming over your head.
I'm just going a little crazy...being here all day.
Day 23: Google Maps API
Today was a mashup kind of day. We first started with google maps, which I couldn’t pay attention to the lecture. Watching someone else read prewritten code is just boring. So I just created my own maps and was playing around with the settings and styling. It was pretty easy to figure out, but we had to still sit and listen for a while even though it would've just been better to tell everyone to create a custom map, then we could've moved on.
The next part was integrating google maps with express and being able to display location data from our database using google maps. Again this was one that I couldn't just watch and pay attention to. We had to do this same thing for our pair programming, so I learned how to do it there. It was just a lot of trial and error, and reading documentation until we were able to get the markers to show up.
After we were done that, we moved onto to learning how to deploy heroku. Which wasn't too bad because if you follow all the instructions it should work, but because there are a bunch of tiny steps, that if you make one mistake somewhere it can mess it all up in the end. Overall I felt that today's lesson could've been an hour of letting us play around with google maps APIs ourselves and then ask questions.
Good documentation makes your life so much easier.
Somethings just aren't meant to be taught by lecture.
Day 22: Back to the basics
Once we got the AJAX request syntax down, it was just back to remembering jQuery and linking everything. So for the pair programming, the hard part was using AJAX with ChartJS which was to display data from a bitcoin value API. The hardest part was using the API's URL request and then passing that data into the ChartJS data sets. To make it even worse the documentation was not very clear. But it was good practice for the real world, because the documentation is not always super detailed.
We were able to work it all out and get it working after playing around. But when it came to the daily exercise it was just using AJAX CRUD to display everything from our API database, then show/delete based off id. Also add a new item and edit it in the database. 99% of the problems arose from the syntax and typing errors. We hadn't written in jQuery or html in a while so our skills weren't as sharp.
Clean code, and accurate syntax prevents so many headaches.
I never thought I would find jQuery difficult.
Day 21: Stuck in the middleware
Another week and we are getting closer to the end and so much complexity is being added that it can be hard to keep track of. The foundation of everything makes sense, using routes, views and models. But the best part about express is all the middleware and that's also what can create a lot of confusion. Making sure you require and configure everything accurately in very important.
Today we started with passport to help handle login/signup instead of just creating a regular session middleware. The idea of passport was super straight forward and the social media login integration is super easy and straightforward. But what I struggled with was just writing the base strategy for an email login. We were having issues getting the errors to render, and it was just making sure that the flash error was being rendered. It's stuff like that, which trips up the whole flow that is frustrating. Because while it makes social media login super easy, I think it makes the regular log in not as easy. So it really just comes down to getting more practice and becoming comfortable with using middleware.
Now we are starting to change the view/functionality based off user type. Again the concept and logic makes sense, but when it comes down to actually writing all the code and linking it together, that's when it gets very messy to me.
Middleware, your best friend and worst enemy.
How do I keep track of all of this?
Day 20: Stuck in the middleware
Today was a fairly focused lesson and pair programming because we were just dealing with signup/login user stories. So understanding authorization and authentication as well as sessions and cookies. So even though it was a pretty simple exercise and lesson, we would just encounter a lot of bugs, because we had to make sure the passwords were encrypted and that usernames weren't repeated. So it was adding all the additional checks, that now seems so obvious but doing it for the first time was more difficult. We then had to created authorized routes so that users could not access parts of the application with being authenticated and then authorized. And using sessions and cookies to manage this so that they can stay logged in. I enjoyed today's lessons because it is so vital to making web apps. Having secure and properly configured authentication is the first step to a real application. But today I also had an extreme case of the Friday's because my brain was just exhausted.
Passwords are never actually stored, only you know your password.
That's all it takes to create this?
Day 19: Mongoose, mongeese, mongooses?
Today was a recap and an overview of the difference between static and dynamic websites and how the whole flow of interacting with dynamic apps works. Then also where mongoDB, node and mongoose play a role in all those parts. The learning content of today was just using mongoose to interface with mongoDB through node. Before we just used mongoDBs methods to interact with the database, then we switched to using APIs to interface.
Today we were able to interact with the database using mongoose to help simply a lot of the interactions using their methods. We also got more into the MVC framework of an app using express to separate the routes(controller), the views (ejs files) and the models(our js schema). This concept makes sense but starts to get confusing because you have to keep track of many different aspects of the app and they tend to have the same names. Then you have to make sure all parts of the app are properly connected and interfacing.
I got to work with someone who is always very fast at coding and prepared so it made me work much harder because I was the one driving. The only issue with this, was that I hadn't read the info modules, so I understood how we were creating the interactions and layouts, but there were small syntax and layout stuff I hadn't seen yet. So later when I was able to go back and read the lessons and then start our daily exercise, I was ablet to understand what we were doing.
The problem is that this week has been info overload, because we have learned new technologies each day plus their additional plethora of frameworks. While this is a good practice because in the real world you will be constantly encountering new issues and frameworks you need to pick up quickly. The problem is that we learned mongoDB in one day, then node another, then express the next, and now we have to use them all together with new frameworks. So just keeping all the syntax rules and packages straight can be a bit overwhelming. I am looking forward to the weekend to take some time and review all the lessons and tidy up my code.
The backend really isn't that bad, there are a lot more tools and frameworks out there to help simplify and speed up your dev process.
I have too many files all with the same name...
Day 18: Express yourself
So after one day of using MongoDB we already moved on to using Express. Which is a framework to use with node. The concept of express wasn't super difficult because I worked in network consulting before learning programming so all the http requests and server information made sense to me. It is just having to learn a new layout and syntax after we just learned how to use mongoDB with node. oday was a recap and an overview of the difference between static and dynamic websites and how the whole flow of interacting with dynamic apps works. Then also where mongoDB, node and mongoose play a role in all those parts. The learning content of today was just using mongoose to interface with mongoDB through node. Before we just used mongoDBs methods to interact with the database, then we switched to using APIs to interface.
At first it was quite difficult but once we understood the concept of using layouts and templates and generating the HTML from the ejs files it made a lot more sense. In general, Express is not very difficult it is just keep track of all the packages and dependencies. Writing html using ejs syntax took some getting used to. It just requires a lot of moving parts and interconnected things. This makes it much easier for everything to break after one simple mistake. In general the days are going by so fast because we are learning a completely new thing from scratch each day. And because this week and I have tried to get most of the daily exercises done right after class, I feel like I'm retaining more information. But what happens is the next day we start with something new again.
I really need to practice and get good at using the debugger features, because they can help you save so much time.
Wait, why isn't this working? I have everything written exactly the same as you!
Day 17: MongoDB, so much better than SQL
I had previously done some work with SQL making a mock database for a Netflix style company back when they were just a movie shipping company. It was a cool project and I learned a lot. But SQL just seemed so antiquated and difficult to work with. You had to create all the tables and relationships before you could do anything, so it required a lot of planning and setup before you could do anything.
Now learning MongoDB where you use collections and documents in JSON. It is much more logical for me to store and interface with information this way. But after learning MongoDB I did see some of the benefits SQL had. SQL forces you to have a better and more robust data structure while Mongo you can easily start putting things in the wrong places. But the biggest benefit of Mongo and NoSQL is the startup time is insanely quick. Once you get the basic layout of your collections and documents you can start up the database and populate it and interface with it immediately. It makes creating a new full stack app much quicker because you don't have to spend as much time on data design and creation. But the truth is SQL is still a valuable tool and commonly used in larger companies, so I still need to learn and be comfortable with it. But given the choice to quickly create my own app, MongoDB would be my go to, plus all the packages.
I really need to practice and get good at using the debugger features, because they can help you save so much time.
I thought I would hate the backend.
Day 16: A lesson in change
With the project done, it is time to start moving on to more aspects of being a developer. Today represented a shift in multiple ways. We started to work with node.js and ECMA6, which is a pretty big change from before. But not only that, we got a new teacher who will be staying with us the rest of the program. So we spent a lot of time discussing things we liked and didn't like to try and have an even better experience.
So today was nice because we did not move at a rapid pace through all of the modules, but at the same time, we did move a little slow for me. Of course I would love to take it slow, but we only have so much time to learn everything and I won't be able to know 100% of everything all the time, as long as I get the gist, I rather move on and start practicing. But I am assuming things will improve as we are changing the style of teaching to be more interactive, which I strongly welcome. Before we could get lost in lectures and my mind would start to wander, so when we are tasked with doing something, it makes the learning much more interactive. But in general node.js was pretty straight forward, the problem is now having things be less tangible. Also finally getting to use ES6 was great because the syntax makes so much more sense and it is much cleaner and more concise.
Having patience and being flexible is important because it is something that will always happen in the real world.
I never thought I would want the pace to be faster...
Day 15: I made this? I made this!
So today was presentation day, we had to finish up our games, make sure they were working and live on the internet to play. So I just spent most of the morning making sure everything was working and that you could play it online, and checking that it would work on mobile. It was all good, so I started on my presentation. I just referenced the readme I wrote for my github repo about the whole process of making the game.
It was nice to take a break and look back on everything I did, and see where I could've done more. Also its so funny looking at the code now it's so obvious a lot of the things I needed to do, but at the time you can't see it any other way. So then the time came to present. I went 4th, because I wanted to go earlier so I could just relax and enjoy everyone's presentations. That was kind of a mistake because the four people before me had some amazing games, so I felt weird just presenting my quiz. But I put a lot of work in the design and gameplay to make it fun and interactive so I was proud. People had fun guessing all the trivia and being confused, which was nice because that's why I wanted to create the game. I wanted something very different. At the end one of the people at Ironhack told us to not measure our success by comparing ourselves to others but how far we have improved. Which is true, but I also think that I could've worked harder and done more. Even though I was sick for most of the week, when I saw what other people were able to do in the same amount of time, it just made me want to push harder and finish my game completely.
Be proud of your skills, but always know there is room for improvement.
Coding is way more fun, when you have a goal in sight.
Day 14: Why is this doing this?
I woke up today, still sick but I decided I should still go to Ironhack and stay as long as I could. I wound up staying the whole day because being in that environment makes me more productive and energized. So my quiz was working and stable but it didn't have all the features I wanted and had some minor bugs. I really wanted to add a least another category of trivia before the final presentation. But I thought it would be better to make my one category perfect so that I could just plug in some more trivia to create the other categories, versus making another makeshift category. I encountered an issue with my timer not showing the first second. It was a 15s timer and after one second 14s would show up. I was able to fix it so that after the first question it worked, then with some more tweaking I completely solved that bug.
I also decided to tell the user what the correct answer is after they get it wrong, as well as add a you won screen in case someone was actually able to beat the quiz. Which is very hard because the timer decreases. The last thing I had been working on was making the questions appear in a random order each time. No matter what I did I would get it working but it would still break down or encounter a bug. Eventually a classmate came over and asked me what I had left to do. So I showed him what I was doing and right then and there I caught my bug. I was iterating the index as array[i]++ instead of array[i++]. That's when it made me realize that sometimes just having to explain what you are doing or looking at it from another perspective is very valuable. The last thing I want to do I have an animation for the timer. Then I will try and write another category of trivia tonight before the presentation.
Taking a step back from your code and trying to explain why you are doing something to someone might make you realize there is a fault in your logic.
You are my good luck charm.
Day 13: Time for some rest
On Monday I started to feel sick but with some medicine I was able to get through Monday and Tuesday. But when I woke up this morning I was just exhausted and couldn't breathe through my nose. So I messaged my teacher and said I wasn't going to come in this morning because I needed to get some extra sleep. Being sick is difficult enough but with our crazy long days with no sleep it just makes it worse.
So because I got further in my game yesterday than I thought I would, I just decided to get some rest today and hope that would help me feel better. So after a little more sleep I felt a little better and was able to fix a few bugs in my game that were bothering me. When I reset the quiz it would take you back to the category screen, but when you went to play the same game again, it had the starting lives at 0. I was able to fix that pretty quickly. I also started experimenting with the best way to make the timer decrease after each correct question. I got it working, but it wasn't very effective or the best way to do it. Only after like 2 hours of work I was exhausted again and just passed out. So now I'm playing around with the timer function again and hopefully try and solve that tonight, so that tomorrow, if I feel better, I can spend the whole day working on another category of the quiz.
It's ok to take some time for your health, but because I worked harder than usual earlier in the week, it made the rest less stressful.
Day 12: Wait it actually works…
Today was our second day of just pure coding, all day. Since I had the basic logic working separately but with no design aspect, all I needed to do was take the HTML I already formatted it and link it to the game logic JS. This was easy and hard at the same time. I mean I had both things working separately, so I knew that it should work in the end, it just would need a lot of tweaking.
So as I started manipulating the HTML using jQuery, all sorts of random display and functionality glitches started happening. My code at the moment was very repetitive and not very well structured. It is still not great, but I had to take time to organize and label all of my code so that I could isolate where the problems were occurring. Then after a few hours of troubleshooting I had one category of the quiz fully functioning with no glitches. It doesn't have all the features I want to add to make the quiz harder, but it works and looks nice. And…..it's responsive, well, mostly. It has some stuff that needs to be fixed on smaller phones but it scales really nicely. I am proud of that because I never made a game before, let alone with an original design, but one that is also responsive. Yesterday and today I set a goal of what I wanted to have done by the end of the day, and both times I completed what I had set out. Of course there is always more I wanted to do, but I was able to work through the problems to get to the end result I wanted.
You learn so much more by doing. When you meet people who can see your errors right away it's because they encountered them and worked through it themselves.
Don't think, just do.
Day 11: Time flies when you are coding
Today was our first day of just pure coding, all day. Well besides 40 minutes to do a practice kata, that I didn't complete but was much closer than I thought. So because my game is just a quiz, which is fairly simple logic, I agreed to make the game visually more complex. This meant taking my prototype design and bringing it to life for all the different card varieties. Not only that….I wanted to make the game responsive. As of now the game is technically responsive but has some glitches and usability errors, but for one day's work I'm proud of it.
I realized that my game flow was missing a way to go back to the home, instructions or category screen. So I created a nice minimalist menu at the bottom to handle the controls. The day flew by because all I did was crank out all of my different layout designs to be used for the different trivia sets. While this was time consuming, mostly in the CSS (used Sass) configurations, it was still not too difficult to get done. I wasn't able to finish all the layouts in class, but I finished them at home. Also I am going to write out all of the quiz questions and answers for the different categories tonight, so that tomorrow I can start creating the quizzes. I have one quiz logic working, but without my style elements applied. So my hope is tomorrow that I can apply my card styles to the JS logic and be able to replicate it for the other 4 categories. Then after that it is adding the gameplay and scoring complexity.
Sometimes the things you think will take a long time, you can get done super-fast, and the it's the small things that wind up taking more time that you expected.
Time management is essential.
Day 10: Now I have to do this by myself?
Today we continued with the function logic of our game and kept organizing and extracting the functions to make it even more abstract. After all that, we then added the visual elements and manipulated the DOM to allow the game logic to interface with the visual components. This was a case of I get what you are doing, and I understand why you did it. But I would have never come up with all of that myself, at least not yet or that quickly.
So after we finished that and came back from lunch we were given time to start preparing our game which we have to present next Friday. And then the reality of having to actually create the game and the interface all by yourself set in. It's easy watching an experienced developer creating it and following along. But when you need to start from scratch yourself, you realize how difficult it actually is. I mocked up a functional prototype for my quiz using Adobe Xd to see how the flow of the game should look. Then I started breaking down the required functionality of the quiz into iterations. Starting with the base logic code and then what needs to be added after that to give the quiz more complexity. So I was able to get a relatively clear vision for my quiz by the end of the day. But now comes the hard part….actually making it.
The only way to become a better programmer is to accept that you might not know how to do everything but you need to be willing to break the problem into smaller steps and use what you do know how to do plus your resources to solve it.
You make it look so easy.
Day 9: Wait…slow down.
No matter how clean and perfect your code is, there is still something you can improve on.
My coding is like poetry...
Today started the even further descent into function inception. Learning that even though JS is a OOP language, the best practice it keep everything organized by functions and have your variables inside of their required scope. So functions are objects which means we are still doing OOP, it is a shift in thinking for me, to separate all the logic into functions and make everything have a purpose.
It is so easy to write verbose complex code that will only work in one specific use case, but that is not beneficial. Learning to separate logic into functions and being able to understand how certain types of functions and variables interface with each other is more important. At first it was meta, but it started to make sense. But as with everything with programming, everything makes more sense when you are watching someone else do it. But when you have to do the code from scratch you realize it is much more difficult to write nice clean code. The fact that we have to make a fully functioning game is already giving me anxiety because it will test our knowledge of functions and their true power.
So wait, it's a function inside a function inside a function?
I put the "fun" in function…
Day 7: Exhausted: Mentally and Physically.
I guess I should have taken the word bootcamp more literal because it definitely feels that way. I guess the problem is the stereotypical image of a developer is an out of shape antisocial person, so you do not see them as having stamina. But while developers come in all different varieties, the one thing all good developers have in common is stamina. Coding does not require a lot of physical exertion but rather an extreme amount of mental gymnastics and that is very very tiring, especially when you encounter difficult problems.
This program is constantly pushing me to keep going further with problems rather than just backing down and saving it for later. But the biggest issue has been coupling this constant mental exhaustion with the physical exhaustion of lack of sleep. After almost 12 hour days at Ironhack you get to go home and do even more hours of work, then rinse and repeat. So you have to be able to take in tons of information, process it, apply it and then repeat all with hopefully 5 hours of sleep.
Luckily today was jQuery which I was familiar and comfortable with and was able to complete the majority of the pair programming in a very short amount time, but when I had to alter the total price, my brain hit a block and I just couldn't look at the code objectively anymore. I just decided I needed to take a break and come back at it with fresh eyes. You can't be an expert at everything in web dev, but you can identify the areas where you are lacking and what skills you want that you don't have and dedicate more time to those versus just repeating the things you are already comfortable with, because they are easier and less stressful.
Comfort is the enemy to change, and I am accepting that, but I still crave for the comfort of a full night's sleep....hopefully in 8 weeks.
Are we the only place is Spain that doesn't take a siesta...
Day 6: Progress is Exponential
Today we started with debugging, and learning how to catch our errors in our IDE's, the console and using try catch statements. Then we learned about asynchronous functions and callbacks. So far so good, everything was pretty straightforward. Then for CSS, we discussed the basics of bootstrap, which again wasn't an issue because I had worked with Bootstrap before.
Then when it came to the pair programming, my brain was scrambled. Usually we would do a pair programming based off of what we learned that day, but today was a huge jump in skill. We had to put together a lot of things we learned about JS and then apply that to logic for a math game with specific rules, then use that to manipulate the DOM.
Just starting out on the basic logic for the game and generating the questions took a long time because we had to make sure everything worked. We were able to get questions generated, but they didn't meet the requirement of having the numbers be at least 3 apart. So we were just stumped and didn't even have enough time to start using the functions to manipulate the DOM.
Today was a very real example of why I joined the Bootcamp. I would read and apply all the basic aspects of JS and not really have a problem. But when it came time to solve a complex issue, it was difficult for me to break down the game logic into functioning code. So while today's exercise kicked my ass, it just proves that I need to keep practicing translated logic into functioning JS, because I will only get better if I practice.
It's only Monday...
Most of my issues were related to syntax and order. Trying to make sure you keep the methods outside of the constructor function, so that they can be inherited. While this made sense to me in theory, it took some getting used to in practice, and learning to encapsulate and reuse the code as much as possible. So inheritance is an extremely important part of OOP but it also can get convoluted quickly if you don't have your code structured properly. Then the DOM manipulation was pretty straight forward, but because I am used to using libraries or frameworks to manipulate the DOM, doing it in vanilla JS was actually much for difficult than I expected but good practice. I also learned another valuable lesson, that 90% of the time my code isn't running because of a spelling mistake.
Week 1 down, 8 more to go!
Day 4: Information Overload & Framework Frustration
It is not worth using a framework for the sake of using a framework or not taking advantage of its full capacity. Also in the real developer world you won't be able to choose the framework your team works in, so you need to be able to adapt your style of code and syntax to that of your company’s. And even though it can be really frustrating it feels so good when it works and you are able to write very clean and DRY code.
The power of tools is in solely in your ability to see and exploit their value, if not you will just create more work for yourself.
Four days down, and Friday can't come any faster.
Day 3: Skill Swap
Day 3 was a nice and light day because it was mostly an extension of existing principles, nothing new to me was introduced. Learning wise it wasn't a firehouse of information trying to enter my brain all at once. But today is when I learned that the skills I thought I knew and mastered, I apparently did not. And other skills I thought I was horrible at, apparently I am much better than I think.
When everything falls into place, it feels like a coding orgasm.
Over the hump, half way to the weekend.
Day 2: Do you see what I see?
Something so simple or small can have a huge impact.
Two days down, and it already feels like a week.
Day 1: Learning to Learn
Seeing as the program just started you would assume that this would be one of the easier days of the bootcamp. In the sense of content, day 1 wasn't too difficult. But it was still a long day and process which only goes to show that it is going to get much harder. I was skeptical about joining a bootcamp especially when I was able to learn so much on my own. But within a few hours is became apparent the huge benefit…..people. Being able to think aloud with others around makes everything better. Having people with all different background from all different countries all learning the same thing allows a bunch of people to see the same thing in a bunch of different ways.
So when something confuses me, the person next me might see it with extreme clarity and vice versa. Forcing yourself to explain your code and thought process makes learning so much easier. Having perspective was the one thing I didn’t have when self-teaching. I couldn’t explain the why I wrote a lot of my code the way I did, because I didn't have to, I just had to make it work. I easily would lose sight of the purpose because there weren't other people around me to question it.
Shortly after our first pair programming exercise I learned the value of this. Being able to bounce ideas off of one another and ask questions about why people do things a certain way helps you learn new things, but also learn about yourself and your thought process. Even though today was light on material learning, it was very heavy in one aspect: learning to learn. Programming is constantly changing, and you can't master everything. But you can teach yourself how to constantly keep learning and be resourceful.
Learning how to search for answers and play around with someone else's code to solve your issue, is the most important skill. And that is that part that takes a lot of energy. Allowing yourself to accept the fact that you might have no idea how to solve a problem, but then breaking it down into what you do know, and learning to ask the right questions and search for the right answers.
Something so simple or small can have a huge impact.
Two days down, and it already feels like a week.