CSSeasy: layouts CSS

Uno de los trabajos iniciales con los que nos solemos encontrar al empezar un proyecto web es la de realizar el diseño inicial de la estructura de la página (layout). Normalmente se suele hacer un copy/paste de un proyecto anterior, pero en el caso de que no dispongamos de esa base previa, siempre podemos buscar en un lugar donde nos lo ofrezcan.
CSSeasy nos ofrece 8 diseños, 4 estáticos y 4 fluidos. Siendo los 4 diseños para los dos diferentes tipos los siguientes: 1 columna sin navegación, 1 columna con navegación arriba, 2 columnas con navegación izquierda y 2 columnas con navegación derecha.
csseasy.png
Lo que se echa en falta es una explicación más detallada, ellos recomiendan ver el código fuente y experimentar con él, el código está algo comentado, pero quizás no sea necesario para gente que se esté iniciando en el diseño web o que pasen de diseño con tablas a diseño sin tablas.
CSSeasy.com
Vía / Digg

links for 2007-06-11

links for 2007-06-10

Optimizaciones para MySQL

Ya el otro día hablábamos sobre las optimizaciones que podríamos realizar en nuestro entorno LAMP referente a Apache y PHP. Ahora, la gente de IBM nos vuelve a ofrecer otro artículo en el que nos indican cosas que hacer para mejorar el rendimiento de nuestra base de datos MySQL.
Las mejoras que se pueden realizar se dividen en tres conceptos: optimizar la máquina, configurar el proceso de MySQL y optimizar las querys. El servidor de base de datos nos puede dar problemas ya que una base de datos consume muchos recursos, lo cual se puede solucionar en muchos casos mejorando la CPU y la velocidad de disco duro, y si no, aumentar la RAM, cosas lógicas y normales.
Para la optimización de MySQL y el tratamiento de las querys lentas, se pueden realizar varias acciones. La primera de ella sería tener un log de qué querys emplean mucho tiempo en ejecutarse, para lo cual deberemos cambiar en la configuración de MySQL el parámetro log-slow-queries para que se guarden qué querys tardan más de cierto tiempo.
Otro tema importante es cachear las querys que se realizan, para ello hay dos formas, la que nos cuentan en el artículo, que es mediante configuración, y la otra que es mediante código, porque si lo realizamos mediante código podemos controlar mejor que querys cacheamos.
Al igual que ocurre en Apache, en MySQL es importante controlar el número máximo de conexiones, el timeout y el número máximo de errores, ya que si configuramos mal estos valores nos podemos encontrar con rendimientos poco deseados.
En total, una serie de recomendaciones muy buenas que debemos tener en cuenta cuando nuestra aplicación web requiere ajustar los recursos al máximo.
Tuning LAMP systems, Part 3: Tuning your MySQL server

links for 2007-06-08

View: herramienta colaborativa

view.pngView es una herramienta basada en web que nos permite conectarnos con otras personas y realizar nuestros proyectos de forma conjunta. Para ello, las herramientas colaborativas que nos ofrece son chat, pizarra y compartir escritorio entre otras.
view2.png
Disponible una versión gratuita y otras dos premium, tan solo es necesario un navegador y el Flash para poder empezar a trabajar. Con funcionalidades parecidas al PowerPoint, podremos subir ficheros, marcar contenidos importantes, invitar a amigos a participar, guarda la sesión automaticamente y muchas otras funcionalidades.
View
Vía / PHPDeveloper.org

Novedades para Drupal 6

drupal.pngDrupal es uno de los mejores CMS que existen en la actualidad, y cada nueva versión incluye novedades bastante importantes, que suelen ir más allá de un cambio estético.

La futura versión 6 nos va a traer interesantes cambios que nos va a ayudar bastante en nuestros desarrollos:

  • Los módulos podrán personalizarse mediante ficheros de plantillas sin necesidad de crear ningúna función. Drupal automáticamente seleccionará la plantilla del directorio en la que se encuentran.
  • Varias mejoras en la internacionalización: las páginas de configuración del idioma se separan de la interfaz de traducción. Posibilidad de indicar prefijos del path o dominios para diferentes lenguajes. Las entradas pueden tener asociado un lenguaje.
  • Mejoras en los logs, dando la posibilidad de personalizar esta funcionalidad directamente en nuestros módulos. Por ejemplo, podrás enviar un email si alguien deja un comentario, siguiendo estado conectado con el sistema de logs.
  • Mejoras de usabilidad, como recordad a usuarios anónimos en los comentarios y muchas otras más.
  • Mejoras en el sistema de menú, es más sencillo de entender y mantener y requiere menos memoria que el actual de Drupal 5.
  • Mejoras en el instalador: posibilidad de importar traducciones para módulos activos de forma automática, configuración de las credenciales de administrador, zona horaria y clean URLs.
  • Asociación de ficheros a usuarios y no a nodos, para poder así ser reutilizados por el usuario en distintos nodos.
  • Rediseño de la abstracción de la base de datos, facilitando la migración a otras bases de datos diferentes a MySQL.
  • Agregador de Javascript, complementando el similar para CSS que hay en Drupal 5.

Más información

Drupal 6: status update

Drupal 6 status update

links for 2007-06-07

Más internacionalización mediante PHP

La internacionalización es un tema del que ya he hablado con anterioridad, pero para mí es algo fundamental, quizás sea por la cantidad de proyectos en los que he trabajado que necesitaban de esta funcionalidad, a veces, para mi gusto, mal tratada.
En el anterior artículo ya hablamos de arrays asociativos, un array con clave el código del texto que deseamos traducir (un buen uso sería el mismo texto en el idioma inicial), y con valor el texto traducido. Debería haber un texto para cada idioma y luego al inicio de la aplicación una asignación del array correspondiente para el idioma.
En el artículo que comentamos nos explican cómo realizarlo mediante el uso de la funciones gettext, una interfaz de programación NLS, y el uso de ficheros PO (un fichero de texto plano que contiene el texto original y el traducido).
Sobre este método me da que pensar sobre su rendimiento. PHP al ser interpretado, todo lo que se meta, se lee y se interpreta. Si no se usa caché para los php, es mejor no introducir código innecesario en nuestros scripts. Según parece, el array asociativo con las traducciones se leerá completo en cada ejecución, cuando en algunos casos no será necesario traducir ni la mitad de las palabras.
En algunos proyectos el diccionario era bastante extenso, por lo que me planteo posibles soluciones para optimizar el código. Una posibilidad es dividir en diccionario por grupos independientes, pero este método hace que gestionar los diccionarios sea una labor más complicada. La otra solución es una carga inicial en cada script de las palabras estrictamente necesarias, habría que evaluar si el tiempo de carga de las palabras necesarias (para lo cual es necesario una operación inicial) es inferior al tiempo de carga completo (tan solo leer e interpretar). ¿Qué pensáis vosotros?
Give your web app international appeal