Too Cool for Internet Explorer

Cook up websites fast with CakePHP, V 2

Hora y Fecha: Enero 18, 2007 @ 11:08 pm Autor: Moisés Maciá
Categorías:
638 views

IBM llega al final de la serie de artículos dedicados al framework CakePHP con esta entrega:

Generally, caching happens anytime a request is made, and the responding application says, “I don’t have to go get that. I’ve already got one.” Most of the time, when a computer user hears the word “cache,” he thinks of a browser’s cache. Typically, in order to speed up the user experience, your browser will keep copies of what it believes are static files — generally images, stylesheets, static HTML, and script files. While this type of caching can sometimes cause problems for developers of Web applications, this type of caching is not our focus here.

El link al artículo online, sin necesidad de registro.



Cook up websites fast with CakePHP, IV 0

Hora y Fecha: Enero 10, 2007 @ 9:33 pm Autor: Moisés Maciá
Categorías:
506 views

IBM publica otra entrega del curso sobre CakePHP:

There are multiple ways of saving session data using CakePHP’s Session component, and each method has its advantages. In this tutorial, you’ll learn how to use the Session component by incorporating all three ways into your application, so you’ll be able to pick the best one that works for you. You’ll also learn how to use the Request Handler component to aid you in your handling of various HTTP requests, including requests from mobile browsers, or requests containing XML or HTML content.

Versión online o versión PDF, a gusto del consumidor.

Happy baking!!



Primera technical preview de CakePHP 1.2 2

Hora y Fecha: Diciembre 25, 2006 @ 8:47 pm Autor: Moisés Maciá
Categorías:
834 views

Estas navidades nos dejan un regalito a los desarrolladores de PHP: CakePHP 1.2.0.4206_dev es la próxima versión de este framework e incorpora jugosas novedades. Es una versión de desarrollo así que no todas las novedades están finalizadas y es posible que todavía se incorporen algunas funcionalidades sorpresa antes de cerrar la rama.

Esto es lo nuevo en CakePHP 1.2:

  • Validación: Se ha ncorporado una nueva clase de validación de datos que reemplaza a los antiguos y escasos validadores, ya no habrá que implementar hacks para controlar en detalle la validación de formularios.
  • FormHelper: Ha sido mejorado y extendido notablemente. El nuevo modelo está completamente orientado a objetos y permite simplificar y reducir la cantidad de código que escribimos para crear un formulario.
  • EmailComponent: Por fín un método unificado para enviar correo electrónico en texto plano, HTML o ambos. Otro hack menos que tenemos que implementar.
  • SecurityComponent: Ahora con soporte para HTTP_AUTH a través de la variable $requireLogin.
  • CTP: El antiguo formato ".thtml" se desaconseja en favor del nuevo ".ctp". Este servirá de plantilla para cualquier tipo de contenido, sin importar que sea XHTML, XML, RSS, etc.
  • Paginación: la paginación de datos finalmente se integra en el diseño del framework. Se encuenta en el método paginate en la clase Controller y en PaginatorHelper. La operación de paginado es bastante simple. Ahora se utiliza $this->paginate(); en lugar de $this->Model->findAll();, después en las vistas $paginator->next(). PaginatorHelper se añade automáticamente al utilizar paginate().
  • Extensiones Url: especificar el contenido del recurso solicitado es ahora más sencillo con Router::parseExtensions() y RequestHandler. Cosas como XML y RSS pueden añadirse sin cambiar el código del controlador. Las vistas se mapean a /app/views/<controller>/<contenttype>/<viewfilename>.ctp
  • Model Behaviors: Un comportamiento es algo que ayuda a manejar los datos del modelo. De manera similar a como un componente echa una mano al controlador, ahora se pueden utilizar comportamientos para extender la funcionalidad de la capa del modelo. Los comportamientos se almacenan en /app/models/behaviors. Uno de los comportamientos en los que se esta trabajando actualmente es ListBehavior.
  • Datasources: La base de datos no es el único sitio donde se pueden almacenar los datos. Ahora se pueden definir DataSources personalizados para utilizar a través de los métodos de los modelos.
  • i18N y l10N: Una de las mejoras más demandadas. Permite desplegar aplicaciones en varios idiomas sin necesidad de modificar el código mediante la función __(), getText se encarga del resto.


Cook up websites fast with CakePHP, III Comments Off

Hora y Fecha: Diciembre 20, 2006 @ 12:49 pm Autor: Moisés Maciá
Categorías:
499 views

IBM publica otra entrega del curso sobre CakePHP:

In this article, you will learn how to use CakePHP’s Sanitize and Security components to help secure your user-submitted data. You will also learn how to handle invalid requests.

En este caso no hace falta registro.

Happy baking!!



Cook up websites fast with CakePHP, II 0

Hora y Fecha: Diciembre 13, 2006 @ 11:41 pm Autor: Moisés Maciá
Categorías:
585 views

IBM acaba de publicar la segunda parte de su serie de artículos dedicados al framework CakePHP. En esta ocasión se cubren los temas de scaffolding, el script Bake y las listas de control de acceso:

This tutorial shows you how to jumpstart your CakePHP application using scaffolding and Bake. You will also learn the ins and outs of using CakePHP’s Access Control Lists (ACLs). You’ll get a look at what scaffolding is and what it provides. Then you’ll learn how to use Bake to generate the code for a scaffold, letting you tweak it as you go. Finally, you will learn about ACLs: what they are, how to create them, and how to use them in your application.

De nuevo vuelve a ser necesario el registro para acceder a él. La primera parte se puede descargar (sin necesidad de registro) en formato PDF de aquí.

Happy baking!!



Paginado de datos 2

Hora y Fecha: Diciembre 8, 2006 @ 7:13 pm Autor: Moisés Maciá
Categorías:
787 views

Después del tsunami menéame de ayer (en un par de horas tuve el tráfico de casi un mes) vamos a retomar un poco la temática habitual hablando de varios trucos para paginar datos en MySQL.

¿Qué es el paginado?

El paginado de datos consiste en trocear una salida de datos muy larga en paquetes mas pequeños y digeribles para el usuario. Hay ejemplos de paginados en la inmensa mayoría de aplicaciones, especialmente en las de Internet. Por ejemplo:

Paginado de Google:

Paginado de Google

Paginado de Flickr:

Paginado en Flickr

Paginado de Digg:

Paginado en Digg

¿Por qué debo paginar?

  • Para el usuario es más sencillo ver 10 paquetes de 10 resultados que 100 de golpe.
  • Probablemente al usuario sólo le interesen los resultados más relevantes que son los que aparecen en la primera o segunda página.
  • Para la base de datos es más sencillo y rápido traer 10 resultados que 100.
  • Para el servidor HTTP es más sencillo y rápido servir 10 resultados que pesan 20Kb en lugar de 100 resultados que pesan 200Kb.

¿Cómo paginar datos?

Para paginar los datos necesitamos de antemano dos cosas: el tamaño de la pagina y el total de filas que tenemos de datos.

Contamos el total de filas:

  1.  
  2. SELECT COUNT(*) AS total FROM employees;
total
---------------
63

Mediante la instrucción SQL LIMIT n,m podemos trocear los datos de salida y mostrar la pagina que nos interese. LIMIT acepta dos parámetros: el primero es el offset de la pagina y el segundo la cantidad de filas que devuelve.

Devolvemos 10 resultados de la pagina 3:

  1.  
  2. SELECT id,name FROM employees LIMIT 3,10;
id      name
------------------------
13     Pepe
22     Manolo
34     Jose
...

Necesitamos el total de filas para calcular cuantos paquetes de datos (paginas) necesitamos. En este caso tenemos un total de 63 filas paginadas de 10 en 10. Veamos un script PHP muy simple que nos devuelve las paginas:

  1.  
  2. $pagging = 10;
  3. isset($_GET[‘page’]) ? $current = (int)$_GET[‘page’] : $current = 1;
  4.  
  5. $q = mysql_query("SELECT COUNT(*) FROM employees;");
  6. $row = mysql_fetch_assoc($q);
  7.  
  8. $total_pages = (int)ceil($row[‘total’]/$pagging);
  9.  
  10. //header pagging
  11. echo "Pagina $current de $total_pages ({$row['total']} resultados)nn";
  12.  
  13. //body pagging
  14. $q = msql_query("SELECT id,name FROM employees LIMIT {$current-1},$pagging;");
  15. while($row = mysql_fetch_assoc($q))
  16. {
  17.    echo vsprintf("%dt%sn", array($row[‘id’], $row[‘name’]));
  18. }
  19.  
  20. //footer pagging
  21. echo "«t";
  22. for($i=0;$i < $total_pages;$i++)
  23. {
  24.    if($i === ($current-1))
  25.       echo " [$i] ";
  26.    else
  27.       echo " $i ";
  28. }
  29. echo "t»";
Pagina  1 de 7 (63 resultados)

13     Pepe
22     Manolo
34     Jose
...

«   [1] 2 3 4 5 6 7   »

Consideraciones para MySQL

Para calcular el paginado debemos utilizar obligatoriamente dos consultas como mínimo, si las consultas son complejas podemos tener un problema de rendimiento importante pero existen maneras de atajar el camino. Si la base de datos que utilizamos es MySQL existe un hack para devolver el resultado paginado y el total de filas en un solo paso.

Seleccionamos la pagina que nos interesa:

  1.  
  2. SELECT SQL_CALC_FOUND_ROWS id,name FROM employees LIMIT 0,10;

Miramos cuantas filas tiene en total:

  1.  
  2. SELECT FOUND_ROWS();

Siguen siendo dos consultas pero a efectos prácticos rinde como “una y media”, en cualquier caso nunca será tan lento como hacerlo con las dos consultas anteriores.

SQL_CALC_FOUND_ROWS funciona a partir de la versión 4 de MySQL si no recuerdo mal.

Las instrucciones SQL_CALC_FOUND_ROWS y FOUND_ROWS() deben ir una detrás de otra, si hacemos consultas por en medio es muy probable que nos encontremos con resultados imprecisos.

Me consta que Oracle tiene una instrucción equivalente pero no sabría explicaros, no tengo suficiente experiencia con esa base de datos. PostgreSQL y SQLite si que sé seguro que no pueden hacer uso de este hack, al menos en sus versiones actuales.

Paginado deluxe en CakePHP

Los usuarios de CakePHP estamos de suerte, Andy Dawson escribió un helper que permite realizar paginados de cualquier tipo de datos con muy poco esfuerzo. Permite ordenar datos tabulados por columnas y el interfaz de control funciona completamente en AJAX (si el cliente lo permite o nosotros lo forzamos).

Encontrareis todo lo referente al paginado en Bakery.



IBM recomienda CakePHP 4

Hora y Fecha: Noviembre 22, 2006 @ 1:19 am Autor: Moisés Maciá
Categorías:
811 views

Vaya lujazo, IBM ha dedicado nada menos que 5 artículos al desarrollo de aplicaciones con CakePHP en su portal IBM’s developerWorks, un framework en el que llevo colaborando algún tiempo (aunque todavía no he ganado el privilegio necesario para subir cosas directamente al SVN).

Los artículos de la serie son:

  • Parte 1: configuración, puesta en marcha de CakePHP y una pequeña aplicación de login.
  • Parte 2: cubre el scaffolding, la herramienta Bake y las listas de control de acceso (ACL).
  • Parte 3: sobre Sanitize y cómo crear aplicaciones seguras filtrando los datos de entrada, el componente Security y cómo manejar peticiones mal formadas y temas avanzados de validación.
  • Parte 4: cubre el componente Session, mostrando tres mecanismos para guardar datos de estado, así como el componente Request Handler para manejar multiples tipos de peticiones (navegadores embebidos, peticiones XML, peticiones HTML, etc).
  • Parte 5: cacheado de vistas y layouts.

Los artículos se encuentran aquí (de momento sólo el primero). Hace falta registrarse para verlos (el registro es incomodo pero gratuito).

Tiembla Rails :)



CakePHP 1.0 0

Hora y Fecha: Mayo 2, 2006 @ 10:48 am Autor: Moisés Maciá
Categorías:
461 views

Genial, justo acaba de salir la última versión estable de CakePHP; la 1.0, todo un logro.

Cake es un framework que aplica los patrones de diseño MVC y scaffolding en PHP, y lo deberías utilizar si piensas que tus programas en PHP son una enorme bola de mierda porque una de cada tres lineas de XHTML empieza y termina con <?php ?>.

  1. Flexible License - Cake is distributed under the MIT License
  2. Clean IP - Every line of code was written by the CakePHP development team
  3. Extremely Simple - Just look at the name…It’s Cake
  4. Rapid Development - Build apps faster than ever before (check out the zZine article)
  5. Best Practices - Cake is easy to understand and sets the industry standard in security authentication, and session handling, among other features.
  6. OO - Whether you are a seasoned object-oriented programmer or a beginner, you’ll feel comfortable
  7. No Configuration - Set-up the database and watch the magic begin



Bad Behavior has blocked 374 access attempts in the last 7 days.