domingo, 16 de febrero de 2020

viernes, 14 de febrero de 2020

Atractor de Lorenz en Python usando odeint()

Este programa es un ejemplo de dos temas interesantes: el atractor de Lorenz y la resolución de un sistema de ecuaciones diferenciales ordinarias usando el modulo scipy. El sistema que resolveremos (el sistema de Lorenz) consta de 3 ecuaciones diferenciales acopladas (que funcionan de manera interdependiente). Nótese que he cambiado la notación que aparece en el articulo de Wikipedia a una forma vectorial:
Esta notación facilita el entendimiento de la sintaxis de la función  odeint(). Lo primero que debe hacerse, después de importar los módulos correspondientes, es contruir una función que tome como argumentos el vector u y t y retorne el vector de derivadas de u. En este caso particular las ecuaciones diferenciales no dependen de t (son autónomas), aún así es necesario poner como argumento a t porque lo exige la sintaxis de la función odeint(). Después se establece una condición inicial para el vector u y se construye una lista de valores para t sobre el intervalo en que nos interese tener a la solución. Finalmente se coloca todo lo anterior como argumentos del solver odint() como aparece en el código completo:

Esta será la gráfica resultante (El Atractor Extraño de Lorenz):


jueves, 16 de enero de 2020

Escribir datos en sistema FAT32 con un PIC18F4550

En este ejemplo vamos a a realizar una escritura de datos simple a una memoria SD utilizando el complilador MikroC. Para evitar la restricción de memoria direccionable máxima que impone el formato FAT16 debemos instalar la librería FAT32 descargandola desde LibStock. Si se va a utilizar el 4550 es muy importante descargar específicamente la versión 2.0: FAT32 v2.0. Si usan PIC's más modernos con mayor memoria pueden utilizar la versión más reciente sin ninguna problema. Requerirán descargar también Package Manager y seguir estas instrucciones para instalar la librería.

Deben agregar el archivo __Lib_FAT32.h de cabecera a header files de su proyecto o solo copiándolo en el directorio donde se encuentre su archivo fuente .c.

Teniendo todo instalado, deben conectar el modulo SD al PIC de la siguiente manera:
  • MISO ------ SDI (RB0)
  • MOSI ------ SDO (RC7)
  • SCK -------- SCK (RB1)
  • CS----------- RC2   
Al estar usando el puerto B es necesario que los convertidores A/D estén desactivados para ese puerto o el programa no funcionará aunque compile. El programa completo es el siguiente:

Para el manejo de múltiples archivos y directorios recomiendo revisar el ejemplo que viene en la documentación de la librería.

miércoles, 15 de enero de 2020

lunes, 13 de enero de 2020

Apuntes de transistores BJT (cheatsheets)

Hice dos hojas de apuntes con lo que considero más relevante y fundamental para tener a la mano a la hora de hacer amplificadores de emisor común con transistores. Estan basadas en los siguientes capítulos de Principios de Electrónica de  Albert Malvino y David J. Bates:
  • Capítulo 6:  Transistores de unión bipolares
  • Capítulo 7:   Fundamentos de los transistores
  • Capítulo 8:   Polarización de los transistores
  • Capítulo 9:   Modelos de alterna
  • Capitulo 10: Amplificadores de tensión

jueves, 26 de diciembre de 2019

Sobre mi vida reciente II

Este ha sido un buen año para mi, es justo decirlo. En la segunda mitad de 2018 pasé unos meses bastante duros, honestamente no tenía muchas expectativas en enero. Pero en algún momento de febrero simplemente comencé a unir los puntos. Regresar a Mérida fue una sorpresa. Conocí a mucha gente increíble que ahora han hecho aún más grande mi grupo de "super science friends". Entré al fin a un posgrado (uno que años atrás, en una plática con un estudiante del CIC-IPN, me había parecido un reto muy alto). Tenía mucho que no sentía el haber aprendido más de lo que esperaba en un sólo año y que al fin, después de tanto funciono, bien otra vez.

Encontré un buen argumento más para escribir bitácoras públicas en un lugar inesperado, un librazo sobre inteligencia artificial que me recomendó uno de mis profesores: What to Think About Machines That Think. Pero necesito terminar de reconstruir el contexto antes de llegar a él. En Sobre mi vida reciente I me había quedado en mi sombría segunda mitad de 2018. Recibí 2019 en Zacatepec y regresé a Yucatán la primera semana de enero porque me habían aceptado para el SPI del CIMAT Unidad Mérida. Entre finales de febrero y la primera mitad de Marzo pasé mi última recaída psicológica y desde entonces me sentido como nunca. En mayo si no ml recuerdo me avisaron que había sido aceptado a la maestría en la UNAM (PCIC). Me ha gustado bastante hasta ahora. La carga de trabajo no es excesiva en volumen pero exige mucho tiempo de investigación, desarollo y depuración en el que caso de las tareas prácticas. En septiembre escribí lo siguiente en un estado:

"xkcd tenía una gráfica de conocimiento vs seguridad de saber. Había un pico cerca del origen y luego un valle muy grande, para después volver a subir alto después de mucho. He de estar en el valle porque a pesar de que cada semana aprendo a hacer cosas que se me hacían muy avanzadas para mí en la mitad licenciatura, sigo viendo lejos una capacidad real para resolver problemas de frontera. Porque es como caminar hacía el horizonte; avanzas solo para darte cuenta de que hay más y más camino para recorrer. En el caso de las ciencias naturales esto sería emocionante (¡tanto por descubrir y tan poco tiempo!), pero en las ciencias aplicadas me parece atemorizante (tanto por resolver, tantas herramientas por entender, y tan poco tiempo)."

Me siento más satisfecho con mi despeño desde entonces, pero no puedo evitar sentir ganas de evitar el estancamiento académico (en una sana medida, quiero pensar). La materia que más disfrute fue inteligencia artificial. Los dos profesores que la impartieron son excelentes. Uno de ellos fue el que nos dio una montaña de excelentes recomendaciones de libros de divulgación sobre distintos temas (incluyendo el que comentaba más atrás). La mejor razón que encontrado para escribir con más frecuencia aparece en un ensayo de Cesar Hidalgo: "No creo que las máquinas puedan pensar, pero tampoco creo que las personas puedan". En su opinión, la capacidad de pensar no es algo que este confinado en un solo individuo u objeto. Si una persona hubiera pasado años desde su nacimiento aislada en una cámara de supresión de estímulos, aislada del universo entero, no tendría nada en que pensar. La capacidad de pensar es una propiedad distribuida. Requerimos de la interacción con el mundo, de conversaciones, del conocimiento de la vida e ideas de otras personas para poder pensar. Creo que si más personas regresaran a escribir en bitácoras publicas (cada una con al menos un circulo de lectores significativo), aumentaría la capacidad de pensamiento y empatía en una escala social. No hace falta que se discutan temas profundos. Cada detalle de lo cotidiano es un bloque de construcción necesario. Espero regresar más a menudo al anecdotario y encontrar nuevos bloggers este 2020.

martes, 17 de diciembre de 2019

2006

Back then.
Si me dieran la oportunidad de regresar a 2006 pero sin saber lo que se ahora (en todos los aspectos), no lo aceptaría. El futuro (presente) sería diferente pero no necesariamente mejor ni habría disfrutado del tiempo mejor (dónde aplicaba). Este es mi argumento. Imaginen que se les da la tarea de organizar una biblioteca completa que tiene inicialmente todos los libros en desorden. Supongan que esto les toma dos años enteros. Al final, deciden crear un catálogo en donde aparece la posición correcta de cada libro en los estantes. Si enviaran ese catálogo a su yo de dos años del pasado justo antes de empezar, les tomaría quizá solo un mes ordenar todos los libros en vez de dos años. ¿Ven la idea? La información cuesta esfuerzo (sino de ustedes, de alguien más). Si amaneciéramos mañana en 2006 por una fallo en la matrix (como en la imágen que circula), estamos condenados a repetirlo todo (repetir en categorías, sería distinto por las pequeñas diferencias acumuladas [efecto mariposa] ). Suena un poco desalentador pero creo hay algo muy bueno en todo esto. Si no supimos aprovechar los buenos tiempos o no hicimos las cosas que nos hubieran hecho más felices, entonces no podemos culparnos porque la experiencia no puede crearse de la nada. Si tuvieron antes o tienen ahora las guías correctas, siéntense afortunados porque no existen los oráculos en la vida real.

nota: pueden encontrar aquí la versión formal de esta idea.

viernes, 6 de diciembre de 2019

Juego del gato (tic-tac-toe) vía algoritmo minimax.

Me dejaron el ejercicio de hacer un juego de gato y escogí el camino de la inteligencia artificial de la vieja escuela. Pensé que era algo trivial pero si me costó varios días. Planeo hacer en vacaciones un video sobre el algoritmo minimax en mi canal porque los que hay tienen códigos que ahora me parecen innecesariamente complejos. La verdad es que, aunque mis amigos creen que lo digo sólo por modestia, soy muy pendejo para entender las cosas a la primera y más aún si no me explican paso a paso. Ya que vi claro todo el proceso recursivo me acordé del final de la película War Games. Les debo el video pero por ahora pueden consultar mi reporte aquí. La implementación que hice hace uso de la siguiente clase para instanciar los estados posibles del juego:

Contiene un método que verifica si el tablero ya esta lleno y otro que verifica si es el turno del jugador X. El pseudocódigo es el siguiente:
[click para agrandar]


La función evaluación() retorna +10 si 'X' gana la partida, -10 si 'O' gana y 0 si hay empate o si aún no hay ganador en ese estado. El código completo en Python lo pueden encontrar aquí. Este programa sólo tiene el fin de ayudar a entender el algoritmo minimax. No es una implementación eficiente ya que resuelve el problema por fuerza bruta repitiendo incluso el paso por varios estados ya visitados. Pueden mejorarlo añadiendo estrategias como poda alfa-beta o memorizando estados ya visitados. 

jueves, 10 de octubre de 2019

Escrito sobre la salud mental: mi experiencia

Me parece que estamos entrando poco a poco a una buena época para la salud mental. Aún hay mucho por hacer, pero creo que para al menos mi generación, el estigma de la terapia psicológica está desapareciendo. Creo también que se está gestando una cultura de empatía, más allá del optimismo vacío tradicional. No soy un especialista pero tengo mucho que aportar con mi experiencia. Me incomoda ponerme al titulo pretencioso como "sobreviviente del desorden de ansiedad". Solo haré énfasis en que si pude salir de ese hoyo infernal y que si sé lo que se siente desear la muerte para apagar el miedo insoportable. Dicho eso también me he puesto en una posición de mucha responsabilidad. Confieso en que suelo sentirme mal  por llevar en mi saber lo necesario para cambiar la vida de tantas personas que están sufriendo pero no saber ni tener el poder para comunicarlo instantáneamente. Entiendo que es una responsabilidad distribuida porque la atención profesional es estrictamente necesaria. Pero el acompañamiento en el proceso para facilitarle las cosas a las personas es igual de necesario. Creo decir que tengo claro el método también puede dar las personas la expectativa de que daré un discurso de hombre sabio, que tendré la frase matadora que acabará de un golpe con el sufrimiento pero, por supuesto, las cosas no así. Y eso de hecho es parte central de lo que he aprendido. Esto me ha tomado varios años. Lo menciono no porque crea que este proceso debe ser necesariamente largo sino porque fui dando tumbos por la vida a prueba y error, pero juntando poco a poco los insights que terminé uniendo al final. Si pudiera enviarle una carta al pasado me habría ahorrado muchas cosas, ciertamente.

Les cuento uno. Era otoño del 2014, estaba esperado el camión una tarde en una esquina cerca del universidad en Puebla. Tenía un paraguas en medio de una llovía muy densa. No había una sola persona más en la calle. No iba ningún lugar en especial, solo trataba de despejar mi mente. Acaba de terminar una relación con una chica que había querido mucho. Me sentía terrible (esto fue dos años antes de que desorden de ansiedad me reventara en la cara). Pero de repente tuve una epifanía. Sentí de pronto que todo tenía sentido: mi dolor, la causa, el escenario. De repente me vi a mi mismo como el personaje de mi propia historia. No sentí felicidad pero era una sensación que podría llamar disfrutable. Sentía que aunque no era feliz en el sentido tradicional, mi queja no era la ausencia de contenido en mi vida. Lo que me parece interesante es que no sentí que fuera un cambio de "percepción" o una subjetiva manera diferente de tomar las cosas. Sentí como si acabara de descubrir una verdad metafísica de la realidad, algo fuera de mi de lo que había estado ciego [sidenote: quizá desde aquí me empezó a gustar el realismo literario].

Esta fue una de las muchas lecciones aisladas que años más tarde me ayudarían a sanar. 2016 fue el año en que me quebré. Cuento un poco en esta entrada. Si los que me leen saben el proceso entonces no aportaría demasiado en los detalles: insomnio, ataques de pánico y náuseas, etc. Dónde si lo haré es en las premisas más efectivas que encontré para salir del problema. Otra de ellas fue el entender que lo que llamamos sentirse bien es una habilidad, como saber bailar o dibujar bien. Esto no es nada evidente. Parecería que ser feliz es algo que simplemente ocurre sin mayor esfuerzo para unos pocos afortunados. La realidad es que si se tuvo la mala suerte de haber desarrollado esa habilidad (no haber tenido el ambiente correcto, la familia y amigos correctos, tenido malas experiencias, etc) se debe pasar por un proceso de desaprendizaje-aprendizaje. Creo que el error más grande que cometen los que se atascan en la terapia es suponer (en el fondo y sin hacerlo consciente) que su terapeuta un día les dirá las palabras mágicas que necesitan. Eso jamás pasará. Si entiendes verdaderamente que salir de un desorden es como aprender un nuevo idioma, ya estas del otro lado. Tercera cosa, el progreso no es una linea recta. Las recaídas son lo más normal del mundo. Vas bien. Esto me lleva a uno de los insights que más impacto tuvo en mi. Es una combinación de las tres últimas ideas más una observación extra. Durante una recaída intensa pero breve lo descubrí. Sentía de nuevo un malestar terrible, casi inmanejable por ratos. Lo mantuve a raya teniendo claro que no era nada anormal ni un retroceso y recordando que el sufrimiento es parte del contenido de mi historia personal. Pero lo que terminó destruyendo ese sentimiento de perdición fue una idea muy simple. Me dije una mañana al despertar a modo de broma. ¿Podría hoy sentirme sólo un poco menos miserable que ayer? Me di cuenta sin querer que si era posible. Sólo un poco menos que ayer, soportando el malestar sólo un poco más que ayer. Eso si era un objetivo alcanzable, nada de mierda de optimismo irracional. No diré el tiempo que tomó para no sesgar a nadie (cada quien es diferente), pero de poco en poco, así ha pasado ya mucho tiempo desde lo que fue mi última recaída y heme aquí intentando ser un profeta. No se si yo mismo hubiera seguido esta receta en mi época más oscura. Quizá sólo pude entenderlo después de todo lo que he vivido. Hay cosas que son incomunicables. Dicen los koanes del budismo que no se le puede enseñar a nadie el camino a la iluminación. Es un camino que las personas deben encontrar por su cuenta. Pero si con esto lo señalo aunque sea un poco, me doy por satisfecho.  

martes, 24 de septiembre de 2019

Luces atmosféricas

Se nombra atmosferic ghost light a un conjunto de fenómenos luminosos (la mayoría aún no explicados) que se reportan en muchas partes del mundo. Son tan relativamente comunes y la evidencia fotográfica y relatos anecdóticos son tan similares que tengo la sospecha de que se trata de procesos geofísicos que valen la pena investigar. En el caso de México, he escuchado en varios pueblos de Morelos, Guerrero y Puebla historias sobre "brujas", fantasmas de fusilados de la revolución y, por supuesto, ovnis que se aparecen volando en las cumbres de los cerros o en las entradas de las cuevas. Por un lado, mi hipótesis del origen natural de estas luces es algo que no les gusta oir a los aficionados a los ovnis o lo paranormal, y por el otro, es una propuesta de investigación que sería difícil de tomar en serio en la academia. Así que cazar estos objetos sería una aventura científica personal si lo llegara a llevar a cabo. Existen algunos vídeos en Youtube que me parecen reales, aunque me dan gracia algunos de sus títulos:
Algo muy recurrente es las historias de estos avistamientos, especialmente en los comentarios de personas que los han visto de cerca, es un ruido similar al de la estática en el radio y un olor a "estéreo quemado" [ozono]. Estas son dos características de fenómenos eléctricos de alto voltaje. Podrían tratarse de alguna forma de rayo esférico aunque no he escuchado ningún reporte durante la lluvia. Incluso en algún foro de buscadores de tesoros leí una historia de quemaduras internas [aunque la palabras que en realidad usaron fueron "hechizo de bruja"], lo que me haría sospechar de ondas estacionarias de microondas, que en principio serían requeridas para confinar un plasma esférico. Comparen el vídeo anterior con este otro:
El cerro de la Silla es mucho más alto, pero la posición relativa de las luces es similar. Si lo comparan ahora con este video de un rayo globular, comenzaran a notar también que aquí hay un patrón. La geografía de los 3 videos es muy similar. Otro lugar famoso muy similar es el Punto Marconi o "Cerro del Ovni" en Atlixco, Puebla donde también se reportan luces en las cumbres de los cerros de la zona. Probar mi hipótesis de los rayos globulares no sería sencillo. Estos fenómenos están muy ampliamente diseminados y no ocurren con tanta frecuencia. Sería muy útil tener un mapa con las etiquetas geográficas de todos los lugares en México dónde se reportan este tipo de fenómenos. Luego compararlos con los mapas de suelos y encontrar alguna correlación con las características físicas del terreno (si es zona sísmica o la abundancia de ciertos minerales en el suelo). Teniendo ese mapa, el siguiente paso sería construir una estación de instrumentación electrónica autónoma. Podría ser un módulo de bajo costo con cámara, estación meteorológica básica, con una Raspberry Pi alimentada por un banco de baterías recargadas con celdas solares y un enlace de comunicación LoRa. Con más presupuesto, un espectroscopio para tener más información sobre el proceso que genera la luz.

Si tienen curiosidad, aquí hay otras luces atmosféricas reportadas en otras partes del mundo: