miércoles, 1 de marzo de 2017

100. Resumen (Primera meta numero 100)

Por increíble que parezca hemos llegado a las primeras 100 entradas en el blog, pese a que en algunos momentos, por motivos laborales no he podido escribir a la velocidad que desearía y que existen muchos temas que tenemos abiertos.

Llegar a 100 números en menos de 2 años inicie el proyecto el 22 de junio de 2015 y hoy 01 de Marzo de 2017 llegue a la primer meta de esta aventura, aventura que ha tenido como principal motivo, compartir y aprender cada día, aprender lo que ocurre en este frenético mundo del computo, comentar puntos de vista, y escribir sobre ese tema en el que trabajo y tanto me apasiona.

Les dejo la lista de estos primeros 100 numeros

Numero Titulo Seccion
99 SQL Server Always Encripted Construyendo en el espacio
98 Microservicios Construyendo en el espacio
97 DevOps (3) - Infraestructura como codigo Construyendo en el espacio
96 Pruebas cudradas Desde el divan del gato
95 Visual Studio 2017 Noticias
94 Configurar el IIS para https Ayuda Rapida
93 DevOps (2) Construyendo en el espacio
92 Bases de datos noSQL Construyendo en el espacio
91 Nuevo amanecer - BITCOIN Desde el divan del gato
90 SQL Padres sin hijos Ayuda Rapida
89 Eliminando duplicados en una base de datos Ayuda Rapida
88 Aplicaciones Universales Dia 1 Aplicaciones Universales
87 Arreglo de caracteres a cadena C# Ayuda Rapida
86 Aplicaciones Universales Construyendo en el espacio
85 Insertar a SQL una fecha por un Query Ayuda Rapida
84 Desarrollando CFDI Noticias
83 DevOps(1) Construyendo en el espacio
82 Dia del programador Noticias
81 Telefonia movil Desde el divan del gato
80 Creando una dll desde un programa Ayuda Rapida
79 SQL Server Configuration Manager  Ayuda Rapida
78 Saltos de linea Ayuda Rapida
77 sql EXEC master..xp_cmdshell ¿Usarlo? Construyendo en el espacio
76 Zen de Python Ayuda Rapida
75 Home Office Desde el divan del gato
74 Buid 2016 Desde el divan del gato
73 Xamarin - Visual Studio Noticias
72 Cientifico de datos Desde el divan del gato
71 Control de excepciones Construyendo en el espacio
70 HoloLents - build 2016? Noticias
69 Andrew S. Grove 1936 - 2016  Nuestra historia
68 Windows 10 mobile - el sentido de pertenencia Desde el divan del gato
67 SQL Llenar con ceros un numero  Ayuda Rapida
66 GhostDoc Construyendo en el espacio
65 Microsoft adquiere Xamarin Noticias
64 Validar mi HTML Construyendo en el espacio
63 Microsoft holographic academy Noticias
62 This platform could not be created becouse a solution platform of the same name alrready exists  Ayuda Rapida
61 Motivacion Desde el divan del gato
60 Ondas Gravitacionales de Einstein Noticias
59 ¿Que contiene una actualización de Windows? Construyendo en el espacio
58 BCP (BulkCopy) Unicode en SQL Ayuda Rapida
57 Eliminar la parte de tiempo de una fecha  Ayuda Rapida
56 Formato Universal de Fecha en SQL  Construyendo en el espacio
55 HoloLents y superbowl Noticias
54 Alto vuelo Desde el divan del gato
53 Determinar si una constraint existe en SQL  Ayuda Rapida
52 Discos duros virtuales  Ayuda Rapida
51 Alan Turing Nuestra historia
50 Split Ayuda Rapida
49 Diferencia entre 2 fechas sql Ayuda Rapida
48 Reflexion sobre seguridad Desde el divan del gato
47 Getfiles Vs EnumerateFiles Ayuda Rapida
46 Sia inicial de un mes SQL Ayuda Rapida
45 C# 6.0 Null-Conditional Operators Construyendo en el espacio
44 Reinstalar todos los paquetes de nuget Ayuda Rapida
43 Deuda tecnica Construyendo en el espacio
42 Fin de soporte Windows8 Noticias
41 .NET 4.5 Compesion de directorios Construyendo en el espacio
40 C# 6.0 Dictionary Initializers Construyendo en el espacio
39 C# 6.0 Property Initializers Construyendo en el espacio
38 C# 6.0 Interpolated Strings Construyendo en el espacio
37 Concatenar Archivos Construyendo en el espacio
36 Patrones Proxy Construyendo en el espacio
35 Buen software Desde el divan del gato
34 Kenneth Thompson Nuestra historia
33 Distinct en una lista Ayuda Rapida
32 Buid 2016 Noticias
31 Ciclo de vida Internet explorer Noticias
30 Usabilidad Construyendo en el espacio
29 Diferencia entre 2 fechas Ayuda Rapida
28 Dennis Ritchie Nuestra historia
27 Parpadeo en DataGridView Ayuda Rapida
26 Ada Lovelance Nuestra historia
25 Nuestra historia Nuestra historia
24 FileSystemWatcher Ayuda Rapida
23 Calculo de SHA1 para un archivo Ayuda Rapida
22 WinForm - ListBox - Copiar todos los elementos Ayuda Rapida
21 Agua en marte Noticias
20 Metricas (Indice de Mantenibilidad) Construyendo en el espacio
19 Metricas (numero de lineas) Construyendo en el espacio
18 Metricas (profundidad de herencia) Construyendo en el espacio
17 ¿Qué nos hace programadores? Desde el divan del gato
16 Metricas (Cohesion y Acoplamiento) Construyendo en el espacio
15 Metricas (complejidad ciclomatica) Construyendo en el espacio
14 Calidad Desde el divan del gato
13 Plan de ejecucion Construyendo en el espacio
12 Patrones Facade Construyendo en el espacio
11 Visual Studio Threads Construyendo en el espacio
10 Instaladores  Ayuda Rapida
9 Patrones Decorador Construyendo en el espacio
8 Base de datos Desde el divan del gato
7 Programar en paralelo Construyendo en el espacio
6 Pensamiento Magico Desde el divan del gato
5 Herramientas - Mi propio NuGet  Construyendo en el espacio
4 Patrones Construyendo en el espacio
3 Desarrollando Noticias
2 Optimizar el performance  Construyendo en el espacio
1 Reflexión sobre el papel del Arquitecto  Desde el divan del gato



Felices lineas


99. SQL 2016 Dia 1 - SQL Server Always Encripted

Como arquitecto, uno siempre debe tener la visión de todos los elementos que interactúan en un sistema, como desarrollador uno debe saber emplear las mejores características que nos otorgan estos elementos para poder llegar a las mejores soluciones, NO ES VALIDO DECIR YO SOLO PROGRAMO Y NO SE OTRA COSA, este programador no me sirve, por que no sabe interactuar con su entorno.

Así, un desarrollador siempre debe estar aprendiendo, tenemos SQL 2016, recién salido del horno, este trae una serie de nuevas características, es importante que las conozcamos, para poder explotarlas, siempre es bueno tener las ultimas versiones, por que estas forman parte de un proceso evolutivo, en el que se tiene mejor rendimiento y seguridad, pero a la vez es necesario saberlas explotar.

Always Encripted es una herramienta muy útil que trae consigo SQL 2016 y .NET 4.6 (requisitos minimos), su uso es que nos permite tener datos permanentemente encriptados en la base de datos (sin posibilidad de modificarlos directamente a menos de que tengamos el certificado digital con el que se encriptaron), de tal forma que los datos solo están disponibles para aquellas personas que tengan el certificado digital en sus equipos.

Si los administradores de base de datos no tienen dichos certificados, no podrán ver la información, aunque tengan el nivel mas alto de privilegios.

Esto genera verdaderos dueños de la información, y verdaderos administradores de Base de datos.

¿Qué pasa si se roban la base de datos?

Si se roban la base de datos, la información estará encriptada, para recuperarla es necesario tener el acceso al certificado digital.

Y lo mejor de todo, es que SQL y .NET se encargan del proceso de cifrado, por parte del administrador de base de datos, solo es necesario configurar la tabla, por parte de desarrollo, solo es necesario instalar un certificado y configurar la cadena de conexión para que tenga este nuevo parámetro.

Pasemos al ejemplo

1. Creemos una base de datos


Consideremos que deseamos encriptar algún campo de la tabla usuario


digamos el campo clave

Con el botón derecho del mouse nos situamos sobre la base de datos, para obtener un menú contextual


Seleccionemos encriptar columnas

Este nos traerá una pantalla para seleccionar lo que deseamos hacer


Seleccionemos las columnas a encriptar


Seleccionemos nuestro certificado (para el caso de este ejemplo dejaremos que sql genere uno, dentro del almacén de Windows, pero podemos o debemos usar certificados propios para tener realmente la característica de seguridad)


Ejecutamos el proceso



Y tenemos ya el campo encriptado



Nuestra consola no esta configurada para hacer uso del certificado por lo que no estamos capacitados para insertar en la base de datos de forma directa.


Dentro de la carpeta de seguridad en always Encripted key es en donde se guarda la configuración de nuestros certificados, y es aquí en donde se puede configurar un certificado no auto generado.


Ahora carguemos un registro desde una aplicación .NET





Es muy importante que la versión de .NET sea 4.6 o superior





Veamos este fragmento de código, tiene una diferencia en la cadena de conexión, esta es Column Encryption Setting=enabled, esta es la que hace la magia.

Otra cosa importante a considerar es que los valores se deben pasar como parámetros para que .NET sepa cual sustituir.

Ejecutemos la aplicación y consultemos en base de datos.



Para el DBA los datos se mostraran encriptados puesto que el no es dueño de la aplicación.

Consultando los datos desde .NET


El código que se empleo para consultar fue:


Felices lineas



miércoles, 22 de febrero de 2017

98. Microservicios

Este es un tema muy interesante, por eso también vamos a abarcar algunos post, no he dejado el tema de DevOps, por que los micro servicios entran en dicho tema, tampoco quiero empezar por nano servicios que es otro tema interesante, sino que quiero avanzar poco a poco en este tema.

El computo se ha desarrollado de manera vertiginosa, en muy poco tiempo, hace unos cuantos años se hablaba siempre de aplicaciones monolíticas, que lo mas que se dividían en capas, para brindar seguridad y cierta especialización.

En algún momento hablamos de SOA, la arquitectura orientada a servicios, en donde considerábamos que todo era un servicio, todos los front end, son clientes de servicios en el backend, se busco una reutilización de código y de recursos, con grandes servicios que se encargaban de efectuar las tareas de una manera eficiente.

Después entramos a la era móvil, en donde el computo deja de estar en un escritorio y pasa a las manos de los usuarios, en donde se requiere un desarrollo ágil, y  cualquier error nos puede costar la venta de nuestro producto es aquí en donde podemos hablar de micro servicios

¿Qué es un micro servicio?

Es una Arquitectura para el desarrollo de aplicaciones por medio de pequeños servicios altamente especializados y aislados entre si.

Es construir nuestra aplicación por medio de piezas de lego.

¿Cómo es su arquitectura?

Cada micro servicio debe efectuar una sola actividad, tener su propia responsabilidad y ser altamente especializado.

Cada componente debe ser independiente de otro.

Esta independencia se debe dar en el desarrollo, ya que al ser especializados los componentes se convierten en cajas negras, esto también nos permite utilizar múltiples tecnologías para el desarrollo de los micro servicios.

Independientes en el despliegue, los micro servicios se pueden desplegar sin necesidad de desplegar toda la aplicación, esto permite que se hagan cambios con ventanas de mantenimiento pequeñas, permite el poder probar solo partes especificas de la aplicación por que se garantiza que el resto de la aplicación no tiene cambios.

Se tiene un ciclo de vida pequeño, al ser un componente pequeño este puede pasar en muy poco tiempo hasta producción.

No existe acoplamiento entre servicios, cada servicio es independiente, incluso de base de datos, al ser independientes, la información que almacena se puede guardar en sitios muy diversos sin necesidad de tener un repositorio centralizado.

Cada componente tiene su lógica interna el micro servicio y la comunicación entre ellos se efectúa por canales externos de comunicación.

Se trabaja con base a contratos.

¿Qué justifica su uso?

El ambiente cambiante en el que nos encontramos, en el que una aplicación necesita desarrollarse de una manera rápida, el no tener grandes ventanas de despliegue, el poder tener en los equipos de desarrollo a la gente especializada para cada función.

¿Cuáles son sus ventajas?

Pueden crecer muy rápidamente
Es posible encontrar cuellos de botella muy rápidamente y superarlos, escalando de manera individual
La pase de pruebas es rápida, ya que se prueba solo un componente
Se puede agregar funcionalidad nueva en muy poco tiempo
Cuentan con una gran estabilidad

¿Cuáles son sus desventajas?

No todo lo que brilla es oro, y menos en este caso.

Los micro servicios emplean un medio de comunicación que puede ser inestable, por lo que deben ser altamente tolerantes a fallos, todos los errores que puedan ocurrir deben estar controlados.

Al ser aplicaciones independientes estas pueden tener errores de manera independiente, por lo que un error en erras debe ser controlado por la aplicación que la invoca.

Se requiere que los equipos de desarrollo tengan mucha comunicación ya que el comportamiento real de los micro servicios se ve al momento en que se hace la integración de los mismos, por lo que se deben definir los contratos de manera detallada, para que realmente se de comunicación entre ellos.

No existe un control total de la aplicación, al estar separada en servicios, la aplicación se encuentra fragmentada.

Si no existe documentación, el nivel de entropía se incrementa, ya que se convierten en grafos con múltiples ramas y múltiples caminos.

Se incrementa la complejidad del despliegue, no es lo mismo desplegar un servicio que 100, por lo que se deben emplear herramientas de automatización.

Se incrementa el trabajo de administración por parte de infraestructura, no es lo mismo verificar que corra un servicio a que corran 100

Si no se cuentan con procesos automáticos de mantenimiento y despliegue se incrementa la posibilidad de error humano

Se debe contar con una infraestructura que soporte el modelo, mas servicios es mas memoria

Al ser servicios especializados cada servicio es una caja negra, se debe tener una confianza total en los desarrolladores.

Y lo mas importante, esta arquitectura no es para cualquier equipo de desarrollo, se debe tener una madurez entre las áreas, por que de otra forma se perderá el control en la administración de los micro servicios

Felices líneas











lunes, 20 de febrero de 2017

97. DevOps (3) - Infraestructura como codigo

Infrastructure as Code (IaC), es uno de los pilares de DevOps y quizás también uno de los pilares de la computación de esta era, ¿En que consiste este pilar?, consiste en poder crear la infraestructura necesaria para que el servicio opere por medio de archivos de definición.

Esto en el pasado, podía sonar imposible, ya que la infraestructura era adquirida tomando en cuenta las necesidades de la empresa y las proyecciones de crecimiento de la misma, de tal forma que por lo regular se adquiría una infraestructura que la mayoría del tiempo permanecía ociosa, o peor aun se compraba la infraestructura para responder a los momentos en que se requiriera mayores recursos de hardware, cuando muchas veces esto era solo un periodo pequeño en el transcurso del tiempo.

El computo en la nube, promueve la infraestructura como servicio, permitiendo crear los equipos de computo en la nube, en cuestión de minutos partiendo de un archivo de definiciones.

¿Qué ventajas tenemos?

Reducción de costos, usamos solo lo que necesitamos usar y solo cuando el proceso esta listo para ello, por lo que no existen equipos en espera de un nuevo componente.

Velocidad, la velocidad de implementación es alta, así mismo la velocidad para crecer o decrecer la infraestructura.

Velocidad al momento de efectuar liberaciones, una liberación se puede efectuar en un equipo clon del equipo productivo, y únicamente sustituir la IP del productivo por la del Clon, con lo que los tiempos de despliegue, o de actualizaciones por parches de seguridad se vuelven mínimos

Los equipos de pruebas pueden efectuar ciclos de pruebas en ambientes similares a producción.

Reducción de riesgos, al desarrollar y probar en un ambiente similar los riesgos atribuidos a los cambios de ambiente se reducen dramáticamente.

En asure podemos crear diferentes archivos de declaraciones que nos permiten generar la infraestructura desde código, pero al ser este un pilar (mejores practicas de DevOps) se puede considerar que al día de hoy prácticamente cualquier ambiente de nube, tiene la característica de generar Infraestructura como código.


Felices Lineas

miércoles, 15 de febrero de 2017

96. Pruebas cudradas (Desde el divan del gato)

Un tema muy interesante en desarrollo en el que yo en lo personal no coincido con muchos colegas o incluso con la literatura, es el tema de pruebas, principalmente en esta época en que las aplicaciones dejan de construirse para un grupo pequeño de usuarios (anteriormente yo hablaba que una aplicación era usada en una PC con características que conocía, y era usada por los usuarios de una empresa o sector en particular) a aplicaciones que si tienen éxito serán empleadas por millones de usuarios en dispositivos con características que desconozco.

Sumemos otro factor, la exigencia de los usuarios hoy en día es mayor, si hablamos de hace 10 años los usuarios estaban acostumbrados a que un buen numero de aplicaciones eran lentas y si fallaban pues había que vivir con el problema, no existía otra opción, hoy en día, esas opciones nacen todos los días y si la aplicación falla, o no enamora al usuario, simplemente se dejara de usar.

Un error grave debe corregirse en minutos, mientras menos usuarios lo vean, menos usuarios perderé.

Otro factor importante, es el numero de entradas que hoy en día tiene un sistema, cada una de ellas puede ser un factor que genere un error no controlado.

La comunicación, puede variar aun en sitios en los que se supone esta no falla, un ambiente heterogéneo, no controlado, que debe hacernos mirar para muchos lados para conseguir un verdadero sistema, que sea capaz de recuperarse de una falla.

Esto hace que los casos de prueba, que en la mayoría de los casos solo revisan reglas de negocio, dejen de ser suficientes, y mas por que la mayoría de los ambientes de pruebas son ambientes controlados, es decir yo se lo que hay, conozco la infraestructura y esta nunca falla.

El equipo de pruebas hoy en día debe ver mas allá, pero no solo ver que el sistema no falle, debe ver también que el usuario, que es un cliente potencial (el puede recomendar el sistema) se sienta cómodo con el.

Mi sistema debe sobreponerse a fallas en este ambiente heterogéneo, ya que una falla puede ocasionar que el usuario se sienta inseguro y lo deje de usar.

¿Qué debo mirar?

Ve 2 cosas al desarrollar, primero que nada que el sistema sea fácil de usar, y no complique de mas los procesos, este punto es el mas complicado de hacer, por que todos somos diferentes, y recordando la frase que dice que el sentido común es el menos común de los sentidos, la situación se vuelve mas complicada.

Observa el sistema como los bloques que lo forman

Los procesos que se desarrollan en el sistema son un núcleo aislado que se compone de un conjunto de entradas y salidas, estas entradas y salidas forman flujos que conectan diversos componentes.

Todo aquello que entre y salga del núcleo son puntos en los que siempre se puede suscitar una falla que se encuentre fuera de los casos de prueba de un sistema, además todos estos son los puntos que se vuelven vulnerables a ataque principalmente en este mundo conectado.

Ve la base de datos, es algo externo a tu sistema, siempre puede fallar
Ve las comunicaciones por red, nada te garantiza que la red siempre este conectada
Ve el almacenamiento, los accesos a disco, nada te garantiza que tienes un espacio ilimitado
Ve las comunicaciones entre tus componentes, pese a que sean en el mismo equipo, los datos están viajando
Ve todos aquellos componentes que ocupes de terceros, que trabajen junto a tu sistema
Ve los dispositivos de entrada y salida

No pierdas de vista esto, por que recuerda, hoy en día el usuario no perdona, el usuario abandona


Felices líneas