Manuel Kaufmann (Humitos): Dichos y refranes (1)

Mi abuela Lidia, de 92 años, es una de esas personas que no ha terminado ni siquiera la escuela primaria -siempre cuenta que estudió 6to grado en el tren con sus propios libros mientras iba a trabajar, y que siempre me dejó helado con todo lo que sabe y la capacidad de adaptación al mundo: de viajar en caballo del campo a la ciudad a volar en un avión sola en un tour por Europa.

Siempre valoré mucho su conocimiento, sus historias, sus dichos y refranes. También las peleas y discusiones que hemos tenido a lo largo de todos nuestros encuentros mensuales. Esas discusiones que me han hecho crecer y desarrollarme como persona.

Así, sin embargo, a uno lo termina cansando escuchar siempre los mismos dichos y refranes. Esa continuidad hace que algunos nos queden grabados para siempre y que otros pasen desapercibidos por el cansancio: "Ya basta abuela, otra vez con la misma historia".

Hace un tiempo leí en el blog de Gastón Ramos un post escrito por Marisa Ramos llamado Cerrazón que habla un poco de esta situación:

Mi abuela, doña Angela Ramos, tenía entre tantas otras virtudes, la de recordar muchos refranes y dichos populares que viene a ser mas o menos lo mismo. A lo largo de los treinta y tantos años que compartimos en esta vida pude aprenderme algunos, hubiera tenido que aprenderme más pero esas cosas que se tienen, que parece que nunca te van faltar y de puro cómoda nomás no me los aprendí.

Ese párrafo me hizo pensar mucho en todo lo que sabe mi abuela y que, hablando con mucha gente durante estos años de viajes por diferentes países, me dí cuenta que no es algo "común" y que "todo el mundo sabe". Sino que yo era un privilegiado al tener esa fuente de información entre mis familiares. Es por eso que le encargué una tarea simple a mi abuela:

Escribir a mano un dicho/refrán diferente por día en un cuaderno

Así esa información, cuando tenga la posibilidad de recolectarla la iría publicando en mi blog. Aquí viene la primera parte:

  1. Si te he visto, no me acuerdo.
  2. Haz el bien y no mires a quien.
  3. Al que nace barrigón es al ñudo que lo fajen.
  4. Dime que pregonas y te diré que sientes.
  5. Mas vale pájaro en mano que cien volando.
  6. No digas lo que vas a hacer, hazlo.
  7. Genio y figura hasta la sepultura.
  8. Yo te bautizo, chancho petizo.
  9. Mas contento que perro con dos colas.

¡Una genia!

Manuel Kaufmann (Humitos): Dichos y refranes (1)

Mi abuela Lidia, de 92 años, es una de esas personas que no ha terminado ni siquiera la escuela primaria -siempre cuenta que estudió 6to grado en el tren con sus propios libros mientras iba a trabajar, y que siempre me dejó helado con todo lo que sabe y la capacidad de adaptación al mundo: de viajar en caballo del campo a la ciudad a volar en un avión sola en un tour por Europa.

Siempre valoré mucho su conocimiento, sus historias, sus dichos y refranes. También las peleas y discusiones que hemos tenido a lo largo de todos nuestros encuentros mensuales. Esas discusiones que me han hecho crecer y desarrollarme como persona.

Así, sin embargo, a uno lo termina cansando escuchar siempre los mismos dichos y refranes. Esa continuidad hace que algunos nos queden grabados para siempre y que otros pasen desapercibidos por el cansancio: "Ya basta abuela, otra vez con la misma historia".

Hace un tiempo leí en el blog de Gastón Ramos un post escrito por Marisa Ramos llamado Cerrazón que habla un poco de esta situación:

Mi abuela, doña Angela Ramos, tenía entre tantas otras virtudes, la de recordar muchos refranes y dichos populares que viene a ser mas o menos lo mismo. A lo largo de los treinta y tantos años que compartimos en esta vida pude aprenderme algunos, hubiera tenido que aprenderme más pero esas cosas que se tienen, que parece que nunca te van faltar y de puro cómoda nomás no me los aprendí.

Ese párrafo me hizo pensar mucho en todo lo que sabe mi abuela y que, hablando con mucha gente durante estos años de viajes por diferentes países, me dí cuenta que no es algo "común" y que "todo el mundo sabe". Sino que yo era un privilegiado al tener esa fuente de información entre mis familiares. Es por eso que le encargué una tarea simple a mi abuela:

Escribir a mano un dicho/refrán diferente por día en un cuaderno

Así esa información, cuando tenga la posibilidad de recolectarla la iría publicando en mi blog. Aquí viene la primera parte:

  1. Si te he visto, no me acuerdo.
  2. Haz el bien y no mires a quien.
  3. Al que nace barrigón es al ñudo que lo fajen.
  4. Dime que pregonas y te diré que sientes.
  5. Mas vale pájaro en mano que cien volando.
  6. No digas lo que vas a hacer, hazlo.
  7. Genio y figura hasta la sepultura.
  8. Yo te bautizo, chancho petizo.
  9. Mas contento que perro con dos colas.

¡Una genia!

Alejandro Santos: Compilers construction resources


However, those who wants to be serious about compilers should consider acquiring the books: 
  • Compilers: Principles, Techniques, and Tools. Either 1st or 2nd Edition. I've got the 1st edition from AbeBooks, the basics are still the same today compared to 30 years ago (tokenizer, parser, syntax driven translation, intermediate code generation). 
  • Engineering a Compiler, Second Edition. This one is a good book too, and it talks in more detail about Recursive Descent Parsers, which in practice is what many compilers are doing today (ie, gcc for C++). It is a simple technique, and you can write a RDP by hand easily.

Juanjo Conti: Goodreads review: El Clan Puccio (Rodolfo Palacios)

Al libro me lo prestó mi amigo Juan una tarde en Pellegrini en que la me esperaban varias horas de colectivo. Ese día lo empecé a leer. Me puse muy contento al ver el nombre del autor: lo había leído en la revista Orsai y eso me aumentó las expectativas. Luego, leí en uno de los comentarios que el libro era un rejunte (de notas, cartas, crónicas) publicado a las apuradas para aprovechar el aluvión publicitario de la película y la serie por salir. Tengo que confirmar que es así. De todas formas, como me gusta el autor, lo leí ateniéndome a eso.
Lo leí con regularidad, pero el último capítulo me quedó por la mitad y tardé varios días en encontrar el momento para terminarlo: no había misterio, nada que me llame.

Rating: 2/5

Original: https://www.goodreads.com/review/show/1555168471

Marcos Dione: ayrton-0.7.2.1

ayrton is an modification of the Python language that tries to make it look more like a shell programming language. It takes ideas already present in sh, adds a few functions for better emulating envvars, and provides a mechanism for (semi) transparent remote execution via ssh.

A small update on v0.7.2:

  • Fix iterating over the log ouput of a Command in synchronous mode (that is, not running in the _bg). This complements the fix in the previous release.

Get it on github or pypi!


python ayrton

Marcos Dione: ayrton-0.7.2

This time we focused on making ayrton more debuggable and the scripts too. Featurewise, this release fixes a couple of bugs: one when executing remote code with the wrong Python version and another while iterating over long outputs. The latter needs more work so it's more automatic. Here's the ChangeLog:

  • Fix running remote tests with other versions of Python.
  • Fix tests broken by a change in ls's output.
  • Fix iterating over the long output of a command à la for line in foo(...): .... Currently you must add _bg=True to the execution options.
  • Fix recognizing names bound by for loops.
  • Added options -d|--debug, -dd|--debug2 and -ddd|--debug3 for enabling debug logs.
  • Added option -xxx|--trace-all for tracing all python execution. Use with caution, it generates lots of output.

Get it on github or pypi!


python ayrton

Juanjo Conti: Goodreads review: La Virgen Cabeza (Gabriela Cabezón Cámara)

Me costó leerlo.
Durante los primeros dos o tres capítulos no sabía dónde estaba parado. Luego tomó forma y pude completarlo.
Para mi gusto, quedaron muchos cabos sueltos.
Sin decirlo mucho, la historia se emplaza en un futuro que solo descubrimos porque Susana Gimenez y Maradona tienen más de setenta años.
El capítulo 7 es buenísimo, un cuento en si mismo.

Rating: 3/5

Original: https://www.goodreads.com/review/show/1552507560

Mariano Guerra: LoRaWan Overview

LoRaWAN

  • Network Protocol Candidate Specification
  • Optimized for battery powered end-devices
    • Fixed
    • Mobile (as in, they move, not phones)
  • Network Topology typically is start-of-stars
  • Network Operators can't secretly listen on application data

Communication

All Communication is bidirectional, uplink traffic should dominate:

+---+
|   |
+---+

Device
           LoRa or FSK   +---------+   IP   +---------+
    +---+    (radio)     |         |        |         |
    |   |  <---------->  |         <-------->         |
    +---+                |         |        |         |
                         +---------+        +---------+
    Device
                           Gateway         Network Server
   +---+
   |   |
   +---+

   Device
  • Communication spread out on different frequency channels and data rates
  • Data Rates between 0.3 kbps and 50 kbps
    • Max ~ 45 tweets/s (extended ASCII only ;)
    • Just the text w/o protocol overhead
    • Don't expect audio, video or any kind of streaming
  • Encryption of payload
    • AES 128 bit key length
    • One key for each FPort
  • MAC Commands
    • For Network Management
    • Invisible to Application Layer

Devices Classes

  • Class A: Baseline
    • Uplink transmission
    • Followed by two short downlink receive windows (RX1, RX2)
  • Class B: Beacon
    • Allow more receive slots at scheduled times
    • Synchronize by a beacon from the gateway
  • Class C: Continuous
    • Nearly continuos open receive windows
    • Only closed when transmitting
    • Lower latency, but more energy usage
  • All devices implement at least class A

Receive Windows

  • After uplink at configured periods
  • If msg received for current device on RX1, RX2 doesn't happen
    • Max one downlink per uplink on Class A
  • Can't transmit from last transmit until after RX2 window
+------------------+                  +-----------+              +------------+
|                  |                  |           |              |            |
| Transmit         |                  | RX1       |              | RX2        |
|                  |                  |           |              |            |
+------------------+                  +-----------+              +------------+

<------------------><---------------->
   Transmit Time         Receive
      on Air             Delay 1

                    <------------------------------------------->
                                      Receive
                                      Delay 2

MAC Message Types

  • Join Request/Accept
    • For Over the air Activation
  • Unconfirmed Data Up/Down
    • No ACK required
  • Confirmed Data Up/Down
    • ACK required

MAC Messages

  • Can be standalone messages
    • Always encrypted
  • Or "Piggyback" on next message
    • No encryption
  • Unknown messages ignored

ACK Messages

  • Can be standalone messages
  • Or "Piggyback" on next message

End Device Activation

To participate on a LoRaWAN network

Over the Air Activation

  • Needs join procedure
  • Requires fields set on device
    • DevEUI
    • AppEUI
    • AppKey (AES 128, derived from root AppKey)
  • Network Key provided
    • Allows network roaming

Activation by Personalization

All info stored on device on setup

Information Stored after Activation

  • Device Address
    • Two parts: Network Id and Network Address
  • Application Identifier
    • Global ID, uniquely identifies owner
  • Network Session Key
    • Used for MIC generation
    • Used for MAC only message encryption/decryption
  • Application Session Key
    • Used to encrypt/decrypt payload and for MIC

Class B Devices

  • Devices mobile or fixed that require to open receive windows
    • At fixed time intervals (ping slots)
  • Class B implements Class A
  • All gateways must synchronously broadcast a beacon
  • Provides timing reference to devices
  • Devices start as Class A and can switch to B when detect a beacon
  • If no beacon is detected for 120 minutes, devices switches back to Class A

Class C Devices

  • Used for applications that have suficient power available
    • cannot implement Class B
  • Will listen with RX2 window parameters as often as possible
  • No message to tell the server that it is a class C node
    • App must know
  • Like Class B, can receive multicast downlink frames

Manuel Kaufmann (Humitos): Crear GIFs de comandos en terminal

Hace un tiempo que tengo curiosidad por saber cómo crean esos "screencast" de los comandos que van tipeando en una terminal y los meten en un blog en formato gif.

Hoy encontré ttygif que te deja crear un GIF a partir de lo grabado con ttyrec -que basicamente permite grabar los comandos que vas tipeando en la consola y luego reproducirlo con el comando ttyplay.

Bueno ttygif mientras lo va reproduciendo va grabando una pequeña imagen de lo que se va mostrando junto con un tiempo en milisegundos. Luego, ejecutando su comando concat.sh te permite guardar eso en un gif.

Para instalarlo:

sudo apt-get install imagemagick ttyrec gcc
git clone https://github.com/icholy/ttygif
cd ttygif
make

Para usarlo:

ttyrec fades-django
./ttygif fades-django
./concat.sh fades-django.gif

¡Listo!

Aquí en el resultado, muestro fades con Django:

fades-django.gif