sábado, 31 de marzo de 2018

Receta Python 3 No. 1-14: Ordenar Objetos sin Soporte de Comparación Nativo

1. Problema

Ordenar objetos que pertenezca a una misma clase y que no cuenten nativamente con soporte para operaciones de comparación.

2. Solución

La función sorted() recibe como argumento una expresión que dicta cómo debe llevarse el ordenamiento de una lista de objetos a partir de un campo de identificación de éstos (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:


[Usuario(13), Usuario(2), Usuario(11), Usuario(7)]
[Usuario(2), Usuario(7), Usuario(11), Usuario(13)]

[Usuario(2), Usuario(7), Usuario(11), Usuario(13)]


En la línea 14 se ordenan los elementos de la lista usuarios a partir de una expresión lambda que toma el campo id de la clase Usuario.



Otra forma de realizar el ordenamiento es por medio del operador attrgetter(): se especifica el campo de ordenamiento, para este caso el id.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 30 de marzo de 2018

Receta C# No. 9-7: Procesar los Resultados de una Consulta SQL con un Lector de Datos

1. Problema

Procesar los datos retornados por el método IDbCommand.ExecuteReader.

2. Solución

Cuando se ejecuta el método IDbCommand.ExecuteReader() se retorna una instancia de tipo IDataReader (namespace System.Data).


Las instancias de tipo IDataReader permiten el acceso suencial o aleatorio a cada uno de los elementos del resultado de la consulta (Jones, Freeman, 2010).

3. Código C#



Prueba de ejecución:
Lectura de datos de una consulta SQL
Figura 1. Lectura de datos de una consulta SQL.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# 9-6: Usar Parámetros en un Comando SQL o Procedimiento Almacenado

1. Problema

Usar o establecer los parámetros en un comando SQL o en un procedimiento almacenado.

2. Solución

Los objetos de comandos en .NET implementan la interfaz IDataParameter (namespace System.Data). Los objetos de comandos requieren configurar el tipo de dato, el valor, y la ubicación: esto se logra a través de la colección Parameters y su método Add (Jones, Freeman, 2010).


El placeholder o el elemento faltante de la sentencia se representa con la cadena @NombreParametro.

3. Código C#

Archivo C# R906Programa.cs [enlace alternativo]:

Prueba de ejecución:
Parametrización comando SQL y procedimiento almacenado.
Figura 1. Parametrización comando SQL y procedimiento almacenado.

Repositorio: https://github.com/Fhernd/Recetas.CSharp

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

jueves, 29 de marzo de 2018

Receta C# No. 9-5: Ejecutar un Comando SQL o Procedimiento Almacenado

1. Problema

Ejecutar un comando SQL o un procedimiento almacenado en una base de datos.

2. Solución

En .NET todos los objetos para la definición de comandos implementan la interfaz IDbCommand (namespace System.Data). Es necesario crear un objeto de esta interfaz para ejecutar un comando SQL o un procedimiento almacenado. Además, configurar las propiedades CommandType y CommandText (Jones, Freeman, 2010).


Existen, así mismo, métodos para la ejecución para tipos de comandos: ExecuteNonQuery, ExecuteReader, y ExecuteScalar.

3. Código C#



Prueba de ejecución:
Ejecución de comandos SQL y procedimientos almacenados
Figura 1. Ejecución de comandos SQL y procedimientos almacenados.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

miércoles, 28 de marzo de 2018

Receta C# No. 9-4: Proteger el Almacenamiento de una Cadena de Conexión a una Base de Datos

1. Problema

Almacenar una cadena de conexión de conexión de base de datos de forma segura.

2. Solución

Para ser protegida una cadena de conexión debe especificarse en una sección encriptada del archivo de configuración de la aplicación (Jones, Freeman, 2010).


Para esta receta se requiere agregar el assembly System.Configuration.dll a las referencias del proyecto.

3. Código C#

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# No. 9-3: Codificar una Cadena de Conexión de una Base de Datos

1. Problema

Codificar una cadena de caracteres que represente las partes de la conexión a una base de datos.

2. Solución

Por medio de la clase DbConnectionStringBuilder (namespace System.Data.Common) o cualquiera de las clases heredadas se define una cadena de conexión. Estas clases forman parte de un proveedor de datos ADO.NET (Jones, Freeman, 2010).

3. Código C#


El programador también puede modificar las propiedades usadas en las líneas 15-21 para asignar los valores correpondientes de la cadena de conexión.

Repositorio: https://github.com/Fhernd/Recetas.CSharp

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

martes, 27 de marzo de 2018

Receta C# No. 9-2: Usar un Pool de Conexiones a Base de Datos

1. Problema

Usar un pool de conexiones a base datos para mejorar el rendimiento y escalabilidad de una aplicación.

2. Solución

Para establecer el tamaño del pool de conexiones se debe configurar la cadena de conexión del objeto de conexión. En esta cadena aparecerán parámetros como el tiempo de vida de la conexión, el reinicio, el tamaño mínimo y máximo del pool, entre otros más (Jones, Freeman, 2010).


Una de las principales ventajas de un pool de conexiones es la reducción de la sobrecarga asociada a la creación y destrucción de los recursos utilizados por la conexión a la base de datos (ídem).

3. Código C#


Nótese como en la cadena de conexión se usan parámetros como Min Pool Size y Max Pool Size para establecer el tamaño mínimo y el máximo del pool.


Una vez se alcance el fin de la sentencia using (líneas 9-15) se invocara el método Close(), a continuación se reintegra la conexión al pool para posteriores usos.

Repositorio: https://github.com/Fhernd/Recetas.CSharp

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# No. 9-1: Conectar a una Base de Datos

1. Problema

Conectar a una base de datos SQL Server Express.


[Nota: Para las recetas de esta serie se usará SQL Server Express como servidor de base de datos y el almacen Northwind.]

2. Solución

En primer lugar se debe crear un objeto de conexion. Los objetos de conexión implementan la interfaz IDbConnection (System.Data). A continuación se debe asignar una cadena de conexion a la propiedad ConnectionString del objeto de conexión. Finalmente se invoca al metodo Open para abrir una conexión al servidor (Jones, Freeman, 2010).

3. Código C#



Prueba de ejecución:
Conexión a SQL Server Express con SqlConnection y OleDbConnection
Figura 1. Conexión a SQL Server Express con SqlConnection y OleDbConnection.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

domingo, 25 de marzo de 2018

Receta Python 3 No. 1-13: Ordenar una Lista de Diccionarios a partir de una Llave Común

1. Problema

Ordenar una lista de diccionarios de acuerdo a uno o más valores de los diccionarios.

2. Solución

El módulo operator cuenta con la función itemgetter() para especificar el modo de ordenamiento del método sorted() (Beazly, Jones, 2010).

3. Código Python 3


Prueba de ejecución:


[
{'nombre': 'Andrea', 'apellido': 'Ruiz', 'id': 1002}, 
{'nombre': 'Angela', 'apellido': 'Romero', 'id': 1003}, 
{'nombre': 'Edward', 'apellido': 'Ortiz', 'id': 1004}, 
{'nombre': 'Javier', 'apellido': 'Meneses', 'id': 1001}
]

[
{'nombre': 'Javier', 'apellido': 'Meneses', 'id': 1001}, 
{'nombre': 'Andrea', 'apellido': 'Ruiz', 'id': 1002}, 
{'nombre': 'Angela', 'apellido': 'Romero', 'id': 1003}, 
{'nombre': 'Edward', 'apellido': 'Ortiz', 'id': 1004}
]

[
{'nombre': 'Javier', 'apellido': 'Meneses', 'id': 1001}, 
{'nombre': 'Edward', 'apellido': 'Ortiz', 'id': 1004}, 
{'nombre': 'Angela', 'apellido': 'Romero', 'id': 1003}, 
{'nombre': 'Andrea', 'apellido': 'Ruiz', 'id': 1002}
]

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 1-12: Encontrar los Elementos más Recurrentes en una Secuencia

1. Problema

Encontrar los elementos más recurrentes en una secuencia.

2. Solución

La clase Couter (collections) cuenta las ocurrencias de los elementos de una secuencia (Beazly, Jones, 2013)

3. Código Python 3


Prueba de ejecución:


[('Python', 5), ('Java', 3), ('JavaScript', 3)]

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 24 de marzo de 2018

Receta Python 3 No. 1-11: Nombrar un Sección (Slice) de una Secuencia

1. Problema

Nombrar una sección o slice de una secuencia.

2. Solución

Con el elemento de programa slice() se crea un slice. Éste sirve como constante para obtener valores de una cadena de caracteres, una lista, o similar (Beazly, Jones, 2010).


Su sintaxis básica de uso:


slice(start, end [, step])

Donde:
  • start: inicio del slice
  • end: fin del slice
  • step: (opcional) índice los saltos de selección

3. Código Python 3


Prueba de ejecución:


51325.0 
51325.0

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

Receta Python 3 No. 1-10: Remover Duplicados de una Secuencia sin Alterar el Orden de los Demás Elementos

1. Problema

Remover elementos duplicados de una secuencia sin alterar el orden de los demás elementos.

2. Solución

Crear una función que itere la secuencia y compruebe la existencia de cada valor sobre los valores ya iterados (Beazly, Jones, 2013).

3. Código Python 3


Prueba de ejecución:

[3, 11, 19, 5, 7, 21, 29]


Sin embargo, existe una solución más elaborada que permite remover aquellos elementos de tipo no hasheable:



Prueba de ejecución:


[(2, 3), (2, 5), (3, 5)]

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

viernes, 23 de marzo de 2018

Receta C# No. 8-20: Reconocer Texto en una Imagen usando OCR

1. Problema

Reconocer texto en una imagen usando OCR (Optimal Character Recognition).

2. Solución

Por medio de COM Interop es posible accede a las características de reconocimiento de texto en imágnes de Microsoft Office Document Imaging (Jones, Freeman, 2010).

Hay que dejar claro que en versiones posteriores a Microsoft Office 2007 está característica no está disponible.

3. Código C#

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# No. 8-19: Lectura de Texto a Voz

1. Problema

Leer un texto a voz.

2. Solución

El assembly System.Speech cuenta con la clase SpeechSynthesizer. Esta clase provee el método Speak: éste recibe un argumento como cadena de caracteres (Jones, Freeman, 2010).

3. Código C#


Prueba de ejecución:

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

jueves, 22 de marzo de 2018

Receta C# No. 8-18: Gestionar la Cola de Impresión

1. Problema

Gestionar -i.e. pausar o reanudar- la cola de documentos para impresión.

2. Solución

Para este propósito se usa Windows Management Instrumentation (WMI): con la clase Win32_PrintJob se obtiene datos de la cola de impresión y acceso a operaciones de pausa -Pause- y reanudación -Resume-. Adicionalmente, se hace uso de la clase Win32_Printer para soportar esta gestión (Jones, Freeman, 2010).

3. Código C#



Prueba de ejecución:
Gestión cola de impresión
Figura 1. Gestión cola de impresión.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# No. 8-17: Mostrar una Vista de Impresión Dinámica

1. Problema

Mostrar una vista previa de impresión del aspecto actual de un documento.

2. Solución

Se pueden usar PrintPreviewDialog o PrintPreviewControl para visualizar una vista previa de un documento (Jones, Freeman, 2010).

3. Código C#


Prueba de ejecución:
Vista previa impresión
Figura 1. Vista previa impresión.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

miércoles, 21 de marzo de 2018

Receta C# No. 8-16: Imprimir Bloque de Texto en Varias Líneas

1. Problema

Imprimir un bloque de texto en varias líneas (wrapped text).

2. Solución

El método DrawString (Graphics) cuenta con una versión sobrecargada que permite dibujar un rectándulo delimitado (Jones, Freeman, 2010).

3. Código C#

Archivo C# Principal.cs [enlace alternativo]:

Prueba de impresión (documento PDF):
Impresión bloque de texto
Figura 1. Impresión bloque de texto.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

Receta C# No. 8-15: Imprimir un Documento de Varias Páginas

1. Problema

Imprimir un documento de varias páginas.

2. Solución

Crear una clase derivada de PrintDocument, crear un handler para el evento PrintPage, y establecer la propiedad PrintPageEventArgs.HasMorePage con el valor true (Jones, Freeman, 2010).

3. Código C#

Clase que hereda de PrintDocument:





Prueba de impresión: 
Resultado impresión
Figura 1. Resultado impresión.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

martes, 20 de marzo de 2018

Receta C# No. 8-14: Imprimir un Documento

1. Problema

Imprimir un docuento de texto y/o imágenes.

2. Solución

Sobre el PrintPage de la clase PrintDocument se asigna un handler para llevar a cabo la impresión: se usan los métodos DrawString y DrawImage para la impresión de contenido (Jones, Freeman, 2010).

3. Código C#



Prueba de ejecución (documento impreso en PDF):
Impresión documento
Figura 1. Impresión documento.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

lunes, 19 de marzo de 2018

Receta Python 3 No. 1-9: Encontrar Datos Comunes entre Dos Diccionarios

1. Problema

Encontrar qué -valores, llaves- tienen en común dos diccionarios.

2. Solución

A través de los métodos keys() y values(), y los operadores - y & es posible encontrar las diferencias entre llaves y valores de dos diccionarios (Beazly, Jones, 2013).

3. Código Python


Prueba de ejecución:


Llaves comúnes:  {'x', 'y'}
Diferencia de llaves:  {'z'}
Llave y valor comunes:  {('y', 2)}

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O