10/06/2009
Y yo me pregunto: ¿Para que diablos?
No es que me cierre a que las instrucciones goto sean malignas por si solas como aprendes en la escuela. Seguro que han de tener su buena utilidad. Solo que esta la veo en lenguajes estructurados o que no tienen soporte para excepciones, y PHP no cae en ninguno de esos casos.
También podría aplicar la técnica “sino te gusta, no lo uses”. Pero el problema no es así de sencillo, ya me veo en el futuro debuggeando las pastas ininteligibles de HTML+Javascript+PHP que existen, pero ahora “mejoradas” con goto. The horror!
Vía: Reddit
4/06/2009
Tengo un problema con Firefox exactamente igual desde que estaba en Linux y ahora que estoy en Mac. Suele morirse en páginas que están muy cargadas de Flash o de Javascript. Aunque esto sea “a veces si, a veces no” es muy molesto.
Aún navegando con cuidado, tarde o temprano sucumbe a tener muchas pestañas abiertas y estar mucho tiempo continuo funcionando. Nunca he sabido que diablos pase, la situación a veces mejora actualizando al último Flash (en Linux) o desactivando extensiones como Google Gears (en Mac), pero aunque sea en menor medida sigue pasando.
Tal vez sea prematuro decirlo, pero hoy le he dado muuucha carrilla a Firefox 3.5 beta 4 y no ha muerto para nada. Al contrario, se ha comportado estable y sin ralentizarse, justo como la experiencia que tengo con Google Chrome en Windows. La única pega que tengo es que no es compatible Google Gears con esta beta. Pero por lo menos Firebug si que lo es.
Si tienes los mismos problemas que yo no esta de más probarlo. Yo toco madera para que siga igual.
29/05/2009
Hacer pruebas automatizadas de tu código siempre es una buena costumbre, en especial cuando te llega el tiempo de tener que refactorizar.
Para este ejemplo vamos a hacer una clase que calcula las áreas de triángulos, rectángulos y cuadrados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| class Area
{
function triangle($base, $height) {
return ($base * $height) / 2;
}
function rectangle($breadth, $height) {
return $breadth * $height;
}
function square($side) {
return $side * $side;
}
} |
Y vamos a utilizar la herramienta SimpleTest para probar que nuestras funciones están trabajando bien. Para empezar a usarlo solo tienes que bajarlo y colocar la carpeta simpletest dentro de tu proyecto o algún directorio global de PHP.
Una vez instalado podemos comenzar a escribir nuestros casos de prueba.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| require_once 'simpletest/autorun.php';
require_once 'area.php';
class AreaTestCase extends UnitTestCase
{
var $area;
function setUp() {
$this->area = new Area();
}
function testTriangle()
{
$result = $this->area->triangle(6, 10);
$this->assertEqual(30, $result);
}
function testRectangle()
{
$result = $this->area->rectangle(2, 5);
$this->assertEqual(10, $result);
}
function testSquare()
{
$result = $this->area->square(4);
$this->assertTrue(is_numeric($result));
}
} |
El incluir autorun.php nos da la habilidad de poder extender la clase UnitTestCase, permitiéndonos ejecutar las aserciones. Además el autorun.php se encarga de correr las pruebas sin necesidad de que tu tengas que instanciar nada y también es suficientemente inteligente para darte si cuenta si estas en la consola o directamente en el navegador.
La funcion setUp se ejecuta automáticamente antes de correr cualquier prueba. Aquí como todas nuestras pruebas hacen uso de la clase Area, entonces aprovechamos para hacer la instancia una sola vez.
Finalmente SimpleTest corre todas las pruebas que note comienzan con el nombre test y nosotros tenemos 3 de ellas:
- testTriangle: Prueba que el resultado de la operación sea igual a 30.
- testRectangle: Prueba que el resultado de la operación sea igual a 10.
- testSquare: Prueba que el resultado de la operación sea un número.
Cualquier otro resultado nos arrojaría errores. Estas pruebas ejecutadas en el navegador se verían así, pero también puedes ejecutarlas en consola sin ningún problema.

SimpleTest tiene muchas opciones más como el agrupar casos de prueba, escribir tus propias aserciones, mockups (simulaciones de escenarios) y pruebas web (aunque limitado). Así que no te dejes de llevar por el nombre no es simple, solo es fácil de usar.
25/05/2009
Siguiendo las noticias de MySQL Workbench (v5.1, v5.2) ahora anuncian oficialmente que además de funcionalidades para el modelado de bases de datos va a sustituir y mejorar las funciones de MySQL Query Browser.
Claro, que si habías probado la Alpha 5.2 seguro ya te has dado cuenta que esto iba para allá.

18/05/2009
Si por alguna razón cambiar un contenido de lugar hazte el favor y recuerda colocar una redirección 301. Tus visitantes te lo agradeceran y los buscadores simplemente indexan el contenido en el nuevo lugar sin penalizarte.
La redirección la puedes hacer con casi cualquier lenguaje como PHP, ASP, Ruby, etc. pero siempre que uses Apache como servidor una forma muy sencilla de hacerlo es con un archivo .htaccess
Si es solo una página:
Redirect 301 /vieja.html http://www.example.com/nueva.html
O puedes utilizar expresiones regulares con mod_rewrite y redirigir muchas:
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301, L]
12/05/2009
Post de recordatorio. Para cambiar el hostname de un servidor basado en Debian solo tienes que editar el archivo de hostname.
Lo que aprendí en el día -n00b- es que no tengo que reiniciar el servidor para que el cambio tenga efecto, solo correr un script.
/etc/init.d/hostname.sh start
Usualmente el prompt por default trae el hostname incluido, pero también puedes revisarlo con el comando hostname, y con una opción te da el dominio completo.
También puedes cambiar el hostname actual con el mismo comando, pero los cambios no son permanentes.
7/05/2009
En Tux Radar tienen un excelente tutorial especialmente pensado para aquellos que se esten iniciando en Python o tengan curiosidad de como hacer rápidos prototipos de juegos.
El objetivo del juego es evitar que los círculos que estarán rebotando por la pantalla toquen el puntero. Esto en 55 líneas de código bien explicadas.

Lo único que necesitas es la famosa librería para juegos Pygame y estas listo.
Enlace: Build a mouse game with Python
6/05/2009
Como Linux, Mac tiene bastantes opciones para utilizar IRC ya sea en consola (irssi ftw!) o gráfico.
Yo utilizo Colloquy, un cliente bastante bueno y que se integra muy bien a todas las interfaces que hay para Mac. Mi única queja es que si bien el sistema de notificaciones es muy completo, me parece que tiene muchas opciones por defecto bastante raras, nunca me entero de nada si no las modifico.

También probé un tiempo Ircle que es bastante usado, pero solo puedo decir que se alejen de él. Se siente como utilizar software de hace 15 años y el sistema que tiene de separar canales por ventana hace que te equivoques sobre donde escribes a cada rato. Es eso o que mis dedos son muy torpes.
Otra buena opción, pero que no se siente tan nativa, es utilizar el port para Mac del siempre bueno X-Chat.
1/05/2009
¿Recuerdan la buena beta de MySQL Workbench 5.1? Pues parece que el equipo de desarrollo se ha puesto la pilas para sacar un desarrollo estable pronto. Ahora ya esta lista la alpha de la versión 5.2 para tu sabor preferido de Mac, Linux o Windows. A probar.
Enlace: Descargas de MySQL Workbench
30/04/2009
Nos guste o no a los que apoyamos el software libre, esta claro que las bases de datos comerciales son mejores que las de software libre. Mejores por tener mas funcionalidades acompañadas del mejor rendimiento.
Y tiene sentido, con las empresas millonarias y los grandes equipos de desarrollo que las respaldan. Pero esto no significa que sean mejores para todos los casos, especialmente con el dinero que cuestan. ¿No necesitas un Porsche para ir a la tienda de la esquina cierto?
James Devlin lo explica mejor (imprescindible leer ese texto) de lo que lo podría hacer, ¿Qué mejor que con referencias de Star Wars?
“Actualmente me gusta pensar en SQL Server y Oracle como las estrellas de la muerte del universo de bases de datos relacionales. Extremadamente poderosas. Monoloticas. Brillantes. Complejas casi más alla de la comprensión de una sola mente humana. Y un monumental desperdicio de dinero excepto en aquellos casos raros en que realmente necesites destruir un planeta.”
El problema con esto es que con “mejor” solemos entender que las otras soluciones son pobres. Y no es asi, tanto PostgreSQL como MySQL con bases de datos probadas por millones de sitios y que trabajan con clientes grandes.
La realidad es que será raro el caso en que necesites algo más de lo que ofrecen las soluciones libres, asi que si alguna vez esta en tu poder de desición, analiza las opciones antes de tirar tu dinero.
“Utiliza las bases de datos libres cuando puedas, las comerciales cuando lo absolutamente lo necesites”