martes, 20 de diciembre de 2011

Galaxy Nexus a empleados de Google!


La compañía, conocida por ser la que más cuida de sus empleados, regaló el último smartphone de samsung por navidad.
La fila que debían realizar los empleados de la compañía para poder retirar el smartphone.
El smartphone posee una particular personalización, con una tapa trasera decorada con íconos de Google+ y Android.
Por dentro el Galaxy Nexus posee un procesador de 1,2 GHz, pantalla de 4,65 pulgadas, dos cámaras que dan la posibilidad de realizar videoconferencias y, para ponerle la frutilla a la torta este increíble obsequio, utiliza el nuevo sistema operativo de Google, Android 4.0 Ice Cream Sandwich.
Los empleados de Google Zúrich y Londres fueron los primeros en recibir este regalo de la compañía. Para esto debieron realizar largas colas, ya que ni bien se lo anunció fue un furor entre los trabajadores.

Fuente: RedUsers
Así se ve la parte trasera del Galaxy Nexus especialmente fabricado para los empleados de Google.

sábado, 17 de diciembre de 2011

Android Trainning y mas!



Google está haciendo todo lo posible para que Android sea más llamativo para los desarrolladores y ha lanzado Android Trainning, una nueva plataforma de formación diseñada con el objetivo de proveer a los interesados en crear aplicaciones Android toda la información que necesitan para mejorar su aprendizaje y ayudarles a construir mejores aplicaciones utilizando las best practices para resolver problemas comunes en el desarrollo con esta plataforma.
Los cursos que aquí se dan son con la finalidad de cubrir una gran variedad de temas, incluyendo temas como diseño de una navegación efectiva en tus aplicaciones, la gestión de reproducción de audio, cómo optimizar la vida de la batería, etc.
Y como bien podemos encontrar en la leyenda del home de Android Trainning, “aquí encontrarás una colección de clases que tienen como objetivo ayudarte a construir buenas aplicaciones [...]. Cada una de estas clases explican los pasos necesarios para resolver un problema o ejecutar una función con ayuda de fragmentos de código y proyectos de ejemplo que puedes utilizar para hacer tus aplicaciones.”
Además de esto, Google menciona que agregará aún más clases que las que actualmente podemos encontrar desde ya en el sitio, y lo mejor de todo es que también nos habla de cursos que desean implementar todo el equipo del gigante de Internet para que todos los desarrolladores interesados en su plataforma móvil podamos crecer y empezar no sólo a crear aplicaciones Android, sino también excelentes aplicaciones Android. 
¿Qué te parece esta iniciativa? ¿Listo para seguir aprendiendo? Si queres un curso presencial, en febrero/marzo comenzaremos uno nuevo en Rosario! La idea es lograr formar una comunidad de Android Developers en Rosario!

jueves, 15 de diciembre de 2011

Android 4.0: con Ice Cream Sandwich , amor a primera vista?


Ice Cream Sandwich
Como estaba marcado en el calendario, Google nos ha presentado la versión 4.0 de Android acompañando al Galaxy Nexus. En este artículo vamos a resumir las novedades de la esperada renovación del sistema operativo de Google, mejor conocida como Ice Cream Sandwich, que ha tenido a Matías Duarte como diseñador principal, y maestro de ceremonias.
Para los que no estuvieron al tanto, nuestros compañeros de Xataka Android han pasado la noche informando sobre las novedades del sistema.

¿Puede una máquina tener alma?

No es que me ponga transcendental, es un eslogan que aparecía en uno de los muros de la presentación. Android 4.0 está construido bajo tres principios en la mente de Matías: que nos encante, nos simplifique la vida y nos sorprenda.
Para el reconocido diseñador de la experiencia de usuario del sistema de Google, lo que ocurría hasta ahora es que necesitábamos Android y estábamos contentos con él, pero no habíamos llegado a responder emocionalmente, ahora empezaremos a quererlo.
matias duarte
Para Matías, Honeycomb supuso una pista de aterrizaje de emergencia, al llegar para tomar el mando de la experiencia de usuario de una plataforma en pleno éxito (aunque no acompañen las ventas). Con Ice Cream Sandwich han diseñado algo más grande, algo más que llevar Honeycomb a teléfonos,o una moderada evolución de Gingerbread.
Ahora nos toca a nosotros evaluar en qué nivel está realmente Android 4.0. Parece que por lo que se puede comprobar en las primeras tomas de contacto, lo han conseguido, los que han estado jugando con él, aseguran que es la versión Android más trabajada y pulida, mejorando las características que hicieron triunfar al sistema (multitarea, notificaciones, personalización e interactividad)
Actualización, antes de continuar, para los que no lo vieron teste es el vídeo oficial completo:

Ice Cream Sandwich entra por los ojos

Siempre y cuando te guste el estilo que introdujo Honeycomb para las tablets (algo menos Tron), y con un pequeño impedimento hardware que creo es importante remarcar: desde mi punto de vista el sistema aprovecha demasiado bien la alta resolución del teléfono (muchos elementos en pantalla) con el que ha sido presentado (1280×720 píxeles), ya me gustará a mi ver qué tal se las ingenia con terminales actuales.
Antes de pasar a tocar punto por punto, vamos a ver material multimedia oficial de Ice Cream Sandwich, un vídeo en esta ocasión vale más que mil palabras:

Gestos por delante de botones

En realidad, el nuevo sistema toma lo mejor de Android 2.3 y Android 3.0, combinándolo con una nueva tipografía exclusiva denominada Roboto, diseñada para una cómoda lectura en pantallas de alta resolución.
Otro de los aspectos novedosos es la inclusión de botones virtuales en la barra del sistema, permitiendo realizar las típicas opciones de navegación Android (atrás, inicio, aplicaciones recientes). Tanto la barra de sistema como los botones virtuales están presentes a lo largo de las aplicaciones que usemos, pero podemos hacerla desaparecer en un modo a pantalla completa, y también giran dependiendo de la orientación del equipo. Tenemos una tercera barra de acciones contextual a la aplicación, que suele ir en la parte superior.
tactiles navegación
Matías ha considerado que los gestos son mucho más intuitivos y apropiados que los botones, y la verdad es que al final aparecen por todas partes. Les resumo algunos aspectos de la interfaz y funcionamiento de Ice Cream Sandwich:
  • La barra de notificaciones se sigue conservando en la parte superior en lo que hemos visto para teléfonos, con un diseño translucido que la hace más atractiva y muestra las caras de nuestros contactos. Las notificaciones también son accesibles desde la pantalla de bloqueo.
notificaciones
  • La forma de crear carpetas nos recordará a iOS, sólo tenemos que arrastrar el icono de una aplicación encima de otra.
  • en la parte inferior de la pantalla tenemos una barra con nuestras aplicaciones favoritas, y en el centro de la misma el acceso al launcher de aplicaciones.
  • La barra de búsquedas de Google siempre está presente en los escritorios, y se ha buscado un funcionamiento algo así como el “Just Type” de webOS.
widgetd
  • Los Widgets pueden moverse y cambiar de tamaño al más puro estilo Honeycomb.
  • Ya es posible tomar capturas de la pantalla, se consigue con la combinación del botón para bajar el volumen y el botón de encendido.
  • Tenemos un botón que nos abre el gestor de multitarea, con una representación similar a Honeycomb, pero ahora podemos eliminar una tarea con un gesto horizontal.
normal
  • Mejoras en el funcionamiento del teclado, con un nuevo sistema de diccionarios y recomendaciones. Se permite arrastrar el texto copiado de forma tácil.
  • Se introduce un nuevo sistema de reconocimiento de voz que nos corrige y subraya el texto dictado en tiempo real para evitar errores de escritura. Con un simple toque podremos ver las sugerencias de Android y corregirlo.
  • En los comentarios nos dicen de que Ice Cream Sandwich hereda de Honeycomb la aceleración por hardware, lo que consideramos una mejora en potencia para mover la interfaz.

Un navegador web de primera clase

Ventana web
Parte vital en un sistema operativo móvil, y uno de los puntos en los que Google trabaja concienzudamente. Les enumero algunas de las novedades que nos llegan con Ice Cream Sandwich:
  • El navegador puede abrir ahora hasta 16 pestañas a la vez
  • Se puede cambiar con facilidad de la versión móvil a la web completa, cuestión que algunos agradecemos
  • Nueva gestión visual de las diferentes ventanas
  • Mejor sincronización con Chrome a través de nuestra cuenta de Google
  • Posibilidad de guardar para leer después una página, aunque no tengamos conexión
Las mejoras en el rendimiento del renderizado de páginas también ha sufrido mejoras destacables, con actualizaciones en WebKit y en el motor Javascript V8:
Ice Cream Sandwich

Subiendo de nivel las aplicaciones principales del sistema

  • Gmail: la interfaz ha sido renovada, ahora tenemos hasta un par de líneas en la preview que nos permite no tener que abrirlos en muchas ocasiones. También nos encontramos una más adecuada barra de acciones contextual, y la posibilidad de guardar hasta 30 días de mensajes para las búsquedas. Tenemos un nuevo widget para Gmail que puede cambiar de tamaño a nuestro antojo.
  • Calendario: también remozada para la ocasión y como Gmail también recibe un acercamiento a los gestos.
control datos
  • Monitorizar datos es algo que se plantea vital para muchos usuarios, por lo que Google ha incorporado un sistema que nos monitorizará todo el consumo de datos (3G y WiFi), tanto por aplicaciones, como en general. Nos indicará el consumo global en una fecha determinada, o bien podremos pedir que nos avise al superar una cantidad.
  • La cámara también ha tenido su correspondiente tratamiento, con acceso desde la pantalla de bloqueo, modo panorámico continuo, y una nueva galería. Quizás la novedad más destacable la encontramos en el sencillo pero eficaz editor de imágenes (filtros, recortes, quita ojos rojos).
edición Cámara
  • La nueva aplicación de contactos, presentada en inglés como “People”, nos muestra a nuestros contactos en cuadros táctiles de generoso tamaño, que nos dan acceso a la información personal de cada uno. Una de las novedades es la posibilidad de enviar mensajes rápidos como respuesta a una llamada que no podemos responder.
People

Android Beam, compartiendo vía NFC

Aprovechando la tecnología NFC presente en los teléfonos Nexus, y que poco a poco será más importante en el sistema Android, con Beam se pretende conseguir que compartir información con nuestros teléfonos sea tan fácil como acercarlos.
Podremos compartir desde enlaces a aplicaciones, contactos, vídeos o música, y sin menús en los que generar el hermanamiento entre dispositivos, sólo acercar ambos dispositivos con tecnologíaNFC.
Android Beam

Face Unlock, un desbloqueo muy singular

Face Unlock se trata de una las funcionalidades más innovadoras de Ice Cream Sandwich, que también ha mirado por mejorar aspectos de seguridad en el sistema.
Tal y como podéis intuir, o traducir, consiste en que nuestra pantalla de bloqueo se desactive con el reconocimiento de nuestro rostro, dejando a un lado los antiguos patrones o PINs. Veremos cómo funciona esto en la práctica, ya que tambien se puede destrabar con una foto :)
Face unlock

Wi-Fi Direct y Bluetooth HDP

Estamos encontrándonos cada vez más dispositivos que cuentan con la especificación WiFi Direct, que permite conectar a equipos a través de la red WiFi, sin que Internet tenga nada que ver en el asunto.
Google abre la puerta a los desarrolladores para que usen esta nueva posibilidad con Ice Cream Sandwich. Se podrá utilizar para compartir datos, realizar streaming de vídeo, o conectar nuestros teléfonos con impresoras sin necesidad de cables.
Android 4.0 también da soporte a dispositivos Bluetooth Health Device Profile (HDP), dando acceso a los desarrolladores para trabajar inalámbricamente con sensores y equipos que encontramos en hospitales, centros deportivos, etc.
Samsung Galaxy Nexus, presentado oficialmente
Una vez descritas todas las novedades, y con la esperanza de poder probarlo pronto para poder tener una opinión real del sistema, nos quedamos con un excelente sabor de boca con esta actualización, especialmente por el aspecto visual conseguido, las innovadoras funcionalidades estrenadas, y la buena sintonía que tiene con el hardware del Samsung Galaxy Nexus, habrá que ver qué tal aparenta en un Nexus S.
Más información | Android Developers
Imagen | This is My Next

sábado, 10 de diciembre de 2011

Persistencia de datos con Google App Engine


Persistencia de datos a través de JDO

Almacenar datos en una aplicación web escalable puede ser complicado. Un usuario podría estar interactuando con cualquiera de una docena de servidores web en un momento dado y la siguiente solicitud de ese usuario podría dirigirse a un servidor web distinto del servidor que haya gestionado la solicitud anterior. Todos los servidores web deben interactuar con datos que también están distribuidos por docenas de equipos y que posiblemente se encuentran en distintas partes del mundo.
Google App Engine soluciona todos estos problemas. La infraestructura de App Engine se encarga de todas las tareas de distribución, replicación y equilibrio de carga de los datos de un API sencilla, además de ofrecer un potente motor de consulta y transacciones.
El almacén de datos de App Engine es uno de los diversos servicios que ofrece App Engine con dos API: un API estándar y otra de nivel inferior. El uso de las API estándares facilita el traslado de las aplicaciones a otros entornos de alojamiento y a otras tecnologías de bases de datos, en caso necesario. Las API estándares "desconectan" la aplicación de los servicios de App Engine. Los servicios de App Engine ofrecen también varias API de nivel inferior que muestran directamente las funciones del servicio. Puedes utilizar las API de nivel inferior para implementar nuevas interfaces de adaptadores o utilizarlas directamente en la aplicación.
App Engine es compatible con dos estándares de API diferentes para el almacén de datos: Objetos de datos Java (JDO) y API de persistencia Java (JPA).DataNucleus Access Platform, una implementación de código abierto de varios estándares de persistencia Java que dispone de un adaptador para el almacén de datos de App Engine, proporciona estas interfaces.
Para el libro de visitas, utilizaremos la interfaz JDO para la recuperación y para la publicación de los mensajes de los usuarios.

Configuración de DataNucleus Access Platform

Access Platform necesita un archivo de configuración que le indique que debe utilizar el almacén de datos de App Engine como servidor para la implementación de JDO. En el WAR final, este archivo se denomina jdoconfig.xml y se encuentra en el directorio war/WEB-INF/classes/META-INF/.
Si utilizas Eclipse, este archivo se crea como src/META-INF/jdoconfig.xml. Cuando creas el proyecto, el archivo se copia automáticamente en war/WEB-INF/classes/META-INF/.
Si no utilizas Eclipse, puedes crear el directorio war/WEB-INF/classes/META-INF/ directamente o dejar que se genere durante el proceso de compilación y copiar el archivo de configuración de otra ubicación. La secuencia de comandos de compilación Ant que se describe en Uso de Apache Ant copia este archivo desrc/META-INF/.
El archivo jdoconfig.xml debe contener lo siguiente:
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

    <persistence-manager-factory name="transactions-optional">
        <property name="javax.jdo.PersistenceManagerFactoryClass"
            value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
        <property name="javax.jdo.option.NontransactionalRead" value="true"/>
        <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
        <property name="javax.jdo.option.RetainValues" value="true"/>
        <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
    </persistence-manager-factory>
</jdoconfig>

Mejora de la clase JDO

Cuando creas clases JDO, debes utilizar anotaciones Java para describir cómo se deben guardar las instancias en el almacén de datos y cómo se deben volver a crear al recuperarlas de dicho almacén. Access Platform conecta las clases de datos a la implementación mediante un paso de procesamiento posterior a la compilación que DataNucleus denomina "mejora" de las clases.
Si utilizas Eclipse y el complemento de Google, dicho complemento realiza el paso de mejora de la clase JDO automáticamente durante el proceso de compilación.
Si utilizas la secuencia de comandos de compilación Ant que se describe en Uso de Apache Ant, dicha secuencia incluye el paso de mejora necesario.
Para obtener más información acerca de la mejora de la clase JDO, consulta Uso de JDO.

POJO y anotaciones de JDO

JDO permite almacenar objetos Java (a veces denominados "objetos Java antiguos y simples" o POJO) en cualquier almacén de datos con un adaptador compatible con JDO, como DataNucleus Access Platform. El SDK de App Engine incluye un complemento Access Platform para el almacén de datos de App Engine. Esto significa que puedes almacenar instancias de clases definidas en el almacén de datos de App Engine y recuperarlas como objetos mediante el API JDO. Puedes indicar a JDO cómo debe almacenar y reconstruir las instancias de tu clase a través de anotaciones Java.
Vamos a crear una clase Greeting para representar los mensajes individuales publicados en el libro de visitas.
Crea una nueva clase llamada Greeting en el paquete guestbook. (Aquellos usuarios que no utilicen Eclipse pueden crear el archivo Greeting.java en el directorio src/guestbook/). Asigna al archivo de origen el siguiente contenido:
package guestbook;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.users.User;
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
public class Greeting {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private User author;

    @Persistent
    private String content;

    @Persistent
    private Date date;

    public Greeting(User author, String content, Date date) {
        this.author = author;
        this.content = content;
        this.date = date;
    }

    public Key getKey() {
        return key;
    }

    public User getAuthor() {
        return author;
    }

    public String getContent() {
        return content;
    }

    public Date getDate() {
        return date;
    }

    public void setAuthor(User author) {
        this.author = author;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public void setDate(Date date) {
        this.date = date;
    }
}
Esta sencilla clase define tres propiedades de un saludo author (autor), content (contenido) y date (fecha). Estos tres campos privados presentan la anotación@Persistent, que indica a DataNucleus que debe almacenarlos como propiedades de los objetos en el almacén de datos de App Engine.
Esta clase define captadores y definidores de las propiedades que solo utiliza la aplicación. Con el uso de definidores, puedes garantizar de forma sencilla que la implementación de JDO reconozca las actualizaciones. La modificación de los campos omite directamente la función de JDO que guarda los campos actualizados de forma automática, a menos que realices otros cambios en el código que habiliten esto.
La clase también define un campo key (clave), es decir, una clase Key que presenta dos anotaciones: @Persistent y @PrimaryKey. El almacén de datos de App Engine tiene una noción de las claves de entidades y puede representar las claves de varias formas en el objeto. La clase Key representa todos los aspectos de las claves del almacén de datos de App Engine, incluido un ID numérico que se define automáticamente como un valor exclusivo cuando se guarda el objeto.
Para obtener más información acerca de las anotaciones de JDO, consulta Definición de las clases de datos.

La clase PersistenceManagerFactory

Todas las solicitudes que utilizan el almacén de datos crean una nueva instancia de la clase PersistenceManager. Para ello, utilizan una instancia de la clase PersistenceManagerFactory.
Una instancia de PersistenceManagerFactory tarda algún tiempo en inicializarse. Afortunadamente, solo se necesita una instancia para cada aplicación, y esta instancia se puede almacenar en una variable estática que pueden utilizar varias solicitudes y clases. Una forma sencilla de realizar este procedimiento es mediante la creación de una clase envoltorio "singleton" para la instancia estática.
Crea una nueva clase denominada PMF en el paquete guestbook (un archivo denominado PMF.java en el directorio src/guestbook/) que contenga el siguiente contenido:
package guestbook;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
public final class PMF {
    private static final PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PMF() {}

    public static PersistenceManagerFactory get() {
        return pmfInstance;
    }
}

Creación y almacenamiento de objetos

Con DataNucleus y la clase Greeting, la lógica de procesamiento de formularios puede almacenar ahora nuevos saludos en el almacén de datos.
Modifica src/guestbook/SignGuestbookServlet.java tal como se indica para que se parezca a lo que se muestra a continuación:
package guestbook;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import guestbook.Greeting;
import guestbook.PMF;
public class SignGuestbookServlet extends HttpServlet {
    private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        String content = req.getParameter("content");
        Date date = new Date();
        Greeting greeting = new Greeting(user, content, date);

        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(greeting);
        } finally {
            pm.close();
        }

        resp.sendRedirect("/guestbook.jsp");
    }
}
Este código crea una nueva instancia Greeting mediante la invocación del constructor. Para guardar la instancia en el almacén de datos, crea una clasePersistenceManager a través de una clase PersistenceManagerFactory y, a continuación, transmite la instancia al método makePersistent() dePersistenceManager. Las anotaciones y la mejora del código de bytes se toman de ahí. Una vez que se obtiene makePersistent(), el nuevo objeto se guarda en el almacén de datos.

Consultas con JDOQL

El estándar JDO define un mecanismo para las consultas de objetos persistentes denominado JDOQL. Puedes utilizar JDOQL para realizar consultas de entidades del almacén de datos de App Engine y para recuperar objetos con mejoras de la clase JDO.
En este ejemplo, no nos complicaremos y escribiremos el código de consulta directamente en guestbook.jsp. Si se tratara de una aplicación de mayores dimensiones, la lógica de consulta se debería delegar en otra clase.
Modifica war/guestbook.jsp y añade las líneas indicadas de forma que se parezca a lo que se muestra a continuación:
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.util.List" %><%@ page import="javax.jdo.PersistenceManager" %>
<%@ page import="com.google.appengine.api.users.User" %><%@ page import="com.google.appengine.api.users.UserService" %><%@ page import="com.google.appengine.api.users.UserServiceFactory" %><%@ page import="guestbook.Greeting" %><%@ page import="guestbook.PMF" %>
<html>
  <body>
<%
    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    if (user != null) {
%><p>Hello, <%= user.getNickname() %>! (You can
<a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">sign out</a>.)</p>
<%
    } else {
%><p>Hello!
<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign in</a>
to include your name with greetings you post.</p>
<%
    }
%>
<%
    PersistenceManager pm = PMF.get().getPersistenceManager();
    String query = "select from " + Greeting.class.getName();
    List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute();
    if (greetings.isEmpty()) {
%><p>The guestbook has no messages.</p>
<%
    } else {
        for (Greeting g : greetings) {
            if (g.getAuthor() == null) {
%><p>An anonymous person wrote:</p>
<%
            } else {
%><p><b><%= g.getAuthor().getNickname() %></b> wrote:</p>
<%
            }
%><blockquote><%= g.getContent() %></blockquote>
<%
        }
    }
    pm.close();
%>

    <form action="/sign" method="post">
      <div><textarea name="content" rows="3" cols="60"></textarea></div>
      <div><input type="submit" value="Post Greeting" /></div>
    </form>

  </body>
</html>
Para preparar una consulta, debes ejecutar el método newQuery() de una instancia PersistenceManager con el texto de la consulta como cadena. El método devuelve un objeto de consulta. El método execute() del objeto de consulta realiza la consulta y, a continuación, muestra una lista List<> con objetos de resultado del tipo adecuado. La cadena de consulta debe incluir el nombre completo de la clase a la que se dirige la consulta, incluido el nombre del paquete.
Vuelve a crear el proyecto y reinicia el servidor. Consulta http://localhost:8888/. Introduce un saludo y envíalo. El saludo aparecerá encima del formulario. Introduce otro saludo y envíalo. Se mostrarán los dos saludos. Prueba a salir y a volver a acceder utilizando los enlaces; a continuación, intenta enviar mensajes con la sesión iniciada y con la sesión cerrada.
Consejo: en una aplicación real, puede ser una buena idea utilizar caracteres de escape con los caracteres HTML cuando se muestra el contenido enviado por los usuarios como, por ejemplo, los saludos de esta aplicación. JavaServer Pages Standard Tag Library (JSTL) incluye una serie de rutinas que permiten realizar este procedimiento. App Engine incluye JSTL (y otros archivos JAR de tiempo de ejecución relacionados con JSP), así que no es necesario que los incluyas en la aplicación. Busca la función escapeXml en la biblioteca de etiquetas disponible en http://java.sun.com/jsp/jstl/functions. Para obtener más información, consulta el tutorial de J2EE 1.4 de Sun.

Introducción a JDOQL

El libro de invitados muestra actualmente todos los mensajes que se han publicado en el sistema. Además, los mensajes aparecen en el orden en que se crearon. Cuando el libro de invitados contenga muchos mensajes, es posible que resulte más útil mostrar solo los mensajes recientes y que aparezca en primer lugar el mensaje más reciente. Para ello, podemos ajustar la consulta del almacén de datos.
Puedes realizar una consulta con la interfaz JDO mediante JDOQL, un lenguaje de consulta parecido a SQL que permite recuperar objetos de datos. En la página JSP, la cadena de consulta JDOQL se define con la siguiente línea:
    String query = "select from " + Greeting.class.getName();
Dicho de otro modo, la cadena de consulta JDOQL es la siguiente:
select from guestbook.Greeting
Esta consulta busca en el almacén de datos todas las instancias de la clase Greeting que se han guardado hasta el momento.
Una consulta puede especificar el orden en que se deben mostrar los resultados en términos de los valores de las propiedades. Para recuperar todos los objetosGreeting en el orden inverso al de su publicación (es decir, del más reciente al más antiguo), se debería utilizar la siguiente consulta:
select from guestbook.Greeting order by date desc
Se pueden realizar consultas que limiten también el número de resultados. Por ejemplo, para obtener solamente los cinco saludos más recientes, se debería utilizarorder by y range, tal como se muestra a continuación:
select from guestbook.Greeting order by date desc range 0,5
Prueba a realizar este procedimiento con la aplicación del libro de visitas. En guestbook.jsp, sustituye la definición de query por lo siguiente:
    String query = "select from " + Greeting.class.getName() + " order by date desc range 0,5";
Publica más de cinco saludos en el libro de visitas. solo se muestran los cinco más recientes en orden cronológico inverso.
Puedes obtener más información acerca de las consultas y del lenguaje JDOQL en Consultas e índices.

Siguiente...

Todas las aplicaciones web devuelven código HTML generado de forma dinámica a partir del código de la aplicación mediante plantillas o algún otro mecanismo. La mayor parte de las aplicaciones web también necesitan publicar contenido estático, como imágenes, hojas de estilo CSS o archivos JavaScript. Para una mayor eficiencia, App Engine no trata igual los archivos estáticos que el código fuente de la aplicación y los archivos de datos. Vamos a crear ahora una hoja de estilo CSS para esta aplicación que sea un archivo estático.
Luego veremos como utilizar archivos estaticos, pero eso en otra entrada del Blog... ya tenemos mucho para nuestro servidor de las aplicaciones Android,no?
saludo,
MAriano!