Archive for 14 agosto 2015

Testing SMTP and IMAP with GreenMail

14 14+00:00 agosto 14+00:00 2015

If you want to write some SMTP, POP3 or IMAP client code, maybe you’ll consider using GreenMail. This is a Java library that implements a mail server, and you can easily use it for testing purposes. You include it in your project, and in your tests, you can just start the server, send fake messages to it, or fetch them. You can connect to it and directly test IMAP, POP3, SMTP and their secure versions.

You can do something like this:

// ALL means you start all the protocols / servers 
// (SMTP, IMAP...) but you can choose only
// some of them.

GreenMail server = new GreenMail(ServerSetup.ALL);
server.start();

/* Do your stuff */

server.stop();

“Your stuff” can be sending mail to your local host, and then checking. You can create a user before sending him an email:

// Creating the user
server.setUser("testuser@localhost.com", 
	"testuser",
	"testpassword");
// Sending him an email
GreenMailUtil.sendTextEmailTest(
	"testuser@localhost.com",
	"sender@localhost.com", 
    	"First message subject",
	"This is the first body");

but if you don’t, a mailbox is automatically created when an email is received. Cool.

There is one annoying problem. In theory, according to documentation, GreenMail listens to port 3025 for SMTP. But when you try the above code, you find that mail sending is not working, and you get a connection refused exception.

Then you add a rule to your firewall to make sure port 3025 is allowed, to no avail.

And finally, in my case, a look at netstat or tcpview or whatever shows that GreenMail SMTP is listening to port 25, just as usual in any other SMTP server, in spite of what the documentation says. GreenMailUtil.sendTextEmailTest(), on the other hand, seems to be trying to connect to 3025, so it doesn’t match.

I’m not sure why this is happening. But my solution was to explicitly create my SMTP server at port 3025. Instead of using the predefined ServerSetup.ALL or other constants, you can be more explicit and create an array of ServerSetup objects, specifying port, address and protocol. So I changed the above code and created my servers like this:

ServerSetup[] ss = {
    	new ServerSetup(
		3025, 
		"127.0.0.1", 
		"smtp"),
    	ServerSetup.IMAP
};

server = new GreenMail(ss);

Notice that the string for the protocol “smtp” MUST be lowercase. In this case I use IMAP as well because I wanted to test IMAP, but it’s up to you which serversetups you include in that list. The IMAP predefined one worked well for me, so I didn’t explicitly create a new object for that one.

I’m not sure whether all of this is in the documentation, which is far from perfect. I had to find it myself just by trying and debugging.

Of course, that “3025” is here to make it clearly visible in the example; in your production code, you should use some constant that you can easily change just in case future versions of GreenMail switch to a different port 🙂 The same considerations apply to other constants in the code, which you should, as usual, subject to your coding expertise. Just in case.

Escribiendo sobre música (II)

12 12+00:00 agosto 12+00:00 2015

Va a haber que abrir un blog solamente para esto, dado el florecimiento del género.

Firma hoy un tal Álvaro Macías un artículo que se titula Aquel vinilo que sigue girando, explotando… (sí, “explotando” con puntos suspensivos detrás).

Me intriga, claro. Y resulta que por lo visto la excusa es el “día mundial del vinilo”. Los subtítulos son, el primero:

Dedicarle una jornada de pleitesía al LP es una deificación tan inane como procaz

En toda la boca. El segundo subtítulo:

Pero una aguja que hace explotar la muesca continuada de la infancia musical tiene, por orgullo, el tizne oscuro de la nostalgia

Ay, por favor.

El resto del artículo va a peor (sí, es posible). Habla de pornografía, de onanismo, de orgasmos. Me imagino la cara del personal de tiendas de discos a quien le hizo este tipo de preguntas estúpidas, pensando: “¿pero esto me lo está preguntando en serio? ¿Está borracho? ¿Y qué coño le contesto yo ahora?”

Bueno, un montón de pedantería, de palabrería, de vacío, de humo, y de sandeces.

Parece mentira a quién le publican cosas en los periódicos, con lo difícil que está.

 

 

La agricultura biodinámica

12 12+00:00 agosto 12+00:00 2015

En La Nueva España veo un titular, que se supone que es una cita de un entrevistado:

“Lo que ocurre en el suelo también depende de la posición de los planetas”

Y claro, tengo que ir a leerlo. No me queda otro remedio.

El que lo dice es “directivo de la Asociación de Agricultura Biodinámica de España”. Y desconozco casi todo lo que se puede conocer sobre agricultura biodinámica. Pero… el tipo habla de la posición de los planetas, y no está hablando de astronomía ni de mecánica orbital. Hablar de la posición de los planetas para cualquier otro uso ya descalifica el invento, de mano.

Por otra parte, eso de “biodinámica” suena a científico que tira p’atrás, y a la vez no parece significar nada. Vamos acumulando ingredientes.

El subtítulo dice que “el cuerno de vaca, bien conservado y removido con el agua más pura, es uno de los preparados más importantes para el abono”. No sé si el cuerno de vaca sirve como abono, pero eso de “removido”… ya entramos en la alquimia. Y “el agua más pura”… como se entere de las teorías homeopáticas lo lleva claro, no hay agua pura, toda tiene infinitas propiedades. Pero quizás las conozca, porque más adelante dice que el proceso (lo de los cuernos) “se culmina con una dinamización, ya que hay que hacer un removido en un agua lo más pura posible”. Ay, ay. Qué mala pinta tiene esto.

Y a la primera pregunta, “qué es la agricultura biodinámica”, el entrevistado contesta:

Usa un tipo de preparados elaborados a partir de animales y plantas naturales, que fueron diseñados pro Rudolf Steiner, un científico y filósofo austriaco de principios del siglo XX.

Acabáramos. Ya tenemos palabrería molona (“biodinámica”), mezclada peligrosamente con terminología carpetovetónica y misteriosa como “preparados”, “dinamización”, “removido” (reconozcamos que le faltó la palabra estrella, “energía”, aunque sí usa la otra, “desequilibrio”), y un profesor listísimo de nombre germánico y de hace muchos años. Vamos, todos los síntomas habituales de la tontería y el engañabobos.

Es decir, que las enseñanzas de un tipo de principios del siglo XX que empezó a soltar sus tontadas, que aparentemente incluían observar la posición de los planetas para decidir cuándo sembrar, es más interesante para un agricultor (ecológico o no) que lo que tengan que decir la biología o la bioquímica del siglo XXI.

No he buscado nada sobre agricultura biodinámica, y es un término que no había oído nunca. Pero sólo con eso que he citado arriba (con el titular ya bastaría para echar a este tipo a gorrazos) me juego un huevo de pato a que es una tontería como una casa.

Por cierto, el entrevistado, Pablo San Miguel, no fue capaz de mantener su explotación agrícola, y de hecho ahora aparentemente no es agricultor, o no dice serlo. Sólo da consejos a los demás. Sobre cosas para las que no hace falta demostrar ni estudiar nada, claro. Que estudiar bioquímica cuesta demasiado trabajo, es mejor leerse unas revistas.

Y los periódicos, y los periodistas, a lo suyo. Ole la búsqueda de la verdad y el espíritu crítico.

 

Hitting a URL from Java

11 11+00:00 agosto 11+00:00 2015

The simplest (and quickest) form I’ve found so far to hit a URL from Java code (or, for that matter, to invoke a REST web service, which is more or less the same) is:

	public static String hitUrl(String urlString) throws Exception {
		URL url = new URL(urlString);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestProperty("Accept", "text/html");

		if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
			throw new RuntimeException("Failed : HTTP error code : "
					+ conn.getResponseCode());
		}

		BufferedReader br = new BufferedReader(new InputStreamReader(
			(conn.getInputStream())));

		String buff;
		String res = "";
		while ((buff = br.readLine()) != null) {
			res = res + buff + "\r\n";
		}

		conn.disconnect();
		return res;
	}
	

Setting up Selenium

10 10+00:00 agosto 10+00:00 2015

I’ve just started to have a look at Selenium to automatically test web sites from Java code (and hopefully do other things). This is just a note on how to install Selenium in a few words. It’s quite easy once you’ve figured out what is relevant or not.

  • Selenium is a set of Java libraries that allow you to manage a browser from your code. (They rely on an additional native .EXE file as well; more on this later).
  • There are several things: Selenium RC, Selenium WebDriver, Selenium Server. Forget about everything except WebDriver. RC is an older version (Selenium 1.0), and you will use the server only if you do some special things. Initially, you need Selenium WebDriver (which is equivalent to say “Selenium 2.0”) and that’s it.
  • You have to download Selenium itself. It’s a .zip file (some 20 MB) with a lot of .jar files inside. Take those .jar files (all of them; there are two at the root and a bunch of them inside a directory), copy them wherever you like, and add all of them to your project build path in Eclipse (with “Add external .JARs”).
  • There is an additional thing you will need. When you try to use some “browser”, there is an external (plaftorm-native) executable that handles that browser. And you’ll have to download that executable separately, copy it to some directory of yours, and refer to it from your code. This “driver” is sometimes called “server”, because of how Selenium libraries communicate with it, but it has nothing to do with “Selenium server” as mentioned above (an unfortunate and confusing double use of the word “server”).

So, in my case, I had to do something like this:

  1. Download Selenium itself from here: http://docs.seleniumhq.org/download/. In my case, I downloaded the Java version. But you can use other languages.
  2. Unpack, get the .jar and add them to the build path of muy project (add external jars).
  3. Download the Internet Explorer executable (from here: http://selenium-release.storage.googleapis.com/index.html; don’t get confused if they call it “IEDriverServer” when “server” should be reserved for other uses in this context, but this is the file you need). Or maybe the Chrome executable from here: http://chromedriver.storage.googleapis.com/index.html?path=2.16/ Or the Firefox, or whatever; it’s up to you which browser you want to automate.
  4. Put the executable wherever you want. And then add this line to your code:
    System.setProperty(“webdriver.chrome.driver”, “exe/ChromeDriver/chromedriver.exe”);
    or this one:
    System.setProperty(“webdriver.ie.driver”, “myexefolder/IEDriver/IEDriverServer.exe”);
    or whatever, stating the relative or absolute path where your exe file is. This line must be executed before you call the constructor for the driver: WebDriver driver = new InternetExplorerDriver(); or whatever.
  5. [UPDATE] There is a “generic” browser, which comes from the HtmlUnit framework. This is a Java implementation of a non-GUI browser; it works as a browser, and emulates JavaScript as well. If you use this one, you don’t need external executables, since it’s included in the Selenium libraries, and in addition it’s cross-platform. In that case, remember that HtmlUnitDriver has JavaScript disabled by default, and you have to explicitly enable it; have a look at https://code.google.com/p/selenium/wiki/HtmlUnitDriver.

That’s it. From there, you’ll be able to do things like driver.get(someUrl); and so on.

 

Moonglow – Transcribiendo a Russell Malone

10 10+00:00 agosto 10+00:00 2015

El mi profesor díxome que esti branu trabayara el swing, el tempo, más que ná. Y escoyí, nun sé si con aciertu o non, un solu cortín de Russell Malone: Moonglow, del discu Bluebird que grabó col pianista Benny Green. Y equí dexo cómo va la cosa hasta agora:

Pémeque meyoré un poco, nun ta tan apresurao y tien un poco swing, pero dempués de velo grabáo doy-me cuenta de que he meyorar muuuuncho tovía (sigo puxando un poco). Grabase ye persano…

Curioso: Youtube díxome que detectara el usu d’una música con drechos d’autor, y que podía facelo pero que diben poner anuncios nel vídeu. O sea, que la máquina que atopa cachos de grabaciones… detectó que esto ye un cachu de Moonglow, por Benny Green y Russell Malone, que me paez téunicamente ablucante. Pero pa enriba… cree que ye el orixinal, y nun ve que yo toi tocando, lo que me paez ya increíble (y un halagu pa mí, que hasta la máquina cree que soy Russell Malone).

Guitarra: Ibanez Artcore AG75.

Cámara: cámara frontal del mi móvil. Vídeu cortáu con FFMPEG.

Soníu: grabáo direutamente a la mesa Zoom R16, amestáo con Audacity.

Montaxe: MemoriesOnTV 4.0.

Los pecados de los guitarristas

5 05+00:00 agosto 05+00:00 2015

Anterior: Los pecados de las cantantes

Ya que hablamos de pecados, pues ahora les toca a los guitarristas. Nuevamente, se trata de cosas que no dependen directamente de lo bien o mal que tocas, sino de lo que hay alrededor.

El volumen. El volumen. EL VOLUMEN. Se te tiene que oír, sí. Pero si eres uno de esos guitarristas que atruenan, no sé si tienes solución o es mejor cambiarte por otro. Es probable que estés sordo, que es una lástima, o que no te importe lo que tocan los demás, que es un pecado. No sólo se trata de evitar el sonido atronador; es que según lo que se esté tocando tienes que variar tu volumen sobre la marcha y estar detrás siempre que debas estar detrás.

Afina. Afina siempre antes de tocar. Con una guitarra desafinada no puedes tocar bien, y da igual lo que hagas. Alguien que toca con la guitarra desafinada, y no se da ni cuenta, no debería tocar en público.

Espabílate. Una de las cosas más insufribles es el guitarrista que se sube al escenario con toda la parsimonia, empieza a buscar un cable, despacito… así hasta que todos están preparados, esperando por él, y entonces empieza a afinar desde cero, y cuando por fin acaba empieza a colocar las partituras, y… Tío, procura afinar antes de subir, ten todo pensado, muévete y no hagas esperar a nadie.

Quinta la guitarra. Si tienes que estar afinado, es obvio que una guitarra desquintada no se puede afinar. Si no sabes lo que es una guitarra desquintada, mira esto.

No des la paliza con el sonido. Como ya dije para las cantantes: si nunca te quejas del sonido, malo. Pero si eres el único que se queja, mucho peor. Una guitarra eléctrica es un instrumento artificial, y el sonido se puede moldear hasta el infinito; si te pones tiquismiquis no vas a acabar nunca. Algunas cantantes se obsesionan con el timbre de su voz, cuando lo que importa es la afinación o el gusto o mil cosas más; los guitarristas que se obsesionan con el sonido y el efecto y la distorsión cometen el mismo error.

No te pierdas en los juguetes. Los guitarristas son muy dados a coleccionar guitarras, a gastarse cantidades de dinero en ellas, y no digamos en pedaleras, efectos, amplificadores, que si válvulas p’arriba y transistores p’abajo, que si esta pastilla o la otra, que si entorchado plano, que si cuerdas de bronce o de esta marca o de la otra… Las combinaciones son infinitas y el pijerío también. Insisto en que el sonido es muy importante, y todo eso está bien… hasta cierto punto. Para que haya una diferencia importante entre que toques con una guitarra de 500 € o una de 3.000 € tienes que ser muy, muy, muy bueno y haber resuelto todas las notas falsas, fallos de tempo, acordes mal puestos. Deja los botoncitos y céntrate en tocar bien con un instrumento decente, bien mantenido, afinado y quintado.

Cuida las cuerdas. Es increíble cuánto duran unas cuerdas si, cada vez que terminas de tocar, les pasas un trapo seco. Sin más. Al quitar la humedad y la grasa que han dejado las manos, las cuerdas se oxidan muchísimo menos. No hay nada más asqueroso, y que quite más las ganas de estudiar, que unas cuerdas llenas de mugre. Y prueba a tocar siempre con las manos limpias, recién lavadas; disfrutarás el doble (sí, con tu guitarra baratita). Las cuerdas se oxidan y gastan de forma desigual, y es imposible afinarlas bien. Si están limpias, responderán durante muchísimo tiempo.

Aprende música. He llegado a la conclusión de que la guitarra es un mal instrumento para leer, y tampoco es el ideal para aprender música a través de él, así que no te culpo si no le ves mucha utilidad inmediata a aprender música. Pero aunque no se la veas, o no sea inmediata, la tiene; estás haciendo música, y la estás haciendo con otros músicos. No es algo que vayas a resolver en dos días, pero es una cuestión de actitud: aprende la música que puedas, aprende a leer todo lo que puedas, y dedica un poco de esfuerzo a eso, constantemente, durante el resto de tu vida (que es lo que te va a llevar). Merece la pena. No sólo eso; es tu obligación. No vengas con el rollo autodidacta o el instinto o la inspiración, porque te diré lo mismo que a las cantantes.

Afianza las melodías. La guitarra también es un instrumento traicionero para las melodías; he visto a guitarristas muy buenos dar notas falsas en melodías que dominan. Precisamente por eso, tienes que trabajarlas más que el resto de los instrumentistas.

Escucha. Casi, casi, nos estamos metiendo en la forma de tocar, que no es el tema aquí. Tocar la guitarra requiere mucha atención, y la que le brindamos a ella se la quitamos a la música del conjunto. Pero hay que esforzarse en escuchar lo que pasa. Si lo hiciéramos, si levantáramos la cabezona y miráramos alrededor, se irían de un plumazo muchos problemas de tempo, de volumen inadecuado, de afinación… Dejaría de parecer que los guitarristas vamos por libre dentro del grupo (bueno, esto les pasa a muchos instrumentistas, la verdad).

Por ahora, vale. Como digo, habría mil cosas que decir sobre la forma de tocar, pero no vamos a meternos.

Los pecados de las cantantes

3 03+00:00 agosto 03+00:00 2015

Todos los músicos tienen sus tópicos y chistes, y las cantantes también. Lo de “las”, al menos dentro del jazz, sí que no es un tópico; hay una abrumadora mayoría de cantantes mujeres.

Así que voy a referirme a ellas en femenino, por estadística y también por feminismo (los cantantes varones pueden darse por incluidos). No va de consejos para cantar mejor, va de pecados que se cometen al margen de cómo canta cada cual. Mira a ver con cuántos te identificas. Nota previa importante: no debes sentirte mal por ningún error que tenga que ver con no saber algo ahora, ni por tomarte tu tiempo (hablo de años) para aprenderlo. Solo debes sentirte mal si te instalas cómodamente en la ignorancia y supones que no tienes por qué aprender nada más porque para eso eres la cantante…

Sin ningún orden en particular:

Sábete los tonos de tus temas. Tu voz es la que es, y que haya que transportar un tema a tu tono no es culpa tuya. Pero que no sepas qué tono es, o lo digas mal y todos tengan que parar y volver a empezar, sí es culpa tuya. Acláralo, recopílalo y apúntalo; le facilitarás la vida a mucha gente (sobre todo a ti).

Sé consciente de lo que implica un cambio de tono. No mires con desdén a un tipo que no se ve capaz de tocar sobre la marcha en el tono que le digas. No tienes que pedir perdón porque tu voz exija otro tono; sí tienes que mostrar cierto tacto y compañerismo. Y plantéate si realmente es necesario el cambio de tono o puedes adaptarte tú, en vez de todos los demás.

Preocúpate de llevar papeles a una sesión si es necesario. Si cualquier músico va a proponer un tema que los demás no conocen, o en el que ha hecho cambios o arreglos, es normal que proporcione las partituras correspondientes (bien escritas y claras). Y la cantante, supuestamente, es un músico más.

Comparte la responsabilidad. Escena típica: mandas un mensaje a tus compañeros con el título de un tema, les haces contestarte para preguntar el tono, tienen que buscar la partitura, transportarla si no la encuentran en ese tono… Sí, pueden hacerlo, pero también puedes hacerlo tú. También es muy cómodo cantar con “director”: que te hagan todas las señales, porque así no tienes que aprenderte la forma ni contar nada.  Piensa si hay alguna razón para que tú estés exenta de estos trabajos.

Otra variante de esto: los materiales. ¿Alguna vez te han prestado un cable de micro? Por otra parte, ¿alguna vez has prestado tú un cable a un guitarrista que no traía? Las razones por las que alguien trae un cable extra son aplicables a ti. ¿Llevas a las jams tu micrófono de condensador favorito, sin preocuparte de si hay alimentación phantom o no? ¿De si hay conectores o amplificadores adecuados? ¿Necesitas atril pero no quieres cargar con él? Bueno, alguien se preocupará de todo eso, ¿no? Sí; por ejemplo, tú misma.

Respeta el tiempo de los demás músicos. Un instrumentista necesita una antelación para preparar los temas, y cada uno requiere bastante trabajo (y no puede practicarlos en el coche o en la ducha). Concreta el repertorio cuanto antes, no les hagas trabajar en temas que no vas a cantar, y no descartes a la ligera temas en los que han estado trabajando. “No voy a poder cantarlo ahora sin lesionarme” es una razón de peso; “no me apetece mucho cantarlo ahora” es descartar a la ligera.

Estudia música. Todos los músicos aficionados sabemos muy poca música, hacemos lo que buenamente podemos, intentamos ir mejorando poco a poco, y es tarea para toda la vida. He visto muchas cantantes, incluso profesionales, que piensan que eso no va con ellas, que son autodidactas, que cantan a base de talento o de emociones (traducido: ni sé ni quiero saber).

No aludas a “mis músicos” ante el público. No son tus súbditos ni tus mascotas. La voz humana juega con muchísima ventaja ante el público; pero aunque este no sea consciente, el trabajo que se está haciendo es de equipo, y no es infrecuente que “tus músicos” hayan contribuido a tu éxito con más trabajo que tú misma. El público que piense lo que quiera pero, entre vosotros, les debes a “tus músicos” tu reconocimiento como tus iguales, no como tus secundarios.

Respeta a tu compañero mientras hace un solo. Ni se te ocurra saludar a alguien o charlar. Y da igual que sea en un teatro, en la terraza de un bar de fritanga o en un ensayo en zapatillas y bata; no sólo es molesto, es un insulto. Mantén total concentración, atención y respeto, siempre. Si no puedes, finge.

Insisto: respeta a tu compañero mientras hace un solo. Si te desentiendes, es probable que no te enteres de cuándo termina, que no veas sus señales, que entres a destiempo. Tendrá que estropear su intervención para arreglar tu error. Encima de maleducada, poco profesional.

Respeta a tu compañero mientras hace un solo, te lo digo otra vez. La música se transmite y se sostiene en el aire; es como una pompa de jabón. Si te desentiendes, el público lo ve, y rompes completamente la tensión de la actuación, todo se cae. Que te apartes a un lado del escenario o bebas agua mientras escuchas respetuosamente no rompe esa tensión; que hagas señas a tus amiguetes sí.

Asume las circunstancias como los demás. Si te da igual el sonido, mal asunto; pero si siempre eres la que se queja del sonido, mal asunto. Cantar al aire libre puede ser molesto; tanto como tocar la guitarra con las manos frías o el piano en un asiento incómodo. Y así todo. En especial, no seas una sibarita de los micrófonos; dado un micro aceptable, la diferencia la marcas tú por encima de todo.

En una jam session eres una más. Si en una actuación programada eres parte del equipo (al margen de lo que el público piense), en una jam no digamos. Asume la pérdida de control que asumen todos; uno nunca sabe en qué temas va a intervenir, si va a poder hacerlos como y con quien quiere, ni siquiera si va a tener ocasión de tocar. Si vienes de diva, a última hora, esperando que todos los demás músicos se pongan a tu alrededor, vas mal.

Respeta las letras. Memorizar todas las letras es difícil, y nadie es perfecto. Pero no tienes carta blanca para inventártelas por norma. Si te equivocas, no es grave, es un simple error y hay que tratarlo como tal; lo que no vale es la dejadez.

Respeta el idioma. Hablar un idioma extranjero también es difícil y nadie es perfecto ni falta que hace. No es cuestión de perfección, sino de actitud. Las consonantes finales están para pronunciarlas; los plurales no son lo mismo que los singulares; los artículos y preposiciones no son opcionales; los fonemas no son intercambiables. Vigila, insiste, mejora.

No te flageles. Es muy aburrido y, para los demás, estar convenciéndote de que no ha pasado nada grave, o de que eres buena, consume muchas, muchas energías. Sé honesta, actúa de buena fe, arriésgate, date el trompazo, sigue adelante. De todas las cualidades de un músico, la perfección es lo menos relevante.

Habla solamente cuando el espectáculo lo requiera. Si no ves bien la partitura, o algo te salió mal, la experiencia del público apenas se resiente. Pero si a media canción dices “no veo bien” o “huy, me equivoqué, perdón”, interrumpes la experiencia, los despiertas de un sueño. Tampoco debes dejarlo ver con ningún gesto. Tus fallos no son relevantes para el público, no es lo que han venido a ver, pero cuando tú los señalas los conviertes en protagonistas.

Cuidado con la interacción con el público. Es un don, y que el público se lo pase bien es estupendo. Pero no van a dar palmas a tempo, ni afinar cuando hagan coros, ni pedirte los temas que esperas que te pidan. Así que… aunque tengas el micrófono, mejor que lo que hagas no pille de sorpresa a tus compañeros o, peor aún, los meta en problemas.

De momento, me parece que vale; iba a escribir tres o cuatro puntos y me salieron todos estos. Otro día prometo tomarla con los guitarristas.

Siguiente: Los pecados de los guitarristas