Acceder al último elemento de un array en Javascript

Algunos lenguajes nos permiten acceder al último elemento de un array usando el índice en negativo (es decir, poniendo la posición -1) pero no es el caso de Javascript. En ese caso ¿cómo accedo al último elemento de un array? Bueno, si se trata de un lenguaje donde podamos conocer la longitud del array como es Javascript (y la mayoría de lenguajes modernos realmente) basta con usar dicha longitud como índice. En el caso concreto de Javascript tendríamos que usar la propiedad length del array pero restándole una posición (porque nunca hay que olvidar que los arrays empieza en 0):

var ultimoElemento = myArray[miArray.length - 1];

Sponsored Post Learn from the experts: Create a successful blog with our brand new courseThe WordPress.com Blog

WordPress.com is excited to announce our newest offering: a course just for beginning bloggers where you’ll learn everything you need to know about blogging from the most trusted experts in the industry. We have helped millions of blogs get up and running, we know what works, and we want you to to know everything we know. This course provides all the fundamental skills and inspiration you need to get your blog started, an interactive community forum, and content updated annually.

Convertir texto en inglés a 1337 con Javascript

Si ayer veíamos cómo hacer con javascript una función que codifique/descodifique un simple cifrado ROT13 hoy vamos a con otro ejercicio de javascript simple: un conversor inglés-1337.

1337, leet, leet speak o 1337 5p34k es un tipo de escritura compuesta por caracteres alfanuméricos y relativamente popular en ambientes informáticos. No se trata de ningún tipo de cifrado de mensajes, simplemente se sustituyen las letras por número o por conjuntos de símbolos cuyo aspecto recuerde al de dicho caracter.

La función sería algo así: recibe un texto escrito en el alfabeto latino internacional y lo devuelve en 1337. Creamos un objeto con todos los valores a sustituir llamado leetAlph para que nos facilite el trabajo, luego solo recorremos la cadena que recibimos como si fuese un array (en esencia toda cadena es una array de caracteres) y vamos cambiando en cada posición la letra por el valor que le corresponda.

function textoALeet(texto) { 
  let leetAlph={a:'@', 
    b:'8', 
    c:'(', 
    d:'|)',
    e: '3',
    f:'ph', 
    g:'g',
    h:'#',
    i:'l',
    j:'_|',
    k:'|<', 
    l:'1', 
    m:"|'|'|", 
    n:'/\/', 
    o:'0', 
    p:'|D', 
    q:'(,)', 
    r:'|2', 
    s:'5', 
    t:'+', 
    u:'|_|', 
    v:'|/', 
    w:"|/|/'",
    x:'><', 
    y:'j', 
    z:'2'};

  texto = texto.toLowerCase();
  for (var i = 0; i < texto.length; i++) {
    if (leetAlph[texto[i]]) {
      text = texto.replace(texto[i], leetAlph[texto[i]]);
    }
  }
  return(texto);
}

Función para cifrado ROT13 con Javascript

ROT13 es un algoritmo para el cifrado de mensajes extremadamente, tan simple que no debería ser considerado nunca una opción válida para un cifrado seguro de nuestras comunicaciones. Basado en los cifrados que se decía que realizaba Julio César en la antigüedad, donde simplemente escribía intercambiando cada letra por otra situada N posiciones más adelante o atrás en el abecedario, ROT13 consiste en desplazar cada letra de nuestro mensaje 13 posiciones hacia delante.

En su día se popularizó en los foros de internet para introducir chistes y últimamente se ha utilizado para ocultar spoilers en foros sobre series.

¿Cómo implementamos esto en Javascript? Bueno, pues se me ha ocurrido que esta sería la solución más rápida, utilizando las funciones de javascript replace() para substituir caracteres dentro de una cadena en base a una expresión regular, charCodeAt() para obtener el código del caracter y la función fromCharCode() para crear una cadena con esos códigos que obtuvimos antes y a los que les aplicamos el desplazamiento. También usaremos toLowerCase() para convertir a minúscula y evitar conflictos con los códigos de las mayúsculas.

function str_rot13(mensaje){
    return mensaje.replace(/[a-zA-Z]/gi,function(s){
        return String.fromCharCode(s.charCodeAt(0)+(s.toLowerCase()<'n'?13:-13));
    });
}

Y ahí nos quedaría un traductor inglés-rot13/rot13-inglés. Si a la función le pasamos “hola” devolverá “ubyn” y si le pasamos “ubyn” devolverá “hola. La expresión regular de la función replace() solo evalúa los caracteres del alfabeto latino internacional por lo que si le pasamos una cadena con acentos o con eñes no daría errores pero no convertiría esos caracteres, igual que hará si la cadena tiene números o símbolos. Es decir, si le pasamos la cadena “coño” devolvería “pbñb“.

Como ya comenté en la introducción se trata de un cifrado más bien “de andar por casa” o para jugar a los detectives, no algo que se pueda utilizar en el campo de la ciberseguridad y la confidencialidad de los datos.

SQL-Server: Generar un número aleatorio entre dos valores

¿Cómo genero un número aleatorio en SQL-Server? Con la función RAND(), que nos devuelve un valor float pseudoaleatorio entre 0 y 1.

¿Y cómo puedo acotar esto entre dos valores? Pues redondeando el valor de multiplicar el resultado de la función RAND() por la diferencia entre el valor más alto y más bajo que queremos usar como límites y sumándole finalmente el valor más bajo. Que así puesto solo como texto parece más lioso de lo que es, la fórmula es muy sencilla y sería:

SELECT FLOOR(RAND()*(valorHasta-valorDesde)+valorDesde);

Siendo valorHasta el valor más alto y valorDesde el más bajo entre los que queremos obtener el valor aleatorio.

Imagina que queremos un valor aleatorio entre 100 y 200:

SELECT FLOOR(RAND()*(200-100)+100);

¿Cómo activar el Modo Lectura en Chrome?

Seguramente ya sabéis que los navegadores Safari o Firefox tienen un modo lectura o modo lector que permite leer el contenido de una web de forma más limpia y sin las constantes distracciones que pueden causar, por ejemplo, banners publicitarios invasivos o vídeos con reproducción automática. Chrome también tiene esta característica, aunque a Google no le interesa mostrarla mucho ya que la publicidad es su principal fuente de ingresos. ¿Cómo podemos activarlo en el popular navegador de la Gran G?

En la barra de direcciones escribimos chrome://flags y eso nos llevará al configurador avanzado de Chrome. En el buscador que os abrirá ponéis “reader” y entre los resultados buscáis Enable Reader Mode, que en principio debería estar marcado como Default. Lo cambiáis a Enabled y tras reiniciarse el navegador el modo de lectura estaría activado.

Una vez activado veréis que en la esquina derecha de la barra de direcciones aparece un icono similar a un libro. Pulsándolo se activará el modo Lector para esa página en concreto que os dejará una vista más limpia del texto, obviando molestos elementos multimedia.

¿Cómo hacer una búsqueda inversa de imágenes en Google?

Bueno, os dije que tenía unos cuántos artículos grandes en proyecto pero me está costando encontrar tiempo para escribir estos días. Así que vamos con otra entrada corta mientras preparo los gordos. ¿Cómo se hace una búsqueda inversa de imágenes en Google? Es decir, en lugar de introducir un término para buscar imágenes realacionados lo que introduciremos será una imagen y obtendremos un resultado basado en su contenido, como colores, figuras, texturas o los metadatos de la imagen.

Lo primero es acceder al buscador de imágenes de Google en la siguiente URL. Allí veremos una barra de búsqueda como la de abajo en la que tenemos un icono de una cámara fotográfica:

Si pulsamos sobre el icono de la cámara emergerá un menú donde podremos elegir si queremos subir una foto que esté alojada en nuestro equipo (ordenador o teléfono, pues funciona también desde la app de Chrome para Android) o si queremos buscar a través de la URL de un fichero de imagen que hayamos encontrado por internet.

Yo por ejemplo he probado para este ejemplo a buscar un trozo recortado de una ilustración del héroe celta Cú Chulainn realizada por el dibujante Jim Fitzpatrick. Este ha sido el resultado:

Podéis ver que ha puesto enlaces a la web del artista desde la que poder comprar una réplica completa de la ilustracion y que también sugiere como imágenes similares otras ilustraciones del mismo autor.

Excel: Fórmula para eliminar todos los caracteres no numéricos de una celda

Imagina que quieres eliminar todos los caracteres no numéricos de una celda en Excel. Con esta fórmula, que hace uso de la función TEXTJOIN() disponible en Office365 y Office ’19, podrías lograrlo. La fórmula genérica sería la siguiente

{=TEXTJOIN("",TRUE,IFERROR(MID(A1,ROW(INDIRECT("1:100")),1)+0,""))}

Vamos a explicarlo:

  • La variable A1 de la fórmula hace referencia al a cela que queréis limpiar, así que cuando la apliquéis tenéis que modificarla por la que corresponda en vuestra hoja de cálculo.
  • Esta fórmula convertirá en un array de caracteres los datos de vuestra celda (eso lo hará la función MID(), transformará la cadena en un array)
  • Los recorrerá (es lo que hace la función TEXTJOIN(), reconvertir el array de números en una cadena)
  • Quedándose solo con los números (eso es lo que hace la operación +0 de la fórmula, fuerza a Excel a convertir los valores de carácter a valores numéricos para esa operación, en caso de que sea un valor no numérico la función IFERROR() lo cambiará por un espacio vacío y en caso de que sea un valor numérico permanece con el mismo valor)

Configurar “impresión silenciosa” (silent print) en Chrome

El otro día veíamos la misma casuística con Firefox: trabajar con un app web que requiera imprimir algo de manera repetida y requieres cierta agilidad, por ejemplo tickets de compra o recibos. Si pulsamos imprimir el navegador abre una pantalla para seleccionar la impresora, haciéndonos perder unos segundos en tener que dar un nuevo click para confirmar la impresión. Vamos a ver cómo configurarlo ahora en Chrome, que será algo distinto.

Bueno, recordemos los pasos previos: tener la impresora deseada configurada como predeterminada y además haber definido las preferencias de impresión (cabecera, pie, márgenes, etc) a nuestro gusto. En el caso de Chrome me he encontrado con que la configuración que se usaba en versiones antiguas desde las flags ya no aparece, pero todavía tenemos la opción de abrir Chrome en modo kiosk. Esta es una modalidad que abre directamente una aplicación en ventana completa, que además es imposible de minimizar, pensado para puestos de trabajo como pueden ser puntos de venta. En este modo podemos usar la impresión directa. Añado que el modo kiosk está también disponible en Firefox:

  • Creamos un acceso directo a Chrome apuntando a la ruta donde esté instalado el ejecutable.
  • En las propiedades del acceso directo, en destino, añadimos después de la ruta al ejecutable la siguiente línea cambiando la URL del final por la que queremos usar: –kiosk –kiosk-printing “http://rutaalawebquequremosabrir
  • Esto abrirá Chrome en el modo de ventana completa y con la impresión silenciosa por defecto.

¿Cómo ver la cabecera de un correo con GMail?

Si tienes una cuenta de Gmail y sus su cliente web para ver los correos es posible que alguna vez te hayas preguntado si se puede ver la cabecera de los mismos. Sí, es posible.

Si entras en el correo del que quieres ver la cabecera comprobarás que a la derecha, al lado del botón de Responder hay un icono con tres puntos (en la imagen está ya marcado).

Al pulsarlo se desplegará un menú en el que debemos seleccionar la opción Mostrar Original. Al hacerlo nos llevará a una pantalla donde veremos todo el código del email, con su cabecera incluída:

Ahí podemos ya copiar la cabecera del correo para lo que la necesitemos.

Configurar “impresión silenciosa” (silent print) en Firefox

Imagina que trabajas con una aplicación web desde la que tienes que imprimir algo de manera repetida y requieres cierta agilidad, por ejemplo tickets de compra o recibos. Si pulsas imprimir el navegador abrirá una pantalla para seleccionar la impresora, haciéndote perder unos segundos en tener que dar un nuevo click para confirmar la impresión. ¿Se puede configurar el navegador para que esta impresión sea silenciosa? ¿Para que directamente mande el documento a la impresora predeterminada sin preguntar? Se puede. Veamos como hacerlo con Firefox.

Bueno, como pasos previos tendríamos que tener la impresora deseada configurada como predeterminada y además deberíamos ya haber definido las preferencias de impresión (cabecera, pie, márgenes, etc) a nuestro gusto. Suponiendo que eso esté listo pasamos a configurar Firefox por pasos.

  • Escribimos about:config en la barra del navegador. Nos llevará a una pantalla de confirmación donde aceptaremos sin miedo y esta nos redirigirá al buscador de características.
  • Buscamos la característica print.always_print_silent escribiéndolo tal cual. Ahora hay dos opciones:
  • Si existe hacemos doble click o click en el botón de alternar que aparecerá a la derecha y la dejamos con el valor true.
  • Si no existe ya nos saldrá una barra con la opción de añadir esta nueva característica pulsando el botón con el símbolo + situado a la derecha. Debemos definirla como boolean. Una vez definida le damos el valor true.

Tras eso reiniciamos el navegador y podemos comprobar que si mandamos una página a la impresora ya no nos pide seleccionar qué máquina queremos usar, la envía directamente a la predeterminada.