2023/04/14

Preguntar bien para trabajar

Este artículo es el resultado de la aplicación del concepto, técnica, modalidad o como lo quieras llamar que había registrado antes, en ese momento fue ponerle una descripción a lo que hacía de modo intuitivo y medio inconsciente.

Tras todos estos años, ya de modo conciente de aplicarlo, también lo he extendido desde el aprendizaje al trabajo y hace unos pocos días tuve un evento muy ilustrativo que me disparó escribir esto como actualización.

 

Lo que había dicho en la otra oportunidad se podría resumir así:

Estoy con un problema, hago una pregunta y antes de enviarla, me pongo en el lugar de quien podría contestarla y me imagino que me va a pedir que complete. Lo hago, vuelvo a mirar y cuando ya no puedo hacer nada más, lo envío.

Lo interesante es que cerca de tres de cada cuatro veces, no necesito enviar pues el problema queda resuelto.

 

Lo último que ha ocurrido, está relacionado algo que no es de estudio o hobby pero tampoco es de trabajo, llamemoslo de "responsabilidad profesional", mi colaboración el el proyecto CIAA.

En pocas palabras por si no conocés, es un proyecto de Open Source Hardware y Software (Open de Todo) en el cual vengo colaborando, últimamente en arreglar el sitio cuando algo falla.

La última falla fue por una migración automática que produjo una catarata de dependencias. Estando yo con poco tiempo y sabiendo muy poco de la aplicación solicité ayuda en embebidos.

Fuí muy escueto a propósito, estaba filtrando, buscando más alguien que supiera de antemano que alguna persona solidaria que me ayudara a investigar, no quería pasarle el muerto a algiuen en mi misma situación.

Tres minutos más tarde una persona me contestó en privado, Daniel C.B.

En mi borrador de mail primero expliqué qué había ocurrido y cómo había roto, en este caso la esencia del problema era que php había sido actualizado, entonces tiraba unos deprecated.

Cómo había ido solucionando algunos aspectos, armé un listado tipo problema/solución para ir relatándole lo ya hecho y el bloqueo actual.

Luego noté que había estado aplicando de modo desordenado los pasos de migración [*]. Por completitud entonces comprobé los había hecho y completé los faltantes, que igual, como sospechaba y por eso no los había respetado mucho, no hacían mucha diferencia.


Me puse entonces en el lugar de la persona y pensé, si le paso esto como está, aún con este lindo mail, lo mato. Evalué que para poder hacer un mail mejor, me iba a llevar el mismo o más tiempo que quizás arreglarlo. No estamos hablando de veinte minutos, de hecho me llevó varias horas y un esfuerzo mental considerable.

Pero, magia, otra vez, al estar conforme con las dependencias del mail, el problema ya estaba solucionado... en su mayor parte, ahora quedan algunos detalles de terminación.

Pasamos de la perspectiva de "tomá este sitio que no se puede exponer a Internet" a "¿te podrías fijar que parece que quedó un plugin sin instalar o mal configurado?

 

Lo nuevo


Durante todos estos años extendí la técnica debido a las cadenas de mail de trabajo. Estas suelen ir ampliando su audiencia ("sumo a tal que se encarga de ese aspecto") y a veces se extienden durante varios días sino semanas.


Esto provoca dos cosas: que hay gente nueva en la conversación a la que se le obliga a leer toda la cadena con sus idas y vueltas. Las otras personas, si ha pasado algún tiempo y como todo el mundo lleva siempre varios temas adelante, o no recuerdan o les cuesta.

 

Entonces, una práctica que me autoimpongo y recomiendo es cada tanto hacer un resumen e incluso, borrar las partes superfluas de la conversación del cuerpo principal, sí dejarla por si tengo un error de interpretación que pueda ser detectado.

Quedan entonces uno o dos párrafos diciendo el problema es tal, tal persona sugirió esta causa, la otra otra, tal esta solución y estamos más o menos así.


Como ejemplo tengo reciente que gestionando una vulnerabilidad ocurrió esto:

Se estaba reportando que estaba TLS 1.1 activo y había LUCKY13. El problema es que al revisar el sistema, TLS 1.1 ya no estaba activo y LUCKY13 era potencial debido a unas ciphersuites débiles, que de todos modos eran un defecto por si mismo.

Habían personas que retomaban la cadena con el reporte original, lo cual me producía increibles confusiones.

Entonces, el reporte actualizado, es: hay ciphersuites débiles, su eliminación producirán como efecto colateral la desaparición del potencial LUCKY13

Lo que agrego en esta oportunidad es:

No asumir que todos estamos prestando la misma atención a la conversación ni sabemos lo mismo, hacer frecuentes resúmenes y actualizaciones para no retroceder ni confundir.


Nota:


[*] No es el tema, pero esto me recuerda algo que ocurrió en uno de los cursos que doy. Usamos una VM con unos pasos a seguir en la instalación. Uno de los alumnos en lugar de seguir los pasos next->next->next para configurarla e instalarla se buscó algún video en internet y por supuesto luego no le anduvo, argumentó que "Admito que me salí del manual porque no lo sentí tan practico", lo cual, considerando que cerca de 60 personas lo habían transitado previamente y que cada vez está más refinado, es un tanto subjetivo.

Eh, pero es justo lo que vos hiciste, me vas a decir, ¿por qué no respetaste a rajatabla el procedimiento de migración?

Bueno, la verdad es que en uno de los intentos sí lo había respetado, pero el problema es que procedimiento contempla pasar de una versión a la siguiente, no como era este el caso de... no voy a decir cuántas, muchas... demasiadas...

Quizás el paso más crítico que no respeté, ni lo voy a hacer, es leer el historial de cambios, no me alcanza la vida. Usé mi instinto y sumándole la metodología expuesta, funcionó.







2023/04/12

Open de todo

Estas son unas reflexiones a raiz de alguna conversación parcial en el grupo de cybercirujas, cosas que converso acaloradamente conmigo mismo. Por un lado comparto, por el otro registro para mí mismo dentro de unos años. No pretenden ser muy completas ni balanceadas, estoy apuntando más bien a open cores y open hardware y asumo que quien lea mayormente conoce el tema.


Empiezo con varias modalidades y áreas que irán creciendo:

  • Gratis
  • Free
  • Open/Libre
  • Pago

  • Software
  • Hardware

Hay mucho "open", que a veces se confunde con "free", el cuál por su significado en inglés se confunde "libre" con "gratis".

 

Gratis/Licenciado

 

Empecemos con "gratis", sabiendo que no hay (casi) nada gratis. Software gratis es el que uno no paga. ¿Son las herramientas  como Vivado, Keil, MCUxpresso gratis? Si, aunque nadie las llama "freeware". Yo las llamaría "licenciadas", o sea, no te cobran pero es igual a haberlas comprado, o sea, te las venden por $0.


No voy a ahondar en los aspectos en los cuales para los proveedores de estas herramientas les sacan provecho pese a ser $0, pero así rapidito podríamos mencionar que sirven para que la gente las use y sí pague por versiones más completas, librerías, servicios, cores y hardware real.

También existe el hardware gratuito, lo que pasa es que es muy muy escaso por su naturaleza no copiable sin costo.

Están las muestras gratis y los kits que se sortean o se reparten a ciertos proyectos, conozco algunos casos que comento para mostrar a quienes no conocen nada que si uno está atento, puede conseguir algo cada tanto. Hay poco link a artículos pues los tengo todos a medio hacer:


  • A los asistentes de un workshop reciente de diseño de sistema embebido les regalaron una Raspberry Pi RP2040.
  • A los asistentes de un tutorial de uso de ZYNQ con Python nos intentaron regalar unas PYNQ-Z2 pero los organizadores no sabían cómo funciona la aduana por acá y no hubo manera razonable de obtenerlos.
  • A los que llenamos una encuesta de ya ni recuerdo qué, nos regalaron una MiMXRT-1020 EVK (te lo debo).
  • A los que asistimos a un webinar de SRAM PUF de nos regalaron una STM32L4A6 (te lo debo).
  • A los que asistimos a una charla de microvisores, estoy por recibir una placa apropiada para probarlos (te lo debo).
  • Si tenés un proyecto Arduino que bastante gente use, pudiste haber recibido una placa Arduino UNO R4
  • Me han contado que muchos fabricantes te mandan unas muestritas pequeñas de componentes y que hace algunos años Argentina había sido banneada por que empresas locales pedían mediante muchas personas modo proxy para sus productos finales.


El nicho de las muestras gratuitas se extiende bastante, pero contar con ello para algo por fuera de pruebas e investigaciones, me parece que es como llevarse el shampú del hotel... no escala.

 

Libre/Open


Los pongo juntos pues son extremandamente parecidos, es algo con lo que podés hacer lo que quieras, podés ver el código fuente, ya sea un programa, un diseño de hardware o un core, modificarlo y luego según el detalle de la licencia específica (gpl, apache, lo que sea), redistribuirlo, venderlo.

Puede ser open:

  • Software
    • Sistema operativo
    • Programa
    • Herramienta
    • Librería
  • BIOS/Firmware
    • boot loader
  • Core
    • CPU
    • Controlador de memoria
    • Acelerador criptográfico
  • Hardware
    • Motherboard
    • Placa
      • de red
    • Módulo
      • Adaptador USB-Ethernet

La diferencia fundamental respeco a Gratis/Licenciado es que podés ver el código fuente, modificarlo, lo que sea dependiendo de la licencia específica.

Lo más correcto es llamarlos "Open Source XXX", que distingue claramente entre verle las tripas y tenerlo funcionando. Esto es tanto en hardware como en software, puede ser muy gratuito y open tener, pero ejecutar requiere hardware y electricidad (y otro montón de cosas que uno no presta atención como espacio, ventilación, seguridad, conectividad, limpieza) que no son gratis para nada.

Los modelos de Machine Learning pueden ser muy Open Source, pero entrenar uno te puede salir un ojo de la cara en hardware/tiempo/electricidad.

 

Todos contra todos

 

¿Algo pago puede ser open?

El primer ejemplo que me viene a la cabeza es todo lo del proyecto CIAA que es Open Source Hardware y Firmware, pero tenés que pagar las placas. La sutileza es que no tenés que pagar para usar, modificar o fabricar los diseños, sólo pagás el producto terminado o los componentes y el uso de herramientas y trabajo si vas a fabricarlo vos.


El hardware tiene al menos dos niveles, siendo "cores" lo que hay dentro de un chip y "hardware" lo que une los chips: 

El diseño del chip, lo que va ahí dentro, no voy a decir que cualquiera puede hacerlo, pero si voy a decir que fabricar ese diseño es infernalmente caro.

Open Source Core o Silicon es el diseño del chip, no su fabricación.

El de armar una placa que dependiendo de la tecnología es algo que uno mismo puede hacer o mandar a hacer por un precio relativamente accesible.

 Open Source Hardware es el diseño del hardware, no el hardware físico.

FPGA te permite instanciar en Hardware que puede ser Open Source o no (ciaa-fpga o iceStick respectivamente), Cores que pueden ser Open, como una CPU RISC-V en un SOC icicle en las anteriores () o no como un Microblaze (que es Gratis/Licenciado) en una placa de Xilinx (que no es ni Open ni nada).

Con una FPGA más poderosa, con una CPU RISC-V apropiada y otros cores adicionales como MMU, timers, controlador de interrupciones, podés ejecutar un Linux, que es Open Source Software.

Una placa del proyecto CIAA que utilice un SoC RISC-V o POWER para correr un Linux, sería el ejemplo más Open que puedo imaginar.


¿Es posible una computadora completamente Open Source? No sé, no creo, ¿qué pasa con la memoria? ¿con los componentes analógicos?

 

Una especie de resumen:


softwarebioscoreshardware
gratislinuxlibrebootopen cores
muestras
open/librelinuxlibrebootrisk-vel proyecto ciaa
licenciadovivado???los que vienen con vivado???
cerradowindowsami biosarmnxp
pagowindows y vivadoami biosarmnxp



Algunos links interesantes

 

https://libreboot.org/

https://lowrisc.org/open-silicon/

https://www.proyecto-ciaa.com.ar/