Guarda tus proyectos de git en iCloud, la nube de Apple

Si dispones de un dispositivo de Apple; iPhone, iPad o un Mac, o simplemente ya dispones de una cuenta en iCloud, tienes de forma gratuita almacenamiento en la nube con 5 GB. Por solo 0,99 € al mes, tu espacio de almacenamiento sube hasta los 50 GB.

iCloud te permite almacenar toda aquella información que requiere una copia de seguridad o cualquier otro tipo de datos que necesites tener sincronizado con tus diferentes dispositivos.

Si no dispones de una cuenta en iCloud, la puedes crear facilmente y de forma gratuita desde el siguiente enlace, aqui. Una vez en la pagina de Apple, debes pulsar en “Crear tu ID de Apple“.

iCloud es extremadamente util para recuperar datos, en caso de perdida o mal funcionamiento de alguno de nuestros dispositivos. Siempre tendremos la seguridad de que todos nuestros valiosos datos se encuentran a salvo.

Esta útil herramienta nos permite sincronizar nuestros proyectos en git hacia una carpeta en iCloud. De esta forma sencilla, utilizando el comando “git remote add origin (Ruta carpeta)“, vinculamos nuestro proyecto a dicha carpeta.

En Mac, para saber la ruta de la carpeta ubicada en “iCloud Drive“, abre una terminal y arrastra dicha carpeta a la terminal, te mostrara la ruta completa, será algo como:

/Users/(usuario)/Library/Mobile\ Documents/com\~apple\~CloudDocs/(carpeta) 

  • Usuario. Es nuestro usuario en Mac.
  • Carpeta. La carpeta que hemos creado para almacenar los datos de git.

Con el comando “git push -u origin master“, sincronizamos o subimos nuestro proyecto cada vez que lo actualicemos.

Para ver el directorio remoto al que esta vinculado nuestro proyecto utilizamos el comando “git remote -v

De una forma sencilla y economica podemos mantener una copia de suguridad en la nube de todos nuestros proyectos, que pueden ser recuperados en cualquier dispositivo, tan solo utilizando el id de Apple.

Share

Postgresql. Transformar los datos de columnas en filas.

Puede ocurrir que en algunas situaciones necesitemos obtener los datos de las columnas de una tabla en Postgres para que dicha información sea mostrada en filas.

Para ver el funcionamiento de este tipo de consultas vamos a crear una tabla con los primeros 6 meses del año. Utilizamos dos filas de datos obtenidos de forma aleatoria.

Creamos la tabla.

DROP TABLE IF EXISTS "public"."ventas";
CREATE TABLE "public"."ventas" (
  "id" int2 NOT NULL DEFAULT nextval('venta_id_seq'::regclass),
  "enero" int2,
  "febrero" int2,
  "marzo" int2,
  "abril" int2,
  "mayo" int2,
  "junio" int2
);
ALTER TABLE "public"."ventas" ADD CONSTRAINT "venta_pkey" PRIMARY KEY ("id");

Insertamos los datos aleatorios.

INSERT INTO "public"."ventas" VALUES (1, 400, 45, 234, 120, 112, 80);
INSERT INTO "public"."ventas" VALUES (2, 345, 90, 198, 98, 145, 144);

La siguiente consulta muestra los datos de las columnas en filas.

select id, 
unnest(array[enero, febrero, marzo, abril, mayo, junio]) AS importe,
unnest(array['Enero', 'Febrero', 'Marzo', 'Abril','Mayo','Junio']) AS meses											
FROM ventas 
group by id
order by id
idImporteMes
1400Enero
145Febreo
1234Marzo
1120Abril
1112Mayo
180Junio
2345Enero
290Febreo
2198Marzo
298Abril
2145Mayo
2144Junio

Con una consulta normal los datos se verán asi.

idEneroFebreroMarzoAbrilMayoJunio
14004523412011280
23459019898145144

Con la función “unnest” de postgres, y un par de arrays, conseguimos mostrar la información de cada una de las columnas de una tabla en una fila independiente. El segundo array que utilizamos es solo para mostrar en la fila el nombre de la columna correspondiente.

Este truco nos puede resultar muy útil cuando necesitamos mostrar los datos de una sola fila, en una tabla con muchas columnas, en vez de mostrar los datos en una extensa linea, podemos dividir cada columna en su correspondiente fila, mostrando la información de una forma más clara.

Share

17 trucos para Python

Sin lugar a dudas Python se ha convertido en el lenguaje más versátil de la última decada.

Es posible utilizarlo para multitud de propósitos; realizar scripts de mantenimiento, crear sofisticadas paginas web, aprendizaje automático (Machine Learning), desarrollo de aplicaciones de escritorio, análisis de datos, juegos, entre otras muchas más.

Y ademas es multi-plataforma, se puede utilizar en Windows, Mac, Linux y dispositivos móviles iOS y Android.

Os traemos 17 útiles trucos para Python:

Generar UUID. Los UUID son identificadores únicos universales compuesto de 32 dígitos hexadecimales, formando 5 grupos separados por guiones, 8-4-4-4-12.

import uuid
nuevo_id = uuid.uuid4()

Ver listas, diccionarios y sobre todo json con más claridad. Para ello utilizamos la función pprint.

import requests
import pprint

url = "https://randomuser.me/api/?results=1"
users = requests.get(url).json()

pprint.pprint(users)

Crea una sola cadena a partir de todos los elementos de una lista.

a = ["Python", "es", "el", "mejor"]
print(" ".join(a))

Listar los archivos de un directorio, sin mostrar los ocultos.

import os

def ls2(path): 
    return [obj.name for obj in os.scandir(path) if obj.is_file() and not obj.name.startswith('.')]

Mover archivos entre carpetas.

import shutil

shutil.move(archivo_origen, archivo_destino)

Iniciar un servidor estático en directorio local.

# En Mac y Linux 
python -m SimpleHTTPServer

# Windows 
python -m http.server

Mostar notificaciones en Mac.

import os

def notify(title, text):
    os.system("""
              osascript -e 'display notification "{}" with title "{}"'
              """.format(text, title))

Explorar las librerías. Muestra un listado con las funciones que contienen.

import requests
import collections

dir(requests)
dir(collections)

Valor por defecto en diccionario, si no existe la clave.

nombres = {1:'Casa', 2:'Patio', 3:'Jardin', 4:'Terraza'}
def  control(code):
    #return 'Zona: %s!' % nombres[code] #Expresión normal
    return 'Zona: %s!' % nombres.get(code, 'El lugar no exite')

print(control(5))

Sumar minutos a una hora.

from datetime import datetime, date, time, timedelta

ahora = datetime.now()
hora_actual = time(ahora.hour, ahora.minute, ahora.second)
minutos = (datetime.combine(datetime.date(ahora), hora_actual) + timedelta(minutes = 30)).time()

print(minutos)

Sumar dias a una fecha.

from datetime import datetime, date, time, timedelta

ahora = datetime.now()
nuevaFecha = ahora.date() + timedelta(days = 10)

print(nuevaFecha)

Evitar la salida de datos en Jupyter Notebook.

%%capture

a = ["Python", "es", "el", "mejor"]
print(" ".join(a))

Eliminar carácteres no alfanumericos.

import re

s = "La casa tiene && $$ %% Goteras de Caballo"
s = re.sub('[^0-9a-zA-Z]+', ' ', s)

print(s)

Reimportar modulo.

reload(modulo)

Emojis. Emojis con caracteres Unicode.

print(chr(128513))

Crea un diccionario a partir de 2 listas.

keys = ["a", "b", "c", "d", "e"]
valores = [1,2,3,4,5]

zipped = dict(zip(keys, valores))

print(zipped)

Ocultar el password al pedirlo por consola.

import getpass
usuario = raw_input("Introduce usuario: ")
password = getpass.getpass("Introduce password: ")
print(usuario, password)

Share

Búsquedas complejas en Postgresql

La mayoría de las veces realizaremos búsquedas por patrones conocidos y fáciles de obtener, simples y repetitivos, búsquedas directas, o parciales utilizando el comando “like“. Pero otras veces la información que intentamos localizar no se encuentra formateada como esperamos, conteniendo diferentes símbolos o signos repartidos entre el texto, lo cual dificulta enormemente encontrar los datos que buscamos.

Postgres cuenta con la función “similarity“. Esta función elimina todos los caracteres extraños; guiones, comas, puntos, signos de admiración y exclamación, etc. Dejando el texto lo más limpio posible, y divide la cadena resultante en trigramas. Realizando la comparación entre estos trigramas se obtiene un porcentaje de similitud. Este procedimiento funciona realmente bien al realizar búsquedas con cadenas complejas pero el problema es que es realmente lento. En una tabla con 200.000 registros, realizar una búsqueda con similarity puede llevar de 6 a 10 segundos, incluso más.

Para utilizar similarity en Postgres, necesitamos instalar la extensión pg_trgm con el siguiente comando:

CREATE EXTENSION pg_trgm;

Podemos obtener el trigrama de una cadena con:

select show_trgm('A-Team Year?, the')

Obtendremos el siguiente array:

{”  a”,”  t”,”  y”,” a “,” te”,” th”,” ye”,”am “,”ar “,eam,ear,”he “,tea,the,yea}

Para realizar una busqueda con similarity utilizamos la siguiente consulta:

SELECT * FROM filmografia
WHERE similarity('A-Team Year?, the', titulo) > 0.90

Titulo, es el campo en el que realizamos la búsqueda. 0.90 significa el porcentaje de similitud que requerimos. Si la comparación es superior al porcentaje requerido, se incluirá en los resultados. Podemos jugar con diferentes porcentajes hasta encontrar el que mejor se adapte a las búsquedas requeridas.

Este método es muy efectivo al realizar búsquedas, aunque también es muy lento.

Búsquedas contranslate

Otro método de búsqueda que nos puede resultar útil es utilizar la función “translate“. Con translate podemos reemplazar una serie de caracteres por otros:

select lower(translate('A-Team Year?, the', ' ,-,?,(,)', ''))

Con la consulta anterior obtenemos: “ateamyearthe

Como vemos se han eliminado todos los caracteres superfluos y los espacios, e igualando la cadena de búsqueda con las cadenas a explorar, podremos realizar búsquedas más complejas con buenos resultados.

Aquí la utilizamos para realizar búsquedas eliminando todos los caracteres innecesarios:

SELECT * FROM filmografia
WHERE LOWER(translate(titulo, ' ,-,?,(,)', '')) = LOWER(translate('A-Team Year?, the', ' ,-,?,(,)', ''))

Búsquedas con “Expresiones regulares”

Al realizar determinadas búsquedas también podemos utilizar “expresiones regulares“. Nos permiten obtener resultados que de otra forma seria mucho más complicado o no seria posible.

Si por ejemplo queremos buscar todas las cadenas que comienzan por un número podemos utilizar la siguiente expresión:

SELECT * FROM filmografía
WHERE titulo ~ '^[0-9].*'

Obtendremos todas las cadenas que por lo menos el primer carácter sea un número.

Existen infinidad de formas en las que podemos obtener aquellos datos que necesitamos, aquí, solo hemos comentado algunas de ellas.

Share

Una manera de trabajar sin distracciones, haciendo uso del terminal

 

A veces, o casi siempre, nuestro escritorio es un verdadero casos de aplicaciones y ventanas abiertas, las cuales tenemos que ir moviendo o apartando para encontrar lo que buscamos, y al trabajar en una aplicación, todo este conglomerado de información nos puede distraer de nuestro trabajo. Si te gusta trabajar en un entorno limpio y sin distracciones, prueba a activar esta función con el comando:

defaults write com.apple.dock single-app -bool true; killall Dock

Ahora la aplicación activa es la que selecciones en el Dock, ocultando todas las otras aplicaciones que tengas abiertas.

Para desactivar esta función utilizaremos en comando:

defaults write com.apple.dock single-app -bool false; killall Dock

Si eres de los que tienen miedo a utilizar el terminal de Mac OS X, puedes usar éste otro truco.

Otra forma de ocultar ventanas es utilizando las teclas de acceso rápido. Pulsando “CMD + H“, ocultamos la ventana que actualmente se encuentra activa.

Con “ALT + CMD + H“, ocultaremos todas las ventanas que se encuentren abiertas en el escritorio menos la que actualmente éste activa.

 

Trucos para el terminal de Mac

[app 669946772]

 

Conoce todos los secretos de Mac OS X

[app 676984221]

 

Share