Java – Los ocho magníficos

lasecreObjetivo: presentar los tipos de datos primitivos en Java.

Antes de que empecemos a fabricar objetos como churros es importante que nos tomemos un tiempo para familiarizarnos con la materia prima de que están hechos, los ladrillos con los que construiremos nuestras nuevas estructuras de datos.

Sabemos que los objetos se componen de atributos, que no son más que un conjunto de variables con sus respectivos valores, y de métodos, las funciones que definen el comportamiento del objeto, lo que se puede hacer con él. Estos métodos, por lo general, procesan y devuelven datos también.

De modo que las variables son la sangre que circula internamente por los objetos.

Java requiere que especifiquemos el tipo de una variable en el momento preciso de declararla. Si recuerdas las clases Coche y Persona de los artículos anteriores, verás que aparecían en ellas algunas instrucciones como las siguientes:

String marca;
int velocidad;
boolean arrancado;
char sexo;
Coche coche;

Se trata de declaraciones de variables, en las que se asocia a cada nombre un tipo. Así pues, la variable marca referenciará una cadena de caracteres para indicar la marca del coche; velocidad contendrá un valor entero para expresar su velocidad; arrancado, de tipo booleano (verdadero o falso) nos hará saber si el vehículo está puesto en marcha o no; sexo contendrá un único carácter para indicar si la persona es un hombre o una mujer; coche, finalmente, es una variable de tipo Coche, un tipo que hemos diseñado nosotros al crear la clase Coche. Recuerda que Java diferencia entre mayúsculas y minúsculas, por eso coche y Coche son identificadores diferentes.

Fijémonos en los tipos de estas variables. Algunas de ellas, como coche, tienen por tipo el nombre de una clase. No es tan obvio eso mismo en la variable marca, pero observa que su tipo, String, comienza escrito por mayúsculas. Ya sabes que los nombres de clases, por convenio, empiezan por mayúsculas. Puedes pensar en Coche y String como tipos de datos compuestos, en oposición a los tipos simples restantes.

Los protagonistas de hoy son esos datos simples, atómicos, que luego utilizamos para construir otros tipos compuestos más elaborados. En Java son ocho y reciben el nombre de tipos primitivos.

Veamos cuáles son, agrupados por categorías.

Para declarar variables que contengan números enteros disponemos de cuatro tipos: byte, short, int y long. Se trata de enteros con signo (para valores positivos y negativos) y la diferencia entre ellos no es otra sino el número de bytes que ocupan en memoria y, por lo tanto, el rango numérico que pueden representar.

byte –> 1 byte (8 bits)
Rango: -128 / +127

short –> 2 bytes (16 bits)
Rango: -32768 / +32767

int –> 4 bytes (32 bits)
Rango: –2147483648 / +2147483647

long –> 8 bytes (64 bits)
Rango: –9223372036854775808 / +9223372036854775807

Como veremos cuando tratemos el tema de los literales, int es el tipo favorito de Java para lidiar con enteros. De ahí que a menudo nos planteemos una cuestión: ¿merece la pena la utilización de tipos como byte o short? Para aplicaciones sencillas, en las que la optimización del uso de memoria puede no ser relevante, no habría inconveniente. Pero imagina, por ejemplo, un programa que tuviera que manipular arrays grandes de enteros tipo byte (hablaremos de los arrays a su debido momento, pero por ahora basta con que sepas que son estructuras que permiten almacenar muchos elementos de un mismo tipo). Utilizar 4 bytes por cada elemento en lugar de 1, cuando son muchos, podría implicar un desperdicio de memoria crítico. Además, definir adecuadamente el tipo de los datos, dimensionándolos a lo estrictamente necesario, ayuda a mejorar la legibilidad y la comprensión del programa.

Para trabajar con números decimales disponemos de los tipos float y double. Están basados en el estándar IEEE 754 de representación en coma flotante. Si no has oído hablar de ese estándar hasta ahora y no sabes qué es eso de la mantisa y el exponente, te recomiendo que hagas una sencilla búsqueda en Google y te informes. Es una lectura que todo el mundo que trabaja con ordenadores debe hacer al menos una vez en su vida.

La diferencia entre float y double estriba, al igual que con las distintas opciones para números enteros, en el tamaño que ocupan: 32 bits el tipo float y 64 el tipo double, representando los números decimales con precisión simple o doble, respectivamente. Esto determinará tanto el máximo valor como el mínimo valor que podremos representar.

float –> 4 bytes (32 bits)
Mínimo: ±1.40239846E-45
Máximo: ±3.40282347E+8

double –> 8 bytes (64 bits)
Mínimo: ±4.94065645841246544E-324
Máximo: ±1.79769313486231570E+308

Aprecia la notación exponencial, no sería práctico escribir aquí un chorizo de trescientas cifras.

El tipo double es el favorito de Java al tratar números decimales. No obstante, como sucedía con los enteros, habrá situaciones en las que el ahorro de memoria puede ser un factor determinante que requiera una declaración de variables austera con float.

Para almacenar un carácter simple, Java dispone del tipo primitivo char, que ocupa 16 bits. Con él podemos representar caracteres Unicode (¡toda una bendición!) comprendidos entre ‘\u0000’ (0) y ‘\uFFFF’ (65535).

El octavo magnífico de nuestra serie es el tipo boolean, que admite dos posibles valores: true o false. Sólo se necesita un bit para almacenar dos estados posibles, pero el tamaño real que ocupa una variable boolean depende de la plataforma y de la implementación particular en Java. No es una cuestión importante pues, como hemos dicho, sólo se utiliza un bit, se guarde como se guarde.

Lo que resulta significativo es el hecho de que Java defina con exactitud el tamaño de sus tipos primitivos (sin contar boolean). No hay que perder de vista que Java está pensado como lenguaje multiplataforma. Si has programado en otros lenguajes y entornos quizás hayas constatado que el tamaño de un entero está muy relacionado con la arquitectura en particular. ¿Cómo es posible que Java logre esa independencia de la plataforma?

La clave es entender que cuando escribes un programa Java no lo estás haciendo directamente para tu sistema, sino para una una abstracción que es la máquina virtual Java (que, naturalmente, sí que es dependiente de la plataforma). Esa es la magia tras el slogan de Java, «escribe una vez, ejecuta en todas partes», que permite que el código escrito para una plataforma funcione directamente y sin correcciones (en términos generales, no siempre es así) en cualquier otra en la que exista una máquina virtual Java.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/05/java-los-ocho-magnificos/


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 Java.

Python – Un poco de orden, por favor

Objetivo: mostrar cómo ordenar los elementos de una lista.

Benditas sean las listas. ¡Qué sería de nosotros, pythonistas, sin su admirable flexibilidad! He perdido la cuenta de los problemas que he podido resolver con elegancia apoyándome simplemente en estas sólidas estructuras.

Vamos a ampliar el repertorio de las posibilidades que nos ofrecen las listas. Nos ocuparemos hoy de ordenarlas.

Tomemos, por ejemplo, la siguiente lista numérica:

>>> a = [7, -1, 5, 3]

Ordenarla resulta tan sencillo como aplicar el método sort(), disponible en los objetos de tipo lista:

>>> a.sort()
>>> a
[-1, 3, 5, 7]

Bien simple. No obstante hay algo que debes tener siempre presente: esta modificación es «in situ», atacando directamente al objeto original, sin crear una copia.

Si lo que quieres es generar una nueva lista ordenada, pero sin afectar la original, puedes hacer uso de la función sorted(), que toma como argumento una secuencia y devuelve otra diferente ordenada.

>>> a = [7, -1, 5, 3]
>>> b = sorted(a)
>>> a
[7, -1, 5, 3]
>>> b
[-1, 3, 5, 7]

Mucho cuidado con hacer esto:

>>> a = [7, -1, 5, 3]
>>> b = a.sort()

Naturalmente, a se modificaría, ordenándose. ¿Pero qué crees que valdría b?

>>> print(b)
None

Nada. b no vale nada.

Si no entiendes por qué sucede esto, no te pierdas la lectura del artículo Python – Hace falta valor, en el que se desentraña el misterio.

Lo bueno de la función sorted() es que el argumento puede ser una secuencia en general, no solamente una lista. Así, objetos no mutables, como las tuplas, que no disponen del método sort(), podrían beneficiarse de su utilización.

La única limitación de sort() y sorted() es que los elementos han de ser comparables. Si no, Python difícilmente podrá deducir su orden.

La siguiente lista, con tipos diferentes, no podrá ser ordenada por sort():

>>> listamixta = [1, 'a', 5, 'casa']
>>> listamixta.sort()
Traceback (most recent call last):
  File "<pyshell#83>", line 1, in <module>
    listamixta.sort()
TypeError: unorderable types: str() < int()

Ordenar una lista en sentido inverso, de mayor a menor, es igualmente fácil haciendo uso de un argumento opcional, reverse:

>>> a = [7, -1, 5, 3]
>>> a.sort(reverse = True)
>>> a
[7, 5, 3, -1]

La función sorted() dispone también de la misma posibilidad:

>>> a = [7, -1, 5, 3]
>>> sorted(a, reverse = True)
[7, 5, 3, -1]

Observa que, en este último ejemplo, a no ha modificado su valor, puesto que sorted() ha creado un objeto diferente:

>>> a
[7, -1, 5, 3]

Voy a plantearte ahora un problema interesante que servirá de preludio al argumento que presentaremos a continuación y que aumentará sobremanera la potencia de nuestras ordenaciones.

Imagina que queremos ordenar alfabéticamente la siguiente lista:

>>> frutas = ['pera', 'Manzana', 'fresa']

Observa que he comenzado en mayúsculas la palabra Manzana.

El método sort(), estrictamente, cumple su función:

>>> frutas.sort()
>>> frutas
['Manzana', 'fresa', 'pera']

Las letras mayúsculas se almacenan internamente con un código más bajo que las correspondientes minúsculas, de modo que Manzana aparece antes que fresa, pese a que tal vez no fuera eso lo que nos gustaría.

¿Cómo hacer para que la ordenación no tenga en cuenta que la M está en mayúsculas y la trate como si fuera minúscula, pero dejando que aparezca en el resultado tal como fue escrita?

Imagina que podemos crear un tratamiento temporal previo que procese cada término conviertiéndolo completamente en minúsculas para que luego sort trabaje sobre ese resultado, pero sin olvidar cuáles eran los términos originales.

Esto se logra con un nuevo argumento, key:

>>> frutas = ['pera', 'Manzana', 'fresa']
>>> frutas.sort(key = str.lower)
>>> frutas
['fresa', 'Manzana', 'pera']

Y ahora sí, fresa aparece antes que Manzana.

Presta atención: key recibe como valor el nombre de una función que requiera un único argumento. El valor devuelto por la función será utilizado después como base de trabajo para la ordenación.

El método lower(), que se aplica a los objetos de tipo str, strings, convierte una cadena de caracteres toda en minúsculas. Observa que he dicho el nombre de una función, por eso lower se muestra sin paréntesis en el argumento key.

Otro ejemplo. Reorganicemos nuestra macedonia, pero esta vez de modo que las frutas aparezcan ordenadas de acuerdo a su longitud:

>>> frutas = ['pera', 'Manzana', 'fresa']
>>> frutas.sort(key = len)
>>> frutas
['pera', 'fresa', 'Manzana']

Como sabes, la función len devuelve el número de elementos de una secuencia, esto es, el número de letras de que se compone un string, en nuestro caso. Ese total será tomado como criterio para la ordenación.

Podemos utilizar key para saltarnos la limitación que nos impedía ordenar listas mixtas.

>>> listamixta = [1, 'a', 5, 'casa']
>>> listamixta.sort(key = str)
>>> listamixta
[1, 5, 'a', 'casa']

La función str convierte un objeto en string, de modo que los números ya serán comparables con el resto de valores y sort() podrá realizar su trabajo. Observa que la lista resultado sigue siendo mixta; la conversión a string sólo se ha realizado a nivel interno.

Podemos ir más allá y crear incluso nuestras propias funciones para utilizarlas en sort().

Por ejemplo, esta sencilla función invierte un string:

>>> def invertir(cadena):
  return cadena[::-1]

>>> invertir('pimiento')
'otneimip'

Si no entiendes cómo trabaja esta función, echa un vistazo al artículo El mundo al revés.

Vamos a aprovecharla entonces como criterio de ordenación para que sort() ordene la lista atendiendo a la última letra de cada palabra, en lugar de la primera, tal como haría por omisión.

>>> planetas = ['mercurio', 'venus', 'tierra', 'marte']
>>> planetas.sort(key = invertir)
>>> planetas
['tierra', 'marte', 'mercurio', 'venus']

Fíjate por dónde, nuestro planeta el primero…

La función sorted(), como cabría esperar, dispone también del argumento key.

Interesante. Las posibilidades creativas son inmensas. Prácticamente significa que puedes hacer que Python ordene una lista o, por lo general, cualquier secuencia, por cualquier criterio que puedas imaginar. Es lo que me encanta de Python: este lenguaje rezuma creatividad lo mires por donde lo mires.

Javier Montero Gabarró


Python – Un poco de orden, por favor


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.

Días monotemáticos para polifacéticos

Todos los polifacéticos intentamos ser lo más productivos posible en cada una de las áreas de nuestro interés. Otra cosa muy distinta es que lo consigamos, algo que depende en buena manera de nuestra capacidad de organización personal.

En Polifacetismo y Productividad hablábamos de distintos tipos de polifacetismo atendiendo a la frecuencia con la que desplazábamos el foco de atención. En mi caso particular, me permito picotear entre varias actividades distintas a lo largo del día. Para no perder el hilo entre sesiones hago uso riguroso de los diarios de acción, además de otras técnicas que me transportan rápidamente al estado mental necesario para poder sacar el mayor provecho posible al tiempo, a menudo breve, que voy a estar inmerso en la actividad.

No obstante, en ocasiones necesito salir de esta pauta de trabajo y acercarme a mis inquietudes de un modo diferente. Dispongo de un amplio abanico de esquemas «regeneradores», como me gusta denominarlos, que refrescan mi motivación y capacidad de rendimiento. Uno de ellos es el de los días monotemáticos.

Los días monotemáticos, tal como el término indica, no son más que días en los que concentramos el foco de interés en una única inquietud.

Eso no significa que sea lo único que hagamos durante el día, por supuesto. Todos tenemos que atender obligaciones inexcusables, también merecedoras de nuestra pasión, que pueden ocuparnos numerosas horas de nuestra jornada diaria. Pero, fuera de lo indiscutible, tenemos capacidad de decisión sobre lo discutible, y es en ese terreno donde somos reyes absolutos de nuestro tiempo.

Un día monotemático se inicia decidiendo, en los primeros compases de la mañana, en qué actividad volcaremos nuestro entusiasmo. La ducha matutina (me levanto cada día a las seis) es un momento ideal para mí, entre sensaciones energizantes y regeneradoras, para confirmar una decisión que probablemente mi subconsciente ya ha tomado. No es algo que deje para el día anterior: con frecuencia, la impregnación monotemática se mantiene hasta el límite entre la vigilia y el sueño (puede que durante él también) y no me gusta interrumpirla. De hecho, ¿quién no ha experimentado la aparición de una idea creativa o la resolución de un problema complejo en este estado de semiconsciencia que precede al sueño?

Tampoco acostumbro a planificarla con antelación: escribir que dentro de cinco días me centraré en la organización del blog, el sexto a la producción musical y el séptimo a programar en Python hace que el método se vuelva poco efectivo al perder la bondad de la espontaneidad y la improvisación. Con los días monotemáticos pretendemos una reconexión con nuestras pasiones y un mejor conocimiento de nuestras prioridades. Por eso decía antes que poco más que tenemos que confirmar algo que en el fondo ya sabemos. La fría planificación anticipada no tiene en cuenta la parte sumergida del iceberg.

Una vez elegida tu inquietud del día (o, más bien, una vez la inquietud te ha elegido), haz que transpire por todos tus poros. Por un día olvídate de que eres polifacético y dedícale todo tu amor con jurada fidelidad. No permitas que ninguna otra faceta te hable, al menos hasta la ducha del día siguiente.

Si el compromiso y la conexión son los adecuados probablemente descubras que estás siendo productivo incluso en el tiempo inicialmente no previsto para la actividad, como aquel que clasificamos para las obligaciones inexcusables. Y es que, al igual que somos un 60% agua, así nuestro tiempo es mucho más líquido de lo que creemos y podemos sacar mucho jugo al exprimirlo. No menosprecies el tiempo que dedicamos a pensar en algo, incluso aunque ese algo sea una guitarra que hasta dentro de nueve horas no tendrás en tus manos. Recuerdo haber esbozado el núcleo de una canción durante una sesión de running por el parque.

No todos los días monotemáticos resultarán igual de productivos, por supuesto. Puede que, dadas las circunstancias concretas del día, incluso no aparenten haberlo sido en absoluto. Eso no debe preocuparte lo más mínimo: volverá a amanecer a la mañana siguiente y la opción de repetir menú siempre estará disponible.

Quizás descubras que lo que te apetece es repetir y repetir la misma pasión un día tras otro, asemejándote por una temporada al polifacético que es capaz de dedicar largos períodos de tiempo a una actividad exclusiva para luego abandonarla e iniciar algo completamente diferente. ¿Por qué no?

Lo realmente sorprendente es que, una vez hemos instalado el estado mental de producción monotemática, lo mucho que podemos lograr en un aparentemente simple y cotidiano día. Desde aprender un lenguaje de programación o una nueva pieza musical, leer un libro entero o escribir una canción. O, por lo menos, obtener importantes avances en cualquier área de nuestro interés.

¿Cuánto tiempo mantener tus días monotemáticos? Mi respuesta es la misma para cualquier técnica de productividad o método de organización personal: mientras funcione. Tan pronto empieces a percibir que no obtienes los resultados deseados sabrás que habrá el llegado el momento de que ese agente poderoso que es el cambio vuelva a entrar en acción.

Javier Montero Gabarró


Días monotemáticos para polifacéticos


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 los artículos de la categoría Productividad.

Armonización de la escala menor melódica

Objetivo: deducir los acordes tríadas y tétradas que aparecen al armonizar la escala menor melódica.

Continuando la serie de artículos dedicada a la armonización de escalas menores, vamos a entretenernos hoy construyendo los acordes propios de la escala menor melódica. Como resultado obtendremos acordes nuevos, no presentes al armonizar la menor natural, que enriquecerán nuestras posibilidades a la hora de componer en tonalidades menores.

De modo que coge lápiz y papel; te invito a realizar juntos este sencillo ejercicio.

Partimos de la escala menor melódica, también conocida como menor de jazz por su amplia utilización (juntos a sus modos) en este género.

Menor melódica: 1 – 2 – b3 – 4 – 5 – 6 – 7

Como ves, es parecida a la escala mayor, con la salvedad de que el tercer grado (el que identifica si una escala es mayor o menor) está reducido un semitono, formando una tercera menor con la tónica.

Para nuestro cálculo elegiremos Do menor melódica, extrapolando después las conclusiones obtenidas al resto de las tonalidades.

Do menor melódica: C – D – Eb – F – G – A – B

Al igual que hicimos armonizando otras escalas, apilaremos terceras sucesivas y trataremos de identificar los acordes resultantes.

Calcular terceras es contar de tres en tres incluyendo la primera también. Comencemos por las tríadas:

Tríada sobre C: C – Eb – G
Tríada sobre D: D – F – A
Tríada sobre Eb: Eb – G – B
Tríada sobre F: F – A – C
Tríada sobre G: G – B – D
Tríada sobre A: A – C – Eb
Tríada sobre B: B – D – F

Nombremos los acordes resultantes aplicando lo que sabemos sobre tríadas:

Mayor: Tercera mayor (4 semitonos) + Tercera menor (3 semitonos)
Menor: Tercera menor + Tercera mayor
Disminuida: Tercera menor + Tercera menor
Aumentada: Tercera mayor + Tercera mayor

Por ejemplo, sobre C (C – Eb – G), la distancia entre C y Eb es de 3 seminonos (tercera menor); la distancia entre Eb y G es de 4 semitonos (tercera mayor). De modo que la tríada resultante, una tercera menor más otra mayor, determina un acorde menor, Do menor (Cm).

Repetimos esta operación en los seis restantes acordes, obteniendo:

C – Eb – G: Tercera menor + Tercera mayor: Do menor: Cm
D – F – A: Tercera menor + Tercera mayor: Re menor: Dm
Eb – G – B: Tercera mayor + Tercera mayor: Mib aumentado: Eb+
F – A – C: Tercera mayor + Tercera menor: Fa mayor: F
G – B – D: Tercera mayor + Tercera menor: Sol mayor: G
A – C – Eb: Tercera menor + Tercera menor: La disminuido: A°
B – D – F: Tercera menor + Tercera menor: Si disminuido: B°

Ya tenemos las tríadas buscadas, resultado de armonizar la escala Do menor melódica:

Cm – Dm – Eb+ – F – G – A° – B°

Generalizando sobre cualquier tonalidad, regresando a la fórmula de la escala menor melódica y añadiendo el tipo de acorde obtenido sobre cada grado:

Im – IIm – bIII+ – IV – V – VI° – VII°

Para calcular la versión tétrada, agregamos una tercera más a las que ya teníamos:

Tétrada sobre C: C – Eb – G – B
Tétrada sobre D: D – F – A – C
Tétrada sobre Eb: Eb – G – B – D
Tétrada sobre F: F – A – C – Eb
Tétrada sobre G: G – B – D – F
Tétrada sobre A: A – C – Eb – G
Tétrada sobre B: B – D – F – A

Podemos nombrar las tétradas analizando, como hicimos con las tríadas, el tipo de terceras que las forman, pero el método más rápido de hacerlo pasa por identificar el tipo de séptima. Para ello, contamos los semitonos que la separan de la fundamental del acorde una octava más arriba:

1 semitono: séptima mayor, acorde maj7
2 semitonos: séptima menor, acorde 7
3 semitonos: séptima disminuida, acorde dim7

Por ejemplo, en la tétrada sobre C (C – Eb – G – B), la distancia entre la séptima (B) y la fundamental (C), es de un semitono, de modo que la séptima es mayor. Si a la tríada obtenida (Cm), le agregamos una séptima mayor obtenemos la tétrada Cm(maj7), que se lee como «Do menor séptima mayor».

Procedemos de igual modo con los demás:

C – Eb – G – B: Cm + séptima mayor: Cm(maj7)
D – F – A – C: Dm + séptima menor: Dm7
Eb – G – B – D: Eb+ + séptima mayor: Eb+(maj7) (Mi bemol aumentado séptima mayor)
F – A – C – Eb: F + séptima menor: F7
G – B – D – F: G + séptima menor: G7
A – C – Eb – G: A° + séptima menor: Am7(b5) (también conocido como La semidisminuido, ya que lo está la quinta, pero no la séptima)
B – D – F – A: B° + séptima menor: Bm7(b5)

En resumen:

Cm(maj7) – Dm7 – Eb+(maj7) – F7 – G7 – Am7(b5) – Bm7(b5)

Generalizando, llegamos a esta interesante disposición de acordes, familia propia de la escala menor melódica:

Im(maj7) – IIm7 – bIII+(maj7) – IV7 – V7 – VIm7(b5) – VIIm7(b5)

Próximamente afrontaremos la armonización de otra gran escala menor, la armónica. Pero, ¿por qué esperar hasta entonces? Inténtalo tú mismo; seguro que eres capaz de lograrlo.

Javier Montero Gabarró


Armonización de la escala menor melódica


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.

LaTeX – Más cajas de texto horizontales

Objetivo: presentar con más profundidad los comandos que permiten crear cajas horizontales en LaTeX.

En el artículo anterior introdujimos el modo LR y mostramos el comando mbox, que activaba ese modo para la creación de una sencilla caja horizontal. Hoy profundizaremos presentando unos comandos que nos permitirán unos diseños más avanzados.

Si recuerdas, mbox es un sastre que crea un traje perfectamente a medida, una caja adaptada rigusoramente al texto que se especifica como parámetro. Pero es un traje invisible: en el resultado final puede que ni siquiera seamos capaz de diferenciar la existencia de la caja. Y es que el comando mbox cumple su misión sin necesidad de llamar la atención.

Para hacer visible nuestra caja LR, LaTeX nos ofrece el comando fbox que, al igual que mbox, crea una contenedor del tamaño exacto del texto, pero con la particularidad de que aparecece encuadrado en un marco.

mascajaslatex-1

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{parskip}

\begin{document}
Si eres músico, es importante que, de cuando en cuando, 
acudas al otorrinolaringólogo a revisar tu audición.

Si eres músico, es importante que, de cuando en cuando, 
acudas al \mbox{otorrinolaringólogo} a revisar tu audición.

Si eres músico, es importante que, de cuando en cuando, 
acudas al \fbox{otorrinolaringólogo} a revisar tu audición.
\end{document}

En el primer párrafo, la palabra otorrinolaringólogo está escrita con normalidad, sin caja, permitiendo a LaTeX dividirla, como sucede en el ejemplo, para una mejor presentación. En los párrafos segundo y tercero se enmarca con mbox y fbox, respectivamente, preservando su longitud total y evitando así su división.

Es posible también arreglar el traje y no cortarlo necesariamente a medida, sino a la longitud que queramos, aún pudiéndonos quedar paticortos o con los bajos arrastrando por el suelo.

El comando makebox es una variante de mbox que permite crear una caja de la anchura especificada, pudiendo indicar, además, el tipo de justificación que tendrá el texto dentro de ella:

\makebox[anchura][justificación]{texto}

Observa, por el corchete, que tanto anchura como justificación son opcionales.

En el parámetro anchura introducimos una medida de longitud (es importante no olvidar las unidades junto al valor numérico). En justificación podemos indicar l, r o c para expresar justificación izquierda (l), derecha (r) o centrado (c). El valor por omisión, si no se indica nada, es c, apareciendo el texto centrado en la caja.

Un ejemplo nos ayudará a entenderlo mejor:

mascajaslatex-2

\begin{document}
Ya no echan series como \mbox{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \makebox[6cm][c]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \makebox[6cm][l]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \makebox[6cm][r]{La casa de la pradera}, 
es una verdadera lástima.
\end{document}

El primer párrafo hace uso de mbox, ajustando la caja a la medida del texto. En los siguientes establecemos una anchura de 6 cm, observando su justificación centrada, izquierda o derecha.

La caja creada tiene anchura suficiente para acoger el texto que contiene, pero podría darse el caso de que no. Observa qué sucede si el traje se nos queda corto:

mascajaslatex-3

\begin{document}
Ya no echan series como \makebox[2cm][c]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \makebox[2cm][l]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \makebox[2cm][r]{La casa de la pradera}, 
es una verdadera lástima.
\end{document}

La caja tiene una anchura de 2cm, quepa o no quepa su contenido en ella. LaTeX la considera como si de un único carácter se tratase, escribiendo el siguiente justo a continuación de la caja, lo que explica la superposición de texto.

Naturalmente, al igual que sucedía con mbox, el comando makebox tiene su versión con marco: framebox.

mascajaslatex-4

\begin{document}
Ya no echan series como \framebox[6cm][c]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \framebox[6cm][l]{La casa de la pradera}, 
es una verdadera lástima.

Ya no echan series como \framebox[6cm][r]{La casa de la pradera}, 
es una verdadera lástima.
\end{document}

Para finalizar, si eres un usuario de LaTeX inquieto debes saber qué hay dos longitudes que permiten controlar la estética de estas cajas. Puedes regular el ancho del marco con fboxrule y su separación del texto con fboxsep. Al igual que otras longitudes LaTeX, su valor se establece con el comando setlength, del que creo haber hablado ya en alguna que otra ocasión.

mascajaslatex-5

\begin{document}
\setlength{\fboxrule}{1mm}
\setlength{\fboxsep}{6mm}
Ya no echan series como \framebox[6cm][c]{La casa de la pradera}, 
es una verdadera lástima.

\setlength{\fboxrule}{4mm}
\setlength{\fboxsep}{6mm}
Ya no echan series como \framebox[6cm][l]{La casa de la pradera}, 
es una verdadera lástima.

\setlength{\fboxrule}{.1mm}
\setlength{\fboxsep}{0mm}
Ya no echan series como \framebox[6cm][r]{La casa de la pradera}, 
es una verdadera lástima.
\end{document}

Fíjate en el último ejemplo, con un parámetro de separación nulo (aunque sea cero es preceptivo el uso de unidades): el marco aparece ajustado al límite más alto y bajo de los caracteres contenidos (letras L y p).

A lo largo de los años que llevo trabajando con LaTeX nunca he dejado de aprender, se trate de un comando nativo o de uno englobado en un paquete que extiende su funcionalidad. Cuidadosamente, he ido construyendo mi propio manual de referencia con cada pieza que he ido encontrando en el camino. El universo LaTeX es casi inconmensurable y recomiendo encarecidamente que hagas lo mismo. Si las cajitas de este artículo no forman parte aún de tu repertorio de técnicas, toma buena nota de ellas.

Javier Montero Gabarró


LaTeX – Más cajas de texto horizontales


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.

Construcción de acordes – 25: Power Chords

Objetivo: ilustrar la formación del acorde de quinta, también conocido como Power Chord.

Un amable lector del blog me preguntaba hace unos días por la formación de este tipo de acordes, apreciando su ausencia en la tabla de referencia de la serie dedicada a su construcción. Es cierto que, para muchos, el power chord, o acorde de quinta, no es digno de ser clasificado como acorde, aunque aquí no le haremos ese feo. Ligado indefectiblemente a determinados estilos musicales y al uso de guitarras eléctricas con fuerte distorsión, qué sería de nuestra historia musical sin su potencia expresiva.

Su formación es muy simple:

Power Chord (acorde de quinta): 1 – 5

No es más que la fundamental y una quinta justa sobre ella.

La notación no ofrece ningún misterio, tampoco: agregamos el número 5 a la letra de la nota fundamental (C5, Bb5, …).

Repetiremos en primer lugar el procedimiento de cálculo que hemos empleado en los restantes acordes de la serie aunque, dada su sencillez, facilitaré a continuación un método más rápido alternativo.

Hallemos, por ejemplo, las notas que integran los acordes C5 y Bb5.

Comenzamos, como siempre, registrando las respectivas escalas mayores, Do mayor y Si bemol mayor:

Do mayor: C – D – E – F – G – A – B
Si bemol mayor: Bb – C – D – Eb – F – G – A

Tomamos los grados indicados en la fórmula, esto es, el 1 y el 5:

C5: C – G
Bb5: Bb – F

Pero para esta simple operación no era necesario tanto despliegue. Por si aún no estuvieras habituado a contar quintas justas de una forma rápida voy a explicarte cómo hacerlo. Tienes a tu disposición, también, en el blog, los siete artículos, entre teóricos y prácticos, dedicados a la formación de intervalos en general.

Basta con saber que una quinta justa a partir de cualquier nota natural (es decir, sin sostenidos ni bemoles), es otra nota natural, a excepción de la construida sobre SI. En efecto, la distancia entre SI y su quinta natural, FA, es una quinta disminuida. Cuenta los semitonos que hay entre ambas y verás que te salen seis, en vez de los siete que constituyen la quinta justa, que seria FA# en este caso.

De modo que calcular quintas justas no es más que contar hasta cinco teniendo en cuenta lo explicado anteriormente. Calculemos unas cuantas:

C5

Contamos 5 sobre DO (incluyéndolo): DO – RE – MI – FA – SOL

La quinta es SOL, y como DO es natural, la quinta justa también lo es.

C5: C – G

Eb5

Contamos cinco sobre MI (nos olvidamos del bemol de momento, hasta la segunda parte del cálculo): E – F – G – A – B

La quinta es SI, que además es justa. Pero como la nota inicial real, MI bemol, está un semitono por debajo de MI, a la nota SI obtenida le quitamos otro semitono también, de modo que:

Eb5: Eb – Bb

Bb5

Contamos 5 sobre SI (nos olvidamos del bemol, de momento): B – C – D – E – F. Ahora bien, hemos dicho que la quinta justa sobre una nota natural es natural a excepción de SI. De modo que la quinta justa sobre SI es FA sostenido en lugar de FA natural. Como la nota original era SI bemol (un semitono por debajo de SI), bajamos un semitono la quinta obtenida, FA#, obteniendo FA natural:

Bb5: Bb – F

Cuanto antes te acostumbres a contar quintas sin apenas pensar mejor. Son la base del círculo de quintas, que no consiste más que en poner en círculo quintas sucesivas: C, G, D, A, E, B, F#/Gb, C#/Db, G#/Ab, D#/Eb, A#/Bb, E#/F.

Veremos con más detalle el círculo de quintas y algunas de sus aplicaciones en otro artículo del blog. Ahora, lo que me han entrado ganas es de coger la guitarra, saturar el ampli y hacer mucho, mucho ruido. Celestial o demoníaco, a gusto de cada uno.

Javier Montero Gabarró


Construcción de acordes – 25: Power Chords


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


Tabla de referencia de construcción de acordes.


Índice de todos los artículos de armonía.

10Km City Run RFEA Sevilla 2014

Sevilla - Street Run - SmallUna carrera especial que cada año espero con ilusión. El circuito anteriormente denominado Divina Pastora cambia de patrocinadores y ahora es 10Km City Run, haciendo escala en ciudades como Sevilla, Madrid (23/3), Oviedo (30/3), Valladolid (27/4), Mataró (31/5), Palma de Mallorca (7/6), Albacete (14/6) y Valencia (29/6).

Es especial por diversos motivos. Por un lado, es la carrera con la que abro oficialmente la temporada cada año, en un momento del invierno en el que en Sevilla ya casi huele a primavera. El recorrido es todo un lujo: comienza y termina el el Parque de María Luisa, bordeando completamente el centro histórico de la ciudad. Por si fuera poco, el trazado es completamente llano lo que, unido a la suave temperatura, hace que se junten las condiciones propicias para todos aquellos que deseen batir su marca personal en esta distancia.

Según la organización, el número de inscritos ha sido 1200, lo que me resulta quizás bajo comparándolo con otras ediciones anteriores. Posiblemente los doce euros de inscripción hayan echado atrás a más de uno. O tal vez tampoco haya hecho demasiada gracia tener que desplazarse hasta Mairena del Aljarafe para recoger el dorsal (encareciendo más el asunto). ¿Quién dice que correr es un deporte barato? Echad cuentas de lo que os podéis gastar al año en carreras, por no hablar, por supuesto, de la equipación.

Para plantear la carrera recurro, como hago habitualmente, al Virtual Partner de mi ForeRunner, que he puesto a correr a 5:30/Km. Mi objetivo es dejarlo atrás, aunque sólo sea por un metro, lo que me garantiza terminar la carrera en menos de 55 minutos. Ese ha sido el objetivo.

Salgo muy fuerte (subjetivamente hablando, desde luego), a 4:50/Km (esto sí es objetivo), dejando entre mi compañero virtual y yo una separación de un centenar de metros en muy poco tiempo. Esto es psicológicamente importante para mí. Me gusta tener margen suficiente entre ambos desde el primer momento. Si en algún momento las cosas se ponen mal, siempre puedo devolver algo de la ventaja adquirida.

Freno un poco, pero no tanto para dejar de ir siempre ganando metros. Activo el modo Sufrimiento ON. El resto es una cuestión de paciencia, dejando que los minutos y los kilómetros vayan sucediéndose uno tras otro.

Es curioso este deporte. Sufrimos desde el momento que salimos hasta que llegamos a la meta. Dejar de hacerlo sería tan sencillo como bajar el ritmo. Bastaría emplear un minuto más en cada kilómetro y garantizaríamos una carrera cómoda. Pero no es una opción; simplemente, no podemos. Activamos el piloto automático y aceptamos con resignación el sufrimiento constante. A nuestro ritmo, seamos corredores de 3:30 o de 6, pero siempre sufrimos.

Concluyo la carrera dejando a mi rival virtual a más de 400 metros tras de mí, lo que me ha supuesto finalizar en un tiempo oficial de 52′ 58″, a un ritmo medio de 5:15/Km. El GPS marcó los diez kilómetros en 52’30», por lo que, para él, la distancia recorrida ha excedido los 10Km en casi un centenar de metros más.

Objetivo cumplido. Marca que ya me garantiza un cajoncito cómodo (sub 55′) en la última carrera del año, la San Silvestre vallecana (otros 20 euros del ala). Corremos juntos un buen número de amigos y familiares, de modo que nos instalamos en el cajón correspondiente al peor tiempo de todos. Ahora les tocará a los demás ponerse las pilas. Lástima que por poco podría haber conseguido el derecho a la pulsera sub 52′. En cualquier caso, el resultado ha sido fantástico, logrando ampliamente el objetivo buscado.

Próxima carrera popular: Nervión – San Pablo, la primera del circuito del IMD en Sevilla. Nos vemos allí, a seguir sufriendo, cada uno a nuestro propio ritmo.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/03/10km-city-run-rfea-sevilla-2014/


Puedes consultar el índice completo de artículos pertenecientes a la categoría running.


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

LaTeX – El modo LR y mbox

Objetivo: presentar el modo LR de LaTeX y el comando mbox para la creación de cajas horizontales.

\LaTeX presenta diferentes modos de operación. Ya conocemos algunos: el modo normal y el matemático.

El modo normal, también conocido como modo párrafo, es el que típicamente utilizamos en nuestros escritos en \LaTeX. La unidad de diseño es el párrafo, regulando los saltos de línea y la presentacíón entre palabras persiguiendo la mejor presentación del bloque. Recordemos que el final de un párrafo se indica mediante una línea en blanco (líneas adicionales no son tenidas en cuenta). El comando par cumple la misma función.

El modo matemático lo utilizamos para la inserción de expresiones matemáticas, como las fórmulas o las ecuaciones. Cuando estamos en él suceden cosas diferentes propias al contexto en el que nos movemos. No hay espacios en blanco, no existen palabras sino que estas se descomponen en sus letras individuales, que ahora se consideran símbolos algebraicos. Como ya sabemos, entramos en el modo matemático con \( o \[ y lo abandonamos con los respectivos \) y \]. Existen también diferentes entornos para esta función.

Pero existe un modo diferente, utilizado también para la inserción de texto, en el que, en oposición al modo vertical normal, sólo hay horizontalidad, escritura de texto de izquierda a derecha que no se partirá verticalmente en líneas. Es el modo LR (Left, Right).

Hay comandos específicos que activan el modo LR y hoy veremos uno de ellos: mbox.

El comando mbox crea una caja con texto en modo LR del tamaño exacto para contener ese texto.

El concepto de caja es esencial porque, para \LaTeX, todo son cajas. Desde cada letra individual, que luego aglutina en estructuras mayores que son las palabras, pasando por las figuras, tablas, ecuaciones, o los mismos párrafos, todo son cajas. Cajas que pueden contener a su vez otras cajas y que luego serán pegadas adecuadamente para su presentación final.

Con el comando mbox creamos una caja horizontal, sin marco, que contiene el texto que hemos facilitado como argumento. La particularidad de esta caja, al estar su contenido en modo LR, es que desconoce lo que es un cambio de línea.

En la presentación final, al no destacar la caja con ningún marco, puede que pase desapercibida al pegarse, como si de un único carácter se tratase, al resto del texto normal.

O puede que no… Observa el resultado del siguiente código al introducir en mbox un texto que excede la anchura del documento:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{parskip}

\begin{document}
Esta es una caja horizontal muy larga: \mbox{En un lugar de La Mancha, 
de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía...}. 
El resultado es desastroso.
\end{document}

mbox-1

He capturado la página en pequeño, pero se aprecia como el texto no cabe y se pierde pasado el borde derecho.

Hay que ser muy cuidadoso en esto al utilizar mbox, desde luego. Entonces, ¿qué utilidad práctica nos ofrece este comando?

Puede emplearse, por ejemplo, dentro del modo matemático para introducir una caja horizontal de texto. No obstante, en determinados contextos el resultado no sería el deseado. Como veremos en otro artículo, el paquete amsmath proporciona formas más elegantes para tratar con matemáticas y texto.

Un uso muy común del comando mbox es para prevenir que una palabra sea dividida en un cambio de línea.

Observa el siguiente código y su resultado:

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{parskip}

\begin{document}
Si eres músico, es importante que, de cuando en cuando, 
acudas al otorrinolaringólogo a revisar tu audición.

Si eres músico, es importante que, de cuando en cuando, 
acudas al \mbox{otorrinolaringólogo} a revisar tu audición.
\end{document}

mbox-2

En la primera frase, \LaTeX, inteligentemente, divide la palabra otorrinolaringólogo, optimizando la presentación del párrafo. En la segunda, al incluir la palabra en una caja horizontal, evitamos su partición. Naturalmente, deberíamos tener un motivo que justifique esta decisión, algo que quizás no se aprecie en el ejemplo elegido.

En el siguiente artículo presentaremos otros comandos para crear cajas más sofisticadas que con mbox. Entre tanto, guárdate muy bien este en tu gran cajón de herramientas \LaTeX. Ocupa poco lugar, como un solo carácter.

Javier Montero Gabarró


LaTeX – El modo LR y mbox


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.

Python – Y, finalmente, finally

Objetivo: presentar la cláusula finally en el manejo de excepciones en Python.

Imaginemos, por un momento, que soy un perverso programador que, bajo el aspecto de un aparente dócil y simple programa esconde en él una intención oculta. Supongamos que, aprovechándome del deseo de todo el mundo de disponer de una aplicación que permita calcular la división de dos números enteros, intento colar un sutil mensaje subliminal al ejecutarla:

dividendo = int(input('Introduce el dividendo: '))
divisor = int(input('Introduce el divisor: '))
print('El cociente de la división de ambos números es', dividendo//divisor)
print("Viva el Betis manque pierda")

>>> 
Introduce el dividendo: 10
Introduce el divisor: 2
El cociente de la división de ambos números es 5
Viva el Betis manque pierda 

Impresionante, pero no tanto…

Si por un casual introducimos como divisor un cero, la división no podrá realizarse y el programa abortará, muriendo con él también nuestras oscuras pretensiones:

>>> 
Introduce el dividendo: 10
Introduce el divisor: 0
Traceback (most recent call last):
  File "C:/Python33/pruebas.py", line 3, in <module>
    print('El cociente de la división de ambos números es', dividendo//divisor)
ZeroDivisionError: integer division or modulo by zero

En los artículos anteriores presentamos la captura de excepciones en Python, de modo que tenemos recursos para solucionar esto:

try:
    dividendo = int(input('Introduce el dividendo: '))
    divisor = int(input('Introduce el divisor: '))
    print('El cociente de la división de ambos números es', dividendo//divisor)
except:
    print("No ha podido realizarse la operación")
    
print("Viva el Betis manque pierda")

>>> 
Introduce el dividendo: 10
Introduce el divisor: 0
No ha podido realizarse la operación
Viva el Betis manque pierda

Desde luego, esto funciona. La operación de división ha sido protegida con un try/except que, tal como está planteado, intercepta cualquier excepción que pudiera ocurrir. He introducido en el bloque try las dos sentencias input, no sólo la división, pues también ocurriría una excepción si se facilitase un valor no numérico cuando int() intentara la conversión a entero.

El código no fallará ante una eventual división por cero (ZeroDivisionError), la introducción de letras en vez de números (ValueError), o una interrupción con Ctrl-C (KeyboardInterrupt).

Pero no me convence. Quiero emplear mi propio manejador ante una división por cero o la introducción de letras, pero quiero respetar el gestor por omisión que trae Python (el mensaje de error clásico tras abortar el programa) para poder finalizar la ejecución con Ctrl-C si así lo deseo.

Hemos aprendido a interceptar selectivamente las excepciones también:

try:
    dividendo = int(input('Introduce el dividendo: '))
    divisor = int(input('Introduce el divisor: '))
    print('El cociente de la división de ambos números es', dividendo//divisor)
except (ZeroDivisionError, ValueError):
    print("No ha podido realizarse la operación")
    
print("Viva el Betis manque pierda")

Ahora, si dividimos entre cero, salvamos el error y también nuestro mensaje subliminal:

>>> 
Introduce el dividendo: 10
Introduce el divisor: 0
No ha podido realizarse la operación
Viva el Betis manque pierda

Lo mismo si introducimos valores no numéricos:

>>> 
Introduce el dividendo: GOL!!!
No ha podido realizarse la operación
Viva el Betis manque pierda

Pero nuestro gozo en un pozo si abortamos con Ctrl-C:

>>> 
Introduce el dividendo: 
Traceback (most recent call last):
  File "C:/Python33/pruebas.py", line 2, in <module>
    dividendo = int(input('Introduce el dividendo: '))
KeyboardInterrupt

Se rompe la ejecución del programa y, con ello, el Betis pierde.

Para seguir insuflándole ánimos, Python dispone de la claúsula finally en el bloque try. El código que se incluya en ella, apúntate esto bien, se ejecutará siempre, suceda o no suceda una excepción.

En su versión más simple, finally no necesita que haya ningún except:

try:
    dividendo = int(input('Introduce el dividendo: '))
    divisor = int(input('Introduce el divisor: '))
    print('El cociente de la división de ambos números es', dividendo//divisor)
finally:
    print("Viva el Betis manque pierda")

Ahora, pase lo que pase dentro del try, la instrucción del finally se ejecutará siempre. Tanto si sucede algo bueno:

>>> 
Introduce el dividendo: 10
Introduce el divisor: 2
El cociente de la división de ambos números es 5
Viva el Betis manque pierda

Como si no:

>>> 
Introduce el dividendo: 10
Introduce el divisor: 0
Viva el Betis manque pierda
Traceback (most recent call last):
  File "C:/Python33/pruebas.py", line 4, in <module>
    print('El cociente de la división de ambos números es', dividendo//divisor)
ZeroDivisionError: integer division or modulo by zero

Se ejecuta el print del finally y, a continuación, el manejador por omisión se ocupa del tratamiento de la excepción, abortando el programa e informando por qué.

Podemos combinar finally con except también:

try:
    dividendo = int(input('Introduce el dividendo: '))
    divisor = int(input('Introduce el divisor: '))
    print('El cociente de la división de ambos números es', dividendo//divisor)
except (ZeroDivisionError, ValueError):
    print("No ha podido realizarse la operación")
finally:
    print("Viva el Betis manque pierda")

En este caso utilizamos nuestro propio gestor ante una división por cero o la introducción de valores no numéricos, pero mantenemos el que trae por defecto Python para cualquier otra excepción, lo que nos permite abortar el programa con Ctrl- C. El código dentro de la claúsula finally se ejecuta siempre, suceda o no suceda una excepción:

>>> 
Introduce el dividendo: 10
Introduce el divisor: 4
El cociente de la división de ambos números es 2
Viva el Betis manque pierda
>>> ================================ RESTART ================================
>>> 
Introduce el dividendo: 
Viva el Betis manque pierda
Traceback (most recent call last):
  File "C:/Python33/pruebas.py", line 2, in <module>
    dividendo = int(input('Introduce el dividendo: '))
KeyboardInterrupt

El uso típico de la claúsula finally es la realización de tareas de limpieza para que no queden flecos en caso de que se produzca una excepción. Piensa, por ejemplo, en el gesto de cerrar un fichero una vez ha sido abierto para asegurarnos de que, suceda lo que suceda mientras estemos procesando el fichero, siempre quedará perfectamente cerrado.

Dedicaremos el próximo artículo, a modo de resumen, a esquematizar lo que hemos tratado hasta ahora en estos cuatro artículos dedicados a la gestión de excepciones en Python.

Nota: no soy futbolero, ni tengo preferencia por ningún equipo sobre otro, pero sí que admito un cariño y especial admiración por la afición del Betis, tan incondicional, fiel y estoica.

Javier Montero Gabarró


Python – Y, finalmente, finally


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.

Running – Febrero 2014

Dejamos enero tirado en la cuneta ya y proseguimos con los entrenamientos de febrero, mes especial para el running sevillano, que ha acogido en su calendario la trigésima edición (¡30 años!) de su maratón, con records tanto de la prueba (2:08:33, Kiplimo Lagat) como en participación (9000 corredores).

Mes también en el que se abre la inscripción para otros dos eventos típicos del panorama sevillano: Sevilla 10K City Run (que otros años hemos conocido como Divina Pastora), el 9 de marzo, y el circuito de carreras populares del IMD, cuya primera prueba, Nervión – San Pablo, tendrá lugar el día 30 de marzo. Ya estoy inscrito en ambas, de modo que, salvo razones de causa mayor, me espera un mes de marzo entretenido.

Continuemos con los entrenamientos del mes:

2 de febrero de 2014

El domingo es un día perfecto para una tirada larga. Sea lo que sea lo que para uno signifique esto, una vez a la semana hay que estar dispuesto a hacer más kilómetros de lo habitual. Para mí, una tirada larga es aquella que supera los 10 kilómetros, distancia típica de las pruebas en que participo. En ocasiones puntuales la supero entrenando (12, 15, o incluso más de 20 Km), pero ya me he aprendido bien que, si quiero mantener alejado el riesgo de lesión, cuantas menos veces exceda la hora corriendo, tanto más me lo agradecerán mis articulaciones.

El parque de Miraflores está entre mis favoritos del fin de semana. Muchos corredores y muchos kilómetros de circuitos posibles donde el aburrimiento no tiene cabida.

10.21Km; 59:50; 5:52/Km

8 de febrero de 2014

Sesión de trabajo en la cinta, con una pequeña vuelta de tuerca…

[(10, 0, 4), (12.2, 0, 1)] x 6

La terna significa (velocidad en kh/h, inclinación, tiempo en minutos).

Es decir, cuatro minutos a 10Km/h (6:00/Km) y uno a 12.2Km/h (4:52/Km), todo eso seis veces sin descansar. Recordemos que persigo ser capaz, algún día, de correr los 10Km en menos de 50 minutos, es decir, realizar en promedio cada kilómetro en menos de cinco minutos.

18 de febrero de 2014

No hay justificación para tantos días seguidos sin entrenar. El tremendo mal tiempo que hemos estado viviendo estas dos últimas semanas no es excusa suficiente.

Escapada al Huevo de Colón: 9.03Km; 53:29; 5:55/Km.

22 de febrero de 2014

Parque de Miraflores: 10.01 Km; 57:17; 5:43/Km.

24 de febrero de 2014

Ya se perciben los beneficios de los cambios de ritmo en la cinta. Aumento el tiempo que paso corriendo a 12Km/h sin apenas notar un mayor esfuerzo:

[(10, 0, 3:30), (12, 0, 1:30)] x 6

28 de febrero de 2014

Una mañana festiva no puede desaprovecharse, de modo que me calzo las zapatillas y me doy una escapada al río a correr:

7.01Km; 38:28; 05:29/Km

Lo que ha hecho particularemente interesante a este entrenamiento es que, en plena recta y durante un minuto, he soltado las piernas todo lo que he podido, manteniendo un ritmo medio de 4 minutos el kilómetro (15 Km/h). Breve, pero vertiginoso, adelantando incluso a algunos ciclistas. Puedo entender a quienes hablan del placer de correr rápido (nuevamente, esto es relativo).

Nos vemos en marzo.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/02/running-febrero-2014/


Puedes consultar el índice completo de artículos pertenecientes a la categoría running.


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

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