¿Han tenido problemas con la delicious toolbar?

Desde hace algunos días, noté que misteriosamente desaparecían mis “bundles” y algunos tags en La extensión Delicious para Firefox.

Buscando encontré este hilo de discusión en sus propios foros.

Como mencionan, la última actualización corrompe la base de datos local de los marcadores.

La solución es bajar una versión anterior de la extensión (dicen que hasta la 2.0.72 funciona bien) o una versión testing que está disponible en un grupo de yahoo.

El problema con esto último es que es necesario tener una cuenta yahoo y entrar al grupo. Por suerte se puede dejar más tarde. Pero mientras tanto estuve dentro, copie el link directo al archivo la extensión.

Ojala les sea de ayuda a los usuarios de delicious toolbar 😀 .

Update, guarde la copia y la subi acá.

Internet Explorer Encoding Fail

…o como un buen día acaba arruinado por esa basura.

Ayer fue un día prolífico de web-developeo, gracias a que me tope con parte del trabajo ya implementado (y libre), facilitándome mucho las cosas :D. Gracias a eso, podré añadirle otro toque “2.0” a Gonium.

En los últimos días, por motivos de fuerza mayor, he estado trabajando con otro laptop, … con windows xp (chan!). Es acá donde recordé que gran cantidad de las herramientas que ocupaba para desarrollar, cuando desconocía Linux, eran propietarias, pesadas y expiraban a los 10-15-30 días (a menos claro que…). Aproveche esta oportunidad para hacer las pruebas de rigor en Internet Explorer. Como era de suponerse, me causo algunas reacciones urticantes.

Entonces investigando encontré algunas cosas útiles, libres y para windows:

  • 7-zip sino como diablos abro un tar.gz o un tar.bz2 😆
  • Xampp un instalador de Apache+PHP(4/5)+Mysql5 y PHPMyAdmin. Lo bueno es que trae además:
    • mod_rewrite (Apache) Necesario para trabajar con Zend_framework y las urls para SEO. Hay que activarlo en el httpd.conf descomentado la linea que lo carga).
    • xdebug (PHP) Aunque no viene preinstalado, pero es cosa de editar el php.ini, sacar zend_optimizer y descomentar las lineas de xdebug (vienen seguidas).
  • Zend Framework, pack de clases + documentación + … + guías, para trabajar con PHP5
  • Notepad++ Editor te texto plano, para trabajar con código fuente en un montón de lenguajes.
  • Poedit Interfaz gráfica para gettex, una aplicación que permite realizar traducciones desde y en nuestro código fuente.

Con todo esto, más un buen pack de navegadores (Firefox, Arora (basado en webkit), Opera, Safari, IE en todas sus repugnantes versiones), ¿necesito pagar un peso para aprender/trabajar?

Construcción

Basado en el código que me encontré, quería implementar un nuevo módulo para mi sitio. Como trabajo con Zend Framework, es cosa de crear una nueva carpeta con la siguiente estructura:

root/modules
root/modules/my_new_module
root/modules/my_new_module/controllers
root/modules/my_new_module/models
root/modules/my_new_module/views
root/modules/my_new_module/views/scripts

Luego cree mi “MyNewModule_IndexController” (en root/modules/my_new_module/controllers) y mi script de vista index.phtml (en root/modules/my_new_module/views/scripts).

Es tan sencillo y corto que no lo voy a postear.

¿Y donde esta el EPIC FAIL?

Probé el nuevo módulo en Firefox durante todo el día, hasta que se me ocurrió ¿porque no probarlo en IE7 si estoy en windows?

EPIC FAIL:

Módulo pwneado en Internet Explorer 7

Todo el div central se desencuadro 👿 !!!

Las consecuencias eran evidentes. ¿Tendría que cambiar el Layout completo? ¿Tendría que cambiar el css? Afortunadamente, este incidente me obligo a replantear el CSS, que ya estaba algo desordenado. Ajustando perillas por aquí y por allá arregle algunos div’s y formularios rebeldes, pero del misterioso div desencuadrado nada…

Mis otros módulos seguían estando bien.

Probé mil y un arreglos, pero en mis otros navegadores seguía viéndose correctamente:

adasd
Módulo pwneado en Mozilla Firefox 3.0.1

Incluso en Safari (que recordemos, al principio entendía pésimo el HTML 😆 ):

fasdfdf
Módulo pwneado en Safari 3.1

Una delicia visual 😀

WTF :S

Cuando prácticamente dí por perdido el asunto, recorde a un colega, cuando trabajaba su código fuente, se enfrentó a un problema de codificación de caracteres. ¿Ha tenido problemas para mostrar caracteres acentuados en php/html? a esos mismos problemas me refiero. ¡Pero si no tiene nada que ver! ¿o si?

No perdía nada con probar. Todo el código fuente base de Gonium lo desarrollé con Kate y Quanta Plus en Kubuntu, que por defecto, trae codificación utf-8 en TODO el sistema (hasta los sistemas de archivos). Para mantener “compatibilidad” de mi código fuente, configuré Notepad++ desde el principio para producir archivos nuevos como utf-8 con saltos de linea unix.

¿Y si lo cambio a ANSI? Problema resuelto (uff!!!

Mi nuevo proyecto: Gonium

Tal vez se vea como una tremenda reinvención de rueda.

¿Por qué?

Hay un dicho muy cierto: si quieres las cosas bien hechas, hazlas tu mismo.

Gonium
Captura de pantalla de Gonium

Hay una infinidad de CMS’s a lo largo y ancho de la web. Realmente la fauna es inmensa. Hay CMS’s fáciles de instalar, otros fáciles de administrar, fáciles de extender, fáciles de modificar, etc…

Mi propia reinvención partirá siendo Gonium. Espero poder agregar lo bueno y evitar lo malo de los otros CMS’s. Pero para que no sea una reinvención total, decidí ocupar un Framework PHP: Zend Framework. ¿Por qué ZF? Básicamente porque ya lo conocía. Cuenta con documentación bastante buena, ciclos de desarrollo ágiles, es libre, tiene buena comunidad, etc…

No esperen mucho, está en una etapa embrionaria muy temprana aún. Prácticamente TODO se debe hacer a mano, incluyendo instalación, configuración de la base de datos, crear/instalar módulos, etc…

Además es una buena oportunidad para probar Google Code como repositorio del proyecto.

Inspiración

Lamentablemente ninguno de los CMS’s que he ocupado me ha logrado satisfacer del todo. Generalmente cumplen con su objetivo, pero siempre hay algo que le falta a alguno que sí tiene el otro. O algo que le sobra… Así que pretendo juntar lo bueno y evitar lo malo de aquellos que he probado.

Por ejemplo, admiro y me inspiro en los siguientes:

  • Joomla
    • Ventajas
      • Facil de instalar. Además el instalador da datos precisos y recomendaciones de ajustes del servidor.
      • Permite usar URL optimizadas para los motores de búsqueda (SEO)
      • Tiene miles de extensiones, el sistema de instalación de extensiones es NOTABLEMENTE sencillo y fácil de ocupar.
      • Muchas partes internas se puede modificar con extensiones (por ejemplo el editor enriquecido)
      • Existen muchas extensiones de terceros bastante útiles. A veces permiten hacer cosas bastante complejas.
      • Los temas, aun cuando mezclan html y php, son fáciles de editar. Generalmente son el esquema completo (layout) de header a body. El css también es fácil de editar. Incluso se pueden editar vía web.
  • Joomla
    • Desventajas
      • La programación es algo enredada. No es dificil, pero a veces no es fácil entender “de donde viene” alguna cosa.
      • Muchas extensiones son sucias, tanto en su HTML (no w3c-estándar), javascript semifuncional (funciona bien en 1 o 2 navegadores) lleno de errores o excepciones.
      • No es fácil traducirlo completamente, sobre todo las extensiones.
      • Ocasionalmente, el motor rompe compatibilidad con las extensiones o viceversa.
      • javascript funcional, pero para usos muy simples. Se hechan de menos algunos detalles de otros CMS’s, como por ejemplo un editor enriquecido.
  • Phpbb3
    • Ventajas
      • Amplísima documentación.
      • Permite uno de varios motores de base de datos.
      • Comunidad de usuarios enorme.
      • Manejo de permisos con una precisión tremenda. Se pueden establecer permisos realmente complejos.
  • Phpbb3
    • Desventajas
      • Como CMS, es buen foro.
      • NO TRAE RSS. Error fatal para los tiempos actuales.
      • NO TIENE URL’S OPTIMIZADAS PARA SEO.
      • Los temas son muy complejos de escribir.
      • Sus extensiones se basan en “mods”, que se deben implementar a mano (editando archivos, y base de datos). Más conviene encontrar un phpbb-enchulado que intentar implementar mod’s. En este caso, la mayoría de las veces conviene solo usar Mysql como base de datos.
  • WordPress
    • Ventajas
      • Muchísimo más fácil de adminstrar que joomla o phpbb
      • Fácil de traducir.
      • Incorpora de fabrica varios detalles que lo hacen agradable de usar, por ejemplo: rss, ajax, un diseño css/javascript agradable. Por lo general, usa javascript no-intrusivo, lo que lo hace más accesible.
  • WordPress
    • Deventajas
      • Dependiente de Mysql
      • Como CMS, es un grandioso blog.
      • Su sistema de extensiones (plugins) es muy simple. Hacer efectivo algun cambio generalmente consiste también en editar el tema.
      • Los temas están PSIMAMENTE mal escritos. Son como un espagueti pegoteado.
      • Lamentablemente la traducción es muy “monolítica” (1 archivo traduce TODO el sitio).
      • Como sistema, se siente igualmente “monolítico”. Se siente, en el sentido de que hacer cualquier modificación mayor a veces significa intervenir archivos del motor, después de actualizas el motor, pierdes los cambios, o se rompe compatibilidad, etc… Por ejemplo: me paso que al instalar un plugin para widgets en una versión antigua, luego de una actualización, el plugin venía preinstalado, pero no se podía deshabilitar, por lo tanto tuvo un choque con mi plugin anterior.

Metas

Lo que me interesa conciliar de todo esto en Gonium es:

  • Opensource. Libre, código abierto, blablablah…
  • Bien programado desde el principio. Usando el patrón de diseño MVC. A medida que crezca, se incorporarán librerías que ocupen otros patrones de diseño.
  • Compatible con los estándares W3C. Siempre.
  • Usar URL’s Optimizadas S o S.
  • Temas fáciles de editar (el trabajo del diseñador no es programar).
  • Estructura fácilmente extensible. Un buen sistema de instalación de paquetes.
  • Permita incorporar Ajax. Javascript no-intrusivo, compatible y estándar (aunque no descarto la necesidad de hacks raros para IE, ya saben…).
  • Fácil de traducir (el trabajo del traductor no es programar). Pienso ocupar gettext (.po) por lo rápido, permite usar plantillas (.pot), y además porque existe Poedit que permite obtener las claves del texto traducible desde el código fuente.
  • Incorporar extensiones de primera necesidad (blog, galería, ¿foro?, lector rss, descargas, …)
  • Evitar romper compatibilidad hacia atrás. Lamentablemente no puedo dar garantía de esto mientras no libere una versión “1.0”, pero intentaré todo lo posible.

Y además agregar a futuro Implementar novedades de la web 2.0 como por ejemplo

  • Cuadros, menúes, bontoncitos y efectos Ajax, …
  • Extensiones que usen API’s de servicios externos (mashups).

Si lo pruebas, te gusta, no te gusta, cualquier crítica, idea, ayuda, bienvenida sea.

PHP5 y su curiosa la manera de manejar la herencia (POO)

Mi problema inicial era por decirlo menos, “simple”. Cree unas clases para manejar “módulos” (like-joomla), “bloques” (like-phpnuke) , widgets (like-wordpress). Es decir pequeños recuadros de html que puedo poner en una barra lateral, como en este blog.
OK. Mi diseño consistió en:

  • Clase Dock: es un “área” donde se pueden encolar los widgets. Ejemplo: un leftSidebar, un menuBar, etc…
  • Clase Widget: una clase básica de la cual heredaran los demás widgets. Un Widget entonces será un pequeño espacio que retornará HTML.
  • Clases que heredan de Widget. Ejemplo: Widget_Validator, es uno que hice que retorna los botoncitos con los links para validar el html con el validador de la w3c.

Hasta ahí todo OK.

Entonces, surgió la problemática. Algunos de mis Widget_* necesitaban recursos externos (un script de vista, un modelo, una traducción, etc…). Así que pensé “OK, necesito un directorio de recursos para cada widget”. El problema está en que en algunas partes del código, tengo las instancias de los widgets, pero no necesariamente conozco su nombre de clase, pues el método $widget->getContent() es el que hace la magia de pegar el HTML en su posición. Entonces pensé “ok, necesito un método que me retorne el nombre del ‘directorio de recursos’, puede ser en base al nombre de la propia clase”.

Acá es donde pillé el EPIC FAIL:
Seguir leyendo PHP5 y su curiosa la manera de manejar la herencia (POO)