angularjs

Certainty is a fickle friend

Later on my life, when I look back on this time of starting my job, I imagine I’ll remember a long period of mental haze.  Every day, the rug gets pulled out from under me in a new way, forcing me to adapt my working style to a new variable.  When I think I’ve found the last thing that could break, I inevitably discover a new ‘weakest link’, thus blowing all my earlier assumptions out of the water.

Before I got into software, I worked as a program manager at a mentoring program.  Part of my job was training team members into their roles.  Most of my team members were doing their first job out of college, so I got to play expert, not only teaching them best practices about mentorship, but also how to organize and schedule themselves.  I knew things, and I relished the opportunity to share them with colleagues.  I was a super-hero of information synthesis!

Those days are gone.  Now I only fantasize about knowing things as I dive headfirst into a bottomless pit of bug-wrangling uncertainty.

First it was string disappointment.  Of all of the JavaScript data types, I felt I could most depend on strings, because they were just chstick-man-with-capearacters between quotes.  Then I started writing keyboard shortcuts for a web app, and the browser threw an error because “a” != “a”.  WTF?!!  I had no idea where to go from there, until my colleague suggested that i might be dealing with unloggable unicode characters, wicked invisible entities that live to screw your validations over.  I left that experience feeling that my trust in strings had been misplaced indeed.

Next, my libraries let me down.  Although I painstakingly followed the exact directions of a d3 library, nothing happened on the canvas.  No error thrown either.  Just a whole lot of nothing.  I debugged, tried variations, checked the github issues to see if anyone else had this problem.  Then finally, on inspecting an object, I found that one of the methods in the library’s initialize instructions didn’t actually exist.  Library FAIL.

Finally, Chrome let me down.  After I pushed a big commit, I felt like an engineering superheo until my colleagues informed me that the commit had broken their apps in Chrome.  There was  no small amount of embarrassment on my part as I perused the code, trying to figure out how the changes I made could possibly be causing these errors.

As it turns out, Chrome had saved a JSON draft in local storage that was not compatible with my changes.  A quick localStorage.clear() was all we needed.  (Shouldn’t local storage be cleared automatically when one pulls from a github repo?)  From a new JavaScripter’s perspective, it seems that no good deed goes unpunished: tiny half-assed changes have tiny repercussions, but hard work results in big changes that lead to big, embarrassing errors.

But I’ve got to keep trucking.  I may not be a superhero of information-synthesis anymore, but I have Tom-Haverford-inspired hopes of donning a new cape: the superhero of information-FAILURE-synthesis.  Knowing why something is failing is the first step toward better understanding, which beats blind certainty by a long shot.

Fail early, fail often, fail purposefully: that’s the developer’s credo.

Advertisements

New Year, Fresh Start

It’s a new year, and I’m beginning my first full-time development job.  Today I pushed my first code to productgirl jumpingion.  I could not be more thrilled!

2014 was a big year.  I quit my job, went back to school at Fullstack Academy, learned how to do big-kid javascript, built 13 full-stack applications, and learned how to work with many emerging technologies, from d3 to tessel to CSS animations.

As I approach my new job, I want to make sure that 2015 is an even bigger year.  My current goal is not to get broader by learning a bunch of new languages, but instead to solidify my understanding of what I’m doing now — front-end JavaScript, CSS3, HTML5, and their associated libraries.  I propose the following set of goals:

General

Increase proficiency with git, completing all 50 levels on githug

Continue to push at least 2 commits to github per week (personal projects)

Become a regular contributor to one open-source repo

Present at 2 Meetups or conferences

JavaScript

Create a new d3 web app based on a current news event or issue

Read EcmaScript 6 — all of it

Learn reactJS

Learn coffeescript (necessary for my current role)

Learn to work with a templating language other than swig, such as handlebarsJS

Solidify knowledge of promises and use them in a project

Be able to implement all JavaScript array methods without having to look up documentation online

Learn how to write and run effective unit, integration, and e2e tests in jasmine and mocha

Fun

Play around with 6 emerging technologies or libraries, including CSS animations, polymer, handlebars

Test out and review 10 of the hottest mobile apps this year

Create a personal project using PhotoShop and Illustrator, so that I’m able to use basic features effectively in both programs (necessary for job, useful in the future)

______

I’ve included several public-facing goals that are not directly related to learning, such as presenting at meetups and contributing regularly to an open source project.  These help me stay accountable to my learning by creating pressure to be able to explain what I’m learning, subjecting my understanding to scrutiny.

The fun goals in the list help me stay up on the latest technologies outside my specific realm, but they’re all things that I’d enjoy doing anyway.

What did you set out to accomplish in your first year?

Luxe: Upgrade your AirBNB

At FullStack week 8, we are each given 10 days to create a personal project that leverages our skills in JavaScript into an app or plugin.Screen Shot 2014-10-06 at 11.23.29 AM

My app tackles a question often asked by AirBNB hosts: What is the simplest way to make my space/experience worth more to potential guests?  My answer: Luxe.

Luxe is a CMS platform that lets any AirBNB host become the local tour guide/luxury concierge for their guests by creating a beautiful custom website for their property that gives their guest activity suggestions, best restaurants in the area, and tips for getting the most out of their stay.  Luxe AirBNB guests need not do a lot of planning for their visit, as their host has already done the legwork and saved links and directions into their site.

Best Features:

The mongoose schema was carefully crafted to anticipate the host’s and guest’s needs, including information for international travelers.  As part of the effort to make the site easy to set up, we scrape the AirBNB listing to get all the user’s pictures and critical info and automatically add it to their listing’s database schema.

Screen Shot 2014-10-06 at 10.59.30 AMScreen Shot 2014-10-06 at 10.59.47 AM

 

In order to make the process easy for hosts, I wanted to make their site mostly functional before the host even touches it, so that all it needs is a few pieces of information from the host.  I’m very proud of the UI, which came out beautifully with added hover events, carousel click events, and tooltips — all part of my effort to pre-load the site with beautiful pictures and minimize distracting (but useful) text.

Biggest Challenges:

Every CMS faces one huge challenge: the uncertainty of user input.  I had to allow for any case, including the possibility that a user would leave an input or an entire section blank.  On the other end of the spectrum, I had to make character limits to protect the integrity of the layout.

Screen Shot 2014-10-06 at 11.22.35 AM

This project required the creation of two integrated but separate sites: one to attract hosts and help them manage their listings, and another for guests to view their host’s website.  With grunt combining my stylesheets on load, I had to ensure that the styles for the former would not interfere with the latter.  And when dealing with this much CSS, it became a challenge to find things unless I kept my code well-organized.

Closing thoughts: Not every good project stems from an original idea.  But what made this project my best yet was the investment I felt in it as a creative yet practical solution to a real-world problem.  This is one case where web technology has the potential to truly make a world of difference for tens of thousands of AirBNB hosts, many of whom support themselves partially through AirBNB hosting, as well as for the many guests who are interested in a luxury experience with less cost and more flexibility.