Gabo Esquivel - Javascript Engineer Javascript Developer and Web Technology Consultant.

Get Started With Command Line and Z Shell

A quick introduction… To develop a web application tooling and workflow are very important. Taking the time to learn and master command line is not only highly recommended but it is required to make use of tools that will help you develop faster and gain more control of your workflow.

This post summarizes what you need to know to get going with command line as well sharing some personal recommendations on the setup of the command prompt on MAC OS X, but it applies to *nix as well.

What is a Shell?

The Shell is an application that offers interactive console or terminal access to a computer system. It lets you interact with applications on your computer through command line. A command-line interface (CLI) is a mechanism for interacting with a computer operating system or software by typing commands to perform specific tasks, a command-line interpreter then receives, parses, and executes the requested user command.

Most operating systems offer a command line interface, but that doesn’t mean the built-in version is best. MAC OS X comes with Terminal, however there’s a terminal emulator for Mac OS X that is more customizable and does amazing things out-of-the-box, it’s called iTerm. If you are using a windows machine I’d recommend you installing cygwin.

In order to use the command line prompt you will need to memorize commands. Start with the basic system commands, once you mastered that you’ll catch up quickly with other tools such as gulp.js.

Introduction to Gulp.js – Code Over Configuration

Automation of repetitive and critical tasks is key to develop a successful software product. Automated tasks will minimize software cost, reduce software delivery time as well as improving the product quality and reduce human error. Investing time in automating tasks will allow you to focus on developing features.

“War is of vital importance to the state; hence it is a subject of inquiry which can on no account be neglected”
– Sun Tzu, Art of War

In this post I will introduce you to Gulp.js, a javascript task runner that helps you automate your development process.

Setting Up your Web App Build System

When developing modern web applications there are critical tasks you want to automate:

  • testing: code linting, unit testing, e2e tests
  • css preprocessing ( sass, less, …)
  • optimization: concatenating and minifying css and scripts, compressing new or modified images, …
  • deploying updates to a staging or production server

There are many tools that will help you automate these tasks. Which one to choose? Grunt, Gulp, Brunch, Broccoli,…

Back in 2012 Grunt.js came out and it was quickly adopted by the community, plugins started to proliferate and it became king for task automation on the client side, playing well with Bower and Yeoman. Like many other developers I’ve been using Grunt on my projects and it gets the job done but recently I started to use Gulp, another open source project with faster build times and a Unix/Node philosophical approach to solve problems.

Gulp.js focuses on code over configuration. By harnessing the power of Node streams, it enables faster build times by avoiding the need to write temporary files to disk. This is one of the main differences with Grunt. Stream instances are basically Unix pipes. They can be readable, writable or both and are easy to reason about — you can pipe a readable stream to a writable stream by doing readableStream.pipe(writableStream).

“Streams come to us from the earliest days of unix and have proven themselves over the decades as a dependable way to compose large systems out of small components that do one thing well.
You can then plug the output of one stream to the input of another and use libraries that operate abstractly on streams to institute higher-level flow control.”

– substack

Overview of Angular Generators – April 2014

This is a short and opinionated review of the AngularJS generators on npm as of April 19th, 2014.

There are a lot of generators on npm and it’s a little hard to decide which one to use or fork, since we don’t want to reinvent the wheel. Currently the only way to compare them is to try them one by one and that’s a very time consuming task. In this post I’ll try to give you an overview of some generators I’ve explored recently hoping it will save you some time. I’ll follow Cliff Meyer’s Code Organization Categorization to describe their code structure.

Most generators still use the “Sock Drawer” directory organization, an approach that I personally avoid, it doesn’t scale well but it works for small projects. I prefer a modular structure as suggested on latest Google’s Best Practice Recommendations for Angular App Structure.

Some of the benefits of modularization are:

Encapsulation: Code, styles and tests related to specific feature will be contained on the same directory.
Context: Code lives in given context by feature. This is specially important to developers new to the application, who will find it easier to connect the dots.
Code Reusabilty: You would be able to reuse modules across projects and clients, Eg mobile and web-client could share autentication modules or resources ( models ).

Here’s a list of Angular generators and their characteristics (some of them are fullstack generators):

Developing Software in Paradise, Aka Costa Rica

Coming back to Costa Rica and enjoy my country while working on software applications is one of the best decisions I ever made. Check out these pictures I took with my phone at Playa Manzanillo, near to Santa Teresa – Mal País, a natural paradise with world class surfing that ranks among the most beautiful beaches of Costa Rica and you’ll agree is the best place to live or invest in the country.

playa-manazanillo-sunset vacas-playa-manzanillo playa-manzanillo-reef rocks-playa-manzanillo

Santa Teresa was recently awarded by Trip Advisor as the #1 highest-rated travel location in all of both Central and South America. Malpais and Montezuma both have many of the best restaurants in the entire country, since many international chefs have moved to the area. The area is also a major center of Costa Rica Yoga with over a dozen places to learn/practice and many yoga retreats and surf+yoga retreat combinations.

Elion Chin, co-founder of MoodLogic – one of the first online music recommendation systems, is leading Silicon Beach a forum for entrepreneurs & people looking to invest in, work at, advise or network with startups in Costa Rica to promote the technology talent of Costa Rica and drive the start-up culture in a fulfilling and healthy environment to deliver the best.

Silicon Beach Costa Rica

#Hack4Good in Costa Rica

Hack4Good is global hackathon that gathers the worlds greatest expert engineers, designers, product builders and entrepreneurs for 48 hours to develop applications for helping humanity. Themes will include hacking to help: environment, disaster and emergency solutions, education and learning, workplace and jobs, poverty and hunger.

There will be prizes, of course, both locally and globally, but the biggest prize will be the reward of helping make the world a better place together.

The event will take place on October 4th-6th in multiple cities: San Francisco, San Diego, Los Angeles, New York, Philadelphia, Paris, Londres, Berlín, Moscú, Tel Aviv, Santiago, Cincinnati, Minsk, Kazan, Kathmandu, Topi, New Delhi and San José, Costa Rica.

The hackathon starts on Friday at 04:00pm and ends on Sunday at 05:00pm, at 6:30pm winners will be announced.

The location will be published soon. You can register at for joining us at the Costa Rica location or for participating online.

See you there !

Choosing the Database for Your Web App

When choosing a database for your application, you need ask yourself many questions and there are important rules about Data Architecture

  • there’s no standard solution that fits all
  • the business and it’s data defines the architecture
  • you need to find the right tool that does job
  • you can use multiple databases, different types depending on the characteristics of each data subset


It is very important to decide carefully, after your application grown it could be very difficult to change. The CAP theorem, also known as Brewer’s theorem, states that it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees:

  • Consistency (all nodes see the same data at the same time)
  • Availability (a guarantee that every request receives a response about whether it was successful or failed)
  • Partition tolerance (the system continues to operate despite arbitrary message loss or failure of part of the system)
CAP Theorem - Venn Diagram

Once you have defined which of those guarantees is less important for your app and can be sacrificed, you have a smaller subset of options to choose from. However this not the only thing you need to consider, you may want to use a specific framework such as Hibernate, Spring, Django or WordPress, and take advantage of the of-the-shelf capabilities, in that case you want to use a SQL database.

Data Visualization in Costa Rica

I’m very excited to announce that we’re starting a data visualization meetup group in Costa Rica!

At the last Hack Hackers SJO event I finally had the pleasure to meet Yuri Engelhardt in person after months of exchanging emails and ideas about data visualization in Costa Rica. Yuri is the co-founder of Show Me Data, an annual multidisciplinary course and public event that brings together the University of Amsterdam (UvA) and the Utrecht Graduate School of Visual Art and Design (maHKU) students to get familiar with the world of data visualization.

Over a couple of beers Yuri expressed me his idea of watching and discussing together MOOC videos from his video library, I thought that was really rad! … I´m very interested in data visualization and all the possibilities you have to make the world a better place using these technologies. After the event we exchanged  a couple more emails on the topic and we decided to create a meetup group to bring together all professionals and data visualization enthusiasts to share our knowledge and ideas. That’s how the Costa Rica Data Visualization Group was born.

Data Visualization Costa Rica  is a non-profit professional group that aims to meet monthly to discuss data visualization, data communication, infographics, exploratory data analysis, charts and graphs, perceptual psychology, and more! Our members are data journalists, programmers, data scientists, business intelligence professionals, and others who tell stories with data. Meeting topics will vary and range from tutorials on basic concepts and their applications, to success stories from local practitioners, to discussions of tools, new technologies, and best practices.

AngularJS Learning Resources



AngularJS Best Practices

Miško Hevery discusses the advantages and disadvantages of various design choices when structuring an app in AngularJS, and some of the best practices.

A series of free video tutorials with great content. If you want to learn AngularJS well this is a good starting point. Check out the first video on data binding.

Introduction to Reflection in Javavascript

In English, one of the meanings of reflection is “introspection” : contemplation of one-self. In other words, reflection is the ability of a thing to talk about itself.

In programming languages, the incarnation of this definition appears as follows [BGW93]:
“Reflection is the ability of a program to manipulate as data something representing the state of the program during its own execution. There are two aspects of such manipulation : introspection and intercession. Introspection is the ability for a program to observe and therefore reason about its own state. Intercession is the ability for a program to modify its own execution state or alter its own interpretation or meaning. Both aspects require a mechanism for encoding execution state as data; providing such an encoding is called reification.”

Reflective computational systems allow computations to observe and modify properties of their own behavior. The concept of reflection is best understood by reaching back to the study of self-awareness in artificial intelligence: “Here I am walking down the street in the rain. Since I’m starting to get drenched, I should open my umbrella’‘. This thought fragment reveals a self-awareness of behavior and state, one that leads to a change in that selfsame behavior and state. It would be desirable for computations to avail themselves of these reflective capabilities, examining themselves in order to make use of meta-level information in decisions about what to do next.