.rpv{MAiN}Móvil
Móvil » Proyectos » BlackAugust: Mi Framework (versión normal) »

BlackAugust: Mi Framework

∞ 11.06.2010
BlackAugust: Mi Framework Recuerdo que desde mis inicios en el mundo del desarrollo de aplicaciones para Internet siempre eh trabajado con aplicaciones propias, pequeños frameworks que me sirven para `mover montañas`, mi primer framework -o lo más cercano a-, fue una función que escribí por el año 2003, la llamé PsychoSYS, era una función que incorporaba una serie de funcionalidades como:

  • Consultas a base de datos.
  • Paginación de resultados.
  • Colocaba el resultado de la consulta a la DB en plantillas.
  • La función recibía como parámetro una cadena que después se ejecutaba como código PHP, usando la función eval(). Esta con el fin de procesar los datos de la consulta a la DB, cuando era necesario.


Entonces, una simple llamada a esta función y volcaba los registros de una base de datos, dándoles formato (bloqueo de html, convertir la fecha timestamp en un formato legible, etc.), colocandolos en una plantilla HTML e incluso paginando los resultados en un numero definido en una de las variables que ingresaba en forma de parámetro. Pues bien, esta función fue recibiendo mejoras por un tiempo, añadiendo características, total que con esta función siempre me ahorraba de escribir mucho código cada que necesitaba programar alguna aplicación.

PsychoSYS fue en `ancestro` de BlackAugust, con el tiempo agregué otras funciones, por ahora recuerdo la que protegía de inyecciones SQL, pero eh estado añadiendo una que otra función (upload de archivos, conversión de títulos a url, etc.), lo que es este framework no tiene tanto, apenas si lo eh terminado hace pocos meses, al momento de escribir este post, solo este sitio y otro lo usan. A la fecha con excelentes resultados.

BlackAugust versus Software Libre



Antes, debo aclarar que voy a comparar este framework con algunos CMS (Content Management System, sistema de administración/gestión de contenidos), es un poco incorrecto y fuera de lugar, ya que es como comparar manzanas con peras; sin embargo, debido a que no eh usado ningún framework famoso (Symfony, cakePHP, etc.) ni conozco software `famoso` que esté usando estos frameworks y que tanto drupal como wordpress se usan muy comúnmente como frameworks... me dan cierta base para las comparaciones que hago en los siguientes puntos.

El hecho que use, personalmente, software hecho desde cero (privado) en lugar de las excelentes opciones que existen de software prefabricado, siendo incluso Software Libre no significa que prefiera el software a la medida o software privativo, este es un tema un tanto delicado, este tipo de comparaciones siempre se da de modo subjetivo, de hecho, la única forma correcta para seleccionar que usar en un proyecto se da por el tipo de necesidades que se vayan a tener, no existen formulas perfectas que te sirvan para toda ocasión, siempre se debe tomar en cuenta la frase de `get the right tool for the righ job` (algo como: `La herramienta adecuada para su trabajo`); antes que nada debes tener en cuenta que el software libre -por lo general- está preparado para cuestiones de propósito general, que según sea el caso será una característica buena o mala.

El software libre al ser -normalmente- de propósito general se incluye soporte para themes, plugins, patch, idiomas, etc. que por un lado es algo bueno, por otro excelente y por el último lado... es malo; son aplicaciones bastante pesaditas que si un sitio se construye en base a software libre (llámese drupal, joomla, worpress, etc.) se debe pensar de inmediato en optimizaciones (uso de caché, servidores dedicados, etc.). Para no ir más lejos, un ejemplo práctico: mostrar un post como este toma:

  • 0.260s en un drupal v6.17 recién instalado, solo con el módulo Path extra (incluido en el mismo paquete de instalación).
  • 0.390s en un joomla v1.5.18 recién instalado, sin módulos extra.
  • 0.340s en un wordpress v2.9.2 recién instalado, sin módulos extra.
  • 0.054s en este sistema.


Casi 5 veces más rápido que el competidor más cercano, por supuesto que hay mil cosas a tomar en cuenta además de la rapidez, cuestiones como: cantidad de consultas a la base de datos, que tan simple o difícil es actualizarlo/mantenerlo, seguridad y un gran etc. Nuevamente volvemos al `No existe ninguna formula perfecta que sirva para todos los casos`. Así que para mi particular caso: un sistema privativo `hecho en casa` es la solución correcta.

Características de BlackAugust



Pese a la comparación anterior, un framework es -a grandes rasgos- solo un conjunto de herramientas que evitan al programador escribir mucho código (framework explicado en la Wikipedia), es decir, un framework por si solo no hace ni sirve para nada en concreto. En el particular caso de BlackAugust, es un conjunto de librerías diseñadas para agilizar el desarrollo de aplicaciones web.

Actualmente BlackAugust tiene las siguientes características y/o soporte:

  • Implementación de Caché (dos tipos: parcial y total).
  • Soporte de direcciones cortas.
  • Generación de URL en base a una cadena (normalmente asignada por un título).
  • Comentarios.
  • Votación de post/comentarios.
  • Autentificación de usuarios.
  • Soporte para Upload de archivos, con restricciones: en tamaño, tipo, peso y resolución (en caso de imágenes).
  • Función de seguridad para evitar inyecciones SQL.
  • Función para generación de password/nombres de archivos aleatorios.
  • Soporte AJAX.
  • Loggeo `interno` de errores, tanto para debug como para los errores de tipo 404 (no encontrado) y 401 (acceso denegado).
  • Generación de Thumbnails (miniaturas de imágenes), así como de inclusión de marca de agua. Soportando el uso de librerías GD como de Imagemagick.
  • CAPTCHA, generación de imágenes de verificación.
  • Soporte para banneo de usuarios/ip.
  • Soporte de funciones MultiByte String.
  • Soporte para inclusión de Smilies y bbcode.
  • Soporte para tags (etiquetas).
  • Paginación de resultados.


Adicionalmente, BlackAugust incorpora otro mini-framework en JavaScript con las siguientes funcionalidades/soporte:

  • Funciones para realizar peticiones AJAX por los métodos GET/POST, incluso ambas a la vez.
  • Funciones para ocultar o visualizar elementos.
  • Generación de ventanas PopUp insides.
  • Generación de PopUp informativos.
  • Funciones para trabajar con formularios.
  • Funciones para incluir smilies/bbcode en formularios.


En base a BlackAugust eh desarrollado mi propio CMS: CUBO-S, un cms del que hablare en algún post futuro.
.rpv{FULL}Versión Móvil