sábado, 17 de abril de 2010

Volando por la Mañana...

Mi vuelo sale a las 7:55, estoy en aeroparque en este momento. La verdad que el año pasado me diverti mucho riendome de mi pobre cuñada que perdió el micro en retiro, pero a mi, esta vez me paso algo mucho peor, pero por suerte sali bien parado (aunque un poco despeinado)...

¡¡¡¡Me quede dormido!!!!!!!!!

Si señor, si señora, a las 5:50 me pasaba a buscar un taxi, que reserve ayer a las 12 de la noche.
Mientras estaba tranquilo, soñando un sueño hiperrealista, breeeeeep, la chicharra del portero tuneado de casa me quito el sueño. En dos segundos, pense que era algun borracho confundido, que venia a buscar a algun amigo y le habia pifiado al departamento.....

Pero no.

Era el taxi.
Así, que en un tris, guarde la laptop, y las cosas que faltaban en la mochila y salí.
Llegué bien (excesivamente temprano, como a mi me gusta) y ahora estoy todo despeinado en el aeropuerto.
De esta experiencia aprendi dos cosas:

- Si vas a salir en un vuelo matutino y vas a ir en taxi, reservalo de antemano en una empresa seria (En mi caso, Radiotaxi Del Plata), ya que esta precaución me salvo el vuelo.
- Dejar seteado mas de un reloj. En mi caso la falla fue que me olvide de eliminar la opcion de que no suene los sábados.
- Por las dudas.... Bañate la noche anterior.... mas vale estar excesivamente limpio que tener que bancarte un dia entero todo mugroso.

Como frutilla de la torta, justo anteayer estaba realizando un plan de reorganización de los metodos de auto-encendido (Lease, "La forma en que uno se despierta"). Me quede hasta las 2 de la mañana armando un crontab (Que no tenia idea de como se usaba) para que a la mañana me despierte arrancando el totem con una playlist. Si lo hubiese seteado para hoy, esto no pasaba....



 Ahora estoy embolado en el aeropuerto, jugando con nmap contra la wifi paga... en 1 hora despego :P
--
El amanecer en el Río de la Plata

UPDATE: Estoy sano y salvo en Córdoba

miércoles, 31 de marzo de 2010

Buenas Nuevas

Hace rato que no posteo algo por acá, pero tengo buenas noticias, y las buenas noticias son para compartirlas.

Cambio de Trabajo! 


Un poco de background:
Hace 3 años (y un poco mas) que me viene a estudiar  (aunque no solo a estudiar) a Buenos Aires, desde ese momento vengo laburando en la empresa de mi tío. Donde comenzé siendo un tablerista, y termine siendo proyectista eléctrico, programador de PLC, SysAdmin, Tablerista, Encargado de Postventa, Desarrollador de Scadas.... (y la lista sigue). Todo esto, amparado en la confianza de ser familia.

Pero.... siempre hay un pero: No está tan bueno. Ser un empleado multifuncional, con muchas cosas diferentes que abarcar logró que mi estrés y mi panza crezca, que mi capacidad de resolver problemas específicos disminuya y algo muy importante:
La sensación de soledad, de no tener un par con el que discutir como encarar un proyecto, alguien con quien repartir las responsabilidades cuando la cosa no funciona y finalmente, alguien con quien aprender en conjunto.

Ademas.... quería programar, Python de ser posible...


Empecé a mirar un poco la oferta laboral, pero el panorama era mas que deprimente (desde mi punto de vista): Muchas búsquedas de desarrolladores junior, con sueldos malos.
Yo, siendo un (proto)programador autodidacta, no tenia ningún papel, ninguna experiencia laboral en el desarrollo de sistemas, no tenia la cara para presentarme a un laburo mejor.
Mi forma de vida (la autosuficiencia en pareja) y el nivel de gastos (depto, gastos de facultad, alimentos, transporte) me hacia imposible pensar en entrar a una empresa donde me paguen 2,50$ la hora.

Pero las cosas fueron cambiando:

En marzo participe en el pycamp, un campamento en el que programadores de python de argentina, desde newbies como yo, hasta tipos con trayectoria internacional. Fue increíble: muchos geeks, mucha buena onda, mucha humildad.
Aprendí mucho, muchísimo, mas que en mucho tiempo.
Ahí mismo me di cuenta (nuevamente) que estaba cansado de trabajar tan solo y que realmente quería trabajar con gente así y que realmente mi codigo no apestaba (tanto...).

En la reunión de PyAR (en el marco del PyCamp), Alecu planteo que existen un montón de programadores de Python, que no trabajan en Python, y que estaría bueno, revertir esa situación.

De vuelta en casa decidá tirarme a la pileta: Mande un curriculum a GCoop, una cooperativa de desarrollo de software libre, y... me eligieron!!!!, así que, fines de abril, estaré estrenando nuevo trabajo.

La verdad que agradezco a la gente de la comunidad de Python Argentina, que confiaron en mi, como colaborador en los eventos que se organizaron y me ayudaron (sin darse cuenta) a dar este paso.

jueves, 11 de febrero de 2010

Recalculando

Haciendole un apt-get dist-upgrade a mi cerebro.

Ultimamente estoy consumiendo demasiada información y produciendo poca. Ni bien logre cambiar la tendencia, escribo algo interesante.

miércoles, 16 de diciembre de 2009

TSXCUSB485 en GNU/Linux!

Arranque esta semana testeando un dispositivo MODBUS, sobre un enlace RS485. Para ello decidi utilizar un lindo conversor usb a RS485, de la firma Schneider Electrics: el TSXCUSB 485.El aparatito en Cuestión

Probe en Win, lo detecto como un puerto com, usando un driver privativo. Probe en GNU/Linux y.... nada... me mostraba el vendor id y el product id del dispositivo pero no me lo montaba como un "ttyUSBx".

Las opciones: resignarse y usarlo bajo windows, o buscar, escribir, parchar lo que fuera necesario.

Obviamente, elejí la opción 2, ya que si lo sacaba funcionando tenia resuelto un punto importante en materia de comunicaciones industriales, rubro al que me dedico.

Empeze leyendo un poco de guias sobre como son los drivers usb en linux, y googleando si alguien lo habia hecho andar, pero, se ve que a los que trabajan de esto usan solo windows.

El primer paso para hacer ingeniería inversa, era ver el hardware que componia la placa:



Detalle de la Plaqueta
Ya, de un golpe de vista nos encontramos con el corazón de la conversión usb-rs232, el ft232bl, un chip bastante estandar.
El lugar mas ovio para encontrar información era la pagina del fabricante, y ¡Oh Sorpresa! estaba el driver para nuestro querido pinguÑu, incluso una guia para agregar vendor y product ids pero:
La edición del driver, para que reconozca el dispositivo, en si, es bastante trivial, pero el problema es compilarlo: hay muchas versiones del driver y muy pocas de ellas son compilables, porque, según entiendo, el soporte de usb del kernel se fue modificando con cada versión.

Finalmente, termine buceando en el git de www.kernel.org y encontré uno que compilo de maravillas.

La verdad que me sorprende cuan poderoso es el software libre: en el sistema de la ventana, ante un problema así ¡estas fregado!
En balance de tiempo tarde unas 3 horas en resolverlo, pero ya esta!!! cuando consiga comittear mi pach para el driver, en futuros kernels, el dispositivo va a tener soporte, ¡para mucha gente!

martes, 1 de diciembre de 2009

Mandando el contenido de un directorio como archivos adjuntos

Hoy necesitaba mandar un archivo dividido en 18 partes de 400kB, debido a las limitaciones del proveedor de correo de un colega cubano. La opción de hacerlo a mano es realmente engorrosa, asi que con la ayuda de la documentación de python me mande este script:

import smtplib
import os
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email import encoders
import getpass
directorio = 'Directorio de donde Sacamos los Archivos'
asunto = 'Aca va el asunto'
destinatarios = ['complete aqui con sus destinatarios',]
sender = 'Aca va Nuestra Direccion'
contenido = 'Texto que queremos que se lea en los mensajes'
host = 'servidor SMTP que vamos a usar'
login = 'nuestro usuario'
#creamos el contenedor
listademails = []
numeroParte = 1
listadoArchivos = os.listdir(directorio)
listadoArchivos.sort()
for archivo in listadoArchivos:
    path = os.path.join(directorio, archivo)
    msg = MIMEMultipart()
    msg['Subject'] = asunto + ' %d de %d' % (numeroParte, len(listadoArchivos)))
    numeroParte += 1
    msg['From']= sender
    msg['To']=', '.join(destinatarios)
    #msg.preamble = ''
    texto = MIMEText(contenido, 'plain')
    msg.attach(texto)
    #Adjuntamos el Archivo
    fp = open(path, 'rb')
    adjunto = MIMEBase('application', 'octet-stream')
    adjunto.set_payload(fp.read())
    fp.close()
    encoders.encode_base64(adjunto)
    adjunto.add_header('Content-Disposition', 'attachment', filename = archivo)
    msg.attach(adjunto)
    listademails.append(msg.as_string())

server = smtplib.SMTP(host)
server.login(login, getpass.getpass())
for mail in listademails:
    server.sendmail(sender, destinatarios, mail)
server.quit()
Dejo en el lector las criticas pertinentes a esta 'Belleza'(ironicmode =True) que sorprende por su extrema pythonicidad :P