Monday, December 29, 2014

Accelerating the visualizations project.

Remember that project on visualizing data structures and algorithms I mentioned from earlier today? Yeah, it's getting real. 

After blazing through the core requirements for our sprint on AJAX, XSS guarding, and jQuery, my pair partner and I placed on hold the eventual refactor into Backbone that we'll commence tomorrow. We've both done the Backbone tutorials on CodeSchool, so it should progress quickly as well. 

Finding ourselves with "free time" around 9:30pm, I rounded up my partner-in-crime for the data visualizations project for a kickoff meeting. In the process, I roped in my pair partner for the current sprint, because he was hanging around, seems vaguely interested, and is a really intelligent and capable coder. It was fun playing the role of networker and team recruiter. 

Our first meeting last night went better than I could've hoped. We spent the entire hour discussing our personal goals and motivations for the project, which led into establishing a mission statement. We have a fairly clear understanding of the project's scope and intention, about which we can organize and rally. Such discussions often strike (less wise?) people as unnecessary and a waste of time, but I genuinely think these early conversations can make or break a project. Clear mission can prove invaluable to motivating a team. I'm so glad that others valued it equally, as evidenced by the sincerity with which they engaged in the conversation. We didn't settle for an "-ish" mission statement -- we wanted to know exactly our goals. 

I'm feeling very excited about this project. It will not simply be a random collection of notes and thoughts. It will deliver high-quality learning tools for understanding fundamental building blocks of CS: data structures and algorithms. We are building something to show to potential employers with pride, and to share with the broader community to improve learning. In the process, we will develop mastery of the topics we feature. 

I'm impressed it took so little time to settle upon an interesting pet project idea, one that has great potential. I'm so glad that I could recruit a couple others to my project, because I'm genuinely interested in it and am so happy that others are too. There's something gratifying about watching others get on board with your project idea, or at least with your leadership -- the last part is to acknowledge the idea's invariable morphing upon the inclusion of others. This happened once before -- at Stanford with Engineers for a Sustainable World. It's been a while since I was in a project leader role, and it feels good to be back. We'll see if that role remains necessary, but at the least I'm happy to provide the initial leadership. 

Maybe one day it may become a monetizable idea, or it may not; either way, we are committing to creating high-grade professional code. Building a better quality product is good for us -- it feels good to take pride in what you build -- and good for our bottom line -- be it as a portfolio piece or a monetizable website. 

I had to drag myself away from the building at 10:45pm, acknowledging the 60-minute commute that awaited me (night trips generally take longer). All I wanted to do was delve into the finer points of project architecture, our next steps in development, and setting up the scaffolding that will support our collaboration. My mind is alight with excitement. I hope I'll be able to sleep. 

Sunday, December 28, 2014

A restorative break.

One week off from Hack Reactor for Christmas provided some welcome respite. Often to sleep early, late to wake up, I was investing in sleep the way a squirrel stockpiles nuts for the long winter. (Boy, do I have a long winter ahead.) My time was well-spent and naturally balanced: friends, family, self, work, I did a little bit of everything.

(And now, a little side break for adorableness…)


Eureka, the family dog, was something of champion of cuteness. Here she was, lounging on our family room couch in front of the fireplace. Under regular circumstances, dogs have always been prohibited from resting on furniture. She has a good life. 



She now has a knack for opening presents. Give her a wrapped box and permission to open it, she will work her way into it, much like a kid.


And, attacking the toy monkey hidden inside:



Much of my Christmas break was spent in the family room, planted squarely next to the fireplace. I love fires, had a healthy appreciation built up from my days in Boy Scouts.

I remember one year when an ice storm hit Portland and knocked out the power for a couple days. We navigated rooms with candles. My brother and I were tasked with tending the fire through the night to keep the house a bit warmer. We traded shifts. It was wonderful.

Naturally, one of my favorite activities at home is to do my computer work next to a fire. I would set myself up in the morning, get it going, and then keep that spot as something of a home base for the day's remainder. Sometimes I would do actual work, sometimes I would lie on the couch and gaze at the fire, or at the Christmas tree. The hearth brought a pleasant warmth to the room, though it was hardly necessary thanks to the modern luxuries of HVAC.

Definitely ready to get back to Hack Reactor. The break was welcome and restorative, but now I'm itching to challenge myself yet again. Very soon we will cross into unfamiliar territory, so I'm eager to learn stuff that is absolutely essential and completely unknown (e.g. AJAX).

A fellow cohort member has taken interest in my project visualizing data structures and algorithms. (I wrote a blog post about my project.) He wants to collaborate. While I've enjoyed having this as a pet project, I suspect more will be learned and accomplished by having a hacker in crime. We'll be working mostly in parallel, so it will offer us a valuable opportunity to practice collaborating on the same coding project in a small, low-stakes environment. Project and process management -- my favorite.

The next four weeks will be a relentless onslaught of learning. I'm averaging 85 hrs / week at Hack Reactor -- which includes meals, because those are typically spent talking about code or reflecting upon our work. By the end of it, I'll be building full-blown apps as a full-stack developer. 

Friday, December 19, 2014


We covered algorithms yesterday, as it applied to the n-queens problem. (For the uninitiated, it asks how many ways can n number of queens be placed on a chess board of n x n size.) 

I've done the problem before in CS106B, the C++ class. Even with familiarity, and partnered with someone with a CS degree, it took us a solid four hours to implement the solution. I believe we solved it faster than anyone else, but it was disappointing how long it took. Even with the answer more-or-less understood, we ran into classic errors in logic. We were quick about dissing them about, but... Dang, the brain is bad at programming. 

Today we worked on parallelizing the problem. (That means splitting the problem into subcomponents and running them on separate threads. (In fact, this is not what actually happens with JavaScript; it only simulates the behavior.)) We successfully grasped the implementation of web workers over the morning session.

While implementing the web workers to solve the n-queens problem, however, we ran into a roadblock. Web workers have exceedingly limited access to the rest of the program. We knew this, but we didn't foresee the logistical implications until we were about to implement the solution. Then we realized that we were stuck. After some unsuccessful rabbit-hole exploring to find a workaround, we assessed our options. 

We could proceed to implementing a bit-wise solution (a super efficient and clever solution, but also challenging to understand), or we could refactor our entire code to work in the web workers. Both seemed like exercises that would add little value to our learning. So, we took a break, then shifted gears to work on more common yet challenging data structures.

The wind had already been sucked from our sails, however. It was hard to get motivated. We were so set on solving a problem. I'm proud of our ability to step back and assess the value of different paths, but unfortunately we couldn't fully commit to the new course of action. We both wanted the original problem solved, which we had been building up toward for the past day and a half. (No wonder people have a hard time shifted gears when design requirements change.) In the end, we made minimal progress and called it an early night. 

Well, more like we didn't call it a late night. I still left around 9pm. Laurie Voss, the CTO of npm (a heavyweight in the industry, a popular code package manager for JavaScript) gave a presentation on "all the stuff everyone knows but you." It was a grab-bag review of grips and advice from senior developers, and what they wish the juniors could do. He never actually explained anything (which he disclaimed at the start of the lecture). It was essentially a list of things we should go learn about and understand. Sometimes he would capture the high level idea so we'd have some context, but the implementation was never covered.

Some people didn't like this scattered style, but I loved it. Also, he had quite a lot of jokes, and his slides were excellent visual aids. I especially like the premise of the presentation: trying to capture all the things that people assume you know, but never teach you. 

And again, advantages of Hack Reactor shine through. The evening presentations have been some of the most valuable material I've encountered. From building a web app from scratch to see how the different frameworks interact, to delving into Unix/Linux, to the most recent presentation, I have consistently learned so much. In addition to material, I am constantly driven forward. Left to my own devices, I would certainly get stuck on the topic of algorithms. Instead, I move on to learn about D3, a handy data-visualization package.

A promising light.

[Backdated: 2014-12-17]

I’m consistently impressed by what I see from the seniors. Only six weeks ahead of us, they show off impressive technical capabilities. They work naturally in groups and are, on the whole, very pleasant for interaction. I have absolute faith I will be there in six short weeks as well. It's quite exciting to consider. 

When debating my decision, the issue of timing came up. While I could eventually reach the same skillet on my own, I'd probably not accomplish it as quickly. There are two reasons for this. 

Reason 1: part of what makes me a successful self-learner and engineer is that I doggedly pursue topics I don't understand. I will hound it until I fully grasp almost every detail about the concept. It allows me to follow rabbit holes to their completion and generally return with a successful search. At Hack Reactor, we're given a mere two days to explore the space of a topic. During those two days we will need to fulfill particular requirements that demonstrate comprehension on different levels. At the end of the sprint, it's on to the next topic; you must leave the old on behind -- unfinished threads and all. I think of it as extreme time boxing. Maybe I'd be able to replicate it on my own, but it likely wouldn't last long. 

Reason #2: I have better stamina here. I've consistently spent 14 hrs a day at the Hack Reactor space. Sort of like being at work, I find myself more self-motivated while there. It's easier to stay focused. There's a crew of ~30 others to hold each other accountable to doing our best. The network effect is powerful here, keeping us on point. While I've successfully pulled off 70 hr work weeks before, I was left far more exhausted by the end, and it was less solely focused on programming. With HR, I am compelled to not dither with other matters. And with a $17,000 price tag hanging over my head, I am making sure to make the experience worthwhile. 

So far I've had great success. I ended up solo for this last sprint. Not by choice -- the topic wasn't particularly interesting -- but there it is. I completed some of the extra credit (image uploading). I would've completed more, but I focused a lot on the fundamental learning objectives (subclassing and inheritance), employing the concepts as much as possible to cement them in my mind. 

Today we focus on algorithms. It's the one other sprint where we deliberately pair with someone of equal technical level. I'm working with someone who has a CS degree should be a good ride, perhaps even a challenge for me to keep up. I'm looking forward to it. 

Also, I'm getting my new keyboard! At the recommendation of an HIR (Hacker-In-Residence), I purchased a special split keyboard. It's actually split into two separate components, so it can allow your elbows to rest at a natural alignment under your shoulder sockets. I tried one out before purchasing, I'm super excited about it.


The long haul.

[Backdated: 2014-12-14.]

That's what I'm in for.

After much long and hard deliberation, I have committed to staying at Hack Reactor. So many thanks go out the those who offered advice or a listening ear during the past week. 

There's no doubt that I could do it on my own. But, I am increasingly convinced that I will gain more by being at HR. On the whole I feel confident about my decision. Many talks revealed the broken hiring process, leading me to believe that I will have more opportunities with the backing of HR. I will engage with more project work than I would on my own. And I'll move at a faster pace to cover a broader swath of material than I would normally. (I'm a depth-first search kind of learner.) 

My conversations with many seniors whom came in with similar or greater experience than me sealed the deal. Each one of them loved the program and were gaining so much from it. Sure, there's confirmation bias in that I'm not talking with those that dropped, but at least those whom stuck around did not regret the decision. 

So now I have another 11 weeks of fast-paced learning to look forward to. I'm averaging 13 hrs a day at the space (including meal breaks, but those are usually spent talking a out code as well). 

Even today, I plan to code in the evening. It's just fun. Also, I spent south time deliberating and discussion my decision that I didn't have nearly as much coding time as everyone else. Sure I'm still ahead of the curve, but there's more advanced data structures in "nightmare mode" that I want to dig into. 

I also published a new tech article on productivity tips in Sublime Text 2 -- the de facto text editor for programmers (and blog writers these days). Took a solid two hours to put together. It's partly intended for my cohort, some of whom are completely new to Sublime. Putting together the "greatest hits" of productivity tips will hopefully get them working faster in short order. Customization is a tough thing to accomplish -- because it's such a massive potential time sink, most edge away from the gaping hole and never try. My hope was to provide a digestible amount for newcomers. 

Sunday has not been all work. I took the morning to have a breakfast of southern comfort food, I went for a walk while listening to a podcast, and I'm visiting a friend for lunch. It's been a quiet, peaceful day, with the sun shining to warm my spirits. Days like these make me think I have PV panels somewhere in my body, because I feel so happy when the sun hits me. 

I suspect my fitness will take a hit during my time at HR. They give an extra hour to exercise every other day, but I've taken those times for coding or deliberating or catching up on other work. Also, an hour is not quite long enough to comfortably fit in an Insanity session.

Meanwhile, my eating habits are subpar. With only an hour for lunch and never any time to buy groceries, I am eating out for all meals. There's a motion among the cohort to organize to have catered meals from healthier restaurants around town. Would be relatively cost-effective and happier on our diets.

I wouldn't be surprised if I lose noticeable fitness through this time. On some level I'm okay with it. I'm attending this school to be out of balance, to live and breathe code, even at the expense of other things. It's only three months, so it's reasonable in my book. So far, the pace and dedication of time has been sustainable. I easily maintain focus throughout these super long days. Hopefully that'll continue. 

Saturday, December 13, 2014

Pushing the boulder over the hill.

The past two days have Been exhausting. Yesterday in particular saw me vacillate wildly on the decision to stay at Hack Reactor. There are heavy considerations to balance. 

My second phone interview with the consultancy firm went really well. He's a straight-up kind of guy, laid back, yet I get the impression that he takes seriously the stuff that actually matters. Asking him about working remotely, he said, "As long as the client is happy, I don't care." Even from Europe. Wow. No pushback. I immediately began to dream about building webapps from around the world and teaching dance on weekends. The integration of engineering and dance would be complete. 

The market for programmers is shockingly unbalanced in our favor. Estimates vary, but something on the order of 3 jobs are open to every 1 new engineer. That's partly why these bootcamps can work. Companies are hungry for new talent, the hiring prospects are fantastic. The CEO, in response to my question of why hire junior engineers, said that there simply weren't enough senior web developers out there looking for jobs. 


Lectures continue to be review of material I learned over the past couple months. While part of me is bothered by this, another part appreciates the review as an opportunity to test the rapidity of my recall. Can I anticipate what the lecturer will speak about next? Can I answer all his questions posed to the group on the first try? Much like any review, I try to not let "yeah, I've heard of that before" be a sufficient answer. I want to know it effortlessly. That was one of my key reasons to attend HR: ensure I know the fundamentals. So far, so good. 

A few conversations have occurred in rapid succession to push me toward staying.

First, a conversation with a fellow junior, similarly experienced in web development, and equally practiced teaching himself material. He was absolutely confident that he will learn more faster here. He didn't seem much concerned about the present skill level of the others. Not only was the conversation impactful, it was also enjoyable. He's a genuinely nice person. Good listener, attentive, thoughtful. We had a very good time. This has happened on several occasions, where I find myself engaging with others and being so impressed by the depth of their humanity.

Second, a chat with Anoakie. Simply put: attend Hack Reactor. You could make it on your own, but the hiring process in the industry is borked and every bit helps. 

Third, an email from another CS friend. A small essay reflecting upon my present situation and sharing her perspective. Well-written, articulate, and so carefully tailored to address my concerns. The key takeaway was similar: attend because it gets you a foot in the door and will serve you well in the first couple years of job searching in tech. I'd say receiving this email was a tipping point. Convincing myself to stay had become my Sisyphean task: two steps forward, two steps back, always stuck in indecision. With this email, I crested the hill and watched in amazement as it gathered momentum.

Fourth, conversations with current seniors. One of whom has years of experience as a professional software developer. He was very happy with the experience. The skill disparity was apparent to him as well, but that normalized upon reaching modern web technologies. Another, a self-taught web developer with five years professional experience, also entirely happy with his decision to attend Hack Reactor. 

Fifth, conversations with the class shepherds (former graduates with more experience whom are always on call for technical help). Key takeaway is that I could always go to them for more personalized feedback, something that I really wanted. 

Sixth, a conversation over lunch with a fellow junior with a CS degree. He has the experience, the contacts. And he is positively thrilled to be in HR, so totally convinced of its value. His certainty was contagious. 

Meanwhile, my fellow boat-mate continues to grapple with the decision. He's been equally up and down, generally leaning toward down. He left early today to spend some time reflecting. We've been quite supportive of each other, for which I've been grateful. I really have no idea which way he will go. I hope he sticks around; he's a great guy and I'd like to do a project with him. 

By him leaving early, I had free rein to program on my own. Even as I become convinced of the value of this program, I still sometimes get the urge to do some solo hacking. Communicating constantly about what you're going to code next is both wonderful and frustrating, time saving and time consuming. With him off for the night, I delved deep into a particularly neat data structure called "red-black trees." It consumed my attention for the next four hours. It was delightful and challenging. I left around 11:30pm. I'll get maybe six hours of sleep tonight and then be right back at it in the morning. 

My days tends to follow an amusingly simple schedule: wake up, daily hygiene, commute, Hack Reactor (13-15 hrs), commute, daily hygiene, sleep. 

If today was any indication, I suspect I'm in this for the long haul and have such a schedule to look forward to for another 11 weeks. 


Wednesday, December 10, 2014

More thinking, and a peer.

I intended to write about my discoveries in class each day while riding the BART. I've run into two problems. 

1. The BART is surprisingly crowded, even at 7:10am. No seating room means no computer work. 

2. I haven't learned anything truly novel yet. Wa wa wa. 

The latter should be expected. Prior graduates with backgrounds in CS say the first week is mostly review. Looking at the schedule, I'll expect it to be more like 2-3 weeks. But there you go. 

How funny, that my diligent self-study has landed me into this quandary, has somehow been "a disadvantage" for me. Not that it truly is, but blast it I don't enjoy making tough decisions. 

Each day is a roller coaster, but not for the material leaving me dazed. Instead, gusts of sentiment sideline me every hour, every half-hour, sometimes every quarter-hour. One minute I'm totally convinced that I'm staying -- and the next, I have no idea why I'm paying to attend a school (and tutor?) when I could do the same learning in a real job. 

Here's more assessment. 

1. New material. ~60% of material I'll be lacking proficiency in and would benefit from practice. This practice could easily be replicated on my own, indeed I was going to before all this happened. Further, I'd get the same learning on the job. 

2. Sustainability / construction opportunities. This one is nebulous. Ideally I'd still like to work in the sustainable construction sector, to leverage my background. The current job is not that. Some opportunities may open up in 3-6 months, which I'd miss if I were in the new position. Through HR I'd have the skillet to work professionally without being beholden to my first company. 

3. Earning potential. Again, unclear. Joining now would land me a lower salary. I've asked about whether that is renegotiable after 6 months. Even with that, I'd guess my salary would be lower than if I joined post HR. 

4. Excitement and fun projects. A wash. HR I'd choose my projects, but at work I'd do real projects. 

5. Hiring community. Advantage HR, hands down. Is it something I don't already have, with my dancer connections? Maybe. But can a wider network do anything but improve opportunities?



We are learning about data structures now: stack and queue, and their implementation through different instantiation styles. I've learned about data structures through my C++ class, and instantiation styles through personal research in JavaScript.

For this session, we are paired with someone of equal experience. I met a fellow whom actually did the same Stanford online courses that I did (except for Algorithms). It was amazingly fun to breeze through the material. We engaged in meaningful discussions of the pros and cons of different approaches. We coded quickly and felt on an equal footing.

We bumped into a bug in the testing suite provided by Hack Reactor. We fixed the bug and made the test even better and more precise, then loaded our fix to be integrated by the school. (Accompanied by proper documentation of the bug, naturally.)

It was… fun. Exhilarating. And sadly, this is the first time I've experienced this emotion. It was the first time I've been genuinely challenged in the program.

We're now having good conversations about our present shared dilemma: whether to quit and forge ahead on our own. It's nice to have someone else in the same boat. Camaraderie and all that.

Still debating my decision.





Another long day. 13 hrs in the building. Technically 2 hrs of break/meal time, yet much of those times are spent coding or talking about code. I took half of my lunch to help a fellow on a particular concept. The student was absolutely thrilled for the one-on-one time. 

My programming pair and I continued to rock our assignment on data structures. Ahead of everyone else as far as I can tell, and that is with a couple extra challenges we included for our own edification. (For those in the know, we used `reduce` to functionally implement `contains` for a tree. We could've done it iteratively, but what would be the fun in that?)

We have an excellent rapport. I think it's exciting for both of us, the way we push each other to new levels of mastery. ("Ok, that works, now make your constructor new-agnostic.") It does feel a lot like play: how can we take the assignment and up the difficulty level?

Fortunately many great challenges await, such as red-black trees and bloom filters. I actually know about both of those, but my grasp is tenuous. 

The program is surprisingly devoid of lectures. Aside from the first week, which is quite heavy to bring everyone more up-to-speed, there's only 2 hrs of lecture every two days (could be slightly off, but around there). I thought HR would provide the materials to master this material quickly, but instead they're teaching people how to teach themselves. I've been doing that for 1.5 years now, I think I've got the concept, that's why I was paying all that money to join and have things presented. Probably for the best ultimately: learn by doing and all. But it further makes apparent how HR will not give me a technical mastery that could not be achieved solo. 

I keep returning to the community. The network I will be a part of. And the fact that my job search will doubtless be more productive with the coaching of HR than on my own. These do add real value. I will have more offers to choose from, which will in turn lead to better economic situation and career opportunity. 

Plus, I might get lucky enough to angle for a sustainability-related job. Hack Reactor would add some credibility, and perhaps their network has some connections to offer. 

I'm a little stuck on the nostalgia(?) of my "by my own bootstraps" story, it smacks of the American dream, the universal belief that diligence and effort will bring you success. That story is diminished somewhat by attending HR. I am then "another bootcamp grad," the product of an emerging market capitalizing upon the industry's desperate need for programmers. I am no longer self-defined and hard-won, I am tidily and easily following a path blazed for me, a carpet rolled out with neon lights illuminating the way. I am successful because I have the liquid capital to not earn money for three months and exist in San Francisco. That doesn't feel nearly as good. 

I spoke with a senior whom entered with prior experience. I asked about the pace of learning among his peers. Do the students become fluent and quick-thinking? The beginning can be quite slow, as people struggle with everything from programming concepts to problem solving to keyboard shortcuts. Everything operates at ~60% efficiency. The senior said students do become versed rapidly, which leads me to believe that sprints later in the program (focused on my least familiar topics in backend) will have me mostly on par with any peer. I found this testament encouraging. 

Fellow students are already beginning to peg me as an experienced programmer, a resource, and a mentor. It's only been three days. 

Time dilation is happening like something fierce. I can hardly believe it's only been three days. So much has happened, it might as well have been a week. Life moves fast here.

Tuesday, December 9, 2014

The second day: thinking things over.

First day finished. Made it through, mostly without a scratch. The thrust of the days lectures centered around life and best practices at HackReactor. Given the intensity of the program, this front loading makes perfect sense. 

My experiences in pair programming has me occupying different roles. In one, the student clearly felt overwhelmed and under qualified. I tried my best to be encouraging: there are many others in the same boat. I actually had fun playing the supportive role, it was my first experience mentoring someone in programming. The skills learned from dance are highly transferable, so I occupied the role comfortably. 

I grow concerned this will be the norm at Hack Reactor. The first six weeks are organized into self-guided sprints where we dig into material on a particular topic. There is always extra credit and opportunity to go more advanced. I figured: if I *actually* know the material, I'll blaze through it and get to the extra credit. What no one ever told me through my extensive querying was that it's all done in pairs.

There's no way to know what the future might hold, but I now have a much more present fear about my room to move quickly. All my peers are truly amazing, inspired, and capable individuals, so I'm placing no value judgment on them. I'm simply acknowledging the fact of my more experience, and whether I will be able to challenge myself on a technical level. 

Of course, I would still benefit from the program. Teaching someone material always gives you new insights and crystallizes understanding. But, did I sign up to do that 90% of the time? Not really: I still want to be moved forward technically in leaps and bounds.

These concerns are predicated on two unknowns: the speed at which my peers catch up, and the novelty of the material presented. I'm fairly confident I know much of what will be presented technically, at least for the first few weeks. I've heard similar sentiments expressed by other people that attended this program with a CS background. 

My concerns are being thoughtfully considered by the team. I'm receiving support and insight and opinions from peers, people longer in the program (called "seniors"), and alumni. Much to contemplate. 

I did have a particularly illuminating conversation with a senior that came into the program with experience similar to mine. The senior confirmed that they did not learn all that much on the technical side, certainly nothing they couldn't already do by themselves, but there were still clear benefits to HR:

1. Communication, collaboration, and related soft skills. Highly emphasized by Hack Reactor, any student graduating will be highly capable of speaking cogently and precisely about a topic. You practice communicating about code from day 1. While I don't have much experience explicitly with code, I'd say I'm a highly practiced communicator. The marginal benefit here is not tremendous. 

2. Community. You're surrounded by high-performance individuals, all of whom are kind and passionate. It's an inspiring environment and you're building a community of programmers. As a more experienced member of my cohort, I will become known as a resource, teacher, and leader. This network will have lasting effects when they are all working jobs and recruiting others. A huge boon, but again the dance scene already offers a semblance of this. I know a staggering number of coders whom work self-employed, in startups, and at tech giants like Google. While they may not know my work in code, they know me which can be a foot in the door. 

3. The hiring team at HR. Top-notch and dogged in their support of HackRs. A rapidly growing network of hiring companies, and a hiring day now often oversubscribed. Another huge benefit, but again -- is it not replicable on my own?

4. It's fun. For all the obvious reasons: community, learning, challenge, interesting projects. Another large benefit, but worth the tuition price?

Meanwhile, today I'm chatting with the CEO of a tech company, a connection made by someone reading my programmer's origin story. Further evidence that blogs are an excellent way to improve visibility. He offered to get me an interview. Hoo boy. That was fast.

Monday, December 8, 2014

First day.

Here we go! My first day of Hack Reactor. Feeling bright-eyed and bushy-tailed. 

Housing situation feels just right. Staying with two friends through dance, I've known them for a few years now. They're living in a family cooperative in Berkeley. The space is warm and inviting. 

I arrived just in time for their communal dinner, a delicious potluck, and a chance to meet a bunch of the residents. It makes me quite happy to return to an environment like this one. The two are Good People and we always have a lovely time together. I look forward to the opportunity to do so more often. Plus I have a loft bed in a room with a door, which is super plush by house-surfing standards. 

The rapid switching of gears was a challenge. I arrived yesterday evening after a weekend of teaching, then first class today. I was up late doing laundry, because I lacked a reasonably clean shirt for the class photos to be taken today. It's those silly little details that can break a person during such transitions, I think, and it's part of what makes the nomadic lifestyle stressful. Fortunately, I have experience dealing with these tribulations.

A 45-minute BART/walking commute awaits me on either end. I'm actually glad for this right now, as it'll given me some solo time. I plan to use it for reflection in journaling or composing posts for my blog. Time will tell if it remains a boon. 

My technical blog has already attracted some professional interest. It's been passed along to a CEO who thought I'd be a perfect fit for their new position. When you open up to the world, it's wonderful what it can give back to you. 

Thursday, December 4, 2014

My origin story: programming.

Read about how I got into programming on my new tech blog!

(I won't cross-link often, but sometimes a post fits both inside the technical and personal spheres. In such cases, I will post in the one that fits best, and link from the other.)

Wednesday, December 3, 2014

My reasons for attending Hack Reactor.

In five days, I will begin (yet another) intense period of study. I'm joining Hack Reactor, the acclaimed 3-month full-stack Javascript boot camp in San Francisco.


I'm happy to return to the States after a successful six-week tour of Europe, to be in a familiar space where I speak the native language. As far as spending time with friends or exploring the city, however, I may as well still be in another country. The country of ... Hack Reactor. With 70 hrs minimum time commitment per week, I am for all intents and purposes not actually in the Bay Area. My only free day, Sundays, will largely be devoted to catching up on HR work, sleep, side projects, and other important personal maintenance tasks.

I am equal parts excited and apprehensive, a mixture of emotions reminiscent of departing for summer camp. Hack Reactor will undoubtedly be an inspiring, challenging space where I will learn an insane amount of material. In some ways, though, I'm not the ideal student for this group.

Hack Reactor is -- as with almost all bootcamps -- geared toward people with little to no experience with programming. I'd say ~90% of the HR students in my group come in with no background beyond tinkering with Coderbyte challenges and reading through Eloquent JavaScript. I suspect such students will experience the most intense and expansive growth through the program. With the lecture material likely being entirely new for them, they will get a massive jumpstart on understanding software engineering, deftly sidestepping the usual roadblocks and wasted time of trial-and-error that marks the growth of a self-taught programmer.

I am not being disparaging of the general lack of experience among my cohort. Every single person has impressed me with their biography, and I sincerely look forward to our future work together. They all seem exceedingly capable to tackle the challenges ahead. If anything, I am expressing slight envy: given my prior experience, I think my HR experience will not be quite so chock-full of ground-breaking learnings, which makes the cost more difficult to justify.

I went through with attending Hack Reactor because there is still tremendous value to be gained from the school. It will provide an intense, structured learning environment. I will revisit the fundamentals from a more seasoned perspective, thus solidifying my grasp of the basic principles of web development. As I will probably finish assignments ahead of schedule (if the precourse work is any indication, this should hold true -- it took me ~30% of the estimated time), I can take time to tinker with projects that highlight that particular topic, or dig deeper under the guidance of the teaching staff.

More advanced concepts in web development, such as authentication or server-side work, will be new to me as well. While I could certainly hack through learning materials on my own (such are the joys of widely available educational material on programming), I will no doubt pick up the essentials faster through HR.

Then, of course, there are the ample benefits of the community. First, it'll be thrilling to work alongside equally passionate and driven individuals. Second, learning from the talented teaching staff, all of whom receive accolades for the quality of their pedogogy. Third, the hiring network provided explicitly through HR. Fourth, the informal hiring network provided by all fellow HR-alumni as they spread throughout the industry. The network effect of HR is a powerful and beneficial one, without question.

My time at HR will be productive, no question about it. Hopefully it'll be $17,000 worth of productive.

Saturday, August 30, 2014

Reflections: August, 2014.

Seriously, three months without a blog post?

On my way to Burning Man, I wrote out this wonderful, lengthy, summary post of what had been going on in my life.

Then my computer went fritzy before I had a chance to backup / sync / post the entry. Just figured this out now. Bummer. It was a good one, too. Rather than be paralyzed by the lost work, I'll endeavor to recreate it here, but hopelessly abbreviated because it's further back in my memory.


Taught 13 hours(ish) in Winnipeg over three days with Ruby. A wonderful time: great community, lovely organizers, all around a great time. Spending time with her was a real treat, and we even explored the beaches of NYC before heading out there.



(This sign makes my inner 12-year-old boy giggle.)


As does this…






I find myself on planes a lot. Several of my recent trips have yielded some splendid photos.





(This last one is now the home screen for my phone.)

Time in Portland

Carbon Lighthouse continues to be excellent and allow me to work remotely. This has allowed me to get up to some shenanigans in Portland.

- Watching The Princess Bride in Pioneer Courthouse Square. Everyone quoting lines, applauding at the introduction of beloved characters, and generally being good spirited and Portland-y. 



- Underwear shopping! Now I have wonderful sexy-boy underwear. Who knew it could be so much fun?!



Recess Massive

One of the most inspiring, nourishing dance events I've ever been a part of. Great people, great classes, great environment, great music. Massive refilled my well of creativity, giving me a whole new set of ways to love and experience dance. I fully offered myself as a person, a teacher, and a DJ. It felt incredible. I was so much more in tune with my Self than in a long time. And I felt cherished and loved by the whole community, supported by them to be vulnerable and genuine.


Jumping off a 40' cliff every day.

- Introducing my new hat, Mr. Mistoffelees. A source of much hilarity and goofing.





This is the sound he makes: "Meeeeeeaarrrrrrrrrrrrrmmmmmmmm."

- Mind-blowing dances with so many people. Exploring weight-sharing, partnered modern dance styling, lifts, and playing with all the rhythms. So. much. amazing.

- Nourishing outdoor environment.


- Discovering that I can rock women's clothing, thereby doubling my range of costume choices. (Those red pants pictured earlier are actually women's. Sometimes they just get all the fun.)

- The little things. Like two of my favorite people setting up their van as a camping space.


To which someone responded by leaving this little pack on their car.


- Teaching great classes that inspired, freed, or otherwise expanded the experience of students. Also, this. What a treat, to give people the freedom to be themselves and play.

- Being around beautiful people with their hearts exposed.

- Affirmation that I am a worthy human being, full of love, and with so much to contribute. I felt like I really gave a lot of myself at this event, and people appreciated it.

It wasn't all fun and games -- there were certainly many challenges here as well -- but on the whole it was a wonderful experience, and I don't particularly feel like delving into the challenges right now.

Burning Man

So much happened here…

- Deliberately sleep-depriving myself (i.e. choosing to adventure into the playa at 3am instead of going to sleep) and all the magic that would result from it.

- Serendipity, almost constantly, the playa delivering to me exactly what I needed in the moment.

- Totally losing my shit, crying hard and unabashedly, in a space filled with so many people, and feeling their support and care.

- Processing the loss of a relationship very dear to me.

- Being inspired by the creativity of so many. This time, not feeling inadequate by comparison, but simply cherishing what they have to offer and trust that I have something as well, albeit different.

- Meeting random, lovely human beings. Feeling connected to strangers.

- Spending a lot of quality time with people whom are really important to me, and affirming who those people are and why they matter to me.

- Dancing dancing dancing so hard, so free and so joyful and so expressive.



Carbon Lighthouse

Work here continues to go fabulously. I will probably expand upon this in a subsequent post(s?). But the short version is this: in the course of two months, I will have built for them in two months, with no prior experience in web development, a functional webapp that addresses a core problem in their work flow, including features such as barcode scanning, offline functionality, database syncing, and taking photos. It feels like I'm learning an insane amount, delivering a huge value (probably worth $125,000 - $250,000 for it to be developed externally), and making a real difference to the company.

Here's to hoping that work continues with them…




Enough for now. How hard it is to do recaps like these! At least I haven't been blogging because I've been too busy with so many other things in life… certainly a good reason. Perhaps I'll be able to build a momentum and pick up a more regular posting.






Monday, July 28, 2014

Reflections: July, 2014.

[This post sat around for nearly two months before being published. At some point, I realize I just needed to post it, rather than try to make it “complete.” So here it is.]

Over a month since I blogged last! How terrible. I feel like I've neglected an important side of me, a side that I cherish, this opportunity to catalogue my thoughts and feelings and keep track of the madness of my life. I have this thing that happens where sometimes it feels like life is slipping by and I have no control. Life slipping through my awareness like sand through fingers. And there's no hope to capture it, no chance to remember it, and what will happen when the sand runs out, when all those beautiful moments stop coming? Of course it's critical to remember: life keeps giving you more sand, and the objective is to appreciate the current trickle of sand, not the sand that has come or has yet to come. The impermanence of the now makes each moment precious, special, noteworthy. Still, I'm no Zen master, and blogging is one small way to satisfy my urge for control and permanence. It's a small reassurance, a small way to take stock. And I haven't done that in a long time.

This always happens when life gets particularly intense. And I've been having that in spades lately. I'll take a stab at recapping thematically.

Closing my tour in Europe

After four long, beautiful months in the fair European continent, I am at last back in the States. By the end, I was ready to return home to our monotonous dollar bills, our inefficient transit system, and our subpar cheese selection. (But also: being able to call people, check my text messages, or use data outside of a WiFi hotspot.)

While ready to return, I was also feeling increasingly at home in Europe. The event to bookend my tour, European Blues Invasion, was chock-full of amazing, beautiful people whom I love and care for. While not quite family, it gets really damn close. And every time I return, the bonds strengthen and bring us closer together.

It was a perfect sendoff. Classes went extremely well, the ones I taught garnering attention and appreciation from students. I felt in my element the entire time. EBI somehow brings that out: I am a radiant, shining being, full of love for teaching and energy for dancing. I received a note from a student: "You're like a magical unicorn that barfs rainbows." One class earned high praise on a blog, written by a lovely individual who is also a photographer and captured me in a particularly bright moment.



The last night hangs in my memory as one of the highest moments in my recent dance experience. It began with debuting the hour long of mixed music put together by Anders Ingram and myself. He did 100% of the mixing magic, while I offered musical inspiration and feedback on his work. One day I hope to be able to work that mixymix magic like him. Some day. Anyway, it was a lot of work (even for me!) and I was proud of what we put together. I announced the set, pressed play, and set to dancing my ass off. For that hour -- as well as the next several -- I was a being of pure dance, no inhibitation, I was full of creativity and flow and boundless capacity for expression. I felt beautiful and inspired, in a way that I haven't felt in a long long time. Some particularly playful moments -- rocking out with Annette, or dancing a threesome with Nadja and Tristan, or randomly inserting myself into a partnership for part of a song -- all of this fluid movement and awareness. I think some of it was captured on video, I'd be curious to know how it actually all looked. It sure felt amazing.

Dancing did not finish at 5am with the last DJ set. Oh no. Instead, we all walked over to a nearby park -- which was closed, by the way, so we hopped the fence -- and amassed a crew of ~40 people to jam in the dawn. Passerbys, commuters riding to work on the busses, they would all look at us in amazement, as they would wonder if their sleepy haze was playing tricks on them. We were partying hard. It was decidedly beautiful and full of richness.

Gaining admission to Hack Reactor

Hack Reactor, the prestigious coding bootcamp in San Francisco, caught my eye in late May when I was sent a list of bootcamps by a friend telling me about her plans to join Dev Bootcamp. Of the many options available, Hack Reactor stood apart as the most appealing. Unsure what my next steps were as a programmer in terms of how to develop an employable skillset, I put together my application on a lark; with a staggeringly low acceptance rate of 3% (lower than Stanford!), I hardly expected anything to come of the attempt. But only two weeks after making the decision to apply (during which I taught myself JavaScript and refreshed my memory on functional programming), an email sat in my inbox inviting me to join Hack Reactor in December. My glee could hardly be contained -- a bit of a problem, because I read that email at 1am after several rounds of beer with friends in London. After an hour of prancing around playing music and squealing like a fool, I finally settled down to a point where I could sleep.

Making it into Hack Reactor is a big step for me. To me they seem to be the most intense and thorough bootcamp out there. 99% of graduates get a job within six months, and the average starting salary is $104,000. (These statistics are considerably better than what is boasted by other bootcamps.) Graduates of HR head directly into mid- or senior-level software engineering positions, and their skills allow them to tackle a range of problems (as opposed to many bootcamps that only equipment you with front-end development skills). In short, it's pretty much a guaranteed path into the job market, and only takes three (incredibly intense) months to do it. 

My initial foray into programming, begot from an emotional slump following the end of a relationship and the need to occupy my mind, has opened up suddenly into a new path in life that holds great promise professionally. Programming allows you to tackle interesting problems, can be applied to many industries (I am already thinking about how to combine it with sustainability and construction), offers the most flexibility for working remotely, and usually takes seriously good care of its employees both financially and in perks.

The start of an internship with Carbon Lighthouse

Two days after returning from Europe, I rolled into my first day of work at Carbon Lighthouse. My projects here will be the subject of further, more detailed updates, so this update will simply capture the broad strokes.

This world is my playground. They essentially said to me, "Here's how we do our work. We think these things suck about what we do, and think they could be done better. We want you to make it better. Let us know if we can do anything to help you solve the problem." I have free range to generate solutions, leverage the knowledge of team members, and can trust that I have the backing of my superiors to make big changes to processes for the sake of efficiency. How often is an intern allowed to tackle such broad questions as "How can we do business better?" for a company? This is a long way from doing the grunt work of design or project support, and a far cry from fetching coffees for others or printer runs. 

Life at Carbon Lighthouse has been a mixture of acclamation, employee training, need finding, prototyping, and -- most recently -- software development. 10 days after starting at the job, I was permitted to work remotely from Portland / NYC for an entire week, rather than shuffle around more flights in order to return to the office following PBEx and before Nocturne. Again, I have never heard of this level of freedom being granted to an intern, and I sure am loving it. 

I'm also respecting it. I've taken my work very seriously, track my hours diligently, and ensure that when I'm working, I'm working at max capacity and focus. I don't play the game of work for 10 minutes and then dither about on my email inbox for another 20 minutes. After about 40-60 hours of work in product development, I delivered a solution that should address a bottleneck in their project setup that ends up wasting several hours (and a lot of mental energy) for each project.

Kicking ass at competitions

My competition performance has picked up dramatically. Apparently 2014 is the year for Andrew Smith to rock the competitions. I'm happy for this turn of events, considering the many years I went without winning any competitions, and its insidious impact on my confidence as a performer and dancer (as has been discussed previously). 

- Mile High Blues, Strictly competition with Nicole Trissell -- 2nd place. Video here.

This was a big deal for us. Going up against people like Damon & Joy, and Tim and Julie, we were just happy to be in the finals. This is also considering that Nicole and I hadn't danced in several months and had never competed together up to that point. But we threw down hard, and earned cred from judges, fellow competitors, and friends. To hear that from people whom I respect as dancers and instructors meant a great deal.

- Portland Blues Experience, Strictly Blues Competition, with Nicole Trissell - 1st place. Video here and here.

- Portland Blues Experience, Strictly Jazz Competition, with Nicole Trissell - 1st place. Video here and here and here.

This quick one-two punch happened fast, so fast that it left me dumbfounded. I haven't pulled off a double win since Rose City Blues in 2012, which feels like such a long way away now. Nicole and I received loads of praise for our dancing at this event, and it was all kinds of wonderful to give me such an ego boost. It can certainly be healthy to treat your ego like that! I become a glowing, shining, giddy fool when people stroke my ego. My inner Andy comes out to play, I feel beautiful and confident and strong and worthy. 

Also, it means that Nicole and I are 3/3 in terms of placing for competitions, and 2/3 for winning. Not too shabby. Law of probability dictates that this ratio will dip down from here, but I'm still proud to have such a record to kick off the start of our competition experience.

- Nocturne Blues, Solo Riffin' Contest, Finalist. Video here.

This was a blast. Much like last year, I was quickly nominated as the team captain, and led my team to put together some great work. It was a load of fun, intense, and we put on a damn good show with the other team. A shining example of what riffin really means -- throwing down in a respectful and appreciative way for the betterment of everyone involved.

- Nocturne Blues, Switch Competition, 2nd Place. Video here.

My first time competing as a switch landed me 2nd place! I got paired with Grace, whom had also never competed as a lead. We had great chemistry, a lot of fun, and apparently it showed. My favorite moment was when we got into a position that turned into walking the dog when the music unexpectedly transitioned into that riff.

- Sweet Molasses Blues, Choreography Competition, Finalist. Video here.

I was a choreographer for this project, not a performer, so I only count this loosely… But our group made it to finals! That's amazing, considering that we all had four days to put it together, and that it was my first experience choreographing. Apparently we received a lot of positive feedback about the storytelling elements and that we presented in a form that has not been done before in the community.

So, by the numbers:

Competitions in the last month: 6

Finaled in: 6

Placed in: 4

Won in: 2

Spending time with dear people and places around the world

During my recent travels to Portland, New York City, Pennsylvania, and Winnipeg, I have had the pleasure of catching up with some fantastic people whom I really appreciate having in my life. 

Portland continues to feel like home to me. Returning for PBEx was an important and healing experience for me. A particularly favorite moment was chilling on porch covered in couch cushions Sunday afternoon with a bundle of fantastic people, chatting away and laughing to the point of tears. 




A return to Bear Lake (my family home in the Pocono Mountains) serves yet again as a benchmark for where I am in life. One year ago, I was reeling from a breakup, a failed attempt at being a full-time local dance instructor, at last mourning the loss of a much longer-term relationship, feeling adrift in the world and unsure of what to do next after leaving the comfortable fold of the traditional path. My, how life changes fast. 













Monday, June 16, 2014

Have no fear, I know regular expressions!

I know regular expressions, and at last get the joke to the XKCD comic:


( © Randall Monroe)

It does feel a little bit like I know kung fu. Regular expressions, which (essentially) search for a given pattern in a string, i.e. a set of characters (words, numbers, etc.), and then let you do something with the results. These powerful, albeit cryptic, expressions allow you to radically simplify many operations on strings.

Take, for instance, a problem presented on Coderbyte: given a string of words or letters, shift every letter over by 1 (so 'c' becomes 'd', 'z' becomes 'a'), and then capitalize any vowels excluding 'y'.

Here is a solution found sans regular expressions. Just gloss over the fine print for now and look at the size of it.


Here is a solution found using regular expressions (namely, mine).


Slight difference, right? As an added benefit, regular expressions can often let you write my like how you would talk about solving the problem:

1. There's this function called 'LetterChanges,' you pass it a string.

2. Give me the result of taking all the alphabetic characters in the string and doing the following with each one:

3. If it's Z, change it to A

4. If it's z, change it to z

5. Otherwise shift the character over by one

7. Replace all the vowels with …

8. … an uppercase version

Neat, huh?

Wednesday, June 11, 2014

A lovely time in Oxford (yet again).

Last weekend was my workshop in Oxford. One day, two tracks, six hours of class, six hours of partying. A packed experience, to say the least.

I am always thrilled to visit Oxford, it's been my favorite city in Europe since two years ago, when I passed through in August 2012. That experience left a powerful impression. My first introduction was through Nancy, a (now) dear friend whom I met in London originally from the states. She ensured I got all the classic Oxford experiences, which has included (over the course of a few visits) tea & crumpets, a bicycle ride along the river and cycling on the wrong side of the road, museum visits, and strolling college grounds finding areas shot in the Harry Potter films. 

Oxford was also the first place where I really felt like "kind of a big deal." I use that term very loosely, and I don't let it get to my head. Still, it was on my first tour of Europe, and I felt so welcomed and people were excited even though only a few knew of me. (My status as a US instructor probably helped: by this point, Europe was ravenous for more high-quality Blues instruction, and saw US-based teachers as the crème de la crème. Timing and luck counts for a non-trivial portion of my success in Europe.) On that visit, I taught a class at the weekly venue that drew a huge crowd, and in one night lined up seven hours of private lessons for the following day. I had never felt so in demand, and to this day have not surpassed that many privates in a single day.

Since then, I always make a concerted effort to pass through Oxford during each European tour. I have been successful thus far, bringing my total number of trips to this lovely town up to five. Five!

I love every aspect of Oxford. The old buildings with breath-taking architecture, the wealth of museums and libraries, the feel of its downtown, the river on which you can go punting in the summer, and of course the people.


This picture summarizes how I feel about Oxford. What could be better than lazily floating along a river with verdant banks, drinking ginger beer in the sunshine, and laughing about everything in life? I have developed many meaningful connections with others that I cherish. Something about Oxford makes it feel comfortable, like a home away from home in Europe.

Oxford comes with a certain old-world quality, intellectualism, and pageantry to boot. You wander through a graveyard and see dates with only three digits, and it's not because the "1" has worn away. Buildings and chapels are breathtaking. There is a gigantic library that extends underground. Students wear academic gowns to their exams, and formal wear underneath; they were a designated flower to identify where they are in the process of their exams. There are formal dinners for students at the halls. There are even bizarre and hilarious traditions at schools, such as at Merton where, every November, students walk backwards for an hour at the quad drinking and being merry, in order to generate enough counter-clockwise momentum to slow down the Earth's rotation and correct for the disruption caused by Daylight Savings Time in the space-time continuum.

I'm just glad that Oxford loves me back. This was the flyer created for the most recent workshop.


"American Legend?" Who might that be? I don't know anyone that qualifies as such.

I realize it's self-aware hyperbole, but I have been recently the subject of such flattery and kind words in advertising that leaves me a little astonished and bashful. I have been described also as "the nicest guy in Blues," and my upcoming workshop in Bristol proclaims that I am known for my "international Blues stardom, as well as being a lovely guy."

I don't know what I do to deserve such praise, but I sure do like it, and I'm glad people think it. It reminds me that I'm doing at least something right, and that people like my classes and like me as a human being and want to keep learning with me. As a dance teacher, you're more than selling a teaching product: you're selling yourself, the unique classroom experience you create, the environment you form in the classes and at the dances, and that has a lot to do with you as a person. 

After the workshop, I had the great pleasure of joining the students for bangers and mash. (For all you 'mericans, that means sausages, mashed potatoes, and vegetables.) I have actually avoided such a dish for many years, since the name "bangers and mash" has a certain repulsive sound to it (possibly because "bangers" means something very different in the US?), but I'm glad I was roped into it this time. The food was delicious and high quality, much more than your average pork sausage: I was dining on pidgeon and peri peri chicken and spicy venison sausages. Not at all the unappetizing, unidentifiable meat product accompanied by bland potatoes and over-steamed peas that I envisioned. Amazing. 


A belly full of food, I managed to squeeze in a 1.5 hour nap at the pub before joining the group for more dancing and partying. We rolled along until 3am with a cozy house party, a wonderful atmosphere for socializing and dancing. 

There were a few moments when I would be saying something to one person, and I'd realize that everyone else in the room was listening to me. This happens from time to time in scenes, with no particular consistency, where I am the center of attention and people unabashedly give it. For a person whom is at home in front of a classroom of 70 students, I am bizarrely shy in social settings. Deep down inside, I'm an introvert, and I don't usually speak up in group environments, often because my comm lag is so long I never have the chance to get in a word edgewise. So these moments, when I realize everyone is looking at me and paying close attention to my every word, sends a flash of embarrassment and an urge to stop talking immediately and once again fade into the background. I need to get used to it. There should be workshops where people can practice not being shy in a structured way, but without the usual crutch of dance. 

The next day, I was treated to even more dancing -- three hours of fantastic Balboa dancing, as I happened to visit during their monthly dance. The level of their dancing is fantastic, and especially surprising given the small community size. After 1.5 hours of walking to and fro, plus three hours of furious footwork, my dogs were barkin'. Of course, Oxford is a real delight to walk through in the summertime, and I was treated to an amusing sight along the way home.


(In case it's unclear due to the low contrast, look closely at the statues.)

I bumped into a former dance student from Stanford, whom is coincidentally studying at Oxford for the semester. It was fantastic to catch up. I am always interested to talk with people who know me from specific and different phases of life -- such as graduate school -- because they serve as an excellent reference point. I can see the crazy amount I have changed over the course of one or two years. Also, we had amazing Thai food and followed it up with ice cream. I treated myself to a brownie sundae with in-house oreo ice cream. Such decadence! It was fun in the moment, though my body was quite cranky with the sugar rush that followed. 


Although it's been a full week, the time has gone quickly. Tomorrow I depart for Bristol. It's been a lovely time here in Oxford, yet again. Thanks for everything.

Friday, May 30, 2014

I made something (kind of) useful!

I made something (kinda) useful and put it on GitHub! Look look!

It's an implementation in C++ of the disjoint-set forest data structure. Building it for my specific purpose was fairly easy; abstracting it into template form and removing use of the Stanford library (namely, the HashMap) took AGES. I gained a lot of appreciation for how the Stanford libraries reduce C++ complexity so students can focus on learning objectives and not get lost in the esoteric details.

Any feedback on my implementation is very welcome.

Thursday, May 29, 2014

Trailblazer (final assignment in CS106B).

Wrapping up my final assignment in CS106B, Programming Abstractions in C++. I've enjoyed this class immensely and has given me a much stronger working knowledge of programming. It's amazing what you can do when you know how to think about data!

The last assignment is called Trailblazer. It focuses on two sections: 1) pathfinding, and 2) maze building.


I was tasked with implementing Dijkstra's algorithm. It's an algorithm that finds the shortest path from one node to another by searching along a graph. It takes an unvisited node with shortest distance, calculates the distance to neighboring nodes by following the path through it, and updates the distance to those nodes if they are smaller than before. Here's a handy animation.


Source: Wikipedia article.

As is typical for the introductory CS courses at Stanford, we are not simply asked to merely code the algorithm. Instead, we must implement it as part of a grander task. In this case, they provide us with a start program that generates a random terrain with variable elevation. (White regions are mountains, dark regions are valleys.)


We were to use Dijkstra's search to find the shortest path. The "cost" of the path is evaluated based upon a provided cost function that considers elevation change and whether it's moving cardinally or diagonally. We also color the cells that are queued and then visited, to see how Dijkstra's algorithm progresses. The end result is quite visually interesting. On a relatively flat playing field, it becomes clear how Dijkstra's is (essentially) a breadth-first search algorithm.


It can also be used to solve mazes.


Dijkstra's algorithm clearly lacks a broad understanding of the problem, as with the terrain search. It expands all the way outward in every direction, worried that maybe some other path with a shorter distance just might happen to be the end node. The algorithm can be augmented with a form of "intelligence," a heuristic that helps it to prioritize nodes that get closer to the end node. Such heuristic functions may be something as simple as the distance "as the crow flies" from the intermediate node to the end node. With such a heuristic, steps along a path leading toward the end node can be prioritized over nodes a short distance away but in the wrong direction because they are given a lesser candidate distance. 

The augmented algorithm, called A* search, clearly performs better.


Of course, it doesn't always work perfectly. 


And on the terrain…


My favorite aspect of this last animation: the way it shoots out tendrils on its path toward the end node. It clearly is "seeking" toward the end point, it has a guess as to where it might be located. 

Gorey implementation details for the programming-literate:

- Wanting more practice with structs and pointers, I created a struct Node to track whether the node has been visited, the distance associated with the node, and the parent node (not a pointer, just a Location). This setup had the added benefit to not have multiple data structures that each stored one piece of data (e.g. node -> distance, or Set<node> of visited nodes, etc.).

- A Map<Loc, Node*> parent map that used a node (Loc) as the key and pointed to the parent Node.

- Once the end node is processed, the parent map is flattened and its path reversed (because a parent map traces from end to beginning, it must be reversed to reveal the path from beginning to end). 

I was less satisfied with my implementation here. Upon reflection, I don't think pointers were necessary. I'm so accustomed now to only using pointers to refer to my arbitrarily created structs, that it feels foreign to use them as a regular type. I could have made the parentMap as Map<Loc, Node> and it would've worked just fine, I think.

For some reason, the algorithm bogs down in the final stages and slow dramatically more than the demo version provided by Stanford. Not quite sure what's going on there. I tried implementing using HashMap instead of Map to get O(1) access to the nodes, but that made no difference.

I was pleased with my insight to try out storing all my information in one place with a struct. This approach has not been strongly emphasized through the course, but I think it's a handy tool.



The second portion of the assignment was to implement an algorithm that generates mazes. We used Kruskal's minimum spanning tree algorithm. Given a graph of nodes and edges with associated weights (e.g. distance), a "minimum spanning tree" is a tree that connects all the nodes with the lowest cost.

Kruskal's algorithm is crafty. It starts with setting each node to be in a separate cluster. Edges are viewed in order of priority, i.e. least cost. If the edge has two nodes in separate clusters, the clusters are merged and the edge added to the resulting tree. In this way, cycles are avoided: a cluster means the nodes are connected, so adding an edge to two nodes within the same cluster would create a loop.


For example, if you take a grid graph and assign random weights to the edges:


Kruskal's algorithm produces this result. (Actually, there's an error here: the edge "4" between columns 2 and 3 should be included, instead of "6.")


The neat thing about minimum spanning trees of a grid graph is that they can be used to generate a maze. The edges are inverted and become the "solution" or path through the maze that connects all the nodes together.


Results from my program aren't anything you haven't seen already; it just allows me to generate mazes at random.

For the programming inclined, here's some more gorey details about my implementation.

- Edges were tracked using Sets. Edges are a type defined as having a start node and an end node (neither were pointers). 

- The cluster a node belongs to is tracked with a HashMap<node, int>.

- The nodes a cluster contains is tracked with a HashMap<int, HashSet<node> >.

- Merge was a simple process of taking the union of sets, and deleting the excess entry from the HashMap.

This implementation leans on data structures presented on class, namely the HashMap, HashSet, and Set. I have also been pointed to the Union Find datastructure, which will be my next extension to keep learning.

Saturday, May 24, 2014

A rare opportunity, a new adventure, a return to San Francisco.

Einstein once said, "Time exists so everything doesn't happen at once." I think he got it wrong, and I submit as evidence the past several days of my life. It has been a rollercoaster of emotions, the result from a confluence of several events that have challenged my groundedness to the breaking point. While all the threads are too much to follow in detail, I will focus on one that has been the source of greatest fluctuation.

On Wednesday evening, I received an offer for a summer sustainable engineering internship in San Francisco. This offer was the result of 30+ hours to assemble an entirely new cover letter, resume, and interview prep in response to a job announcement that floated through my inbox. Stanford is pretty good for that -- you receive a steady flow of job and event announcements; if you're smart about fishing in that stream, you can nab some real gems. (That was also how I discovered the internship that took me to Nigeria in 2011.) No doubt competing with many other highly qualified applicants, I somehow rose to the top and caught their eye. It was a major victory.

The question of "What am I doing with my life, really?" comes up at least every other week. Always the tug-of-war between engineering and dance. When I came across this internship, however, the path seemed perfectly clear. This was a job I could get behind with all my spirit, even if it meant some sacrifices in the world of dance. It's been a long time since I've had that feeling. Most of the job searches I've done in the past were honestly half-hearted: applying to construction companies where you're just a cog in the giant machinery of human development, where you can't make a difference really, where 95% of the work you do isn't related to sustainability anyway. 

This internship was a perfect for me. The company performs energy retrofits for existing buildings to make them carbon neutral. They even provide measurement and verification to prove that the building performs as expected. It's a small startup with passionate team members whom want to make a difference. Sounds right up my alley, right? 

The internship involves three main projects: build a database for tracking equipment, research innovative and cutting-edge sustainable building technologies, and revamp the teaching process for incoming engineers. A combination of programming, sustainability, and teaching. What could be a better fit? I have never seen a job opportunity that exercised so many of my diverse skillsets. Further, it was the perfect amount of commitment for me to keep involved with engineering without forsaking future teaching plans. 

The internship was a dream job, exactly what I wanted, and now it was right there in front of me.

There was one catch, however -- a number: my compensation. It was lower than I expected, for various reasons. It dampened the elation over receiving the offer, for now I had to decide if it would still be worth it. Despite the best intentions, the negotiation subsequently broke down and I was informed they would look for another candidate.

It felt like a dope-slap upside the head. I suddenly realized how financial concerns (over a summer internship, no less) caused me to lose sight of the tremendous value this internship offered as an experience. (I'm glossing over a number of details here, for I think it would not be professional to discuss them here.)

I descended into a full-on shame breakdown. My mind buzzed with dark, negative, self-critical thoughts. You've really messed things up now, you're a total failure. Thoroughly dispirited, all my insecurities about my life path surfaced. My stream of thoughts soon turned despairing: you'll never achieve long-term happiness, and you don't deserve it anyway because you're a failure and overly pushy.

As I have mentioned before, I struggle with shame. I am really, really, really good at shaming myself when things go wrong. I have spent the past several months developing awareness and working really hard to deal with it. But, it will always be a battle, and here I lost that battle to maintain a constructive thought stream.

I reached out for help, verbalizing my shame tape. Buoyed by encouraging words, I did not allow all hope to disappear. (And, as it turns out, sometimes all it takes is for another voice to shout back as loudly as my shame tape.) Rallying once more, I finished my night with a final response. I acknowledged my mistake in allowing concerns to estrange me from what I truly valued. I thought asking to reconsider the negotiation might make me look weak, but it was worth a shot. I'd already messed it up, there was no hurt in trying. 

All of the next day passed without word. The quieter moments -- sitting on trains, for example -- brought me back to a similar state of despair. It was fortunate I had a lot of work booked that day (5 hours of teaching in two cities) to keep me busy. When I was teaching, I was fully focused and in the moment. The Lindy workshop in Fribourg went splendidly, working with a wonderful batch of students that were a lot of fun. People were much closer by the end and all had seen dramatic changes in their movement. Everyone was blissed out on the endorphins of dancing and discovering new and better movement. We all went out for food and drinks afterwards. It reminded me of why I absolutely love teaching in small scenes: the intimacy of classes, the passion of the students, the obvious change seen over a workshop, and the eagerness to connect as humans. I went to bed thoroughly exhausted from the day, too tired to hold any longer the mixed emotions.

The following morning, I received a reply at last. Remarking upon my dogged pursuit of my mission, the offer was once again extended to me.

The storm clouds have parted, and the sun is shining bright. Nothing but blue skies ahead. (Figuratively and literally: the weather that day was fantastic in Switzerland.)

I am overwhelmed with gratitude. Gratitude for the universe giving me a second chance. Gratitude for learning an important lesson without suffering the dire consequences. (Even though it turned out alright, I recognize that I made a mistake in that negotiation.) Gratitude for the support I received, being talked through my shame meltdown, being challenged to think constructively and not give up, and being encouraged to write that final email. If not for that support, I would have gone to bed that night a mess, never would have sent that email, and the internship would indeed have been lost.

While I stand by my original opinions, I see the opportunity cost as worth it to me. This internship will be an amazing experience, I will learn a lot and contribute a lot; all in a field that I deeply care about. That is worth a brief stint of living cheaply. (Good thing I have a lot of practice in that regard.)

I do not walk away from the table empty-handed. I have been granted some leniency to work remotely. I also get flexibility for my hard commitments; they are allowing me to stick with most of my summer plans. That means PBEx, Nocturne, MLB Choreography, and Winnipeg are still happening.

It does mean changing soft commitments and shuffling around a lot of flights. I will likely pay ~$1,000-1,500 in change fees / extra airfare to make travel work out. I'm okay with those changes, however. They're expensive both monetarily and experientially, but the benefits certainly outweight the costs.

My internship begins end of June. One month away. In one month, I will be working an internship in San Francisco where I get to leverage my background in sustainable engineering, programming, and teaching. I will be able to do so while still taking time away to teach dance and train, and not give up my fall tour plans for Europe.


Monday, May 12, 2014

Confounded by Huffman. (Consarnit!)

This week, I am finishing up my "coursework" in Stanford's CS106B course. It covers programming abstractions in C++.

I have two more assignments, plus I'll probably tackle some of the section homeworks for additional review.

I am currently working on an Huffman encoding program. Even though I've done this already for my Scala course, writing it again through the imperative paradigm has proven challenging.

The decoding process leaves me stuck. This was how I originally wrote the code.


This approach worked fine for text-only files, but crashed upon decoding a compressed image file. I found this alternative formulation through a repo. (Which was infuriatingly more elegant than my approach.)


This version works fine with image fines. Comparing the two, I'm at a loss for why theirs works and mine does not.

Any thoughts?

Friday, May 9, 2014

Work week.

I have often wondered how a person can put in an 80-hr work week. It sounds insane to me.

This Monday, I received this report from Toggl, my favorite time-tracking platform, about my hours for the previous week.


Huh. So that's what an 80-hr work week looks like.

(In case you're wondering, "Tomato break" are the break times allotted in the Pomodoro Technique. Technically I'm not working, but I count it because the work I do spend is highly focused.) 

My time in Aberdeen has been rejuvenating. With a solid base, I can settle in with tea and my laptop. Day after day, I produce a solid 6-10 productive hours in dance, programming, job searching, and other odds'n'ends. Having a routine is grounding for me. It means I haven't done any sightseeing, but I'm quite okay with that. Putting my nose to the grindstone feels good. It reminds me of being in graduate school, working constantly and always learning.