viernes, 25 de junio de 2010

Diseño Web: Fondo Disuelto

Cuando uno comienza sus primeros pasos en el diseño web generalmente lo hace como decimos en Costa Rica, a la "chambona". Esto quiere decir que montamos nuestras páginas a como caigan las cosas. Colocamos imágenes sin medir tamaños o sin tener el toque creativo del cual carecemos la mayoría que nos dedicamos principalmente a la programación.

Recientemente aprendí una técnica que muchos dirán que es básica, pero para este servidor no lo era y nunca está demás dejar documentado algo que para mi es imprecindible para diseñar de manera optimizada para la carga.

Si queremos que nuestra página luzca un poco más atractiva, podemos usar en lugar de fondos con un color plano, fondos con efectos como el fondo disuelto.

Primero debemos generar una imagen con este tipo de fondo. Usemos la herramienta Gimp para construirla. Tomemos la herramienta de mezcla:


Escogemos después el modo de disolver:


Arrastramos el cursor en nuestra imagen de arriba hacia abajo para generar el color disuelto en esa dirección. Ahora viene el truco para la optimización de carga. En lugar de generar un tamaño de acuerdo al espacio que queremos llenar en nuestra página, escalamos la imagen a un ancho de 4 pixeles dejando el tamaño de largo igual:


Quedamos con una imgen que luce así:


Ya en nuestro CSS usamos la propiedad de "repeat" para generar esta misma línea a traves de todo el ancho del fondo que deseamos cubrir. Al usar "repeat-x" nos ahorramos bytes de carga lo cual nos ayuda en la experiencia usuario.

#footer{
background: url(images/disuelto.jpg) left top repeat-x;
}


martes, 22 de junio de 2010

Documentum: seleccionar documentos con la ruta

Últimamente he tenido que investigar un poco sobre el Administrador de Contenido "Documentum", específicamente con DQL que es el lenguage de consulta del CMS.

Dejo a disposición un script para seleccionar los documentos especifícados con el nombre del archivo y la ruta del directorio. Como la carpeta y el documento se almacenan en dos tablas distintas, se necesita hacer un join entre estas dos tablas más un par de sentencias que a la verdad todavía no estoy seguro que hacen pero así estaba el código que usé de referencia.

select d.r_object_id, d.object_name, d.r_version_label, f.r_folder_path,
d.r_modify_date
from dm_document d, dm_folder f
where d.i_folder_id = f.r_object_id and d.i_position = -1
and f.i_position = -1
and d.r_object_id in (
select r_object_id from dm_document where (
( Folder('/') and ( object_name in ('a', 'b', 'c')))
or (Folder('/') and ( object_name in ('d', 'e', 'f')))
)
) enable(row_based)

miércoles, 2 de junio de 2010

Renombrar base de datos en MySQL

Parece ser que antes existía un comando en MySQL para renombrar una base de datos pero fue quitado por cuestiones de seguridad.

RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 

This statement was added in MySQL 5.1.7 but was found to be dangerous and was removed in MySQL 5.1.23. It was intended to enable upgrading pre-5.1 databases to use the encoding implemented in 5.1 for mapping database names to database directory names (see Section 8.2.3, “Mapping of Identifiers to File Names”). However, use of this statement could result in loss of database contents, which is why it was removed. Do not useRENAME DATABASE in earlier versions in which it is present.


Existe una manera alternativa pero solo funciona con el motor MyiSAM. Me tomó un poco de tiempo pero encontré un script para poder renombrar con InnoDB. El script requiere que exista una BD con el nuevo nombre que se va utilizar.


DROP PROCEDURE IF EXISTS RenameDatabase;
DELIMITER |
CREATE PROCEDURE RenameDatabase(
IN oldname CHAR (64), IN newname CHAR(64)
)
BEGIN
DECLARE version CHAR(32);
DECLARE sname CHAR(64) DEFAULT NULL;
DECLARE rows INT DEFAULT 1;
DECLARE changed INT DEFAULT 0;
IF STRCMP( oldname, 'mysql' ) <> 0 THEN
REPEAT
SELECT table_name INTO sname
FROM information_schema.tables AS t
WHERE t.table_type='BASE TABLE'
AND t.table_schema = oldname
LIMIT 1;
SET rows = FOUND_ROWS();
IF rows = 1 THEN
SET @scmd = CONCAT( 'RENAME TABLE ', oldname, '.', sname,
' TO ', newname, '.', sname );
PREPARE cmd FROM @scmd;
EXECUTE cmd;
DEALLOCATE PREPARE cmd;
SET changed = 1;
END IF;
UNTIL rows = 0 END REPEAT;
IF changed > 0 THEN
SET @scmd = CONCAT( "UPDATE mysql.db SET Db = '",
newname,
"' WHERE Db = '", oldname, "'" );
PREPARE cmd FROM @scmd;
EXECUTE cmd;
DROP PREPARE cmd;
SET @scmd = CONCAT( "UPDATE mysql.proc SET Db = '",
newname,
"' WHERE Db = '", oldname, "'" );
PREPARE cmd FROM @scmd;
EXECUTE cmd;
DROP PREPARE cmd;
SELECT version() INTO version;
IF version >= '5.1.7' THEN
SET @scmd = CONCAT( "UPDATE mysql.event SET db = '",
newname,
"' WHERE db = '", oldname, "'" );
PREPARE cmd FROM @scmd;
EXECUTE cmd;
DROP PREPARE cmd;
END IF;
SET @scmd = CONCAT( "UPDATE mysql.columns_priv SET Db = '",
newname,
"' WHERE Db = '", oldname, "'" );
PREPARE cmd FROM @scmd;
EXECUTE cmd;
DROP PREPARE cmd;
FLUSH PRIVILEGES;
END IF;
END IF;
END;
|
DELIMITER ;