lunes, 27 de julio de 2015

Proyecto Jade-Bootstrap 1: Introducción

Cuando se aprende, especialmente de forma autodidacta es muy fácil perder el rumbo, especialmente si lo que estamos aprendiendo forma parte de un campo muy amplio.  El ¿Merece la pena empezar esto? Es algo muy recurrente, especialmente cuando todavía no se han cerrado otros proyectos o campos, ya que tenemos un tiempo limitado y mucho que aprender.

La tendendencia a dejar las cosas sin acabar

 

Nuestra mente es muy puñetera y uno de los aspectos más problemáticos es que ante la dificultad tiende a buscar otras tareas más placenteras, es lo que se conoce como procrastinación en alguna de sus variantes.

Cuando estamos aprendiendo algo nuevo, especialmente si nos encontramos con algún punto problemático o no nos gusta mucho, tendemos a querer cambiar y buscar otros tareas o estudios que a priori pueden parecer más placenteras.  Los pretextos son variados, pero por lo general acabamos conociendo poco de mucho, algo que en la práctica no es nada recomendable.

¿A qué viene esto?  Pues que en cierta forma esta sensación es la que me ha surgido con este proyecto, ya que tengo abiertos otros 2 similares, el curso de MiriadaX (al que me faltan 2 prácticas por entregar) y el tutorial de codigofacilito (con el que tengo un problema con la API de subir imágenes).  ¿Merece la pena este cambio aunque sea temporal?  Eso me he estado planteando, y si lo estoy haciendo es porque la respuesta es sí.  Ambos proyectos usan Bootstrap y si bien en el caso de MiriadaX ha sido por voluntad propia, creo que este proyecto me servirá para asentar las bases de Express.js a la vez que crear una base de Bootstrap que puede servirme para acelerar y mejorar el proceso de creación tanto del front en los proyectos mencionados como en otros futuros.

¿En qué consiste Jade-Bootstrap?

 

En la actualidad muchos esfuerzos van dedicados a modularizar el desarrollo y a reutilizar el trabajo realizado, iniciativas como los web components o los frameworks son una buena muestra de ello.

La idea de este proyecto es justamente esa, crear una pequeña librería de componentes usando Bootstrap y Jade, de forma que en futuros proyectos pueda reutilizar buena parte del código utilizado aquí, consiguiendo por un lado estructurar los diferentes componentes de forma fácil y con un estilo más propio.

Pero... ¿Por qué usar Jade?  Me gusta la sintaxis limpia y su uso de la indentación como forma de anidar etiquetas, es muy del estilo de Python ¿Y porque Node.js?  Si bien con programas como Prepros podría haber prescindido del backend y limitarme a usar Jade de forma que Prepros se encargara de convertirlo a HTML pero por un lado quería familiarizarme más con Node y Express y por otro quería dejar abierta la posibilidad de creación de componentes de forma dinámica.  Por ejemplo, si queremos crear una tabla determinada tendríamos la estructura base y a partir de ahí habría que modificarla, sin embargo, si introducimos un formulario que nos pida filas, columnas u otros datos podemos crear una lógica para generar esa determinada estructura.

Notas adicionales del proyecto

 

El código del proyecto lo tenéis en mi Github, más concretamente en https://github.com/ShinFDuran/Jade-Bootstrap.  Mi idea es que en cada commit añadir una funcionalidad y salvo en casos muy simples añadir un documento en la carpeta docs donde explicar un poco en más detalle el commit.

Cada cierto tiempo o número de commits, postearé aquí realizando un resumen de los cambios acompañado de algunas opiniones, problemas o ideas que me han ido surgiendo.

domingo, 26 de julio de 2015

¿Qué es un ORM?

Bajo las siglas ORM se oculta las palabras Object-relational mapping, lo que viene a ser intentar un modelo de un objeto que se pueda traducir a una base relacional, aunque actualmente también sirve para bases no relacionales.  Aunque antes de entrar en detalle, una pequeña introducción.

¿Cómo se hacía antes?


Anteriormente... y cuando digo anteriormente, digo hasta hace 1-3 años o incluso actualmente, ya sabéis que la informática y el desarrollo web cambia en muy poco tiempo, se partía de una base de datos determinada como MySQL, PostgreSQL, SQLite,... en función de la base de datos teníamos unas consultas u otras ya que tienen pequeñas diferencias.

El método que se seguía era generar un string con la consulta (este estaba formado por una parte fija y otra variable aunque el resultado final era un string) después "lanzarlo" a la base de datos y ahí controlar si había un error o si lo que nos devolvía era un resultado vacío o no.

Posteriormente, ese resultado debía ser procesado.  Como podéis ver todo esto era un proceso tedioso y no muy eficiente en cuanto al tiempo a decidarle.

¿En qué se diferencia ahora?


Mientras que anteriormente el proceso era más pesado y requería conocimientos de base de datos y dependía tanto del lenguaje de programación como de la base de datos, los ORM lo que pretenden es crear una capa intermedia que nos abstraiga de la base de datos y sea más compatible y fácil de usar.

Ahora, en función del módulo de ORM que usemos Sequelize o Mongoose en Node.js (JavaScript), Eloquent en Laravel (PHP), el ORM de Django (Python), u otros tantos tienen una forma de crear un modelo con una serie de atributos.  Se crea una única vez y tiene una forma muy similar a lo que sería un objeto en ese lenguaje.  Ese modelo servirá para las bases de datos que sean compatibles con el ORM y en lugar de conocer cómo hacer las sentencias hay que conocer los diferentes métodos que nos ofrece.

Dicho de otra forma, permite crearnos una estructura de objetos y métodos fácilmente entendibles abstrayéndonos de las bases de datos a la vez que las hace más portables.

¿Entonces?

 

En la medida de lo posible, salvo que queramos apurar y sea necesario podemos desentendernos totalmente de las bases de datos y su sistema de consultas, al menos en pequeños proyectos, en otros más grandes donde haya que tener en cuenta la eficiencia si es importante saberlo, la elección de índices y estructura de objetos en MongoDB puede cambiar brutalmente la eficiencia si se manejan muchos datos, pero por lo general para esos casos suele ya haber un especialista que se encargue.

En todo caso, lo mejor que podemos hacer, es empezar a utilizarlo lo antes posible.  Pero como ya he dicho dependerá del lenguaje y framework que estéis usando.  Quienes no estén usando uno, mucho están tardando, es como el front-end que no usa un preprocesador para CSS es algo que no tiene sentido si quieres ser bueno y productivo en tu trabajo.

lunes, 20 de julio de 2015

Re-presentación

Como ya comenté hace poco, retomo el desarrollo web y este blog de paso.

No voy a entrar en detalles que ya expuse en su día con más o menos profundidad, por un lado que me llamo Francisco Durán Navarro y que podréis verme en diferentes redes o con ese nombre o con el nick ShinFDuran.  ¿Motivo? El nombre completo es muy largo, quien me haya escrito un correo lo entiende, FDuran está ocupado así que decidí usar ShinFDuran.  ¿Qué es "Shin"? "Shin" es una palabra japonesa que significa "Nuevo", sí... no es muy original... pero me gusta.

Me he propuesto de postear al menos 3 veces por semana, para intentar no dejar esto de lado, lo considero una buena herramienta para obligarme a poner algunas de mis ideas en orden, investigar un poco y que los demás me conozcan y vean mis intereses e inquietudes.

¿De qué voy a hablar?

  • Proyectos en los que estoy trabajando
  • Temas de interés relacionados con el Front-end: Task managers, preprocesadores, performance, cross-browsing,...
  • Temas de interés generales relacionados sobre otros campos, mayormente back-end: Estructura REST, Laravel, Vagrant,...
  • Temas actuales, que aunque no queramos profundizar sí nos vendría bien saber al menos que es: React.js, Material Design, ECMAScript 2015, Go,...
  • Libros/tutoriales recomendados
  • Webs de recursos
  • MOOCs interesantes
  • Salud, productividad,..
Nada más que escribir, veremos a ver si consigo mantener este reto, igualmente, que quiera poner al menos 3 no significa que sean sólo 3, no hay límite superior en cuanto a número de artículos.  Por cierto, sobra decir que considero este mi primer artículo de la semana XD