GitHub como repositorio de codigo

Como dicen que de todo lo malo se aprende algo bueno, yo creo que lo he aprendido. Me compre un MacBook pro a finales de julio, justo antes de irme de vacaciones, pase varias tardes instalándome todo lo necesario para poder utilizarlo, paquete Adobe, Office, XCode, Eclipse, NetBeans…. Cuando tenía todo preparado pase el código de uno de mis proyectos personales a este ordenador. Durante mes y medio estuve desarrollando a fondo sin hacer copias de seguridad fuera del ordenador. Llego el día D, el viernes 7 de Octubre, cuando estaba trabajando sobre mi juego  y se bloqueo mi ordenador, lo apague y apartir de ese momento ya no respondió al botón “power”.

Tras varias semanas en el servicio técnico, detectaron que el problema provenía de la placa base, que era defectuosa de fabrica, eso me alivio muchísimo, ¡Los datos estaban salvados!.

A partir de este mismo momento, voy a tener todo el código en la nube y cada mínima modificación lo volveré a subir.

He investigado durante varios días y he llegado a la conclusión que el mejor y más usado repositorio online que existe es GitHub. En el se albergan los proyectos OpenSource más conocidos. Es gratuito cuando desarrollas un proyecto libre, pero has de pagar una cuota cuando quieres un repositorio privado, en mi caso he elegido la modalidad de 5 repositorios con un colaborar y una cuota máxima de 0,6Gb, al precio de 7 dólares mensuales.

Al principio sino estas acostumbrado a utilizar un repositorio de código, es un poco lioso pero a la hora de la verdad, según cuentan, es una autentica maravilla su uso. Yo todavía estoy en fase de aprendizaje.

Algunos de los conceptos claves que nos proporciona un repositorio de código son:

  • Visión estática en el tiempo del estado de un grupo de archivos y directorios
  • Información asociada a cada fichero, fecha, identidad de quien lo cambio, numero de versión, etc..

En estas diapositivas está muy bien explicado el funcionamiento básico de github:
[slideshare id=3520951&doc=2009-jornadas-uem-git-100323044117-phpapp02]

De momento lo he integrado en eclipse mediante el plugin Egit . mas info del plugin

Os ire contando esta nueva experiencia!

ACTUALIZACION: Muy buen tutorial creado por @josealobato:

Pasos generales a seguir para utilizar github:
1. Crear cuenta de github
2.Crear una nueva clave RSA y asignarlo a la comunicacion SSH de nuestra cuenta (http://help.github.com/mac-set-up-git/)
3. Seguir los pasos para crear un nuevo repositorio y realizar el push en el servidor

Posted in Android, iPhone, Tecnologia | Leave a comment

iOS: 3 Intento

Es la tercera vez que me voy a poner a aprender iOS, creo que la base de programacion de objetive-c ya la tengo pero necesito crear aplicaciones para poder decirle que realmente soy desarrollador en iOS. Asi visto que necesito consultar mi libro recien comprado en Amazon: “iOS Programing (The Big Nerd Ranche Guide)” voy a crear un tutorial basico de lo mas destacable en cada uno de los capitulos, asi podemos aprovecharlo tanto vosotros como yo. Espero colgar los dos primeros capitulos los proximos dias 😀

Posted in Android | 1 Comment

En Memoria de un genio

a widget for the memory of Steve Jobs

Posted in iPhone, Tecnologia | Leave a comment

Ponencia sobre Cloud Computing: ¡Muy Buena!

Watch live streaming video from eae_directo at livestream.com
Posted in Cloud Computing | Leave a comment

Tips Android #1

En esta entrada voy a comenzar una nueva serie de post donde voy a daros consejos de cómo solucionar varios problemas con los que me he encontrado al desarrollar bajo la plataforma Android, mostrando las soluciones que he ido tomando en cada caso. Espero que os sirva para perder menos tiempo que el que he perdido yo para ir superando cada obstáculo.

1) Control de una aplicación Android al pulsar boton HOME o BACK

La única solución de solventar esta tarea de manera correcta es tener presente todo el tiempo el ciclo de actividad que tiene una actividad Android.

Cada vez que el usuario pulsa el teclado se ejecuta el siguiente metodo onKeyDown, que podemos sobreescribir y poder controlar cualquier pulsación.

public boolean backButton = false;
public boolean homeButton = false;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
	    if (keyCode == KeyEvent.KEYCODE_BACK) {
	    	backButton = true;
	     	finish();
	     return true;
	    }else if(keyCode == KeyEvent.KEYCODE_HOME){
	    	homeButton = true;
	    }
	    return super.onKeyDown(keyCode, event);
}

Cuando el usuario pulsa el botón HOME o el boton BACK, la actividad entra en modo Pausa por tanto se ejecuta el siguiente método, que puedes controlar de la siguiente manera:

@Override 
public void onPause(){
	    super.onPause();
	    Log.v("TAG", "onPause" );
	    if(backButton){
	        //Aquí controlamos el boton BACK
	    }else if(homeButton){
	        //Aquí controlamos el boton HOME
	    }
	   backButton = false;
   homeButton = false;
}

Esto es muy útil para cantidad de cosas, como por ejemplo apagar la música del juego, grabar el estado actual del juego, etc…Tenemos que tener claro que cuando se vuelva a ejecutar nuevamente el juego, pasará al estado “Resume”, donde debemos recuperar la situación que teníamos antes del Pause.

@Override 
public void onResume(){
	    super.onResume();
	    //Aquí añadiremos la situación a recuperar
}

2) Creación de un componente totalmente personalizado.
Aqui os muestro un ejemplo de como podemos crear un boton, asignarle un layout, una fuente, un color, una imagen y todo lo que necesitemos para personalizar nuestros TextView, ImageView, Button y cualquier otra Views.

Typeface tf = Typeface.createFromAsset(this.getAssets(),"font/nombreFuente.ttf");
Button btnEjemplo = new Button(this); //creación boton
btnEjemplo.setTextSize(30);//tamaño texto
btnEjemplo.setGravity(Gravity.CENTER); //punto de gravedad
btnEjemplo.setWidth((int)(250*this.getResources().getDisplayMetrics().density)); //anchura boton dependiente de la resolucion pantalla
btnEjemplo.setTextColor(Color.WHITE); //color de texto
FrameLayout.LayoutParams layoutParamsEjemplo = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL); //creación de posicionamiento para fijar el nuevo layOut
layoutParamsEjemplo.setMargins(0, (int)(40*getResources().getDisplayMetrics().density), 0, 0); //asignación de margenes
btnEjemplo.setLayoutParams(layoutParamsEjemplo);  //asignación del layOut al boton
btnEjemplo.setTypeface(tf); //asignacion de la fuente al boton
btnEjemplo.setShadowLayer(3, 0, 0, Color.BLACK); //asignación de la sombra al texto del boton
btnEjemplo.setBackgroundDrawable(getResources().getDrawable(R.drawable.NombreImagen));
btnEjemplo.setOnClickListener(new OnClickListener() {
         @Override
	public void onClick(View v) {
	//pulsacion del boton
        }
});
Posted in Android | 6 Comments

¿Cómo monetizar aplicaciones móviles? ¿Quién tiene la respuesta?

Creo que esta pregunta es la que más veces me he preguntado desde que invierto tanto tiempo libre al desarrollar aplicaciones móviles para Android e iPhone. Es la pregunta de más difícil respuesta y es a la que todo el mundo queremos darle solución. Está claro que si invierto tiempo libre al desarrollo es principalmente porque me gusta, pero nunca está de más sentirte recompensado.
A día de hoy cuento con 82 270 descargas entre todas mis aplicaciones subidas a la Android Market:
imagen sobre las descargas que tengo actualmente en mi cuenta de android market

Mis dos primeras aplicaciones las subí inicialmente de pago (a 1$). Poco tiempo después vi que hay una gran masa de gente (>95% ) que nunca pagaría por una aplicación. Me di de cuenta que estaba jugando en un mercado minoritario y tras haber vendido la ridícula cantidad de 20 aplicaciones en 1 mes y medio decidí colocar las aplicaciones de manera gratuita. A todo desarrollador nos llena más tener un volumen de descargas amplio que tener 20 euros más en el bolsillo. Tras esta experiencia, empecé a leer blogs, buscar información sobre la monetización de aplicación, escuchar ponencia en diversos congresos y llegue a la conclusión que para un desarrollador personal, como es mi caso, la mejor manera de recoger alguna recompensa es mediante alguna de estas soluciones:

  • Publicidad: Existen varias empresas para colocar publicidad pero las que mas destacan son MobClix y AdMob (empresa que fue comprada por google). Aquí hay una interesante compativa entre ambas (AdMob vs MobClix (1)) (AdMob vs MobClix (2)) (AdMob vs MobClix (3))
  • Micropagos dentro de la aplicación: Esta técnica consiste en vender algún tipo de elemento para que el jugador tenga ventajas en el juego. Pasarse los niveles más de una manera más sencilla o tenga algún tipo de privilegio.
  • Tras un tiempo sin desarrollar nada, me plantee el desarrollo de un juego sencillo, sin demasiada complejidad, que pudiera traducir a un gran número de idiomas y que pudiera probar la rentabilidad publicitaria. De ahí nació Bubble. A día de hoy es mi Juego con mayores descargas, 59.137, está traducido a 8 idiomas y cuenta con una barra de publicidad en la parte superior de AdMob la cual me ha producido una cantidad de 135$ a lo largo del tiempo. Actualmente la publicidad esta en caída libre generando una media de 0,25 $ diario. Aquí podéis ver su grafica a lo largo del tiempo:

    grafica de las ganancia que llevo acumuladas en AdMob, en total 135$ y tiene ahora mismo pendiente descendente

    Ahora estoy a punto de terminar otro juego para Android, y en este voy a seguir la siguiente estrategia:

    • Versión gratuita: Con publicidad
    • Versión pago: Sin publicidad

    En su versión 2.0 tengo intención de introducir micropagos y así estudiar qué resultados da en este tipo de aplicaciones. Espero pronto ir contando los resultados que vaya obteniendo.

    Os dejo una presentación que esta genial:
    [slideshare id=8150780&doc=20110522expansiondayslashmobilityversin2-1-110530084305-phpapp02]

    Os dejo Links interesantes sobre este tema:

    Yo sigo buscando el camino, ¿y Vosotros? Me encantaría que comentéis este post con cualquier experiencia que hayáis tenido.

     

    Posted in Android | 5 Comments

    Mi ponencia en DRT4All

    Posted in Personal, Ponencia | 2 Comments

    Crear un Menú personalizado en Android

    Hola a todos,

    Os voy a poner un pequeño manual de como podeis personalizar controles para android. Creo que es muy interesante la personalizacion, ya que es la encargada de dar unos rasgos propios a cada app y diferenciarse del resto. De esta forma podrás crear tu propio tema.

    Por ejemplo yo para mi juego he optado por un tema tipo madera, y he creado un menu con 4 botones, a los que le he dado una imagen para su posicion natural del boton, otra imagen para cuando esta pulsado y lo he diseñado todo ello bajo cualquier resolucion posible.

    La clave esta en crear inicialmente una textura o pequeña imagen para cada uno de los botones, yo por ejemplo cree estas dos:

    Boton en reposo

    Boton en Reposo

     

    Boton posicion pulsado

    Boton posicion pulsado

     

    Una vez que tengamos la textura o el mini-boton, tenemos que pensar que ahora necesitamos decirle a android que seccion es la que tiene que estirar y que seccion no puede estirar para no deformarlo. Aqui entra en juego la aplicacion Draw 9-patch, que viene integrada con la SDK de android. La podras encontrar en: ..android-sdk-windows\tools\draw9patch.bat

    Su funcionamiento es muy sencillo, unicamente tenemos que seleccionar la zona que queremos darle la propiedad de estiramiento. Haciendo click en la parte derecha, izquierda, arriba y abajo, la aplicación busca la intersección entre todos los lados y selecciona la zona de estiramiento. Es mucho más difícil de explicar que de probar, así que os recomiendo que lo probéis 😀

    Captura de pantalla sobre el programa draw9patch

    Mas info sobre esta aplicacion: http://developer.android.com/guide/developing/tools/draw9patch.html

    Una vez que hayamos finalizado la seleccion, guardamos el fichero en formato PNG, y el programa lo nombra como nombreDado.9.png

    Las imagenes ya estan preparadas para utilizarse y se escalaran de manera correcta. Os pongo un ejemplo de como he definido los botones en el XML de la interfaz:

    Imagen del codigo XML generado para la interfaz de android

    Por ultimo os dejo una captura del resultado final de mi Menu personalizado:

    Imagen del resultado final

    Posted in Android | 2 Comments

    Estructura de la Web2.0

    He encontrado este diagrama, muy interesante para ver la cantidad de plataformas que existen en la web2.0 y como podemos categorizar cada una de ellas:
    Infografia web2.0

    Posted in Redes Sociales | Leave a comment

    I Congreso de Geolocalización & Realidad Aumentada Móvil

    Ayer asistí a este 1 congreso sobre geolocalización y realidad aumentada. Si quieres una introducción sobre realidad aumentada, empieza leyendo el post que hice hace unos meses: Introducción a la realidad aumentada

    Imagen del congresoAquí van mis conclusiones generales del congreso:

    – Esta tecnología esta en nacimiento y tiene que tener un crecimiento gradual, tiene que ver la sociedad la verdadera utilidad que le aporta, e ir introduciéndola poco a poco. Si un usuario le da una oportunidad, no le puede fallar, en tal caso, puede perder la masa principal de usuarios.

    ¿Que se puede hacer realmente con la realidad aumentada?

    • Puntos geolocalizados
    • Reconocimiento de marcadores para mostrar imagenes superpuestas, sobre todo a nivel de gráficos 3d
    • Reconocimiento de imágenes, sin necesidad de marcadores -> necesitas altas cuotas de renderización y es lo mas complicado de realizar

    ¿Como podemos crear una app que integre realidad aumentada?

    • Si queremos geolocalizar puntos, es relativamente sencillo, ya que únicamente deberemos crear una nueva capa o canal en alguno de los Browser que existen de AR hoy en dia. (Layar, Junaio,Wikitude) -> todos ellos cuentas con APIs para el desarrollo, aunque no cuentan con SDK, siempre necesitamos instalar el Engine para su funcionamiento
    • Si lo que queremos es rendirazar elmentos 3d y crear marcadores propios que sean reconocidos, la mejor solución es utilizar el SDK de Qualcoom
    • La empresa Elipse AD presento su producto INDOORKEYS -> Fue de lo mejorcito del congreso, donde presentaron su propio Engine de realidad aumentada en interiores, cambiando el concepto de geolocalizar mediante señales Wifi o señales Bluetooth. Ellos geolocalizan mediante reconocimiento de imágenes, aseguran que no tardan más de 1 o 2 segundos en reconocer el entorno y conocer la posición exacta del usuario. Están en version Beta. En un futuro se podra integrar mediante API, SDK y contarán con un CMS como backend.

    – Otro de los puntos, que me hizo pensar, fue la presentación por parte de Miguel Lizondo de la aplicación que ha hecho en su empresa Deimos. La aplicación se llama Geoaudio y consiste en la geolocalización de audio. Esto abre un nuevo camino para plantear nuevas aplicaciones. Os imagináis una audio-guia que vaya leyendo respecto a la posición del usuario, y de su orientación (para esto todavía hace falta un sensor de orientación en los auriculares). Su aplicación se distribuirá bajo una app gratuita y su propósito es crear una comunidad de usuarios de geoaudios, donde el contenido lo coloquen los usuarios. También crearan geoaudio personalizados para terceros con contenidos precargados y app patrocinadas. Contaran con licencias tecnológicas para permitir a terceros la integración de geoaudio con sus sistemas. Si quieres probar la beta privada -> mobility@grupodeimos.com

    – Otra de las conclusiones fue. iOS y Android es el presente de los smartphone. A W7 parece que le dan un margen de crecimiento fuerte, a Nokia con OVI parece que no le auguran tan buen futuro. Blackberry parece que seguira optando por su linea, apostando por otro tipo de mercado.

    – La realidad aumentada va a generar en el año 2011 un negocio total de 11 millones de euros, en el 2014 parece que esta cifra llegará hasta los 750 millones de euros.

    – Los juegos parece que serán uno de los puntos fuertes de la realidad aumentada. El ponente de la empresa UnKosoft cree en los juegos como una grandisima herramienta de publicidad para los productos. Juego = Diversion; ¿¿mejor momento para publicar algun producto que cuando te estas divirtiendo?? Ya existen ejemplos de aplicación como Volswagen ha hecho con la promocion de unos de sus coches, aquí el vídeo:

    En el mercado de Advergaming se esta moviendo 3000 millones de $

    – Aparte de todo esto que os he contado, hubo otras ponencias sobre OVI Maps y su integración con redes sociales, un nuevo proyecto que esta a punto de salir a la luz que se llama OpenCity project o las aplicaciones que proponen desde Orange a la realidad aumentada.

    – Para conocer aplicaciones sobre AR, podeis leer un post que hice hace meses Aplicaciones AR

    Mas info: http://www.elpais.com/articulo/Pantallas/Realidad/aumentada/espanola/elpepirtv/20110408elpepirtv_3/Tes
    http://www.ustedestaaqui20.com/

    Posted in Android, iPhone, Realidad Aumentada, Tecnologia | Leave a comment