Desarrollo de Software

Articulos generales sobre desarrollo de software

Como asignar numeros al azar (random) a un campo en SQL Server

Ayer, para probar un code fix, tuve que actualizar el valor de una columna numerica en una tabla de SQL a valores random. No recordaba haber generado numeros al azar en SQL antes, asi que tuve que buscar como hacerlo. Encontre la siguiente manera, por si a alguien le sirve:


UPDATE TableName SET Field1 = ROUND(RAND(CHECKSUM(NEWID())) * (85 - 17), 2) + 17

Donde 17 es el limite inferior, 85 es el limite superior, y 2 el numero de decimales que se desean.

La formula la encontre en la siguiente pregunta de StackOverflow.com: SQL Server: fill a column with random decimal numbers

Como determinar el tamaño de los objetos en Session State en una aplicacion de ASP.NET

En el proyecto en el que estoy asignado actualmente, trabajamos en una aplicacion financiera (ASP.NET WebForms) muy grande. Utilizada en varios paises por miles de usuarios, siempre estamos buscando optimizar la aplicacion lo mas que podamos.

El caso de este post en especifico, es que notamos que habia muchos objetos almacenados en Session State y teniamos curiosidad de saber el tamaño que esos objetos estaban ocupando, para saber si era un area que debiamos optimizar. En la actualidad, la memoria RAM es de los componentes mas baratos y una de las maneras mas faciles de mejorar el desempeño de una aplicacion, pero si acaso una empresa, aplicacion o equipo esta limitado en presupuesto, igual es un area que se puede mejorar.

Como siempre, en StackOverflow.com ya habia alguien que habia tenido la misma duda que nosotros, y pudimos obtener un metodo que serializa a disco los contenidos de la sesion para poder medir su tamaño. Este es el metodo:

protected void PrintSessionSize()
{
 long totalSessionBytes = 0;
 var b = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
 System.IO.MemoryStream m;

 foreach (var obj in HttpContext.Current.Session)
 {
     m = new System.IO.MemoryStream();
     b.Serialize(m, obj);
     totalSessionBytes += m.Length;
 }
}

Espero que les sirva.

Que significa “Inconsistent line endings” en Visual Studio

Despues de muchos dias de que este dialogo me saliera en varias clases de C# en un proyecto en el que estoy, decidi averiguar que significaba “Inconsistent Line Endings” y que planeaba hacer Visual Studio al normalizar los line endings.

Como siempre, algun desarrollador brillante ya habria escrito sobre este problema: Jeff Atwood escribió The Great New Line Schism.

Resulta que es algo tan sencillo como que diferentes sistemas operativos utilizan diferentes caracteres para indicar el final de una linea de texto. Y como los caracteres obviamente son invisibles, no nos damos cuenta del problema hasta que abrimos ese archivo en otro sistema operativo. En mi caso, la mezcla se dio al haber pegado una linea de codigo (Un using statement…nadie deberia hacer copy/paste de codigo) en varias de mis clases. Otra posible razon es que si es un archivo compartido, las personas que estan editando el archivo esten usando diferentes sistemas operativos para abrir el archivo.

Esta animacion (tomada prestada del mismo articulo de Atwood) ilustra el problema:

Al momento de detectar que hay caracteres de newline mezclados, Visual Studio ofrece normalizarlos al estilo de Windows (CR + LF).

Asi es que desde ahora, pueden seleccionar Yes en ese dialogo…

Como verificar con C# si un archivo existe en un servidor remoto, sin descargar el archivo

.NET logo

Con este codigo de C# se puede verificar si un archivo existe en un servidor remoto, sin bajarlo.

var request = WebRequest.Create(new Uri("http://www.site.com/file1.zip"));

request.Method = "HEAD";

try
{
	var response = request.GetResponse();
	Console.WriteLine("{0} - {1}", response.ContentLength, response.ContentType);
}
catch (WebException ex)
{
	var resp = (HttpWebResponse) ex.Response;

	if (resp.StatusCode == HttpStatusCode.NotFound)
	{
		Console.WriteLine("File does not exist");
	}

}

La diferencia es el uso del metodo HEAD en lugar de POST o GET. El metodo HEAD regresa exactamente los mismos Headers que un request tipo GET, con la excepcion de que no transfiere el message-body, o en este caso, el contenido del archivo en bytes. Este codigo funciona para verificar la existencia de archivos fisicos, o URLs virtuales (ya que no siempre un URL corresponde a un archivo fisico).

Una vez que obtenemos una respuesta, podemos verificar varias propiedades del archivo, como el tamaño (ContentLength) o el tipo (ContentType). Si el archivo no existe, el Framework va a lanzar una WebException, de la cual tomamos la propiedad Response y le podemos hacer un cast al tipo HttpWebResponse, para poder verificar el error especifico HTTP que el servidor arrojó. Si el codigo es 404, significa que el archivo no existe.

Espero les sirva.

1 2 3 8  Scroll to top