Cómo calcular raíces cuadradas

Un día se me ocurrió publicar un articulito sobre el fundamento matemático del método para calcular raíces cuadradas usando lápiz y papel. Desde entonces me llega un montón de visitas de gente que quiere saber cómo calcular una raíz cuadrada (supongo que les da igual por qué funciona el método si no saben cómo emplearlo, ¿no?). Por lo tanto, he decidido escribir este artículo explicativo.

Para empezar, vamos a ver cómo calcular la raíz cuadrada de un número de una o dos cifras. Por ejemplo, calculemos la raíz cuadrada de 71:

Esto es fácil: simplemente tenemos que hallar el número más alto, del 0 al 9, que multiplicado por si mismo nos dé 71 o menos. En este caso, el número que buscamos es 8, ya que 8x8=64, que es inferior a 71, y 9x9=81, que es superior a 71. Además, la operación tiene un "resto" que vale 7, ya que 71-8x8=7. Todo esto lo escribimos de esta manera:

Fácil, ¿no?

Pues ahora vamos a ver cómo se calcula la raíz cuadrada de un número de más de dos cifras. Por ejemplo, el 71.492:

El primer paso consiste en dividir el número en grupos de dos dígitos, comenzando por la derecha:

A continuación, calculamos la raíz cuadrada del grupo de más a la izquierda:

En este caso hemos calculado la raíz cuadrada de 7, que es 2 con un resto de 3.

A continuación "bajamos" el siguiente grupo de dos dígitos y lo ponemos a la derecha del resto:

En el siguiente paso multiplicamos nuestra solución parcial por 2 (siempre por 2) y ponemos el resultado (4) en una nueva fila de la columna de la derecha:

Ahora viene la parte más complicada del cálculo. Tenemos que buscar un dígito de 0 a 9 para añadir a la derecha del 4, lo cual nos dará un número de dos cifras. Ese número de dos cifras, multiplicado por el dígito que hemos buscado, nos dará un número que tiene que ser igual o inferior a 314, que es el número que tenemos después de "bajar" el siguiente grupo de cifras. El dígito más alto que encontremos será la siguiente cifra de la solución.

Veamos un dibujo para hacerlo más claro. Imaginad que "X" es un dígito de 0 a 9 y que "ABC" es el resultado de multiplicar "4X" por "X":

En este caso, el dígito que buscamos es 6, porque 46x6=276, que es inferior a 314, y 47x7=329, que se pasa de 314:

El resto es 38.

Ahora tenemos que, como antes, bajar el siguiente grupo de cifras y también multiplicar la solución parcial por 2 y añadir el resultado a la columna de la derecha:

Y, como antes, tenemos que buscar un dígito, concatenarlo al "52", multiplicarlo por el resultado, y procurar que el resultado sea igual o inferior a 3892:

Y, como podéis ver, la raíz cuadrada de 71492 es 267, con un resto de 203. Podemos comprobarlo fácilmente, calculando 267x267=71289, y 71492-71289=203.

Fácil, ¿no?

Algunos os preguntaréis cómo se pueden calcular las cifras decimales de la raíz cuadrada. Es decir, si usamos una calculadora, ésta nos dirá que la raíz cuadrada de 71492 es 267,3798... ¿cómo se pueden calcular estas cifras decimales con lápiz y papel?

La respuesta es muy simple: sólo tenéis que "bajar" grupos de dos ceros y seguir calculando la raíz cuadrada hasta que os canséis. Por ejemplo, aquí veis cómo he calculado las dos primeras cifras decimales:

Otra pregunta que algunos os haréis es: ¿cómo se calcula la raíz cuadrada si el número que nos dan tiene decimales? La respuesta es simple: cuando dividáis el número en grupos de dos cifras, en lugar de empezar por la derecha, empezad por la coma decimal. Si el grupo de más a la derecha se queda con una sola cifra, completadlo con un cero. Después, simplemente calculad la raíz cuadrada como siempre, acordándoos de poner la coma en el resultado cuando alcancéis la coma en el número original.

Y esto es todo de momento. Espero que esta explicación os haya sido útil y hayáis encontrado lo que buscábais.

Simetría lateral

Un experimento fácil de hacer para el que tenga un poco de familiaridad con software de retoque fotográfico:

  1. Sacaos una foto de vuestra cara, completamente de frente;
  2. recortadla a lo largo del eje vertical de vuestra cara y separadla en dos mitades;
  3. para cada mitad, hacedle una copia e invertidla de derecha a izquierda (como un espejo);
  4. pegad cada mitad a su correspondiente copia invertida, formando así dos caras.

Nadie tiene la cara completamente simétrica, así que los resultados suelen ser interesantes.

Tengo una foto de los resultados con mi cara.

Si alguna vez me van a clonar usando de ejemplo una foto de un lado de mi cara, ya sé qué lado quiero que usen. Uno de estos dos macizos tiene una gran carrera en el mundo del cine. El otro es John Cleese cuando aún no tenía bigote.

Qué ocurre con mi voto

He aquí las últimas novedades sobre mi intento de votar en las próximas elecciones generales.

Como ya habéis podido leer, a finales de agosto descubrí que mi inscripción en el CERA no se había actualizado cuando fui a registrar mis mudanzas, así que aún tenía mi primera dirección en Dublín. Me puse en contacto con el consulado para enviarles los datos actualizados, pero éstos entraron en el censo de octubre, mientras que para las elecciones se usa el de julio, así que hace un par de semanas tuve que ir a San Francisco a hacer la reclamación al censo electoral.

El siguiente paso es enviar un impreso a la delegación provincial de A Coruña de la oficina del censo electoral. Este impreso, en teoría, me lo mandan a casa y luego tengo que enviarlo de vuelta firmado y acompañado de una fotocopia del DNI, para lo cual tengo el 22 de octubre de plazo. Ayer me llegó una carta de la oficina del censo electoral, así que fui a la oficina de correos a recogerla. Sin embargo, no era el impreso de marras, sino una confirmación de que habían estimado mi reclamación (aunque copiaron incorrectamente el número del apartamento -- menos mal que parece que el cartero se sabe mi nombre y ha dejado el aviso en mi buzón).

Como ya me conozco el percal y ya sé que este impreso no llegará hasta después del plazo (si es que llega), lo he descargado y cumplimentado yo mismo y lo he enviado directamente por fax a la susodicha oficina del censo electoral (en la web del proceso electoral dice que se admite el envío por fax).

Ahora, en teoría, me deberían enviar las papeletas y toda la documentación para que yo pueda ejercer mi derecho al voto. Espero que no ocurra como en las últimas elecciones gallegas, que las papeletas no llegaron hasta que ya era demasiado tarde para ello (me parece percibir un patrón). Ya os contaré qué ocurre.

No voy a votar al PP ni al PSOE (pero no por los motivos que piensas)

El censo electoral en España es permanente. Esto quiere decir que se mantiene un censo que recibe actualizaciones constantemente, en lugar de hacer un censo nuevo cada cierto tiempo. Aún así, el 1 de cada mes se "cierra" el censo con las actualizaciones recibidas durante el mes anterior. Cuando hay elecciones, el censo que se utiliza es el cerrado en el segundo mes anterior a la convocatoria. Si no me equivoco, tienen previsto publicar la convocatoria de las próximas elecciones generales el día 27 de setiembre, con lo que se utilizaría el censo cerrado el 1 de julio.

Cuando un español se va a vivir al extranjero ha de ir a registrarse a la oficina consular correspondiente; al mismo tiempo, le añadirán al CERA, que es el censo de los españoles que viven en el extranjero. Cuando me fui a vivir a Irlanda acudí a la embajada, y allí me dieron de alta en el CERA. Un tiempo más tarde me cambié de piso y di aviso del cambio de dirección. Algo más tarde todavía me vine a EEUU, y también fui al consulado a registrarme.

Podéis imaginar la sorpresa que me llevé la semana pasada cuando fui a la web del INE para revisar mis datos del CERA y vi que seguía figurando con mi primera dirección irlandesa. Es decir, que no actualizaron mi inscripción en el censo cuando fui a registrar mi cambio de dirección en Irlanda ni cuando fui a registrarme en San Francisco.

He enviado los correspondientes impresos para actualizar mi dirección en el CERA, y anteayer me dijeron que ya han actualizado mis datos en el censo. Estos datos saldrán en el censo del 1 de octubre, que es después de la convocatoria y, por lo tanto, no voy a poder votar en las próximas elecciones.

(Los españoles residentes en el extranjero tenemos un obstáculo más a la hora de votar: en la reciente modificación de la ley electoral se han sacado de la manga que los votantes tienen que enviar una solicitud para poder ejercer su derecho al voto, utilizando un formulario que se les enviará antes por correo. Me disculparéis que me entre una sonrisita cínica al recordar que en las últimas elecciones de la Xunta de Galicia mis impresos y papeletas de votación se retrasaron tanto que, cuando al fin llegaron, ya no tuve tiempo para enviar mi voto).

Añadido: parece que mi lectura de la normativa electoral no fue lo suficientemente profunda y no me di cuenta de que, viviendo en el extranjero, mi circunscripción electoral está separada de mi lugar de residencia. Como en periodo de reclamaciones no admiten cambios en la circunscripción, pensaba que esto significaba que mi cambio de consulado tampoco lo admitirían y querrían que votara en Dublín. Sin embargo, aunque he cambiado de país de residencia (y, por lo tanto, ahora trato con un consulado distinto), sigo votando en Santiago de Compostela, con lo que mi circunscripción electoral no ha variado, y, en teoría, deberían admitir mi reclamación cuando la presente. Ya os diré qué tal.

Respeto por decreto

Estos días estuve pensando, lo cual es peligroso, en el asunto de los colegios profesionales para ingenieros en informática, y me he dado cuenta, por fin, de uno de los motivos por lo que ese tipo de organizaciones me dan tan mala espina.

He estado mirando en las webs de varios de esos colegios, y uno de los temas que se repiten continuamente es el del respeto. “Para que se respete nuestra profesión”, “que se nos dé el respeto que merecemos”, etc., etc. (No son citas literales, ojo).

Sin embargo, el respeto por decreto no existe. Por ejemplo, el principal objetivo de la SGAE es, ostensiblemente, que se respete a los autores y editores. Ya me diréis cuánto éxito tiene esa organización, y cuánto respeto reciben Alejandro Sanz o Ramoncín cada vez que la SGAE cobra el 10% de la recaudación de un recital benéfico. Del mismo modo, no puedo imaginarme qué puede hacer un colegio profesional para “hacer que se respete la profesión” sin conseguir que mis posibles clientes me desprecien más. “Oiga usted, que para hacer este trabajo tiene que contratar por ley a un ingeniero informático colegiado” no es forma de ganarse el respeto de nadie.

El respeto no se obtiene con leyes. El respeto se gana día a día, en el trabajo y tratando con los clientes, jefes y compañeros de trabajo. Una persona que hace un mal trabajo no es respetada. Una persona que no es capaz de hacerse valer no es respetada. Una persona que trata mal a sus compañeros o subordinados no es respetada. Siendo una persona como es debido, haciendo un buen trabajo y exigiendo lo que mereces; así es como uno se gana el respeto de los demás. Y lo demás son tonterías.

El Día de la Independencia

Este lunes es el cuatro de julio, que es cuando aquí en los EEUU celebran su “Día de la Independencia”. El Día de la Independencia es el día en que todos los chavales que hayan cumplido los dieciocho años y, por lo tanto, sean legalmente adultos, abandonan el hogar paterno y se independizan.

Seguro que habéis visto esta tradición decenas de veces, ya que es el inicio de montones de películas americanas: el campus de la Universidad lleno de recién llegados pisando todo el césped, y los coches dando vueltas alrededor de un macizo con el escudo de la Universidad, hasta que la cámara se acerca a un coche que se detiene y, por pura casualidad, consigue aparcar en el mejor sitio de todo el campus y sin necesidad de hacer maniobras. Un chaval se baja del coche y mira con asombro y un poco de aprensión toda la fauna y flora que le rodea, y su padre, que es judío y lleva gafas, le da un abrazo lateral, estrechándole los hombros, y le dice: “¡bueno, por fin estamos aquí!” Y, por si no quedaba claro, añade: “¡la universidad!”

La escena que esas películas no muestran es cuando, esa noche, los padres llegan a casa, y se dan cuenta de que por fin están solos, y de que pueden hacer lo que quieran, donde quieran, y cuantas veces quieran. Y de tanta alegría que les entra, lanzan fuegos artificiales, y los vecinos se reunen a admirarlos. Cada año, entre cuatro y seis millones de personas cumplen los 18, así que, como os podéis imaginar, el cuatro de julio hay un montón de fuegos artificiales...

El deporte misterioso

Cuando me vine a EEUU me parecía que adaptarme a este país sería una cosa facilísima. Al fin y al cabo, el 90% de las películas y series de TV que veo proceden de este país, así que debería conocerlo razonablemente bien, ¿no? Pues bien; de vez en cuando, algo ocurre que me recuerda que estoy en un país extranjero que no conozco tan bien como creía. Lo que me ha venido a la mente hace un momento, sin embargo, no es algo que me haya ocurrido hace poco, sino algo que me pasó al poco tiempo de llegar:

Acababa de alquilar el apartamento, y mis cosas todavía estaban en algún almacén en Irlanda, esperando a que tuvieran a bien cargarlas en un barco que viniese a California (y no llegarían hasta un par de meses después), así que tenía que comprar ropa de cama, platos, cubiertos, etc. ¿Adónde fui a comprar todo eso, sabiendo que estoy en EEUU? Al Walmart, por supuesto.

Si queda alguien que no lo sepa, Walmart es la mayor cadena de hipermercados de EEUU, y como tienen las cosas tiradas de precio, en ocasiones se junta en sus tiendas la fauna más variada. Pero esta historia no es sobre la gente que va al Walmart, sino sobre los americanos en general, vistos a través del prisma de las secciones del Walmart.

Mi búsqueda de artículos del hogar me llevó junto a la sección de artículos deportivos, y allí pude ver estantes llenos de adminículos y con un cartelito que indicaba para qué deporte eran esos elementos. “Swimming” (natación), “basketball”, “baseball”, “skating” (patinaje), y así sucesivamente hasta que vi uno que no conocía: “tailgating”.

Hasta entonces, el único “tailgating” que conocía consistía en ir por carretera pegado al vehículo que te precede, pero no creía que, aún con tanta afición que tienen aquí al NASCAR y otros deportes del motor, hubiesen convertido eso en un deporte. Un vistazo al contenido de la estantería no me aclaró en qué podía consistir ese deporte; no parecían artículos para practicar ese deporte, sino más bien para ir a verlo. En fin, como no estaba muy interesado en el tema y tenía otras cosas que hacer me olvidé del asunto y pasó el tiempo...

... Hasta que un día vi un artículo sobre el béisbol, que explicaba que el pre-partido es una auténtica ocasión social. Unas cuantas horas antes de que se abran las puertas del estadio, unos cuantos cientos o miles de personas llegan con sus camionetas, aparcan y luego abren el portón de la camioneta y sacan sillas y mesas y bebidas y la barbacoa y montan una auténtica fiesta-picnic, compartiendo vituallas con sus vecinos de camioneta. Ah, y como el portón de una camioneta se llama “tail gate”, esa especie de picnic masivo motorizado sobre asfalto se llama “tailgating”.

Bonito deporte. Y ahora sé algo más sobre EEUU.

A limerick

Composing a Limerick ingenious
is task apropos for a genius,
for to find a good rhyme
without wasting much time
is something I'm not very good at.

(Edit: heterogeneous).

Aprendiendo a errar

Reconozcámoslo: a ninguno de nosotros le gusta cometer errores. Los errores hacen que nuestros planes salgan mal, nos hacen perder tiempo y dinero, y nos pueden llevar al fracaso, que en muchas sociedades conlleva un fuerte golpe en nuestra reputación. Sin embargo, las personas que más éxito tienen son también las que más errores han cometido; lo importante es que son capaces de analizar sus errores y aprender de ellos para no cometerlos en el futuro.

En la industria informática, como es bien sabido, cometemos errores como el que más: proyectos que se salen de plazo, proyectos que nunca se terminan, redes que se caen, intrusiones en sistemas seguros, datos perdidos, etc. Vaya, que no nos han faltado oportunidades de aprender de nuestros errores, y una de las herramientas más importantes que tenemos para hacerlo es el “postmortem”.

El postmortem es un documento en el que se analiza un suceso. Este suceso suele ser un fallo, aunque se pueden hacer postmortem de cualquier tipo de suceso, incluso de éxitos inesperados. El objetivo de este análisis es conocer las causas del suceso y la manera de evitarlo en el futuro -- o de repetirlo, si es un postmortem de un suceso exitoso. Como la mayoría de postmortem se escriben después de un fallo, en este artículo hablaré de fallos, soluciones y acciones paliativas.

Inevitablemente, un postmortem tendrá que hablar de errores cometidos y de malas decisiones tomadas por una o más personas. Es importante que no se utilice el postmortem para echar las culpas a nadie o para distribuir castigos. Para escribir un postmortem de calidad es imprescindible la colaboración de todas las personas implicadas, y es de suponer que no prestarán toda la ayuda necesaria si conlleva consecuencias negativas para ellos.

Un postmortem debería contener, como mínimo, explicaciones de qué sucedió, cómo sucedió, por qué sucedió, cómo terminó (si es que terminó), qué se hizo bien, qué se hizo mal, y qué se va a hacer en el futuro. Normalmente, los postmortem tienen una estructura similar a: resumen, secuencia temporal, acciones paliativas (realizadas y por realizar), lecciones aprendidas y acciones a largo plazo.

Los postmortem suelen entrar en detalles, ya que son documentos para uso interno: mencionan quién intervino en el suceso, qué máquinas y servicios estuvieron implicados, qué líneas de código tenían errores, … Como dije antes, no es objetivo del postmortem echarle la culpa a nadie, así que “aparecer” en uno no debería tener, por si mismo, más consecuencias que tener que aguantar que los compañeros se metan con uno de vez en cuando.

(Voy a aclarar esto, que tengo muchos lectores que se toman todo lo que leen con excesiva literalidad: estoy hablando de situaciones normales en las que uno se equivoca y pierde datos porque ha copiado un disco vacío sobre uno lleno o ha causado un fallo de servicio porque ha conectado la red de producción al “uplink” incorrecto, no de casos delictivos en los que el sistema falla catastróficamente porque alguien ha vendido los sistemas secundarios y se ha quedado con el dinero).

No obstante, en ocasiones hay que redactar postmortem dirigidos a audiencias externas. En esos casos, es habitual reducir el nivel de detalle del documento. Esto puede ser tan simple como eliminar nombres y referencias a elementos confidenciales, o puede ser una reescritura total del documento. El nivel de detalle queda, en general, a elección de la persona que vaya a publicar el postmortem, pero siempre debe ser suficiente para que el lector tenga una idea aproximada del fallo que hubo y pueda estar razonablemente seguro de que se están tomando medidas efectivas para evitar que vuelva a suceder. En general, la gente aprecia más los postmortem detallados.

Como sé que queréis ejemplos pero no tengo ganas de inventarme uno, voy a poneros un enlace a la versión pública del postmortem de un fallo de App Engine, que me gusta bastante como ejemplo porque es muy parecido a la versión interna, salvo por la ausencia de nombres de personas y otros datos confidenciales.

Al terminar este artículo me gustaría animaros a escribir postmortem, a convertirlo en una rutina cada vez que haya habido un problema (o algo haya salido mejor de lo esperado, para ver si se puede repetir), y a solicitar postmortem de vuestros proveedores cada vez que tengáis un problema gordo con su servicio.

Y vosotros, ¿escribís postmortem en vuestra empresa? ¿Los solicitáis de vuestros proveedores? ¿Conocéis mejores ejemplos de postmortem accesibles por la web? ¿Son cuatro preguntas al final de un artículo demasiadas? Escribid un comentario y dadme vuestra opinión.

Tests de integración y compilación continua

En esta última entrega de mi serie sobre tests de unidad, quiero hablaros brevemente de dos asuntos relacionados con este tema: tests de integración y compilación continua.

En estos artículos os he explicado cómo escribir tests que pongan a prueba los elementos de vuestro software por separado, libres de la influencia de los otros elementos. Sin embargo, estas pruebas no son suficientes: tener varios elementos que funcionan correctamente por separado no significa que vayan a funcionar bien al ponerlos juntos. Por ejemplo, puede ser que uno de nuestros módulos espere fechas en formato día-mes-año y la base de datos las produzca en formato mes-día-año; tal vez nuestro módulo funcione perfectamente al igual que la base de datos, pero cuando intentemos pasar una fecha entre uno y el otro tendremos un problema bastante gordo.

Para evitar esto tenemos que introducir un nuevo tipo de test: los tests de integración. Grosso modo, los tests de integración consisten en “ensamblar” varios módulos, o incluso el programa entero, y comprobar que varias acciones tienen los efectos deseados. Un caso especial de test de integración es el “end-to-end test” (“prueba de un extremo al otro”), que consiste en arrancar todo el programa (configurado para acceder a bases de datos específicas para pruebas), realizar operaciones en el interfaz de usuario utilizando una herramienta de automatización, y comprobar que estas operaciones se reflejan en la base de datos.

Por su naturaleza, los tests de integración se ejecutan más lentamente que los tests de unidad, así que puede llevar mucho tiempo ejecutarlos. Por ese motivo, los programadores normalmente no ejecutan los tests de integración de forma rutinaria, sino que lo hace el servicio de compilación continua.

Un compilador continuo (“continuous build”) es un servicio que “vigila” el sistema de control de versiones y, cuando detecta que alguien ha hecho “commit” de una nueva versión del software, la descarga, la compila y ejecuta todos los tests. Los compiladores continuos suelen estar conectados a varios sistemas de notificación de estado, como email, páginas web, pantallas, o incluso semáforos. Estos sistemas indican el estado de la última versión compilada por el servicio; “rojo” si hubo algún problema al compilar o ejecutar los tests, o “verde” si no hubo ningún problema.

En muchos sitios se utiliza el compilador continuo para asegurar la calidad del software. Por ejemplo, en muchos sitios está prohibido hacer “commit” si el compilador continuo está rojo, a menos que sea para arreglar el fallo. A la hora de escoger una versión para poner en producción, la elección es mucho más fácil: la última versión verde disponible. De hecho, en algunos sitios ponen en producción una nueva versión cada día; esta versión, por supuesto, es la última versión verde disponible.

Y con esto termino mi serie sobre tests de unidad. Espero que os haya inspirado para empezar a escribir y mantener tests de unidad en vuestro software si no lo hacíais antes, y para aprender más sobre el tema si ya lo hacíais. Es posible que en el futuro escriba sobre otros asuntos técnicos; sólo tenéis que escribirme para sugerir temas.

(Primer artículo).