How a duck works

Feb 17
2014

Continuing with the pending talks, today i have watched the talk given by Aitor Guevara (@aitorciki) from Ducksboard that for those who don’t know them, it’s a real time web dashboard really really cool.

In this talk Aitor talks about how Ducksboard works. After i have watch it i get some really good ideas and despite the fact that Aitor himself trivialize it, i think they have made a nice job. For all i recommend you to watch it. It worth the time spent.

One last thing, a little detail, the talk is in spanish :P

Click here to watch the talk

Get all you can out of Redis

Feb 16
2014

Hi!

Here are the amazing talk that Javier Ramírez (@supercoco9) gave the last December and was about what else can you do with redis aside of the common uses like queues or as caches..

In this talk Javier explain that Redis is much more than that and which companies are using it and how. If you speak or understand spanish, i’ll encourage you to spent an hour watching it.

Catacrockea a cascoporro con redis from Madrid.rb on Vimeo.

Android development wireless

Nov 14
2013

If you are like me, you probably do not like to have your testing devices connected to the USB every day (battery matters in my case). For all those like me there is a solution where you can launch and debug your application wireless. Let me explain you how :)

First of all you need to root your device/s to be able to install and run this app properly. When you run the app for the first time and push the On button it will ask you for Superuser permission. Once you have granted it you can see a screen like this:

Wifi ADB

As you can see there is a command that you should put in your terminal, console or whatever you use to connect this device to the ADB service. Once you have connected the device using that command when you run you app (i’m using Android Studio to develop) you should get an screen where you can choose between an USB connected device and our Wireless connected device:

Device chooser

I hope you find this tip interesting, it is a bit annoying to root your devices and maintain it rooted after every Android update but it worth it :)

What i’ve done in this week

Jun 07
2013

Here is a useful recipe that i’ve read from @climagic and that let you send the last X days of commits to your boss, partners, etc mails or pipe to a document or whatever. The command is:

git log --author=$USER --format="- %B" --since=-7days --reverse |mail -s "What I've done this week" boss@company\.com

If your are a Mac user like me and need help to configure Postfix to send the mail, here is a great post where the author explain how to do it. Bye :)

Background distinto para filas pares e impares en un ListView

Dec 15
2012

Una de las cosas que no me gustan de Android es lo difíciles de hacer que son algunas cosas cuando a primera vista parecen muy simples.

En este caso se trata de poder alternar el background de un elemento de una lista dependiendo de si es par o impar, básicamente se trata de cambiar el “state” de un elemento en base a la condición, en este caso si es par o impar.

Código del adapter:

     private void setItemBackgroundIfIsOddOrEven(final int position) {
            dmActivityHolder.getRow().setBackgroundDrawable(
                        generateStateList(position));
      }


      private StateListDrawable generateStateList(final int position) {
            StateListDrawable itemBackground = new StateListDrawable();
            itemBackground.addState(
                        new int[] { android.R.attr.state_pressed },
                        context.getResources().getDrawable(
                                    R.drawable.list_selected_background));
            itemBackground.addState(StateSet.WILD_CARD, context.getResources()
                        .getDrawable(getDrawableForItemBackground(position)));
            return itemBackground;
      }


      private int getDrawableForItemBackground(final int position) {
            return (position % 2 == 0) ? R.drawable.list_even_background
                        : R.drawable.list_odd_background;
      }

En este caso yo utilizo un imagen con un patrón como background. Este corresponde al background para la parte que es par.

<?xml version="1.0" encoding="utf-8" ?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/even_background_pattern"
    android:tileMode="repeat" />

Montar un servidor Push Android en la nube en 10 minutos

Dec 13
2012

En primer lugar quiero dejar claro que el alcance de este post es montar un servidor Push de pruebas usando el servidor de ejemplo de GCM que nos provee Google.

Respecto a OpenShift vamos a usar la opción gratuita ya que es más que suficiente, incluso se puede activar el escalado y gratuitamente te permite escalar hasta 3 instancias.

Respecto la decisión de usar OpenShift por encima de otros como Google App Engine, el cual GCM ya dispone de un proyecto preparado para ello, es probar esta nuevo sistema PaaS que ha creado Red Hat y el cual tiene muy buena pinta. Por otro lado Google App Engine la primera vez que accedes a la aplicación es bastante lento y como el proposito de mi servidor son pruebas no quería tener que esperar demasiado.

Creación de la aplicación en OpenShift


Dicho esto manos a la obra. En primer lugar lo primero es crear una cuenta en OpenShift. Una vez creada la cuenta y validado el correo, lo siguiente que tenemos que hacer es elegir el tipo de servidor en el que vamos a desplegar nuestra aplicación. Para nuestro ejemplo elegiremos JBoss Application Server 7.1

Servidor a elegir

Un vez hemos elegido el servidor tenemos que configurar lo que ellos llaman el “Cartridge”

configure_server

Un par de aclaraciones respecto a la elección de parámetros:

  • En la parte denominada “Source Code” lo hemos dejado por defecto porque no queremos subir nuestro proyecto a otro sitio sino que queremos usar su el repositorio GIT que nos crear OpenShift. En caso de querer utilizar uno propio, GitHub, BitBucket, etc. con pulsar “Change” e introducir le URL del vuestro es suficiente
  • Hemos dejado todo por defecto excepto el hombre de la URL que la hemos personalizado con nuestro nombre de App, Push, y nuestro namespace

Hecho esto pasamos al tercer paso que es configurar las capacidades de nuestro servidor pero esto por ahora no vamos a tocar nada. Con esto terminamos la creación de nuestra primera aplicación en OpenShift.

Instalación de RHC para controlar nuestra aplicación


Una vez tenemos creada la aplicación el siguiente paso es poder iniciar, parar, modificar la instancia, en definitiva interactuar con nuestra aplicación. Para ello los chicos de Red Hat han creado una gema llamada “RHC”. Al ser una gema necesitamos tener Ruby instalado en nuestra máquina para poder utilizarla. Todo ello viene muy bien explicado en este articulo de OpenShift sobre como instalar RHC y configurarlo. Al terminar de instalar y configurar RHC, lo habremos vinculado con nuestro login de OpenShift para poder operar con nuestra cuenta.

Obtención y configuración del proyecto


Hasta aquí lo que hemos hecho ha sido crear una aplicación en OpenShift y configurar RHC para poder interactuar con ella. Ahora toca el turno de bajarnos el servidor de prueba de GCM y adaptarlo a la estructura que necesita OpenShift para funcionar. Lamentablemente parece que no está disponible por separado así que hay que descarger e instalar el SDK de Android. Una vez instalado tenemos que abrir el SDK Manager e instalar el plugin Google Cloud Messaging for Android Library

gcm_install

Para que podamos desplegar el proyecto en OpenShift tenemos que sincrinizarlo con el repositorio que hemos creado / tenemos y convertir el proyecto en algo que OpenShift pueda usar.

Lo primero es conectarlo al repositorio GIT, si no tenemos GIT habrá que instalarlo, que se ha creado en OpenShift para alojar el código de nuestro proyecto (o el nuestro si hemos decidido hacerlo así).

La URL de nuestro repositorio GIT la encontramos en la página de OpenShift, en “My Applications” pulsamos en el nombre de nuestra aplicación

app_name_link

Una vez dentro vemos una caja donde está puesto el nombre del repositorio que nos han creado

git_repository

Teniendo localizada la URL procedemos a copiar el proyecto en nuestro workspace. Dentro de la carpeta ${ANDROID_SDK_HOME}/extras/google/gcm/samples tenemos los dos ejemplos de servidor: el preparado para Google App Engine (gcm-demo-appengine) y el proyecto Java que nosotros vamos a desplegar en OpenShift (gcm-demo-server). Copiamos este último proyecto a nuestro workspace.

Hecho esto abrimos una consola para ejecutar comandos de GIT, por ejemplo yo en Windows uso el GIT Bash que viene con la distribución de GIT, y ejecutamos la siguiente sucesión de comandos:

git init
git add .
git commit -m "initial import"
git remote add openshift URL_DEL_REPOSITORIO (pej svn://8923840923809823409....git)
git pull openshift master

Esto hará un merge de lo que hay subido en el repositorio remoto de OpenShift con nuestro proyecto, que es lo que queremos, pero creará un conflicto al hacer el merge en el fichero .gitignore que debemos resolver.

Ya sincronizado ahora lo importamos en nuestro IDE , en mi caso uso Eclipse y con Import -> Maven -> Existing Maven Projects, y realizamos las siguientes modificaciones:

  • Movemos el paquete src/com/* a src/main/java
  • Movemos la carpeta WebContent/WEB-INF/lib a src/main/webapp/WEB-INF/lib
  • Movemos el archivo WebContent/WEB-INF/web.xml a src/main/webapp/WEB-INF
  • Movemos los archivos archivo WebContent/index.jsp y favicon.png a src/main/webapp
  • Borramos el archivo src/main/webapp/index.html

Alta en Google APIs y activación del servicio GCM


Ahora mismo el proyecto ya esta sincronizado con nuestro repositorio y lo hemos convertido en un “proyecto OpenShift”. Lo último que faltaría ya sería añadir nuestra API Key de Google. Para obtener el API Key hay que entrar Google APIs, crear un proyecto (si no está creado), y despues activar el servicio Google Cloud Messaging for Android

gcm_service_google

Activado este servicio, el API Key lo podemos obtener en el menú API Access

En este punto el proyecto nos provee un archivo llamado api.key que yo he intentado utilizar sin éxito así que como el servidor es de prueba he optado por poner el API Key directamente en el código, concretamente en la clase ApiKeyInitializer

public void contextInitialized(ServletContextEvent event) {
    logger.info("Reading " + PATH + " from resources (probably from " +
        "WEB-INF/classes");
    //String key = getKey();
    String key = "NUESTRO_API_KEY";
    event.getServletContext().setAttribute(ATTRIBUTE_ACCESS_KEY, key);
  }

Para que el servidor de OpenShift encuentre la librería gcm-server.jar, la cual no está en los repositorios de Maven, tenemos que modificar el archivo pom.xml del proyecto e incluir lo siguiente

<dependency>
<groupId>com.google.android.gcm</groupId>
<artifactId>gcm-server</artifactId>
<version>3</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/gcm-server.jar</systemPath>
</dependency>

También para no tener mayores problemas añadí la dependencia hacia json-simple que tenía el proyecto

<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>

Modificado esto, lo ultimo que hacemos es un commit de todos los cambios realizados.

git add .
git add -u
git commit -m "ready to go"
git push openshift master

Al ejecutar el comando push provocará que al terminar despliegue esta nueva versión. Si todo ha ido bien ya tendremos nuestro servidor funcionando en la dirección que configuramos al principio, en mi caso http://push-thefrutos.rhcloud.com/

Si habéis llegado hasta aquí os merecéis un premio jejeje. Espero vuestro feedback para mejorar el artículo si fuera necesario :)

(Español) Decompilar un APK y ver su código fuente

Nov 28
2012

Sorry, this entry is only available in Español.

(Español) La fabula del programador y los calendarios de Android

Jun 11
2012

Sorry, this entry is only available in Español.

30

Jun 03
2012

Sorry, this entry is only available in Español.

An unforgettable keynote by J. B. Rainsberger

Jan 11
2012

Testing english…

Visit Our Friends!

A few highly recommended friends...

Pages List

General info about this blog...