Python – Agregación y eliminación de elementos de un conjunto

Objetivo: aprender a agregar y eliminar elementos de un conjunto en Python.

Pongámonos al día. En Introducción a los conjuntos presentamos el tipo set para almacenar conjuntos. Aprendimos a crearlos, tanto un conjunto vacío, como con datos preexistentes. Vimos también cómo comprobar si un determinado elemento pertenece o no al conjunto, así como determinar la cardinalidad, es decir, el número de elementos en total.

Con estos conceptos claros, es momento de aprender a realizar otras operaciones básicas, como la agregación y eliminación de elementos a conjuntos ya existentes.

Comencemos creando un par de conjuntos sobre los que trabajaremos:

>>> c1 = set()     # El conjunto vacío
>>> c2 = {1, 2, 3, 4, 5, 6}

Para añadir elementos a un conjunto disponemos del método add.

Por ejemplo,

>>> c1.add('pimiento')
>>> c1
{'pimiento'}

Para agregar elementos a un conjunto hemos de hacerlo de uno en uno. Si intentaras meter varios de golpe se produciría una excepción.

>>> c1.add(5)
>>> c1
{'pimiento', 5}

Observa, tras esta última operación, que los elementos pueden ser de tipos variados dentro del mismo conjunto.

Fíjate en esta otra instrucción:

>>> c2.add((7, 8))

¿No hemos dicho que no se podía introducir más que un elemento cada vez?

En efecto, así es. Pero date cuenta de que no hemos introducido dos elementos, sino sólo uno: la tupla (1, 2). Observa los paréntesis.

>>> c2
{1, 2, 3, 4, 5, 6, (7, 8)}

Si no te fías, comprueba la cardinalidad:

>>> len(c2)
7

en lugar de 8.

Como vemos, agregar elementos a un conjunto es una labor simple. Borrarlos es igual de sencillo, pero nos ofrece más variedad de opciones.

Quizás no te guste tener que retirar elementos de un conjunto. Si prefieres, puedes dejar que Python se ocupe por ti de la difícil decisión empleando el método pop.

>>> c2.pop()
1

El método pop no sólo elmina un elemento, sino que además nos presenta cuál ha retirado del conjunto. No debe llevar argumentos.

>>> c2
{2, 3, 4, 5, 6, (7, 8)}

>>> c2.pop()
2
>>> c2
{3, 4, 5, 6, (7, 8)}

¿Adivinas cuál será el siguiente a extraer?

>>> c2.pop()
3

Pero no te confundas… Aunque podamos predecirlo fácilmente en este caso, considera mejor que Python te devolverá un valor arbitrario. Piensa que los elementos de un conjunto no tienen orden, aunque internamente Python pueda implementarlos de acuerdo a su propio criterio. Observa el siguiente ejemplo:

>>> c3 = {'luis', 'pedro', 'juan'}

Presta atención al orden en que han sido introducidos. Ahora observa cómo te muestra Python el conjunto:

>>> c3
{'luis', 'juan', 'pedro'}

No coincide con el orden de introducción. Ni siquiera están por orden alfabético.

Si ahora hago un pop sé que extraerá a ‘luis’, el elemento primero en ese orden peculiar, pero eso no es fácilmente deducible a partir de los datos iniciales.

>>> c3.pop()
'luis'

Lo dicho: considerara que el valor que extrae pop es completamente arbitrario.

¿Qué utilidad puede tener extraer un elemento arbitrario de un conjunto?

Imagínate que los tres amigos de antes, Luis, Pedro y Juan, han quedado a tomar unas cervezas. Llega el momento de rascarse el bolsillo y nadie parece decidirse a pagar. Mete a los tres en un conjunto y deja que Python decida…

Pero, aunque la elección es arbitraria, te recomiendo que no emplees pop si lo que de verdad buscas es aleatoriedad. Hay otras maneras más justas de hacerlo.

Para eliminar un elemento concreto de un conjunto, usa el método remove:

>>> c2.remove(5)
>>> c2
{4, 6, (7, 8)}

Pero ten mucho cuidado: si el elemento no existe te devolverá un error.

>>> c2.remove(2)
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    c2.remove(2)
KeyError: 2

Si no quieres correr ese riesgo, existe el método discard, que elimina un elemento sólo en el caso de que exista.

>>> c2.discard((7, 8))   # Eliminando la tupla (7,8)
>>> c2
{4, 6}

>>> c2.discard(2)
>>> c2
{4, 6}

Para hacer limpieza completa de un conjunto, sin remordimiento alguno, disponemos del método clear:

>>> c2.clear()
>>> c2
set()

Recuerda, por el artículo anterior, que el conjunto vacío se representa por set(), en vez de {}, que correspondería a un diccionario vacío.

Hemos colocado nuevas piezas sobre el puzzle. En el próximo artículo veremos cómo gestionar operaciones sobre conjuntos de toda la vida como la unión y la intersección.

Javier Montero Gabarró


Python – Agregación y eliminación de elementos de un conjunto


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

La fórmula relativa de una escala musical

Objetivo: presentar la fórmula relativa y su utilidad práctica para el conocimiento de las diversas escalas musicales.

En un artículo anterior definimos la fórmula absoluta de una escala como aquella que indicaba su composición relacionando cada grado con el anterior. Conocida la fórmula absoluta, la determinación de los grados que constituyen la escala era una cuestión de aritmética simple, como ilustramos en los ejemplos prácticos.

Pero hay más maneras de referirnos a la estructura de una escala musical. La fórmula relativa, que explicaremos a continuación, es esencial para tener una visión clara de cómo es una escala, facilitando además su memorización.

Comencemos por nuestra querida escala mayor en su expresión más sencilla: Do mayor

Do – Re – Mi – Fa – Sol – La – Si – Do

en la que Do es el primer grado, Re el segundo, Mi el tercero, y así sucesivamente.

Indiquemos estos grados por sus números:

1 – 2 – 3 – 4 – 5 – 6 – 7 – 8

Voy a elegir ahora otra escala. Por ejemplo, imagina que te digo que la escala Do lidia está compuesta por las siguientes notas:

Do lidia –> Do – Re – Mi – Fa# – Sol – La – Si – Do

Vamos a comparar ahora Do lidia con Do mayor, grado a grado:

Do – Re – Mi – Fa – Sol – La – Si

Do – Re – Mi – Fa# – Sol – La – Si

Si observas ambas escalas, te darás cuenta de que todos los grados de la escala lidia son los mismos que la de la escala mayor, salvo el cuarto grado, que en aquella es Fa# y en esta Fa natural.

Esto lo podemos indicar así, aumentando un semitono el cuarto grado:

1 – 2 – 3 – #4 – 5 – 6 – 7

Esta es precisamente la fórmula relativa de la escala Lidia y con ella veremos que podremos calcular sus notas en cualquier tonalidad.

La denominamos relativa porque resulta de una comparación con otra escala: la escala mayor. Más adelante veremos que, en ocasiones, resulta útil conocer también la fórmula relativa respecto a otras escalas además de la mayor. Pero, de momento, cuando no matice nada concreto, siempre que me refiera a la fórmula relativa, me estaré refiriendo a la fórmula relativa a la escala mayor.

Quiero recalcar una vez más la cuestión de la terminología. Hay otros músicos que emplean unos términos distintos para referirse a lo mismo, pero, independientemente del sistema al que te adhieras, lo realmente importante es comprender los conceptos que subyacen.

Un nuevo ejemplo: la escala Do menor natural tiene las siguientes notas:

Do menor natural –> Do – Re – Mib – Fa – Sol – Lab – Sib – Do

¿Cuál es la fórmula relativa de la escala menor natural?

Si comparas uno a uno todos los grados respecto a Do mayor, observarás que coinciden todos excepto el tercero, sexto y séptimo, que son bemoles. Por lo tanto, la fórmula relativa es:

Menor natural –> 1 – 2 – b3 – 4 – 5 – b6 – b7

Ya sabes lo que son, entonces, las fórmulas absoluta y relativa de una escala. En el próximo artículo de esta serie realizaremos numerosos ejemplos prácticos variados que te ayudarán a afianzar estos importantes conceptos.

Javier Montero Gabarró


La fórmula relativa de una escala musical


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

MySQL – Ha llegado la hora

Objetivo: presentar en MySQL el tipo de datos TIME, adecuado tanto para registrar horas como para el tiempo transcurrido entre dos eventos.

En el artículo anterior tratamos el tipo de datos DATE para registrar fechas (año, mes y día). Aunque, como veremos pronto, existen también tipos para indicar fecha y hora en el mismo campo, MySQL dispone de uno específico para almacenar horas: TIME.

Hay varias maneras de introducir la hora y es preciso conocer algunas sutilezas.

Comencemos por el formato básico:

‘HH:MM:SS’

Indicamos la hora, seguida de los minutos y de los segundos. Por ejemplo:

'07:30:46'
'13:46:00'
'23:59:59'

No olvides las comillas y ten en cuenta que la hora se indica en formato 24 horas (no 12, con am y pm).

Una hora escrita con sus tres pares (horas, minutos y segundos), puede indicarse también sin el delimitador de los dos puntos. De este modo, los tres ejemplos anteriores puedes escribirlos así:

'073046'
'134600'
'235959'

o incluso como números, sin las comillas:

073046
134600
235959

Si empleamos el delimitador, podemos prescindir de los ceros a la izquierda. Las siguientes horas son equivalentes:

'05:05:05'
'5:5:5'

Pero ten presente que, sin delimitadores, esa hora no podría escribirse como '555', sino ‘050505'.

También podemos expresar horas en formato más corto:

‘HH:MM’

'13:30' es equivalente a '13:30:00'.

Puedes usar el formato corto sin delimitadores, pero con una precaución importante que puede prestarse a confusión.

Siempre que facilitas una hora sin delimitadores (con comillas o sin ellas) MySQL intenta formar los pares de derecha a izquierda. Por ejemplo:

‘1330’ es equivalente a '00:13:30' y NO '13:30:00', como sucedía antes.

'759' es equivalente a '00:07:59'

'10' es equivalente a '00:00:10'.

Tenlo siempre presente a la hora de emplear delimitadores o no.

El tipo TIME puede utilizarse no sólo para registrar horas, sino también para indicar el espacio de tiempo entre dos sucesos, siempre y cuando entre ellos no existan más de 35 días.

35 días (aproximadamente), he dicho bien.

Pero, ¿cómo representamos hasta 35 días en un formato HH:MM:SS?

‘HHH:MM:SS’

Es decir, empleando tres cifras para la hora:

'100:45:15'

que se corresponde a 100 horas, cuarenta y cinco minutos y quince segundos.

También puedes expresar medidas temporales negativas:

'-100:45:15'

El rango temporal permitido está comprendido entre -838:59:59 y 838:59:59.

839 horas son aproximadamente 35 días.

Este otro formato también es válido:

‘D HHH:MM:SS’

donde D representa el número de días:

'5 15:20:40'

significa 5 días, 15 horas, 20 minutos y 40 segundos.

O este otro:

'20 100:34:45'

Pero aunque lo introduzcamos así, MySQL nos lo presentará con los días pasados a horas:

'580:34:45'.

Este otro valor resultaría en error:

'20 500:00:00'

ya que, si conviertes los días a horas te queda que es equivalente a

'980:00:00'

y ya sabes que el límite es

838:59:59

Empleando días también está disponible esta otra sintaxis:

‘D HHH’

Por ejemplo,

'20 5'

que equivale a 20 días y 5 horas, es decir, lo mismo que:

'485:00:00'

Para finalizar, como aplicación práctica, vamos a diseñar una tabla MySQL, denominada fichajes, en la que registraremos los fichajes de entrada y salida en una empresa.

mysql> CREATE TABLE fichajes
    -> (
    -> fecha DATE,
    -> entrada TIME,
    -> salida TIME
    -> );
Query OK, 0 rows affected (0.11 sec)

mysql> DESC fichajes;
+---------+------+------+-----+---------+-------+
| Field   | Type | Null | Key | Default | Extra |
+---------+------+------+-----+---------+-------+
| fecha   | date | YES  |     | NULL    |       |
| entrada | time | YES  |     | NULL    |       |
| salida  | time | YES  |     | NULL    |       |
+---------+------+------+-----+---------+-------+
3 rows in set (0.05 sec)

Nada más; son las 18:34:46, hora ya de publicar este artículo…

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/06/mysql-ha-llegado-la-hora/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!

HTML – Hiperenlaces titulados

Objetivo: recomendar el uso del atributo title para facilitar información útil en un hiperenlace.

Todo comenzó con el elemento <img>. Esta etiqueta HTML siempre ha dispuesto, tradicionalmente, de un atributo, alt, en el que indicábamos información adicional que los navegadores mostraban en el caso de que, por la razón que fuera, no se llegara a cargar la imagen.

Este tipo de funcionalidad extra se ha demostrado muy útil en muchos más elementos, además de en <img>, hasta el punto de que un buen número de ellos dispone hoy día de un atributo, denominado title, para titular escuetamente la función del elemento. El texto que facilitemos a ese atributo podrá ser empleado por los navegadores a la hora de visualizar (o incluso escuchar) la página. Además, title suele gustar bastante a los robots que se dedican a escudriñar las páginas por la red, por lo que un uso adecuado puede ayudarte a mejorar el posicionamiento de tu página en un buscador.

El propio elemento <img> dispone también de un atributo title, pese a contar ya con alt. La diferencia entre ambos suele prestarse a confusión.

Nuestros potentes hiperenlaces con <a> no podían ser menos, de modo que en su colección de atributos permitidos incluyen también title.

Observa el siguiente código HTML:

Este es el <a href="http://elclubdelautodidacta.es/wp/indice-html/" title="Índice completo de la categoría HTML">índice completo</a> de artículos sobre HTML.

Este es su efecto:

Este es el índice completo de artículos sobre HTML.

Ahora, sin hacer clic sobre el enlace, posiciona simplemente el ratón sobre él. Verás que te aparece un texto emergente, junto al puntero, que reza Índice completo de la categoría HTML.

Interesante, ¿verdad? Ahora ya sabemos qué podemos esperarnos al otro lado antes de hacer clic en el enlace, algo que no siempre resulta obvio. Por ejemplo, fíjate en esto otro:

Para acceder al índice sobre HTML pulsa aquí.

Ignorando el texto previo, la palabra hiperenlazada («aquí») no guarda relación semántica con el destino del hiperenlace. Naturalmente, en la barra de estado nos aparecerá, normalmente la dirección a la que apunta, pero aún así puede no ser perfectamente explicativa. El atributo title identifica claramente el destino, como puedes comprobar dejando el ratón sobre el enlace.

De todos modos, procura evitar un uso como el anterior. Intenta, en la medida de lo posible, que el texto disparador del hiperenlace, el que aparece subrayado, que es el que colocamos entre las etiquetas <a> ... </a> guarde relación semántica con el destino, tal como hicimos en el primer ejemplo.

Y, por supuesto, utiliza title siempre.

Javier Montero Gabarró


HTML – Hiperenlaces titulados


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con HTML.

Transposición de una obra musical en MuseScore

Objetivo: aprender a transponer a otra tonalidad una obra escrita con MuseScore.

Imagínate la siguiente situación: tienes tu flamante partitura en Fa mayor y el cantante te dice que se le queda grave y quiere cantarla en La bemol mayor. Subir en el pentagrama, una a una, cada nota una tercera menor puede ser una labor tediosa y propensa a errores. ¿No sería fantástico si MuseScore pudiera hacer ese trabajo por nosotros?

MuseScore permite, en apenas varios clics con el ratón, transponer una pieza a cualquier tonalidad que queramos entre las 15 estándar que existen. Puedes hacerlo sobre la obra completa o sobre cualquier conjunto de compases. Tú decides el ámbito de transposición.

Puedes decidir también si quieres que la armadura refleje la nueva tonalidad o, por el contrario, que no se cambie. Incluso tienes la facilidad de decirle a MuseScore que se ocupe del cambio de cifrado de los acordes si tu partitura los incluye.

Veamos cómo hacer todas estas cosas.

Comencemos creando, a título de práctica, una sencilla escala de Do mayor a la que le hemos añadido también un par de acordes cifrados:

Nuestro primer ejercicio será transponerla a Re mayor.

Vete al menú Notas | Transportar. Te aparecerá lo siguiente:

Puesto que no hemos seleccionado previamente ningún conjunto de compases, MuseScore nos pregunta si lo que queremos transponer es la partitura completa. Respondemos afirmativamente, tras lo cual nos aparece el cuadro de diálogo Transportar, centro de operaciones desde el cual realizaremos todas las labores de transposición.

Vamos a desgranar todas las posibilidades que nos ofrece.

Para empezar, el cuadro de diálogo permite dos modos de operación: eligiendo la tonalidad destino directamente o indicando el intervalo de transposición. Todo dependerá de cuál dejes marcado: Transportar a la tonalidad, o bien Transportar al intervalo.

Comencemos por la primera opción. Observa cómo, para empezar, te muestra la tonalidad actual (Do mayor, o su relativo menor, La menor, en este caso). Si despliegas el cuadro, te aparecerán las 15 tonalidades principales para que elijas la deseada.

Es importante que comprendas que MuseScore no realiza ningún tipo de análisis sobre las notas para tratar de determinar la tonalidad original; tan sólo se limita a consultar la armadura.

Bien, ya tenemos la tonalidad de destino, pero ¿queremos que transponga ascendente o descendentemente? Los tres botones de radio nos permiten realizar la elección. Observa que también existe la opción para que se transponga en el sentido más próximo.

Si marcas sobre Transportar al intervalo, tendrás todo un abanico de intervalos donde elegir, incluyendo los correspondientes enarmónicos. Puede ser una opción muy cómoda si no quieres calcular la tonalidad destino o si sólo quieres transportar un conjunto de compases en vez de la obra completa.

Fíjate que puedes elegir si el intervalo será ascendente o descendente.

En el último tercio del cuadro de diálogo aparece una serie de opciones que prácticamente hablan por sí solas.

Si desmarcas Transportar las armaduras, los cambios se realizarán sobre las notas, pero la armadura no se verá afectada.

Si desmarcas Transportar los nombres de acordes, los acordes no actualizarán su nombre tras el cambio de tonalidad y su cifrado permanecerá sin variar.

Finalmente, tienes la opción por defecto para usar dobles sostenidos y bemoles cuando sea necesario. Lo contrario desharía las notas doblemente alteradas, reajustando la altura en consonancia. Tú mismo.

Prosigamos con nuestra escala del ejemplo. Para transponerla a Re mayor, ajustar la armadura en consonancia y actualizar el cifrado de los acordes, hemos de configurar del siguiente modo el cuadro Transportar:

Tras lo cual obtenemos el resultado deseado, tanto en las notas como en la armadura y los acordes.

Te propongo que practiques por tu cuenta la transposición de, por ejemplo, sólo el segundo compás, en vez de la pieza completa. Debes tener en cuenta que, en el caso de que los compases seleccionados no incluyan el primero, la armadura no se modificará, aunque la marca indique lo contrario. La opción Transportar las armaduras sólo cobra sentido cuando la selección incluye al primer compás.

Ahora quiero que observes un pequeño fallo que tiene MuseScore (al menos la versión 1.2 revisión 5470, que uso en el momento de escribir esto), pero que podemos solucionar muy fácilmente por un camino alternativo.

Vamos a transponer la partitura del ejemplo a Do sostenido mayor, cuya armadura, ya sabes, tiene siete sostenidos. Si procedes del modo ordinario obtendrás esto:

Mal. En vez de los 7 sostenidos ha elegido los 5 bemoles de Re bemol mayor, enarmónica de Do sostenido mayor. Ya sabes que la suma de alteraciones de una tonalidad más su enarmónica suman doce.

Ocurriría lo mismo, si en vez de transportar directamente a Do sostenido lo hicieras vía un intervalo de unísono aumentado.

Es más, incluso transponiendo a Fa sostenido mayor (seis sostenidos), prefiere mostrarnos la armadura enarmónica, Sol bemol (seis bemoles).

MuseScore simplifica y te muestra la armadura enarmónica que menos alteraciones requiera (y, en el caso de empate, parece decidirse por los bemoles). Pero, naturalmente, no es eso lo que deseamos.

Si quieres tus siete sostenidos, como Dios manda, procedemos del siguiente modo:

1) Transponemos toda la partitura a Do sostenido mayor sin modificar la armadura:

Obtenemos, de este modo, las notas y el cambio de acorde:

2) Finalmente, cambiamos a mano la armadura. Para ello, desplegamos la Paleta, opción Armaduras,

y arrastramos los siete sostenidos sobre el primer compás. Ahora sí:

Observa como los sostenidos han desaparecido de las notas, al estar ya implícitos en la armadura.

Gran tonalidad Do sostenido mayor. ¿Qué hubiese sido, en el recorrido cromático de su Clave bien temperado, del Preludio y Fuga nº3 de Bach sin Do sostenido mayor?

Javier Montero Gabarró


Transposición de una obra musical en MuseScore


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Este es el índice completo de artículos sobre MuseScore.

LaTeX – Modificando el espacio de interlineado

Objetivo: mostrar cómo modificar la distancia entre líneas en un documento LaTeX.

\LaTeX está concebido para que no nos preocupemos por los detalles concretos de la maquetación de un documento. Típicamente, diremos qué tipo de estructuras lógicas deseamos crear y dejaremos que \LaTeX se preocupe por las cuestiones de diseño.

Pero, naturalmente, tenemos a nuestra alcance toda su potencia para realizar el ajuste fino de cualquier parámetro relacionado con la presentación del documento.

Esa es una de las razones por las que adoro \LaTeX. En apenas varias horas de formación puedes estar generando documentos de muy alta calidad. Después, conforme vas estudiando más y más, empiezas a utilizar comandos de ajuste fino, nuevos paquetes o incluso personalizas las clases.

Voy a mostrarte hoy cómo proceder para modificar el interlineado, si no te gusta el que el programa te ofrece por defecto.

Hay una magnitud que controla la separación de líneas en \LaTeX: \baselineskip.

Puede ser tentador, entonces, introducir un simple comando para modificar esa magnitud, como

\setlength{\baselineskip}{18pt}

Sin embargo, eso NO FUNCIONA.

La cuestión es que \LaTeX sobreescribe \baselineskip y lo ajusta dinámicamente en función de aspectos como, por ejemplo, el tamaño de la fuente.

Típicamente, para una fuente de tamaño normal de 10pt, la separación entre líneas es 12pt. Pero, si esa misma fuente la empleas en versión Huge, puedes encontrarte con una separación de hasta 30pt.

Para modificar el interlineado recurrimos a la macro \baselinestretch, que no es más que un multiplicador del valor de \baselineskip. Por defecto, su valor es 1.

Si hacemos que el valor del multiplicador sea 2, conseguiremos que la separación entre líneas sea del doble. El comando siguiente, que introduciremos en el preámbulo, redefine la macro \baselinestrech:

\renewcommand{\baselinestretch}{2}

Si en vez del doble deseáramos una distancia y media:

\renewcommand{\baselinestretch}{1.5}

De este modo, podemos olvidarnos tranquilamente del ajuste dinámico que \LaTeX realiza sobre \baselineskip. Si ante una fuente normal separaba las líneas 12pt y 30pt en versión Huge, con un multiplicador de 1.5 las separará 18pt y 45pt, respectivamente.

Presta mucha atención al uso de \renewcommand: lo emplearemos continuamente en numerosos contextos.

Javier Montero Gabarró


LaTeX – Modificando el espacio de interlineado


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con \LaTeX.

mIRC – A patadas con los pesados

Objetivo: aprender a expulsar a un usuario molesto de un canal del que eres operador.

Es algo inevitable; eventualmente se te colarán personas molestas en el canal dispuestas a sabotear su buen funcionamiento. Una de tus funciones como operador será velar por el orden dentro de él y mantener a raya a los usuarios incómodos.

Típicamente comenzarás advirtiendo al usuario que incordia para que corrija su actitud. Y muchas veces lo hará, si realmente tiene interés en lo que se habla ahí dentro. Otras veces, si ve que no consigue su propósito, se cansará y se irá por su propio pie, aburrido. Pero en algunas ocasiones habrá que liarse a patadas con él para echarlo de ahí…

Lo de liarse a patadas es, naturalmente, una forma de hablar. No me gusta la violencia, ni siquiera en el propio lenguaje, pero el comando que te ofrece IRC para expulsar de un canal a un usuario pesado es /kick, que en inglés significa dar una patada.

Observa la sintaxis:

/kick #canal usuario motivo

Por ejemplo, para expulsar al pesado bemolin del canal #probilandia, el todopoderoso sostenuto, operador del canal, habría de ejecutar el siguiente comando:

/kick #probilandia bemolin Por pesado...

Recuerda que los nombres de canal van precedidos por una almohadilla (#). El motivo es opcional: no tienes por qué dar explicaciones de tu actitud, aunque no viene mal informar al usuario de qué es lo que está haciendo mal.

El beligerante bemolin será expulsado del canal, a la vez que recibirá en su ventana de Status la siguiente notificación:

You were kicked from #probilandia by sostenuto (Por pesado...)

Puedes expulsar de un canal a alguien por muchos motivos, no sólo porque moleste. Puedes hacerlo simplemente como diversión, en canales de temática relajada.

Hace muchos años, cuando el IRC y Chiquito de la Calzada estaban en su máximo apogeo, programé un script que se ocupaba de echar automáticamente del canal a quien pretendiera contar el chiste de las vacas (que nunca supimos cuál era).

El script simplemente analizaba todo lo que se escribía en el canal, de modo que cuando detectaba la secuencia de caracteres vaca realizaba un /kick sobre el usuario que la había generado, indicando como motivo: en este canal está prohibido contar el chiste de las vacas.

Naturalmente, tenía sus efectos colaterales y a veces pagaban justos por pecadores: los que escribían, inocentemente, palabras como vacaciones, o vacante, también eran violentamente expulsados a patadas del canal.

Dejando el cachondeo aparte, ten en cuenta una cosa importante: usa /kick con tacto. Si lo que pretendes es deshacerte de usuarios molestos, te encontrarás en ocasiones que expulsar a alguien no servirá más que para avivar las ganas de molestar al pesado y volverá a entrar al canal repetidamente por más que lo expulses cada vez. Hay mucho verraco por ahí suelto, ya lo sabemos.

No te preocupes, existen maneras muchos más efectivas para impedir que un usuario realmente molesto pueda entrar y sabotear el canal. ¿Te suena la palabra ban?

Pero eso será otra historia. Te la contaré cuando vuelva de mis vaca… Cielo santo, demasiado tarde.

You were kicked from #ECDA by javier 
(en este blog está prohibido contar el chiste de las vacas)

Javier Montero Gabarró


mIRC – A patadas con los pesados


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos de la categoría mIRC.

Construcción de acordes – 15: Séptima mayor con novena

Objetivo: aprender la fórmula del acorde de séptima mayor con novena y mostrar ejemplos prácticos de su construcción.

Comenzamos con el primer acorde de cinco notas de esta serie. Si proseguimos extendiendo las armonías por terceras, nos encontramos que después de la septima le sigue la novena de modo natural.

Una advertencia previa para los guitarristas: a medida que estos acordes van incrementando el número de notas de que constan, se va evidenciando la dificultad técnica (o imposibilidad) de realizarlos completamente. Un pianista no tiene problema, pues tiene diez dedos útiles, pero el guitarrista se ve a menudo en la necesidad de prescindir de alguna de las notas.

La cuestión es saber de cuáles podemos prescindir sin apenas afectar la cualidad del acorde.

Las primeras notas de las que podríamos deshacernos, llegado el caso, son la fundamental y la quinta. La fundamental, que paradójicamente aparenta ser la nota más importante del acorde, es a menudo cubierta por un bajista y la armonía global no se ve afectada por el hecho de que el guitarrista prescinda de ella. Descartar la quinta es un mal menor: la tercera debe estar, pues es la que identifica el «sexo» del acorde, si es mayor o menor. Si al acorde que nos compete hoy le quitáramos la séptima, haríamos mejor en llamarlo mayor con novena añadida que de séptima mayor con novena. Si quitásemos la novena, obviamente, ya no sería de novena sino de séptima mayor común.

Volvamos a nuestro asunto, que no es otro que aprender a construir el acorde, sin preocuparnos por el momento en su realización concreta en el instrumento.

El propio nombre del acorde habla por sí solo. Coge el acorde séptima mayor, que ya conoces, y agrégale una novena (que por defecto es mayor también).

Ya sabes también lo que es una novena mayor. Es la misma nota que una segunda mayor (9-7=2), pero una octava más alta. Si tienes dificultad en comprender esto, permíteme recomendarte la lectura de la serie sobre intervalos.

Puedes encontrártelo cifrado de muchas formas:

maj7(9), 7M(9), M7(9)

o incluso prescindiendo del número 7, que queda sobreentendido:

maj9, 9M, M9

Su fórmula debe resultarte obvia si te has leído otros artículos de la serie:

maj7(9) –> 1 – 3 – 5 – 7 – 9

Muchas notas, pero así de simple.

Calculemos, por ejemplo Cmaj7(9).

Aplicando la metodología descrita en el primer artículo de la serie, comenzamos escribiendo la escala mayor que tiene por tónica la fundamental del acorde:

C – D – E – F – G – A – B – C – D (esta vez la he extendido más allá de la octava)

Elegimos los grados indicados en la fórmula:

Cmaj7(9) –> C – E – G – B – D

Otro ejemplo: Amaj9

A – B – C# – D – E – F# – G# – A – B

Amaj9 –> A – C# – E – G# – B

Otro acorde más para la colección. Recuerda que mantengo una tabla con todos los acordes y que actualizo conforme voy presentándolos.

Javier Montero Gabarró


Construcción de acordes – 15: Séptima mayor con novena


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Aquí tienes el índice con todos los artículos sobre Armonía escritos hasta el momento.

Python – Introducción a los conjuntos

Objetivo: aprender a crear conjuntos, colecciones de objetos no ordenados, y mostrar cómo determinar la pertenencia y cardinalidad.

Aprovechando que voy a hablar hoy de una estructura de datos no ordenada (en contraposición a las listas o tuplas, por ejemplo), he decidido abandonar la numeración secuencial también en los artículos sobre programación en Python (este debería ser el capítulo 35). Eso me dará más libertad a la hora de elegir los contenidos: comienzo dando capas sobre varios temas que posteriormente retomo. Gradualmente se van interconectando entre sí las distintas piezas del puzzle.

De hecho, ese el modo como aprendemos.

Piensa en los conjuntos como cuando estudiabas matemáticas de pequeño. ¿Recuerdas los famosos círculos, denominados diagramas de Venn, con elementos en su interior? ¿Recuerdas cuando solapábamos esos círculos y hablábamos de cosas como su intersección o unión?

Un conjunto no es más que eso: un conjunto de elementos. No hay un primero ni un segundo. No existe ordenación alguna en ellos: un elemento simplemente está o no está.

Python maneja dos tipos para tratar con conjuntos, en función de si necesitas modificar su contenido o no: set (mutable) y frozenset (inmutable). Hoy nos ocuparemos del primero.

Veamos cómo creamos un conjunto con ciertos elementos concretos:

>>> conjunto1 = {1, 'pimiento', 3, 5}

Esto es, para crear un conjunto, situamos entre llaves todos los elementos separados por comas. Observa como los elementos pueden ser de tipos distintos.

Podemos comprobar que conjunto1 es del tipo set:

>>> type(conjunto1)
<class 'set'>

Para crear un conjunto vacío puede ser tentador hacer algo como:

>>> conjunto2={}

Sin embargo, el resultado no sería el esperado:

>>> type(conjunto2)
<class 'dict'>

Se ha creado un diccionario, estructura que también se rodea entre llaves. Hablaremos de ellos muy pronto.

Para que conjunto2 sea un conjunto vacío debemos proceder del siguiente modo:

>>> conjunto2 = set()

Y ahora sí:

>>> type(conjunto2)
<class 'set'>

Los elementos de un conjunto sólo pueden figurar una vez en él. Observa este otro ejemplo, en el que pese a repetir el número 7 en la definición de conjunto3, sólo se nos muestra una vez:

>>> conjunto3 = {4, 7, 7, 1}
>>> conjunto3
{1, 4, 7}

Constata, a su vez, como el orden no es significativo.

Lo siguiente que debemos aprender es cómo saber si un determinado elemento pertenece a un conjunto o no. Disponemos para ello del operador in:

>>> 'pimiento' in conjunto1
True
>>> 4 in conjunto1
False

Potentísimo.

La no pertenencia se determina de modo parecido:

>>> 'pepino' not in conjunto1
True

Para finalizar este primer barniz sobre conjuntos, la función len(), que ya conoces para determinar la longitud de un string o el número de elementos de una lista, sirve también para conocer el cardinal de un conjunto, esto es, el número de elementos que lo componen.

>>> len(conjunto1)
4
>>> len(conjunto2)
0
>>> len(conjunto3)
3

El conjunto vacío, conjunto2, figura con cardinal cero, como es de esperar.

Suficiente. La próxima vez que hablemos sobre conjuntos te mostraré cómo agregar o retirar elementos de ellos.

>>> ecda = {'python', 'latex', 'armonía', 'mirc', 'musescore'}
>>> 'cocina' in ecda
False

Aunque todo se andará. Espera a ver si no publico mi peculiar receta de patatas bravas

Javier Montero Gabarró


Python – Introducción a los conjuntos


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

El Club del Autodidacta en Facebook

Apreciado lector:

En el preciso momento en que aparece una nueva publicación en ECDA, se distribuyen, a su vez, desde Twitter y Google+, referencias al artículo nuevo que facilitan el seguimiento del blog a los usuarios de esas redes sociales.

A partir de ahora, si eres usuario de Facebook, existe un modo muy conveniente de estar al tanto de cada publicación. He creado la página El Club del Autodidacta, en la que, entre otras cosas, figurarán referencias a los nuevos artículos en cuanto estos se publiquen.

Pero no sólo eso. Me gustaría aprovechar las posibilidades comunicativas de la plataforma para favorecer la interactividad y extender así la funcionalidad del blog. Se me ocurren muchas posibilidades, como la opción de conocer e interactuar con gente con las mismas inquietudes, el planteamiento de dudas, peticiones de nuevos contenidos o la propuesta de actividades y ejercicios complementarios.

Si deseas que en tu línea de Noticias de Facebook aparezcan notificaciones de ECDA, puedes entrar en la página y hacer clic sobre el botón «Me gusta». Puedes hacerlo también desde el botón que he insertado más abajo o el que está presente en la barra lateral de la derecha.

Me gustaría verte por allí. Seguro que podemos hacer cosas interesantes.

Javier Montero Gabarró

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies