Premios Simpson NBA 2018

Hasta que no acabe la temporada la NBA no repartirá sus premios oficiales, pero ya sabéis que este blog durante los playoff reparte los PREMIOS SIMPSON NBA 2018!!!! En este enlace podéis ver a los ganadores del año pasado… y aquí van los de esta temporada regular:

  • Premio anual Montgomery Burns por su sobresaliente labor en el campo de la Excelencia: El año pasado le veía un poco perdido tras abandonar Atlanta, donde había discurrido toda su carrera. Pero este año Al Horford se ha reconvertido en un jugador clave para los Celtics similar a lo que ha sido Draymond Green en los Warriors: defiende posiciones interiores y exteriores, es el Celtic que más tiros sale a defender, cierra a los rivales para permitir el rebote de sus compañeros, en ataque es capaz de generar juego y situaciones de ventaja como si de un base se tratara… Dejo de lado los números clásicos, para mi Horford ha sido el jugador de la campaña.

  • Premio Matlock: Va a cumplir 41 años en julio y nos volvemos a preguntar ¿Habrá visto esta temporada su último Maaaaatlock Manu Ginobili? Pues esperemos que no, porque a pesar de los años y la pérdida de físico que implican él sigue siendo un jugador productivo en ambos lados de la cancha: por su técnica, por su inteligencia táctica, por su intensidad. El propio Kerr se lo pidió en los Play off, queremos un año más de Manu.

  • Premio Hank Scorpio: Danny Ainge. Personalmente, creo que lo que le hizo a Isaiah Thomas estuvo mal viéndolo desde el punto de vista personal, pero desde el punto de vista del negocio le salió redondo: se hizo con una estrella de la liga como Irving sacrificando a un Thomas muy tocado físicamente y a un buen jugador como Crowder,  en el mercado de agentes libres también pescó bien con Hayward (aunque se lesionara en el primer partido, pero eso ya escapa del control de la dirección deportiva), apostó por Rozier y Smart para no hipotecarse con la renovación de Avery Bradley y le traspasó por un Morris que ha rendido bien, y finalmente la jugada de intercambiar puestos en el draft con los Sixers también parece que de momento ha sido muy inteligente (Tatum liderando en anotación al equipo en playoff vs un Fultz que se pasó más de medio año con problemas de espalda y que ha sembrado dudas).
  • Premio yo me llamo Ralph: En este vídeo hay un pase de Julius Randle que… en fin, judgad vosotros mismos.

  • Premio a la persona que menos se ha esforzado para llegar hasta aquí: John-Blair “J. B.” Bickerstaff se encontró con un equipo plagado de lesiones y un proyecto que se caía a pedazos tras la destitución del mediocre Fizdale. ¿Qué se le exigía al joven JB? Perder todo lo posible de cara al draft. Y así lo hizo, presión 0.
  • Premio Tiborowski: Repite el ganador del año pasado, Giannis Antetokounmpo ha firmado otro año para estar en las quinielas por el MVP y ha sido el jugador nacido fuera de los EEUU con mejor rendimiento, una bestia capaz de finalizar (el mejor anotador hoy por hoy cerca del aro), generar juego, rebotear y defender. Un jugador de impacto en ambos lados de la pista. Parece que sus Bucks no acaban de despegar ¿Acabará cambiando de aires o llegará algún entrenador (o entrenadora) que cambie el rumbo mediocre y desencantado que marcó la era Kidd para este joven equipo?

  • Premio Nelson Muntz: Todavía está fresca en mi retina la imagen de Marcus Smart echándose al cuello de JR Smith tras una falta flagrante muy fea del jugador de Cavs sobre Al Horford. Ramón trecet llama a Smart “el centurión de los Celtics”, siempre presto a defender a sus compañeros y con una actitud irreprochable en defensa. Es cierto que como finalizador en ataque es muy flojo pero ¿se acuerda alguien de sus bajos porcentajes cuando salta a intentar un tapón a dos manos? ¿cuando maltrata su propio cuerpo para defender a jugadores más altos y pesados en situaciones de pick&roll? ¿cuando persigue como un perro de presa a su rival? Smart no es un estilista, pero es un tío cuyo juego se basa en la entrega y la dureza, como lo fueron en el pasado gente como Dennis Rodman o un Tony Allen de quien sería justo sucesor cuando se retire.

  • Premio Bombardeo: Dos años seguidos el premio se lo ha llevado Brad Stevens, pero esta temporada dejamos Boston para irnos a Utah a reconocer el trabajo del coach Quin Snyder. Un alumno aventajado de leyendas como Mike Krzyzewski, a quien asistió en Duke, Ettore Messina, con quien trabajó en el CSKA, o Greg Popovich, de quien no fue asistente pero sí aprendió sus métodos durante su paso por la liga de desarrollo entrenando a los Austin Spurs. Este año el papel era complicado, tras la marcha de Hayward y Georghe Hill había quien decía que no tenían potencial para alcanzar los playoff en el Oeste… y al final no solo entraron sino que se cargaron a Oklahoma. Un equipo donde la estrella es un pivot especialista en defensa, el peso anotador recae sobre un novato y donde la manija ha caído en la mano de un Ricky Rubio que ha tenido que reconvertir su juego de forma exitosa.
  • Premio Homero: Cambiaba de aires Ricky Rubio en un fichaje no exento de polémica, era un jugador muy querido en Minneapolis por su trabajo comunitario, y en ese traslado a Salt Lake City veía un cambio de filosofía al jugar para un entrenador muy distinto a Thibodeau. Este cambio nos ha mostrado a un Ricky que ha firmado sus peores números en asistencias y robos, dos categorías donde acostumbraba a estar entre los cinco mejores de la liga, pero que a su vez ha logrado sus mejores dígitos en anotación y porcentaje de tiro. Y que la bajada numérica en asistencias y robos no resulte engañosa: ha estado mejor tanto a la hora de manejar el ritmo de los partidos y distribuir juego como en defensa, más agresivo y sólido (recordemos aquí lo que hablábamos en el artículo sobre el porcentaje de robos.)

  • Los Excitantes de Springfield: Hemos quitado este año el premio Qué Homer he Tenido a la canasta más afortunada y añadimos el quinteto que formará Los Excitantes de Springfield. Este año es evidente que empezamos con el ganador del Premio anual Montgomery Burns por su sobresaliente labor en el campo de la Excelencia: Al Horford, que sería el pivot e iría acompañado en mi quinteto por Giannis Antetokounmpo y Kevin Durant en los aleros y por el rejuvenecido Chris Paul y el salto de calidad de Victor Oladipo en las posiciones exteriores.
Anuncios

Linux: script para crear usuarios automáticamente con contraseñas aleatorias desde una lista dada en CSV.

Vamos con un script para automatizar tareas. Tenemos un CSV, le llamaremos user.csv, con los siguientes datos: Nombre, Primer Apellido y Usuario. Algo tal que así

Manuel,Garcia,ManuG1
Pedro,Rodriguez,PredroR2
Maria,Abalo,MariaA45
Josefa,Perez,JosefP21
Marta,Rios,MartaR91

La idea del script es la siguiente: recorre el fichero csv y crea a los usuarios con ese nombre y apellido y ese código de usuario. Asigna una contraseña generada de forma aleatoria y redirige la salida a un fichero para poder notificar a los usuarios creados su usuario y contraseña.

#!/bin/bash

OLDIFS=$IFS
IFS=","

while read firstname lastname userid 
do 
     PS=$(openssl rand -base64 12)   
     useradd -c "${firstname} ${lastname}" -p $PS -d /home/"${userid}" -s /bin/bash "${userid}"            
     echo "Usuario: ${userid} - Contraseña: $PS ....." >> resultado.txt 
done < user.csv

La opción de crear los usuarios con contraseña no es recomendable en todos los ámbitos por temas de seguridad, lo he hecho en este caso porque el ejemplo real en el que lo hice lo había requerido así el cliente, pero según la política y el contexto de seguridad no es algo recomendable en todos los casos porque podrían ser vistas por algún usuario no autorizado, así que aunque la generes así es mejor obligar a los usuarios a cambiarla. Para crearlo sin contraseña en la instrucción useradd quita el parámetro -p $PS, la línea de encima que genera el password (que ya sería inútil) y el $PS en la salida.

Obtener edad desde una fecha en Javascript

Hace un tiempo habíamos visto cómo obtener una edad desde una fecha de nacimiento en PostgreSQL, en MySQL y en MS SQL-Server. ¿Y en javascript? Vamos a ver tres funciones:

En la primera función el parámetro que recibiremos será una cadena con una fecha en formato YYYYMMDD (por ejemplo 20180211 para hoy):

function terIdade(cadeaData) {
    var hoxe = new Date();
    var nacemento = new Date(cadeaData);
    var idade = hoxe.getFullYear() - nacemento.getFullYear();
    var m = hoxe.getMonth() - nacemento.getMonth();
    if (m < 0 || (m === 0 && hoxe.getDate() < nacemento.getDate())) {
        idade--;
    }
    return idade;
}

Otra opción, pasando el mismo parámetro, es conseguir el resultado el milisengundos y operar con él para obtener la edad. Para eso dividiremos la diferencia entre fechas entre 1000*60*60*24*365.25:

function terIdade(cadeaData) {
    var nacemento = new Date(cadeaData);
    var data = new Date();
    var dif = data-birthdate;
    var idade = Math.floor(dif/31536000000);
    return idade;
}

La tercera opción sería no mandar a la función una cadena con la fecha, sino separados el año, el mes y el día (pasándoselos como enteros, no como cadenas). Y para el resto haríamos más o menos la misma operación que en el ejemplo.

function terIdade(ano,mes,dia) {
    var hoxe = new Date();   
    var idade = hoxe.getFullYear() - ano;
    var m = hoxe.getMonth() - mes;
    if (m < 0 || (m === 0 && hoxe.getDate() < dia)) {
        idade--;
    }
    return idade;
}

Libre Office 6 ya está disponible

Viene cargadito de cambios LibreOffice 6. Ayer, 31 de enero de 2018, The Document Foundation liberó la última versión de la conocida suite ofimática libre para sistemas operativos Windows, MacOS y Linux.

Si tenéis una manzanita necesitaréis al menos la versión 10.9 del sistema operativo instalada en vuestro equipo. En caso de usuarios de Windows ya no hay soporte en esta versión para Windows XP o para Vista, siendo Windows 7 SP1 el sistema operativo mínimo requerido. En el caso de Linux os puedo dar una lista de requisitos más detallada:

  • Kernel 2.6.18 o superior.
  • glibc2 versión 2.5 o superior.
  • gtk versión 2.10.4 o superior.
  • 256 MB de RAM como mínimo.
  • Al menos 1.55 gigas de espacio en disco duro.
  • Entorno de escritorio (GNOME o KDE).

Entre las múltiples novedades, aparte de la interfaz y de las mejoras en la integración de LibreOffice Online (la versión cloud de LibreOffice), encontramos nuevas plantillas para Impress, nuevas tipografías, mejoras en el corrector gramatical, nuevos estilos para tablas y formularios en Writer, la posibilidad de exportar directamente a ePUB los documentos o la posibilidad de firmarlos con OpenPGP.

Ya puedes descargarlo desde la página del proyecto.

Funciones lógicas en las hojas de cálculo de Google Drive

Hace unos años habláramos aquí de funciones lógicas en LibreOffice. En aquel entonces ya existía Google Drive pero no conocía a mucha gente que lo utilizara para sus labores ofimáticas. Hoy por hoy su uso se ha popularizado bastante, así que mi idea es repetir la misma entrada, pero con las funciones lógicas de esta hoja de cálculo que, más o menos, son similares (aunque en caso del Drive son menos que en LibreOffice, se quedan en 7). Lo primero que veremos, la lista de funciones:

  • FALSO: Una función que no evalúa ningún dato, sólo devuelve el valor lógico false.
  • VERDADERO: Una función que no evalúa ningún dato, sólo devuelve el valor lógico true.
  • NO: Recibe una expresión lógica, su sintaxis sería NO(La_Expresión_Lógica) y devuelve el valor contrario al que recibe. Es decir, si la expresión que recibe es true la función devolverá false y viceversa.
  • SI: Esta función requiere tres parámetros que son una prueba lógica, un valor a devolver si se cumple y un valor a devolver si no, aunque sólo es obligatoria la prueba lógica. Más abajo os explicaré como anidar varios. La sintaxis básica es SI(prueba lógica; valor si se cumple; valor si no).
  • SI.ERROR: Función que recibe dos parámetros. Devuelve el valor del primero si este no es erróneo, en caso de que lo sea devuelve el segundo. La sintaxis es SI.ERROR(valor_a_evaluar,valor_si_error)
  • O: La función recibe varios argumentos y devuelve true en caso de que alguno sea verdadero, en caso de todos sean falsos devuelve false. La sintaxis es O(expresión1,expresión2,expresión3)
  • Y: La función recibe un número variable de argumentos. En caso de que todos sean verdaderos devuelve true y caso de que alguno sea false devuelve false. La sintaxis es Y(expresión1,expresión2,expresión3)

Ahora vamos con un ejemplo. Primero tenemos estos datos con nombres de usuarios, su ciudad y su edad. En base a la edad y la ciudad calcularemos un importe que tienen que pagar usando algunas de estas funciones lógicas. Las condiciones son las siguientes: si son de Madrid y mayores de 28 entonces pagan 100. Si son de Vigo, de Basauri o tienen más de 50 años entonces pagan 50. El resto pagan 200.

Ejemplo Drive Hoja Calculo 1

La función sería la siguiente:

=SI(Y(C2=“Madrid”;B2>28);100;SI(O(C2=“Vigo”;C2=“Basauri”;B2>50);50;200))

Aunque una vez la escribáis os la traducirá a la nomenclartura inglesa de las funciones:

=IF(AND(C3=“Madrid”;B3>28);100;IF(OR(C3=“Vigo”;C3=“Basauri”;B3>50);50;200))

Y el resultado de esos datos sería el siguiente:

Ejemplo con los datos calculados

Utilizar sudo sin contraseña

Arracamos 2018 con más Linux ¿Se puede configurar el sistema para no tener que poner la contraseña cuando invoquemos un comando precedido de sudo? Sí, se puede. ¿Se debe? No, eso debilita la seguridad y no es nada recomendable. ¿Entonces no se puede? Sí, se puede pero no se debe.

La cosa es editar el fichero /etc/sudoers utilizando el siguiente comando:

sudo visudo

Una vez lo estemos editando buscamos la línea que pone root ALL=(ALL) ALL y debajo añadimos la siguiente, cambiando nuestro_usuario por el nombre de usuario que corresponda.

nuestro_usuario ALL=(ALL) NOPASSWD: ALL

También podemos aplicarlo a grupos, para ello debemos poner el símbolo % seguido del nombre del grupo:

%nuestro_grupo ALL=(ALL) NOPASSWD: ALL

Y otra opción es permitirlo sólo a un comando, o serie de comandos. En ese caso cambiamos el ALL que va después de NOPASSWD por el comando en cuestión. En el ejemplo veremos como hacerlo para /bin/kill:

nuestro_usuario ALL=(ALL) NOPASSWD: /bin/kill

Y una vez guardados los cambios el sistema nos permitirá usar sudo sin contraseña. Y vuelvo a repetir: NO SE DEBE HACER. Pero si queréis hacerlo, ahí tenéis el cómo.

Generar contraseñas seguras en Linux con APG

Ya vimos en el pasado cómo generar contraseñas en linux con mkpasswd, hoy veremos otro método. APG, abreviatura de Automatic Password Generator, viene instalado en Ubuntu y sus derivados. Es un programa pensado para generar contraseñas “memorizables“. Si lo ejecutas a secas te pedirá una “raíz“, una serie de datos con los que trabajar, y en base a eso creará una contraseña “memorizable“, y con “memorizable” quiero decir que junto a la contraseña te mostrará una transcripción fonética para que la recuerdes mejor.

APG Ejemplo
Ejemplo de APG

También puedes generar contraseñas totalmente aleatorias usando el comando apg a -1, que ofrece resultados de entre 8 y 10 caracteres.

Ejemplo APG 2
Ejemplo de APG con a -1