¿Cómo salir de Vim en Linux?

Es un meme clásico de las webs de chiste de programadores, pero ¿cómo se sale del editor Vim? En serio, todo el que lo ha usado ha acabado por teclear alguna vez «How to exit Vim».

Pulsando la tecla Esc Vim entra en modo línea de comandos. Ahí puedes escribir:

  • :q para salir (abreviatura de :quit).
  • :q! para salir sin guardar (abreviatura de :quit!).
  • :wq para escribir y salir.
  • :wq! para escribir y salir incluso si el fichero es del tipo solo lecutra.
  • :qa para salir de todo (abreviatura de :quitall)

Crear una gráfica de dispersión con LibreOffice Calc

Toda buena hoja de cálculo tiene una utilidad de creación de gráficas y LibreOffice no va a ser menos. La suite ofimática libre nos permite crear, con su programa Calc, gráficas para dar color y hacer más visuales nuestras representaciones de datos.

Dispersión datos

Lo primero es meter los datos en las dos columnas. Para nuestro ejemplo vamos a hacer una gráfica que muestra la relación entre la distancia recorrida y el tiempo invertido, que mostrará la evolución de la velocidad. La columna X muestra el tiempo invertido y la columna Y la distancia recorrida en dicho tiempo. En dicha gráfica podremos comprobar como el cansancio va haciendo que en cada intervalo se vaya recorriendo menos distancia.

Tras insertar los datos lo siguiente es irnos al menú Añadir->Objeto->Gráfica y en los distintos modelos que podemos elegir escogemos Dispersión:

Asistente gráfica 1

Tras eso escogemos el rango de datos seleccionando las dos columnas donde hemos metido los datos. En el siguiente paso, donde hay que confirmar las series, ya nos debería traer los valores por defecto de ambas columnas. En caso contrario tendrías que seleccionarlas también.

Asistente Gráfica 2

Finalmente le damos un título a la tabla y también a ambos ejes de la misma, para que sea evidente su función.

Asistente de la gráfica 4

Y tras completar todos los pasos ya tenemos nuestra gráfica de dispersión lista y podemos visualizarla.

Gráfica evolución

fping: Una herramienta de ping «vitaminado» para Linux.

Todos conocemos ping, una utilidad diagnóstica que comprueba el estado de la comunicación del host local con uno o varios equipos remotos de una red IP por medio del envío de paquetes ICMP de solicitud (ICMP Echo Request) y de respuesta (ICMP Echo Reply). Hoy vamos a ver cómo funciona fping, un programa que nos permite ampliar las posibilidades que tiene el ping standar de Linux.

Para instalarlo, en un sistema de la familia Ubuntu/Debian, basta con teclear lo siguiente:

sudo apt-get install fping

¿Qué cosillas nos aporta fping? Veamos:

  • Lanzar un ping a varias IP a la vez: Basta con pasar como parámetro las direcciones IP separadas por un espacio y fping lanzará un ping a cada uno y nos responderá con el estado de cada IP.
  • Lanzar un ping a un rango de IP: Similar a lo anterior, pero en lugar de definir manualmente una lista de IP le damos dos valores para que compruebe todo entre ellos. Para hacerlo la sintaxis es fping -s -g y las dos direcciones IP separadas por un espacio. fping a rango
  • Lanzar un ping a toda la red: También podemos definir una máscara de red para que fping envíe ping a todos los equipos de la misma. En este caso la sintaxis fping -g seguido de la red que queremos revisar (en mi caso sería fping -g 192.168.1.0/24) dará una vuelta a vuestra red mandando pings a todas las direcciones.
    fping a toda la red
  • Carga direcciones desde un fichero: Supongamos que tenemos un fichero que se llama ListaIP.txt, pues con fping podemos cargar esa lista y recorrerla. Bastaría con hacer un fping < ListaIP.txt
  • Redirigir la salida a un fichero: Esto realmente no es una característica de fping sino que es algo general de Linux. Ya sabes que añadiendo el carácter > seguido de un nombre la salida de un comando se guarda en ese fichero. Por ejemplo fping -g -r 1 192.168.1.0/24 > red.txt crearía un fichero con ese nombre con el resultado de ese comando.

En este enlace puedes ver la documentación para exprimir a fondo todas las opciones de fping.

Reciclar un móvil viejo en una cámara de seguridad wifi.

En fin, parece que el primer artículo sobre cómo dar una segunda oportunidad a un viejo móvil gustó. Si vimos la posibilidad de convertirlo en una consola portátil hoy vamos con algo más práctico: una cámara wifi.

Si quieres una cámara de seguridad es posible que esta no sea la mejor opción y que debas invertir en opciones más profesionales, pero ¿como monitor para bebés? ¿o para monitorizar a una persona enferma o que requiere cuidados y atención constantes? ¿o para ver cómo está nuestra mascota? Son muchos usos prácticos que podemos dar a una cámara wifi.

Lo primero será hacernos con un soporte para colocar nuestro teléfono, puede parecer una chorrada pero es fundamental que esté bien orientada la cámara. Podemos comprar un trípode o un soporte o, si nos animamos, fabricar uno. Aquí os dejo unas ideas para la última opción. También nos hará falta un cargador, ya que usarlo como cámara consume muchos recursos así que lo mejor es que esté permanentemente enchufado.

Alfred

Y ahora lo que necesitamos es instalar un app de cámara de seguridad en nuestro teléfono. Hay varias opciones, yo he decidido optar por la Cámara de Vigilancia Wifi Alfred, una aplicación que está disponible para Android e iOS y que ha sido desarrollada por Alfred Labs Inc. ¿Por qué? Por cuatro motivos:

  1. Tiene una versión gratuita bastante completa.
  2. Es sencillo de configurar.
  3. Es compatible con teléfonos bastante antiguos.
  4. Tiene las mejores valoraciones en el Play-Store.

Para utilizarlo necesitaremos, como es lógico, dos dispositivos: nuestro móvil viejo, que será el que haga de cámara, y un dispositivo (o varios) que usaremos como visor, ya sea otro móvil, un tablet o a través del navegador de nuestro PC usando su app de visor web (por cierto, si tenéis un bloqueador de publicidad no os dejará desde el navegador, tenéis que desactivarlo). También hará falta una cuenta de Google, que nos permitirá sincronizar ambos dispositivos.

Alfred Visor Web

Cuando instalemos el dispositivo en nuestro teléfono nos pedirá que lo configuremos como visor o como cámara. Elegimos la opción que corresponda, nos conectamos con la cuenta de Google y le damos permisos ya que, como es lógico, necesitará tener acceso a la cámara para poder grabar.

Desde el visor tendremos múltiples opciones: rotar la imagen, realizar una captura de pantalla, grabar un fragmento de vídeo, activar el flash… en general opciones bastante estándar en este tipo de aplicaciones. La más revolucionaria es la de detección de movimiento, que hay que activar tanto en el dispositivo como en el visor y que saca una foto cuando detecta algo moviéndose; aunque también es muy útil la función de ahorro de energía, que mantiene la pantalla del móvil apagada para reducir el consumo de batería.

¿Merece la pena? Bueno, el precio de una cámara de estas, de gama baja/económica, anda por los 50 o 60 euros. Así que si necesitas una y tienes un viejo teléfono criando polvo en un cajón puede ser una muy buena idea.

 

Distintas formas de invertir una cadena de texto en Linux.

Vamos a hablar un poco más sobre programar scripts en Linux y veamos cómo podemos invertir una cadena con distintos métodos:

Empezamos con lo más sencillo, usar la función rev:

echo holiii | rev

Usando el comando sed dos veces, junto con tac, también podemos hacerlo:

echo holiii | sed 's/./&\n/g' | tac | sed -e :a -e 'N;s/\n//g;ta'

Ya os podéis imaginar que si podemos hacerlo con sed es que también podemos hacerlo con awk, en este caso con la función substr() y un bucle for con el que recorreremos la cadena de fin a principio pintando cada letra:

echo holiii | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}'

Y no podría faltar el tradicional script de shell. El principio es el mismo que con awk: recorrer la cadena del final hacia el inicio pintando cada elemento

#!/bin/bash
a="holiii"
len=`echo ${#a}`
while [ $len -ne 0 ]
do
        b=$b`echo $a | cut -c $len`
        ((len--))
done
echo $b

Instalar Visual Studio Code en Ubuntu

La versión ligera del popular editor de código de Microsoft hace tiempo que está disponible para diversos sabores de Linux. En principio bastaría con descargar el fichero .deb de la última versión e instalarlo desde el gestor de paquetes, lo que se encargaría ya de instalar el software, las dependencias y añadiría los repositorios. Pero hay gente que ha experimentado problemas en algunas versiones de Ubuntu para hacerlo de la forma simple. ¿Solución? Descargar el paquete .deb de la web e instalar desde línea de comandos.

#El nombre del fichero
#variará según la versión
#que descarguemos
sudo dpkg -i nombredelfichero.deb

#Instalamos dependencias
sudo apt-get install -f 

#Este código agrega
#los repositorios
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

Introducción al álgebra booleana: ¿Qué es?

El álgebra booleana es una estructura algebraica que esquematiza las operaciones lógicas, tomando su nombre de George Boole quien fue el primero en definirla como parte de un sistema lógico en 1847, en un intento de utilizar las técnicas algebraicas para tratar expresiones de la lógica proposicional.

El Álgebra de Boole es un conjunto “A”, provisto de dos operaciones binarias AND, OR, una operación unaria NOT y dos elementos 0 (Falso) y 1 (Verdadero), de forma que para todos los elementos a, b y c del conjunto A, se cumplen los siguientes axiomas:

Asociatividad:
a OR ( b OR c ) = ( a OR b ) OR c
a AND ( b AND c ) = ( a AND b ) AND c

Conmutatividad:
a OR b = b OR a
a AND b = b AND a

Absorción:
a OR (a AND b)=a
a AND (a OR b)=a

Distribuitividad:
a OR (b AND c)=(a OR b) AND (a OR c)
a AND (b OR c)=(a AND b) OR (a AND c)

Complementación:
a OR NOT a = 1
a AND NOT a = 0

Como en una computadora digital hay sólo dos posibilidades, usar el 0 o bien el 1 para representar el objeto más pequeño e indivisible, el álgebra booleana se convierte en una de las herramientas fundamentales de la computación y de la electrónica. Todos los datos se reducen finalmente a combinaciones de bits y los circuitos electrónicos permiten que estos recursos de almacenamiento se comuniquen entre sí. Un bit en una parte de un circuito se transmite a otra como voltaje. Por ello se necesitan dos niveles de voltaje: un voltaje alto que comunique el 1 y un voltaje bajo que comunique el 0. Fue Claude Shannon, en 1938, el primero en darle esta utilidad para simplificar circuitos conmutadores.

Operación AND.
La operación AND es exactamente igual a una multiplicación normal por lo cual sus reglas son las siguientes:

  1. Solamente si todas las entradas son 1 la salida será 1.
  2. Cuando una o más entradas sean 0 la salida será 0.

En el caso de una compuerta AND en un circuito electrónico esta opera en tal forma que su salida es ALTA sólo cuando todas sus entradas son ALTAS. En todos los otros casos la salida de la compuerta AND es BAJA.

Operación OR:
La operación OR es básicamente una suma y sus reglas son las siguientes:

  1. Produce un resultado de 1 cuando cualquiera de las variables de entrada es 1.
  2. Produce un resultado de 0 solo cuando todas las variables de entrada son 0.

En el caso de una compuerta OR opera en tal forma que su salida es ALTA si la entrada A, B o ambas están en un nivel lógico 1. La salida de la compuerta OR será BAJA si todas sus entradas están en el nivel lógico 0.

Operación NOT:
La operación NOT también se conoce como inversión o complementación, básicamente nos devuelve el valor complementario al que tengamos. Es decir, si A es igual a 0 entonces NOT A sería uno 1.

En el caso de un circuito electrónico NOT este siempre tiene una sola entrada y su nivel lógico de salida es contrario al nivel lógico de esta entrada.

Evitar el mensaje de error «No está permitido guardar cambios» cuando intenta modificar una tabla en SQL Server

A veces al realizar ciertas modificaciones sobre una tabla, como cambiar el tipo de datos o la precisión de una columna, el orden de la mismas o al agregar una nueva recibimos un mensaje de error de SQL-Server que nos dice que «No está permitido guardar cambios porque no se permiten cambios que obliguen a crear tablas de nuevo«. ¿Hay alguna forma de modificar esto y permitir el cambio? Sí, hay dos opciones.

La primera es no utilizar la interfaz gráfica para hacer la modificación sino usar instrucciones SQL. Si por ejemplo queremos cambiar la precisión y permitir valores nulos en una columna de la tabla podríamos hacerlo así:

alter table Clientes alter column ObservacionesCliente nvarchar(500) NULL

Otra solución es desactivar la opción de Impedir guardar cambios que requieren volver a crear tablas en el entorno gráfico. En el menú Herramientas, hacemos click en Opciones y, dentro de ese menú, vamos al submenú Diseñadores. Allí desactivamos la opción Impedir guardar cambios que requieren volver a crear tablas y, a continuación, hacemos click en Aceptar para guardar los datos. Os dejo una captura de dicho menú:

SQL-Server Opciones Diseñadores

Calculadora de Ohm en Javascript

La ley de Ohm fue postulada por el físico y matemático Georg Simon Ohm, es una ley básica de los circuitos eléctricos. Nos dice que la diferencia de potencial V que aplicamos entre los extremos de un conductor es proporcional a la intensidad de la corriente I que circula por él. Introduce la noción de resistencia eléctrica R: el factor de proporcionalidad que aparece en la relación entre diferencia potencial e intensidad.

En este ejemplo vamos a hacer una función de Javascript que puede recibir tres parámetros y, según el que reciba vacío, devolverá un resultado u otro valiéndose de la fórmula general de la ley de Ohm, que resumimos en la fórmula V=R*I.

function calculadoraOhm(V,R,I){
  //si la diferencia potencial va vacía
  //en ese caso calculamos el voltaje.
  if(V==""){
    return parseFloat(R)*parseFloat(I);
  }
  //si la resistencia va vacía
  //en ese caso calculamos el voltaje.
  if(R==""){
    return parseFloat(V)/parseFloat(I);
  }
  //si la intensidad va vacía
  //es la que calculamos.
  if(I==""){
    return parseFloat(V)/parseFloat(R);
  }
  //si no va nada vacío devuelve una cadena vacía.
  return "";
}

Cómo hacer un Hello World! en distintos lenguajes de programación.

El Hello World es un ejercicio básico de programación. Casi en cualquier lenguaje de programación que estudies empezarás en la primera lección programando uno. Aquí te dejo diversos ejemplos en distintos lenguajes
, lo que además te permitirá ver algunas de las pequeñas diferencias que hay entre ellos.

ASP:

Response.Write "Hello World!" 

Script de Bash:

#!/bin/bash
echo "Hello, World!" 

C:

#include 
main(){
  printf ("Hello World!\n");
}

C++:

#include 
using namespace std;
void main(){
  cout << "Hello World!" << endl;
}

C#:

using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");            
        }
    }
}

Java:

class hellWorldJava{
  public static void main(String args[]){
    System.out.println("Hello World!");
  }
}

Javascript:

window.alert( 'Hello, world!' );

Objective C:

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

Perl:

#!/usr/bin/perl
print “Hello World.\n”;

PHP:

echo "Hello World!";

Script de Powershell:

$strString = "Hello World"
write-host $strString

Python:

print "Hello, World!"

R:

print("Hello World!", quote = FALSE)

Ruby:

puts 'Hello world'