Usando Atom para Node.js

Node es una plataforma que me gusta para hacer pruebas de concepto, porque con poco código es fácil hacer muchas cosas.

Buscando un editor he empezado a utilizar Atom. Viniendo como vengo de Java, estoy familiarizado con entornos como Eclipse o IDEA de JetBrains, pero me apetecía practicar con algo mas ligero. Vim es otro editor que manejo bien y me gusta, pero no lo veo para esto. Me encanta para editar rápidamente sobre la línea de comando, pero no para desarrollar de forma continua.

Atom es sencillo, es bonito, es abierto, y tiene una comunidad muy rica detrás. No es tan rápido como Sublime y Visual Studio Code, pero me da igual.

En un sistema Linux como Ubuntu la instalación es la habitual con su gestor de paquetes. En la sección Atom Basics del manual de Atom se describen los comandos básicos para desenvolverse en el editor, en caso de duda un “Ctrl+Shift+P” te permite encontrar lo que necesites.

Una de las características de Atom es que es muy personalizable, existe multitud de extensiones disponibles para adaptarlo a tus necesidades. La instalación de estos paquetes se puede hacer con un “apm install <nombre-de-paquete>“.

Las que siguen son las extensiones que he encontrado mas útiles para desarrollar programas en servidor. He ignorado las que tienen que ver con la parte de presentación como autoclose-html, pigment o color-picker.

Las primeras en mi lista son atom-ternjs, node-debugger y script. Para mí son las mas necesarias, y las primeras que he instalado.

atom-ternjs

  • Acostumbrado a trabajar en IDEs como Eclipse algo que busco de forma natural es una utilidad de autocompletado de código y de chequeo de sintaxis. Esto es lo que encuentras en esta extensión. Como indica su documentación, si quieres usarla en tu proyecto, debes añadirle un fichero de configuración para tern donde le puedes indicar como quieres que te ayude.

node-debugger

  • Esta extensión es un depurador para Node con las funciones habituales de inserción de puntos de ruptura, ejecución paso a paso y consulta de pila de llamadas, entre otras.

script

  • Esto es una pequeña maravilla que te permite seleccionar un trozo de código y ejecutarlo en un momento. Algo como https://repl.it/ pero dentro de Atom. Ideal para prototipar una función o para probar con rapidez.

Otro grupo de extensiones que uso son las que me ayudan a editar mas rápidamente, porque visualizo mejor las cosas, o porque llego a ellas mas rápidamente: minimap, open-recent, highlight-selected, file-icons, maximize-panes, fold-lines y tool-bar.

minimap

  • Muestra a la derecha del editor una visión resumida de todo el código contenido en el fichero, permitiendo situarte con mas facilidad. Existen extensiones relacionadas con esta que permiten indicar la posición del cursor en el minimapa.

open-recent

  • En el menú de fichero muestra siempre los ficheros y carpetas que hemos abierto mas recientemente.

highlight-selected y minimap-highlight-selected

  • Al seleccionar una variable o una palabra clave, todas las ocurrencias de las mismas en el fichero aparecen resaltadas.

file-icons

  • Asocia un icono para cada extensión de fichero facilitando encontrar lo que buscas.

maximize-panes

  • Permite maximizar el panel del editor donde estás trabajando sin cerrar el resto de paneles.

fold-lines

  • Permite compactar en una línea distintos bloques de código para facilitar la lectura.

tool-bar

  • Aunque me encanta usar atajos de teclado, mi magia es limitada y necesito de una barra de herramientas como esta. Permite personalizar su contenido.

Y ahora este grupo final de plugins que veo interesantes. Puedo vivir sin ellos pero les he dado una oportunidad: linter, auto-detect-indentation y atom-beautify.

linter y linter-eslint

  • Es una extensión para corrección de código que también se integra en otros entornos de desarrollo. linter es el paquete base que soporta HTML, CSS y JavaScript. linter-eslint es una ampliación sobre el anterior específico para JavaScript y JSX. Como en el caso de tern, para usarlo en tu proyecto debes incluir un fichero de configuración eslint donde puedes detallar, por ejemplo, si se va a programar en JavaScript ES6 o con una versión anterior.

auto-detect-indentation y atom-beautify

  • El primero configura la identación del fichero basado en el contenido que ya tiene, no solo en las settings del editor. El segundo organiza el código para verlo mejor.

Y tras tanta personalización, ¿que pasa si quieres llevártela a otra máquina, quieres compartirla, o simplemente no perderla? Pues usar otra extensión: sync-settings.

syn-settings

  • Permite guardar la personalización realizada en el editor en un gist de GitHub. Hay que tener una cuenta disponible. Para hacer el backup hay que introducir en Atom el token de acceso a GitHub y el ID del gist donde vas a hacerlo. Aquí puedes encontrar la configuración descrita en este post.

En Internet hay muchas páginas mostrando conjuntos de extensiones preferidas para distintos usos. Aquí he compartido las mías.

Las máquinas no dibujan con tiza

Tengo una hija que no tardará mucho en entrar en el cole, así que ya hemos empezado a plantearnos opciones. Una cosa que me llama la atención es la forma en que las escuelas exhiben tecnología como prueba de excelencia, de calidad en la educación: uso de pizarras electrónicas, de tabletas… Creo que nos equivocamos cuando le damos tanto protagonismo a trabajar con los últimos gadgets. Lo importante no son las nuevas maquinitas, sino las nuevas ideas. Los medios materiales son mucho menos importantes que los humanos.

En las empresas pasa algo parecido, tendemos a confiar demasiado en la tecnología. En este caso, nos pasamos automatizando procesos, queremos cuantificar todo y gamificar el comportamiento. Obligamos a las personas a trabajar en rutas bien definidas, digitalizamos los artefactos con los que trabajan, para disminuir costes, para evaluar mejor, para ganar en previsibilidad.

El problema es que cuando nos pasamos, el valor que podemos aportar las personas no para de reducirse. Si nos comportamos como un programa, mejor pongamos una aplicación o un robot, porque estamos malgastando de forma ridícula las cualidades que tenemos. La empresa funcionará bien en el corto plazo, pero perderá los espacios de reflexión y crítica, y también perderá la visión a medio o largo plazo. No habrá un crecimiento “orgánico”, sino quizá, en el mejor de los casos, algún “pelotazo”.

Las funciones de mas valor que puede ofrecer una persona son imposibles de reproducir por un programita, o por millones de líneas de código. Es bastante pobre pretender conducir el trabajo de forma que las personas se comporten como máquinas, al contrario, lo poderoso es saber sacar partido de forma inteligente al valor de la gente. No hay máquina con la visión de conjunto que tiene una persona. Cuando las máquinas puedan hacerlo será porque se habrán vuelto humanas.

Humongous Mongo

Parece ser que el nombre de Mongo DB se deriva del término humongous que viene a significar algo así como “enorme” o “monstruoso”, quizá por su habilidad para tratar grandes cantidades de datos y peticiones. Yo, la primera vez que oí este nombre pensé en el planeta Mongo de los comics de Flash Gordon 😛 Ejemplos de lugares donde se usa Mongo son Foursquare, Bitly o el CERN para almacenar los datos del LHC.

flash-gordon-mapa-mongo

Esta BD open source NoSQL, es de las llamadas “documentales”. En una base de datos relacional cada cliente en una tabla de clientes, tiene siempre los mismos campos, nombre, apellidos, dni… en una BD documental, hoy un cliente de la colección clientes tiene quizá 10 campos, si el mes que viene nos damos cuenta de que los nuevos clientes necesitan 12, no hay problema, simplemente insertamos los nuevos con 12 campos. Es una BD sin un esquema que restrinja (o garantice) una estructura. Más libertad para el usuario, pero también más responsabilidad.

Continue reading Humongous Mongo

¿Por qué el disco que tienes en tu casa no vale para Big Data?

Después de todo, pongamos, 100 millones de registros pueden ser unos 100 GB y caber perfectamente en cualquier disco duro externo. Si, el pequeño que enganchas a tu portátil por USB.

La información que guarda Google de sus usuarios para algunas de sus aplicaciones es del orden de terabytes, pero vamos, eso cabe en la palma de tu mano hoy en día.

Continue reading ¿Por qué el disco que tienes en tu casa no vale para Big Data?

Big Data y HBase

Big Data va de complejidad en los datos con los que trabajamos, de los que queremos extraer valor. No tiene que ver tanto con cantidad como con el número de datos diferentes, con el número de relaciones diferentes… Si tengo un disco de 100GB repleto con 100 películas, pero lo que me preocupa es conocer los títulos o los actores no estoy trabajando con Big Data, por mucho que una película ocupe una barbaridad, solo tengo 100 casos. Otra cosa sería si el disco lo tuviera lleno de 100 millones de registros que tenemos que poder consultar individualmente. A ese tipo de complejidad me refiero.

HBase es un ejemplo de base de datos NoSQL open source pensada para Big Data. Continue reading Big Data y HBase

Mis datos en las nubes

A veces me sorprendo de hasta que punto nos hemos habituado a ceder nuestra información a otros incluso cuando no es necesario.

La razón por la que empecé a usar servicios como Google Reader o el panel de iGoogle era la misma por la que leía el correo electrónico por la web: poder acceder a esta info desde cualquier lado. Mi portátil no era precisamente móvil y con estos servicios, que todavía no sabían que estaban en un lugar llamado nube, podía trabajar de la misma manera desde cualquier sitio, usando un sencillo navegador y sin tener que instalar nada.

Hoy en día usamos todo tipo de servicios sin preguntarnos porqué tenemos que estar dando gratuitamente los datos acerca de nuestro trabajo, nuestros gustos, y nuestra actividad a empresas que en ocasiones solo piensan en explotarlos sin escrúpulos.

Seguro que no es el caso de esta empresa, pero da lo mismo: hace un par de semanas estaba pensando en cambiar mi aplicación de gestión de tareas en mi móvil, Gtasks, por Wunderlist (hay mucho bla, bla, bla sobre ella y quería probarla)… que rápido pasa uno de un servicio a otro… pero ¡vaya! ¿porqué lo hago si ahora las tareas ya viajan conmigo a todas partes en mi móvil? Para acceder a mi lista de tareas no necesito ningún servicio, la lista va conmigo a todas partes, ahora mi móvil es un portátil…

Pero no, hacemos uso del servicio, hacemos de beta-tester de la aplicación y nos tragamos todos los fallos de sincronización que sean necesarios :-). Hay servicios, como las redes sociales, para los que necesitamos de nube centralizada, pero es que ya no nos planteamos otra opción ni siquiera cuando existe.

Creo que la privacidad sigue siendo tan importante como siempre. Ser transparente y abierto no significa tener que perderla. Quizá deberíamos pensar donde nos estamos metiendo sobre todo cuando saltan noticias en plan Big Brother como en el caso de las revelaciones del señor Edward Snowden.