Calcular el IMC con Javascript

Esta semana en el trabajo me encontraba con una petición de un cliente. En un formulario donde insertaba peso y talla de una persona quería que hubiera un campo con el índice de masa corporal, que debía rellenarse solo. ¿Esto cómo va? Pues lo arreglamos con una función de javascript:

function calculaIMC(){
  //declaramos las variables
  var peso, altura, imc;
  //recogemos los datos.
  //Suponemos que los campos
  //tienen esos Id.
  //El peso en KG y la altura en cm
  //para operar mejor
  peso=document.getElementById("peso").value;
  altura=document.getElementById("altura").value;
  //comprobamos que los campos
  //no vengan vacíos
  if(peso!="" && altura!=""){
    //aplicamos la fórmula
    altura = parseInt(altura)/100;
    imc=peso/(altura*altura);
    document.getElementById("imc").value=imc.toFixed(2);
  }
}

Recuerda que queremos que los datos se introduzcan como tipos enteros: puedes poner una validación por javascript para que no metan comas, usar un campo numeric de HTML5 (hoy por hoy ya todos los navegadores modernos lo soportan) o hasta tirar de una vieja librería de jQuery (que servía para asegurarnos el funcionamiento en navegadores viejos, aunque hoy por hoy ya no tenga mucho sentido).

Anuncios

Javascript: convertir Array en CSV

Vamos con un tip rápido de javascript ¿cómo convertimos un array en una cadena de valores separados por comas? Es bastante sencillo lograrlo, y así obtener un formato válido para crear un fichero CSV más adelante:

var sabbath = ['ozzy', 'iommi', 'bill', 'geezer'];

var sabbathCsv = sabbath.valueOf();

Si lo que queremos son comas como separador el método valueOf() ya nos hace el trabajo, pero ¿si queremos otro separador? Entonces recurriremos a join().

var icada = ['drogas', 'boni', 'alf', 'fer'];

var icadaCsv = icada.join("#");

En el ejemplo de arriba usará el caracter # como separador en lugar de las comas.

El Bandcamp de la Quincena: Billy Lobster – Boogie on the Fly (19/02/2017)

Calentita viene la entrega de esta semana de El Bandcamp de la Quincena, hace sólo dos semanas que fue publicado este trabajo. Emulando a la infanta fugitiva nos acercamos al área de Lisboa para paladear un poco de blues (bueno, ella al blues imagino que no va):

No sé si Billy Lobster es un fan fundamentalista de Bob Esponja o de las películas de Yorgos Lanthimos, o si su nombre viene de alguna historia de infancia o adolescencia que jamás conoceremos. De Billy Lobster solo se lo que nos cuenta y lo que se puede escuchar.

¿Qué nos cuenta? Pues que nació bajo el nombre de Pavel Racu en Moldavia, país del que marchó a los 17 años rumbo a Portugal. Que desde crío, cuando jugaba a hacer air guitar con una escoba, siempre quiso ser músico. Que de adolescente se contagió de la rockin’ pneumonia y la boogie woogie flu y jamás se ha curado de esa bendita infección. Y que este Boogie on the Fly se la ha guisado y comido casi integramente él solito, ya que Billy Lobster es un hombre y a la vez toda una banda: guitarra, voz y percusión, lo toca todito. Como Muchachito Bombo Infierno, pero molando (ese es el punto diferencial). Cuenta con un armonicista en algunos temas, João Luz, y en los controles ha estado Tito Carreno de los Menos Um Studios, que coproduce, mezcla, masteriza y toca el órgano en un tema, tema donde encontramos la voz gospel de Sandra Tess acercándonos al género espiritual. El arte de la portada ha sido cosa de Zé Pereira, un retrato en blanco y negro de trazos angulosos que os dejo aquí debajo:

Billy Lobster

¿Qué podemos escuchar? Un blues desnudo y clásico. El señor Langosta nos dice que sus primeras influencias fueron John Lee Hooker, Muddy Waters y Howling Wolf. Nada que discutirle, están muy presentes en la grabación. Añadiría el regusto más rocanrolero de Bo Diddley, incluso un punto del Billy Gibbons más rockero o de grupos modernos con deje retro como Moreland & Arbuckle o Seasick Steve. Podrías pensar que siendo un solo músico la grabación sonaría vacía, pero con su voz y cargándole bien a la distorsión en su guitarra logra llenar la grabación, hacer mucho con poco es el espíritu primitivo de un bluesman, como el gran Son House. En la instrumental Tuna Fish esto es tan marcado que llega a sonar casi a un stoner-blues digno de Clutch.

El Este conoce al Oeste, la música no conoce fronteras. Un músico nacido en Moldavia, afincado en Portugal pero que ha absorbido como una esponja el sonido de gente llegada de Texas, Tennessee, Nashville, Nueva Orleans o Chicago nos presenta un disco para quemar rueda, para hacer kilómetros en la carretera, para comer cangrejos de río, para remojar el gaznate con bourbon o para cualquier otra actividad que se asocie tradicionalmente con los comportamientos de un bluesman.

Resumiendo, este Boogie On the Fly de Billy Lobster es cosa fina. Una escucha o dos se le dan de buena gana.

 

 

 

Siete comandos de Linux básicos para la configuración de redes

Vamos con un articulillo técnico que os había prometido. Recopilamos una serie de comandos de Linux básicos para el trabajo y la configuración de redes. Nada complicado en exceso pero herramientas básicas y funcionales que son de uso habitual para quien ande trasteando en temas de redes.

  1. Ping: Envía un mensaje ICMP incrustado en un paquete IP, comprobando la conectividad entre dos nodos. El comando se ejecuta hasta que pulsemos las teclas Ctrl + c. ping ejemplo
  2. Netstat:  Es una herramienta que nos muestra las conexiones activas de un equipo. Esta herramienta acepta muchos parámetros: -r muestra la tabla de enrutamiento, netstat -r-p nos saca el nombre del programa para cada socket,netstat -p -a todos los puertos a la escuchanetstat -a
  3. Tcpdump: Es una herramienta que permite monitorizar el tráfico de red, mostrando en tiempo real los paquetes transmitidos y recibidos.tcpdump
  4. Tracepath: Traza los nodos a través de los que viajan nuestros paquetes en su camino hacia el destino que le definamos. tracepath
  5. Route: Es una herramienta que nos permite manipular las tablas de enrutamiento del sistema.
    #añadir ruta a la tabla
    route add -net 8.8.8.8/24 gw 192.168.100.1
    #eliminar ruta de la tabla
    route del -net 8.8.8.8/24 gw 192.168.100.1
    #definir puerta de enlace por defecto
    route add default gw 192.168.100.1
    
  6. Dhclient: Si lo ejecutamos con -r y con permisos lo que hace es “liberar” nuestra IP y solicitar otra al servidor DHCP.dhclient
  7. Ifconfig: Configuración de interfaz. Nos permite configurar o desplegar diversos parámetros de las interfaces de red como la máscara o la dirección IP. Acepta varios parámetros, y si lo ejecutamos sin pasarle ninguno nos dará información sobre las distintas interfaces. Los más usados son:
    • up: Marca la interfaz como disponible. Por ejemplo ifconfig eth0 up.
    • down: Marca la interfaz como no disponible. Por ejemplo ifconfig eth0 down.
    • dirección ip: Si ponemos una ip esta le será asignada a esa interfaz, teniendo de esta forma una ip estática (para DHCP está Dhclient). Por ejemplo ifconfig eth0 192.168.100.2.
    • netmask: Para definir una máscara de red. Por ejemplo ifconfig eth0 netmask 255.255.255.0 .
    • broadcast: Nos permite definir una ip como dirección de difusión. Por ejemplo sudo ifconfig etho broadcast 172.16.25.98.
    • promisc: Pone la interfaz en modo promiscuo, de forma que captura todos los paquetes, vayan dirigidos a ella o no. Por ejemplo ifconfig eth0 promisc.

¿Quién fue Charles Oakley?

Hola, joven fan de la NBA. Tú que has llegado al deporte de la canasta en los tiempos del baloncesto casi sin contacto y de los triples a tutiplén, en la era de las estadísticas avanzadas y del juego cada vez más centrado en funciones que en posiciones, tú joven fan seguro que conoces a Charles Oakley como “el tío que el otro día intentó pegarle al dueño de los Knicks“.

Y luego te habrá sorprendido seguramente ver a muchos jugadores importantes de la NBA dándole apoyo, y a todo el Garden poniéndose de su parte y coreando su nombre ayer (10 de febrero) en el partido contra los Nuggets.

Te estarás preguntando “¿Quién es este Charles Oakley y por qué le quieren tanto?“. Pues aquí tienes a un treintañero que vivió el basket de hormigón de mediados de los 90 que te lo cuenta. Vamos con una retrospectiva de su carrera:

Oakley nació en Cleveland en 1963 y creció en esa ciudad, y creció bastante hasta ser un chaval que medía 2.03 y pesaba más de 110 kilos. Su talento para el baloncesto le valió una beca para estudiar en la universidad de Virginia Union, cuna de otro fiero currante y defensor como fue “BigBen Wallace, donde completó su ciclo de cuatro años con unos números destacados: 20 puntos y 14 rebotes de media durante sus cuatro años, firmando en su última temporada 24 puntos y 17 rebotes. Esto le valió una buena posición en el Draft de 1985, donde el equipo de su ciudad natal, los Cavaliers, le eligieron con el número 9 para luego mandarle a unos Bulls donde se convertiría en mano derecha de un joven Michael Jordan. Fue elegido en el mejor quinteto de Rookies de su año y promedió 12 puntos y 11 rebotes en las tres temporadas que pasó en Chicago.

En verano de 1988 los Bulls le envían a los Knicks a cambio del pivot Bill Cartwright. En la Gran Manzana se convertirá en parte de la columna vertebral del equipo donde el estrellato recae en el pivot Pat Ewing y el escolta John Starks: 10 temporadas se pasará allí, el grueso de su carrera.  Durante esa década firmará unos números de más de 10 puntos, 10 rebotes, 2 asistencias y un robo de balón. Pero lo más imporante en Oakley no eran sus números, sino su fiereza, su entrega en defensa, su trabajo: jugaba duro y eso le hacía ser un favorito de la grada. Con el 34 a su espalda formaba una pareja interior terrorífica junto al que fuera número 1 de su draft: Pat Ewing. Durante su estancia los Knicks eran uno de los equipos más competitivos del este: un fijo en los playoffs que llegaron a disputar la final de la NBA en 1994 contra los Rockets de Olajuwon, nada que ver con la chufla que llevan siendo en estos dosmiles. Oakley fue elegido para disputar el All-Star de 1994, temporada en la que además terminó seleccionado en el Mejor Quinteto Defensivo de la NBA, consiguiendo en 1998 otra nominación al segundo equipo. Tras esa temporada, con 34 años, los Knicks le mandarían a Toronto a cambio del “samuraiCamby.

Se mantendría activo hasta los 40, jugando tres años en Toronto y dándose un curioso tour nostálgico en sus tres últimas temporadas: primero un retorno a los Bulls, luego una reunión con Michael Jordan en los Wizards y finalmente un puñado de partidos en los Rockets que le alejaron del anillo una década antes para decir adiós al baloncesto.

Ahora la vieja leyenda de los Knicks ha sido expulsado de por vida del pabellón donde disfrutó de sus mayores tardes de gloria, donde bregó con tantos rivales. Ha dicho Dolan, el controvertido propietario de los Knicks, que Oakley “Tiene un problema con la ira“. ¿Es esto cierto? No podemos obviar que en sus años como jugador era un tipo muy duro, y que protagonizó varias peleas en la cancha:

Su carácter es responsable de sus luces y sus sombras. Lo que le hacía un jugador importante era esa agresividad, esa intensidad, esa dureza. Pero ese carácter le hacía perder el control y a veces cruzar la línea de la agresión. ¿Estuvo bien su agresión a Dolan? No. ¿Es inteligente la actitud de la directiva de los Knicks de dejar a una leyenda del equipo expulsada del pabellón de por vida? No. En los últimos años el equipo es un desastre, New York alardea de ser “la ciudad del baloncesto” pero llevan más de 40 años sin ganar un título. En los tiempos de Oakley al menos competían, pero ahora son un camelo, cada año un nuevo proyecto y cada año una nueva decepción. La gente añora los tiempos en los que los jugadores se dejaban la piel, y la directiva ahora carga contra uno de los clásicos de aquella época.

El culebrón Knicks sigue temporada tras temporada para desesperación de sus fans y regocijo de trolls.

 

El Bandcamp de la quincena: Master Boot Record – C:\>CHKDSK /F (05/02/2017)

¿He encontrado a la banda más geek del planeta? Puede que sí o puede que no. Esta entrega de El Bandcamp de la Quincena se sumerge en el mundo del llamado chiptune.

Y es que Master Boot Record dice ser, en su perfil de Bandcamp, un i486DX a 33MHz que ha tomado conciencia propia e intenta procesador con su sintetizador una fusión de heavy metal y música clásica sinfónica. Y aunque yo crea que en algún momento las máquinas alcanzarán la singularidad no creo que eso esté al alcance de un querido 80486, así que rascando un poco más por Google encontré alguna cosilla más: Según Metal Archives la mente tras este proyecto es un multinstrumentista italiano de 37 años llamado Vittorio D’Amore, pero que responde al seudónimo de Victor Love. El músico itálico ha estado vinculado a múltiples proyectos además de al que hoy nos ocupa: Dope Stars Inc, Hacking the Wave o My Sixth Shadow.

¿Por qué me llamó la atención este proyecto? Bueno, esto es un blog donde principalmente se ha hablado de tecnologías informáticas, música y baloncesto (y algo de cine y comics, ok) así que encontrarme a un grupo con tantas referencias a MS-DOS me obligaba a escucharlo. ¿Y qué nos encontramos? Pues lo esperable en la descripción: baterías de maquinillo y sintetizadores tipo banda sonora de Doom o Duke Nukem. Y a base de esos sintetizadores con regusto a videojuego de principios de los 90 busca emular agresivas bases rítmicas con estructuras metaleras para luego por encima de ellas desplegar el grueso melódico de la composición. Tal vez lo de sinfónico sea exagerado, pero sí se aprecian guiños evidentes e influencias del heavy metal clásico (King Diamond, Iron Maiden), del industrial (Skinny Puppy, KMFDM) o del black metal (el primer tema me tiene dejes muy a Emperor) en este c:\>CHKDSK /F. Y las referencias informáticas no se quedan sólo en el nombre de la banda y del disco, todos los temas están nombrados como si fueran ficheros de un sistema informático.

Master Boot Record

Pero si algo enamora es la presentación de la ediciones físicas. La edición en cassette te llevará más atrás en el tiempo, a los años de los juegos en cinta. Y la edición en vinilo imita un disquette de 5.25″, uno de aquellos viejos “discos de cartulina“.

También hay que destacar que el último tema, VIRTUAVERSE.GIF, es la banda sonora de un videojuego con el mismo nombre.

¿Chiptune? ¿Synthwave? Más allá de etiquetas gustará a los nostálgicos de las bandas sonoras de los videojuegos de 16 bits. Si eras fan del Doom (el videojuego, no el Doom metal) es muy posible que este trabajo te encandile. No vengas buscando un disco de metal o de rock, no hay guitarras, bajos ni baterías, todo está hecho con máquinas, es electrónica pura y dura pero está lejos del rollo txuntero. Master Boot Record es un proyecto tremendamente geek, una idea muy curiosa que se merece una buena escucha con los oídos y la mente muy abiertos.

 

Javascript: convertir una string en un número.

La función parseFloat() de Javascript nos permite recoger un dato de tipo string y convertirlo en un número con decimales, mientras que la función parseInt() nos devuelve un entero. ¿Así de simple? Sí, pero con matices. Vamos a profundizar un poco:

En el caso de parseInt() se trata de una función que recibe dos valores: el primero es obligatorio y es la cadena que queremos convertir a entero, el segundo sería un entero entre 2 y 36 para definir la base en que queremos que esté representado el entero devuelto, y es un parámetro opcional que por defecto tomará el valor 10 (base decimal). En implementaciones en navegadores antiguos (por ejemplo IE8) si el número empieza por 0 lo devolverá en base octal, así que ojo. Con los navegadores modernos ya no pasa, pero es importante recordarlo. Si le pasamos una cadena con espacios los obviará y devolverá el número (si hay varios números devolverá el primero que se encuentre). Si le pasamos una cadena con letras y números dependerá de la posición del número: si este está al inicio entonces devolverá el número hasta que encuentre un caracter extraño. Si empieza por letras devolverá un valor NaN. Ejemplos:

parseInt("10"); //devuelve 10
parseInt("10 años"); //devuelve 10
parseInt("10 54"); //devuelve 10
parseInt("10.50"); //devuelve 10
parseInt("casi 10"); //devuelve NaN
parseInt("10",16); //devuelve 16

Si quieres evitar problemas y que te devuelva un 0 cuando el resultado sea NaN ya te lo contamos en su día por aquí.

En el caso de parseFloat() la función sólo recibe la cadena que debe convertir a número decimal. Al igual que parseInt() si recibe una cadena con espacios los ignorará para devolver el número, y si recibe una cadena con caracteres actuará también igual que esa función: si este está al inicio entonces devolverá el número hasta que encuentre un caracter extraño. Si empieza por letras devolverá un valor NaN. En este caso ojo al formato numérico, sólo acepta el anglosajón. Es decir, el separador decimal tiene que ser un punto, interpretará la una coma como un caracter extraño.

parseFloat("10"); //devuelve 10
parseFloat("10.5 años"); //devuelve 10.5
parseFloat("10 54"); //devuelve 10
parseFloat("10.50"); //devuelve 10.50
parseFloat("casi 10.4"); //devuelve NaN
parseFloat("1.000,33"); //devuelve 1
parseFloat("10,50"); //devuelve 10

Entonces ¿qué hago si tengo una cadena donde los decimales vienen separados por comas y los miles marcados con puntos? Pues usando la función replace(). Vamos con un ejemplo:

var strEx = "1.000,33";
//primer paso: fuera puntos
strEx = strEx.replace(".","");
//cambiamos la coma por un punto
strEx = strEx.replace(",",".");
//listo
var numFinal = parseFloat(strEx);

Podría ser útil tener una función creada ya para realizar esta operación de conversión.

Y hasta aquí con esta entrada de Javascript básico.