Ir al contenido principal

Entradas

Validador de DPI / CUI en C#

Este método valida un número de CUI / DPI de Guatemala. Se basa en la implementación Java del siguiente blog http://xcodegt.blogspot.com/2016/09/funcion-para-validar-cui-guatemala-con.html Se actualizó el dato del número de municipios por departamento, ya que ha variado desde 2016 (fecha del post original) a la fecha. 1: private static bool ValidarDPI(string dpi) 2: { 3: var regex = "^[0-9]{4}-[0-9]{5}-[0-9]{4}$"; 4: var test = Regex.IsMatch(dpi, regex); 5: 6: if (!test) 7: { 8: return false; 9: } 10: 11: var cui = dpi.Replace("-", ""); 12: 13: var numero = cui.Substring(0, 8); 14: 15: 16: var depto = Convert.ToInt32(cui.Substring(9, 2)); 17: var muni = Convert.ToInt32(cui.Substring(11, 2)); 18: 19: var validador = Convert.ToInt32(cui.Substring(8, 1)); 20: 21: // Conteo de municipios por departamento 22: int[] munisPorDepto = 23: { 24: ...
Entradas recientes

Ejecutar consultas a un Feature Layer de Arcgis Online desde C#

En la documentación de ArcGIS Runtime SDK for .NET (versión de SDK 100.3.0), se encuentran ejemplos sobre autenticación y sobre consultas a un Feature Layer público, sin embargo, no encontré un ejemplo sobre una consulta a un Feature Layer privado (requiere autenticación), lo que me tomó algunas horas realizar. Comparto el ejemplo realizado (app de consola): Program.cs using System ; using Esri.ArcGISRuntime.Data ; using System.Collections.Generic ; namespace arcgisAuthTest {     class Program     {                 static void Main ( string [ ] args )         {             string serviceUrl = "https://services6.arcgis.com/FFF6MrlVn5PAw2F8/arcgis/rest/services/service_bf963161c24047259028034xxxxxx/FeatureServer/0" ;             // Would be better to read them from a secure source   ...

Color Images to Bitonal (BinarizeBradley Algorithm)

Recientemente tuve que implementar una algoritmo para convertir imágenes en colores a blanco y negro (bitonal). El framework AForge.net tiene una librería muy completa para procesamiento de imágenes, sin embargo, está bajo licencia LGPLv3 y no siempre podemos hacer uso de ella en todos los proyectos. Dejo un enlace a mi propia implementación del algoritmo BinarizeBradley bajo licencia MIT. El código es una implementación en C# del algoritmo descrito en el siguiente Paper:  Adaptive Thresholding Using the Integral Image by Derek Bradley and Gerhard Roth. Algunas imágenes de prueba:

Consultas jerárquicas ordenadas (T-SQL)

Los datos jerárquicos usualmente se almacenan en tablas que contienen referencias recursivas como se muestra en la imagen: Esta estructura permite almacenar datos jerárquicos, por ejemplo, como han derivado unas distribuciones GNU/Linux de otras. Id Nombre IdPadre 1 Debian NULL 2 Knoppix 1 3 Ubuntu 1 4 Lindows 1 5 Corel 1 6 Damn Small Linux 2 7 KnoppMyth 2 8 Mint 3 9 Kubuntu 3 10 Xubuntu 3 11 Ulteo 9 12 Redhat NULL 13 Mandrake 12 Si queremos consultar todos los registros de distribuciones basadas en Debian, podemos recurrir a una consulta utilizando la sintaxis CTE (Common Table Expression, SQL Server 2005+) como sigue: WITH   cte       AS   ( SELECT   A . id , A . idpadre , A . nombre           FROM    ...

Variables persistentes (.NET)

Desarrollando una pequeña aplicación (Windows Service), me topé con la necesidad de mantener una variable de conteo cuyo valor fuera persistente aún después de reiniciar el servicio. Si no se dispone de una base de datos o su uso es inapropiado (requiere crear en la base de datos una nueva tabla o campo que no deseamos), se puede pensar en almacenar la información en archivos de texto. En ambos casos es requerido agregar otras librerías al programa e implementar los métodos necesarios para gestionar el almacenamiento y recuperación del dato. Una buena alternativa es el uso de los user-settings de la aplicación, es posible utilizarlos como variables en tiempo de ejecución y preservar su valor aún después de reiniciar el servicio o aplicación. Para crear una variable de este tipo, se puede acceder a las propiedades del proyecto desde el Solution Explorer (Visual Studio). Posteriormente, en el apartado de Settings, se agrega una entrada especificando el nombre de la variable, el tip...

Texto a Voz + SRT

Text to Speech + Subrip Subtitle Algunas veces me gusta leer y al mismo tiempo escuchar lo que leo. Esto me permite llevar un ritmo constante y lograr mayor concentración en la lectura. El otro día quise subir un texto a Youtube, sintetizado con una voz Loquendo y con subtítulos, de modo que desde Youtube el lector pudiera escuchar y al mismo tiempo leer la transcripción. Procedí a sintetizar el texto a voz utilizando SodelsCot Estándar y la voz de Loquendo Ximena. SodelsCot convierte a un archivo de audio el texto copiado al portapapeles y Youtube tiene una función que permite cargar la transcripción en formato de texto y convertirla a subtítulos en el video. Pero tanto SodelsCot como Youtube han presentado algunos inconvenientes: Si el texto es muy grande, SodelsCot falla en el proceso de conversión de Texto a Voz. Durante la conversión, prácticamente no se puede usar el portapapeles para otra cosa, ya que interfiere con el archivo de audio generado o crea archivos de má...

Application pools y Web gardens (IIS / APS.NET)

Cuando se tienen varias aplicaciones ASP.NET corriendo sobre un servidor IIS, resulta conveniente crear pools diferentes para aquellas aplicaciones que tengan una demanda considerable. Un pool de aplicaciones es una forma de agrupar una o más aplicaciones web bajo el dominio de un proceso (o un conjunto de procesos) denominado Worker Process. Al asociar una aplicación a ese pool, IIS creará una (o más) instancia(s) del Worker Process para cada pool. En caso de que ocurra un fallo en una aplicación que provoque la finalización del Worker Process asociado al pool al que pertenece, otras aplicaciones asociadas a otros pools permanecerán funcionando sin problemas. Cuando un pool de aplicaciones está controlado por más de una instancia del Worker Process se denomina Web Garden . El número de instancias del web garden es configurable en las propiedades del pool de aplicaciones. Se debe tomar en cuenta que si la aplicación utiliza variables de sesión no funcionará con Web Gardens, ya ...