Posts tagged 'portfolio'

Today: clearing out the backlog of things that I wanted to do on my homepage.

You know, until AppAcademy, I hadn't seen much purpose for a homepage. I remember the days of the late 90s, when everyone had a homepage with "About Me" sections that (let's be honest) no one really cared about, and then some collection of things that they cared about, like spacecraft of the Federation. (There was one guy who had a homepage dedicated to the Performa 6400, and that I used for years to diagnose issues.)

I may do something similar on my own page in time, but for now it's just a pretty good hub for everything I want people (who might want to hire me) might want to know about me.

In trying to put my best face forward, I've been customizing my hosting. Among the NEAT things I discovered today:

Bare git repos, and the hooks directory in a git repo, that allows you to auto-deploy files (for instance)

I have control over all components of my chosen theme, which means I can debug broken scripts (damn designers!)

It's easy to override the designer's css, especially when he barely uses classes.

It's easy to keep my version of given plugins up-to-date in order to use the most recent features.

I know, nothing here that's ground-breaking, but there were a couple times today that I found myself exclaiming, "neat!", if only because I figured out a way to get something closer to exactly what I wanted. … well, within a certain definition of "exactly". There are a lot of things I would do differently if I chose to build my theme from scratch, but given the constraints of using Wordpress and (most of) a pre-baked theme, it's pretty cool.

I may still SASS my page up, since SASS is cool, and choose to redo major components of the design (e.g. the font-family), but all-in-all, it's close to where I want it to be to represent me.

One thing I discovered: I haven't been nearly as consistent at posting here as I thought. The calendar widget at the bottom of the page has a LOT more gaps than I'd have believed at first. I shall try to rectify that. One change is that I intend to post more stuff that may not be public up there (here), including blog posts that don't have anything to do with AppAcademy. All in due time.

I spent the past two (and a half) days getting up late and working later. I got nervous that I have absolutely nothing to show with regards to portfolio work and decided to do some mini-side projects that I thought would be good examples for my portfolio.

The first of these was cleaning up Rails Lite, which I'm pretty happy with. When we were doing it in class, I was frustrated because of how fragmented the lessons were, but once I consolidated my code a little bit everything made perfect sense. When controller instances inherit from the ControllerBase class, they gain all the powers that it has, including auto-routing and rendering of default templates… it's actually quite clear, and quite neat how it all works. The inheritance tree is also much clearer, now, so I can see that parsing of input parameters and session management happens in quite the sensible manner. It's truly improved my understanding of how Rails works.

One neat side-effect: When I told Tommy that I wanted to include Rails Lite in my portfolio because it made more sense to me, he and I talked for a bit about how rails is organized and it piqued my interest about the project codebase. So I started reading through the source on github, and ended up identifying a bug in the source that will prevent the current cohort from being able to complete the assignment on that class day. (Long story short: the way the project is designed, it will work with version 4.1.x but not version 4.2.) It was interesting to be able to dive into the code like that and know what I was looking for, and I feel more capable for it.

Late Thursday, I started in on a project that I knew I wanted to do: modifying my Snake (game) code to instead implement Tetris. Besides being (I believe) the better game, it was something that I think could set me apart a bit on my portfolio, and it was fun to see JavaScript in a different light now that I'm more versed in the language. I've finished it up now, for the most part, after quite a bit of late-night logic-checking (pieces no longer get stuck in the sidewalls! Yay!) and I'm quite happy to say that I can be proud of my code in a way that I wasn't for Snake. It is my project and it works well and looks like what I envisioned when starting out, more or less.

Curiously, I got the code 90% right straight out of the box when doing the initial implementation. I started it up without the rendering code, and after making a small fix (ensuring that the IIFE was starting correctly), I could step through the game logic and see little boolean pieces falling like they should. It was pretty empowering to have that be the case; writing (mostly) bug-free code with few syntactic errors is a powerful feeling.

I added both projects to my resume, which has been cleaned up a bit, and I'm feeling (almost) ready to go full-in on the job hunt. I know I'm late to the game, but that's quite alright. This break has done me well, and if I can do that with as much determination as I've been able to muster the past two-three days, I should be fine.

I was actually going to post a partial update about my work over the weekend, but didn't manage to find the time. It might be a worthwhile task to do on my train commute, given that the normal sources of distraction are quite boring lately (although I suspect that others might think the same of my "content" on platforms such as fb).

Long story short: after running a couple errands on Saturday, I made it to the office by 6 pm, and worked straight through until about 2am, slightly tipsy and having learning a whole lot about how rails and backbone routes interact. There are a couple people who were here when I got here, and I had a very enriching time between talking through errors and feature development. I ended up bouncing a lot of ideas off of one guy in particular, and that helped me nail down a particularly complicated process that had been giving me fits.

Sunday, I woke up around 10 and started at the office around 2, and worked there for ten hours until the lack of running water in the building (long story) and the late hour drove me home. (I was also running on fumes, energy-wise). It was a long day of debugging, thinking through the backbone object model, and offering moral support to the other people working from the office.

I, by no means, have the most broken nor the most functional app, but I feel that I'm in a good place right now—which is good, since I'm setting my own pace :P I'm confident in the kernel of my project: every re-factor so far has been on the order of 5-20 lines of code, with a noticeably left-leaning Poisson distribution (i.e. more short patches than long).

Today, then, I woke up not sure what day it was, and I was somewhat disappointed to realize it was "only" Monday. When you work through the weekend, there's not much point trying to differentiate between each day. Nonetheless, today was better than a typical day at work, from my past life… this feels like just "what I do" now.

One thing that I like about the approach I've been taking toward development is that at every stage, my app works. I have yet to have a period, once I finished the core view, that adding a feature caused another feature to fail. Part of this is due to my deliberate approach to development, thinking through how the features will interact down the road, but most of it is due to a highly incremental process of grafting features on sensibly.

I'm trying to take git very seriously, which means that every time I wrap up some context, I'll try to stage it separately and commit just that portion of the project. I was joking with someone today that others' commit messages consist of "Monday", "Tuesday", etc. I've made 55 commits (according to github) in the past two days, which is something. party horn

So, what'd I do today? Well, there was a bit of yak shaving today, although admittedly not as much as yesterday—I'm making a lot of progress learning the details I need to know to accomplish what I want to do—but there's always more to learn. Some time around lunch, I broke down and started trying to hammer out as much as I could as quickly as possible, and damn the looks… for the most part.

So, in terms of physics, my position is way behind where it could be—I'm jealous of the guy who's got robust rspec unit tests running—my velocity is just about what it should be, and my acceleration is going really well. I think… I have a hard time perceiving the struggles of the people around me, and seeing which things I'm doing better than them, but every time someone transitions from Rails to Backbone I get a bit more self-conscious.

This seems to be a theme with me.

It's not that bad. Honestly, most of the pressure I'm feeling comes from the instructors. I know they mean well, and I know I should work faster and get over some of my hangups, but … I guess I'm overcoming my baggage in terms of how I attack problems. This is my problem and I'm personally invested in it, as opposed to some of the "toy" work we'd done, and I'm much more certain of the architecture and layout of all the tiny pieces. When I want to add something, I know which three files I need to tweak to make it happen (most of the time…), I open those windows, make those tweaks, commit, and am off to the races.

Contrast that with the general befuddlement I'd often experience when following along with some of the projects' specs. It's kind of nice.

Oh, I neglected to comment on my actual workflow. So, among the panes that I keep open are a small set of text files for "overall TODOs" (e.g. architecture and styling), for "upcoming TODOs", which are tasks that are a bit less ambitious than the first set but don't fit nicely into a smaller context (generally, I have 5-8 of these at a time), and then individual TODO: comments inside the source files. These last identify places where my code is broken but I can't do anything about it (I don't have the skills/time to fix it) or where there's an edge case that's known and I know how to address it, but it's not a priority at the moment.

This seems to be working pretty well for me, at least today. It certainly helps me shed the weight of tangential thoughts (helping me maintain focus on the matter at hand) and have a good place to go to feed me when I hit one of those transitional lulls.

They told us to try to finish our rails apps tonight. I got all my models composed, and have a lot of headway on my controllers; my views are sparse… and I need sleep. There's only so much that can be done in a day, although I could keep working.

Today's project was to create a web chat client using socket.io. Surprisingly, to me, I had a lot of fun doing this work—this sort of systems~ish programming is right up my alley. Massaging packets and managing client-server data processing is fun, once I figured out a couple questions about namespacing and the like.

In terms of "people won't remember what you said, only how you made them feel", I know that I had fun today… but between 5:30 and 8 pm, I made some changes that completely broke how the server handles command requests. I can change my user nick, and then immediately the socket closes, and a new socket is created, losing all the previous state. I managed, in just under two hours, to track down the call that's causing the error—something about calling socket.emit inside a particular logic branch—but I couldn't manage to kill the bug, and it's kind of driving me insane.

That said, this is one of the first projects in a long while that I want to keep working on even at the end of the day (as can be seen by my still being at the office after 8 pm). It was a ton of fun, which I can't seem to overemphasize despite my best efforts, but I have to throw in the towel. Maybe this will be something that I can keep working on after the final project.

Speaking of, today was the day that we had to present our initial wireframes to the instructors. Tommy sat down with me and my admittedly crappy, half-baked wireframes, and we walked through the app I'm going to spend the next two weeks creating. This is the really fun, really hard part, one because I keep having to rein myself in, and two because … actually, that's it.

When it comes to large projects, I struggle to keep the scope of my work to a reasonable level, instead letting my ambitions smash up against the realities of implementation. This will either be an unmitigated disaster or a really excellent personal learning experience. I'm good at debugging and problem solving, but when it comes time to interview after this cycle is over, I don't want to have to say that my greatest weakness is that I don't know how to bite off only what I can chew.

The assessment went well; again, the class as a whole were missing quite a few points, but the median score was perfect, which means that a few people had a lot of failed tests. Hopefully they'll overcome; I'd hate to see any of the people I've been working with the past eight weeks get washed out now… although I can understand if it has to be that way. We're not General Assembly; we have to maintain some standards ;)

We rounded out the pokedex app, starting from a standardized skeleton again (but this time incorporating a "clean" version of what we accomplished yesterday), and templated the hell out of it, then separated what was once a single Backbone.View into individual views for each task.

I can't say that it was the most interesting lesson we've had here; I was kind of done with this project yesterday, and refactoring a somewhat broken initial model just wasn't that engaging. I'd rather do it right from the beginning, and actually split out the modules into what should have rightfully been separate files in the first place. Further, since the plural of Pokemon is… Pokemon, it was often difficult to figure out which renderPokemon method we were calling—the one attached to the index, or the one attached to the show route.

That said, we certainly learned a lot about how Views and (eventually) Routers work on the client side, but it felt like we spent most of our time wrestling with callbacks. I thought I understood them pretty well, but when you have a related view (display requires index to be loaded beforehand) figuring out just how much of your render method needs to live in the callback can be challenging.

Nonetheless, we figured it out eventually. It's done and behind us… I'll probably want to read the assigned book cover to cover over the holiday break, just to solidify what we saw, so I don't trip over my feet come Monday.

Speaking of Monday, that's when Jonathan has asked we have our project proposals ready. I won't have as much time as I thought, but since we're required to make a clone of something it'll be easier (and harder) than I thought.

I would still like to make a clone of something that's at least a bit socially conscious, but then I think of Freshman English class and how some of my best essays were the ones I was least invested in. That is to say, when I can think logically about a problem, without letting my passion cloud my vision, it's often easier for me to make something I can admire.

I spent all weekend trying to make heads or tails of backbone, and apparently either it paid off, or today's assignment was easy/well composed enough that it was tractable well within the allotted time.

Today's project was the first half of a 2-day project implementing a single-page webapp - a pokedex. (For the unaware, there's a game called Pokemon, and in the game, every time you see a new Pokemon, it's added to your in-game computer index of Pokemans, aka the pokedex… poke poke poke…). The skeletal structure was set up already when we came in, so we started with a rails server with models and routes setup already, and did nothing more than build out the client-side functionality using backbone.

What started in the morning as a static page without much functionality became, by the end, a templated, asynchronous, pretty cool (as these things go) index of pokemans. We didn't accomplish much, all told, except remove a lot of the opaqueness from Backbone models and collections, but given the overall confusion I was experiencing on Saturday it's very much a relief. Backbone isn't that hard, it seems, once you get a handle on the problem it's designed to solve - removing a lot of the drudgework of making an API-driven client-side single-page web-site. But, like Rails, it really merits a cover-to-cover read-through of the source and documentation to understand what is possible, and what's in good taste/style.

Like I've been saying, there are a lot of things I'm seeing that would be incorporated into an eventual portfolio-level project, and since Backbone is the last thing we have to learn to make our projects, I'm thinking that maybe I'm ready to start sketching out what I'd like to accomplish in the next month and a half, starting as soon as I get to the airport Wednesday… I think there will be, and ought to be, a lot of pen-time, hovering over a notebook and essentially drawing wireframes of… what, exactly? I know there are tons of different things I could implement with the skills we've learned, but it's all so daunting now. All the projects I have in mind so far are a bit too large in scope, or too personal/bespoke to merit the effort.