martes, 8 de diciembre de 2015

33. Distinct en una lista C# (Ayuda Rápida VI)

Hoy toquemos un tema dentro de la categoría ayuda rápida, que es común a la hora de desarrollar, ¿Como obtengo los elementos diferentes que existen en una lista?

Por ejemplo:

Si tuviera la siguiente clase:


Como determino los tipos de animales

Mamífero, Pez, Ave.

La solución es muy sencilla, se emplea la estructura select de la lista, y se indice que seleccione el tipo y todos los que sean distintos.


Que tengo en este código, tengo 2 forma de hacer esta misma operación.

Animales.Select(c=>c.Tipo) ... Me permite decir que es lo que voy a seleccionar, esto haciendo un select sobre mi lista.

Si incluyo el modificador AsParallel, le indico al sistema que el select lo haga en paralelo, esto tendrá una mejora en el tiempo en que se recorre la lista.

Y finalmente la instrucción Distinct, me permite agrupar por el elemento que seleccione.

Cuando usar AsParallel y cuando no, depende principalmente de los recursos disponibles en el equipo, AsParallel sera mas rápido, pero con mayor consumo en el procesador.

En ambos casos la salida es:


Hasta la proxima


lunes, 7 de diciembre de 2015

32. Build 2016

La tecnología avanza día a día, y es muy importante conocer los nuevos retos y conocer las nuevas herramientas que tenemos para poderla usar a nuestro beneficio.

Microsoft anuncia el día de hoy la fecha del Build 2016, el máximo evento de esa empresa para los desarrolladores.

El evento sea en San Francisco del 30 de Marzo al 1 de Abril, no importa que no puedan asistir en forma presencial, este evento se trasmite en tiempo real por diversos canales, les dejo la pagina de dicho evento.


Felices lineas

viernes, 4 de diciembre de 2015

31. Ciclo de vida de Internet Explorer

Como desarrolladores, debemos conocer la tecnología y así como debemos de saber cuando hay alguna novedad en nuestro ámbito, también debemos de saber cuando un producto cierra su ciclo de vida, debemos estar preparados para ello, por que estos cambios siempre traen consigo mantenimientos que es mejor hacerlos programados y con tiempo a bajo una contingencia.

Ante esto hay 2 notas muy importantes:

  1. El soporte y las actualizaciones de Internet Explorer cambiara y solo se dará soporte a la versión mas reciente del mismo partir del 12 de Enero de 2016, si bien esto se sabia desde 2014 es importante recordarlo por la cercania de las fechas para mayor información revisen: https://support.microsoft.com/es-mx/gp/microsoft-internet-explorer , esto nos deja con lo siguiente: Windows 7,  Windows 8.1 y Windows 10 unicamente tendra soporte Internet Explorer 11, Windows Vista únicamente tendrá soporte Internet Explorer 9
  2. .Net Framework 4.6.1 se encuentra ya disponible.NET 4.6.1 , siempre es conveniente tener las ultimas verciones del Framework para los que trabajamos en .Net, esto por que tienen optimizaciones, correccion de errores y parches de seguridad.
Felices lineas

jueves, 3 de diciembre de 2015

30. Usabilidad

Como técnicos perdemos rápidamente la vista del usuario, a veces pensamos que el sistema debe tener un comportamiento y que el usuario se debe adaptar al sistema.

No debemos perder algo de vista que es muy importante en nuestro trabajo, nos debemos al usuario, somos por el usuario, nuestra principal función es hacer que cualquier actividad sea más rápida y sencilla.

Sea análisis de información, sea automatizar un proceso, o una acceso a una base de datos, todas estas tareas siempre deben ser más fáciles de hacer para el usuario que lo que eran antes de que el sistema se implemente.

Debemos hablar su idioma, acercarnos a él para saber que quiere que busca y darle algo de acuerdo a sus necesidades.

Un error muy común es implementar algo, porque sabemos que es bueno o porque lo conocemos y olvidarnos del como el usuario hace sus actividades en el día a día, muchos de los sistemas impuestos, se convierten en un fracaso, porque la imposición genera resistencia.

Si yo obligo a alguien a hacer algo así este sea el mejor sistema lo va a rechazar de manera automática, lo mejor es buscar que la aceptación sede de manera natural.

Me preguntaran ¿Y cómo logro esto? Hay varias formas, la mejor es observar al usuario para determinar sus necesidades, si yo le pregunto al usuario ¿Qué necesitas? Muchas veces no lo sabe, y ¿Por qué no lo sabe? Porque con los medios con los que dispone en la actualidad ya están cubiertas sus necesidades, puede pedir más cosas, pero siempre es mejor involucrarse con las actividades para detectar los puntos de mejora, y buscar que estos se acepten de manera natural.

¿Pero cómo logro que el usuario se sienta cómodo con mi sistema? Jakob Nielsen es uno de los grandes gurús de la usabilidad, él ha establecido 10 principios que deberíamos considerar en todo sistema, estos principios ayudan a que el usuario se sienta cómodo y seguro dentro del sistema, sus principios son:

1.       Visibilidad del estado del sistema: en este punto normalmente fallamos, olvidamos informar que ocurre en el sistema y dejamos que este opere por sí solo, si bien esto es eficiente, hace que el usuario se desespere, no sabe que está pasando, peor aún puede pensar que está generando errores, que se trabo, el no informar el estado del sistema trae como consecuencia frustración, y como consecuencia nuestro sistema no será exitoso.

2.       Relación entre el sistema y el mundo real: Es muy importante tener el mismo vocabulario, que el sistema hable el vocabulario del usuario en sus términos y conceptos, que todo esté acorde a lo que el usuario conozca, y que el sistema no se convierta en tener un ente que requiera un traductor para su operación.

3.       Control y libertad del usuario: Funciones de deshacer y rehacer, que pasa si el usuario entro a una función a la que no quería por error, su proceso para salir de ella debe ser sencillo, no debería perderse en un mundo de menús, para deshacer un error.

4.       Consistencia y estándares: ¿Cuáles son los estándares del usuario? El debería entender el sistema por que el sistema habla su idioma.

5.       Prevención de errores: Un error común prevenir errores es enviar mensajes de error, esto no es la prevención de errores, un mensaje de error debe ser nuestra última opción, en muchos casos los sistema envían mensajes de error cuando ya no se puede hacer nada, y el proceso para recuperarse de ellos es largo y costoso, los sistemas deben tener un control de errores, para evitarlos, que no sea enviar un mensaje de error.

6.       Reconocimiento antes que recuerdo: El usuario no debe saberse los procesos de memoria, si se depende de la memoria para que estos se ejecuten en un orden correcto, es probable que se induzca error por parte de la misma operación del sistema, el usuario debería reconocer los pasos y actividades a realizar, y estos deben ser accesibles para el usuario todo el tiempo.

7.       Flexibilidad y eficiencia de uso: Hay varios tipos de usuarios, avanzados y básicos se debe brindar al usuario avanzado aceleradores y métodos para que este pueda mejorar la eficiencia de su trabajo, por dar un ejemplo de esto tenemos las combinaciones de teclas.

8.       Estética y diseño minimalista: Cada unidad extra de información irrelevante compite con la información relevante, se debe brindar únicamente la información importante, para que el usuario pueda interpretarla y entenderla.

9.       Ayuda a los usuarios a reconocer: Otro punto muy importante, que en la mayoría de los sistemas no se hace, cuando ocurre un error este se debe presentar en un lenguaje claro y simple, que indique el problema en forma precisa y ayude a construir su solución. El mensaje muy típico en los sistemas “Error fatal, consulte a su administrador del sistema” no es un error que cumpla con estas características, y menos cuando dicho error le da al administrador del sistema.

10.   Ayuda y documentación: Mas vale la más pálida tinta que la más brillante memoria, hoy conocemos el sistema pero que tan en 5 años cuando lo volvemos a ver, lo que para unos es lógico para otros no lo será, debemos dejar de pensar que un sistema se puede emplear con sentido común, dicen que el sentido común es el menos común de todos los sentidos, por esto hay que documentar, crear ayudas ¿Cómo trabaja?, ¿Cuáles son las reglas de negocio?  ¿Cómo se configura?, si soy un nuevo usuario ¿Cómo voy a usar el sistema?, cometemos un error muy grave aquí los desarrolladores, decimos es que el usuario no lee, si no lee los manuales para que los hago, no es lo mismo el que no los lea, pero que en caso de una duda pueda recurrir a ellos, a que en caso de una duda no exista nada a donde recurrir.

Bueno me despido por hoy, felices líneas


Carlos

miércoles, 2 de diciembre de 2015

29. Obtener la diferencia de tiempo entre 2 fechas (Ayuda Rápida V)

El obtener la diferencia que existe entre 2 fechas dadas es un tema muy útil sobre todo en la creación de reportes, para poder obtener la diferencia de tiempo que existe entre una fecha y otra es necesario usar un objeto llamado TimeSpan, este representa un intervalo de tiempo.

Para su uso simplemente restamos las 2 fechas con las que queremos trabajar y su resultado lo almacenamos en este objeto.

TimeSpan ts = HoraActual - HoraCreacion;

Una vez hecho eso, podemos saber cuandos días, horas, minutos, segundos existen entre una fecha y otra.

 int Dias = ts.Days;
 int Horas = ts.Hours;
 int Minutos = ts.Minutes;
 int Segundos = ts.Seconds;

Nos vemos en las próximas lineas.

martes, 1 de diciembre de 2015

28. Nuestra historia (III) - Dennis Ritchie

Tal y como lo prometí, mencionare, a los grandes, a los que nos han hecho llegar, si bien en este caso podemos hablar de una pareja de científicos que crearon las bases de la computación moderna, en este escrito me enfocare a uno de ellos, uno que ha dejado este mundo pero que se puede decir que fue de aquellas personas que su existencia estaba destinada a cambiarlo, a mejorarlo.

Dennis Ritchie, ¿Qué hizo?, pues el sembró la semilla de todo lo que tenemos hoy en día, ya que es el creador de uno de los lenguajes más populares  que han existido, un lenguaje que además es base para otros lenguajes, el lenguaje de programación C, además de ser creador del sistema operativo UNIX, siendo este sistema operativo la base de todo lo que hoy conocemos.

Nace el 9 de Septiembre de 1941, graduado de la universidad de Harvard, trabajo en los Laboratorios Bell de AT&T.

Fue un pionero de la informática moderna, y fue reconocido con el premio Turing en 1983 por su desarrollo en la teoría de sistemas operativos genéricos y su implementación en la forma del sistema UNIX.

Murió el 12 de Octubre de 2011, él es uno de los más grandes científicos del siglo XX, y un responsable de la revolución tecnológica que tenemos hoy en día, el maestro que creo las primeras piezas con las que construimos el universo de cómputo.

Dennis Ritchie, tiene un puesto muy especial dentro de la historia de la humanidad.


Felices líneas.

27. Parpadeo en DataGridView (Ayuda Rápida IV)

Un problema muy común al momento de usar un DataGridView dentro de un winForm es el molesto parpadeo que se da cada vez que se cargan los datos, esto ocurre sobre todo en casos en que la información que se encuentra en la tabla se encuentra actualizándose de manera continua.

La solución a este problema es muy sencilla, y analizando el código parecería que nosotros causaríamos parpadeo al implementar esta solución pero esto no es cierto, lo que se debe hace es ocultar el DataGridView, cargar este elemento con la nueva información y volverlo a mostrar.

Al cargar el control sin que este se muestre, la carga de sus columnas es muy rápida, por lo que el parpadeo que provocamos al ocultarlo y mostrar el control se vuelve imperceptible, eliminando de esta forma el molesto parpadeo que se da en este tipo de controles.

 dgVisor.Hide();
 dgVisor.DataSource = [Datos];
 dgVisor.Refresh();
 dgVisor.Show();


Felices lineas

viernes, 20 de noviembre de 2015

26. Nuestra Historia (II) - Ada Lovelance

Tenemos una historia rica que nos ha forjado y convertido en lo que somos, no quiero marearlos una historia muy larga, pero si quiero que sepamos algo más de historia, ya que IT se ha convertido en un área que desconoce en gran medida sus orígenes.

Este Blog es de programación, y siendo así la primer personalidad de la que hablaremos, es de la primer programadora Ada Lovelance, que vivió en el siglo XIX, en una época en que la computadora como la conocemos ni siquiera era un boceto.

En que trabajo, ella empleo la Maquina Analítica de Babbage, y con ella escribió lo que sería el primer algoritmo de la historia, un algoritmo para calcular los números de Bernoulli.

Sugirió el uso de las tarjetas perforadas como método de entrada

Tuvo visión para ver que esa máquina con la que trabajaba podía hacer mucho más, se le reconoce como la primera persona en describir un lenguaje de programación de carácter general, se puede decir que es la madre de la Programación.

Por eso ella es realmente una de las bases de nuestra Historia, no quiero marearlos con más datos, pero lean un poco sobre ella, y nuestros orígenes.


Felices líneas

jueves, 22 de octubre de 2015

25. Nuestra historia (I)

Cada ciencia conoce su historia, creo que solo nosotros no, es decepcionante ver que muy poca gente de TI tenga idea de quienes son los grandes personajes que han dado valor a la industria, que han hecho descubrimientos que nos han permitido llegar a lo que es hoy en día.

Cuando se habla de otras áreas, la gente conoce a sus predecesores, me temo que en TI no los conocemos, sabemos como arreglar un equipo, como hacer un programa, recordamos de nuestras clases que existen generaciones de computadoras, pero la cultura en nuestra área es algo realmente bajo.

Demasiado técnicos para pensar en otra cosa.

Las novedades tecnologías las da la industria, todos saben que surgió un Windows 10, que Apple saco un nuevo dispositivo, que Oracle tiene una nueva base de datos, que hay un nuevo procesador, pero nos olvidamos del quien.

El área se encuentra muy deshumanizada, todos sabemos quien es Steve Jobs y Bill Gates, pero nos olvidamos de todos aquellos que han hecho algún aporte a el área y que nos han llevado a donde estamos.

Peor aun hay quienes escuchan Premios Turing y no saben que es eso, siendo que es el mayor galardón que se puede obtener en ciencias de la computación, un premio al que se le ha llamado el Nobel de la computación.

El premio Turing lo entrega ACM (Association for Computing Machinery)desde 1966 en New York y año con año reconoce a aquellos que han hecho grandes aportaciones a la industria.

Revisaremos en futuros post de Nuestra historia a cada uno de los premiados por eso mismo omito la lista de ellos en este momento, dejando en el aire lo siguiente, sin las contribuciones de este grupo, muchas de las cosas que haces habitualmente no serian posibles, ellos son los verdaderos forjadores de lo que hoy tenemos, los verdaderos revolucionarios, que entendieron el valor de la información.

Felices lineas




martes, 13 de octubre de 2015

24. FileSystemWatcher (Ayuda Rápida III)

FileSystemWatcher, es un componente muy útil de .NET ya que nos permite el monitoreo de directorios para comprobar uso.

Todo programador debe ser curioso, y esa curiosidad implica el saber cómo funcionan las cosas, por eso también es interesante este método, este nos dice en que momento un archivo se escribe en disco esto nos sirve principalmente para 2 cosas, para construir sistemas que se inicien cuando la escritura ocurra, o para dar seguimiento a procesos que realicen escritura en disco pero que para nosotros sean una caja negra, nos ayuda a hacer un poco de ingeniería inversa…

No es un método perfecto ya que cuenta con 2 problemas que debemos tomar en cuenta durante el diseño.

1.       Si estamos observando un archivo que se encuentra en una unidad de red, y por algún motivo tenemos una intermitencia en la misma, en método se detiene y deja de reportar los cambios.

2.       No podemos iniciar libremente una cantidad muy grande de objetos (genera problemas de memoria o que no se ejecuten todos los eventos)

Pero una vez considerando estos puntos es una herramienta realmente útil.


El código en cuestión es el siguiente:


¿Qué es lo que hace?

System.IO.FileSystemWatcher se encarga de observar un directorio para que se dispare el evento

Path Nos indica el directorio base que se estará observando

IncludeSubdirectories se emplea para indicar que se observe el directorio raíz y todos sus directorios

NotifyFilter indica en que casos se notificara el acceso al directorio

Changed, Created y Deleted son 3 eventos que se disparan cuando el objeto cambia, se crea o se borra.


EnableRaisingEvents, activa el FilesystemWatcher.

Saludos