Blog de Daniel Zegarra Rotating Header Image

enero, 2009:

Usar el Service Browser luego del cambio del post anterior

Si seguiste el post anterior verás que el Service Browser que viene con AMFPHP1.9 dejo de funcionar. Pero, esto es facil de solucionar.

Cambiar o agregar las siguientes líneas:

services/amfphp/DiscoveryService.php

//Linea 55 - Actualizar
$methodTable = MethodTable::create($path . $className . '.php', $this->_path,
    $classComment);

core/shared/app/BasicActions.php

//Linea 13 - Agregar
global $servicesPath; //Haciendo la variable global accesible dentro de la clase

//Linea 29 - Detectando el nuevo nombre de la clase
$amfbody->className = str_replace('/', '_'
    , str_replace('.php', ''
        , substr($amfbody->classPath
            , strrpos($amfbody->classPath, $servicesPath)+strlen(
                $servicesPath
            )
        )
    )
);

core/shared/util/MethodTable.php

//Linea 71 - Reemplazar
$className = str_replace('/', '_', $className);

Y por último, no olvides Actualizar el nombre de la clase DiscoveryService a amfphp_DiscoveryService.

services/amfphp/DiscoveryService.php

//Linea 7 - Actualizar
class amfphp_DiscoveryService

Compatibilizando AMFPHP1.9beta2 con Zend Framework

La verdad es simple.

Primero, incluir el directorio donde se encuentra los archivos de Zend Framework entre las rutas a cargar archivos por defecto. Esto puede hacerse de dos formar:

  • Definiendolo en php.ini
    La clave a cambiar tiene el nombre de include_path. Esta es una cadena con rutas separadas por un caracter especial. Este puede diferir de acuerdo al SO siendo los dos puntos “:” para Linux o la barra oblicua “\” para Windows.
  • Agregando la siguiente línea en globals.php
    //El siguiente método define un directorio más a la lista de
    //rutas por defecto al usar include o require
    //Cambia ZendLibrary por el directorio donde tengas la libreria.
    //Ejm: /../../ZendLib
    set_include_path( realpath(dirname(__FILE__)) . '/ZendLibrary'
    . PATH_SEPARATOR . get_include_path() );
    

Luego, agregar un par de líneas al bootstrap de AMFPHP para que cargue la clase Zend_Loader y asi nuestros servicios puedan usar otras clases/servicios sin tener que cargarlos al inicio (Y asi te ahorras de estar escribiendo tanto require_once).

Agrega las siguientes líneas al final del archivo globals.php

include 'Zend/Loader.php';
Zend_Loader::registerAutoload();

Por ultimo, debes configurar AMFPHP para que convierta los puntos que describen las rutas de tus clases en undelines (_). Zend Framework incluye en los nombres de sus clases la ruta completa donde esta se encuentra y mantenendo el nombre estandar como nombre de archivo.

Esto evita la redundancia de clases (al menos hasta que lleguen los namespaces con php 5.3) y te sirve para que Zend_Loader pueda cargar las clases de forma dinámica.

Normalmente AMFPHP convierte los puntos en barras diagonales “/” y el ultimo elemento lo toma como nombre del servicio/clase. Hay que hacer que como nombre de la clase use la ruta completa pero cambiando las barras diagonales por underlines. Para esto debes cambiar una sola linea de codigo en el archivo core\amf\app\Actions.php ubicado en tu instalacion de AMFPHP. Te recomiendo hacer una copia de este mismo antes de realizar un cambio.

//Linea 122 (aproximadamente)
//Esto hará que el nombre de la clase sea ahora la ruta
//completa con guiones bajos mas el nombre del servicio
$classname = str_replace('.', '_', $trunced);

Eso es todo. No te olvides de recodificar los nombres de tus clases si es que ya has empezado algunas. Asi mismo, si tus clases usaban a su vez otras, tambien debes actualizar estas llamadas o tu script se detendrá sin entregar error alguno a flash.

Aqui tienes un servicio de prueba y el código en AS2 y AS3 para probarlo.

PHP service:

class System_Prueba {
public function test(){
return 'Prueba exitosa';
}
}

ActionScript 2:

import mx.remoting.*;
import mx.rpc.*;
var service = new Service('http://testserver/amfphp/gateway.php'
, null, 'System.Prueba');
var pc:PendingCall = service.test();
pc.responder = new RelayResponder(this, 'onRespond', 'onFault');
function onRespond(re:ResultEvent){
trace(re.result);
}
function onFault(fault:FaultEvent){
trace('Error');
}

ActionScript 3:

import flash.net.*;
var rs:NetConnection = new NetConnection();
rs.connect('http://testserver/amfphp/gateway.php');
rs.call('System.Prueba.test', new Responder(onRespond, onFault));
function onRespond(re:Object){
trace(re);
}
function onFault(fault:Object){
trace('Error: '+fault.description);
}

Actualización: Encuentro en el blog de Enrique Place el aviso de un cambio importante con el uso de la clase Zend_Loader en la última versión de ZendFramework 1.8 y futuras versiones. Es una buena idea revisar este post.

Juramentación de Obama en vivo gracias a Livestation

Seguro habrán muchos medios (ademas del cable) para presenciar la juramentación del nuevo presidente electo de EEUU. Yo estoy usando Livestation, un software de escritorio para ver canales de televisión vía Internet, que ademas pueden ser embebidos en sitios web, pero la versión de escritorio es mas cómoda y completa. Así lo puedes colocar en una esquina de tu pantalla mientras vas haciendo lo que debes hacer.

No consume muchos recursos del procesador (aunque eso depende del computador que uses) pero si te come unos 65Mb de RAM. Si tienes RAM de sobra (2Gb o más), entonces no tienes porque preocuparte.

Livestation, mi recomendación de software para esta semana.

Nota: El canal C-SPAN (disponible en Livestation) transmitirá toda la ceremonia. (en inglés)
Update: El canal CNN+ en español (igualmente disponible en Livestation) también lo transmitirá.

¿Que es el TCEA?

Cuando yo iba a pedir un préstamo en una entidad bancaria siempre preguntaba sobre la tasa de interés efectiva anual TEA y con ese dato me guiaba si me convenía el préstamo o no. A menor tasa, menor interés.

Una de las cojudeces que hice en mi vida fue pedir un préstamo a sola firma. La tipica historia: Junto con el estado de cuenta de tu tarjeta de crédito te informan que puedes pedir un préstamo de XXX soles solo con tu DNI (el monto aparece bien grande para que te pueda guiñar sin esfuerzo) y empiezas a imaginar lo que harías con esos XXX soles. Buscas una excusa para convencerte de que necesitas ese préstamo y te vas a banco a reclamarlo.

Antes de pedir ese préstamo yo tenia otro por el cual me descontaban 150 soles cada fin de mes. La verdad, ni lo sentía. Como la tasa de interés para este nuevo préstamo era la misma y se trataba de un monto mucho menor lo pedí sin problemas.
Al final del mismo mes me sorprendo cuando leo que debo pagar mucho mas de lo que me habían dicho debido a costos de portes, comisiones, etc.
Desde ese momento deje de confiarme en la TEA.

Leo ahora que para no caer en esa trampa (por que eso es lo que es) la SBS publica en su web una lista de las Tasas de Costo Efectivo Anual (TCEA) de cada entidad financiera. Este concepto es totalmente nuevo para mi (debieron enseñarme esto en mi clase de economía) y lo que hace este algoritmo es obtener la tasa de interés anual real que un banco te cobrará, osea, incluyendo portes, comisiones y demás floros que los bancos usan para sacarte plata.
Esto te permite, ahora si, saber perfectamente que producto (créditos etc) te conviene más.

(No contemples el crédito a sola firma de Interbank, ese no te conviene. Créeme.)

Puedes informarte mas sobre el TCEA en la web de la SBS.

Cambiar las claves de otras cuentas en Windows XP

Probando Camtasia por primera vez :)