Lista de conceptos MICROSERVICIOS

Volumenes

Espacio de ficheros para administrar archivos de las imagenes de docker

Montaje de enlace

Dierccionamiento a una ubicacion fisica de fichero en el host fuera de docker

Montaje TMPFS

Ficheros virtuales

AMQP

Protocolo orientado a mensajes, alternativa a HTTP y REST

Transacciones ACID

Concepto informatico en donde la data es ATOMICA, CONSISTENTE, AISLADA, DURABLE

CQRS

Patron de base de datos donde la responsabilidad de lectura de datos se separa de la de CRUD

Datos frios

Es cuando se saca una base da datos de copia para hacer consultas robustas que no afecten la base de datos de produccion, supongamos para sacar informes financieros de meses anteriores se replica la data de los meses anteriores en un nueva BD Datos Frios. Por lo general estas bases de datos no estan actualizadas con los ultimos registos.

Teorema CAP

Teorema computacional en donde un sistema distribuido no puede garantizar consistencia, disponibilidad, tolerancia al particionad al mismo tiempo, como minimo 2 de las anteriores 3.

Modelos de dominio

Representaciones de modelos de acuerod al microservicio, Ejmplo un Usuario puede ser diferente en los microservicios de Pagos, Servicio al cliente, Ordenes, Conferencias

Puerta de enlace de API

Proyecto proxy o fachada para la administracion, enrutamiento y obtimizacion de peticiones de las APIs

Comunicacion directa al Microservicio

Conectividad directa entre el aplicativo final y el microservicio careciendo de una Puerta de enlace de API.

Azure API Managment

Herramienta en azure para la administracion de APIS

BFF back end para front end

Patron donde se crea una Puerta de enlace de API por cada Aplicacion de cliente asi de esta manera cada aplicacion final tiene su correspondiente Puerta de enlace de API.

Ocelot

Puerta de enlace de API de codigo abierto y facil implementacion para proyectos no dependientes AZURE

MediatR

Libreria para reducir la dependencia de clases entre funcionalidades

Microfontend

Patron de presentacion en donde se programan componentes visuales independientementes asociadas cada uno a un microservicio diferente.

Kubernetes

Sirve para administrar clusteres, tambien como orquestador y administrador de

Azure Kubernetes Service

Es la solucion de Azure de Kubernetes

Helm

Programa para administrar clusters complejos de Kibernetes

Azure Dev Space

Proporciona un lugar donde almacenar contenedores de manera comun entre programadores.

Desarrollo bucle

Especifica todo el flujo de desarrollo de los programadores que esta excento del interaccion con DevOps

Dockerfile

Archivo con la configuracion necesaria para iniciar una imagen, esta se recomienda debe ir en la carpeta raiz de la implementacion

Docker-compose.yml

Archivo para administrar los orquestadores, varias configuraciones de microservicios

Bus de eventos

Hace referencia a la comunicacion entre microservicios y hace referencia a la comunicacion asincrona entre microservicios

Arquitectura orientada a eventos EDA

Principio donde se orienta el flujo a los eventos cambiantes de los objetos

Swashbuckle

Libreria para generar documentacion automatica en swagger

NSwag

Otra libreria similar a Swagger que realiza las mismas funciones

Azure Key Vault

Servicio para almacenar y administrar valores secretos de la aplicacion. Por ejemplo cadenas de conexion, tokens, keys etc

Control de versiones de API

Tecnica para versionar las implementaciones de API, puede ser por URL, cadena de consulta o version en el encabezado

HATEOAS

Hipertexto como motor del estado de la aplicación. La respuesta a cada solicitud contiene la información necesaria para pasar de un estado a otro, Las respuestas API pueden sugereir los proximos llamdos.

AutoRest

Herramienta para llamar por linea de comandos clases e implementaciones API.

.dockerignore

Se usa para omitir archivos.

docker-compose.yml

Se usa para crear microservicios

docker-compose.override.yml docker-compose.prod.yml docker-compose-test.yml

Se usa para configurar el entorno de microservicios

${MY_VAR}

Forma de llamar una variable de entorno dentro de las configuraciones de Docker

Redis

Es un motor de base de datos en memoria basado en tablas Hash, viene de la palabra remote dictionary service, servicio de diccionario remoto

Eventos de integracion

Consiste en suscribir a diferentes microservicios para que respondan a eventos de un microservicio. utilizan un bus de eventos para notificar los mensajes entre diferentes microservicios

RabbitMQ Azure Service Bus

Bus de servicios (eventos), tecnologías de mensajería de infraestructura

NServiceBus, MassTransit y Brighter

Bus de servicios (eventos) de codigo abierto,

Patron Observador

Un objeto proporciona informacion de los eventos a otros eventos interesados

Patron publicacion/suscripcion Pub/Sus

Funciona igual que el patron observador salvo que utiliza un componente adicional llamado “agente”, “mensaje de agente” o “bus de eventos”, estos presentan la mejora de desvincular las dependencias gracias a los agentes. el publicador y los suscriptores se desvinculan gracias al bus de eventos o al mensaje de agente mencionados.

Pruebas unitarias

Corresponde a pruebas respecto a una sola funcionalidad.

Pruebas de integracion

Corresponde a pruebas entre diferentes funcionalidades por ejemplo BD, Instancias, Controladores todas dentro de un flujo.

Pruebas funcionales

Corresponde a pruebas de todo un componente, Esto garantiza que la aplicación funcione según lo esperado desde la perspectiva del usuario

Pruebas de servicios

Corresponde a pruebas complejas de un componente de microservicio teneindo en cuenta pruebas de conectividad, puesta de servicio multiple, concurrencia, inicializacion de imagen entre otras.

IWebHost

Interface para ejecutar tareas en segundo plano o background, implementada en .net core 1.0 y 2.0

IHost

Interface para ejecutar tareas en segundo plano versiones posteriores .net core 2.0 es mas ligero y carece de todas las caracteristicas de HTTP, MVC o API Web. En conclusion si las tareas en segundo plano no tienen nada que ver con HTTP debe usar IHost.

Commands & Queries

Especifica un patron donde los Commands tienen la responsabilidad de las actualizaciones eliminaciones e inserciones mientras que Queries tiene la responsabilidad exclusiva de consultas al dominio de datos.

Dapper

Es un ORM para .Net mas liviano y ligero

DTO

Objeto de transferencia de datos, Data Transfer Object

ProducesResponseType

Anotacion para proporcionar mayor informacion a las APIs sobre el tipo de respuesta. Es utilizado por Swashbuckle par adicionar la descripcion de la API.

Persistencia de datos

Almacenamiento y actualizacoin de datos

POCO

Acronimo de Plain Old CLR Object, Son clases simples que no dependen de un Framework en especial

DDD Domain-Driven Design (Diseño guiado por el Dominio)

Propone un modelado basado en la realidad de negocio con relación a sus casos de uso. En el contexto de la creación de aplicaciones, DDD hace referencia a los problemas como dominios. Describe áreas con problemas independientes como contextos delimitados. Lo importante no son los patrones en sí, sino organizar el código para que esté en línea con los problemas del negocio y utilizar los mismos términos empresariales (lenguaje de dominio)

Aplication Layer – Modelo de Aplicacion

Define los trabajos que el software debe hacer y dirige los objetos de dominio expresivo para que resuelvan problemas. No contiene reglas de negocios ni conocimientos sino que solo coordina tareas y delega trabajo a colaboraciones de objetos de dominio en el siguiente nivel

Domain model Layer – Modelo de Dominio

Responsable de representar conceptos del negocio, información sobre la situación del negocio y reglas de negocios

Infraestructure Layer – Modelo de Infraestructura

El nivel de infraestructura es la forma en que los datos que inicialmente se conservan en las entidades de dominio (en la memoria) se guardan en bases de datos o en otro almacén permanente.

Dominio anémico

El modelo de dominio anémico es simplemente un diseño de estilo de procedimientos. Los objetos de entidad anémicos no son objetos reales, ya que carecen de comportamiento (métodos). Solo contienen propiedades de datos y, por tanto, no se trata de un diseño orientado a objetos.

Entidad de dominio

Corresponde a una entidad cuyo valor y comportamiento es importante para el negocio. Toda entidad o clase que sea imperativamente critica para el negocio se clasifica como una entidad de dominio. Las entidades de dominio no deben estar acopladas a la infraestructura, ni depender de EntityFramework o de alguna base de datos.

Agregado

Describe un clúster o grupo de entidades y comportamientos que se pueden tratar como una unidad coherente. Utilizada para agrupar la logica de dominio.

Raíz agregada

Tener varios objetos de valor y entidades secundarias, con todas las entidades y objetos trabajando de forma conjunta para implementar las transacciones y el comportamiento necesarios.

AsReadOnly

proporcionar acceso de solo lectura mediante al método

SeedWork

Esta carpeta contiene las clases base personalizadas que puede usar como base de los objetos de valor y las entidades de dominio. Tambien suele ser nombrada Common, SharedKernel.

Objeto de Valor

Son objetos que no requieren ninguna identidad ni ningún seguimiento de identidad, Deben ser inmutables.

Enumeraciones Empresariales

Forma de implementacion de enumeraciones para logica de dominio

Reglas invariables

Las reglas invariables se expresan como contratos y si se infringen, se generan excepciones o notificaciones. se aplican para corroborar la integridad de las entidades de dominio.

IValidatableObject

Proporciona la funcionalidad para invalidar un objeto, muy utilizado en MVC y API pero no aplicable para logica de dominio.

Validación en dos pasos

hace referencia a usar la validación de nivel de campo en los objetos de transferencia de datos (DTO) de comandos y la validación de nivel de dominio dentro de las entidades.

Evento de dominio

Es algo que ha sucedido en el dominio que quiere que otras partes del mismo dominio (en curso) tengan en cuenta. Normalmente las partes notificadas reaccionan de alguna manera a los eventos. los eventos de dominio le ayudan a expresar explícitamente las reglas de dominio, en función del lenguaje ubicuo proporcionado por los expertos de dominio. Además, los eventos de dominio permiten una mejor separación de cuestiones entre clases dentro del mismo dominio.

Lenguaje ubicuo

Es el concepto de definir un lenguaje (hablado y escrito) que se usa por igual entre los desarrolladores y los expertos en dominios para evitar incoherencias y falta de comunicación debido a problemas de traducción y malentendidos. Verá la misma terminología en el código, las conversaciones entre cualquier miembro del equipo, las especificaciones funcionales y otras cosas.

Dominion de Infraestructura o Persistencia

Corresponde al proyecto encargado de los datos, todo lo pertinente a acceso de datos que se hospedan dentro de los límites de un microservicio (es decir, la base de datos de un microservicio). Contienen la implementación real de componentes como repositorios y clases de unidad de trabajo, como los objetos DbContext de Entity Framework.

Repositorio

Un repositorio realiza las tareas de un intermediario entre los niveles de modelo de dominio y asignación de datos, actuando de forma similar a un conjunto de objetos de dominio en memoria. Los objetos de cliente generan consultas mediante declaraciones y las envían a los repositorios para obtener las respuestas. Conceptualmente, un repositorio encapsula un conjunto de objetos almacenados en la base de datos y las operaciones que se pueden realizar en ellos, proporcionando una manera de que esté más cerca de la capa de persistencia. Además, los repositorios admiten la finalidad de separar, con claridad y en una dirección, la dependencia entre el dominio de trabajo y la asignación de datos. Recuerde que la creacion de un Repositorio debe estar asociado al agregado y no a la tabla. Es una mala practica crear un repositorio por table, debe ser un repositorio por agregado.

Una unidad de trabajo

Se conoce como una sola transacción que implica varias operaciones de inserción, actualización o eliminación. En otras palabras, significa que para una acción de usuario específica todas las transacciones de inserción, actualización o eliminación se administran en una única operación

Omisión de persistencia y omisión de infraestructura

Quiere decir que la logica de dominio no depende ni esta acoplado a la infraestructura o acceso a datos.

Algoritmo Hi-Lo

Asigna identificadores únicos a filas de la tabla, pero no depende del almacenaje inmediato de la fila en la base de datos. Esto le permite empezar a usar los identificadores de forma inmediata, como sucede con los identificadores de la base de datos secuencial normal.

Persistencia No Relacional

Concepto que hace referencia a que la base de datos no esta acoplada a una estructura relacional, esto aplica para las bases de datos No relacionales o bases de datos de documentos.

Azure Cosmos DB

Es la solucion de Microsoft propuesta para manejar bases de datos NoSQL

${VARIABLE:-mongodb://nosqldata}

Esta sintaxis llama a la VARIABLE de entorno en .env sino existe usa entonces mongodb://nosqldata por ejemplo

Contenedores de Inversión de control (IoC)

Son librerias como Ninject o Autofac que permiten implementar los principios de inversion de dependencias por medio de la incersion de dependencias.

Principio SOLID

Principio de responsabilidad única, Principio de abierto y cerrado, Principio de sustitución de Liskov, Principio de segregación de interfaces, Principio de inversión de dependencias

Inyeccion de dependencias

Cuando cualquiera de los constructores tiene una dependencia de IMyCustomRepository (interfaz o abstracción), el contenedor de IoC insertará una instancia de la clase de implementación MyCustomSQLServerRepository. Esta es una descripcion practica del concepto.

Clase comando

Un comando es una solicitud para que el sistema realice una acción que cambia el estado del sistema. Los comandos son imperativos y se deben procesar una sola vez. Un comando no es un hecho del pasado; es solo una solicitud y, por tanto, se puede denegar. es que debe procesarse una sola vez por un único receptor. Esto se debe a que un comando es una única acción o transacción que se quiere realizar en la aplicación.

Un mediador

Es un objeto que encapsula el “cómo” de este proceso: coordina la ejecución en función del estado, laforma de invocar un controlador de comandos o la carga que se proporciona al controlador. Con un componente de mediador se pueden aplicar cuestiones transversales de forma centralizada y transparente aplicando elementos Decorador.

Patron mediador

Simplifica la implementacion de Inyeccion de Dependencias para ser en funcion de una especificacion comun implementada por librerias como MediatR.

Resistencia

Es la capacidad de recuperarse de errores y seguir funcionando. No se trata de evitar los errores, sino de aceptar el hecho de que se producirán errores y responder a ellos para evitar el tiempo de inactividad o la pérdida de datos.

Patrón de interruptor.

En este enfoque, el proceso de cliente supervisa el número de solicitudes con error. Si la tasa de errores supera el límite establecido, se activa un “interruptor” para que los intentos adicionales fallen de inmediato. (Si se producen errores en un gran número de solicitudes, esto sugiere que el servicio no está disponible y que enviar solicitudes no sirve de nada.) Tras un período de tiempo de expiración, se verifica el funcionamiento y se desactivar el interruptor.

Conexiones Recilientes

Hace mencion a las conexiones que agrupan un grupo de ejecucuiones en conjunto para su correcto flujo. Implementaciones de beginTransactions para ejecuciones agrupadas las cuales dependan de su correcta ejecucuion para hacer commit o se comporten ante un error mediante un roolback. Transacciones.

IHttpClientFactory

Se puede usar para configurar y crear instancias de HttpClient en una aplicación a través de la inserción de dependencias (DI). Es la correcta implementacion del HttpClient.

Usos IHttpClientFactory

Uso básico, Usar clientes con nombre, Usar clientes con tipo, Usar clientes generados

Polly

Biblioteca de control de errores transitorios y resistentes

Estrategias de vibracion

Permite realizar reintentos de conexion de manera aleatoria para que los errores de conectividad no se realicen de manera fija por un determinado tiempo o numero de intentos sino que sea provistos de una manera aleatoria.

Patrón de reintento

Permite que una aplicación reintente una operación con la expectativa de que finalmente se realice correctamente.

El patrón de interruptor

Impide que una aplicación realice una operación que es probable que falle pero la lógica de reintento debe ser sensible a las excepciones devueltas por el interruptor, y debe dejar de intentar repetir la operación si el interruptor indica que un error no es transitorio.

HealthChecks

Mecanismo que permite verificar el correcto funcionamiento de una API

hc

Ruta especificada para verificar los estados por ejemplo 0.0.0.0:0000/hc Mostrara los estados de las apis del dominio

Un guardián

Es un servicio independiente que puede observar el estado y la carga en varios servicios, e informar del estado de los microservicios con una consulta con la biblioteca HealthChecks

HealthChecks.UI

Se puede usar para mostrar los resultados de comprobación de estado de los URI configurados de manera grafica.

OAuth 2.0

Es un framework de autorizacion que permite acceso limitado mediante la autorizacion de un tercero.

ASP.NET Core Identity

Proveedor de Identidad para ASP.Net Core puede funcionar en muchos escenarios de aplicación web en los que es adecuado almacenar información de usuario en una cookie o tambien para generar tokens de autenticacion para APIs.

Middelware

Capa intermedia de programacion. Hace refrencia a todas las implementaciones que se ejecutan en medio de otras dos, para ser mas especificos estudie la documentacion oficial de Middleware de ASP Core.

JWT

Es un acronimo para referirce a JSON Web Token

Authorize (atributo)

Anotacion para permisos dentro de los controladores para asignar un rol determinado a un controlador. puede aplicar uno o mas roles al mismo controlador.

Secretos

Corresponde a todas las claves privadas provistas por los proveedores, cadenas de conexion, api keys, tokens etc. Se recomienda como buena practica guardar estas claves privadas o secretos en los parametros de entorno adicional de nunca proteger esta informacion dentro de un repositorio. Existen mecanismos para adiministrar claves privadas y publicas para entornos de desarrollo como Azure Key Vault.

AddEnvironmentVariables

Metodo para acceder a estos valores de variables de entorno

Secret Manager

Mecanismo para implementar secretos dentro de NET CORE. Gestione los secretos del proyecto unificados.


Resumen Pag 355 A modo de resumen y puntos clave, estas son las conclusiones más importantes de la guía.

Ventajas del uso de contenedores

Las soluciones basadas en contenedor permiten un gran ahorro, ya que ayudan a reducir los problemas de implementación derivados de las dependencias erróneas en los entornos de producción. Los contenedores mejoran significativamente las operaciones de DevOps y producción. El uso de los contenedores será generalizado. Los contenedores basados en Docker se están convirtiendo en el estándar de facto del sector, ya que son compatibles con los proveedores más importantes de los ecosistemas de Windows y Linux, como Microsoft, Amazon AWS, Google e IBM. El uso de Docker probablemente se ampliará a centros de datos en la nube y locales.

Los contenedores como una unidad de implementación

Un contenedor de Docker se está convirtiendo en la unidad de implementación estándar para cualquier aplicación o servicio basados en servidor.

Microservicios

La arquitectura de microservicios se está convirtiendo en el método preferido para aplicaciones críticas distribuidas y grandes o complejas basadas en múltiples subsistemas independientes en forma de servicios autónomos. En una arquitectura basada en microservicios, la aplicación se basa en una colección de servicios que se desarrollan, prueban, versionan, implementan y escalan por separado. Cada servicio puede incluir cualquier base de datos autónoma relacionada.

Diseño guiado por el dominio y SOA

Los patrones de arquitectura de microservicios se derivan de la arquitectura orientada a servicios (SOA) y del diseño guiado por el dominio (DDD). Al diseñar y desarrollar microservicios para entornos con necesidades y reglas empresariales en evolución, es importante tener en cuenta los enfoques y los patrones DDD.

Retos de los microser vicios

Los microservicios ofrecen muchas capacidades eficaces, como la implementación independiente, los límites de subsistema seguros y la diversidad de tecnología. Sin embargo, también suponen muchos retos nuevos relacionados con el desarrollo de aplicaciones distribuidas, como los modelos de datos fragmentados e independientes, la comunicación resistente entre microservicios, la coherencia final y la complejidad operativa que comporta agregar la información de registro y supervisión de varios microservicios. Estos aspectos presentan un nivel de complejidad mucho mayor que una aplicación monolítica tradicional. Comoresultado, solo algunos escenarios específicos son adecuados para las aplicaciones basadas en microservicio. Estas incluyen aplicaciones grandes y complejas con varios subsistemas en evolución. En estos casos, merece la pena invertir en una arquitectura de software más compleja, ya que la agilidad y el mantenimiento de la aplicación serán mejores a largo plazo.

Contenedores para cualquier aplicación

Los contenedores son prácticos para los microservicios, pero también pueden resultar útiles para las aplicaciones monolíticas basadas en el .NET Framework tradicional, al usar contenedores de Windows. Las ventajas de usar Docker, como solucionar muchos problemas relacionados con el paso de la implementación a la producción y proporcionar entornos de desarrollo y prueba vanguardistas, se aplican a muchos tipos diferentes de aplicaciones.

CLI frente a IDE

Con herramientas de Microsoft, puede desarrollar aplicaciones .NET en contenedores con su método preferido. Puede desarrollar con una CLI y un entorno basado en editor mediante la CLI de Docker y Visual Studio Code. O bien, puede usar un enfoque centrado en IDE con Visual Studio y sus características exclusivas para Docker, como la depuración de múltiples contenedores.

Aplicaciones en la nube resistentes

En los sistemas basados en la nube y en los sistemas distribuidos en general, siempre hay el riesgo de error parcial. Puesto que los clientes y los servicios son procesos independientes(contenedores), es posible que un servicio no pueda responder de forma oportuna a la solicitud de un cliente. Por ejemplo, podría ser que un servicio estuviera inactivo a causa de un error parcial o por mantenimiento, que estuviera sobrecargado y respondiera lentamente a las solicitudes o bien que simplemente fuera inaccesible durante un breve tiempo debido a problemas de red. Por tanto, una aplicación basada en la nube debe estar preparada para dichos errores y disponer de una estrategia para responder a los mismos. Estas estrategias pueden incluir aplicar directivas de reintento (volver a enviar mensajes o solicitudes) e implementar patrones de interruptor para evitar una carga exponencial de solicitudes repetidas. Básicamente, las aplicaciones basadas en la nube deben tener mecanismos resistentes, ya sean personalizados o basados en la infraestructura de nube, como los de alto nivel de orquestadores o buses de servicio.

Seguridad

Nuestro mundo moderno de contenedores y microservicios puede exponer nuevas vulnerabilidades. Existen varias formas de implementar la seguridad de la aplicación básica, basada en la autenticación y la autorización. Sin embargo, la seguridad del contenedor debe tener en cuenta otros componentes clave que resultan en aplicaciones intrínsecamente más seguras. Un elemento fundamental de crear aplicaciones más seguras es tener una forma segura de comunicarse con otros sistemas y aplicaciones, algo que a menudo requiere credenciales, tokens, contraseñas y demás, que normalmente se denominan secretos de la aplicación. Cualquier solución segura debe seguir los procedimientos recomendados de seguridad, como cifrar secretos mientras están en tránsito y en reposo e impedir que los secretos se filtren cuando la aplicación final los consuma. Esos secretos deben almacenarse y guardarse de forma segura.

Orquestadores

Los orquestadores basados en contenedores, como Azure Kubernetes Service y Azure Service Fabric, representan una parte fundamental de todo microservicio significativo y aplicación basada en contenedores. Estas aplicaciones llevan consigo gran complejidad, necesidades de escalabilidad y evolucionan constantemente. En esta guía se han presentado orquestadores y su rol en las soluciones basadas en microservicio y contenedor. Si sus necesidades de aplicación lo están dirigiendo hacia aplicaciones en contenedores complejas, le resultará útil para buscar recursos adicionales que le permitan obtener más información sobre los orquestadores.

                                                              *Si llego hasta este punto y leyo la mayoria de la documentacion lo felicito.*

                                                 *Redactado por Mario Botero*
                                [@Mariobot](https://www.twitter.com/mariobot)
                     *[wordpres.mariobot.com](https://wordpres.mariobot.com)*

Configurar un certificado gratis en tu WebApp de Azure

En el siguiente ejemplo te mostrare como configurar un certificado gratis en tu sitio web en una WebApp de Azure. Es recomendable no realizar este tipo de configuración en ambientes productivos y solo ser usado en ambientes de pruebas; Si su sitio cuenta con gran demanda de tráfico es recomendable comprar un certificado con alguno de los proveedores certificados.

Primero accedemos al sitio web https://www.sslforfree.com/ y procedemos a ingresar la dirección url de nuestro sitio. Posteriormente seleccionamos la opción verificación manual y el botón Verificación Manual de Dominio. Esto nos proporcionara unos archivos los cuales deben ser copiados en tu sitio sobre la ruta que especifica. Esta ruta debe ser exactamente igual a la que describen en la explicación. Es necesario crea las carpeta solicitadas .well-know y acme-challenge y sobre esta pegar los archivos.

DescripcionEstos archivos para que puedan ser verificados por el sitio sslforfree puede que no se puedan visualizar correctamente esto debido a que los sitios web de Azure por lo general tienen deshabilitada la opción de los mimeTypes. Es por esto que se necesita adicionar la siguiente configuración en tu web.config para validar el proceso.mimeType

Verificamos que la ruta de los archivos sean visibles y volvemos a la página de www.sslforfree.com  para proceder a descargar el certificado. Una vez el sitio comprueba los archivos anteriormente subidos se podrán descargar los archivos del certificado SSL

Estos archivos para poder ser subidos de manera sencilla por el administrador de certificados de Azure es necesario empaquetarlos en un archivo .pfx. Para esto accedemos al portal https://decoder.link/converter/ y procede a adjuntar cada uno de los archivos anteriormente descargados adicional de definirle una contraseña. (Ten en cuenta esta contraseña pues será pedida al momento de importar el certificado en el panel de Azure). Se procede a generar el archivo y se descarga el .pdfx.

ConversoSSL

Prosigue accediendo al portal de Azure y entra en la configuración de tu WebApp en la sección de Configuración de TLS/SSL.

Hacer clic en la opción Cargar Certificado y proceder a cargar nuestro archivo .pfx con la contraseña previamente almacenada.CargarCerigicado

Con estos pasos ya tenemos el certificado cargado en el administrador por ultimo lo que se tiene que hacer es asociar el certificado ya cargado al dominio personalizado que deseas aplicar para este certificado.

FinalSSL

Si todo sale bien tú sitio web contara con un certificado valido SSL gratis.

Final

Espero que sea de tu utilidad este post, no olvides compartirlo revisar las otras secciones en este blog.

20 sitios para aprender en la red

Cursos recomendados

  1. Coursera: cursos y especializaciones gratuitos y en tu idioma ofrecidos por algunas de las instituciones educativas más prestigiosas del mundo.
  2. MicrosoftVirtualAcademy: Sitio para aprender a desarrollar o administrar plataformas de Microsoft.
  3. Code School: una de las mejores escuelas de programación en linea. Cursos interactivos y retos para aprender código, escribiendo código.
  4. Class Central: cursos masivos en linea y abiertos (MOOCs) sobre cualquier tema que imagines: programación, ciencias, negocios, medicina, etc.
  5. Babbel: una de las mejores plataformas en linea para aprender un nuevo idioma.
  6. Degreed: una comunidad de profesionales universitarios en la que el objetivo es convertirte en un experto en tu materia.
  7. Curious: un sitio en el que aprender algo nuevo todos los días dedicando una pequeña cantidad de tiempo para ello: 5, 15 o 30 minutos diraios para invertir en cualquiera de las más de 20 mil lecciones virtuales.
  8. Craftsy: aprende a hacer cosas con tus manos. Desde cocina, hasta pintura o costura, gracias a más de 1000 clases de los mejores instructores.
  9. One Month: un sitio que promete enseñarte una nueva habilidad en solo 30 días.
  10.  Hackerrank : Un sitio para aprender a solucionar problemas de algoritmia escribiendo codigo en el sitio web.
  11. Codecademy: cursos de programación para principiantes. Tiene muchas lecciones básicas en español.
  12. BigThink: vídeos, artículos y consejos de expertos en muchos temas para que aprendas a ser exitoso.
  13. PhotographyCourse: cursos de fotografías especializados y para principiantes tanto gratuitos como de pago.
  14. AllTheRecipes: la escuela de cocina del popular sitio web de recetas, en la que te enseñan todo tipo de habilidades básicas para que cocines los mejores platos en casa.
  15. CodeProject: Sitio de excelentes tutoriales para aprender sobre diferentes tecnologias, los casos practicos y tutoriales son faciles de entender.
  16. W3Schools: Esta pagina te permite aprender algunos los principales estandares web, muy util para aprender las etiquetas HTML y sintaxis WEB.
  17. Pluralsight: Videotutoriales de diferentes tenologias, excelente acompañamiento de expertos y miembros reconocidos de cada especialidad.
  18. Lynda: Pagina especializada y con larga trayectorioa enseñando en multiples areas de negocio, programacion y creatividad.
  19. LearnDevNow: plataforma para aprender Programacion en freameworks corporativos
  20. Platzi: Plataforrma Latinoamerica enfocada en enseñar diseño, marketing y programacion.

Articulo original Fuente Original

Frameworks de Front-end en MVC

Un framework de Front-end tiene la finalidad de proporcionar los estilos, fuentes, iconos y recursos visuales para ser utilizados en las paginas web. Por ejemplo si se quiere cambiar el estilo de los botones tradicionales en una pagina web se puede hacer una referencia a bootstrap y el botón de la pagina cambia su estilo y presentación de acuerdo a los estilos definidos.

La idea de este proyecto (https://github.com/mariobot/UiFrameworks) es buscar entusiastas y personas que quieran participar para seguir aportando buenas practicas al momento de desarrollar un proyecto ASP MVC con frameworks de presentación.

El proyecto esta dividido en diferentes subproyectos, nombrados con el framework de presentación que se va a aplicar. (Por ejemplo) El proyecto Materialized utiliza el framework Materialized y se muestra como aplicar desde un botón, una tarjeta, un panel, etc en un proyecto MVC. A continuación adjunto la pagina con los proyectos que se encuentran en el repositorio:

Arquitectura

Cada uno de los proyectos se maneja en un puerto diferente con la finalidad de poder instalar los paquetes de nuget necesarios para cada framework, como también con la finalidad de poder manipular cada proyecto desde una aplicación diferente.

El proyecto HOME es el que hace referencia a todos los proyectos.

Home (bootstrap)

Home

El proyecto Materialized utiliza este framework de material design y hace la referencia a como se puede implementar en un proyecto ASP.Net MVC

Materialized

Materialized

El proyecto HTML5 utiliza solamente etiquetas html5 y una referencia a una cascada de estilos.

HTML5

HTML5

El proyecto Skeleton utiliza este framework, el cual destaca por su sencillez y minimalismo.

Skeleton

Skeleton

Sean todos bienvenidos a descargar el repositorio en https://github.com/mariobot/UiFrameworks y empezar a hacer sus aportes y subirlos a este git.

Origen de la fabula del ingeniero y el tornillo

El origen de la fabula del ingeniero y el tornillo tiene su origen cuando Charles P. Steinmetz, un excéntrico ingeniero que de aquellas trabajaba en General Electrics y que junto a Thomas Edison o Nikola Tesla es considerado uno de los padres de la electricidad, cobró a Henry Ford 10.000 dólares por realizar una marca de tiza en un enorme generador eléctrico averiado.

Dicha marca de tiza era el punto de referencia para eliminar 16 vueltas de la bobina del generador.  Henry Ford reaccionó con el mismo estupor que el empresario de la fábula, mientras que Charles P. Steinmetz detalló la factura del mismo modo. “Hacer una marca de tiza: $1. Saber dónde hacer la marca: $9.999″. Una anécdota que fue contada por Jack B. Scott, hijo de un antiguo empleado de Ford, en una carta que envió a los editores de la revista Life en mayo de 1965.

Enviar mensajes de texto con Twilio

Twilio

El dia de hoy quiero compartirles este recurso para enviar mensajes de texto con Twilio. Esta es una plataforma que nos permite enviar mensajes de texto, hacer llamadas, gestionar llamadas. integrar procesos de autenticacion entre otras funcionalidad. Lo bueno de esta herramienta es que ofrece una integrqacion muy facil con tus proyectos, ya sea implementando las librerias que tienen diseñadas para .Net como otras plataformas como PHP, Ruby, Phyton, Java, Node.js.

A continuación explicare el proceso para enviar los mensajes desde un proycto en asp.net mvc.

Primero necesitamos crear una cuenta en Twilio en la siguiente direccion https://www.twilio.com/try-twilio . Recuerda que debes adicionar tu telefono con el indicativo +57 (para el caso de Colombia) para hacer el proceso de validación de tu cuenta.

Una vez registrada tu linea podrás hacer todas las pruebas que quieras con la linea celular registrada. La versión free no permite registrar números de terceros. para esto es necesario comprar el paquete de mensajes.
Una vez registrado entramos a la siguiente dirección para consultar nuestras credenciales que utilizaremos en la API https://www.twilio.com/user/account/settings  (Hacer clic en el candadito para mostrar el Token)
La sección de documentación de la api de Twilio la puedes encontrar en la siguiente dirección https://www.twilio.com/user/account/developer-tools/api-explorer/message-create En esta se encuentra todo el instructivo para utilizar la api.
En la siguiente dirección encontraras el paquete en nuget para adicionarlo al proyecto en . Net https://www.nuget.org/packages/Twilio
Hay que tener en cuenta que Twilio asigna un teléfono a tu cuenta. este teléfono asignado se tiene que utilizar al momento de enviar el mensaje, si no se utiliza la api no permite enviar mensajes. el teléfono que te asignan lo puedes encontrar en la siguiente dirección https://www.twilio.com/user/account/voice-sms-mms
Con todo listo para utilizar la api creamos un nuevo proyecto MVC en Visual studio y adicionamos el paquete de twilio. Una vez adicionado ya podremos utilizar la librería. recordar hacer la referencia a la librería en tu controlador. using Twilio;

// Download the twilio-csharp library from twilio.com/docs/csharp/install
using System;
using Twilio;
class Example
{
static void Main(string[] args)
{
// Find your Account Sid and Auth Token at twilio.com/user/account
string AccountSid = "yourAccountSid";
string AuthToken = "yourToken";
var twilio = new TwilioRestClient(AccountSid, AuthToken);
var message = twilio.SendMessage("el numero asignado por Twilio", "+57 Tu   telefono el que esta registrado", "Aqui va el mensaje de texto", null, null);
Console.WriteLine(message.Sid);
}
}

Un Buen PM Project Manager

Son 13 percepciones que en su momento hablamos durante una charla tecnica con un colega.

  1. Tratar las personas como personas y no como recursos.
  2. Jamás calcular tiempos con sobre-estimaciones, o pensando que se puede trabajar extra-horario.
  3. Nunca definir personas al 100% en un proyecto (uno va al baño, tiene llamadas, trancones, etc).
  4. Delegar tareas de acuerdo al nivel de cada dev.
  5. Aplicar las metodologías, si es scrum entonces hacer lo que ellos promueven.
  6. Involucrar a todo el equipo en las reuniones de entendimiento.
  7. El líder tecnico idealmente solo debe estar en 1 proyecto.
  8. Involucrar la parte de qa desde el inicio de la aplicación.
  9. Asegurarse que todos entienden de la misma forma los requerimientos.
  10. El PM (Project Manager) no debe ser un secretario, sino un facilitador (el pm no debe joder pq si).
  11. Siempre estimar tiempo para imprevistos (vacaciones, renuncias, incapacidades, problemas con x implementación, falta de hardware).
  12. Tener claro que las persones nuevas no producen al sigueinte día y afectan el desempeño de los demás.
  13. Dejar tanto correo y usar herramientas de seguimiento (como VSO – Assembla – Trello)

24 Rápidos tips para impulsar tu carrera como ingeniero este año.

Cada Punto esta explicado y analizado en ingles mas puntualmente en el blog de Jhon Sonmez

Soft Skills
Soft Skills, Libro recomendado

Entrevista MVC preguntas y respuestas

Que es MVC?

MVC es un patrón de programación que esta dividido en tres capas, El Modelo, La Vista, y El Controlador. A continuación la función principal de cada uno
  • La “Vista” es responsable del aspecto visual.
  • El “Modelo” representa el mundo real a partir de objetos que son pasados a la vista.
  • El “Controlador” es responsable de tomar la petición del usuario y cargar la correspondiente Vista y Modelo.
Puedes explicar el flujo completo de MVC?
A continuación el flujo en MVC (Modelo-Vista-Controlador) Arquitectura
  • El usuario realiza el request al controlador.
  • El controlador dependiendo del request, decide que modelo cargar, El controlador carga el modelo y adjunta el modelo a la vista apropiada.
  • Al final la vista con el modelo de datos envía el request al usuario final al navegador.
MVC es apropiado para aplicaciones windows y web?
La arquitectura MVC es apropiada tanto para aplicaciones web como para aplicaciones Windows, pero para aplicaciones Windows es mas recomendable utilizar patrones como MVP Modelo Vista presentación o el patron MVVM.
Cual es el beneficio de utilizar MVC?

Sigue leyendo