Buscar este blog

lunes, 27 de mayo de 2013

Mandar correos desde .Net Framework

En .Net Framework es posible mandar correos usando la clase SmtpClient esta funcionalidad se encuentra en los espacios de nombre System.Net y System.Net.Mail, se pueden mandar correos en formato de texto o html e incluir archivos adjuntos, es muy sencillo, a continuación el ejemplo:


public void SendMail() {
    SmtpClient sender = new SmtpClient("127.0.0.1", 25);
    sender.Credentials = new NetworkCredential("usr", "Password");
    MailMessage message = new MailMessage("from@localhost", "to@localhost");
    message.Subject = "Mail test";
    message.Body = "This is a test";
    message.IsBodyHtml = true;
    mailer.Send(message);
}
 
Hasta la proxima!

domingo, 26 de mayo de 2013

Obtener la localización de usuarios web con GeoIP

En .Net tenemos la posibilidad de obtener la localización de nuestros usuarios usando las bases de datos y clases que proporciona MaxMind de manera gratuita, hay dos versiones de las bases de datos, para localizar el país, y para encontrar datos hasta el nivel de ciudad, las diferencia es que la base de datos de países es mucho mas pequeña pero en la versión de ciudades también podemos obtener también el país pero además la zona, la ciudad el código postal y otros datos.
Para usarla hay que copiar el archivo de datos a una carpeta accesible por nuestra aplicación, instanciar la clase LookupService y llamar sus métodos basandonos siempre en la ip del cliente.
La única inconveniencia es que las clases no vienen en formato binario, pero es cuestión de minutos compilarlas y añadirlas a nuestros proyectos.
A continuación un ejemplo muy simplificado de su uso en Asp.Net:


public void Detect() {
    LookupService ls
        = new LookupService(Server.MapPath("/GeoLiteCity.dat")
        , LookupService.GEOIP_STANDARD);
    Location loc
        = ls.getLocation(Request.UserHostAddress);
    Response.Write(loc.regionName);
}

sábado, 25 de mayo de 2013

Trucos de rendimiento en linq

Usar linq es muy tentador por la forma en que hace fácil escribir código sobre colecciones de valores ya sea en objetos, xml, sql o cualquier otra forma de agrupar valores, sin embargo hay que tener mucho cuidado con su uso ya que podemos caer en trampas que hacen el código muy lento, por ejemplo: en linq a objetos es muy fácil crear una expresión que busque un objeto con un determinado valor en una propiedad, sin embargo la trampa es que linq recorre toda la colección y compara objeto por objeto con el valor buscado, en colecciones pequeñas esto no es un problema pero si manejas un número de objetos significativo tu programa se puede alentar bastante, una posible solución es usar un árbol e indizarlo usando la propiedad que vas a buscar con lo que el rendimiento puede mejorarse incluso en varios de magnitud.
Otro ejemplo linq a xml, en este caso el problema es que el xml se almacena por completo en memoria, siendo una vez mas un problema con archivos grandes que nos pueden usar hasta gigabytes de memoria para archivos de solo unos megas, en estos casos puede convenir mas usar el xmlreader que lee los elementos uno por uno desde el stream y luego los descarta usando por lo tanto poquísima memoria.

Por supuesto las necesidades de cada programa varían y puedes encontrarte en que no tengas otra solución que usar linq.