Geek & Roll » gadgets

Controles custom en BlackBerry

Cesar February 12th, 2010 gadgets, programacion Haz un comentario

Crear un control custom para una aplicación de BlackBerry es muy similar a crearlo para una aplicación Java con Swing. La arquitectura del toolkit de Swing es una de las cosas que más me gustan de Java, haciendo muy claro el cómo reemplazar algo por una implementación propia.

En este caso, mi requerimiento era tener una gran “palomita” o checkmark cuando cierta variable era verdadera, y una gran cruz o tache cuando la misma variable era falsa. En otras palabras, un checkbox pero con otra interfaz, más bonita (aunque bonita es una variable que depende del observador, y como eso no lo puedo controlar…)

Como muchas cosas en Java, todo comienza extendiendo una clase, en este caso la clase CheckboxField

public class CustomCheckBox extends CheckboxField

Este checkbox, contrario al checkbox normal, no va a tener un texto asociado, solo la parte gráfica. Así que sobreescribimos el constructor:

public CustomCheckBox(){
	super();
}

public CustomCheckBox(boolean check){
	super("",check);
}

Similar a Swing, hay que sobreescribir el método paint para ahí pintar lo que nosotros queremos. Cuando el checkbox esta check dibujamos la palomita, y cuando esta uncheck, dibujamos la cruz:

public void paint(Graphics g){
	if(getChecked()){
		drawCheck(g);
	}else{
		drawCross(g);
	}
}

Esos dos métodos drawCheck y drawCross son los responsables de pintar el control. El método getChecked heredado de CheckboxField nos dice si el control esta checked o unchecked.

Primero veamos drawCheck

private void drawCheck(Graphics g){
	int left = getBorderLeft();
	int top = getBorderTop();

	int x0 = left, x1 = x0, x2 = x1+20, x3 = x2+50, x4 = x3,
		x5 = x4-50, x6 = x5-20;
	int y0 = top, y1 = y0+30, y2 = y1+15, y3 = y2-45,
		y4 = y3+25, y5 = y4+45, y6 = y5-15;

	g.setColor(0x5B9058);
	g.setBackgroundColor(isFocus() ? 0xEEEEEE : 0xFFFFFF);
	drawBackground(g);
	g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, true);

	int[] xPts = {x1, x2, x3, x4, x5, x6};
	int[] yPts = {y1, y2, y3, y4, y5, y6};
	g.drawFilledPath(xPts, yPts, null, null);

	g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, false);
}

De antemano perdonen ustedes el uso de números mágicos. Lo interesante es el método drawFilledPath, que toma dos arreglos con coordenadas XY y dibuja, como su nombre lo indica, un polígono. Es algo como dibujar con Logo, uno de mis primeros lenguajes de programación muy similar a Lisp. Primero preparamos las coordenadas, después verificamos si nuestro control tiene el foco para dibujarle un fondo distintivo.

El otro método, drawCross, es muy parecido solo que las coordenadas cambian para formar una cruz:

private void drawCross(Graphics g){
	int left = 0;
	int top = 10;

	int x0 = left, x1=x0, x2=x1+25, x3=x2+10, x4=x3+10, x5=x4+25,
		x6=x4+5, x7=x5, x8=x4, x9=x3, x10=x2, x11=x1, x12=x2-5;
	int y0 = top, y1=y0,y2=y1, y3=y2+15, y4=y2, y5=y4, y6=y5+25,
		y7=y6+25, y8=y7, y9=y8-15, y10=y8, y11=y10, y12=y6;

	g.setColor(0xB54E41);
	g.setBackgroundColor(isFocus() ? 0xEEEEEE : 0xFFFFFF);
	drawBackground(g);
	g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, true);

	int[] xPts = {x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12};
	int[] yPts = {y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12};
	g.drawFilledPath(xPts, yPts, null, null);

	g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, false);
}

Y finalmente la clase completa

public class CustomCheckBox extends CheckboxField{
	public CustomCheckBox(){
		super();
	}

	public CustomCheckBox(boolean check){
		super("",check);
	}

	public void paint(Graphics g){
		if(getChecked()){
			drawCheck(g);
		}else{
			drawCross(g);
		}
	}

	protected void drawFocus(Graphics g, boolean focus){
		//do nothing
	}

	protected void onFocus(int direction){
		super.onFocus(direction);
		invalidate();
	}

	protected void onUnfocus(){
		super.onUnfocus();
		invalidate();
	}

	protected void layout(int width, int height){
		width = 71;
		height = 71;
		setExtent(width, height);
	}

	private void drawCheck(Graphics g){
		int left = getBorderLeft();
		int top = getBorderTop();

		int x0 = left, x1 = x0, x2 = x1+20, x3 = x2+50, x4 = x3,
			x5 = x4-50, x6 = x5-20;
		int y0 = top, y1 = y0+30, y2 = y1+15, y3 = y2-45,
			y4 = y3+25, y5 = y4+45, y6 = y5-15;

		g.setColor(0x5B9058);
		g.setBackgroundColor(isFocus() ? 0xEEEEEE : 0xFFFFFF);
		drawBackground(g);
		g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, true);

		int[] xPts = {x1, x2, x3, x4, x5, x6};
		int[] yPts = {y1, y2, y3, y4, y5, y6};
		g.drawFilledPath(xPts, yPts, null, null);

		g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, false);
	}

	private void drawCross(Graphics g){
		int left = 0;
		int top = 10;

		int x0 = left, x1=x0, x2=x1+25, x3=x2+10, x4=x3+10, x5=x4+25,
			x6=x4+5, x7=x5, x8=x4, x9=x3, x10=x2, x11=x1, x12=x2-5;
		int y0 = top, y1=y0,y2=y1, y3=y2+15, y4=y2, y5=y4, y6=y5+25,
			y7=y6+25, y8=y7, y9=y8-15, y10=y8, y11=y10, y12=y6;

		g.setColor(0xB54E41);
		g.setBackgroundColor(isFocus() ? 0xEEEEEE : 0xFFFFFF);
		drawBackground(g);
		g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, true);

		int[] xPts = {x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12};
		int[] yPts = {y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12};
		g.drawFilledPath(xPts, yPts, null, null);

		g.setDrawingStyle(Graphics.DRAWSTYLE_AAPOLYGONS, false);
	}

	private void drawBackground(Graphics g){
		g.clear();
	}

	public boolean isFocusable(){
		return true;
	}
}

El resultado:
customcheckbox

Look ma! custom controls with no images!

Cuidado con cambiar de BlackBerry en Telcel

Hace poco decidí cambiar de modelo de BlackBerry, de la viejita 8110 a la un poquito más moderna 8520. Al ir a Telcel me dijeron que con mi plan era imposible cambiar al equipo que yo quería, aún cuando quisiera pagar el costo total del mismo.

Como en Telcel me la hicieron difícil, compré el equipo aparte y le cambié el chip. Hasta ahí todo bien, sin embargo al llegar la factura veo que me cobran la conexión de datos, aún cuando mi plan incluye datos ilimitados. En la factura me cobran el plan (con datos ilimitados incluidos) más los datos consumidos. Obviamente algo andaba mal. Después de dos visitas al centro de “atención” al cliente – que de atención no tiene nada – no me pudieron resolver mi problema. Las dos personas que me atendieron coincidían en que “que raro!?!?” y levantaron un reporte.

Gracias a que tengo a una persona conocida que trabaja en el corporativo, después de unos cuantos SMS’s el problema quedó aclarado y resuelto. Bueno, resuelto a medias porque voy a tener que pagar el cargo excesivo.

El problema, y lo que nunca me pudieron explicar en el centro de pseudo-atención, fue que al cambiar de equipo si tienes un plan de datos ilimitados, esto no se te respeta. En ningún lugar te lo indican, tampoco te lo advierten en Telcel. Y lo que es peor, nunca me lo superion resolver. Tuve que usar “palancas” del corporativo para que me resolvieran, ya que los asesores del centro de atención se limitaron a rascarse la cabeza. Nunca me preguntaron ¿No cambió su equipo señor?

Así que si tienen una BlackBerry y deciden cambiar de equipo, antes de meter su chip en el equipo nuevo, vayan a su centro de atención y pidan que les hagan el cambio para evitar cargos excesivos. Esta información la deberían de proporcionar de primera mano en Telcel, pero como siempre con prácticas poco éticas para sacar hasta el último centavo.

No iba a proporcionar información, pero por el coraje que me hicieron pasar les muestro una captura de pantalla de lo que será Everlasting Flame 2.0. Descárguenlo y eviten pagarle más de la cuenta a Telcel.

ELF2

Crackeando el PS3: El estado actual

Cesar January 19th, 2010 cracking, entretenimiento, gadgets 2 comentarios

El PS3. Esta consola de séptima generación, y el tercer miembro de la familia PlayStation. Desde su lanzamiento en Noviembre del 2006 muchos crackers se han dado a la tarea de romper las barreras impuestas por el hypervisor y abrir la posibilidad de ejecutar código de terceros en esta máquina.

Primero que nada, ¿Qué es un Hypervisor? Según la Wikipedia, es un monitor de hardware o software que permite la ejecución de varios sistemas operativos en el mismo hardware. Existen dos tipos: Tipo 1 o nativo son los que corren directamente en el hardware. Tipo 2 son los que corren como cualquier otra aplicación del sistema operativo (como VirtualBox o VMWare)

Una visita a los foros de PS3-Scene revela poca actividad alrededor de la escena del PS3. Hace ya lo que parecen siglos Paradox, uno de los grupos más respetados en el mundo del cracking, anunciaba que tenía un iso loader listo para el PS3. Algo así como el santo grial, que nunca llegó.

Después vino IronPeter, un hacker de Rusia que logró tener acceso a algunos de los registros del RSX (la tarjeta de video del PS3) y con eso permitir la aceleración 2D para aplicaciones que se ejecutan desde OtherOS (GNU/Linux), lo que en teoría significa poder tener juegos y otras aplicaciones como Boxee o XBMC corriendo en el PS3 bajo GNU/Linux. La discusión técnica se encuentra en los foros de PS2Dev. Desgraciadamente la manera para aprovecharse de este bug es por medio de OtherOS, es decir la capacidad que tenían modelos anteriores de ejecutar otro sistema operativo. Hablo en pasado ya que el nuevo PS3 Slim ha eliminado el soporte para OtherOS, cosa que no me sorprende en lo absoluto.

A la fecha no se ha abierto el PS3 al homebrew. Es el turno de Geohot (a.k.a. George Hotz, master del iPhone) de probar suerte. Ya ha creado un blog “On the PlayStation 3” al igual que sucedió con el ahora famoso “Finding JTAG on the iPhone”. Pura lectura técnica y altamente interesante. Si la escena va a reportar adelantos próximamente, este es el lugar para estar atento.

Desde el Blackberry 8520

Axel January 12th, 2010 gadgets 3 comentarios

Recién bajé la aplicación de Wordpress para Blackberry y de inmediato quise probar la publicación. Es bastánte cómoda.

Lo que me parece es que si subo una foto me va a poner el tamaño por default y ya. Veamos qué sucede.

Saludos a los visitantes de este blog fantasma :)

Update: en efecto, la foto se subió un poco más grande de lo debido (640px wide), la acabo de reducir desde la PC.

iPod – iTunes en Windows

Cesar December 11th, 2009 aplicaciones, gadgets, plugins 3 comentarios

Foobar2000 main window
iTunes me desespera, nunca he sido fan del programa. Para mi gusto es un programa demasiado restrictivo en cuanto a manejar un iPod se refiere. Supongo que lo hacen así para evitar la piratería, trabajar con DRMs y darle gusto a masoquistas. Cuando quiero reproducir música en Windows, mi gallo es Foobar2000.

Para el que no lo conozca, Foobar2000 es un reproductor minimalista creado por un ex-desarrollador de Nullsoft (los de Winamp). Foobar2000 tiene un SDK para que terceros puedan crear plugins y extender sus capacidades con cosas como visualizador de portadas, espectogramas, convertidores, entre otras cosas. Si buscas un reproductor ligero en recursos con una interfaz minimalista y altamente configurable, definitivamente tienes que probarlo.

Ahora bien, a lo que nos concierne. Además de no gustarme, iTunes es un tabú en la oficina así que mi iPod nano de nosequegeneración no sirve de mucho. No solo eso, sino que aún con iTunes, este se niega a reproducir la música guardada en el iPod. No se a ciencia cierta, pero sospecho que es elitismo de parte de iTunes porque todos los mp3 que tengo fueron puestos ahí por gtkpod. ¿Será que a iTunes no le agrada gtkpod?

Foobar2000 al rescate. Gracias a su SDK, alguien se dio a la tarea de crear un plugin para administrar iPods lo que le permite a Foobar2000 reproducir la música contenida sin preocuparte por borrarla accidentalmente al sincronizarse y, lo que es más importante, sin elitismos. Foobar2000 con el iPod manager plugin reproduce toda mi música, los mismos archivos que iTunes no pudo, sin importar su procedencia.

Lo mejor de todo: la instalación. Descomprime Foobar2000 en cualquier folder. Después descomprime el plugin iPod manager en el folder de components dentro del folder principal de Foobar2000. En Foobar2000 ve a File | iPod | Load library y el resto espero no tener que explicarlo.

iPod – iTunes en Windows = Bliss

FAT32 y por qué el PS3 debería de ignorarlo

Cesar September 30th, 2009 Microsoft, entretenimiento, gadgets 5 comentarios

El modelo de 60 GB del PS3 cuenta con 4 puertos USB en donde se pueden conectar los controles, cámaras, iPods, teclados y mouses. En mi caso compré un disco duro externo de 1 TB para hacer respaldos y conectarlo al PS3. Al centralizar toda la música, fotos y videos en este drive, libero espacio en mi laptop y puedo sentarme en mi TV a ver series de TV, escuchar música o ver las fotos de mi último viaje, todo desde el PS3 que funciona realmente bien para este propósito.

Inclusive cuando el PS3 en sus versiones originales ofrecía soporte para OtherOS, una manera de instalar GNU/Linux sin necesidad de hacks, por razones que no alcanzo a comprender decidieron no dar soporte para otros filesystems… digamos del siglo actual. El PS3 solo soporta FAT32 para dispositivos de almacenamiento masivo conectados por USB. FAT32 es muy utilizado actualmente en memorias USB y dispositivos portátiles por su simplicidad. En estos dispositivos las limitantes de FAT32 puede no ser un dealbreaker, pero revisemos las limitantes de FAT32:

  • No previene la fragmentación
  • Para calcular el espacio libre, tiene que escanearse linealmente todo el sistema de archivos como si de un arreglo se tratara, verificando los espacios libres. Entre mas grande el disco, más tarda
  • El tamaño máximo que puede tener un archivo dentro de un disco formateado como FAT32 es 2^32 – 1 bytes, o lo que es lo mismo 4 GB menos 1 byte coloquialmente conocido como “cuatro gigas”
  • Es una patente de Microsoft que ya ha peleado en la corte (contra TomTom). ¿Por qué dafa implementar un filesystem con tantas limitantes cuando hay alternativas FLOSS mucho mejores?
  • No tiene journal como NTFS, ext3 o ReiserFS, por lo que es propenso a corrupción de datos si hay una falla repentina

Ahora volvemos al uso de un disco duro externo en el PS3. Ver películas, fotos y escuchar música es lo que principalmente deseamos hacer con este dispositivo. No veo tampoco problema con permitir respaldar los savestates, o las compras hechas en la PSN por si se quiere o se necesita formatear el disco duro interno del PS3. Pero con la limitante de 4GB por archivo, hacer streaming de un DVD completo esta fuera de la jugada, mucho menos un Blu-Ray. El atractivo de usar una unidad externa de almacenamiento pierde relevancia simplemente por el uso de FAT32. ¿Es esto lo que Sony quiere? Porque de ser así, lo han logrado.

Esto se puede resolver con un update en el Firmware. En vez de poner estrellitas titilantes en el fondo, ¿Podrían poner algo realmente de valor por favor?

:OOOOOOOOOOOOMG GMail PUSH para el iPhone!!!

Rafyta August 11th, 2009 gadgets 3 comentarios

Así es. Los usuarios de iPhone finalmente hemos perseverado a pesar de la adversidad, la tiranía de Apple y las risitas de los desertores que se fueron a BlackBerry o Android.

A cambio de un dolarín, los vatos de Tiverias Apps nos dan una app que notifica la llegada de un nuevo mail usando la tecnología IMAP-IDLE, una de las formas de implementar push. Gpush -la app en cuestión- YA ha sido aprobada por Apple, y sólo falta que los Tiverianos arreglen unos issues con sus servidores para que finalmente podamos probar el néctar de los dioses del Olim… ¿Cupertino?

Update: no lo pude usar porque requiere 3.0+ chale =(

Jailbreak para iPhone 3GS liberado

Cesar July 3rd, 2009 aplicaciones, gadgets, hacks, hax0rs 6 comentarios

George Hotz (a.k.a. mi héroe) lo ha conseguido de nuevo. Hoy ha liberado una herramienta que hace uso de un exploit documentado en posts anteriores y logra permitir acceso libre al sistema de archivos del nuevo iPhone 3GS. En otras palabras ya hay jailbreak para iPhone 3GS.

La aplicación se llama purplera1n, sólo funciona bajo windows (no 7) actualmente y necesita de la última versión de iTunes. Conectas tu iPhone 3GS, presionas “make it ra1n” en la aplicación, esperas a que reinicie y ejecutas Freeze en el iPhone, que es el installer app de purplera1n.

Sobra decir que todo esto es gracias a George Hotz y sus 31337 h4×0r skillz.

Jailbreak del iPhone 3GS

Cesar June 28th, 2009 cracking, gadgets, hacks Haz un comentario

Geohotz lo ha conseguido de nuevo y muestra una captura de pantalla de su iPhone 3GS corriendo homebrew: una terminal.

El Jailbreak aún no se hace público, pero esperen eso muy pronto.

Websites para iPhone en FA

Rafyta June 20th, 2009 browsers, gadgets, tips Haz un comentario

Para los que les da flojera estar revisando los “frameworks” que hay para hacer sitios para iPhone, y tampoco los convencen los servicios en lìnea de 25 dlls al mes (que de todos modos requieren mucha edición), aquí tienen una planilla sencillísima y muy efectiva para hacer de las suyas.

Es un solo HTML con estilos en el <head> (que seguramente querrás mover a una hoja separada). Me tomó sólo algunos minutos hcerla y no está nada mal como una base sobre la cual empezar. Las explicaciones necesarias vienen en la misma plantilla. Si haces algo con ella, nos daría gusto verlo, y que nos dejaras tu link en los comentarios.

Plantilla web para iPhone

Posts anteriores