Felipe

Sunday, May 4. 2008

Desde el miércoles, tenemos un nuevo habitante en casa...

minimalCMS@Apuntes

Wednesday, March 19. 2008

Finalmente hoy le llegó al minimalCMS su bautismo de fuego al ser "puesto en producción" como software del proyecto Apuntes.

¿Qué es el proyecto Apuntes?; es una iniciativa de la SHyME del CEI, conducida por el MLI; la cual consiste en un portal web que contiene online para la descarga directa todos los apuntes oficiales de FIUBA (ya, prometo que este es el último acrónimo que meto) y que en tiempos pasados editara el CEI en su desaparecida imprenta.

La iniciativa del proyecto pareció copada, y le dimos el espacio desde Foros-FIUBA para su difusión. Yo me encargué de escribir el sitio desde cero y, como no podía ser de otra forma, le encajé el minimalCMS.

La concreción total de un proyecto, con cada uno de sus detalles para llegar a cerrar un lanzamiento, me sirvió un montón para pulir y terminar de escribir ciertas features... también para que saltaran en evidencia lo que tengo que hacer sí o sí en los próximos refactorings de código. El sitio completo es una fusión del CMS (uh, mentí) base para la gestión de contenidos, más un módulo escrito a medida para el manejo de los archivos; por lo que salieron a la luz muchos detalles para la inclusión no traumática de componentes agregados.

Si bien es siempre un dolor de cabeza integrar un proyecto completo sobre una plataforma que se encuentra aún en estado alpha, creo que siempre es lo más sano para poner a prueba lo que uno hasta el momento testeó tan sólo jugando. Hay que ver cuánto me dura la paciencia de upgradear esto cada vez que modifique tantas partes, agregue otra y reescriba tantas otras.

De momento estoy feliz. Varios meses de trabajo salen a la luz con un proyecto que me parece muy positivo; y pude ser parte de eso (, y pude encajarle el minimalCMS a algo).

Reduce FAT fast.

Tuesday, February 5. 2008

Yo creo que Jorge Hané debería probar con mkfs.vfat.

Dos semanas de laburo; pero creo que terminé de recuperar toda la información.

(Consejo: particionen con clústers más pequeños de lo standard; hay muchas más posibilidades de que algún backup de la FAT sobreviva a un reformateo.)

minimalCMS

Thursday, December 6. 2007

(Sí, ya sé; no hacía falta otro CMS más, pero bueh, es lo que hay.)

Motivación y desarrollo


La historia es así. Corría noviembre de 2006; un amigo me dice que necesitaba instalar algo que le permitiera mandar postales electrónicas desde su sitio, pensaba hacer el lanzamiento antes de las fiestas. Me puse a investigar los softwares de e-cards que habían y no me convenció ninguno; ¿solución?, escribir uno desde cero.

Entre idas y vueltas mías, de mi amigo, del hosting, su conexión a internet (con un océano de distancia no tener internet complica un poco la comunicación...), y más cosas, las fiestas del 2006 se pasaron. Yo dejé el proyecto a "casi terminar", y de vez en cuando lo agarraba de vuelta, le daba vueltas a alguna cosa un par de veces, y lo volvía a colgar.

Para mitad de este año creo que ya había redondeado la aplicación... una capa de datos y negocios bastante encapsulada, y un sistema de templates con recortes que juntaba toda la magia. Aplicación modesta que servía especificamente para mandar postalitas, nada más, pero lo hacía sencillo y con un sistema de templates basado en HTML cortado, fácil de integrar para alguien que no programara.

Cuando empecé a escribir el panel de control empezó el delirio... empecé a escribir un panel con un script monolítico de acciones donde un par de formularios le posteaban y a poco de empezarlo lo colgué. Varias veces más quise agarrar eso, y siempre el mismo embole, no me gusta hacer formularios, y no me gusta el código chorizo... ¿en qué terminé?; empecé a hacer un panel de control modular, usando el mismo sistema de templates que para el sitio, agregándole funcionalidades a la clase de negocios.

Llegamos a octubre; más o menos estaba redondeado... empieza la batalla por pensar un nombre un poco más buscable que "ecards" para la publicación. Para mitad del mes, registro el proyecto en SF bajo el horrendo (pero original, eso sí) nombre de PHPsdraCe; creo que la descripción era algo de la onda de "a PHP eCards engine with a versatile template system".

Culo inquieto; mientras pulía lo que había hecho para dejarlo cerrado, empecé a limpiar el código y de a poco me iba convenciendo de que tenía poco sentido dejar eso como un programa de postales y que daba para un poco más. En base a las cosas que tenía escritas, empecé a mover código para un lado y para el otro, y empecé a encaminar la idea de un CMS, cosa en la que estuve trabajando en los pocos ratos libres que tuve este último mes. PHPsdraCe se transformó, finalmente, en minimalCMS, "A simple and light content manager system, written in PHP.".

Diseño


La aplicación está escrita en PHP 4.2, con MySQL como motor, y pensando en Apache como servidor (estos últimos dos, de momento). ¿Por qué este combo?; porque era lo que tenía el hosting para el cual lo empecé... reconozco que el desarrollo tiene un par de soluciones ad-hoc que hubieran sido evitables usando PHP 5 (u otro lenguaje), pero no es algo que me quite el sueño; si bien no es un lenguaje que ame, me siento cómodo desarrollando PHP.

La característica principal que tiene (y si bien es lógico por lo verde del proyecto que sea así, mi idea es seguir trabajándolo sin perder eso de vista) es la de trabajar con una estructura pequeña de datos básica para operar; dependiendo del tipo de contenido a generar, el mismo suele resolverse con un par de consultas a bases de datos y haciendo un uso mínimo de importación de scripts.

Los objetos básicos del CMS son categorías e items (si bien es probable que a futuro fusione las dos cosas como una para optimizar búsquedas); como es de esperar, una categoría contiene categorías o items, y un item es sólo contenido. Los ítems y categorías viven en la base de datos, y cada uno tiene asociado un tipo (en caso de ser extensiones de los objetos base) y un template. La resolución de los objetos se hace siempre con semantic URLs, utilizando mod_rewrite, sobre la categoría. Por ejemplo, si se pide /hola/mundo/que/tal.html primero se busca una categoría de nombre que hija de hola y mundo; si ella no existiera, se busca a mundo hija de hola y así hasta llegar a la categoría root (la cual siempre existe). Cuando se encuentra el primer nombre que coincide con una categoría, se instancia la misma (según su tipo) y se le pasa como argumento la porción de URL que quedara sin reconocer; si en el ejemplo existiera la categoría que<-mundo<-hola, la misma se instanciaría con tal.html de argumento. Suponiendo que esta fuera una categoría de comportamiento base, entonces, con ese parámetro, intentaría encontrar un ítem llamado tal contenido en ella. Si los argumentos de la categoría no llegaran a ser resolvibles, el pedido podría terminar en un error 404.

Dado este diseño; es posible tener árboles completos dentro de la estructura de directorios virtuales que emula el CMS, que tengan su comportamiento totalmente controlado por una categoría base en la jerarquía (por ejemplo, un módulo que implementé, genera una categoría que sirve, emulando al Autoindex de Apache, un directorio del servidor); lo cual permite la integración de practicamente cualquier cosa, simplemente instanciándola como una categoría y procesando sus argumentos.

El proyecto actual permite construir muy rapidamente contenidos utilizando una plantilla y las categorías e ítems base. Dado que cada categoría y cada ítem contiene dos títulos, descripción, contenido, imagen y thumbnail asociados; es posible, sin necesidad de extensiones, crear diferentes tipos de contenido cambiando nomás el template. Si bien el sistema de templates aún no está cerrado; el mismo permite acceder a propiedades y métodos de los objetos, pasarle parámetros, establecer fondos de repetición discriminados por contexto (¿es la categoría actual?, ¿es una categoría padre de la actual?, etc), establecer sentencias condicionales sencillas, etc.. En paralelo al sistema de templates hay un par de utilidades de base las cuales hacen, entre otras cosas, resizeos y cacheos de imágenes según parámetros del template, enlazar e instanciar diferentes objetos, etc..

minimalCMS funcionando


De momento el minimalCMS puede verse funcionando en su página de SourceForge aunque, debido a las falencias y errores permanentes que tiene dicho servidor, recomiendo acceder a la versión que está corriendo en mi servidor.

Pueden descargarse los fuentes del repositorio SVN que está en SF; pero, sinceramente, creo que hay poco que ver (por supuesto, de hacer andar lo publicado, ni lo sueñen :)).

El proyecto para mí


Más allá de la justificación desde la inercia, ¿por qué escribí un CMS?

En primer lugar; si bien este es el primer CMS OpenSource que escribo y publico, fui coautor y autor de, al menos, tres proyectos similares previos. Habiendo recorrido un camino de diseño y desarrollo con otros tiempos y exigencias un par de veces; es para mí una experiencia nueva el poder hacer desde cero un desarrollo, solo, tranquilo, sin nadie arriba, andando y desandando caminos para concluir una aplicación a gusto propio y como una distensión... ya lo saben todos, a veces considero muy productivo reinventar alguna que otra rueda para llegar a lo mismo que habían llegado otros.

En segundo lugar; hice suficientes búsquedas infructuosas para instalar y usar CMSs y desde hace bastante que estoy convencido de que (a) no hay uno que se adapte a lo que suelo necesitar para proyectos modestos, (b) que encontrarlo me vaya a insumir menos tiempo que hacerlo desde cero, y (c) que una vez encontrado vaya a quedarme tranquilo sin tener que reescribirlo en parte. Bueno o malo, este es un software escrito a mi capricho, y seguramente va a ser el core del que echaré mano para varios proyectos que dejé colgados por disgregarme al no poder definir un buen software de base.

Si bien lo estoy publicando y actualizaré las cosas que vaya puliendo, dudo que a alguien le importe o le sirva; este es un CMS más en la inmensa lista de otros que ya hay, seguramente mucho más inmaduro, mal diseñado e inutil que muchos otros que andan dando vueltas.

Está claro; lo escribí para mí... y claaaaro, para mi amigo; ¿ya mencioné que todo lo referente al envío de postales quedó desmantelado?

MSNCP 0.7.1-beta release.

Tuesday, October 30. 2007

Después de mucho mariconear con que tenía que retomar el desarrollo del MSNCP, para terminar un gran refactoring de código que había dejado colgado, agregarle cosas nuevas, llenar muchos baches, que me iba a hacer un rato para eso, que este cuatrimestre, sí, que este cuatrimestre de verdad arrancaba... al final me dispersé con otros proyectos y éste me quedó totalmente colgado.

Aun así, hoy hice un release. El 0.7.1-beta; primero en un año y tres cuartos. ¿Por qué hice un release?; porque desde el domingo que el servidor de Messenger rechazaba sistematicamente todo login proveniente de la msnlib... un cambio en una querystring y todo solucionado; pero sin ese cambio el cliente había quedado inservible.

Totalmente desmoralizante el finalmente haber hecho un release por un capricho del servidor, un bugfix de 5 caracteres, después de casi dos años de inactividad; más cuando para las primeras 7 versiones mantenía de promedio un release por mes. Pero bueno, así salió. Ahora para que sea menos vergonzoso debería sacar una versión 0.8 un poco más pulenta...

¡Eso!, ¡mañana mismo retomo el desarrollo...!

Algún día tenía que migrar...

Monday, September 24. 2007

El jueves antepasado noté que mi sitio web dedicado a Fernando Pessoa estaba teniendo problemas. Como estaba pendiente de terminar el material para mi charla en las Jornadas del Lugfi no le di mucha pelota y me olvidé del tema. El martes noté que todo mi hosting estaba bloqueado. Mail para la gente que me cede el espacio (de onda y desde hace años)... aún sin respuesta.

El jueves, viendo que tal vez la cosa iba para largo; me puse a hacer la dolorosa migración que había estado evitando por largos años... el sitio lo escribí hace mucho mucho, en ese momento no conocía más que ASP y Access.

Hace casi un año empecé a escribir una nueva versión del sitio usando PHP como lenguaje base... pero entre idas y vueltas, todavía el proyecto está bastante verde como para que fuera viable aprontarlo en un par de días. Así que la migración fue por el lado más asqueroso; reescribir PHP sobre el source ASP, uno a uno.

Un par de noches traduciendo y debugueando; el domingo completo gastado en migrar (y unificar, después de años diciendo que en algún momento tenía que juntar toooodos los .mbds que tenía tirados) bases de datos de poesías, libros, medio millón de registros de visitas a la página, etc.; desarrollo hecho en el plazo que dio la espera a que NIC actualizara la delegación del dominio.

Finalmente, hace un ratito, justo antes de empezar a escribir este post, terminé de ajustar un par de cosas que surgieron cuando el dominio empezó a resolver, y migré el libro de visitas que había pateado por cansancio el fin de semana. Y ya; mi sitio andando sobre PHP y con MySQL, practicamente con la misma funcionalidad que antes.

Todavía no sé qué va a pasar con mi hosting, así que preventivamente estoy emulando las extensiones .asp con modRewrite; pero creo que esto ya es definitivo.

Ahora a seguir en background con el desarrollo que empecé hace un año; pero por suerte, el haber ya migrado y unificado las bases de datos, y el haberme sacado de encima a Access es un paso importantísimo, y me saca de encima la dependencia de necesitar un Windows y un IIS para rescatar la información.

Llevaba años dilatando esto; nunca pensé que lo iba a despachar en menos de 3 días.

(Ya puedo irme a dormir. Es hora.)

Minivacaciones.

Monday, August 27. 2007

Aprovechando los indefinidos días de vacaciones de changüí que nos dio el conflicto con los no-docentes en FIUBA; aproveché este fin de semana para "hacerlo" largo y rajar para otros lares.

Franco compensatorio el viernes en el laburo, faltazo compensatorio a futuro el lunes, especulación con que las clases no empezaban ni en pedo el 27 como se esperaba y pasajes a Colón.

El tiempo se portó bárbaro; un sol radiante en el micro a la ida, un sol radiante en el micro a la vuelta... nublado/lloviendo todos los días de estadía. La Ciudad está linda para desconectarse; para desconectarse en serio... en realidad, mucho para hacer no hay; al leer los folletos que juntamos al llegar noté que había sido mala idea mirar pájaros por la ventana del micro, dado que ya había agotado una posible actividad antes de llegar.

Y bueno, las actividades típicas; comer, dormir, criticar, embarrarse, ser jauría acosado por perros, visitar las piletas termales un domingo a las 9 de la mañana y sentirse en Cocoon. Y luego, el poder disfrutar de todos esos lujos asiáticos a los que uno no puede aspirar en su vida coditidiana: dormir en una cama, tener televisión, tener bidet, no tener que echar baldes en el indoro, que la habitación tenga piso, tener vidrios en las ventanas... y muchas otras cosas que nadie que no haya sido plantado por un albañil puede entender.

Ahora volviendo a Baires justo para enterarme que se murió mi abuelo, resolver un par de quilombos laborales, ponerme al día de otras novedades varias, retomar proyectos, y quedarme sentado a esperar que empiecen las clases algún dia.

PageOnPage

Tuesday, August 7. 2007

En esta semana, seguramente como producto de las no-ganas de preparar finales, me puse a jugar en una cosa media bizarra (y que, supongo, alguien ya debe haber implementado muy-mucho mejor hace años... pero que no encontré en una primera búsqueda).

La cosa surge así: Estaba viendo de poder instalar una aplicación con base de datos en Aleph (especificamente este blog) y probé un par de cosas, todas sin éxito. La idea siguiente fue la de ver si era razonable y sencillo hacer una página que funcionara como repetidora de otra página, dando la impresión de ser local... y así empecé a tirar un par de líneas de código.

Anoche estaba aburrido y me puse a pulir el par de líneas iniciales que había tirado la semana pasada. El resultado de la trasnochada es este paquete; y la demostración del PageOnPage andando puede verse en este lugar, enmascarando el sitio web de FIUBA.

La aplicación es bastante sencilla, apenas unas 100 líneas en PHP. Básicamente tiene dos partes; una, un .htaccess con una reglita de mod_rewrite que redirije todo a la otra, el script _popwrapper.php. Este script conoce el host y el path en el que está corriendo el mod_rewrite y conoce el host y path de la pagina que debe enmascarar; con esos datos, la URI, el POST, el method y los headers del request, arma la URI de la página destino y un pedido que le envía al proxy web (no publiqué otra versión, que obvia el proxy). En base a lo que devuelve el proxy, se arma el request, reemplazando los enlaces absolutos del sitio y los dominios en las cookies. El resultado, navegar una pagina remota adentro de otra.

El codigo es desprolijo y tiene bastantes cosas sin hacer... a saber, no todos los headers se están reenviando, así que en el ida y vuelta se pierden cosas como referrers, archivos, headers de caché o fechas de modificación, etc.. El conjunto no es más que un mero juguete... pero implementa un par de features copadas. Por supuesto, todo muy bonitamente hardcodeado y bien bien poco genérico.

Cuando pude entrar a un foro, navegarlo, loguearme y dejar un par de mensajitos, consideré que era hora de irme a dormir, con la inquietud que me llevó a escribirlo ya satisfecha.

Irreversible primera impresión...

Friday, August 3. 2007

Bueno; con este post de rigor, doy por inaugurado mi blog...

Hace un tiempo que tengo la "necesidad" de uno... siempre recuerdo que no lo tengo cuando se me ocurre que algo estaría bueno para postearlo en él. Supongo que ahora, que sí tengo el soporte para hacerlo, dejaré de sentir esa necesidad dado que nunca más encontraré cosas "posteables". Pero bueno, suele pasar.

El blog es un Serendipity; lo estuve tuneando en los últimos días, y, si bien algunas cosas aún no están como deberían y hay un par de problemitas con algunos ítems de la hoja de estilos, más o menos ya está como para salir a la luz.

Sí, ya sé, ya sé, el template es horrible, Serendipity apestará y a nadie le interesa lo que yo tenga para decir (no necesariamente en ese orden de relevancia)... ¡pero se joden, es mi blog!