Gana una portada en meneame con el Mundial
Que el mundial está creando mucha expectación, eso ya lo sabe todo el mundo, pero lo curioso de la situación en el mundo de la web 2.0 (o al menos particularmente en Meneame.net) es la velocidad a la que se publican los resultados de los partidos.
Aprovechando esa expectación es posible llevar a portada en poco más de media hora la noticia del resultado de cualquier partido(si el resultado es de España aun menos).

Eso si, tienes que estar pendiente no la envíe nadie antes que tú. Me imagino a un puñado de usuarios pendientes de que acabe el partido y pulsando a F5 en las webs de marca, as o el mundo deportivo para enviar la noticia.
Que si los árbitros, que si Sara Carbonero o que si el balon es de playa, pero lo que tira de verdad son los resultados, y los de España (o la roja como le llama ya todo el mundo) tiran aun más:
España a cuartos 1-0: 3200 meneos
420 comentarios
y lo mejor de todo:
hace 16 horas 9 minutos, publicado hace 16 horas 7 minutos
¿Publicado en 2 minutos? Pues sí. Si miramos otros resultados de la selección que se publican nada más enviar la noticia vemos que la media ronda los 3 minutos. Y lo mejor es que si perdemos tampoco pasa nada porque la derrota ante Suiza también salió a portada en poco más de diez minutillos.
http://www.meneame.net/story/espana-a-cuartos-1
http://www.meneame.net/story/espana-gana-a-chile-1-2
http://www.meneame.net/story/espana-gana-a-honduras-2
http://www.meneame.net/story/espana-pierde-primer-partido-mundial-1-ante-suiza
Así que ya sabes, si tienes espíritu de karmawhore lo que tienes que hacer es “hacer cola” en una web deportiva en el próximo partido del mundial, y lanzarlo a la lista de pendientes enseguida. Si a demás lo twitteas y lo pones en tu facebook para que lo voten tus “amigos” mejor que mejor.
Actualización:
holanda – brasil
http://www.meneame.net/story/holanda-2-1-brasil-holanda-pasa-semifinales-holanda-eliminada
Publicado en 5 minutos y no habla de españa
uruguay – ghana
http://www.meneame.net/story/uruguay-gana-penalties-ghana-clasifica-para-semifinales
publicado en 10 minutos
Estadísticas en JavaScript
Por Scipion - JavaScript, Web - 5 Junio 2010
Ya que hace tiempo que no escribo nada, voy a mostra una extensión de jQuery que hace maravillas con gráficas para representar los datos indicados. La biblioteca es bastante útil para los que necesiten mostrar estadísticas en una web.
Aunque hace tiempo que existe, Highchars me ha sorprendido por la gran versatilidad que tiene. Gráficas de barras, de rectas, acumulados etc y varias posibilidades de diseño para cada tipo.

Usarla es igual de fácil que cualquier extensión de jQuery con la única diferencia que hay que indicar los datos a representar:
var chart1; // globally available
$(document).ready(function() {
chart1 = new Highcharts.Chart({
chart: {
renderTo: 'chart-container-1',
defaultSeriesType: 'bar'
},
title: {
text: 'Fruit Consumption'
},
xAxis: {
categories: ['Apples', 'Bananas', 'Oranges']
},
yAxis: {
title: {
text: 'Fruit eaten'
}
},
series: [{
name: 'Jane',
data: [1, 0, 4]
}, {
name: 'John',
data: [5, 7, 3]
}]
});
});
En la variable series es donde se encuentran los datos indicados, ahí cada campo data es un vector con toda la información a representar. Pero de todas formas ellos explican bien como se debe de usar la biblioteca. Si tienes ya experiencia con jQuery no te resultará dificil para nada. La biblioteca completa la podeis descargar aquí de la página oficial.
Algunos gráficos vinenen preparados para introducir movimiento en la representación, los llaman dinamic chars. Vienen al pelo para trabajar con ajax y descargar datos de la web periodicamente sin necesidad de recargar la página.
Así que parece que se lo han montado bastante bien los chicos de HighChars.
Función Random
En todos los lenguajes de programación modernos existe una manera de generar numeros aleatorios. Esta funcionalidad es necesaria en informática, y por lo tanto para todas las areas en las que influye.
La aleatoriedad se utiliza en teoría de juegos, criptografía, estadística, simulaciones y en general para cualquier fín en el que se desea un resultado no predecible. Esto no quiere decir no acotado.
En realidad los numeros aleatorios no son tal. Simplemente son series de numeros muy largas y complejas (o simplemente sin sentido) por lo que no se hace posible predecir el siguiente numero de la serie, por eso también se pueden encontrar llamados como pseudo-aleatorios.
Hace un tiempo ví que se comentaba el fallo en la funcion random en PHP en windows. El problema venía de la posible precibilidad de la función, por lo que la convertía en inútil. Aquí podeis encontrar el ejemplo que comento y como se acabó solucionando.
Con un sencillo programa en Java podemos comprobar que este lenguaje no sufre esa deficiencia.

Función Random en Java
Incluso Podemos hacerlo algo más artístico y generar colores aleatoriamente:

Si quereis probar a generar puntos aleatorios aquí está el código:
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.util.Random;
import javax.imageio.ImageIO;
public class RandomImage {
public static void main(String args[]){
Random r=new Random();
int num=r.nextInt();
int x=350;
int y=350;
BufferedImage bi = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
for(int i=0; i<x; i++){
for(int j=0; j<y; j++){
num=Math.abs(r.nextInt()%2);
if(num==1){
bi.setRGB(i, j, 0xFFFFFF);
}
else{
bi.setRGB(i, j, 0x000000);
}
}
}
try{
ImageIO.write((RenderedImage)bi,"png", new File("randomJava.png"));
}
catch(Exception e1){}
}
}
En general los métodos de generación de numeros pseudoaleatorios tanto en Java como en .Net se aunto inician con la hora del sistema. La hora en milisegundos se utiliza como semilla. Es una forma de escojer una posición inicial en la serie de numeros preexistiente. Es por esto que no hay que instanciar un objeto ‘Random’ cada vez que queramos un numero aleatorio, porque si se instancian dos objetos en el mismo milisegundo (cosa más posible de lo que parece a primera vista) las dos llamadas generarían el mismo numero.
Es por esto que exísten los metodos nextInt(), nextDouble() y en general nextCualquierCosa para generar el siguiente numero aleatorio en el formato deseado.
about Firefox
Por Scipion - Navegadores - 24 Marzo 2010
Las llamadas páginas ‘about:’ son aquellas que añaden funcionalidades extra al navegador. No son para nada un estandar y cada navegador hace con ellas lo que quiere.
Mozilla Firefox las utiliza ampliamente aunque para la mayoria de la gente pasan totalmente desapercibidas.
Son herramientas muy sencillas pero con utilidad. Incluso hay algun addons de Firefox que utilizan la nomenclatura ‘about:x’ para seguir esta filosofia.
about:plugins
Lista todos los plugins instalados, una breve descripción y si están activos o no.
about:cache
Muestra la memoria que está ocupando la caché y tienes tres sub secciones:
about:cache?device=memory
about:cache?device=disk
about:cache?device=offline
Entrando en cada una de ellas te muestra con detalle donde estan almacenados los archivos de caché, cuanto ocupan, la última modificación, cuando expiran etc.
about:sessionrestore
Incluso si te acabas de cargar la sesion anterior por equivocacion puedes volver a restaurarla durante la sesion actual. En caso de que la hayas descartado e iniciado una nueva, escribes este comando en la barra de direcciones y te ofrece la opcion de restaurar la sesion antigua selecionando las ventanas y pestañas a restaurar.
Cuando el navegador se cierra de manera inesperada y más tarde se vuelve a ejecutar, es esta página la que aparece como inicio por seguridad.
about:blank página en blanco
about:mozilla
Esto es lo que se llama un “huevo de pascua” una pequeña broma que meten desde mozilla y muestra lo siguiente:
Mammon se durmió. Y la bestia renació, propagándose por toda la Tierra, y sus seguidores fueron legión. Y proclamaron los nuevos tiempos y sacrificaron cosechas con fuego, con la astucia de los zorros. Y construyeron un nuevo mundo a su propia imagen como prometían las palabras sagradas, y la palabra
de la bestia y sus crías. Mammon se despertó, y súbitamente no era más que un rezagado.de El Libro de Mozilla, 11:9
(10ª edición)
Esto es así en la version 3.6, para más versiones teneis el libro de mozilla o varias versiones en la wikipedia. Humor ante todo.
about:config
Para trabajar con la configuración como su nombre indica. Te advierte de que tengas cuidado.
about:robots
Otro “huevo de pascua” mezca de la cultura de ciencia ficción y chorradas en general que se ve que les gusta a los chicos de mozilla. Solo que este es especifico de firefox y no aparece en otro software de mozilla:
¡Bienvenidos humanos!
¡Venimos a visitaros en son de paz y con buena voluntad!
* Un robot no debe dañar a un ser humano o, por su inacción, dejar que un ser humano sufra daño.
* Los robots han visto cosas que vosotros no creeríais.
* Los robots son sus amigos de plástico con quien les gustará estar.
* Los robots tienen brillantes culos metálicos que no deben ser chupados.
…Y tienen un plan.
Otros navegadores tambien incorporan este sistema com el Chrome, Exporer, Konqueror y Opera como tambien lo hacen Flock, Epifany y SeaMonkey, este último al ser un fork de Firefox incorpora exactamente los mismos. Netescape ya incluia las paginas ‘about:’ en icluso tenia muchos más “huevos de pascua”.
En el caso de Safari las paginas about no existen, aunque no por ello deja de implementar funcionalidades extra de otro modo.
Closures en JavaScript. Patrón Modulo
Por Scipion - Ingenieria del software, JavaScript - 19 Marzo 2010
Si hace un tiemplo comentaba que en JavaScript el patrón singleton es implícito, voy a revisar otro patrón que sirve para modularizar nuestro código. Las clausuras de JavaScript o Closure es algo que tiene que conocer cualquiera que se dedique en profundidad a este lenguaje.
Closures
Una closure es en definitiva un objeto que es definido e instanciado en el momento de su declaración. Así hay que tener en cuenta que esta metodología cumple el patron modulo, al declarar el módulo, y el singleton, ya que no permite reinstanciaciones del mismo objeto porque se declara y se ejecuta.
var clos = (function(){
var vprivada=999; // solo accesible desde esta closure
function fprivada(param){
vprivada=param;
}
var prop={};
prop.funcion=function(){
document.write("123456789");
}
prop.variable=119;
return prop;
}());
Como la función es ejecutada al mismo tiempo que es declarada es necesario devolver el objeto que se genera dentro de ella. Si no asignamos la función a nada la closure es anónima, pero no deja de ejecutarse por ello.
Aumentar la closure
Para ampliar las propiedades de nuestro objeto podemos escribir otra closure y asignársela, el problema es que si lo hacemos sin más perdemos las propiedades anteriores, por eso debemos pasarle por parámetro todo el código anterior, es decir, la misma closure.
var clos=(function(prop2){
prop2.funcion2=function(){
document.write("999888777");
}
prop2.variable2=219;
return prop2;
}(clos));
En caso de que no exista podemos crear una nueva closure al vuelo para evitar los errores de ejecución.
var clos=(function(prop){
...
return prop;
}( clos|| {} ));
De esta manera podemos distribuir nuestro código entre distintos archivos en caso de que fuese necesario. En una página donde tengamos implementadas pocas funcionalidades esto no es necesario, pero cuando va creciendo la cantidad de cosas que queremos hacer con JavaScript, modularizar el código de esta manera resulta bastante útil.
También es importante saber que podemos extender nuestra closure con otras para hacerla más rica. Así incorporando librerías de terceros (como jQuery) podemos personalizar el producto a nuestras necesidades. Esto podria considerarse un tipo de herencia implicita, para ver la herencia explicita aquí.
Ya he visto que en ciertos perfiles laborales se indica explícitamente el conocimiento de closures. Cuando estamos programando en paralelo con un compañero de trabajo y se dividen las funcionalidades a programar, debe de hacerse con aumentos de closures, que hace fácil unificar el código y también puede permitir acotar a la hora de buscar fallos.

