viernes, 18 de junio de 2010

Liberamos Yupp PHP Framework v0.2.0

Ha pasado algún tiempo desde la última liberación, por eso estamos muy contentos de anunciar la nueva versión de Yupp PHP Framework v0.2.0.


Esta nueva versión es más estable ya que se corrigieron varios problemas encontrados en la versión anterior, y cuenta con varios ejemplos de componentes y uso de helpers para hacer más fácil el aprendizaje.

Las notas de la versión con descripción de la instalación del framework:
    Descargas:
    Documentación:
    La lista detallada de los cambios y las correcciones se encuentra aquí:
    Colabora con el desarrollo del framework:

    En breve haremos algunos videos para explicar el funcionamiento del framework y mostrar cómo crea aplicaciones web desde cero. También mejoraremos la documentación, agregando más ejemplos.

    domingo, 11 de abril de 2010

    Liberamos nueva version de Yupp PHP Framework

    Estamos muy contentos de anunciar la nueva liberación del Yupp PHP Framework v0.1.9.

    Para esta nueva versión se incorporación correcciones a varios bugs encontrados desde la versión anterior,  además tendrá un nuevo paquete HTTP que servirá para enviar pedidos HTTP a otros sistemas y procesar su respuesta (gracias a Magdalena que implementó este paquete). También incluirá un mecanismo de conversión
    automática de instancias del modelo a XML, incluso de estructuras de datos complejas.

    Esta nueva versión es muy estable y tiene muchas funcionalidades y cuenta con nuevos ejemplos de uso para hacer más fácil la adopción por parte de los programadores, mejorando su curva de aprendizaje.

    Las notas de la versión con descripción de la instalación del framework:
      Descargas:
      Documentación:
      La lista detallada de los cambios y las correcciones se encuentra aquí:
      Colabora con el desarrollo del framework:

      martes, 16 de febrero de 2010

      Liberamos Yupp Portal v0.2

      ¡Yupp Portal v0.2 liberado!
      Yupp Portal es el componente para crear portales de Yupp PHP Framework.

      Descargas:
      http://code.google.com/p/yupp-portal/

      Hoja de ruta del proyecto:
      http://groups.google.com/group/yuppframeworkphp/web/yupp-portal---hoja-de-ruta


      ¿Para qué sirve Yupp Portal?

      Es una herramienta de alta productividad que permite crear un portal web completo en pocos minutos, sin necesidad de programación extra, solamente es necesario configurar la conexión con la base de datos.

      Este componente permite:


      Administrar páginas:


      1. Crear páginas con un clic
      2. Editar contenido con editor visual desde la web
      3. Estados de páginas: Normal, Borrador, Deshabilitada, Oculta
      4. Edición visual de items del menú principal
      5. Edición visual de contenido fijo (por ejemplo banners que se muestran en todas las páginas)

      Administración de usuarios:


      1. Administración de roles
      2. Crear/Editar/Eliminar/Aprobar usuarios
      3. Registro de usuarios y aprobación con email en un clic
      4. Login/Logout

      Tres roles disponibles:


      1. Administrador: crea/edita páginas, modifica el menú, crea/edita usuarios
      2. Editor: crea/edita páginas, modifica el menú
      3. Usuario: ve páginas ocultas

      martes, 9 de febrero de 2010

      Nueva liberación de Yupp PHP Framework

      Estamos muy contentos de anunciar la nueva liberación del framework, Yupp PHP Frameowrk v0.1.8.

      Esta liberación es la primera que incluye un juego de tests para detectar problemas en el YORM, el modulo de ORM de Yupp Framework.

      Para esta liberación hemos corregido los siguientes tickets:
      También hemos corregido y mejorado la documentación de referencia:
       Para descargar la nueva versión, accede a nuestro sitio en google code:
      Nos interesa que nos cuentes si has probado el framework, qué cosas buenas le encontraste y qué cosas le mejorarías, tu opinión cuenta!

      Si quieres colaborar con el framework y no sabes como, accede a la guía de colaboración:
      Las notas de la versión están en nuestra wiki:

      ¡Esperamos tus comentarios!
      -
      -

      martes, 19 de enero de 2010

      Testing del ORM

      En la línea de acción que estamos siguiendo para estabilizar el framework, estamos implementando un set de pruebas para YORM, el componente de ORM de Yupp Framework. Los tests se centran en la generación de las tablas en la base de datos, guardar correctamente estructuras complejas de datos, obtener estructuras complejas de datos desde la base, y verificar restricciones sobre los datos que se intentan guardar en la base.

      Con esto lograremos encontrar las debilidades del YORM, al mismo tiempo que demostramos las fortalezas que tiene actualmente.

      Los juegos de tests pueden ser descargados del SVN en nuestro sitio en Google Codehttp://code.google.com/p/yupp/source/checkout

      De esta forma nos acercamos a una versión estable de Yupp Framework, garantizando su poder para crear proyectos web de forma ágil y sencilla, ordenando el desarrollo y evitando las tareas repetitivas.


      Actualización:
      Uno de los tests que estoy desarrollando es el de probar estructuras de árboles en la base de datos. La prueba consiste en implementar una clase persistente en YORM, la cual es una página web, que a su vez puede tener subpáginas. Aquí está la implementación de la clase:

      class Pagina extends PersistentObject
      {
         function __construct($args = array (), $isSimpleInstance = false)
         {
            $this->setWithTable("test_a004_pagina");
      
            $this->addAttribute("titulo",  Datatypes :: TEXT);
            $this->addAttribute("contenido", Datatypes :: TEXT);
      
            // Pagina padre
            $this->addHasOne('owner', 'Pagina');
      
            // Paginas hijas
            $this->addHasMany('subpages', 'Pagina');
      
            $this->addConstraints(
               "titulo",
               array (
                  Constraint :: maxLength(255)
               )
            );
            $this->addConstraints(
               "contenido",
               array (
                  Constraint :: maxLength(100000)
               )
            );
            $this->addConstraints(
               "owner",
               array (
                  Constraint :: nullable(true) // Las paginas del primer nivel no tienen padre.
               )
            );
      
            parent :: __construct($args, $isSimpleInstance);
         }
      
         // Mas codigo ...
      }
      

      Y ahora la prueba de cómo generar una estructura de árbol y guardarla en la base. Lo que vamos a hacer son 4 instancias de la clase Pagina, la primera es la página raíz, la segunda es hija de la página raíz y las dos restantes son a su vez hijas de esta última. Con el siguiente código no solo creamos la estructura de árbol de páginas, si no que vamos a ver que toda la estructura se guarda automáticamente en la base con una única línea de código por parte del programador!!!

      $p1 = new Pagina(
              array(
                "titulo" => "Pagina raiz",
                "contenido" => "This step is usually done transparently as most compilers perform it and then invoke the assembler..."
              )
            );
            $p11 = new Pagina(
              array(
                "titulo" => "Subpagina de raiz 1",
                "contenido" => "This step is usually done transparently as most compilers perform it and then invoke the assembler...",
                "owner" => $p1
              )
            );
            $p111 = new Pagina(
              array(
                "titulo" => "Sub subpagina de raiz 1",
                "contenido" => "This step is usually done transparently as most compilers perform it and then invoke the assembler...",
                "owner" => $p11
              )
            );
            $p112 = new Pagina(
              array(
                "titulo" => "Sub subpagina de raiz 2",
                "contenido" => "This step is usually done transparently as most compilers perform it and then invoke the assembler...",
                "owner" => $p11
              )
            );
            
            
            // subpaginas de p11
            $p11->addToSubpages($p111);
            $p11->addToSubpages($p112);
            
            // subpaginas de p1
            $p1->addToSubpages($p11);
            
            // Guarda toda la estructura con esta única línea de código!
            if (!$p1->save())
            {
               Logger::struct( $p1->getErrors(), "Falla test A004.2 1" );
            }
            else
            {
               echo "Guarda Ok";
            }
      

      sábado, 5 de diciembre de 2009

      ORM de nivel enterprise

      Si bien nos falta recorrer un largo camino vamos hacia ese objetivo: llegar a un ORM de nivel "enterprise". YORM, el ORM de Yupp Framework hoy está soportando las siguientes características:

      • Mapeo de clases con atributos de diversos tipos (TEXT, DATE, BOOLEAN, INT, FLOAT, entre otros)
      • Mapeo de estructuras de herencia en 2 sabores: cuando la clase A hereda de la clase B se puede optar por "mapeo de herencia en tabla única", entonces A y B se mapean a la misma tabla, o por "mapeo de herencia de múltiple tabla" donde A y B se mapean a distintas tablas, cualquiera de las opciones es transparente para el programador.
      • Mapeo de relaciones entre clases: estamos soportando relaciones unidireccionales y bidireccionales con cardinalidades 1-1, 1-N y N-N.
      • Las relaciones múltiples pueden ser de 3 tipos: colecciones, listas o conjuntos. Las colecciones pueden tener elementos repetidos y desordenados, las listas tienen elementos ordenados, y los conjuntos no tienen repetidos.
      • Estamos soportando 3 bases de datos: MySQL, SQLite y el último agregado PosgreSQL.
      • Podemos definir restricciones sobre los datos y esas restricciones se verifican antes de ingresar cualquier dato a la base.
      • Salvado en cascada: simplifica el código PHP al salvar en la base una estructura compleja de clases relacionadas a partir de la invocación al método save() en la clase principal.
      • Carga perezosa: cuando se carga una clase desde la base no se cargan sus clases asociadas, las mismas son cargadas una vez que son referenciadas, o sea que si no se usan, no se cargan, ahorrando tiempo.
      • Creación automática del esquema de en la base de datos: crea todas las tablas necesarias haciendo un clic.
      Qué esperamos para el futuro en ORM:
      • Soporte para más bases de datos: Oracle, SQLServer, Access, etc.
      • Soporte para persistencia de colecciones de valores simples (Strings, Integers, Dates, etc).
      • Soporte para transacciones y rollback.
      • Capacidad de especificar los nombres de las columnas donde se guardan los campos de las clases.
      • muchas otras características...
      ¡Aceptamos sugerencias!
      -

      martes, 1 de diciembre de 2009

      Liberamos Yupp PHP Framework v0.1.7

      -
      Luego de largas horas de trabajo estamos muy contentos de liberar la nueva versión de Yupp PHP Framework.


      Las diferencias con la versión 0.1.6.7 son:
      1. Se corrije un bug que se liberó con Yupp 0.1.6.7 en la clase routing.Executer, pasaba cuando se retornaba null de una accion de un controller.

      2. Corrección de DatabaseMySQL en consultas que buscan por strings numéricos.

      3. Se eliminaron las clases Filter y Mapping, y se creó una clase Router que cumple las tareas de las elminadas y es mucho mas simple de usar. (http://code.google.com/p/yupp/issues/detail?id=10)

      4. YuppContext se quitan pasajes por referencia.

      5. Se agregan pruebas de generacion de controles complejos en formularios: html y calendar. html usa TinyMCE y calendar usa YUI Calendar. Se agregan ambas librerias al framework.

      6. Primer integración de PostgreSQL a Yupp. Nueva clase DatabasePosgreSQL.

      7. Correcciones a DAL, PersistentObject y PersistentManager.


      Descargas:
      http://code.google.com/p/yupp/downloads/list
      http://www.simplewebportal.net/host/1022.htm

      TAG SVN:
      http://code.google.com/p/yupp/source/browse/#svn/tags/v017

      Cualquier duda, consulta o reporte de error pueden hacerla en el grupo google (opción "debates > nueva entrada"):
      http://groups.google.com/group/yuppframeworkphp


      Hasta pronto!

      Pablo Pazos Gutiérrez
      Líder de proyecto
      Yupp PHP Framework

      -
      -