{"id":1469,"date":"2014-01-27T16:03:39","date_gmt":"2014-01-27T14:03:39","guid":{"rendered":"https:\/\/inlab.fib.upc.edu\/?p=1469"},"modified":"2014-01-27T16:03:39","modified_gmt":"2014-01-27T14:03:39","slug":"meteorjs-getting-started-2","status":"publish","type":"post","link":"https:\/\/inlab.fib.upc.edu\/es\/uncategorized-ca\/meteorjs-getting-started-2","title":{"rendered":"MeteorJS: Getting Started"},"content":{"rendered":"<p>Desde Telef&oacute;nica I+D se nos pidi&oacute;&nbsp;al grupo de&nbsp;<a href=\"http:\/\/inlab.fib.upc.edu\/ca\/ulab-upc\">uLab UPC<\/a>&nbsp;que hici&eacute;semos una prueba de concepto del&nbsp;framework MeteorJS, un vez&nbsp;realizada hemos cre&iacute;do&nbsp;oportuno&nbsp;compartir con vosotros que es y&nbsp;como funciona, ya que se&nbsp;trata de&nbsp;una tecnolog&iacute;a innovadora que puede&nbsp;resultar muy &uacute;til en aplicaciones web que act&uacute;en en tiempo&nbsp;real.<\/p>\n<p><!--more--><\/p>\n<p>Desde Telef&oacute;nica I+D se nos pidi&oacute;&nbsp;al grupo de <a href=\"http:\/\/inlab.fib.upc.edu\/ca\/ulab-upc\">uLab UPC<\/a> que hici&eacute;semos una prueba de concepto del framework MeteorJS, un vez realizada hemos cre&iacute;do&nbsp;oportuno&nbsp;compartir con vosotros que es y&nbsp;como funciona, ya que se&nbsp;trata de&nbsp;una tecnolog&iacute;a innovadora que puede&nbsp;resultar muy &uacute;til en aplicaciones web que act&uacute;en en tiempo&nbsp;real.<\/p>\n<h2 dir=\"ltr\">&iquest;Qu&eacute;&nbsp;es MeteorJS?<\/h2>\n<p dir=\"ltr\">MeteorJS es un framework JavaScript basado en NodeJS que nace con el objetivo de automatizar y simplificar la programaci&oacute;n de aplicaciones web que act&uacute;an en tiempo real. La comunicaci&oacute;n se realiza en tiempo real mediante DDP (Distributed Data Protocol), un protocolo dise&ntilde;ado para trabajar con colecciones de documentos JSON facilitando la creaci&oacute;n, modificaci&oacute;n, eliminaci&oacute;n y visualizaci&oacute;n de este tipo de documentos.<\/p>\n<p>Meteor tambi&eacute;n proporciona dos bases de datos, en el lado del cliente incorpora una cach&eacute; DB y una MongoDB en el lado servidor.<\/p>\n<p>El sistema de plantillas de Meteor est&aacute; dise&ntilde;ado para guardar en qu&eacute; datos se accede desde cada plantilla (HTML) con el fin de actualizar el HTML en cuando los datos son modificados, consiguiendo as&iacute; que las plantillas en tiempo real sean m&aacute;s r&aacute;pidas y simples .<\/p>\n<p>\nEs posible extender las funcionalidades de MeteorJS a trav&eacute;s de un repositorio oficial con distintos paquetes y librer&iacute;as que permiten agregar funcionalidades no existentes en la versi&oacute;n est&aacute;ndar. Dentro del repositorio oficial podemos encontrar por ejemplo librer&iacute;as de JQuery, Twitter Bootstrap, Github entre otros.<\/p>\n<h2>C&oacute;mo crear un proyecto con MeteorJS?<\/h2>\n<p>Para crear un proyecto con MeteorJS es necesario instalar previamente NodeJS, una vez &eacute;ste esta&nbsp;instalado podemos instalar MeteorJS. Aunque puede parecer complicado, con pocas l&iacute;neas tendremos tanto NodeJS como MeteorJS instalados y por lo tanto podremos empezar a desarrollar un proyecto con MeteorJS.<\/p>\n<pre>\r\n&gt; git clone git:\/\/github.com\/ry\/node.git\r\n&gt; cd node\r\n&gt; .\/configure\r\n&gt; make\r\n&gt; sudo make install\r\n&gt; curl https:\/\/install.meteor.com | \/bin\/sh\r\n\r\n<\/pre>\n<p dir=\"ltr\">Para crear un proyecto basta con ejecutar la siguiente l&iacute;nea:<\/p>\n<pre>\r\n<span style=\"white-space: pre-wrap; font-size: 13px; line-height: 1.6em;\">&gt; meteor create namemyapp<\/span><\/pre>\n<p dir=\"ltr\">Este comando nos crear&aacute; la carpeta &quot;namemyapp&quot; con la estructura b&aacute;sica de un proyecto vac&iacute;o, es decir, &nbsp;con los archivos: (namemyapp.js, namemyapp.css y namemyapp.html).<\/p>\n<p dir=\"ltr\">&iexcl;Una vez se han creado los archivos ya podemos empezar a programar!<\/p>\n<div>&nbsp;<\/div>\n<h2>&iquest;Cu&aacute;les son los principales puntos de la programaci&oacute;n con MeteorJS?<\/h2>\n<p dir=\"ltr\">Es recomendable estructurar el proyecto en diferentes archivos HTML (donde cada archivo HTML cargar&aacute; uno o m&aacute;s templates) y diferentes archivos JS (cada template suele tener un &uacute;nico JS aunque es posible compartirlos entre templates, dado que al final &nbsp;Meteor agrega todos los JS en un &uacute;nico).<\/p>\n<p>\nUn ejemplo sencillo es el de un template que quiere mostrar los mensajes de un chat para ello necesitaremos definir una colecci&oacute;n de MongoDB para guardar estos mensajes.<\/p>\n<p><span style=\"color:#8B4513;\"><img decoding=\"async\" class=\" size-full wp-image-1443\" alt=\"\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura1.jpg\" style=\"width: 375px; height: 16px;\" width=\"375\" height=\"16\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura1.jpg 375w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura1-300x13.jpg 300w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura1-370x16.jpg 370w\" sizes=\"(max-width: 375px) 100vw, 375px\" \/> <\/span><\/p>\n<p dir=\"ltr\">Para hacer que cualquier template tenga disponibles distintas variables o colecciones debemos seguir la siguiente estructura:<\/p>\n<pre>\r\n<span style=\"white-space: pre-wrap; font-size: 13px; line-height: 1.6em;\">Template.nombretemplate.nombrevariable = function() {<\/span><\/pre>\n<pre>\r\n    return variable\r\n}\r\n<\/pre>\n<p>Nuestro objetivo es que nuestro template tenga acceso a todos los mensajes guardados en la colecci&oacute;n Messages. Una posibilidad ser&iacute;a la siguiente:<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\" size-full wp-image-1446\" alt=\"\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura2.jpg\" style=\"opacity: 0.9; line-height: 1.6em; width: 394px; height: 65px;\" width=\"259\" height=\"203\" \/><\/p>\n<p dir=\"ltr\">Ahora ya podemos pasar a desarrollar el Template que mostrar&aacute; los mensajes.<\/p>\n<p dir=\"ltr\">Dentro del HTML del template todas las variables a las que tiene acceso un template podemos pintar siguiendo el siguiente formato:<\/p>\n<div>&nbsp;<\/div>\n<pre>\r\n<span style=\"white-space: pre-wrap; font-size: 13px; line-height: 1.6em;\">{{nombrevariable}}<\/span><\/pre>\n<p dir=\"ltr\" style=\"line-height:1.15;margin-top:0pt;margin-bottom:0pt;\">&nbsp;<\/p>\n<p dir=\"ltr\">Aunque si la variable en cuesti&oacute;n es un conjunto de elementos, como es nuestro caso, debemos realizar un foreach que con Meteor se realiza as&iacute;:<\/p>\n<div>&nbsp;<\/div>\n<pre>\r\n<span style=\"white-space: pre-wrap; font-size: 13px; line-height: 1.6em;\">{{#each nombreconjunto}}<\/span>\r\n\r\n            {{nomnrevariable}}\r\n            {{nombrevariable2}}\r\n            {{nombrevariable3}}\r\n            &hellip;\r\n{{\/each}}\r\n<\/pre>\n<pre>\r\n&nbsp;<\/pre>\n<p><img decoding=\"async\" class=\" size-full wp-image-1449\" alt=\"\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura3.jpg\" style=\"width: 548px; height: 354px;\" width=\"503\" height=\"300\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura3.jpg 503w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura3-300x179.jpg 300w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura3-370x221.jpg 370w\" sizes=\"(max-width: 503px) 100vw, 503px\" \/><\/p>\n<p dir=\"ltr\">El &uacute;ltimo paso es el de poder insertar mensajes, para conseguirlo tenemos que utilizar eventos, Meteor.<\/p>\n<p dir=\"ltr\">La siguiente estructura permite indicarle a un template qu&eacute; eventos tiene asociados.<\/p>\n<div>&nbsp;<\/div>\n<pre>\r\n<span style=\"white-space: pre-wrap; font-size: 13px; line-height: 1.6em;\">Template.nombretemplate.events({<\/span>\r\n\r\n         &lsquo;tipusevent tag.class\/id&rsquo; : function () {\r\n               &hellip;.\r\n         }\r\n});\r\n<\/pre>\n<p>Donde tipo evento puede ser cualquiera de los eventos disponibles en JavaScript como por ejemplo click, blur o keypress.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-1452\" alt=\"\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura4.jpg\" style=\"width: 523px; height: 265px;\" width=\"500\" height=\"135\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura4.jpg 500w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura4-300x81.jpg 300w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura4-370x100.jpg 370w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/p>\n<h2 dir=\"ltr\">&iquest;C&oacute;mo iniciar el servidor Meteor y ver nuestra aplicaci&oacute;n?<\/h2>\n<p>Para poder ver el resultado de nuestra aplicaci&oacute;n debemos inicializar el servidor de Meteor y los servidores de MongoDB. Para ello accedemos a la carpeta de nuestro proyecto desde la consola y ejecutamos la siguiente l&iacute;nea:<\/p>\n<pre>\r\n&gt; meteor\r\n<\/pre>\n<p dir=\"ltr\">Con esta instrucci&oacute;n se inicializa el Meteor y MongoDB en el puerto 3000 del localhost.<\/p>\n<p><span id=\"docs-internal-guid-72f0be3d-d468-b898-2025-3ea1eb7ccffa\"><span style=\"font-size: 15px; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; vertical-align: baseline; white-space: pre-wrap;\">Si accedemos desde un navegador podremos ver nue<\/span><\/span><span style=\"background-color: transparent; color: rgb(0, 0, 0); font-family: Arial; font-size: 15px; white-space: pre-wrap; line-height: 1.6em;\">stra aplicaci&oacute;n:<\/span><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-1455\" alt=\"\" src=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura5.jpg\" style=\"line-height: 1.6em; opacity: 0.9; width: 497px; height: 196px;\" width=\"576\" height=\"234\" srcset=\"https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura5.jpg 576w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura5-300x122.jpg 300w, https:\/\/inlab.fib.upc.edu\/wp-content\/uploads\/2014\/01\/captura5-370x150.jpg 370w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/p>\n<h2>Conclusiones<\/h2>\n<p>Aunque MeteorJS es una tecnolog&iacute;a v&aacute;lida para aplicaciones que funcionan en tiempo real, no todo son ventajas. En concreto queremos destacar el principal inconveniente con el que nos&nbsp; hemos encontrado: la baja seguridad que ofrece. En el caso que estemos desarrollando una aplicaci&oacute;n segura es conveniente poner la colecciones que contienen datos sensibles en el lado del servidor, hecho que implica perder para estos datos la principal funcionalidad de MeteorJS que es la actualizaci&oacute;n instant&aacute;nea de los datos a la parte del cliente. No obstante eso, todav&iacute;a podemos hacer que la parte servidora actualizar el cliente cuando hay una modificaci&oacute;n. En este caso aparece un problema de latencia que no tiene una soluci&oacute;n trivial.<\/p>\n<p>A pesar de este inconveniente, debemos tener en cuenta que la &uacute;ltima versi&oacute;n disponible de MeteorJS es la 0.7 y todav&iacute;a est&aacute; en fase de desarrollo. Por lo tanto creemos que MeteorJS tiene mucho potencial siempre y cuando consigan solucionar estos problemas.<\/p>\n<h2>Workshop realizado en l&#39;inLab<\/h2>\n<p><iframe frameborder=\"0\" height=\"400\" marginheight=\"0\" marginwidth=\"0\" scrolling=\"no\" src=\"http:\/\/www.slideshare.net\/slideshow\/embed_code\/30663446\" width=\"550\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desde Telef&oacute;nica I+D se nos pidi&oacute;&nbsp;al grupo de&nbsp;uLab UPC&nbsp;que hici&eacute;semos una prueba de concepto del&nbsp;framework MeteorJS, un vez&nbsp;realizada hemos cre&iacute;do&nbsp;oportuno&nbsp;compartir con vosotros que es y&nbsp;como funciona, ya que se&nbsp;trata de&nbsp;una tecnolog&iacute;a innovadora que puede&nbsp;resultar muy &uacute;til en aplicaciones web que act&uacute;en en tiempo&nbsp;real.<\/p>\n","protected":false},"author":594,"featured_media":1440,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"experteses":[],"class_list":["post-1469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-ca"],"acf":[],"_links":{"self":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts\/1469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/users\/594"}],"replies":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/comments?post=1469"}],"version-history":[{"count":0,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/posts\/1469\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/media\/1440"}],"wp:attachment":[{"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/media?parent=1469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/categories?post=1469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/tags?post=1469"},{"taxonomy":"experteses","embeddable":true,"href":"https:\/\/inlab.fib.upc.edu\/es\/wp-json\/wp\/v2\/experteses?post=1469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}