martes, 2 de noviembre de 2010

Refrán - Peter Drucker

La mejor organización no asegura los resultados. Pero una estructura equivocada sería garantía de fracaso.



Instalar Symfony Linux

Crear un proyecto Symfony 1.4

  • Tener apache instalado:
Verificamos si tenemos apache instalado:

sudo /etc/init.d/apache2 start

Si esto no existe  entonces no tienes apache instalado y lo instalamos con el siguiente comando:

sudo apt-get install apache2

y volvemos a intentar el comando anterior:

sudo /etc/init.d/apache2 start
  • Tener php 5.2.4 o mejor
Verificamos si ya tenemos PHP instalado, por la consola colocamos:

php -v

si ese comando nos responde, buenisimo, tenemos PHP instalado solo tenemos que verificar que la versión sea mayor o igual a 5.2.4.

Si no lo tenemos instalado lo instalamos con

sudo apt-get install php5

sudo apt-get install php5-cli

sudo apt-get install php5-dev

sudo apt-get install php5-common



sudo apt-get install php5-xsl

sudo apt-get install libapache2-mod-php5

sudo apt-get install php-pear

sudo apt-get install php-apc



y luego ejecutamos el comando anterior:

php -v
  • Instalamos algún tipo de Base de datos
PostgreSQL

sudo apt-get install postgresSQL-version  (la version que desee my postgreSQL is 8.4)
sudo apt-get instal php5-pgsql (para que php pueda manejar esta base de datos)

MySQL

sudo apt-get install mysql  (la version que desee)
sudo apt-get instal php5-mysql (para que php pueda manejar esta base de datos)

etc.

  • Descargamos Symfony

NOTA: siempre es recomendable que en un desarrollo no se coloque el workspace dentro del www publico del apache es preferible crear un VIRTUAL HOST, que apunte a nuestra carpeta workspace y sea local, si es de ser necesario un acceso remoto configurarlo en nuestro VIRTUAL HOST y le damos acceso a quien nosotros queramos.


  • Crear el Workspace
Crearemos el mismo workspace que el tutorial de Symfony para Jobeet:

mkdir -p /DIRECCIÓN DONDE VAS A TRABAJAR/sfprojects/jobeet

mkdir crea una carpeta pero cuando queremos crear varias carpetas existan o no usamos -p

  • Creamos donde vamos a Instalar Symfony
Nos paramos en jobeet y escribimos el siguiente comando:

mkdir -p lib/vendor

ahora tenemos esta estructura:

sfprojects
     -  jobeet
             -  lib
                  - vendor

Nos mudamos a vendor y movemos el TGZ de symfony a la misma carpeta y ejecutamos:

cd lib/vendor (Nos paramos en la carpeta Vendor)

tar zxvf symfony-1.4.0.tgz  (esto symfony-1.4.0.tgz Cambia de acuerdo a la versión que descargaste)

mv symfony-1.4.0 symfony  (Renombrar la carpeta descomprimida)

rm symfony-1.4.0.tgz (Eliminamos el archivo comprimido ya que no lo necesitaremos mas)

  • Nos salimos a la carpeta Jobeet
Si estamos parados en vendor hacemos

cd .. 

cd ..

ya estamos en Jobbet
  • verificamos que Symfony funciona sacando una leyenda de ayuda
php lib/vendor/symfony/data/bin/symfony -v
  • Creando el proyecto en Symfomy  (estamos parados en la carpeta Jobeet)
Aquí tenemos que tomar una decisión la cual es en que ORM vamos a trabajar PROPEL o DOCTRINE 

DOCTRINE ( viene por defecto por lo tanto el comando es )

php lib/vendor/symfony/data/bin/symfony generate:project jobeet


PROPEL ( viene por defecto por lo tanto el comando es )

php lib/vendor/symfony/data/bin/symfony generate:project jobeet --orm=Propel


Ambos comandos nos crearan las carpetas

     apps/
     cache/
     config/
     lib/
     log/
     plugins/
     test/
     web/

Ya no necesitamos acceder a symfony con esta dirección lib/vendor/symfony/data/bin/symfony ahora tenemos en la carpeta jobeet un archivo symfony que nos permitirá ejecutar comandos parados desde jobeet. 

Ya veremos unos ejemplos a continuación.


  • Creamos nuestro Front End y Back End (seguimos parados en la carpeta jobeet)
Front End: es la parte visible a internet para todos los usuarios que puedas llevar a tu pagina.

php symfony generate:app frontend

Back End: es la zona administrativa, o simplemente algo que necesite de un acceso restringido para hacer algo.

php symfony generate:app backend

  • Ahora la prueba de fuego CHEQUEAR SI TODO ESTA BIEN INSTALADO ( en la carpeta Jobeet)
php lib/vendor/symfony/data/bin/check_configuration.php

Esperamos este resultado

********************************
*                                                            *
*  symfony requirements check             *
*                                                            *
********************************
php.ini used by PHP: /etc/php5/cli/php.ini

** WARNING **
*  The PHP CLI can use a different php.ini file
*  than the one used with your web server.
*  If this is the case, please launch this
*  utility from your web server.
** WARNING **

** Mandatory requirements **

  OK        PHP version is at least 5.2.4 (5.3.2-1ubuntu4.5)

** Optional checks **

  OK        PDO is installed
  OK        PDO has some drivers installed: pgsql
  OK        PHP-XML module is installed
  OK        XSL module is installed
  OK        The token_get_all() function is available
  OK        The mb_strlen() function is available
  OK        The iconv() function is available
  OK        The utf8_decode() is available
  OK        The posix_isatty() is available
  OK        A PHP accelerator is installed
  OK        php.ini has short_open_tag set to off
  OK        php.ini has magic_quotes_gpc set to off
  OK        php.ini has register_globals set to off
  OK        php.ini has session.auto_start set to off
  OK        PHP version is not 5.2.9


NOTA: si algo dice  WARNING lo mas probable explique que falta instalar.


FELICIDADES HAS INSTALADO SYMFONY


Ahora hacer los tutoriales de Symfony


domingo, 31 de octubre de 2010

Refrán - William G. McGowan

La única práctica gerencial que ahora es constante es la práctica de acomodarse constantemente al cambio

William G. McGowan

viernes, 29 de octubre de 2010

Growler Lib - Ejemplo


Please upgrade your Flash Player
This is the content that would be shown if the user does not have Flash Player 6.0.65 or higher installed.


Aqui les dejo el AIR para que puedan ver como funciona el growler, los codigos del ejemplo estan dentro del air, se le puede hacer clic derecho VIEW SOURCE.

Codigo Main

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
   xmlns:s="library://ns.adobe.com/flex/spark" 
   xmlns:mx="library://ns.adobe.com/flex/mx" 
   width="100%" height="100%" 
   xmlns:www="http://www.flex-tutorial.fr/2009"
   left="10" right="10" bottom="10" top="10"
   >

 <fx:Script>
  <![CDATA[
   import mx.graphics.GradientEntry;
   
   import net.developyourdream.growler.Growler;
   import net.developyourdream.growler.growlers.GrowlerTypeUbuntu;
   import net.developyourdream.view.growler.GrowlerTypeCustom;
   import net.developyourdream.view.growler.GrowlerTypeCustomTwo;
   

   protected function basicSkinClickHandler(event:MouseEvent):void
   {
    var growler:Growler = new Growler;
    growler.dispach();
   }
   
   protected function ubuntuSkinClickHandler(event:MouseEvent):void
   {
    var growler:GrowlerTypeUbuntu = new GrowlerTypeUbuntu;
    growler.width = 200;
    growler.theTitle = myTitle.text;
    growler.message = myMessage.text;
    growler.dispach();
   }
   
   protected function customSkinClickHandler(event:MouseEvent):void
   {
    var growler:GrowlerTypeCustom = new GrowlerTypeCustom;
    growler.theTitle = myTitle.text;
    growler.story = myStory.text;
    growler.message = myMessage.text;
    growler.gradientFillColors = [new GradientEntry(Math.random()*0xFFFFFF,NaN,0.8),new GradientEntry(Math.random()*0xFFFFFF,NaN,0.8)];
    growler.dispach();
   }
   
   protected function custom2SkinClickHandler(event:MouseEvent):void
   {
    var growler:GrowlerTypeCustomTwo = new GrowlerTypeCustomTwo;
    growler.dispach();
   }
  ]]>
 </fx:Script>

 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
 </fx:Declarations>
 <s:layout>
  <s:VerticalLayout/>
 </s:layout> 
 
 <mx:Image source="../../../assets/image/LogoLargo.png"  width="400"/>
 <s:Label text="TITLE" />
 <s:TextInput id="myTitle" text="Develop Your Dream Lib" width="100%"/>
 <s:Label text="STORY" />
 <s:TextInput id="myStory" text="Este campo solo es para el CUSTOM GROWLER" width="100%"/>
 <s:Label text="MESSAGE" />
 <s:TextArea id="myMessage" width="100%" text="A los growlers del lib no se ajuntan al texto por lo tanto se le debe especificar su WIDTH y HEIGHT. &#13;&#13;Para lograr que los growler se ajusten dinamicamente se pueden hacer GROWLERS CUSTOM extendiendo de la clase GROWLER, se calcula el tamaño de los hijos y se sobre escribe el metodo updateDisplayList. &#13;&#13;Ejemplo: CUSTOM SKIN 1."
 />
 <s:Group width="100%" height="100%">
  <s:layout>
   <s:TileLayout/>
  </s:layout>
  <s:Button label="Lib Basic Skin" click="basicSkinClickHandler(event)"/>
  <s:Button label="Lib Ubuntu Skin" click="ubuntuSkinClickHandler(event)"/>
  <s:Button label="Custom Skin 1" click="customSkinClickHandler(event)"/>
  <s:Button label="Custom Skin 2" click="custom2SkinClickHandler(event)"/>
 </s:Group>
 
</s:Group>

Para crear un Growler Básico, se crea una instancia y se puede mostrar con el metodo dispatch().

El método dispach solo se usa cuando estamos seguros que el growler esta listo para mostrarse, en mejores palabras una ves que se le coloca el Width y el Height y se le setea los parámetros bien sea propio o personalizados.

Flex Growler Lib

Flex Growler Lib

Flex Growler Lib, es una librería para flex para crear popups tipo gtalk, messenger, o cualquier tipo de alerta de sistema o notificación de cualquier tipo. Actualmente solo sirve en AIR, pronto le colocaremos la capacidad que salgan en aplicaciones con flash player, para lograr los mismos resultados dentro de un browser.

La librería es totalmente open source y se puede descargar en el siguiente link http://gitorious.org/develop-your-dream/growler-flex-lib

Tambien les dejo el link a la libreria para que se la descarguen:


Aqui esta una imagen de como se ven los growlers.

Ejemplo:




lunes, 18 de octubre de 2010

Flex Pivotal Tracker Lib - Documentacion

La documentación de la librería se hará mientras se desarrollan las clases, esto quiere decir que a medida que salgan funciones dentro de las clases se colocara la explicación de la misma, los parámetros a usar, y que retorna cada función.
A todos los métodos de las clases se les pasan tres funciones fijas donde solo 1 de ellas es obligatorio pasarla, las otras 2 no si no se quiere manejar las mismas, estas funciones son:
  • Result Function (Obligatoria): esta función devuelve la petición de la librería, en otras palabras si pedimos un ActivityFeed.(cualquier tipo de método) esto enviara un ActivityFeedEvent. 
  • Error Function: siempre llamara a una función de tipo ErrorEvent y dentro de ella contendrá un ErrorVO con el detalle del error generado.
  • Security Function: siempre llamara a una función de tipo SecurityEvent y dentro de ella contendrá un SecurityVO con el detalle de segur generado.


Retrieive User Token

getUserToken
Esta librería se comunica por SSL, es una autenticación básica, se crea un hash del usuario y su contraseña y se envía.
RetrieveUserToken.getUserToken("NOMBRE DEL USUARIO","CONTRASEÑA",resultFunction,errorFunction,securityFunction);
Llamara a la función resultFunction(event:RetrieveUserTokenEvent), dentro de event encontraremos UserTokenVO con toda la información de la consulta.

Activity Feed
Le permite recuperar la actividad reciente de todos sus proyectos.
En esta clase tenemos un parámetro similar en todas las funciones:
  • Limit: este parámetro por defecto es 10 y tiene un techo de 100 registros.
Tenemos otros dos parámetros mas:
  • Since: se puede pasar de tipo String o de  tipo Date, este permite restringir a solo aquellos elementos que se produjeron después de una fecha suministrada, ejemplo del formato 2009/12/18 21:00:00 UTC.
  • Version: es de tipo INT, este permite restringir a solo aquellos elementos que tienen una versión mayor a la suministrada.
Existe un parametro mas pero son solo para los metodos que empiezan con project:
  • Project ID: es de tipo INT, y permite buscar las actividades de un proyecto la combinación de los tres parámetros mencionados anteriormente.

allActivity_OccurredSinceDate
ActivityFeed.allActivity_OccurredSinceDate("TOKEN",resultFunction,new Date("2009","10","16"),LIMIT,faultFunction,securityFuncion);
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

allActivity_NewerThanVersion
Esta función recibe como parámetro  la versión de la actividad y devuelve todas las versiones que sea mayor a la ingresada de todos los proyectos, siempre tomen en cuenta que el limite máximo llega hasta 100 actividades.
ActivityFeed.allActivity_NewerThanVersion("TOKEN",resultFunction,VERSION,LIMIT,faultFunction,securityFuncion); 
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

allActivity_OccurredSinceDate_And_NewerThanVersion
Esta función recibe como parámetro  la versión de la actividad y la fecha y devuelve todas las versiones que sea mayor a la ingresada y que sea en las fechas superior a la suministrada para todos los proyectos, siempre tomen en cuenta que el limite máximo llega hasta 100 actividades.
ActivityFeed.allActivity_OccurredSinceDate_And_NewerThanVersion("TOKEN",resultFunction,VERSION,LIMIT,faultFunction,securityFuncion); 
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

projectActivity_OccurredSinceDate
Esta función recibe como parámetro el id del proyecto y  la fecha, devuelve todas las actividades de dicho proyecto y sea en las fechas superior a la suministrada, siempre tomen en cuenta que el limite máximo llega hasta 100 actividades.
ActivityFeed.projectActivity_OccurredSinceDate("TOKEN",PROJECT ID,resultFunction,new Date("2009","10","16"),LIMIT,faultFunction,securityFuncion); 
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

projectActivity_NewerThanVersion
Esta función recibe como parámetro el id del proyecto y  la version, devuelve todas las actividades de dicho proyecto y superior a la version suministrada, siempre tomen en cuenta que el limite máximo llega hasta 100 actividades.
ActivityFeed.projectActivity_NewerThanVersion("TOKEN",PROJECT ID,resultFunction,VERSION,LIMIT,faultFunction,securityFuncion); 
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

projectActivity_OccurredSinceDate_And_NewerThanVersion
Esta función recibe como parámetro el id del proyecto, la fecha y  la version, devuelve todas las actividades de dicho proyecto y superior a la version suministrada y a su ves superior a la fecha suministrada, siempre tomen en cuenta que el limite máximo llega hasta 100 actividades.
ActivityFeed.projectActivity_OccurredSinceDate_And_NewerThanVersion("TOKEN",PROJECT ID,resultFunction,VERSION,new Date("2009","10","16"),LIMIT,faultFunction,securityFuncion); 
Llamara a la función resultFunction(event:ActivityFeedEvent), dentro de event encontraremos ActivitiesVO con toda la información de la consulta.

Get Projects

allMyProjects
Esta función devuelve todos los proyectos a los cuales esta asociado el usuario de este token.
GetProjects.allMyProjects("TOKEN",resultFunction,faultFunction,securityFuncion,data); 
Llamara a la función resultFunction(event:GetProjectsEvent), dentro de event encontraremos ProjectsVO con toda la información de la consulta.

getSingleProject
Esta función devuelve el detalle de un proyecto, este proyecto debe estar asociado al miembro del token que lo esta pidiendo, de lo contrario la respuesta vendría vacía. .
GetProjects.getSingleProject("TOKEN",PROJECT ID,resultFunction,faultFunction,securityFuncion,data); 
Llamara a la función resultFunction(event:GetProjectsEvent), dentro de event encontraremos ProjectVO con toda la información de la consulta.