Archivo para la categorÃa ‘ web ’
Sábado, Octubre 3, 2009
Sólo un pequeño y corto apunte para recordarme a mà mismo un problema que acabo de tener desarrollando con Symfony.
Recordad, para usar no_script_name en Symfony es necesario que mod_rewrite esté activo en Apache 2.
Para activarlo en un servidor con ubuntu:
Via: Symfony forum
Publicado en programacion, web | Etiquetas: apache, php, symfony | 4 comentarios »
Sábado, Julio 25, 2009
Pues sÃ, acabo de entrar en Google Reader con Firefox 3.5 desde Leopard y resulta que el lector de feeds se ha quedado “frito”. No sé muy bien cómo explicarlo, asà que lo mejor es que veáis una imagen.

Google Reader "frito"
¿A alguien más le ha pasado esto? No he conseguido reproducir el problema con Safari, Opera ni Google Chrome… asà que me da por pensar que es un problema mÃo.
Publicado en web | 7 comentarios »
Domingo, Mayo 24, 2009
Últimamente una cantidad enorme de bots spammers se están registrando en Otro Blog Geek… no le di importancia hasta que me di cuenta de que prácticamente todos los usuarios registrados del blog son spammers. Una pena que Akismet no se haga cargo de esto, sin embargo hay vida más allá de Akismet y no es tan difÃcil deshacerse de estos bots.
Lo primero ha sido comprobar unas cuantas de las direcciones y eliminarlas buscando el e-mail de los usuarios registrados en Stop Forum Spam. Una vez que los usuarios ya estaban eliminados, lo importante es evitar que no se vuelvan a registrar este tipo de bots. Para esto he encontrado Sabre, un plugin para Wordpress que es bastante completo y se encarga de evitar de un montón de formas que los bots se registren.
Los métodos que Sabre utiliza son bastante variados:
- Captchas.
- Preguntas lógicas a los usuarios (operaciones matemáticas simples, etc.)
- Requerir una activación por parte de los usuarios (o del administrador)
- Comprobar si el navegador dispone de soporte javascript.
Yo por ahora he activado el soporte para activación por parte del usuario, ya que me ha parecido el menos invasivo para los usuarios que quieran registrarse.
Por cierto, si alguno ha perdido su usuario reguistrado (que lo dudo) lo siento muchÃsimo.
Publicado en web | Etiquetas: plugins, spam, wordpress | 1 comentario »
Viernes, Mayo 15, 2009
Publicado en programacion, web | Etiquetas: software libre, symfony | Sin comentarios »
Domingo, Mayo 3, 2009
Otro cortito. Los desarrolladores de Ubuntu (o los de netbeans, no lo sé muy bien) parece que no se han dado cuenta, que con el look&feel por defecto de Netbeans la ventana de depuración tiene el mismo color de fondo que la tipografÃa que se usa para los valores de las variables… por lo tanto es muy difÃcil o casi imposible depurar cómodamente.
Veamos como cambiar este look&feel.
- Editamos el fichero
etc/netbeans.conf que está en el directorio de instalación de netbeans
- Añadimos
--laf javax.swing.plaf.metal.MetalLookAndFeel al final de la variable netbeans_default_options
- Rearrancamos el IDE y ya tendremos un look&feel mucho más agradable para la depuración

Vista de variables locales depurando PHP con netbeans
Publicado en programacion, web | Etiquetas: look&feel, netbeans, php, xdebug | 4 comentarios »
Domingo, Mayo 3, 2009
Vamos manos a la obra directamente, por que es bien sencillo.
- Instalamos xdebug en Ubuntu (previamente necesitamos tener php, apache, etc. instalado)
-
sudo aptitude install php5-xdebug
- Editamos el archivo de configuración de xdebug
/etc/php5/conf.d/xdebug.ini y añadimos las siguientes lineas
-
xdebug.remote_enable=on
-
xdebug.remote_handler=dbgp
-
xdebug.remote_mode=req
-
xdebug.remote_host=localhost
-
xdebug.remote_port=9000
- Reiniciamos apache
-
sudo /etc/init.d/apache2 restart
Ya podemos depurar PHP con nuestro IDE preferido, como Eclipse o Netbeans
Publicado en programacion, web | Etiquetas: jaunty, php, xdebug | Sin comentarios »
Sábado, Mayo 2, 2009
Symfony es un framework para desarrollar aplicaciones web basándonos en el patrón MVC.
La instalación es bastante cómoda y se puede realizar a través de PEAR. El proceso es muy simple:
- Instalamos Apache. También es posible usar otros servidores, pero yo me siento cómodo con Apache. Yo tengo la mala costumbre de usar para ello un método bastante “cutre” que consiste en instalar phpmyadmin, ya que asà se resuelven todas las dependencias necesarias para Apache, PHP y MySQL de una vez.
Durante la instalación nos preguntará qué servidor queremos usar con PHPMyAdmin, seleccionamos Apache y listo.
Yo instale y configuré previamente MySQL manualmente, pero usando este método es posible que os guÃe durante la configuración.
-
sudo aptitude install phpmyadmin
- Instalamos pear:
-
sudo aptitude install php-pear
- Añadimos el canal de Symfony:
-
sudo pear channel-discover pear.symfony-project.com
- Instalamos Symfony mediante PEAR:
-
sudo pear install symfony/symfony
Por último solo nos resta configurar Apache. Yo he configurado un host virtual con un log separado, asà podré testear y depurar cómodamente. Veamos como hacerlo por pasos.
- Añadimos la entrada con el dominio que queramos a
/etc/hosts. Yo he elegido dominio.com para el ejemplo, pero se puede elegir otro
-
echo "127.0.0.1 dominio.com" >> /etc/hosts
- Ahora creamos una entrada en
/etc/apache2/sites-available/dominio.com con el siguiente contenido:
-
<VirtualHost *:80>
-
ServerName dominio.com
-
ServerAdmin webmaster@dominio.com
-
-
DocumentRoot /var/www/web
-
DirectoryIndex index.php
-
-
Alias /sf /usr/share/php/data/symfony/web/sf
-
<Directory /sf>
-
AllowOverride All
-
Allow from All
-
</Directory>
-
-
## Cambiamos esta ruta por la que nos convenga
-
ErrorLog /path/al/log/fichero.log
-
-
# Possible values include: debug, info, notice, warn, error, crit,
-
# alert, emerg.
-
## Podemos cambiar también el nivel de log por el que más nos convenga
-
LogLevel debug
-
-
CustomLog /path/al/log/fichero.log combined
-
ServerSignature On
-
-
#Configuracion de symfony
-
<Directory "/var/www/web">
-
AllowOverride All
-
Allow from All
-
</Directory>
-
</VirtualHost>
- Por último activamos el host virtual, mod_rewrite y reiniciamos apache
-
sudo a2ensite dominio.com
-
sudo a2enmod rewrite
-
sudo /etc/init.d/apache2/reload
Solo falta editar el archivo /etc/php5/apache2/php.ini y cambiar la linea magic_quotes_gpc = Off por magic_quotes_gpc = On
Para comenzar a desarrollar podemos acudir a la página de Symfony y seguir su increÃble “tutorial” escrito en forma de libro o en librosweb si preferÃs el libro en español.
Publicado en programacion, web | Etiquetas: php, programacion, symfony, ubuntu | 2 comentarios »
Viernes, 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 »
Lunes, 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 »
Miércoles, 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 | Sin comentarios »
Sábado, Julio 19, 2008
Lo acabo de leer en anieto2k y la verdad es que me ha parecido una noticia genial. John Resig lo anunció el jueves en su blog.
El equipo de Firebug está realizando un gran trabajo con la versión 1.2 y la verdad es que estoy impaciente por saber qué es lo que le depara el futuro a esta genial extensión. Desde luego seguro que todavÃa no lo hemos visto todo acerca de Firebug y en los próximos meses dará mucho que hablar.
Publicado en programacion, web | Etiquetas: firebug, mozilla, webdesign | Sin comentarios »
Domingo, Junio 22, 2008

Como he dicho en mi anterior apunte, he comenzado a escribir un tumblelog. La idea me parece muy interesante, pero lamentablemente Tumblr, la plataforma que uso para el tlog, no dispone de comentarios.
Buscando un poco he encontrado Disqus, una sistema de comentarios que permite agregar comentarios a Tumblr y a otras plataformas. Con la ventaja de que no necesita registro para los comentaristas y que permite usar cuentas de OpenID.
Agregarlo a un tlog de Tumbler es sencillÃsimo, solo hay que darse de alta y seguir las instrucciones que dan. Cómodo y rápido.
Publicado en programacion, web | Etiquetas: disqus, tumblr | 1 comentario »
Domingo, Junio 15, 2008
Edito sábado, 09 de agosto de 2008: Corregido un error en el nombre del paquete de PEAR en Ubuntu. Gracias david.
Sigo peleándome con mi proyecto fin de carrera, y mi última batalla ha consistido en obtener el tipo MIME de un archivo mediante PHP. Tras un vistazo al manual de PHP me encontré con esta extensión de PHP que hace lo que necesito y mucho más.
Se puede instalar mediante PEAR, para ello seguimos el siguiente procedimiento.
- Instalamos PEAR, las librerÃas para desarrollo de PHP y de libmagic.
-
-
sudo aptitude install php-pear php5-dev libmagic-dev
-
- Usamos el comando pecl para instalar la extensión
-
-
sudo pecl install fileinfo
-
-
Añadimos la extensión a nuestro php.ini, para ello accedemos creamos un nuevo archivo llamado
extensiones.ini en la carpeta /etc/php5/conf.d y añadimos dentro la linea:
extension=fileinfo.so
- Por último reiniciamos apache
-
-
sudo /etc/init.d/apache2 restart
-
Ya tenemos la extensión instalada, ahora para obtener el tipo mime podemos usar un código parecido a este.
-
-
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
-
$filename = ‘/ruta/al/archivo.jpg’;
-
$mime_type = $finfo->file($filename);
-
Tras esto tendremos el tipo MIME almacenado en la variable mime_type. Para más ejemplos de uso de la extensión se puede acudir a la página del manual de PHP.
Publicado en programacion, web | Etiquetas: howto, mime, php, programacion | 5 comentarios »
Viernes, Junio 13, 2008
Como el nombre del post indica, ahà va una lista de enlaces que pueden ser bastante útiles a la hora de comenzar a desarrollar aplicaciones con Symfony.
Publicado en programacion, web | Etiquetas: enlaces, php, symfony | Sin comentarios »
Lunes, Junio 9, 2008

Hoy he encontrado una extensión bastante curiosa para Firefox. Estoy hablando de Split Browser. Esta extensión nos permite dividir la ventana del navegador para mostrar varias webs a la vez. El sistema de pestañas de firefox es muy potente, pero a veces es algo incómodo, por ejemplo cuando quieres ver la vista previa de una entrada mientras posteas. En la imagen se puede ver lo que permite esta extensión.
Publicado en programacion, web | Etiquetas: extensiones, firefox | 1 comentario »