Alphasite

The programmers site

Google AdSense

Estadísticas web

Estadisticas web

Publicidad

Languages

Google AdSense

Poll

Who's online

There are currently 0 users and 48 guests online.

Would you like the articles on this page to be translated to English?

Fascinación web

En los últimos tiempos parece que los movimientos de las grandes compañías, especialmente Microsoft y Google tienden a intentar acercarse cada vez más a la tecnología web de una forma o de otra.

No es para menos, el mercado potencial de internet es muy superior a cualquier otro mercado que se haya dado hasta ahora, basta con mirar a Google, cuyo negocio es únicamente internet para darse cuenta de eso. Cada vez nos encontramos con más acercamientos por parte de montones de empresas para ofrecer diversos servicios alrededor de la web, muchas de ellas con un enorme éxito. Ahí tenemos Twitter, Facebook, Blogspot...

Sin embargo, últimamente parece que se empieza a hablar de un "universo web", Google Docs, Microsoft Office Live, Piccasa, etc ... y empieza a implantarse por aquí y por allá la idea de "sistemas operativos web", a saber donde llegaremos. La absurdez del asunto asusta, que uno pueda hacer algo no quiere decir que lo que haga este bien hecho y tenga sentido, no porque el correo electrónico online sea algo extremadamente útil va a pasar lo mismo con una suite ofimática en linea.

About Performance

I've been reading an entry from the Sasha Goldshtein blog named "Design for Performance Up-Front" in which he gives some interesting thoughts. I've specially liked this one

If a user clicks a button and the application crashes, it's a problem. If a user clicks a button and the application takes 5 seconds to respond when it should be unnoticeable, it's a problem. It's the same problem.

El misterio del bloque try vacio

Hace bien poco he leido un interesante artículo (en inglés) llamado "The empty try block mystery" que describe algunas secciones de código presentes en el código fuente del .NET Framework y que son similares a lo siguiente:

try
{
}
finally
{
  HazCosas1();
  HazCosas2();
}

y que responde a la pregunta ¿porque diablos iba alguien a declarar un bloque try finally estando el try vacío? Pues vamos a explicarlo, en español ;)

Tutorial de SQL. SELECT Parte II

Introducción

En el artículo anterior vimos el uso más básico de la clausula SELECT de SQL, sin embargo apenas arañamos la superficie en cuanto a la cantidad de tipos de selecciones que podemos hacer.

En este segundo artículo vamos a explorar las posibilidades de los comandos de grupo que nos permiten realizar operaciones sobre las filas que devolvemos (como devolver una suma, o el número de filas) así como el uso de la orden GROUP BY que está íntimamente relacionado con lo anterior. Por otro lado exploraremos las intersecciones que se pueden realizar entre consultas (JOIN).

SQL Injection explicado

La técnica de ataque de SQL Injectión (Inyección de SQL) explota una vulnerabilidad de la capa de acceso a datos de la aplicación. Es genérica a cualquier aplicación, no solo, como mucha gente cree, a aplicaciones web aunque debido al mayor acceso a través de internet así como al "descuido" de los desarrolladores web en muchas ocasiones a la hora de tratar los parametros GET ha hecho que este tipo de ataque se popularice en la web.

Patrones de diseño. Adapter

Introducción

El patrón Adapter (o adaptador), también conocido a veces como wrapper realiza la función, como su nombre indica de adaptar (o envolver) una determinada clase cambiando el interfaz de dicha clase y convirtiendolo en algo que se acerque más a nuestras necesidades.

En muchas ocasiones tenemos una clase que hace lo que necesitamos (o se aproxima mucho) y cumple todos los requisitos para que alguna otra clase la use pero, al no implementar un determinado interface o derivar de una determinada clase esto no es posible.

C# 3.0. Nuevas características III

Seguimos con un repaso a las características nuevas de C# 3.0, en la primera parte vimos el uso de de propiedades automáticas e inicializadores de objetos y colecciones. En la segunda parte vimos una introducción al uso de extensiones, que nos proporionan una forma no intrusiva de ampliar la funcionalidad de una clase.

En esta última parte vamos a ver la expresiones lambda y su integración con Linq así como algunas de las funciones que nos proporciona este último.

Excepciones y rendimiento

Acabo de leer un artículo bastante interesante sobre el rendimiento del uso de excepciones en .NET (aunque en general el concepto es aplicable a prácticamente cualquier lenguaje que las soporte).

El manejado de una excepción, especialmente la parte correspondiente a su resolución implica un gran consumo de recursos y tiempo. Para los que no vayan muy bien con el inglés (o sean demasiado vagos para leer el artículo :P) lo que viene a demostrar es la diferencia entre estos dos segmentos de código

for (int i = 0; i < 1000000; i++)
{
  string s = null;
  try{
   string ss = s.Substring(0, 2);
  }
  catch (System.NullReferenceException)
  {
  }
}
for (int i = 0; i < 1000000; i++)
{
  string s = null;
  if (s != null)
  {
  string ss = s.Substring(0, 2);
  }
}

observando que el código de la derecha tarda medio segundo frente a los nada más y nada menos que 50 segundos del código de la izquierada.

No obstante, aunque la comparación así hecha parezca nefasta, no debemos olvidar que la prueba lanza un total de un millon de excepciones consecutivas, algo que no es muy probable que pasé en la vida real, no obstante, si podemos comprobar que una llamada sea correcta antes de realizar, siempre será mucho mejor que capturar la excepción. En ese sentido es importante recalcar que lo importante es evitar la excepción en la medida de lo posible, no suprimir el bloque try catch, que en si mismo no genera ningún overhead, solo perdemos rendimiento cuando la excepción sucede, si no salta ninguna excepción la presencia o no de dicho bloque no afecta prácticamente al rendimiento.

Nueva versión del SDK del iPhone


Apple a publicado una nueva versión del SDK del iPhone (SDK beta 2) que fundamentalmente, aparte de algunas mejoras leves en XCode 3.1, incluye la inclusión del interface builder para XCode lo que nos permite realizar nuestras interfaces de una forma mucho más intuitiva lo cual, la verdad, se agradece.

Además, con el paquete de descarga (otros 2.1 GB, no se si se podrá uno actualizar o no) se incluye una beta del firmware 2.0 para instalar en los iPhones registrados.

Via: Applesfera