Geek & Roll » 2008 » December

Programando para la BlackBerry – Everlasting Flame II

Cesar December 30th, 2008 Uncategorized 8 comentarios

Ver primera y segunda parte.

Everlasting Flame icon

Continuamos con el desarrollo de esta aplicación. Ya en la parte dos vimos cómo programar la funcionalidad básica: monitorear el tiempo de las llamadas y reaccionar de acuerdo a los límites establecidos (denominados soft y hard limit). Ahora sigue el turno de guardar a la memoria algunas de las opciones establecidas por el usuario y crear una interfaz gráfica para la configuración.

Como vimos, Everlasting Flame es una aplicación con la que el usuario no interactúa directamente y es por esto que no contiene una interfaz gráfica. La aplicación se ejecuta automáticamente cuando el teléfono inicia, de tal modo que al marcar un número comienza a contar el tiempo. Sin embargo es conveniente tener una interfaz de configuración donde podamos establecer los límites, así como también habilitar y deshabilitar el monitoreo de llamadas (por si queremos hacer una llamada más larga de lo normal sin que se corte).

Para este propósito se crea lo que se llama un punto de entrada alternativo, que como su nombre lo indica, servirá como punto de entrada a la aplicación ejecutando una serie de pasos distintos a los “normales”. En nuestro caso el punto de entrada normal es el que no tiene interfaz gráfica y el alternativo es iniciar la interfaz gráfica para configurar la aplicación. Lo primero es configurar el proyecto como aplicación del sistema (es decir, que no muestra interfaz gráfica) y que sea auto ejecutable. Esto se hace desde Eclipse modificando las propiedades del proyecto. Después creamos un proyecto nuevo vacío y en las propiedades lo configuramos como punto de entrada alternativo al proyecto original, pasando como parámetro alguna cadena de identificación (en mi caso, “init”).

De esta manera, cuando el usuario seleccione el icono de nuestra aplicación desde la BlackBerry, nuestra aplicación recibirá como argumento la cadena “init” y eso nos servirá como señal para iniciar la interfaz gráfica. Si la aplicación es iniciada automáticamente, no recibiremos la cadena “init” e iniciaremos la aplicación como antes. Modificamos EverlastingFlame.java de esta manera:


public static void main(String[] args) {
System.out.println("On Endless main");
boolean startup = false;

for(int i=0; i < args.length; i++){
if(args[i].equals("init")){
startup = true;
}
}

if(startup){
System.out.println("Called from regular entry point, display the GUI.");
MainGUI gui = new MainGUI();
gui.enterEventDispatcher();
}else{
System.out.println("Called from alternate entry point, start the EverlastingFlame.");
EverlastingFlame ef = new EverlastingFlame();
ef.enterEventDispatcher();
}
}

Como vemos en el código, si recibimos la cadena "init" creamos una nueva instancia de MainGUI y ejecutamos su event dispatcher para que el sistema despliegue la pantalla. El código de MainGUI.java se muestra a continuación:


public class MainGUI extends UiApplication{
private MainScreen mainScreen;

public MainGUI(){
mainScreen = new EverlastingFlameScreen();
LabelField label = new LabelField("Everlasting Flame Configuration", LabelField.ELLIPSIS
| LabelField.USE_ALL_WIDTH);
mainScreen.setTitle(label);
pushScreen(mainScreen);
}
}

Esta clase extiende a UiApplication porque precisamente es una aplicación con interfaz gráfica. Contiene una MainScreen con el título de "Everlasting Flame Configuration". Por último empujamos la pantalla para que sea mostrada en el teléfono. La MainScreen es realmente una instancia de EverlastingFlameScreen, una clase que hereda de MainScreen e implementa la interfaz gráfica y los eventos que nos interesan:


public class EverlastingFlameScreen extends MainScreen{
private CheckboxField chkActive;

public EverlastingFlameScreen(){
super();

chkActive = new CheckboxField("Start monitoring service?",Options.getActive());
add(chkActive);
}

protected boolean onSavePrompt(){
if(isDirty()){
int option = Dialog.ask(Dialog.D_SAVE,
"Do you want to save changes?");
if(option == Dialog.SAVE){
onSave();
boolean chkState = chkActive.getChecked();
Options.setActive(chkState);
if(Options.getActive()){
Dialog.inform("Calls will be monitored, Mujajaja!");
}else{
Dialog.inform("Calls are no longer monitored.");
}
}else{
chkActive.setChecked(Options.getActive());
return false;
}
}
return true;
}
}

Para efectos de este ejemplo, la pantalla se compone solamente de un checkbox que sirve para habilitar o deshabilitar el servicio de monitoreo. Si este checkbox se encuentra activo, Everlasting Flame monitorea las llamadas, inyectando el tono DTMF y colgando cuando es necesario. De más está decir que si se encuentra desactivado, las llamadas transcurren normales. En el constructor se crea el checkbox en cuestión y se le pasa una cadena que será su etiqueta, así como también el estado inicial del checkbox (seleccionado o no seleccionado).

El estado inicial se obtiene de las opciones del usuario, gracias a una clase Options que nos sirve para guardar las preferencias del usuario en memoria no volátil (más de esto en la siguiente entrega de esta serie de posts). La magia ocurre en el método onSavePrompt. Este método se ejecuta cuando el sistema cree que hubo algún cambio que debe ser guardado. Nosotros sobreescribimos el método y agregamos una pequeña validación.

Cuando el sistema ejecuta onSavePrompt, verificamos el estado de la pantalla. isDirty nos indica que hubo cambios y por lo tanto hay que preguntar al usuario (por medio del método estático ask de la clase Dialog) si desea guardar. En caso de si desear guardar, verificamos si el usuario activó o desactivó el servicio y por último informamos al usuario que sus cambios han sido aplicados.

Queda solamente modificar el PhoneListener para tomar en cuenta el estado del servicio (activado o desactivado). Esto es muy sencillo utilizando la clase Options que se verá más adelante:


if(Options.getActive()){
if(callTimeSeconds == softLimit){
System.out.println("Soft limit reached");
injectDTMFTone(Phone.getActiveCall());
}else if(callTimeSeconds == hardLimit){
System.out.println("Hard limit reached, hanging up!");
injectEndCall();
}
}else{
System.out.println("Service not active");
}

Si el servicio se encuentra activo, realiza las mismas validaciones anteriores. En caso de encontrarse inactivo, simplemente no hace nada.

Lo que queda es explicar la clase Options y por supuesto agregar mayor funcionalidad a la interfaz gráfica, como por ejemplo la configuración de los límites, la acción a realizar en cada uno de ellos y cambiar el funcionamiento entre modo "naco" (funcione para todos los números) y modo "VIP" (sólo para números seleccionados).

10 placeres culposos geek

Cesar December 29th, 2008 Uncategorized 3 comentarios

Tratando de robar un poco del spotlight en el que se encuentran mis amigos de 10puntos.info, les comparto una lista de 10 placeres culposos geek compilada por mi en orden de relevancia ascendente y numeración inversa:

  1. Aprender diálogos de tu película favorita, y repetirlos a cada rato. No vasta con contarle al mundo el numero de 6 cifras que suman las veces que haz visto The Lord of the Rings (la trilogia completa y de una sentada, porque según tu, no existe otra manera de verlas), o tratar de impartir lecciones de vida con lo “aprendido” en The Fight Club. Por si fuera poco, te aprendes los diálogos y los repites en todas y cada una de las ocasiones que crees relevante además de, claro está, cuando estas viendo la película y es el turno de la escena en cuestión.
  2. Japón. Ya sea por querer aprender Japones, pregonar a los cuatro vientos tu fascinación con la mujer Japonesa (o con la imagen que tu crees que es representativa de la mujer Japonesa) o simplemente tu amor por las artes marciales de dicho país, parece ser como si todo lo proveniente del Japón ocasionara un click en tu mente que hace que te agrade y lo quieras.
  3. Escribir un blog. Porque seguramente a todo el mundo le interesa lo que tu haces. El momentum decrece cuando te das cuenta de los otros millones de individuos que también tienen tus grandes ideas, solo que antes que tu, además de ser más jóvenes, han logrado más cosas que tu a su edad y a la tuya además de que ellos sí aprendieron Japones.
  4. Diseñar camisetas graciosas (Tees). Todo geek tiene excelentes ideas para camisetas y pondría su propia tienda de camisetas por Internet, si tan sólo tuviera el tiempo (es que las más de 70 horas y contando de Final Fantasy XII no lo dejan).
  5. Leer feeds. Todo empezó con la necesidad organizar y tener a la mano las grandes cantidades de información regada por muchos sitios que visitamos frecuentemente. Se introdujeron los feeds RSS y todo fue perfecto… hasta que la desorganización empezó dentro de nuestros propios feeds. Sabes que eres adicto a esto cuando pasas de 1000+ en el Reader a 17 en menos de 30 minutos, y la mayoría de las veces tan solo lees unos cuantos, luego solo los títulos, y luego simplemente presionas Mark all as read.
  6. Defender la piratería. Lo llamas de mil maneras, menos piratería (porque piratería es atacar barcos mercantes, y eso es muy malo). Defiendes el hecho de que te bajas la discografía completa de Topo Gigio porque los cerdos avariciosos de la iTunes Store la ofrecen con ese asqueroso DRM. Al final, lo único que quieres es no pagar por la música y terminas comprando reproductores que alimentan a la máquina del DRM (como iPods, iPhones, Zunes).
  7. Comprar nuevos gadgets. Necesito un iPod con mas capacidad. Necesito una tabla Wacom. Necesito un celular nuevo. Necesito, Necesito, Necesito. No necesitas nada de eso, más bien lo deseas con todas tus entrañas sobrealimentadas de pizza y coca cola.
  8. Internet en la casa. Después de todo el día laboral en la computadora y conectado a Internet, llegas a tu casa… a estar en la computadora y usar Internet por supuesto.
  9. Twitter. Por algo se le hace tan estúpido a la mayoría de la gente, ¿O es que la mayoría son estúpidos?
  10. Apple. Todos los productos de Apple son un enorme placer culposo, y punto.

Regalos Geek de Navidad edición 2008

Pasó Navidad y es hora de preguntar: ¿Qué regalos geek recibieron o se autoregalaron esta Navidad? Yo empiezo:

  1. El Blu-Ray edición especial de “The Dark Knight”

Como ven, mi presupuesto para regalos se lo llevó completamente otro regalo al que no considero Geek así que no hay mucho que presumir. Seguramente ustedes si, así que a presumir en los comentarios.

twitter + last.fm = blip.fm

Rafyta December 24th, 2008 internet, web2.0 3 comentarios

No es necesario decir mucho, pero este sitio con el que me acabo de topar (y ya olvidé cómo), te permite blipear con una canción que tus contactos pueden escuchar. Ése es el concepto básico; buscas una canción, pones un mensaje y se publica en tu cuenta. En lugar de usuario, eres “DJ” y en lugar de “seguir” a tus amigos, añades DJ’s a tus favoritos.

El concepto es fresco, aunque desde luego no 100% original, pero apenas llevo unos minutos y ya me gustó bastante. En ciertos aspectos supera por mucho a last.fm, que era lo más parecido que usaba para mi sitio personal.

Pueden checar unos blips que posteé para probar en http://blip.fm/rafyta.

Retrospectiva, mi 2008 in a nutshell

Cesar December 22nd, 2008 Uncategorized 3 comentarios

Cuando iniciamos este blog no teníamos muy clara la idea de lo que sería, en que se convertiría o de que se trataría. Todo inició con un: “Hey, nuestros blogs se parecen. ¿Porque no escribimos en uno solo?”. Mi respuesta a Axel (el de la idea y el de la fotito de abajo con la greña alborotada) fue “¡Buena idea!” aunque mentalmente fue “Hmm… no, así estoy bien”. La buena noticia es que me equivoqué, juntos los dos – y ahora tres – logramos hacer algo que por separado no lograría capturar el feeling geek de los tres. Por si no se han dado cuenta, cada uno de los tres inyecta un lado de la geekes general de Geek&Roll. La mala noticia es que perdí mi blog personal.

Las razones para cerrar mi blog personal fueron varias y no todas tuvieron que ver directamente con el compromiso de Geek&Roll. Aun así, la mayoría de los temas tratados en mi blog personal comenzaron a aparecer en forma de posts de un servidor aquí, pero obviamente los temas más personales se fueron directo a /dev/null (algo como la papelera de reciclaje pero sin la opción de recuperar lo ahí depositado). Desde entonces los temas personales que decido hacer públicos en la red se desbaratan entre Tweets, posts, Facebook, Picasa, conversaciones de IM y no se que tantas cosas más.

La larga introducción es para justificar el siguiente post 100% personal. Para mi, el 2008 fue un año de evolución más que de cambio. Evolución que me trajo experiencias que difícilmente voy a dejar de recordar en los años venideros. En el 2008 viví algunos de los momentos más memorables de mi vida hasta la fecha, algunos públicos como la despedida completamente impromptu de todos mis amigos y compañeros de maestría, otros privados de los que por obvias razones no daré ejemplo. Días con tintes de despedida de grandes amigos, amigas y otros personajes, así como también emocionantes bienvenidas de personajes mucho tiempo atrás olvidados.

El 2009 se perfila como la culminación a manera de cambio del largo hilo evolutivo del 2008. Quiero terminar con un simple gracias a todas las personas con las que tuve el privilegio de compartir este 2008. Gracias a mis amigos de Geek&Roll, el staff, los visitantes elite que siempre vuelven sin importar de las desviaciones en la calidad y la frecuencia de posteo que solemos tener, a todos los lectores que hacen comentarios o los anónimos. Gracias a Rafyta por siempre echarme la mano con la cosa de las imágenes y esas cosas de diseño de las que no entiendo nada y por ende son Del Diablo™. Gracias a las personas que me han permitido invertir en lo único que me va a quedar si llego a viejo: los recuerdos de una vida plena.

Gracias, y que venga el 2009.

PS3 Home rifa y controla

Cesar December 11th, 2008 entretenimiento 7 comentarios

Home Acabo de probar la beta pública de Home, el mundo virtual a la second life de Sony para la PS3. En este post voy a plasmar mis impresiones, aunque pueden encontrar reseñas mucho mas completas en otros blogs, aquí les contaré mi experiencia personal con el servicio.

Primero la descarga. 77 megas. Se descargó e instaló sin problemas. Al tratar de hacer login me pidió que aceptara un acuerdo de usuario y después de aceptarlo sin ver lo que decía no me pude conectar. Volví a intentar y nada. Me salí, mandé un tweet con mi frustración, consulté los foros, volví a intentar y ahora si se pudo. ¡Eureka!

Lo primero que te pide es crear un usuario. Aunque muchos se irán por tratar de recrearse a sí mismos virtualmente (cosa que es bastante posible por la flexibilidad de la herramienta) yo elegí por hacer un usuario a como me dio la gana. No dudo que habrá gente que aproveche y se cree un alter-ego, después de todo es una de las gracias de un mundo virtual como estos. Una vez con tu avatar, Home te lleva directamente a tu departamento donde te da un mini tutorial de como interactuar con el mundo virtual.

En este punto yo estaba pensando ¿Y? ¿Es todo? El mundo virtual de Home se divide en varias secciones acomodadas por stacks. En la beta pública están el stack de Home, de Uncharted y de Killzone 2 si mal no recuerdo. Cada stack cuenta con varios escenarios, el stack de Home tiene tu departamento, la plaza central, la sala de juegos, el cine, entre otras cosas. Otra vez ¿Y? ¿Es todo?

Al poner pie en la plaza sale el montón de personas caminando por todos lados. Inmediatamente se me acercó un personaje a preguntarme que si de donde era, que si quería ser su amigo, esa clase de interacción nunca me ha llamado la atención. No veo el beneficio de “conocer” a alguien virtual sin un interés común. Es distinto conocer a alguien enmedio de un tiroteo en Resistance o retándolo a un duelo de guitarras en Guitar Hero 3, ¿pero parado al lado de un lago de alta definición, o viendo un trailer de Twilight? no es para mi, no gracias.

Apunto de desconectarme del servicio veo que JPDA, uno de mis amigos en la PlayStation Network (PSN) y a quien también conozco en el MundoReal se conecta. Le envío un mensaje para ver en que parte del mundo virtual anda y coincidimos en la plaza. Es una sensación extraña estar platicando con una representación virtual de alguien que tu conoces y estas acostumbrado a platicar en el MundoReal. Después de unos cuantos tortuosos mensajes de texto introducidos con el control, nos pusimos de acuerdo para jugar boliche virtual. Antes de entrar a la sala de boliche llegó otro personaje hablando español como nosotros, nos preguntó de donde somos y supuestamente nos seguiría a jugar boliche pero no volvimos a saber de él.

Después de la ronda de boliche virtual en la que descubrí que no sirvo para eso, decidimos dar la vuelta por la sala de juegos para tratar de ganar una mesa de billar. No me explico como le hará Home para manejar eso, porque como están las cosas ahora en el Beta la sala de juegos estaba demasiado poblada y las pocas mesas de billar estaban todas ocupadas. No me quiero imaginar cuando Home sea utilizado por más y más personas.

En Home también te puedes comunicar por voz, simplemente acercándote a alguien y hablando. Hablar con la representación virtual de alguien a quien conoces en MundoReal es, como ponerlo, freaking cool. Desde Home te puedes poner de acuerdo para echarte una retita de algún juego que los dos tengan, invitar a gente a tu departamento virtual, ver películas en un cine virtual y otras actividades que ya están disponibles o lo estarán proximamente.

Presiento todo un éxito para este Home tan esperado. Y vaya que lo necesita la consola de Sony.

Porqué mi mamá usa Linux

Rafyta December 8th, 2008 FLOSS, opinion 10 comentarios

Hace como un mes les instalé a mi mamá y a mi hermana (pero más por mi mamá) una PC con Ubuntu Studio. Yo lo había instalado el año pasado por curiosidad, ya que es una distro Linux para creación y edición de contenido multimedia. Después de un mes de uso, mas o menos, le pregunté a mi mamá si estaba agusto con la forma en que funcionaba la computadora. De su respuesta puedo concluir lo siguiente:

  • Es fácil de usar
  • Más rápida que cuando tenía windows
  • No se traba ni se reinicia espontáneamente
  • Fue fácil adaptarse viniendo de windows y mac os x
  • No hay que preocuparse por virus

Cabe mencionar que esta computadora es la primera que compre con mi propio dinero, ganando a pulso cada peso con sudor y… bueno ustedes me entienden, cuando iba empezandoa trabajar. El punto es que tiene más de 5 años de uso; por lo que no es ningún avión de máquina. Sin embargo, con Linux funciona perfectamente.

Lo que me pone a pensar es que mi mamá y mi hermana son ejemplos clásicos de usuarios casuales que sólo necesitan internet, e-mail y office. Creo que si personas sin mucha experiencia, como ellas, pudieron adaptarse con una explicación de 3 minutos de cómo entrar y salir del sistema (y apagar la PC), cualquiera puede hacerlo.

Aunque la lista de razones que puse arriba es algo que todos sabemos, es muy distinto leerlo que verlo en la vida diaria; por lo menos para mí lo fue, y me da gusto ver que el software libre pueda pasar de ser un concepto idealista para alguien como yo, que por distintas razones está amarrado a windows, y llegue a tener su lugarcito en la familia.

Programando para la Blackberry – Everlasting Flame

Cesar December 6th, 2008 aplicaciones, programacion 9 comentarios

Ver primera parte: Intro

Everlasting Flame icon

En la introducción se vió un poco sobre lo que es programar una aplicación para la BlackBerry haciendo un pequeño “Hola Mundo” muy sencillo. Ahora toca explicar las bases de la aplicación que se menciona en aquel post llamada “Everlasting Flame”. El nombre es el título de una canción del grupo de Thrash Aleman Kreator. Tengo la mala costumbre de nombrar a todos mis proyectos con titulos de canciones metaleras.

Primero un poco de teoría. Las aplicaciones de BlackBerry pueden ser de dos tipos: sin GUI o con GUI. Típicamente el punto de entrada de las que tienen GUI es cuando el usuario selecciona el ícono correspondiente en la pantalla. Las que no tienen GUI generalmente cuentan con otro punto de entrada, como al momento de hacer una llamada telefónica, enviar un SMS, solicitar datos, etc. En nuestro caso nuestra aplicación es sin GUI y su punto de entrada es al momento de realizar una llamada telefónica.

En el API de RIM hay dos clases que nos interesan actualmente: Applicationy UiApplication para aplicaciones sin UI o con UI, respectivamente. También nos interesa el PhoneListener que nos sirve para registrar una clase que consume los eventos generados por la aplicación de teléfono en la BlackBerry. También nos interesa la clase Phone que nos permite interactuar con la aplicación que se encarga de marcar el teléfono en la BlackBerry.

Como se mencionó en el post de introducción, el funcionamiento es el siguiente: marco un número e inicia un contador. Si llego a un determinado número de segundos (soft limit) el teléfono me avisa inyectando un tono DTMF a la llamada. Si llego a otro límite mayor (hard limit) la llamada se termina automáticamente. Para esto vamos a usar las clases antes mencionadas.

Nuestro programa consta básicamente de 2 clases: la clase principal que extiende a Application, y una clase que implementa la interfaz PhoneListener, o más específicamente extiende a AbstractPhoneListener, misma que implementa a PhoneListener y nos evita el tener que implementar todos los métodos abstractos de PhoneListener, enfocándonos solo a aquellos que necesitamos.
Leer el resto de este post.

Los clientes FTP son feos

Cesar December 3rd, 2008 aplicaciones, internet 18 comentarios

Todos los clientes FTP que he probado son feos (con F de Foco Fundido). Si también el overhyped transmit es feo. Uno más o menos aceptable es SmartFTP. El más bonito en mi lista es Cyberduck, pero es OSX only al igual que mi editor de texto favorito: TextMate. Maldita manzana y sus aplicaciones.

De vuelta al tema. Los clientes FTP son feos. Funcionales (algunos más que otros) pero feos. Hasta CuteFTP que por el nombre esperarías algo menos feo, también era feo. ¿Qué se necesita para que un cliente FTP sea bonito? Según un servidor una interfaz minimalista, intuitivo y con estilo. Algo parecido a Chrome. Con lo básico para un cliente FTP y nada más.

Mi pregunta es ¿Qué funcionalidad es la mínima absolutamente necesaria en un cliente FTP? digo, aparte de lo obvio: transferir archivos a un servidor FTP.

Six Apart se desayuna a Pownce

Rafyta December 1st, 2008 blogs, internet 4 comentarios

Hace unas horas recibí este mail:

We are sad to announce that Pownce is shutting down on December 15,
2008. As of today, Pownce will no longer be accepting new users or new
pro accounts.

To help with your transition, we have built an export tool so you can
save your content. You can find the export tool at Settings > Export.
Please export your content by December 15, 2008, as the site will not
be accessible after this date.

Please visit our new home to find out more:
http://www.sixapart.com/pownce

Our thanks go out to everyone who contributed to the Pownce community,

The Pownce Crew

La neta eso de “triste” no se si creerlo, porque debe haber rolado buena feria por una comunidad con tantos miembros y que podemos considerar exitosa. Si yo fuera de los founders estaría brincando en un dedo y llamando al distribuidor Bertram (yates privados) y/o agente de bienes raíces más cercano. Los usuarios Pro de Pownce, pa que no se agüiten les van a dar una cuenta en TypePad por un año.

Pownce se cierra este 15 de Diciembre, pero por lo menos sí piensan en sus usuarios y prepararon una herramienta para exportar todas las conversaciones inútiles que a cualquiera le interese conservar.

Mas info aqui

Posts anteriores