Crear y borrar una vista en SQLite

¿Qué es una vista?

Una vista es una consulta cuyo resultado se presenta como una tabla, puesto que tienen la misma estructura: filas y columnas. La diferencia es que sólo se almacena de ellas la definición y no los datos, que se extraen de las otras tablas de la base de datos. En SQLite la vistas son de solo lectura, de forma que no se pueden ejecutar instrucciones INSERT, DELETE o UPDATE sobre ellas para actualizar las tablas.

¿Cómo creo una vista en SQLite?

Para crear una vista en SQLite tenemos la instrucción CREATE VIEW. Tendremos que asignar un nombre a la vista que creamos y ejecutar una consulta que nos devuelva los datos que formarán nuestra vista. La sintaxis sería:

CREATE VIEW Vista_Nueva 
AS 
SELECT
	t1.Id,
        t1.Campo1,
        t2.Campo1 as Campo2
FROM
	tabla t1
INNER JOIN tabla2 t2 ON t1.IdEnTabla2 = t2.Id;

Vamos a poner como ejemplo que tenemos una tabla con variedades de quesos, otra con países y otra con tipos de leche. Y queremos una vista que nos muestre de qué país y con qué tipo de leche está hecho cada queso. Pues podríamos sacarlo con una consulta así:

CREATE VIEW v_QuesosDetallada 
AS 
SELECT
	q.Id,
        q.Nombre,
        p.Nombre as Pais,
        l.Descripcion as TipoLeche
FROM
	Quesos q
INNER JOIN paises p ON q.IdPais = p.Id
INNER JOIN leches l ON q.IdTipoLeche = l.Id;

¿Cómo borro una vista?

Para eliminar una vista en SQLite tenemos la instruccion DROP VIEW, que iría seguida del nombre de la tabla. Siguiendo con el ejemplo de arriba, para borrar la vista v_QuesosDetallada tendríamos que ejecutar la siguiente instrucción:

DROP VIEW v_QuesosDetallada;

De esta forma eliminaríamos la vista de nuestra base de datos.

Si intentamos crear una vista con un nombre que ya existe o si intentamos borrar una que no existe recibiremos un mensaje de error. Por tanto es interesante asegurarse utilizando IF NOT EXISTS a la hora de crear e IF EXISTS a la de borrar.

ClipIt: Gestor de portapapeles para Ubuntu

¿Qué es ClipIt?

ClipIt es un gestor de portapapeles para Ubuntu, desarrollado en C e implementado con GTK+. Como gestor avanzado de portapapeles, ClipIt nos permite almacenar varios textos en memoria para pegar más adelante.

¿Cómo lo instalo?

ClipIt puede ser instalado desde el centro de software de Ubuntu o utilizando la siguiente instrucción desde la consola de comandos:

sudo apt-get install clipit

¿Cómo lo utilizo?

Una vez instalado solo tienes que ejecutarlo y verás como aparece un indicador en la barra de notificaciones de tu sistema operativo como este:

Icono clipit
Se trata del icono en rojo.

Conforme vayas copiando distintas cosas al portapapeles estas se irán guardando en tu historial, y podrás acceder a ellas después ya sea mediante el atajo de teclado ctrl+alt+h o pulsando encima del icono de ClipIt antes descrito.

Además, ClipIt ofrece varias opciones de configuración como modificar o crear los atajos de teclado, definir el número de entradas que queremos que memorice, configurar que no almacene contraseñas… las puedes encontrar todas en el menú de configuración:

preferencias clipit


Exportar una máquina virtual en Virtual Box

Hoy vamos a ver cómo podemos exportar una máquina virtual desde Virtual Box.

Virtual Box incorpora un mecanismo para exportar máquinas virtuales a otros equipos, siendo incluso compatible con otros softwares de virtualización pues se basa en Open Virtualization Format (OVF), un formato abierto para la exportación de máquinas virtuales.

Si queremos iniciar una exportación pulsamos desde el administrador de Virtual Box el menú Archivo -> Exportar servicio virtualizado. Esto nos sacará una lista de las máquinas disponibles para exportar, donde seleccionaremos la que corresponda.

Exportando máquinas de Virtual Box

Tras eso nos preguntará el nombre del fichero que almacenará la exportación. Aquí podremos elegir dos extensiones: .ova u .ovf. Usando la primera todo se guardará en un único fichero comprimido. Con la segunda la exportación se distribuirá en varios ficheros.

Eligiendo formato para exportar

Finalmente tendremos una ventana donde añadir algunos detalles para la exportación. Tras eso basta pulsar el botón Exportar.

Paso final Export VBox

Orden de operaciones aritméticas (PEMDAS) y su aplicación en lenguajes de programación.

Todo un clásico en las redes sociales es que alguien comparta la operación 5+4/3-1*2 y que se monte un gallinero tremendo en los comentarios con distintas soluciones. Esto se debe a que mucha gente no tiene claro cómo va la jerarquía de las operaciones y el orden de evaluación de las mismas.

Si hablamos de operaciones básicas, y de la mayoría de lenguajes de programación (Javascript, PHP, Python, Ruby, C,Visual Basic, Java…), nos regiremos por el orden de operaciones conocido por el acrónimo inglés PEMDAS, que en castellano podríamos traducir como PAPOMUDAS (PAréntesis, POtencias, MUltiplicación, División, Adición, Sustracción). En base a esto el orden de operaciones en lenguajes de programación como Python, PHP, Ruby o Javascript sería:

  1. Paréntesis
  2. Potencias y radicales
  3. Multiplicación, división, división entera y módulo.
  4. Suma y resta.

En este enlace puedes comprobar los resultados de distintas operaciones realizados en distintos lenguajes de programación. Puedes copiar los siguientes ejemplos para comprobar que el resultado es el mismo.

Aquí el código en Javascript:

var resultado = 5+4/3-1*2;
console.log(resultado);

Aquí el código en Python:

resultado = 5+4/3-1*2
print(resultado)

Aquí en Java:

public class Test {
  public static void main(String[] args){
    System.out.println(5.0+4.0/3.0-1.0*2.0);
  }
}

Y aquí en C:

void main(void) {
   double resultado;
   resultado = 5.0+4.0/3.0-1.0*2.0;
   printf("%f",resultado);
}

Como puedes comprobar, en todos el resultado es 4.333333 ya que todos usan el mismo orden para las operaciones.

El Bandcamp de la Quincena: Mandibulla – Bleeding Black

Os debía una entrada musical, pero el finde pasado rockeando en Porto con Wucan, Black Mirrors y The Vintage Caravan influyó en que esta crítica os llegue con retraso.

Pero tranquilos, que aunque pasasen unos días el primer disco de estos brasileños Mandibulla está todavía calentito, salió el 31 de octubre listo para la noche de Halloween. ¿Qué nos ofrecen en este Bleeding Black? Pues un trabajo que hace honor a su título, un disco que combina stoner con doom metal un poco en la misma onda que sus compatriotas de Black Witch pero con un aire menos retro, más metalero y sin tanto elemento de occult rock.

Mandibulla

Los riffs de Felipe Knoller que, según leo en los créditos, se ha encargado de guitarras y bajos para la grabación rugen y chisporrotean cargados de fuzz construyendo sólidos muros de vez en cuando salpicados con algunos punteos de influencia más rockera de la mano de Ricardo Siqueiro. Los cimientos los pone la contundente batería de Helder Tiso, músico polifacético que también se encarga de los pianos y arreglos y una apisonadora golpeando nuestras cabezas y llenando cualquier atisbo de silencio con sus platos cuando coge las baquetas, creando así la atmósfera adecuada para que Cristiano Maffra añada el peso melódico a los tema con su voz.

La tipografía del logo de la banda podría llevarnos a pensar que se trata de una mera imitación de los Pentagram, y aunque el magisterio de estos y el de Black Sabbath es evidente (algo por otro lado habitual en esto del stoner/doom) se aprecian otras influencias, como el hard rock oscuro de The Cult en la voz y determinados pasajes de A Dream Within a Dream o los riffs de influencia Black Label Society en Underwater Grave. También hay reminiscencias a los trabajos más sludge metal de Corrosion of Conformity y los Melvins, ¿puede ser por la mezcla de Jack Endino? El que fuera productor de Mudhoney, Nirvana y Soundgarden parece haberle cogido el gusto a Brasil, y tras trabajar con Titãs y Nando Rei ha mezclado el disco de estos paulistas.

Mandibulla es una nueva promesa del metal brasileñoa la que habrá que seguir la pista.

 

 

Cómo saber si el valor de una variable es numérico en Python

A la hora de trabajar con datos numéricos en Python nos encontramos con un clásico ¿Cómo se que el valor que estoy recibiendo es un número? Casi todos los lenguages de programación tienen una función que nos permite evaluar si el valor almacenado en una variable es numérico, para el caso de Python vamos a ver dos opciones.

Python por defecto incluye una librería llamada math en todas sus versiones, pensada para realizar operaciones sobre datos escalares y para operaciones de trigonometría. Por otra parte existe una librería externa muy popular llamada numpy, pensada para el trabajo algebraico con matrices. Según el tipo de operaciones que vayas a realizar en tu código deberás importar una u otra.

En cualquier caso, ambas liberías tienen una función para chequear si una variable es numérica: la función isnan(), que devolverá true si el valor que está evaluando es nan (Not a Number). En el caso de usar la importada desde la librería math recibirá una sola variable y devolverá un valor booleano, en caso de usar la de numpy podrá recibir un array y evaluará todos los valores almacenados dentro del mismo, devolviendo según corresponda un valor booleano o un array de valores booleanos. Basta con importarla al principio de vuestro código y comprobarlo:

Con math en este caso devolvería true:

import math
x=float('cadena')
math.isnan(x)

Con numpy podemos trabajar con arrays:

import numpy as np
np.isnan([np.log(-1.),1.,np.log(0)])

Esto devolvería un array con un true para el primer valor evaluado y un false para los dos siguientes.

Calcula una edad dada la fecha de nacimiento con Python

Mucha gente parece tener interés en esta explicación en concreto, que ya hemos visto con Javascript y con varios sistemas de bases de datos SQL. Vamos ahora con Python ¿Cómo calculamos la edad desde una fecha?

from datetime import date #importamos date
#obtenemos la fecha del sistema
hoy = date.today()
#supongamos que tenemos la fecha de
#nacimiento guardada en la variable
#fnac (no es publicidad xDD)
edad = hoy.year - fnac.year - ((hoy.month, hoy.day) < (fnac.month, fnac.day))

Al igual que hacíamos en el caso de SQLite primero restamos los años y luego restamos la comparación entre mes y día actual y mes y día de nacimiento. Si la combianción mes/día de hoy es anterior a la combinación mes/día de nacimiento la comparación devuelve 1, si no devuelve 0.

Calcular la edad a partir de una fecha en SQLite.

Otra entrada sobre SQLite, vendrán algunas más ya que he tenido que estudiar un poco sobre ello para utilizarlo en una aplicación. Y ya que nos ponemos con consultas y truquitos vamos con el siguiente: ¿Cómo calculamos la edad a partir de una fecha? Ya lo vimos en el pasado con SQL-Server, con MySQL y con PostgreSQL, incluso fuera del tema de las bases de datos también lo hicimos con Javascript.

Supongamos que tenemos una base de datos Usuarios con un campo FechaNacimiento donde almacenamos, como te puedes imaginar, una fecha. Para calcular la edad a día de hoy podemos hacer dos cosas:

La primera es el clásico «Restamos un año a otro y luego si el día del cumpleaños todavía no llegó restamos uno año más«, que podríamos expresar así en una consulta:

SELECT (strftime('%Y', 'now') - strftime('%Y', FechaNacimiento )) - (strftime('%m-%d', 'now') < strftime('%m-%d', FechaNacimiento )) from Usuarios;

Como ves, en primer lugar extraemos los años de las dos fechas y los restamos. En la segunda resta añadimos la compración entre mes y día actual y mes y día de la fecha, dicha evaluación devolverá 1 si es anterior y 0 si no lo es, de esta forma resta 1 en ese caso.

Otra solución, convertir ambas fechas a un formato numérico y restarlas, y después convertir a un formato de número entero:

Select cast(strftime('%Y.%m%d', 'now') - strftime('%Y.%m%d', FechaNacimiento ) as int) from Usuarios;

Utilizar SQLiteStudio en Ubuntu

SQLiteStudio es un software libre multiplataforma que nos proporciona una interfaz gráfica para trabajar con bases de datos SQLite. Existen versiones para Linux, Windows y MacOS.

En el siguiente enlace puedes entrar a la página de descargas de SQLiteStudio, donde hay dos opciones: un instalador y un paquete .tar.xz con una versión portable del programa.

Durante las pruebas he tenido problemas con la versión con instalador en una máquina con Xunbutu, pero la versión portable ha funcionado sin problemas. Basta con descargarla y desempaquetarla:

SQLite Studio Descarga

Descomprimir SQLitestudio

Una vez desempaquetado buscamos el programa y lo ejecutamos. En la primera ejecución nos pedirá que definamos el idioma:

Ejecutable sqlitestudio

Y listo, ya está funcionando SQLiteStudio en tu equipo:

SQLite Xubuntu

Cálculo del logaritmo y logaritmo neperiano en Javascript.

Ayer me mandaban este chiste por Whatsapp:

Y como soy así de tocahuevos, que hasta llevo un reloj calculadora Casio, les mandé de vuelta el resultado del logaritmo neperiano de 1437. Y sí, estoy escribiendo esto para cuando me lo vuelvan a mandar, para contestar con este enlace, que me vale tanto para la sección de programación como para la de ciencia.

El elcálculo de logaritmos es la operación inversa a la exponenciación de la base del logaritmo. El desarrollo de calculadoras y ordenadores ha hecho que las tablas de logaritmos, que se usaban hace años para simplificar operaciones complejas, hayan perdido mucha importancia para los estudiantes de matemáticas en la actualidad. Este blog nos da una entrada muy intersante sobre el uso de los logaritmos.

La clase Math de Javascript tiene varias funciones para calcular un logaritmo. Para el logaritmo natural (logaritmo cuya base es el número e, un número irracional cuyo valor aproximado es 2,7182818284590452353602874713527):

//vamos a calcular el logaritmo de 5
var logaritmo = Math.log(5);

¿Y para obtener el logaritmo en base 10?

//vamos a calcular el logaritmo de 5
//pero con base decimal
var logaritmo = Math.log10(5);

¿Y para obtener el logaritmo en base 2?

//vamos a calcular el logaritmo de 5
//pero con base binaria
var logaritmo = Math.log2(5);

¿Y el logaritmo neperiano? Bueno, en lenguaje coloquial suele llamarse logaritmo neperiano al logaritmo natural, pero si nos ponemos precisos son dos conceptos disintos. El logaritmo neperiano, nombrado en honor del matemático John Napier, se calcularía con la fórmula -107*ln(x/-107):

//vamos a calcular el logaritmo neperiano
//de 5.
var logaritmo = Math.pow(-10,7)*Mat.log(5/Math.pow(-10,7))

Como puedes ver los logaritmos neperianos son esencialmente logaritmos naturales con la coma desplazada siete posiciones hacia la derecha y el signo invertido.