Noviembre 16, 2008
He actualizado los códigos promocionales de Dreamhost, ahora también podéis daros de alta usando un enlace promocional o añadiendo mi dirección de correo para indicar que vais de mi parte.
Aquà está el post con los códigos promocionales y los enlaces.
Ya ha habido un referido, al cual le doy las gracias encarecidamente
Publicado en Uncategorized | Etiquetas: auto bombo, dreamhost, promcodes | Comments Off
Noviembre 6, 2008
Hoy en el trabajo he descubierto que la función eval() de Javascript y Firebug se llevan muy mal. Tan mal que no conseguÃa depurar una clase que estoy desarrollando. Googleando un poco he conseguido encontrar varias formas de evitar eval() y algunos motivos por lo que es recomendable evitar su uso.
El funcionamiento de eval() es el siguiente:
- Se convierte el argumento en un String.
- Se parsea el String y se convierte en código Javascript.
- Se ejecuta el código Javascript resultante.
Evidentemente saltarse los pasos 1 y 2 mejora el rendimiento. Además evita esos problemas “raros” que he comentado antes con Firebug.
En concreto los problemas con los que me he encontrado incluÃan los siguientes usos de eval:
- Asignar una propiedad a un objeto cuyo nombre está almacenado en un String.
- Llamar a una función cuyo nombre está almacenado en un String.
- Crear un objeto de una clase cuyo nombre está almacenado en un String.
Es decir, tres casos muy parecidos que se reducen a uno solo, acceder a variables cuyo nombre conocemos a posteriori. Para solucionar esto basta con saber que hay varias formas de acceder a una propiedad de un objeto en Javascript. La tÃpica:
y la no tan tÃpica:
-
var nombreDelAtributo="atributo";
-
objeto[nombreDelAtributo] = valor;
Ahora solo falta saber otra cosa. Cualquier variable se puede acceder también como un atributo del objeto window, un ejemplo:
-
var cadena = "Hola mundo!";
-
alert(window.cadena); //mostrará un alert con "Hola mundo!"
-
alert(window[‘cadena’]); //también mostrara un alert con "Hola mundo!"
Ahora veamos algunos ejemplos de usos de eval() y otras formas de avordar el mismo problema.
-
/*
-
*asignar un valor a un atributo cuyo nombre no conocemos a priori
-
*/
-
eval(‘objecto.’ + nombreDelAtributo + ‘=valorDelAtributo’);
-
//se podrÃa cambiar por
-
objeto[nombreDelAtributo] = valorDelAtributo;
-
-
/*
-
* Llamar a un metodo de un objeto estando el nombre del metodo almacenado en una variable
-
*/
-
-
eval(‘objeto.’ + nombreDelMetodo + ‘(argumento)’);
-
//podrÃa ser
-
objeto[nombreDelMetodo](argumento);
-
-
/*
-
* Crear un objeto de una clase teniendo el nombre de la clase en una variable
-
*/
-
-
eval(‘var objeto = new ‘ + nombreDeLaClase + ‘()’);
-
//serÃa
-
var objeto = new window[nombreDeLaClase]();
En el último ejemplo podemos hacer esto por que una clase es también una variable del programa, y como tal se almacena como un atributo del objeto window.
Y vosotros, ¿usáis eval() en vuestro código? ¿conocÃais estas soluciones?
Publicado en Uncategorized | Etiquetas: eval, javascript, programacion | 11 comentarios »
Noviembre 3, 2008
Como ya he comentado en alguna ocasión, he mudado OBG a Dreamhost. Este hosting ofrece un código promocional a sus clientes para que lo ofrezcamos a los clientes potenciales y que asà obtengan una rebaja en su primer año de contrato. Además si usáis ese código yo consigo también algo de pasta gansa para mantener OBG
Estos son los códigos promocionales:
- Código: OBG2008
- 25 USD de descuento si pagáis mensualmente.
- 50 USD de descuento si pagáis por 1, 2, 3, 5 ó 10 años
- Código: OBGIP2008
- Una dirección IP fija gratis y 20 USD de descuento en todos los planes excepto el mensual
- Código: OBG2DOMINIOS2008
- 2 Dominios extra gratis.
También podéis ser referidos de Otro Blog Geek indicando que nflamel@gmail.com cuando os den la oportunidad de indicar si sois referidos de alguien al daros de alta en DreamHost o usando este enlace para daros de alta.
Espero que los códigos promocionales os sirvan de algo y que además los uséis y colaboréis algo con OBG
PS: MuchÃsimas gracias a los que hagan uso de los códigos promocionales y muchÃsimas gracias a aquellos que ya lo han hecho
Publicado en Uncategorized | Etiquetas: auto bombo, dreamhost, promcodes | 2 comentarios »
Noviembre 3, 2008
Hace unos meses mudé OBG a un nuevo servidor. OBG se hospeda ahora en Dreamhost, el cual ofrece en su plan básico un repositorio de subversion. Para sacar algo de partido a esta caracterÃstica del servidor he decidido crear un repositorio en el que iré colgando los ejemplos de OBG y los pequeños proyectos en los que vaya trabajando. La dirección del repositorio es http://otrobloggeek.com/proyectos_obg/ . No es necesario usuario para acceder con permisos de lectura. Por ahora soy el único con permisos de escritura, aunque todo se andará.
Lo único que hay ahroa mismo en el repositorio es el tema del blog, White as Milk , el cual estoy traduciendo al español y pronto subiré otra versión del tema al cual le estoy añadiendo soporte para I18N. Pronto iré colgando otros proyectos en los cuales estáis invitados a participar
.
Publicado en Uncategorized | Etiquetas: auto bombo, dreamhost, svn | Comments Off
Noviembre 2, 2008
He cambiado el tema de Otro Blog Geek por uno algo más minimalista. El tema está basado en White as Milk. Voy a intentar traducir todo el tema al español e iré subiendo mis avances a un repositorio de subversion para que cualquiera pueda usarlo si quiere.
En breve colgaré la dirección del respositorio de subversion en el que además iré subiendo el código de los ejemplos que haya en los posts
Publicado en Uncategorized | Etiquetas: auto bombo, tema | 1 comentario »
Noviembre 1, 2008
Hoy me he propuesto actualizar mi IDE preferido a la última versión. Como ya he tenido malas experiencias actualizando eclipse voy a empezar instalando plugins uno a uno. El primero será Aptana, ya que es uno de los que más utilizo. Este es el procedimiento que he seguido.
- Descargar Eclipse Classic de su web, descomprimir e instalar donde queramos.
- Vamos a “Window->Preferences” Y cambiamos activamos “Classic Update” dentro de “General->Capabilities” tal y como se muestra en la captura.

Opciones necesarias en Eclipse Ganymede para instalar Aptana
- Ahora para instalar Aptana vamos a “Help->Sowftware Updates->Find and install”. Aquà seleccionamos “Search for new features to install”.
- En la nueva ventana pulsamos sobre “New Remote Site” y pegamos esta direccion en el campo URL http://update.aptana.com/install/studio/3.2/ . Pulsamos “OK” y luego “Finish”.
- Si todo ha ido bien, después de una pequeña espera, Eclipse nos mostrará un diálogo con caracterÃsticas para instalar en las que aparecerá “Aptana studio”. Seleccionamos esta caracterÃstica y pulsamos “Next >”.
- Aceptamos los términos de licencia y “Next >” otra vez. En el siguiente cuadro “Finish” para instalar.
- Ahora Eclipse descargará los archivos necesarios, asà que paciencia. Una vez descargado un diálogo nos preguntará que confirmemos la instalación. Podemos pulsar en “Install All”. Ahora Eclipse instalará el plugin de Aptana y cuando termine nos pedirá que reiniciemos el Workspace.
- Tras el reinicio Aptana preguntará si queremos instalar el soporte para Subversion. No es necesario pero lo podéis instalar si queréis.
Ya tenemos instalado Aptana en eclipse Ganymede, ahora, a programar
Publicado en Uncategorized | Etiquetas: aptana, eclipse, ganymede, howto, linux | 3 comentarios »
Octubre 26, 2008
Estoy haciendo algunas pruebas en el blog para insertar AdSense para búsqueda, asà que si algún visitante encuentra algún problema al entrar a OBG o ve algo raro, se agradece que lo comuniquen.
Publicado en Uncategorized | Etiquetas: auto bombo | Comments Off
Octubre 19, 2008
Mi última pelea con Prototype ha estado protagonizada por los eventos. TenÃa que conseguir capturar el evento de scroll sobre un div y después de hacer algunas cosas cancelar el comportamiento por defecto del evento y evitar la propagación al scroll general de la página.
Al final descubrà la función Event.stop() de Prototype. En la documentación dice lo siguiente:
Llamándola en un evento, para la propagación y previene el comportamiento por defecto.
Su uso es simple. Veamos un ejemplo.
-
$(‘elemento’).observe(‘evento’, function(e){
-
otroComportamiento();
-
//esto detiene el comportamiento por defecto y evita la propagacion
-
e.stop();
-
});
Aquà tenéis una página con un par de ejemplos. Podéis ver el ejemplo viendo el código fuente de la página.
- El primer formulario mostrará un
alert() con el valor
- El segundo formulario hará una petición GET (evidentemente sin ningún efecto) sobre la misma página
- El primer párrafo con scroll ignora el uso de la rueda del ratón
- El segundo párrafo funciona igual que siempre
Publicado en Uncategorized | Etiquetas: event, javascript, prototype | 2 comentarios »
Octubre 18, 2008
Quedan 12 días para la salida de Ubuntu Intrepid Ibex. Esta nueva versión tiene bastantes novedades algunas como por ejemplo el uso de pulseaudio me han parecido de lo m?s interesantes. Llevo usando las versiones previas al lanzamiento desde hace algo m?s de un mes y tengo que decir que he notado una peque?a mejora, tanto en estabilidad como en rendimiento.
Todo parece m?s integrado en el sistema y los asistentes visuales parecen bastante estables. La gesti?n de controladores propietarios de hardware ha mejorado algo. Ahora puedes ver las diferentes versiones y gracias a DKMS parece que todo funciona mucho mejor. Tengo ganas de ver la versi?n final, pero mientras tanto, si sois tan impacientes como yo, pod?is instalar Intrepid usando desde consola el comando
Publicado en linux | Etiquetas: intrepid, ubuntu | 1 comentario »
Octubre 18, 2008
He actualizado el enlace del HOWTO para configurar pulseaudio en Ubuntu Hardy. Podéis ver el enlace nuevo en la entrada.
Muchas gracias a Trasto por el testeo
Publicado en linux | Etiquetas: hardy, pulseaudio, ubuntu | 1 comentario »
Octubre 17, 2008
Desde hace unos días tengo algunos problemas con un módulo en Javascript que estoy desarrollando en el trabajo. El script hace una petición AJAX y obtiene un XML. El problema es que Internet Explorer cachea el XML cuando le apetece y eso provoca que a veces el módulo no cargue como debería. La solución es tan sencilla como añadir un nuevo argumento aleatorio a la petición, evitando así que Internet Explorer la cargue desde la caché la siguiente vez.
El siguiente ejemplo está basado en Prototype
-
var ajaxRequest = new Ajax.Request(’sample.xml’, {
-
method: ‘get’,
-
//Extra parameter on request
-
parameters: {
-
differentiator: Math.floor(Math.random()*50000)
-
},
-
onSuccess: function(response){
-
whatever();
-
}
-
});
Solución via: The Arsenalist
Publicado en programacion, web | Etiquetas: ajax, cache, explorer, prototype | 5 comentarios »
Octubre 13, 2008
Desde que empecé a trabajar mi función principal es la de desarrollador web. Básicamente me peleo todo el dÃa con Prototype y con AJAX. Después de unas cuantas semana Prototype se ha convertido en parte en un gran aliado, pero también en un enemigo a batir. Conocer el framework con profundidad es esencial para trabajar con él y a veces no es fácil. Una de las cosas que mas trabajo me costó entender fue la utilidad de las funciones bind() y bindAsEventListener(). Ambas son muy potentes y muy útiles cuando se utilizan bien, pero comprender su uso puede ser difÃcil y a veces nos pueden dar quebraderos de cabeza.
Voy a intentar explicar de forma clara y simple como se usan estas dos funciones y para qué sirven. Vayamos por partes.
bind(): Es una de las estrellas en Prototype y también es una de las más trabajo suele costar entender. Imaginemos un objeto que tiene métodos para acceder a sus datos miembro. Usando bind() podemos hacer que esos objetos accedan a datos miembro de otros objetos en lugar de a los del objeto original. Veamos un ejemplo:
-
-
var Clase1 = Class.create({
-
initialize: function(msg){
-
this.mensaje = msg;
-
},
-
log: function(){
-
console.log(this.mensaje);
-
}
-
});
-
var objeto1 = new Clase1("Mensaje, Objeto1");
-
var objeto2 = new Clase1("Mensaje, Objeto2");
-
-
objeto1.log(); //Genera -> Mensaje, Objeto1
-
objeto2.log(); //Genera -> Mensaje, Objeto2
-
//Creamos el bind de alerta para que se ejecute en el
-
//contexto del objeto2.
-
var log_bind = objeto1.log.bind(objeto2);
-
log_bind(); //Genera -> Mensaje, Objeto2
Como vemos, la llamada a log_bind() realiza la llamada a objeto1.bind() usando el contexto del objeto2, lo cual en terminos prácticos equivale a hacer objeto2.bind()
También podemos usar bind() para añadir argumentos a la llamada a una función. Veamos un ejemplo de esto.
-
var Clase2 = Class.create({
-
initialize: function(msg){
-
this.mensaje = msg;
-
},
-
log: function(){
-
console.log(this.mensaje + ‘ ‘ + $A(arguments).join(‘, ‘));
-
}
-
});
-
-
var objeto3 = new Clase2("Mensaje, Objeto3");
-
objeto3.log();
-
var log_bind_mas_argumentos = objeto3.log.bind(objeto3,1,2,3,4,‘ lo que sea’);
-
log_bind_mas_argumentos();
Esta vez no cambiamos el contexto de la función, pero añadimos varios argumentos extra que luego se extraen usando $A(arguments), convirtiéndolos asà en un Array de Prototype.
bindAsEventListener(): Una vez hemos comprendido el uso que tiene bind() es fácil entender la dinámica de bindAsEventListener(). Su funcionamiento es el mismo que el de la función bind() pero con adaptaciones especÃficas para un contexto concreto, el de la captura de eventos.Este es el mismo ejemplo que hay en el API de Prototype pero un poco retocado:
-
var obj = {
-
name: ‘Un bonito ejemplo’
-
};
-
-
function handler(evento){
-
var tag = Event.element(evento).tagName.toLowerCase();
-
var data = $A(arguments);
-
data.shift();
-
console.log(this.name + ‘\nHas clickado en ‘ + tag + ‘\nOtros argumentos: ‘ + data.join(‘, ‘));
-
}
-
$(‘elemento’).observe(‘click’, handler.bindAsEventListener(obj, 1, 2, 3));
Por partes, el objeto obj tiene una propiedad name y la función handler(evento) se encarga de manejar el evento una vez se ha disparado. Esta función extrae el nombre del elemento de la página que ha disparado el evento, los argumentos extra pasados a la función y los muestra todos por la consola de facebook. La clave de todo el ejemplo es la lÃnea:
-
$(‘elemento’).observe(‘click’, handler.bindAsEventListener(obj, 1, 2, 3));
Esta lÃnea asigna la función handler(evento) como manejadora del evento onclick del elemento y además cambia su contexto al del objeto obj y le pasa 3 números como argumento. Pero echando un segundo vistazo a la función vemos que en ningún momento le pasamos el argumento evento. Esa es precisamente la función especial de bindAsEventListener() pasar como primer argumento el objeto de la clase Event que representa al evento que se ha disparado.
Usando bindAsEventListener() siempre recibiremos el objeto Event como primer argumento, sin necesidad de pasar ese evento de forma manual.
Espero que después de este par de ejemplo quede todo un poco más claro, como siempre se aceptan preguntas, dudas y sugerencias
y para todo el código que necesitéis pegar podéis usar Pastie
Publicado en programacion, web | Etiquetas: javascript, prototype | 9 comentarios »
Septiembre 21, 2008
NOTA (18/10/2008 16:09): He actualizado el enlace del manual y he cambiado el tÃtulo… por que por alguna razón que no alcanzo a comprender habÃa puesto Intrepid en lugar de Hardy
Bueno, de la mano de los foros de ubuntu, os traigo este utilÃsimo howto que explica como configurar pulseaudio perfectamente para que podamos disfrutar de todas las aplicaciones que queramos a la vez reproduciendo audio.
HOWTO: PulseAudio Fixes & System-Wide Equalizer Support (Hardy Heron)
HOWTO: PulseAudio Fixes & System Wide Equalizer Support
El manual es bastante completo y muy fácil de seguir. Viene partido en varios pasos. No es necesario llevarlos todos a cabo por que algunos son necesarios para solucionar posibles problemas, pero no se tarda más de 5 o 6 minutos en tener todo el audio del sistema funcionando a la vez y perfectamente.
NOTA: Ya sé que el blog ha estado muy muerto últimamente, pero todavÃa sigo haciendo pruebas con el nuevo hosting y buscando un nuevo tema que sea interesante y fácil de personalizar. Espero poder postear con asiduidad, he aprendido muchÃsimas cosas en el nuevo trabajo y estoy loco por contaroslas
Publicado en linux | Etiquetas: audio, howto, ubuntu | 1 comentario »
Septiembre 10, 2008
Acabo de leer en el blog de Symfony en español que la versión 6.5 de netbeans incluirá soporte para PHP y que además se espera que soporte algún framework PHP. Los desarrolladores de netbenas han decidido someter a votación que 2 frameworks serán soportados en esta nueva versión.
En este post del blog en español de Symfony explican como dar nuestro voto a Symfony
Publicado en programacion, web | Etiquetas: netbeans, php, symfony | Comments Off
Agosto 20, 2008
Otro Blog Geek está de obras. Me he mudado a un nuevo hosting y todavÃa estoy ajustándolo todo en los ratos libres que tengo.
Espero que esté listo en una semana o asÃ.
Publicado en auto bombo | 1 comentario »