<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>desarrollo web &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/desarrollo-web/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Fri, 27 Oct 2017 10:00:20 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>desarrollo web &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Introducción al Box Model de CSS</title>
		<link>https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/</link>
					<comments>https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/#respond</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Fri, 27 Oct 2017 10:00:20 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=1902</guid>

					<description><![CDATA[<p>El Box Model es uno de los principales problemas que se presenta un programador de Front-End cuando inicia su carrera, es aprender la forma en el que navegador organiza los elementos dentro de la pantalla. Pues en muchas ocasiones confunde el rol que juega HTML y CSS para representar la información. Lo primero que debemos [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/">Introducción al Box Model de CSS</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<img loading="lazy" class="aligncenter size-full wp-image-1904" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/banner-1.png" alt="Introducción al Box Model de CSS" width="1019" height="571" />El Box Model es uno de los principales problemas que se presenta un programador de Front-End cuando inicia su carrera, es aprender la forma en el que navegador organiza los elementos dentro de la pantalla. Pues en muchas ocasiones confunde el rol que juega HTML y CSS para representar la información.<span id="more-1902"></span></p>
<p>Lo primero que debemos de entender, es que cada elemento que definimos en un documento HTML se mostrará en el navegador como una caja, dicha caja tendrá 4 lados y se compondrá de 4 a 5 secciones según el tipo de elemento.</p>
<p>La única sección opcional es <strong><u>outline</u></strong>, la cual solo se utiliza para elementos de los formularios, así que, por lo pronto, nos centraremos en los otros 4 y más adelante retomaremos este último.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter wp-image-1905 " src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-secciones.png" alt="Box Model" width="593" height="339" /></p>
<p>&nbsp;</p>
<h2>Contenido:</h2>
<p>&nbsp;</p>
<p>La sección del contenido la principal, pues contiene el “<em><strong>contenido</strong></em>” central a mostrar, es decir, un texto, una imagen, un video, etc. El contenido siempre es lo que queremos mostrarle al usuario y el resto de secciones solo sirven para decorarlo.</p>
<p>Esta sección se ajusta a la altura y ancho del “contenido” a mostrar, porque entre mayor sean los elementos mostrados, más grande será esta área. Esta sección en muchas ocasiones tiene un color o imagen de fondo para hacerla más atractiva.</p>
<p><img loading="lazy" class="aligncenter wp-image-1906" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-contenido.png" alt="Box Model Contenido" width="358" height="337" /></p>
<p>Como podemos observar en la imagen, el contenido es la sección central de todo el elemento, de tal forma, que el siguiente elemento que lo rodea es el padding. El tamaño de esta sección se puede modificar con las propiedades <span class="lang:xhtml decode:true crayon-inline ">height</span> , <span class="lang:xhtml decode:true crayon-inline ">width</span> , <span class="lang:xhtml decode:true crayon-inline ">max-height</span> , <span class="lang:xhtml decode:true crayon-inline ">max-width</span> , <span class="lang:xhtml decode:true crayon-inline ">min-height</span> , <span class="lang:xhtml decode:true crayon-inline ">min-width</span> .</p>
<p>&nbsp;</p>
<p>Veamos el siguiente ejemplo:</p>
<p><img loading="lazy" class="aligncenter wp-image-1907" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-contenido-2.png" alt="Box Model Contenido" width="630" height="530" /></p>
<p>&nbsp;</p>
<p>En la imagen podemos apreciar marcado en rojo, una etiqueta &lt;p&gt;, esta etiqueta tiene como contenido el texto <em>“¿No eres Oscar? Cambia de usuario”</em>, la etiqueta &lt;p&gt; rodea todo el texto, incluso, es más grande que el contenido, pues este lo rodea.</p>
<p>&nbsp;</p>
<h2> Padding</h2>
<p>&nbsp;</p>
<p>El paddin es una separación que existe entre el contenido y el borde, el cual se utiliza para dar una apariencia estética más atractiva y que el contenido no este pegado al borde.</p>
<p><img loading="lazy" class="aligncenter wp-image-1908" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-padding.png" alt="Box Model padding" width="403" height="379" /></p>
<p>Cabe mencionar que el padding sigue siendo parte de la caja visible, por lo que, si tenemos una imagen o color de fondo, este se extenderá a través del padding o relleno. El paddin está delimitado por el borde.</p>
<p><img loading="lazy" class="aligncenter wp-image-1909" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-padding-2.png" alt="Box Model padding" width="792" height="525" /></p>
<p>&nbsp;</p>
<p>En esta nueva imagen, podemos ver el mismo ejemplo, solo que esta vez nos hemos centrado en el <span class="lang:xhtml decode:true crayon-inline ">&lt;div&gt;</span>  que contiene todo el contenido del formulario. Observemos que todos los componentes que tenemos en la pantalla están alineados a la caja punteada interna, esto es porque esto es “contenido” y la separación que existe entre las dos cajas punteadas es conocido como <em>padding</em> o relleno. Observemos que el color de fondo (gris claro) se expande a través del contenido y el padding.</p>
<p>El padding puede ser establecido con las propiedades <span class="lang:xhtml decode:true crayon-inline ">padding</span>  o (<span class="lang:xhtml decode:true crayon-inline">padding-top</span> , <span class="lang:xhtml decode:true crayon-inline ">padding-bottom</span> , <span class="lang:xhtml decode:true crayon-inline ">padding-left</span> , <span class="lang:xhtml decode:true crayon-inline ">padding-right</span> ).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Border</h2>
<p>&nbsp;</p>
<p>El borde es una línea que podemos dibujar al final de la caja, esta se utiliza para darle una apariencia estítica a la caja, pues nos permite dibujar una línea de algún color, la línea puede tener los siguientes estilos:</p>
<p><img loading="lazy" class="aligncenter wp-image-1910" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/border-styles.png" alt="" width="460" height="316" /></p>
<p>El border es la última parte visible de la caja y un que outline si es visible, este se pinta fuera de la caja.  El border puede ser establecido con las propiedades, <span class="lang:xhtml decode:true crayon-inline ">border</span> , <span class="lang:xhtml decode:true crayon-inline ">border-top</span> , <span class="lang:xhtml decode:true crayon-inline ">border-bottom</span> , <span class="lang:xhtml decode:true crayon-inline ">borer-left</span> , <span class="lang:xhtml decode:true crayon-inline ">border-right</span></p>
<p><img loading="lazy" class="aligncenter wp-image-1911" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-border.png" alt="Box Model border" width="382" height="359" /></p>
<p>La siguiente imagen muestra un ejemplo del border:</p>
<p><img loading="lazy" class="aligncenter wp-image-1912" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-border-2.png" alt="Box Model border" width="559" height="566" /></p>
<p>&nbsp;</p>
<p>En la imagen podemos apreciar un borde muy suave, incluso apenas perceptible, pero que sin duda le da una terminación más elegante, adicional, estamos utilizando la propiedad <span class="lang:xhtml decode:true crayon-inline ">border-raduis</span>  para darle un efecto redondeado en las esquinas.</p>
<p>&nbsp;</p>
<h2>Margin</h2>
<p>&nbsp;</p>
<p>El margen es la última sección de Box Model y se puede ver como una separación invisible que ayuda a separar un elemento de otro.  Cuando definimos un color o imagen de fondo, este no se propaga a esta sección.</p>
<p><img loading="lazy" class="aligncenter wp-image-1913" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-margin.png" alt="Box Model margin" width="358" height="337" /></p>
<p>El margin se puede definir con las propiedades <span class="lang:xhtml decode:true crayon-inline ">margin</span> , <span class="lang:xhtml decode:true crayon-inline ">margin-top</span> , <span class="lang:xhtml decode:true crayon-inline ">margin-bottom</span> , <span class="lang:xhtml decode:true crayon-inline ">margin-right</span> ,<span class="lang:xhtml decode:true crayon-inline">margin-left</span>.</p>
<p>La siguiente imagen muestra mejor como es que utilizamos el margin:</p>
<p><img loading="lazy" class="aligncenter wp-image-1914" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/MoxModel-margin-2.png" alt="Box Model margin" width="574" height="560" /></p>
<p>&nbsp;</p>
<p>En este caso, utilizamos un margin inferior (<span class="lang:xhtml decode:true crayon-inline ">margin-bottom</span> ) para darle separar el primero campo del segundo, esta separación hace que las dos cajas no choquen y se vean más estéticas.</p>
<p>&nbsp;</p>
<h2>Outline</h2>
<p>&nbsp;</p>
<p>El outline es una decoración gráfica que hace que los elementos que ganan el foco, que son por lo general los <span class="lang:xhtml decode:true crayon-inline ">&lt;input&gt;</span> , se coloren como con una ligera aura que los rodea:</p>
<p><img loading="lazy" class="aligncenter wp-image-1915" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/10/outline.png" alt="Box Model outline" width="622" height="234" /></p>
<p>El outline se establece mediante la propiedad outline y es posible establecerle el grueso del outline, el color y el estilo.</p>
<p>&nbsp;</p>
<h2>Conclusiones</h2>
<p>&nbsp;</p>
<p>En la teoría todo esto puede resultar muy simple, pero la realidad es que muchos programadores front-end con experiencia siguen batallando con estos conceptos tan simples. Conocer y entender la teoría del Box Model es esencial para convertirte en un programador Front-end exitoso.</p>
<p>&nbsp;		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/">Introducción al Box Model de CSS</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2017/10/27/introduccion-al-box-model-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1902</post-id>	</item>
		<item>
		<title>Introducción a NodeJS (JavaScript del lado del Servidor)</title>
		<link>https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/</link>
					<comments>https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Mon, 29 May 2017 09:00:41 +0000</pubDate>
				<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=1726</guid>

					<description><![CDATA[<p>NodeJS es sin duda una de las tecnologías que más rápido está creciendo, y que ya hoy en día es indispensable para cubrir posiciones de trabajo. NodeJS ha sido revolucionario en todos los aspectos, desde la forma de trabajar hasta que ejecuta JavaScript del lado del servidor. &#160; NodeJS es básicamente un entorno de ejecución [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/">Introducción a NodeJS (JavaScript del lado del Servidor)</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<img loading="lazy" class="aligncenter wp-image-1727" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/introducción-a-NodeJS.jpg" alt="introducción a NodeJS" width="983" height="551" />NodeJS es sin duda una de las tecnologías que más rápido está creciendo, y que ya hoy en día es indispensable para cubrir posiciones de trabajo. NodeJS ha sido revolucionario en todos los aspectos, desde la forma de trabajar hasta que ejecuta JavaScript del lado del servidor.<span id="more-1726"></span></p>
<p>&nbsp;</p>
<p>NodeJS es básicamente un <strong>entorno de ejecución JavaScript del lado del servidor</strong>, puede sonar extraño, ¿JavaScript del lado del servidor? ¿Pero que no JavaScript se ejecuta en el navegador del lado del cliente? JavaScript nace inicialmente en la década de los noventas por los desarrolladores de Netscape, el cual fue creado para resolver problemas simples como validación de formularios, alertas y alguna que otra pequeña lógica de programación, nada complicado, sin embargo, JavaScript ha venido evolucionando hasta convertirse en un lenguaje de programación completo. NodeJS es creado por Ryan Lienhart Dahl, quien tuve la gran idea de tomar el motor de JavaScript de Google Chrome llamado V8, y montarlo como el Core de NodeJS.</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1728" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/NodeJS-Architecture.png" alt="NodeJS Architecture" width="668" height="421" /></p>
<p>&nbsp;</p>
<p>Como puedes ver en la imagen, NodeJS es en realidad el motor de JavaScript V8 con una capa superior de librerías de NodeJS, las cuales se encargan de la comunicación entre el API de NodeJS y el Motor V8. Adicionalmente, se apoya de la librería Libuv la cual es utilizada para el procesamiento de entradas y salidas asíncronas.</p>
<p>&nbsp;</p>
<p>Cabe mencionar que NodeJS es <a href="https://es.wikipedia.org/wiki/Software_de_c%C3%B3digo_abierto">Open Source</a> y <a href="https://es.wikipedia.org/wiki/Multiplataforma">multiplataforma</a>, lo que le ha ayudado a ganar terrenos rápidamente.</p>
<p>&nbsp;</p>
<p><strong>Que es NodeJS (Según su creador):</strong></p>
<p>Node.js® es un entorno de ejecución para JavaScript construido con el <a href="https://developers.google.com/v8/">motor de JavaScript V8 de Chrome</a>. Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente. El ecosistema de paquetes de Node.js, <a href="https://www.npmjs.com/">npm</a>, es el ecosistema más grande de librerías de código abierto en el mundo.</p>
<p>&nbsp;</p>
<p>Te puede interesar mi articulo sobre <a href="https://www.oscarblancarteblog.com/2017/03/21/10-tecnologias-que-debes-de-aprender/" target="_blank" rel="noopener noreferrer">las 10 tecnologías que debes aprender</a>, en donde incluyo a NodeJS.</p>
<p>&nbsp;</p>
<h2>NodeJS un cambio de paradigma</h2>
<p>&nbsp;</p>
<p>NodeJS ha representado para muchos programadores todo un cambio de paradigma, pues tiene como principal característica, el procesamiento asíncrono en casi la totalidad de sus tareas. Para ello, NodeJS utiliza únicamente un hilo de ejecución y procesamiento de entrada y salida asíncrono. Con lo cual, NodeJS no realiza bloqueos en el procesamiento.</p>
<p>Esto quiere decir que cuando es requerido realizar una tarea secuencial, la cual requiere realizar el paso 1,2 y 3 en ese orden, es necesario crear una serie de callbacks, lo cual es básicamente que al terminar el paso 1, manda llamar una función correspondiente al paso 2, y al terminar el paso 2, manda llamar otra función correspondiente al paso 3. Esta serie de llamadas o callbacks es una de las cuestiones más criticadas de NodeJS, que incluso, ya le han puesto un nombre <a href="http://callbackhell.com/">Call Backs Hell</a> o el Infierno de las call backs, pues es necesario anidar una gran cantidad de funciones para realizar una única operación, lo cual puede ser un verdadero dolor de cabeza al intentar seguir el código, además que es muy verboso.</p>
<p><img loading="lazy" class="aligncenter wp-image-1729" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/callbacks-hell.jpg" alt="callbacks hell" width="621" height="332" /></p>
<p>&nbsp;</p>
<p>Como podemos ver en la imagen, el resultado de la ejecución de cada paso es enviado a la siguiente función (Callback) para continuar con el procesamiento.</p>
<p>&nbsp;</p>
<p>La pregunta obvia aquí es, si es tan complicado usar callback ¿porque no procesamos todo de forma síncrona?, pues la respuesta es muy simple, y es que JavaScript funciona nativamente de forma asíncrona y segunda, esta es en realidad uno de los principales diferenciadores de NodeJS, pues trabajar de esta forma ayuda a optimizar los recursos del servidor, pues no mantiene hilos bloqueantes entre la ejecución de cada paso.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>NodeJS y la arquitectura de Microservicios</h2>
<p>&nbsp;</p>
<p>Para los que no conozcan esta arquitectura, le comento que microservicios es una arquitectura que promueve el desarrollo de pequeñas aplicaciones que corran de forma independiente, en lugar de tener aplicaciones monolíticas montadas en un servidor de aplicaciones, en donde si un servidor se muere, probablemente dejen de funcionar muchas aplicaciones.</p>
<p>&nbsp;</p>
<p>NodeJS tiene la gran característica de ser extremadamente modular, esto quiere decir que existe un pequeñísimo módulo para cada característica de NodeJS, por ejemplo, existe un módulo para usar el File System, otro para parciar el body de un request http, otro para conexión base de datos. Es más, existe módulos que solo tiene una función. Esto ayuda a que las aplicaciones NodeJS corran únicamente con los módulos estrictamente necesarios y ayudan en gran parte a crear aplicaciones mucho más livianas.</p>
<p>&nbsp;</p>
<p>Dada la modularidad y simplicidad de trabajo de JavaScript, hace que NodeJS esté tomando mucho terreno en el desarrollo de aplicaciones simples, que pueden ser <a href="https://m.do.co/c/065ecb90cdbf">montados en servidores de hasta 5 USD al mes</a>, y funcione a la perfección.</p>
<p>&nbsp;</p>
<h2>NodeJS y NPM</h2>
<p>&nbsp;</p>
<p>Para los que viene de Java, NPM es el equivalente a Maven, si, aun así, no te queda claro. NPM es el gestor de paquetes (módulos) de NodeJS, mediante NPM es posible descargar de forma automática las dependencias y ejecutar instrucciones como iniciar o apagar NodeJS.</p>
<p>&nbsp;</p>
<p>NPM o Node Package Manager es en realidad mucho más complejo de lo que acabo de decir, pero lo quería resumir en pocas palabras. <a href="https://www.npmjs.com/">Puedes leer más de NPM aquí</a>.</p>
<p>&nbsp;</p>
<h2>Ventajas y desventajas de NodeJS</h2>
<p>&nbsp;</p>
<p>Hasta este momento, solo le hemos echado flores a NodeJS, pero es hora de poner las cosas en perspectiva y analizar las cosas buenas y malas que tiene, para de esta forma poder tener un mejor análisis.</p>
<p>&nbsp;</p>
<p>*Cabe mencionar que este análisis es desde mi muy humilde punto de vista, y puede que para algunos la desventaja sean ventajas y viceversa. Pero como dicen, no hay más ciego que el que no quiere ver, por lo que si tú eres un apasionado purista de NodeJS puede que nada de esto te parezca.</p>
<p>&nbsp;</p>
<h2>Ventajas</h2>
<p>&nbsp;</p>
<ul>
<li><strong>OpenSource</strong>: sin duda, hoy el software open source ha tenido la evolución más rápida y con mejor aceptación de los usuarios, además que es totalmente gratis su uso, puede descargar el código fuente para analizarlo y crear tu propio proyecto de Open Source basado en este.</li>
<li><strong>Optimización de los recursos</strong>: Dada la naturaleza asíncrona de NodeJS nos permite tener una mucho mejor administración de los recursos.</li>
<li><strong>Desarrollo agiles</strong>: NodeJS permite crear aplicaciones de una forma simple y rápida, a diferencia de otros lenguajes de programación como Java o C#, que se requiere de una gran cantidad de clases para echar a volar un proyecto.</li>
<li><strong>FullStack</strong>: Dado que JavaScript se puede ejecutar del lado del servidor y del cliente, es posible crear aplicaciones de <a href="https://www.oscarblancarteblog.com/2017/03/13/diferencias-backend-frontend-developer/">BackEnd y FrontEnd</a> con una sola tecnología.</li>
<li><strong>Modularidad</strong>: Como ya lo hablamos, NodeJS es extremadamente modular, lo cual permite utilizar únicamente los módulos requeridos sin traernos nada de más.</li>
</ul>
<p>&nbsp;</p>
<h2>Desventajas:</h2>
<p>&nbsp;</p>
<ul>
<li><strong>Tipos dinámicos:</strong> JavaScript permite enviar como parámetro un objeto que no tiene definición, solo abres y cierres llaves {} y dentro pones lo que sea, lo que hace muy complicado saber que valores puedes enviar. Si eres programador JavaScript seguramente me quedarás colgar vivo diciendo que eso es bueno.</li>
<li><strong>Callbacks: </strong>Si bien, como ya analizamos, esto hace que se utilicen mejor los recursos, la verdad es que las callbacks son un dolor de cabeza, ya que tener funciones para cada paso es incómodo y hace muy complicado seguir el código.</li>
<li><strong>Refactor: </strong>Si alguna vez has hecho un refactor importante en un proyecto de JavaScript seguro me entenderás, pues casi nunca es posible realizar uno de forma segura, pues el tipeado débil y tipos dinámicos hacen que sea complicado para el IDE determinar cómo refactorizar.</li>
<li><strong>Librerías estándar: </strong>Esta es a mi ver una de las más fuertes, es verdad que existen librerías para todos los problemas que se te puedan ocurrir, pero el problema es que existen muchas opciones para lo mismo, haciendo complicado elegir entre una u otra. Adicional que cada una avanza a un ritmo separado en vez de unir fuerzas para mejorar una versión estándar.</li>
<li><strong>Arquitectura: </strong>En mi experiencia las aplicaciones NodeJS tiene un nivel de arquitectura muy por debajo de los lenguajes de programación tradicional como Java o C# pues en NodeJS todo se basa en funciones que son enviadas y exportadas de clases. Y es raro ver que se implementan patrones arquitectónicos o patrones de diseño (desde mi experiencia).</li>
</ul>
<p>&nbsp;</p>
<h2>Conclusiones</h2>
<p>&nbsp;</p>
<p>A mi ver <strong>NodeJS es sin duda una de las tecnologías más prometedoras del futuro</strong>, dado que JavaScript se está convirtiendo en el lenguaje de programación rey. No me extrañaría que JavaScript termine desplazando a lenguajes como Java o C#, un que para esto falta tiempo.</p>
<p>Creo que empezar a apostar por NodeJS en este momento puede ser una muy buena inversión, pues cada vez empezaremos a ver más y más proyectos desarrollados con NodeJS y estas aplicaciones necesitarán de desarrolladores.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/">Introducción a NodeJS (JavaScript del lado del Servidor)</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2017/05/29/introduccion-a-nodejs-2/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1726</post-id>	</item>
		<item>
		<title>Introducción a React JS</title>
		<link>https://www.oscarblancarteblog.com/2017/05/02/introduccion-react-js/</link>
					<comments>https://www.oscarblancarteblog.com/2017/05/02/introduccion-react-js/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 02 May 2017 09:00:02 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=1699</guid>

					<description><![CDATA[<p>React es sin duda una de las tecnologías web más revolucionarias de la actualidad, pues proporciona todo un mecanismo de desarrollo de aplicaciones totalmente desacoplado del backend y ejecutado 100% del lado del cliente. &#160; React fue lanzado por primera vez en 2013 por Facebook y es actualmente mantenido por ellos mismo y la comunidad [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/05/02/introduccion-react-js/">Introducción a React JS</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><img loading="lazy" class="aligncenter size-full wp-image-1701" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/Introducción-a-React-JS.jpg" alt="Introducción a React JS" width="942" height="528" /></h1>
<p>React es sin duda una de las tecnologías web más revolucionarias de la actualidad, pues proporciona todo un mecanismo de desarrollo de aplicaciones totalmente desacoplado del backend y ejecutado 100% del lado del cliente.<span id="more-1699"></span></p>
<p>&nbsp;</p>
<p>React fue lanzado por primera vez en 2013 por Facebook y es actualmente mantenido por ellos mismo y la comunidad de código abierto, la cual se extiende alrededor del mundo. React, a diferencia de muchas tecnologías del desarrollo web, es una librería lo que lo hace mucho más fácil de implementar en muchos desarrollos, ya que se encarga <strong>exclusivamente de la interface gráfica del usuario</strong> y consume los datos a través de API que por lo general son REST.</p>
<p>Te recomiendo el artículo <a href="https://www.oscarblancarteblog.com/2017/03/06/soap-vs-rest-2/">SOAP vs REST</a> en donde hablo de las diferencias que existen entre ambas.</p>
<p>El nombre de React proviene de su capacidad de crear <strong>interfaces de usuario reactivas</strong>, la cual es la capacidad de una aplicación para actualizar toda la interface gráfica en cadena, como si se tratara de una formula en Excel, donde al cambiar el valor de una celda automáticamente actualiza todas las celdas que depende del valor actualizado y esto se repite con las celdas que a la vez dependía de estas últimas.</p>
<p>&nbsp;</p>
<h2>Como funciona React</h2>
<p>&nbsp;</p>
<p>React es una librería de Javascript que nos permite crear la interface UI mediante una sintaxis propia llamada Javascript XML (JSX) el cual es una mezcla entre XML y HTML que permite la construcción de elementos HTML de una forma muy simple y rápida.</p>
<p>Las aplicaciones desarrolladas mediante JSX <strong>no pueden ser interpretadas por el navegador</strong>, por lo que es requerido que todo el código sea convertido a Javascript nativo mediante un proceso llamado <strong>Transpilación</strong>, el cual es parecido a la compilación, pero en este proceso no se lleva a cabo una compilación como tal, sino que el código es convertido de JSX a Javascript.</p>
<p>Este proceso es llevado a cabo mediante herramientas como Webpack el cual es el más ampliamente utilizado.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter wp-image-1702" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react-webpack.png" alt="React Webpack" width="817" height="350" /></p>
<p>Como vemos en la imagen, Webpack es en realidad un empaquetador, el cual organiza, compacta y mediante plugins como Babel realiza la transpilación, arrojando como resultado una serie de archivos compactos y listos para ser utilizados.</p>
<p>&nbsp;</p>
<h2>React y el Backend</h2>
<p>&nbsp;</p>
<p>Como hablamos, React solo sirve para la creación de interface gráfica, por lo que <strong>el desarrollo del backend queda fuera de React</strong> y es precisamente eso lo que lo hace una librería super portable, ya que la podemos integrar con cualquier API ya desarrollada.</p>
<p>&nbsp;</p>
<p>Como React no es capaz de resolver la parte del backend es necesario desarrollar el API de datos mediante otras tecnologías como NodeJS, el cual es por lo general el servidor más utilizado para el desarrollo con React.</p>
<p>El API es consumido mediante AJAX a medida que la aplicación lo demanda.</p>
<p><img loading="lazy" class="aligncenter wp-image-1703" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react.png" alt="react nodejs" width="651" height="215" /></p>
<p>&nbsp;</p>
<h2>React y Web Components</h2>
<p>&nbsp;</p>
<p>React utiliza una forma de trabajar que a mi parecer se convertirá en el estándar en unos años más y es que utiliza un concepto llamado <em>Web Componentes</em>, el cual es la creación de tus propias etiquetas de HTML para representar tus componentes. Te imaginas crear un login en tu página utilizando una etiqueta como esta &lt;login&gt;, pues esta forma de trabajar es la que propone React, donde todo lo que desarrollemos sean componentes que puedan ser reutilizables cuantas veces queramos, incluso podrán ser empaquetadas como librerías para que las utilices en diferentes desarrollos. Esto lo puedes ver como si cada componente fuera una pequeña caja, y lo único que tenemos que hacer es colocar las cajas donde la necesitemos.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter wp-image-1704" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react-2.png" alt="React Web Components" width="865" height="441" /></p>
<p>Como podemos ver en la imagen, cada parte de la aplicación puede ser un componente (etiqueta) el cual solo se tiene que agregar a la página para crear interfaces gráficas micho más rápido. Ahora veamos cómo quedaría esta misma página, pero en código con React:</p>
<p>&nbsp;</p>
<pre class="lang:js decode:true" title="LoginApp.js">import React from 'react'
import NavBar from './NavBar'
import Login from './Login'
import Footer from './Footer'

class LoginApp extends React.Component{

  render(){

    return(
      &lt;div&gt;
        &lt;NavBar/&gt;
        &lt;Login/&gt;
        &lt;Footer/&gt;
      &lt;/div&gt;
    )
  }
}</pre>
<p>&nbsp;</p>
<p>Observemos que estamos utilizando las etiquetas &lt;NavBar&gt;, &lt;Login&gt; y &lt;Footer&gt; las cuales no son propias de HTML , pero sin componentes desarrollados en React, los cuales pueden ser simplemente importados y utilizados.</p>
<p>&nbsp;</p>
<h2>React y el Shadow DOM</h2>
<p>&nbsp;</p>
<p>React es una librería que se ejecuta del lado de cliente, por lo que es esta misma la encargada de actualizar el DOM a medida que el usuario interactúa con la UI, sin embargo, el proceso de actualización del DOM es un trabajo muy costoso para el navegador, por lo que actualizar el DOM cada vez que el usuario realiza una acción, no es una opción, es por esto que React provee un DOM propio llamado Shadow DOM el cual es una versión del DOM sobre la cual React trabaja para realizar los cambios, y una vez que calcula todos los cambios que hay que realizar es solo entonces cuando actualiza el DOM del navegador. Este proceso es en realidad muy complejo y React se encarga por completo de su gestión, por lo que como programadores no hace falta preocuparnos por estos detallas en la mayoría de las veces.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter wp-image-1705" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react-3.png" alt="React Shadow DOM" width="653" height="314" /></p>
<p>Cuando se realiza un cambio en el Shadow DOM, este se dé sincroniza con el DOM original y es necesario realizar un proceso llamado reconciliación, el cual es el encargado de aplicar los cambios del Shadow DOM al DOM real.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter wp-image-1706" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react-4.png" alt="React Shadow DOM Reconciliation" width="865" height="295" /></p>
<h2></h2>
<h2>React y los Estados</h2>
<p>&nbsp;</p>
<p>Una de las principales características de React es que los componentes pueden mantener estados. Los estados le indican los datos que el componente muestra, e incluso el formato en se muestran.</p>
<p>Por ejemplo, podemos tener un formulario, el cual tenga los estados de solo lectura y edición, en el primero, solo mostraremos los datos en texto plano, como un &lt;p&gt; o un &lt;span&gt; mientras que cuando el formulario está en estado de edición, podemos representar el formulario con &lt;imput type=”text” /&gt;</p>
<p>Cuando un componte por alguna razón modifica su estado, entra en lo que se le conoce como Dirty o Sucio, y esto le indica a React que debe de haber un proceso de Reconciliación para actualizar los datos en la UI.</p>
<p>Como ya hablamos en hace un momento, React utiliza programación Rectiva para actualizar los componentes, de tal forma, que cuando un componente es actualizado, todos los componentes hijos del árbol DOM serán evaluados para determinar si deben de ser también actualizados.</p>
<p>&nbsp;</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1707" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/05/react-5.png" alt="React Shadow DOM Dirty" width="746" height="445" /></p>
<p>En la imagen podemos apreciar en Rojo, los componentes que fueron actualizados por el usuario, por lo que React deberá iniciar el proceso de Reconciliación para estos componentes, pero adicional, si este componente tiene componentes hijos, React deberá determinar si los hijos necesitan ser también actualizados en cascada, ha este proceso es a lo que se le conoce como programación Reactiva.</p>
<p>&nbsp;</p>
<p>React es bastante inteligente para determinar que componentes deberán ser actualizado, sin embargo, React también nos da la posibilidad de ayudarle en este proceso, con la finalidad de optimizar aún más la forma en que se lleva a cabo la Reconciliación.</p>
<p>&nbsp;</p>
<figure id="attachment_2293" aria-describedby="caption-attachment-2293" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/applicaciones-reactivas-con-react-nodejs-mongodb"><img loading="lazy" class="wp-image-2293 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2017/11/react-banner-1024x394.jpg" alt="Aplicaciones reactivas con React, NodeJS &amp; MongoDB" width="648" height="249" /></a><figcaption id="caption-attachment-2293" class="wp-caption-text">¿Quieres aprender React como un profesional? te invito a que veas mi nuevo libro.</figcaption></figure>
<p>&nbsp;</p>
<h2> Deploy de React</h2>
<p>&nbsp;</p>
<p>Finalmente, React tiene una forma muy particular de ser cargado por el navegador, pues cuando el usuario entra a la página, esta solo tiene un elemento, sobre el cual react montará toda la aplicación.</p>
<p>&nbsp;</p>
<pre class="lang:xhtml decode:true" title="index.html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="root"&gt;&lt;/div&gt;
&lt;script type="text/javascript" src="/bundle.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>&nbsp;</p>
<p>Adicional del elemento root, se carga un JavaScript llamado bundle.js el cual es en realidad TODA LA APLICACIÓN en un solo archivo, el cual es generado por Webpack tras ejecutar el proceso de Transpilación.</p>
<p>Cuando el bundle.js se carga por completo, remplaza el componente root por la aplicación desarrollada en React.</p>
<p>&nbsp;</p>
<blockquote><p>Referencias adicionales: <a href="https://softwarecrafters.io/react/tutorial-react-js-introduccion/" target="_blank" rel="noopener">introducción a reactjs</a> por Miguel Gómez</p></blockquote>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/05/02/introduccion-react-js/">Introducción a React JS</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2017/05/02/introduccion-react-js/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1699</post-id>	</item>
	</channel>
</rss>
