domingo, 9 de abril de 2017

Threading: Programa que muestra la creación y ejecución de subprocesos.

Todos los sistemas operativos modernos permiten el uso de la concurrencia para hacer varias operaciones de manera simultánea o en paralelo, una manera actual de realizar la concurrencia es con el concepto de threads (hilos).

Un thread es un proceso ligero o un subproceso que tiene un simple flujo de control secuencial, el programa principal siempre tiene un simple flujo de control.

Un programa en C# empieza en un único Thread creado automáticamente por el CLR y el sistema operativo. Los métodos que son comúnmente utilizados por los Threads son:

  • Start: Inicia la ejecución y el hilo pasa al estado Running.
  • Suspend: Interrumpe la ejecución, puede reanudarse la ejecución si se invoca al método Resume del hilo que está en estado suspendido.
  • Sleep: Se invoca con un argumento que recibe la cantidad de milisegundos que el thread que se encuentra en estado Running debe dormir. Al terminarse este tiempo el thread vuelve al estado running
  • Resume: Reanuda la ejecución de un Thread en estado suspendido y lo pasa al estado running.

Una vez que un thread termina, no puede ser reiniciado.

Para mostrar estos conceptos escribí un programa para demostrar las técnicas básicas de creación de subprocesos llamado SimpleThreadSample, este programa crea un par de subprocesos (threads) que correrán simultáneamente dentro del thread principal del programa.

Cada subproceso corre con una prioridad normal, imprimiendo un mensaje en la consola dentro de un ciclo, invocando al método Sleep para permanecer inactivo.

El primer subproceso tendrá una inactividad de 300 milisegundos y el segundo subproceso tendrá una inactividad de 600 milisegundos.

Fig 1. El código fuente del programa

El programa crea cada subproceso con la clase ThreadStart pasando como argumento para el primer subproceso el método PrintLog10 que imprime el logaritmo del numero 10 y para el segundo subproceso el método Squared que imprime el cuadrado. Una vez creados ambos subprocesos se invoca el método Start() de cada uno de ellos, para pasarlos al estado Running.

Fig 2 la salida del programa en ejecución

Al terminar la ejecución de cada uno de los subprocesos, imprime los milisegundos que tardo en ejecutarse.

martes, 4 de abril de 2017

Trabajando con caracteres: Programa que suma el total de caracteres en un archivo de texto.

Una de las características fundamentales de cualquier lenguaje de programación es el trabajo con caracteres, todo programa fuente se compone de una secuencia de caracteres que el compilador interpreta. Como ejemplo un programa que muestra el total de coincidencias de un carácter en un archivo de texto, utilizando los métodos más usuales para convertir cadenas en arreglos de caracteres y viceversa.

Fig 1. El código del programa.

Fig 2. El programa requiere un archivo de texto.

Fig 3. El resultado de la ejecución del programa.

miércoles, 15 de marzo de 2017

Utilizando las funciones de fechas (Date functions) de SQL Server

Los cálculos con fecha son comunes en la mayoría de las aplicaciones que usan bases de datos, estos cálculos se utilizan en: fechas de vencimientos, cálculos de interés, cumpleaños o el número de días que alguien ha estado en el hospital.

Las funciones de fechas de SQL Server realizan conversiones automáticamente de los tipos CHAR o VARCHAR a los tipos DATETIME o SMALLDATETIME según sea el caso. Para mostrar ejemplos con las funciones de fecha SQL utilizare una tabla con el siguiente diseño:

Fig 1. El diseño de la tabla para los ejemplos

Algo importante que debe tenerse en cuenta, es que SQL Server trata cualquier fecha con dos dígitos en el año si son menores a 50 como años del siguiente siglo. Ejemplo:

Fig 2. Fecha de dos dígitos menor a 50 años.

Y a las fechas con los dos dígitos en el año mayores a 50 como años del siglo actual. Ejemplo:

Fig 3. Fecha de dos dígitos mayor a 50 años.

Debido a esto, para evitar problemas en las operaciones siempre es recomendable trabajar las fechas con 4 dígitos, como lo muestro en los siguientes ejemplos.

Fig 4. Fecha de cuatro dígitos menor a 50 años.

Fig 5. Fecha de cuatro dígitos mayor a 50 años.

Las funciones de fecha

Antes de trabajar con las funciones de fechas es necesario entender los componentes de los tipos de dato fecha.

Fig 6. Las partes del tipo de dato fecha.

Bien a continuación muestro los ejemplos con las funciones de fecha.

La función DATEADD

Esta función permite agregar un intervalo de tiempo a una fecha para obtener la suma del intervalo de tiempo y la fecha a la que se le aplica la función. Por ejemplo

Fig 7. Ejecutando la función para agregar 8 horas a la columna deliverydate.

La función DATEDIFF

Esta función regresa la diferencia entre dos fechas según la parte de la fecha que se especifique. Ejemplo:

Fig 8. Ejecutando la función obtener la diferencia en horas entre purchasedate y deliverydate.

La función DATENAME

Esta función regresa una cadena representando el nombre de la parte de la fecha que se especifique. Ejemplo:

Fig 9. Ejecutando la función para obtener el nombre del día de la semana y el mes del año.

La función DATEPART

Este función regresa el valor entero de la parte de la fecha que se especifique. Ejemplo:

Fig 10. Ejecutando la función para obtener el valor entero del día del año.

La función GETDATE

Esta función regresa la fecha y la hora actual del servidor. Ejemplo:

Fig 11. Obteniendo la fecha y la hora actual.

Las funciones DAY, MONTH, y YEAR

Estas funciones regresan el entero correspondiente de la fecha en la cual se aplique la función, en rigor de verdad estas funciones tienen su equivalencia con la función DATEPART, por ejemplo: la función DAY es equivalente a DATEPART(dd,fecha), la función MONTH equivale a DATEPART(mm,fecha) y así lo mismo para la función YEAR que equivale a DATEPART(yy,fecha).

lunes, 13 de febrero de 2017

Usando los controles de validación ASP.NET V (CustomValidator)

Hay ocasiones en que tenemos que comparar las entradas de los formularios con ciertos patrones que son demasiado complejos que requieren ciertas operaciones adicionales a las proporcionadas por los controles de validación predeterminados, existe también la posibilidad de usar métodos de validación previamente creadas con algún lenguaje de programación Script del lado del cliente, para estos casos .NET proporciona el control CustomValidator el cual nos permite usar funciones personalizadas tanto del lado del cliente como del lado del servidor.

Este control puede emplearse tanto del lado del servidor (Server-side) como del lado del cliente (Client-side). Para mostrar su utilización escribí dos ejemplos el primero compara las entradas del lado del servidor y el segundo hace las mismas comparaciones del lado del cliente.

Validando del lado del servidor (Server side)

El primer ejemplo muestra la utilización de este control del lado del servidor (server-side).

Fig 1. El código del control CustomValidator del lado del servidor.

Fig 2. El programa con el control CustomValidator en ejecucción.

Fig 3. El programa ejecutando las validaciones correspondientes.

Fig 4. Las validaciones requeridas fueron correctas.

Validando del lado del cliente (Client side)

El segundo ejemplo muestra las validaciones del lado del cliente (client-side), para este ejemplo es importante escribir antes que nada las funciones en JavaScript que servirán para hacer la validación, y que se utilizan en la propiedad ClientValidationFunction.

Fig 5. Las funciones JavaScript que efectuán la validación.

Fig 6. El código del control CustomValidator del lado del cliente.

Fig 7. El programa ejecutando una de las validaciones.

Fig 8. El programa ejecutando ambas validaciones.

Fig 9. El programa muestra un popup indicando que las validaciones son correctas.

Fig 10. El programa muestra un mensaje indicando que las validaciones son correctas.

La siguiente tabla muestra algunas propiedades del control.

Display

Esta propiedad tiene 3 valores

  1. Static: es la propiedad predeterminada, reserva un espacio suficiente en la página para mostrar el mensaje de error.
  2. Dynamic: el espacio para mostrar el mensaje no se reserva, cuando el mensaje se despliega se desplaza el contenido existente en la página.
  3. None: el mensaje no será desplegado en el lugar del control sino en el control ValidationSummary si se localiza en la misma página.

Errormessage

El texto del mensaje de error del control.

ControlToValidate

El control de donde obtendremos el valor para validar.

ClientValidationFunction

La función script del lado del cliente con la cual haremos la operación sobre el valor del control a validar.

OnServerValidate

El método del lado del servidor que tiene la operación que realizaremos con el valor del control

Q & A Preguntas y respuestas acerca de los sistemas de bases de datos (DBMS)

1. ¿Qué es la abstracción de datos?


2. ¿Qué hace el administrador de la base de datos?


3. ¿Cuáles son las aplicaciones de los sistemas de datos?


4. ¿Qué contiene un Diccionario de datos?


5. ¿Qué es un ejemplar de la base de datos?


6. ¿Qué es el esquema de la base de datos?


7. ¿Qué es la inconsistencia de datos?


8. ¿Qué es un lenguaje de consultas?


9. ¿Qué es un lenguaje de definición de datos?


10. ¿Qué es un lenguaje de manipulación de datos?


11. ¿Qué son los Metadatos?


12. ¿Qué es el modelo de datos orientados a objetos?


13. ¿Qué es el modelo de datos relacional?


14. ¿Qué es el Modelo de datos relacional orientado a objetos?


15. ¿Qué es un programa de aplicación?


16. ¿Qué es un sistema de gestión de base de datos?


17. ¿Qué es una transacción?


18. ¿Qué es una agregación?


19. ¿Qué es un atributo derivado?


20. ¿Qué son los atributos?


21. ¿Qué son los atributos descriptivos?


22. ¿Qué son los atributos monovalorados y multivalorados?


23. ¿Qué son los atributos simples y compuestos?


24. ¿Qué es un conjunto de entidades?


25. ¿Qué es un conjunto de relaciones?


26. ¿Qué es el conjunto de relaciones binario?


27. ¿Qué es un conjunto de relaciones recursivo?


28. ¿Qué son los conjuntos de entidades débiles y fuertes?


29. ¿Qué son los atributos discriminantes?


30. ¿Qué son las relaciones identificadoras?


31. ¿Qué es la correspondencia de cardinalidad?


32. ¿Qué es la relación uno a uno?


33. ¿Qué es la relación varios a uno?


34. ¿Qué es la relación varios a varios?


35. ¿Para que se utiliza el diagrama E-R (Entidad-relación)?


36. ¿Cuál es la diferencia entre clave candidata y clave primaria?


37. ¿Qué es el valor nulo?


Respuestas

R1. La recuperación de datos debe ser eficiente por lo que se requieren elaboradas estructuras de datos, los desarrolladores utilizan niveles de abstracción a nivel físico, lógico y de vistas para esconder la complejidad a los usuarios

R2. La persona que tiene el control central sobre el sistema de gestión de base de datos, sus tareas son: definición del esquema, definición de la estructura y del método de acceso, modificación del esquema y de la organización, concesión de la autorización para el acceso a datos y el mantenimiento rutinario.

R3. Las bases de datos son usadas en: banca, líneas áreas, universidades, transacciones de tarjetas de crédito, telecomunicaciones, finanzas, ventas, producción y recursos humanos.

R4. Un diccionario de datos contiene metadatos es decir datos acerca de los datos. El esquema de una tabla es un ejemplo de metadatos.

R5. Es la colección de la información almacenada en la base de datos en un momento en particular. Ya que las bases de datos van cambiando a lo largo del tiempo conforme la información se inserta y se borra.

R6. Es el diseño completo de la base de datos y son raramente modificados.

  • Esquema físico: El esquema físico describe el diseño físico en el nivel más bajo de abstracción, describe como se almacenan realmente los datos, las estructuras complejas de bajo nivel.
  • Esquema lógico: describe el diseño de la base de datos en un nivel más alto de abstracción, describe que datos se almacenan y que relaciones existen entre esos datos.

R7. Debido a que los archivos y programas de aplicación son creados por diferentes programadores en un largo período de tiempo, los diversos archivos tienen probablemente diferentes formatos y los programas pueden estar escritos en diferentes lenguajes. Las diversas copias de los mismos datos pueden no coincidir.

R8. Es la parte de un LMD (Lenguaje de manipulación de datos) que implica recuperación de información.

R9. Un esquema de base de datos se especifica mediante un conjunto de definiciones expresadas mediante un lenguaje especial llamado lenguaje de definición de datos.

R10. Es un lenguaje que permite a los usuarios acceder o manipular los datos organizados mediante el modelo de datos apropiado.

R11. Es decir son los datos acerca de los datos. El esquema de una tabla es un ejemplo de metadatos.

sábado, 7 de enero de 2017

Tablas de verdad con operadores lógicos de C#

El método más general para analizar los valores de verdad de las proposiciones compuestas es escribirlas en forma de una tabla. En estas tablas básicas de verdad se puede saber rápidamente si una proposición compuesta es verdadera o falsa, ya que muestra los resultados obtenidos al aplicar cada uno de los operadores lógicos, así como el resultado de la proposición de cada uno de los valores que puedan tener las diferentes proposiciones simples que integran una proposición compuesta.

Una tabla de verdad esta formada por filas y columnas, donde el número de filas depende de los posibles valores de verdad para cada proposición simple, mientras que el número de columnas depende del número de proposiciones simples que integran la proposición compuesta más el número de operadores lógicos que las conecten.

Con esto se tiene la siguiente expresión:

    Número de filas = 

En donde n es el número de proposiciones diferentes que integran una proposición compuesta y m es el número de posibles valores de verdad para cada proposición.

Como ejemplo la tabla de verdad de una contradicción, una proposición es una contradicción o absurdo si al evaluarla el resultado es falso para todos los valores de verdad. La contradicción más común es (p)^(¬p) como nos muestra su tabla de verdad.

Fig 1 Tabla de verdad de una contradicción.

A continuación la salida de un programa que muestra las tablas de verdad de los operadores lógicos y booleanos que tiene C# para formar proposiciones compuestas a partir de proposiciones simples.

Fig 2 Tablas de verdad de los operadores lógicos y booleanos en C#.

miércoles, 4 de enero de 2017

Un corto animado de Tux

La popularidad de los sistemas operativos GNU/Linux ha hecho familiar también a su mascota oficial el simpático pinguino Tux.

Pues ya hace bastante tiempo que anduvo circulando está animación en donde se ve la fascinación que tiene la oficial mascota de Linux por el pescado.

El pinguino Tux, la mascota oficial del sistema GNU/Linux.

El pinguino Tux siempre amigable como el sistema operativo que representa.