Geek & Roll » 2010 » February

Everlasting Flame y Bold 2 (OS 5)

Cesar February 26th, 2010 aplicaciones, tips, utilidades 11 comentarios

Everlasting Flame icon

Muchos usuarios han reportado problemas al utilizar Everlasting Flame con la BlackBerry Bold 2. Más particularmente, con el OS 5. Dicho problema no se presentaba en versiones anteriores a la 1.3.

El problema ha sido resuelto en la siguiente versión (2.0) sin embargo no se encuentra lista para consumo masivo. Por lo mismo, he subido de nuevo la versión 1.2 ligeramente modificada. Esta versión ha sido probada en la Bold 2, pero debería funcionar en cualquier dispositivo con OS 5.

Pueden descargar la versión 1.2 en el sitio oficial de Everlasting Flame. En la sección de descarga se encuentra la versión 1.2 para dispositivos anteriores.

Sus comentarios son bienvenidos.

Sonora al Software Libre y la desinformación

Cesar February 21st, 2010 FLOSS, blogs, linux, opinion, windows 10 comentarios

Por medio de Google Buzz me enteré de una noticia que me sorprendió de manera muy positiva: Sonora se pasa al Software Libre para sus sistemas de información. El Buzz en cuestión es de mi amigo y colega Roberto Ramirez, y linkea a un blog de Martin Llamas.

Cuando leí el post por primera vez, pensé que era una broma. Al leerlo por segunda ocasión y checar otros posts del mismo blog, me di cuenta de que no, no era una broma. Este señor esta convencido de que el cambio al software libre es una pérdida de dinero, ya que todo lo que se ha pagado hasta ahora en licencias se va a tirar a la basura, como si el pago de licencias fuera sólo una vez en la vida y ya.

El autor cita varios problemas con este cambio, veamos:

  • Se van a tirar millones de pesos a la basura, porque las licencias que ya pagamos ya no nos van a servir. Bajo esta lógica, entonces pagar renta tiene mucho sentido y nunca deberíamos de cambiarnos a nuestra propia casa, ya que estaríamos tirando a la basura millones de pesos pagados en renta.
  • Cuando pierda el PAN el siguiente sexenio, se van a volver a comprar las licencias y por lo tanto es pura gastadera de dinero. Haciendo a un lado toda la cuestión de ver el futuro, me sorprendería que los sistemas informáticos se cambiaran otra vez a sistemas privativos sin una buena razón. Si la razón es para apuntar el dedo y decir “es que los del otro partido…” eso dice mucho de la calidad de la gente que entrará al nuevo gobierno.
  • El software libre no es seguro, porque sólo se encuentra instalado en el 1% de las computadoras del mundo. Como si el software mágicamente se hiciera más seguro por cada instalación nueva. Por citar algunos ejemplos, el plugin de flash se encuentra instalado en la gran mayoría de las computadoras de escritorio del mundo, y es bien conocido que su historial de seguridad es por demás malo. Un contraejemplo es el servidor HTTP Apache, el cual es el servidor HTTP más usado en el mundo y es software libre, ciertamente más del 1% de los servidores HTTP lo tienen instalado. La seguridad llega por buen diseño, revisiones continuas y parches a tiempo, no por la base instalada.
  • Después lanza una serie de ejemplos en donde han salido a la luz errores en programas libres, en donde los parches han tardado bastante en llegar. El autor no proporciona ninguna liga, y dice que su fuente es “difícil de encontrar” pero no dudo que esos errores hayan existido. Lo que no se dice en el post es que en los sistemas de Microsoft que tanto pregona, hace poco se parchó un error en el sistema operativo Windows que tenía 17 años de vida. ¿O que? ¿No sabía? ¿Cuando viene de Microsoft es justificado?

Y bueno, después el autor habla de interoperabilidad, como si tener todos tus datos en un sistema privativo fuera la mejor idea. Hay en el post una sarta de opiniones desinformadas que sinceramente da tristeza que alguien quiera hacer un punto a favor del software privativo en el gobierno, siendo tan ignorante de la alternativa.

Señor Martin Llamas, si no sabe mejor limítese a decir “Chiquitibum a la bin bon ban, Microsoft! Microsoft! RA RA RA!!!!”

Ampache Stremeara Tu Musica Hasta Tombuctú

Boynas February 20th, 2010 aplicaciones, tips 2 comentarios

¿Estás aburrido este fin de semana? ¿O simplemente necesitas una manera de tener acceso a tu música (y de video) desde cualquier parte del MUNDOOO, o bien compartírsela a tu amigo en Tombuctú?

Hay muchas maneras de accesar archivos remotamente: servidor FTP, servidor web, algún servicio externo, pero de alguna manera he probado todas y creo que esta es la más chingona, y bueno, al menos para música.

Empecemos enumerando las posibles alternativas:

Orb – Es un servicio que te permite accesar a tus archivos multimedia y hasta televisión local, si tienes conectado el cable o antena a tu PC. Utiliza un cliente que reside en memoria el cual monitorea el contenido multimedia de tus discos duros y también “llama a casa” con tu IP y otras cosas, para que puedas accesar a tus datos utilizando el portal en myorb.com, ya que la mayoría del tiempo estas detrás de un firewall.

Slimserver – Este servidor con licencia GNU, fue particularmente creado para darle soporte a clientes de hardware, es decir, lo instalas en tu servidor para poder escuchar la música en tu cliente hardware; Slimdevices. Esta compañía fue comprada por Logitech, pero el desarrollo de slimserver, el cual ahora se llama Squeezebox server, sigue dando soporte a softclients por medio de cualquier navegador web. El problema es que afuercitas necesitas un “fat client” para poder aterrizar el stream; Algo como Winamp, WMP,  cualquier otro media player que acepte URLs.

Apache/Songbird – Si, ya se! Este es un servidor web, y pues que tiene de chilo utilizarlo para que te despliegue el contenido de tus carpetas. Por más bonito que estén los index de tu Apache, no sirven de nada si no tienes Songbird. Este tiene la abilidad de crear playlists desde websites. De manera que si navegas tu index te crea listas, desde las que puedes streamear o bajar directamente. Esta fue mi solución por mucho tiempo, y es buena tenerla como respaldo. El problema es que los archivos no están indexados en una base de datos, entonces tienes que realmente ordenar tu estructura del sistema de archivos y olvídate de tener un icono con una lupa para buscar algo.

Y aquí fue donde me hice a la tarea de investigar otras soluciones. Ahora ya tenía requisitos:

  • La solución tenía que implementarse en mi casa
  • Debería tener una forma de indexar los datos para la búsqueda y para la creación de playlists
  • Puede ser usado con “fat clients” o directamente desde el navegador
  • Darte la habilidad de poder bajar las canciones, ya sea individualmente o en grupo
  • Posible utilización desde dispositivos móviles.

Encontre dos posibles candidatos: Ampache y Jinzora.

Para terminar pronto, Jinzora apesta, al menos para mí. La documentación es tan mala como escasa. Prácticamente nula. Y una vez instalado, buena suerte importando toda tu música. Simplemente no la importa toda y ni siquiera te dice por qué.

Ampache. Alertas con el nombre ehh!, no es ni Tepache, ni tampoco Empache, ni la combinación de las dos: Empache de tepache.

ampacheMuy parecido a la idea del jizora ese pero con la diferencia de que este sirve.

Con Ampache puedes stremear tu música, bajarla, y crear playlists. Todo esto desde cualquier navegador. Utilza XSPF para hacerlo desde el navegador o puedes utilizar cualquier reproductor para streamear desde URL (incluso el cerrado itunes).

Lo que hace a Ampache mas poderoso es la implementación de su API, para que tengas control del contenido de tu servidor desde digamos, tu celular o un cliente, así no solo streameas sino puedes navegar por el contenido de tu base de datos. Así como si tuvieras los archivos localmente.

Además, tiene soporte para Scrobblear a Last.FM y existen algunos clientes que funcionan perfectamente para dispositivos móviles como Android (la neta es el único que he probado)

“Boynas, debiste de haber sido un vendedor de aspiradoras o de enciclopedias en tu otra vida, porque estoy completamente vendido con la idea. Dime como instalarlo YA!”

Ampache es muy ligero, la instalación es rapidísima, es mas ni siquiera te tienes que meter a MySQL a crear las bases de datos. Solamente descargas el archivo en un folder público y navegas a él y proporcionas credenciales para tu MySQL y punto.

Después creas tu catalogo de canciones. Las cuales, si las tienes bien identificadas con su respectivos ID tags, no necesitas nada, sin embargo el sistema también puede identificar los tags por medio de la estructura de carpetas.
Requisitos

  • Servidor Apache con PHP y MySQL (Linux o Windows)
  • Redirección de puertos en tu Router/Firewall
  • Tu aburrida-apunto-de-ser-divertida colección de música

Baja la última versión estable, de ampache.org; Ahora, si celebraste la caída del “Perro Aguayo” es porque no eres “técnico”, sino “rudo”; tu elección seria el “nightly snapshot”.

Estaba a punto de escribir instrucciones pero me di cuenta que sería una especie de falta de respeto a la comunidad que ha batallado tanto para crear documentación, la cual en este proyecto en particular fue clave para adoptar Ampache y no otra cosa. (http://ampache.org/wiki/install)

Eso sí, después de que tengan todo instalado, liberen el API para que tenga contacto con el mundo exterior. De esa manera podrán accesar la base de datos y las canciones desde tu Android (Amdroid) o incluso iPhone (amphone), o bien algún cliente como Amarok o winamp. Para hacer esto, te vas a la cejilla “admin” y a ACL para configurar o agregar un “Access List” para que las IPs exteriores puedan accesar el API. Asegúrate de abrirlo lo suficiente como para que un IP de Tombuctú pueda tener acceso.

Nota del autor: Si alguien sabe una manera menos pendeja de decir “stremear” en español diganmelo por el amor de Dios.

Rentar películas es molesto y obsoleto

La única razón por la que rento películas es por los BluRay. No que sea imposible descargarlos, pero el PS3 no soporta archivos MKV, y mi laptop no es lo suficientemente poderosa como para reproducirlos por medio de streaming. Así que la única manera que tengo para ver películas en HD en el PS3 son los BluRay.

Probablemente los lectores de este blog coincidan con que la idea de rentar una película, es decir ir al lugar, ver si tienen una copia disponible (o ver las portadas para elegir una), pagar y regresar a tu casa, sólo para unos días después tener que regresar al establecimiento a devolverla a tiempo o de lo contrario ser penalizados con recargos… la idea es un poco obsoleta, poco práctica, algo que debería ser del pasado.

Sin embargo lo sigo haciendo, por las razones antes mencionadas. Y es extremadamente idiota que cada vez que voy a rentar al mismo establecimiento me hacen las mismas preguntas: ¿Cuál es su teléfono? ¿Desea obtener la promoción de socio distinguido?

De las dos preguntas, la que más me molesta es la primera. En teoría es para prevenir que otra persona rente con tu misma credencial, pero entonces ¿para qué piden credencial, si no basta como método válido de identificación? Además de la credencial, me piden una identificación oficial y mi teléfono. Ni en el cajero me piden tanta cosa para sacar dinero. Además no aceptan otro teléfono que no sea fijo, así que la gente como yo que no tiene teléfono fijo en su casa tiene que dar el teléfono de un conocido.

Si van a ofrecer un servicio que está destinado a compartir la fortuna de la venta de CDs, ya de jodido deberían de hacerlo un poco más amigable. Yo se que cambiar al modelo digital de la noche a la mañana no va a suceder, pero en el inter podrían:

  • Tener kioskos donde consultar el catálogo de películas. Que te indique si la tienen en existencia, en que parte de la tienda está, si hay copias disponibles, etc.
  • El mismo kiosko lo podrían integrar con servicios de la Web para recomendación de películas. Y por favor no cometan la estupidez de utilizarlo para recomendar los estrenos, es suficiente con los carteles de afuera, las 2 millones de copias en los estantes de estrenos y los folletos en caja. No quiero ver comerciales, quiero una recomendación sincera.
  • Y el mismo servicio del kiosko, pero desde los smartphones más populares sería aún mejor.
  • Ofrecer modelos alternativos de suscripción. ¿Un Netflix local?

No me queda duda que en el futuro cercano, la renta de películas pasará a ser digital en su mayoría, quedando algunos nichos como los pequeños videoclubs a la “Be Kind Rewind“. En México nos queda el reto de los costos de las telecomunicaciones, para hacerlas más accesibles a la población, a su vez haciendo económicamente viable esto de los servicios de video digital.

Mientras todo esto sucede, seguiré bajando películas por medio de bittorrent, viéndolas en el PS3 y rentando BluRay… hasta que el hack de Geohot permita soporte para MKV, entonces sí al demonio con Blockbuster.

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!

Opiniones de los G&R’ers sobre Google Buzz

Cesar February 10th, 2010 Google, aplicaciones, geekandroll, opinion, web2.0 5 comentarios

El tema caliente de la semana es Google Buzz. Para muchos un quierosertwitter, para otros Twitter como debió ser desde el inicio. ¿Pero que opinan los Geek&Rollers del tema? Veamos:

Axel

No lo he checado porque me enmulé porque no hay en google apps for your domain, pero lo checo y te envío la opinión.

Rafyta

O sea que como no pego el wave a ver si con esta onda se arma?

Boynas

Cuantas veces hemos discutido en twitter y hemos sentido que es molesto para los que siguen nuestro timeline (respeto a los demas en contra de la funcionalidad).
La integracion a otros servicios tanto de fotografias, videos y contenido en general, se me hace menos forzada que la de twitter. Tiene mas features nativos.

Lo mas importante es que es mainstream. No necesito enseñar a un amigo a usarlo, es simple y amigable. A mi me interesa seguir a todo mundo no solo a geeks o a media freaks pesudo-periodistas, que son los que se meten a twitter. Esa es la unica razon por la que tengo FB!
Creo que Buzz es como twitter made right, tiene las threaded comments de FB sin las molestas apps; Sin embargo es ordenado no necesitas brincar de timeline en timeline para seguir una conversacion en la que comento una persona que no conoces.

Buzz esta tapando ese gap. Es lo que debio haber hecho twitter con su red de usuarios hace mucho tiempo.. Es perfectamente un twitter killer. (no mames, hasta rima)

César

Tiene más sentido que Twitter, para mi. Gmail siempre esta abierto en mi navegador. Ahora nomas falta que todos dejen de usar Hotmail y se pasen a Gmail, cosa que no se por qué no ha sucedido todavía. Ah, y que le arreglen eso de que se autorefresca el sitio pero te sigue marcando items no leídos. Y una opción para que cuando leo algo en Buzz, no me aparezca como no leído en la bandeja de entrada de Gmail.

Lo mejor de todo es que, en mi opinión, los clientes exclusivos van a perder relevancia, haciendo mucho más relevantes cosas como lo que está haciendo Ubuntu con su Me Menu y Gwibber. Si todo sale bien, vamos a estar un paso adelante. Eso si, su uso desde el Web siempre va a ser una mejor experiencia, como Google nos tiene acostumbrados.

¿De acuerdo? ¿Desacuerdo? Usen la caja de comentarios. Nos vemos en Buzz.

Desarrollo de software en un mundo post-agil

Cesar February 9th, 2010 opinion, programacion, tips 1 comentario

Del artículo:

Un proceso es un instrumento de autoridad. Un proceso es una proclamación de qué hacer, cómo debemos de hacerlo y en qué orden. Un proceso es conservador, jerárquico y formal. Un proceso mantiene el status quo. Es la administración imponiendo orden y control desde arriba. Si los procesos fueran un partido político, sería de derecha.

Es fácil ser seducido por las bondades de la metodología ágil. Promesas de equipos auto suficientes, entregas frecuentes y listas para producción, Yippi-kay-ay. Demasiado proceso y en vez de avanzar nos quedamos llenando reportes y formas; muy poco proceso y todo se vuelve un manojo de actividad descontrolada y poco empuje (y entrega).

El artículo discute la etiqueta “ágil” que tanto se usa en administración de proyectos de software hoy en día. Por ahí leí que “scrum” (intercambiado por ágil en esta ocasión) no es una bala de plata para tener proyectos exitosos. Existen factores como la experiencia y motivación del equipo, así como también la naturaleza del proyecto, por lo que una aproximación orientada a personas tiene más sentido que orientado a procesos, y viceversa.

Lean el artículo fuente (en Inglés), y los invito a dejar sus comentarios sobre el tema, experiencias personales, etc.

Estamos de vuelta!

Cesar February 3rd, 2010 geekandroll 2 comentarios

Debido a que ocurrió un overflow cuando intentamos pagar el dominio, GoDaddy no permitió el acceso a este blog por medio de nuestro dominio. Los detalles no los se, solo que el BigInt que utilizan para guardar la cantidad del pago no alcanzó, y por tanto el overflow, causando todo tipo de problemas.

Gracias por su paciencia. Estamos de vuelta, keep on Geek&Rolling!