Lo esencial es invisible a los ojos: el viaje de un diseñador al mundo del backend
Ignacio Ricci (@ignacioricci)
Gerente de Producto @ Mango
"Mi pequeña aventura aprendiendo a programar en node.js."
Punto de partida
- Buen conocimiento de diseño y HTML/CSS
- Conocimiento básico de JavaScript. (Principalmente a través de jQuery)
- Conocimiento muy básico de backend (WordPress y templating systems de múltiples lenguajes)
- Conocimiento nulo de interactuar con bases de datos


Objetivos
- Comenzar, a mi propio ritmo, a aumentar mi conocimiento en la parte de backend.
- Sea lo que sea que iba a desarrollar, tenía que tener un uso práctico para mí o para Mango.
- Tenía que poder terminar con algo que sea "shippeable". No quería dejar algo por la mitad que nunca iba a terminar usando.
- Quería hacerlo principalmente solo, y solo pedir ayuda en caso de emergencia.


El proyecto
Un framework para generar sitios HTML estáticos que soporte multi-idioma.
Qué
Mi punto de partida era un pequeño "snippet" de código de hace un año que había armado Dan Zajdband.
Cómo (???)
Porque se me hizo muy tedioso hacer cambios en el sitio de Mango y poder trabajar con traductores.
Por qué
Por qué node.js



- Tenía algo de conocimiento en hacer cosas con "vanilla" JavaScript.
- La sintaxis de node.js es la misma que javascript, por lo cual, ya era una cosa menos que aprender.
- Necesitaba un templating system. Ya había trabajado con Jade y me resultaba simple de usar.
- Sabía que quería manejar i18n con JSON, y que tanto Jade como node.js son buenos para manipularlo
Demo
http://ignacioricci.github.io/
lightning-dogs/
Ztat
{
"templates":[
{
"name": "index",
"languages": {
"en": "index",
"es": "index"
}
},
{
"name": "breeds",
"languages": {
"en": "breeds",
"es": "razas"
}
}
],
...
config.json
...,
"use_layout": true,
"default_language": "en",
"base_url": "http://localhost:3000/www/",
"output_dir": "www",
"assets_dir": "images",
"css_dir": "styles/css",
"sass_dir": "styles/scss",
"fonts_dir": "fonts",
"javascript_dir": "js",
"pretty": true
}config.json
img(src="#{assets_dir}hero.jpg", alt="")
.intro
.grid-container.wrap
.grid-column-4-l
h1= hero.title
h2= hero.subtitleindex/template.jade
{
"hero": {
"title": "Dogs",
"subtitle": "Man's best friend"
}
}index/en.json
{
"hero": {
"title": "Perros",
"subtitle": "Los mejores amigos
del hombre"
}
}index/es.json
i18n
each breed in breeds
li.breed
.breed-image
img(src="#{assets_dir
+ breed.image}")
.breed-info
h2= breed.name
p= breed.descriptionbreeds/template.jade
{
"breeds": [
{
"name": "English Bulldog",
"image": "english-bulldog.jpg",
"description": "There is something
about these wrinkly, tubby, squat
puppies that just make humans..."
},
{
"name": "Golden Retriever",
"image": "golden-retriever.jpg",
"description": "There is something
about a Golden puppy that makes
everyone smile. They are..."
}
]
}breeds/en.json
Iteración
if (current_language == 'es') {
// Do something
}
if (current_page == 'about'){
// Do something
}
// Devuelve la URL de la página para el idioma que corresponda
page_link('template_name')Condicionales y funciones
// Compilación manual de única vez
node generator.js
// Compilación automática con detector de cambios (watcher)
node watch.js
/* El compilador no sólo compila templates de Jade,
sino que compila SASS a CSS también :) */Comandos de consola

(a los ponchazos)
Aprendiendo
Prueba y error
StackOverflow
Dan + Guille
~ 20hs

Conclusiones
Confirmé la importancia de una buena documentación. Mis mayores trabas ocurrieron al enfrentarme con documentaciones poco claras. Especialmente siendo "newbie" todavía.
La documentación es clave
Si bien hice algo muy simple, no me resulto tan difícil. Hay que animarse a meter las manos en la masa y probar.
Es gratis, divertido, y realmente no hay nada que perder!
A animarse
Muchas gracias

https://github.com/ignacioricci/ztat/
Lo esencial es invisible a los ojos: el viaje de un diseñador al mundo del backend
By ignacioricci
Lo esencial es invisible a los ojos: el viaje de un diseñador al mundo del backend
- 831