lunes, 23 de enero de 2012

Google Analytics (error _gat undefined)

[caption id="" align="alignright" width="188" caption="Image via CrunchBase"]Image representing Google Analytics as depicte...[/caption]

Un error al parecer bastante habitual el empezar con Google Analytics, es el de encontrarnos con el siguiente error “_gat undefined“ parece que esto se debe a no alcanzar el código Javascript que Google tiene colgado al respecto, es imporante tener en cuenta que esta línea debe encontrarse dentro de la página donde se quiera hacer funcionar Google Analytics.
<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
</script>
Para evitar el error, cuando estamos hacienda pruebas en local, puede utilizarse el siguiente cambio al código Javascript, que como vemos, comprueba que se ha declarado la variable _gat para poder obtener el tracker de Analytics..
<script type="text/javascript">

function mygat(){
if (typeof(_gat) == 'undefined') {
window.setTimeout(mygat,1000);
}
else {
var pageTracker = _gat._getTracker("UA-xxxxxxx-x");
pageTracker._trackPageview();
}
}

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
if(oldonload){oldonload();}
func();
}
}
}

addLoadEvent(mygat);
</script>

miércoles, 18 de enero de 2012

WhatsApp vuelve a la AppStore de Apple

[caption id="" align="alignright" width="180" caption="Image via Wikipedia"]WhatsApp[/caption]

Segunda entrada al respecto, pero al parecer, una actualización de la popular aplicación ha hecho que la empresa de Cupertino de permiso a WhatsApp para volver a su tienda.

Desconocemos aún la razón de su retirada y vuelta a la store, pero esta claro, que parece interesante actualizar la versión de la aplicación, por si solventa algun agujero de seguridad crítico.

martes, 17 de enero de 2012

WhatsApp retirada de la App Store

Como suena, el titulo dice casi todo, WhatsApp ha sido retirado de la App Store de Apple, por motivos de seguridad.

Hay varios rumores de porque se ha retirado la aplicación, porque al parecer temas de seguridad varios, ha tenido esta aplicación a lo largo de su vida en la tienda de Apple. Aunque de lo más oido, es que podría tratarse de un intento por sacar adelante iMessage, aunque no parece uy logico teniendo en cuenta lo que gana Apple con cada WhatsApp.

Veremos como evoluciona este tema.

lunes, 2 de enero de 2012

Hilos en Java (Thread) I

La programación en hilos en Java, o mejor dicho la programación concurrente en más sencilla de implementar de lo que parece, aunque primero antes de entrar en detalles de cómo hacerlo, en este post, hablaremos de que son.

-          Que es un Thread

Un thread es un proceso ligero (en el caso que vamos a ver Java) que comparte memoria con otros iguales.

-          Qué ventajas tiene

La primera ventaja radica en que es más fácil para el planificador, intercambiar entre los procesos Thread, ya que son más ligeros, que entre otros procesos.

-          Paralelo vs Concurrente

Paralelos son dos procesos que se ejecutan al mismo tiempo, porque existen varios procesadores en los que ejecutarse, o uno con varios núcleos, que resuelven un único problema en menos tiempo.

Concurrente es un proceso paralelo que nada tienen que ver entre sí, comparten un espacio de memoria, pero no hacen una tarea común.

-          Problemas habituales

El primer problema habitual en el uso de Threads, está que al ser dos tareas concurrentes, podría darse una situación conocida como la exclusión mutua (que consiste en que dos o más procesos no se dejan terminar unos a otros, porque se bloquean entre ellos). Un ejemplo de exclusión mutua, es que por ejemplo un proceso A necesite los ficheros A y B para terminar y solo tenga A, y un proceso B, necesite también los ficheros A y B, y solo tenga B, de tal forma que ninguno de los dos puede acabar nunca, porque tienen el fichero que el otro necesita para terminar bloqueado.

Otro Problema habitual es el de la visibilidad de los cambios, suele ser habitual, que no sea fácil de gestionar, como se ven los cambios, en los procesos que son paralelos, ya que, si se realiza una actualización sobre algún dato, no siempre estará disponible al instante para otros procesos.

Como se implementa en Java, esto queda para la segunda entrega de este post, que enlazaré aquí cuando esté hecho, pero hablaremos de run() y synchronized()