Month: July 2016

I missed another week, but it’s 19 weeks in and the blog is pretty up to date, so I’m not sweating it. Still pushing along at a steady pace, with two projects in the works simultaneously. Talk about time management… Not only am I trying to make noticeable progress between mentor meetings (twice a week now), but I’m also trying to make headway with the non-school project that I’ve been invited into.

Besides not having enough time in the day, things are going pretty well. The Blocipedia project is complete! It was by no means a cakewalk, but I felt pretty good about the code I was producing. The one major hangup I encountered was with a collaborator model. Even as I write this I’m still not sure why I wasn’t able to wrap my head around it on my own. There was just something about a model that existed for the sole purpose of connecting other models that just threw me. I will say that I was definitely over complicating the process, and my mentor did a great job of correcting that with me.

But it’s done! Which means that my two curriculum-required projects have been completed! And, with ~10 weeks left in this part of the program, I’ve still got some time to dig even deeper. Let me say that when I refer to my projects as ‘completed’ I mean that all the data and views function properly. As far as the front-end design goes, its, um… rough. But, my focus is the backend at this point, and I do have time to show the front end some love, when the timing is appropriate. Also, as of last weekend, both projects are up on Heroku, functioning live, with legitimate user-emailing functionality.

I wasn’t necessarily looking forward to the Heroku push or the email changeover, but it actually went pretty smooth. I used Sendgridto handle the emailing. After some trial and error (which is a pretty tedious process when working locally, committing, merging, and pushing master to Heroku) I found that setting up a Sendgrid Add-onwas the most efficient way to go. I used thisSendgrid article to help with the process. I also used this blog post to help fill in the gaps a bit. The one caveat is that the ‘sent from’ email is a random string, so it doesn’t look super professional if trying to show off a functioning site. I’m confident I could change that when I find the time to do so (it’s pretty low on the list at the moment).

So that was school, now the other half of my workload, the collab project. To be honest I find myself thinking about this project most of the time. I don’t know if its because I’m basically done with the school work and the fine tuning minutia of it doesn’t seem as appealing as a whole new project, or if I’m just more excited to work on a team project. I will say that creating code that I know someone is going to go over with a fine tooth comb makes me code better. I’m sure I’ve mentioned this before, but it’s also forcing me to not only write tests, but write solid tests. Some of the spec code is borrowed from the coursework Blocitoff project, but tests are tests, and I don’t see any reason to try and reinvent the wheel.

I’m learning a lot about the industry standards for programmers. I’m almost certain that there is not one ‘holy grail’ of programming standards. It makes sense that there are slight differences in practices based on regions or other factors. I’ve already come across a few things with this collab project in terms of standards that are different than what I’ve learned with Bloc. That’s not to say that one is right and the other wrong, but I appreciate that I’m now aware of both ways and because of that I am a better programmer overall.

Things are really picking up! Not only am I on the cusp of finishing my second Bloc project, I have officially started a collaborative project with my friend (and unofficial mentor) Corey. Its not that I didn’t think school was enough of a challenge, but Corey approached me with an idea and offered to use it as a learning experience for me, which is something I couldn’t turn down. I’m always actively seeking out opportunities to work with other people in any way. Its a point that I keep coming back to, and its not something unique to Bloc, but I think an inherent dilemma with online schooling in that there isn’t a whole lot of collaboration outside of you and your mentor. Don’t get me wrong, working with my mentor has been an awesome experience, but theres also something to be said about collaborating with your peers on a project.

I’ve only been working on this project with Corey for a week and theres so many valuable nuggets that I’ve picked up. On the workflow end, I had never dealt with working on someone else’s Github repo. Theres a bit of pressure when setting up your local repo to communicate properly with another persons Gitub repo, the entire time I felt like I was one wrong keystroke from wiping it all off the map. After I got that all setup correctly Corey set me up with parameters for commit messages. Im a stickler for detail and continuity, so the idea of having a template for commit messages was something I was fully onboard with. It creates uniformity across commits, allowing anyone who looks at the commit history to easily see what was changed or added. Changing the default commit message template is relatively easy, and this article helped me a lot.

Arguably the most valuable aspect of this collaborative project (I keep calling it collaborative, but in actuality almost all projects involve more than one person, so I should probably just be calling this a ‘project’) is that I will have my code reviewed by another experienced programmer. Once again, I have nothing but great things to say about my mentor, but with just about any learning process its not a bad idea to get the views and opinions of more than one professional. I am definitely paying closer attention to the details of my code, making sure its as close to perfect as I can write. And testing, oh man, the testing. One goal of my current Bloc project was to keep my testing current with my code, and I admittedly fell behind pretty quickly. With this project I am being forced to write tests before my pull requests will be merged, so I have no choice but to write TDD code by the books.Less than a week in Im already feeling a bit more pressured now that I have two irons in the fire, but I’m ok with that, its a good pressure, and to me it means I’m heading in the right direction. During my mentor meeting we decided to move me from the 72 week timeline to the 36 week to finish out the Ruby course more quickly. This means that I will finish this half of the schooling almost two months earlier, and in the meantime will have two mentor meetings per week instead of the one. I wasn’t as concerned with moving up the finish date, As I knew I was on track to finish early regardless. But I was finding myself getting hung up a few days after my mentor meeting and then basically grinding my wheels for three to four days until I could speak to him again. My school work schedule didn’t help this scenario, in that most of my work has been getting done between Friday PM and Monday AM, and (rightfully so) my mentor tends to take the weekends off. But now I have two opportunities to speak to him, so hopefully my multi-day grinding sessions have come to an end.

Well, if anyone besides me is actually looking at the numbers, I haven’t had a 15+ hour week in at least a month. The irony is that I’m getting a lot done, regardless of the low hour count. As I type this I am on Checkpoint #8 of the Blocipedia project, and 89% of the way through the Rails curriculum. When the numbers are in my favor, it’s hard to not break out and head up to the mountains when the weather is beautiful, especially since I spent the better part of the spring (and end of winter) in my office programming until my brain was mush. I’m not sure the point of all this, probably me trying to justify the fact that I’ve been slacking a bit. Well, enough of that, what about what I’ve learned this week?

There’s a gem for that! That’s probably my biggest take away from the last week of work. Blocipedia requires user roles, and Bloc suggested using the Pundit gem to take care of the heavy lifting for that. The irony is that in my foundations curriculum we hand coded the user role function, so I had not used Pundit yet, and in the descriptor for the checkpoint Bloc was wording it in such a way that I should remember that time I used Pundit in the Bloccit app. Out of absolute dumb luck I happened to be in the same room as another Bloc student who was on the cusp of graduation from the program (more on that later on). He was a little surprised by my initial confusion regarding Pundit, but after a quick discussion we realized that Bloc had changed the curriculum since he took the Rails course. He still had all the documentation from his foundations curriculum and he happily passed it along to me. Once I read it over I was able to make quick work of Pundit and establishing user roles for my Blocipedia.

Although I didn’t code it out in the correct order, I was determined to establish tests for the user roles. Since I used Pundit instead of hand coding the roles as per my foundations curriculum I wasn’t exactly sure how to setup the Rspec testing, so I headed to Google. To my delight one of the first search results lead to a gem called Pundit-Matchers that makes quick work of the Rspec testing for user roles. Its super clean and intuitive to write, I highly recommend it.

Something else worth mentioning from last week, I have officially co-founded a code meetup! I’ve been attending the Boulder Ruby Meetup since November last year, and although it’s a great meetup, most of the content is over my head. The ratio of what I can grasp has obviously improved since I’ve started Bloc, but I’m still blindly following along during presentations quite a bit. Knowing that I could not be the only person attending that was having this experience, I decided that I would try to put together a meetup of my peers. I made the announcement during a meetup a few months ago and was approached by Sean Collins. Sean proceeded to tell me that he had been thinking about started a similar themed meetup, so we agreed to merge our ideas and team up to put a new meetup together.

We worked with the organizers of Boulder Ruby Meetup and started Monthly Coding Night, the goal of which was to get people of varying experience levels together and code on whatever projects we like. Its pretty informal, after some beer and pizza and mingling we get everyone together, introduce ourselves and what we’ll be working on that evening. There’s a big variety in projects, and some don’t have anything in particular to work on, so they just bounce around the room helping anyone that would like a little guidance. I think this first meetup was a success, as everyone seemed very enthusiastic about having met new people and making some code progress.

It may seem a tad daunting to start your own meetup, but I can almost guarantee that there are other like-minded people in your community that would like to get together, it just takes that one person to get the ball rolling. In my case there were two of us, so that definitely helped, but it could most definitely be done with one person and I bet a second person could be picked up in that first meeting to help organize future meetings. I think it’s worth the effort, you never know who you’ll meet. Case in point, at last week’s meetup I met Justin, who is a fellow Bloc student! I probably would have never known that there was another Bloc student in my area had I not made the initial push to get this meetup going in the first place. Crazy things happen when you put yourself out there, that’s all I’m sayin’…