Touch Typing and Programming


Programmers solve problems and most of the time use a keyboard to do so.

I firmly believe you need to be able to efficiently express yourself through typing. There’s probably nothing more fundamental in programming than being able to think of something and expressing it in code without losing your train of thought.

I say efficiently and not perfectly. You don’t have to be the fastest typist in the  west but speed helps. I could make up a couple of “imagine a surgeon that didn’t know the way around a scalpel” or “a baseball player that didn’t know how to swing” but I wont, you probably get the picture.

I was lucky enough to take typing lessons back in computer class in school. They gave use those orange covers you placed on top of the keyboard to hide all the keys. We’d use this with Mavis Beacon Teaches Typing and some other variation as a fun game. While most people lifted up the cover while the teacher wasn’t looking I just simply dealt with the damn thing and learned how to type instead of hunt and peck typing my way through it.

Before trying to become a great programmer, I suggest spending some time practicing, after all the only way to become a touch typist is through typing quite a lot. Check out:, Mavis Beacon Teaches Typing for

Next you time you go to a programming workshop, you’ll be able to look at whatever the instructor is doing up front while you type, keeping up with everyone just fine.

Juice Box


A month ago I decided to take another stab at proposing a solution to allow all of us to keep working on great programming workshops.

Personally, the biggest headache in each and every one of the workshops that I have organized or participated in is the time and effort it takes to configure and setup the attendees’ computers. This results in attendees and instructors loosing valuable time that can be spent actually sharing knowledge. Various other people have shared the same worries and feelings about this, so might as well try and do something about it.

Juice Box
is virtual machine with a common environment that every workshop attendee can download and use before ever getting to the actual workshop.

What’s installed by default in Juice Box

  • Git
  • Python 2.7 with pip, virtualenv, and virtualenvwrapper
  • io.js with nvm
  • MongoDB
  • Redis
  • PostgreSQL
  • Docker
  • Sublime Text 3
  • Google Chrome
  • Firefox

What this project is trying to accomplish

  • Provide the most simple instructions possible so that attendees at every level can get started easily.
  • Reduce the need of a great network connection during the event.
  • Guarantee that all attendees have the same environment, tools and applications, making the process easier for all.
  • Reuse the same virtual machine between different groups and workshops.


We built OVA files for Juice Box which allows us to simply distribute one file that contains the virtual machine. This file can be imported to VirtualBox with few clicks. We’ll be building and uploading each release so attendees can just download the resulting OVA file.  We’ve optimized the size of this file to achieve the smallest size possible but I’m sure it could be better. It’s smaller than an MP4 movie “shared” on TPB. Organizers might now require attendees to bring their Juice Box already downloaded and imported. Obviously, we might still have users that couldn’t download it, so just have a few USB flash drives with VirtualBox downloads for different operating systems and Juice Box’s OVA file.


Technical workshops shouldn’t be about installing a development environment in Linux, Windows, OS X, or whatever else. Unless that’s what they are about, this takes way to much time from everyone and it’s a pain. I propose that we organize InstallFests, events that are specific to helping users install development environments into their preferred operating system.

Open Source

Juice Box is completely open source under The MIT License and everything used to create the virtual machine is available on GitHub. If you’re a workshop organizer, make sure you “watch” the repository, this way you’ll get notified of new releases.


Go download Juice Box and try it out out. This project might not be the best or correct solution, but it’s a start. Thanks to everyone that has already provided feedback. I’d love keep the conversation going and to have more feedback on this, wether you’re a workshop organizer or usually an attendee.


This project is sponsored by Blimp, a software products design and development agency. Blimp also organizes community workshops like Ember.js Puerto Rico and private trainings.

Logo by Jomarie Alvelo. Website and design by Giovanni Collazo.


Just released v1.2.0! Juice Box now has support for Ruby with RVM.

Mako & Oliver

Three weeks ago today, on an unfortunate accident, Mako my 6 year old Siberian Husky escaped from home, and we noticed just a couple of hours later. After endless hours, driving around different possible routes, talking to people, calling out his name, posting hundreds of flyers, hundreds of people sharing on Facebook and Twitter, we haven’t found him yet.

Mako is more than a dog or pet to me, he’s a loyal friend, and we’ve been through a lot. This past weeks have been eternally tough for us. We’re still looking for him every day, we’re still receiving calls of people who’ve seen similar dogs around, I drive with my windows down in hope of hearing that beautiful distinct howl. We’re hopeful that perhaps a loving and caring family found him, rescued him, and has fallen in love with him. But we’re still not giving up.

While our search continues, we’ve brought along a new addition to the family to help. He’s not a substitute or replacement, nor is he a way to forget. Ana thought he’d be of great company, and surprised me with him. She was right and I’m so glad she did. We’ve name him Oliver. He’s a beautiful, happy, and intelligent 2 month old Miniature Dachshund. We’ve been together for two weeks now, he’s kept us company, brought us happiness and laughter, has helped make everything less bitter. He’s saved us and I love him so much.

In midst of it all, the people that really care about us have shined. I’ll be eternally grateful for everyone that showed support one way or another. And you, Ana, I love you so much, thank you for holding my hand along the way.

PS: Ana shared with me some helping points for when things don’t go your way. Might help you out some day too.

  • Take a step back and evaluate
  • Vent if you have to, but don’t linger on the problem
  • Realize there are others out there facing this too
  • Process your thoughts/emotions
  • Acknowledge your thoughts
  • Give yourself a break
  • Uncover what you’re really upset about
  • See this as an obstacle to be overcome
  • Analyze the situation – Focus on actionable steps
  • Identify how it occurred (so it won’t occur again next time)
  • Realize the situation can be a lot worse
  • Do your best, but don’t kill yourself over it
  • Pick out the learning points from the encounter


Love you bud.

Top 20 Hacker and Designer News 2014

Last year around this same date I started The Hacker and Designer News newsletter as a weekly curated recap of the what I thought were the best articles from Hacker News and Designer News on startups, entrepreneurship, hacks, programming, design, etc. I built and open sourced an aggregator to help me collect posts. I later built using that same aggregator to view the current top posts on both sites side-by-side.

Learned a couple of things from building a newsletter, missed a couple along the way, but definitely looking forward to ramp up subscribers throughout 2015. If you still haven’t, feel free to check out past issues and subscribe.

Check out below the Top 20 Hacker and Designer News for 2014.

The Hacker and Designer News

File Uploads + CORS + IE


Supporting Internet Explorer is always kind of a drag, but sometimes you just have to. Adding to the mixture file uploads via AJAX and CORS only make it that much more fun.

When dealing with AJAX file uploads I always seem to keep going back to jQuery File Upload. Making these file uploads work on IE require fallback to using an iframe, which is supposed to work automatically almost right of the box. I encountered some issues, maybe it was the slack of sleep, reading outdated Stack Overflow answers or simply not understanding the documentation that well.

If the origin domain is different than the file upload server domain, CORS comes into play and there are some known limitations and issues on IE 8 and IE 9. In Internet Explorer 8, the XDomainRequest object was introduced to allow safe AJAX cross-origin requests directly by ensuring that HTTP Responses can only be read by the current page if the data source indicates that the response is public. Responses indicate their willingness to allow cross domain access by including the Access-Control-Allow-Origin HTTP response header with value *, or the exact origin of the calling page.This blog post lists and describes the restrictions and reasoning behind them, but these two are the ones that bit me recently.

  • Only text/plain is supported for the request’s Content-Type header – This means that your API endpoint will have to be adjusted to be able to parse whatever data you send in the request. In my case I was returning a JSON response with an application/json content type, but after figuring this out I had to change the content type of that response to text/plain. On the client side that meant manually parsing the response data as JSON using  $.parseJSON.
  • Requests must be targeted to the same scheme as the hosting page – Once I thought I had everything working I was still getting hit by a couple of errors. Turns out I was generating a request from http to an https endpoint on different domain.
  • The target URL must be accessed using only the HTTP methods GET and POST

Now comes jQuery File Upload into play.

File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.

Cross-domain file uploads on IE 8 and 9 use the Iframe Transport plugin that requires a redirect back to the origin server to retrieve the upload results. The example implementation includes a result.html that works for this. The repository includes the jQuery XDomainRequest Transport plugin which is required to enable cross-domain AJAX requests in IE 8 and 9. Internet Explorer 10 and above supports CORS using XMLHTTPRequest.

The tricky part here for me was ;“requires a redirect back to the origin server”. I had the results.html file in place but nothing was happening. Taking a look at the sample server implementations I noticed that in order for this to work I had to redirect the response to the location of the results.html including the response JSON I would normally return as a response but as a query parameter. The results.html enables jQuery File Upload to access the results from the iframe.

Here are a couple of excerpts that might help understand.

Photo by John Trainor