Uno de los módulos más inestables de Drupal es Administration menu. Sin embargo, resulta de una utilidad inestimable ya que evita ensuciar el diseño del portal con un bloque destinado a las tareas administrativas.
Ayer advertí que uno de los sitios que gestiono, había perdido la opción de crear contenido (create content). Las secciones seguían existiendo, ya que se podía navegar hasta node/add. Como siempre, cinco minutos de búsqueda en Google permiten ahorrar horas de depuración directa. El resultado es un hilo de los foros de Drupal donde se describe minuciosamente el error y se proporciona un parche para solucionarlo.
Architecture as diagrams is an anti-pattern! [inglés] es un interesante artículo sobre la necesidad de que los diseños de arquitecturas sean dinámicos y funcionales, y no una mera estampa sin movilidad ni capacidad de interacción. También habla sobre la necesidad de llevar a cabo análisis y diseños completos, no quedándose únicamente en la abstracción del sistema. Es cierto que la captura de atributos es bastante aburrida, pero imprescindible para que la implementación final sea rápida y no se desvíe del objetivo.
Como dice el Manifiesto Cluetrain, la verdadera motivación para hacer un buen trabajo no es la satisfacción del cliente, sino la necesidad de demostrar a los demás que somos buenos profesionales. A mí me importa que el cliente esté contento, en primer lugar porque mi empresa depende de que así sea (y yo dependo de mi empresa), y en segundo, porque siempre se acaban estableciendo relaciones que van más allá de lo estrictamente profesional, de modo que uno se alegra cuando su cliente queda contento con el producto o el servicio prestado. Sin embargo, por encima de todo esto está mi propia satisfacción por hacer algo interesante y útil, por hacer algo bueno.
Hay mucho de lo que expongo en el párrafo anterior en el nuevo portal de AUSSA. Me enorgullece decir que he dirigido ese proyecto desde que todavía era una propuesta hasta que se salió a producción para la pasada Feria de Abril, y el cliente está satisfecho. Pero el mérito no es sólo mío: El equipo de trabajo (Jonathan Maerckaert como desarrollador y David Rodríguez como diseñador) han aportado sus conocimientos y esfuerzo para que el producto final tenga una calidad alta. Todavía quedan algunas mejoras, la Intranet (que no es poco) y muchos quebraderos de cabeza para adaptar un CMS como Drupal a unas necesidades muy específicas. Ya hemos superado la más difícil de todas, de la que hemos aprendido y disfrutado (también sufrido), así que afrontaremos el resto con nuestro mejor humor y disposición.
Hoy teníamos que implementar un prototipo de importación masiva de hojas Excel a una base de datos MySQL. Se trata de una operación transaccional, pero cada sentencia de inserción o actualización se hacía efectiva en la base de datos, de manera que el rollback se hacía imposible, y un commit era inútil.
Tras una breve búsqueda, encontré este enlace, que propone usar el objeto ResultSet en lugar de lanzar directamente el statement.
Leo en Barrapunto que podremos usar C y C++ para escribir aplicaciones web:
C Cod es un front-end para C, C++, o compiladores objeto de C que le permite tratar C como un lenguaje más de scripting. C Cod viene con C Server Pages, que proporciona soporte para CGI para que usted pueda escribir aplicaciones Web en C o C++ y tenerlos automáticamente bajo demanda.
Me parece mucho más práctico escribirlas en PHP, JSP, ASP.NET o RoR, pero una aplicación web en C/C++ puede ser mucho más eficiente y rápida. Para determinados ámbitos con requerimientos de alta disponibilidad, puede ser una solución a tener en cuenta. Habrá que desempolvar los conocimientos de gestión manual de memoria, la sintaxis estricta y las antiguas pero potentes struct.
Uno de los problemas recurrentes de los servidores de aplicaciones, y que ni siquiera profesionales certificados en Java me han sabido resolver, es el error de memoria agotada en PermGen. El caso es que el servidor se rompe y hay que reiniciarlo, solución nada aconsejable en entornos de producción.
Pues bien, tras algunas búsquedas y lecturas varias, he hallado la solución al problema, y lo que es mejor, una explicación detallada de todo el proceso. Al parecer, el recolector de basura de Java es generacional. Existen cuatro generaciones o etapas: eden, young, old y permanent. De izquierda a derecha, la diferencia fundamental (que no la única) es que el recolector de basura pasa con menos frecuencia que en la anterior. Como ya sabía el lector avezado, por la generación permanente no pasa nunca, así que cuando se llena, salta la conocida excepción que muchos tememos.
El artículo explica detalladamente cómo evitarlo para volver a dormir tranquilos.
Actualización 10/06/2010. He encontrado un artículo que explica magistralmente, y con ejemplos, las causas y soluciones del problema a nivel de implementación.
Mi entrada en el mundo Java ha sido nada gradual y de la mano de PYMESevill@, un interesante proyecto que ofrecerá una plataforma de contenidos y comercio electrónico a las PYME de la provincia de Sevilla.
Aunque sigo prefiriendo PHP para mis propios desarrollos, en estos meses he comprobado que J2EE es una especificación sólida y compleja que no sólo propicia, sino que fuerza a desarrollar siguiendo esquemas y patrones. Su integración con entornos como Eclipse ofrece herramientas muy útiles para tener un control total sobre el código. También he agradecido la comodísima gestión de los servicios web; una vez que se conoce el mecanismo, construirlos es baladí.
Claro que hay aspectos que no terminan de convencerme. Como soy un programador responsable, no soy partidario de tanta rigidez a la hora de usar objetos, lo que genera excesivo código innecesario. También echo de menos la facilidad de modificar un fragmento de código sin tener que reiniciar el servidor, por más que Tomcat autodetecte los cambios y dispare el despliegue de la aplicación. Por último, Java me parece menos eficiente que PHP, o al menos no tan susceptible de ser optimizado.
A medida que profundice en este complejo universo de desarrollo, es posible que mi opinión varíe. Pero sin duda, mi perspectiva será mucho más rica y argumentada.
A veces perdemos mucho tiempo reinventando la rueda. Tener a mano estos pequeños idioms o fragmentos de código reutilizable puede ahorrarnos más de una búsqueda en Google.
Mi sistema de depuración en PHP siempre ha sido muy rústico (pero eficaz): colocar trazas en el código y comprobar su salida. Sin embargo, desde que aterricé en el mundo Java, estoy empezando a pasar por el aro de usar el IDE como depurador, lo cual tiene sus ventajas y acelera el desarrollo.
Hoy traigo un par de enlaces interesantes (I y II) para instalar, configurar y usar Zend Debugger en Eclipse PDT.
PHP es un lenguaje de programación muy versátil y potente, pero históricamente muy mal usado. Es frecuente encontrarse con aplicaciones escritas sin rastro de POO, patrones de diseño, incluso sin sentido común.
Aparte de emplear las técnicas y buenas prácticas de la algorítmica, es recomendable mejorar el rendimiento de nuestras aplicaciones. Este sitio ofrece buenos consejos (algunos conocidos, otros no) para lograrlo.
Seleccione un término para iniciar una búsqueda.