jQuery Graceful Websocket es un plugin jQuery que nos permite comunicarnos con el servidor usando websockets de HTML5. El problema es que tan solo Chrome permite los websokets (creo que Firefox los tiene desactivados por defecto por temas de seguridad), además se necesita que el servidor los pueda tratar, por lo que este plugin permite una alternativa mediante Ajax transparente al desarrollador.
// Si el servidor no admite websockets sustituye el ws:// por http://
var ws = $.gracefulWebSocket("ws://127.0.0.1:8080/");
// Envía datos al servidor.
// Si el servidor no admite websockets lo envía mediante POST
ws.send("message to server");
// Recibe datos del servidor
// Si el servidor no admite websockets hace un polling mediante GET
ws.onmessage = function (event) {
var messageFromServer = event.data;
};
Es cierto que Google Analytics está muy bien, pero hay alternativas y puede que nos den lo que buscamos.
Ofrece privacidad para los usuarios, estadÃsticas básicas, páginas más populares, sitios que nos referencian, información sobre el navegador y el sistema operativo del usuario, posibilidad de excluir de las estadÃsticas visitas según caracterÃsticas (IP, agente, …), importar estadÃsticas de Counterize y facilidades para la migración, interfaz AJAX y otras caracterÃsticas más.
Otra funcionalidad que hay que destacar es la posibilidad de integrarlo con plataformas del estilo de WordPress, Drupal, trac, … FireStats
VÃa / dzone
Para aquellos que quieran meterse en el mundo de AJAX usando Java, Sun nos proporciona toda la información que necesitamos para introducirnos en este mundo. Desde iniciación a AJAX mediante artÃculos que hablan sobre la importancia de AJAX, hasta a videos, pasando por los tÃpicos ejemplos y componentes que podemos reutilizar.
Ya no hay excusa para los desarrolladores de Java de no meterse en el mundo AJAX. AJAX and Java
VÃa / Digg
I’ve already covered some subtle HTML5 improvements like placeholder, prefetching, and web storage. Today I want to introduce a few new INPUT element types: email and url. Let’s take a very basic look at these new INPUT types and discuss their advantages.The SyntaxThe syntax is as basic as a text input; instead, you set the type to “email” or “ …
En algunas ocasiones es necesario añadir contenido al calendario que te ofrecer el datepicker de jQuery UI, por ejemplo añadir un combo que indice “horario mañanas/tarde”. Para conseguirlo será necesario ‘toquetear’ un poco el objeto jQuery.datepicker.
Tendremos que hacer dos cosas: primero deberemos evitar que cuando se selecciona un día se cierre automáticamente el popup con el calendario y después tendremos que modificar el HTML que devuelve la clase.
Para evitar el auto-cierre tenemos que añadir la opción showButtonPanel ya que nos ofrecerá el botón “Close” que nos permitirá cerrar el popup cuando hayamos indicado todos los campos necesarios. También es necesario modificar la función jQuery.datepicker._selectDate tal y como lo indican en StackOverflow:
// Añadimos datepicker al input que queremos
jQuery('.fecha')
.datepicker({
showButtonPanel: true,
dateFormat: "DD, d MM, yy"
});
// Modificamos la funcion _selectDate
jQuery.datepicker._selectDateOverload = jQuery.datepicker._selectDate;
jQuery.datepicker._selectDate = function(id, dateStr) {
var target = jQuery(id);
var inst = this._getInst(target[0]);
inst.inline = true;
jQuery.datepicker._selectDateOverload(id, dateStr);
inst.inline = false;
this._updateDatepicker(inst);
// Usar el .html() para luego usar el .text() es porque si usas el regional de datepicker, te salen entidades html en vez de letras acentuadas
// Se le añade el valor del nuevo campo select que hemos incluido
target.val(jQuery('').html(dateStr).text()+' @ '+jQuery('#horario').val());
}
Bien, ya tenemos el evento onSelect modificado, ahora nos falta cambiar el HTML que se dibuja, para ello modificaremos la función jQuery.datepicker._generateHTML:
jQuery.datepicker._generateHTMLExtended = jQuery.datepicker._generateHTML;
jQuery.datepicker._generateHTML = function(inst) {
var html = jQuery.datepicker._generateHTMLExtended(inst);
var div = jQuery('').html(html);
div.find('table:first').after('
Horario:
');
return div.html();
}
// Incluimos tambien un evento para que cuando se seleccione el horario, se modifique el campo input
jQuery('#horario').live('change', function() {
var $obj = jQuery('.fecha');
$obj.val($obj.val().replace(/@.*/, '@ '+jQuery(this).val()));
});
El nuevo equipo Web API Working Group de la W3C se ha puesto a trabajar en el desarrollo de una especificación oficial para XMLHttpRequest.
Aunque la mayoría de los navegadores más populares admiten el objeto XMLHttpRequest, existen diferencias de uso, lo que dificulta una implementación que funcione en varios navegadores.
El documento que está realizando la gente de W3C pretende recoger las implementaciones que se encuentran en la mayoría de los navegadores e incluirlos en el estándar para así facilitar el desarrollo multi-navegador.
No recogerán implementaciones que solo lo ofrezca un navegador, pero si estará pensado para que surjan nuevas actualizaciones.
Vía / SitePoint
Siempre es bueno aprender de todo, y una de las mejores formas de aprender es de los fallos, si son los tuyos, mejor, pero si son de otros, tambien bien. En este caso, se trata de un estudio sobre Live.com y algunas cosas que han encontrado que no son buenas a la hora de seguir.
Cuidado con las comunicaciones: el que AJAX se conecte al servidor para refrescar la página y no nos demos cuenta, tampoco quita que tengamos que estar conectando todo el tiempo. El número de conexiones repercute en el ancho de banda, lo cual puede ser negativo para el cliente y para el servidor.
Tratar con XML es lento: cierto que el XML es muy bueno para transmitir datos, es legible para el programador y para el servidor, pero pasearlo nos puede llevar demasiado tiempo. Posible recomendación: JSON.
Ir cargando la página poco a poco: las nuevas aplicaciones web suelen requerir de mucha programación, lo cual puede tardar en cargarse, y cuando si no se va mostrando algo, el usuario pensará que la página es lenta, por eso es preferible ir cargando lo necesario y luego ir cargando el resto, asà el usuario no se desesperará.