«Andante con moto». Rapidillo, ma non troppo…

Un blog acerca de cualquier cosa excepto música clásica.

Turdle, version 0.1

sin comentarios

This is a little PHP script I’ve been using on my personal/home web server. I’ve improved it over time and suddenly I got in this sharing mood and thought:

«Gee, the rest of the world should have the pleasure of running this script on their web servers with PHP enabled. They should have the opportunity to simply copy it into a directory under their DocumentRoot and point their browser to it.»

Yeah, that’s what I thought. And now, a few months later, I remembered having thought that. So here it is: turdle_0.1.php. Rename it as you see fit (at least remove the .txt extension).

Like the header says:

/*
 * TURDLE is "The Ultimate Recursive Directory Lister, Enhanced"
 * it's not called ÑORDO because that doesn't make an nice acronym.
 * 
 * It lists the content of the defined directory and creates
 * links to it's content.
 * It does not show files starting with ".".
 * It does not show itself.
 * It does not validate as HTML 4.01 Strict!
 * It peruses the word "it" in it's header
 * 
 */

By the way, it’s published under the GNU/GPL, too.

Escrito por Lucas Vieites

10 de Marzo de 2010 a las 21:03 h

Estado de interrupción

sin comentarios

Estrategias sencillas para evitar volcar tu «pila» mental
por Brian Tarbox

Original: «Interrupt Mood» by Brian Tarbox, PragPub Issue #5 [PDF] [epub] [mobi], translated by Lucas Vieites.

Dicen que no hay preguntas tontas, pero hay muchísimas preguntas innecesarias.

Sé que has tenido esta experiencia: estás metido profundamente en un problema de programación cuando de repente alguien te para en seco con alguna pregunta trivial. Tardas cinco segundos en responder a la pregunta y veinte minutos en reconstruir tu pila mental.

Como ingeniero de software he intentado durante demasiados años inculcar a jefes y colegas que estas interrupciones son caras, sin éxito. No me refiero a preguntas justificadas, aquellas a las que solo tú sabes responder, aquellas que bloquean el trabajo de la persona que pregunta. Me refiero a las preguntas tontas que el sentido común o una búsqueda de 30 segundo en Google podrían responder. Estas interrupciones afectan a la productividad además de ser totalmente irritantes.

Leer todo el artículo »

Escrito por Lucas Vieites

05 de Marzo de 2010 a las 17:03 h

Por qué programo como lo hago

con 2 comentarios

Hace poco me tocó añadir ciertas funcionalidades a una aplicación web que escribí hace unos seis o siete años. Además de echarme algunas risas por alguna de las «barbaridades» que me encontré al revisar los archivos, me pasé un buen rato formateándolos para poder ver bien el flujo del código y comprender qué pasaba en cada sección. Y es que hace seis años todavía no tenía un estilo de código definido.

Cuando empecé a programar en PHP venía un poco viciado de programar en C y javaScript y hacía cosas como:

1
2
3
4
5
6
7
8
9
10
11
12
function mifuncion()
{
	// Función para hacer algo
	if (condicion)
	{
		// hacer una cosa
	}
	else
	{
		// hacer otra cosa
	}
}

desperdiciando valiosas líneas, algo que aprendí a evitar cuando los archivos de código se hacen más y más grandes y solo tienes 1024 píxeles de alto en tu pantalla.

A día de hoy ese mismo código lo pondría así:

1
2
3
4
5
6
7
8
function mifuncion() {
	// Función para hacer algo
	if (condicion) {
		// hacer una cosa
	} else {
		// hacer otra cosa
	}
}

ahorrándome cuatro líneas.

Como el hombre es un animal de costumbres sigo haciendo esto porque, a pesar de que las pantallas son cada día más grandes, también los IDEs ocupan cada vez más espacio en pantalla con sus barras de herramientas, de estado y plugins de calidad de código y no sé qué mil cosas más. Y no me hagáis hablar de la manía que le ha entrado a los fabricantes por las pantalla panorámicas ;-(

Mi estilo actual de programación está fuertemente basado en las recomendaciones de Sun (ahora ya parte de Oracle), publicadas en sus «Code Conventions for the Java Programming Language» (traducido al español por javaHispano -no tengo enlace al documento original- y revisado y corregido por un servidor: Convenciones de código para el lenguaje de programación Java).

NOTA: también estoy a favor de usar tabulaciones de cuatro espacios, a pesar de que el plugin de wordpress ponga 8, y en contra de lo que defiende Jamie Zawinski en el artículo «Tabs vs Spaces» que he puesto de «Obligada lectura» en la columna de la derecha.

Escrito por Lucas Vieites

11 de Febrero de 2010 a las 13:02 h

Cambio de nombre del blog: «Andante con moto»

sin comentarios

A partir de hoy este blog se llamará “«Andante con moto». Rapidillo, ma non troppo…”. Una simple referencia a los tempos de la música clásica que, al oído del profano (como un humilde servidor), pueden sonar graciosos. Más información en la Wikipedia.

Escrito por Lucas Vieites

21 de Enero de 2010 a las 15:01 h

Publicado en Web, actividad online, internet

Unha Grande Chea cumple 25 años

sin comentarios

Falta poco para carnaval y estos días Cambados anda revolucionado con el aniversario de plata de esta comparsa, convertida hace unos años en «Asociación Cultural e Deportiva». Más información acerca de los eventos de celebración en la web de «Unha Grande Chea».
P.D.: Me acabo de enterar por mi hermana de que fui el «amigo» nº 2.000 de «Unha Grande Chea» en Facebook.

Escrito por Lucas Vieites

18 de Enero de 2010 a las 17:01 h

Publicado en Web, humor

Año 2010, el «no inicio» de una nueva década

sin comentarios

No dejo de leer en artículos de prensa y blogs referencias a la nueva década que hemos empezado con la entrada del año 2010 y, parece mentira, pero me sigue asombrando que la gente no se haya quedado con el tema cuando se discutió fervientemente hace ahora diez años, cuando empezábamos el año 2000.

También entonces la gente se alegraba muchísimo de entrar en un nuevo siglo, el tan esperado siglo XXI (veintiuno, para los que hayan nacido después del ‘95). Y también entonces me harté de convencer a la gente de que no se acababa el siglo hasta que no se acabara el año 2000. La analogía de los euros (o pesetas, según con quien hablara) me salía tan de carrerilla que ya había perdido su significado (¿nunca has repetido tantas veces una palabra, por ejemplo «patata», que al final acabas dudando de si realmente se dice así?, pues eso).

Lo que yo llamo la «Analogía de los Euros» viene a ser lo siguiente:

Digamos que me propongo darte veinte euros en céntimos (veinte siglos en años), y te voy a dar diez céntimos de cada vez (décadas). No tendrás el primer euro hasta que te haya dado cien céntimos (diez paquetes de diez céntimos). Cuando te doy el paquete de céntimos número once tendrás un euro y diez céntimos. Así sucesivamente hasta que te haya dado 1.900 céntimos, que son 19 euros. A partir de este momento comenzaré a darte el euro número veinte («siglo veinte»). ¡Ojo! Tienes diecinueve euros y pico, pero estás acumulando el euro número veinte. Después de haberte dado 9 paquetes más tienes 19,90 euros. Los últimos diez céntimos te los doy uno a uno. Con el siguiente tienes 19,91. Uno más y son 19,92. Siete céntimos más tarde tienes 19,99 euros (acabamos de completar el año 1.999) y cuando te doy el céntimo número 2.000, es decir, cuando termino de dártelo y todas las fracciones de ese céntimo (todos los días del año 2.000) hayan pasado a tu mano, es en ese momento, y solo entonces, cuando habrás obtenido 20,00 euros.

Normalmente la gente me queda mirando con la vista perdida, balbuceando «Ah, claro, tienes razón». Pero, en secreto, sé que no lo han entendido. Y lloro un poco por dentro.

Escrito por Lucas Vieites

14 de Enero de 2010 a las 15:01 h

Publicado en sin categoría

Copia de seguridad de bases de datos MySQL

sin comentarios

Para realizar una copia de seguridad de mis bases de datos MySQL solía hacer un «mysqldump» de todo lo que había en el servidor y comprimirlo en un «tar.gz». Esto me funcionó muy bien mientras tenía pocas bases de datos y las usaba todas con cierta frecuencia. Ahora tengo otras necesidades, ya que muchos de los proyectos asociados a esas bases de datos ya no están activos, los he transferido o, simplemente han muerto.

Para que me fuera más fácil poder restaurar solamente una base de datos, decidí modificar mi antiguo script para que volcara cada una de las bases de datos en un archivo distinto. Un par de horas después surgió esto:

#!/bin/bash
# Back up all databases of a server putting each db in a different file
 
# Backup destination directory
BACKUP_DIR="$HOME/backup/"
# Name of the backup file
BACKUP_FILENAME="mysqlbackup"
# Use the date for the filenames
BACKUP_DATE=`date +"%Y%m%d_%H%M%S"`
# Name of the archive file
BACKUP_ARCHIVE=${BACKUP_DIR}${BACKUP_FILENAME}_${BACKUP_DATE}.tgz
TEMP_DIR="/tmp/"
 
# Check if the temporary directory exists, if not, create it
if [ -d ${TEMP_DIR}${BACKUP_FILENAME}/ ]; then
	# directory exists
	echo "Cleaning ${TEMP_DIR} ..."
	rm -rf ${TEMP_DIR}${BACKUP_FILENAME}/*
else
	echo "Creating ${TEMP_DIR} ..."
	mkdir ${TEMP_DIR}${BACKUP_FILENAME}/
fi
 
# Get all database names
DATABASES=`mysqlshow -u root -pmysqlpassword | sed 's/[ +-|]\+//g' | sed '/\-/d' | sed 's/^Databases//g' | sed '/^$/d'`
 
# Dump each db in a different file in the temp dir
for db in $DATABASES; do
	echo item: $db
	mysqldump -v -u root -pmysqlpassword -h localhost --create-options --extended-insert --databases $db > ${TEMP_DIR}${BACKUP_FILENAME}/${BACKUP_DATE}_${db}.sql
done
 
# Create the archive file in the backup dir
pushd ${TEMP_DIR}
tar cfz ${BACKUP_ARCHIVE} ${BACKUP_FILENAME}/${BACKUP_DATE}_*
popd
 
# Remove temp files
echo "Cleaning ${TEMP_DIR} ..."
rm -rf ${TEMP_DIR}${BACKUP_FILENAME}/*
 
# Pretty output
echo "###############################################################################"
echo "   Archive file: ${BACKUP_ARCHIVE}"
echo "   Archive size: "`stat -c%s ${BACKUP_ARCHIVE}`" bytes"
echo "###############################################################################"
echo "End"
echo ""

Creo se explica solo.

Los más vagos lo podéis descargar aquí: mysqlbackup.sh.txt.

No olvidéis darle permisos de ejecución («chmod +x nombre_de_archivo»), cambiar el nombre de usuario y la contraseña en los comandos «mysqlshow» y «mysqldump» y quitarle la extensión «.txt», aunque esto último es opcional.

Escrito por Lucas Vieites

23 de Diciembre de 2009 a las 13:12 h

[PHP] put_select() function

sin comentarios

Función en php para crear un menú desplegable con la etiqueta “select”.

/**
 * put_select returns a string with a filled <select> html form item
 * @name the name of the form object
 * @array_values a "key, value" type array with the values for the form item
 * @marked string containing the default delected value
 * @extra string with extra data for the "select" tag, such as javascript events like "onfocus" etc.
 * @return string containing an html <select> tag
 */
function put_select($name, $array_values, $marked="", $extra="") {
	$string = "";
	// Only create the item if the values are in an array
	if (is_array($array_values)) {
		$string .= '<select name="'.$name.'" '.$extra.'>'."\n";
		$string .= '<option value="--">---</option>'."\n";
		while (list($key, $value) = each($array_values)) {
			$string .= "<option value=\"".$key."\"";
			if ($key == $marked) {
				// The default selected item
				$string .= " selected";
			}
			$string .= ">".$value."</option>\n";
		}
		$string .= "</select>\n";
	} else {
		// Return an error string
		$string .= "ax_put_select() - Error 2002";
	}
	return $string;
}

Ejemplo de uso:

include 'functions.php'; // Aquí esta la función put_select
// bla bla bla ... html form etc.
$meses = array(
	"01"=>"Enero",
	"02"=>"Febrero",
	"03"=>"Marzo",
	"04"=>"Abril",
	"05"=>"Mayo",
	"06"=>"Junio",
	"07"=>"Julio",
	"08"=>"Agosto",
	"09"=>"Septiembre",
	"10"=>"Octubre",
	"11"=>"Noviembre",
	"12"=>"Diciembre"
	);
$mes_por_defecto = date("m"); // Mes por defecto es el mes actual
print('Seleccione un mes:&nbsp;'.
	put_select("losmeses", $meses, $mes_por_defecto, "onUnFocus=\"alert('Gracias!')\";")
	.'<br/>');

Generará este código HTML:

Seleccione un mes:&nbsp;<select name="losmeses" onUnFocus="alert('Gracias!')";>
<option value="--">---</option>
<option value="01">Enero</option>
<option value="02">Febrero</option>
<option value="03">Marzo</option>
<option value="04">Abril</option>
<option value="05">Mayo</option>
<option value="06">Junio</option>
<option value="07">Julio</option>
<option value="08">Agosto</option>
<option value="09">Septiembre</option>
<option value="10">Octubre</option>
<option value="11">Noviembre</option>
<option value="12" selected>Diciembre</option>
</select>
<br/>

Escrito por Lucas Vieites

14 de Diciembre de 2009 a las 11:12 h

Publicado en sin categoría

[PHP] debug() function

sin comentarios

Función utilizada para mostrar el valor de una variable. Normalmente la uso para depurar el código.

/**
 * debug; Prints a string and a variable value in red (for debugging purposes).
 * @name string containing the name of the variable
 */
function debug($name) {
	global ${$name};
	global $debug;
	$the_style = "color:#f00;font-weight:bold;";
	// Only show output if debugging is on
	if ($debug == 1) {
		$var = ${$name};
		if (is_array($var)) {
			echo "##<b class=\"bold\">$name</b><br>\n";
			while (list($key, $value) = each($var)){
				print("\n".'<div style="'.$the_style.'">#=>'.$key.' ==> ');
				if (is_array($value)){
					print('<code>');
					print_r($value);
					print('</code>');
				} else {
					echo nl2br($value);
				}
				print('</div>'."\n");
			}
		} else {
			print('<div style="'.$the_style.'">#'.$name.'=>'.$var.'#</div>'."\n");
		}
	}
}

Ejemplo de uso:

<?php
$debug = 1;
// ...
$mi_mensaje = "Mola Hundo!";
debug("mi_mensaje"); // OJO, se pone el _nombre_ de la variable, no la variable
// ...
?>

Escrito por Lucas Vieites

11 de Diciembre de 2009 a las 15:12 h

Publicado en internet, linux, php, tecnología

Etiquetado con ,

Disfruta la vida

sin comentarios

Cómo relajarse después del trabajo
por Daniel Steinberg

Original: “Get a Life – Slacking off” by Daniel Steinberg, PragPub Issue #3 [PDF] [epub] [mobi], translated by Lucas Vieites.

Cuando un periodista le preguntó a Spencer Tracy qué buscaba en un guión, éste le respondió con la siguiente ocurrencia: «Días libres». Pero, ¿y si sus días libres realmente hacían que fuera un actor más pleno?

Me encanta el ritmo del año académico. Los días tienen una regularidad que resulta refrescante después de la anarquía del verano. Hace un mes las calles estaban vacías a esta temprana hora de la mañana. Ahora hay una procesión de niños, cada u no con su mochila sobrecargada y un instrumento musical. Los chicos de secundaria van en una dirección calle abajo y los de primaria pasan en la dirección opuesta media hora más tarde.

Lo que hace que esto parezca fresco y divertido cuando empieza en septiembre son las vacaciones de verano. Los chicos han tenido una oportunidad de apartarse de la rutina del colegio. Han recorrido sus propios caminos y hecho sus propias cosas. Cuando vuelven en otoño están en un nuevo curso, haciendo cosas distintas de lo que hacían el año pasado. Los de octavo curso utilizan las habilidades adquiridas en séptimo, pero los retos y tareas a las que se enfrentan en octavo son nuevas.

¿Por qué no podemos disfrutar esa experiencia como adultos?

Leer todo el artículo »

Escrito por Lucas Vieites

30 de Noviembre de 2009 a las 12:11 h