Geek & Roll » browsers

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 5 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

Google Chrome y la amenaza a la objetividad

Axel September 2nd, 2008 Google, aplicaciones, browsers, opinion 9 comentarios

chrome.png

Se viene Google Chrome, el por años rumorado browser de Google. Habrá que esperar, pero las repercusiones de esto serán, creo yo, grandes.

Primero, habrá que ver que tanto se mueve el tapete de Mozilla Firefox. La mayoría de los usuarios de este último somos una bola de geeks, y algo que distingue a gran parte de este grupo es la afición casi desmedida por Google. ¿Qué podrá más, el poder y la capacidad de personalización de firefox o la seducción de la Angelina Jolie de las empresas de software? Seguramente Chrome vendrá cargado de facilidades para utilizar las aplicaciones web de Google, y eso es un golpe duro, muy duro para Mozilla.

Mis primeras impresiones (hasta ahora sólo con screenshots) no son muy emocionantes. La UI extra-simple de las aplicaciones web de Google parece —como era de esperarse— haberse pasado a este soft de escritorio, lo que es buenísimo, pero otras decisiones como el subir a las pestañas en la jerarquía de manera que cada una tiene su barra de direcciones es algo que sinceramente me incomoda. Claro, bajo esta lógica funcionan todos los navegadores con pestañas —la barra de dirección cambia cuando cambias de pestaña—, pero no sé si el hacerlo obvio visualmente sea una buena decisión.

Habrá que ver. Al momento en que leas esto probablemente tu lector de feeds esté plagado de reseñas de Chrome. Ojalá sean buenas, y sobre todo ojalá logremos mantener la objetividad.

Posts anteriores