Beta 2 de PostgreSQL 8.3

Ya está disponible una nueva beta de PostgreSQL, por lo que leí trae bastantes mejoras en rendimiento con respecto a versiones anteriores. Pueden ver una traducción -- pésima -- de las "Release Notes" en las siguientes líneas:

Nueva funcionalidad

  • Soporte integrado de las búsquedas de texto completo (estaba como módulo tsearch2).
  • Soporte para el estandar SQL/XML, incluyendo nuevos operadores y el tipo XML.
  • Soporte para enumerados.
  • Nuevo tipo de dato UUID.
  • Soporte para arreglos de tipos compuestos.
  • Control para la ordenación de campos NULL (ORDER BY ... NULLS FIRST/LAST).
  • Soporte para cursores actualizables (UPDATE/DELETE WHERE CURRENT OF cursor_name).
  • La configuración de los parámetros del servidor ahora puede establecerse para el ámbito de una función.
  • Los tipos de datos personalizados pueden tener parámetros.
  • Invalidación de funciones cacheadas cuando la definición de las tablas o estadísticas varien (ya no hay necesidad de utilizar EXECUTE para trabajar con tablas temporales en PL/pgSQL).
  • Múltiples mejoras en el registro y colección de estadísticas.
  • Soporte de SSPI para la autenticación en dominios Windows.
  • Soporte para múltiples procesos concurrentes de autovacuum.
  • El código se puede compilar sin problemas con Microsoft Visual C++

Mejoras de rendimiento

  • Asynchronous commit: permite que las transacciones sean comprometidas pero los cambios en disco retrasados, esto permite mayor rendimiento para las consultas de modificación de datos pero con el riesgo de pérdida de datos.
  • Distributed checkpoints: Reduce la actividad de I/O durante los checkpoints.
  • Heap-Only Tuples: por cuestiones de concurrencia, PostgreSQL retiene las versiones antiguas de las tuplas actualizadas y el espacio muerto dejado por éstas sólo era posible recuperarlas con VACUUM. HOT acelera la reutilización del espacio usado por los UPDATEs.
  • Just-in-time background writer hace más eficiente la escritura en disco.
  • Reducción del tamaño usado por campo y tupla (los campos que contengan menos de 128 bytes reducirán de 3 a 6 bytes, las tuplas serán 4 bytes más pequeños).
  • Mejora en el manejo de recorridos secuenciales.
  • Permitir que las operaciones ORDER BY ... LIMIT se realicen sin necesidad de ordenar toda la tabla.
  • Reducción de la necesidad de hacer vacuum.

Las descargas, como siempre, están disponibles en el sitio web del proyecto.

¿Continuar con la venta de enlaces?

Se habló mucho sobre los últimos sucesos relacionados al PageRank e incluso Matt Cuts parece confirmar lo que todos venían comentando:

The partial update to visible PageRank that went out a few days ago was primarily regarding PageRank selling and the forward links of sites. So paid links that pass PageRank would affect our opinion of a site.

Going forward, I expect that Google will be looking at additional sites that appear to be buying or selling PageRank.

No tengo idea si el PageRank en realidad afecta al posicionamiento o sólo es un adorno, pero en el hipotético caso en que continúen las penalizaciones y el PageRank tenga importancia, supongo que sitios/blogs como éste se verían afectados debido a que algo más del 84% de las visitas proviene de Google:

Estadística de visitas
Detalle de la estadística de visitas

Actualmente, el ingreso mensual de la venta de dos enlaces es mayor a los ingresos que reporta este blog con AdSense (el cual, por suerte todavía cubre los gastos de hosting), pero como están las cosas, dejaré de vender enlaces a través de Text Link Ads, puesto que al fin y al cabo no seré millonario vendiendo enlaces.

Las pocas personas* que lean esta entrada y se encuentren en esta situación ¿continuarán con la venta de enlaces?

*: Viendo los gráficos, supongo que ahora me creerán cuando digo que éste sitio tiene pocos seguidores. 🙂

Relación entre las propiedades MinDate, MaxDate y Value del control DateTimePicker

Hoy mientras corregía detalles de una pequeña aplicación, me topé con un error que involucraba a las propiedades mencionadas en el título de la entrada. El código a grandes rasgos era el siguiente:

[csharp num=11 start=1]using System; using System.Windows.Forms; class App { public static void Main (string[] args) { DateTimePicker dtp = new DateTimePicker(); dtp.MinDate = new DateTime(2007, 10, 01); dtp.MaxDate = DateTime.Now; // Simular la acción del usuario dtp.Value = DateTime.Now.AddSeconds(10); } }[/csharp]

Bien, las propiedades MinDate y MaxDate sirven para hacer que el valor de la propiedad Value esté en ese rango de fechas, lo interesante de ésto es visualmente también se aplica la restricción, es decir fechas fueras de ese rango están deshabilitdadas.

Retomando el punto, el problema en el código mostrado es que en la línea 11 se asigna la fecha y hora del momento en que se ejecuta esa línea, por lo que si un usuario intenta seleccionar la fecha actual segundos o minutos más tarde, se producirá una excepción del tipo ArgumentOutOfRangeException..

La solución para este problema es asignar un valor para MaxDate que esté lo más cercano posible al día siguiente:

csharp:
using System;
using System.Windows.Forms;

class App
{
        public static void Main (string[] args)
        {              
                DateTimePicker dtp = new DateTimePicker();
               
                dtp.MinDate = new DateTime(2007, 10, 01);
                dtp.MaxDate = DateTime.Today.AddDays(1).AddTicks(-1);

                // Simular la acción del usuario
                dtp.Value = DateTime.Now.AddSeconds(10);
        }
}

Como anécdota de esta entrada, mientras hacía pruebas con los ejemplos en Ubuntu*, extrañamente no pasaba lo mismo que con el .NET Framework de Microsoft. Luego de darle una mirada al código, me percaté que Mono no implementa correctamente esta parte, así que tuve que hacer el reporte correspondiente que pasado unas horas ya lo solucionaron. 😉

*: Mi disco duro pasó a mejor vida 🙁 e instalé ubuntu en otro disco que tenía por ahí, supongo que toda esta semana usaré Ubuntu al 100% -- hace tiempo que no usaba un entorno gráfico en Linux. 🙂