Dec 04
2014

Understanding the Y combinator (in JavaScript)

Recursion and anonymous functions are widely used in modern programming languages. But how does one write an function with no name that calls itself? The Y combinator is the answer to that question.

About a year and a half ago, I discovered a fantastic resource called Nathan’s University. Nathan was an instructor at one of the UC universities and this was basically his own self-produced MOOC. It was an online programming languages course that covered a whirlwind tour of several different languages, a guided path using a Parser Expression Generator to create a subset of scheme, how to create a type system and even a little bit about optimization.

What I just recently remembered was how accessible his explanation of the Y combinator was. First he wrote a simple recursive function in scheme, and then he explained the problem and partially converted it into JavaScript. Here’s a link to the video. (start from 1:46 and watch for ~3 minutes).

I’ve taken the liberty to finish converting the Y combinator and his factorial example into JavaScript:

Why bother? Why not just name the function?

It’s interesting to be able to implement recursion on anonymous functions, but the obvious question is “Why bother? Why not just name the function?” Personally, I do just name the functions. Especially in the case of the factorial function, I can’t see any benefit in using a Y combinator instead of just writing the function on its own in a straight-forward manner. I don’t have experience making any really large programs in scheme or similar languages, so I can’t speak to the possible advantages of this kind of structure when passing around a lot of higher order functions.

Combinators can handle memoization and more

There is something interesting in the case of the fibonacci function, though. By using a slightly different Y combinator-like function, it’s possible to do things like handle memoization inside the combinator! Below is an example that will cache the results of calculations of single function argument functions and use them instead each subsequent time they’re needed. It allows many naively written non-tail recursive functions, including the same fibonacci function from above to still perform well.

Why not just use once()?

The functionality from Ymem above is already included in Underscore.js’s _.once() function, and that’s exactly the tool I’ve been using in JavaScript for the last couple of years. I’m interested in the idea of anonymous recursion. I’d love to see examples from anyone who is experiencing benefits from using it but I haven’t yet.

Posted in Uncategorized | Tagged , , , | 1 Comment
Oct 02
2014

What I learned working at Groupon

Groupon was my first true programming job. I’d worked briefly at a .com way back in the day, and I’d done a variety of tasks at a start-up in Beijing ranging from running human resources to assisting with business development. But Groupon was the first time my entire job was about producing code. Not coincidentally, it was my first job out of Hack Reactor.

Top Silicon Valley tech companies scour the world’s talent

Upon graduating from Hack Reactor, I was interviewing at Google and had interest and even offers from tech start-ups in San Francisco. One area where Groupon stood out was the phenomenal level of in-house JavaScript talent. Google was somewhat of a strange case, since JavaScript is generally a 2nd class citizen amongst their “big four” languages and their code-style guidelines actually prevent what much of the industry would consider idiomatic JavaScript. I’m sure they have amazingly talented front-end devs, but that doesn’t mean that every interviewer will be one.

At most of the start-ups, I would have actually been their deepest JS dev! Not so at Groupon. I was impressed with literally everyone who interviewed me as well the team I ended up working with. Despite having solid understanding of the prototype chain, the keyword this, lexical scoping and object instantiation patterns, my two teammates basically knew more than I did about everything ranging from CSS quirks to convenient CoffeeScript features to Handlebars.js to git workflow and back again! Our team (including the back-end people) included two Chileans, an Argentinian, an Indian and an Australian. I was the only American software engineer on the team.

Mentorship

I wouldn’t say that Groupon had a formal mentorship program, but did end up receiving a good amount. We generally worked on our own things, but my teammate Rodrigo would pair program with me when I got stuck. Even more importantly, literally every pull request I made had to get two thumbs ups (either from teammates or our manager). Consequently, I received quite a bit of feedback that not only caught bugs but also improved working code into more maintainable code. The version control workflow is one that I’ve since taken with me and continue to use today.

It’s great to be on a small team

I had the fortunately experience of being on a tiny team working almost as a start-up within a larger company. When I started at Groupon, pretty much any merchant who wanted to do a deal—even a tiny deal like a yoga class run out of their basement—had to go through our inbound sales team. No wonder the company wasn’t profitable! It was my team’s job to change that.

We were building a self service tool for the lower-end merchants, so they could just go online and create their deal themselves an get it on the site in a mostly automated way (other than fraud checks, etc). When I started I think we were just doing a few deals a week. Over the weeks it grew to 15, 50 and then hundreds of deals per week. We went from being a crazy experiment to something that got major press. I’m very, very proud to have been a part of it. I was clearly the most junior of the three of us working on the front-end, but I still got to see my work make its way to our highly trafficked portal and got to see real results of my efforts.

It’s hard to keep learning as quickly when you stay on one project

The one really hard thing for me at Groupon was that I wasn’t really working on the thing I wanted to be working on. My first choice of roles would have been data engineering, followed by working on their Node.js team and then front-end work would have been third. While studying at Hack Reactor, I certainly had more of an affinity for back-end and algorithm-heavy assignments than I did for those based on front-end frameworks. But, whatever their reasons, Groupon felt the front-end was the best spot for me. I thought Groupon was the best company for me and role was of secondary concern.

In retrospect, this was both right and wrong. Working at Groupon taught me a lot. My team was amazing. But, I was also a bit torn. After many months of working there, I realized moving to a different role would be very difficult and started spending increasing amounts of time at home studying computer science MOOCs. At the peak it was about 25 hours per week. Since the time spent studying MOOCs wasn’t directly related to my day job, there were only occasional synergies from what I learned. It’s possible I’d have been better off working hard to find a company that would let me work on what I wanted to, even at a lower salary. That way I’d have been spending hours a day studying things that directly made me better at my day job.

It will never again be a serious problem that I don’t have a CS degree

At the time I joined Groupon, I had a really hard time getting taken seriously by tech companies. People were always interested in my experience starting and building non tech businesses, in my study of various Asian languages, and so on. But they felt it was a bit much of a gamble to try a thirty-something guy with a degree in Japanese language and literature. I basically got all of my leads from demoing personal projects at tech meet-ups and from showing my then active Github profile to people.

After being hired by Groupon, everything changed. I started getting crazy traffic on my LinkedIn from recruiters all over the country and some outside the country. Pretty much all the huge famous US tech companies reached out to me. I started getting more senior offers from non-famous companies. The difference was truly shocking. Yes, I’ve continued to learn and invest in my skills but there is undeniably herd behavior.

Hackathons are great for tech companies

Groupon’s engineering culture seemed to be in the process of changing for the better when I arrived. The cafeteria quit charging us. The game room seemed to be fuller. And best of all, we started getting to do quarterly hackathons, during which we could work on whatever new Groupon project we wanted. I found the experience a fun change of pace, a good educational experience and a good community building experience. In fact, I formed a friendship from the first company hackathon that extended until I resigned this May. It was good for the company in a shorter-term concrete sense, too. Groupon got useful tools started in every hackathon I saw.

Posted in Uncategorized | Tagged , , , | 3 Comments
Jan 07
2014

Use it or lose it

Visiting the house I grew up in this past holiday season, I had the strangest experience. I found my old notebooks from when I was about 14…and couldn’t understand the contents!

I had been a math prodigy, entering college when I was 13. But, after a couple of years as a good college student left for social reasons to become a pretty mediocre high school student. Over time, I ended up focusing on other things and the math skills deteriorated.

It was a strange experience seeing incomprehensible work written by my own hand and yet, holding the notebook, I could feel some of the warm memories from those adolescent years. I really loved problem solving and I’m not completely sure why I changed my focus to psychology and then foreign languages when I went back to college at the normal age.

Visiting the house I grew up in, I found my old math notebook.

One thing is for sure, though. This stuff sure came to me a lot more easily than foreign languages did and it’s not too late to get back into it.

Posted in Uncategorized | Tagged , , | 2 Comments
Jan 03
2014

Looking back on 2013

2013 was a singular experience.

Entering into the year, I was upbeat but still struggling in a lot of ways. I had faced rejection on nearly every front—countless job interviews, a coding school, and even a love interest. I was living in a tiny room in Chinatown worrying about running out of what was left of my savings while I looked for work.

A that made 2013 all the more amazing! I developed new skills, got better schooling than I had hoped, started a great job, made great new friends and reconnected so many people from my past. It wasn’t just me, either. I also had the chance to see friends succeed on a bigger scale than ever before.

I have huge plans for 2014 and I have nothing but excitement about throwing myself in, heart and soul. It’s a day late to say this but Happy New Year, everyone! Thank you so very much for being my friends, through the ups and downs.

Posted in Uncategorized | Tagged | Leave a comment
Dec 27
2013

Reviews of MOOCs I’ve taken

I’ve spent a lot of time on Massive Online Open Courses (AKA MOOCs). I’ve learned some great things from them, but I’ve also encountered a lot of time-wasting inefficiencies. For the most part, I’ve been taking programming and CS-related MOOCs. There are quite a few I looked at and then bailed on before doing any work, but also quite a few I put work into. Below is a list of the classes I worked on and then a summary of each.

Courses Studied

  1. Software Engineering for SaaS (UC, Berkeley)
  2. Introduction to Systematic Program Design (University of British Columbia)
  3. Discrete Optimization (University of Melbourne)
  4. Coding the Matrix: Linear Algebra through Computer Science Applications (Brown)
  5. Algorithms, Part I (Princeton)
  6. Linear and Integer Programming (CU, Boulder)
  7. Functional Programming Principles in Scala (École Polytechnique Fédérale de Lausanne)
  8. Automata (Stanford)
  9. Principles of Reactive Programming (École Polytechnique Fédérale de Lausanne)
  10. Mathematical Biostatistics Boot Camp 1 (John Hopkins) – In progress
  11. Creative, Serious and Playful Science of Android Apps (UI, Urbana-Champaign) – In progress

Continue reading

Posted in Uncategorized | Tagged , , , | 5 Comments
Dec 17
2013

Self-directed programming and computer science study through MOOCs

Upon starting work as a software engineer at Groupon this April, I noticed that I was an outlier. Pretty much all the engineers I talked to had technical degrees, and a huge number were from one of three sources—Stanford, an Ivy League school or a start-up that Groupon acquired. My particular group was full of crazy-technical Chileans from one of those acquisitions. Needless to say, nobody else had a B.A. in a foreign language like I did. Within my first month on the job I started planning a roadmap to increase my skills to the point where I could shine even among this impressive company.

Education vs schooling

I can’t say I felt intimidated by the formal credentials of my peers. To be completely honest, I was and am a little concerned about credentialism being used to close certain doors, but it’s my belief that such barriers can nearly always be overcome. It’s true that companies tend to be conservative in matters deciding who to let do what work but after a person attains a certain level of mastery, credentials start to fall by the wayside. I learned that first hand when it came to university admissions

Learning foreign languages

I’ve always been a huge fan of education. My feelings about schooling have been mixed. My experiences learning foreign languages have been pretty representative. I took five years of daily French classes and came out of it with barely any communicative skills at all. I could conjugate some verbs and cram vocab for quizzes, but that was about it. In contrast, I never passed a Chinese class more advanced than “intermediate”, but I lived in Taiwan and made a concerted effort at self study for a while. The result was spoken fluency (with a local Taiwanese accent), basic literacy and good enough writing that it was useful for my business. In one case I experienced a schooling success and an educational failure and in the other my scholastic failure was an educational success. With the incredible resources available today, I’m sure self-directed learners can learn Chinese even faster.

And in a lot of ways, language is particularly difficult to learn as a solitary activity. After all, its very nature is social and communicative! Technical studies, such as mathematics and computing should be far easier for the autodidact.

What are MOOCs?

MOOC stands for Massive Open Online Course. There’s a bit of disagreement about what does and doesn’t count as a MOOC, but at least in my mind the gold standards are Coursera, edX, the Khan Academy and MIT’s venerable Open Courseware.

MIT Open Courseware

MIT’s Open Courseware has been around for longer than any other resource listed in this article. In the beginning it was a simple collection of materials used in MIT courses, along with old homework sets and tests. Over time, the school started recording and sharing every lecture of an ever-growing number of additional tools, such as discussion forums. Finally, there are several popular courses which have been bolstered through additional custom created content to better support independent learners.

Despite its age, Open Courseware has some real advantages over other MOOCs. Its material is actual course material that MIT used, so OCS students can be assured that if they’re doing well on the finals for courses they study, they’re attaining world-class skills. Similarly, it’s not too hard to know what courses to take when. MIT’s curriculum is has an explicit structure of classes that are required before taking other classes, just as any other school would. Since everything is open and available at any time, students can take courses in exactly the order that’s most suitable for their learning.

The weaknesses of OCS are that there’s no kind of proof of accomplishment, there are no gamification features to motivate students, and since everyone is studying at a different time, the forums aren’t always that active when people need help.

The Khan Academy

The Khan Academy started as a collection of youtube videos created by its founder, Salman Khan. Most focused on his domains of expertise, mathematics and finance. Each video is about 10 minutes long and covers a given topic, e.g. the Law of Cosines. Since each one is self-contained, it’s very easy to jump to exactly the kind of problem you’re currently interested in learning or reviewing. One area in which the Khan Academy really shines is Salman’s ability to explain topics clearly. He truly is a remarkable teacher. Even though nearly every lecture I watch on other platforms is from an instructor world-famous in their own domain, Salman still stands out in comparison.

More recently, the Khan Academy has built out its K-12 curriculum and turned it into what could be considered an actual “course”. The great videos remain and students who choose to log in can now do practice problems repeatedly. Using the principles of spaced repetition the platform gives students problems to work on at just the times they most need them. There’s also a well-integrated gamification system with badges and points. The higher level materials are still there but seem to have fallen by the wayside. Another thing the Khan Academy does well is its knowledge map of what concepts are prerequisites for other concepts.

Coursera

Started by a couple of Stanford profs, Coursera is modeled fairly closely after actual university courses. Classes have start dates, homework with due dates, tests and occasionally peer-graded homework assignments. The materials for a class generally include short videos of 5-20 minutes, lecture notes and sometimes starting code for computer classes. Students who achieve a high enough grade receive a “statement of accomplishment” PDF, generally signed by the instructor. These certificates hold no value in terms of credit, but they do still serve as some motivator.

The instructors are nearly all world-class, at least in terms of their careers. When I took their class on the Scala programming language, it was taught by none other than Martin Odersky, inventor of the Scala programming language! You can learn machine learning from co-founder Andrew Ng, who happens to be one of the leading researchers and authorities on the topic. You can take a multitude of courses from a multitude of top notch schools and instructors. Another plus is that with due dates, the courses tend to have discussion forums full of people working on the same things. I enjoy the automated grading systems for the CS courses. From what my friends have told me, they’re very similar to those used for actual computer science classes. The videos also have a feature I haven’t seen other platforms adopt yet—periodic pauses with multiple choice questions to make sure you’re following along! I never felt I needed anything like this, but I often find myself getting the questions wrong, rewatching part of the video and then understanding the material much more concretely.

A significant strength of Coursera that shouldn’t be underestimated is its huge and growing library of courses. There are hundreds of English language courses and at least a dozen Chinese language courses right now.

Problems

Coursera is the single platform I’ve invested the most time in, and as a result I’ve also found some drawbacks. The largest one is that the level of rigor in the classes vary quite a bit. For a few courses, such as the one on Recommender Systems, I get the impression that the students of the hosting university were given the exact same assignments. For others, the classes were clearly a very watered down version of what the university offered in its in person class.

The second problem is the nature of the testing-based approach. Since people are trying to earn certificates and Coursera’s business model relies on these certificates being valuable, they have to police cheating via an “honor code” that prevents people from getting help with or helping each other on specific problems. As a result, it’s great when things are going smoothly, but the student has few options other than quitting or inefficiently “grinding” when stuck or getting an error on something they believe is correct. That’s a horrible use of time and doesn’t lead to faster learning for anyone. Adding practice problem sets for each graded homework could help a lot.

The third large problem I’ve seen on Coursera’s platform is that courses often contain unlisted prerequisites and/or significant barriers that derail students from the start. Some courses do a good job of being self-contained. Most non-introductory ones make assumptions about their students’ backgrounds that go far beyond the prereqs listed on the course info page. Still other classes, including Coding the Matrix and, sadly, the flagship course on Machine Learning have had serious technical issues. I saw quite a few people bail on the ML class just because the download instructions for the MacOS version of the required Octave programming language didn’t work!

One thing I’d love to see: a Khan-style knowledge map that shows the actual dependencies from course to course and maps a path to get to a course a student wants to take in such a way that there are no prereq problems. I’d also love to see more standard math courses. As of right now, a search for “differential equations” turns up zero results!

edX

Not long after the initial success of Stanford’s Coursera, MIT and Harvard launched a similar project called edX. Since I’ve written so much about Coursera and am so much more familiar with Coursera, I’ll just highlight the main differences. Nearly everything in the two sections above about Coursera also applies to edX.

Coursera classes are free to take, but it’s a for profit venture. In contrast, edX is entirely a non-profit that survives off of donations. From an end user perspective I haven’t seen a way in which this makes a difference yet. On the plus side for EdX, it has a slightly nicer online system that includes some features for students to track their progress and grades throughout a course. EdX also managed to lure UC Berkeley away from Coursera onto its platform. That’s a pretty big win since they had some of the best MOOC content.

The downside for edX is that there’s hardly any content. A search for current CS courses yields a total of only four results, all of which have been running long enough that a passing grade is impossible to achieve for an entering student. It takes both planning and luck to get an appropriate course when it’s available. Generally edX courses all follow the semester schedule, which is also a downside since most people’s vacations and free time tend to be concentrated right when there are no courses offered!

Summary of MOOCs

There’s a fantastic array of free learning materials online now. It’s more possible than ever before for people without money or credentials to get an absolutely world-class education. Even non-English speakers are beginning to see some free material popping up. That said, every one of the major MOOC players has its flaws and weak points. In general, I’d recommend the following:

  • If you want to learn basic math, use the Khan Academy.
  • If you want the most rigorous education, use MIT’s Open Courseware.
  • If you want a structured course with support, use Coursera (or edX)

I’ll share more about the specific classes and what I encountered in Part II, and my current coursework and plan in Part III (to be published)

Posted in Uncategorized | Tagged , , , , , , | Leave a comment
Nov 04
2013

Strip trailing whitespace every time you save a file in Sublime Text

Wanna get make all your files use spaces for tabs consistently and eliminate trailing whitespace every time you save in sublime? Put this in your user preferences:

I absolutely hate trailing whitespace in any of my code. I used to use a plugin that eliminates it when you hit a predefined keystroke, but this is much more convenient.

Also see: Adding a JS build-system to Sublime

Posted in Uncategorized | Tagged , | Leave a comment
Sep 02
2013

Hack Reactor Review—life at a hacker school

Many prospective students have been emailing me and asking about how various programming boot camps compare. How does Dev Bootcamp compare to Hack Reactor? Where can I find an App Academy review? Should I consider doing Hack Reactor instead of a four year degree at Stanford or Berkeley? Most of all I’ve been asked, “What happened after you finished the program? Could you find a job?”

I’m happy to say that Hack Reactor exceeded my expectations in pretty much every way possible. I learned far more than I ever expected and it was the most intense twelve weeks of my life (Except maybe that time I started a business with no capital in a foreign country).

The curriculum

In the first part of the course, our work was broken up into two day modules (AKA “sprints”). A typical module would start after lunch with a lecture from Marcus, after which we’d break into pairs and work until dinner time. After dinner, we did quick student talks and sometimes a longer talk from an industry expert (these included people from Twitter, Uber, Pinterest, top consultancy shops, framework designers, etc). After that we’d get back to work until at least 8:30pm, though I often stayed much later and so did the instructors helping us. The following day we’d work pretty much straight through on the project, but have a longer lunch break so we could go to the gym or do some other exercise. Then the next morning, Marcus would go over instructive parts of our code with the group, talk to us about what we could have done better and then give us until lunch to refactor it.

About half of these 2-day sprints were very applied. These were things like learning to use Backbone.js to make a web app, making a Node.js server for chat clients or learning enough D3 to make a multiplayer game. The other half of the sprints were much more like what would be found in a traditional computer science course—we implemented hash tables from arrays, we wrote binary search trees, we dug deeply into the famous N-Queens problem and we reimplemented a popular functional toolchain library. Based on my occasional conversations with a meetup-attendee who has graduated of a competing hacker boot camp, I believe Hack Reactor gives students a comparatively strong background in CS. By the end, we had a solid foundation in JavaScript, jQuery, and Node.js as well as experience with multiple frameworks and other two other programming languages—CoffeeScript and Ruby.

Personal Projects and Group Projects

Later in the course we took a few sprints to use what we had learned and build a more substantial personal project. Quite a few of my classmates went far beyond the scope of what had been covered officially in our curriculum. Some did Ruby on Rails projects. One who had really enjoyed our Meteor lessons went all out and made a library other developers could use to add rooms to their apps or games. Another, made Instahood. I designed a scheme-like language, wrote an interpreter and put it into an HTML 5 robot fighting game prototype. WAT? I simply would not have believed myself capable of that before the class, or even up until the moment our teacher Shawn urged me to take on a harder project. If you’re reading this, thanks Shawn!

Towards the end of the class we did even larger, more ambitious group projects in teams of 3-5 students. Some of these have been absolutely epic! My classmates Howard, Coleman, Andreas and Tatiana made an online PVP air hockey game that you control by moving your head. Their project included Node, express, sockets, facial recognition, and a lot of other cool stuff.

Since my graduation, Hack Reactor student projects have only gotten more impressive. Tim, Ruan and John from the jr. class that overlapped with mine, made a supercomputer to challenge the world record for N-Queens and made the front page of wired.com! The following class of hackers had an equally stunning break-out success that earned them an spot on Tech Crunch TV—Reddit Insight.

Interview Preparation

Towards the end of the course, hiring became the main focus for those of us not working on our own start-ups. My classmates and I worked on coding challenges most mornings. We helped prep each other for phone screens and interviews. We shared our experiences, encouraged each other and pushed each other to keep working hard even after months of a brutal schedule.

We got some great coaching from Marcus and the other instructors about how to evaluate job offers, what kinds of things to ask at interviews, how to find a team where we’d have a great learning environment and even some more philosophical conversations about the larger trajectories of our careers and lives, even. At this time, I felt a profound shift in my outlook. For half a year since returning to the US I had been struggling as a contractor, spending a lot of time looking for jobs and even running into difficulties collecting final payments after completing them. Then all of the sudden everything changed.

Hiring Day and Interviews

We had a “hiring day” speed-dating style interview event in which representatives from many different companies came by and interviewed us 5 minutes at a time. My personal project blew them away! A couple even said things to the effect of “We don’t have anything interesting enough for you,” gave up and left. Others lead to in person interviews. At the end, I had interest from Google, a few mid-sized companies, a consultancy and half a dozen start-ups. Disappointingly, I didn’t get any sort of social proof for being a Hack Reactor grad. The school was just too new. Nobody had heard of it. Nobody knew the depth involved in our curriculum. Most people just assumed our program was like Dev Bootcamp or App Academy. And none of that mattered! I had the coding skiils to build things worthy of presenting at local meet-ups and to run the 5 hour interview gauntlet of top-tier Silicon Valley tech companies.

Making a decision

It was a really hard choice with so many great options. In the end, Groupon was the best choice for me. I didn’t really want to leave San Francisco for the south valley but the company size and culture was right in the sweet spot that I was looking for. It offered great benefits and resume plating while still being small enough that I could make a visible difference. Another important thing was being able to use cutting edge technology that exists in the greater tech company ecosystem instead of being siloed on some internal tech stack that I couldn’t talk to anybody about!

The Hack Reactor network

One of the best things about Hack Reactor has nothing to do with web programming. It’s the network of fellow hackers who have invested heavily in 21st century skills and have outsized ambitions in life. Every class has a “late crew” of students who stick around after finishing their sprints, determined to make the most of their 12 weeks just like I was. Now, I know just about all of them. The people whose projects have blown up on wired and tech crunch are friends. Some were students at the same time I was and saw the crazy ride I went through. Others, I met later at social events or even through this blog. One thing is very likely though—when I build a tech start-up, it will be with a cofounder from this network and we’ll probably hire hackers from the new classes.

Masters Classes

It’s still super early days, but alumni and students are starting to form groups and work on other topics only some of us had time to delve into in class. I’m coming back for a machine learning weekend later in the month. There’s a pretty neat compilers class (with an external teacher) coming up soon, too. It’s hard to say where everything is going for sure, but this is an industry where constant learning is a fact of life and I see learning with my fellow HackRs in the future! Heck, I may even be teaching some classes of my own.

Final Thoughts

Choosing Hack Reactor was a huge win for me. My total yearly salary is more than 100k more than it was last year. I have more interesting work and great co-workers. I saw my code live on a huge international site within a week of starting work. The return on the three months I invested on learning how to hack ideas into being has been phenomenal. In retrospect, it was fortunate that I was rejected by App Academy. If I had been accepted into their “free until you’re hired” program, I never would have come to this crazy intense school. It may just be the pain and rejections I went through in 2012 that gave me the desire to really take advantage of the amazing opportunity at Hack Reactor. I’m grateful that the team was able to see past standard filters like pedigree and background to go for a relentlessly determined candidate like I was.

Posted in Uncategorized | Tagged , , , | 7 Comments
Jun 28
2013

The difference between hyphens, en dashes and em dashes

I learned something at work this week that I can’t believe I didn’t pick up during my years as an English teacher—the difference between hyphens, en dashes and em dashes. I guess being a web developer can lead just about anywhere.

Name Example HTML Code
Hyphen
En Dash –
Em Dash —

Hyphens

Hyphens are short or just “normal” dashes. Any standard keyboard will have a key for them. Hyphens are used for joined words.

self-evident, top-notch

En Dashes

En dashes are longer than hyphens. If you have a Mac you can type them by hitting option+dash. En dashes are generally used for ranges.

50–100, A–Z

Em Dashes

Em dashes are very long compared to hyphens. Long ago, typographers named en dashes and em dashes after the widths of the letters N and M. On a Mac you can type em dashes with option+shift+dash. Em dashes can sometimes replace a comma, semi-colon or colon—right here for example. They can also replace parenthesis in parenthetical asides such as the following:

“My great-grandmother—a life-long pianist—used to enjoy that piece.”

Posted in Uncategorized | 2 Comments
Apr 04
2013

Get a visual snapshot of a repo or a person on github

My Hack Reactor group project is finally online! It’s an app for visualizing the activity related to a user or a repo on Github.

Do you contribute by day or night?

Screen Shot 2013-04-04 at 上午9.26.51

What’s the break-down of your Github activity?

Screen Shot 2013-04-04 at 上午9.28.16

Where do open source contributions come from?

Screen Shot 2013-04-04 at 上午9.31.17

Our tech stack

We used Node.js and Express for our server, pulled data from the Github API and stored it in a Mongo database, used Angular.js as our front-end framework and did the data visualization with D3.

Our group

There were three of us on the project — John, Gavin and myself. I kicked off the backend server and database set-up, after which John did the virtually all the backend work. Gavin did most of the Angular and layout, and started the D3 portion of the work, which I finished. We were the only group of three and we actually lost two days to a false start on a different project before pivoting to this one, but I’m pretty satisfied with how it turned out. All in all, we made pretty good progress considering the depth of the tech stack the the limited time.

Try it out!

We’ve put Gitvis online. Give it a try!

Posted in Uncategorized | Tagged , , , , , | Leave a comment