Buscar contenidos

martes, 19 de mayo de 2020

Cómo elegir entre Angular y React para tu próxima aplicación

https://medium.com/@nanovazquez/c%C3%B3mo-elegir-entre-angular-y-react-para-tu-pr%C3%B3xima-aplicaci%C3%B3n-217f99f624b8

Cómo elegir entre Angular y React para tu próxima aplicación

Mariano Vazquez

Feb 28, 2019 · 5 min read


En este post, vamos a analizar estas dos librerías y tratar de aprender sus similitudes y diferencias, lo cual te ayudará a decidir cuál de las dos usar en tu nuevo proyecto. Intentaremos utilizar nuestro mejor juicio dado que, para bien o para mal, esta decisión va a vivir contigo por un tiempo. Todos hemos estado en esta misma situación.
Estas son algunas de las preguntas que intentaremos responder hoy:
  • Cuál es el objetivo de estas librerías? En qué se diferencian?
  • Cómo puedo empezar a desarrollar con ellas? Va a ser difícil al comienzo?
  • Cómo va a verse mí código si uso Angular o React?
If you want to read the English version of this article, click here.



Arquitectura y conceptos

Angular es desarrollado por Google y se presenta como el One framework para crear tu aplicación web o mobile, presumiendo sobre su increíble performance, el tooling y la popularidad entre los desarrolladores.
React es desarrollado por Facebook y se presenta como una librería de JavaScript para construir interfaces de usuario. Afirma tener un enfoque declarativo fácil de seguir y una arquitectura basada en componentes que puedes reutilizar a través de stacks tecnológicos diferentes.
Ambas librerías son utilizadas internamente en estas empresas, por loo que puedes estar seguro que estos grandes jugadores van a continuar apostando en estas tecnologías por un buen tiempo.

Tanto Angular como React promueven una arquitectura basada en componentes

Y qué podemos apreciar respecto a sus diferencias?
  • Angular dice ser un UI framework, mientras que React es una UI library. En la práctica, esto significa que Angular viene con muchas funcionalidades y es más opinionado al respecto de cómo debes implementar tu aplicación. Pero aunque React da más libertad en las librerías que puedes utilizar en tu aplicación (para ruteo, manejo de estado, fetching, testeo unitario, etc.), hay un set de librerías mainstream bastante establecido que posiblemente terminarás utilizando.
  • Tanto Angular como React proponen el encapsulamiento de la lógica de negocio en componentes. Y luego integrar pequeños componentes en otros más grandes, para así crear UIs más complejas.
Una cosa más para mencionar es que ambas utilizan la licencia de MIT, un tema importante para tener en cuenta si tienes planeado utilizar alguna de ellas en tu empresa.

Estilos de código

Dado que vamos a escribir mucho código con estas herramientas, es importante que sus estilos nos gusten. Veamos cómo se escribe un simple componente HelloMessage utilizando cada una de estas librerías:

Angular “HelloMessage” component
React “HelloMessage” component

Como hemos visto, los estilos para construir componentes son diferentes. Angular utiliza el decorador @Component para crear componentes y una combinación de HTML y directivas para templating. En paralelo, React utiliza la clase Componente y una sintaxis tipo-HTML llamada JSX para crear componentes, ambos conviviendo en el mismo archivo JS.

Cada componente encapsula lógica de negocio específica

Elegir un enfoque sobre el otro es completamente subjetivo, pero algunas veces tienes un requerimiento que ayuda a inclinar la balanza. Por ejemplo, si en tu equipo tienes diseñadores que se sienten más a gusto entregando archivos HTML, Angular puede ser una mejor opción para ti. Por supuesto, tendrás que decirle a los desarrolladores que aprendan la sintaxis especial de Angular para poder aplicarla en estos archivos.

Curva de aprendizaje y tooling

Dado que Angular es un framework, al instalarlo uno encontrará muchas funcionalidades que desconoce, lo que puede ser muy abrumador. React sólo requiere un poco de conocimiento sobre JavaScript y JSX, lo cual puede parecer más fácil para los recién llegados. Sin embargo, a medida que uno va agregando complejidad en la aplicación, uno tiene que aprender temas complejos como ruteo, manejo de estados, llamadas asíncronas, etc.
Afortunadamente, ambas librerías tienen una gran documentación que puede ayudarte a ponerte al día Además existen muchísimas herramientas que te ayudarán en la creación de tu primera aplicación. Recomiendo que revises Angular CLI y Create React app, ambas herramientas son excelentes y estoy seguro que las amarás.

Create React app

Para más información, navega a la documentación de Angular o la documentación de React.

Ciclo de vida de la aplicación

Este tema contiene las diferencias más significativas entre ambas herramientas:
Por un lado, Angular utliza un two-way data binding para conectar los elementos del DOM con el modelo que almacena los datos. Y los mantiene sincronizados gracias a un algoritmo de detección de cambios que automáticamente obtiene las modificaciones en los datos y las aplica en el modelo. Es necesario una serie de posts aparte para poder explicar los detalles de este algoritmo, por ahora sólo necesitamos saber que Angular intercepta todos los eventos asíncronos del browser que pueden potencialmente cambiar el modelo (una llamada AJAX, un evento onChange) y uno no tiene que ocuparse de implementar el control de cambios, como se observa en el siguiente código:


En cambio, React utiliza un mecanismo explícito de para actualizar el estado de los componentes (esto quiere decir, que debes llamar a una función para esto), pero esconde la complejidad de realizar los cambios en el DOM de manera eficiente al utilizar un Virtual DOM, una copia del DOM en memoria. Los datos viajan siempre en una dirección (del componente al DOM), por lo que utiliza one-way data binding.


Aunque cada uno utilice técnicas diferentes, en la mayoría de los casos no notarás ninguna diferencia en términos de performance ten en cuenta que estas librerías están fuertemente testeadas en miles de aplicaciones). Si existen diferencias al escribir componentes, pero queda en tu criterio personal decidir qué estilo prefieres.

Tipado estático

Angular viene con TypeScript, un superset tipado de JavaScript, y propone el uso de clases de OOP para desarrollar componentesReact no sugiere el uso de un sistema de tipos, aunque tiene una sección muy útil en su documentación que explica cómo agregar Flow o TypeScript en un proyecto. Es también menos opinionado sobre cómo debes escribir tus componentes, y puedes utilizar tanto funciones como clases para ello.

Angular and React soportan lenguajes con tipado estático (como TypeScript) para construir aplicaciones de gran escala

Conclusión

Tanto Angular como React son grandes opciones para tu próxima aplicación. Como hemos visto en este post, elegir una por sobre la otra está más relacionado con las preferencias personales que con una ventaja potencial en términos de performance, features, ecosistema o tamaño de la comunidad de desarrolladores.
Está en ti decidir qué estilo te gusta más. Cuando lo hagas, me interesa saber las razones (si es que las hay) que tenido en cuenta para tomar la decisión. Puedes contactarte conmigo via Twitter o MeetupJS Slack. Nos vemos!

viernes, 8 de mayo de 2020

Notas KODI


https://latinokodi.github.io/latinokodi/repo/

Funcionó para android pero no para el FireTV
https://drive.google.com/file/d/10vjSKfIKEFCsXQlK_u8Ceq6IFUiFTcyW/view

Version 3.7.0 Latinoamerica FireTV 

https://pluto-tv.uptodown.com/android/descargar


http://troypoint.com/mobdro

https://www.firesticktricks.com/cinema

jueves, 30 de abril de 2020

SQL Merge Script



https://www.pigeonsql.com/post/dynamic-sql-merge-script-for-generate-merge-statement


---------INICIO|Tabla|Pais---------
--IdPais Descripcion CodPais
MERGE INTO dbo.Pais AS Target 
USING (VALUES 
  ('Costa Rica', 'CRI')
  ,('Guatemala', 'GTMAA')

AS Source (Descripcion, CodPais) 
ON (Target.CodPais = Source.CodPais)
-- Actualizar registros
WHEN MATCHED THEN 
UPDATE SET Descripcion = Source.Descripcion, CodPais = Source.CodPais
  
-- Insertar nuevos registros
WHEN NOT MATCHED BY TARGET THEN 
INSERT (Descripcion, CodPais) 
VALUES (Descripcion, CodPais) 
-- delete rows that are in the target but not the source 
WHEN NOT MATCHED BY SOURCE THEN 
DELETE;
---------FIN|Tabla|Pais---------

lunes, 13 de abril de 2020

NetCore variable ambiente en IIS WebConfig

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Gmg.ControlIngreso.Service.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: 8e74a6be-e1aa-4434-a613-eb387a6caa82-->

 

Cuándo utilizar SET vs SELECT al asignar valores a las variables en SQL Server

http://blog.jmacoe.com/gestion_ti/base_de_datos/cuando-utilizar-set-vs-select-al-asignar-valores-a-las-variables-en-sql-server/


Asignar múltiples valores a múltiples variables

Si tienes que poblar múltiples variables, en lugar de utilizar instrucciones SET por separado cada vez, considera el uso de SELECT para poblar todas las variables en una sola instrucción. Esto puede ser usado para poblar las variables en forma directa o mediante la selección de valores desde la base de datos.
Considera el siguiente script que compara el uso de SELECT y SET:
Script #3. Poblar múltiples variables a través de SELECT
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
USE AdventureWorks
GO
 
-- <span id="IL_AD2" class="IL_AD">Part 1</span>. Assign direct values to multiple variables
DECLARE @var1 VARCHAR(50)
DECLARE @var2 VARCHAR(50)
DECLARE @var3 VARCHAR(50)
 
SELECT @var1 = 'Value1', @var2 = 'Value2', @var3 = 'Value3'
PRINT @var1
PRINT @var2
PRINT @var3
GO
 
-- Part 2. Assign retrieved values to multiple variables
DECLARE @name VARCHAR(50)
DECLARE @productNo VARCHAR(25)
DECLARE @color VARCHAR(15)
 
SELECT @name = [Name], @productNo = ProductNumber, @color = Color
FROM Production.Product
WHERE ProductID = 320
PRINT @name
PRINT @productNo
PRINT @color
GO
Si estás usando SET, entonces cada varible debe tener asignado valores individualmente a través de múltiples instrucciones como se muestra a continuación:
Script #4. Poblar múltiples variables a través de SET
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
USE AdventureWorks
GO
 
-- Part 1. Assign direct values to multiple variables
DECLARE @var1 VARCHAR(50)
DECLARE @var2 VARCHAR(50)
DECLARE @var3 VARCHAR(50)
SET @var1 = 'Value1'
SET @var2 = 'Value2'
SET @var3 = 'Value3'
PRINT @var1
PRINT @var2
PRINT @var3
GO
 
-- Part 2. Assign retrieved values to multiple variables
DECLARE @name VARCHAR(50)
DECLARE @productNo VARCHAR(25)
DECLARE @color VARCHAR(15)
SET @name =(SELECT [Name] FROM Production.Product WHERE ProductID = 320)
SET @productNo = (SELECT ProductNumber FROM Production.Product WHERE ProductID = 320)
SET @color = (SELECT Color FROM Production.Product WHERE ProductID = 320)
PRINT @name
PRINT @productNo
PRINT @color
GO
Obviamente SELECT es mas eficiente que SET mientras asigna valores a múltiples variables en términos de instrucciones ejecutadas, código y bytes de red.

¿Qué si la variable no se pobla con éxito?

Si una variable no es poblada con éxito entonces el comportamiento de SET y SELECT sería diferente. Fallas en la asignación puede ser debido a que ningún resultado es devuelto o cualquier otro valor no compatible con la variable. En este caso, SELECT preservará el valor anterior, si lo hubiere, donde SET retornará NULL. Debido a la diferente funcionalidad, ambos pueden conducir a resultados inesperados y se deben considerar con cuidado.
Esto se demuestra en el siguiente script:
Script# 5. Comportamiento de SET y SELECT para valor faltante
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
USE AdventureWorks
GO -- Part 1. Observe behavior of missing result with SET
DECLARE @var1 VARCHAR(20)
SET @var1 = 'Value 1 Assigned'
PRINT @var1
SET @var1 = (SELECT Color FROM Production.Product WHERE ProductID = 32022)
PRINT @var1
GO
-- Part 1. Observe behavior of missing result with SELECT
DECLARE @var1 VARCHAR(20)
SELECT @var1 = 'Value 1 Assigned'
PRINT @var1
SELECT @var1 = Color FROM Production.Product WHERE ProductID = 32023
PRINT @var1
GO
Podemos observar que la parte 1 genera NULL cuando no devuelve ningun valor para poblar la variable. en cambio la parte 2 produce el valor previo que se conserva despues de la asignacion fallida de la variable. Esta situación puede conducir a resultados inesperados y requiere consideración.

Siguiendo los estandares

Usar SELECT puede parecer la mejor opción para escenarios especificos, pero ten en cuenta que SELECT se usa para asignar valores a las variables no esta incluido en los estandares ANSI. Si sigues los estandares para fines de migracion de código, entonces evita el uso de SELECT y usa SET en su lugar.

Conclusión

Las mejores prácticas no apegarse a un método. Según los escenarios es posible que desee utilizar tanto SET como SELECT.
A continuación se presentan algunos escenarios para usar SET:
  • Si estás obligado a asignar un solo valor directamente a la variable y no hay consulta para buscar el valor.
  • Se esperan asignaciones NULL (retorna NULL en un conjunto de resultados).
  • Los estandares están destinados a pasar cualquier plan de migración.
  • Se esperan resultados no escalares y deben ser manipulados.
Usando SELECT es eficiente y flexible en los siguientes casos:
  • Múltiples variables están siendo pobladas por asignación directa de valores.
  • Múltiples variables están siendo pobladas por una unica fuente (tabla, vista).
  • Menos codigo para asignar multiples variables.
  • Usa esta opción si necesitas @ROWCOUNT y @ERROR de la última sentencia ejecutada.