Texto autodescriptivo, prueba 1 (y 0)

Este párrafo habla sobre este párrafo. ¿Qué puede decir un texto sobre sí mismo? Puede describirse. Por ejemplo, aquí en total hay 455 caracteres, de los cuales 79 son espacios. Están escritas 333 letras: 149 vocales y 184 consonantes. El caracter más repetido es “e” porque aparece 55 veces, y hay 27 dígitos que sumados dan 100. Este texto fue escrito por Sejo el 18 de febrero de 2012 con ayuda de una computadora. Sí, toda la información es verdadera.

Digamos que la prueba 0 fue:

Este tuit tiene doce vocales.

Todo empezó hace rato en el coche cuando generaba de esas frases que me gustan, “Nunca encontrará la respuesta a la pregunta de por qué nunca le encontrará respuesta”, “Solo tiene un tema de interés: El hecho de que solo tenga un tema de interés”.

Pensé que estaría rifado tener una tesis doctoral cuyo tema fuera ella misma, un texto autoreferente que además explicara cómo se logró esa autoreferencia, algo así.

Pero bueno, decidí empezar por lo simple. La prueba 0 la hice escribiendo a mano, para la prueba 1 decidí ayudarme de un programa.

La principal complicación surgió cuando quise agregar el dato de cuánto sumaban los dígitos presentes. Fue bonito (?) observar oscilaciones, i.e. la suma daba cierto número que hacía que la suma diera otro número que hacía que diera otro número que en algún momento era el número que ya había dado al principio. Hubo que echarle un poco de reflexión. (Como dato curioso, el 100 que quedó en la versión final puede cambiarse por cualquier entero entre 100 y 109 y sigue siendo verdadero)

Las siguientes pruebas deben incluir la complicación de expresar las cantidades de letras usando palabras, para que suceda lo mismo que sucede en la prueba 1 con el número de caracteres, el número de dígitos, la suma de esos dígitos, y el caracter más repetido (su presencia hace que ellos mismos cambien).

No pongo el código que usé porque no quiero spoilearlos. Pero más o menos hace lo mismo que yo hice en la Prueba 0: escribir la frase, medir la(s) variable(s) requeridas para actualizar la frase, y repetir hasta que se estabilice (ya sea solo o con ayuda externa). Extra hint: usé C y la función sprintf de stdio.h (claro que eso solo concierne a la implementación del algoritmo y es para nada fundamental…)

Por último, el comic de XKCD al respecto del tema: http://xkcd.com/688/

:)

Sistema de hombre en la isla (así juego a los Sims jaja)

Todo empezó por estar pensando en qué tanta energía consumiría pensar intensamente jaja.

Imaginé una situación donde una persona estuviera en un lugar con recursos alimenticios limitados (una isla), requiriera pensar para conseguirlos, pero a la vez el pensar le hiciera consumir la energía de esos recursos…

Aprovechando la clase de Modelación de Sistemas Fisiológicos, me sonó que podía modelar esa situación con un sistema de ecuaciones diferenciales y simularla jaja…

Planteo tres variables:

  • A: Cantidad de comida almacenada en la casa (o refugio) de la persona. Es la que puede consumir inmediatamente.
  • B: Cantidad de comida disponible en la isla. Hay que recolectarla
  • C: Cantidad de “conocimiento” de la persona (jaja)

Luego planteo algunas condiciones:

  • La cantidad de conocimiento va a crecer proporcionalmente a la cantidad de comida almacenada (se motiva, no sé jaja).
  • La cantidad de comida disponible en la isla va a decrecer proporcionalmente a la cantidad de conocimiento de la persona, pero también entre menos comida haya más difícil será obtenerla.
  • La cantidad de comida almacenada en la casa se consumirá a una razón proporcional a la cantidad de conocimiento de la persona (entre más sabe y más piensa más tiene que comer) y crecerá conforme se obtenga comida de la isla.

En ecuaciones diferenciales, quedaría así:

  • dC/dt = k1*A
  • dB/dt = -k2*C + k3/B
  • dA/dt = -k4*C – dB/dt

Y pues ya, como vimos en clase, usé la función de MATLAB/Octave “ode45″ para simular y jugar con el sistema, cambiando las condiciones iniciales y los diferentes factores, estuvo entretenido jaja. Aquí hay una de las gráficas resultantes:

(Sí, ahí el hombre no dura mucho en la isla jajaja)

Claramente el modelo está incompleto (¿qué pasa con la conciencia ambiental y propia conforme el conocimiento crece? ¿qué otras motivaciones habrían para el crecimiento de este conocimiento? ¿cómo trata el ambiente a la comida almacenada? etc…) pero bueno, solo quería resolverme la duda de si podía aplicar lo visto en clase en esta situación “propia”.

Y bueno, lo importante, aquí están los archivos de MATLAB/Octave (yo usé Octave, para MATLAB habrá que revisar que la sintaxis sí sirva así como está). Hay que ejecutar el que se llama “simulacion”, el otro lo que hace es definir las ecuaciones para que la función ode45 (o cualquier otra de la familia) pueda resolverlas numéricamente.

SimHombreIslaComidaConocimiento

Debería haber usado este tiempo en resolver el examen de esa materia… pero bueno

:P

Another, Other, Others

Una página que hice para unos puntos extras en mi clase de inglés

:P

http://sejomagno.org/english/anothers/

Javascript + CSS, nada del otro mundo pero lo publico para documentar su existencia.

Cómo descargar la foto de credencial del Tec usando la nómina

 

Ahora la iniciativa fue de mi amigo Óscar Dávila.

Consiguió la URL para descargar la foto de una nómina dada, así que la agregué a mi programita:

http://sejomagno.org/foto/?nomina=L0XXXXXXX

Como referencia, el comando con curl sería:

curl -o foto.jpg --header "Referer: http://info0.mty.itesm.mx" https://alsvcft01.itesm.mx/empleados_img/L0XXXXXXX.jpg

Y bueno, si bien con eso ahora la cuestión podrían buscar quién tiene la nómina equivalente a su matrícula (?), lo importante sería cómo conseguir la nómina de una persona determinada.

Al parecer los alumnos no tenemos una forma sistematizada de lograrlo. Como sea, existe Google y la falta de cuidado en el Tec. Por ejemplo, buscando una nómina conocida, encontré este archivo:

http://www.ccm.itesm.mx/dse/sei/archivos/registro_listas.xls

LOL

Have fun!

Disclaimer: esto lo hago con mentalidad geek y/o white hat hacker, no tengo intenciones malignas

:)

Cómo descargar la foto de credencial del Tec usando la matrícula

(UPDATE: Ahora pueden usar la siguiente URL: http://sejomagno.org/foto/?matricula=A0XXXXXXX )

Esto se podía hacer hace tiempo con una URL en la que cambiabas la matrícula y veías la foto de la credencial de la persona en cuestión. Ese método fue deshabilitado, y nada, ya no me acordaba.

Hace rato mi amigo Mario Recio me hizo ver que en el Portal de Alumnos, en la parte de Historia Académica, se descarga la foto propia. Como sea, si usas la URL que viene ahí para intentar bajarla por separado, te sale que el acceso está prohibido…

La curiosidad fue enorme, el no poder resolver el reto me picó el orgullo y me hizo intensear (positive feedback!)… y ya, después de un rato de reverse engineering, de muchas pruebas e ideas fallidas, llegué a la solución. Busqué qué tanto podía simplificarse, y finalmente resultó ser algo muy estúpido.

Basta de introducción

Necesitan el programa “curl“. En GNU/Linux y Mac OS X lo deben tener por default, en Windows no sé pero creo que lo pueden descargar.

Abran una terminal (Mac users: en Applications->Utilities o Cmd+space “Terminal” enter, GNU/Linux users: deberían saberlo, y si no, googléenlo para el caso de su distribución específica) y escriban o copien lo siguiente:

curl -o foto.jpg --header "Referer: http://info0.mty.itesm.mx" https://rzncal.itesm.mx/alumnos_img/A0XXXXXXX.jpg

UPDATE (2012-02-03) gracias Óscar Dávila por informarme que el servicio ya no funcionaba. Volví a revisar el Portal de Alumnos y vi que la URL de las fotos cambió. No sé si tenga que ver con la existencia de esto, pero bueno. Ahora es:

curl -o foto.jpg --header "Referer: http://info0.mty.itesm.mx" https://alsvcft01.itesm.mx/alumnos_img/A0XXXXXXX.jpg

Y ya, eso guardará la foto de la matrícula A0XXXXXXX.jpg en “foto.jpg” dentro de la carpeta en la que ejecutaron el comando (por default será su carpeta home)

Si alguien gusta hacer un web service para acceder más fácil, debería hacerlo (¡y compartirlo!) Ok, ya lo hice yo en PHP, usa el mismo principio jaja.  http://sejomagno.org/foto/?matricula=A0XXXXXXX

Let the stalking begin! (or continue!)

Programador de ATmega16 en Arduino

Después de buscar sin resultados durante la semana un ATmega16, ayer viernes lo compré para poder probar este proyecto…

El código se descarga de la siguiente dirección y ahí trae documentación sobre cómo usarlo y cómo funciona.

ATmega16_programmer

En resumen es un programador en Arduino para el microcontrolador ATmega16 usando SPI.

:D

Una foto de mi setup de pruebas donde trata de apreciarse lo sencillo del sistema:

Desde que llevé Microcontroladores (TE2023) me surgió con Dante la inquietud de hacer un programador, en ese entonces para un 8051. De proyecto final terminé haciendo más bien un ensamblador del lenguaje ensamblador de ese micro (veo que no lo he subido por acá), pero bueno, siguió la idea.

El semestre pasado la materia cambió a usar el ATmega16, y bueno, en estos días pensé que estaría bien hacer un programador en Arduino porque es una herramienta que se ha hecho popular y ubicua. Así los nuevos alumnos de la materia, en vez de usar el TopMax del laboratorio o de comprar un programador propio, pueden usar la tarjeta Arduino que probablemente ya tengan.

El lunes programé las funciones de SPI, dejé pausado el proyecto hasta tener un micro donde probarlo, y ya que el viernes lo conseguí, escribí el parseo de los archivos HEX. Ahorita estuve asegurándome de que funcionara bien (escribiéndole al micro archivos HEX que tengo por aquí y revisando la memoria de programa), escribiendo la documentación que está en el código, y agregándole la licencia de Software Libre (¡los invito a mejorarlo!).

No sé (todavía) escribir código para ese microcontrolador, así que agradeceré que me avisen cuando le pongan un programa funcional usando esta herramienta.

¡Feliz inicio de semestre!

:)

 

Simulador de Carta de Smith

En este semestre que pasó tomé la materia de Medios de Transmisión (TE3007), donde me interesó mucho la Carta de Smith por ser una solución gráfica ingeniosa.

Me entró la curiosidad de programarla usando Processing.js, del cual había leído y quería usar pero no había tenido la oportunidad. Durante el semestre en un rato libre que tuve programé en sí la plantilla de la Carta, con ciertos problemas para dibujar correctamente las curvas de reactancia (si bien la ecuación que las genera es sencilla, el problema era enmarcarlas en el círculo unitario dado que no hay alguna función para enmascarar: hay que graficar solo los arcos visibles)

En estos días a ratos limpié e hice funciones para graficar las diferentes variables, y ya hoy implementé el uso del mouse. La idea original era hacer un simulador más completo que el del material multimedia del Ulaby (Fundamentals of Applied Electromagnetics) haciendo una interfaz con HTML/Javascript pero a la mera hora se me hizo mucha talacha. Podemos dejar eso como “trabajo a futuro”, al fin estoy liberando el código con GNU GPL.

Ahorita que publico esto, el simulador grafica las curvas de la impedancia normalizada, el vector y círculo de magnitud constante del coeficiente de transmisión, y el círculo del componente resistivo que corresponde al VSWR, además de imprimir sus respectivos valores.

El sitio del simulador es el siguiente: http://sejomagno.org/SmithChart

Árbol de Navidad con displays de 7 segmentos

http://www.youtube.com/watch?v=7SR2s0dW_-M

Hace como dos semanas tuve la idea pero apenas estos días pude llevarla a cabo.

El lunes compré los materiales y hoy acabé, la verdad es que el sistema es muy simple pero armarlo fue más talachudo de lo que pensé.

El circuito consiste en 15 displays de 7 (8) segmentos de cátodo común. Los cátodos de cada lámpara van a un decodificador de 4 a 16, y todos los ánodos están en mismos nodos. Así, se requieren 12 líneas para controlar: 4 para seleccionar la lámpara a encender, y 8 para encender o apagar cada segmento o punto.

El algoritmo de control no es novedad: cada cierto tiempo se selecciona una lámpara y se colocan los valores de encendido / apagado que se desean para esa lámpara, así una por una. Esto se hace a una velocidad tal que para el ojo humano parece que todas están encendidas al mismo tiempo.

Adjunto un archivo que sirve como plantilla para controlar el árbol con un Arduino Uno. Si alguien quisiera probar alguna animación / patrón, puede modificarla y enviármela para que lo pruebe

:P

SevenSeg_XmasTree_Layout

Plantilla de LaTeX para los encabezados de tarea del Tec

Prefiero usar LaTeX en vez de Office u otros similares libres (que no tengo) o de Google Docs. A veces en el Tec piden tareas con cierto encabezado, con el inconveniente de que te lo dan en Word para que lo copies y pegues. Dado que eso está fuera de mis posibilidades, hice esta versión del encabezado para usar con LaTex.

EncabezadoTec.zip

No es exactamente igual pero por el momento me funciona. Mejoras son muy bienvenidas. Además, el header incluye paquetes que he usado en varias ocasiones con diferentes fines (sans-serif, formato APA, texto en ecuaciones, idioma español, etc.)

Para generar el documento PDF (ya incluido como muestra en la carpeta ZIP):

$ pdflatex PlantillaTec.tex

Recomiendo este manual para aprender a usar LaTeX: The Not So Short Introduction to LaTeX – Purdue University

Cómo alejarse de Facebook

Ya me harté de la adicción por Facebook, esa obsesiva necesidad de entrar a ver qué pasa cada vez que hay la mínima sensación de aburrimiento. El semestre pasado probé desactivar la cuenta, mas reactivarla es tan fácil como iniciar sesión. Intenté usar algo como Chrome Nanny, que si bien es una gran idea que limita el tiempo u horario que pasas en páginas, se puede evadir fácilmente desactivando la extensión.

Se me ocurrió entonces cambiar mi password por algo que no recuerde pero que sea [difícilmente] recuperable para poder regresar en las siguientes vacaciones, si es que todavía lo considero necesario. Además, desactivar la cuenta para quitar la tentación a la gente de interactuar conmigo a través de esa red.

Propongo el siguiente procedimiento (barroco, muy de mí) para lograrlo:

  • * En la terminal conectar a través de pipes un número arbitrario de funciones hash arbitrarias en un orden arbitrario. Por ejemplo: $ sha256sum | md5sum | sha512sum | md5sum (esto ingresará el standard input de la terminal a la función sha256sum, cuyo standard output se redirecciona como standard input del primet md5sum, y así sucesivamente. Recomiendo terminar con md5sum porque el output es más pequeño). Dar enter para ejecutar el comando.
  • *  Buscar un texto arbitrario y colocar un fragmento arbitrario como standard input del comando descrito en el paso anterior. También funciona escribir lo que les venga en mente, entre más arbitrario mejor. Terminar con Enter y luego Ctrl + D (EOF). El resultado será la nueva contraseña, por ejemplo algo como 916f4c31aaa35d6b867dae9a7f54270d. La idea de estos dos pasos es generar una contraseña de una forma casi imposible de reproducir.
  • * Anotar a mano la nueva contraseña en un papel que se pueda esconder fácilmente. Cerrar o limpiar la terminal que se usó.
  • * Entrar a Facebook y cambiar la contraseña por la recién generada.
  • * Desactivar la cuenta en Account -> Account settings -> Security -> Deactivate your account. Dar la razón que se desee.
  • * Esconder el papel con la contraseña en un lugar difícil de alcanzar pero que no sea fácilmente destruible o extraviable.
  • * Listo, ya te alejaste de Facebook.

Si tienen más ideas colóquenlas en los comments :)

Saludos