Hernán Grecco: Announcing Lantz: Instrumentation in Python

Today I am releasing Lantz, a Python automation and instrumentation toolkit that allows you to control instruments in a clean and efficient manner writing pure Python code.

LantzInstrumentation and experiment automation became a cornerstone of modern science. Most of the devices that we use to quantify and perturb natural processes can or should be computer controlled. Moreover, the ability to control and synchronize multiple devices, enables complex experiments to be accomplished in a reproducible manner.

This toolkit emerges from my frustration with current solution. If you have worked in a research lab, you know that most that is out there is done using Domain Specific Languages (DSL) like LabVIEW and MatLab Instrumentation Toolbox. They are great for their original purpose but as soon as you want to code a real application their idiosyncrasy gets in the way. They lack certain features and good design that we enjoy in some general purpose languages. So the choices are: you move to LabWindows and do everything including memory management or use NI Measurement Studio for the .NET languages. In all cases, you rely on expensive and proprietary solutions locking your development.

I wanted something different:
  • General purpose language
  • Rapid prototyping
  • Focus in my problem, not in resource handling
  • Dynamic typing
  • Mature and well designed
  • Clear syntax and easy-to-read code
  • Broad library
  • Extensible with C/C++/Fortran/whatever
  • Cross-platform
  • Gratis and Libre
... I wanted to do instrumentation in Python.

Python is an interpreted, general-purpose high-level programming language. It combines a clear syntax, an excellent documentation and a large and comprehensive standard library. It is an awesome glue language that allows you to call already existing code in other languages. Finally, it is available in many platforms and is free. In instrumentation software the communication with the instrument is (by far) the rate limiting step. Sending a command via serial port to an instrument and receiving a response can easily take a few milliseconds and frequently much longer. While this might be fast in human terms, is an eternity for a computer. For this reason rapid prototyping, good coding practices and maintainability are more important for an instrumentation toolkit than speed. In addition, python is actually not too slow!

It turns out that you can do instrumentation with Python. Lantz aims to reduce the burden of writing a good instrumentation software by providing base classes from which you can derive your own. These classes provide the boilerplate code that enables advanced functionality, allowing you to concentrate in the program logic.

Some features:
  • Easy to use but powerful functions and base classes to build your own drivers.
  • Support for instruments connecting via serial, ethernet, USB, GPIB and also using DLL.
  • One-liner connection to Qt4 interfaces.
  • Automatic generation of testing user interfaces using Qt4.
and lots of other nice things. Check them out in the documentation!

GitHub Mirror: Code and Docs

There are still a lot of things to do, but Lantz is already very useful. Future development will happen in the wild, hopefully with your help. Join us!


Guillermo Heizenreder: A las palabras se las lleva el viento

Cuando leí es post de humitos blah-blah-blah me senti muy identificado pero con la diferencia que lo mío es con el nuevo DNI, no el nuevo nuevo, sino solamente el nuevo.

Los tramites los comencé por allá fines de febrero porque en particular necesitaba el nuevo Pasaporte para viajar al exterior de Vacaciones. Luego de una incansable cola de aproximadamente unas horas logre retirar el número para que me atendieran, tramite va tramite viene sale despachada mi información.

 

A la semana de este episodio, al consultar el estado de trámite y me decía que aún no había sido recibido ningún trámite con mi identificación. Raro… no?, acá hay cat encerrau… me acerco al registro civil donde gestione los trámite y se habían olvidado de enviar los papeles a Buenos Aires, paupérrimo por no decir otra cosa.

Se acerca la fecha de de mi viaje y misteriosamente mis documento aún en trámite… uf. Dos semanas antes (ya llegando fines de Marzo) Recibo notificación que me estaban enviando el pasaporte 🙂 no cumplieron lo que indicaron de que en  15 días lo tenes en tu casa… pero no fueron tres meses, demos le algo de crédito no?.

Cuando abro el sobre con la documentación … pum! de pronto me saque 5 años de encima, me creció y me volvió el color al pelo, chau canas!!! Desde ese momento era tan solo un nuevo argentino de la promoción 1989, sí decidieron desde el Ministerio del Interior que 1984 = 1989.

Me trataron de explicar que de acuerdo a la tipografía se habían confundido… y demás versiones que ni cabe mencionar. Mismo error con el DNI que llega una semana después.- La cuestión es que decido ir son la documentación, ya que no me lo podían tramitar como carácter URGENTE porque no es un error que le puede pasar a cualquier, argumentaron.

Me voy de Vacaciones, vuelvo tramito nuevamente los documentos (cosa que ahora los voy a tener como catalogado DUPLICADO como si yo lo hubiera perdido) siendo que el ERROR es de ellos.

Cerrando el tema… es que uno se cansa de que hablen al pedo… porque mi documento a hoy 10 de Julio aún esta en producción… sí mi apellido es complejo, pero no para tanto.

Imagen

No mientan, y si no van a cumplir con lo que dicen de qué es más rápido de obtener no lo digan y ya.

Imagen

 

No suelo escribir este tipo de post, pero ya llevo desde el 10 de Mayo esperando mi documento, asistí varias veces al Registro Civil reclamando y ellos me dicen que al ser duplicado no tiene prioridad.

Florencio Randazzo, sos la cabeza del Ministerio del Interior, qué soluciones pueden brindarme, porque claramente en mi caso, su palabra de que es rápido, práctico, y más seguro no se llevo a cabo. Por qué?

  • rápido: llevo desde del mes de Febrero del corriente año esperando, se me confundieron las definiciones de rapidez creo.
  • práctico: La espera fue de 6 horas para conseguir un número para comenzar hacer el trámite. Tuve que pedir un día en el trabajo, si eso es practicidad, tengo los conceptos intercambiados.
  • seguro: 1984 es igual a 1989, no lo creo, sí en en las medidas básicas de seguridad (entrada de datos) no paso, no espero nada más.

Esperemos a ver si leen el post, y capaz me dan una respuesta.

 

Gabriel Patiño: Poniéndole aún más vi a tu vida

Acabo de aprender dos cosas buenísimas para los que gustamos de vi y vim, gracias a Leo Vidarte:

vimium
Empezamos con el más liviano de los dos. Vimium es una extensión para Chrome que te permite usarlo con algunas de las combinaciones de teclas de vim. 

Para mí, lo más interesante es la letra 'f', que te muestra una etiqueta al lado de cada link y si presionas esas teclas te lleva a esa página (usando 'F' te los abre en una nueva pestaña).

Cómo se ven los links al presionar 'f' o 'F'

Bash en modo vi
Esto se lleva todos los premios... bash en modo vi!

No solo en la terminal, sino en el cliente de mysql, el interprete de python... en todos lados tenes los comandos de vi a un Esc de distancia.

La felicidad de buscar en el history con / y después navegar con 'n' o 'N', moverte entre palabras con 'b', 'w', 'e', borrar, insertar al principio, al final... hace rato que no me emocionaba tanto con una computadora! Hasta podés deshacer la edición de un comando con 'u'...

Como se habilita: set -o vi

Si te gusta tanto como a mí, vas a querer dejarlo permanente. Crea el archivo .inputrc en tu home y ponele:


set editing-mode vi
set keymap vi


Podés bajar un cheat sheet desde este link para ver las opciones disponibles.

Gustavo Campanelli: Botnet de Androids no proviene de Androids

Al principio de la semana comencé a recibir informes de que una Botnet se estaba ejecutando desde dispositivos Android. Para los que no lo saben, una botnet es una red de bots, o sea una red de muchos dispositivos con programas dedicados a enviar emails (u otra actividad) sin conocimiento de sus usuarios, controlados todos por un usuario o una organización dedicada a tal deleznable actividad.

Gustavo Campanelli: Scite: un editor de texto para programadores multiplataforma

Hace ya bastante tiempo que uso SciTE para editar mis programas de Python y Ruby. Por supuesto que hay herramientas más especializadas para hacerlo, pero todas son más pesadas por incluir más cosas o solo cubren alguno de los lenguajes. Además, luego de descubrir la potencia de SciTE como editor de texto, también lo uso en el trabajo para editar todos los archivos de texto que necesito editar o

Gustavo Campanelli: Las nuevas vías de los desarrollos independientes de videojuegos

Hace mucho, mucho tiempo, los programadores podían programar solos o con ayuda de muy poca gente sus propios videojuegos. Eran tiempos de gráficos y sonidos más simples, de programar para el assembler de la máquina donde se fuera a ejecutar un juego. Eran esos mismos programadores los que grababan los cassettes para distribuir los programas, lo que hablaba de pequeñas tiradas y distribuciones

Gabriel Patiño: Peines de madera

En Mayo empecé con un proyecto que me pareció una buena idea para regalar: peines de madera.

Empecé cortando unas tablitas de lenga de unos 6mm de espesor, el mismo espesor de un pedazo de cedrillo que tengo por ahí. La idea era usar la lenga para la parte de los dientes, con la beta paralela a los mismos, y el cedrillo como el lomo del peine, con la beta perpendicular. De esta forma, el cedrillo con la beta perpendicular le da rigidez al peine ya que la parte de los dientes queda unida por muy poco material, y encima en el sentido de la beta.

Este quedó en casa, tuvo una falla, pero los dientes estan bastante parejos.
La lenga que tengo es de unos 3 centímetros, así que tuve que cortar varias láminas de un mismo pedazo. Lo curioso es que las láminas se curvaron visiblemente. Por lo que leí por ahí puede ser porque la madera haya estado húmeda, o por que parte del tronco se trataba.
Para enderezarla, la puse en la vaporera por media hora, y después la prensé entre dos maderas rectas por 24 horas. Santo remedio, problema resuelto.

El primer paso fue cortar la lenga y el cedrillo en la parte de la unión, nada complicado con la caladora puesta en el soporte que le hice, convirtiéndola casi en una caladora de mesa (ya voy a poner fotos). Hice la unión con una leve curva para que quede un poco mas vistoso. Una vez bien seco, dibuje y corte el perfil de los peines, tratando de darle una forma no muy cuadrada.

El primer peine!
Y llegó el momento de los dientes. El primero lo corte con la caladora, pero vibra bastante y pensé que se me iba a complicar demasiado, así que recurrí a un serruchito de mano. Los que tengo hacen un corte de unos 2 mm de espesor, suficiente para un peine.

El primer peine lo corte a ojo, y la verdad que los dientes quedaron bastante desparejo, pero con onda. Llegué a terminarlo justo para el cumpleaños de mi hermana, así que fue un lindo regalo. Para el segundo peine, hice una guía con una solapa que se mete en el primer corte y te permite separar los dientes a intervalos más regulares. Simple pero bastante efectivo, creo que si pusiera un poco más de paciencia, podría hacer que los dientes sean casi iguales. 

La guía de corte hecha con una maderita y un palito de helado.
Una vez cortados los dientes, viene la parte que más tiempo lleva: darle forma a los dientes. Esto es puro lijado, lijado y mas lijado. A prueba y error entendí por que los dientes de los peines tienen que terminar en punta, si no tienen punta simplemente el peine no peina. Hay que darles punta y algo de chanfle en el frente para que el pelo se meta entre los dientes. 
También hay que lijar entre los dientes para eliminar las astillas que se hacen al cortar ya que se pueden enganchar en el pelo. Para esto me hice una lima casera con una hoja de sierra, papel de lija y cinta doble faz. Una lima en serio me salía como $80, mi lima caserita me salió $13. 
Una vez que el peine esta listo, hay que seguir lijando con lija cada vez más fina hasta que quede bien liso.

Para la terminación empecé con dos manos de goma laca, y lija bien fina después de cada mano. Esto hace que la madera quede extremadamente lisa. La terminación final la hice con dos o tres manos de aceite de oliva y dejar secar por 24 horas entre manos. ¿Por qué aceite de oliva? Porque no hay problema de alergias, tiene buen aroma, y es fácil de conseguir para hacerle mantenimiento al peine cada tanto.

El único problema que tuve con el segundo peine fue que me emocioné demasiado cortando y se rompió una parte. Nada que no se haya podido arreglar con un poco de cola.

Me emocioné con el serrucho y se me rompió después del 5to diente.

Gabriel Patiño: Vim minimalista para Python

En la semana estuve leyendo sobre las bondades de Ninja-IDE, un IDE hecho en Python para usar principalmente en Python. Esta muy bueno, y tiene un montón de funciones interesantes, pero soy un vimero viejo y como siempre se dice, no es fácil enseñarle trucos nuevos a un perro viejo.

Pero parece que no soy el único porque en la lista de PyAr, fisadev (aunque para nada viejo) publicó su configuración de vim que es muy completa, usando unos cuantos plugins.

Entonces me acordé que hace unos años había publicado mi configuración de vim. Comparándola con la que uso hoy en día, sólo agregué dos líneas:

syntax on
set tabstop=4
set shiftwidth=4
set expandtab
set softtabstop=4
set background=dark
set autoindent
set hlsearch
set title


autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class


Evidentemente, soy un perro viejo y no aprendo trucos nuevos :)

Gabriel Patiño: Wallpapers dinámicos en Ubuntu 12.04

Tenía ganas de hacer una pequeña aplicación que descargue imágenes de algún sitio y las pongo como wallpaper cada x cantidad de tiempo. Específicamente tenía ganas de actualizar el fondo del escritorio con imágenes de las webcams de San Martin de los Andes o el cerro Chapelco.

Ya que no puedo ir a Chapelco, al menos lo veo desde la compu.
Antes de programar ni siquiera una línea me encontré con algo que me resolvió el problema automáticamente: el escritorio detecta cuando el archivo que elegiste como wallpaper cambia, y en ese caso refresca la pantalla (y el esquema de colores de Unity). No tengo idea cuanto hace que esta funcionalidad esta disponible, pero funciona, y no tuve que hacer nada.

Entonces, el 'secreto' de un wallpaper que se actualice automáticamente en base a una webcam (en este caso) o cualquier otra fuente de imagenes:

Primero, guarda una imagen cualquiera en algun directorio y seteala como wallpaper. En mi caso (y en los futuros ejemplos) use Pictures/wallpaper.jpg dentro de mi home.

Lo siguiente es bajar la imagen que queres y pisar la imágen que seteaste como fondo de pantalla:

$ IMG="http://www.chapelco.com/camara1600/camara1600/cam1600i.jpg"
$ wget -q -O /tmp/temp.jpg $IMG
$ cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg
$ rm /tmp/temp.jpg

El escritorio con el fondo automatizado.
Después de hacer una prueba y ver que funcionó, lo ponés en tu crontab y listo:

$ crontab -e
...
IMG="http://www.chapelco.com/camara1600/camara1600/cam1600i.jpg"
*/5 * * * * wget -q -O /tmp/temp.jpg $IMG; cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg; rm /tmp/temp.jpg

Lo bueno es que si buscas una webcam de una zona cercana a la tuya, tenes un fondo de pantalla que no solo te muestra el clima sino que se hace oscuro de noche, lo cual es bastante cómodo cuando trabajas con la luz apagada.

De noche todo se vuelve blanco y negro.

Dos temas a tener en cuenta:
  • Bajo la imagen en el directorio /tmp porque a veces tarda en bajarla y si gnome (o quien sea) trata de pintar el fondo con una imagen a medio bajar, te va a quedar medio feo.
  • Después de bajar la imagen, probé moviéndola a la ubicación definitiva y no siempre funcionó, pero copiéndola si. No me interesó saber por que, si lo sabes comentalo.

Actualización:

Si no tenés conexión a internet en el momento que tratás de bajar el archivo, te va a pisar el fondo de pantalla con un archivo vacío. Para evitar esto, hay que hacer que el copiado del archivo temporal sea condicional:

$ [ `stat -c %s /tmp/temp.jpg` -gt 0 ] && cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg

El comanto stat -c %s devuelve el tamaño en bytes del archivo bajado, entonces solo copiamos el archivo si su tamaño es mayor a cero.