Spiga

Dailymotion creado con Symfony framework

February 24, 09 by Pedro Hernández

Así es y se me había pasado publicar esta gran noticia, el sitio http://www.dailymotion.com/ ha sido desarrollado con el framework Symfony. Pueden ver el resto de las notas en el sitio oficial: Dailymotion, powered by symfony, y en español aqui: Dailymotion también utiliza Symfony.

Instalando mod_top en Centos 5.x

February 16, 09 by Pedro Hernández

En casa y en la agencia donde trabajo usamos como sistema operativo para los servidores Centos y como desde hace un tiempo vengo viendo el tema de monitorizar para mejorar la performance de las aplicaciones que desarrollo me decidí a probar mod_top. Esta herramienta corriendo en centos es gracias al soporte de Red Hat Enterprise Linux (RHEL) 4 o 5.

De momento mod_top solo da soporte a las siguiente versiones de PHP: 4.4x, 5.1.x, 5.2.x. Aunque piensan hacerlo además para: Perl, Ruby, Python, mySQL, Postgres, Apache1+2.

Pues bien ¿y qué se pude hacer con esta herramienta?, como ellos lo definen:

  • Localizar cuellos de botella en las aplicaciones.
  • Solucionar problemas gran consumo de memoria.
  • Comprender el uso de la CPU con carga.
  • Diagnosticar las causas de lentitud o la utilización de los recursos.
  • Descubrir las dependencias de la base de datos.
  • Impresionar a sus amigos con su eficiente código escalable.

Instalando mod_top

Para comenzar necesitamos descargar la versión compatible con nuestro PHP.  En mi caso descargué la versión 0.5 (la última a la fecha 2008/02/14) con soporte para PHP  v5.2.x y arquitectura i686. Yo suelo descargar las librerías aquí:

# cd /usr/local/src

Descomprimimos y guardamos su contenido en /opt/mod_top:

# mkdir /opt/mod_top

En este caso el archivo es mod-top-0.5-php52-i686.tar.gz:

# tar -xvzf mod-top-0.5-php52-i686.tar.gz -C /opt/mod_top

Terminado esto toca instalar las librerías Lamp1701 como muestra la documentación…

lib/liblamp1701read.so      - lamp1701 libraries
    liblamp1701utils.so
    liblamp1701write.so
    liblamp1701read.so.0    - shared object name links
    liblamp1701utils.so.0
    liblamp1701write.so.0

… en la carpeta /usr/lib o /usr/lib64 si fuese el caso:

# ln -s /opt/mod_top/mod-top-0.5-php52-i686/lib/liblamp1701*.0 /usr/lib

Instalando la extensión en PHP

Se crea un enlace simbólico del archivo php/lamp1701.so (que en este caso está en /opt/mod_top/mod-top-0.5-php52-i686/) en la carpeta de módulos de PHP (en este caso /usr/lib/php/modules):

# ln -s /opt/mod_top/mod-top-0.5-php52-i686/php/lamp1701.so /usr/lib/php/modules

Ahora a activar la extensión en el php.ini:

# cd /etc/php.d/
# vim mod_top.ini

Dentro del archivo agregamos:

; Enable lamp1701 extension module
extension=lamp1701.so

Ejecutando mod_top

Lo primero es iniciar lamp1701d que se encuentra en sbin/lamp1701d:

# cd /opt/mod_top/mod-top-0.5-php52-i686/sbin
# ./lamp1701d

Ahora ejecutar mod_top:

# cd /opt/mod_top/mod-top-0.5-php52-i686/bin
# ./mod_top -s 127.0.0.1

Una vez ejecutandose este proceso no podremos usar más esta terminal, si no únicamente para monitorizar.

En otra terminal

Verificamos que el proceso mod_top se esté ejecutando:

# ps aux | grep -i mod_top
root      6956  0.2  0.3   4044  2924 tty1     S+   10:43   0:00 ./mod_top -s 127.0.0.1
root      6970  0.0  0.0   3976   744 pts/0    R+   10:44   0:00 grep -i mod_top

Finalmente toca iniciar o reiniciar apache:

# apachectl start

Ahora ejecuta algún proyecto que tengas en php y comenzaras a ver los resultados como se muestra aquí, sobre todo resulta interesante cuando lo usas con symfony.

Saludos.

Usando AMFPHP v1.9b2 con symfony 1.0.x

October 22, 08 by Pedro Hernández

Hace poco se me dió la oportunidad de comenzar un proyecto que requeria comunicación desde la parte de frontend el usar Flash v9.

Como se esta usando symfony comencé a buscar en el repositorio oficial de symfony si habia ya un plugin que integrara AMF, y efectivamente encontré uno: sfAmfPlugin, el problema es que usa SabreAMF que funciona a partir de la versión 5.1 de php y el cliente de este proyecto solo nos proporciona php v5.0 y el mas cercano compatible con esta versión es AMFPHP.

Luego buscando entre el repositorio antiguo de symfony descubrí que alguien ya habia implementado amfphp con symfony, este plugin es: sfAmfphpPlugin; pero la version que usa de AMFPHP es la 1.2, que fue liberada en el 2006.

Partiendo de su proyecto es que he realizado mejoras, usando la ultima version de AMFPHP: v1.9 beta 2 liberada el 2008-01-20. Entre estas mejoras se encuntran:

  • Usa la versión más actual de AMFPHP (1.9 beta2).
  • Este plugin trae un modulo que permite habilitarce desde cualquier aplicación para poder acceder al gateway o el browser.
  • Se puede acceder al browser de clases que trae hecho en flex.
  • Por seguridad no se puede acceder al browser desde un site en producción, pero el gateway se puede acceder libremente.

Para poder usar el plugin debes de hacer lo siguiente:

  1. Crea un proyecto nuevo en symfony, en este caso la ultima version de symfony de la rama 1.0.x es la 1.0.18.
    .
  2. Descarga el plugin que dejo más abajo. De momento no esta en el site oficial de symfony debido a que su creador recién se entera de él :P .
    .
  3. Instala el plugin via PEAR como se menciona en el listado 17-16 del libro oficial. Durante ese paso se copiará la carpeta web del plugin a la carpeta web de tu proyecto, solo dejalo así por que alli se encuentra el browser del AMFPHP.
    .

    >> plugin    installing web data for plugin
    >> dir+      D:\www\sf10-dev\web\sfAmfphpPlugin\swf
    >> dir+      D:\www\sf10-dev\web\sfAmfphpPlugin\swf\browser
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlugin\swf\browser\AC_OETags.js
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlugin\swf\browser\history.js
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlugin\swf\browser\history.swf
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlugin\swf\browser\index.html
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlu...rowser\playerProductInstall.swf
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlu...swf\browser\servicebrowser.mxml
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlu...\swf\browser\servicebrowser.swf
    >> file+     D:\www\sf10-dev\web\sfAmfphpPlu...swf\browser\services-config.xml

    .

  4. Ahora habilita los modulos del plugin en la aplicacion que gustes desde su settings.yml:
    .

    all:
      .settings:
        # Activated modules from plugins or from the symfony core
        enabled_modules:        [default, sfAmfphpModule]

    .

  5. Ahora agrega las nuevas rutas a tu aplicación desde el routing.yml:
    .

    sf_amfphp_gateway:
      url:   /amfphp/gateway
      param: { module: sfAmfphpModule, action: gateway }
    
    sf_amfphp_browser:
      url:   /amfphp/browser
      param: { module: sfAmfphpModule, action: browser }

    .

Si ahora intentas ingresar a por ejemplo: http://www.myproj.com/frontend_dev.php/amfphp/gateway. Te deberia salir la pagina clasica de AMFPHP diciendo que se instaló correctamente.

Ahora si ingresas a: http://www.sf10-dev.com/frontend_dev.php/amfphp/browser, (recuerda que el browser solo se puede ver desde un entorno de desarrollo) este fallará al cargar debido a que no encuentra la carpeta services.

Para esto entra a la carpeta lib del plugin y copia la carpeta services, finalmente pegala en el lib de tu proyecto. Ahora si vuelve a cargar el browser de AMFPHP y veras los resultados ;) .

Dejo en descarga el plugin aquí y un proyecto con los ejemplo que vienen para la ultima versión de AMFPHP.

Saludos.

Unknown channel “pear.symfony-project.com” al tratar de contruir plugins en symfony

October 20, 08 by Pedro Hernández

Sucede que desde hace un tiempo tengo symfony instalado via SVN (Subversion, pronto haré un tutorial sobre ello), y tratando de empaquetar un plugin me doy con la grata sorpresa de este error:

> pear package
Error: Unknown channel "pear.symfony-project.com"
Parsing of package.xml from file "package.xml" failed
Cannot package, errors in package file

La solución fue simple, era nada más de agregar el canal pear de symfony al channel-discover como si de instalar symfony via PEAR se tratase (pero solo esto, recordar que ya lo tengo instalado via SVN):

> pear channel-discover pear.symfony-project.com
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded

Ahora si intentas empaquetar el plugin todo será perfecto :D :

> pear package
Package sfTestPlugin-1.0.1.tgz done

Por cierto, a la hora de construir un plugin te vendria bien usar el plugin sfPluginManagerPlugin, puedes ver en el repositorio del plugin como lo usan.

Saludos :)

Redirección 301 en Symfony: filtros vs htaccess

January 27, 08 by Pedro Hernández

Este tema salio de una urgencia que tubo mi buen amigo Joan y como ya antes en la lista de symfony en español se había preguntado, salio la idea de resolverlo a modo de competencia. Por mi parte como Filtro de Symfony y por la parte de Joan con htaccess.

¿Para que sirven estas soluciones?
Pues bien en Symfony por defecto las URI no terminan en slash (por temas SEO), es decir si terminan en algo así: www.site.com/moudulo/, esto te retornará un 404. Para evitar este problema y hacer una redirección 301 de www.site.com/moudulo/ a www.site.com/moudulo aquí las soluciones:

Con un filtro en symfony:
Solo colócalo en la carpeta lib de tu aplicación

<?php
class redirect301Filter extends sfFilter
{
  public function execute($filterChain)
  {
    if ($this->isFirstCall())
    {
      $uri = $this->getContext()->getRequest()->getUri();

      if (preg_match('#/$#', $uri))
      {
        $uri = preg_replace('#/$#', '', $uri);
        $this->getContext()->getController()->redirect($uri, 301);
      }
    }

    // Ejecutar el proximo filtro
    $filterChain->execute();
  }
}

Y activas el filtro así:

sshot-2008-01-27-02-11-27.png

Ahora la versión de Joan con htaccess:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  RewriteBase /

  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # remove trailing slash
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} ^(.*)/$
  RewriteRule ^(.*)/$ $1 [R=302,L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"

Para este caso (y como lo comenta Joan) el RewriteBase / es obligatorio si te quieres evitar problemas.

En las pruebas de rendimiento obviamente htaccess sale ganando, pero queda de tu parte elegir cual usar :) .

Si no es del todo legible el código colocado mas arriba (comienzo a odiar al iG:Syntax Hiliter) puedes descargarlo de aquí filtro_vs_htaccess.zip.

Enlaces 2008-01-22

January 22, 08 by Pedro Hernández
  • Nueva release de mi plugin sfCssTabs v0.1.7, En esta agrego soporte para I18N, creadas las carpetas para separar las versiones de symfony 1.0 y 1.1, además de convertir a UTF8 los archivos de configuración YAML. Si tienes algún problema con la carpeta web del plugin, puedes ver el ticket #2609. Además ya tengo una nueva asignación ^^.
    .
  • Symfony 1.0.11 is out. Recién salidito del horno :D
    .
  • Symfonians. Es una nueva aplicación desarrollada con symfony que pretende reunir a todos los usuarios de este framework e incluso recolectar ofertas de trabajo.
    .
  • Chat en español para usuarios de symfony. Un punto más de reunión para todo usuario nuevo o avanzado.

Verificando que este activa la opción I18N y el helper de traducción en Symfony

January 18, 08 by Pedro Hernández

Pues eso, me está tocando reparar un bug descubierto en mi plugin sfCssTabs y a la vez agregarle un detalle más: la I18N.

Para esto he tenido que mirar en la cache una vez regenerada después de activar la opción en el archivo settings.yml de la aplicación (frontend, backend, etc….) .

Entonces para verificar si la opción de I18N está activada solo hay que hacer esto:

<?php
if (sfConfig::get('sf_i18n'))
{
  // do something....
}
?>

Y como todo helper en symfony es una función, para verificar que esté presente el (valga la redundancia) helper de traducción:

<?php
if (function_exists('__'))
{
  // do something....
}
?>

Para más detalles pueden ver el Capítulo 13. Internacionalización y localización de la guía de Symofny.

Listo, salu2 ^^

Steer CMS

January 14, 08 by Pedro Hernández

Y se comienza la semana recibiendo un nuevo proyecto open source construido con Symfony y Blueprint. Se trata de Steer CMS y tiene muy poco de ser agregado a la lista de aplicaciones desarrolladas con symfony: By godiedelrio — 01/14/08 15:51:52.

sshot-2008-01-14-11-24-02.png

Liberado bajo licensia MIT, nos presenta las siguientes características:

  • Plantillas y módulos de publicación generados dinámicamente.
  • Video streaming, animaciones flash, imágenes y documentos manejados desde el propio CMS.
  • Búsquedas por contenido, meta-datos, palabras claves, descriptciones y tags.
  • Calendario integrado para gestión de datos y eventos.
  • Incluye un blog.
  • Gestión de usuarios a través de sfGuard.
  • I18N.
  • Gestión de cache a travez de un archivo YAML
  • WYSIWYG integrado, y mas…

Como buen CMS, en el frontend no encontrarás modulos ya que estos los irás creando a tu medida. Además cabe destacar que para este proyecto se han desarrollado una serie de plugins que no encontraras en el repositorio oficial. Algunos de ellos son:

  • steerCMSBlogPlugin
  • steerCMSCachedBehaviorPlugin
  • steerCMSCalendarPlugin
  • y 8 plugins más.

A primera vista sobre los plugins han omitido el estándar para los nombres, pero esto no es motivo para no probarlo.

_
Fuente: Steer CMS Project

Smashing Magazine le da mala fama a Symfony

January 05, 08 by Pedro Hernández

Hoy Smashing Magazine ha realizado como siempre un excelente artículo como nos tiene acostumbrados titulado Frameworks Round-Up: When To Use, How To Choose?, en el que hablan sobre la arquitectura MVC y los frameworks más conocidos para CSS, JavaScritp, PHP y otros lenguajes. Pero no leyendo muy lejos me doy cuenta de esto:

Symphony – A feature packed framework, but has a reputation for being server-intensive

Con esto lo primero que recordé fue un artículo de Javi llamado Exprimiendo Symfony hasta el límite, esto debido a una prueba de “Hola mundo” que se realizaron a varios frameworks y en la que se concluyó injustamente de que symfony era lento.

Este no es el único comentario que he visto así, parece ser que al igual que otros Smashing Magazine se ha basado de una fuente antigua (pienso yo) dando como resultado aquel comentario. Con esto no quiero dar lugar a pensar que soy un purista de symfony (pero parece que falta poco xD), y entiendo por lo que puede pasar el equipo de esta revista electrónica para dar lugar a tan buenos artículos, pero me queda la duda de ¿que se podría hacer para difundir mejor este framework?.

Sin duda creo que los que seguimos este framework de alguna u otra manera tenemos la difícil tarea de mejorar su difusión y sobre todo aportar para mejorarlo.

A todo esto mi respuesta al artículo fue la siguiente, la cual por cierto no paso la prueba de spam xD:

Thank you for the article. I would like to add something.

Whenever I see an article about the symfony framework, This is seen bad way or shifted to other, this is unfair and the reason I say this is as follows:

I have worked with several frameworks: kumbia, cakephp, codeigniter, zend framework, etc; And can assure you that is the most comprehensive in many respects is symfony and we can check for his community and his book here

The aspect of being seen with the reputation server to consume much was due to a test that was unfair, and you can see the response from the team symfony here and how to optimize

Moreover, in his book officer indicate when it is advisable to use symfony in theparagraph Is Symfony for Me?

I hope that those who see my comment will be encouraged to try symfony framework, not in vain what yahoo is using the new version of del.icio.us ;)

Greetings and remain so.

Creo que a todo esto realizaré un articulo sobre que posee symfony y por que debería ser (al menos) probado =D

_
Fuentes:

Mi nuevo plugin: sfCompressWebFiles

December 20, 07 by Pedro Hernández

Yeah! otro plugin más, esta vez con la finalidad de optimizar las hojas de estilos y los archivos javaScript.

sfCompressWebFiles permite lanzar tareas desde la CLI de symfony para poder comprimir estos ficheros. De momento estoy usando la librería YUI Compress (con licencia BSD modificada, sin publicidad) que permite quitar los espacios en blanco y los saltos de línea juntando todo el código en una sola línea. Pero dentro de mis planes están integrar Packer (con licencia GPL 2.0), y JSMin (con licencia MIT). Como siempre este nuevo plugin lo entrego con licencia MIT para la comunidad :)

De momento el plugin puede realizar las siguientes tareas:

  • Comprimir todos los archivos CSS y JS:
    symfony compress-web-files

    O tambien puedes usar el alias cwf:

    symfony cwf
  • Comprimir solo los archivos CSS
    // sin alias:
    symfony compress-web-files css
    // con alias:
    symfony cwf css
    
  • Comprimir solo los archivos JS
    // sin alias
    symfony compress-web-files js
    // con alias
    symfony cwf js
    

Una vez ejecutadas las tareas y viendo que se realizan procesos de minimizar el peso de estos, al lado de cada archivo js o css se crean otros nuevos (no se reemplazan los originales). Estos nuevos archivos tendrán como extensión .min.css y/o .min.js.

Javi una vez que vio de que se trataba este plugin me comenzó a dar nuevas ideas de como mejorar su funcionalidad y de la misma manera estoy atento a nuevas propuestas que me puedan plantear.

Desde ya muchas gracias a Julien Lecomte. Un saludo y que lo disfruten.

-
Pagina oficial del proyecto: sfCompressWebFilesPlugin
Inspiración: How to minimize your javascript and css files for faster page loads