Geek & Roll » browsers

Falso proxy, o como ver That Metal Show desde fuera de USA

Cesar August 29th, 2011 browsers, internet, tips 6 comentarios

Esta es la situación: Domingo por la tarde, nada que ver en la TV. Me entero que That Metal Show tiene un episodio con Tony Iommi, pero el stream no se puede ver a menos que te encuentres en Estados Unidos. ¿Como saben que no estoy en Estados Unidos? con tu IP, que puede ser geolocalizada. El player de Flash que utilizan en el sitio obtiene tu IP, lo busca en una base de datos y determina que no, no estas en Estados Unidos, así que te quedas sin That Metal Show.

La solución a esto es, obviamente, tener una IP de Estados Unidos. ¿Pero como podemos obtener una? Una posible solución es un servidor proxy dentro de Estados Unidos. El servidor proxy pedirá el contenido por nosotros y nos lo reenviará. Sin embargo estos servicios generalmente tienen un costo. Antes estaba hotspotshield, pero ahora los players (por lo menos el que usan en VH1) saben como detectar cuando se está usando un proxy y no nos entrega nuestra dosis semanal de Heavy Metal.

¿Cómo lo detectan? les presento al encabezado X-Forwarded-For. Este encabezado normalmente lo agrega un servidor proxy, para decirle a los sitios Web la IP original que pidió el contenido. Seguramente el programador de player checa si viene el encabezado y de ser así, de ahí obtiene el IP, lo revisa y determina que estas fuera de los Estados Unidos. No Streaming For You!

¿Que hacemos? Si pudiéramos modificar nuestra petición para incluir dicho encabezado, y que el encabezado en vez de reportar nuestro IP real, reportara un IP dentro de Estados Unidos, con eso sería suficiente. El player al ver que viene el encabezado tomaría esa IP en vez de la original, y sería una IP de Estados Unidos.

Gracias a Firefox y un plugin llamado Modify Headers, lo anterior es bastante posible y funciona. La potencia de Firefox al descubierto: podrá ser más lento que Chrome, pero sus extensiones son más potentes. Instalamos la extensión, la abrimos y agregamos un nuevo filtro:

  • Action: add
  • Header name: X-Forwarded-For
  • Header value: cualquier IP de Estados Unidos. P.Ej. 8.8.8.8

Mientras tengamos la ventana de modify headers abierta, podremos ahora visitar el sitio de That Metal Show y verificar que nos entrega el stream sin problemas. Si queremos hacer esto permanente, simplemente vamos al tab de Options y seleccionamos Always On, aunque no lo recomiendo. Lo mejor es solo activarlo cuando queramos ver el stream.

Otra vez Firefox y sus extensiones al rescate. Eso me recuerda por qué siempre tengo Chrome y Firefox instalados, y aunque uso Chrome para navegación del día a día, Firefox no ha sido desplazado del todo y me preocupo por mantenerlo actualizado. En mi mente Internet Explorer, Chrome y Firefox son como los tres sistemas operativos principales:

  • Internet Explorer es como Windows: En sus versiones anteriores hasta vergüenza te debería de dar usarlo, aunque ha ido mejorando poco a poco y su versión más nueva no está del todo mal. Aún así, lo uso por necesidad y no por gusto.
  • Chrome es como OSX: Sexy y rápido. Todo un trend setter. Cuando salió todos admiraron su interfaz de usuario, y ahora los otros navegadores están implementando esos mismos conceptos. Aunque ya que pasa el efecto WOW de su interfaz, te das cuenta que le hacen falta cosas que lo hagan más personalizable y extiendan sus capacidades.
  • Firefox es como GNU/Linux: No es el más bonito definitivamente, pero es muy potente. La elección de los geeks, con extensiones que te permiten modificar cada parte del navegador a tu antojo y hacer tan simple o complejo como tu decidas. El poder está en tus manos.

Cargando recursos binarios desde JavaScript

Desde que Google mostró al mundo su port de Quake 2 a JavaScript usando GWT, no me podía sacar una pregunta de la cabeza: ¿Cómo hacen para cargar los recursos (como por ejemplo los modelos de los jugadores, o los niveles) desde el servidor al cliente, para su uso por el motor del juego en JavaScrip? ¿Es posible obtener archivos binarios del servidor, guardarlos en el sistema de archivos local, y ejecutarlos finalmente por una aplicación en JavaScript? La respuesta obviamente era sí, pero no sabía cómo.

Pero una consulta al código fuente del proyecto quake2-gwt aclaró las dudas. El secreto es sobreescribir un tipo MIME, lo que le permite al objeto XMLHttpRequest recibir respuestas binarias en vez de texto, para lo cual es más comúnmente utilizado.

function load_binary_resource(url) {
  var req = new XMLHttpRequest();
  req.open('GET', url, false);
  //XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
  req.overrideMimeType('text/plain; charset=x-user-defined');
  req.send(null);
  if (req.status != 200) return '';
  return req.responseText;
}

En GWT necesitamos hacer uso de una funcion JavaScript nativa (JSNI) para lograr lo mismo:

private native void overrideMimeType(XMLHttpRequest req, String mimeType) /*-{
    req.overrideMimeType(mimeType);
}-*/;

Y finalmente crear un objeto XMLHttpRequest, hacer la petición y procesar los datos binarios en el cliente:

XMLHttpRequest req = XMLHttpRequest.create();
overrideMimeType(req, "text/plain; charset=x-user-defined");

req.setOnReadyStateChange(new ReadyStateChangeHandler(){
    //procesar la respuesta binaria
});

req.open("GET", "archivo.binario");
req.send();

Para convertir la respuesta en un InputStream, en este caso utilizando GWT y clases de emulación io y nio que tomé prestadas del proyecto quake2-gwt:

response = xhr.getResponseText();
byte[] responseBytes = new byte[sbb.stringToByteBuffer(response).remaining()];
InputStream inputStream = new ByteArrayInputStream(responseBytes);

En este punto pueden usar el InputStream como lo harían en un programa Java tradicional, por ejemplo si cargaron los bytes de una imagen, pueden aplicarle filtros a-la-photoshop, en tiempo real, en el cliente, sin necesidad de procesamiento en el servidor mas allá de descargar la imagen.

Opera: ¿y yo qué?

Boynas September 2nd, 2009 browsers, invitados, opinion 6 comentarios

operamini

Se esta escribiendo esto cuando desde el lunes la noticia ha aparecido en todos los blogs de tecnología; la diferencia es que este post no es para anunciar la llegada del navegador sino para hacer notar que a todos nos ha valido madre.

Acabo de ver un post en lifehacker que habla de: “Como agregar un botón para bookmarks en Google Chrome“.

No se como explicarlo, pero me llene de “anti-jubilo”. La comunidad esta apoyando un proyecto comunitario que a fin de cuentas sirve solo para que google siga lucrando. Notese que no tengo absolutamente nada en contra de Google (bueno, a veces asusta un poco el hecho que son tan poderosos y podrian manipular TODA la información que nos llega y que no podemos hacer nada para remediarlo, pero aparte de eso, no pasa nada, “me caen bien”).

¿Que pasa con Opera? Pues eso.. ¿Que pasa? Yo les pregunto.

Opera ha innovado, y si no me equivoco, ellos inventaron los page previews, tabbed windows, sidebars/plugins (ellos le llaman widgets), son bien cabrón conscientes con los estándares web y su navegador móvil es el mejor y mas rápido. (por cierto, el browser para el Wii ya es de a grapa y es Opera)

Si, no esta patrocinado por una fundación. No esta diseñado y desarrollado por una organizacion sin fines de lucro, pero google menos.

“¿Por que no usas opera?”
“Ahhh no, es mucho sacrificio… A veces llego a una pagina, hay algito rotito o bien tengo que ajustar las fuentes”

Pues bueno, yo se los digo, esto no es gracias a que ellos no son estándares, sino porque los sitios están diseñados para cumplir caprichos de los que no utilizan estándares (yo no soy naidien en esta comunidad para decir esto, ustedes saben mejor que yo). Y bueno, esta bien. Pero porque el sacrificio se hace por Google Chrome y no por Opera… Al fin y al cabos al parecer en Chrome necesitas incluso manualmente crear tu botoncito de bookmarks. Para correr chorme, Uttttta madre, vamos a hacerle jalar los plugins de firefox, vamos a agregarle esto y lo otro. Que lo hagan ellos. Opera realmente entrega y nosotros no tenemos que probarlo, solo usarlo!

Creo que (como siempre) gracias a la mercadotecnia, estamos siendo injustos.

Problemas de conexión con Google Chrome

Axel August 23rd, 2009 aplicaciones, browsers 5 comentarios

Tengo casi dos semanas usando casi exclusivamente Google Chrome, y el único problema que le he encontrado hasta hoy es el recurrente “Oops, this link appears to be broken”, que me aparecía a cada rato. Siempre estuvo claro que el error era del browser y no de los links, pues al volver a solicitar la página esta cargaba rapidito.

Si has tenido este problema, es fácil de solucionar:

  1. Click al ícono de la llave que aparece hasta la derecha de la barra de direcciones.
  2. Entra a opciones
  3. En Avanzadas, desmarca “Utilizar precarga de DNS para mejorar el rendimiento de carga de páginas”
  4. Si andas extra-rudo, desmarca también “Mostrar sugerencias para errores de navegación”

Veámoslo con unas bonitas capturas de pantalla (click para ampliar):

google-chrome-fix

Y eso es todo. Después de aplicar los cambios, Chrome funciona de maravilla.

Firefox 3.5 listo para consumo masivo

Rafyta June 30th, 2009 browsers, internet Haz un comentario

El mejor browser del mundo ya está disponible en versión 3.5 en tu plataforma e idioma preferidos. Es una lástima que no soporte adecuadamente los dominios unicode, como Safari 4, el otro mejor navegador del mundo (cambia según si le preguntas a Steve Jobs o a cualquier geek no-maquero).

Cálenle: http://iñor.com

Firefox 3.5 lo cambia a algo espantoso, pero Safari 4 lo pone tal cual.

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

Internet Explorer 8: Que no te preocupe

Rafyta March 23rd, 2009 browsers 4 comentarios

Si la marabunta de comentarios negativos (pero bastante reveladores) sobre IE8 te tiene un tanto preocupado porque eres un dev o designer bien portadito que hace todo con estándares, y no quieres que un navegador mediocre arruine todo tu esfuerzo, relájate.

En php puedes usar este snippet que se activa sólo en IE8 para mostrarle tu meta-tag que identifica el sitio que estás diseñando como standards-compliant:

<?php

if (strpos($_SERVER['HTTP_USER_AGENT'], ‘MSIE 8′)){
echo “<meta http-equiv=\”X-UA-Compatible\” content=\”IE=8\” />\n”;
}

?>

He ahí el fin a toda tu miseria. Césaro tiene algo similar para .htaccess, que aplica site-wide al mismo tiempo; a ver si rola el código.

Internet Explorer haciendo lo que sabe: fallar.

El legado de Internet Explorer

O cómo años de cochinada te aplican la ley de Herodes: o te chingas, o te jodes.

El día de hoy se publicó la versión 8 del navegador más utilizado en el mundo: Internet Explorer. Más utilizado no necesariamente significa mejor, aunque en este caso definitivamente es una versión superior a su antecesor en muchos aspectos. IE8 es más seguro, más rápido y más respetuoso de los estándares; y tiene que serlo, años de negligencia y una creciente inconformidad con la oferta de Microsoft provocaron que Firefox se convirtiera en una seria amenaza y navegadores alternativos se colocaran en el ojo del público en general (Opera, Safari), además de Chrome, el nuevo navegador de Google, todo un trendsetter. En Ars Technica hacen una excelente reseña de las nuevas características de IE8.

Pero años y años de ignorar estándares, o inventarse los propios, puso a los ingenieros de Microsoft en una terrible disyuntiva: o arreglamos nuestro cochinero y en el proceso nos cargamos a todos los desarrolladores Web que pasaron incontables horas depurando para IE, o seguimos manteniendo el cochinero y de alguna manera tratamos de que no suceda más. Eligieron lo segundo (para sorpresa de nadie, creo yo, si la historia de compatibilidad de Windows ha servido de algo).

La mecánica que siguieron es la siguiente (muy simplificada): hacemos a IE8 lo más apegado a estándares que se pueda (muy bueno), y proporcionamos a los usuarios la posibilidad de renderear el sitio en modo compatibilidad por si rompemos algo (so so). Pero rápidamente se dieron cuenta que pedirle a los usuarios presionar un botón para que un sitio se vea bien, siendo que con la versión anterior no tenían problema, y especialmente tomando en cuenta que fueron ellos mismos (Microsoft) los que provocaron que esos sitios estuvieran llenos de parches, hacks y workarounds para funcionar bien con IE, no era suficiente.

En respuesta a esto, y para tratar de aliviar la situación, proporcionaron un mecanismo para indicarle al navegador cómo renderear el sitio sin necesidad de presionar botón alguno. Completamente transparente para el usuario. La solución es enviar un encabezado HTTP especial en la respuesta, de esta manera el navegador sabe que hacer.

Ahora, la solución puede parecer relativamente fácil, pero el trabajo lo llevan los desarrolladores Web. En primera, son ellos los que año tras año, y versión tras versión han tenido que sacarle la vuelta a los modos irrespetuosos de IE. Ahora IE viene y te dice “Ok, ahora sí funciono como se supone, pero tienes que hacerme este último favorsito…”. Y la ironía no sería tan graciosamente torcida de no ser que IE deja por fuera la etiqueta canvas, al mismo tiempo que discontinúa VML y le da un certero golpe a muchos sitios y librerías que implementan cosas como esquinas redondeadas con VML cuando el usuario usa IE (y canvas o SVG cuando no).

En lo personal el problema me pegó al probar averalcine.com en IE8. Lightbox no funciona, tan solo en modo de compatibilidad. Y ni modo, a mandar un encabezado HTTP que no tendría porque.

Más que una guerra de navegadores

Cesar September 9th, 2008 Google, aplicaciones, browsers, javascript, web2.0 1 comentario

En OSNews publicaron un artículo exclusivo sobre Chrome y las “verdaderas” razones por las que Google decidió lanzar su propio navegador. Es una lectura interesante. Traduzco del artículo:

Esa plataforma [HTML + Javascript] simplemente no fue hecha para hacerlo [aplicaciones Web] y está claro que no durará mucho. Y no, Google no podrá compilar Javascript a código nativo y hacerlo rapidísimo aún cuando ellos digan que si. Hay razones técnicas para eso y la única manera de hacerlo es cambiarse a un ambiente de tiempo de ejecución, justo como lo hace Flash, Silverlight y Java (y es no es nativo ya que ejecutan máquinas virtuales)

También:

Ellos [Google] probablemente aprendieron la lección mientras que observaban a Steve Jobs batallar por 8 años con su muñeca OS X y aún así depender del iPod para que le salvara el trasero. 8 años y aún tiene el ¿que? ¿2% del mercado?

El artículo completo en OSNews.

Google Chrome screenshot

Rafyta September 2nd, 2008 aplicaciones, browsers, internet 2 comentarios

Siguiendo el post de Axel, les presumo mi screenshot de Google Chrome. Hasta ahora jala bastante bien. Una de las preocupaciones era el espacio vertical; creo que lo libraron bastante bien.

No sean nacos, bájenlo de aquí.

chrome1.jpg

Posts anteriores