<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6393816664375104123</id><updated>2012-01-25T22:17:07.313-02:00</updated><category term='tetris'/><category term='presentaciones'/><category term='hotmail'/><category term='web'/><category term='material'/><category term='articulos'/><category term='curiosidades'/><category term='manejo de errores'/><category term='yupp portal'/><category term='cultura'/><category term='yupp desktop'/><category term='v0.1.9'/><category term='email'/><category term='nerds'/><category term='performance'/><category term='v0.1.6.3'/><category term='errores'/><category term='v0.2.5'/><category term='conferencias'/><category term='subdominio'/><category term='blogs'/><category term='humor'/><category term='comunicacion'/><category term='google apis'/><category term='urls'/><category term='google maps'/><category term='programacion'/><category term='yupp apps'/><category term='v0.1.6.2'/><category term='ideas'/><category term='vistas'/><category term='movix'/><category term='componentes'/><category term='descargas'/><category term='google code'/><category term='session'/><category term='zend'/><category term='plugins'/><category term='pruebas'/><category term='prototype'/><category term='json'/><category term='google'/><category term='svn'/><category term='screencast'/><category term='v0.1.6.7'/><category term='capacitacion'/><category term='problemas'/><category term='javascript'/><category term='apis'/><category term='liberaciones'/><category term='v0.2.1'/><category term='tecnologia'/><category term='geeks'/><category term='montevideo'/><category term='youtube'/><category term='http'/><category term='demo'/><category term='logo'/><category term='browsers'/><category term='v0.2.2'/><category term='frameworks'/><category term='cms'/><category term='compresion'/><category term='internet'/><category term='script'/><category term='codigo fuente'/><category term='yupp framework php'/><category term='difusion'/><category term='yupp blog'/><category term='archivos'/><category term='v0.3'/><category term='php'/><category term='caracteristicas'/><category term='ajax'/><category term='tutorial'/><category term='versiones'/><category term='videos'/><category term='grupo google'/><category term='aplicaciones'/><category term='documentacion'/><category term='v0.1.7'/><category term='jiio eventos'/><category term='controladores'/><category term='OO'/><category term='file system'/><category term='ejemplos'/><category term='herramientas'/><category term='seo'/><category term='jquery'/><category term='historia'/><category term='tests'/><category term='blogger'/><category term='v0.4'/><category term='noticias'/><category term='jiio'/><category term='v0.1.8'/><category term='orm'/><category term='source code'/><category term='eventos'/><category term='microsoft'/><category term='v0.2.0'/><category term='expresiones regulares'/><category term='gmail'/><title type='text'>Yuppy! ahora se puede disfrutar del desarrollo web...</title><subtitle type='html'>Blog sobre tecnología, innovación y desarrollo, con un eje central en el YUPP Framework (MVC) PHP.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>91</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8099845959303540282</id><published>2012-01-25T22:17:00.000-02:00</published><updated>2012-01-25T22:17:07.319-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aplicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Liberamos Yupp CMS v0.2</title><content type='html'>El proyecto va tomando forma con nuevas funcionalidades, mejoras y código más limpio. Todavía falta mucho camino por recorrer, pero vamos bien. Espero que en poco tiempo más gente se sume al proyecto y puedan aportar módulos y skins.&lt;br /&gt;&lt;br /&gt;El CMS puede ser descargado desde:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp-cms/downloads/list"&gt;http://code.google.com/p/yupp-cms/downloads/list&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://yupp-cms.googlecode.com/svn/tags/v0.2/"&gt;http://yupp-cms.googlecode.com/svn/tags/v0.2/&lt;/a&gt;&amp;nbsp;(usando un cliente SVN como &lt;a href="http://subclipse.tigris.org/" target="_blank"&gt;Subclipse&lt;/a&gt; o &lt;a href="http://tortoisesvn.tigris.org/" target="_blank"&gt;Tortoise&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Les recuerdo algunos posts anteriores sobre el CMS:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://yuppframework.blogspot.com/2011/09/yupp-cms-creando-modulos.html"&gt;http://yuppframework.blogspot.com/2011/09/yupp-cms-creando-modulos.html&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://yuppframework.blogspot.com/2011/09/yupp-cms-un-nuevo-comienzo.html"&gt;http://yuppframework.blogspot.com/2011/09/yupp-cms-un-nuevo-comienzo.html&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Algunos comentarios:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Funciona con la versión trunk de Yupp Framework: &lt;a href="http://yupp.googlecode.com/svn/trunk/YuppPHPFramework/"&gt;http://yupp.googlecode.com/svn/trunk/YuppPHPFramework/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Para instalar es solo:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;copiar el directorio en yupp/apps&lt;/li&gt;&lt;li&gt;crear la base de datos yupp_cms (corregir datos de conexión a la base si es necesario)&lt;/li&gt;&lt;li&gt;correr el bootstrap del cms (creará algunas páginas y módulos de ejemplo)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8099845959303540282?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8099845959303540282/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2012/01/liberamos-yupp-cms-v02.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8099845959303540282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8099845959303540282'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2012/01/liberamos-yupp-cms-v02.html' title='Liberamos Yupp CMS v0.2'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-670866539595321509</id><published>2012-01-25T18:26:00.000-02:00</published><updated>2012-01-25T18:26:48.360-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Solo para fanaticos de PHP</title><content type='html'>Muy bueno:&lt;br /&gt;&lt;br /&gt;&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/S8zhmiS-1kw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-670866539595321509?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/670866539595321509/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2012/01/solo-para-fanaticos-de-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/670866539595321509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/670866539595321509'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2012/01/solo-para-fanaticos-de-php.html' title='Solo para fanaticos de PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/S8zhmiS-1kw/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1429520311797133208</id><published>2011-10-05T11:41:00.000-02:00</published><updated>2011-10-05T11:41:59.578-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Acelerando la ejecucion de jquery</title><content type='html'>Ayer leí un artículo interesante, sobre cómo registrar eventos con jQuery en distintos elementos del DOM, y cómo con live() funciona más rápido que haciendo el registro luego de que termine de cargar el DOM.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/"&gt;http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1429520311797133208?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1429520311797133208/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/10/acelerando-la-ejecucion-de-jquery.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1429520311797133208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1429520311797133208'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/10/acelerando-la-ejecucion-de-jquery.html' title='Acelerando la ejecucion de jquery'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-906783469229244710</id><published>2011-09-23T12:52:00.000-03:00</published><updated>2011-09-23T12:52:25.244-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><title type='text'>Yupp CMS: creando modulos</title><content type='html'>En este artículo veremos como crear nuevos módulos para &lt;a href="http://code.google.com/p/yupp-cms/"&gt;Yupp CMS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Lo primero que tenemos es la estructura interna del CMS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; controllers&lt;/li&gt;&lt;ul&gt;&lt;li&gt;apps.cms2.controllers.CmsController.class.php &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;model&lt;/li&gt;&lt;ul&gt;&lt;li&gt;cms &lt;/li&gt;&lt;ul&gt;&lt;li&gt;cms2.model.cms.Layout.class.php&lt;/li&gt;&lt;li&gt;cms2.model.cms.Module.class.php&lt;/li&gt;&lt;li&gt;cms2.model.cms.Page.class.php&lt;/li&gt;&lt;li&gt;cms2.model.cms.PageZone.class.php&lt;/li&gt;&lt;li&gt;cms2.model.cms.Zone.class.php &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;views&lt;/li&gt;&lt;ul&gt;&lt;li&gt;cms&lt;/li&gt;&lt;ul&gt;&lt;li&gt;createModule.view.php&lt;/li&gt;&lt;li&gt;createPage.view.php&lt;/li&gt;&lt;li&gt;displayPage.view.php&lt;/li&gt;&lt;li&gt;displayPageRO.view.php&lt;/li&gt;&lt;li&gt;editModule.view.php&lt;/li&gt;&lt;li&gt;listModules.view.php&lt;/li&gt;&lt;li&gt;listPages.view.php&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;module&lt;/li&gt;&lt;ul&gt;&lt;li&gt;displayModule.template.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;El objetivo es crear un módulo para poder mostrar HTML y editarlo de forma visual en la web.&lt;br /&gt;&lt;br /&gt;Lo primero que hacemos es crear la clase en el modelo, y ubicarla en model/nombreDelModulo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;YuppLoader::load('cms2.model.cms', 'Module');&lt;br /&gt;&lt;br /&gt;class &lt;b&gt;HtmlModule &lt;/b&gt;extends Module&lt;br /&gt;{&lt;br /&gt;   function __construct($args = array (), $isSimpleInstance = false)&lt;br /&gt;   {&lt;br /&gt;      $this-&amp;gt;setWithTable("cms_html_module");&lt;br /&gt;        &lt;br /&gt;      $this-&amp;gt;addAttribute("content", Datatypes :: TEXT);&lt;br /&gt;&lt;br /&gt;      parent :: __construct($args, $isSimpleInstance);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static function listAll(ArrayObject $params)&lt;br /&gt;   {&lt;br /&gt;      self :: $thisClass = __CLASS__;&lt;br /&gt;      return PersistentObject :: listAll($params);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static function count()&lt;br /&gt;   {&lt;br /&gt;      self :: $thisClass = __CLASS__;&lt;br /&gt;      return PersistentObject :: count();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static function get($id)&lt;br /&gt;   {&lt;br /&gt;      self :: $thisClass = __CLASS__;&lt;br /&gt;      return PersistentObject :: get($id);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static function findBy(Condition $condition, ArrayObject $params)&lt;br /&gt;   {&lt;br /&gt;      self :: $thisClass = __CLASS__;&lt;br /&gt;      return PersistentObject :: findBy($condition, $params);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static function countBy(Condition $condition)&lt;br /&gt;   {&lt;br /&gt;      self :: $thisClass = __CLASS__;&lt;br /&gt;      return PersistentObject :: countBy($condition);&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;El módulo se llama HtmlModule, y siempre debe extender a Module. La estructura de directorios en model quedará así:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;model&lt;/li&gt;&lt;ul&gt;&lt;li&gt;cms &lt;/li&gt;&lt;ul&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;htmlModule&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;cms2.model.htmlModule.HtmlModule.class.php&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;Ahora necesitamos crear un controlador que implemente las acciones particulares sobe ese módulo, como editar el contenido. El controlador debe tener el mismo nombre que el módulo. Aquí está el código del controlador:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;YuppLoader::load('cms2.model.htmlModule', '&lt;b&gt;HtmlModule&lt;/b&gt;');&lt;br /&gt;&lt;br /&gt;class &lt;b&gt;HtmlModuleController &lt;/b&gt;extends YuppController {&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * Edita el contenido del modulo de HTML.&lt;br /&gt;    * &lt;br /&gt;    * in: id&lt;br /&gt;    * in: pageId&lt;br /&gt;    */&lt;br /&gt;   public function editAction()&lt;br /&gt;   {&lt;br /&gt;      $module = HtmlModule::get($this-&amp;gt;params['id']);&lt;br /&gt;      if (isset($this-&amp;gt;params['doit']))&lt;br /&gt;      {&lt;br /&gt;         $module-&amp;gt;setProperties($this-&amp;gt;params);&lt;br /&gt;         if (!$module-&amp;gt;save()) print_r($module-&amp;gt;getErrors());&lt;br /&gt;         &lt;br /&gt;         return $this-&amp;gt;renderString('Modulo salvado correctamente');&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      return array('module'=&amp;gt;$module);&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aquí está la estructura de directorios resultante de controladores:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; controllers&lt;/li&gt;&lt;ul&gt;&lt;li&gt;apps.cms2.controllers.CmsController.class.php&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&amp;nbsp;apps.cms2.controllers.HtmlModuleController.class.php&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;Por último, se implementan las vistas del módulo. Una vista será para la edición del contenido, y otra para la visualización del contenido del módulo. La estructura de directorios resultante es la siguiente:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;views&lt;/li&gt;&lt;ul&gt;&lt;li&gt;cms&lt;/li&gt;&lt;ul&gt;&lt;li&gt;....&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;module&lt;/li&gt;&lt;ul&gt;&lt;li&gt;displayModule.template.php&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;htmlModule&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;edit.view.php&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;displayModule.template.php&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;Como se puede ver, en realidad la vista de visualización del contenido del módulo es en realidad un template.&lt;br /&gt;&lt;br /&gt;displayModule.template.php:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php echo $module-&amp;gt;getContent(); ?&amp;gt;&lt;br /&gt;&amp;lt;?php if ($mode=='edit') : ?&amp;gt;&lt;br /&gt;  &amp;lt;div class="customModuleActions"&amp;gt;&lt;br /&gt;    &amp;lt;a href="'htmlModule', 'action'=&amp;gt;'edit', 'class'=&amp;gt;$module-&amp;gt;getClass(), 'id'=&amp;gt;$module-&amp;gt;getId())); ?&amp;gt;" alt="editar html" class="edit_html"&amp;gt;&lt;br /&gt;      &amp;lt;?php echo h('img', array('app'=&amp;gt;'cms2', 'src'=&amp;gt;'edit.gif')); ?&amp;gt;&lt;br /&gt;    &amp;lt;/a&amp;gt;  &lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este template muestra el contenido del módulo, y si estamos en modo "edit", muestra el botón para editar el contenido del módulo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;edit.view.php:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$m = Model::getInstance();&lt;br /&gt;&lt;br /&gt;$module = $m-&gt;get('module');&lt;br /&gt;&lt;br /&gt;YuppLoader::load('core.mvc', 'DisplayHelper');&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;  &amp;lt;head&gt;&lt;br /&gt;    &amp;lt;style&gt;&lt;br /&gt;      body {&lt;br /&gt;         padding: 5px;&lt;br /&gt;      }&lt;br /&gt;    &amp;lt;/style&gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;?php echo h('js', array('app'=&gt;'cms2', 'name'=&gt;'jquery/jquery-1.5.1.min')); ?&gt;&lt;br /&gt;    &amp;lt;?php echo h('js', array('app'=&gt;'cms2', 'name'=&gt;'jquery/jquery.form-2.84')); ?&gt;&lt;br /&gt;    &amp;lt;script type="text/javascript"&gt;&lt;br /&gt;      &lt;br /&gt;      // Funcion que va a llamar el editor cuando termine de cargar (ver config del TinyMCE)&lt;br /&gt;      var htmlinit = function() {&lt;br /&gt;         &lt;br /&gt;         parent.modalReady(document); // Notifica para que el parent actualice el tamanio del iframe&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      $(document).ready( function() {&lt;br /&gt;        &lt;br /&gt;        // Para que actualice el textarea con el contenido del TinyMCE, antes de mandarlo por ajax.&lt;br /&gt;        // Ref: http://maestric.com/doc/javascript/tinymce_jquery_ajax_form&lt;br /&gt;        $('#editForm').bind('form-pre-serialize', function(e) {&lt;br /&gt;            &lt;br /&gt;            tinyMCE.triggerSave();&lt;br /&gt;        });&lt;br /&gt;        &lt;br /&gt;        // Submitea el form por ajax&lt;br /&gt;        $('#editForm').ajaxForm({&lt;br /&gt;          &lt;br /&gt;          // Cuando el servidor responde ok, quiero actualizar&lt;br /&gt;          // automaticamente el HTML del modulo sin hacer F5.&lt;br /&gt;          success: function (res, status, response) {&lt;br /&gt;             &lt;br /&gt;            // Este es el modulo que cambia en el dom&lt;br /&gt;            var module = $('#&lt;?php echo $module-&gt;getClass().'__'.$module-&gt;getId(); ?&gt;', parent.document);&lt;br /&gt;             &lt;br /&gt;            // Tengo que pedir al servidor el HTML actualizado para este modulo&lt;br /&gt;            // Luego meto el actualizado en el dom, antes del que cambie&lt;br /&gt;            // Luego elimino el modulo viejo del dom para que quede solo el actualizado&lt;br /&gt;            &lt;br /&gt;            $.ajax({&lt;br /&gt;              url: '&lt;?php echo h('url', array('controller'=&gt;'cms', 'action'=&gt;'moduleContent', 'params'=&gt;array('class'=&gt;$module-&gt;getClass(), 'id'=&gt;$module-&gt;getId()))); ?&gt;',&lt;br /&gt;              success: function (newModuleContent, status) {&lt;br /&gt;                &lt;br /&gt;                // Actualiza solo el contenido!&lt;br /&gt;                module.children('.moduleContent').html(newModuleContent);&lt;br /&gt;&lt;br /&gt;                // Obtengo ventana modal&lt;br /&gt;                var modal = $('#modal', parent.document); // Selecciona ventana&lt;br /&gt;                &lt;br /&gt;                // Cierra ventana modal&lt;br /&gt;                modal.fadeOut('slow').css('display', 'none').children('iframe').attr('src', '');&lt;br /&gt;              }&lt;br /&gt;            });&lt;br /&gt;          }&lt;br /&gt;        });&lt;br /&gt;      });&lt;br /&gt;      &lt;br /&gt;    &amp;lt;/script&gt;&lt;br /&gt;  &amp;lt;/head&gt;&lt;br /&gt;  &amp;lt;body&gt;&lt;br /&gt;    &amp;lt;form id="editForm" method="post" action="&lt;?php echo h('url', array('action'=&gt;'edit')); ?&gt;"&gt;&lt;br /&gt;      &amp;lt;input type="hidden" name="id" value="&lt;?php echo $module-&gt;getId(); ?&gt;" /&gt;&lt;br /&gt;      &amp;lt;input type="hidden" name="pageId" value="&lt;?php echo $m-&gt;get('pageId'); ?&gt;" /&gt;&lt;br /&gt;      &amp;lt;?php DisplayHelper::html( 'content', $module-&gt;getContent() ); ?&gt;&lt;br /&gt;      &amp;lt;input type="submit" name="doit" value="Guardar" /&gt;&lt;br /&gt;    &amp;lt;/form&gt;&lt;br /&gt;  &amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Eso es todo. Cualquiera puede desarrollar sus propios módulos, por ejemplo un cliente de twitter, un visualizador de videos de youtube, un blog, un albúm de fotos, etc, el límite es la imaginación!&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-906783469229244710?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/906783469229244710/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/09/yupp-cms-creando-modulos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/906783469229244710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/906783469229244710'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/09/yupp-cms-creando-modulos.html' title='Yupp CMS: creando modulos'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3233825587539135376</id><published>2011-09-02T13:24:00.001-03:00</published><updated>2011-09-02T13:27:38.410-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aplicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='caracteristicas'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><title type='text'>Yupp CMS: un nuevo comienzo</title><content type='html'>Hace ya varios años que vengo desarrollando en PHP, y desde el principio comencé a experimentar distintas técnicas para el desarrollo de sitios web dinámicos. La culminación de esa investigación dio lugar a mi primer &lt;a href="http://www.simplewebportal.net/host/1019.htm"&gt;proyecto de CMS&lt;/a&gt;. Luego de seguir avanzando en mi formación universitaria, y conociendo diversas tecnologías, me di cuenta que aquel primer CMS no era suficiente, y tratando de hacerlo más genérico y extensible fue que comencé el proyecto Yupp Framework (si, todo esto comenzó como una librería que sería el core de un CMS).&lt;br /&gt;&lt;br /&gt;Ahora Yupp tiene vida propia y superó mis expectativas como proyecto, convirtiéndose en una herramienta muy potente para el desarrollo PHP en general. Ahora estoy volviendo a las raíces, y con todo lo aprendido de los distintos intentos de CMS, y de la experiencia acumulada durante años, me lancé a lograr algo mejor, más genérico, más extensible, más fácil de usar, más dinámico, o sea la herramienta perfecta. Claro está, que la herramienta perfecta para unos puede no serlo para otros, desde mi humilde lugar lo que quiero es bajar a tierra todas esas "grandes ideas" y ponerlas en una herramienta que me facilite en el trabajo diario.&lt;br /&gt;&lt;br /&gt;Aquí están algunas capturas de pantalla del prototipo que tengo hasta ahora. Es una aplicación para &lt;a href="http://code.google.com/p/yupp/"&gt;Yupp Framework v0.4&lt;/a&gt;, donde desarrollé varias funcionalidades básicas, y aunque faltan otras tantas, se puede usar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Todos los que quieran colaborar con el proyecto, por favor contesten &lt;a href="http://groups.google.com/group/yuppframeworkphp/browse_thread/thread/3451a1457f86fcda"&gt;este hilo de discusión&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Esta primer captura de pantalla muestra una página del portal en modo "edición", donde hay zonas que se ven de colores (rojo, violeta, azul, etc), y cada zona puede contener varios módulos (las cajitas celestes).&lt;br /&gt;Los módulos pueden ser de 3 tipos: html, menú y google maps. Estos son solo algunos que desarrollé para probar el concepto, la idea es que sea algo con extensibilidad ilimitada y cualquiera pueda crear sus propios módulos fácilmente, extendiendo así la funcionalidad del CMS.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mVJM62Ik-1s/TmD6vkPrNPI/AAAAAAAAE3Q/-qJmpL29HSc/s1600/edit+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-mVJM62Ik-1s/TmD6vkPrNPI/AAAAAAAAE3Q/-qJmpL29HSc/s640/edit+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Los módulos pueden arrastrarse y soltarse en distintas zonas, lo que ayuda a que rápidamente un editor pueda ubicar los módulos en las zonas correctas. En la siguiente imagen se ve como el módulo html que contenía el banner en la zona superior, es movido a la zona intermedia.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-RpJEZqSL-T0/TmD7Biiv3BI/AAAAAAAAE3U/mUgDtk8G4fQ/s1600/edit+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-RpJEZqSL-T0/TmD7Biiv3BI/AAAAAAAAE3U/mUgDtk8G4fQ/s640/edit+2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Esta tercer captura de pantalla muestra la edición del contenido de un módulo de html.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-40JMLfwPOQc/TmEBwfs-qBI/AAAAAAAAE30/-b63xhIjliw/s1600/edit+3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-40JMLfwPOQc/TmEBwfs-qBI/AAAAAAAAE30/-b63xhIjliw/s640/edit+3.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y esta cuarta captura muestra el resultado luego de la edición del contenido del módulo de html.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UZc3iodz7vY/TmECFnJLeqI/AAAAAAAAE34/8ms8lUKjCRY/s1600/edit+4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-UZc3iodz7vY/TmECFnJLeqI/AAAAAAAAE34/8ms8lUKjCRY/s640/edit+4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Otra funcionalidad que provee este prototipo, es el cambio de layout con un clic. Un layout define la estructura general de las páginas, con las zonas donde se pueden ubicar distintos módulos. Un programador puede generar nuevos layouts, e instalarlo en el CMS. Incluso los diseñadores gráficos no programadores, podrían generar layouts. La siguiente imagen muestra el cambio de layout con respecto a las imágenes anteriores:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ml9ngGAyCw4/TmD8lREpu_I/AAAAAAAAE3Y/BmBBTMcPxos/s1600/cambio+layout+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Ml9ngGAyCw4/TmD8lREpu_I/AAAAAAAAE3Y/BmBBTMcPxos/s640/cambio+layout+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Esta imagen muestra otro cambio de layout:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-WnNurBTeE5c/TmD9O8oOw-I/AAAAAAAAE3c/oyIKkWXFRuY/s1600/cambio+layout+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-WnNurBTeE5c/TmD9O8oOw-I/AAAAAAAAE3c/oyIKkWXFRuY/s640/cambio+layout+2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Un editor podría crear nuevos módulos y agregarlos en distintas zonas con un par de clics.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uaToRJksQBg/TmD-34eINeI/AAAAAAAAE3g/b01du-ufgWo/s1600/nuevo+modulo+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-uaToRJksQBg/TmD-34eINeI/AAAAAAAAE3g/b01du-ufgWo/s640/nuevo+modulo+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;La siguiente imagen muestra el módulo luego de creado:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HLqQ3X1SbKM/TmEAALnaWzI/AAAAAAAAE3k/yl1FPQ5Gx_E/s1600/nuevo+modulo+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-HLqQ3X1SbKM/TmEAALnaWzI/AAAAAAAAE3k/yl1FPQ5Gx_E/s640/nuevo+modulo+2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;El editor podría también crear subpáginas para la página actual:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-sSclbM3OFOA/TmEApTOsEZI/AAAAAAAAE3o/MJedMDj1a_g/s1600/create+subpage+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-sSclbM3OFOA/TmEApTOsEZI/AAAAAAAAE3o/MJedMDj1a_g/s640/create+subpage+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Las subpáginas de la página actual aparecen en el menú en la parte inferior:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-cr0aNtMjAF4/TmEBA_raA0I/AAAAAAAAE3s/0_icg9zv50c/s1600/create+subpage+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-cr0aNtMjAF4/TmEBA_raA0I/AAAAAAAAE3s/0_icg9zv50c/s640/create+subpage+2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Por último, si salimos del modo "edición", podemos ver la página en modo "visualización":&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-t_rrPxvCpFw/TmEBdoeueyI/AAAAAAAAE3w/k-k-0Pe36SA/s1600/show+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-t_rrPxvCpFw/TmEBdoeueyI/AAAAAAAAE3w/k-k-0Pe36SA/s640/show+1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3233825587539135376?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3233825587539135376/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/09/yupp-cms-un-nuevo-comienzo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3233825587539135376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3233825587539135376'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/09/yupp-cms-un-nuevo-comienzo.html' title='Yupp CMS: un nuevo comienzo'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-mVJM62Ik-1s/TmD6vkPrNPI/AAAAAAAAE3Q/-qJmpL29HSc/s72-c/edit+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7650134031534237134</id><published>2011-08-22T22:32:00.002-03:00</published><updated>2011-08-23T14:15:48.163-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aplicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='youtube'/><title type='text'>Aplicacion para gestion de contenido con tags</title><content type='html'>Este fin de semana desarrollé un prototipo de un sistema de gestión de contenido, concentrándome en las funcionalidades de agregar y quitar tags del contenido.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yupp-apps.googlecode.com/files/resman.rar"&gt;Aquí les dejo la aplicación para descargar y probar.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El objetivo fue evaluar que tan costoso era implementarlo en Yupp framework, y el resultado fue el siguiente:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Aplicación: Yupp/Ajax/jQuery/MySQL&lt;/li&gt;&lt;li&gt;Dedicación: 4 horas&lt;/li&gt;&lt;li&gt;Funcionalidades principales: crear tags, agregar tags a varios videos (contenido), quitar una tag de un video&lt;/li&gt;&lt;li&gt;Funcionalidades de soporte: obtener todas las tags existentes, obtener las tags para cada video&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Lo que logré fue algo así: &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-afwoP_JtDZc/TlL6T-qrg1I/AAAAAAAAE28/HBnr_JWA6gg/s1600/localhost+-+2011-08-22+-+21h-01m-30s.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-afwoP_JtDZc/TlL6T-qrg1I/AAAAAAAAE28/HBnr_JWA6gg/s640/localhost+-+2011-08-22+-+21h-01m-30s.png" width="536" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A continuación les cuento un poco cómo lo hice:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Estructura de la aplicación:&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bootstrap&lt;/li&gt;&lt;ul&gt;&lt;li&gt;apps.resman.bootstrap.Bootstrap.script.php &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;controllers&lt;/li&gt;&lt;ul&gt;&lt;li&gt;apps.resman.controllers.TagsController.class.php &lt;/li&gt;&lt;li&gt;apps.resman.controllers.VideoController.class.php&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;javascript&lt;/li&gt;&lt;ul&gt;&lt;li&gt;jquery-1.6.2.min.js&lt;/li&gt;&lt;li&gt; jquery.form-2.84.js&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;model&lt;/li&gt;&lt;ul&gt;&lt;li&gt;resman.model.Tag.class.php&lt;/li&gt;&lt;li&gt; resources&lt;/li&gt;&lt;ul&gt;&lt;li&gt;resman.model.resources.Video.class.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;views&lt;/li&gt;&lt;ul&gt;&lt;li&gt;video&lt;/li&gt;&lt;ul&gt;&lt;li&gt; list.view.php&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;app.xml&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Como pueden ver, es una aplicación pequeña, con un par de controllers, un par de clases de modelo persistente, una vista y un par de archivos javascript, uno es el famoso framework javascript &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; y el otro el &lt;a href="http://jquery.malsup.com/form/"&gt;plugin&lt;/a&gt; para gestionar formularios y poder hacer envíos por ajax, en lugar del clásico submit que nos hace tener que recargar toda la página, y hacerlo por ajax mejora enormemente la experiencia del usuario.&lt;br /&gt;&lt;br /&gt;En el archivo de bootstrap se crean algunos videos y la etiqueta que guarda todas las etiquetas del sistema (luego explico como es esto). Como esto es una prueba y no es un gestor de contenidos completo se deben crear los videos en el bootstrap. Si fuera un gestor de contenidos completo, tendría funcionalidades para poder crear, modificar y eliminar videos y otros tipos de contenidos como archivos, links, etc.&lt;br /&gt;&lt;br /&gt;En el bootstrap tenemos:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;// Incluye clases del modelo persistente&lt;br /&gt;YuppLoader::load('resman.model', 'Tag');&lt;br /&gt;YuppLoader::load('resman.model.resources', 'Video');&lt;br /&gt;&lt;br /&gt;// Crea videos de prueba&lt;br /&gt;$videos = array();&lt;br /&gt;&lt;br /&gt;$videos[] = new Video(array(&lt;br /&gt;  'name'=&amp;gt;'La Coka Nostra - That\'s coke',&lt;br /&gt;  'comment'=&amp;gt;'excelente!',&lt;br /&gt;  'embedCode'=&amp;gt;'&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/HaVf_yrq6Q0" width="560"&amp;gt;&amp;lt;/iframe&amp;gt;',&lt;br /&gt;  'link'=&amp;gt;'http://youtu.be/HaVf_yrq6Q0'&lt;br /&gt;));&lt;br /&gt;$videos[] = new Video(array(&lt;br /&gt;  'name'=&amp;gt;'Snoop Dog - Vato',&lt;br /&gt;  'comment'=&amp;gt;'hardcore',&lt;br /&gt;  'embedCode'=&amp;gt;'&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/D_9Dfh2Hf-A" width="560"&amp;gt;&amp;lt;/iframe&amp;gt;',&lt;br /&gt;  'link'=&amp;gt;'http://youtu.be/D_9Dfh2Hf-A'&lt;br /&gt;));&lt;br /&gt;$videos[] = new Video(array(&lt;br /&gt;  'name'=&amp;gt;'Snoop Dog - Drop it like it\'s hot',&lt;br /&gt;  'comment'=&amp;gt;'chambalala',&lt;br /&gt;  'embedCode'=&amp;gt;'&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/LfgMC6F0FVo" width="420"&amp;gt;&amp;lt;/iframe&amp;gt;',&lt;br /&gt;  'link'=&amp;gt;'http://youtu.be/LfgMC6F0FVo'&lt;br /&gt;));&lt;br /&gt;&lt;br /&gt;// Guarda en la base los videos de prueba&lt;br /&gt;foreach ($videos as $video)&lt;br /&gt;{&lt;br /&gt;   $video-&amp;gt;save();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Crea la instancia global con todas las tags&lt;br /&gt;$globalTags = new Tag(array('tags'=&amp;gt;''));&lt;br /&gt;$globalTags-&amp;gt;save();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Antes comentaba que se crea una instancia de Tag que va a guardar todas las tags que se crean en el sistema, la idea es que desde esas tags se seleccionen las tags que se le van a poner a los videos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Las tablas que generan las clases del modelo persistente son las siguientes:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tabla de videos con los 3 videos creados en el bootstrap:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="data" id="table_results"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;id &lt;/th&gt;&lt;th&gt;name &lt;/th&gt;&lt;th&gt;comment &lt;/th&gt;&lt;th&gt;embedCode &lt;/th&gt;&lt;th&gt;link &lt;/th&gt;&lt;th&gt;class &lt;/th&gt;&lt;th&gt;deleted &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;         &lt;tbody&gt;&lt;tr class="odd"&gt; &lt;td align="right" class=" nowrap"&gt;1&lt;/td&gt;     &lt;td class=""&gt;La Coka Nostra - That's coke&lt;/td&gt;     &lt;td class=""&gt;excelente!&lt;/td&gt;     &lt;td class=""&gt;&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/HaVf_yrq6Q0" width="560"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/td&gt;     &lt;td class=""&gt;http://youtu.be/HaVf_yrq6Q0&lt;/td&gt;     &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt; &lt;/tr&gt;&lt;tr class="even"&gt; &lt;td align="right" class=" nowrap"&gt;2&lt;/td&gt;     &lt;td class=""&gt;Snoop Dog - Vato&lt;/td&gt;     &lt;td class=""&gt;hardcore&lt;/td&gt;     &lt;td class=""&gt;&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/D_9Dfh2Hf-A" width="560"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/td&gt;     &lt;td class=""&gt;http://youtu.be/D_9Dfh2Hf-A&lt;/td&gt;     &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt; &lt;/tr&gt;&lt;tr class="odd"&gt; &lt;td align="right" class=" nowrap"&gt;3&lt;/td&gt;     &lt;td class=""&gt;Snoop Dog - Drop it like it's hot&lt;/td&gt;     &lt;td class=""&gt;chambalala&lt;/td&gt;     &lt;td class=""&gt;&amp;lt;iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/LfgMC6F0FVo" width="420"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/td&gt;     &lt;td class=""&gt;http://youtu.be/LfgMC6F0FVo&lt;/td&gt;     &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Tabla de tags con la tag que tiene todas las tags creadas en el sistema (la que tiene objClass y objId en NULL), y las tags creadas para cada uno de los videos. Todas las tags de cada video se guardan codificadas en la columna "tags", separadas por coma. Estas son las tags que aparecen en la captura de pantalla que puse más arriba.&lt;br /&gt;&lt;br /&gt;&lt;table class="data" id="table_results"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;id &lt;/th&gt;&lt;th&gt;objClass &lt;/th&gt;&lt;th&gt;objId &lt;/th&gt;&lt;th&gt;tags &lt;/th&gt;&lt;th&gt;class &lt;/th&gt;&lt;th&gt;deleted &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;         &lt;tbody&gt;&lt;tr class="odd"&gt; &lt;td align="right" class=" nowrap"&gt;1&lt;/td&gt;     &lt;td class=""&gt;&lt;i&gt;NULL&lt;/i&gt;&lt;/td&gt;     &lt;td align="right" class=""&gt;&lt;i&gt;NULL&lt;/i&gt;&lt;/td&gt;     &lt;td class=""&gt;papa,pepe,popo,pupu,caradura,sampatrucha&lt;/td&gt;     &lt;td class=""&gt;Tag&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt; &lt;/tr&gt;&lt;tr class="even"&gt; &lt;td align="right" class=" nowrap"&gt;2&lt;/td&gt; &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;1&lt;/td&gt;     &lt;td class=""&gt;popo,sampatrucha,pepe&lt;/td&gt;     &lt;td class=""&gt;Tag&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt; &lt;/tr&gt;&lt;tr class="odd"&gt; &lt;td align="right" class=" nowrap"&gt;3&lt;/td&gt; &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;2&lt;/td&gt;     &lt;td class=""&gt;sampatrucha,caradura,pepe&lt;/td&gt;     &lt;td class=""&gt;Tag&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt; &lt;/tr&gt;&lt;tr class="even"&gt; &lt;td align="right" class=" nowrap"&gt;4&lt;/td&gt; &lt;td class=""&gt;Video&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;3&lt;/td&gt;     &lt;td class=""&gt;popo,sampatrucha,caradura&lt;/td&gt;     &lt;td class=""&gt;Tag&lt;/td&gt; &lt;td align="right" class=" nowrap"&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Podría repasar toda las funcionalidades, pero &lt;a href="http://yupp-apps.googlecode.com/files/resman.rar"&gt;aquí les dejo la aplicación para descargar&lt;/a&gt;, donde pueden ver el código y probar de instalarla en &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;Yupp Framework 0.4&lt;/a&gt;, además el código está lleno de comentarios.&lt;br /&gt;&lt;br /&gt;La idea central era mostrar que con aproximadamente 300 líneas de código, entre PHP y Javascript, y en 4 horas, se pueden lograr funcionalidades muy interesantes, que agilizan la experiencia del usuario, y que tienen gran usabilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7650134031534237134?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7650134031534237134/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/08/aplicacion-para-gestion-de-contenido.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7650134031534237134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7650134031534237134'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/08/aplicacion-para-gestion-de-contenido.html' title='Aplicacion para gestion de contenido con tags'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-afwoP_JtDZc/TlL6T-qrg1I/AAAAAAAAE28/HBnr_JWA6gg/s72-c/localhost+-+2011-08-22+-+21h-01m-30s.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2705157057380458806</id><published>2011-06-20T21:41:00.000-03:00</published><updated>2011-06-20T21:41:23.397-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><title type='text'>Google code search una herramienta excelente</title><content type='html'>&lt;a href="http://www.google.com/codesearch#/"&gt;Google code search&lt;/a&gt; es una herramienta de Google para buscar código fuente dentro de los proyectos alojados en &lt;a href="http://code.google.com/"&gt;Google code&lt;/a&gt;. Por ejemplo, Yupp Framework es un proyecto de código abierto alojado en Google code.&lt;br /&gt;&lt;br /&gt;Ingresando al buscador de código, podemos ingresar el siguiente texto: "helper ajax_link package:http://yupp\.googlecode\.com". Al buscar, vamos a obtener una lista de resultados. Haciendo clic en alguno de los resultados de esa lista, podemos acceder al código fuente:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-uurAl5I4OQ4/Tf_nWzu6BoI/AAAAAAAAE0g/a0IONflPIE4/s1600/helper+ajax+link.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="377" src="http://4.bp.blogspot.com/-uurAl5I4OQ4/Tf_nWzu6BoI/AAAAAAAAE0g/a0IONflPIE4/s640/helper+ajax+link.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luego podemos recorrer el código fuente de uno o más archivos donde se dieron resultados para nuestra búsqueda, o también podemos realizar otras búsquedas.&lt;br /&gt;&lt;br /&gt;Esta es una excelente herramienta para encontrar en pocos segundos el código fuente exacto que estamos buscando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2705157057380458806?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2705157057380458806/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/06/google-code-search-una-herramienta.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2705157057380458806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2705157057380458806'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/06/google-code-search-una-herramienta.html' title='Google code search una herramienta excelente'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-uurAl5I4OQ4/Tf_nWzu6BoI/AAAAAAAAE0g/a0IONflPIE4/s72-c/helper+ajax+link.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3434434181337398000</id><published>2011-06-17T22:26:00.001-03:00</published><updated>2011-06-17T22:28:20.360-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Ideas para mejorar el framework</title><content type='html'>&amp;nbsp; &amp;nbsp; &lt;br /&gt;En esta página de la wiki, dejé algunas ideas para mejorar el framework, su usabilidad y funcionalidad: &lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://code.google.com/p/yupp/wiki/IdeasDeMejoras" rel="nofollow" target="_blank"&gt;http://code.google.com/p/yupp/wiki/IdeasDeMejoras&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Me gustaría hacer una evaluación de las cosas que más les gustaría que el framework incluya, a modo de "lluvia de ideas", para luego poder elegir las más interesantes y poder implementarlas como parte del framework. &lt;br /&gt;&lt;br /&gt;Lo que más valor puede agregar en este momento al framework, creo que es la "arquitectura de plugins" (descrita en el link previo). La idea es poder extender el framework indefinidamente, pero de forma controlada y gestionable, mediante "plugins" o "agregados". Por ejemplo, en el &lt;a href="http://yuppframework.blogspot.com/2011/05/yupp-connect.html"&gt;Yupp Connect&lt;/a&gt; que hicimos hace pocos días, hablamos de poder contar con un "módulo" de gestión de usuarios y permisos, que cualquier aplicación pudiera usar. Este es un claro ejemplo de lo que llamo "plugin": algo que no es parte del core o núcleo del framework, pero que tampoco es una aplicación, sino que es algo que está en el medio y que las aplicaciones pueden usar. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Cómo seguimos? &lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Lee las "ideas de mejoras" que hay publicadas en la wiki, comenta al respecto en la misma wiki o respondiendo a este hilo. Los comentarios se convertirán en mejoras a las ideas propuestas.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Proponé nuevas ideas para extender y mejorar el framework respondiendo a este hilo de discusión. Todas las ideas serán tomadas en cuenta y debatidas para lograr especificarlas lo más posible, luego haremos una votación en la comunidad para detectar las ideas más útiles o novedosas. Estas serán en las que nos concentraremos para su desarrollo. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Si tienes algún desarrollo ya hecho, que pueda servir para integrar con el framework, también puedes proponerlo, y entre todos los podemos evaluar. Lo que se debe considerar en este caso, es que el dueño del código debe dar soporte al mismo y documentación, además deberá ayudar en la integración con el framework. Esto es para mantener el nivel del framework y no integrar código que no tiene documentación y al que nadie puede dar soporte. &lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;¡Espero sus comentarios e ideas!&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3434434181337398000?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3434434181337398000/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/06/ideas-para-mejorar-el-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3434434181337398000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3434434181337398000'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/06/ideas-para-mejorar-el-framework.html' title='Ideas para mejorar el framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8574229245408182931</id><published>2011-06-10T22:30:00.001-03:00</published><updated>2011-06-10T22:44:12.645-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.4'/><title type='text'>Nuevo Yupp PHP Framework v0.4</title><content type='html'>Estamos muy contentos de anunciar la liberación de la nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;&lt;img border="0" height="379" src="http://4.bp.blogspot.com/-lkkBgio8XaY/TfLDufC9YWI/AAAAAAAAE0c/s884feoaBxk/s640/YuppFrameworkv04Genesis3.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;En esta versión se incluyen varias mejoras y correcciones que hacen al  framework más simple de usar y más completo en cuanto a su funcionalidad  de base. Además hemos actualizado la documentación de referencia para  facilitar la tarea de quienes están comenzando a usar el framework.&lt;br /&gt;&lt;br /&gt;Como siempre, el framework podrá ser descargado desde nuestro sitio en Google Code:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/"&gt;http://code.google.com/p/yupp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aquí podrás encontrar los detalles de los cambios y mejoras hechos en esta nueva versión:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.4:_codename_Genesis_3_%28liberado%29"&gt;http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.4:_codename_Genesis_3_%28liberado%29&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Las notas de la versión con detalles de las pruebas realizadas, de la  instalación del framework y mucha información útil para comenzar a usar  el framework, las puedes encontrar aquí: &lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv04"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv04&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La documentación actualizada la puedes encontrar aquí:&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pronto estaremos actualizando las aplicaciones en nuestro sitio de Yupp  Apps para aprovechar al máximo las novedades de esta versión del  framework:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp-apps/"&gt;http://code.google.com/p/yupp-apps/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como siempre, todas las consultas y comentarios serán recibidas en nuestro sitio de Google Groups:&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8574229245408182931?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8574229245408182931/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/06/nuevo-yupp-php-framework-v04.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8574229245408182931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8574229245408182931'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/06/nuevo-yupp-php-framework-v04.html' title='Nuevo Yupp PHP Framework v0.4'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-lkkBgio8XaY/TfLDufC9YWI/AAAAAAAAE0c/s884feoaBxk/s72-c/YuppFrameworkv04Genesis3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8630442315544690524</id><published>2011-05-31T01:33:00.002-03:00</published><updated>2011-06-08T12:34:28.672-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comunicacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='difusion'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Yupp Connect</title><content type='html'>¿Cuál es la idea?&lt;br /&gt;&lt;br /&gt;Tomar un par de horas para hablar del framework, de cómo usarlo, de cómo se podría adaptar para encarar sus proyectos, resolver dudas de programación o simplemente charlar de conceptos generales en tecnología, mejores prácticas, gestión de proyectos, patrones de diseño, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;¿Cómo y cuando?&lt;br /&gt;&lt;br /&gt;Nos conectamos por Skype (mi usuario es simplewebportal.net).&lt;br /&gt;&lt;br /&gt;La primera charla la hacemos el miércoles 8 de Junio, a las 15 horas de Montevideo (puedes ver tu horario local aquí: &lt;a href="http://timeanddate.com/worldclock/"&gt;http://timeanddate.com/worldclock/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Un par de días antes, voy a crear un hilo de discusión donde quienes estén interesados en conectarse, pueden proponer temas. Igualmente, para romper el hielo, voy a proponer un par.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;¿Qué se espera de ti?&lt;br /&gt;&lt;br /&gt;Primero que nada, ponerle buena onda. Luego, el objetivo es charlar de cosas interesantes para ti, de tus proyectos, de tus dudas sobre el framework y su funciomiento, de problemas que tratas de resolver o que te gustaría resolver en el futuro usando el framework, del futuro del framework como proyecto, entre otros.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/browse_thread/thread/25e6373896081cea"&gt;Más info&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Temas:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe src="https://docs.google.com/present/embed?id=dft3rg78_65g35tvbfx&amp;interval=5&amp;size=m" frameborder="0" width="555" height="451"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Hasta el miércoles!,&lt;br /&gt;Pablo.&lt;br /&gt;&lt;br /&gt;PD: esto se haría aparte, no sustituyendo, a las charlas por LiveStream (&lt;a href="http://www.livestream.com/yuppphpframework"&gt;http://www.livestream.com/yuppphpframework&lt;/a&gt;) sobre el framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8630442315544690524?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8630442315544690524/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/05/yupp-connect.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8630442315544690524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8630442315544690524'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/05/yupp-connect.html' title='Yupp Connect'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1020920739972491496</id><published>2011-05-23T21:57:00.001-03:00</published><updated>2011-05-23T21:58:18.999-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='youtube'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><category scheme='http://www.blogger.com/atom/ns#' term='google apis'/><category scheme='http://www.blogger.com/atom/ns#' term='apis'/><title type='text'>Google Code Playground</title><content type='html'>&lt;br/&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/ajax/playground/"&gt;Google Code Playground&lt;/a&gt; es un sitio de pruebas en vivo, por donde todo programador que quiera utilizar APIs de Google debería pasar.&lt;br /&gt;&lt;br /&gt;Este sitio presenta ejemplos de casi todas las APIs de Google, incluyendo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#translate"&gt;Traductor&lt;/a&gt;: &lt;a href="http://savedbythegoog.appspot.com/?id=017321e6980924a1feb5d65ba47cebdeb629955f"&gt;ejemplo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#list_posts"&gt;Blogger&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#the_hello_world_of_blog_search"&gt;Búsquedas de blogs&lt;/a&gt;: &lt;a href="http://savedbythegoog.appspot.com/?id=eceb462d006f55bca1a5d9c88258001064b1515f"&gt;ejemplo &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#retrieve_events"&gt;Calendario&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#hello,_earth"&gt;Google earth&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#size_restriction"&gt;Búsqueda de imágenes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#map_simple"&gt;Google maps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#the_hello_world_of_general_search"&gt;Búsqueda general&lt;/a&gt;: &lt;a href="http://savedbythegoog.appspot.com/?id=3e54cf015eaff0c1aa7a7dbfe53437f58002271c"&gt;ejemplo &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#set_language_restriction"&gt;Búsquedas web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#youtube_channels"&gt;Búsquedas de videos&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/ajax/playground/#simple_embed"&gt;YouTube&lt;/a&gt;&lt;/li&gt;&lt;li&gt;y más....&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ya sea que vamos a jugar un poco, o que vamos a utilizar las APIs de Google para nuestros proyectos, este es un sitio para tener siempre en las bookmarks...&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1020920739972491496?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1020920739972491496/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/05/google-code-playground.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1020920739972491496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1020920739972491496'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/05/google-code-playground.html' title='Google Code Playground'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4473085023605437446</id><published>2011-05-21T13:25:00.000-03:00</published><updated>2011-05-21T13:25:51.384-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videos'/><category scheme='http://www.blogger.com/atom/ns#' term='capacitacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Videos del tutorial virtual</title><content type='html'>Estimados, aquí dejo las dos partes del tutorial para quienes no pudieron estar en el momento de la emisión. Las consultas que tengan las pueden realizar en &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;nuestro grupo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="340" scrolling="no" src="http://cdn.livestream.com/embed/yuppphpframework?layout=4&amp;amp;clip=pla_fd5bafd9-251a-4cdf-9153-071fdfa665c5&amp;amp;autoplay=false" style="border: 0pt none; outline: 0pt none;" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div style="font-size: 11px; padding-top: 10px; text-align: center; width: 560px;"&gt;Watch &lt;a href="http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks" title="live streaming video"&gt;live streaming video&lt;/a&gt; from &lt;a href="http://www.livestream.com/yuppphpframework?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks" title="Watch yuppphpframework at livestream.com"&gt;yuppphpframework&lt;/a&gt; at livestream.com&lt;/div&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="340" scrolling="no" src="http://cdn.livestream.com/embed/yuppphpframework?layout=4&amp;amp;clip=pla_fd8851a0-f8b3-4dd4-9b3f-8db7e21f1ab3&amp;amp;autoplay=false" style="border: 0pt none; outline: 0pt none;" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div style="font-size: 11px; padding-top: 10px; text-align: center; width: 560px;"&gt;Watch &lt;a href="http://www.livestream.com/?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks" title="live streaming video"&gt;live streaming video&lt;/a&gt; from &lt;a href="http://www.livestream.com/yuppphpframework?utm_source=lsplayer&amp;amp;utm_medium=embed&amp;amp;utm_campaign=footerlinks" title="Watch yuppphpframework at livestream.com"&gt;yuppphpframework&lt;/a&gt; at livestream.com&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4473085023605437446?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4473085023605437446/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/05/videos-del-tutorial-virtual.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4473085023605437446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4473085023605437446'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/05/videos-del-tutorial-virtual.html' title='Videos del tutorial virtual'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5459075806345089668</id><published>2011-05-19T08:27:00.005-03:00</published><updated>2011-05-19T08:30:10.934-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='capacitacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Link para el tutorial virtual de hoy</title><content type='html'>El tutorial virtual de Yupp PHP Framework de hoy, a las 18:30 (GMT -03:00) lo hacemos por LiveStream &lt;a href="http://www.livestream.com/yuppphpframework"&gt;http://www.livestream.com/yuppphpframework&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De haber problemas, lo haremos por skype con solo sonido. Mi usuario de skype es simplewebportal.net&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;Pablo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5459075806345089668?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5459075806345089668/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/05/link-para-el-tutorial-virtual-de-hoy.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5459075806345089668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5459075806345089668'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/05/link-para-el-tutorial-virtual-de-hoy.html' title='Link para el tutorial virtual de hoy'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-9112663357735843660</id><published>2011-05-13T19:07:00.002-03:00</published><updated>2011-05-14T13:34:05.763-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='capacitacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Día y hora del tutorial virtual de Yupp</title><content type='html'>Estimados,&lt;br /&gt;&lt;br /&gt;El tutorial virtual del framework se llevará a cabo el día jueves 19 de mayo a las 1830 (hora de Montevideo, GMT -03:00). Por favor verifiquen su uso horario para saber a qué hora local corresponde. Por ejemplo, Buenos Aires está en el mismo uso horario que Montevideo. Caracas está en GMT -04:30, o sea que la hora local de inicio en Caracas será a las 1700. Para ver la diferencia horaria en distintas ciudades, les dejo este sitio: &lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://timeanddate.com/worldclock/" rel="nofollow" target="_blank"&gt;http://timeanddate.com/worldclock/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;La idea es que lo hagamos en una hora y media, dos horas máximo con preguntas y comentarios. Por favor agenden ese día, y no se preocupen si no pueden a esa hora, que ya haremos otros eventos de este tipo.&lt;br /&gt;&lt;br /&gt;Yo estaré conectado un rato antes para realizar pruebas. Quienes puedan estar antes, les agradezco, así podemos verificar que la comunicación es correcta.&lt;br /&gt;&lt;br /&gt;El evento lo haremos por UStream (&lt;a href="http://www.ustream.tv/channel/yupp-php-framework"&gt;http://www.ustream.tv/channel/yupp-php-framework&lt;/a&gt;), y en caso de haber problemas, tenemos la alternativa de LiveStream (&lt;a href="http://www.livestream.com/yuppphpframework"&gt;http://www.livestream.com/yuppphpframework&lt;/a&gt;). El plan C, si nada funciona correctamente, sería mediante skype. Mi usuario en skype es: simplewebportal.net&lt;br /&gt;&lt;br /&gt;Todos los que se anotaron al tutorial, recibirán este mismo correo, y además el link para descargar todo el material necesario para el tutorial. Este material será publicado luego del tutorial para todos quienes quieran tenerlo y no hayan podido estar. Este incluye: documentación, presentación guía, última versión del framework, y aplicaciones de ejemplo con las que estaremos jugando un poco.&lt;br /&gt;&lt;br /&gt;La idea de este primer tutorial virtual es que sea muy llevado de la mano, para que todos los que recién empiezan con el framework puedan&amp;nbsp; sus primeros pasos sobre firme, entender algunos conceptos clave, y&lt;br /&gt;llegar a crear aplicaciones sencillas. Luego haremos otros eventos virtuales, donde tocaremos temas concretos y más complejos, y dará más para la discusión. La idea que esta segunda parte la podamos hacer en un par de semanas luego de este evento. Luego daré una lista de temas que les pueden interesar, así tocamos primero los temas que más les interesen.&lt;br /&gt;&lt;br /&gt;No está de más decir que estos eventos son gratuitos y totalmente libres para todos quienes quieran acercarse al proyecto para concerlo, probarlo, evaluarlo y usarlo. El objetivo de estos eventos es consolidar la comunidad Yupp, para darle continuidad al proyecto, y poder mejorarlo entre todos.&lt;br /&gt;&lt;br /&gt;Muchas gracias a todos, espero que podamos hacer de este primer evento un éxito, ¡y que sea el primero de muchos!&lt;br /&gt;&lt;br /&gt;¡Un saludo desde mi paisito Uruguay!&lt;br /&gt;Pablo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-9112663357735843660?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/9112663357735843660/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/05/dia-y-hora-del-tutorial-virtual-de-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/9112663357735843660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/9112663357735843660'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/05/dia-y-hora-del-tutorial-virtual-de-yupp.html' title='Día y hora del tutorial virtual de Yupp'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1890407915857676047</id><published>2011-04-29T18:15:00.001-03:00</published><updated>2011-04-29T18:16:57.567-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='capacitacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Tutorial de Yupp Framework version virtual</title><content type='html'>Estoy armando una versión virtual del tutorial. Les cuento un poco lo  que pasó en la versión presencial y las ideas para el virtual, cualquier  comentario o duda es todo bienvenido.&lt;br /&gt;&lt;br /&gt;Hace unos días hicimos un taller de Yupp PHP Framework en Montevideo, Uruguay.&lt;br /&gt;&lt;br /&gt;La idea fue dar a conocer el framework a quienes no lo conocían, e ir de  conceptos básicos de funcionamiento, instalación y configuración, hasta  la creación de una aplicación web completa con algún grado de  dificultad.&lt;br /&gt;&lt;br /&gt;Los participantes llevaron sus notebooks, y les dimos todo el material  necesario para que pudieran instalar el framework y ejecutar los  ejemplos en sus propias computadoras.&lt;br /&gt;&lt;br /&gt;Muchos desarrolladores me han preguntado si se podría hacer el evento en  otros países, y tengo ganas de organizar algo virtual para que todos  puedan participar (aunque sea por curiosidad) desde sus casas u  oficinas. Voy a pensar un poco más cómo podría implementarse esto. Si  tienen sugerencias, son bienvenidas. Por ahora sería:&lt;br /&gt;&lt;br /&gt;- Audio por Skype&lt;br /&gt;- Visualización de documentos y presentaciones por Google Docs&lt;br /&gt;- Consultas por chat (Google Talk o mismo Skype)&lt;br /&gt;- Todo el material lo tienen para descargar por lo que pueden seguirlo cada uno localmente&lt;br /&gt;&lt;br /&gt;Por ahora dejo disponible todo el material del taller que puede descargarse aquí: &lt;a href="http://yuppframework.blogspot.com/2011/04/post-mortem-del-tutorial-de-yupp.html"&gt;http://yuppframework.blogspot.com/2011/04/post-mortem-del-tutorial-de-yupp.html&lt;/a&gt;&lt;br /&gt;Esto contiene un documento hecho especialmente para el taller, la  presentación, el framework, aplicaciones de ejemplo y el software de  base necesario (usamos WAMP y Notepad++).&lt;br /&gt;&lt;br /&gt;He creado un formulario para organizar a los interesados en participar  del evento virtual, si quieren participar pueden poner sus datos aquí: &lt;a href="https://spreadsheets.google.com/spreadsheet/viewform?formkey=dFlpbW8ySVljS1dPZmNaaGJpOTFQREE6MQ"&gt;https://spreadsheets.google.com/spreadsheet/viewform?formkey=dFlpbW8ySVljS1dPZmNaaGJpOTFQREE6MQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1890407915857676047?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1890407915857676047/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/04/tutorial-de-yupp-framework-version.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1890407915857676047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1890407915857676047'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/04/tutorial-de-yupp-framework-version.html' title='Tutorial de Yupp Framework version virtual'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2540723361166177457</id><published>2011-04-23T21:44:00.000-03:00</published><updated>2011-04-23T21:44:17.968-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='montevideo'/><category scheme='http://www.blogger.com/atom/ns#' term='capacitacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='material'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Post mortem del tutorial de Yupp</title><content type='html'>El pasado viernes 15 de abril se llevó a cabo el primer tutorial de Yupp PHP Framework "manos a la obra con Yupp Framework".&lt;br /&gt;&lt;br /&gt;La idea central fue empapar a los asistentes en el uso del framework y sus posibilidades, por esta razón fuimos desde la instalación del framework a la creación de una aplicación web simple, pero con algún nivel de complejidad en la parte de ORM.&lt;br /&gt;&lt;br /&gt;A los asistentes se les entregó todo el material, que también está &lt;a href="http://www.subirfacil.com/files/NNYHU4MQ/Yupp_Tutorial_v1.rar"&gt;disponible en línea&lt;/a&gt; para todos los que deseen tenerlo. Este material consiste en el software de base necesario, en la versión "trunk" del framework, un documento especialmente diseñado para el tutorial, la presentación utilizada, y una serie de aplicaciones. Las aplicaciones son en realidad, distintas versiones de la misma aplicación, la cual evoluciona a medida que avanza en tutorial, agregando complejidad para mostrar distintos aspectos del framework.&lt;br /&gt;&lt;br /&gt;Gracias a esta primer experiencia, la idea es mejorar el tutorial y repetirlo en Uruguay y en la región. Muchos desarrolladores argentinos me han consultado sobre hacerlo ahí. Ojalá podamos organizar algún evento pequeño con la comunidad argentina de desarrolladores web.&lt;br /&gt;&lt;br /&gt;Aquí dejo un par de fotitos del evento:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9dItGWKO3kw/TbNxsdIuN4I/AAAAAAAAEzc/GbrLLuuMCc8/s1600/IMGP1569%2Bp.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-9dItGWKO3kw/TbNxsdIuN4I/AAAAAAAAEzc/GbrLLuuMCc8/s400/IMGP1569%2Bp.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-65tL-DEsJIg/TbNxsktEMwI/AAAAAAAAEzk/praiMIJexxo/s1600/IMGP1575%2Bp.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-65tL-DEsJIg/TbNxsktEMwI/AAAAAAAAEzk/praiMIJexxo/s400/IMGP1575%2Bp.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2540723361166177457?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2540723361166177457/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/04/post-mortem-del-tutorial-de-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2540723361166177457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2540723361166177457'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/04/post-mortem-del-tutorial-de-yupp.html' title='Post mortem del tutorial de Yupp'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-9dItGWKO3kw/TbNxsdIuN4I/AAAAAAAAEzc/GbrLLuuMCc8/s72-c/IMGP1569%2Bp.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6221521257064109423</id><published>2011-04-06T23:56:00.001-03:00</published><updated>2011-04-10T15:06:41.949-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Tutorial Yupp PHP Framework: manos a la obra</title><content type='html'>&lt;b&gt;&lt;/b&gt;&lt;u&gt;Sobre el evento:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;El objetivo de este tutorial es mostrar cómo se trabaja con el framework, simplificando tareas repetitivas y disminuyendo al máximo las necesidades de configuración.&lt;br /&gt;&lt;br /&gt;La entrada es libre y gratuita. Se aconseja traer laptop/notebook para  poder realizar pruebas de instalación e implementar algunas aplicaciones  sencillas. Para quienes tengan Windows, se aconseja tener WAMP  (&lt;a href="http://www.wampserver.com/" target="_blank"&gt;http://www.wampserver.com&lt;/a&gt;) instalado.&lt;br /&gt;&lt;br /&gt;Dictado por Ing. Pablo Pazos Gutiérrez (&lt;a href="http://www.linkedin.com/in/pablopazosgutierrez" target="_blank"&gt;http://www.linkedin.com/in/&lt;wbr&gt;&lt;/wbr&gt;pablopazosgutierrez&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Apoya: LINS (&lt;a href="http://www.fing.edu.uy/inco/grupos/lins/projects.html" target="_blank"&gt;http://www.fing.edu.uy/inco/&lt;wbr&gt;&lt;/wbr&gt;grupos/lins/projects.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Día y hora:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Viernes  15 de abril de 2011, a las 20 horas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Lugar:&lt;/u&gt;&lt;br /&gt;En el salón C11 del edificio  polifuncional Faro (Julio Herrera y Reissig 631, al lado de Facultad de  Ingeniería &lt;a href="http://www.fing.edu.uy/" target="_blank"&gt;http://www.fing.edu.uy/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maps.google.com/maps?q=aulario%20faro%20facultad%20de%20ingenieria,%20montevideo"&gt;Ver en Google Maps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Temario:&lt;/u&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fundamentos de patrones MVC y ORM&lt;/li&gt;&lt;li&gt;Fundamentos de programación ágil y aplicaciones web&lt;/li&gt;&lt;li&gt;Instalación y configuración del framework&lt;/li&gt;&lt;li&gt;Estructura de Yupp Framework&lt;/li&gt;&lt;li&gt;URLs en Yupp&lt;/li&gt;&lt;li&gt;Creando una aplicación simple: hello world&lt;/li&gt;&lt;li&gt;Estructura de las aplicaciones Yupp&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Configuración de la base de datos por aplicación&lt;/li&gt;&lt;li&gt;Script de bootstrap&lt;/li&gt;&lt;li&gt;Scripts de testing&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Model:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creando modelos de datos complejos: hasOne, hasMany, herencia&lt;/li&gt;&lt;li&gt;Creando restricciones sobre campos y relaciones&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;View:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Fundamentos de implementando vistas.&lt;/li&gt;&lt;li&gt;Uso de helpers.&lt;/li&gt;&lt;li&gt;Helpers layout y template.&lt;/li&gt;&lt;li&gt;Integración de liberías Javascript.&lt;/li&gt;&lt;li&gt;Vistas scaffolded.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Controller:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Convenciones.&lt;/li&gt;&lt;li&gt;Render vs Redirect.&lt;/li&gt;&lt;li&gt;Recibiendo archivos.&lt;/li&gt;&lt;li&gt;Devolviendo XML o JSON.&lt;/li&gt;&lt;li&gt;Acciones scaffolded.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Mejoras para las próximas versiones de Yupp PHP Framework.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Sobre Yupp:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Yupp PHP Framework es una herramienta  ágil para el desarrollo de aplicaciones web orientadas a objetos. Yupp  implementa el patrón arquitectónico Modelo-Vista-Controlador, y posee  una herramienta ORM para la persistencia de objetos. Yupp está  desarrollado sobre PHP5 y trabaja con distintos DBMS como MySQL,  PostgreSQL y SQLite. Por más info:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/" target="_blank"&gt;http://code.google.com/p/yupp/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://yuppframework.blogspot.com/" target="_blank"&gt;http://yuppframework.blogspot.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp" target="_blank"&gt;http://groups.google.com/&lt;wbr&gt;&lt;/wbr&gt;group/yuppframeworkphp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Una característica a destacar es que este framework fue desarrollado en Uruguay.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por más información:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Raquel Sosa &amp;lt;&lt;a href="mailto:raquels@fing.edu.uy" target="_blank"&gt;raquels@fing.edu.uy&lt;/a&gt;&amp;gt; (LINS)&lt;/li&gt;&lt;li&gt;Pablo Pazos &amp;lt;&lt;a href="mailto:pablo.swp@gmail.com" target="_blank"&gt;pablo.swp@gmail.com&lt;/a&gt;&amp;gt; (Yupp PHP Framework)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6221521257064109423?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6221521257064109423/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/04/tutorial-yupp-php-framework-manos-la.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6221521257064109423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6221521257064109423'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/04/tutorial-yupp-php-framework-manos-la.html' title='Tutorial Yupp PHP Framework: manos a la obra'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1929974314434314112</id><published>2011-03-15T02:11:00.001-03:00</published><updated>2011-03-15T12:30:31.382-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Tutorial manos a la obra con Yupp</title><content type='html'>Estamos preparando un tutorial para el mes de abril con el objetivo de dar los fundamentos básicos para el desarrollo de aplicaciones web usando Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;Si bien la temática aún no está 100% definida, el hilo de temas será muy parecido al siguiente:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fundamentos de patrones MVC y ORM&lt;/li&gt;&lt;li&gt;Fundamentos de programación ágil y aplicaciones web &lt;/li&gt;&lt;li&gt;Instalación y configuración básica del framework &lt;/li&gt;&lt;li&gt;Estructura del framework&lt;/li&gt;&lt;li&gt;URLs en Yupp &lt;/li&gt;&lt;li&gt;Creando una aplicación simple: hello world&lt;/li&gt;&lt;li&gt;Estructura de las aplicaciones Yupp&lt;/li&gt;&lt;li&gt;Model:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creando modelos de datos complejos: hasOne, hasMany, herencia&lt;/li&gt;&lt;li&gt;Creando restricciones sobre campos y relaciones&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;View:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Fundamentos de implementando vistas.&lt;/li&gt;&lt;li&gt;Uso de helpers.&lt;/li&gt;&lt;li&gt;Helpers layout y template.&lt;/li&gt;&lt;li&gt;Integración de liberías Javascript.&lt;/li&gt;&lt;li&gt;Vistas scaffolded. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Controller:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Convenciones.&lt;/li&gt;&lt;li&gt;Render vs Redirect. &lt;/li&gt;&lt;li&gt;Recibiendo archivos.&lt;/li&gt;&lt;li&gt;Devolviendo XML o JSON.&lt;/li&gt;&lt;li&gt;Acciones scaffolded.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Mejoras para las próximas versiones del framework. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Este temario podrá variar de aquí al evento.&lt;br /&gt;&lt;br /&gt;El lugar será en Facultad de Ingeniería, Universidad de la República, Montevideo, Uruguay. Luego publicaremos el día y hora exactos.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1929974314434314112?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1929974314434314112/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/03/tutorial-manos-la-obra-con-yupp.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1929974314434314112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1929974314434314112'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/03/tutorial-manos-la-obra-con-yupp.html' title='Tutorial manos a la obra con Yupp'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4991966658462538639</id><published>2011-03-01T13:51:00.001-02:00</published><updated>2011-03-01T13:52:18.810-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.3'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><title type='text'>Nuevo Yupp PHP Framework v0.3</title><content type='html'>Estamos muy contentos de anunciar la liberación de la nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/yupp/"&gt;&lt;img border="0" height="380" src="https://lh6.googleusercontent.com/-fK03gxlz7pE/TW0VRsEy4oI/AAAAAAAAEyo/TgiX6-yRcSY/s640/YuppFrameworkv03Genesis2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;En esta versión se incluyen varias mejoras y correcciones que hacen al framework más simple de usar y más completo en cuanto a su funcionalidad de base. Además hemos actualizado la documentación de referencia para facilitar la tarea de quienes están comenzando a usar el framework.&lt;br /&gt;&lt;br /&gt;Como siempre, el framework podrá ser descargado desde nuestro sitio en Google Code:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/"&gt;http://code.google.com/p/yupp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aquí podrás encontrar los detalles de los cambios y mejoras hechos en esta nueva versión:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.3:_codename_Genesis_2_%28liberado%29"&gt;http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.3:_codename_Genesis_2_%28liberado%29&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Las notas de la versión con detalles de las pruebas realizadas, de la instalación del framework y mucha información útil para comenzar a usar el framework, las puedes encontrar aquí: &lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv03"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv03&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La documentación actualizada la puedes encontrar aquí:&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pronto estaremos actualizando las aplicaciones en nuestro sitio de Yupp Apps para aprovechar al máximo las novedades de esta versión del framework:&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp-apps/"&gt;http://code.google.com/p/yupp-apps/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como siempre, todas las consultas y comentarios serán recibidas en nuestro sitio de Google Groups:&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;¡Hasta pronto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4991966658462538639?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4991966658462538639/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/03/nuevo-yupp-php-framework-v03.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4991966658462538639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4991966658462538639'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/03/nuevo-yupp-php-framework-v03.html' title='Nuevo Yupp PHP Framework v0.3'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-fK03gxlz7pE/TW0VRsEy4oI/AAAAAAAAEyo/TgiX6-yRcSY/s72-c/YuppFrameworkv03Genesis2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7212560090344457396</id><published>2011-02-15T15:13:00.000-02:00</published><updated>2011-02-15T15:13:07.543-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Inminente liberación de Yupp v0.3</title><content type='html'>Llegamos a un punto donde la próxima liberación de Yupp PHP Framework se hace inminente.&lt;br /&gt;&lt;br /&gt;Desde la versión anterior (Yupp Genesis v0.2.5) se han hecho varias correcciones, verificaciones y agregado nuevas funcionalidades. En nuestra wki se pueden encontrar los cambios realizados: &lt;a href="http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.3:"&gt;http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.3:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La nueva versión de Yupp seguramente estará disponible para descargar luego de actualizar las notas de la versión y la documentación del proyecto: &lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Igualmente, todo el código fuente de esta nueva versión ya se encuentra en nuestro repositorio de versiones: &lt;a href="http://yupp.googlecode.com/svn/YuppPHPFramework/"&gt;http://yupp.googlecode.com/svn/YuppPHPFramework/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La versión 0.3 de Yupp Framework será conocida por el nombre clave: Yupp Genesis v2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7212560090344457396?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7212560090344457396/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/02/inminente-liberacion-de-yupp-v03.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7212560090344457396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7212560090344457396'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/02/inminente-liberacion-de-yupp-v03.html' title='Inminente liberación de Yupp v0.3'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4898387854574627049</id><published>2011-02-14T15:00:00.000-02:00</published><updated>2011-02-14T15:00:55.129-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Documetacion actualizada</title><content type='html'>Hemos actualizado la documentación de Yupp PHP Framework:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/index.html"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Algunas de las actualizaciones son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/5_aplicaciones.html"&gt;Documentación sobre el descriptor de aplicaciones&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/4_controladores.html"&gt;Documentación de vistas sin acciones&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/9_1_helper_message.html"&gt;Acceso directo al helper message&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/9_10_helper_img.html"&gt;Se agrega documentación del helper img&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/2_4_xml.html"&gt;Serialización a XML&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/2_5_json.html"&gt;Serialización a JSON&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/2_3_configuracion_db.html"&gt;Configuración de la BD por aplicación&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/14_yupp_config.html"&gt;Actualizada la documentación de configuración&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cualquier consulta la pueden enviar al grupo de discusión: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4898387854574627049?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4898387854574627049/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/02/documetacion-actualizada.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4898387854574627049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4898387854574627049'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/02/documetacion-actualizada.html' title='Documetacion actualizada'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6001095404184773301</id><published>2011-02-02T04:59:00.002-02:00</published><updated>2011-02-04T01:21:48.412-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movix'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><title type='text'>Movix: gestor de peliculas hecho en Yupp</title><content type='html'>Movix es una pequeña aplicación que implementé para gestionar mi colección de películas, de modo de saber qué películas tengo y tener un mecanismo fácil para buscar y ordenar películas cuando tengo ganas de ver algo específico.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_jS3wcH3mkBM/TUkANxWTPCI/AAAAAAAAEx4/SEL3PK1G-1w/s1600/movix.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/_jS3wcH3mkBM/TUkANxWTPCI/AAAAAAAAEx4/SEL3PK1G-1w/s640/movix.jpeg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Esta aplicación básicamente es un proxy que realiza búsquedas de películas en IMDB (http://www.imdb.com), y mediante técnicas de web scrapping, obtiene el contenido buscado y lo guarda en la base de datos local. Nada del otro mundo. La aplicación completa no supera los 127 KB.&lt;br /&gt;&lt;br /&gt;Una de las características que más me gustó como quedó implementada es la de mostrar el ranking de la película como una barra coloreada, donde si la película recibe una puntuación de más de 75% se ve en verde y de menos del 30% se ve en rojo, pasando por un par de grados intermedios. Además se puede ordenar por ranking (ver las mejores rankeadas primero). Otra característica útil es la de filtrado por género, de modo que puedo querer una de "acción", y ordenando por rankeo puedo elegir entre las mejores.&lt;br /&gt;&lt;br /&gt;Aquí se puede descargar esta y otras aplicaciones: &lt;a href="http://code.google.com/p/yupp-apps/"&gt;http://code.google.com/p/yupp-apps/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Nota: si bien es una aplicación funcional, no está garantizado que funcione en el 100% de las búsquedas, debido a que las reglas de obtención de la información son estáticas y las páginas de IMDB pueden cambiar en cualquier momento, de todos modos se puede ir adaptando la aplicación a los cambios de IMDB.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6001095404184773301?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6001095404184773301/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2011/02/movix-gestion-de-peliculas-hecho-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6001095404184773301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6001095404184773301'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2011/02/movix-gestion-de-peliculas-hecho-en.html' title='Movix: gestor de peliculas hecho en Yupp'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUkANxWTPCI/AAAAAAAAEx4/SEL3PK1G-1w/s72-c/movix.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-171560502361608638</id><published>2010-12-20T02:41:00.001-02:00</published><updated>2011-01-06T13:41:38.681-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='v0.2.5'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><title type='text'>Yupp Genesis v0.2.5</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;&lt;img border="0" height="380" src="http://3.bp.blogspot.com/_jS3wcH3mkBM/TQ7bSE_4tVI/AAAAAAAAEwM/rUZrYgcmAhY/s640/YuppFrameworkGenesis2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Estamos contentos de anunciar la liberación de Yupp Framework v0.2.5 (versión Genesis).&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Con motivo de esta liberación, se compatibilizaron todas las aplicaciones de Yupp Apps. Las nuevas versiones pueden descargarse aquí: &lt;a href="http://code.google.com/p/yupp-apps/"&gt;http://code.google.com/p/yupp-apps/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Los cambios hechos desde la liberación anterior pueden verse en la hoja de ruta: &lt;a href="http://code.google.com/p/yupp/wiki/Hoja_de_ruta"&gt;http://code.google.com/p/yupp/wiki/Hoja_de_ruta&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notas de la versión: &lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv025"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv025&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Documentación actualizada: &lt;a href="http://simplewebportal.net/yupp_framework_php_doc"&gt;http://simplewebportal.net/yupp_framework_php_doc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Descargas: &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dudas o comentarios: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agradecemos desde ya a toda la comunidad que nos apoya, y a quienes prueban el framework, nos envían consejos y mejoras, y lo usan para sus proyectos.&lt;br /&gt;&lt;br /&gt;Para todos, gracias por seguir el desarrollo de este pequeño framework PHP en español, y por apoyarnos. Felices fiestas y un muy feliz año.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-171560502361608638?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/171560502361608638/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/12/yupp-genesis-v025.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/171560502361608638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/171560502361608638'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/12/yupp-genesis-v025.html' title='Yupp Genesis v0.2.5'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jS3wcH3mkBM/TQ7bSE_4tVI/AAAAAAAAEwM/rUZrYgcmAhY/s72-c/YuppFrameworkGenesis2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1872739423833936383</id><published>2010-12-07T06:38:00.000-02:00</published><updated>2010-12-07T06:38:00.110-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Encuesta sobre la version de PHP que usas</title><content type='html'>Estoy tratando de implementar algunas características en Yupp que a su vez requieren de características que están disponibles desde PHP 5.3.0.&lt;br /&gt;&lt;br /&gt;Siendo que Yupp funciona desde PHP 5.2.3 (e incluso anteriores), estos cambios requerirán el uso de PHP 5.3.0 o superior.&lt;br /&gt;&lt;br /&gt;Queda abierta la encuesta para evaluar si vale la pena agregar estas características, en función del costo del cambio de versión de PHP.&lt;br /&gt;&lt;br /&gt;¿Qué versión de PHP usas para desarrollar?&lt;br /&gt;¿Qué versión de PHP tienen tus servidores de aplicaciones en producción?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Muchas gracias por la ayuda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1872739423833936383?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1872739423833936383/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/12/encuesta-sobre-la-version-de-php-que.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1872739423833936383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1872739423833936383'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/12/encuesta-sobre-la-version-de-php-que.html' title='Encuesta sobre la version de PHP que usas'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6608076004052573467</id><published>2010-12-05T02:48:00.000-02:00</published><updated>2010-12-05T02:48:26.749-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Mejorando la performance de Yupp Framework</title><content type='html'>Hace un par de semanas hice la primer prueba de performance en tiempos de respuesta sobre el framework. Para hacer las pruebas utilicé Apache Bench (&lt;a href="http://httpd.apache.org/docs/2.0/programs/ab.html"&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;http://httpd.apache.org/docs/2.0/&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;programs/ab.html&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Primero lancé una prueba sin ninguna optimización. Para esto utilicé una aplicación simple, sin acceso a la base de datos (lo que llaman un "hello world" básico). De esta prueba obtuve como resultado que el framework soportaba&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;5.5 pedidos por segundo y en&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;promedio cada pedido se resolvía en 1.8 segundos (esto cuenta envío&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;del pedido, procesamiento de Apache, procesamiento del framework y&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;envío de la respuesta).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;Luego, puse un objetivo para bajar los tiempos de respuesta y aumentar los pedidos que se pueden hacer por segundo. El objetivo fue llevarlo al doble, o sea: atender 11 pedidos por segundo y que en promedio, el tiempo de respuesta fuera de 0.9 seg.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;Luego de algunas optimizaciones en la inclusión de clases en el index.php, se obtuvieron mejores resultados de los esperados: más de 27 pedidos por segundo y una demora promedio de&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;367&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;ms por pedido.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;A continuación dejo el detalle de los resultados.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;Creo que con un poco más de optimización&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;podremos llegar a 40 pedidos por&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;segundo y 200 ms de tiempo promedio por pedido.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\wamp\bin\apache\Apache2.2.11\bin&amp;gt;ab -k -n 1000 -c 10&amp;nbsp;http://localhost/YuppPHPFramework/apli/entrada/index&lt;br /&gt;This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;&lt;br /&gt;Copyright 1996 Adam Twiss, Zeus Technology Ltd,&amp;nbsp;&lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://www.zeustech.net/&amp;amp;usg=AFQjCNEnz6WdRPvEyWheQo7tN8K6b_uYZQ" rel="nofollow" style="color: #0000cc;" target="_blank"&gt;http://www.zeustech.net/&lt;/a&gt;&lt;br /&gt;Licensed to The Apache Software Foundation,&amp;nbsp;&lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://www.apache.org/&amp;amp;usg=AFQjCNEyKHWMR4lKrklMgoLofEoo0Ilelw" rel="nofollow" style="color: #0000cc;" target="_blank"&gt;http://www.apache.org/&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Benchmarking localhost (be patient)&lt;br /&gt;Completed 100 requests&lt;br /&gt;Completed 200 requests&lt;br /&gt;Completed 300 requests&lt;br /&gt;Completed 400 requests&lt;br /&gt;Completed 500 requests&lt;br /&gt;Completed 600 requests&lt;br /&gt;Completed 700 requests&lt;br /&gt;Completed 800 requests&lt;br /&gt;Completed 900 requests&lt;br /&gt;Completed 1000 requests&lt;br /&gt;Finished 1000 requests&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Server Software: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Apache/2.2.11&lt;br /&gt;Server Hostname: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;localhost&lt;br /&gt;Server Port: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;80&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Document Path: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/YuppPHPFramework/apli/entrada/index&lt;br /&gt;Document Length: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;33 bytes&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Concurrency Level: &amp;nbsp; &amp;nbsp; &amp;nbsp;10&lt;br /&gt;Time taken for tests: &amp;nbsp; 181.797 seconds&lt;br /&gt;Complete requests: &amp;nbsp; &amp;nbsp; &amp;nbsp;1000&lt;br /&gt;Failed requests: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;Write errors: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;Keep-Alive requests: &amp;nbsp; &amp;nbsp;995&lt;br /&gt;Total transferred: &amp;nbsp; &amp;nbsp; &amp;nbsp;449790 bytes&lt;br /&gt;HTML transferred: &amp;nbsp; &amp;nbsp; &amp;nbsp; 33000 bytes&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;Requests per second: &amp;nbsp; &amp;nbsp;5.50 [#/sec] (mean)&lt;br /&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; 1817.969 [ms] (mean)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; 181.797 [ms] (mean, across all concurrent&lt;br /&gt;requests)&lt;br /&gt;Transfer rate: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.42 [Kbytes/sec] received&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Connection Times (ms)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; min &amp;nbsp;mean[+/-sd] median &amp;nbsp; max&lt;br /&gt;Connect: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0.5 &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp;16&lt;br /&gt;Processing: &amp;nbsp;1031 &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;1810 &lt;/span&gt;445.8 &amp;nbsp; 1672 &amp;nbsp; &amp;nbsp;4844&lt;br /&gt;Waiting: &amp;nbsp; &amp;nbsp; 1031 1810 445.9 &amp;nbsp; 1672 &amp;nbsp; &amp;nbsp;4844&lt;br /&gt;Total: &amp;nbsp; &amp;nbsp; &amp;nbsp; 1031 1810 445.8 &amp;nbsp; 1672 &amp;nbsp; &amp;nbsp;4844&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Percentage of the requests served within a certain time (ms)&lt;br /&gt;&amp;nbsp; 50% &amp;nbsp; 1672&lt;br /&gt;&amp;nbsp; 66% &amp;nbsp; 1828&lt;br /&gt;&amp;nbsp; 75% &amp;nbsp; 2063&lt;br /&gt;&amp;nbsp; 80% &amp;nbsp; 2344&lt;br /&gt;&amp;nbsp; 90% &amp;nbsp; 2516&lt;br /&gt;&amp;nbsp; 95% &amp;nbsp; 2641&lt;br /&gt;&amp;nbsp; 98% &amp;nbsp; 2719&lt;br /&gt;&amp;nbsp; 99% &amp;nbsp; 2828&lt;br /&gt;&amp;nbsp;100% &amp;nbsp; 4844 (longest request)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\wamp\bin\apache\Apache2.2.11\bin&amp;gt;ab -k -n 1000 -c 10&amp;nbsp;http://localhost/YuppPHPFramework/apli/entrada/index&lt;br /&gt;This is ApacheBench, Version 2.3 &amp;lt;$Revision: 655654 $&amp;gt;&lt;br /&gt;Copyright 1996 Adam Twiss, Zeus Technology Ltd,&amp;nbsp;&lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://www.zeustech.net/&amp;amp;usg=AFQjCNEnz6WdRPvEyWheQo7tN8K6b_uYZQ" rel="nofollow" style="color: #0000cc;" target="_blank"&gt;http://www.zeustech.net/&lt;/a&gt;&lt;br /&gt;Licensed to The Apache Software Foundation,&amp;nbsp;&lt;a href="http://www.google.com/url?sa=D&amp;amp;q=http://www.apache.org/&amp;amp;usg=AFQjCNEyKHWMR4lKrklMgoLofEoo0Ilelw" rel="nofollow" style="color: #0000cc;" target="_blank"&gt;http://www.apache.org/&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Benchmarking localhost (be patient)&lt;br /&gt;Completed 100 requests&lt;br /&gt;Completed 200 requests&lt;br /&gt;Completed 300 requests&lt;br /&gt;Completed 400 requests&lt;br /&gt;Completed 500 requests&lt;br /&gt;Completed 600 requests&lt;br /&gt;Completed 700 requests&lt;br /&gt;Completed 800 requests&lt;br /&gt;Completed 900 requests&lt;br /&gt;Completed 1000 requests&lt;br /&gt;Finished 1000 requests&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Server Software: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Apache/2.2.11&lt;br /&gt;Server Hostname: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;localhost&lt;br /&gt;Server Port: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;80&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Document Path: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/YuppPHPFramework/apli/entrada/index&lt;br /&gt;Document Length: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;33 bytes&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Concurrency Level: &amp;nbsp; &amp;nbsp; &amp;nbsp;10&lt;br /&gt;Time taken for tests: &amp;nbsp; 36.891 seconds&lt;br /&gt;Complete requests: &amp;nbsp; &amp;nbsp; &amp;nbsp;1000&lt;br /&gt;Failed requests: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;Write errors: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;Keep-Alive requests: &amp;nbsp; &amp;nbsp;997&lt;br /&gt;Total transferred: &amp;nbsp; &amp;nbsp; &amp;nbsp;449836 bytes&lt;br /&gt;HTML transferred: &amp;nbsp; &amp;nbsp; &amp;nbsp; 33000 bytes&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;Requests per second: &amp;nbsp; &amp;nbsp;27.11 [#/sec] (mean)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; 368.906 [ms] (mean)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;Time per request: &amp;nbsp; &amp;nbsp; &amp;nbsp; 36.891 [ms] (mean, across all concurrent&lt;br /&gt;requests)&lt;br /&gt;Transfer rate: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;11.91 [Kbytes/sec] received&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Connection Times (ms)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; min &amp;nbsp;mean[+/-sd] median &amp;nbsp; max&lt;br /&gt;Connect: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp;0 &amp;nbsp; 0.5 &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp;16&lt;br /&gt;Processing: &amp;nbsp; 266 &amp;nbsp;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;367 &amp;nbsp;&lt;/span&gt;50.1 &amp;nbsp; &amp;nbsp;359 &amp;nbsp; &amp;nbsp; 828&lt;br /&gt;Waiting: &amp;nbsp; &amp;nbsp; &amp;nbsp;266 &amp;nbsp;367 &amp;nbsp;50.1 &amp;nbsp; &amp;nbsp;359 &amp;nbsp; &amp;nbsp; 828&lt;br /&gt;Total: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;266 &amp;nbsp;367 &amp;nbsp;50.1 &amp;nbsp; &amp;nbsp;359 &amp;nbsp; &amp;nbsp; 828&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Percentage of the requests served within a certain time (ms)&lt;br /&gt;&amp;nbsp; 50% &amp;nbsp; &amp;nbsp;359&lt;br /&gt;&amp;nbsp; 66% &amp;nbsp; &amp;nbsp;375&lt;br /&gt;&amp;nbsp; 75% &amp;nbsp; &amp;nbsp;391&lt;br /&gt;&amp;nbsp; 80% &amp;nbsp; &amp;nbsp;391&lt;br /&gt;&amp;nbsp; 90% &amp;nbsp; &amp;nbsp;422&lt;br /&gt;&amp;nbsp; 95% &amp;nbsp; &amp;nbsp;453&lt;br /&gt;&amp;nbsp; 98% &amp;nbsp; &amp;nbsp;516&lt;br /&gt;&amp;nbsp; 99% &amp;nbsp; &amp;nbsp;563&lt;br /&gt;&amp;nbsp;100% &amp;nbsp; &amp;nbsp;828 (longest request)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial, sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: arial, sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6608076004052573467?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6608076004052573467/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/12/mejorando-la-performance-de-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6608076004052573467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6608076004052573467'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/12/mejorando-la-performance-de-yupp.html' title='Mejorando la performance de Yupp Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7652883778860132181</id><published>2010-11-21T16:28:00.000-02:00</published><updated>2010-11-21T16:28:56.077-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Proximas liberaciones del framework</title><content type='html'>Estimados,&lt;br /&gt;&lt;br /&gt;Ya estamos en condiciones de liberar Yupp Framework v0.2.3, pero no haremos liberaciones hasta la v0.2.5, para acumular las mejoras y evitar el elevado costo en tiempo que tiene realizar cada liberación.&lt;br /&gt;&lt;br /&gt;Como siempre, el código actualizado estará en nuestro servidor de versiones SVN (con cualquier cliente SVN como Tortoise o Subclipse lo pueden descargar y probar): &lt;a href="http://yupp.googlecode.com/svn/YuppPHPFramework/"&gt;http://yupp.googlecode.com/svn/YuppPHPFramework/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;También puedes ver el código en el SVN por versión: &lt;a href="http://yupp.googlecode.com/svn/tags/"&gt;http://yupp.googlecode.com/svn/tags/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aquí está la hoja de ruta actualizada al día de hoy: &lt;a href="http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.2.3"&gt;http://code.google.com/p/yupp/wiki/Hoja_de_ruta#v0.2.3&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Seguiremos la hoja de ruta, actualizando los avances ahí mismo (los tickets resueltos llevan un cartel "HECHO").&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cualquier pregunta o comentario es bienvenido.&lt;br /&gt;&lt;br /&gt;Atte.,&lt;br /&gt;Pablo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7652883778860132181?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7652883778860132181/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/11/proximas-liberaciones-del-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7652883778860132181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7652883778860132181'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/11/proximas-liberaciones-del-framework.html' title='Proximas liberaciones del framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5683324328454227804</id><published>2010-11-09T19:27:00.003-02:00</published><updated>2010-11-09T19:30:45.476-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><title type='text'>Agrega tus aplicaciones a Yupp Apps</title><content type='html'>Para quienes quieran mostrar sus desarrollos, aunque sean pequeños, o sean simplemente pruebas del framework, son bienvenidos a enviármelas para su publicación en nuestro sitio de Yupp Apps: &lt;a href="http://code.google.com/p/yupp-apps" target="_blank"&gt;http://code.google.com/p/yupp-apps&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;La idea es tener todas las aplicaciones desarrolladas con Yupp Framework en un  mismo lugar, además que las pruebas que cada uno hizo con el framework, pueden servirle a los demás para comenzar a usarlo. Lo que buscamos son aplicaciones compatibles con la última versión del framework (v0.2.2), o sea que básicamente deben tener un descriptor de la aplicación (ver ejemplos en &lt;a href="http://code.google.com/p/yupp-apps/downloads/list" target="_blank"&gt;http://code.google.com/p/yupp-apps/downloads/list&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Esto ayudará a fortalecer la comunidad y mostrar nuestros desarrollos, incluso para ponerse en contacto con otros miembros y poder colaborar en los proyectos en común.&lt;br /&gt;&lt;br /&gt;Para enviar tu aplicación, primero ponte en contacto con el grupo respondiendo a este hilo de discusión: &lt;a href="http://groups.google.com/group/yuppframeworkphp/browse_thread/thread/c376238ddb1579bb" target="_blank"&gt;http://groups.google.com/group/yuppframeworkphp/browse_thread/thread/c376238ddb1579bb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¡Estamos en contacto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5683324328454227804?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5683324328454227804/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/11/agrega-tus-aplicaciones-yupp-apps.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5683324328454227804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5683324328454227804'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/11/agrega-tus-aplicaciones-yupp-apps.html' title='Agrega tus aplicaciones a Yupp Apps'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5643172131570494826</id><published>2010-10-14T21:27:00.000-02:00</published><updated>2010-10-14T21:27:45.075-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aplicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='movix'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp apps'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp blog'/><title type='text'>Nuevo sitio de Yupp Apps</title><content type='html'>Estimados, &lt;br /&gt;&lt;br /&gt;Como habrán notado en la descarga de la nueva versión de Yupp PHP Framework, no se incluye la aplicación de Blog ni el gestor de películas que se incluía en las versiones anteriores como aplicaciones de ejemplo de cómo usar Yupp.&lt;br /&gt;&lt;br /&gt;De esta forma la descarga es más liviana, y además cada uno puede instalar luego las aplicaciones que desee probar.&lt;br /&gt;&lt;br /&gt;Para este fin, hemos creado un sitio en Google Code llamado Yupp Apps, en el cual publicaremos todas las versiones de las distintas aplicaciones y las futuras aplicaciones que desarrolle cualquier miembro de la comunidad Yupp.&lt;br /&gt;&lt;br /&gt;Aquí pueden ver las aplicaciones que ya están disponibles: &lt;a href="http://code.google.com/p/yupp-apps/downloads/list"&gt;http://code.google.com/p/yupp-apps/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para instalar una aplicación, simplemente es descargar el ZIP con una aplicación y descomprimir su contenido en la carpeta "apps" de Yupp (carpeta que existe desde la versión 0.2.2 del framework).&lt;br /&gt;&lt;br /&gt;Cualquier pregunta sobre como instalar aplicaciones o cómo subir sus propias aplicaciones Yupp al sitio de Yupp Apps, no duden en preguntar en nuestro grupo de discusión: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5643172131570494826?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5643172131570494826/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/10/nuevo-sitio-de-yupp-apps.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5643172131570494826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5643172131570494826'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/10/nuevo-sitio-de-yupp-apps.html' title='Nuevo sitio de Yupp Apps'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5821175540830466130</id><published>2010-10-13T22:08:00.000-02:00</published><updated>2010-10-13T22:08:10.920-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aplicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><title type='text'>Liberamos Yupp Portal v03</title><content type='html'>Estamos muy contentos de anunciar la nueva liberación de Yupp Portal, la aplicación para gestión de portales de Yupp Framework.&lt;br /&gt;&lt;br /&gt;La nueva versión incluye nuevas características y la corrección de varios bugs:&lt;br /&gt;&lt;br /&gt;Soporte para comentarios en las páginas: &lt;a href="http://code.google.com/p/yupp-portal/issues/detail?id=16"&gt;http://code.google.com/p/yupp-portal/issues/detail?id=16&lt;/a&gt; &lt;br /&gt;&lt;span class="h3"&gt;Corrección de inclusión de clase en Bootstrap: &lt;/span&gt;&lt;a href="http://code.google.com/p/yupp-portal/issues/detail?id=24"&gt;http://code.google.com/p/yupp-portal/issues/detail?id=24&lt;/a&gt; &lt;br /&gt;Corrección de problema al volver del registro de un nuevo usuario&lt;a href="http://code.google.com/p/yupp-portal/issues/detail?id=27"&gt;: http://code.google.com/p/yupp-portal/issues/detail?id=27&lt;/a&gt; &lt;br /&gt;Corrección del paginador en el listado de usuarios pendientes: &lt;a href="http://code.google.com/p/yupp-portal/issues/detail?id=21"&gt;http://code.google.com/p/yupp-portal/issues/detail?id=21&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta versión de Yupp Portal funciona desde Yupp PHP Framework v0.2.2.&lt;br /&gt;&lt;br /&gt;Descarga ahora: &lt;a href="http://code.google.com/p/yupp-portal/downloads/list"&gt;http://code.google.com/p/yupp-portal/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;También puedes descargar desde el sitio de Yupp Apps: &lt;a href="http://code.google.com/p/yupp-apps/downloads/list"&gt;http://code.google.com/p/yupp-apps/downloads/list&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5821175540830466130?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5821175540830466130/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/10/liberamos-yupp-portal-v03.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5821175540830466130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5821175540830466130'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/10/liberamos-yupp-portal-v03.html' title='Liberamos Yupp Portal v03'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4618970212022750724</id><published>2010-10-12T01:36:00.000-02:00</published><updated>2010-10-12T01:36:49.987-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Nuevo Yupp PHP Framework 022</title><content type='html'>Estamos muy contentos de anunciar la liberación de una nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Esta versión 0.2.2 marca un antes y un después en el desarrollo de aplicaciones con Yupp.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;La principal mejora es la del fortalecimiento del concepto de "aplicación web", frente al concepto previo de "componente", en donde las aplicaciones eran desarrolladas como plugins al framework. Ahora lo importante son las aplicaciones web, donde:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cada aplicación web tiene una estructura definida pero flexible.&lt;/li&gt;&lt;li&gt;Cada aplicación web puede tener sus propios iconos.&lt;/li&gt;&lt;li&gt;Cada aplicación web puede usar sus propias librerías Javascript o usar las del framework.&lt;/li&gt;&lt;li&gt;Cada aplicación web puede usar su propia configuración de base de datos o usar la del framework (si, cada aplicación puede tener su propio servidor de bases de datos, separado del resto de las aplicaciones)&lt;/li&gt;&lt;li&gt;Cada aplicación web tiene su propio descriptor, que contiene información útil para integrar las aplicaciones al framework y para actualizar automáticamente las versiones de las aplicaciones que se tengan instaladas.&lt;/li&gt;&lt;li&gt;Cada aplicación web puede tener su propio conjunto de tests, para facilitar su testeo automático.&lt;/li&gt;&lt;li&gt;Una sola instancia del framework puede alojar un número ilimitado de aplicaciones web.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Descarga el framework ahora: &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En breve crearemos un conjunto de videos para explicar mejor los temas relacionados con la instalación y configuración del framework, y también el desarrollo de distintas aplicaciones web y cómo obtener mejores resultados utilizando Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;También estaremos actualizando la documentación: &lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4618970212022750724?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4618970212022750724/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/10/nuevo-yupp-php-framework-022.html#comment-form' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4618970212022750724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4618970212022750724'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/10/nuevo-yupp-php-framework-022.html' title='Nuevo Yupp PHP Framework 022'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8265110864588303317</id><published>2010-07-25T20:24:00.000-03:00</published><updated>2010-07-25T20:24:27.252-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.2.1'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><title type='text'>Nueva liberacion de Yupp PHP Framework</title><content type='html'>Estamos muy contentos de anunciar la nueva liberación del framework, Yupp PHP Frameowrk v0.2.1.&lt;br /&gt;&lt;br /&gt;Cambios con respecto a la versión anterior:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Se creó el generador de aplicaciones.&lt;/li&gt;&lt;li&gt;Se corrigieron los mensajes de errores de validación para que sean internacionalizables.&lt;/li&gt;&lt;li&gt;Se creó la primer versión de Yupp Desktop, desde donde ser permite el acceso a las aplicaciones, la generación de tablas y la creación de nuevas aplicaciones de forma simple.&lt;/li&gt;&lt;li&gt;Nuevo paquete de testing para crear y ejecutar casos de prueba de forma automática.&lt;/li&gt;&lt;li&gt;Correcciones al paquete http.&lt;/li&gt;&lt;li&gt;Se agregan descriptores de aplicación para simplificar la gestión de las aplicaciones Yupp.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Le cambiamos la cara al framework, nuevo Yupp Desktop v0.1.0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_jS3wcH3mkBM/TEzFz3G6G9I/AAAAAAAAEsg/Rg6ONHgbzqM/s1600/YuppDesktop010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_jS3wcH3mkBM/TEzFz3G6G9I/AAAAAAAAEsg/Rg6ONHgbzqM/s400/YuppDesktop010.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Esta es la primer versión de Yupp Desktop, una interfaz simple desde donde acceder a las aplicaciones instaladas en el framework, poder generar tablas para las aplicaciones, poder generar nuevas aplicaciones, ejecutar pruebas y más. Así comenzamos a mejorar la interfaz con el usuario y a simplificar la interacción con el framework, además de dar un aspecto más amigable.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Notas de la versión:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV021"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV021&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Documentación de referencia (en actualización)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/" style="color: #de7008;"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Descarga:&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Colabora con el framework:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework" style="color: #de7008;"&gt;http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8265110864588303317?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8265110864588303317/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/07/nueva-liberacion-de-yupp-php-framework.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8265110864588303317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8265110864588303317'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/07/nueva-liberacion-de-yupp-php-framework.html' title='Nueva liberacion de Yupp PHP Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jS3wcH3mkBM/TEzFz3G6G9I/AAAAAAAAEsg/Rg6ONHgbzqM/s72-c/YuppDesktop010.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3655380864020842580</id><published>2010-07-03T23:04:00.002-03:00</published><updated>2010-07-16T19:05:56.547-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='controladores'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='vistas'/><title type='text'>Resolviendo llamados AJAX entre dominios distintos</title><content type='html'>Esta semana tuve la necesidad de consumir servicios JSON a través de AJAX, el problema es que esos servicios estaban en otro host. Buscando en internet, llegué a que el tema de realizar llamadas a AJAX entre distintos dominios no funcionaba directamente, ya que era una gran brecha de seguridad permitir hacer esto en HTTP. Luego de un rato de darme la cabeza contra el teclado, decidí hacerlo de esta forma.&lt;br /&gt;&lt;br /&gt;Digamos que tengo una vista (una página) desde la que necesito consumir el servicio JSON invocando una determinada URL por AJAX, con Prototype esto sería algo así (esta invocación falla por hacerse a un dominio distinto al local):&lt;br /&gt;&lt;br /&gt;&lt;pre class="js" name="code"&gt;Event.observe(window, 'load', function() {&lt;br /&gt;&lt;br /&gt;   new Ajax.Request('http://www.otrohost.com/servicio', {&lt;br /&gt;      method: 'get',&lt;br /&gt;      onLoading: function(res) {&lt;br /&gt;         ....&lt;br /&gt;      },&lt;br /&gt;      onSuccess: function(res) {&lt;br /&gt;         var json = res.responseJSON; // resultado del servicio JSON&lt;br /&gt;         ....&lt;br /&gt;      }&lt;br /&gt;   });&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Sustituyendo la url destino del llamado AJAX por una url local, quien atiende la llamada es la acción de un controlador de Yupp, entonces se puede hacer que esa acción sea la que haga el llamado al servicio JSON en http://www.otrohost.com/servicio y devuelva a la vista el resultado.&lt;br /&gt;&lt;br /&gt;El controlador tendrá este aspecto (archivo: /components/xxx/controllers/components.xxx.controllers.ServicioController.class.php):&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;YuppLoader::load('core.http', 'HTTPRequest');&lt;br /&gt;&lt;br /&gt;class ServicioController extends YuppController {&lt;br /&gt;&lt;br /&gt;   public function getJSONAction()&lt;br /&gt;   {&lt;br /&gt;      $req = new HTTPRequest();&lt;br /&gt;      $req-&gt;setTimeOut( 5 );&lt;br /&gt;      $res = $req-&gt;HTTPRequestGet('http://www.otrohost.com/servicio');&lt;br /&gt;&lt;br /&gt;      // La respuesta&lt;br /&gt;      $json = $res-&gt;getBody();&lt;br /&gt;      &lt;br /&gt;      // Devuelve la respuesta a la vista&lt;br /&gt;      header('Content-Type: application/json');&lt;br /&gt;      return $this-&gt;renderString( $json );&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Así logramos pedirle a un controlador local que haga un pedido HTTP al servicio JSON remoto y que devuelva el objeto JSON a la vista local desde la que partió el pedido AJAX original. El javascript en la vista con la invocación al controlador local quedaría así:&lt;br /&gt;&lt;br /&gt;&lt;pre class="js" name="code"&gt;Event.observe(window, 'load', function() {&lt;br /&gt;&lt;br /&gt;   new Ajax.Request('&amp;lt;?php echo h('url', array('component'=&gt;'xxx', 'controller'=&gt;'servicio', 'action'=&gt;'getJSON'); ?&amp;gt;', {&lt;br /&gt;      method: 'get',&lt;br /&gt;      onLoading: function(res) {&lt;br /&gt;         ....&lt;br /&gt;      },&lt;br /&gt;      onSuccess: function(res) {&lt;br /&gt;         var json = res.responseJSON; // resultado del servicio JSON local&lt;br /&gt;         ....&lt;br /&gt;      }&lt;br /&gt;   });&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Así con pocas líneas de código podemos resolver un problema que tenemos frecuentemente, sobre todo cuando necesitamos consumir APIs externas con servicios JSON o XML.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3655380864020842580?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3655380864020842580/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/07/resolviendo-llamados-ajax-entre.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3655380864020842580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3655380864020842580'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/07/resolviendo-llamados-ajax-entre.html' title='Resolviendo llamados AJAX entre dominios distintos'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6083202673009685125</id><published>2010-06-18T01:39:00.000-03:00</published><updated>2010-06-18T01:39:42.470-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='v0.2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Liberamos Yupp PHP Framework v0.2.0</title><content type='html'>&lt;h3 class="post-title entry-title" style="color: #9e5205; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; font: normal normal bold 160%/normal Verdana, sans-serif; letter-spacing: -1px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-weight: normal; letter-spacing: normal;"&gt;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.&lt;/span&gt;&lt;/h3&gt;&lt;div class="post-body entry-content" style="font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Las notas de la versión con descripción de la instalación del framework:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV020"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV020&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;Descargas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list" style="color: #de7008;"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Documentación:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/" style="color: #de7008;"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;La lista detallada de los cambios y las correcciones se encuentra aquí:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/source/list" style="color: #de7008;"&gt;http://code.google.com/p/yupp/source/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Colabora con el desarrollo del framework:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework" style="color: #de7008;"&gt;http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6083202673009685125?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6083202673009685125/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/06/liberamos-yupp-php-framework-v020.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6083202673009685125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6083202673009685125'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/06/liberamos-yupp-php-framework-v020.html' title='Liberamos Yupp PHP Framework v0.2.0'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1111998481158310073</id><published>2010-04-11T20:33:00.001-03:00</published><updated>2010-04-11T21:02:16.494-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.9'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Liberamos nueva version de Yupp PHP Framework</title><content type='html'>Estamos muy contentos de anunciar la nueva liberación del Yupp PHP Framework v0.1.9.&lt;br /&gt;&lt;br /&gt;Para esta nueva versión se incorporación correcciones a varios bugs encontrados desde la versión anterior,&amp;nbsp; 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 &lt;br /&gt;automática de instancias del modelo a  XML, incluso de estructuras de datos complejas. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Las notas de la versión con descripción de la instalación del framework:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV019"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV019&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;Descargas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Documentación:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;La lista detallada de los cambios y las correcciones se encuentra aquí:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://code.google.com/p/yupp/source/list"&gt;http://code.google.com/p/yupp/source/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Colabora con el desarrollo del framework:  &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework"&gt;http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1111998481158310073?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1111998481158310073/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/04/liberamos-nueva-version-de-yupp-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1111998481158310073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1111998481158310073'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/04/liberamos-nueva-version-de-yupp-php.html' title='Liberamos nueva version de Yupp PHP Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3470673245366791057</id><published>2010-02-16T00:21:00.001-02:00</published><updated>2010-02-16T00:22:50.470-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Liberamos Yupp Portal v0.2</title><content type='html'>&lt;b&gt;¡Yupp Portal v0.2 liberado!&lt;/b&gt;&lt;br /&gt;Yupp Portal es el componente para crear portales de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Descargas:&lt;/b&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp-portal/"&gt;http://code.google.com/p/yupp-portal/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hoja de ruta del proyecto:&lt;/b&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/web/yupp-portal---hoja-de-ruta"&gt;http://groups.google.com/group/yuppframeworkphp/web/yupp-portal---hoja-de-ruta&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;¿Para qué sirve Yupp Portal?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-size: large;"&gt;Este componente permite:&lt;/h2&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6393816664375104123&amp;amp;postID=3470673245366791057" name="Este_componente_permite:"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3 style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 0px; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.5ex; padding-left: 0px; padding-right: 0.5em; padding-top: 0.5ex;"&gt;Administrar páginas:&lt;/h3&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6393816664375104123&amp;amp;postID=3470673245366791057" name="Administrar_páginas:"&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol style="max-width: 65em; padding-left: 40px;"&gt;&lt;li&gt;Crear páginas con un clic&lt;/li&gt;&lt;li&gt;Editar contenido con editor visual desde la web&lt;/li&gt;&lt;li&gt;Estados de páginas: Normal, Borrador, Deshabilitada, Oculta&lt;/li&gt;&lt;li&gt;Edición visual de items del menú principal&lt;/li&gt;&lt;li&gt;Edición visual de contenido fijo (por ejemplo banners que se muestran en todas las páginas)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3 style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 0px; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.5ex; padding-left: 0px; padding-right: 0.5em; padding-top: 0.5ex;"&gt;Administración de usuarios:&lt;/h3&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6393816664375104123&amp;amp;postID=3470673245366791057" name="Administración_de_usuarios:"&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol style="max-width: 65em; padding-left: 40px;"&gt;&lt;li&gt;Administración de roles&lt;/li&gt;&lt;li&gt;Crear/Editar/Eliminar/Aprobar usuarios&lt;/li&gt;&lt;li&gt;Registro de usuarios y aprobación con email en un clic&lt;/li&gt;&lt;li&gt;Login/Logout&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3 style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 0px; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.5ex; padding-left: 0px; padding-right: 0.5em; padding-top: 0.5ex;"&gt;Tres roles disponibles:&lt;/h3&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6393816664375104123&amp;amp;postID=3470673245366791057" name="Tres_roles_disponibles:"&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol style="max-width: 65em; padding-left: 40px;"&gt;&lt;li&gt;Administrador: crea/edita páginas, modifica el menú, crea/edita usuarios&lt;/li&gt;&lt;li&gt;Editor: crea/edita páginas, modifica el menú&lt;/li&gt;&lt;li&gt;Usuario: ve páginas ocultas&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3470673245366791057?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3470673245366791057/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/02/liberamos-yupp-portal-v02.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3470673245366791057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3470673245366791057'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/02/liberamos-yupp-portal-v02.html' title='Liberamos Yupp Portal v0.2'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3611901160423983265</id><published>2010-02-09T02:35:00.001-02:00</published><updated>2010-02-09T17:17:41.334-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.8'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Nueva liberación de Yupp PHP Framework</title><content type='html'>Estamos muy contentos de anunciar la nueva liberación del framework, Yupp PHP Frameowrk v0.1.8.&lt;br /&gt;&lt;br /&gt;Esta liberación es la primera que incluye un juego de tests para detectar problemas en el YORM, el modulo de &lt;a href="http://es.wikipedia.org/wiki/Mapeo_objeto-relacional"&gt;ORM&lt;/a&gt; de Yupp Framework.&lt;br /&gt;&lt;br /&gt;Para esta liberación hemos corregido los siguientes tickets:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/issues/detail?id=19"&gt;http://code.google.com/p/yupp/issues/detail?id=19&lt;/a&gt; &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/issues/detail?id=22"&gt;http://code.google.com/p/yupp/issues/detail?id=22&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;También hemos corregido y mejorado la documentación de referencia:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Para descargar la nueva versión, accede a nuestro sitio en google code:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;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!&lt;br /&gt;&lt;br /&gt;Si quieres colaborar con el framework y no sabes como, accede a la guía de colaboración:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework"&gt;http://groups.google.com/group/yuppframeworkphp/web/colabora-con-yupp-framework&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Las notas de la versión están en nuestra wiki:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV018"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkV018&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;¡Esperamos tus comentarios!&lt;br /&gt;-&lt;br /&gt;-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3611901160423983265?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3611901160423983265/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/02/nueva-liberacion-de-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3611901160423983265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3611901160423983265'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/02/nueva-liberacion-de-yupp-php-framework.html' title='Nueva liberación de Yupp PHP Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3513488773541315291</id><published>2010-01-19T16:32:00.008-02:00</published><updated>2010-02-06T17:19:07.636-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejemplos'/><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='caracteristicas'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><category scheme='http://www.blogger.com/atom/ns#' term='pruebas'/><title type='text'>Testing del ORM</title><content type='html'>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 &lt;a href="http://es.wikipedia.org/wiki/Mapeo_objeto-relacional"&gt;ORM &lt;/a&gt;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.&lt;br /&gt;&lt;br /&gt;Con esto lograremos encontrar las debilidades del YORM, al mismo tiempo que demostramos las fortalezas que tiene actualmente.&lt;br /&gt;&lt;br /&gt;Los juegos de tests pueden ser descargados del &lt;a href="http://es.wikipedia.org/wiki/Subversion"&gt;SVN &lt;/a&gt;en nuestro sitio en &lt;a href="http://code.google.com/p/yupp/"&gt;Google Code&lt;/a&gt;:&amp;nbsp;&lt;a href="http://code.google.com/p/yupp/source/checkout"&gt;http://code.google.com/p/yupp/source/checkout&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Actualización:&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;class Pagina extends PersistentObject&lt;br /&gt;{&lt;br /&gt;   function __construct($args = array (), $isSimpleInstance = false)&lt;br /&gt;   {&lt;br /&gt;      $this-&gt;setWithTable("test_a004_pagina");&lt;br /&gt;&lt;br /&gt;      $this-&gt;addAttribute("titulo",  Datatypes :: TEXT);&lt;br /&gt;      $this-&gt;addAttribute("contenido", Datatypes :: TEXT);&lt;br /&gt;&lt;br /&gt;      // Pagina padre&lt;br /&gt;      $this-&gt;addHasOne('owner', 'Pagina');&lt;br /&gt;&lt;br /&gt;      // Paginas hijas&lt;br /&gt;      $this-&gt;addHasMany('subpages', 'Pagina');&lt;br /&gt;&lt;br /&gt;      $this-&gt;addConstraints(&lt;br /&gt;         "titulo",&lt;br /&gt;         array (&lt;br /&gt;            Constraint :: maxLength(255)&lt;br /&gt;         )&lt;br /&gt;      );&lt;br /&gt;      $this-&gt;addConstraints(&lt;br /&gt;         "contenido",&lt;br /&gt;         array (&lt;br /&gt;            Constraint :: maxLength(100000)&lt;br /&gt;         )&lt;br /&gt;      );&lt;br /&gt;      $this-&gt;addConstraints(&lt;br /&gt;         "owner",&lt;br /&gt;         array (&lt;br /&gt;            Constraint :: nullable(true) // Las paginas del primer nivel no tienen padre.&lt;br /&gt;         )&lt;br /&gt;      );&lt;br /&gt;&lt;br /&gt;      parent :: __construct($args, $isSimpleInstance);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Mas codigo ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;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!!!&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;$p1 = new Pagina(&lt;br /&gt;        array(&lt;br /&gt;          "titulo" =&gt; "Pagina raiz",&lt;br /&gt;          "contenido" =&gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler..."&lt;br /&gt;        )&lt;br /&gt;      );&lt;br /&gt;      $p11 = new Pagina(&lt;br /&gt;        array(&lt;br /&gt;          "titulo" =&gt; "Subpagina de raiz 1",&lt;br /&gt;          "contenido" =&gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;br /&gt;          "owner" =&gt; $p1&lt;br /&gt;        )&lt;br /&gt;      );&lt;br /&gt;      $p111 = new Pagina(&lt;br /&gt;        array(&lt;br /&gt;          "titulo" =&gt; "Sub subpagina de raiz 1",&lt;br /&gt;          "contenido" =&gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;br /&gt;          "owner" =&gt; $p11&lt;br /&gt;        )&lt;br /&gt;      );&lt;br /&gt;      $p112 = new Pagina(&lt;br /&gt;        array(&lt;br /&gt;          "titulo" =&gt; "Sub subpagina de raiz 2",&lt;br /&gt;          "contenido" =&gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;br /&gt;          "owner" =&gt; $p11&lt;br /&gt;        )&lt;br /&gt;      );&lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      // subpaginas de p11&lt;br /&gt;      $p11-&gt;addToSubpages($p111);&lt;br /&gt;      $p11-&gt;addToSubpages($p112);&lt;br /&gt;      &lt;br /&gt;      // subpaginas de p1&lt;br /&gt;      $p1-&gt;addToSubpages($p11);&lt;br /&gt;      &lt;br /&gt;      // Guarda toda la estructura con esta única línea de código!&lt;br /&gt;      if (!$p1-&gt;save())&lt;br /&gt;      {&lt;br /&gt;         Logger::struct( $p1-&gt;getErrors(), "Falla test A004.2 1" );&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;         echo "Guarda Ok";&lt;br /&gt;      }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--&lt;blockquote style="background-color: white; color: #0c343d;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$p1 = new Pagina(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "titulo" =&amp;gt; "Pagina raiz",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "contenido" =&amp;gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler..."&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p11 = new Pagina(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "titulo" =&amp;gt; "Subpagina de raiz 1",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "contenido" =&amp;gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "owner" =&amp;gt; $p1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p111 = new Pagina(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "titulo" =&amp;gt; "Sub subpagina de raiz 1",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "contenido" =&amp;gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "owner" =&amp;gt; $p11&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p112 = new Pagina(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "titulo" =&amp;gt; "Sub subpagina de raiz 2",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "contenido" =&amp;gt; "This step is usually done transparently as most compilers perform it and then invoke the assembler...",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "owner" =&amp;gt; $p11&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // subpaginas de p11&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p11-&amp;gt;addToSubpages($p111);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p11-&amp;gt;addToSubpages($p112);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // subpaginas de p1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $p1-&amp;gt;addToSubpages($p11);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Guarda toda la estructura con esta única línea de código!&lt;/span&gt;&lt;span style="background-color: #f3f3f3; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!$p1-&amp;gt;save())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Logger::struct( $p1-&amp;gt;getErrors(), "Falla test A004.2 1" );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Guarda Ok";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3513488773541315291?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3513488773541315291/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2010/01/testing-del-orm.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3513488773541315291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3513488773541315291'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2010/01/testing-del-orm.html' title='Testing del ORM'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7280234769576410043</id><published>2009-12-05T23:43:00.000-02:00</published><updated>2009-12-05T23:43:04.975-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>ORM de nivel enterprise</title><content type='html'>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:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mapeo de clases con atributos de diversos tipos (TEXT, DATE, BOOLEAN, INT, FLOAT, entre otros)&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Mapeo de relaciones entre clases: estamos soportando relaciones unidireccionales y bidireccionales con cardinalidades 1-1, 1-N y N-N.&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Estamos soportando 3 bases de datos: MySQL, SQLite y el último agregado PosgreSQL.&lt;/li&gt;&lt;li&gt;Podemos definir restricciones sobre los datos y esas restricciones se verifican antes de ingresar cualquier dato a la base.&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Creación automática del esquema de en la base de datos: crea todas las tablas necesarias haciendo un clic.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Qué esperamos para el futuro en ORM:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Soporte para más bases de datos: Oracle, SQLServer, Access, etc.&lt;/li&gt;&lt;li&gt;Soporte para persistencia de colecciones de valores simples (Strings, Integers, Dates, etc).&lt;/li&gt;&lt;li&gt;Soporte para transacciones y rollback.&lt;/li&gt;&lt;li&gt;Capacidad de especificar los nombres de las columnas donde se guardan los campos de las clases.&lt;/li&gt;&lt;li&gt;muchas otras características...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;¡Aceptamos sugerencias!&lt;/div&gt;&lt;div&gt;-&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7280234769576410043?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7280234769576410043/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/12/orm-de-nivel-enterprise.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7280234769576410043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7280234769576410043'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/12/orm-de-nivel-enterprise.html' title='ORM de nivel enterprise'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2220947065197021276</id><published>2009-12-01T12:18:00.001-02:00</published><updated>2009-12-01T12:19:05.846-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.7'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Liberamos Yupp PHP Framework v0.1.7</title><content type='html'>&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Luego de largas horas de trabajo estamos muy contentos de liberar la nueva versión de Yupp PHP Framework.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;b&gt;Las diferencias con la versión 0.1.6.7 son:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Se corrije un bug que se liberó con Yupp 0.1.6.7 en la clase routing.Executer,&amp;nbsp;pasaba cuando se retornaba null de una accion de un controller.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Corrección de DatabaseMySQL en consultas que buscan por strings numéricos.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Se eliminaron las clases Filter y Mapping, y se creó una clase Router que&amp;nbsp;cumple las tareas de las elminadas y es mucho mas simple de usar. (&lt;/span&gt;&lt;a href="http://code.google.com/p/yupp/issues/detail?id=10"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://code.google.com/p/yupp/issues/detail?id=10&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;YuppContext se quitan pasajes por referencia.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Primer integración de PostgreSQL a Yupp. Nueva clase DatabasePosgreSQL.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Correcciones a DAL, PersistentObject y PersistentManager.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Descargas:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;a href="http://code.google.com/p/yupp/downloads/list" style="color: #de7008;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://code.google.com/p/yupp/downloads/list&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;a href="http://www.simplewebportal.net/host/1022.htm" style="color: #de7008;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-weight: bold;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;TAG SVN:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;a href="http://code.google.com/p/yupp/source/browse/#svn/tags/v017"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://code.google.com/p/yupp/source/browse/#svn/tags/v017&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-weight: bold;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;Cualquier duda, consulta o reporte de error pueden hacerla en el grupo google (opción "debates &amp;gt; nueva entrada"):&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;a href="http://groups.google.com/group/yuppframeworkphp" style="color: #de7008;"&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hasta pronto!&lt;br /&gt;&lt;br /&gt;Pablo Pazos Gutiérrez&lt;br /&gt;Líder de proyecto&lt;br /&gt;Yupp PHP Framework&lt;/span&gt;   &lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;-&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2220947065197021276?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2220947065197021276/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/12/liberamos-yupp-php-framework-v017.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2220947065197021276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2220947065197021276'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/12/liberamos-yupp-php-framework-v017.html' title='Liberamos Yupp PHP Framework v0.1.7'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2625183493145106835</id><published>2009-11-23T13:37:00.000-02:00</published><updated>2009-11-23T13:38:22.111-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Próxima liberación de Yupp Framework</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px; "&gt;Amigos, como todos quienes siguen el grupo sabrán, en la última&lt;br /&gt;versión de Yupp (v0.1.6.7) se me coló un bug en la clase Executer que&lt;br /&gt;no permitía el correcto funcionamiento del framework. Si ven en un&lt;br /&gt;post previo adjunté la solución, esta solución también fue subida al&lt;br /&gt;SVN como todos los cambios que voy haciendo: &lt;a target="_blank" rel="nofollow" href="http://yupp.googlecode.com/svn/trunk/" style="color: rgb(0, 0, 204); "&gt;http://yupp.googlecode.com/svn/trunk/&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Ahora me encuentro integrando PostgreSQL al framework. La próxima&lt;br /&gt;versión será la 0.1.7 y aparte de  PostgreSQL vendrá con algunos&lt;br /&gt;frameworks Javascript adjuntos, con los cuales estoy haciendo pruebas&lt;br /&gt;de integración, como el editor WYSIWYG TinyMCE y el YUI Calendar.&lt;br /&gt;También hice una siplificación del Router, creando una sola clase y&lt;br /&gt;eliminando las clases Filter y Mapping (ahora todas sus&lt;br /&gt;funcionalidades están en la clase Router).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;En definitiva, la próxima versión podrá usarse con cualquiera de estos&lt;br /&gt;DBMS: MySQL, SQLite o PostgreSQL. &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2625183493145106835?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2625183493145106835/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/11/proxima-liberacion-de-yupp-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2625183493145106835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2625183493145106835'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/11/proxima-liberacion-de-yupp-framework.html' title='Próxima liberación de Yupp Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5591308409028715744</id><published>2009-11-01T17:31:00.003-02:00</published><updated>2009-11-01T17:36:29.136-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ejemplos'/><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Cómo crear un blog, paso a paso</title><content type='html'>He actualizado el documento de como crear un blog simple con Yupp PHP Framework para su última versión 0.1.6.7.&lt;br /&gt;&lt;br /&gt;El documento puede descargarse desde: &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La última versión del framework se puede descargar desde el mismo sitio y contiene la implementación del blog para poder ver el producto final de lo que se muestra en el documento.&lt;br /&gt;&lt;br /&gt;Cualquier duda o comentario la pueden colgar en nuestro grupo: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hasta pronto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5591308409028715744?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5591308409028715744/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/11/como-crear-un-blog-paso-paso.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5591308409028715744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5591308409028715744'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/11/como-crear-un-blog-paso-paso.html' title='Cómo crear un blog, paso a paso'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6466736494263924135</id><published>2009-10-27T00:12:00.003-02:00</published><updated>2009-10-27T00:23:04.857-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp portal'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Yupp Portal v0.1</title><content type='html'>Estamos muy contentos de poder liberar la primer versión del componente para crear portales web de Yupp Framework: &lt;a href="http://code.google.com/p/yupp-portal/"&gt;Yupp Portal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Para qué sirve Yupp Portal?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es una herramienta de alta productividad que permite crear un portal web completo en 5 minutos, sin necesidad de programación extra, solamente es necesario configurar la conexión con la base de datos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Este componente permite:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Administrar páginas:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crear páginas con un clic&lt;/li&gt;&lt;li&gt;Editar contenido con editor visual desde la web&lt;/li&gt;&lt;li&gt;Estados de páginas: Normal, Borrador, Deshabilitada, Oculta&lt;/li&gt;&lt;li&gt;Edición visual de items del menú principal&lt;/li&gt;&lt;li&gt;Edición visual de contenido fijo (por ejemplo banners que se muestran en todas las páginas)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Administración de usuarios:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Administración de roles&lt;/li&gt;&lt;li&gt;Crear/Editar/Eliminar/Aprobar usuarios&lt;/li&gt;&lt;li&gt;Registro de usuarios y aprobación con email en un clic&lt;/li&gt;&lt;li&gt;Login/Logout&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Tres roles disponibles&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Administrador: crea/edita páginas, modifica el menú, crea/edita usuarios&lt;/li&gt;&lt;li&gt;Editor: crea/edita páginas, modifica el menú&lt;/li&gt;&lt;li&gt;Usuario: ve páginas ocultas&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Por más información:&lt;a href="http://code.google.com/p/yupp-portal/"&gt; http://code.google.com/p/yupp-portal/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6466736494263924135?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6466736494263924135/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/10/yupp-portal-v01.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6466736494263924135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6466736494263924135'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/10/yupp-portal-v01.html' title='Yupp Portal v0.1'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-288143061211823336</id><published>2009-10-25T21:04:00.004-02:00</published><updated>2009-10-25T21:20:06.757-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.6.7'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Liberamos Yupp PHP Framework v0.1.6.7</title><content type='html'>Amigos, estamos muy contentos de anunciar la liberación de la nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las diferencias con respecto a la versión 0.1.6.4 son:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; 1. Correccion a YuppForm en el campo date.&lt;br /&gt;&lt;br /&gt; 2. Se agrega el método YuppController.componentControllersAction() que sirve para mostrar los controladores de un componente dado.&lt;br /&gt;&lt;br /&gt; 3. Se agrega la restricción "inList" que permite verificar si un valor está en una lista de valores dados.&lt;br /&gt;&lt;br /&gt; 4. Se agrega el metodo PersistentObject.hasFieldErrors( $attr ) para preguntar si existen errores en el valor de un atributo particular.&lt;br /&gt;&lt;br /&gt; 5. Se agrega el metodo PersistentObject.attributeDeclaredOnThisClass() para saber si un determinado atributo fue declarado en una clase. Sirve para derivar los nombres de las tablas intermedias en relaciones multiples.&lt;br /&gt;&lt;br /&gt; 6. Se agrega el helper DisplayHelper.yupp_select para crear selects html de forma sencilla.&lt;br /&gt;&lt;br /&gt; 7. Se corrije el metodo PersistentObject.validate() para que priorice la validacion de nulos y vacios sobre el resto de las validaciones. Ahora si un valor es nullable(true) y tambien debe ser email(), la validacion de un valor vacío devuelve true, antes fallaba en la validacion de email.&lt;br /&gt;&lt;br /&gt; 8. Correcciones menores en la clase Contraints.&lt;br /&gt;&lt;br /&gt; 9. El método PersistentObject.setProperties() ahora hace trim de los valores antes de asginarlos a los campos, esto es para evitar el llenado accidental de datos con espacios en blanco delante o detrás del valor ingresado.&lt;br /&gt;&lt;br /&gt; 10. Agregamos soporte para varios subdirectorios dentro del directorio de clases de modelo, para ordenar las clases cuando son muchas.&lt;br /&gt;   - Se corrige el metodo ModelUtils.getModelClasses() para poder crear subdirectorios en el directorio del modelo de un componente.&lt;br /&gt;   - Correccion al metodo YuppConventions::getModelPath().&lt;br /&gt;   - Correccion en PackageNames a una expresion regular para poder poner subdirectorios en el modelo.&lt;br /&gt;   - Correcciones en YuppLoader, en el cargado del modelo para permitir definir clases en subdirectorios.&lt;br /&gt;&lt;br /&gt; 11. Corrección en el método YuppConventions::relTableName(..) donde se creaba mal el nombre de la tabla intermedia para relaciones hasMany si se trataba de salvar una subclase y el atributo estaba declarado en su superclase.&lt;br /&gt;&lt;br /&gt; 12. Se corrige el helper Helpers.template() para mejorar el pasaje de parametros.&lt;br /&gt;&lt;br /&gt; 13. Correccion en el mapeo de herencia de tabla multiple para soportar modelos de relaciones y herencia complejos (PersistentManager, PersistentObject, MultipleTableInheritanceSupport).&lt;br /&gt;&lt;br /&gt; 14. Se corrije el metodo YuppController::getFlash() y se hace limpieza.&lt;br /&gt;&lt;br /&gt; 15. Corrección de la comparación de strings para generar consultas MySQL (donde el "=" no considera mayúsculas y minúsculas)&lt;br /&gt;   - Se reescribió completamente la evaluación de QUery que genera las consultas SQL, para que considera las particularidades de cada DBMS (MySQL, SQLite, PostgreSQL, etc)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Descargas:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TAG SVN:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/source/browse/#svn/tags/v0167"&gt;http://code.google.com/p/yupp/source/browse/#svn/tags/v0167&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cualquier duda, consulta o reporte de error pueden hacerla en el grupo google (opción "debates &gt; nueva entrada"):&lt;/span&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hasta pronto!&lt;br /&gt;&lt;br /&gt;Pablo Pazos Gutiérrez&lt;br /&gt;Líder de proyecto&lt;br /&gt;Yupp PHP Framework&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-288143061211823336?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/288143061211823336/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/10/liberamos-yupp-php-framework-v0167.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/288143061211823336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/288143061211823336'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/10/liberamos-yupp-php-framework-v0167.html' title='Liberamos Yupp PHP Framework v0.1.6.7'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2392870154723377984</id><published>2009-09-17T12:49:00.003-03:00</published><updated>2009-09-17T12:59:23.319-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='compresion'/><category scheme='http://www.blogger.com/atom/ns#' term='herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Herramientas para comprimir codigo javascript</title><content type='html'>Para crear sistemas web muchas veces me veo utilizando librerías y scripts javscript que encuentro en internet. Muchos de estos pesan entre 150 y 300 Kb, haciendo que el tiempo de carga de las páginas web sea muy lento. Por suerte existen herramientas que nos permiten comprimir esas librerías y dejarlas de un tamaño aproximadamente de un 30% del tamaño original.&lt;br /&gt;&lt;br /&gt;En general estas herramientas tienen un cuadro de texto donde se debe pegar el código javascript a comprimir, elegir algunas opciones de compresión, luego vemos el código comprimido y la razón de compresión (tamaño original / comprimido). Distintas opciones de compresión harán que tu código quede más reducido aún.&lt;br /&gt;&lt;br /&gt;Aquí dejo algunos links a estas herramientas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://javascriptcompressor.com/"&gt;http://javascriptcompressor.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://fmarcia.info/jsmin/test.html"&gt;http://fmarcia.info/jsmin/test.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Feliz compresión!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2392870154723377984?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2392870154723377984/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/09/herramientas-para-comprimir-codigo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2392870154723377984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2392870154723377984'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/09/herramientas-para-comprimir-codigo.html' title='Herramientas para comprimir codigo javascript'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7093449868466849762</id><published>2009-08-03T20:23:00.004-03:00</published><updated>2009-08-03T20:38:37.884-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='problemas'/><category scheme='http://www.blogger.com/atom/ns#' term='subdominio'/><category scheme='http://www.blogger.com/atom/ns#' term='session'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='errores'/><title type='text'>PHP y los problemas con la sesión</title><content type='html'>PHP tiene un problema (depende de si se lo considera como tal) con las sesiones cuando se acceden a subdominios del sitio actual.&lt;br /&gt;&lt;br /&gt;Hoy particularmente me sucedió que tenía un sitio &lt;a href="http://femisaluddigital.net.uy"&gt;http://femisaluddigital.net.uy&lt;/a&gt; el cual corre con el componente Yupp Portal. En una página del portal había un link a otra página pero el dominio del link era a http://www.femisaluddigital.net.uy/...., notar el WWW adelante.&lt;br /&gt;&lt;br /&gt;Entonces, cuando si usuario está logueado en el sitio &lt;a href="http://femisaluddigital.net.uy"&gt;http://femisaluddigital.net.uy&lt;/a&gt; e intenta acceder al link que empieza con www la sesión se pierde y el usuario aparece como no logueado, con los problemas que esto trae (el usuario debe volver a loguearse).&lt;br /&gt;&lt;br /&gt;Entonces las opciones serían:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Que los links a páginas locales se armen dinámicamente considerando la URL actual (viendo si tiene o no www al principio).&lt;/li&gt;&lt;li&gt;Guardar la sesión en la base de datos y que tanto para el dominio que empieza con www como para el que no tiene www, la sesión se acceda de la misma forma.&lt;/li&gt;&lt;/ul&gt;Hay que tener cuidado que para otro subdominio que no sea www (por ejemplo subdominio.femisaluddigital.ney.uy) tal vez quiera acceder a otra sesión, no a la misma del dominio principal. Esto puede ser un problema y el proceso de guardar y pedir información de la sesión debería ser lo suficientemente inteligente como para distinguir casos, nada muy complicado.&lt;br /&gt;&lt;br /&gt;Con este post espero ayudar a otros que tengan el mismo problema. Hay algunos comentarios sobre el tema en la página de documentación de PHP sobre las sesiones, donde también indica que ante un cambio de protocolo (HTTP a HTTPS) la sesión también es eliminada. &lt;a href="http://us2.php.net/manual/en/book.session.php"&gt;http://us2.php.net/manual/en/book.session.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7093449868466849762?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7093449868466849762/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/08/php-y-los-problemas-con-la-sesion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7093449868466849762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7093449868466849762'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/08/php-y-los-problemas-con-la-sesion.html' title='PHP y los problemas con la sesión'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1705875526510037751</id><published>2009-07-08T02:09:00.002-03:00</published><updated>2009-07-08T02:12:27.749-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='historia'/><category scheme='http://www.blogger.com/atom/ns#' term='articulos'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Historia del User Agent</title><content type='html'>Navegando por internet buscando información acerca de HTTP (estoy estudiando para un próximo exámen de Introducción a las Redes de Computadoras), encontré un artículo muy interesante al respecto de la historia del User Agent que no tiene desperdicio alguno:&lt;br /&gt;&lt;br /&gt;http://webaim.org/blog/user-agent-string-history/&lt;br /&gt;&lt;br /&gt;Enjoy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1705875526510037751?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1705875526510037751/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/07/historia-del-user-agent.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1705875526510037751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1705875526510037751'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/07/historia-del-user-agent.html' title='Historia del User Agent'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1669585488896000413</id><published>2009-06-06T02:59:00.004-03:00</published><updated>2009-06-06T03:43:25.184-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curiosidades'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='tetris'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='geeks'/><category scheme='http://www.blogger.com/atom/ns#' term='cultura'/><title type='text'>Feliz cumpleaños Tetris!</title><content type='html'>Hoy es un día muy especial para todos los amantes del Tetris, el legendario juego creado por Alexey Pajitnov. El juego combina agilidad, estrategia y simplicidad como ningún otro juego en la historia de los video juegos, por algo cuando decimos "Tetris" todos saben de que estamos hablando. Tetris es más que un juego, este trascendió la pantalla para convertirse en parte de la cultura de los que vivimos nuestra adolescencia en los 90's y aún hoy vivimos como un nuevo reto cada vez que volvemos a jugar al Tetris.&lt;br /&gt;&lt;br /&gt;Desde aquí nuestro tributo.&lt;br /&gt;&lt;br /&gt;Más información:&lt;br /&gt;&lt;a href="http://www.rtve.es/noticias/20090602/tetris-cumple-anos/279442.shtml"&gt;http://www.rtve.es/noticias/20090602/tetris-cumple-anos/279442.shtml&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1669585488896000413?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1669585488896000413/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/06/feliz-cumpleanos-tetris.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1669585488896000413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1669585488896000413'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/06/feliz-cumpleanos-tetris.html' title='Feliz cumpleaños Tetris!'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-495346741038491038</id><published>2009-06-02T00:25:00.002-03:00</published><updated>2009-06-02T00:30:57.991-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Liberamos la nueva versión de Yupp! v0.1.6.4</title><content type='html'>Estamos muy contentos de anunciar la liberación de la nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;Estaos agradecidos con los usuarios que últimamente se han interesado en el proyecto, enviándonos sus comentarios, dudas y reportando errores, y es gracias a ellos que podemos seguir mejorando.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hemos corregido y mejorado muchas cosas desde la versión anterior, entre ellas:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Se corrigió y mejoró el web flow.&lt;br /&gt;2. Se agrego el metodo 'validateOnly' a la clase PersistentObject.&lt;br /&gt;3. Correcciones para CRUD y vistas dinamicas.&lt;br /&gt;4. Cambia el nombre de la clase ControllerFilter2 por YuppControllerFilter.&lt;br /&gt;5. Se agregó addslashes en los métodos insert_query y update_query de DAL y stripslashes en PersistentManager, para resolver problemas con caracteres de  control de MySQL.&lt;br /&gt;6. Se agregó el helper "pager" para crear links de paginación de registros para los listados.&lt;br /&gt;7. Se agrego el helper orderBy para crear columnas ordenables en los listados.&lt;br /&gt;8. Corrección de restricción de email.&lt;br /&gt;9. Ya no es necesario pasarle $this-&gt;params al método "render" de YuppController:&lt;br /&gt;- Antes: return $this-&gt;render("show", &amp;amp;$this-&gt;params);&lt;br /&gt;- Ahora: return $this-&gt;render("show");&lt;br /&gt;10. Corrección del helper "locale_chooser" que generaba XHTML inválido.&lt;br /&gt;11. Se agrega al paginador los params de ordenamiento por columnas en los listados (helper "orderBy") si los hay.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Descargas:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TAG SVN:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/source/browse/#svn/tags/v0164"&gt;http://code.google.com/p/yupp/source/browse/#svn/tags/v0164&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cualquier duda, consulta, crítica o reporte de error pueden hacerla en el grupo google (opción "debates &gt; nueva entrada"):&lt;/span&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hasta pronto!&lt;br /&gt;&lt;br /&gt;Pablo Pazos Gutiérrez&lt;br /&gt;Líder de proyecto&lt;br /&gt;Yupp PHP Framework&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-495346741038491038?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/495346741038491038/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/06/liberamos-la-nueva-version-de-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/495346741038491038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/495346741038491038'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/06/liberamos-la-nueva-version-de-yupp.html' title='Liberamos la nueva versión de Yupp! v0.1.6.4'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7048598453839828632</id><published>2009-04-23T11:33:00.001-03:00</published><updated>2009-04-23T11:35:38.780-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='nerds'/><category scheme='http://www.blogger.com/atom/ns#' term='geeks'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Como ser un buen programador</title><content type='html'>Este sitio presenta una guía paso a paso de cómo ser un buen programador :D&lt;br /&gt;&lt;br /&gt;http://secretgeek.net/howtobeaprogrammer.asp&lt;br /&gt;&lt;br /&gt;Que lo disfruten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7048598453839828632?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7048598453839828632/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/04/como-ser-un-buen-programador.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7048598453839828632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7048598453839828632'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/04/como-ser-un-buen-programador.html' title='Como ser un buen programador'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5031482259892850252</id><published>2009-04-02T13:49:00.005-03:00</published><updated>2009-04-02T15:27:44.127-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.6.3'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Nueva versión de Yupp PHP Framework v0.1.6.3</title><content type='html'>En esta nueva versión estabilizamos aún más el framework, probándolo con distintas versiones de PHP. Además se corrigieron bugs y se mejoraron algunas características.&lt;br /&gt;&lt;br /&gt;Este es el detalle del trabajo realizado:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Corregido que si se crean urls con parametros llamados param_1, param_2, etc, esos se pongan en la propia url sin ?param_1&amp;amp;...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Correccion de clase Filter, el metodo que procesa los params dependía de la cantidad de directorios en la ruta a donde está instalado Yupp Framework, ahora es independiente de donde se instale el framework.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se quitó devolver la referencia (&amp;amp;) en YuppSession::get porque da error cuando se devuelve NULL.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Correción en clase Helpers: correccion de compatibilidad con PHP 5.2.8.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Corregido el flash que se perdía cuando se hace redirect, los valores se mandan en la url.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Resuelto un pequeño bug en la clase Logger.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se integró la funcionalidad de submit de forms via ajax, utiliza el plugin forms de jQuery.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;YuppDateTime: Se agrega operacion para manipular fechas.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Nueva clase YuppForm2 que suplanta a YuppForm y acepta submit por ajax. Se deja YuppForm hasta la próxima liberación. Se agregó el campo "select" y la forma de pasarle los parámetros a los campos ahora es mediante un array asociativo, y los parámetros desconocidos son ingresados en la tag HTML generada como atributo de la misma.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se hicieron grandes modificaciones en cómo se definen y ejecutan los filtros de controladores, estos filtros sirven para definir acciones que se ejecutan antes o después de las acciones de los controladores según ciertas reglas (se pueden definir filtros por componente, por controlador, por accion, todas las acciones menos una, etc).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Correccion de metodo PersistentObject.hasErrors, tenia un error en la condicion. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Renombrado de archivo de arranque a components.{componente}.Bootstrap.script.php &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Correccion de bug en PersistentManager::generateAll(), se agregaban las restricciones para atributos que todavía no se habían agregado.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Notas de versión completas: &lt;a href="http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv0163"&gt;http://code.google.com/p/yupp/wiki/YuppPHPFrameworkv0163&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para descargar esta versión se puede hacer directamente desde el sitio de google code o mediante el SVN:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/source/checkout"&gt;http://code.google.com/p/yupp/source/checkout&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cualquier duda o sugerencia será bienvenida en nuestro grupo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Para acceder a la última documentación:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A/C Pablo Pazos Gutierrez&lt;br /&gt;Líder de Proyecto&lt;br /&gt;Yupp PHP Framework&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5031482259892850252?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5031482259892850252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/04/nueva-version-de-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5031482259892850252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5031482259892850252'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/04/nueva-version-de-yupp-php-framework.html' title='Nueva versión de Yupp PHP Framework v0.1.6.3'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8427488223393984071</id><published>2009-03-11T11:44:00.003-03:00</published><updated>2009-03-11T12:06:34.338-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><title type='text'>Prototype vs jQuery</title><content type='html'>&lt;br/&gt;Navegando en internet encontré esta excelente presentación con la comparación de estos dos grandes de Javascript. Aquí se las dejo:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMzY3ODI2MjIxMjQmcHQ9MTIzNjc4MjY*MDg4OSZwPTEwMTkxJmQ9Jmc9MiZ*PSZvPWNhMzFkMWE2ZTYwNTQ4Njc4YTAwNTkxYWYyZjkxOGJk.gif" /&gt;&lt;div style="width:425px;text-align:left" id="__ss_145849"&gt;&lt;object style="margin:0px" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=prototype-jquery-going-from-one-to-the-other-1193346036472971-5"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=prototype-jquery-going-from-one-to-the-other-1193346036472971-5" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/remy.sharp/prototype-jquery-going-from-one-to-the-other" title="View this slideshow on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8427488223393984071?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8427488223393984071/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/03/prototype-vs-jquery.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8427488223393984071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8427488223393984071'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/03/prototype-vs-jquery.html' title='Prototype vs jQuery'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5666228747844907991</id><published>2009-03-10T14:30:00.003-03:00</published><updated>2009-03-10T14:44:34.579-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='manejo de errores'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Transformar errores y warnings de PHP en excepciones</title><content type='html'>Hoy estuve probando la funcionalidad de envío de email de PHP y como tenía el servidor de mail mal configurado en el PHP.INI, mi aplicación me mostraba un WARNING. El problema es que el WARNING no se tira como una excepción, o sea que no se le puede hacer TRY/CATCH, por lo tanto tuve que buscar como hacer para que estas WARNINGS se pudieran atrapar como cualquier excepción, el resultado es el siguiente:&lt;br /&gt;&lt;br /&gt;En PHP existe una función llamada &lt;span class="methodname"&gt;&lt;b&gt;set_error_handler&lt;/b&gt;, la cual me permite establecer una función mía para manejar los errores de PHP (PHP tiene distintos tipos de errores y puedo definir distintos manejadores para cada tipo de error).&lt;br /&gt;&lt;br /&gt;Entonces, para que todos los errores de PHP (incluyendo WARNINGS) sean enviados a mi manejador (para arrojar una excepción en su lugar) es implementado con el siguiente código:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;set_error_handler&lt;/span&gt;("my_warning_handler", E_ALL);&lt;br /&gt;&lt;br /&gt;function &lt;span style="font-weight: bold;"&gt;my_warning_handler&lt;/span&gt;($errno, $errstr, $errfile, $errline, $errcontext) {&lt;br /&gt;   throw new Exception( $errstr );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Seleccionando E_ALL, cualquier tipo de error es enviado a mi función para arrojar una excepción.&lt;br /&gt;&lt;br /&gt;Los distintos tipos de errores que tiene PHP son:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;E_ALL&lt;/li&gt;&lt;li&gt;E_WARNING&lt;/li&gt;&lt;li&gt; E_ERROR&lt;/li&gt;&lt;li&gt;E_PARSE&lt;/li&gt;&lt;li&gt;E_CORE_ERROR&lt;/li&gt;&lt;li&gt;E_CORE_WARNING&lt;/li&gt;&lt;li&gt;E_COMPILE_ERROR&lt;/li&gt;&lt;li&gt;E_COMPILE_WARNING&lt;/li&gt;&lt;li&gt;E_STRICT&lt;/li&gt;&lt;/ul&gt;Por más información sobre &lt;span class="methodname"&gt;&lt;span style="font-weight: bold;"&gt;set_error_handler&lt;/span&gt;&lt;/span&gt; y manejo de errores en PHP:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/function.set-error-handler.php"&gt;http://www.php.net/manual/en/function.set-error-handler.php&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.php.net/manual/en/ref.errorfunc.php"&gt;http://www.php.net/manual/en/ref.errorfunc.php&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Espero que les sirva.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5666228747844907991?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5666228747844907991/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/03/transformar-errores-y-warnings-de-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5666228747844907991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5666228747844907991'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/03/transformar-errores-y-warnings-de-php.html' title='Transformar errores y warnings de PHP en excepciones'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8509122435688283363</id><published>2009-03-06T16:41:00.001-02:00</published><updated>2009-03-06T16:43:19.816-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Liberación de PHP v5.2.9</title><content type='html'>Aquí el link a la página oficial del anuncio:&lt;br /&gt;&lt;a href="http://www.php.net/releases/5_2_9.php"&gt;http://www.php.net/releases/5_2_9.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aquí la página con los cambios por versión:&lt;br /&gt;&lt;a href="http://www.php.net/ChangeLog-5.php#5.2.9"&gt;http://www.php.net/ChangeLog-5.php#5.2.9&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8509122435688283363?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8509122435688283363/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/03/liberacion-de-php-v529.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8509122435688283363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8509122435688283363'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/03/liberacion-de-php-v529.html' title='Liberación de PHP v5.2.9'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3659184319940289696</id><published>2009-02-28T15:31:00.005-02:00</published><updated>2009-03-01T14:59:46.592-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='v0.1.6.2'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Nueva versión de Yupp PHP Framework v0.1.6.2</title><content type='html'>Como anunciábamos ayer, hoy liberamos la versión 0.1.6.2 de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;Esta es una versión de estabilización, donde se corrigieron muchos bugs y se mejoraron algunas características. Este es el detalle del trabajo realizado:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Correccion en PersistentManager.generate() para que genere todas las tablas intermedias con la columna "ord" que se utiliza cuando el atributo hasMany es de tipo LIST, cuando es de tipo SET o COLLECTION, no se toma en cuenta.&lt;/li&gt;&lt;li&gt;Se agregó soporte para incluir CSS o imagenes desde un componente. Para esto se modificó el helper "css" y se agregó el helper "img".&lt;/li&gt;&lt;li&gt;Corrección al helper "errors", lanzaba un error si el elemento no tenía errores.&lt;/li&gt;&lt;li&gt;Correcciön al método "hasErrors" de PersistentObject, que no verificaba que el campo errors fuera NULL.&lt;/li&gt;&lt;li&gt;Se agrega el constructor para la condicion Not Equal a la clase Condition.&lt;/li&gt;&lt;li&gt;Correccion del metodo addOrder de la clase Criteria2.&lt;/li&gt;&lt;li&gt;Hay un problema con la extraccion de los parametro de la url: http://localhost:8081/YuppPHPFramework/portal/page/display/mi_pagina_bbb/sdfda/asdf?as=sdfg&lt;ul&gt;&lt;li&gt;El tema fue que al intriducir el tema del ruteo, UlrProcessing, quien antes hacia el trabajo de crear los params de la url, no se llama mas, y ahora el ruteo solo toma params de POST y GET y no considera la url.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Varias correcciones para compatibilizar Yupp con versiones anteriores de PHP (PHP 5.2.0 y 5.2.1).&lt;/li&gt;&lt;li&gt;Se agregó el método firstToUpper a core.basic.String.&lt;/li&gt;&lt;li&gt;Se agregaron los siguientes campos a la configuración de Yupp (clase YuppConfig):&lt;ul&gt;&lt;li&gt;currentMode: indica el modo de ejecucion de la aplicacion (development, production o testing).&lt;/li&gt;&lt;li&gt;modeDefaultMapping: indica que accion debe ejecutarse por defecto, dependiendo del modo actual, al acceder a la aplicación.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Se agregó el método addCustomParams en la clase routing.Filter&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Notas de versión completas: &lt;a href="http://code.google.com/p/yupp/wiki/YuppLiberacionV0162"&gt;http://code.google.com/p/yupp/wiki/YuppLiberacionV0162&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para descargar esta versión se puede hacer directamente desde el sitio de google code o mediante el SVN:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/source/checkout"&gt;http://code.google.com/p/yupp/source/checkout&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cualquier duda o sugerencia será bienvenida en nuestro grupo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Para acceder a la última documentación:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A/C Pablo Pazos Gutierrez&lt;br /&gt;Líder de Proyecto&lt;br /&gt;Yupp PHP Framework&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3659184319940289696?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3659184319940289696/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/02/nueva-version-de-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3659184319940289696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3659184319940289696'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/02/nueva-version-de-yupp-php-framework.html' title='Nueva versión de Yupp PHP Framework v0.1.6.2'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1175973346413673247</id><published>2009-02-28T00:51:00.001-02:00</published><updated>2009-02-28T00:58:14.839-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Modificada la hoja de ruta hacia Yupp PHP Framework v0.2.0</title><content type='html'>Modificamos la hoja de ruta por la gran cantidad de problemas que detectamos, corregimos y otras cosas que agregamos. Mañana (sábado 28 de febrero) estaremos liberando la versión 0.1.6.2 del framework. Los últimos cambios ya están en el SVN del grupo de google: &lt;a target="_blank" rel="nofollow" href="http://code.google.com/p/yupp/source/checkout"&gt;http://code.google.com/p/yupp/source/checkout&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;La modificación fue correr todas las liberaciones 0.1.6.x y liberar como 0.1.6.2 el framework con las últimas correcciones, lo que consideramos un paso gigante en cuanto a estabilización del framework se trata.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Si bien esperamos que Yupp v 0.2.0 sea la primer liberación estable para producción, en este momento estamos utilizando Yupp en producción para un sistema de CMS muy simple, este sistema será liberado una vez completado con el nombre de Yupp Portal y apuntará a la generación de portales de forma rápida y 100% actualizable via web (cero código HTML/PHP para el usuario).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pablo Pazos Gutierrez&lt;br /&gt;Líder de proyecto&lt;br /&gt;Yupp PHP Framework&lt;br /&gt;&lt;/p&gt;&lt;p&gt;------&lt;br /&gt;&lt;/p&gt;Haz clic en &lt;a target="_blank" rel="nofollow" href="http://groups.google.com/group/yuppframeworkphp/web/hoja-de-ruta-hacia-v0-2-0"&gt;http://groups.google.com/group/yuppframeworkphp/web/hoja-de-ruta-hacia-v0-2-0&lt;/a&gt;&lt;br /&gt;Si haciendo clic no se activa, copia el enlace y pégalo en la barra de&lt;br /&gt;direcciones de tu navegador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1175973346413673247?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1175973346413673247/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/02/modificada-la-hoja-de-ruta-hacia-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1175973346413673247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1175973346413673247'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/02/modificada-la-hoja-de-ruta-hacia-yupp.html' title='Modificada la hoja de ruta hacia Yupp PHP Framework v0.2.0'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-499680149952470408</id><published>2009-02-12T14:18:00.004-02:00</published><updated>2009-02-12T14:24:43.076-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='urls'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Herramienta de SEO para generar urls amigables</title><content type='html'>Esta herramienta "URL Rewriting Tool" nos ayuda a generar urls amigables para que los buscadores puedan encontrar términos relacionados con el tema del sitio en la url, lo que ayuda a que nuestro sitio se posicione mejor en los resultados del buscador.&lt;br /&gt;&lt;br /&gt;Con URL Rewriting Tool podemos generar desde una url dinámica, una url que parece estática y a su vez genera la regla de MOD_REWRITE que consume esa url e internamente genera el pedido a la url dinámica.&lt;br /&gt;&lt;br /&gt;Dejo el link: &lt;a href="http://www.webconfs.com/url-rewriting-tool.php"&gt;http://www.webconfs.com/url-rewriting-tool.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feliz url rewriting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-499680149952470408?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/499680149952470408/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/02/herramienta-de-seo-para-generar-urls.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/499680149952470408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/499680149952470408'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/02/herramienta-de-seo-para-generar-urls.html' title='Herramienta de SEO para generar urls amigables'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1744080073615634946</id><published>2009-02-04T00:45:00.004-02:00</published><updated>2009-02-04T01:03:48.817-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='descargas'/><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>PHP 5.3.0 ahora esta en beta!</title><content type='html'>Esta beta de PHP 5.3.0 anticipa que dentro de poco tendremos la liberación de la versión estable 5.3.0 de PHP, la cual trae nuevas (y esperadas hace mucho tiempo) características.&lt;br /&gt;&lt;br /&gt;Las características más importantes de PHP 5.3.0 son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Soporte para namespaces, un viejo problema de PHP, para esto se agrega la keyword "use".&lt;/li&gt;&lt;li&gt;Soporte para cláusulas (o funciones lamda).&lt;/li&gt;&lt;li&gt;Soporte de "Late Static Bindings", mejora la POO (mejora herencia y polimorfismo. que en realidad es como funciona cualquier otro lenguaje OO). Sobre esta característica hice un post hace tiempo: &lt;a href="http://yuppframework.blogspot.com/2008/03/problemas-al-acceder-al-nombre-de-la.html"&gt;http://yuppframework.blogspot.com/2008/03/problemas-al-acceder-al-nombre-de-la.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Driver nativo para MySQL, ya no será una extensión.&lt;/li&gt;&lt;li&gt;Soporte para constantes de clase.&lt;/li&gt;&lt;/ul&gt;Dejo algunos links para completar la informacion:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.programania.net/php/novedades-en-php-53/"&gt;http://www.programania.net/php/novedades-en-php-53/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.programacionweb.net/noticias/php-5-3-soportara-clausuras/"&gt;http://www.programacionweb.net/noticias/php-5-3-soportara-clausuras/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/article/whats-new-php-5-3/"&gt;http://www.sitepoint.com/article/whats-new-php-5-3/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://php.oregonstate.edu/manual/en/language.oop5.late-static-bindings.php"&gt;http://php.oregonstate.edu/manual/en/language.oop5.late-static-bindings.php&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://devzone.zend.com/article/4215-PHP-5.3-Beta-1-has-been-released"&gt;http://devzone.zend.com/article/4215-PHP-5.3-Beta-1-has-been-released&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1744080073615634946?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1744080073615634946/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/02/php-530-ahora-esta-en-beta.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1744080073615634946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1744080073615634946'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/02/php-530-ahora-esta-en-beta.html' title='PHP 5.3.0 ahora esta en beta!'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2427272284851707932</id><published>2009-01-30T17:37:00.003-02:00</published><updated>2009-01-30T17:45:54.938-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Liberación de estabilización Yupp Framework PHP v0.1.6.1</title><content type='html'>Esta es una versión de estabilización de la versión 0.1.6 de Yupp PHP Framework, la cual contiene pequeños cambios y correcciones con respecto a v0.1.6.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Agregado de la verificación de existencia de una vista y de un layout, que en caso de no existir, se lanza una excepción que es mostrada de forma amigable al usuario.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Correcciones y ampliacion de funcionalidades de la clase YuppForm para generar formularios en las vistas.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se modifico el helper JS para que pueda tomar javascripts de  componentes particulares, ahora acepta un nuevo parámetro "component" que es el nombre del componente dentro del cual está alojado el archivo javascript a incluir en la vista.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;Descargas: &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por consultas o sugerencias: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;br /&gt;&lt;/a&gt;Documentación: &lt;a href="http://www.simplewebportal.net/host/1021.htm"&gt;http://www.simplewebportal.net/host/1021.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2427272284851707932?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2427272284851707932/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/01/liberacion-de-estabilizacion-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2427272284851707932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2427272284851707932'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/01/liberacion-de-estabilizacion-yupp.html' title='Liberación de estabilización Yupp Framework PHP v0.1.6.1'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5254259299045230028</id><published>2009-01-08T14:57:00.003-02:00</published><updated>2009-01-08T15:22:41.223-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Nueva versión de Yupp PHP Framework</title><content type='html'>Tengo el agrado de anunciar la liberación de la nueva versión de Yupp PHP Framework.&lt;br /&gt;&lt;br /&gt;En su versión 0.1.6, Yupp Framework presenta los siguientes agregados:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Se agregaron tipos para los atributos hasMany, ahora se pueden generar con tipos  LIST, COLECTION o SET. Con LIST, los elementos en la colección se mantienen ordenados, esto se logra almacenando un nuevo atributo "ORD" que guarda el lugar del elemento en la lista. COLECTION es el comportamiento por defecto, no concerva orden y se permiten repetidos. SET es una colección donde no se permiten elementos repetidos. Estamos pensando en agregar el tipo ORDERED_SET donde no se permitan repetidos y se concerve el orden (se comporta como SET y como LIST).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se agregó una pantalla de administración en donde:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Permite generar las tablas para el modelo de datos existente (de todos los componentes).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Permite ejecutar el script de bootstrap de cada componente (este script es donde se inicializan los datos que el componente necesita en la base de datos).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Permite ingresar a los controladores existentes (igual que en v0.1.5)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Permite ver estadísticas de líneas de código del framework, totales y por clase.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Se realizaron pruebas con "custom validators" que son validadores de datos o restricciones que se pueden poner sobre los atributos de las clases del modelo de datos, y que pueden ser creadas por el usuario y no están ya implementadas en Yupp. En el archivo "blog.model.Usuario.class.php" se agregó la declaración de una clase "EmailsStartsWithName", la cual es una restricción agregada por el usuario para validar que el atributo"email" empiece con el nombre del usuario, que está en el atributo "nombre". De la misma forma se puede crear cualquier otro "custom validator". Agregaremos una guía de esto a la documentación: &lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;Página de descargas: &lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;Documentación: &lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;Grupo Google: &lt;a href="http://groups.google.com/group/yuppframeworkphp/"&gt;http://groups.google.com/group/yuppframeworkphp/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5254259299045230028?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5254259299045230028/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2009/01/nueva-versin-de-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5254259299045230028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5254259299045230028'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2009/01/nueva-versin-de-yupp-php-framework.html' title='Nueva versión de Yupp PHP Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5360513199845038258</id><published>2008-12-13T12:12:00.006-02:00</published><updated>2008-12-13T14:07:45.763-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='presentaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='jiio eventos'/><title type='text'>Presentacion de Yupp PHP Framework en JIIO 2008</title><content type='html'>&lt;p&gt;Esta es la presentación sobre Yupp Framework PHP hecha en las Jornadas de Informática e investigación Operativa de la Facultad de Ingeniería de Montevideo, Uruguay, que la disfruten.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_842705"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/pablitox/yupp-php-framework-presentation?type=powerpoint" title="Yupp PHP Framework"&gt;Yupp PHP Framework&lt;/a&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=yuppphpframeworkjiio20082-1229182615266615-1&amp;amp;stripped_title=yupp-php-framework-presentation"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=yuppphpframeworkjiio20082-1229182615266615-1&amp;amp;stripped_title=yupp-php-framework-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View SlideShare &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/pablitox/yupp-php-framework-presentation?type=powerpoint" title="View Yupp PHP Framework on SlideShare"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/framework"&gt;framework&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/mvc"&gt;mvc&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/php"&gt;php&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;También puede ser descargada &lt;a href="http://pablo.swp.googlepages.com/presentaciones"&gt;aquí&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5360513199845038258?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5360513199845038258/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/12/presentacion-de-yupp-php-framework-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5360513199845038258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5360513199845038258'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/12/presentacion-de-yupp-php-framework-en.html' title='Presentacion de Yupp PHP Framework en JIIO 2008'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6932053480211417377</id><published>2008-12-13T11:31:00.003-02:00</published><updated>2008-12-13T11:53:15.146-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='presentaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='conferencias'/><title type='text'>Yupp Framework en Barcelona PHP Conference #2</title><content type='html'>Hoy, navegando por internet, me he topado con el sitio de &lt;a href="http://phpbarcelona.org"&gt;PHP Barcelona&lt;/a&gt;, en una zona del sitio he encontrado varias presentaciones de la última &lt;a href="http://phpbarcelona.org/presentaciones-de-la-barcelona-php-conference-2"&gt;PHP Conference&lt;/a&gt;, y para mi asombro en &lt;a href="http://www.slideshare.net/arnoschn/rasmus-think-again-agile-framework-happy-php-developer-presentation-625122?type=powerpoint"&gt;una de las presentaciones&lt;/a&gt; aparece Yupp Framework PHP, en las páginas 43 y 44 de la presentación está el logo de Yupp.&lt;br /&gt;&lt;br /&gt;Ahora viene la crítica, quien hizo la presentación es Arno Schneider, core team member de Akelos Framework.  En la página 44 de la presentación se cataloga a Yupp como "weaker PHP", si bien esto no me ofendió (bueno, Yupp aparece al lado de grandes como &lt;a href="http://framework.zend.com/"&gt;Zend&lt;/a&gt;, &lt;a href="http://www.cakephp.org/"&gt;Cake&lt;/a&gt;, &lt;a href="http://akelos.org/"&gt;Akelos&lt;/a&gt;, &lt;a href="http://www.symfony-project.org/"&gt;Symphony&lt;/a&gt;, etc), mi actitud fue enviarle un mail muy respetuoso donde le consultaba porque consideraba que Yupp era "MVC débil", este email nunca fue contestado, y las razones de que Yupp Framework sea catalogado como "débil" por este señor, serán un eterno misterio. La crítica más dura se le puede hacer por el lado de lo rigurosa de la investigación que haya realizado este señor, nunca me contactó para preguntarme nada del framework, simplemente lo vio y lo catalogó. ¿Donde está la objetividad?, me sigo pregutando. Bien cabe destacar que Yupp se encuentra en etapa de desarrollo, que recién vamos por la versión 0.1.5, mientras muchos de los frameworks listados ahí  ya pasan el 1.x.&lt;br /&gt;&lt;br /&gt;Pese a todo, sigo apostando a este proyecto, el framework cada día toma más forma, se hace más robusto y estable, se amplía en funcionalidad, etc, etc. Esperemos a llegar a 1.x y ver si Akelos no queda "weaker" al lado de Yupp (tal vez lo catalogue así en alguna presentación futura :), creo que es el miedo de los grandes, repitiendo siempre el mismo verso de "reinventar la rueda" de que algún desarrollador invente una rueda mejor que la suya y lo saque del mercado...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6932053480211417377?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6932053480211417377/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/12/yupp-framework-en-barcelona-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6932053480211417377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6932053480211417377'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/12/yupp-framework-en-barcelona-php.html' title='Yupp Framework en Barcelona PHP Conference #2'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8689003361247577385</id><published>2008-11-24T12:37:00.002-02:00</published><updated>2008-11-24T12:47:11.100-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='jiio'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Yupp PHP Framework dice presente en las JIIO</title><content type='html'>Este miércoles 26 de noviembre estaremos dando una charla sobre Yupp en las &lt;a href="http://www.fing.edu.uy/inco/eventos/jiio/"&gt;Jornadas de Informática e Investigación Operativa&lt;/a&gt;, organizada por el &lt;a href="http://www.fing.edu.uy/inco"&gt;Instituto de Computación&lt;/a&gt; de la &lt;a href="http://www.fing.edu.uy/"&gt;Facultad de Ingeniería&lt;/a&gt;, Montevideo, Uruguay.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jS3wcH3mkBM/SSq9-fSI4xI/AAAAAAAABjo/pO9QreC8RQg/s1600-h/maps_google_com_fing.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 354px;" src="http://2.bp.blogspot.com/_jS3wcH3mkBM/SSq9-fSI4xI/AAAAAAAABjo/pO9QreC8RQg/s400/maps_google_com_fing.png" alt="" id="BLOGGER_PHOTO_ID_5272235195037704978" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8689003361247577385?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8689003361247577385/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/11/yupp-php-framework-dice-presente-en-las.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8689003361247577385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8689003361247577385'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/11/yupp-php-framework-dice-presente-en-las.html' title='Yupp PHP Framework dice presente en las JIIO'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jS3wcH3mkBM/SSq9-fSI4xI/AAAAAAAABjo/pO9QreC8RQg/s72-c/maps_google_com_fing.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3900248365135404404</id><published>2008-11-24T12:24:00.002-02:00</published><updated>2008-11-24T12:30:44.736-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curiosidades'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Búsqueda de emails en gmail</title><content type='html'>&lt;a href="http://www.gmail.com/"&gt;GMail&lt;/a&gt; es sin duda uno de los mejores sistemas de la web en sí, y uno de los mejores sistemas de email.&lt;br /&gt;&lt;br /&gt;Una curiosidad interesante, hoy se me presentó la necesidad de buscar emails enviados desde el buscador (si ya se que hay una sessión de emails enviados, pero igual quise probar el buscador), al notar que los emails enviados por mi tienen un "me" en el sender en la versión en inglés (la que uso), intenté buscar por "me", y el resultado fue que no encontró ningún email enviado por mí.&lt;br /&gt;&lt;br /&gt;Aquí va la crítica: como desarrollador de software, pienso que si una página tiene un buscador, debe dejarte buscar en la información como te la muestra, si me muestra "me" en lugar de mi usuario de gmail "pablo.swp", pienso que debería dejarme buscar por "me". Ahora, si busco por "pablo" encuentra en seguida todos los emails enviados por mi.&lt;br /&gt;&lt;br /&gt;Simplemente una curiosisdad de &lt;a href="http://www.gmail.com"&gt;gmail&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3900248365135404404?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3900248365135404404/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/11/bsqueda-de-emails-en-gmail.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3900248365135404404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3900248365135404404'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/11/bsqueda-de-emails-en-gmail.html' title='Búsqueda de emails en gmail'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4004503509548814495</id><published>2008-11-01T02:50:00.004-02:00</published><updated>2008-12-10T19:01:17.614-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Nuevas ideas para Yupp PHP Framework v0.1.6</title><content type='html'>Ya empezamos a trabajar en la próxima versión del framework. Estuvimos pensando en varios temas para hacer las tareas más sencillas para quienes recién empiezan a utilizar el framework, algunas son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Bootstrap&lt;/span&gt;: La idea es tener por cada componente y script de bootstrap. Un bootstrap es un código que se corre previamente a la operación del sistema, básicamente sirve para ingresar información a la base de datos, información que el componente necesita precargada para su correcto funcionamiento.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Modos de ejecución&lt;/span&gt;: Esta idea ya está vista en varios frameworks y no nos podíamos quedar atrás. Se tendrían los tres modos de ejecución clásicos: development (desarrollo), testing (test) y production (producción), y posiblemente agreguemos un cuarto modo que podría ser algo como de administración y configuración.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Interfaz de generación de tablas en la base de datos&lt;/span&gt;: una interfaz simple donde se pueda ver que tablas están creadas y cuales no, y poder crear desde ahí las tablas que falten, y también borrar las que ya hay y generarlas de nuevo. Esto puede ser útil en modo "development" donde es necesario o útil a veces, empezar con una tabla vacía y si hacemos cambios al modelo, poder regenerar la tabla y que esos cambios se vean plasmados en la base de datos. La idea es de a poquito ir tendiendo a un generador automático de bases de datos, que pueda no solo generar (ya hay un generador automático que solo genera), si no ver cambios y actualizar la base sin modificar los datos, o hacerlo lo suficientemente inteligente como para que también pueda migrar datos de una tabla a otra versión más nueva de la misma tabla.&lt;/li&gt;&lt;/ul&gt;Estas son algunas ideas que intentaremos tener implementadas para &lt;a href="http://www.simplewebportal.net/host/1018.htm"&gt;Yupp PHP Framework&lt;/a&gt; v0.1.6, más las tareas de la &lt;a href="http://groups.google.com/group/yuppframeworkphp/web/hoja-de-ruta-hacia-v0-2-0"&gt;hoja de ruta&lt;/a&gt; para llegar a dicha versión:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; TICKET #38: terminar las funcionalidades para inspeccionar la base de datos. &lt;/li&gt;&lt;li&gt;Agregar interfaz para generar las tablas de la base de datos. &lt;/li&gt;&lt;li&gt;Implementar helpers para formularios y formularios ajax.&lt;/li&gt;&lt;li&gt;Implementar custom validators para validación automática de información.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4004503509548814495?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4004503509548814495/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/11/nuevas-ideas-para-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4004503509548814495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4004503509548814495'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/11/nuevas-ideas-para-yupp-php-framework.html' title='Nuevas ideas para Yupp PHP Framework v0.1.6'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-556372557361770755</id><published>2008-10-29T20:36:00.004-02:00</published><updated>2008-10-29T20:44:10.703-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hotmail'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>Nuevo hotmail, ¿copia de Gmail?</title><content type='html'>Acabo de ingresar a mi cuenta de hotmail vía web y me encuentro con que tiene nuevo look, lo extraño es que los últimos cambios al aspecto de hotmail lo hacen más y más parecido a Gmail, aunque hice una prueba de enviar mails mientras veía la pantalla y no tiene la capacidad de AJAX que tiene desarrollada Gmail para mostrar los mensajes nuevos sin tener que recargar la página. Aquí dejo el screen shot.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jS3wcH3mkBM/SQjm7d1ZhXI/AAAAAAAABiw/46yZjPa56ZQ/s1600-h/nuevo_hotmail.gif"&gt;&lt;img style="cursor: pointer; width: 606px; height: 264px;" src="http://1.bp.blogspot.com/_jS3wcH3mkBM/SQjm7d1ZhXI/AAAAAAAABiw/46yZjPa56ZQ/s400/nuevo_hotmail.gif" alt="" id="BLOGGER_PHOTO_ID_5262710073877693810" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-556372557361770755?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/556372557361770755/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/10/nuevo-hotmail-copia-de-gmail.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/556372557361770755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/556372557361770755'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/10/nuevo-hotmail-copia-de-gmail.html' title='Nuevo hotmail, ¿copia de Gmail?'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jS3wcH3mkBM/SQjm7d1ZhXI/AAAAAAAABiw/46yZjPa56ZQ/s72-c/nuevo_hotmail.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8834062511889613677</id><published>2008-10-25T16:20:00.003-02:00</published><updated>2008-10-25T16:30:26.513-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Nueva liberación de Yupp PHP Framework</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Notas de la versión:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Versión 0.1.5 del Yupp Framework PHP&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incluye los siguientes componentes:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;versión 0.5 del YORM (Yupp Object Relational Mapping)&lt;/li&gt;&lt;li&gt;versión 0.1.4 del YMVC (Yupp Model View Controller)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Requisitos:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Version de PHP: 5.2.x (nosotros utilizamos 5.2.3)&lt;/li&gt;&lt;li&gt;Motor de bases de datos: MySQL 5.x o superior (nosotros utilizamos 5.0.41)&lt;/li&gt;&lt;li&gt;Tener el modulo de Apache MOD_REWRITE instalado y activado.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cambios con respecto a la versión anterior:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;El mayor cambio de esta versión es el soporte de MTI, que es la posibilidad de mapear un modelo de clases con herencia entre ellas,  en distintas tablas. Previamente Yupp solo soportaba mapeo de herencia de una tabla, con esta nueva opción tenemos un componente ORM de gran funcionalidad y flexibilidad a la hora de diseñar los modelos de datos de nuestros sistemas.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se corrigieron problemas en DAL y PersistentManager.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se agregó la generación de Foreign Keys para evitar errores de consistencia de datos al eliminar, esto sirve para avisarle al usuario cuando se olvida de actualizar asociaciones antes de eliminar algún objeto.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Que contiene esta liberacion?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Contiene los componentes mencionados antes, el YORM y el YMVC.&lt;br /&gt;&lt;br /&gt;Esta liberación contiene un ejemplo de un sistema de Blog sencillo donde&lt;br /&gt;se pueden crear entradas y comentarios, mostrando el funcionamiento básico&lt;br /&gt;del framework, con funcionalidades como:&lt;br /&gt;&lt;br /&gt;- Definicion de modelo persistente&lt;br /&gt;- Crear modelo&lt;br /&gt;- Modificar modelo&lt;br /&gt;- Obtener modelo&lt;br /&gt;- Definicion de controladores&lt;br /&gt;- Definicion de vistas&lt;br /&gt;- Uso de helpers basicos&lt;br /&gt;- Validacion automatica de informacion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Para correr el ejemplo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Debes tener un servidor Apache con soporte para PHP corriendo.&lt;br /&gt;Debes tener PHP 5.2.x o superior.&lt;br /&gt;Debes tener MySQL 5.x o superior instalado y corriendo.&lt;br /&gt;&lt;br /&gt;Descomprime el contenido de la liberacion que descargaste desde &lt;a href="http://www.simplewebportal.net/"&gt;www.SimpleWebPortal.net&lt;/a&gt;&lt;br /&gt;en un directorio de tu servidor Apache, accesible desde un browser,&lt;br /&gt;por ejemplo /www o /public_html.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  Configuracion de la base de datos y creacion de la base:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Para configurar los datos de conexion a la base de datos MySQL se debe&lt;br /&gt; editar la informacion presente en el archivo:&lt;br /&gt; "&lt;span style="font-weight: bold;"&gt;/core/config/core.config.YuppConfig.class.php&lt;/span&gt;",&lt;br /&gt; modificando el campo $dev_datasource, estableciendo los valores correctos&lt;br /&gt; para cada clave de dicho array: url, user, pass y database.&lt;br /&gt;&lt;br /&gt; Y se debe crear la base de datos con el nombre que hayas configurado en&lt;br /&gt; "&lt;span style="font-weight: bold;"&gt;/core/config/core.config.YuppConfig.class.php&lt;/span&gt;" en el campo "database".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  Generacion de las tablas:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Debes editar el archivo "/index.php" descomentando la siguiente linea:&lt;br /&gt;&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;PersistentManager::getInstance()-&gt;generateAll();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Esto generara las tablas automaticamente a partir de las clases de modelo&lt;br /&gt; en "/model", al acceder al sistema.&lt;br /&gt;&lt;br /&gt; Debajo se explica como acceder al sistema, luego de haber accedido por&lt;br /&gt; primera vez vuelve a comentar esa linea ya que si no la comentas&lt;br /&gt; generara un error porque las tablas ya existen. En las próximas versiones&lt;br /&gt; intentaremos crear un mecanismo más amigable para generar las tablas&lt;br /&gt; en la base.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  Acceder al ejemplo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Accede al directorio donde se descomprimió Yupp Framework PHP desde un&lt;br /&gt; browser, aparecerá una página con links, esos links ejecutan las acciones&lt;br /&gt; por defecto de los controladores existentes, el único controlador que&lt;br /&gt; tiene utilidad por el momento es "EntradaBlog" que es de donde se permite&lt;br /&gt; crear entradas para el blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cualquier duda o sugerencia, envianos un mail desde &lt;a href="http://www.simplewebportal.net/"&gt;http://www.SimpleWebPortal.net&lt;/a&gt; &gt; contacto.&lt;br /&gt;Tambien puedes contactarnos a por nuestro blog: &lt;a href="http://yuppframework.blogspot.com/"&gt;http://YuppFramework.blogspot.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Descargas:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Pablo Pazos Gutierrez&lt;br /&gt;Project Leader&lt;br /&gt;&lt;a href="http://www.blogger.com/www.SimpleWebPortal.net"&gt;www.SimpleWebPortal.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8834062511889613677?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8834062511889613677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/10/nueva-liberacin-de-yupp-php-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8834062511889613677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8834062511889613677'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/10/nueva-liberacin-de-yupp-php-framework.html' title='Nueva liberación de Yupp PHP Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2547791959071951390</id><published>2008-09-12T13:29:00.004-03:00</published><updated>2008-09-12T13:33:27.131-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia'/><title type='text'>El nuevo navegador de Google es incompatible con Google Groups</title><content type='html'>He descargado el nuevo navegador de Google, &lt;a href="http://www.google.com/chrome"&gt;Google Chrome&lt;/a&gt;, un navegador sencillo, elegante, ina interfaz intuitiva, es rápido, cada pestaña se procesa en un thread distinto, lo que permite que las demás pestañas no se bloqueen cuando una se bloquea por un javascript con errores u otros motivos.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ahora bien, voy a editar uno de mis &lt;a href="http://groups.google.com/"&gt;grupos de google&lt;/a&gt; y al quere crear una página obtengo esto:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(112, 112, 112); font-family: arial; font-size: 12px; "&gt;Tú navegador web no admite la edición de páginas. Descarga una copia nueva de &lt;a class="grltl" href="http://getfirefox.com/" style="color: rgb(119, 119, 204); "&gt;Firefox&lt;/a&gt; o &lt;a class="grltl" href="http://www.microsoft.com/windows/ie/downloads/" style="color: rgb(119, 119, 204); "&gt;Internet Explorer&lt;/a&gt; para editar las páginas.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(112, 112, 112); font-family: arial; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(112, 112, 112); font-family: arial; font-size: 12px;"&gt;:D&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2547791959071951390?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2547791959071951390/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/09/el-nuevo-navegador-de-google-es.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2547791959071951390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2547791959071951390'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/09/el-nuevo-navegador-de-google-es.html' title='El nuevo navegador de Google es incompatible con Google Groups'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-21286870148572345</id><published>2008-08-30T02:58:00.003-03:00</published><updated>2008-08-30T03:15:13.134-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caracteristicas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>ORM: Mapeo de herencia a multiples tablas</title><content type='html'>Como es sabido, Yupp Framework PHP implementa mapeo de herencia de una sola tabla, pero para la próxima versión (0.1.5) queríamos implementar también la posibilidad de mapear herencia a diferentes tablas, pudiendo así optar por cualquiera de las dos opciones según las necesidades del problema a resolver.&lt;br /&gt;&lt;br /&gt;Estudiando el tema, tiene dos puntos bien importantes, la generación del esquema y como son pedidos los datos a la base. En primer lugar, la generación del esquema debe tener reglas que permitan saber cuando una clase se debe mapear a la misma tabla que su superclase o a una tabla distinta, para esto decidimos usar el atributo "withTable" con el que cuentan todas las clases persistentes, de este modo si una subclase define este atributo en un valor distinto al de alguna superclase, automáticamente se toma como que para esa clase (y sus subclases que sigan las mismas reglas) se genere una nueva tabla.&lt;br /&gt;&lt;br /&gt;Por otro lado, para obtener datos de la base, como una instancia de una clase puede estar dividida entre varias tablas, debe haber algún mecanismo que permita hacer joins entre las tablas para reconstruir el registro completo, y así levantar toda la información de una instancia de una determinada clase. Para esto se inyecta un nuevo atributo "super_id" que es una foreign key a la tabla que mapee las superclases de la clase que se quiere cargar, y el join se hace por ese atributo con el identificador en la tabla de las superclases. Esto es medio complicado de explicar pero va a ser muy simple de utilizar, más que simple, va a ser transparente al usuario, ya que toda la responsabilidad de cargar la información correctamente corre por parte del framework.&lt;br /&gt;&lt;br /&gt;Como se mencionaba antes, esta característica da más flexibilidad a la hora de resolver un problema, por ejemplo en el caso de tener muchas clases que heredan de una sola, en el caso de mapeo de una sola tabla la cantidad de columnas de la misma sería muy alta, y se podría "dividir" el problema mapeando algunas clases en otras tablas y dejando que las clases más utilizadas se sigan mapeando en la misma tabla que la superclase (para que sea más rápida la carga por no tener que hacer joins).&lt;br /&gt;&lt;br /&gt;Esperamos tener esta caracteristica funcionando para la semana que viene y con suerte también tendremos la liberación de la próxima versión del framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-21286870148572345?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/21286870148572345/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/08/orm-mapeo-de-herencia-multiples-tablas.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/21286870148572345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/21286870148572345'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/08/orm-mapeo-de-herencia-multiples-tablas.html' title='ORM: Mapeo de herencia a multiples tablas'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8876141669604604308</id><published>2008-08-15T03:46:00.002-03:00</published><updated>2008-08-15T04:07:30.592-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Visión a futuro</title><content type='html'>Con la versión 0.1.4 del framework vimos a Yupp crecer como nunca antes, logrando mejoras y nuevas características que lo hacen más estable, brindando más opciones y aún conservar la simplicidad (tanto de las soluciones como a nivel de usuario), cosa no menos importante porque en general agregar nuevas características implica complicar las cosas, pero con la premisa de la simplicidad siempre en mente (premisa principal del framework) tratamos de llevarla a la práctica siempre.&lt;br /&gt;&lt;br /&gt;Ahora bien, ¿qué tenemos?, tenemos un framework con una implementación completa del patrón MVC, tenemos una implementación completa de un primo lejano del patrón Active Record, tenemos generación automática de las tablas de la base de datos, tenemos integración con 2 motores de bases de datos (MySQL y SQLite), tenemos convenciones que, si se siguen, nos simplifican la vida (que poner, donde ponerlo, como llamarlo, etc), tenemos una forma sencilla de definir controladores, tenemos una forma sencilla de definir las vistas, tenemos helpers que nos ayudan a generar vistas, tenemos soporte de templates que nos ayudan a reutilizar código entre vistas (páginas), tenemos soporte para layout que son simplifica el tema de definir un mismo formato general para un conjunto de páginas y poder actualizarlo y mantenerlo de forma sencilla, tenemos soporte completo para i18n (una gran cosa), tenemos una primer integración con AJAX (la parte de llamadas no de efectos y animaciones), tenemos soporte para custom mappings, que son mapeos de las urls que nos dejan apuntar al controlador y acción que querramos, tenemos soporte para filtros de acciones que permiten ejecutar una serie de funciones, definidas por el usuario, antes y después de ejecutar la acción del controlador, en fin, tenemos un lindo framework, pero eso no alcanza, además recién estamos en 0.1.4, y mi visión es que recién en v0.2.0 se va a llegar a un framework completo con el cual se pueda desarrollar cualquier sistema y ponerlo en producción.&lt;br /&gt;&lt;br /&gt;Ahora el trabajo estará concentrado en ampliar los helpers, completar la integración con AJAX para llamadas y procesamiento de respuestas JSON, integrar algún otro motor de bases de datos (tenemos a PostgreSQL en la mira), seguir mejorando y estandarizando la API y corrigiendo bugs conocidos y que encontremos. Además trabajaremos en terminar la definición de componentes, concepto importante dentro del sistema, para que el día de mañana se puedan desarrollar componentes e instalar en sistemas Yupp que estén en producción, de forma sencilla, lo que permitiría poder encarar proyectos de mediano y gran porte en distintas etapas, dejando en cada una un sistema 100%, y agregando funcionalidad en distintas etapas. Para la versión 0.3.0 del framework buscaremos proponer un proceso de desarrollo con Yupp Framework PHP que intentará definir las etapas básicas del desarrollo, orientado al framework, señalando mejores prácticas y orientando al desarrollador, de forma de hacer el proceso lo más rápido y bien posible. Ya hablaremos más de esta parte en el futuro.&lt;br /&gt;&lt;br /&gt;Noticia: hay nueva documentación en el sitio sobre Yupp Framework PHP, dejo el link: &lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gracias por leer,&lt;br /&gt;Pablo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8876141669604604308?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8876141669604604308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/08/visin-futuro.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8876141669604604308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8876141669604604308'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/08/visin-futuro.html' title='Visión a futuro'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1234158332790608209</id><published>2008-08-10T03:52:00.003-03:00</published><updated>2008-08-10T04:07:35.849-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Tenemos nueva versión! Yupp Framework v0.1.4</title><content type='html'>Apuramos el paso en algunas áreas por posibles proyectos que pueden salir en torno a Yupp, esta versión tiene algunas características nuevas y muchas correcciones, cave destacar que se mejoraron algunas funcionalidades de persistencia, del sistema de layouts, se agregó el primer helper ajax usando prototype, se implementó el concepto de filtros y se muestra un ejemplo de uso de los mismos para verificar si un usuario tiene permisos para editar un blog, y muchas más cosas...&lt;br /&gt;&lt;br /&gt;Por descargar e informe de cambios de la versión ver: &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1234158332790608209?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1234158332790608209/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/08/tenemos-nueva-versin-yupp-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1234158332790608209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1234158332790608209'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/08/tenemos-nueva-versin-yupp-framework.html' title='Tenemos nueva versión! Yupp Framework v0.1.4'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4744956477395657612</id><published>2008-08-09T16:42:00.003-03:00</published><updated>2008-08-09T16:45:31.113-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Nueva documentación disponible</title><content type='html'>Publicamos en el sitio de Simple Web Portal la primera documentación de referencia de Yupp Framework PHP, está accesible desde aquí:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.simplewebportal.net/yupp_framework_php_doc/"&gt;http://www.simplewebportal.net/yupp_framework_php_doc/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Seguimos trabajando en la doc y en la liberación v0.1.4 que esperamos tener pronta mañana.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4744956477395657612?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4744956477395657612/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/08/nueva-documentacin-disponible.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4744956477395657612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4744956477395657612'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/08/nueva-documentacin-disponible.html' title='Nueva documentación disponible'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7169757259437067816</id><published>2008-08-04T14:37:00.001-03:00</published><updated>2008-08-04T14:39:44.284-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Nueva versión 0.1.3!!!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Hemos hecho la nueva liberación y alcanzado el hito de la v0.1.3 marcado en la hoja de ruta.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Los cambios en esta versión son:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; 1. Soporte para layouts. Como demo, hay un layout definido para el componente blog y la vista list de entradaBlog incluye ese layout. El layout muestra una barra con selección de idioma del blog.&lt;br /&gt;&lt;br /&gt; 2. Moficación a la forma en que se verifican los mappings de ruteo en routing.Mapping.&lt;br /&gt;&lt;br /&gt; 3. Se agregó una operación toJSON para las clases del modelo, no está completa.&lt;br /&gt;&lt;br /&gt; 4. Se agregó soporte para SQLite, para configurar que dbms se usa hay que modificar la información en YuppConfig.&lt;br /&gt;&lt;br /&gt;En cuanto a JSON, todavía falta un poco para generar un JSON completo de todo el modelo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Por mas info:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Descargas: &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7169757259437067816?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7169757259437067816/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/08/nueva-versin-013.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7169757259437067816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7169757259437067816'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/08/nueva-versin-013.html' title='Nueva versión 0.1.3!!!'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3961286332390065146</id><published>2008-07-15T17:51:00.004-03:00</published><updated>2008-07-15T17:59:11.525-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caracteristicas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Soporte para layouts</title><content type='html'>&lt;p&gt;El soporte para layouts es una característica bien importante para cualquier framework MVC y Yupp Framework no se podría quedar atrás, así que empecé a buscar información sobre implementación de layouts, patrones de diseño, y frameworks especializados en layouts y templates. &lt;/p&gt;&lt;p&gt;Un sistema de layout ayuda a ahorrar código en las vistas, de forma que varias vistas puedan compartir código común que está en un único archivo externo.&lt;/p&gt;&lt;p&gt;En un momento, luego de leer un rato sobre las posibles formas de implementarlo, más algunas ideas que tenía en mente, probé una pequeña implementación de un sistema de layout, y luego de un par de horas (y para mi sorpresa) lo teníaandando integrado con el framework. En este post mostraré como es que se utilizaría esta implementación de layouts.&lt;/p&gt;&lt;p face="&amp;quot;" size="10pt" style="text-align: left;"&gt;La idea principal era no tener que modificar demasiado las vistas de forma que las vistas ya creadas sigan funcionando bien aunque no tengan referencia a un layout. Por lo tanto inventé una tag que sirve para crear la referencia desde una vista:&lt;/p&gt;&lt;p   style=";font-family:&amp;quot;;font-size:10pt;" align="center"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;layout&lt;/span&gt; &lt;span style="color: rgb(0, 127, 0);"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"blog"&lt;/span&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Esta tag debe ser incluída luego de &amp;lt;html&amp;gt; y antes de &amp;lt;head&amp;gt;,&lt;br /&gt;para hacer más clara la referencia y más fácil de implementar el procesamiento de esa tag.&lt;/p&gt;&lt;p&gt;El procesamiento debía ser muy rápido y casi no afectar la velocidad de procesamiento actual, de esta forma probé hacer un procesamiento de layout mediante expresiones regulares y mediante operaciones con strings, y la velocidad con las operaciones con strings fue muchísimo mejor que con expresiones regulares, y muchísimo mejor me refiero a varios órdenes por debajo:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;velocidad con expresiones regulares promedio: 0.03 ms&lt;br /&gt;velocidad con operaciones de strings promedio: 5.5E-5 ms&lt;br /&gt;&lt;/div&gt;&lt;p&gt;El layout tiene la estructura de una vista pero no hace referencia al modelo y tiene dos variables disponibles para poder mostrar el contenido de la vista de la cual es layout, estas son $head y $body, que representan el contenido del &amp;lt;head&amp;gt; y del &amp;lt;body&amp;gt; de la vista.&lt;/p&gt;&lt;p&gt;Este es un ejemplo de un layout:&lt;br /&gt;&lt;/p&gt;&lt;pre   style=";font-family:&amp;quot;;font-size:10pt;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:black;"&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="color: rgb(0, 127, 0);"&gt;type&lt;/span&gt;=&lt;span style="color:blue;"&gt;"text/css"&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   ...&lt;br /&gt;   &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;&amp;lt;?php&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;span style="color: rgb(127, 159, 191);"&gt;$head&lt;/span&gt;; &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;?&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;div&lt;/span&gt; &lt;span style="color: rgb(0, 127, 0);"&gt;style&lt;/span&gt;=&lt;span style="color:blue;"&gt;"padding:10px; background-color:#6af;"&lt;/span&gt; &lt;span style="color: rgb(0, 127, 0);"&gt;align&lt;/span&gt;=&lt;span style="color:blue;"&gt;"right"&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;&amp;lt;?php&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;echo&lt;/span&gt;&lt;/b&gt; h(&lt;b&gt;&lt;span style="color: rgb(42, 0, 255);"&gt;'locale_chooser'&lt;/span&gt;&lt;/b&gt;); &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;?&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;     &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;div &lt;span style="color: rgb(0, 127, 0);"&gt;style&lt;/span&gt;=&lt;span style="color:blue;"&gt;"padding:10px;"&lt;/span&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;&amp;lt;?php&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;echo&lt;/span&gt;&lt;/b&gt; &lt;span style="color: rgb(127, 159, 191);"&gt;$body;&lt;/span&gt; &lt;b&gt;&lt;span style="color: rgb(255, 0, 128);"&gt;?&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(127, 0, 127);"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p style="text-align: justify;"&gt;Por último quien hace el proceso de la vista es una clase llamada LayoutManager que se&lt;br /&gt;encarga de resolver referencias a layouts y mostrar la vista generada. Si la vista no contiene una referencia a un layout, simplemente muestra la vista igual que antes.&lt;/p&gt;&lt;p&gt;Si bien esta solución funciona bien, se puede mejorar en varios aspectos:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Chequeos de errores, para hacerlo más robusto.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Más flexible, por ejemplo poder acceder a más información de la vista como el título, ahora solo se accede al head y al body.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Poder incluir N niveles de layouts en cascada, podría servir para que un layout a su vez pueda tener un layout que&lt;br /&gt;lo contiene y poder definir distintas secciones de la página que se arma en distintas layouts.&lt;/li&gt;&lt;/ul&gt;Esta característica estará disponible con la próxima liberación del framework, Yupp Framework PHP v0.1.3.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3961286332390065146?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3961286332390065146/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/07/soporte-para-layouts.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3961286332390065146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3961286332390065146'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/07/soporte-para-layouts.html' title='Soporte para layouts'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5653102183302907975</id><published>2008-07-11T17:50:00.001-03:00</published><updated>2008-07-11T17:52:25.292-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caracteristicas'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Característica: devolver directamente el modelo</title><content type='html'>&lt;p class="MsoNormal"&gt;Una nueva característica&lt;span style="" lang="ES-TRAD"&gt; que vino con la versión 0.1.2 del framework es la de no necesitar explicitar la vista que se va a utilizar. Por ejemplo con la acción edit, la forma de especificar la vista a utlizar se hace mediante el retorno de llamar al método “render” de YuppController:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; EntradaBlogController &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;extends&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; YuppController {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;function&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; editAction()&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$id&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;= &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;-&gt;params[&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;'id'&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;];&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$obj&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; = EntradaBlog::get( &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$id&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; );&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;-&gt;params[&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;'object'&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;] = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$obj&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;-&gt;render(&lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;"entradaBlog/edit"&lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;, &amp;amp;&lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="background: white none repeat scroll 0% 50%; font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US"&gt;-&gt;params);&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Esta es la única forma de especificar la vista previo a la versión 0.1.2, con Yupp Framework PHP v0.1.2 se puede retornar solo el modelo y la vista se resuelve de forma automática por Yupp Framework:&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; EntradaBlogController &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;extends&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; YuppController {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;function&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; editAction()&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$id&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;= &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;-&gt;params[&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;'id'&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;];&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$obj&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; = EntradaBlog::get( &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$id&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; );&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;-&gt;params[&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;'object'&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;] = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);" lang="EN-US"&gt;$obj&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);"&gt;$this&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;-&gt;params;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;En este caso, el framework buscará una vista llamada “edit”, igual al nombre de la acción, dentro del directorio de vistas del controller “EntradaBlog”. También se podría retornar NULL o nada en caso de no querer mostrar modelo. En una próxima versión no será necesario tampoco retornar el modelo, ya que como “params” es un campo de “YuppController” puede ser accedido sin necesidad de retornarlo de forma explícita.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;La idea fundamental de estas pequeñas características es reducir la cantidad de código que es necesario escribir para implementar cierta funcionalidad y tener varias formas consistentes de hacer lo mismo de forma que cada usuario programe como más le guste y que el framework no restrinja esa libertad.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5653102183302907975?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5653102183302907975/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/07/caracterstica-devolver-directamente-el.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5653102183302907975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5653102183302907975'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/07/caracterstica-devolver-directamente-el.html' title='Característica: devolver directamente el modelo'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4243853153205174424</id><published>2008-07-05T15:54:00.003-03:00</published><updated>2008-07-06T13:23:00.227-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><title type='text'>Descargar Yupp Framework PHP v0.1.2</title><content type='html'>Tenemos el agrado de anunciar la liberación de la nueva versión de Yupp Framework PHP, que ya está disponible para descargar desde:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yupp/downloads/list"&gt;http://code.google.com/p/yupp/downloads/list&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con esta versión hemos resuelto:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TICKET #34: mejorar el tema del ruteo implementando un componente  especificamente para eso, y agregar custom mappings para poder modificar facilmente que accion de que controller ejecutar si viene determinada url.&lt;/li&gt;&lt;li&gt;TICKET #32: cambiar de lugar la funcionalidad de saber el nombre de una tabla dada una clase. &lt;/li&gt;&lt;li&gt;TICKET #43: no se verifican constraints sobre relaciones hasOne. &lt;/li&gt;&lt;li&gt;TICKET #46: simplificar el acceso a recursos estaticos como imagenes, css y js.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Nuevas características:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Helper para cambiar el idioma (disponible para probar desde el ejemplo del blog).&lt;/li&gt;&lt;li&gt;Helpers para incluir Javascript y CSS.&lt;/li&gt;&lt;li&gt;Ahora las acciones pueden obviar el tener que devolver la vista, pueden devolver solo el modelo y Yupp busca y muestra la vista correcta =&gt; escribir menos código!&lt;/li&gt;&lt;li&gt;Nuevo paquete de ruteo con mapeos de urls que se pueden configurar a medida para permitir urls que no sigan las convenciones de Yupp.&lt;/li&gt;&lt;li&gt;Se modificó el ejemplo del blog para mostrar algunas de las nuevas características.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Gracias por tu atención y si pruebas el framework esperamos tus comentarios!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4243853153205174424?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4243853153205174424/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/07/descargar-yupp-frameworl-php-v012.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4243853153205174424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4243853153205174424'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/07/descargar-yupp-frameworl-php-v012.html' title='Descargar Yupp Framework PHP v0.1.2'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3845155693791533687</id><published>2008-07-05T14:07:00.004-03:00</published><updated>2008-07-05T14:17:45.213-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Nuevo sitio en Google Code</title><content type='html'>Hemos hecho una cuenta en Google Code para disponer de las herramientas que brindan en beneficio del proyecto. Entre ellas wiki, sistema de tickets, repositorio de archivos y repositorio svn.&lt;br /&gt;&lt;br /&gt;En breve empezaremos a utilizar el repositorio svn y a trabajar sobre él, para quien quiera descargarse la última versión de implementación lo pueda hacer.&lt;br /&gt;&lt;br /&gt;El link: &lt;a href="http://code.google.com/p/yupp/"&gt;http://code.google.com/p/yupp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PD: los últimos archivos generados por el proyecto están ya en el sitio de google code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3845155693791533687?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3845155693791533687/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/07/nuevo-sitio-en-google-code.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3845155693791533687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3845155693791533687'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/07/nuevo-sitio-en-google-code.html' title='Nuevo sitio en Google Code'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-297665901848265043</id><published>2008-06-22T20:52:00.003-03:00</published><updated>2008-06-22T21:01:16.605-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Nueva versión de Yupp Framework PHP 0.1.1</title><content type='html'>Como anunciamos anteriormente ya está disponible para descargar y probar la nueva versión de Yupp Framework PHP. La nueva versión v0.1.1 agrega nuevas características y mejoras al framework, que son las primeras mejoras de tantas otras que iremos haciendo hacia la versión v0.2.0 del framework.&lt;br /&gt;&lt;br /&gt;En esta versión incluye:&lt;br /&gt;&lt;br /&gt;- Redirects a acciones de controladores.&lt;br /&gt;- Corrección de errores.&lt;br /&gt;- Simplificación de render y redirect en las acciones de controladores.&lt;br /&gt;- * Soporte para templates *&lt;br /&gt;- Se agregó una clase que almacena variables de contexto que simplifica el acceso a variables globales a la aplicación.&lt;br /&gt;- Se agregaron helpers para mensages i18n y para templates.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para descargar siga el siguiente link: &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;http://www.simplewebportal.net/host/1022.htm&lt;/a&gt;&lt;br /&gt;También lo puedes descargar desde el grupo google del proyecto: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-297665901848265043?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/297665901848265043/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/06/nueva-versin-de-yupp-framework-php-011.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/297665901848265043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/297665901848265043'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/06/nueva-versin-de-yupp-framework-php-011.html' title='Nueva versión de Yupp Framework PHP 0.1.1'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-7434849078224956714</id><published>2008-06-19T00:57:00.004-03:00</published><updated>2008-06-19T01:36:33.076-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Próxima liberación Yupp Framework PHP v0.1.1</title><content type='html'>Como ya avisáramos desde nuestro &lt;a href="http://groups.google.com/group/yuppframeworkphp/browse_thread/thread/eec16563adab74a7"&gt;grupo google&lt;/a&gt; (de forma informal) , este fin de semana estaremos liberando una nueva versión de Yupp Framework PHP, esta versión agrega características y resuelve algunos problemas menores y es la primera de la hoja de ruta hacia la versión 0.2.0 del framework.&lt;br /&gt;&lt;br /&gt;En esta versión 0.1.1, algunas de las nuevas características son:&lt;br /&gt;&lt;br /&gt;- Redirects a acciones de controladores.&lt;br /&gt;- Corrección de errores.&lt;br /&gt;- Simplificación de render y redirect en las acciones de controladores.&lt;br /&gt;- * Soporte para templates *&lt;br /&gt;- Se agregó una clase que almacena variables de contexto que simplifica el acceso a variables globales a la aplicación.&lt;br /&gt;- Se agregaron helpers para mensages i18n y para templates.&lt;br /&gt;&lt;br /&gt;La versión 0.2.0 será una versión 100% funcional, estable y completamente documentada. El objetivo es que pueda comenzar a ser utilizado en producción para desarrollo de sistemas pequeños y prototipos, ya que más adelante agregaremos características y herramientas que permitan trabajar con sistemas más grandes de forma sencilla.&lt;br /&gt;&lt;br /&gt;Saludos a todos y gracias por el interes, los comentarios son bienvenidos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-7434849078224956714?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/7434849078224956714/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/06/prxima-liberacin-yupp-framework-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7434849078224956714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/7434849078224956714'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/06/prxima-liberacin-yupp-framework-php.html' title='Próxima liberación Yupp Framework PHP v0.1.1'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-4877102358153421986</id><published>2008-06-04T15:50:00.003-03:00</published><updated>2008-06-04T16:00:54.667-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grupo google'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Presentación oficial del grupo google de Yupp Framework PHP</title><content type='html'>Dándole la importancia que se merece hago un nuevo post para la presentación del grupo google de Yupp Framework PHP.&lt;br /&gt;&lt;br /&gt;El grupo es un medio más para acercar el proyecto a la comunidad de desarrolladores PHP, para difundirlo entre quienes realmente lo van a usar y para escuchar sus sugerencias y aportes al proyecto, para así hacerlo mejor para todos.&lt;br /&gt;&lt;br /&gt;La dirección del grupo es: &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El grupo es un lugar donde discutir detalles de implementación, donde se harán anuncios sobre el avance del proyecto, y donde publicaremos documentación y las últimas descargas a medida que estén disponibles.&lt;br /&gt;&lt;br /&gt;El proyecto está abierto a todos quienes quieran aportar su granito de arena, sean expertos o principiantes, para todos quienes estén interesados en programación, gestión de bases de datos, diseño de software, patrones, procesos de desarrollo, testing, frameworks, etc, todos son bienvenidos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-4877102358153421986?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/4877102358153421986/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/06/presentacin-oficial-del-grupo-google-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4877102358153421986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/4877102358153421986'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/06/presentacin-oficial-del-grupo-google-de.html' title='Presentación oficial del grupo google de Yupp Framework PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2669194449392386433</id><published>2008-06-02T13:17:00.001-03:00</published><updated>2008-06-02T13:19:34.187-03:00</updated><title type='text'>Página activa de nuevo!</title><content type='html'>Por suerte ya fueron superados los problemas por el incendio en el datacenter y la página web está de nuevo operativa.&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.simplewebportal.net/"&gt;http://www.simplewebportal.net/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2669194449392386433?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2669194449392386433/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/06/pgina-activa-de-nuevo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2669194449392386433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2669194449392386433'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/06/pgina-activa-de-nuevo.html' title='Página activa de nuevo!'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5279067875213937427</id><published>2008-06-01T16:41:00.002-03:00</published><updated>2008-06-01T16:56:37.352-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Pagina web offline por incendio en datacenter</title><content type='html'>Lamentablemente nuestra página web oficial &lt;a href="http://www.SimpleWebPortal.net"&gt;www.SimpleWebPortal.net &lt;/a&gt;está inaccesible debido a un importante incendio en el datacenter donde es alojada.&lt;br /&gt;&lt;br /&gt;Debido a que últimamente hubo mucha gente interesada en el framework y lo quería descargar, creamos un grupo de google donde se publicarán las descargas que estaban en el sitio para que puedan seguir descargándolo y probándolo sin problemas.&lt;br /&gt;&lt;br /&gt;La dirección es &lt;a href="http://groups.google.com/group/yuppframeworkphp"&gt;http://groups.google.com/group/yuppframeworkphp&lt;/a&gt;, y ya fueron publicados el archivo con la última liberación del framework y la documentación sobre como crear un sistema de blog simple.&lt;br /&gt;&lt;br /&gt;Este grupo servirá también para discutir detalles de implementación y como vía alternativa de comunicación con la comunidad. Por lo pronto estaremos al tanto de las noticias sobre el servicio de hosting, y cualquier actualización que hagamos será publicada en el grupo y notificado aquí en el blog.&lt;br /&gt;&lt;br /&gt;Por más información sobre el incendio en los datacenters: &lt;a href="http://hostingdelsur.net"&gt;http://hostingdelsur.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5279067875213937427?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5279067875213937427/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/06/pagina-web-offline-por-incendio-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5279067875213937427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5279067875213937427'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/06/pagina-web-offline-por-incendio-en.html' title='Pagina web offline por incendio en datacenter'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6461170733457463372</id><published>2008-05-31T02:21:00.003-03:00</published><updated>2008-05-31T02:35:26.608-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><title type='text'>Nueva documentación de Yupp Framework PHP</title><content type='html'>&lt;p class="MsoNormal" style="text-align: left; font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;Hemos publicado un documento que explica los pasos necesarios para empezar a desarrollar aplicaciones web utilizando Yupp Framework PHP.&lt;br /&gt;&lt;br /&gt;El mismo trata el ejemplo de&lt;span style="" lang="ES-TRAD"&gt; desarrollo de&lt;/span&gt; un sistema simple de blog, donde los usuarios serán capaces de crear entradas y agregar comentarios. Dicho ejemplo viene implementado junto con la descarga de Yupp Framework v0.1.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: left; font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;Para descargarlo puedes acceder &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6461170733457463372?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6461170733457463372/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/05/nueva-documentacin-de-yupp-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6461170733457463372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6461170733457463372'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/05/nueva-documentacin-de-yupp-framework.html' title='Nueva documentación de Yupp Framework PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-5102224785409271662</id><published>2008-05-25T01:07:00.002-03:00</published><updated>2008-05-25T01:12:33.360-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><title type='text'>Tercer liberacion de Yupp Framework PHP !!!</title><content type='html'>Y como lo prometido es deuda...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Esta liberacion corresponde a Yupp Framework PHP en su version 0.1, que se compone de la version 0.3 de YORM (Yupp Object-Relational Mapping) y la version 0.1 de YMVC (Yupp Model View Controller), los cuales son los componentes principales del Yupp Framework PHP.&lt;br /&gt;&lt;br /&gt;Esta version viene con un ejemplo de implementacion de un Blog sencillo que permite crear entradas y comentarios. Cave destacar que es la primer implementacion 100% mvc usando Yupp Framework PHP y muestra distintos aspectos de funcionalidades provistas por el framework, entre ellas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Manejo de modelo.&lt;/li&gt;&lt;li&gt;Ruteo y ejecucion de acciones de controladores.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Manejo de vistas.&lt;/li&gt;&lt;li&gt;Utilizacion de helpers.&lt;/li&gt;&lt;li&gt;Validacion automatica de informacion.&lt;/li&gt;&lt;/ul&gt;Por mas informacion y descargarlo puedes hacerlo desde &gt; &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;aqui &lt;/a&gt;&lt;&lt;br /&gt;&lt;br /&gt;La descarga incluye informacion de la version, informacion de como instalarlo y ponerlo a funcionar y requisitos de instalacion.&lt;br /&gt;&lt;br /&gt;Cualquier comentario lo puedes hacer aqui en el blog o mediante la pagina de contacto de &lt;a href="http://www.SimpleWebPortal.net"&gt;www.SimpleWebPortal.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-5102224785409271662?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/5102224785409271662/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/05/tercer-liberacion-de-yupp-framework-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5102224785409271662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/5102224785409271662'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/05/tercer-liberacion-de-yupp-framework-php.html' title='Tercer liberacion de Yupp Framework PHP !!!'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-842465272175777667</id><published>2008-05-21T14:47:00.002-03:00</published><updated>2008-05-21T15:02:16.774-03:00</updated><title type='text'>Proxima liberacion</title><content type='html'>Estamos trabajando para poder este fin de semana hacer una nueva liberacion de Yupp Framework PHP.&lt;br /&gt;&lt;br /&gt;Esta liberacion contendra la version 0.3 del YORM (el componente de modelo persistente) y la version 0.1 del componente MVC que esta bastante avanzado pero como es la primer liberacion sale con version 0.1, luego veremos como ajustar el versionado a medida que se agregan caracteristicas.&lt;br /&gt;&lt;br /&gt;En cuanto al YORM se hicieron cambios importantes en la parte de consultas para poder hacerlas mas sencillas y potentes. Tambien se mejoro y se integro la parte de validacion de informacion, esta caracteristica aunque existia en las liberaciones anteriores, no fue expuesta para probar, ahora esta 100% accesible y la liberacion va a incluir algunos ejemplos de uso.&lt;br /&gt;&lt;br /&gt;En el YUPP MVC (o YMVC) implementa lo que seria el ruteo de requests a ejecucion de acciones de controladores, generacion de modelo, manejo de vistas y contiene algunos helpers basicos para mostrar informacion del modelo y errores que puedan haber ocurrido. Tambien fue implementado un controlador por defecto que permite hacer CRUD (Create Retrieve Update Delete) para cualquier clase de dominio (clase persistente definida con YORM). Y viene con 4 vistas genericas para listado, creacion, edicion y vista de detalles que funcionan con informacion provista por las clases de dominio (definidas con YORM).&lt;br /&gt;&lt;br /&gt;Bueno, esperamos llegar al fin de semana con esta nueva liberacion, si no, sera para el proximo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-842465272175777667?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/842465272175777667/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/05/proxima-liberacion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/842465272175777667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/842465272175777667'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/05/proxima-liberacion.html' title='Proxima liberacion'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-1220557145011385052</id><published>2008-04-15T13:42:00.004-03:00</published><updated>2008-12-10T00:03:49.878-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logo'/><title type='text'>Primer versión del logo de Yupp Framework PHP</title><content type='html'>Es un placer presentarles en nuevo logo de Yupp Framework PHP.&lt;br /&gt;Los comentarios son bienvenidos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jS3wcH3mkBM/SATcNcujfGI/AAAAAAAAA-o/hheNMgIBuUQ/s1600-h/YuppLogoV1.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jS3wcH3mkBM/SATcNcujfGI/AAAAAAAAA-o/hheNMgIBuUQ/s320/YuppLogoV1.gif" alt="" id="BLOGGER_PHOTO_ID_5189514794245520482" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-1220557145011385052?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/1220557145011385052/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/04/primer-versin-del-logo-de-yupp.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1220557145011385052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/1220557145011385052'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/04/primer-versin-del-logo-de-yupp.html' title='Primer versión del logo de Yupp Framework PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jS3wcH3mkBM/SATcNcujfGI/AAAAAAAAA-o/hheNMgIBuUQ/s72-c/YuppLogoV1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2696962748829594924</id><published>2008-04-07T00:22:00.002-03:00</published><updated>2008-04-07T00:42:17.128-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='liberaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='yupp framework php'/><title type='text'>Segunda liberación del Yupp Framework PHP</title><content type='html'>El componente de modelo persitente YORM en su versión 0.2 está listo para ser descargado y probado.&lt;br /&gt;&lt;br /&gt;En el post anterior donde avisábamos de la liberación se comentan las características más importantes en esta liberación, entre lo  más notable está el soporte para carga perezosa, que se une a la previa carga en  cascada, y la operación *Contains sobre objetos del modelo.&lt;br /&gt;&lt;br /&gt;Puedes encontrar  toda la información de la liberación en la documentación dentro del .zip en la  &lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;página de descargas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cualquier duda o comentario será bien recibido y lo tomaremos en consideración.&lt;br /&gt;&lt;br /&gt;La versión 0.3 del YORM estará lista mas o menos en un mes, con nuevas características, pero sobre todas las cosas será una liberación de estabilización, donde se harán pruebas exhaustivas, se revisará la API y se documentará lo mejor posible. Intentaremos con esta versión del YORM liberar tambén la primer versión (v0.1)  del componente MVC del Yupp Framework PHP, el YMVC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2696962748829594924?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2696962748829594924/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/04/segunda-liberacin-del-yupp-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2696962748829594924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2696962748829594924'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/04/segunda-liberacin-del-yupp-framework.html' title='Segunda liberación del Yupp Framework PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-8219078042440736284</id><published>2008-04-05T21:39:00.002-03:00</published><updated>2008-04-05T22:05:31.665-03:00</updated><title type='text'>Anuncio de liberación de la versión 0.2 del YORM</title><content type='html'>En el día de mañana estaremos liberando la versión 0.2 del YORM, el componente de modelo persistente del Yupp Framework PHP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aquí va un resumen de algunas de las nuevas características:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Carga de relaciones bidireccionales instanciadas unidireccionales corregida.&lt;/span&gt;&lt;br /&gt;Es básicamente la consideración de que si tengo una relación bidireccional entre dos clases, puedo tener una instancia de la relación que no es bidireccional, a no ser que tenga una restricción no estructural que diga lo contrario.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Se agrego operacion *Contains( id ) para preguntar si un atributo hasMany contiene un objeto con ese id.&lt;/span&gt;&lt;br /&gt;Si una clase Empresa tiene un atributo hasMany llamado "personas" (o sea que tiene asociadas varias "personas"), puedo preguntarle a una instancia de Empresa: $emp-&gt;personasContains( 123 ), eso retornará un booleano y será true solo si la lista de personas de la empresa tiene una persona con id 123.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Soporte para multiples relaciones entre las mismas 2 clases.&lt;/span&gt;&lt;br /&gt;Esto es, por ejemplo cuando tengo artículos escritos y autores, y en cada artículo quiero tener asociado un autor principal y los autores secundarios, antes no se podía modelar algo así de forma estándar. Ahora hay una forma "Yupp" de hacerlo ;)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Soporte para carga perezosa (lazy loading).&lt;/span&gt;&lt;br /&gt;Esta es la característica más importante de esta liberación, la capacidad de poder cargar un modelo de forma lazy, esto quiere decir que se puede cargar una instancia de una clase sin cargar las instancias de las clases asociadas, cosa que antes no se podía hacer y se cargaba en cascada (cargando una instancia se cargaban todas las de los elementos asociados). De esta forma, se cargan los objetos asociados solo si son utilizados, lo que representa un gran ahorro en el número de consultas que se deben hacer a la base de datos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Entre hoy y mañana estaremos terminando de actualizar los tests para poder correr esta nueva versión, y en la noche estará publicada la nueva versión.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-8219078042440736284?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/8219078042440736284/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/04/anuncio-de-liberacin-de-la-versin-02.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8219078042440736284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/8219078042440736284'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/04/anuncio-de-liberacin-de-la-versin-02.html' title='Anuncio de liberación de la versión 0.2 del YORM'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-3638006102086009917</id><published>2008-03-19T02:13:00.002-03:00</published><updated>2008-03-19T02:21:31.423-03:00</updated><title type='text'>Primer liberación del Yupp Framework</title><content type='html'>Esta liberación de código del Yupp Framework está relacionada con uno de los componentes principales del mismo, el YORM. Este componente se encarga de manejar todo el acceso a datos, definición de modelos y generación de esquemas, en una forma 100% orientada a objetos, simplificando las tareas en dichas áreas.&lt;br /&gt;&lt;br /&gt;Hoy con la versión 0.1 de este componente se inicia un largo camino para este framework que espera y apunta  a ser el más simple y productivo del mercado (en frameworks PHP, claro está).&lt;br /&gt;&lt;br /&gt;En esta primer versión encontramos una primer solución para definir clases del modelo, generar esquemas, persistir datos y obtener datos, sin necesidad de codificar una sola línea de SQL y con una configuración mínima (apenas los datos de conexión a la base). Esta versión cuenta con soporte para definición del modelo de datos, soporte de relaciones de herencia y relaciones entre clases con cardinalidades 1-1, 1-n y n-n unidireccionales o bidireccionales.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.simplewebportal.net/host/1022.htm"&gt;Aquí está es link para descargar esta versión.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-3638006102086009917?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/3638006102086009917/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/03/primer-liberacin-del-yupp-framework.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3638006102086009917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/3638006102086009917'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/03/primer-liberacin-del-yupp-framework.html' title='Primer liberación del Yupp Framework'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-6261698167876015651</id><published>2008-03-19T01:54:00.003-03:00</published><updated>2008-03-19T02:12:13.136-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Problemas al acceder al nombre de la clase en un esquema de herencia desde metodos estaticos en PHP</title><content type='html'>Digamos que tenemos un esquema como el siguiente, en donde hay dos clases que mantienen una relación de herencia, y hay un método estático definido en la clase padre, el cual accede al nombre de la clase y es invocado por la clase hija. El resultado esperado sería que el nombre de la clase fuera el de la clase hija, pero como veremos en el ejemplo, el resultado es la clase padre.&lt;br /&gt;&lt;pre lang="php"&gt;&lt;div class="example-contents"&gt;&lt;div class="phpcode"&gt;&lt;div class="example-contents"&gt; &lt;div class="phpcode"&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;A &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;{&lt;br /&gt;public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;   echo &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;;&lt;br /&gt;}&lt;br /&gt;public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;self&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;B &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;extends &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;A &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;{&lt;br /&gt;public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;    echo &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;B&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;Lo descrito anteriormente sucede porque PHP resuelve el nombre de la clase por la clase a la cual pertenece el método que se está invocando, lo que tal vez se puede ver como una violación al polimorfismo, es decir, que esperamos que el código anterior devuelva el nombre de la clase sobre la cual es invocado el método, pero no es así.&lt;br /&gt;&lt;br /&gt;Según el manual de PHP, con la versión 5.3.0 este tema será resuelto de forma nativa por PHP, la solución a este problema lleva el nombre de "Late Static Bindings". Lo que básicamente agrega esta solución es una palabra clave que ayuda a referenciar a la clase correcta en tiempo de ejecución conservando el comportamiento deseado en un ambiente Orientado a Objetos con polimorfismo. Este es el ejemplo que se ofrece en la documentación de PHP:&lt;br /&gt;&lt;pre lang="php"&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;class &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;A &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;{&lt;br /&gt;  public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;      echo &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;;&lt;br /&gt;  }&lt;br /&gt;  public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;      static::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;(); &lt;/span&gt;&lt;span style="color: rgb(255, 128, 0);"&gt;// Here comes Late Static Bindings  &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;B &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;extends &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;A &lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;{   &lt;br /&gt;  public static function &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;who&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;() {&lt;br /&gt;       echo &lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;B&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;::&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;test&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;En este ejemplo se agrega la palabra clave "static" para referenciar a la clase correcta en tiempo de ejecución, devolviendo el valor correcto y esperado para un ambiente que soporta polimorfismo.&lt;br /&gt;&lt;br /&gt;Por más información sobre el tema, accede al &lt;a href="http://php.oregonstate.edu/manual/en/language.oop5.late-static-bindings.php"&gt;manual de PHP - Late Static Bindings&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-6261698167876015651?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/6261698167876015651/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/03/problemas-al-acceder-al-nombre-de-la.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6261698167876015651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/6261698167876015651'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/03/problemas-al-acceder-al-nombre-de-la.html' title='Problemas al acceder al nombre de la clase en un esquema de herencia desde metodos estaticos en PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2091269238635698271</id><published>2008-02-29T01:54:00.000-02:00</published><updated>2008-02-29T01:59:41.919-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file system'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='source code'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='expresiones regulares'/><title type='text'>Metadata en nombres de archivos PHP</title><content type='html'>Por suerte con PHP no hay restricciones o estandares a seguir con respecto al nombrado de los archivos PHP. Algo que no es nada nuevo es que podemos usar el nombre del archivo para comunicar más información que solo el nombre del archivo. Algo muy usado es ponerle "archivo.class.php" o directamente "archivo.class" a los archivos PHP que contienen una o más clases. Se puede notar que ni siquiera es requerido que el archivo tenga extensión ".php".&lt;br /&gt;&lt;br /&gt;A continuación voy a mostrar algunos ejemplos de nombrado de archivos que pueden ser de utilidad al implementar aplicaciones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Paquetes codificados en el nombre del archivo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PHP no soporta paquetes, lo que es un dolor de cabeza para la implementación de aplicaciones de cierto tamaño. Hay muchas formas de simular la presencia de paquetes en PHP, en este caso se hace con el nombrado de los archivos.&lt;br /&gt;&lt;br /&gt;Los paquetes son una setructura jerárquica similar a una estructura de directorios, lo paquetes pueden contener archivos y otros paquetes. Por ejemplo, en Java, los paquetes coinciden con la estructura de directorios en donde se encuentran los archivos (paquetes físicos), en cambio, en C# se pueden definir una especie de paquetes lógicos llamados "namespaces".&lt;br /&gt;&lt;br /&gt;Usando el nombre de los archivos para codificar paquetes lógicos nos evitamos problemas como tener dos archivos con el mismo nombre, o simplemente tener un poco más de orden cuando trabajamos con gran cantidad de archivos, y se podrían tener una inmensa cantidad de archivos, en el mismo directorio, perfectamente distinguidos entre si y fáciles de encontrar a simple vista.&lt;br /&gt;&lt;br /&gt;Digamos que en nuestro proyecto tenemos 3 paquetes: "core", "core.utils", "core.db". Por otro lado tenemos 100 archivos, 20 del paquete "core", 40 de "core.utils" y otros 40 de "core.db". Y llamamos a los archivos dentro de estos paquetes de la siguiente forma:&lt;br /&gt;&lt;br /&gt;- core.UnArchivo.php&lt;br /&gt;- core.OtroArchivo.php&lt;br /&gt;- ...&lt;br /&gt;- core.utils.UnArchivo.php&lt;br /&gt;- core.utils.OtroArchivo.php&lt;br /&gt;- ...&lt;br /&gt;- core.db.MySQL.php&lt;br /&gt;- core.db.PostgreSQL.php&lt;br /&gt;- ...&lt;br /&gt;&lt;br /&gt;En principio, estos nombres pueden servir para ver de forma simple que archivos están en que paquete, simplemente listando los archivos ordenados por nombre.&lt;br /&gt;&lt;br /&gt;Otra ventaja, ya desde el punto de vista del sistema que estemos construyendo, es por ejemplo hacer un script para cargar o incluir todos los archivos de determinado paquete, por ejemplo, la siguiente función incluye todos los archivos del paquete:&lt;br /&gt;&lt;br /&gt;function includeDB( $path )&lt;br /&gt;{&lt;br /&gt;   $d = dir($path);&lt;br /&gt;&lt;br /&gt;   while (false !== ($entry = $d-&gt;read())) // Por cada entrada del directorio&lt;br /&gt;   {&lt;br /&gt;      if (is_file($path . "/" . $entry))   // Si la entrada es un archivo&lt;br /&gt;      {&lt;br /&gt;         if ( strcmp("core.db", substr($entry,0,7)) == 0 ) // Si el nombre empieza con "core.db"&lt;br /&gt;         {&lt;br /&gt;            include_once($path . "/" . $entry); // Lo incluye para usarlo&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Explicación del código:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$path&lt;/span&gt; es la ruta del directorio que contiene los archivos. No se verifica que sea correcta, esta verificación se podría agregar para hacerlo mas robusto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$entry&lt;/span&gt; son los archivos del directorio.&lt;br /&gt;&lt;br /&gt;Lo demás ya se explica con los comentarios en el código.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tambien se podria usar el nombrado para hacer un class loader (como el del codigo anterior) mas inteligente, sin necesidad de incluir todos los archivos del sistema, si no incluyendo solo los que se van a usar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Decir que contiene el archivo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un archivo php puede contener cualquier cosa, ya que no es mas que un archivo de texto.&lt;br /&gt;&lt;br /&gt;Pensando en alguno de los posibles contenidos que puede tener un archivo php podría nombrar:&lt;br /&gt;&lt;br /&gt;- scripts (en el sentido de tener un código que se ejecuta automáticamente al cargar el archivo)&lt;br /&gt;- funciones&lt;br /&gt;- clases&lt;br /&gt;- interfaces&lt;br /&gt;- paginas (código HTML mezclado con script PHP)&lt;br /&gt;&lt;br /&gt;Entonces, podríamos utilizar el nombre del archivo para decir que tipo de contenido tiene, en los casos anteriores podríamos tener los siguientes nombres:&lt;br /&gt;&lt;br /&gt;- DownloadFile.script.php&lt;br /&gt;- String.functions.php&lt;br /&gt;- Invoice.class.php&lt;br /&gt;- Clonable.interface.php&lt;br /&gt;- Contacts.page.php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;También, esta notación puede servir para saber a simple vista que tiene cada archivo, o también para cargar los archivos por su tipo, por ejemplo si quiero cargar todas las clases de un determinado directorio, puedo usar el código anterior y modificarlo un poco y buscar los archivos que tienen "class" adelante del ".php" como en el siguiente ejemplo:&lt;br /&gt;&lt;br /&gt;function includeDB( $path )&lt;br /&gt;{&lt;br /&gt;   $d = dir($path);&lt;br /&gt;&lt;br /&gt;   while (false !== ($entry = $d-&gt;read())) // Por cada entrada del directorio&lt;br /&gt;   {&lt;br /&gt;      if (is_file($path . "/" . $entry))   // Si la entrada es un archivo&lt;br /&gt;      {&lt;br /&gt;         if ( preg_match("/(.*)class\.php$/", $entry, $matches) ) // Si el nombre tiene "class" antes del ".php"&lt;br /&gt;         {&lt;br /&gt;            include_once($path . "/" . $entry); // Lo incluye para usarlo&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una posible aplicacion de esto es si uno tiene scripts de testing para correr, y algun otro script encargado de correr los tests, y los test se llaman por ejemplo "paquete.Nombre.test.php", puedo buscar todos los tests, incluirlos, correrlos y mostrar los resultados. A simple vista se puede ver el poder con el que se cuenta simplemente por nombrar los archivos de cierta forma.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Paquetes y contenido&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y podemos también decir en que paquete esta un archivo y ademas poner que tipo de contenido tiene, por ejemplo:&lt;br /&gt;&lt;br /&gt;- core.db.MySQL.class.php&lt;br /&gt;- core.String.functions.php&lt;br /&gt;- ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusión&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Podemos utilizar los nombres de los archivos para poner metadatos que nos dan información sobre el archivo, que lugar ocupa o que responsabilidad tiene en el sistema y que tipo de contenido tiene. Esa información la podemos utilizar para hacer sistemas mejores, mas eficientes, mas potentes, etc, ademas de que es una buena forma de ordenar los archivos cuando tenemos un gran numero de ellos. Y como vimos es muy simple hacer scripts que procesen los nombres de los archivos, utilizando funciones del file system como dir() para leer nombres de archivos y funciones de strings o expresiones regulares para filtrarlos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2091269238635698271?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2091269238635698271/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/02/metadata-en-nombres-de-archivos-php.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2091269238635698271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2091269238635698271'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/02/metadata-en-nombres-de-archivos-php.html' title='Metadata en nombres de archivos PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6393816664375104123.post-2935884701052220184</id><published>2008-02-27T19:56:00.001-02:00</published><updated>2008-03-17T14:04:26.044-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file system'/><category scheme='http://www.blogger.com/atom/ns#' term='archivos'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='expresiones regulares'/><title type='text'>Consultas sobre archivos de un directorio en PHP</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Problema&lt;/span&gt;: necesidad de obtener los nombres de archivos de un directorio filtrados por alguna condición.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución&lt;/span&gt;: utilizar expresiones regulares para las condiciones sobre los nombres de archivos del directorio.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;function getFileNames($path, $match = null, $groups = null)&lt;br /&gt;{&lt;br /&gt; if (is_dir($path))&lt;br /&gt; {&lt;br /&gt;    $res = array();&lt;br /&gt;    $d = dir($path);&lt;br /&gt;&lt;br /&gt;    while (false !== ($entry = $d-&gt;read()))&lt;br /&gt;    {&lt;br /&gt;       if (is_file($path . "/" . $entry))&lt;br /&gt;       {&lt;br /&gt;          $matches = null;&lt;br /&gt;          if ($match)&lt;br /&gt;          {&lt;br /&gt;              if (preg_match($match, $entry, $matches))&lt;br /&gt;              {&lt;br /&gt;                  if (!$groups) $res[] = $entry;&lt;br /&gt;                  else&lt;br /&gt;                  {&lt;br /&gt;                     $gentry = "";&lt;br /&gt;                     foreach($groups as $i)&lt;br /&gt;                     {&lt;br /&gt;                      $gentry .= $matches[$i];&lt;br /&gt;                     }&lt;br /&gt;                     $res[] = $gentry;&lt;br /&gt;                  }&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;          else // Si no paso match, le entrego derecho la entrada.&lt;br /&gt;          {&lt;br /&gt;             $res[] = $entry;&lt;br /&gt;          }&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    $d-&gt;close();&lt;br /&gt;    return $res;&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;    throw new Exception("El directorio: $path no existe.");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Explico el código:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;function getFileNames($path, $match = null, $groups = null)&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;path&lt;/span&gt;: directorio del cual se quieren leer los nombres de archivos&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;match&lt;/span&gt;: expresión regular con la cual se filtran los nombres de archivos (si no se pasa nada, se devuelven los nombres de todos los archivos del directorio)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;groups&lt;/span&gt;: solo se usa si match no es null, y se usa para seleccionar los grupos de la expresión regular cuando coinciden los nombres de los archivos con &lt;span style="font-weight: bold;"&gt;match&lt;/span&gt;. Más adelante explicaré como es que se usa, pero la idea es poder sacar pedazos del nombre del archivo y devolver eso, por ejemplo si tenemos infomración codificada en el nombre como: paquete.Clase.class.php, y me interesa devolver solo el nombre de la clase, o sea "Clase". Si &lt;span style="font-weight: bold;"&gt;groups &lt;/span&gt;es null se devuelven los nombres de todos los archivos que coincidan con la expresión regular &lt;span style="font-weight: bold;"&gt;match&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;if (is_dir($path))&lt;/blockquote&gt;&lt;/span&gt;Verifica si &lt;span style="font-weight: bold;"&gt;path &lt;/span&gt;es un directorio válido, si no lo es lanza una excepción.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;$res = array();&lt;/blockquote&gt;&lt;/span&gt;Se crea la lista de nombres a devolver, todos los nombres de archivos que coincidan con los criterios serán incluidos en &lt;span style="font-weight: bold;"&gt;res&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;$d = dir($path);&lt;/blockquote&gt;&lt;/span&gt;Se abre el directorio para comenzar a leer sus entradas. Para entender como trabaja dir() visita el &lt;a href="http://www.php.net/manual/es/class.dir.php"&gt;manual&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;while (false !== ($entry = $d-&gt;read()))&lt;/blockquote&gt;&lt;/span&gt;Recorre cada entrada del directorio, estas son archivos y subdirectorios, &lt;span style="font-weight: bold;"&gt;entry &lt;/span&gt;es el nombre del archivo o subdirectorio actual en la recorrida.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;if ($match)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     if (preg_match($match, $entry, $matches))&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Si &lt;span style="font-weight: bold;"&gt;match &lt;/span&gt;no es null, verifico que &lt;span style="font-weight: bold;"&gt;entry &lt;/span&gt;coincida con él. Para entender como trabaja &lt;span style="font-weight: bold;"&gt;preg_match&lt;/span&gt;, visita el &lt;a href="http://www.php.net/manual/es/function.preg-match.php"&gt;manual&lt;/a&gt;. En &lt;span style="font-weight: bold;"&gt;matches &lt;/span&gt;se guardan los grupos definidos en &lt;span style="font-weight: bold;"&gt;match &lt;/span&gt;que coincidieron con &lt;span style="font-weight: bold;"&gt;entry&lt;/span&gt;, y si &lt;span style="font-weight: bold;"&gt;groups &lt;/span&gt;no es null los voy a usar para armar los nombres que voy a devolver.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;if (!$groups) $res[] = $entry;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    $gentry = "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    foreach($groups as $i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        $gentry .= $matches[$i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     $res[] = $gentry;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Si &lt;span style="font-weight: bold;"&gt;groups &lt;/span&gt;es null, simplemente agrego &lt;span style="font-weight: bold;"&gt;entry &lt;/span&gt;a la solución, o sea, devuelvo el nombre del archivo así como está y se que ese nombre coincide con la expresión regular &lt;span style="font-weight: bold;"&gt;match&lt;/span&gt;.&lt;br /&gt;Si &lt;span style="font-weight: bold;"&gt;groups &lt;/span&gt;no es null, busco en &lt;span style="font-weight: bold;"&gt;matches &lt;/span&gt;los grupos indicados por &lt;span style="font-weight: bold;"&gt;groups&lt;/span&gt;, concatenando dichos grupos, la concatenación de todos los grupos seleccionados es el nombre a incluir en la solución. De esta forma, si los archivos tienen nombres por ejemplo "paquetes.Clase.class.php", podría devolver "Clase.php", luego mostraré ejemplos de como se hace esto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;else // Si no paso match, le entrego derecho la entrada.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     $res[] = $entry;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Si &lt;span style="font-weight: bold;"&gt;match &lt;/span&gt;es null, simplemente agrego a la solución el nombre del archivo sin procesarlo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;$d-&gt;close();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;return $res;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Cierra el directorio y devuelve la solución.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Algunos ejemplos de uso:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para entender que hacen necesitas entender las expresiones regulares usadas, si no sabes mucho de expresiones regulares te aconsejo que busques en google algún manual de expresiones regulares.&lt;br /&gt;&lt;br /&gt;En estos casos usaremos como directorio "." que es el directorio actual. Puedes cambiarlo y utilizar otro directorio si lo deseas.&lt;br /&gt;&lt;br /&gt;getFileNames("."); // Todos los archivos, no hay ninguna restricción.&lt;br /&gt;&lt;br /&gt;getFileNames(".", "/\.php$/i"); // Todos los archivos con extensión ".php"&lt;br /&gt;&lt;br /&gt;getFileNames(".", "/^utils\.(.*)\.php$/i"); // Todos los ".php" del paquete utils (pensado para nombres con la forma "paquete.Class.php", en este caso paquete es "utils"). Observar el "(.*)", eso es un grupo y se podría usar el parámetro &lt;span style="font-weight: bold;"&gt;groups &lt;/span&gt;para obtenerlo, como veremos en el siguiente ejemplo.&lt;br /&gt;&lt;br /&gt;getFileNames(".", "/(.*)\.php$/i", array(1)) ); // Todos los ".php", pero sin el .php (ver que la regexp &lt;span style="font-weight: bold;"&gt;match &lt;/span&gt;tiene un grupo y en el array selecciono ese grupo). El grupo 0 (cero) coincide con el nombre del archivo.&lt;br /&gt;&lt;br /&gt;getFileNames(".", "/^utils\.(.*)\.php$/i", array(1,5,0)) ); // Todos los php del paquete utils, idem anterior, ahora sin el "utils." Observar todo lo que se pasa en &lt;span style="font-weight: bold;"&gt;groups&lt;/span&gt;, ver que el grupo 5 no existe y por lo tanto no es considerado, luego si tengo un archivo "utils.Class.php", el resultado de esto es "Classutils.Class.php", porque concatena el grupo 1 ("Class") y el grupo 0 (que es el nombre del archivo), y ver que se respeta el orden establecido en &lt;span style="font-weight: bold;"&gt;groups&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En conclusión, no solo se logró hacer una función que resuelve el problema, si no que se obtuvo una solución que puede hacer un preproceso de los nombres a devolver (gracias a &lt;span style="font-weight: bold;"&gt;groups&lt;/span&gt;), lo que permite extraer información presente en los nombres de los archivos y concatenarla a gusto.&lt;br /&gt;&lt;br /&gt;Siéntanse libres de utilizar este script, modificarlo a gusto, hacer comentarios y mejoras sobre él. Y si lo incluyen en algún proyecto no se olviden de hacer referencia a este blog y/o a este post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6393816664375104123-2935884701052220184?l=yuppframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuppframework.blogspot.com/feeds/2935884701052220184/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://yuppframework.blogspot.com/2008/02/consultas-sobre-archivos-de-un.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2935884701052220184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6393816664375104123/posts/default/2935884701052220184'/><link rel='alternate' type='text/html' href='http://yuppframework.blogspot.com/2008/02/consultas-sobre-archivos-de-un.html' title='Consultas sobre archivos de un directorio en PHP'/><author><name>Pablo Pazos Gutiérrez</name><uri>http://www.blogger.com/profile/17823001433387903871</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jS3wcH3mkBM/TUECoygv8YI/AAAAAAAAExY/nOf4nYVX9Nw/s220/pab%2B2009%2BSUEIIDISS%2Bcara.jpeg'/></author><thr:total>0</thr:total></entry></feed>
