March 18th, 2010 Category: Programacion Zend Framework
14 Comments »

Mi idea era subir un archivo dentro de un formulario, renombrar ese archivo con un id conseguido en esa misma operacion con el siguiente formato logo_{$id}.jpg . El problema es que cuando agregaba el setDestination del form me copiaba el archivo con su nombre original en la carpeta de destino. No conseguia renombrarlo.

Vi muchisimos ejemplos pero al parecer con la nueva version no andan ninguno, porque los que probe no me sirvieron de forma literal (es decir copy/paste ) .

Asi que tuve que ponerme a leer un poco :( . Despues de ver como funcionaba Zend_Form_Element_File. Trate de implementar la forma mas logica. La cual no me anduvo. Me acorde que cuando usas isValid de un Zend_Form, este ejecuta los filtros y las validaciones correspondientes. Pero encontre dentro de la documentacion la solucion a mi primer problema, el metodo setValueDisabled( true ) evita que se ejecute el filtro del elemento, asi puedo aplicar mi filtro para renombrar mi archivo despues de validarlo.

Mi segundo problema es que cuando implemente esto, no me guardaba el archivo en donde habia establecido. Para entender esto un poco Zend_Form_Element_File usa Zend_File_Tranfer que es el encargado de manipular el archivo. Lo que siguio fue traerme el adapter de Zend_File_Transfer de mi elemento, agregar los filtros y ejecutar el upload. Y listo tenia mi archivo subido ‘in the ZF way’.

Este es el formulario


class Application_Form_Company extends Zend_Form
{

    public function init()
    {

        $this->setAttrib('enctype', 'multipart/form-data');

        $this->addElement('text', 'name', array(
            'required'   => true,
            'validators' => array(
            ),
            'class' => 'sf'
        ));
        $this->addElement('file', 'logo', array(
            'class' => 'sf'
        ));
        $this->logo->addValidator( 'Extension', false, 'jpg,png,gif,jpeg' );
        $this->logo->addValidator( 'Size', false, '10024000' );
        $this->logo
            ->setDestination( APPLICATION_PATH . '/../public/empresas/imgs/' )
            ->setValueDisabled( true );

        $this->addElement('text', 'website', array(
            'required'   => true,
            'class' => 'sf'
        ));

        $this->addElement('text', 'telephone', array(
            'required'   => true,
            'class' => 'sf'
        ));

        $this->addElement('textarea', 'information', array(
            'required'   => true,
            'class' => 'sf'
        ));

        $this->setDecorators(
            array(
                array(
                    'ViewScript',
                    array( 'viewScript' => 'company/form.phtml' )
                )
            )
        );
    }
}

Asi quedo mi action

        ...
        $form = new Application_Form_Company();
        if ( $this->getRequest()->isPost() ) {
            $file = $form->logo;
            if( $form->isValid($this->getRequest()->getParams()) ) {
                $bind = $form->getValues();
                $company = new Application_Model_Company();

                if( $company->exists( $bind['name'] ) ) {
                    $form->name->addErrorMessage( "La empresa ya existe" );
                } else {
                    try {
                        $id = $company->save( $bind );
                    }catch( Exception $e ) {
                        $this->_helper->flashMessenger()
                            ->addMessage( 'Hubo un problema, revise los datos' );
                    }

                    // Traemos el adapter de Zend_File_Transfer
                    $upload = $form->logo->getTransferAdapter();

                    // Lo ideal es que el path lo trajeramos de un archivo de configuracion.
                    $upload->addFilter('Rename', array(
                        'target' => APPLICATION_PATH . '/../public/empresas/imgs/logo_'. $id .' .jpg',
                        'overwrite' => true
                    ));
                    var_dump( $upload->receive() );
                    ...
Seguir leyendo

March 10th, 2010 Category: Optimizing Scalabillity Zend
4 Comments »

Revisando algunos problemas que tuve hoy con un servidor me volvi a plantear el uso de Zend Server.

Zend Server es un administrador para servidor de aplicaciones web siempre que trabajen con PHP. Este nos permite administrar extensiones, logs, extensiones. Ademas viene con Zend Optimizer+, Zend Data Cache, y Zend Debugger. Este producto de la gente de Zend nos promete manejar una mayor cantidad de usuarios, de datos y codigo.

Dentro de sus principales objetivos es la de proveer una herramienta para escalar y aumentar la performance de nuestro servidor.

En estas diapositivas, la gente de Zend hace una introduccion a Zend Server.

Tambien nos hablan de Performance y Escalabilidad.

Tambien nos brinda un servicio de Colas.

Aca nos muestran como hicieron para optimizar magento el software open source para crear tiendas online.

Instalacion en Debian.

$ sudo vim /etc/apt/source.list

agregamos la siguiente linea

#Zend Server Respository
deb http://repos.zend.com/zend-server/deb server non-free

Agregamos la clave publica del repositorio

$ wget http://repos.zend.com/deb/zend.key -O- | sudo apt-key add -

Actualizamos el repositorio

$ sudo aptitude update

Si queremos instalar php 5.2.x

$ sudo aptitude install zend-server-ce-php-5.2

Si queremos php 5.3.x

$ sudo aptitude install zend-server-ce-php-5.2

Cuando termine la instalacion podemos entrar en https://localhost:10082/ZendServer/ o http://localhost:10082/ZendServer/

Despues de completar el formulario de administracion, sino tuvimos ningun problema vamos a ver la siguiente pantalla.

Con estas diapositivas podemos ver un poco las virtudes de Zend Server un producto totalmente gratuito y facil de instalar. Si necesitan soporte tambien, pueden contratarlo, hay planes para todos los gustos.

Zend Server

Seguir leyendo

March 9th, 2010 Category: Programacion
2 Comments »

En el ultimo google fest que se realizo en Buenos Aires, la gente de Google, comento varias de las ventajas de HTML 5 y como podriamos aprovechar la geolocalizacion. Todavia no hay mucho soporte para HTML 5, las proximas versiones de los Browsers van a empezar a tener mas sopoprte para las nuevas especificaciones.

Armando Sosa realizo un video tutorial explicando claramente que es y cuales son las ventajas de HTML 5

HTML5 para principiantes from Armando Sosa on Vimeo.

Via Buzz Cesar Casas compartio unos ejemplos de juegos y manipulacion de graficos con html 5, sin la necesidad de Flash.

http://www.benjoffe.com/code/games/torus/

http://29a.ch/jswars/

http://www.kevs3d.co.uk/dev/asteroids/

http://9elements.com/io/projects/html5/canvas/

http://www.benjoffe.com/code/demos/canvascape/textures

http://www.benjoffe.com/code/tools/functions3d/

http://www.benjoffe.com/code/toys/spirograph/

www.benjoffe.com

Al parecer HTML 5 va a traer muchos beneficios, en reduccion del codigo html. Hoy en dia podemos ver youtube con el reproductor de HTML 5, aunque no es tan bonito ni tenga las mismas funcionalidades es una alternativa muy fuerte a los reproductores FLASH.

Hay que prestar atencion en como afectara en el SEO con las etiquetas

Seguir leyendo


March 8th, 2010 Category: amazon cloud Programacion
No Comments »

Estuve teniendo unos problemas con un servidor en produccion, y me ocupo la mayor parte de mi ultimo tiempo, por eso no continue los capitulos de … “Escalando nuestras web”. La verdad que en este tiempo lei mucho sobre todo lo que este relacionado con la nube. Uno de los casos de exito que mas me intereso fue el de meneame. Como la mayoria debe saber meneame es un servicio de publicacion de noticias, donde los usuarios menean la noticia o no. Mientras mas meneos tenga mejor vista estara la noticia y conseguiras mas visitas a la misma, ademas de aumenta nuestro karma que es la valorisacion en meneame de un usuario. Pero lo que nos importa a nosotros es que es un sitio con muchisimo trafico. El cual su creador y director Ricardo Gallir decidio montar meneame en la nube.

Los videos que vamos a ver a continuacion son unas charlas que dio, donde explica, el porque y como migro a Amazon toda la estructura de meneame, que como nos va a explicar el no es nada sencillo. El audio esta bastante bajo pero el material es de altisima calidad para perderselo, suban lo maximo que puedan el volumen y disfruten de la conferencia.

Parte 1.

En el video van a encontrar una explicacion sobre el contenido estatico muy interesante en el cual Ricardo nos recomienda tener un dominio totalmente diferente para manejar este tipo de contenido, y tambien nos aconseja si vamos a manejar imagenes muy chicas no conviene usar cloudfront para esto porque encarece mucho los costos, y si usar otro servidor tipo lighthttp o nginx que la tienen mas clara con el manejo de contenido de este tipo. Siempre sobre el puerto 80 y no esas locuras de ponerlo en el 8080 que limitan a los usuarios que acceden desde lugares donde tienen restringidos los puertos.

Tambien nos explica bastante bien como funciona EC2 y que son las instancias. Los costos en un monstruo como Meneame y lo compara con los presupuesto que le dieron empresas como arsys.es entre otras.

Presten atencion a la parte que habla sobre escalado vertical y horizontal, y las herramientas que amazon EC2 nos brinda para esto.

Parte 2.

En la segunda parte vamos a un ejemplo practico como configurar Amazon EC2 para tener nuestra propia instancia y un sitio corriendo

Despues de estas charlas, y algunos comentarios en su blog y en el blog de meneame, Ricardo Gallir practicamente se convirtio en un promotor de Amazon. Tampoco es raro verlo en twitter haciendo comentarios sobre el buen servicio de amazon.

Esta es una opcion que todos deberiamos analizar cuando nuestro trafico requiere recursos que ningun hosting de usd 3 puede ofrecernos.

Seguir leyendo