Categories
.NET Expresiones Regulares Varios

Rendimiento de expresiones regulares

Luego de leer los artículos publicados por Manuel (a.k.a melkorcete), me parece que se olvidó comentar que no siempre es mejor usar Expresiones Regulares.

A continuación, un ejemplo -trivial- que pone en mayúsculas las letras que son precedidas por espacios en blanco. La diferencia en rendimiento, se nota más cuando el texto es más grande.

csharp:

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;

class Program
{
    delegate string DoCapitalize(string str);
    static Stopwatch clock = new Stopwatch();
    static Dictionary<string, double> stats = new Dictionary<string,double>();

    static void Run(string str, DoCapitalize method)
    {
        clock.Stop();
        clock.Reset();

        clock.Start();
        method(str);
        clock.Stop();

        if (stats.ContainsKey(method.Method.Name))
            stats[method.Method.Name] += clock.ElapsedTicks;
        else
            stats[method.Method.Name] = clock.ElapsedTicks;
    }
    static void Main(string[] args)
    {
        string str = @"Cada año y medio los computadores doblan su velocidad,
entonces sale otra versión de Windows, que los ralentiza a su velocidad original"
;       

        DoCapitalize regex = new DoCapitalize(RegexCapitalize);
        DoCapitalize normal = new DoCapitalize(Capitalize);
        Console.Read();
        int n = 1000;
        for (int i = 0; i < n; i++)
        {
            Run(str, regex);
            Run(str, normal);
        }
        Console.WriteLine("\tStats for {0} iterations\n", n);
        foreach(KeyValuePair<string, double> item in stats)
        {
            Console.WriteLine("{0} --> Tiempo: {1:.##}", item.Key, item.Value / n);
        }
    }
    static string RegexCapitalize(string str)
    {
        return Regex.Replace(str, @"\s[a-z]", new MatchEvaluator(ToUpper)); // @"\s."
    }
    static string ToUpper(Match m)
    {
        return m.Value.ToUpper();
    }
    static string Capitalize(string str)
    {       
        StringBuilder sb=new StringBuilder();
        sb.Append(str[0].ToString().ToUpper());
        for (int i = 1; i < str.Length; i++)
        {
            char c = str[i];
           
            if (char.IsWhiteSpace(str[i-1]) && char.IsLower(c))
                c = char.ToUpper(c);
            sb.Append(c);
        }
        return sb.ToString();
    }
}

Cabe destacar que implementar nuestros propios métodos, puede tener consecuencias no deseadas, como el tiempo necesario para implementar un algoritmo alternativo y más importante, la eficiencia del mismo.

Categories
ASP.NET

Atlas Control Toolkit, ¿javascript fácil = javascript pesado?

Scott Guthrie, acaba de anunciar la disponibilidad de un nuevo CTP de Atlas Control Toolkit.

The "Atlas" Control Toolkit contains controls and templates that make adding client-side functionality to your site incredibly easy.

A pesar de que algunos están emocionados y nos muestran ejemplos de uso, IMHO, creo que varios de estos controles son prácticamente inútiles en comparación a lo que se puede hacer con otras librerías muchísimo más pequeñas... ya que la supuesta facilidad de uso de estos controles, trae como consecuencia que el navegador del cliente descargue una cantidad considerable de javascript que no usará, esto último debido a la falta de modularización de Atlas ASP.NET AJAX.

Finalmente, creo que es decisión de cada uno, determinar el escenario adecuado para el uso de estos controles u otros frameworks javascript.

Categories
.NET Varios

Videos de Lang.NET Symposium

Michael Lehman anuncia que ya están disponibles para descargar los videos de Lang.NET Symposium -un evento que convoca a investigadores relacionados con temas de lenguajes de programación y compiladores.

La lista completa de videos está disponible en http://www.langnetsymposium.com/speakers.asp

Categories
Varios

Lo que debes saber para trabajar en Perú

Creo que el siguiente anuncio explica porque aún no he sido capaz de conseguir un trabajo en mi país :-D:

REQUISITOS PROFESIONALES:

  • Programación: Action Script 2, ASP, ASP.NET, XML, XHTML, DHTML, CSS, Javascript, JSP, PHP, SQL, Visual Fox Pro, Visual Basic, Ajax, J2EE, Perl, etc
  • Base de Datos: SQL Server, My SQL, Visual Fox Pro, MS Access, etc PHP, MySQL
  • Servidores: Windows NT, Windows 2000 Server, Novell, Linux, Apache, etc. Administración de servidores de Correo, FTP, email, Web
  • Otros: Flash (IMPRESCINDIBLE)
  • Experiencia en desarrollo de aplicaciones personalizadas, construcción y gestión de bases de datos, elaboración y mantenimiento de administradores de contenidos, registros en buscadores, envíos de newsletter, carritos de compras, catalogos de productos, etc.
  • De preferencia con conocimientos de administración de negocios, marketing y/o comercio electrónico.

REQUISITOS PERSONALES

  • RESPONSABILIDAD
  • Honestidad
  • Disciplina
  • Puntualidad
  • Comunicativo
  • Capacidad para trabajar en equipo
  • Autodidacta

OTROS

  • Conexión permanente a Internet en casa (Speedy o Cablenet, no desde cabinas)
  • Inglés intermedio
  • Residencia en Lima
  • Computadora en perfecto estado (mínimo Pentium 4 o PowerMac G4)

El trabajo se desarrollará desde casa y los ingresos se fijarán de acuerdo a cada proyecto

Quieres ser parte de nuestros proyectos ?

Envianos tu CV a ---@b2wperu.com detallando tus capacidades y los proyectos que haz realizado

Se realizará una entrevista personal a los candidatos seleccionados en la cual se analizará los conocimientos técnicos asi como el trato personal, facilidad de palabra y carisma

No tengo idea si en otros países suceda lo mismo o no, pero este tipo de anuncios incoherentes, lamentablemente se ven casi a diario en Perú.

Suerte a las personas que tengan el valor de formar parte de ese tipo de empresas...

Categories
PHP Seguridad

SQL Injection en Menéame

Nota: Al momento de publicar este post, el bug ya ha sido corregido en la última versión de Menéame, pero probablemente sus clones todavía son vulnerables.

Existe un problema de validación de datos en el código fuente de Menéame, que dadas las condiciones necesarias, hace posible que alguien pueda apoderarse de la cuenta de un usuario, ingreso de datos inconsistentes y la creación nuevas cuentas con nivel "god" -esto último creo que no tiene mucha implicancia.