Debugging con python

Para hacer debugging en python normalmente pongo prints pero a medida que el código crece los prints aumentan en número y al final me paso un buen rato buscando los sitios dónde los tengo. Por lo que al final he implementado una solución en la que puedes imprimir la linea y el mensaje deseado.

Lo que hace simplemente es usar el numero de linea que nos da la librería “inspect”. Aquí el código:

import inspect

def debug(message):
    print 'Debug in line', inspect.currentframe().f_back.f_lineno,':'
    print message

if __name__ == '__main__':
    debug('message')
    print '.'
    print '.'
    debug('message2')

Como complilar Latex en Ubuntu

Para compilar un documento de Latex solo necesitas un archivo que compilar (thanks Captain!) y un programa que te lo compile. Ejecutando el siguiente comando en nuestro Ubuntu instalaremos el paquete básico para tal propósito (~175MB):

sudo apt-get install texlive-latex-base

Aunque si lo quieres todo (paquetes de gráficos y muchas cosas raras) puedes usar el comando que te lo instala todo (~1.8GB):

sudo apt-get install texlive-full

Como leer anotaciones y comentarios de documentos PDF en Ubuntu

El visualizador de documentos de Adobe para cualquier distribución GNU/Linux, no vale nada. Básicamente lo que nos permite es simplemente “visualizar” el documento y no ofrece otras funcionalidades que aporta a otros sistemas operativos. Una de esta funcionalidad es la de visualizar anotaciones (simplemente se ve el subrayado).

Indagando un poco por la web he encontrado la solución. Lamentablemente no es una aplicación nativa para Ubuntu (las existentes al parecer solo muestran el documento), por lo que se tiene que hacer cosas un poco raras para ver las anotaciones. Así lo he solucionado yo:

Instalar Wine (aplicación nativa para Ubuntu que simula los procesos Windows para poder ejecutar programas que solo funcionan en Windows).

Si intentamos instalar Adobe PDF en Wine no nos va a funcionar (ninguna de las versiones). Por lo que tuve que encontrar otra aplicación. La aplicación que recomiendo es “PDF-XChange Viewer” tiene una versión pro (de pago) y una free. Para lo que necesitaba con la gratis me bastaba. Lo instalas y abres el documento abriendo primero el programa y luego yendo a buscar el archivo.

Espero que haya servido! :)

Arreglando el wifi después de actualizar a Lubuntu 14.04 LTS

Como ya comenté el otro día la actualización de Lubuntu 14.04 me rompió algunas configuraciones. A parte del teclado me rompió la recepción del señal de wifi. Me hizo desaparecer el gestor de la red (Network Manager).

Para hacerlo funcionar manualmente debemos usar el siguiente comando en la consola:

nm-applet

Pero para solucionarlo de forma permanente tendremos que ir al menú de Lubuntu luego preferencias y la opción de “Aplicationes por defecto para LXSession” (Default applications for LXSession). Una vez allí debereis escoger la pestaña Autostart y luego debajo de “aplicaciones manuales en autostart” (Manual autostarted applications) escribir “nm-applet” y darle al botón de “+ añadir” a su derecha. Para variar podéis reiniciar para ver que tiene efecto.

Arreglando el layout del teclado después de actualizar a Lubuntu 14.04 LTS

Si es que no aprendo. No es la primera vez que me pasa, las actualizaciones de Lubuntu siempre me crujen un par de configuraciones. Esta vez he tenido que arreglar el layout del teclado porque se me había cambiado al inglés y claro no hay Ñ ni acentos.

Para arreglar el teclado uno tiene que ir al menú principal, luego a preferencias y allí escoger “métodos de entrada de teclado” (keyboard input methods).

En la ventana que se nos abre seleccionaremos la pestaña “método de entrada” (input method). En la nueva pestaña seleccionaremos para “seleccionar un nuevo método de entrada” (select an input method ) y allí “mostraremos todos los métodos de entrada” (show all input methos).

En mi caso escogí el catalán y le daremos a añadir. Finalmente marcaremos el check box de “personalizar los métodos de entrada” (tick costumized input methods) y reiniciaremos para que los cambios tengan efecto.

Como ejecutar una tarea periódicamente en Ubuntu (Linux)

Esta programación periódica de tareas no sirve solamente para el uso en el ordenador personal, si no que también nos puede ser útil en el servidor. Estas tareas consisten en trabajos que el ordenador tiene que realizar cada determinado periodo de tiempo sin interferir con la UI.

Para conseguir tal objetivo todas las distribuciones Linux (incluyendo Ubuntu), y otros sistemas operativos basados en Unix, nos brindan la posibilidad de usar “Crontab”. El nombre proviene del antiguo dios griego Chronos encargado del tiempo.

Para ver las tareas que tenemos ejecutándose de forma periódica en nuestro sistema podremos usar el comando:

crontab -l

Si queremos modificar el fichero y añadir nuevos cronjobs deberemos usar el comando:

crontab -e

Este comando nos abrirá nuestro editor por defecto (en mi caso vi). Una vez dentro deberemos escribir una linea parecida a:

* * * * * /ruta/al/script.sh

 y si guardamos tal script será ejecutado regularmente en el margen de tiempo indicado. Cada asterisco representa una unidad de tiempo distinta. Ordenada en:

  • minutos ( de 00 a 59)
  • horas (de 0 a 23)
  • día del mes (de 1 a 31)
  • mes (de 1 a 12)
  • día de la semana( de 0 a 6) { Se empieza en domingo = 0 }

Los asteriscos tienen el significado de “todos”. Por lo que en este ejemplo significa que el script se ejecutará todos los minutos de todas las horas, de todos los días, de todos los meses, de todos los días de las semanas.

Para ejecutarlo el viernes a la 1 de la mañana:

0 1 * * 5 /ruta/al/script.sh

Si sólo queremos que se ejecute de lunes a viernes (el guión “-” nos permite indicar intervalos de tiempo):

0 1 * * 1-5 /ruta/al/script.sh

Para ejecutarlo cada diez minutos (las comas concatenan tiempos):

0,10,20,30,40,50 * * * * /ruta/al/script.sh

 pero también:

 */10 * * * * /ruta/al/script.sh

Dónde podemos apreciar porciones, evitándonos el uso de comas.

Los asteriscos, o indicaciones de tiempo, se pueden substituir por palabras protegidas.

@reboot Se ejecuta una vez al arranque
@yearly Se ejecuta una vez al año “0 0 1 1 *”
@annually (lo mismo que @yearly)
@monthly Se ejecuta una vez al mes “0 0 1 * *”
@weekly Se ejecuta una vez a la semana “0 0 * * 0″
@daily Se ejecuta una vez al dia “0 0 * * *”
@midnight (lo mismo que @daily)
@hourly Se ejecuta una vez cada hora “0 * * * *”

 

*/10 * * * * /ruta/al/script.sh >> /var/log/script_output.log 2>&1

 Empezando por el final, “2>&1” significa que tipo de información deseamos guardar. El “1” hace referencia al “standard output” y el “2” referencia a los “standard errors”. En el medio vemos “>>” que con solo una flecha significa que el fichero se sobre escribiría pero como lo que queremos es ir guardándolo todo, deberemos poner las dos flechas para que vaya añadiendo las nuevas lineas al final del documento. Tened en cuenta que si el cronjob lo ejecutas a menudo este fichero puede crecer con bastante velocidad causando problemas. Por lo que si queréis desechar lo que salga del script podéis usar

*/10 * * * * /bin/execute/this/script.sh > /dev/null 2>&1

Dónde “/dev/null” es un agujero negro que descarta toda la información que le llega.

Finalmente si queréis hacer limpieza podéis usar el siguiente comando:

crontab -r

Espero que os haya gustado y os haya servido! :)

Moving averages crossovers

Pues si, me ha dado un poquito por el trading. Pero esto des de hace ya algo de tiempo. Leyendo me gustó este “método” (si se le puede llamar así). Sirve para identificar cada vez que hay un cambio de tendencias. La identificación de estas tendencias es usada por los traders para entrar o salir con sus inversiones (aunque supongo que por los traders simplistas).

main-qimg-97e49d176bd84437847ee2bbf5909646

Como se puede ver en el gráfico se indican los puntos de entrada (compra) y salida (venta) teóricos, cuando las lineas se cruzan. Se pueden dar más propiedades a estas “lineas”. Por ejemplo de puede usar el Exponential Moving Average (EMA) que consiste en darle más peso a los datos recientes que a los pasados. Cuanto más atrás en el pasado estén menos afectarán a las proyecciones del momento. La EMA puede adecuarse a un día y a un año. Cuando la de a largo plazo (inferior) se cruce con la de corto plazo (superior) tocaría comprar. Y al revés, cuando se vuelvan a cruzar tocaría vender.

Siempre para desarrollar teorías de trading tienes que marcarte un límite en el que estás dispuesto a perder. Si mantienes acciones por el mero hecho de que ya has perdido bastante tiene toda la pinta que vas a seguir perdiendo mucho más. Por lo que he visto la mayoría de traders recomiendan algún valor entre 3% y 7 % según el apetito de riesgo que quieras correr.

Cabe tener en cuenta que para repentinas bajadas de precios o cambios continuos puede ocasionar “problemas”.

Vocabulario (en):

Idea (y gráfico):

Disclaimer: No se nada del otro mundo y aun no vivo en las Bahamas.

PD: Recordad que pase lo que pase, aproximadamente se acierta la mitad de las veces (sube/baja).

Instalar MongoDB en Ubuntu

Uno de los propósitos de año nuevo, como ya visteis, ya me he puesto manos a la obra en aprender MongoDB. Para esto necesito tenerlo instalado en el ordenador (con SO Ubuntu) para poder trastear. Así que al turrón!

Primero de todo MongoDB nos recomienda importar la “public key” usada por el gestor de paquetes.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

Luego crearemos una lista en un fichero para MongoDB

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

Seguidamente actualizaremos la base local de paquetes con:

sudo apt-get update

Finalmente instalaremos la última versión estable de MongoDB

sudo apt-get install -y mongodb-org

Y así se instala MongoDB en nuestro ordenador local con Ubuntu! :)

Para iniciar MongoDB tendremos que ejecutar en la consola “mongod”. Pero para acceder a la consola y poder ejecutar queries en la base de datos tendremos que usar el comando “mongo”.

Bonus: Para los curiosos, la versión de 32bits permite un límite teórico de 4,3GB de datos (2^32). Teniendo en cuenta padding, espacios vacíos y otras ineficiencias la empresa estima que el espacio disponible para datos es de entre 2GB y 4GB.

Revisión de los propósitos del 2014

Como cada año, toca la revisión de los objetivos que me puse a principios de año. El post que hice el año pasado lo podéis encontrar aquí. Para los que queráis saber mis objetivos para el año que viene tendréis que esperar algunos días aun :P

Profesional (y formación):

  1. Sacarme el nivel B2 de alemán => No conseguido :( A pesar de que asistí a clases de alemán del B2 ciertamente fue algo meramente recreativo y no considero que tenga el nivel tampoco.
  2. Sacarme el C1 de inglés en exámenes oficiales => La suerte ya está echada, hice el examen y estoy a la expectativa de la nota. Conseguido!
  3. Terminar la carrera. Todas las asignaturas y el PFC (Proyecto Final de Carrera) => Conseguido! Hacerlo lo he hecho todo, aunque por estrategia no doy la carrera por terminada y así poder hacer otro Erasmus (aumentando mis probabilidades de entrar en la universidad que quiero para el máster).
  4. Asistir a un mínimo de 12 eventos en Múnich => No conseguido. Ciertamente lo miré un par de veces pero al ser en alemán me frena bastante.
  5. Desarrollar alguna de mis ideas multimillonarias => No conseguido, simplemente ni se me pasó por la cabeza.
  6. Empezar a trabajar, encontrar un trabajo más o menos serio y remunerado. A ser posible en una startup => Conseguido! Empecé a trabajar en una startup de Wayra. El ambiente es muy relajado, los compañeros de trabajo muy amables y los horarios muy flexibles (todo en uno! :D).

Personal:

  1. Conocer a 12 personas alemanas de Múnich => Ni de coña, finalmente solo se ha quedado en una. La verdad es que no le puse mucho empeño y no conocí demasiadas personas solas.
  2. Escribir un post cada semana en este blog => Ni de coña. Durante el PFC terminé bastante quemado y dejé de escribir una temporada.
  3. Tirarme en paracaídas => Nope, sinceramente más allá de la idea no puse los medios para conseguirla. Me pilla bastante lejos e ir para no poder saltar da como un poco de palete.
  4. Leer 12 libros => Si! de forma más o menos regular pero si que los he leído. Aunque  no todos merecen reviews en este blog.
  5. Visitar Suiza y Liechtenstein => Nope, casi ni pensamiento de eso.
  6. Correr una Maratón sub 3.30h => No, cuando tuve la oportunidad me lesioné y perdí el físico sin llegar a estar funcional para el esperado día.

Propósitos extras:

  1. Aprender a hacer surf => No conseguido :( Me surgió la oportunidad pero no el tiempo. El PFC se me comió literalmente todo el verano.
  2. Sacarme algún título de escalada o practicarla de forma más o menos regular => Ni si quiera se me pasó por la cabeza.
  3. Esquiar en los Alpes => Conseguido! :) Fui a esquiar a Garmisch-Partenkirchen, a pesar de que el tiempo y la nieve no fueron idóneos me lo pasé  muy bien. Luego fui a Wipptal dónde el tiempo y la nieve fueron mejores.
  4. Ir al carnaval de Köln (Colonia) => No conseguido, esto tiene que ver con la esquiada. Tuve que escoger y me quedé con ir a esquiar por proximidad.
  5. Conseguir monetizar de algún modo el proyecto mencionado en el apartado profesional. => Lo dicho no hice nada.
  6. Ir por St. Patrick (17 marzo) a Irlanda y beber cerveza y de paso aprovechar para visitar Irlanda => No conseguido, supongo que ya lo sabía desde el momento que lo puse en esta lista. Pero lo celebré en Múnich viendo la cabalgata con su posterior concierto y su cerveza verde :P
  7. Meditar de forma regular => Conseguido! He meditado un rato cada día antes de ir a dormir y algunas veces durante el día. Y la verdad es que estoy contento con los resultados, ha sido como pretendía.

Lo que no me he propuesto pero he conseguido:

  1. Fui a una flashmob. Concretamente a la no “pants subway ride” en Múnich. Pensaba que me daría vergüenza o pasaría frío (fue en enero) pero ninguna de las dos cosas. Al ser estaciones subterráneas no se pasa frío, y al no ser el único te sientes como más acompañado. Para los que queráis, hay un vídeo en el que por cierto salgo dos veces.
  2. Publiqué un artículo en la revista de la universidadl’Oasi. Esto es algo que quiero hacer desde hace tiempo. Un amigo mio está en la revista (y era el presidente) por lo que aproveché mi Erasmus para escribir dos páginas.
  3. Ayudé con la organización de TEDxTUM. La verdad es que no fue premeditado. Lo vi y decidí apuntarme para ver como funciona des de dentro la organización de este tipo de eventos. La verdad es que nos quedó muy bien, más de lo que cabía esperar.
  4. Fui a una “spartan race (creo que un equivalente es el “Tough Guy Competition” del Gran Bretaña). En este caso consistía en 13km de carrera con 21 obstáculos. Posiblemente uno de los momentos mas duros del año. El reto en si no era correr los 13km, sino los obstáculos que te agotan mucho más físicamente y mentalmente que simplemente correr. Realmente paso mucho tiempo en mi cabeza la posibilidad de abandonar, porqué lo pasé bastante mal. Pero ahora sabiendo que no es santo de mi devoción y estando en la saca, no volveré a participar en nada parecido por lo menos a corto plazo.
  5. He aprendido a bailar salsa, con la tontería al final he hecho un combo de cursos que me ha llevado del nivel principiante al nivel avanzado II. La verdad es que tenia en mente aprender a bailar, se me presentó la oportunidad y la cogí sin dudar y no me arrepiento. Aunque he aprendido que mejor con pareja o alguien con quien ir regularmente.
  6. Conocí Dinamarca en un viaje de cinco días en la capital, Copenhagen.

Sinceramente creo que hay mucho rojo pero creo que las circunstáncialas me han llevado a esto y he conseguido otras metas que ni me había planteado.

Feliz navidad y próspero año nuevo!

Propósitos para el 2015

Dicen que los propósitos de año nuevo sirven para hacer durante el nuevo año lo que no estabas preparado para hacer el año anterior. En cierto modo creo que es cierto, uno empieza de 0 y tiene que avanzar, por lo que es año nuevo se tienen que coger los conocimientos del pasado y mejorarlos. Vivir es seguir mejorando, ya hace algunos años que hago públicos mis objetivos de año nuevo. Para los curiosos aquí encontrareis los objetivos del año pasado.

Este año toca nuevos propósitos y objetivos. Como cada año, los propósitos tienen algunas características, como que sean concretos, medibles y relevantes. Pero esta vez voy a poner la forma que voy a seguir para conseguirlos. Sin más dilaciones aquí os dejo la lista de los propósitos del 2015:

Profesional (y formación):

  1. Esta vez si que va a la vencida, sacarme el B2 de alemán. Para esto voy a apuntarme a una academia e asistir a clase regularmente y además hacer el examen del Goethe nivel b2 o el test DaF entre septiembre y diciembre de este año.

  2. Asistir a un mínimo de 12 eventos en Múnich. Para hacer contactos sobre el terreno, conocer el ecosistema de startups y practicar un poco mi alemán. En los que constarán los eventos que organice Wayra Alemania y algunos de MongoDB.

  3. Desarrollar una idea multimillonaria. Por lo menos todos los domingos por la tarde que esté en casa me sentaré a programarla y a final de año estará online.

  4. Trabajar más en el marketing del blog. Para esto los domingos por la mañana escribiré el post juntamente con 3 comentarios a otros blogs con referencia a distintos artículos.

  5. Entrar en el máster de informática de la TUM (Technische Universität München) en octubre.

  6. Aprender MongoDB. Para esto ya me he registrado para la introducción con python en de Enero hasta febrero, luego haré el curso intermedio que está en Udacity. En vacaciones de verano haré el tercer curso, el avanzado, y finalmente entre septiembre-diciembre me apuntaré para el examen.

Personal:

  1. Salir de mi circulo de amistades habitual y volver a asistir solo a eventos para conocer gente. Priorizando los de habla germana. Los eventos serán una vez al mes de couchsurfing, otra vez de Munich International Friends, otra de Munich network y cuando se pueda y surja hablar con un desconocido.

  2. Correr una Maratón sub 3.30h aunque me gustaría poner sub 3h me decantado por algo más moderado. Este será el objetivo para la maratón de Múnich en Octubre. Para conseguirlo entrenaré desde junio siguiendo un plan de entrenamiento.

  3. Seguir con mi “tradición” de doce libros al año.

  4. Tirarme en paracaídas. Ya fui una vez y no pudo ser debido al mal tiempo (mucho viento). Esta vez si que si, en semana santa cuando no tenga compromisos familiares llamaré para ver si se puede y si no en vacaciones de verano cada día hasta que lo consiga.

  5. Visitar Suiza y Liechtenstein, que quedó pendiente el año pasado y esta vez no lo voy a desaprovechar. No sé cuanto tiempo permaneceré tan cerca. Para visitarlos voy a aprovechar en verano unos días antes de ir hacia Barcelona o a la vuelta para ir a ver estos países.

  6. Empezar a cocinar más decentemente, variado, equilibrado, sano y con menor cantidad de carne y gluten (sin comprar alimentos gluten-free). Esto incluye hacerme tuppers si es necesario. (Como consecuencia lateral empezar un blog de alimentación?)

Propósitos extras:

  1. Mejorar los artículos ya escritos de este blog. Cuando haya tiempo y ganas me gustaría reescribir algunos artículos que se hayan quedado desfasados, ampliarlos o simplemente mejorar el estilo visual.

  2. Ir al carnaval de Köln (Colonia). Ya lo tenía pendiente el año pasado y no pudo ser, se intentará este año.

  3. La intención es que a parte de construir un proyecto monetizarlo antes de fin de año. Aunque solo sirva para cubrir gastos.

  4. Mejorar mis habilidades de escritura en inglés asistiendo a algún curso en la universidad.

  5. Leer cada día por lo menos 15min antes de ir a la cama.

  6. Escribir un research paper y publicarlo. Con el mero propósito de ganar puntos para entrar en el máster de la TUM.

Y para variar como cada año, ante la duda decir “si”, ser feliz, sobrevivir otro año más y conquistar el mundo!

Feliz navidad y próspero año nuevo! :D