Inefficiencies due to CakePHP ORM implementation

First let me say this article is not a critic against CakePHP (except one point I will talk about later), Object Relational Mapping, far than a trivial thing, it’s a very complicated one.

Let’s begin explaining what this TLA (three-letter acronym) is 🙂 Object Relational Mapping is a programming technique for allowing objects interact with a relational database, trying to allow the programmer to create, insert, update and delete objects in the database without typing a single line of SQL. The technical difficulties are well know (by the name «Object-relational impedance mismatch») and there is a lot of theory about them. In fact, some frameworks like CodeIgniter or Zend Framework avoid not only ORM but the models. This is not because these frameworks don’t follow the MVC pattern but because they follow a different philosophy: as it’s impossible to know how the datasource will be, better to don’t provide models and let them for the developer. They just provide some classes to interact with databases. The fact CakePHP implements ORM helps us to rapid develop an application, CRUD interfaces creation can be automatized, etc. CakePHP is RAD!
Sigue leyendo

Ventajas de los Unix-like para un profesional

Primero permítanme definir quien está a cada lado. Los Unix-like son todos los sistemas operativos Unix, por ejemplo OS X, FreeBSD, OpenBSD, Solaris… En este lado también pongo a Linux, aunque no sea exactamente un UNIX pues la licencia GNU significa «GNU’s not Unix» y una distribución Linux es básicamente el kernel de Linux más las herramientas GNU. Por otro lado… Windows, ¿es que hay alguno más? 🙂

Los Unix-like tienen la ventaja de que nos permiten optimizar esfuerzos pues los conocimientos adquiridos con ellos no caducan. Incluso conocimientos adquiridos en los años 70, antes de que surgieran los ordenadores personales o los modernos lenguajes de programación, siguen siendo válidos hoy en día. El equivalente en historia a 40 años en tecnología serían muchos siglos. En un mundo tan cambiante, donde en menos de una década todo cambia, Unix es la única constante de la que tengo constancia. El lenguaje C, las llamadas al sistema, los comandos, las «pipes»… ahí están desde el principio de los tiempos con pocas variaciones, así como su filosofía, probablemente la responsable de que haya podido sobrevivir tantas décadas.

Los desarrolladores y administradores de sistemas del otro lado siempre tienen que estar pendientes de lo que la compañía propietaria decida. Por ejemplo a finales del año pasado a todos los desarrolladores .NET les preocupó el anuncio de que se enfatizaría HTML y Javascript  como plataforma de desarrollo para Windows 8. ¿Iba .NET a ser extinguido? ¿Y todo el tiempo que le dedicaron y títulos oficiales de Microsoft pagados a precio de oro? Al final parece ser que la Runtime va a ser cambiada a COM y si los programadores .NET no quedan tirados es porque será accesible desde C/C++, .NET, etc. Aunque no sería la primera vez ni la última que una empresa deja abandonados a su suerte a los especialistas en alguna de sus tecnologías. ¿Qué pasaría por ejemplo si Sun abandonase Java? Tres años atrás me habrían tildado de loco por el mero hecho de plantear la posibilidad. Ahora las tecnologías de Sun pertenecen a Oracle, quien adquirió a la primera. ¿Qué futuro reserva Oracle para MySQL y Java? El que más le convenga a sus accionistas, obviamente.

Desde una perspectiva más general, las soluciones tecnológicas de Microsoft, Sun y demás enmascaran el problema solucionado detrás de otros problemas. Un profesional en una de esas soluciones tecnológicas es experto en solucionar esos problemas, pero si desconoce el problema principal, el problema que tecnologías como Java, .NET o Windows Server 200X quieren solucionar, al ser reemplazadas esas soluciones por otras el profesional tiene que partir otra vez, casi de cero, a aprender el reemplazo a la vieja solución y pagar de nuevo certificaciones que cuando proceden de grandes multinacionales son siempre costosas.

Nunca he odiado a Microsoft, algo bastante extendido entre los seguidores de las soluciones open source, bien al contrario le reconozco su gran labor de sacar la informática de las grandes multinacionales, bancos, ejércitos y grandes universidades y llevarla a los hogares, escuelas, oficinas y universidades, algo que les agradezco como esperan: pagando las licencias del software suyo que utilizo, básicamente Windows. Ahora bien, por el futuro de mi carrera profesional, prefiero soluciones open source como muchos de los Unix-like que existen ahora mismo y recomendaría lo mismo.

IDE, Vim o Emacs

¿Qué editor usar para programar? Es un tema que despierta pasiones, sólo las discusiones Emacs vs Vim ya se encienden con usuarios de estos editores, que en algunos casos llegan a llevar incluso décadas usándolos, pero no es sobre esto sobre lo que quiero opinar aquí sino sobre si usar uno de estos clásicos editores o un «moderno» IDE como Eclipse o NetBeans (mi favorito). Aquí también alguien podrá objetar que tanto Vim mediante plugins y sobretodo Emacs son auténticos IDEs, para quienes piensen así que por favor interpreten que el debate es entre viejos y nuevos IDEs.

En mi opinión, IDEs como NetBean o Eclipse sirven para trabajar en EL PROYECTO, ese proyecto que se va desarrollando durante meses o años y que puede que tenga a otros desarrolladores involucrados. Mientras que prefiero usar editores tipo Vim o Emacs en esos proyectos más pequeños y diversos. Hasta hace poco creía que un editor como Nano era suficiente para trabajar en el servidor con los ficheros de configuración o para arreglar algún marrón en vivo pero ahora veo que es rentable molestarse en aprender lo básico de una herramienta más sofisticada como Vim o Emacs.

Y si me preguntan si Vim o Emacs respondo que Vim. Emacs es un monstruo que hace parecer a Unix un plugin suyo 🙂 Basta decir que su lenguaje para ampliarle funcionalidades es Emacs Lisp, un dialecto de Lisp.

Tanto esfuerzo en escolarizarnos para después no aprovecharlo

escolarización

Recuerdo cuando estudiaba Bachillerato, que en el libro de historia se citaba un texto escrito por un tipo español en el siglo XIX en que alertaba de los «peligros» de alfabetizar a las clases populares; según él sólo servia para que estos acabaran leyendo panfletos anarquistas y comunistas y, en consecuencia, aumentara el crispamiento en la sociedad. Hoy en día nos parece muy incorrecto que este señor opinase que a las clases trabajadoras era mejor no alfabetizarlas, e inicialmente parece que las ideas elitistas de este tipo han acabado donde se merecen: en el basurero de la historia. Ahora bien, algunas veces pienso que esto no es tan evidente. Si bien es cierto que los países desarrollados tienen toneladas de bachilleres y universitarios, y muchos de ellos proceden de la clase obrera, a veces me pregunto en qué han quedado las enseñanzas que hemos recibido y supuestamente asimilado y, sobretodo, dónde ha quedado el espíritu crítico que se supone que alguien con cierta cultura debería tener. A continuación voy a exponer a modo de ejemplo algunos de los casos que me provocan tales pensamientos. Sigue leyendo

Drupal: en mi opinión el mejor CMS en PHP

Existen bastantes páginas donde podemos encontrar comparativas y opiniones de diferentes CMS’s. La opinión que aquí expreso está basada en mis años de experiencia y me centraré en los 3 más populares desarrollados en PHP: Drupal, Joomla y WordPress. En Python me parece excelente Plone, aunque complejo, en .NET todavía no he conocido ninguno bueno pero en este artículo no hablaré de ellos.

WordPress fue concebido para los blogs pero hoy en día dispone de muchos plugins alguno de los cuales pretende que WordPress pueda ir más allá. Un ejemplo representativo es crear una tienda con WordPress y mediante un plugin añadirle la funcionalidad de e-commerce: he tenido que sufrir ese plugin y ver que simplemente WordPress no da la talla. Probablemente es el mejor CMS para gestionar blogs y sitios web muy estándar pero tiene carencias importantes sacado de ese contexto. Por supuesto eso no significa que no pueda salir del mundo de los blogs, pero hay CMS’s mejores para ello. Es el que hago servir para este sitio web y es realmente muy fácil, rápido y cómodo de mantener, así como también lo fue crearlo.

Joomla es uno de los CMS más populares. Su principal ventaja sobre Drupal es que es más rápido desarrollar un sitio, siempre y cuando sea un sitio web que no se aleje demasiado de aquello para lo que Joomla fue ideado. En otras palabras: cuando debemos personalizar y empezar a tocar el corazón para dotar al sitio de nuevas funcionalidades las cosas se complican sobremanera.

Cuando se quiere un sitio personalizado me parece que Drupal es ideal. No tan solo por la creación de diseños personalizados mediante temas (themes), como cualquier otro CMS, sino también por la capacidad de crear nuevas funcionalidades y modificar las existentes mediante «hooks» o «callbacks». Los «hooks» nos permiten tanto la modificación del núcleo del CMS como la de los módulos sin tocar una sola línea del código original, lo que permite actualizar tanto el núcleo como los módulos sin que se pierdan las funcionalidades implementadas en los hooks. Y hablando de módulos, la cantidad de estos es ingente: desde módulos para hacer copias de seguridad de la base de datos hasta módulos para crear tipos de contenidos y campos personalizados pasando por módulos para optimizar el sitio para los motores de búsqueda, módulos para mostrar galerías de imágenes o vídeos, etc. Hay tantos módulos que no es muy frecuente que debamos desarrollar uno propio. La perfecta separación entre por un lado el núcleo del CMS y los módulos desarrollados por terceros y por el otro nuestras modificaciones hacen que un sitio en Drupal sea muy agradable de mantener, siempre y cuando en el desarrollo se haya respetado dicha separación.

Al hablar de las actualizaciones he tocado el tema de la seguridad y ahí Drupal también se sitúa mejor: la reputación de Joomla en lo que a seguridad se refiere no es muy buena.

Obviamente no todo son ventajas con Drupal. Su principal defecto es que el código sea un poco lo que en la jerga de los programadores llamamos «spaghetti code». Drupal, al menos en su versión 6, no utiliza muchas de las características de orientación a objetos que proporciona PHP 5 aunque a cambio puede funcionar con PHP 4.4.0. Si miramos el código la primera impresión es que es procedimental: no encontraremos clases. Si bien esa herencia de la versión 4 de PHP ahora le pesa, en su diseño se incluyeron algunos de los principios de la orientación a objetos que lo mitigan parcialmente. Componentes como los módulos, temas, nodos y usuarios encajan en la descripción de objeto. Incluso se emuló la herencia, la abstracción, la encapsulación y el polimorfismo. Por otro lado, los usuarios menos avezados que tengan la tarea de administrar el sitio web pueden encontrar algunos aspectos del back-end difíciles de usar, por ejemplo he oído quejas sobre la dificultad del módulo vistas pero es también éste uno de los módulos más poderosos de Drupal y no es fácil simplificarlo manteniendo al mismo tiempo toda su potencia. Lo que sucede con dicho módulo es un buen resumen de la idea detrás de Drupal: muy configurable y versátil pero eso tiene un coste en su facilidad de uso.

Otra característica de Drupal, que no es positiva ni negativa a mi entender, es que no usa el hoy en día tan popular patrón MVC (Modelo Vista Controlador) sino el menos conocido PAC (Presentación Abstracción Control). (Aunque por ahí hay gente intentado hacer encajar Drupal en el patrón MVC). Que el patrón MVC sea el más popular no implica necesariamente que sea el mejor para la web, frecuentemente en el mundo de la informática lo más popular (léase usado) no es lo mejor pues hay otros factores que entran en juego, pero todo eso ya sería tema para muchos artículos 😉 y no tiene cabida en esta breve oda de Drupal.