Sirviendo media en casa

Nos compramos una tele para el living. Wee!

Pero no todas son rosas. Boo!

El problema

Históricamente tuvimos una sola tele "central" en la casa, y en su momento resolví el ver pelis, escuchar música o ver fotos agregando un disco externo a la tele, enchufado por USB. Al disco en sí lo enganché con velcro en la parte de atrás de la tele y ni se notaba. Cada tanto lo sacaba, lo enchufaba en la compu, y actualizaba el contenido. Cuando ese disco se llenó (1 TB) compré otro (3 TB), y la tele pasó a tener dos discos enchufados.

Con la segunda tele se me presentó el problema de cómo alimentarle el contenido. No voy a comprar dos discos más e ir actualizando los cuatro; decidí buscar una opción superadora.

La búsqueda

Viendo cómo podía servir contenido a las teles encontré que hay algo que se llama DLNA (por Digital Living Network Alliance), una especie de protocolo viejo (tiene 30 años) con el objetivo que consumidores y servidores de media puedan verse e intercambiar información.

Teóricamente sirve para video, música y fotos, y debería cumplir todo lo que necesito. Un espectáculo. Obviamente las teles son clientes, ¿cómo pongo a servir DLNA?

Enseguida encontré un proyecto que se llama MiniDLNA. Su instalación es trivial y la configuración a priori sencilla, mediante un archivo de texto a la vieja usanza unixera.

Lo puse a funcionar, y me choqué con que NO hacía lo que debía. Específicamente: no me encontraba media en más de un directorio (la configuración explícitamente indica que esto debería suceder, muestra cómo anotar dos paths, pero nada), y además no me detectaba cambios en esos (ese) directorio (de nuevo, "debería" según la documentación). No encontré cómo debuguearlo, así que dejé de intentarlo y volví a la búsqueda.

Me crucé con Rygel, pero viendo como instalarlo y hacerlo andar encontré que recomendaban mucho Jellyfin.

Decidí probar Jellyfin entonces, que tenía una pinta bárbara. Su configuración y administración son via web (fácil de hacerlo de forma remota aunque local a la casa) y solito se integraba con systemctl para que levante sólo en reboots y eso. Jugando un poco encontré que me ponía todos los títulos en castellano, lo cual me parece espantoso. O sea, yo quiero ver (por ejemplo) "Groundhog Day", no "El día de la marmota" y mucho menos "Hechizo del tiempo".

¡Tampoco quiero el nombre siempre en inglés! Si la película realmente se llama "Nueve Reinas" o "La Vie d'Adèle" quiero ver esos nombres y no "Nine Queens" o "Blue Is the Warmest Color".

Me puse a ver cómo podía hacer para configurar eso, sin encontrar mucho al respecto... pero sí que mencionaban que Kodi lo permitía.

A ver qué onda Kodi, entonces. Tiene todo lo que es configuración y administración via su propia interfaz, porque Kodi está más pensado para meterlo en una minicompu/raspi enchufada por HDMI a la tele y manejar todo de ahí, es más una forma de hacer "un reproductor de media que se enchufa y usa" y no tanto "un servidor de media para que la tele lo consuma directamente".

Pero, habiendo dicho eso, también ofrece el servicio de uPNP/DLNA, que era lo que buscaba. Lo levanté, funciona ok, fui a la tele, y ahí no tenía thumbnails; buscando, veo que DLNA nunca manda thumbnails, y vi que varios recomiendan salir de ahí en lo posible por una opción que directamente comparta los archivos.

Como el fuerte de DLNA es transcodear los videos para cada cliente y yo puntualmente NO necesito eso, con tener los archivos compartidos debería alcanzar. Recomiendan Samba si en tu red tenés Windows, y si no NFS que funca mejor. Peeeeero encontré que las LG WebOS no soportan ni NFS ni Samba; por las dudas probé NFS y cierto, no. Bú, bajón.

Otra tecnología que en algún momento de este viaje me crucé es Plex, que es muy lindo y parece tener de todo pero pivota en su funcionamiento por un servicio privado remoto, y me dio un poco de cosa y no lo terminé probando.

Pero luego de charlar bastante con Gilgamezh sobre todo este tema me decidí a probarlo. Se instala y configura medianamente fácil, tiene clientes para las teles... pero la usabilidad es espantosa: estoy todo el tiempo "esquivando" contenido online que me ofrece (no quiero nada de eso, ¡quiero consumir contenido local mio!).

Piola, pero demasiado intrusivo

La ¿solución?

Por la misma charla terminé volviendo a Jellyfin.

Lo instalé, lo empecé a usar. Como decía arriba, funciona pero está el problema de los títulos en castellano. Pero Jellyfin tiene una API, entonces debería ser posible corregir la base de datos que Jellyfin arma automáticamente para que tenga los nombres originales. Lo bueno de Jellyfin es que también tiene un cliente para la tele... para la tele nueva, no para la vieja... pero Jellyfin también sirve DLNA, entonces en la tele vieja lo uso así, y en la nueva con el cliente bonito.

A ponerme a jugar con la API, entonces.

No tuve buena experiencia, la API es muy muy grande y no tiene sentido práctico. Por ejemplo, item como nombre de objeto es espantoso porque no tiene semántica, o en en update_item el id es mandatorio en el path y también en el cuerpo a enviar. Otro botón de muestra es el endpoint ItemUpdate, que tiene 151 parámetros a enviar (¡los conté!) ... ¡¡ciento cincuenta y uno!! ¿Están ordenados de forma alfabética? No mi ciela. ¿Te muestra al principio los que son mandatorios? Keep dreaming. Y así.

También el server tiene muy mal manejo de error par servir la API. Por ejemplo cuando algo no esta enviado correctamente (logré obtener los datos de una película y estoy tratando de cambiar el título) contesta un 400 (bien) pero sin ninguna explicación de cual es el problema (sólo un "Error processing request" que no aporta nada). Lo bueno es que el server tiene logs, pero esto es lo que aparece para ese 400:

[2023-12-12 10:16:23.299 -03:00] [ERR] Error processing request. URL "POST" "/Items/664d7ffdf0922c7eee0ea4f611481ae4".
System.ArgumentNullException: Value cannot be null. (Parameter 'source')

Como ven no ayuda nada. Habla de un parámetro source pero el endpoint que estoy usando no lo tiene. Y le estoy pasando contenido para todos los parámetros que no pueden ser null. En fin.

Hice un par de preguntas en el foro de Jellyfin y me terminaron recomendando que le haga ingeniería inversa a la interfaz de Jellyfin para ver como ella misma usa la API. Not fun.

Por otro lado, hay un par de bibliotecas para usar la API! Pero terminé usándola a mano porque ni siquiera me pude conectar con esas bibliotecas (quizás porque la forma de conectarse y autenticarse estuvo cambiando mucho).

Y bueno. Por ahora me quedo con Jellyfin que es lo que mejor funciona para mi caso puntual de todo lo que probé. Veremos con el tiempo si lo puedo mejorar.

Jellyfin: Lo mejor hasta ahora, pero...
Comentarios Imprimir

Buscando en Algo Prestado

Hace mucho que escucho un podcast que se llama Algo Prestado.

Conducido principalmente por Tamara Tenenbaum y con cuatro invitades que van rotando (Malena Rey, Eugenia (Buji) Mariluz, Pablo Pryluka y Gino Cingolani), charlan sobre distintos temas sobre los ejes "algo nuevo", "algo viejo", "algo prestado", y un cuarto tema que se van dejando de invitade a invitade (antes de esta temporada se dejaban un color).

Está desde hace un par de años (yo no lo escuché desde el principio, pero hace más de un año que no me pierdo ninguno) y en cada emisión se tocan cuatro temas, con lo que acumularon un montón. La producción no brilla por su coordinación y ya pasó un par de veces que trajeron algo medio relacionado con otra cosa que ya se habló, y siempre está la idea/queja de que tendrían que tener un algo compartido donde anotaran los contenidos tratados para elles mismes buscar.

El martes pasado estaba escuchando un episodio de fines de septiembre (estoy un par de semanas atrasado) y volvió a aparecer esta necesidad, y me dejó pensando... ¿cómo se podría hacer automático? ¿podría ayudar yo? ¿qué se puede construir que sea divertido?

Y me terminé proponiendo armar un buscador del podcast.

Pensé en tener un servicio online donde se pueda buscar por lo charlado; obviamente tiene que ser búsquedas de todos los textos, que no existen, pero están los audios. Con esa premisa me embarqué en un viaje copado que me llevó aproximadamente unas 16 horas de laburDIVERSIÓN total distribuidas en estos días.

Bajé el RSS con la lista de todos los episodios (título, descripción, link al mp3, etc.). Preprocesé eso y bajé todos los mp3s. Estuve un rato largo viendo cómo convertir eso en texto, encontré que Vosk lo hace lo suficientemente bien y es muy sencillo instalarlo y usarlo. La búsqueda en texto completo me la resolvió la extensión FTS5 de SQLite, aunque esto me llevó más tiempo aprender cómo usar y explotar su poder y limitaciones (especialmente cuando encontré que me traía falsos positivos, originados en el tokenizer porter que estaba usando y saqué). Así que armé un par de scripts para meter todos los textos y metadata en una base de datos SQLite y puse a servir eso con un pequeñisimo programa en Flask; el HTML y CSS en un 80% se los pedí a Chat GPT :D.

Sí, una nerdeada total, ¿no es hermoso?. Este es el resultado, ideas y sugerencias son bienvenidas :)

Comentarios Imprimir

Chau, Mario

Esta semana se nos murió Mario Wainfeld.

Mario Wainfeld

Hace tantísimo que no sentía una tristeza así por un fallecimiento. La primera del plural en la primera oración es a propósito, lo escuchaba a diario en el podcast de Gente de a Pié, su programa histórico, últimamente en Radio Nacional, y esa cercanía hacía que se lo sintiese uno más de nosotros.

Voy a extrañar mucho de lo que nos hablaba, pero más que nada su faro moral, la capacidad de parar la pelota en todos los ámbitos y resaltar lo importante. Como le gusta decir a Aliverti, Mario era (es) un "imprescindible".

No sé despedirlo, no puedo despedirlo. Vayan y lean otros textos, como el de José Natanson, el de Martín Rodriguez, o el de Martín Granovsky.

Chau, Mario.

Comentarios Imprimir

Vacaciones largas

Con la familia nos debíamos un viaje desde hace unos años. Estaba casi todo planeado, pero vino la pandemia, después nos metimos en la refacción de la casa, nos mudamos... y después de un año de mudados, más o menos casi terminados de mudarnos, :), accionamos e hicimos ese viaje.

Nos fuimos de vacaciones a España.

Nos fuimos de viaje

Madrid

Los primeros días fueron con base en Madrid, que es a donde volamos.

El vuelo en sí estuvo bien, no más. Salió en hora, las esperas fueron las correctas, el sistema de entretenimiento funcionaba, la comida zafó. Pero podría haber sido mejor en casi todos los aspectos: en el aeropuerto de Argentina el WiFi no funcionaba, en el avión no había enchufes de 220v, y he comido el doble de bien (a nivel calidad/variedad). Pero nos llevó hasta España, luego nos tomamos el metro, caminamos unas cuadras y tomamos posesión del lugar que había alquilado.

Aunque nos quedábamos varios días en Madrid, la idea era usar esa ciudad de base para también pasear por otras ciudades, más allá de las tardecitas al volver que alguna vuelta pegábamos, principalmente para la gestión diaria (supermercado, alguna ferretería, etc.).

La primera de esas ciudades fue Alcalá de Henares. Hizo mucho calor, pero zafó que encontramos un bebedero con agua fresca; no sólo nos sirvió para recargar la botella de agua (varias veces) sino que nos mojamos y refrescamos bastante. Desde ese día empezamos a salir de casa no sólo con la botella de agua fresca sino también con tres botellitas plásticas de medio litro hechas hielo, para tener siempre líquido fresco durante el día.

Los cuatro fantásticos: Sancho, Felu, Male y Don Q Felipe charlando con Juanlu

Al día siguiente, Toledo, donde también hacía calor pero como las calles son más angostas y los edificios más altos, en general se está a la sombra. Igual, los desniveles de la ciudad costaron y bastante :). Hicimos un paseo en el típico trencito turístico, estuvo genial. Un deleite observar cuchillos y espadas, Felu se trajo de recuerdo una Andúril de unos 15cm de largo. La ciudad, una locura de linda.

La tercer ciudad: Segovia. Nos habían recomendado probar el cochinillo pero decidimos que con el calor que hacía iba a estar complicado el paseo posterior. La ciudad linda, pero no me fascinó. El acueducto es impresionante.

El acueducto que por siglos llevó agua a Segovia Toledo significa subir y bajar, bajar y subir

Un comentario aparte con respecto a la forma de viajar a las distintas ciudades. Para la primera, Alcalá, yo había revisado los horarios por internet, y como había un tren cada diez o quince minutos, decidimos ir caminando hasta Atocha (estábamos hospedados a unas ocho cuadras de allí) y sacar el pasaje al llegar, para no imponernos el horario desde antes. Para Toledo hicimos lo mismo, pero cuando llegamos nos dimos cuenta que sólo había trenes cada una o dos horas! Terminamos yendo y volviendo un poco más tarde pero todo bien, habiendo sacado los pasajes no en una máquina automática porque había que poner, por cada pasajere, nombre y apellido, número de pasaporte, fecha de nacimiento, y hasta teléfono. En este proceso nos enteramos que para Segovia ni siquiera había tren desde Atocha, sino que nos teníamos que ir hasta Chamartín. Así que esa noche compré las entradas via internet (también pocos horarios y muchos datos). La sorpresa en este viaje fue que el tren no nos dejó en la ciudad, sino que nos tuvimos que tomar un micro extra (que, atenti, sólo recibía efectivo). Conclusión: aunque a priori los viajes sean todos "parecidos", vale la pena siempre hacer alguna investigación previa para no llevarse sorpresas.

El domingo fue el día que nos quedamos totalmente en Madrid. Fuimos al Museo Reina Sofía, donde paseamos un poco, no soy de ir a los museos de arte moderno. Me sorprendió encontrarnos con el Guernica, no sabía que estaba ahí, y es impactante verlo en vivo (no sólo por su significado sino también por su tamaño). Después nos juntamos a almorzar con Juanlu, que nos llevó a un bolichito genial, y después de gran paseo por la ciudad. Volvimos molidos al depto, teníamos la opción de ir al Prado o de ir a una fiesta de agua que nos había comentado él, pero al final nos quedamos descansando.

El Guernica, de Picasso Almorzando con Juanlu

El día de la partida salimos temprano, retiramos el auto que reservamos (luego de esperar 40 minutos que nos atendieran, mal Hertz) y partimos de viaje hacia A Coruña.

Paseo por el norte

El recorrido por el norte de España se basó en el auto que alquilamos. No sólo nos permitía salir desde Madrid y luego llegar a Barcelona (tercera etapa de las vacaciones, ver abajo), sino cambiar de ciudad "base" en el norte y recorrer lugares aledaños.

Las dos ciudades que hicimos base fueron A Coruña (en Galicia, hacie el oeste) y Bilbao (en el Pais Vasco, hacia el este).

En realidad no paramos en A Coruña propiamente dicha, sino en Oleiros, bien al ladito, una ciudad pequeña pero linda, con sus playas a las que visitamos el primer día: una grande muy grande (porque estaba baja la marea) y otra más concurrida por familias a la tarde, a la que llegamos lo suficientemente temprano como para que Male pueda meterse al mar después de pegar una vuelta más grande por A Coruña y Ferrol.

La ciudad cercana que visitamos desde allí fue Santiago de Compostela. Esperablemente, todo muy religioso. Sorprendentemente, todo muy caro. Pero paseamos, nos tomamos otro trencito (que no estuvo tan bueno porque la ciudad es menos pintoresca), nos atendieron bastante mal para almorzar, y volvimos a Oleiros relativamente temprano, porque queríamos llegar para hacer playa a la tardecita. Ahí sí me metí yo al Mar Cantábrico, con Male, mi primera vez.

De paseo por el Castillo de Butrón Sí, a veces nos llovió, pero poco

El viaje desde A Coruña a Bilbao fue más lento de lo que esperábamos. Llovía, pero ese no fue el factor principal, sino la niebla: hubieron algunos ratos que íbamos a 40 km/h. Hicimos escala en Gijón, pero nos quedamos cortos de tiempo, así que además de almorzar apenas paseamos. Tiene una playita linda y el mejor negocio de juegos y regalos del mundo (?).

Las autopistas nos dejaron bastante cerca de donde era el hospedaje. Llegamos a la cuadra indicada en el mapa, pero me costó encontrar el lugar puntual. Notablemente, me pasó parecido la primera vez que visité la ciudad en 2016, se ve que no me llevo bien con las direcciones bilbaínas.

Recorrimos Bilbao a pie, y realizamos una de las caminatas más extensas de las vacaciones. El puente Euskalduna, el Guggenheim (por afuera), el Puppy, casco histórico, almuerzo, Mercado de la Ribera, paseo por el centro, volver. Con Moni siempre jugamos a cuantos pasos hizo uno y el otro (tenemos la misma pulsera pero ella hace pasos más cortos, siempre me gana), en esta vuelta los dos hicimos más de 20 mil pasos!

Con la familia de tapas por Bilbao El transbordador colgante, o Puente de Vizcaya

El día siguiente arrancamos lento. Entre que el clima se puso muy otoñal (lluvioso, fresco) y que nos pegó una fiaca bárbara, nos terminamos quedando en casa hasta la tardecita, y ahí salimos a pasear un rato... fuimos a ver el puente colgante y el Castillo de Butrón, ciudad playera, meternos al mar, etc.... pero llovió un montón. Fuimos igual, paseamos un poco cuando se pudo, almorzamos, y nos volvimos relativamente temprano, :(

El viaje a Barcelona fue sorprendentemente rápido comparado con los dos anteriores. Me sorprendió encontrar un monumento sobre la autopista (parecido a un puente) que marca el meridiano de Greenwich, lo cual me puso a pensar porqué España tiene horario GMT+1 (+2 en verano) si la mismísima longitud cero pasa por su terreno. Claramente no sólo en Argentina tenemos la hora corrida...

Al llegar a Barcelona fuimos derechito a entregar el auto. Mientras lo revisaban fuimos descargando todo (varios días de vacaciones usando el vehículo, lo "habitamos", y luego de un viaje largo teníamos cosas tiradas por todos lados :p). En un momento me llama el tipo y me dice que el auto tenía un raspón en un costado. Con Moni pensamos que podía haber sido que nos lo hayan hecho en un estacionamiento, pero al revisar las fotos que le habíamos sacado el primer día cuando lo revisamos al recibirlo en alquiler, encontramos que ese raspón estaba de antes. La empresa no lo tenía registrado, pero nosotres nos pusimos firmes con que estaba de antes. El tipo me preguntó si nosotros habíamos avisado, y le dije la verdad: encontramos varios detalles, les sacamos fotos, y cuando fui a la oficina a avisar de eso me dijeron que con las fotos era suficiente y que me iban a mandar un mail (que nunca mandaron). Al final aceptaron que no era un problema nuestro, y no nos cobraron recargo. Moraleja: revisen el auto que alquilan ¡y saquen fotos!

Pulmón de edificio, los paraguas son para que no se moje la ropa colgada Male en el Puppy

Barcelona

No es la primera vez que iba a Barcelona, pero nunca había estado en estas fechas. Un quilombo de gente.

El primer día fuimos a pasear un toque por la Rambla y al Mercado La Boquería... muy lindo, pero demasiado turístico, al punto que desvirtúa el mercado en sí. No nos fascinó, pensamos ir luego a un mercado más "para locales" pero al final no se nos dió. Ese día también hicimos playa (¡y mar!) aunque fue un poco largo llegar caminando. La playa estaba repleta, pero encontramos un lugarcito. Estuvimos rato largo, nos metimos al mar con Male y Moni, estuvo muy bien.

Esas callecitas de Barcelona

La idea original era luego volver a casa, pegarnos un baño e ir al Museo Picasso. Pero se nos hizo un poco tarde y viendo el mapa nos dimos cuenta que no estábamos lejos del museo, así que decidimos ir así como estábamos, medio "de playa", y ver si nos dejaban entrar igual. Cuando llegamos nos enteramos (como otro montón de gente) que ya habían dado todas las entradas "del cupo diario" así que no se podía acceder :(. Y bueh. Si lo quieren visitar, recuerden que los jueves es gratis pero que no alcanza con ir más o menos en el horario (cómo sí hicimos en el Reina Sofía y estuvo todo bien).

Cuando fuimos al Parc Güell también tuvimos una situación con las entradas: nos tomamos el subte hasta esa zona y a mitad de la caminata para llegar nos enteramos (en un negocio) que el parque estaba "sold out". Ya fue una sorpresa que había que pagar para entrar (yo estuve otras veces y no), y encima igual no íbamos a poder entrar. Nos volvimos a casa y sacamos entradas para otro día, que sí lo pudimos visitar.

En la sala hipóstila del Parc Güell En el techo de La Pedrera

Para lo que sí teníamos entradas sacadas con anticipación fue La Pedrera, la obra civil cúlmine de Gaudí. Yo ya había estado ahí dos veces, pero esta vez me tomé todo el tiempo para el recorrido, y lo aproveché mucho mejor. No sólo hicimos una experiencia de realidad aumentada que estuvo muy linda, sino que después usamos la audioguía en todo el paseo. Más de dos horas en todo el recorrido, estuvo genial.

También nos sorprendió para bien la Sagrada Familia. Con Moni habíamos estado en el 2009 y aunque te dejaban entrar y pegar una vuelta, recuerdo algunos vitrales y el resto estaba en construcción, con andamios, no se podía pasar, etc. Ahora el interior es espléndido. Con la entrada habíamos contratado guia, estuvo buenísimo, y luego subimos a una de las torres. El único detalle negativo fue algo que sucedió que me pareció bastante violento: para entrar me obligaron a dejar el pañuelo verde en apoyo a la interrupción voluntaria del embarazo que llevo siempre agarrado en la mochila (me lo devolvieron a la salida).

La Sagrada Familia: arte y arquitectura Cenando en El Chigre con Humitos y Johanna

Aprovechamos estar en Barcelona para encontrarnos con Humitos. Fuimos a almorzar luego de ir a la Pedrera, y ya que estábamos se sumó al paseo que teníamos planeado por el Parque del Laberinto de Horta, que no sólo es un parque sino que tiene un laberinto formado por plantas bastante piola (aunque estaba un poco seco). Entramos, lo hicimos, nos quedamos paseando por ahí, siempre charlando. Humitos volvía con la misma linea de metro para nuestro lado, y se bajaba en la misma estación, así que lo invitamos a tomar unos mates en casa, que se convirtieron en un vermú y en una cena :p. Estuvo bárbaro, hace rato que no lo veíamos :).

Otro día salimos a andar en bici por la costa, idea y organización msima de Humitos, que hasta alquiló las bicis. Anduvimos hasta la playa del Forum, donde nos metimos al agua. Volvimos y nos quedamos tomando algo y cenando, y también luego se sumó Johanna. Con elles dos nos encontramos nuevamente otra noche, para cenar en un lugar del que nos habían hablado bastante, El Chigre. Fantástico lugar para comer, cenamos bien variado (¡destacable el pulpo!) y bebimos sidra bien sidra... o sea, no las que son extragasificadas como se compran en el super, sino que apenas tienen gas (el natural) y para tomarla se puede tirar artesanalmente desde lo alto al vaso abajo, o usar un coso como el que te dan acá donde se pone la botella de sidra y tiene una bomba que la tira con fuerza al vaso (se sirve de a poquito para que no pierda el gas mientras te lo tomás).

Arrancando la bicicleteada con Humitos

El resto de la estadía en Barcelona se dividió en paseos por distintas partes de la ciudad (plaza Catalunya, visita a El Corte Inglés incluida, Arc de Triomf, apenas cruzar el Parc de la Ciutadella, Barrio Gótico, barrio de Gracia, etc.), una escapada a Badalona para hacer playa, y visita a Montjuic, con paseo incluído por la Fundació Joan Miró, espectacular.

Volver

El regreso fue un largo continuado.

Hicimos el checkout en Barcelona y nos tomamos el metro hasta la estación Sants de tren. De ahí en el tren de alta velocidad hasta Madrid... irá rápido pero igual son tres horas y media, aunque se va cómodo: hay wifi y enchufe, y nosotres teníamos asientos alrededor de una mesita.

Al llegar a Atocha se nos complicó porque estos meses no funciona el metro que pasa por ahí. Salimos a la calle con idea de caminar unas cuadras hasta una estación de otra línea, pero nos terminamos tomando un micro gratis que realiza el recorrido de esa zona de la línea 1 mientras está cortada. Finalmente nos metimos en un subte de otra línea y luego de un par de combinaciones nos bajamos muy cerquita del aeropuerto, donde teníamos reservado un hotel por una noche.

Hicimos el check-in, dejamos valijas y mochilas, y nos volvimos para el centro de Madrid, para la última cena en la ciudad, y luego de nuevo al hotel que al otro día salíamos muy temprano. El plan original era tomarnos el primer subte a las 6:07 para estar en el aeropuerto 6:15, porque el vuelo era 8:05 de la mañana. Pero teniendo que en cuenta que queríamos hacer el proceso de la devolución de IVA y ya estábamos llegando con menos de dos horas, cambiamos de idea y nos tomamos un taxi a las 5:40.

La playa en Badalona Tapas caseras hechas por Moni

Hicimos entonces el proceso de devolución de IVA que tiene sus pasos.. pasamos por unas máquinas, pero no nos aceptó dos de los tres tickets que teníamos, entonces fuimos a aduana para que lo sellen, y de ahí a la oficina que nos devuelve el dinero.

Luego check-in para despachar las valijas grandes, pasamos por seguridad donde saltó que Felu tenía la espadita que había comprado en Toledo en la valijita que pensaba llevar en cabina. Nos dejaron volver a salir para despachar ese carry-on, que por suerte fue gratis (nos habían ofrecido despachar más cosas sin costo al hacer el check-in), y volvimos a hacer seguridad.

Al final estuvo bueno salir con más tiempo, porque sólo nos "sobraron" quince minutos para un desayuno rápido.

Después avión, largo y aburrido, y llegamos a Ezeiza. Valijas y aduana sin inconvenientes, y nos esperaban mi vieja y mi viejo para llevarnos a Ciudad Evita, donde teníamos el auto, y en un rato estábamos en casita :)

¿Les comenté que habíamos comido bien en España? Malena pensativa sosteniendo la puerta

De yapa: lugares para comer

Suponíamos que en España íbamos a comer mucho y bien. No nos equivocamos. Tapas y "raciones" fueron casi la norma cuando almorzábamos o cenábamos afuera (en los distintos hospedajes tratábamos de comer más sano, para contrarrestar :p), y casi siempre nos atendieron de bien a muy bien.

Elegimos el top 4 de mejores lugares, anotados en orden cronológico.

  • Mercado de la Reina: acá caimos de casualidad, caminando un mediodía por Gran Via; nos sentamos en la barra y pedimos diferentes tapas, todo espectacular.

  • Achuri: a este nos llevó Juanlu cuando nos juntamos con él para almorzar en Madrid; en este caso pedimos distintos platos y estuvo bárbaro, más puntos extras por el estilo y temática de la decoración :)

  • El Gallo Negro: también caimos de casualidad... estábamos buscando qué almorzar el día de paseo por Bilbao y en esa calle había montón de lugarcitos, entramos a este porque le quería mostrar a Moni "como era un lugar de tapas en Bilbao" y nos gustó para quedarnos... no nos equivocamos ni un poquito.

  • El Chigre 1769: aquí fuimos a cenar con Humitos y Johanna, elles son recurrentes; está todo bueno en este lugar, la comida (combinación catalana y asturiana), la bebida (lo habitual, más algunas opciones de sidra "de verdad"), la atención, decoración, música...

En el tren, primera etapa del regreso
Comentarios Imprimir

Fase uno del arranque de DSAF

Finalmente arrancó mi viaje de volver un poco a jugar con microcontroladores. Ya tenía la especificación que armé pero me faltaba ir a los bifes.

Me propuse hacer una primera versión apenas funcional para poder comenzar a darle estructura, porque es muy difícil arrancar algo tan complejo y multinodo. Ya tengo algo cumple con las mínimas condiciones:

En el nodo distribuido:

  • una clase ejemplo como Sensor Manager: leer el conversor analógico-digital y una entrada binaria

  • correr ese Manager periódicamente y reportar los datos que obtenga

  • mostrar el estado con sólo un led: prendido cuando está arrancando y luego ya en funcionamiento regular un parpadeo corto cada cinco segundos

En el nodo de administración: sólo escuchar en un puerto y mostrar lo que reciba del nodo distribuido

¡Lo tengo funcionando! Saqué tres videos muy muy cortitos al respecto. El primero es el "nodo distribuido" que prende el led al arrancar y luego parpadea:

Ese nodo va tirando logs, acá lo vemos mostrando que arranca, se conecta a la red, empieza a reportar lo del sensor, etc:

Y los logs del nodo de administración, que recibe y muestra la data del sensor:

(los videos podrían estar mejor sí, podría haber grabado directamente la terminal, pero los tomé rápido y después desarmé cosas, así que no los iba a volver a hacer)

Las cosas que me chocaron o desafíos que se me presentaron fueron varias.

Más allá de empezar a desempolvar las cosas de electrónica (por ejemplo, necesitaba una resistencia de 10kΩ y tuve que empezar a revolver todo) encontré que programar en MicroPython es fácil y podés empezar a tirar código funcional y rápido, pero tiene sus limitaciones... no es CPython, y eso se nota por muchos lados:

  • no encontré forma de extraer un traceback cuando hay una excepción (para mostrarla o enviarla como reporte)

  • no hay urllib.request! Buscando encontré que sí trae un urequest (micro request), que tiene un urlopen útil, pero no hay Request (esto me complicó la vida para mandar headers así que estoy mandando los bytes crudos sin decir que es JSON, es un detalle fácil de considerar en el server).

  • hay otros módulos que no están y uno ya los usa casi inconscientemente entonces se sufre al no tenerlos, como itertools o logging.

También es evidente que hay mayores restricciones por el entorno. Por ejemplo, memoria disponible. En el método NetworkManager.hit (en main.py) tuve que cerrar la respuesta antes de devolver el contenido... teóricamente esa respuesta se cerraría sola al limpiarse el objeto cuando la función termina, pero en la práctica pasaba que luego de una decena de hits se desconectaba con un error raro que por lo que encontré en Internet estaba relacionado con que se acababa la memoria.

Otro tema bien relacionado con el hardware puntual que estoy usando (el ESP8266) es que tengo disponible sólo un /timer/. Por ahora lo estoy usando para el parpadeo de la luz de estado, pero necesito más funciones periódicas (la otra luz, mandar automáticamente al server el status del nodo, etc). Voy a tener que implementar un "supertimer" arriba de este único timer...

Tener tests no es tan fácil tampoco, ya que módulos como network o machine están disponibles al correr en el microcontrolador, pero los tests lo corro en mi máquina... por ahora zafé estructurando el código de manera que lo que quise probar estuviese aislado del hardware, pero en algún momento hay que tener ahí stubs... tengo que ver si hay algo ya hecho, no quiero armarlo yo.

Y encontré que la funcionalidad que quería, con dos o tres cosas "sucediendo solas" además del funcionamiento del sensor, y la complejidad de los estados por los que puede pasar (que al mismo tiempo le da confiabilidad en el funcionamiento) no era tan fácil de implementar. Terminé armando una FSM <https://es.wikipedia.org/wiki/M%C3%A1quina_de_estados> chiquitita con sus transiciones y estados, y de paso dispuse que ese objeto maneje automáticamente las luces, justamente, de estado. Esto le dio robustez al funcionamiento y en la práctica simplificó bastante el código.

Conclusiones: con el tiempo invertido podría haber armado en C un hack sucio y desprolijo que haga más o menos lo que quería. Pero codear en Python es más alto nivel, puedo armar facilmente estructuras que hacen lo que me propuse de forma robusta y que me van a permitir escalar. Una gran elección.

Detalles que me quedaron para la(s) próxima(s) iteración(es) antes de pensar en más funcionalidad según la spec:

  • dejar de usar el led interno para el (único) estado y poner dos leds verdes y azul como corresponde, y manejarlos correctamente

  • que la config no esté hardcodeada (aunque todavía no quiero depender del Configurator) y que soporte que la misma no exista

  • implementar el "supertimer", y poder mandar periódicamente estado del nodo al server

  • que el Sensor Manager no acceda directamente al hardware, sino a través de una capa ofrecida por el Framework

  • poder leer el estado de la batería e incorporar eso en el estado

  • manejar "batería baja" correspondientemente

  • que el logger sólo arme las cadenas y muestre en pantalla si el nivel corresponde

Les contaré más en el futuro.

Comentarios Imprimir