SB Apprenticeship: Day 54

Now you can check out!

Now you can check out! (Ignore the styling)

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

I have a checkout page now! I followed the tutorial in the Agile Web Development book, so now there’s a purchase button, a separate page to enter purchasing details, and it sends you an email both when you place an order and when it ships. Well, I think it sends an email, I haven’t actually figured out how to test that yet, but the book seemed confident that it would work.

It just occurred to me that one of my “if I win the lottery and don’t ever have to think about money again” daydreams has always been to own a bookstore, and I’ve always wanted to name it “Speak Friend And Enter,” because I’m a gigantic Tolkien nerd, and I’m missing my chance! Why am I naming my bookstore “Jessa’s Bookstore”?! That’s so boring! So anyway, I think I’m going to change that and look forward to the look on Brandon’s face when he sees it. Hee hee.

Today is Stripe day! Much like Rex Manning Day, I’ve been looking forward to this since I started this project. I can’t exactly explain why this has been the detail that I’ve been focusing on, maybe because it actually feels real? I use Stripe, I used it last night to pay for my hot chocolate at Cocoa Cinnamon, and even though this is a fictional bookstore, the ability to add Stripe and make if functional is a precursor to working on real projects at Smashing Boxes. Also, it’s the last major feature to add! So that’s pretty exciting.

I expect to learn that Stripe is incredibly complicated to implement, despite its clear documentation, because that’s just how my life works.

SB Apprenticeship: Day 53

Lookit my index page!

Lookit my index page!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

I ended up getting more done Friday morning than I expected! Now my book index page has a logout link, and all the book titles are links. I added more Faker data (this is rapidly becoming my favorite gem), so when you click on the link, it goes to a book show page that includes a description.

Lorem ipsum is a description, right?

Lorem ipsum is a description, right?

Maybe someday I’ll be less impressed by accomplishing things like this, but for right now I was pretty darn thrilled. Brandon tells me all the time that I need to try random things more often, things that I’m not sure are going to work, which is not a thing I’m particularly good at. He was in a meeting Friday morning, though, and no one was around to answer my question, so I decided to just go for it with the line to make all the book titles links, and it worked! So, you know, positive reinforcement is a thing. 🙂

This week’s ToDo list:

  • Learn hashes (Brandon brought me a copy of Eloquent Ruby to read through)
  • Add a ‘Purchase’ button
  • Add Stripe (making sure that I know about PCI compliance and how it works)
  • Cucumber tests
  • Add the Carrierwave gem? Brandon said it would be super impressive if I could get it working.

I’m pretty excited that the end of the bookstore seems to be in sight. I think I’ve been annoying Brandon by frequently talking about how much I want them to hire me, so I’m going to try to be a little less vocal about it. I think at this point everyone knows I want to work here. Jinxing myself by annoying my mentor would just be tragic.

I had this grand plan of working on all the various courses about hashes this weekend, but then my boyfriend got a nasty bite from our cat, so instead it was taken up with Urgent Care, gauze and alarms to make sure he took his antibiotics. I think I may work on the purchase button and then read Eloquent Ruby in the afternoon. I really need to make sure I have a firm grasp on these basics. Also, I’m way behind in the reading I’ve been supposed to do for this apprenticeship, so I should maybe focus more on that.

SB Apprenticeship: Day 52

It’s Smashing Boxes’ 5th birthday! We’re having a field day this afternoon! I’m mostly hoping there will be cake. 🙂

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I got a lot done: I finally got the cart to show up on the homepage and populate with the number of items that were in it, Brandon and I fixed a wonky thing that was allowing me to save negative books as long as I had copies of that book already in my cart, I figured out how to make case insensitive search work (add a freaking I in front of LIKE in postgreSQL, sigh) and we determined that the acceptance criteria for the bookstore doesn’t currently require me to be able to increment books in the cart, so I’m just not going to do that. Apparently after I finish Brandon’s going to challenge me to add one more feature, which might be the incrementing thing, but I’m going to worry about that when it happens.

We also determined that I have somehow not managed to retain any of the things I learned about hashes. I know the basics about them, but when it comes time to manipulate them I just never can remember how. Brandon is going to loan me his copy of Eloquent Ruby and wants me to read at least the first half. He mentioned that my pairing tour is at least partly a judgement of my skills; the pairings with iOS, Front End and Android people won’t be, obviously, but when I pair with Brandon, Patrick, Joe or the other back end folks, they’ll be watching and have the ability to give me a thumbs down when it comes time to decide whether or not they’re going to hire me. Treehouse has a course on hashes that I’m going to work on this weekend too, I think. This is really basic stuff that I need to understand. I got Kevin to explain it to me yesterday, and it made sense, so either there’s some sort of disconnect between having it explained and actually doing it, or the third time’s the charm and it finally just actually clicked.

So, realistically speaking, I’m not going to get a lot done today: we have our backend standup at 9:30, the company-wide standup at noon and then field day, but I’m going to add the list of things I need to do in order to have it in one place that isn’t a raggedy index card.

  • Learn hashes
  • Add a page to show book details
  • Cucumber tests
  • Add logout
  • Remove the number box for quantity
  • Add the Carrierwave gem? Brandon said it would be super impressive if I could get it working.
  • Make sure and learn about PCI compliance when I add Stripe to my bookstore. Apparently the documentation is so good that it’s easy to just install it with no actual understanding of what’s happening. I guess good documentation is a double-edged sword.

Today I expect to remember how to add a logout button and change a number field to a text so I don’t have to worry about the incrementing stuff yet. I feel like those are two things I can definitely get done this morning.

SP Apprenticeship: Day 51

This is what my cart looks like now!

This is what my cart looks like now!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

It was a challenge to get back in the flow of things yesterday after two days at a conference! I did finally manage to get my params in place so that I can change the total on a book when I add it to my cart. I still can’t edit the cart once I get it in there, but Brandon told me that would be more challenging than I thought, and he was right. I also did some styling so now it’s much clearer to read. I had a complete brain fart when it came to naming my headers and I couldn’t find a website that broke it down like that. ‘Cumulative price’ is terrible, I know, but it’s all I could think of. Anyone have any other suggestions? Maybe ‘line item total’? Meh. All my programmer friends have told me at one point or another that naming things is the most difficult part of programming, and it’s really true. Naming models and methods so that it’s clear and makes sense later when you’re refactoring or fixing something — it’s hard!

Today I am meeting a student in the current cohort of TIY for coffee; she wants to talk about my experience since I finished. I find it kind of interesting that Mason keeps sending these people to me, I certainly don’t mind, but I haven’t really hidden my complaints about the way TIY does things. I figured that I would be the last person that anyone sent students to. Although now that I think about it, I haven’t been asked to talk to any prospective students. Heh. Anyway, that’s at noon, then at 1 we’re having a retrospective about All Things Open, and then after that I’m pairing with Brandon. I have three things I want to get done this week:

  • Add a link to my cart in the corner of the homepage so you can access it without adding more books
  • Get the quantity incrementing to work and save
  • Complete at least one feature file in my cucumber tests

I’m going to ask Brandon to help with the incrementing, it really is proving super challenging. Once I get this cart stuff done, I think next week I can focus on adding Stripe and making it work, which will hopefully be easier than it was for David, since the first thing Brandon did was get rid of Turbolinks, and then I’ll be done and ready to start my pairing tour!

I expect to learn that the incrementing problem is probably going to be only a few steps, but they’re going to be non-intuitive. I’m not even entirely sure where to start with the cart, there are like four problems I have to solve there: getting it to show on the home page, positioning it where I want it, getting it to show the current number of items, and getting it to update when I add or remove something new. Should be interesting!

SB Apprenticeship: Day 50

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

So, as you might have guessed by the picture, I spent the last two days at the All Things Open conference in Raleigh. Most of the office ended up going and we sponsored a Front End track, so we were really visible and it was a lot of fun. It’s always a tough choice at conferences — do you go to the talks that sound super interesting, or do you focus on the ones that are actually relevant to your job? I tried to strike a balance, so I went to a talk on Computational Linguistics and natural language learning, and then I went to a talk on using Ember. Most of the talks were really good, but I think this conference has a wee problem with the descriptions of the talks not actually matching the content. There were also several that ended up just being advertisements for the company of the person speaking. Also, in the vein of my general t-shirt disgruntlement, the conference not only didn’t offer any women’s t-shirts, they didn’t even have any small men’s shirts on offer. I spoke to the organizer after the final keynote and emailed him the awesome Geek Feminism wiki article about t-shirts, so hopefully next year I’ll actually be able to show off that I attended.

Today it’s back to the Bookstore grind. I caught a cold from my boyfriend last week and ended up going home early on Friday and living on the couch all weekend, which means that I have, sadly, broken my streak of Github commits. 😦 I’m feeling much better now, though I’ve entered the non-stop coughing phase, so I sound way worse. Anyway, today I want to focus on the quantity field of my form and figure out why it’s not saving when I change the quantity and how to make it update price and total after I do.

SB Apprenticeship: Day 49

Shopping cart: new and improved!

Shopping cart: new and improved!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday was a good day! I got everything on my list done except for working on the feature tests, and I did the majority of it by myself! So now my cart shows multiples of a book on the same line, with a unit and total price and it sums all the books in the cart. You can delete the cart, and go into edit and delete a single item.

Editing the cart

Editing the cart

I got all of this done mostly by following the Agile book, which according to Brandon did some weird things, but mostly got the job done. It was weird, I had it working except the editing part, then Patrick was trying to help me with that part and something broke that screwed up the entire thing. I kept getting a undefined local variable or method `params' error, which was really frustrating and led to me literally pointing at the screen and going “THERE THEY ARE!!!” which of course didn’t work. Brandon and I paired in the afternoon and it took him some time to figure out what was going on, which made me feel better. I’m not sure if it’s a function of being a programmer, or just another sign of how cool this office is, but to my infinite amusement no one even looked twice at me yelling at my screen.

Today I’m going to make the Quantity box work. I want it to populate automatically with the quantity of a book that is in the cart (so, like, if there are two of the same book, I want it to say 2), and I want to be able to change it and have it save. I’m also going to add a link to the cart in the corner of the homepage so you can see what’s going on. If I manage to get all that done then I’ll start working on the feature suite.

Brandon said the incrementing of quantity is going to be harder than I think, so I expect to learn what that whole process is. I guess I won’t finish the bookstore this week, which is kind of a bummer, but next week is a definite go. I have a conference that I’m attending on Monday and Tuesday, but the next three days will be productive and awesome.

SB Apprenticeship: Day 48

I got the shopping cart working!

I got the shopping cart working!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Well, after a lot of bashing my head against it, I got the shopping cart to work! And it persists! And I can change the quantity of the books I’m adding! It doesn’t sum up my order, but by the time I got the cart working I was super done for the day. I don’t know why it says “Line item was successfully created” twice up there, I think I have too many notices going on, but when I was trying to get it working last night I would either have two or none. I think maybe the Bootstrap stuff we did is having some effect on it, since the top one is in a blue box. One of the things that I found really frustrating when I was working on this is that there doesn’t seem to exist a simple bulleted list of how to make a shopping cart in Rails. There are lots of tutorials, but they’re generally part of a pre-existing project where the author has had you make models and controllers with an eye to the eventual goal of adding features like a shopping cart. I’m pairing with Brandon today, and I think I might get him to go though it with me so I can feel less frustrated next time. Sadly for me, shopping carts are on the web to stay, so I should figure out a better way of doing them than the hodgepodge of tutorials and suggestions from other people that I currently have.

Today I actually made a list of things I want to accomplish.

  • Make my cart sum my order
  • Add a link to “Jessa’s Bookstore” to make it go back to the index when you click it
  • Figure out why the alert is showing twice
  • Add ability to delete a book from the cart
  • Work on the feature tests for the shopping cart

One of these is easy, and I shall do that first. 🙂

Hopefully I will end the day with a list of how to make a shopping cart (I wonder if that would be worth a blog post? Maybe I should suggest it to Ellen.), as well as a completely working shopping cart. Provided that happens, I think I can work on Stripe tomorrow!

SB Apprenticeship: Day 47

Shopping cart

Shopping cart

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

I got ahead of myself in yesterday’s post: before I start worrying about Stripe, I get to implement a shopping cart! I’ve only actually done this once, when I worked through the Agile Web Development book, so it’s proving a challenge. I was trying to work through the book and just kind of take what it said and apply it to my code, but the models and stuff are completely different, and I’m having a hard time figuring out where to put stuff, and what in the code that the book has I actually need vs the stuff they’ve done in order to have their idea of an impressive app. For instance, do I need to make mine all Ajax-y? I would love to impress Brandon, but mostly I just want to get this done. Ah well.

Today I’m going to continue working on the shopping cart! I’ve been trying to ask fewer questions; Brandon and Joe pulled me into Brian’s office Monday to tell me they were a bit concerned about how I seem to give up easily when I run into a problem. It’s interesting, I know so many devs who seem to take a perverse pride in spending days beating their head against a problem. I can see how I could spend more time beating my head against a problem — if nothing else, the sense of triumph if I solve it is tremendously empowering — but generally speaking I feel like I shouldn’t waste time on something that a colleague could answer in five minutes. I was telling them that part of my problem is that I haven’t quite figured out what I should be asking about and what I should be being frustrated about for a while. I’ll come up against a problem that looks really hard so I’ll ask about it, but then it turns out to actually be something simple. Then when the next problem comes along, I don’t super trust my instinct on these things, so I’ll be like, ‘oh, that last thing I thought was hard turned out to be easy, so I bet this one is easy too.’ I’ll spend two hours trying to solve that one, only to have the person I eventually ask for help be like, ‘Whoa, that’s a tough one.’ If you believe that willpower is a finite resource, I think I use all mine up early on problems that shouldn’t be as taxing as they are. Ah well. I do trust that when I’ve exhausted my knowledge and Google, I can ask questions, I think their point was simply that I should do those other things first.

Anyway. Yesterday I got the ‘add to cart’ button to show up on my page, but it was at the top, not on each book, and now it’s randomly gone. So that’s going to be the first thing I focus on today.

SB Apprenticeship: Day 46

Stripe! Dun dun dunnnnnnnn

Stripe! Dun dun dunnnnnnnn

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

Yesterday I made my goal! I finished the book index page feature! I had a really hard time getting the search to work, there were like 20 different steps and the answer I found on SackOverflow turned out to be wrong, so I went down a rabbit hole for a bit. But I got it working, with the help of a couple people around the office. It’s always something stupid, like the case doesn’t match, or I didn’t add the click action to the test. Sigh.

Today I’m going to start working on the purchase feature. It turns out I’m not actually behind on the bookstore app; I thought I had three more features to complete, but one is a general test suite that I added myself to have it log in outside the structured tests, and another was added by the Devise gem or something, and is just a completed test suite. So all I have left to do is the purchase feature! I guess now I’m learning Stripe. Woo! Poor David had a hard time implementing Stripe, but I have the advantage of going second, so I have little tips that should hopefully make it a lot easier. Like getting rid of our old friend Turbolinks. Heh. Apparently the Stripe documentation is really good, so I’m hopeful that this will go smoothly.

I expect to learn how Stripe works! We did a little with APIs in code school, and I had the ToDo API here, but I think this is the first real API that I’ve added to a project, so I’m a little nervous.

SB Apprenticeship: Day 45

Now it's prettier! And paginated!

Now it’s prettier! And paginated!

  • What did you learn yesterday?
  • What are you going to do today?
  • What do you expect to learn?

David’s begun his pairing tour! He’s leaving meeeeeeeeeee! Heh. No, seriously, he finished the bookstore app and is now embarking on a tour to pair with a bunch of people around the office. I’m a bit behind on my bookstore app; which makes me a little sad. We’d been pretty much neck and neck for the first part of the apprenticeship. I’m very curious what a pairing tour entails, though, so I can get the scoop before I start mine. Good luck, David!

Friday Brandon and I paired and worked on some styling for my bookstore. I learned about Bootstrap, a front-end framework that makes styling a whole bunch easier. We didn’t learn it at TIY because Mason said that has been overused in recent years and you can super tell when something has been Bootstrapped, but for these purposes, Brandon said it was fine. No one besides him is going to even see the bookstore app.

Today I am going to hopefully finish the book index page feature and move on to setting up email. I’m going to the gym at noon and have a blog meeting at 2:30, though, so hopefully that doesn’t throw me off track. This is a relatively short feature, so here’s hoping it goes quickly!

I expect to learn how to get the pagination gem working! I thought it was, but that test is listed as pending, so I guess it didn’t? Sigh.