Sunday, January 30, 2011

Difference between Android's and iPhone's Accelerometer

Today I was playing with Android's accelerometer. I am in the process of closing cocos2d-x's issue 242.

Basically I finish coding my first approach but when I run it with the test case the ball went exactly to the opposite side.
I started checking if I was sending the parameters correctly and unfortunately I was doing the right thing :(.

Since the test case was done for an iphone device I checked if the iphone used the same coordinates as Android.

I found two useful links to read about both's accelerometer:
* iphone-tutorial-reading-the-accelerometer
* SensorEvent's doc

If you check the following screens you will notice what I am talking about:





Not completely sure of what was going on I downloaded a demo app to check it gave the same values as my code. We both were sending the same coordinates so there was something different between iphone's and Android's accelerometers.

I ended up download an iphone demo app to check what were the values read. You can see the different outputs with both devices placed in the same position:




Notice the difference in the z axis value.
To fix it, it was just a matter of multiplying by -1 every value from Android's accelerometer.

Sunday, January 16, 2011

Cocos2d's Android flavors

You don't know cocos2d?

Cocos2d started as a python game framework to be used on a competition called PyWeek. The name comes from a city in Córdoba, Argentina called "Los cocos". Cocos2d was born there in a PyCamp by PyAR during 2008.

You will notice that all coocos' tests have a character named Grossini. AFAIK it comes from the PyWeek game: Grossini's Hell.

Afterwards, Ricardo Quesada, one of the creators of cocos2d, ported cocos2d to objective-c and cocos2d-iphone was born. Cocos2d-iphone is far more known that the python version and it's used in a whole bunch of top10 games in the AppStore.

Hey, what does this have to do with Android?
Well, it's just an introduction :).
For android we have two flavors.

* Cocos2d-android (Java version)
* cocos2d-x (c++ version)

I have been testing both trying to decide which one to use to build a game so I will provide some sort of pros/cons of each one.
Both versions are coded by Chinese people so it was difficult to get in touch because of the different timezones.

Android version:

Pros:
* Coded in Java.
* Excellent support. I sent an email to ZhouWeikuan with an issue and he fixed it right away.

Cons:
* Tested on my gf's ldpi device and the scrolling feels slower. I guess there is an issue with density.
* Didn't feel stable.

C++ version:

Pros:
* Multiplatform.
* Organized development with a Roadmap

Cons:
* C++ (Perhaps it's not a cons for you but my C++ skills are a bit rusty)
* Tested on my gf's ldpi device and although it said 50fps it "flickered" a lot. EDIT: This generated an issue in cocos2d-x issue tracker.
* Didn't feel stable.


My conclusions:

Both versions felt unstable. I feel that if I need to do a game I will need to look into the framework src code and fix stuff to make it work correctly but If you are doing a game...

...which does not require a good amount of FPS => java version.
...from the scratch and you will port to different platforms => c++ version.

Also, I would totally recommend to clone both versions repos and play a little with them.
It has been a fun experience for me!

Enjoy!

Monday, January 3, 2011

Review NDrive 10

Para aquellos que todavía no conocen el NDrive (cosa que no creo) es una aplicación que convierte el celular en un sistema de navegación por GPS. Actualmente está portado para Android, iPhone, Symbian y Bada.
Una de las principales ventajas respecto a los demás es que la navegación es offline (no necesita descargar los mapas de internet) y la facilidad a la hora de usarlo.
Esta semana lo estuve probando para poder hacer una buena review al respecto. Quería ver que diferencias encontraba entre los que ya había usado previamente y, de paso, seguir jugueteando con mi Nexus. Así que ahí vamos!

Funcionalidades

Además de que los mapas sean offline, la posibilidad de elegir idioma, importación y exportación de datos, etc. esta nueva versión trae consigo las siguiente funcionales:
  • Navegación Real*1
  • Rutas alternativas
  • TTS (asistencia por voz)
  • POI offline (y la posibilidad de buscarlos online)*2
  • Alertas de velocidad y camaras
  • Modo Aventrua (incluido en la v9)
  • Itinerarios
*Depende de la ubicación geográfica. 1. Actualmente no disponible en Argentina. 2. POIs online tampoco disponibles.

Está muy bien logrado lo que son las rutas alternativas. Durante el viaje se pueden calcular nuevas rutas evitando lugares del trayecto (por ejemplo, sabemos que sobre la 9 de Julio hay un piquete) o marcar directamente que existe un bloqueo a tantos metros. A su vez, si están habilitadas las alertas de velocidad, suena cada vez se pasa de la velocidad máxima de la calle, ruta o autopista (esa me la contaron). Me gustó también la posibilidad de crear itinerarios, por ejemplo, se que tengo que pasar por 3 lugares distintos y lo cargo directamente de una, sin necesidad de que cada vez que llego a un destino tener que cargar el otro destino.

Interfaz

La interfaz es realmente simple e intuitiva. Los botones son grandes, cosa que cuando estés en el auto (o lancha o avión o seas superman) no cueste navegar por la aplicación. No hay muchos botones cosa que te pierdas ni tampoco muchos submenues que haga tedioso el uso. Los colores son simpáticos y amigables. La interfaz del mapa es simple y concreta. Está bueno que los medidores puedan cambiarse y me gustó mucho la fluidez que tiene al momento de uso. Lo que no me gustó, diganme quisquilloso, es la animación de rebote en el menú principal, algunos iconos y la gráfica de los inputs. Todavía se podría mejorar un poquito la pantalla de configuración.


Usabilidad

Cómo dije anteriormente el uso es muy intuitivo. Existe como "ley" para usabilidad (web, aplicaciones, etc) que dice para acceder a un contenido no deben hacerse más 3 clicks, sino se vuelve tedioso. Esta aplicación lo cumple (salvo para el caso que estés buscando algún lugar de interés que tenés que escribir o filtrar, cosa que tiene sentido). Me gustó el hecho de que si estás buscando una calle, a medida que uno va escribiendo, vaya filtrando, y no escribir y que después diga "no existe" o algo similar. Queda muy lindo el mapa apaisado en el Nexus :)

Mapas

Estuve recorriendo la ciudad y, por ahora, no me tiró un nombre inválido. Hubo un solo lugar que no tenía mapa, el centro industrial de garín, pero la verdad que no es un lugar reconocido. Tendría que ir para el lado de Santa Fe y Pueyredón a ver si pasa la prueba del cambio de sentido de las calles. Pero en aspecto general no encontré fallas.

Resumen

Es una aplicación muy práctica y de las mejores que usé en lo que respecta a la navegación por GPS. Es muy util que la navegación sea offline ya que en nuestro querido país todavía no es estable 3g (o edge en mi caso) y aparte los contratos son comunmente por un límite MB. Tiene una importante cantidad de POIs actulizados y esperemos que próximamente cuenten con la posibilidad de buscar mediante internet.

ResizableButton

Some days ago I read Kirill Grouchnikov's blog post about custom components used in the new android market app.

Unfortunately Kirill didn't provide the src code so I did the ResizableButton code myself. Here's the src code.

The important part is the onLayout code:

@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);
final int oldWidth = getMeasuredWidth();
final int oldHeight = getMeasuredHeight();
int newWidth;
float size = mTextSize;

do {

setTextSize(size--);
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
newWidth = getMeasuredWidth();

} while(newWidth > oldWidth);

setMeasuredDimension(oldWidth, oldHeight);
}



Some doubts:
Kirill mentions in his blog post:


As long as the measured width is less than available width – use the left and right parameters passed to onLayout, decrease the text size and repeat.



* It says less than when I am using greater than.
* I am decreasing the font size by 1. I don't know if that is the best way to do this.

What do you guys think?

Monday, December 27, 2010

Finding hardware/software properties at runtime

Right now I am working in an app that needs to detect hardware properties at runtime to change it's behavior.
Some possible examples:
  • We might want to add some arrow keys to our screen if the used doesn't have a way to navigate.
  • We need to know user's locale.
  • We are doing a game and we want to provide some in screen controls if the user doesn't have a keyboard.

For this kind of needs Android provides a class called Configuration.
Let's say we want to detect which kind of navigation the user has in his device.

We will get the device's value doing:


getResources().getConfiguration().navigation

and then we need to compare it against the different constants in the Configuration class.
public static final int NAVIGATION_UNDEFINED = 0;
public static final int NAVIGATION_NONAV = 1;
public static final int NAVIGATION_DPAD = 2;
public static final int NAVIGATION_TRACKBALL = 3;
public static final int NAVIGATION_WHEEL = 4;

Some examples in different devices:

Motorola Droid: navigation=2 (NAVIGATION_DPAD)
Nexus One: navigation=3 (NAVIGATION_TRACKBALL)
Galaxy S: navigation=1 (NAVIGATION_NONAV)

Friday, December 24, 2010

Review Nexus S

Nota: Este blog post lo hizo Pabloks. Compañero de la facu que está arrancando en el mundo Android. Bienvenido :)

Tuve la suerte de estar en NY el 16 de Diciembre y conseguir, felizmente, el último Nexus S del local. Debo admitir que en un momento me sentí en Argentina: El día anterior pasé por un local de Best Buy y pregunté si ya tenían en stock los teléfonos, la respuesta fue un "no, hubo un problema con el envío y los teléfonos llegan el 20 y salen a la venta el 22". Por suerte, como buen argentino, no me dí por vencido y pasé por otro local, y ahí me dijeron que el teléfono estaba y que a las 8.01 am del 16 se empezaban a vender.

Por suerte llegué al local, habían 2 personas (me esperaba una cola en la cuadra como si tocasen los teen angels en corrientes) y pude conseguir el teléfono. Felicidad suprema :)

Aclaración: Actualmente tengo una Blackberry de Nextel por lo tanto voy a describir diferencias entre una Blackberry y el Nexus S. A su vez comentarios sobre el Nexus One, Galaxy S e IPhone 4.


Hardware

El Nexus S (GT-I9020) basicamente es una versión del Galaxy S (GT-I9000). A lo cuál casi trae las mismas características (el menú inferior difiere, el Galaxy S trae slot para micro SD y Radio FM, y otras pequeñeses).

Las características principales son:

  • Procesador 1 GHz Hummingbird
  • 512 MB RAM
  • 16 GB de memoria interna
  • Pantalla de 4'' SUPER AMOLED con soporte mDNIe (mobile Digital Natural Image engine)
  • Camara posterior de 5 MP (graba a 720p)
  • Camara frontal VGA
  • Wi-Fi b/g/n con soporte DLNA
  • Bluetooth
  • NFC (Network Field Communication)
Para más detalles ver la descripción oficial.

Con respecto al Nexus One no tiene características muy distintivas. Las diferencias que se pueden apreciar son:
  • Pantalla de 4 pulgadas con tecnología SUPER AMOLED
  • Mejorado el táctil de la pantalla
  • Cámara frontal
  • NFC
Si están interesados en una buena comparación de ambos vean este artículo realizado por pocket-lint.

NFC

Al principio no tenía idea que era y, honestamente, estaba muy entretenido probando apps del Market para investigarlo :P. Cuestión que estaba el otro día jugando, apoyo el celular en la billetera y sale un cartel "Tag Detected". Vuelvo a probar y lo mismo. Qué es entonces? El NFC es un protocolo basado en una interfaz inalámbrica que brinda la posibilidad de comunicar 2 dispositivos inalambricamente. Resumiendo, el celular lee las tarjetas de proximidad! (en realidad lee frecuencias RFID) La idea es que uno pueda ir pasando por distintos lugares, con objetos, teléfonos, etc. y que el celular te vaya marcando los tags respectivos! Por ejemplo... Supongamos que ambos teléfonos traen NFC, se podría armar que acercando ambos teléfonos automáticamente te brinde los datos de la otra persona.

mDNIe

Mobile Digital Natural Image engine es una tecnología creada por Samsung que está siendo utilizada actualmente sus televisores LCD y LED haciendo que las imágenes sean más nítidas y claras.

Software

Realmente Gingerbread no trae cambios significativos en la UI respecto a FroYo. La mayoría de las mejoras que se realizaron son de las librerías internas del SO logrando mejores velocidades de respuestas. El teclado fue mejorado incorporando, primero, la posibilidad de detección de palabra a medida que se va escribiendo (al estilo de la app SwiftKey) y, segundo, la capacidad de hacer selección de texto por medio del multitouch (se selecciona los rangos del texto) para poder copiar y pegar.

Contras

Una de las principales contras que le encuentro al teléfono es la falta del slot SD para poder expandir la memoria (a pesar que el Galaxy S trae). Otra desventaja, para nosotros los argentinos, es que actualmente únicamente está la versión para T-Mobile, a lo cuál las bandas de 3g de nuestro país no funcionan con el teléfono. Actualmente estoy probando el teléfono con un chip 3g usando la conexión EDGE y por lo pronto funciona bien para todo lo que es mail, chat, twitter, facebook, etc. Debo admitir que al touch todavía le falta un poquito. Hay veces en que no responde al mando o la transición es lenta (en comparación al IPhone 4 o Ipad).

Pros

Es el Nexus S! Viniendo de una blackberry me gustó prácticamente todo. Es muy intuitiva la usabilidad, el market está lleno de aplicaciones para lo que se te ocurra, la posibilidad de tener skype (la mayoría no lo va a pensar como un pro, pero en blackberry no existe), esta muy bien lograda la integración de todo lo que es social media, y más! El agregado del NFC tiene muy buen potencial y con el uso del giroscópio se pueden lograr apps muy interesantes (Google Sky Map!). Todavía no usé el soporte de VoIP/SIP pero ya de por sí es interesante.

Conclusión

Esta semana estoy sacando la linea para regalar la blackberry :P

¿Es posible comprar una tablet Android en Argentina?



Semanas atrás
Salió un blog post en celularis que mencionaba que la galaxy tab iba a estar disponible en Claro. Más tarde, un blog post por Movistar.

Domingo 12 de Diciembre
Sale en el diario La Nación la publicidad de claro mencionando que el galaxy tab va a estar disponible!


Por más que llamé nadie sabía nada en Claro.

Martes 14 de Diciembre
Estuve paseándome por sucursales de claro averiguando hasta que entré a una que tenía una chica vestida de samsung. Antes de sacar número le pregunto:
- Hola, ¿tienen la galaxy tab acá?
- Sí. Avisame cuando te toque que te la llevo para ver.
- Genial!

Llega mi turno, le hago una seña a la flaca y tengo la siguiente conversación:
- Tomá. Acá lo tenés.
- mmm... Esto es un galaxy S. Yo quiero el tablet de 7'.
- Este es el único galaxy que existe.
- Nop
- ¿Me vas a decir a mí que trabajo para samsung?
- Ok, ya te vas a acordar de mí :)


Seguí llamando a claro y también me pasó algo muy gracioso:
- Hola, ¿ya se puede comprar el galaxy tab?
- ¿Qué?
- Hola, ¿ya se puede comprar el galaxy tab?
- Señor, no lo escucho bien. ¿De dónde me está hablando?
- De mi celular con claro!
- Debe tener algun problema.
- No sé, decimelo vos!

Miércoles 15 de Diciembre
Me entero que ni Claro ni Movistar tiene tarifa plana de 3g. El único que tiene es personal con black desde 200$.

Martes 21 de Diciembre
Movistar me confirma por twitter que todavía no está disponible la galaxy tab.
BTW tienen un servicio muy copado de twitter @MovistarArg. Es mucho mejor que el viaje sin retorno entre derivaciones de claro.

Voy a claro para averiguar un cel para mi novia. Quería el Samsung i5500. La oferta de claro no nos convenció y lo compramos liberado. Nada de permanencias y por valores similares.

Ahí pregunté nuevamente por el tab y me dijeron que podía pasar mañana que ya habían llegado pero que todavía no estaban a la venta.

Por fin!

Miércoles 22 de Diciembre
Voy a claro pido el galaxy tab.

Detalles de la compra:

* $120 por mes
* 2 años de permanencia
* 3GB de transferencia (ASTERISCO GIGANTE: Ver final de la historia)
* $3099

Acepto y espero a que haga todos los papeles.
40 mins más tarde le pido que lo siga que vuelvo en un rato que tenía que volver al trabajo.

Cuando vuelve me dicen:
"Mirá me confundí el plan de datos es de 600MB no de 3GB"

Hice un par de cuentas y le dije:
- Ok. Damelo. Voy a hacer esto:
* Doy de baja mi línea
* Pongo la línea del tab en mi cel
* Compro una sim de internet que es más barata.

- Puede ser, pero tené en cuenta que el galaxy tab viene con micro sim.
- Bueno, dale para adelante!

(Unos minutos más tarde...)
- Mirá no tengo sistema. ¿Podés pasar mañana?
- No, gracias. Cancelá todo.

Conclusiones:
* Comprar una tablet en Argentina es imposible.
* Me quedé sin auto-regalo de navidad
* Lamentablemente la posta es comprar liberado.

Feliz navidad a todos!