Archivo de May, 2008

Solo en Facebook

Publicado en Interwebz | 1 Comentarios

the office

Mis intentos para volverme fan de The Office fallan.

Han notado que muchos de los mensajes de facebook no están escritos para humanos? Todos esos ingenieros que se han estado robando de Google necesitan unas clases de HCI urgentes.


1er Google Developer Day México

Publicado en Eventos | 0 Comentarios

google developer dayDesde hace algunas semanas se viene hablando sobre el anuncio del primer Google Developer Day en la Ciudad de México pero quería esperar a que publicaran el programa completo para escribir al respecto.

Dejo que ellos mismos expliquen de que se trata:

El Developer Day de Google 2008, se enfocará en promover la apertura de las fronteras de las aplicaciones Web, empleando las tecnologías de desarrollo de Google. Los ingenieros de Google y desarrolladores líderes serán tus anfitriones en un día completo de profundas sesiones sobre las últimas tecnologías de Google.

El Developer Day de Google 2008, es también un foro para convivir y compartir tus ideas con otros desarrolladores. Contarás con tiempo suficiente para conversar y conocerlos, discutir tus ideas y compartir tus proyectos.

La cita es el 23 de junio en el Centro Banamex y por lo que he escuchado en twitter, muchos desarrolladores ya están apuntados para venir de todas partes del país por lo que promete ser interesante al menos en el aspecto de encontrar a mucha gente que solo conoces de internet.

No hay costo de entrada pero es necesario que te registres para apartar lugar. Poco tiempo después de llenar el formulario, te llegará la confirmación vía e-mail (en mi caso fué menos de un día) con la invitación y las instrucciones.


Emprendedores web en la UNAM este Jueves

Publicado en Eventos | 0 Comentarios

emprendedores

Este 22 de Mayo se llevará a cabo en la facultad de ingeniería el primer encuentro de emprendedores web organizado por la UNAM. Copio y pego desde el sitio oficial:

Este esfuerzo es para brindar a los estudiantes Universitarios una invaluable oportunidad de recibir información completa y actual sobre aplicaciones Web en México, está centrado en el logro de los siguientes objetivos:

1. Ampliar el panorama empresarial y de desarrollo de servicios Web en los estudiantes universitarios fijando una interacción directa entre los fundadores de servicios Web hechos en México y los propios universitarios.

2. Motivar a los estudiantes universitarios a crear su propio servicio Web y, por ende, su propio negocio.

3. Dotar de elementos para iniciar un servicio Web por medio de consejos, experiencias, información especializada y anécdotas.

Además se buscará compartir con los estudiantes las experiencias y el ciclo de vida de un servicio Web desde que se concibe la idea hasta que se comercializa, buscando que el estudiante se contagie del espíritu emprendedor de los ponentes.

La entrada es libre y estará abierto desde las 10:30 aunque la inauguración y las presentaciones arrancan hasta las 16:30. Yo ya estoy apuntado así que si van, por allá nos vemos.


Por que prefiero la internet sobre los medios tradicionales

Todo periodista debe ver este video..y después ir a llorar a una esquina por que todas las ideas que les metieron en la cabeza durante los 4 años de carrera probablemente nunca les van a permitir hacer algo así de bueno.

El resto de la historia en moblogic.


Como manejar objetos y sesiones de PHP cuando se usa AJAX

Publicado en Programación | 14 Comentarios

He estado trabajando en un pequeño proyecto personal ultimamente y me topé con el siguiente problema. Lo encontré muy mal documentado (al menos al momento de agregar AJAX) y ya que me costó un buen dolor de cabeza así pensé que sería buena idea publicar la solución. Ojalá este artículo ayude a alguien más a ahorrarse un par de horas y un derrame innecesario de bilis.

El problema 1.0

Este es el escenario. Estoy usando PHP orientado a objetos con el fin de poder guardar instancias en variables de sesión y asi poder pasar información constantemente entre documentos sin muchas complicaciones.

Hasta aquí nada especial pero tiene un pequeño detalle a tomar en cuenta, y es que cada que intentas hacer una operación con un objeto, PHP necesita tener a la mano la definición de la clase en la que está basado. Un ejemplo con código para explicarme mejor:

Supongan que tenemos una clase ‘usuario’ definida como:

<?php
// Archivo: usuario.php
class usuario {
    public $nombre;
    public $apellido;
    public function sayMyName() {
       echo $this->nombre . ‘ ‘ . $this->apellido;
    }
}
?>

En un segundo archivo creamos una instancia, la llenamos de datos y la asignamos a una variable de sesión para usarla más tarde:

<?php
// Archivo pag1.php
include(‘usuario.php’);
session_start();
$usuario = new usuario();
$usuario->nombre = ‘Gregory’;
$usuario->apellido = ‘House’;
$_SESSION[‘usuario’] = $usuario;
?>

Para terminar, en la siguiente página queremos desplegar el nombre de nuestro usuario:

<?php
// Archivo pag2.php
session_start();
$usuario = $_SESSION[‘usuario’];
$usuario->sayMyName();
?>

Parece lógico no? pues si, lo es hasta que lo ejecutamos y nos encontramos con un error pidiendonos la definición de la clase en pag2.php lo cual hasta cierto punto tiene sentido si entendemos como funciona PHP. Como nota, la definición debe de ir incluida antes de que llamemos a session_start(). Lo siguiente funcionaría correctamente:

<?php
// Archivo pag2.php
include(‘usuario.php’);
session_start();
$usuario = $_SESSION[‘usuario’];
$usuario->sayMyName();
//salida: “Gregory House”
?>

Simple y se resolvió con una sola linea extra de código, pero ese no era el verdadero problema, ahora viene lo interesante, que pasa cuando agregamos AJAX a la mezcla?

El problema 2.0

Cada que hacemos una llamada asíncrona a una página php tenemos que asumir que todos los archivos que incluimos están perdidos y que hay que llamarlos de nuevo si necesitamos usarlos…a excepción de la sesiones que se quedan almacenadas por su propia naturaleza.

Supongan que estamos usando el mismo código de arriba, pero ahora queremos ejecutar pag2 desde pag1 usando AJAX, entonces nos encontramos con un obstáculo extra, y es que gracias a que la sesión ya fue definida en pag1, al momento de que se llama a pag2, session_start() va a regresar un error diciendo que ya hay una sesión iniciada y que la ordén será ignorada.

Entonces solo eliminamos session_start() no? Nope por que resulta entonces que nos vamos a encontrar con otro error:

Fatal error: Unknown: The script tried to execute a method or access a
property of an incomplete object. Please ensure that the class
definition CLASE of the object you are trying to operate on was
loaded _before_ the session was started in Command line code on line #

El problema es que aunque tenemos la sesión inicializada, la definición de la clase no existe en nuestar segunda página, e incluso si tenemos el include() dentro del archivo, no le sirve a PHP por que no está antes del inicio de sesión y no hay manera de ponerla en el lugar correcto por que la sesión viene desde el primer archivo.

Después de estar intentando con todas las ideas que me encontraba en la red como modificar el valor de session_auto_start en la configuración de php y otros trucos de vudú muy poco prácticos y que no sirvieron de nada, por fin encontre una forma de hacer que funcione.

El truco es hacer lo mismo que hace session_start() con las variables de sesión pero manualmente, serializar.

Regresando al ejemplo de arriba, vamos a modificar pag1.php para serializar la instancia

<?php
// Archivo pag1.php
include(‘usuario.php’);
session_start();
$usuario = new usuario();
$usuario->nombre = ‘Gregory’;
$usuario->apellido = ‘House’;
$_SESSION[‘usuario’] = serialize($usuario);
?>

Y en pag2.php regresamos la variable a su forma original con unserialize()

<?php
// Archivo pag2.php
$usuario = unserialize($_SESSION[‘usuario’]);
$usuario->sayMyName();
//salida: “Gregory House”
?>

Noten que no incluí el archivo de definición de la clase (usuario.php).
Por alguna razón que aún no termino de entender, el include sigue sin funcionar, afortunadamente unserialize() es una de las funciones de PHP que permite declarar una función callback a la que llama como último recurso si está manejando un objeto y no encuentra la definición de la clase, se usa de la siguiente forma:

<?php
// Archivo pag2.php
ini_set('unserialize_callback_func', 'incluirClase');
function incluirClase($clase) {
    include(‘usuario.php’);
}

$usuario = unserialize($_SESSION[‘usuario’]);
$usuario->sayMyName();
//salida: “Gregory House”
?>

El parametro $clase es regresado automáticamente por PHP e incluye el nombre de la clase para la que no encontró definición.

Ahora si, eso resuleve todo y como este artículo ya se extendió mucho aquí lo termino. Si tienen alguna duda dejenla en los comentarios.

Nota: El código en el artículo no está depurado asi que no intenten ejecutarlo directamente, solo tomenlo como ejemplo.


Reporte de daños

Publicado en Proyectos | 0 Comentarios

Este Jueves todos los sitios que manejo a excepción de este blog estuvieron caidos durante gran parte del día.

El problema fue un error en la configuración de los DNS que basicamente estaba provocando que los dominios apuntaran a la nada.

Todo parece estar resuelto ya, si aún no pueden ver alguno de los sitios, denle algunas horas mientras las direcciones se expanden por los intertubos y vuelvan a intentarlo.

Disculpen las molestias.


Senado.gob.mx hackeada

Publicado en Interwebz | 0 Comentarios

A algún argentino le pareció gracioso cambiarle la cara al sitio de el senado mexicano esta madrugada de Viernes. Click en la imagen para verla completa en caso de que ya la hayan arreglado para cuando lean esto.

(vía @ugho)