Archive for October, 2007
Saturday
Last Saturday, we attended a party at stew and rcox' place in Brooklyn. Biella, Micah, Clint and a bunch of other people were also there. It was very nice and we had a lot of fun. I had the chance to tell Clint that some of his blog postings really intrigue me; I now feel relieved. Besides, I've learned that boxing against Micah on the Wii is so tiring that even days after, my arms and back still hurt
We left at around 1:45 am.
On our way back to Harlem, we stopped to have some tacos at El Ídolo on the 8th Ave and the 14th St, as Kevin suggested me before; for our surprise, they were amazing and have been so far, the best Mexican food we've had in NYC
So, after getting off on the 145th station and walked nine blocks, we arrived to our warm place at 4:30 am.
Uhm…
So Raphaël, what about castrating non-responsive developers? We could probably solve the dilemma by then.
Tip Perl del día: chr y oct en un loop map
La función map de Perl es muy poderosa. O como diría entre cuates, mucho muy poderosa. Básicamente lo que hace es evaluar en un bloque, cada uno de los elementos de una lista.
El día de hoy, en uno de los blogs que mi chava y yo (y otra bola de nacos por ahí de quienes estamos al pendiente) solemos visitar a menudo (porque es muy pendejo y nos gusta reírnos de vez en cuando), la escritora publicó un post con cadenas en binario (típico entre personas que quieren parecer interesantes usando truquitos que siempre han existido). Como buen chismoso que soy, me di a la tarea de descifrar aquella maraña, pues suponía era un mensaje oculto. Como el resultado de dicha cadena es irrelevante aquí, crearé otra diferente que servirá para ejemplificar el tip del día.
my $string = "10100001 01001000 01101111 01101100 01100001 00101100 00100000 01110011 01101111 01111001 00100000 01110101 01101110 00100000 01101101 01100101 01101110 01110011 01100001 01101010 01100101 00100000 01101111 01100011 01110101 01101100 01110100 01101111 00100000 01100101 01101110 00100000 01100011 01100101 01110010 01101111 01110011 00100000 01111001 00100000 01110101 01101110 01101111 01110011 00100001";
Ahora, con un poco de magia de map, podríamos iterar en cada uno de esos octales. Nos ayudaremos de split, para que haga la chamba:
map {
print chr oct '0b'.$_;
} split /\s/, $string;
A map, le pasamos un arreglo. ¿Qué arreglo? El producido por split, que nos devuelve uno, precisamente, a partir de la cadena $string y el delimitador para separar cada uno de los elementos es /\s/, whitespace. Ya obtenido el arreglo, es pasado a map que toma cada uno de los elementos, les agrega el prefijo '0b', para que Perl entienda que la cadena pasada es en realidad un dato binario. Luego oct toma esa cadena y la interpreta como una cadena octal y le pasa a chr el valor correspondiente. Éste último toma ese valor, representado por el número obtenido por oct y lo traduce a su caracter correspondiente en ASCII o Unicode. Ese valor, finalmente, se lo pasa a print que lo imprime en pantalla, desde luego
Le queda de tarea al lector descifrar lo que $string contenía.
Próximo tip, relacionado con map: Divirtiéndonos con grep.
Tip Perl del día: 0E0
Empezaré escribiendo algunos tipcitos que me voy encontrando a mi paso al cabalgar sobre el felpudo lomo del dromedario de Perl durante mi camino por la vida. Las Columnas.pl, tips y otras cosas perlosas podrán revisarse en la categoría 'perl' de este blog.
Estoy trabajando con algunos contadores. Tengo que agregar un nuevo contador por hora e ir sumando el contador principal durante la hora actual, sin mucho problema, ¿no? Sin embargo, si la hora actual no existe en la base de datos, tengo que crear un nuevo registro. Debido a mi pésima capacidad bajo cualquier cosa que contenga las siglas SQL, tuve que platicar con alguien más para que diera una idea simple y clara de qué hacer.
Intento sumar el contador dada la hora actual, pero si no afectó a ninguna fila, entonces creo la fila. Ese concepto es mucho mejor que hacer un count(*) primero, validar si existe la fila, crearla si no, actualizarla si sí. Para verificar si mi primer query (el "UPDATE") afectó a alguna columna, podemos usar el método do() que provee DBI y que hereda tu DBD favorito, en mi caso, pues no tengo otra alternativa y a final de cuentas me termina valiendo un pepino por el momento, uso DBD::mysql.
do() regresa, en contexto escalar, el número de filas afectadas por el query que se le haya pasado. Sin embargo, y aquí viene lo interesante y el tip del día, utiliza un valor llamado "0E0", una cadena. Si fueron afectadas, digamos, 3 filas por el query, do() regresará ese número, pero si no fue afectada ninguna fila, es decir, cero filas, regresa el valor "0E0", que es básicamente "cero, pero cierto".
Como bien se sabe (y si no sabes, deberías saber), valores como cadenas vacías o ceros, se evalúan como falsas en las operaciones binarias en Perl. Sin embargo, "0E0" se traduce a cero, pero con un valor verdadero, lo cual es muy útil para muchos otros casos en los que obtener un cero podamos usar como valor verdadero.
En mi ejemplo, usé:
my $aff_rows = $sth->do($query);
if($arr_rows == 0) { # Este bloque se ejecuta }
Que es diferente a usar:
my $aff_rows = $sth->do($query);
if(!$arr_rows){ # Este bloque no }
El if evalúa si el valor de $arr_rows es cero, que en muchos casos sería validar si es cierto o falso, pero como $aff_rows es en realidad "cero pero cierto", entonces la condición resulta verdadera. En el segundo if, se valida si el valor de $arr_rows no es verdadero, que en casos comunes sería lo mismo que el primer if, pero la validación resulta falsa y no se ejecuta el bloque. Chido, ¿no?
Amiguito…
Spectacularly beautiful woman seeking non-douchebag man
So this is New York. Or not.
New York, NY

New York, NY
Originally uploaded by Richard-
Ahí vivimos. La parte predominante de la izquierda es Manhattan. En el centro se ve un gran rectángulo, eso es Central Park. Para arriba de Central Park se ve un río en diagonal, es el Río Harlem. Vivimos cerca de él, en la 8va Avenida y la 154th. El pedazo de tierra que se ve pegado en el borde izquierdo es una parte de New Jersey.
Hermosísima foto. Aparecen cuatro boroughs de Nueva York: Manhattan, el Bronx, Queens y Brooklyn. Sólo falta Staten Island.
Hermosa foto. En Manhattan se ven dos grandes zonas con rascacielos, los de abajo son del Financial District, los del centro, son la parte medular comercial de Manhattan alrededor de Times Square, Broadway y muchas otras calles famosas.
Dirty Mind




