<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>devecoop, autor en FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</title>
	<atom:link href="https://facttic.org.ar/author/devecoop/feed/" rel="self" type="application/rss+xml" />
	<link>https://facttic.org.ar/author/devecoop/</link>
	<description>Bienvenides a FACT[TIC]</description>
	<lastBuildDate>Mon, 16 Jul 2018 20:00:48 +0000</lastBuildDate>
	<language>es-AR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://facttic.org.ar/wp-content/uploads/2017/12/cropped-527197_378387852191736_25088612_n-1-32x32.jpg</url>
	<title>devecoop, autor en FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</title>
	<link>https://facttic.org.ar/author/devecoop/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Devecoop en el Festival Latinoamericano de Instalación de Software Libre – FLISoL</title>
		<link>https://facttic.org.ar/2016/05/31/devecoop-en-el-festival-latinoamericano-de-instalacion-de-software-libre-flisol/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>FLISoL es el evento más importante de Software Libre en Latinoamérica. Desde hace 12 años se realiza en diferentes ciudades de todo el continente. Este año Devecoop participó en las sedes Ciudad de Buenos Aires (organizado por CaFeLUG) y Lanús (organizado por Lanux). Sede CABA En CABA hubo 3 tracks<a class="moretag" href="https://facttic.org.ar/2016/05/31/devecoop-en-el-festival-latinoamericano-de-instalacion-de-software-libre-flisol/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2016/05/31/devecoop-en-el-festival-latinoamericano-de-instalacion-de-software-libre-flisol/">Devecoop en el Festival Latinoamericano de Instalación de Software Libre – FLISoL</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>FLISoL es el evento más importante de Software Libre en Latinoamérica. Desde hace 12 años se realiza en diferentes ciudades de todo el continente.</p>
<p>Este año Devecoop participó en las sedes Ciudad de Buenos Aires (organizado por CaFeLUG) y Lanús (organizado por Lanux).</p>
<h2>Sede CABA</h2>
<p>En CABA hubo 3 tracks simultáneos con 35 charlas para todos los gustos y niveles:</p>
<p>Los que recién arrancaban tenían para elegir temas como Introducción a GNU/Linux, Introducción a la línea de comandos, charlas de ofimática en GNU/Linux entre otras.</p>
<p>También hubo charlas sobre cooperativismo, seguridad informática, administración de sistemas, programación, redes, electrónica, reciclaje de hardware, criptografía, voto electrónico y Software Libre en general.</p>
<p>El cuarto track fue el de las instalaciones propiamente dichas, donde cada persona podía traer su computadora y una persona lo o la ayudaba con el proceso de instalación de alguna versión de GNU/Linux</p>
<p>&nbsp;</p>
<p>Asimismo participaron numerosas comunidades con stands, entre las cuales estaban:</p>
<p>Sysarmy, Devecoop, LinuxChix Argentina, Mozilla Argentina, Chicas Poderosas, Wikipedia, SolAr, GNUTN, Partido Pirata Argentina, Ekospace de Ekoparty, KDE-ar</p>
<p>&nbsp;</p>
<p><a href="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_124915662.jpg"><img decoding="async" alt="Salón de stands e instalaciónes" class="size-large wp-image-220" src="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_124915662-1024x576.jpg" style="height:340px; width:604px" /></a></p>
<p>Salón de stands e instalaciónes</p>
<p><a href="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_141029251.jpg"><img decoding="async" alt="Salón de stands e instalaciónes" class="size-large wp-image-221" src="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_141029251-1024x576.jpg" style="height:340px; width:604px" /></a></p>
<p>Salón de stands e instalaciónes</p>
<p>&nbsp;</p>
<h2>Sede Lanús</h2>
<p>En Lanús Devecoop&nbsp; participó con dos charlas: Introducción al Software Libre y proyectos sencillos con Raspberry Pi.</p>
<p><a href="http://braincoop.devecoop.com/wp-content/uploads/2016/05/803701697_28342.jpg"><img decoding="async" alt="Charla 'Conociendo el mundo del software libre'" class="size-large wp-image-222" src="http://braincoop.devecoop.com/wp-content/uploads/2016/05/803701697_28342-1024x576.jpg" style="height:340px; width:604px" /></a></p>
<p>Charla &#8216;Conociendo el mundo del software libre&#8217; por Juan M. Schillaci</p>
<p>&nbsp;</p>
<p>También hubo charlas de cloud computing y desarrollo con plataformas de hardware abiertas, y un taller de Arduino, donde se repartieron placas de desarrollo y cada participante pudo experimentar y tener su primer contacto con la electrónica.</p>
<p>&nbsp;</p>
<h2>Los números en todo el país:</h2>
<ul>
<li>Sedes : 39</li>
<li>Asistentes: 3925</li>
<li>Disertantes: 258</li>
<li>Instalaciones: 387</li>
</ul>
<p>Desde Devecoop queremos agradecer a organizadores y organizadoras de las diferentes sedes, a todas las comunidades y asistentes por su compromiso en la difusión del Software Libre.</p>
<p><a href="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_112013109_HDR.jpg"><img decoding="async" alt="Pingüino hecho por socios de la cooperativa que luego se sorteó en el evento" class="size-large wp-image-231" src="http://braincoop.devecoop.com/wp-content/uploads/2016/05/IMG_20160423_112013109_HDR-576x1024.jpg" style="height:1024px; width:576px" /></a></p>
<p>Pingüino hecho por socios de la cooperativa que luego se sorteó en el evento</p>
<p>&nbsp;</p>
<p>Para más información sobre el evento http://www.flisol.info/FLISOL2016/Argentina</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2016/05/31/devecoop-en-el-festival-latinoamericano-de-instalacion-de-software-libre-flisol/">Devecoop en el Festival Latinoamericano de Instalación de Software Libre – FLISoL</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Devecoop se prepara para FLISOL 2016 – 12º Festival Latinoamericano de Instalación de Software Libre el 23 de Abril</title>
		<link>https://facttic.org.ar/2016/04/21/devecoop-se-prepara-para-flisol-2016-12o-festival-latinoamericano-de-instalacion-de-software-libre-el-23-de-abril/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>En Devecoop nos preparamos con todo para participar&#160;del&#160;12º FLISOL: Festival Latinoamericano de Instalación de Software Libre el 23 de Abril. Este evento es una gran oportunidad para acercarse al mundo del software libre, o explorarlo aún más, siempre hay más para conocer! Vamos a estar en FLISOL de Capital Federal,<a class="moretag" href="https://facttic.org.ar/2016/04/21/devecoop-se-prepara-para-flisol-2016-12o-festival-latinoamericano-de-instalacion-de-software-libre-el-23-de-abril/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2016/04/21/devecoop-se-prepara-para-flisol-2016-12o-festival-latinoamericano-de-instalacion-de-software-libre-el-23-de-abril/">Devecoop se prepara para FLISOL 2016 – 12º Festival Latinoamericano de Instalación de Software Libre el 23 de Abril</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>En Devecoop nos preparamos con todo para participar&nbsp;del&nbsp;12º <a href="http://www.flisol.info/">FLISOL: Festival Latinoamericano de Instalación de Software Libre</a> el 23 de Abril.</p>
<p>Este evento es una gran oportunidad para acercarse al mundo del software libre, o explorarlo aún más, siempre hay más para conocer!</p>
<p>Vamos a estar en <a href="https://flisol.usla.org.ar/event/caba/">FLISOL de Capital Federal</a>, en el&nbsp;Centro Cultural General San Martín, ubicado en Sarmiento 1551, organizado por <a href="http://www.cafelug.org.ar/">CaFeLUG</a>. También en FLISOL&nbsp;Lanús vamos a estar en &nbsp;la Universidad Nacional de Lanús en 29 de Septiembre y Malabia &#8211; Remedios de Escalada, organizado por <a href="http://www.lanux.org.ar/">Lanux&nbsp;LUG.</a></p>
<p>En FLISOL Lanús <a href="https://github.com/skalanux">Juan Manuel Schillaci</a> de Devecoop dará dos charlas. Una sobre cómo el software libre cambio el mundo en el que vivimos y otra en la que propone “con una raspberry, Python y un poco de hacking podemos divertirnos, aprender y hacer proyectos sencillos e interesantes”.</p>
<p>Muchos de nosotros hemos asistido a otras ediciones del FLISOL, como curiosos, dando charlas o instalando&#8230; y es un gusto esta vez participar con un stand de nuestra empresa cooperativa, Devecoop, en el <a href="https://flisol.usla.org.ar/event/caba/">FLISOL de Capital Federal</a>. Vamos a estar charlando con todos y tenemos regalos!!! Lápices, remeras, stickers, y hasta un Tux artesanal de origami hecho con habilidad, dedicación y espíritu libre por nuestros socios! <img decoding="async" alt=":)" class="wp-smiley" src="http://braincoop.devecoop.com/wp-includes/images/smilies/icon_smile.gif" /></p>
<p><a href="http://braincoop.devecoop.com/wp-content/uploads/2016/04/81d4ad5e-708d-4a07-9ded-4d9dfaa722b7-1.jpg"><img decoding="async" alt="81d4ad5e-708d-4a07-9ded-4d9dfaa722b7 (1)" class="aligncenter size-medium wp-image-203" src="http://braincoop.devecoop.com/wp-content/uploads/2016/04/81d4ad5e-708d-4a07-9ded-4d9dfaa722b7-1-300x169.jpg" style="height:169px; width:300px" /></a> <a href="http://braincoop.devecoop.com/wp-content/uploads/2016/04/86d69377-4031-4c4f-affd-66fed461b7d4.jpg"><img decoding="async" alt="86d69377-4031-4c4f-affd-66fed461b7d4" class="aligncenter size-medium wp-image-204" src="http://braincoop.devecoop.com/wp-content/uploads/2016/04/86d69377-4031-4c4f-affd-66fed461b7d4-300x169.jpg" style="height:169px; width:300px" /></a> Te esperamos!!! &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2016/04/21/devecoop-se-prepara-para-flisol-2016-12o-festival-latinoamericano-de-instalacion-de-software-libre-el-23-de-abril/">Devecoop se prepara para FLISOL 2016 – 12º Festival Latinoamericano de Instalación de Software Libre el 23 de Abril</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Devecoop busca socios!!!</title>
		<link>https://facttic.org.ar/2016/04/21/devecoop-busca-socios/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>¿Soñaste con trabajar sin competir, cooperando por el bien común, junto a verdaderos compañeros organizados democráticamente? ¿Soñaste con tener voz y voto en una empresa propia y colectiva? ¿Sos freelance y buscás más seguridad y crecimiento, sin perder la independencia? ¿Tu futuro está en una empresa tradicional o corporación, pero<a class="moretag" href="https://facttic.org.ar/2016/04/21/devecoop-busca-socios/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2016/04/21/devecoop-busca-socios/">Devecoop busca socios!!!</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p dir="ltr">¿Soñaste con trabajar sin competir, cooperando por el bien común, junto a verdaderos compañeros organizados democráticamente? ¿Soñaste con tener voz y voto en una empresa propia y colectiva? ¿Sos freelance y buscás más seguridad y crecimiento, sin perder la independencia? ¿Tu futuro está en una empresa tradicional o corporación, pero buscás algo más?</p>
<p dir="ltr">En Devecoop somos una Cooperativa de Trabajo, cada uno de nosotros es un socio/a, dueño/a de la empresa. Cooperamos para construir este sueño, compartiendo las ganas, el esfuerzo, éxitos y aprendizajes, el futuro, todo. Somos miembros fundadores de <a href="http://www.facttic.org" target="_blank">FACTTIC</a>, la federación que nuclea a la mayoría de las cooperativas de tecnología del país.</p>
<p>Si sólo querés conocernos, tenemos las puertas abiertas para contarte esta ambiciosa experiencia que es el cooperativismo.</p>
<p dir="ltr">Si crees estar listo para el desafío, estamos buscando a alguien con al menos:</p>
<ul>
<li dir="ltr">
<p dir="ltr">3 años de experiencia en desarrollo de software web.</p>
</li>
<li dir="ltr">
<p dir="ltr">Nivel de idioma inglés Intermedio a Avanzado (escrito u oral).</p>
</li>
<li dir="ltr">
<p dir="ltr">Proactividad, predisposición a nuevos desafíos… de verdad, no es sólo una frase <img decoding="async" alt=":)" class="wp-smiley" src="http://braincoop.devecoop.com/wp-includes/images/smilies/icon_smile.gif" /></p>
</li>
<li dir="ltr">
<p dir="ltr">Habilidad para integrarse y trabajar en un equipo.</p>
</li>
<li dir="ltr">
<p dir="ltr">Ganas de tener algo propio y contribuir a que crezca.</p>
</li>
<li dir="ltr">
<p dir="ltr">Residencia en CABA o alrededores.</p>
</li>
</ul>
<p dir="ltr">Si te identificas con algo de lo siguiente, mejor aún:</p>
<ul>
<li dir="ltr">
<p dir="ltr">Experiencia con Python, Django, o querés aprender.</p>
</li>
<li dir="ltr">
<p dir="ltr">Experiencia con frameworks Javascript (Node, Angular, Backbone).</p>
</li>
<li dir="ltr">
<p dir="ltr">Experiencia como DevOps, deployment, administración de ambientes.</p>
</li>
<li dir="ltr">
<p dir="ltr">Experiencia como PM, liderando equipos de desarrollo, o con metodologías ágiles.</p>
</li>
<li dir="ltr">
<p dir="ltr">Experiencia en análisis de requerimientos, interacción con clientes, presupuestos.</p>
</li>
</ul>
<p>Antes que nada es importante que te motive sumarte a una cooperativa, donde las decisiones sobre el futuro de la empresa son tomadas por cada uno de los socios en asamblea, con todos los desafíos, beneficios y responsabilidades que esto significa.</p>
<p dir="ltr">Podés enviarnos tu CV actualizado a <a href="mailto:socios@devecoop.com" target="_blank">socios@devecoop.com</a>, o pasarle esta propuesta a tus conocidos.</p>
<p>¡¡Te esperamos!!</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2016/04/21/devecoop-busca-socios/">Devecoop busca socios!!!</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Conociendo Loopback – Parte 2.</title>
		<link>https://facttic.org.ar/2016/02/23/conociendo-loopback-parte-2/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>Hola!, en esta edición vamos a agregar otro modelo vía código, ver las relaciones y jugar un poco con los datasources. En la edición anterior habíamos creado un modelo todo con el wizard. Ahora vamos a definir otro modelo llamado category, pero esta vez manualmente, para hacerlo tenemos diferentes formas,<a class="moretag" href="https://facttic.org.ar/2016/02/23/conociendo-loopback-parte-2/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2016/02/23/conociendo-loopback-parte-2/">Conociendo Loopback – Parte 2.</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" alt="Imagen-Devecoop-Loopback" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/Devecoop-Loopback.png" /></p>
<p>Hola!, en esta edición <strong>vamos a agregar otro modelo vía código, ver las relaciones y jugar un poco con los datasources.</strong></p>
<p>En la <a href="http://braincoop.devecoop.com/es/posts/conociendo-loopback-parte-1-2.html">edición anterior</a> habíamos creado un modelo <strong>todo</strong> con el wizard.</p>
<p>Ahora vamos a definir otro modelo llamado <strong>category</strong>, pero <strong>esta vez manualmente</strong>, para hacerlo tenemos diferentes formas, hoy vamos a mostrar dos:</p>
<ol>
<li><strong>vía código.</strong></li>
<li><strong>definiendo el schema en json.</strong></li>
</ol>
<h3>1 &#8211; Definiendo nuestro modelo manualmente vía código</h3>
<p>Como vimos en el post anterior los modelos se extienden por lo general de un modelo base (PersistedModel), por ello tenemos que hacer lo siguiente:</p>
<ol>
<li>Crear un nuevo archivo dentro de la carpeta <strong>boot</strong> (server/boot), <strong>para que se inicialice cuando arranque la aplicación</strong>, por ejemplo create-category.js. Podemos copiar alguna estructura de los otros archivos de esta carpeta.</li>
</ol>
<p>Los scripts que están dentro de esta carpeta “boot” son los archivos que se ejecutaran en orden cuando la aplicación comienza y luego de que se ejecute el bootstrapper (<a href="https://github.com/strongloop/loopback-boot">https://github.com/strongloop/loopback-boot</a>). Los ejemplos más comunes son configuraciones, creaciones de modelos, y de data de ejemplo para desarrollo, entre otros</p>
<h3>Forma 1 &#8211; con herencia.</h3>
<p>Agregando estas lineas creamos el model:</p>
<pre>
  var Model = server.loopback.Model;
  var Category = Model.extend('categories');
</pre>
<p>Se puede ver <a href="https://github.com/Fblind/loopback-todo-example/blob/step-2.0/server/boot/create-category.js">aquí</a> el código</p>
<h3>Forma 2 &#8211; con configuraciones.</h3>
<p>Pero también lo podemos hacer así:</p>
<pre>
  var config = {
      dataSource: 'db',
      public: true
    };
    server.model('Category', config);
</pre>
<p>Se puede ver <a href="https://github.com/Fblind/loopback-todo-example/blob/step-2.1/server/boot/create-category.js">aquí</a> el código. <a href="https://docs.strongloop.com/display/LB/app+class#app-model">Aquí</a> se pueden ver las configuraciones que se pueden aplicar.</p>
<h3>Forma 3.</h3>
<p>O con el metodo createModel:</p>
<pre>
var Category = server.loopback.createModel('Category');
</pre>
<p>Se puede ver <a href="https://github.com/Fblind/loopback-todo-example/blob/step-2.2/server/boot/create-category.js">aquí</a> el código.</p>
<p><strong>Esta es la forma recomendada para crear un modelo manualmente.</strong> Para conocer más sobre este método podemos consultar los <a href="https://apidocs.strongloop.com/loopback/#loopback-createmodel">apidocs</a>.</p>
<p>También les dejo esta <a href="https://groups.google.com/d/msg/loopbackjs/n9JSGPAmSMY/yDEmcOQ1EksJ">respuesta</a> de Raymond Feng, co-founder de Loopback, para que vean lo que dice alguien que sabe mucho del tema sobre estas formas.</p>
<p>Ahora que tenemos nuestro modelo creado, cuando se inicie el server vamos a poder utilizar nuestro modelo creando un archivo al que llamaremos category.js en common/models dejándolo de la siguiente manera:</p>
<pre>
module.exports = function(Category) {
  
};
</pre>
<p>Más adelante vamos a ver que otras cosas podemos hacer acá, por ahora dejémoslo vacío y veamos la otra forma.</p>
<h3>2 &#8211; Definiendo nuestro modelo manualmente vía schema</h3>
<p>Ahora vamos a crear nuestro modelo definiéndolo en un json, en principio tendrá un solo campo nombre.</p>
<p>Creamos category.json dentro de la carpeta common/models</p>
<pre>
  {
    "name": "category",
    "plural": "categories",
    "base": "PersistedModel",
    "idInjection": true,
    "options": {
      "validateUpsert": true
    },
    "properties": {
      "name": {
        "type": "string",
        "required": true
      }
    },
    "validations": [],
    "relations": {},
    "acls": [],
    "methods": []
  }
</pre>
<p>Luego necesitamos crear el category.js al igual que hicimos anteriormente.</p>
<p>Y para terminar de crearlo necesitamos agregarlo en el model-config.json:</p>
<pre>
  "category": {
      "dataSource": "db",
      "public": true
    }
</pre>
<p>Lo que acabamos de hacer lo pueden ver <a href="https://github.com/Fblind/loopback-todo-example/tree/step-2.3">aquí</a>.</p>
<h3>Validaciones</h3>
<p>Se acuerdan que les dije que más adelante íbamos a ver que podemos hacer en el category.js ?, bueno este archivo <strong>se utiliza para darle comportamiento, agregar métodos remotos, hooks, logica, validaciones y demás.</strong></p>
<p>Por ahora vamos a ver que fácil es validar en LoopBack. Como nuestro modelo tiene un nombre solamente queremos que ese nombre no se repita y sea unico para ello solamente agregamos lo siguiente en el category.js:</p>
<pre>
  module.exports = function(Category) {
    Category.validatesUniquenessOf('name', {message: 'el nombre debe ser unico'});
  };
</pre>
<p>El código se puede ver <a href="https://github.com/Fblind/loopback-todo-example/tree/step-3">aquí</a>.</p>
<p>Verán que si ya tenemos agregado por ejemplo “Casa” y queremos agregar “Casa” nos mostrara lo siguiente en el explorer:</p>
<p><img decoding="async" alt="Imagen-Duplicate" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/validacion-es.png" /></p>
<p>Como no quiero ahondar mucho en este tema les dejo un buen <a href="https://docs.strongloop.com/display/public/LB/Validating+model+data">articulo</a> donde se encuentran todos los métodos de validación que vienen con el framework.</p>
<h3>Relaciones</h3>
<p>Bueno hasta acá vimos casi lo mismo que el post anterior, <strong>ahora es donde vienen las cosas nuevas e interesantes.</strong></p>
<p>Lo que queremos lograr con este nuevo modelo es <strong>poder cargar listas de cosas pero a su vez también poder categorizarlas para poder agruparlas, hacer búsquedas, etc.</strong> Por lo que diremos que un todo puede tener cero, uno o más categorías, <strong>el modelo todo tiene una relación con el modelo categoría</strong>.</p>
<p>Con loopback tenemos la posibilidad de definir las relaciones en el json, en este caso vamos a utilizar <strong><a href="https://docs.strongloop.com/display/public/LB/HasAndBelongsToMany+relations">hasAndBelongsToMany</a></strong> ya que un ítem todo puede tener muchas categorías y una categoría puede estar en muchos todo ítems.</p>
<p>Para agregar esta relación lo que debemos hacer es ir al todo.json y agregar lo siguiente:</p>
<pre>
  "relations": {
    "categories": {
      "type": "hasAndBelongsToMany",
      "model": "category"
    }
  }
</pre>
<p><a href="https://docs.strongloop.com/display/public/LB/Creating+model+relations">Aquí</a> se pueden ver todas las posibilidades de relaciones que tenemos entre los modelos.</p>
<p>Veamos un ejemplo:</p>
<p>Primero agreguemos algunas categorías y algunos ítems de todo. Eso es hacer lo mismo que hicimos en la <a href="http://braincoop.devecoop.com/es/posts/conociendo-loopback-parte-1-2.html">edición anterior</a> así que no voy a mostrarlo, en mi caso creé lo siguiente:</p>
<ul>
<li><strong>3 categorias: Casa, Animales, Auto</strong></li>
</ul>
<p><img decoding="async" alt="Imagen-GET-Categories" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Categories-ES.png" /></p>
<ul>
<li><strong>2 ítems: Limpiar el baño, Comprar comida</strong></li>
</ul>
<p><img decoding="async" alt="Imagen-GET-Todo" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Todos-ES.png" /></p>
<p>Ahora como hago para agregarle una categoria al item ?, bueno de la siguiente manera:</p>
<ul>
<li>Haciéndole un PUT al endpoint que cumple esa función /todos/{id}/categories/rel/{fk}. PUT es un metodo HTTP que modifica el objeto en cuestión, <a href="https://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol#M.C3.A9todos_de_petici.C3.B3n">acá</a> les dejo los diferentes verbos que se usan y son utilizados para los servicios REST.</li>
</ul>
<p>Vamos a agregar la categoría “Casa” (fk: id 1 de categoria) a el ítem “Limpiar el baño” (id: id 1 de todo), por lo que esto quedará así:</p>
<p><img decoding="async" alt="Imagen-PUT-Categories-TODO" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/PUT-AgregarCategoriaATODO-es.png" /></p>
<p>Y nos devolverá esto:</p>
<p><img decoding="async" alt="Imagen-PUT-Categories-TODO-Response" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/PUT-AgregarCategoriaATODO-RESPUESTA-es.png" /></p>
<p>Para verificar que se haya agregado la categoría correctamente podemos hacerle un GET a /todos/{id}/categories</p>
<p><img decoding="async" alt="Imagen-GET-Categories-TODO" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Todo-Categories-ES.png" /></p>
<p>Y como vemos nos devolvió “Casa”</p>
<p><img decoding="async" alt="Imagen-GET-Categories-TODO-Response" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Todo-Categories-Response-ES.png" /></p>
<h4>Filtros</h4>
<p>Otra buena característica de Loopback es que tiene varias formas de <a href="https://docs.strongloop.com/display/public/LB/Querying+data">consultar nuestra data</a>, para esta entrega solo vamos a ver en acción uno de los filtros más comunes, el <strong>where filter</strong>:</p>
<p>Como siempre para probar vamos al explorer y juguemos con las categorías que creamos antes: “Casa”, “Animales” y “Auto”.</p>
<p>Entonces ahora si queremos buscar el ítem con el nombre “Casa”, hacemos lo siguiente en el GET de categories:</p>
<p><img decoding="async" alt="Imagen-GET-Categories-TODO-Filter" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Categories-Filter-ES.png" /></p>
<p>Nos aparece los que matchean exactamente con Casa, pero también podemos buscar todos los que comiencen con “A” por ejemplo:</p>
<pre>
{"where" : {"name":{"like":"A"}}}
</pre>
<p>y nos da como resultados los ítems que contienen a “Animales” y “Auto”.</p>
<p><img decoding="async" alt="Imagen-GET-Categories-Filter-Like-Response" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-Categories-Filter-Like-Response-ES.png" /></p>
<p>La misma forma se puede utilizar para todos los modelos, <strong>¿cómo haríamos si queremos obtener la lista de todas las tareas que nos faltan realizar?</strong></p>
<p>Sobre los filtros vamos a ver más en la próxima entrega cuando tengamos integrado el cliente.</p>
<h4>Persistencia</h4>
<p>Vos me dirás “che todo bien con esto, pero cuando bajo el server pierdo todo lo que cargué”. Bueno <strong>la solución a eso es persistir los datos</strong>, Loopback viene con la posibilidad de poder conectarse a las <a href="https://docs.strongloop.com/display/public/LB/Database+connectors">bases de datos</a> más utilizadas. Nosotros vamos a ver un par de ejemplos, mostrando la facilidad para conectar bases noSQL, con MongoDB, y bases relacionales, con MySQL.</p>
<h4>Persistencia con MongoDB</h4>
<p>Vamos a arrancar con la base que más utilizo, MongoDB. Y la conexión la vamos a hacer a través de la CLI.</p>
<p>Antes que todo si no tenemos mongo instalado necesitamos instalarlo con una versión 2.6 o superior, en la <a href="https://www.mongodb.org/downloads#production">página</a> de mongo están los archivos.</p>
<p>Luego ya podemos instalar el conector de mongo, lo hacemos mediante npm:</p>
<pre>
  $ npm install loopback-connector-mongodb --save
</pre>
<p>Una vez instalado vamos a poder agregar nuestro nuevo datasource:</p>
<pre>
  $ slc loopback:datasource
</pre>
<p>Y nos aparecerá el wizard que ya conocemos:</p>
<pre>
? Enter the data-source name: todoMongo
? Select the connector for todoMongo: 
  PostgreSQL (supported by StrongLoop) 
  Oracle (supported by StrongLoop) 
  Microsoft SQL (supported by StrongLoop) 
❯ MongoDB (supported by StrongLoop) 
  SOAP webservices (supported by StrongLoop) 
  REST services (supported by StrongLoop) 
  Neo4j (provided by community) 
(Move up and down to reveal more choices)
</pre>
<p>y listo ahora vamos a ver que es lo que hicimos, aunque es bastante descriptivo:</p>
<ul>
<li><strong>? Enter the data-source name:</strong> Nombre del data source, acá pueden elegir lo que les parezca, en nuestro caso elegimos todoMongo</li>
<li><strong>? Select the connector for todoMongo:</strong> Acá elegimos el conector, en este caso mongoDB, que como ven esta siendo mantenido directamente por strongloop, allí hay muchos más para elegir, hasta la comunidad mantiene algunos !</li>
</ul>
<p>Si vamos al datasources.json vamos a ver que nos encontramos con que nuestro nuevo datasource se agrego:</p>
<pre>
{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "todoMongo": {
    "name": "todoMongo",
    "connector": "mongodb"
  }
}
</pre>
<p>Ya tenemos todo lo que necesitamos pero antes de empezar a probar necesitamos hacer 2 cosas:</p>
<ol>
<li>Configurar la conexión:</li>
</ol>
<pre>
  "todoMongo": {
    "name": "todoMongo",
    "connector": "mongodb",
    "host": "127.0.0.1", 
    "database": "todoDB", 
    "username": "", 
    "password": "", 
    "port": 27017 
  }

</pre>
<ol start="2">
<li>Decirle a los modelos que queramos que se usen como datasource el que acabamos de crear, esto se hace cambiando el campo dataSource de los modelos que queramos del model-config.js, por ejemplo:</li>
</ol>
<pre>
  "todo": {
    "dataSource": "todoMongo",
    "public": true
  },
  "category": {
    "dataSource": "todoMongo",
    "public": true
  }
</pre>
<p><a href="https://github.com/Fblind/loopback-todo-example/commit/b86facded30ca4e24f5f3680449d6d72105f9d0f">Aquí</a> esta lo que hicimos.</p>
<p>Volvamos al explorer, agreguemos un par de categorías y como ven nada cambio, seguimos de la misma forma que antes. Ahora si apagamos el server, lo volvemos a levantar y hacemos un GET a las categorías vamos a obtener las que agregamos antes de apagar el server.</p>
<h4>Persistencia con MySQL</h4>
<p>Lo bueno de esto es que es lo mismo, por lo que no voy a ser muy detallado: En principio debemos tener MySQL 5.0 o superior, en la <a href="http://dev.mysql.com/downloads/">página</a> lo pueden descargar.</p>
<p>Luego son los mismos pasos que hicimos antes, instalar el conector, configurar los modelos y la conexión y empezar a jugar !</p>
<p>Igualmente <a href="https://docs.strongloop.com/display/public/LB/MySQL+connector">áca</a> dejo la documentación del connector.</p>
<p>Bueno esto fue todo, espero que les haya gustado, a mi como siempre me gustó poder hacerlo, para la próxima entrega vamos a ver como integrar el cliente con todo lo que estuvimos haciendo, espero poder traerla con menos tiempo de diferencia.</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2016/02/23/conociendo-loopback-parte-2/">Conociendo Loopback – Parte 2.</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Conociendo loopback – Parte 1.</title>
		<link>https://facttic.org.ar/2015/10/07/conociendo-loopback-parte-1/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>Buenas!, este articulo es el primero de una serie de varios sobre este framework llamado Loopback. Loopback como dice su pagina es un framework javascript basado en express, por lo que si conocen express será fácil de entender y usar el conocimiento que ya tienen. LoopBack is an open source<a class="moretag" href="https://facttic.org.ar/2015/10/07/conociendo-loopback-parte-1/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2015/10/07/conociendo-loopback-parte-1/">Conociendo loopback – Parte 1.</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" alt="Imagen-Devecoop-Loopback" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/Devecoop-Loopback.png" /></p>
<p>Buenas!, este articulo es el primero de una serie de varios sobre este framework llamado <a href="http://loopback.io/">Loopback</a>.</p>
<p>Loopback como dice su pagina es un framework javascript <strong>basado en express</strong>, por lo que si conocen express será fácil de entender y usar el conocimiento que ya tienen.</p>
<blockquote>
<p>LoopBack is an open source Node.js framework built on top of Express optimized for building APIs for mobile, web, and other devices. Connect to multiple data sources, write business logic in Node.js, glue on top of your existing services and data, connect using JS, iOS &amp; Android SDKs</p>
</blockquote>
<p>En el último proyecto donde estuve optamos por usar este poderoso framework, que tiene varias cosas muy interesantes, entre ellas:</p>
<ul>
<li>Easy-to-use <strong>CLI wizard</strong>.</li>
<li>Built-in <strong>API Explorer</strong>.</li>
<li>Diversas características para la <strong>creación, relaciones y permisos de los modelos</strong>.</li>
<li>Es <strong>isomorfico</strong>, compartiendo entre el cliente y el server la misma API.</li>
</ul>
<p>Que mejor forma de ver el potencial que usándolo…</p>
<h3>Paso 1 &#8211; Instalación:</h3>
<p>Primero verifica que tengas Node y NPM instalados, si falta instalarlo tenes este <a href="http://braincoop.devecoop.com/es/posts/como-crear-una-app-backbone-requirejs-compass-desde-cero-con-yeoman.html">muy buen post de Ale</a> Fácil, con un <strong>paquete npm</strong> corriendo la siguiente:</p>
<pre>
$ npm install -g strongloop
</pre>
<p>(si dice strongloop, strongloop es la empresa que desarrolla loopback, aunque <a href="https://strongloop.com/strongblog/ibm-express-loopback-node-js/">ahora la adquirió IBM</a>)</p>
<p>Ahora que ya lo tenemos instalado vamos a poner manos a la obra !</p>
<p>Lo primero que tenemos que hacer es crear un proyecto, como soy alguien que se olvida de las cosas (y lamentablemente tengo muchas cosas que hacer) se me ocurrió algo fácil y productivo: un <strong>TODO</strong>.</p>
<p>Cómo hacemos esto ?, con nuestro Easy-to-use CLI wizard:</p>
<pre>
$ slc loopback
</pre>
<p>Y por lo general este CLI wizard nos va guiando haciéndonos preguntas, en este caso las siguientes (si, es un yeoman generator!):</p>
<pre>
[?] Enter a directory name where to create the project: todo-app
[?] What's the name of your application? todo-app
</pre>
<p><a href="https://github.com/Fblind/loopback-todo-example/tree/step-0">Aquí</a> podemos ver lo que acabamos de hacer.</p>
<h3>Paso 2 &#8211; Crear nuestro modelo</h3>
<p>Nuestro siguiente paso es crear nuestro model todo, el cual va a tener un campo text de tipo string y un campo booleano para saber si esta completado o no.</p>
<pre>
$ cd todo-app
$ slc loopback:model
</pre>
<pre>
? Enter the model name: todo
? Select the data-source to attach todo to: db (memory)
? Select model's base class: PersistedModel
? Expose todo via the REST API? Yes
? Custom plural form (used to build REST URL): todos
Let's add some todo properties now.
</pre>
<p>Que son todas esas selecciones que hicimos:</p>
<ul>
<li>Select the data-source to attach todo to: <strong>db (memory):</strong> En esta entrega elegimos que nuestro datasource sea memory y se guarde en ella, eso quiere decir que <strong>al cerrar nuestra app, se perderá todo lo que guardemos</strong>. Mas adelante veremos como podemos ir cambiando de datasources.</li>
<li>Select model’s base class: <strong>PersistedModel</strong>: PersistedModel es el modelo base de todos los modelos que vienen con Loopback, excepto Email y además <strong>nos provee de base las operaciones CRUD y nos expone los REST endpoints</strong>.</li>
<li>Expose todo via the REST API? <strong>Yes</strong>: Nos da la posibilidad de <strong>usar el API Explorer</strong>.</li>
</ul>
<p>Hasta acá tenemos creado el modelo, y como nos dice la consola vamos a agregar las propiedades que mencionamos anteriormente:</p>
<pre>
Enter an empty property name when done.
? Property name: text
   invoke   loopback:property
? Property type: string
? Required? Yes
Let's add another todo property.
Enter an empty property name when done.
? Property name: completed
   invoke   loopback:property
? Property type: boolean
? Required? Yes
</pre>
<p>Cuando no queremos agregar más propiedades le damos ctrl+c</p>
<p>Fíjense que se crearon dos archivos, <strong>todo.js</strong> y <strong>todo.json</strong>. El todo.json es el esqueleto del modelo donde se definen propiedades, campos, relaciones, permisos, etc. Y el todo.js es donde vamos a crear los métodos remotos de este modelo, hooks, etc. Cabe agregar que esta forma es común a todos los modelos.</p>
<p>Así quedo nuestro todo.json:</p>
<pre>
{
  "name": "todo",
  "plural": "todos",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "text": {
      "type": "string",
      "required": true
    },
    "completed": {
      "type": "boolean",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": []
}
</pre>
<p>Y asi nuestro todo.js:</p>
<pre>
module.exports = function(Todo) {

};
</pre>
<p>Además en el model-config.json se agrego el datasource del nuevo modelo.</p>
<p><a href="https://github.com/Fblind/loopback-todo-example/tree/step-1">Aquí</a> podemos ver lo que acabamos de hacer.</p>
<p>Bueno y ahora ?, lo corremos!:</p>
<pre>
$ node .
Browse your REST API at http://0.0.0.0:3000/explorer
Web server listening at: http://0.0.0.0:3000/
</pre>
<p>Si vamos a <a href="http://0.0.0.0:3000/explorer">http://0.0.0.0:3000/explorer</a> o <a href="http://localhost:3000/explorer">http://localhost:3000/explorer</a> vamos a ver dos modelos, todos y Users (se acuerdan del model-config.json que los modelos tenían una propiedad public ?).</p>
<p>Bueno ahora es la parte donde ustedes se ponen a jugar (yo solo voy a mostrar un par de ejemplos sencillos), loopback ya creo toda la API por nosotros, donde tenemos tenemos las operaciones más comunes: POST, GET, PUT, find, exists, etc.</p>
<h4>Agregar un nuevo ítem:</h4>
<p>Primero abrimos el acordeón en POST /todos (nos llevara a <a href="http://localhost:3000/explorer/#!/todos/create">http://localhost:3000/explorer/#!/todos/create</a>).</p>
<p>Una vez abierto tenemos un par de cosas interesantes, en principio esta separado en tres grupos para que sea mejor la visualización de cada paso: <strong>Response Class, Parameters, Response Messages</strong>.</p>
<p>La <strong>Response Class</strong> la podemos visualizar de dos maneras, Model: que nos mostrara como estan definidas sus propiedades (de que tipo son, si son requeridas o no, etc) y Model Schema: que nos muestra un json con los valores por defectos.</p>
<p>En <strong>Parameters</strong> en el textarea value agregamos el ítem que queremos (podemos agregarlo directamente o haciendo click sobre la el model schema de la columna Data Type nos setea el esqueleto para que lo completemos).</p>
<p><strong>En ambos grupos podemos setear el content type.</strong></p>
<p>Y por ultimo, pero no menos importante, tenemos el <strong>Response Messages</strong>, donde nos muestra de donde vino el request y algunos datos de la respuesta como el body, el code y los headers.</p>
<p><img decoding="async" alt="Imagen-Making-POST" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/POST-todo-app-pt1.es.png" /></p>
<p>En este ejemplo agregamos un ítem, limpiar la cocina <img decoding="async" alt=":(" class="wp-smiley" src="http://braincoop.devecoop.com/wp-includes/images/smilies/icon_sad.gif" /> y una vez que hacemos click en “Try it out!” nos muestra la respuesta:</p>
<p><img decoding="async" alt="Imagen-POST-RESPONSE" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/POST-RESPONSE-todo-app-pt1.es.png" /></p>
<p>Para ver todos los items que agregamos podemos hacer el mismo procedimiento pero ahora con GET, aquí podemos usar los filtros, pero queda para otra ocasión mostrar el uso de estos.</p>
<p><img decoding="async" alt="Imagen-GET" src="https://raw.githubusercontent.com/Fblind/loopback-todo-example/master/images/GET-RESPONSE-todo-app-pt1.es.png" /></p>
<p>Esto fue una primera mirada de lo que nos ofrece Loopback, <strong>sin haber agregado una linea de código por nosotros mismos</strong> tenemos una API REST de un modelo que definimos.</p>
<p>En la próxima parte vamos a ver como integrar el cliente y conectarnos a alguna base de datos.</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2015/10/07/conociendo-loopback-parte-1/">Conociendo loopback – Parte 1.</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como crear una app Backbone + RequireJs + Compass desde cero con Yeoman</title>
		<link>https://facttic.org.ar/2015/07/28/como-crear-una-app-backbone-requirejs-compass-desde-cero-con-yeoman/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>Esta guía mostrará como crear una aplicación Backbone + RequireJs + Compass totalmente desde cero. En el camino, cubriremos como instalar Node, NPM, RVM, Ruby, Compass y Yeoman (yo, Grunt, Bower). También cubriremos algunos de los errores comunes, y como resolverlos. Esta guía es para máquinas con sistema operativo basado<a class="moretag" href="https://facttic.org.ar/2015/07/28/como-crear-una-app-backbone-requirejs-compass-desde-cero-con-yeoman/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2015/07/28/como-crear-una-app-backbone-requirejs-compass-desde-cero-con-yeoman/">Como crear una app Backbone + RequireJs + Compass desde cero con Yeoman</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Esta guía mostrará como crear una aplicación <a href="http://backbonejs.org/">Backbone</a> + <a href="http://requirejs.org/">RequireJs</a> + <a href="http://compass-style.org/">Compass</a> totalmente desde cero.</p>
<p>En el camino, cubriremos como instalar Node, NPM, RVM, Ruby, Compass y Yeoman (yo, Grunt, Bower).</p>
<p>También cubriremos algunos de los errores comunes, y como resolverlos.</p>
<p>Esta guía es para máquinas con sistema operativo basado en GNU/Linux, y fué testeado en Ubuntu 12.04 64 bits.</p>
<h2>1. Node.js y NPM</h2>
<p>Primero instalamos <a href="http://nodejs.org/">Node.js</a> y <a href="https://www.npmjs.org/">Node Package Manager (NPM)</a>.</p>
<p>Es importante NO usar SUDO al instalarlos. Usar sudo probablemente te traiga algunos conflictos de permisos complicados.</p>
<p>Instalar Node y NPM puede traer dificultades dependiendo de la configuración de tu máquina (firewall, usuarios, etc.) He encontrado que <a href="https://gist.github.com/isaacs/579814">este Gist</a> tiene la solución correcta para la mayoría de los casos. Aquí, vamos a usar la primera.</p>
<p>Instalamos Node (se hace referencia al archivo ~/.bashrc, tu shell puede usar otro):</p>
<pre>
echo 'export PATH=$HOME/local/bin:$PATH' &gt;&gt; ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install
</pre>
<p>Luego instalamos NPM:</p>
<pre>
curl https://www.npmjs.org/install.sh | sh
</pre>
<p>Para verificar:</p>
<pre>
node -v
npm -v
</pre>
<p>Node debería ser v0.10.26 o mayor, NPM 1.4.3 o mayor.</p>
<h2>2. Compass</h2>
<p>Con Node y NPM listos, ahora necesitamos instalar <a href="http://compass-style.org/">Compass</a>.</p>
<blockquote>
<p>&#8220;Compass is an open-source CSS authoring framework which uses the <a href="http://sass-lang.com/">Sass stylesheet language</a> to make writing stylesheets powerful and easy.&#8221;</p>
</blockquote>
<p>Para instalar Compass, primero necesitamos <a href="https://www.ruby-lang.org/en/">Ruby</a>.</p>
<p>Si ya tienes Ruby instalado, verifica que tengas la última versión con</p>
<pre>
ruby -v
</pre>
<p>Y actualiza las gemas con</p>
<pre>
gem update --system
</pre>
<p>Si no lo tienes, vamos a instalarlo (al escribir esto la última versión es 2.1.1).</p>
<p>Hay diferentes manera de instalar Ruby, en este caso elegimos hacerlo a través de <a href="https://rvm.io/">Ruby Version Manager (RVM)</a>.</p>
<blockquote>
<p>&#8220;RVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby environments from interpreters to sets of gems.&#8221;</p>
</blockquote>
<pre>
curl -L https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
rvm install 2.1.1
gem install compass
</pre>
<p>Verificamos:</p>
<pre>
ruby -v
compass -v
</pre>
<p>Por las dudas, abre una nueva consola y prueba ruby -v de nuevo.</p>
<p>Si en la nueva consola no tienes el comando ruby, tienes que habilitar la opción &#8220;Run command as a login shell&#8221; en la configuración de tu consola. El porqué de esto está muy bien explicado en <a href="http://worldofgnome.org/understanding-run-command-as-a-login-shell-option-in-gnome-terminal/">este artículo</a>.</p>
<h2>3. Yeoman</h2>
<p>Para crear nuestra aplicación, vamos a usar el generador <a href="https://github.com/yeoman/generator-backbone">Backbone generator</a> de <a href="http://yeoman.io/">Yeoman</a>. Va a realizar casi todo el trabajo pesado por nosotros.</p>
<p>Yeoman es una gran herramienta creada por Addy Osmani (el mismo del recomendable <a href="https://github.com/addyosmani/backbone-fundamentals">libro Backbone Fundamentals</a>) y otros, que nos ayudará a crear y trabajar con nuestra aplicación.</p>
<p>Viene con tres herramientas: yo, para crear nuevas aplicaciones (&#8220;scaffolding&#8221;), <a href="http://gruntjs.com/">Grunt</a>, to buildear, correr, testear y ejecutar todas las tareas de nuestro flujo de trabajo, y <a href="http://bower.io/">Bower</a>, un manejador de paquetes.</p>
<p>Instalaremos Yeoman (usamos el flag -g para indicarle a NPM que debe ser instalado globalmente):</p>
<p>Atención: no usamos SUDO cuando instalamos con npm!</p>
<pre>
npm install -g yo
</pre>
<p>Si ves el siguiente mensaje en la consola:</p>
<pre>
[Yeoman Doctor] Uh oh, I found potential errors on your machine

[Error] NPM root value is not in your NODE_PATH
  [info]
    NODE_PATH = /usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
    NPM root  = ~/local/lib/node_modules

  [Fix] Append the NPM root value to your NODE_PATH variable
    Add this line to your .bashrc
      export NODE_PATH=$NODE_PATH:~/local/lib/node_modules
    Or run this command
      echo "export NODE_PATH=$NODE_PATH:~/local/lib/node_modules" &gt; ~/.bashrc &amp;&amp; source ~/.bashrc
</pre>
<p>Sigue las instrucciones debajo de [Fix], para agregar el directorio raiz de NPM al NODE_PATH (ojalá todas las herramientas nos dieran soluciones así!)</p>
<pre>
echo "export NODE_PATH=$NODE_PATH:~/local/lib/node_modules" &gt; ~/.bashrc &amp;&amp; source ~/.bashrc
</pre>
<p>Para crear nuestra app Backbone, necesitamos el Backbone generator de Yeoman que sabe cómo hacerlo. Vamos a instalarlo:</p>
<pre>
npm install -g generator-backbone
</pre>
<p>Para verificar la instalación:</p>
<pre>
yo -h
</pre>
<p>Debajo del mensaje &#8220;Please choose a generator below.&#8221; deberías ver un item &#8220;Backbone&#8221;. Si no, prueba lo siguiente y vuelve a instalar el generador:</p>
<pre>
echo "export NODE_PATH=$NODE_PATH:~/local/lib/node_modules" &gt;&gt; ~/.bashrc &amp;&amp; source ~/.bashrc
</pre>
<h2>Creando la aplicación</h2>
<p>Casi estamos listos. Crea un directorio para la nueva aplicación, y usa el generador dentro de ella:</p>
<pre>
mkdir &lt;nombre-de-la-app&gt;
cd &lt;nombre-de-la-app&gt;
yo backbone
</pre>
<p>Durante la creación, elige las opciones &#8220;⬢ Bootstrap for Sass&#8221; y &#8220;⬢ Use RequireJs&#8221;.</p>
<p>El próximo paso es instalar las dependencias:</p>
<pre>
npm install
bower install
</pre>
<h2>Corriendo la aplicación</h2>
<p>La app está creada. Para probarla, corremos la tarea &#8220;serve&#8221; de Grunt:</p>
<pre>
grunt serve
</pre>
<p>Nuestro navegador default se debería abrir apuntando a http://localhost:9000/, y veremos la app creada.</p>
<p>En la consola, podemos ver las diferentes tareas que Grunt corrió para nosotros (estas tareas están definidas en el Gruntfile.js, en el directorio de nuestra app). Podemos ver una tarea &#8220;connect:livereload&#8221; ejecutada, y se sigue ejecutando la tarea &#8220;watch&#8221;. Esto significa que gracias a <a href="http://livereload.com/">LiveReload</a>, podemos editar por ejemplo index.html o cualquier archivo javascript dentro de nuestra app, guardarlo, y el navegador se actualizará automaticamente! Ahorra mucho tiempo.</p>
<p>Listo, ya podemos empezar a trabajar en nuestra app Backbone!</p>
<p>El generador no solo creó la estructura por nosotros, también podemos continuar usándolo para crear las partes básicas de toda app Backbone (models, views, etc.), como el router:</p>
<pre>
yo backbone:router ''
</pre>
<p>Happy coding!</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2015/07/28/como-crear-una-app-backbone-requirejs-compass-desde-cero-con-yeoman/">Como crear una app Backbone + RequireJs + Compass desde cero con Yeoman</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Documentando los directorios con Tree</title>
		<link>https://facttic.org.ar/2015/07/28/documentando-los-directorios-con-tree/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<category><![CDATA[desarrollo]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>Me tocó la tarea de documentar la jerarquía de directorios de los servicios que tenemos funcionando. Se me ocurrió utilizar el comando &#8216;tree&#8217; para generar la estructura en txt y así poder ponerla en la wiki agregándole una descripción de cada directorio a mano. El comando tree te genera el<a class="moretag" href="https://facttic.org.ar/2015/07/28/documentando-los-directorios-con-tree/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2015/07/28/documentando-los-directorios-con-tree/">Documentando los directorios con Tree</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Me tocó la tarea de documentar la jerarquía de directorios de los servicios que tenemos funcionando. Se me ocurrió utilizar el comando &#8216;tree&#8217; para generar la estructura en txt y así poder ponerla en la wiki agregándole una descripción de cada directorio a mano.</p>
<p>El comando tree te genera el arbol de directorios de un directorio indicado. Lo puede mostrar por pantalla, guardar a un archivo de texto o incluso puede generar html.</p>
<p>Ejemplo:</p>
<div>
<div>
<table border="0" style="width:100%">
<tbody>
<tr>
<td><a name="#codesyntax_1"></a><a class="wp-synhighlighter-title" href="#codesyntax_1" id="wpshat_1" title="Click to show/hide code block">Code block</a></td>
<td><a href="#codesyntax_1" title="Show code only"><img decoding="async" src="http://braincoop.devecoop.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" title="Print code"><img decoding="async" src="http://braincoop.devecoop.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://braincoop.devecoop.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img decoding="async" src="http://braincoop.devecoop.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<div>
<pre>
/usr
├── bin
├── games
├── include
├── lib
├── lib32
├── local
├── sbin
├── share
└── src
9 directories</pre>
</div>
</div>
<p>Para instalarlo con apt:</p>
<p>$ sudo apt-get install tree</p>
<p>Para copiar la salida a un archivo txt se puede usar la opción -n (para desactivar los colores que son carácteres especiales) y -o para especificar el archivo.</p>
<p>$ tree -d -L 1 -n -o fhs.txt /</p>
<p>Se puede generar html con la opción -H</p>
<p>$ tree -H -d -L 1 -n -o fhs.html /</p>
<p>También se puede especificar un patrón de archivos incluir con la opcion -P e incluso especificarle varios directorios de búsqueda. No olvidarse de encomillar el patrón -P para que no lo expanda bash.</p>
<p>$ tree -P &#8216;*.list&#8217; sources.list.d/ /etc/apt/</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2015/07/28/documentando-los-directorios-con-tree/">Documentando los directorios con Tree</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Evitando la registración en La Nación y Clarin</title>
		<link>https://facttic.org.ar/2015/03/30/evitando-la-registracion-en-la-nacion-y-clarin/</link>
		
		<dc:creator><![CDATA[devecoop]]></dc:creator>
		<pubDate>Fri, 22 Jun 2018 18:19:53 +0000</pubDate>
				<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>Ahora resulta que a La Nación se le dio por pedir registración para leer algunos artículos. No voy a entrar en la discusión de si es conveniente o no, acá van instrucciones rápidas para esconder la registración y seguir leyendo el artículo en cuestión. La idea es acceder a la<a class="moretag" href="https://facttic.org.ar/2015/03/30/evitando-la-registracion-en-la-nacion-y-clarin/"> Leer más&#8230;</a></p>
<p>La entrada <a href="https://facttic.org.ar/2015/03/30/evitando-la-registracion-en-la-nacion-y-clarin/">Evitando la registración en La Nación y Clarin</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ahora resulta que a La Nación se le dio por pedir registración para leer algunos artículos. No voy a entrar en la discusión de si es conveniente o no, acá van instrucciones rápidas para esconder la registración y seguir leyendo el artículo en cuestión. La idea es acceder a la consola de Javascript (no se preocupen si no saben lo que es) y ejecutar un par de comandos para esconder el diálogo que pide registración y evita scrollear el artículo.</p>
<h4>Google Chrome</h4>
<p>Abrir el menú principal (el botón con tres líneas horizontales), ir a Más herramientas &gt; Consola de Javascript. Pegar el siguiente comando en el renglón donde el cursor parpadea y apretar enter: $(&#8216;#iframe-registracion&#8217;).hide(); $(&#8216;body&#8217;).removeClass(&#8216;modal-open&#8217;); <a href="http://braincoop.devecoop.com/wp-content/uploads/2015/03/Screen-Shot-2015-03-25-at-10.53.59.png"><img decoding="async" alt="Screen Shot 2015-03-25 at 10.53.59" class="alignnone size-medium wp-image-83" src="http://braincoop.devecoop.com/wp-content/uploads/2015/03/Screen-Shot-2015-03-25-at-10.53.59-300x185.png" style="height:185px; width:300px" /></a> &nbsp;</p>
<h4>Firefox</h4>
<p>Abrir el menú principal (igual a Chrome, es el botón con tres líneas horizontales), ir a Desarrollador &gt; Consola Web. Pegar el mismo comando y presionar enter: $(&#8216;#iframe-registracion&#8217;).hide(); $(&#8216;body&#8217;).removeClass(&#8216;modal-open&#8217;); Listo, con ese simple comando debería haber desaparecido el diálogo que pide registración. Si no fue así, publicá tu experiencia en comentarios e intentaré ayudarte. &nbsp;</p>
<h4>Update: para Clarin el comando a ejecutar en la consola de Javascript es el siguiente:</h4>
<p>$(&#8216;#colorbox&#8217;).hide(); $(&#8216;#cboxOverlay&#8217;).hide(); &nbsp;</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://facttic.org.ar/2015/03/30/evitando-la-registracion-en-la-nacion-y-clarin/">Evitando la registración en La Nación y Clarin</a> se publicó primero en <a href="https://facttic.org.ar">FACT[TIC] - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
