martes, 24 de mayo de 2016

77. sql EXEC master..xp_cmdshell ¿Usarlo?

Ya ha pasado un rato que no he escrito, una disculpa, múltiples actividades redujeron un poco mi tiempo, pero eso no quiere decir que me he olvidado de este proyecto.

La siguiente es una opinión mía, basada únicamente en mi experiencia es posible que no la compartan pero ese es el punto principal de la creación de un blog, incitar al debate.

En este caso hablaremos de xp_cmdshell, que nos sirve para hacer llamadas al sistema operativo desde un store procedure de la base de datos.

Si bien esto nos dota de una herramienta muy poderosa ya que nos permite la interacción con procesos externos, abre algunas puertas para poder ejecutar comando no deseados en el sistema operativo, y he aquí una de las grandes debilidades, si se tiene una mala codificación, este comando podría permitir una inyección de código directo al sistema operativo, que se ejecutaría con un usuario que tiene los privilegios del usuario de la base de datos, o del store procedure en cuestión.

Bueno esto siempre puede ser contenido, limitando los privilegios de acceso, evitando enviar concatenaciones a este comando que se puedan manipular desde afuera.

Sin embargo la puerta esta abierta.

Yo soy firme creyente de que el motor de base de datos no se debe sobrecargar, y sobrecargar el equipo en el que se encuentra dicho motor tampoco es buena idea, el uso de este comando hace que las acciones que se ejecutan sobre sistema operativo, o con un programa externo se ejecuten en el mismo equipo en el que se encuentra la base de datos, si hablo de una base de datos productiva en la que me interesa que el servidor en el que se encuentra la base se dedique solo a administrar la base, es un grave error quitarle recursos.

Los StorePorcedures no deben tener una lógica de negocio complicada, por que todo lo que se haga en ellos se hace en el servidor de base de datos, y repercute contra la cantidad de operaciones en paralelo que nuestro servidor sea capas de resolver, todos los accesos a base de datos deben ser rápidos, no deben tomar periodos de tiempo prolongados por que esto genera que las operaciones a la base se empiecen a encolar.

Cuando invocamos una llamada al sistema operativo desde el motor, este permanece a la espera de que el sistema operativo termine su proceso, empleando un hilo de la base de datos que se encuentra ocupado, pero sin una actividad real.

Una llamada al sistema operativo no puede ser cancelada desde la base de datos, imaginemos que hacemos una llamada a un proceso que consume gran cantidad de recursos, puede incluso provocar que nuestra base de datos se detenga, y aun si la cancelamos desde SQL, el proceso se cancelara hasta que la llamada al Sistema operativo termine, como consecuencia solo podremos cancelarlo desde el servidor mismo.

En mi opinión, usar una llamada a sistema operativo, desde la base de datos, si es posible pero siempre y cuando se valoren los pros y contras de la misma, yo en lo personal prefiero no usarla.

Felices lineas.

viernes, 8 de abril de 2016

76. Zen de Python

La base de python es la filosofía que favorezca el código legible, y bueno ella en realidad es un gran aporte para todos los desarrollos, no solo los desarrollos de python, es algo que deberíamos hacer nuestra ya que mucho de lo que dice ahí nos ayuda en nuestro trabajo.

Piénsenla, háganla suya, conviertanla en un himno, el hacer cosas complejas no nos hace mejores, simplemente aumenta la posibilidad de cometer errores.

La mejor arquitectura siempre es la mas sencilla por que todo mundo la comprende, la puede manejar, la puede desarrollar y trabajar con ella.

Tim Peters es el desarrollador al que le debemos esta reflexión

Bello es mejor que feo.
Explícito es mejor que implícito.
Simple es mejor que complejo.
Complejo es mejor que complicado.
Plano es mejor que anidado.
Disperso es mejor que denso.
La legibilidad cuenta.
Los casos especiales no son tan especiales como para quebrantar las reglas.
Lo práctico gana a lo puro.
Los errores nunca deberían dejarse pasar silenciosamente.
A menos que hayan sido silenciados explícitamente.
Frente a la ambigüedad, rechaza la tentación de adivinar.
Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.15
Ahora es mejor que nunca.
Aunque nunca es a menudo mejor que ya mismo.
Si la implementación es difícil de explicar, es una mala idea.
Si la implementación es fácil de explicar, puede que sea una buena idea.
Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Felices Lineas

jueves, 7 de abril de 2016

75. Home Office

El mundo ha evolucionado, se ha hecho mas pequeño, la información viaja en segundos, nos hemos convertido en una humanidad colaborativa, en la que las fronteras importan poco, los idiomas dejan de ser una barrera, la información se comparte, somos capaces de trabajar juntos, experimentar un proyecto desde muchos puntos de vista, en donde uno de ellos es la misma visión cultural.

El trabajo en casa poco a poco se ha hecho popular en el mundo, teniendo un sin numero de ventajas, entre ellas podemos mencionar, es posible tener a los mejores como miembros de un equipo ya que deja de importar la distancia y las fronteras, las personas no llegan de mal humor o agotadas por el transporte, se humaniza el trabajo ya que se efectúa una labor productiva, pero a la vez el trabajador se encuentra cerca de su familia, recuperando el estado de familia como célula social y semilla del futuro de la humanidad, el trabajador puede observar a su familia, y esta crece en el seno de una familia unida, se da un ahorro de recursos por parte de la empresa ya que estos son transferidos directamente al trabajador, el trabajador debe ser altamente eficiente debido a que al no encontrarse en el sitio, su trabajo no debe prestarse a una interpretación incorrecta.

Claro para hacer esto se requieren cambios en varios niveles, ya que los colaboradores deben ser responsable de sus entregas las cuales deben ser realistas y entregadas con la calidad adecuada, los coordinadores deben tener capacidad para coordinar equipos con múltiples culturas en múltiples usos horarios, y saber que hace y como lo hace cada miembro del equipo.

Si esto es correcto entonces ¿Por que muchas organizaciones lo ven con malos ojos?, desde mi punto de vista nos enfrentamos a una resistencia que impone la misma cultura, ya que esto no ocurre igual en todos los países, en algunos países como México país en el que me encuentro la cultura empresarial sigue viendo con malos ojos el no tener al empleado cerca, partiendo de muchos conceptos erróneos que se encuentran muy arraigados en la sociedad, una cultura de premios y castigos en las que los jefes o gerentes están acostumbrados a llamar la atención de un empleado cuando las cosas no salen como se esperan, el temor de que si el empleado no esta no efectuara las actividades que tiene asignadas, la sobre explotación que se da en algunas empresas que hacen que un trabajador se encuentre en ellas en jornadas muy largas con la falsa idea que esto lo hace ser responsable a los ojos de los demás, la necesidad de ver y controlar en todo momento al trabajador.

El tiempo en el que vivimos nos coloca en la necesidad de hacer un cambio en nuestra cultura como empresa, en todos los niveles, con la finalidad de poder obtener los beneficios que nos entrega la nueva tecnología.

Pero este cambio es muy complicado sobre todo cuando la tecnología no nació con uno sino que se unió a uno en el transcurso de la vida

Felices lineas


martes, 5 de abril de 2016

74. Build 2016 - Reflexiones

Hoy es el mejor momento para ser un desarrollador, esta es la principal reflexión que nos deja este build 2016 y no puedo estar mas de acuerdo, la tecnología se ha desarrollado de una manera exponencial, hace unas cuantas décadas los equipos de escritorio tenían una capacidad inferior a cualquier celular, la adopción tecnología es cada día mas rápida, el teléfono tardo varias décadas en llegar a todos los hogares, el ratio, la televisión, Internet solo ha tardado unos cuantos años, la tecnología móvil ha tenido ya mas de una renovación, visiblemente yo hablaría de 3 renovaciones, la primera cuando nacen los teléfonos celulares, que únicamente se emplean para hacer llamadas, la segunda la llegada de teléfonos capaces de tomar fotografías y ejecutar pequeños procesos, la tercera la llegada del smart phone y la cuarta sera ya un cambio radical hacia una tecnología de realidad aumentada como la que proponen los hololents, esto es muy probable.

Los equipos de computo también han cambiado, hoy en día una computadora de escritorio puede ser incluso estorbosa, y necesaria solo para un pequeño grupo de individuos, principalmente desarrolladores, la laptop suple a la computadora de escritorio, nos da movilidad, la tablet cambia la forma en la que nos comunicamos con el equipo, lo hace mas portátil... los lentes eliminan un mundo bidimencional y nos envían a un mundo tridimencional.

Los costos bajan, la nube crece, antes tener un servidor en Internet era algo impensable para alguien que no fuera una empresa, hoy se puede tener un servidor que cobre lo que yo uso a un precio muy accesible, si lo uso me cobran, si necesito mas potencia solo la incremento, un modelo que me permite bajar costos, antes se quería tener todo en casa, hoy la información vive en el mundo entero.

Por eso mismo vivimos una época de evolución y como lo reiteraron muchas veces en build, no hay mejor momento para ser un desarrollador.

Bueno platiquemos un poco de aquello que se dio en este evento

Continium

Una PC en un celular con la capacidad de conectarse en donde se encuentre una pantalla, una PC que nos permite trabajar, que nos permite divertir, nos permite construir, en algo tan pequeño y portátil como un celular.

Ubuntu + Windows

Esta es una prueba de la convergencia que se esta dando en estos días, la posibilidad de ejecutar de forma nativa el bash de ubuntu, brinda una gran cantidad de posibilidades, ya que tendremos disponibles un conjunto de herramientas que antes solo las teníamos disponibles mediante emulación, unidos somos mas fuertes esa es la mentalidad que nos muestra en esta ocasión el equipo de Windows en ves de desgastarse peleando una guerra, por que no sacar lo mejor de ambos mundos

Xamarin Gratis

Algo que esperábamos incluso desde antes de que Microsoft comprara Xamarin, pero cuando ya se veía el coqueteo de ambas empresas al incluir Xamarin en Visual Studio, un paso hacia la convergencia de todos los sistemas operativos móviles, y quizás el mayor soporte que Microsoft le puede dar a su propio sistema operativo móvil, si ya desarrollaron un app en C#, y para Android e IOS, pues ya están a un paso de poderla vender también en Windows, entonces por que no hacerlo.

HoloLents

Para mi es el sueño hecho realidad, el romper la barrera del monitor, y la barrera de las 2 dimensiones, es la jubilación de los smartphones y de los viejos equipos de escritorio, algo que si bien tardara un poco todavía en llegar a nuestros hogares, plantea un nuevo paradigma para el computo y el futuro

Xamarin Test cloud

Las pruebas siembre han sido un tema complicado cuando la cantidad de variantes se incrementan, y como en el caso de los dispositivos móviles, estas se vuelven casi imposibles, de manera física, esta herramienta nos ayuda a probar el código, rápidamente, sin gran inversión y de manera simultanea, así tenemos que las pruebas se simplifican al probar en múltiples dispositivos al mismo tiempo, un gran acierto por un costo reducido https://www.xamarin.com/test-cloud

Convergencia

Que puedo decir, tenemos equipos rápidos, tenemos memoria, tenemos posibilidad de que todo parta de un código y se valla a múltiples fuentes, un solo lenguaje para todo.

Xbox One Developer

La industria de los vídeo juegos es una de las mas demandantes, emplea una cantidad de recursos del equipo de computo alto, ademas de ser la industria que mas ingresos deja, al hablar de convergencia todo es Windows y como tal desarrollar juegos para el Xbox one ya no es cosa de grandes desarrolladoras, ya puede ser hecho por un programador solitario

Cortana

Los asistentes personales evolucionan, aprenden de nosotros y están en todos nuestros equipos se puede decir que son un extra a nuestra propia memoria

Smart-bots

Inteligencias artificiales, que nos ayudan para resolver problemas dar soporte, mantener conversaciones aprender, todo en la nube, todo con un gran banco de datos que esta a nuestro alcance

Hay mucho por hacer y cada día hay mas herramientas para ello, somos protagonistas de una era, podemos crear sueños, ya que soñar es el limite

Felices lineas

jueves, 31 de marzo de 2016

73. Xamarin - Visual Studio

Pensaba esperar a que terminara el build 2016 para escribir una reseña al respecto, pero creo que la noticia que se dio el día de hoy tiene una relevancia tal que hay que gritarla a todas partes.

¿Por que? por que catapulta a C# a una posición de ventaja permitiendo la creación de aplicaciones para IOS, Android y Windows Phone, de manera gratuita para cualquier usuario de Visual Studio.

¿Que nos permite esto? que se crea una aplicación una vez y se distribuye a cualquier dispositivo, ya no solo de la familia Windows, eso quiere decir que si este proyecto continua por buen rumbo, puede convertir a C# en el lenguaje mas importante para el futuro cercano, un futuro en el que la computación móvil es de gran relevancia.

Crear desde C# nos permite que las aplicaciones nazcan para Windows Phone y de ahí se vallan a los otros sistemas operativos, no es necesario que aprendamos otros lenguajes, desde C# podemos crear maravillas que se empleen en la computación móvil.

La incorporación nos permite ahora ser punta de lanza en las creación de aplicaciones, y convertir en realidad el sueño de todo desarrollador, un solo código múltiples sistemas

https://store.xamarin.com/

Por cierto esta es una noticia que muchos esperábamos desde que salio la noticia de la adquisición de Xamarin por Microsoft

Saludos

miércoles, 30 de marzo de 2016

72. Científico de datos - La evolucion


La imagen anterior no es mía, la tome prestada de un curso que les recomiendo ampliamente, https://www.coursera.org/learn/data-scientists-tools, este es el curso de científico de datos que imparte la universidad de John Hoppking por medio de coursera.

Hace tiempo escribí una entrada de lo que es un desarrollador, en aquel momento comente que esa era una entrada viva que cambiaba con respecto al tiempo, bueno ahora me pregunto que debe ser un desarrollador, y la única respuesta que obtengo en este momento, es que un buen desarrollador debe ser un científico de datos, ¿Por que digo esto?, por algo muy sencillo vivimos en una era del big data, en la que tenemos grandes cantidades de información, información que debemos comprender, se acabo la época en la que la misión de sistemas era resguardar información, se acabo la época en la que la misión era mejorar procesos, hoy somos pieza clave para generar nuevo conocimiento.

Así que nuestro perfil ha cambiado, necesitamos un nuevo perfil que nos permita explotar información, generar conocimiento, y crear ventajas competitivas en las empresas en las que nos desarrollamos, hoy mas que nunca el conocimiento es poder.

Así, nuestro nuevo perfil debe tener las siguientes características ser un hacker, no por el hecho de entrar a sistemas, sino por el hecho de la curiosidad y el conocimiento, por el rápido razonamiento y por la rápida solución de problemas, por la gran cantidad de conocimientos que debemos tener, por los conocimientos técnicos y por el no temor a equivocarnos, Debemos tener conocimientos estadísticos, para poder encontrar el nuevo conocimiento, para poder interpretar los datos, para que los daos realmente aporten información y no sean solo datos guardados en alguna base de datos, la información debe hablar, debe decirnos sus secretos, y valla que hay muchos secretos en la información que poseemos, hoy mas que nunca tenemos acceso a muchas fuentes de información, debemos saberlas explotar organizar, relacionar. y por ultimo experiencia que no es otra cosa que el conocimiento del negocio en el que nos desarrollamos, esto nos permite encontrar cosas especificas, la búsqueda no es meter la información a una licuadora y ver que obtenemos, no la búsqueda es crear un conocimiento nuevo que sea un factor de cambio, un factor diferenciador entre los que había y lo que hay.

Nuevas herramientas, nuevos retos eso es lo que nos genera este nuevo perfil. Y no podemos hacer otra cosa mas que evolucionar.

Felices lineas


miércoles, 23 de marzo de 2016

71. Control de excepciones

Este es un tema un tanto complejo, por que muchos programadores consideran que usar un try - catch es un control de excepciones, y eso no lo es, realmente un programa nunca debería caer en una excepción del tipo try - catch, ¿Por que?, por que el hecho de que caiga ahí quiere decir que existe algo que no estamos realizando de la manera correcta.

Atrapar una excepción, nos permite evitar que un programa colapse, por que algo ocurrió que esta fuera del ámbito de nuestro programa, algo que nosotros no controlamos de un inicio (siempre es mejor controlar una excepción de un inicio a atraparla, por que entonces nuestra lógica se altera).

Sin embargo eso tampoco es un control de excepciones, no basta con solo atraparlas, lo que se debe hacer es decir como debe reaccionar el proceso en caso de que estas ocurran.

Un flujo complejo que se detiene por una excepción y que deja los datos a medio procesar puede ser un gran dolor de cabeza, me dirán, existen las transacciones que permiten que se efectué un todo o nada, si existen y es algo de lo que hablaremos después, pero hay casos en los que por limitaciones de recursos (no olviden estamos en la era del big data) es muy complicado el uso de una transacción.

Por ello se deben implementar medios para realmente controlar una excepción, algo mas allá de una linea que en muchos de los casos no dice nada.

Peor aun hay quien enmascara una excepción con un error del tipo "Ha ocurrido un error consulte a su administrador del sistema", pero no existe información por ningún lado de como ocurrió el error, de por que ocurrió, encontrar una aguja en un pajar es mucho mas fácil.

Entonces ¿Como debemos construir una excepción?, bueno, debemos seguir una serie de reglas en su construcción, reglas que nos facilitaran mucho la vida.


  1. Debemos buscar controlar las excepciones desde codificación, para ya tener una alternativa en el proceso de que hacer en caso de que fallen.
  2. Si se da una excepción, cosa que no podemos evitar esta nos debe dar la información suficiente para reproducir el error (método, variables, etc).
  3. Es conveniente que conozcamos el flujo de nuestro proceso para tener un plan de contingencia en caso de que una excepción nos cause algún problema, esto se debe evaluar desde una etapa de diseño, generar un plan de contingencia en producción no es buena idea.
  4. Si no se desea ser alarmista con el cliente (por imagen) la información de como reproducir el problema se debe almacenar en algún sitio aparte, no solo enviar el mensaje de "un error a ocurrido", si por imagen no se quiere mostrar el error como tal, entonces por imagen deben resolverlo lo antes posible, y si no tienen idea de que paso, esto se convertirá en insatisfacción rápidamente, somos una herramienta para mejorar procesos, no podemos comernos el tiempo del usuario tratando de solucionar errores en los mismos.

Felices lineas

Carlos

martes, 22 de marzo de 2016

70. HoloLents - build 2016?

La conferencia de Microsoft build 2016 se celebra en la ciudad de San Francisco, es un evento lleno de novedades que ningún desarrollador debe perderse, si no es posible asistir, no debemos perderle en su formato on line.


Bueno parece que Microsoft empieza a soltar unas gotas de lo que vendra en dicho evento, ya que si buscamos hololents emulator, encontraremos lo siguiente:


que precisamente coincide con la fecha de este evento...ademas encontramos:


Unity para HoloLents, parece que llegaran novedades muy interesantes este año...

Felices Lineas

69. Andrew S. Grove 1936 - 2016 (Nuestra Historia)

Adrew S. Grove es uno de los ingenieros que ha forjado esta nueva era, ¿Que hizo?, algo tan simple como poner en el mapa a la que ha sido el corazón del computo personal, INTEL, el fue clave del éxito de INTEL y ha dejado este mundo el día 21 de Marzo de 2016, forma parte de nuestra historia, ha cimentado el camino que nos lleva al día de hoy.

Su logro fue transformar INTEL de una empresa dedicada a producir chips de memoria a la empresa de microprocesadores dominante en el mundo, el vivió la primer ola de crecimiento del computo personal, fue uno de los visionarios, que creyó en el futuro de la industria del computo, para tener lo que tenemos hoy en día.

Desde aquí hacemos un pequeño homenaje a uno de los ingenieros que formo parte de nuestra historia.

Descanse en paz Andrew S. Grove


68. Windows 10 Mobile - El sentido de pertenencia

El día 17 de Marzo de  2016 después de una larga espera ha salido al mercado Windows 10 Mobile, esto después de seguir un camino bastante tortuoso, con una serie de retrasos, y con varios teléfonos que se quedaron en el camino.

Quiero aprovechar la salida de este tema, para tocar lo que es el sentido de pertenencia, algo que en mi opinión es lo que le falta explotar a este sistema operativo.

Windows 10 Mobile, es un sistema moderno, con una interfaz diferente a sus competidores, muy estable, que no presenta deterioro pese a las aplicaciones que puedan ser instaladas, y que incluso se podría hablar de que permite que la vida del teléfono se alargue mucho mas de los que permite otros sistemas operativos.

Entonces ¿Que pasa con el?, ¿Por que su cuota del mercado es tan baja?, mucho se ha escrito sobre esto, se habla de que la tienda tiene pocas aplicaciones (algunos miles) se habla de que las principales aplicaciones no lo apoyan (si no ven negocio en la plataforma ¿Por que apoyarla?), sin embargo Microsoft nació con algo a su favor, existen miles de programadores de C# que pueden crear aplicaciones para este ecosistema Entonces si tiene tantos programadores, ¿Por que no hay aplicaciones?, Si el sistema es tan estable, ¿Por que no hay grandes ventas?.

Cuando un proyecto sale a la luz, muy independientemente del tipo de proyecto, siempre se busca gente que se sienta identificada con el, esto es algo que siempre tenemos que tener en cuenta en cualquier proyecto que emprendamos, ¿A que segmento se encuentra dirigido dicho proyecto?, pero esto no es lo único que necesitamos para conseguir un éxito, una vez que se a que segmento me dirijo, debo hacer que dicho segmento se sienta orgulloso de pertenecer a el, y que mi producto que es parte del segmento, se convierta en un identificador del mismo.

Veamos el caso iphone, el iphone, genera status, no cualquiera trae un iphone, y el que lo trae por lo general es una persona, que vive de la tecnología de punta (puede no ser cierto esto pero es la apreciación que da el iphone a este segmento), la gente que lo posee siempre esta en la punta de la tecnología, y pese al costo no subestima cambiar su dispositivo por otro de la misma marca(lealtad) pero de un modelo reciente, incluso lo ven como algo necesario, ellos se ven como usuarios de iphone, o incluso como usuarios de Mac.

¿Que pasa con Android?, Principalmente un segmento medio, un gran conjunto de los usuarios escogió Android como su primer smartphone, el usuario de android, también gusta de estar a la vanguardia, pero por un costo mucho menor que el usuario iphone, le gusta la libertad, Android permite transformar y personalizar el telefono, la marca no le es tan importante, pero pertenece a un grupo y se siente plenamente identificado, el cambio a iphone, si bien se da, no se da a un ritmo acelerado.

Ahora, ¿Que pasa son Windows Phone?, Primero que nada, no existe un segmento que se sienta plenamente identificado con el dispositivo ¿Para quien es? en algún momento empezó a cobrar terreno con la gama media, una gama que busca diversidad a un precio económico, No representa competencia en la gama alta, un sector que se encuentra dominado por iphone, ya que este teléfono no da un status social. ¿Podría darlo?, la respuesta es si, pero esa es una imagen que el fabricante tendría que construir, un buen equipo ya no es suficiente, es importante que los usuarios sientan que pertenecen a el.

¿Y las aplicaciones?, son necesarias si, pero la base de programadores debería bastar para tener sus propias aplicaciones, ¿Por que no las hay?, por que los programadores no se sienten identificados con el sistema operativo, por desgracia muchos de los programadores .Net pertenecen a un grupo que se dedica a aplicaciones empresariales, en donde por muchos años se ha dicho, el aspecto no importa, lo que importa es que funcione.

El aspecto no importa... Claro que importa, por que esto es lo que hace que queramos usar una aplicación, que nos enamoremos, que la aplicación se defina como parte de nuestro grupo, que nos pertenezca.

Esa pertenencia de la que hablo, es la que nos hace defender nuestra empresa, defender al equipo, sentirnos como uno, y crecer juntos, es lo que nos hace alcanzar el éxito, es el alma de un proyecto, y un proyecto sin alma no puede sobrevivir.

No digo que en este ejemplo Windows Phone no tenga alma, la tiene pero debe encontrar su sitio, y al encontrar su sitio, la historia cambiara.

Crear proyectos con alma, proyectos que tengan un sitio, es un diferenciador en proyectos exitosos y proyectos que no lo son.

Siempre debemos preguntarnos ¿a quien pertenece este proyecto?,  ¿Quien lo adoptara como suyo?

Felices Lineas