Android 101
Desarrollando para Android ando.
He empezado a desarrollar para Android por pura necesidad. El origen de dicha necesidad se encuentra en el browser de Android. Os lo explico.
Resulta que haces una semanas empecé el desarrollo web para Android. Estaba haciendo un formulario de registro y es necesario que el usuario pueda subir una fotografía. Qué sorpresa me llevé cuando al previsualizar el formulario, el campo destinado para seleccionar el fichero mostraba: “Uploads disabled“.
¡Qué chasco! Sabía que el Mobile Safari de iPhone/iPod no lo permitía… pero ¿tú?¿Android?
En fin, después de buscar en opciones de seguridad sin éxito y ver los cientos de “WTF!” que circulan por los foros del androide, comprobé que iba a necesitar a empezar a desarollar con el Android SDK. Android me ha obligado ha usar su SDK, desarrollar una aplicación y subirla a su Android Market. Me cuestiono el porqué de la deshabilitacion de los uploads. ¿sera por cuestiones de capacidad? ¿O más bien cuestiones de marketing?
Lo primero que hice fue entrar en la web de Android, bajarme su SDK, bajarme el Eclipse, preparar el entorno, hacer un proyecto “hello world” y ejecutarlo en el emulador.
Para hacer estos pasos no me llevo más de 2 horas y media contando con la descarga. El tamaño aproximado de mi directorio de trabajo ronda el giga (Java+Eclipse+Android).
Para estar más tranquilo psicológicamente, queria comprobar que el hello world se ejecutaba sin problemas en mi HTC Magic. Cogí un cable comercial USB-micro, lo conecté, le dí a “Ejecutar” y de repente apareció un dialogo con el número de serie mi smartphone. Se ejecutó sin problemas.
Antes de empezar a codificar ni una línea si quiera, tenía muchas dudas sobre el proceso de subida y aprobación de aplicaciones al Android Market. Resulta que el proceso no es tan complejo ni largo como el análogo para el App Store. Eso sí, el pagar no te lo quita nadie. Unos $25 USD (aprox. 17€). La primera vez que pago algo a Google en 10 años. La verdad es que no me parece caro, menos si lo comparramos con los $299 del App Store de Apple.
Iba siendo hora de teclear algo.
Hay una cosa que tengo clara en todos los desarrollos (libres) que hago: no reinventar la rueda.
El propósito de mi aplicación es bien sencillo: formulario de registro de usuario con subida de fotos, pantalla de login y ejecución del navegador web con una redirección.
Decidí que la mejor forma de desarrollar la aplicación a la vez de ir aprendiendo Android, era hacer un desarrollo por milestones que se pueden resolver en sesiones de una hora.
Estos fueron los hitos fijados:
- Modelo de programación.
- Botón con manjeador.
- Hacer un Http Post.
- Hacer un Http Post multipart/form-data.
- Acceso a la galeria de fotos.
- Layout de aplicacion.
- Creación de sub-actividades.
- Lanzar el browser.
- Depuración.
- Subida al Android Market.
Hoy voy a tratar sólo el primer hito. Considero que es el más importante.Lo primero que hace el gestor de aplicaciones es examinar el AndroidManifest.xml. Como indica la extensión, se trata de una “Declaración de Intenciones” escrito en XML.
Dos conceptos aparecen en el párrafo anterior:
- Activity: es la clase asociada a una pantalla de la aplicación. Al menos es necesaria una clase Activity. Al ejecutar la aplicación, Android se encargará de instanciar una clase de la activity raiz. Android sigue el modelo MVC, modelo-vista-controlador. Respecto a la Activity, tenemos por un lado un fichero XML donde se especifica la UI (vista) y un fichero Java donde se encuentra la clase de nuestra Activity que hereda de Java. El modelo de desarrollo ideal, consiste en crear un layout con todos los elementos de interfaz que usemos y gestionar su callback en la clase asociada.
- Intent: para mi es la clase estrella, la clase “no reinventar la rueda”. Lo entiendo como un modelo “ONG”. Una aplicación declara una serie de habilidades que puede hacer en favor de otra aplicaciones mediante Intents. Se entiende mejor con un ejemplo. Si mi aplicación necesita obtener la ruta de un imagen dentro de la Galeria, basta con lanzar un Intent, especificando nuestro anhelo “Eh,alguien puede sacar el diálogo de la galeria y devolverme la ruta del fichero que el usuario ha clickeado” (es casi algo así).
Hay otros tipos de clases, como servicios en background, pero creo que estas son las más usadas.
Os dejo el enlace de un ejemplo donde se usan.
En la siguiente entrega, empezaremos a darle forma a la aplicación: “Hello, uploads“.
[Tip] Direcciones IPs virtuales
Seguramente sabréis que la dirección IP es una entidad lógica y que la dirección MAC es un identificador hardware único asociado a un dispositivo.
Esto quiere decir que, si tenéis una tarjeta de red, ésta tendrá una dirección MAC puesta por el fabricante (tipo: XX-XX-XX-YY-YY-YY) y una dirección IP asignada a mano o mediante DHCP.
En GNU/Linux es posible asociar múltiples direcciones IPs a una única interfaz de red. A esto se le conoce como interfaces virtuales. Se usa principalmente para poder acceder a diferentes redes IP simultáneamente.
El procedimiento es sencillo, supongamos que actualmente nuestra NIC eth0 tiene la dirección 192.168.1.10/24 y queremos poder comunicarnos con la red 10.10.10.x/24 usando la dirección IP 10.10.10.10. Basta con la siguiente línea:
sudo ifconfig eth0:1 10.10.10.10
Podemos añadir más interfaces virtuales sólo modificando el ethX:Y, donde X es la interfaz e Y el numero de dirección virtual.
Espero que si os encontrais en esta situación, os sirva este tip
P.D. Sé que en Windows es posible tener interfaces virtuales, pero nunca se ha presentado la necesidad.
[Tip] Hoard, gestor de memoria dinámica multiprocesador
Si alguna vez habéis programado en C/C++, casi seguro que habréis tenido que reservar y liberar memoria con malloc/free o new/delete.
Estas operaciones internamente gestionan la memoria de proceso asignando slices de memoria libre. Esta gestión tiene un coste u overhead de procesamiento. Si nuestro programa es multihebrado este procesamiento se vuelve más complejo.
Emery Berger, profesor de la Universidad de Massachusetts, se dio cuenta que la implementación de malloc()/free() de la stdlib, se podía mejorar y empezó a trabajar en Hoard.
Hoard ha sido comparado con otros gestores de memoria y ha salido victorioso en varios tests. Estos screenshots arrojan los detalles.
Esta disponible para GNU/Linux, Windows y Solaris bajo licencia GPL.
La gran ventaja de usar Hoard, es que no es necesario recompilar un programa (salvo que sea estático) para aprovechar sus bondades, ya que usa la misma sintaxis que las funciones originales de stdlib.
Para usarlo en GNU/Linux basta con indicar a LD, que precargue la libreria de Hoard:
export LD_PRELOAD=/ruta-a-libreria/libhoard.so
Ahora sólo tenemos que ejecutar nuestro programa con esta variable de contexto.
Es un buen gestor de memoria para aquellos desarrollos de servidores multithreads.
ideone.com: Programa, compila y ejecuta in the cloud
La nube está de moda. También entre los desarrolladores. En este caso, más que almacenar nuestros datos, lo que se ofrece es ejecutar y escribir nuestros programas.
Este servicio se llama ideone.
El nombre es auto explicativo de su misión: un solo IDE y vía Web.
La idea es sencilla: desarrollar, compilar y ejecutar programas o scripts. Existe un gran catálogo de lenguajes disponibles: C, C++, Java, awk, php, etc. Hay un total de 43 lenguajes disponibles. Incluso cuenta con GoLang (recordemos que la web oficial de GoLang también cuenta con un compilador/ejecutor online).
Muchas preguntas o dudas se me ocurren acerca de este web service.
Se puede por ejemplo establecer un buffer de texto como entrada del programa. Trata el texto del textarea como el buffer de stdin. No puede por ejemplo tratar varios argumentos en su invocación, pero tampoco tiene mucho sentido.
Os dejo un screenshot con un código C de ejemplo y su ejecución:
La aplicaciones prácticas que yo le veo son:
- Crear code snippets para solucionar problemas de tipo algorítmico (cálculo de fórmulas, planificadores, ciphers, etc) y compartirlos en Internet (tweet de la short URL).
- Desarrollar código desde dispositivos móviles (por ejemplo, hacer un script bash en el metro).
- Experimentar con nuevos lenguajes (como GoLang, Scala, etc).
¿se te ocurre alguna más?
En el apartado FAQ, podemos encontrar las típicas dudas sobre uso. En líneas generales, no se puede ejecutar código que haga uso de la red, ni crear/acceder a ficheros y la codificación es UTF-8.
Si quieres empezar a practicar con código ya creado, podeis mirar los ejemplos de la sección samples.
Curiosidad: por lo visto hay un lenguaje de programación llamado whitespace que también lo compila ideone. Sí, has acertado, se programa a base de espacios… Sin comentarios
Mis impresiones sobre iPad en Xataka
No quiero dejar pasar un minuto más sin agradecer a Javier Penalva, Xataka y a todo el grupo Weblogs SL por haber realizado la iniciativa “iPad de Apple, los xatakeros opinan” y haberme invitado a participar en la confección del post. He sido uno de los cuatro xatakeros que han dado su opinión y/o impresiones en caliente sobre el nuevo dispositivo de Apple, el iPad.
Creo que este tipo de iniciativas dan un significado completo a la Web 2.0.
Como bien decís, somos casi como de la familia. Tanto personalmente como profesionalmente Xataka me ha aportado conocimientos, opiniones del resto de usuarios, descubrimientos de nuevos productos y en definitiva un gran sitio donde pasar un buen rato hablando de nuestros gadgets.
Gracias de corazón, JMRH.
Fumar 2.0
No soy fumador, pero un día vi en un wholesale un cigarrillo eléctrico recargable mediante USB. Me quedé a cuadros. La descripción corta real del producto es “Mini electronic atomizer“. No genera CO2 ni contamina ni tiene nicotina. Mi expresión se volvió aun más perpleja cuando vi el correspondiente cargador. El precio no llegaba a los 9$, así que no tenia excusa para darle uso a mi oxidada cuenta de PayPal.
Por fin ayer llegó. Después de dejar cargándolo en un puerto USB de mi PC unas 8 horas, tal y como indicaban las instrucciones, estaba en disposición de empezar a “fumar”.
Le puse un nuevo recambio, lo enrosque y ya sólo era cuestión de empezar a pegar caladas. Cada recarga tiene entre 150 y 200 caladas y es bueno saber que cuenta con los certificados CE y RoHS.
Mi primera calada. Mientras inspiraba aire por la boquilla, un LED situado en el extremo del cigarro empezó a iluminarse directamente proporcional a la “potencia” de la calada. Tuve que empezar a reir
Además de iluminarse como un cigarro real, se produce un ruido familiar cuando el aire pasa por el “atomizer” (que buena palabrota para venderlo mejor). La exhalación produce un vapor de agua que rápidamente desaparece.
Vamos a lo más importante: el sabor.
Como he comentado al principio no soy fumador, pero sí he probado alguna vez el tabaco. Sabe como a regaliz. Bajo mi punto de vista, el sabor no está muy conseguido. Me lo vendieron como “Marlboro taste“. Estoy esperando a que algún amigo “condenado” de Marlboro, lo pruebe y avale o refute mi afirmación. Tengo que decir que no pude darle sólo un par de caladas y estuve un rato “fumando”.
Mis conclusiones tienen poco valor, dado que no fumo. No obstante, veo que si se cumplieran algunas premisas, este tipo de producto podría verse por la calle y por muchos establecimientos donde esta prohibido fumar. Imaginaos el uso que se le puede dar a este “atomizer” (que no es “cigarro”) en bares, restaurantes, cines, pubs, teatros y demás locales si al final se aprueba la nueva ley antitabaco. Respecto a la premisa es sencilla: tiene que saber a tabaco. Sobre la nicotina, este dispositivo carece de ella. Esta diseñado para ayudar a dejar de fumar. He visto otros en las farmacias que sí tienen nicotina. Según el caso de cada uno, preferiran un tipo u otro.
Bueno, voy a ver si le pego una caladillas (espero no fumar silicio)
A.L.S.A., Autobuses Lujosos para Sardinas Adosadas
Este post debería hablar sobre mi primera toma de contacto con el desarrollo para Android.
Mi grata experiencia con el androide tendrá que esperar por culpa del cabreo monumental que tengo con la compañía de transportes ALSA.
El motivo es sencillo: no me puedo mover.
Voy sentado en la última fila del autobús volviendo a Madrid después de pasar el fin de semana en casa de mis padres en Granada.
5 horas de camino me esperan en la que literalmente no me puedo mover.
Cronología.
El autobús lleva el cartel de lleno. Mis sufridos compañeros de fila tampoco pueden moverse. Las rodillas lindan por ambos lados con las rodillas de los compañeros adyacentes.
Mi rodilla izquierda ha tenido más suerte que su hermana, pues da al pasillo. Empiezo a sufrir un pequeño dolor constante en la articulación.
Como una imagen vale más que mil palabras, os enseño mi situación:
La parada de Almudariel sabe a gloria. Tiempo para estirar las piernas y practicar los ejercicios de estiramientos de Educación Física.
Vuelta al infierno. El pie derecho se me queda dormido. Estoy deseando llegar.
Lo más gracioso del asunto es que cuando compré el billete por Internet mi asiento estaba dos filas más adelante.
Llego a Madrid. Mientras bajo del autobús juro no volver a usar más ALSA. Llevaba ya año y medio sin usarlo por los mismos motivos (principal motivo que determino la compra de mi coche )
Me da mucha rabia no poder hablar bien de las bondades de este servicio publico, pero no las tiene, desde luego para mí no, si el confort y la salud están perjudicados.
Sólo le ruego a ALSA que antes de poner película, tarjeta de fidelización y publicidad como “hacemos tu viaje más fácil”, ¡dejen de tratarnos como sardinas en lata!
La TDT en mi PS3
Este año los Reyes Magos me han traido el PlayTV para la PS3.
No es un producto nuevo pero nunca lo había visto funcionando.
Después de unas semanas de uso estoy en disposición de comentar un poco sus virtudes y sus puntos flacos.
La instalación no tiene nada de complejo (como era de esperar). Basta con enchufar el cable de antena a la unidad PlayTV, conectar el cable USB entre el PlayTV y la PS3, e instalar el software que viene en un BluRay adjunto.
Una vez está instalado no es necesario introducir el BluRay cada vez que queramos ver la TDT.
En el menú del XMB, bajo la sección TV, tenemos el acceso directo a PlayTV.
Paso a esquematizar sus puntos fuertes:
- Doble sintonizador TDT: de esta forma mientras estamos viendo un canal podemos grabar otro.
- Grabación programada: podemos indicar mediante el EPG el programa que queremos grabar y la PS3 se iniciará automáticamente, grabará el programa y se volverá apagar (salvo que tomemos control con el mando).
- Se puede grabar un canal mientras estamos jugando (aunque avisa que la calidad del vídeo puede empeorar).
- Actualizaciones: de manera heredada por la PS3, PlayTv también tiene actualizaciones software que permite adaptarse al HD, incorporar nuevos codecs, solucionar fallos, etc.
- Posibilidad de ver la TDT en tu PSP utilizando Wifi, ya sea en tu casa o fuera.
Por otro lado, tiene algunos aspectos negativos que espero que alguna actualización y/o cambio de política (es mucho esperar) solucionen:
- Los contenidos grabados no se pueden sacar del sistema. Sólo se puede reproducir internamente (al menos yo no he visto la opción).
- Desaprovechamiento del doble sintonizador: si el sintonizador de grabación se encuentra parado, se podría usar para previsualizar canales, es decir, hacer un Picture-in-Pinture (PiP).
- Disipación de calor abundante. No sé la carga de proceso o el uso intensivo de los SPE por parte del software, pero a los 20 minutos de ejecución, el sistema de ventilación empieza a funcionar, y no para hasta que se cierre la aplicación.
- Autoarranque: igual que los juegos se puede autoarrancar cuando se enciende la consola, el sistema debería poder arrancar PlayTv de forma automática y visualizar el último canal visto.
Me gustaría poder probar la conectividad con la PSP, a ver si viene algún amigo que la tenga y puedo comprobar su funcionamiento.
En fin, la cuestión es que aunque el sistema es bastante mejorable, a mi me gusta.
Valor añadido al CD
Busca la diferencia:
¿no la encuentras? Es que no la hay. “¡Vaya tontería!” habrás pensando, pero la realidad es que no hay diferencias entre copias (obvio, es la definición de copia).
Y en la siguiente imagen, ¿hay diferencia?
Algunos pensarán que en esta ocasión sí hay diferencia. Los que llevamos tiempo en la Red sabemos que no hay ninguna diferencia, el contenido es el mismo.
Visto este pequeño pasatiempo, viene la pregunta que se hace el ciudadano de a pie: ¿para que quiero comprar un CD si me lo puedo bajar gratis de Internet con caratulas incluidas?
Todos conocemos la respuesta.
Cuando empecé a interesarme por el marketing, descubrí un concepto muy interesante: “valor añadido“. He aprendido su definición by examples, así que voy a definirlo como yo lo entiendo: “valor añadido son las características de una entidad que le aporta ventaja diferenciadora positiva respecto a otras entidades que son competencia“. Estoy convencido que no es la definición dada por los teóricos, pero es mi visión sobre ese significante.
De mi definición anterior destaco el término “competencia“. Antes de la popularización de Internet y de las mafias, la industria discográfica no tenia competencia significativa. Sólo unos cuantos privilegiados con grabadoras 2x se dedicaban a copiar y distribuir CDs (como antaño se hacia con los casettes).
Ahora supuestamente la industria del CD vive días grises por culpa de las “descargas ilegales”. Lo normal es que hubieran innovado, y aportado valor añadido a sus productos. Algunos sectores sí hicieron los deberes (Apple con iTunes, música Creative Commons en Jamendo, etc). Pero en general las grandes distribuidoras internacionales y en particular, nuestra “Coalición de creadores” optaron por “competencia desleal” (sí, las “descargas ilegales” son legales). Primero fue el canon digital. Ahora quieren quitarle al Juez su juicio y cerrar las webs que estimen oportunas. Todo sabemos que fracasaran en su empeño, pero habrán dejado tocado el Estado de Derecho.
No quiero seguir con el debate de unos contra otros. Quiero aportar posibles soluciones.
Volviendo al ejemplo del CD, se me ocurre que una posible solución es diferenciar las copias.
La idea es simple: Asociar un identificador único a cada copia que proporcione ventajas exclusivas adicionales al comprador.
Estas pueden ser algunas ventajas:
- Descuento en las entradas para el próximo concierto.
- Versiones en politono, o reales para el móvil.
- Sorteos de productos firmados, encuentros con el artista, entradas para el concierto (importante que exista probabilidades reales de que toque).
- Descuentos sobre productos de merchandising como posters, figuras, etc.
- Proponer “planes amigos”.
¿se te ocurre alguna más?
Otra de las ventajas de tener un ID único, es que te puede permitir registrar al cliente en la web del artista y hacer un seguimiento sobre el feeling del usuario con el artista, obtener su feedback y premiar al buen fan (hay fans más buenos que otros). Esto en el mundo 2.0 es dinero.
Parece ser que algo de lo que menciono aquí ya se está haciendo, se llama OpenDisc. Yo lo descubrí en un CD de Andy&Lucas expuesto en una gasolinera.
En fin, sólo trato de aportar mi granito de arena si sirve para algo. Habría que ver si estas ideas son potencialmente realizables o no. Pero todo empieza con darle vueltas a la imaginación. Creo que ayudarían a aumentar las ventas.
P.D. De paso también respondo a “la patata caliente” que el ex-presidente Felipe Gonzalez ha lazando a los internatuas: “que busquen soluciones”.
















