Artifact Content
Not logged in

Content Of:

File conferences/LatinoWare/2008/phpajax.tex artifact 807b4a285a part of check-in [12cfcba2d3] - PHPAJAx slides (small changes). by crodas on 2008-11-01 11:45:58.

% Memcached LatinoWare 2008 
% (c) Copyleft 2008. 
% Cesar Rodas 
%
% Based on http://www.cs.berkeley.edu/~mdw/proj/texslides for details.

\documentclass[20pt,landscape]{foils}
\usepackage{eso-pic}
\usepackage{mdwslides}

\usepackage[english]{babel}
\hypersetup{
  pdfmenubar=true,
  pdftoolbar=true,
%  colorlinks=false,
  pdfpagemode={None},
  pdftitle={Escribiendo Aplicaciones Ajax con PHP},
  pdfauthor={Cesar D. Rodas},
  pdfsubject={Latinoware 2008: Escribiendo Aplicaciones Ajax con PHP },
  pdfkeywords={PHP,ajax}
}

\usepackage{hyperref}
\usepackage{pause}
\usepackage{graphicx}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fondo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{bgblue}{rgb}{0.04,0.39,0.53}
\definecolor{bgwhite}{rgb}{0.9,1,1}
\definecolor{mygreen}{rgb}{0,0.3,0}
\bgaddcenter{\includegraphics[width=15cm]{logo.png}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Set headers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\MyLogo{\color{mdwblue}Cesar D. Rodas, http://cesar.la/ - \LaTeX}
\rightfooter{\quad\textsf{\thepage}}

\begin{document}
\rm

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Presentacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff

\vskip 1.5in
\begin{center}
{\color{mdwblue}\huge\trebucbd Escribiendo Aplicaciones Ajax con PHP}

\vskip 11ex
César D. Rodas\\
{\small\trebucit \href{mailto:crodas@member.fsf.org}{crodas@member.fsf.org}}
\vskip 5ex
{\mdwsmall\tt \href{http://cesar.la/talks/}{http://cesar.la/talks/}}
\vskip 2ex
\includegraphics[width=4cm]{logo.png}\\
Latinoware 2008, Foz do Iguaçu, Brasil
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Quien soy
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Quien les habla?}
\LogoOn

\begin{list1}
    \item Participante Google Summer of Code 2008
    \begin{list2}
        \item Plug-in para WordPress\pause
    \end{list2}
    \item Ganador del PHP Innovation award 2007\pause
    \item Centro Nacional de Computacion\pause
    \item \href{http://www.cesarodas.com/}{www.CesaRodas.com}\pause
\end{list1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Porque USA Ajax?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Porque utilizar AJAX?}

\begin{list1}
    \item Es la tendencia ({\tt web 2.0})\pause  
    \item Desarrollo de "Aplicaciones" webs.\pause
    \item Reducción de ancho de banda.\pause
    \item ... 
\end{list1}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Que no es memcached
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Porqué AJAX es complicado}

\begin{list1}
    \item Doble programación.
        \begin{list2}
            \item Servidor ({\tt PHP}).
            \item Cliente ({\tt Javascript}).\pause
        \end{list2}
    \item Las implementaciones de Javascript no son estándares.\pause
    \item Liberías de PHP complicadas o incompletas.\pause
        \begin{list2}
            \item Montón de códigos para cosas sencillas.
            \item Se necesita escribir javascript.
            \item Casi todas las librerías PHP sólo relizan {\tt RPC}.\pause
        \end{list2}
    \item Las librerías Javascript son muy grandes.\pause
\end{list1}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Soluciones?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Algunas soluciones...}

\begin{list1}
    \item Simple librería de Javascript.\pause
    \item Método de transporte.
        \begin{list2}
            \item XML
            \item JSON
            \item ...\pause
        \end{list2}
    \item Buenas librerías y/o frameworks "AJAX" en PHP.\pause
\end{list1}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Comparacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff

\vskip 2in
\begin{center}
{\color{mdwblue}\Huge\trebucbd Comparación de Librerias/Frameworks}
\\Nada personal.
\end{center}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% XAJAx
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{XAjax}
\LogoOn
\definecolor{000000}{rgb}{0.000,0.000,0.000}
\definecolor{0000BB}{rgb}{0.000,0.000,0.733}
\definecolor{FF8000}{rgb}{1.000,0.502,0.000}
\definecolor{007700}{rgb}{0.000,0.467,0.000}
\definecolor{DD0000}{rgb}{0.867,0.000,0.000}
\begin{noindent}{\color{000000} 
{\color{0000BB} <?php\\
}}{\color{FF8000} /*\ RPC\ */\ \\
}{\color{007700} function\ }{\color{0000BB} myFunction}{\color{007700} (}{\color{0000BB} \$arg}{\color{007700} )\ \{\\}
\ \ \ \ {\color{FF8000} /*\ Creando\ una\ respuesta\ */\\}
\ \ \ \ {\color{0000BB} \$objResponse\ }{\color{007700} =\ new\ }{\color{0000BB} xajaxResponse}{\color{007700} ();\\}
\ \ \ \ {\color{0000BB} \$objResponse}{\color{007700} ->}{\color{0000BB} assign}{\color{007700} (}{\color{DD0000} "SomeElementId"}{\color{007700} ,}{\color{DD0000} "innerHTML"}{\color{007700} ,\ }{\color{0000BB} \$newContent}{\color{007700} );\\
\}\\
}{\color{0000BB} \$xajax\ }{\color{007700} =\ new\ }{\color{0000BB} xajax}{\color{007700} ();\\
}{\color{FF8000} /*\ Registrando\ funcion\ */\\
}{\color{0000BB} \$xajax}{\color{007700} ->}{\color{0000BB} registerFunction}{\color{007700} (}{\color{DD0000} "myFunction"}{\color{007700} );\\
}{\color{FF8000} /*\ Procesando\ */\\
}{\color{0000BB} \$xajax}{\color{007700} ->}{\color{0000BB} processRequest}{\color{007700} ();\\
}{\color{0000BB} ?>\\
}\\
<!--Codigo\ Javascript-->\\
{\color{0000BB} <?php\ \$xajax}{\color{007700} ->}{\color{0000BB} printJavascript}{\color{007700} ();\ }{\color{0000BB} ?>\\
}<!--\ el\ codigo\ -->\\
<div\ id="SomeElementId"></div>\\
<button\ onclick="xajax\_myFunction('It\ worked!');"></pre>

\end{noindent}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% XAjax
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{XAjax - Desventajas}
\begin{list1}
    \item Utiliza solo XML para el transporte.\pause
    \item Genera mucho código.\pause
    \item API débil.
    \begin{list2}
        \item No hay forma de crear elementos en la repuesta.
        \item Cosas complicadas requieren de escritura de javascript.
    \end{list2}
\end{list1}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% XAjax
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{SAjax}


\definecolor{000000}{rgb}{0.000,0.000,0.000}
\definecolor{0000BB}{rgb}{0.000,0.000,0.733}
\definecolor{007700}{rgb}{0.000,0.467,0.000}
\definecolor{DD0000}{rgb}{0.867,0.000,0.000}
\begin{noindent}{\color{000000} 
{\color{0000BB} <?php\\
\ \ \ \ }}{\color{007700} function\ }{\color{0000BB} multiply}{\color{007700} (}{\color{0000BB} \$x}{\color{007700} ,\ }{\color{0000BB} \$y}{\color{007700} )\ \{\\}
\ \ \ \ \ \ \ \ return\ {\color{0000BB} \$x\ }{\color{007700} *\ }{\color{0000BB} \$y}{\color{007700} ;\\
\ \ \ \ \}\\
\ \ \ \ }{\color{0000BB} sajax\_init}{\color{007700} ();\\
\ \ \ \ }{\color{0000BB} sajax\_export}{\color{007700} (}{\color{DD0000} "multiply"}{\color{007700} );\\
\ \ \ \ }{\color{0000BB} sajax\_handle\_client\_request}{\color{007700} ();\\
}{\color{0000BB} ?>\\
}<script>\\
{\color{0000BB} <?php\ sajax\_show\_javascript}{\color{007700} ();\ }{\color{0000BB} ?>\\
}function\ do\_multiply\_cb(z)\ \{\\
\ \ \ \ document.getElementById("z").value\ =\ z;\\
\}\\
function\ do\_multiply()\ \{\\
\ \ \ \ x\ =\ document.getElementById("x").value;\\
\ \ \ \ y\ =\ document.getElementById("y").value;\\
\ \ \ \ x\_multiply(x,\ y,\ do\_multiply\_cb);\\
\}\\
</script>

\end{noindent}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% XAjax - Desventajas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{SAjax - Desventajas}

\begin{list1}
    \item Genera mucho javascript.\pause
    \item Poca documentacion.\pause
    \item API débil.\pause
    \item Se necesita escribir código Javascript.\pause
    \item Solo realiza el "RPC".
\end{list1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Comparacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff
\vskip 2in
\begin{center}
{\color{mdwblue}\Huge\trebucbd Cual sería la solución perfecta?}
\\Lo que todo PHPero necesita...
\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{La solución}
\LogoOn
\begin{list1}
    \item La parte importante. 
    \item Abstracción de Javascript.
    \item Abstracción de los Objetos HTML (DOM API).
    \item Método optimizado de transporte.
\end{list1}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Comparacion
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff
\vskip 2in
\begin{center}
{\color{mdwblue}\Huge\trebucbd PHPAJAX}
\end{center}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{PHPAJAX}
\LogoOn
\begin{list1}
    \item PHPClasses, Open source (BSD License).\pause
    \item Es la versión (re-escritura) 3.\pause
    \item Extensible.\pause
    \item Método de transporte.\pause
    \item Genera código javascript desde el PHP.\pause 
    \item Subir (upload) archivos al servidor usando "ajax".\pause
\end{list1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{PHPAJAX - Un poco de historia}

\definecolor{000000}{rgb}{0.000,0.000,0.000}
\definecolor{0000BB}{rgb}{0.000,0.000,0.733}
\definecolor{007700}{rgb}{0.000,0.467,0.000}
\definecolor{DD0000}{rgb}{0.867,0.000,0.000}
\begin{noindent}{\color{000000} 
{\color{0000BB} <?php\\
}}{\color{007700} class\ }{\color{0000BB} chat\_put\ }{\color{007700} extends\ }{\color{0000BB} phpajax\ }{\color{007700} \{\\}
\ \ \ \ var\ {\color{0000BB} \$hotkeys}{\color{007700} =array(}{\color{DD0000} "ctrl-m"}{\color{007700} ,}{\color{DD0000} "alt-y"}{\color{007700} );\\}
\ \ \ \ var\ {\color{0000BB} \$inputs}{\color{007700} =array(}{\color{DD0000} "text"}{\color{007700} ,}{\color{DD0000} "usr\_id"}{\color{007700} );\\}
\ \ \ \ function\ {\color{0000BB} loading}{\color{007700} ()\ \{\\}
\ \ \ \ \ \ \ \ {\color{0000BB} aprint}{\color{007700} (}{\color{DD0000} 'loading'}{\color{007700} ,\ }{\color{DD0000} 'Sending...'}{\color{007700} );\\}
\ \ \ \ \ \ \ \ {\color{0000BB} ashow}{\color{007700} (}{\color{DD0000} 'loading'}{\color{007700} );\\}
\ \ \ \ \ \ \ \ {\color{0000BB} ahide}{\color{007700} (}{\color{DD0000} 'send'}{\color{007700} );\\}
\ \ \ \ \}\\
\ \ \ \ function\ {\color{0000BB} main}{\color{007700} ()\ \{\\}
\ \ \ \ \ \ \ \ global\ {\color{0000BB} \$mysql}{\color{007700} ;\\}
\ \ \ \ \ \ \ \ {\color{0000BB} \$a\ }{\color{007700} =\ \ }{\color{0000BB} \$this}{\color{007700} ->}{\color{0000BB} text}{\color{007700} ;\\}
\ \ \ \ \ \ \ \ {\color{0000BB} aprint}{\color{007700} (}{\color{DD0000} 'chat-text'}{\color{007700} ,}{\color{DD0000} "me\ \$a"}{\color{007700} ,}{\color{0000BB} false}{\color{007700} );}\\
\ \ \ \ \ \ \ \ {\color{0000BB} aprint}{\color{007700} (}{\color{DD0000} 'text'}{\color{007700} ,}{\color{DD0000} ''}{\color{007700} );}{\color{0000BB} ashow}{\color{007700} (}{\color{DD0000} 'send'}{\color{007700} );}\\
\ \ \ \ \ \ \ \ {\color{0000BB} js}{\color{007700} (}{\color{DD0000} "getObject('chat-text').scrollTop\ =\ getObject('chat-text').scrollHeight;"}{\color{007700} );\\
\ \ \ \ \}\\
\}\ \\
}{\color{0000BB} ?>\\
}

\end{noindent}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{PHPAJAX - Desventajas}
\begin{list1}
    \item API muy débil.\pause
    \item JSON.\pause
    \item Prototype.\pause
    \item Definir una clase por acción.\pause
\end{list1}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{PHPAJAX 3}
\begin{list1}
    \item Método de transporte.
    \begin{list2}
        \item XML, JSON, ... ?
        \item Código Javascript.\pause
    \end{list2}
    \item Posible método alternativo de AJAX sin XMLHttpRequest().\pause
    \item Genera código Javascript a partir de PHP.\pause
    \item Funciones comunes para evitar escritura de Javascript.
    \begin{list2}
        \item Filtros.
        \item Operaciones Matematicas.\pause
    \end{list2}
    \item Creacion de elementos HTML en el RPC.\pause
    \item "Hooks" a eventos.
\end{list1}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{PHPAJAX 3 - PHP2JS}

\definecolor{000000}{rgb}{0.000,0.000,0.000}
\definecolor{0000BB}{rgb}{0.000,0.000,0.733}
\definecolor{007700}{rgb}{0.000,0.467,0.000}
\definecolor{FF8000}{rgb}{1.000,0.502,0.000}
\definecolor{DD0000}{rgb}{0.867,0.000,0.000}
\begin{noindent}{\color{000000} 
{\color{0000BB} <?php\\
}}{\color{007700} class\ }{\color{0000BB} MyButton\ }{\color{007700} extends\ }{\color{0000BB} HtmlButtons\ }{\color{007700} \{\\}
\ \ \ \ {\color{FF8000} \#\\}
\ \ \ \ {\color{007700} function\ }{\color{0000BB} onClick}{\color{007700} ()\ \{\\}
\ \ \ \ \ \ \ \ {\color{FF8000} \#\\}
\ \ \ \ \ \ \ \ {\color{0000BB} \$text\ }{\color{007700} =\ }{\color{0000BB} js}{\color{007700} ::}{\color{0000BB} GetObject}{\color{007700} (}{\color{DD0000} "algun\_input"}{\color{007700} );\\}
\ \ \ \ \ \ \ \ {\color{0000BB} \$numero\ }{\color{007700} =\ }{\color{0000BB} js}{\color{007700} ::}{\color{0000BB} GetObject}{\color{007700} (}{\color{DD0000} "algun\_numero"}{\color{007700}I );\\}\pause
\ \ \ \ \ \ \ \ {\color{0000BB} js}{\color{007700} ::}{\color{0000BB} alert}{\color{007700} (}{\color{DD0000} "El\ valor\ del\ input\ es\ "}{\color{007700} ,\ }{\color{0000BB} \$text}{\color{007700} ->}{\color{0000BB} value}{\color{007700} );\\}\pause
\ \ \ \ \ \ \ \ {\color{FF8000} /*\ filtro\ */\\}
\ \ \ \ \ \ \ \ {\color{0000BB} jfilt}{\color{007700} ::}{\color{0000BB} number}{\color{007700} (}{\color{0000BB} \$numero}{\color{007700} ->}{\color{0000BB} value}{\color{007700} ,}{\color{DD0000} "Tiene\ que\ ser\ un\ numero"}{\color{007700} );}{\color{0000BB} a\\}\pause
\ \ \ \ \ \ \ \ {\color{FF8000} /*\ matematica,\ suma\ */\\}
\ \ \ \ \ \ \ \ {\color{0000BB} \$numero}{\color{007700} ->}{\color{0000BB} value\ }{\color{007700} =\ }{\color{0000BB} jnum}{\color{007700} ::}{\color{0000BB} add}{\color{007700} (}{\color{0000BB} 5}{\color{007700} ,}{\color{0000BB} \$numero}{\color{007700} ->}{\color{0000BB} value}{\color{007700} );\\}
\ \ \ \ \}\\
\}\\
{\color{0000BB} ?>\\
}

\end{noindent}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff
\vskip 2in
\begin{center}
{\color{mdwblue}\Huge\trebucbd Theory is good, show me in action}
\end{center}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Preguntas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{}
\LogoOff

\begin{center}
\vskip 1.5in
{\color{mdwblue}\Huge\trebucbd Muchas gracias! Preguntas?}\\
\vskip 0.5in
{\color{mdwblue}\Large\trebucbd   Cesar Rodas.}\\
{\color{black}\small\trebucbd   crodas@member.fsf.org}\\
{\color{black}\small\trebucbd   http://cesarodas.com/}\\
\vskip 0.5in
{\color{mdwblue}\Large\trebucbd   Mi blog.}\\
{\color{black}\small\trebucbd   http://cesar.la/}\\

\end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Powered by 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Resources}

\begin{list1}
    \item PHPAjax
    \begin{list2}
        \item \url{http://www.phpajax.org/}
    \end{list2}
    \item XAjax
    \begin{list2}
        \item \url{http://www.xajaxproject.org}
    \end{list2}
\end{list1}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Powered by 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\slide{Powered by...}
\LogoOn
\begin{center}
{\includegraphics[width=10cm]{php.png}}\\
{\includegraphics[width=10cm]{latex.png}}\\

\end{center}
\end{document}