Time for SmashingBoxes

Time for SmashingBoxes

An Intro:

For my first few months as a developer, I will be completing a training curriculum designed to help me conquer technical challenges and adjust to how the SB team operates. Each day, I'll be posting a quick summary of:

  • What did I learn yesterday?
  • What am I going to do today?
  • What do I expect to learn?

Thanks for reading!



What a whirlwind week! I started my pairing tour, which was incredibly fun and I learned a lot. After Derek (see below) came Jon with CSS, than Annie on Mongo, and yesterday I sat with Brian and looked at the WeaveUp code. We fixed a few bugs and he explained their complex image processing service to me. I kinda wish I had been hired to pair with these awesome smart people. 

But my own project starts on Monday! I'm hoping to kick off the week by sitting with Patrick and seeing what we can both get started on. I'm really excited to be working on something real. Sty tuned. 



Yesterday, I continued refactoring the views for CropSwap. There is a ton I can do - from moving to Slim to SimpleForm to using decorators. It's fun to see the before and after - and proof of how far I've come!

In the afternoon I paired with Derek - which was truly awesome. He was a great person with whom to kick off my pairing tour, as he is patient and incredibly smart and a great teacher. We worked on a few small features for his Harvard project and then added some json tests to his rspec shared examples gem. Really awesome learning, lots of take-aways.



Last week was a lot of miscellaneous project work - refactoring CropSwap, starting on the FarmersMarketPlacer app, and some learning about Javascript and popular API gems and tools. This week, I officially begin my pairing tour with the other developers at SmashingBoxes. 

I'm super excited to become more integrated into the SB team. I've started attending standups for my first client project, which kicks off officially a week from today. 



Yesterday, I continued to refactor CropSwap and had a hard time with the integration test suite. I got some features passing though, and took a break to start the Durham Farmer's Market tool. 

Basically - the idea is to create an app that will automate much of the decision-making around which farm goes where each week. And then create an interactive map for users of the Durham Farmer's Market so they can see which vendor is where and what they are selling that day. There are many possibilities for a product roadmap, but that is the MVP notion. I'm meeting with Jenny, the Durham Farmer's Market manager, soon to discuss the details. 

So far, I have farms that can be viewed and edited with profile pictures. And users that have to log in to view the farms. Today, I'm going to layer on active admin and create an admin interface for assigning market locations. 



Yesterday, I spent the day doing Javascript courses on Treehouse and starting to refactor my demo from code school: CropSwap. It's incredible how much I already feel I've learned! I moved over from the Rails built-in authentication to devise, from MiniTest to Rspec, and added an integration test suite. There is still lots to do - I'm going to continue on that today. 

I met with Brandon after his day of agile training and learned that I'm getting my first client project in two weeks - super excited! In the meantime, I will continue to learn Javascript, refactor CropSwap, and get started on a new project idea - a planning tool for the Durham Farmer's Market. More to come on that as I get cracking...



Yesterday, exactly 5 weeks since my first day at Smashing Boxes, I finished the onboarding curriculum! This experience culminated in my bookstore, live and on a production server. SmashingBoxes has this awesome gem, Taperole, to help deploy a Rails app (using postgresql, ubuntu and unicorn) and that made it pretty easy. The bookstore app even sends emails and allows users to buy items using Stripe! I'm pretty proud of my work and it feels gratifying to have something real(ish) out there. 

Next up - since there is not yet any client work for me, I am going to start working on a personal project. I have some ideas to run by Brandon today and then I'll get started. In the meantime, Treehouse tutorials...



A snowy and quiet Monday in the office! On Friday, I managed to finally deploy my bookstore to production, although I ran into plentiful issues along the way. Some were issues with the Tape gem - others were issues with my configs. And now that my bookstore is up at the provisioned IP, I am seeing errors when I try to sign up. So today, I plan to dig into the logs to figure out what's wrong. I'll also continue on my bowling kata. 



Friday again. The weeks really fly by here, and every week I feel a bit more confident and comfortable. I'm eager to get started on client work, but for now, I'm wrapping up the final pieces of the onboarding curriculum. 

Yesterday, I migrated from sqlite3 to postgresql, and this broke a bunch of my cucumber tests that were relying on finding specific objects by id. Good lesson in how to keep tests abstract and flexible. I fixed my test suite and pushed up a pull request. Next, I moved on to Tape and deploying to a production server. 

This proved to be more difficult that I anticipated - the Tape gem has some specifications that were causing my deploy to fail. Brandon fixed it by removing Mosh as a necessity - but now my deploy is failing due to a missing nodejs version. I added it specifically to my files, but that didn't help. Hoping to make more progress today. 



Yesterday, I finished the admin ability to discount a book by either dollar amount or percentage. I also added some custom views to the admin interface, and created a dashboard. At the end of the day, I realized I'm still using sqlite3 instead of postgresql, which is going to be a problem for Taperole and deploying to a production server. So this morning I'm going to deal with that, and then get started on deployment!



Yesterday, I finished the sort-by-popular feature of my bookstore. I wrangled with the integration test suite a bit - it's tricky to shift your mainframe from "prove this happens, i.e. in the database" to "prove that a user experiences this happening". The cucumber/capybara suite has definitely been the most time-consuming element of this onboarding curriculum, but it seems SO useful and worth it once the tests are strong and in place. 

Today, I will continue on the discount feature of my bookstore. Hoping to wrap up by the end of the day so I can start focusing on the production server!



Spoke to Brandon yesterday - no client work just yet so he added some requirements to the bookstore. Firstly, I have to build the ability for an admin to add a discount price on a book. When the user purchases the book, s/he should be able to see both the original price and the discount price. The original price of the book should not change. Then, I will get my bookstore up on a production server using Tape. Hoping to finish up these new requirements by the end of the week - then start my pairing tour with other members of the SmashingBoxes dev team. 

Today, I'm hoping to wrap up sorting by popular and get started on the admin discount interface. 



Monday of my fifth week! I'm pretty close to done with my bookstore - users can now complete an order with or without a saved credit card, and see a confirmation step before a charge is created. I have a few small things to wrap up, namely: showing dollars instead of cents, creating the most popular sort and passing that integration test. 

I'm meeting with Brandon later this morning so I should have a better idea of what's next after that! 



Yesterday I refactored my bookstore to have line_items that belong to a cart when they are created, and are then assigned to an order and disassociated from the cart when an order is created. This feels like a much cleaner object oriented database structure, and I can now move more confidently into my Stripe integration. 

I started yesterday, but am having some problems getting the JS from Stripe to activate. Going to troubleshoot that this morning and then move no to processing the card, and saving the token in the database. 



I paired with Brandon yesterday after about 5 days on my own and he pointed out two refactors:

  1. My database structure is not what he would expect from an e-commerce site. Rather than using pending_purchases as my only table, I’m going to split it into line_items, a cart, and orders. 
  2. I used Stripe checkout and he wants me to write my own forms. 

So today is a lot of refactor work, hoping to get back on track for pairing tomorrow!



Yesterday, I fixed the bug in which charge records weren’t getting created. This is the most frustrating bug I’ve encountered so far - I traced through the logic flow so many times and for all intents and purposes, it should have worked. I’ve since looked through my commits to figure out what I changed that fixed it - I think it’s because I removed the “new” template which was confusing my form. Still have investigating to do there, though. I also fixed the inconsistent presentation of prices, and am now only showing purchases that are still pending. 

Today, I hope to finish my integration test suite for purchasing. This is trickier than the other tests because I have to create Stripe objects and perform actions within the Stripe purchasing iframe. Once that is done, I have to add a step for reviewing a customer’s order before purchase. Then, the only features left are sorting by popularity and creating an admin view of purchases.



It’s February - and my fourth week as a developer at Smashing Boxes!

On Friday, I started on my Stripe integration for my bookstore app. I added my keys to the secrets.yml file and then got stuck trying to remove that file from my pull request. Hoping to get that fixed today - I might need to enlist the help of another backend dev here. I have some bugs in my Stripe functionality: the form is not hitting my create action, the price is appearing inconsistently in cents or in dollars, there is not yet a step for reviewing the order total. So today will be ironing out the kinks mostly. 

Once that is done, I have a few last features to add, namely: the ability to sort my most popular and an admin view of purchases.



I love being a developer so far. The days fly by, and oftentimes I just want to go home and keep coding. I think it's the addiction to the feeling when something clicks into place and just works. Of course, other times, the frustration looms and you just need to take a walk away from your computer, but still - there's the potential for that high moment. And my brain feels exercised, like I'll never go senile if I keep up this level of mental engagement. 

Anyway, just wanted to share that, in case you're wondering how this is going on more of an emotional level. :)

As for coding, yesterday I passed my integration tests for administration and got some really helpful tips from both Derek and David (I love pull requests!). I merged that branch and turned back to books. I used the ransack gem to implement both search and sort and wrote integration tests to cover that functionality. (I still have to add the ability to sort by most popular, but for that I first need to create the ability to purchase a book.) I submitted my books branch and moved on to the cart - with a pending purchases table and the ability to add to and remove from the cart. Also to edit the quantity once inside the cart, all accompanied by integration tests. 

I have one small bug left in my cart branch that I will fix today - and then I'm moving on to Stripe!



Can't believe it's already Thursday! I've had a cold for the past few days so my fuzzy brain hasn't been working as quickly. But nevertheless, I've made some progress on my bookstore. Turns out that devise configures those mailers automatically, so all I had to do was add my MailGun credentials and bam. I wrote integration tests for account creation and authentication, and then moved on to admin users. I have one remaining test to pass - getting a date picker selected in the admin panel, so I hope to get that one over the line today and submit this pull request. 

Next up, I'm going to tackle Stripe. I need my users to have the ability to add books to a cart, manipulate the quantity of each book they want to buy, and purchase them with a credit card. I'm really excited to learn how to do this.

Also, yesterday I had an awesome review with Brandon and it looks like I will be getting an actual client project in the next two weeks. I can't wait to get started for real!



I didn't win the chili cookoff. Just getting that off my chest. 

Yesterday, I finished my rails refactor and my ToDo API project, including using SmarfDoc to document my endpoints. Then, I got started on the bookstore app. Right now, books exist and users can sign up or login. Today, I am working on configuring some mailers to communicate with users when they sign up. Then, I will move on to the admin user type.



Happy Chili cookoff day! I landed from a wedding weekend in Mexico late last night and still got up early to make some Moroccan Chicken Chili - can't miss a cooking event. 

On Thursday before I left for the long weekend, I created a dashboard to reference in my items and categories controllers so that I wouldn't have more than one variable per controller action. I'm having some trouble getting the forms to use the dashboard object, and I'm hoping to get to the bottom of that today. 

Over the weekend, I got started on the API project, creating endpoints for the requests coming from the ember app. I have some tests to write today, it should be pretty straightforward.



Yesterday - done with Twitter clone! Got my "Hello World" file working with nginx and learned a ton about how to provision servers and navigate through files inside the Terminal. It was a good and productive morning. 

In the afternoon, I got started on the next project - a refactor of a Rails inventory management app that had some significant problems: namely fat controllers, logic within views, and untested model methods. I started by getting my controllers and routes to a RESTful state, then moved on to the views.

This is proving to be a bit trickier: even though I was able to get all explicitly stated logic out of the views and into models, the issue is that the view is concerned with multiple things: items, categories, creating both and displaying all. Brandon and Joe explained that this kind of complicated view can make it difficult to follow the "rules" - and a good option here is to use a presenter. For example, I could create an entirely new class that serves as a dashboard referenced inside the controller of the object being displayed. I'm going to work on this more today. 

Also, I installed hound, a service that auto-comments on my code if I have any stylistic flaws like an empty line or an extra space etc. Hound is loud, but I'm excited to use it to get better habits. 

Today: finishing up my Rails refactor and next up is an API!



Happy Wednesday! Yesterday, I reviewed my Twitter clone with Brandon and we decided on two final components: 1) a feed method to order the tweets of followed users correctly. We discussed why using a SQL query here was more efficient than Ruby, and I spend some time reading documentation about join tables. But in the end, I found an easier SQL query to get the job done and submitted that PR. 2) more integration tests - I added some for creating tweets, following and unfollowing, favoriting and unfavoriting. I'm not certain that I'm using FactoryGirl correctly - putting my creates in the write places in my code - so I'm looking forward to that PR getting reviewed. Otherwise, done with Twitter clone!

Also yesterday, Brandon provisioned me a virtual server from DigitalOcean, and I installed NGINX on my computer. My next assignment is to serve up a static HTML page when someone puts the IP of the server into their browser. So that's what I'll be working on today! 



Good morning! I gotta say, it is COLD today. I mean, ok, it's colder in Brooklyn, but really at this level of freezing can you even feel the difference? I feel totally betrayed, North Carolina.

Anyway... yesterday, I finished the core requirements of my Twitter clone. Users can now follow and unfollow each other, and can favorite and unfavorite each other's Tweets. I'm finding the pull request system to be extremely helpful - yesterday, Derek came by and taught me how to include a let statement in my rspec unit tests, so I was able to refactor a bit and delete some lines of code. I'm still trying to figure out how much to bug people who review my code, but everyone has been great about being available to answer questions and thoughtful about their comments. Wonderful system!

Today, I'm hoping to answer a few residual questions about my Twitter clone, namely: How do I include my follow/unfollow actions inside my feed? Do I need to use a form with a hidden field or is there a way to pass a link with that field? Do I have too much logic in my views? Should I have any additional tests? 

I'm reviewing with Brandon (my awesome mentor) this morning so then I'll know if I'm continuing to build out my Twitter clone, or moving on to the next assignment. :)



Today is MLK Day - and even though we are at work, let's all take a moment to remember.

Ok, back to coding. On Friday, I made a lot of progress on my integration tests: other than the view avatar line of view profile, all tests are now passing. On follows, users can now view the number of followers and following on each profile, and the Tweet feed is now only users you follow. I have a few questions about routing structure and tests, but today I plan to create the button that allows a user to follow/unfollow another. Then, on to favoriting! 



Today is Friday - the last day of my first week at SmashingBoxes! It truly flew by - I've learned so much already from the curriculum and only hear great things about what to expect from my new teammates. Feeling very positive and excited.

Yesterday, I finished my very first integration tests using Cucumber and Capybara, which I already love. My awesome mentor Brandon helped me correctly use FactoryGirl and get the first test passing, and I was able to take it from there. Then - finally - I submitted a pull request (my very first at SB!) for my devise branch and it got merged in. But then I had to merge master into every subsequent branch which was getting a little messy. So I moved on to other work for the day while my branches got code reviewed and merged it. Good lesson to learn that from now on I will try to create branches only off of Master and not off of each other!

Today - time for the follow/unfollow work. 



Yesterday I made a lot of progress on my Twitter clone app. Now users can Tweet and view their own and others' Tweets on user profiles. I also added Rspec controller tests but ran into some issues with authentication that I'm planning to fix today. On the integration test front, I added capybara, cucumber, and FactoryGirl and wrote tests for sign in, sign out, and sign up. Sign up is passing but the other two are failing - I know this is because I am not yet correctly using FactoryGirl as a replacement for fixtures so I'm planning to fix that today as well. 

In addition, today I will add the ability to follow/unfollow other users in my Twitter clone app, and change the feed of Tweets for each user to be only the tweets of users they follow. After that, favoriting a tweet is next!



Yesterday, I got started on my Twitter clone. I made an early mistake of starting with Devise, which proved difficult when I realized I had no root route to set. I tried to create a ghost controller with nothing to render, but then my site kept redirecting back to the homepage. So I scrapped that and created a users table first - then it was much easier to layer on Devise. I also implemented the CarrierWave gem for the first time, giving my users avatars. Lastly, I wrote my first Rspec tests while implementing the code changer Kata, and added rspec-rails to my Twitter project. 

Today my focus is to finish the behavior of my Tweets - creating them, assigning a user ID upon creation, displaying only mine on my profile, including the Rspec tests to cover this functionality. Also, I'm going to read up on Cucumber and Capybara and start writing integration tests for my Devise branch. 

Looking forward to learning A LOT!



On my first day at SmashingBoxes (yesterday), I learned all about the company culture, many names of friendly faces, the details of my curriculum for the next couple of weeks, and how quickly Brandon can set up a dev environment (thanks!).

Today, I begin my first project, a simple clone of Twitter. I will be using a few gems I've never used before: Devise for authentication and Rspec for testing. I'm also excited to get in the SmashingBoxes pull request and code review flow, creating a separate branch for every user story. 



Today is my first day at SmashingBoxes as a software developer!

A large part of why I wanted to land at this agency is how thoughtfully they onboard, especially when it comes to junior devs. Having been on the other side of building products, I know how easy it is to do this poorly. I remember the days of, "Oh shit, you're here? Is it your first day? Ok, hold on.." Not here. Today was filled with friendly faces, helpful explanations, and very clear first assignments.

For my first few months as a developer, I will be completing a training curriculum designed to help me conquer technical challenges and adjust to how the SB team operates. Each day, I'll be posting a quick summary of:

  • What did I learn yesterday?
  • What am I going to do today?
  • What do I expect to learn?

Thanks for reading!





4 Ways to Make Sure That Coding Bootcamp Will Lead You to Your Dream Job

4 Ways to Make Sure That Coding Bootcamp Will Lead You to Your Dream Job

I'm A Developer!

I'm A Developer!