Generador de personajes ficticios en Perl

De vez en cuando escribo historias de intriga para jugar a modo de rol con los amigos. Cuando uno escribe una historia llega un momento en que tiene que poner nombre a los personajes. Inventarse nombres ficticios y realistas es difícil. Cualquiera puede poner nombre a un personaje, pero si necesitas varios te puede llevar cierto tiempo.

Yo personalmente no tengo imaginación ninguna para poner nombre a las cosas, ya veis el título del blog. Así que hace tiempo busqué en Google listas de personas con nombre y apellido, listas de oficios y empleos, calles de una ciudad grande, y tipos de vía para lo que usé un callejero que encontré. Con eso alimenté una base de datos sqlite. Luego hice un sencillo módulo en Perl con unas cuantas funciones para utilizarla y listo: un versátil generador de personajes.

El programa funciona seleccionando al azar un nombre y dos apellidos; una vía y un nombre de vía; un número y una letra; y un oficio. Con eso compone nombre, dirección y ocupación del personaje. Además los nombres y los oficios no están filtrados, así al hacer una búsqueda al azar es más probable que aparezcan aquellos que sean más comunes, tal como ocurriría en la realidad.

Por ejemplo, en una historia sucede un juicio. Algunos personajes pueden tener relevancia más adelante, pero el resto sólo aparecen esta vez, y no merece la pena dedicarle mucho tiempo. Sin contar con que eso puede distraerte y hacerte perder otras ideas.

* Juez: Dña. Susana García Perón

* Comparecen por parte de la Acusación:
- Abogado: Blanca Gomez Alcala. Calle Kindelan 9, 6ºD.
- Testigos:
Sabina Diaz Ordoñez. Calle Blanqueo Viejo 12, 4ºD. Agente de seguros.
Hannah Rachel Montilla Madrid. Carretera De La Zubia 3, 2ºE. Recepcionista.
Domingo Bonillo Jimenez. Calle Aire 18, 2ºD. Médico forense.
Escolástico Herranz Barron. Cuesta Aljibe De Trillo 5, 5ºH. Herrero.

* Comparecen por parte de la Defensa:
- Abogado: Eduardo Martin Villar. Calle Pianista Rosa Sabater 18.
- Testigos:
Maria Isabel Almansa Flores. Calle Sancti Spiritus 2. Psicólogo.
Virginia Lopez Sedeno. Calle Francisco Hurtado Izquierdo 16, 6ºH. Deportista.

En otra ocasión lo que necesitamos es sólo una lista de empleados de una compañía, u otro tipo de lista donde no necesitamos todos los datos. Para eso hay variedad de funciones en el módulo:

getNombre: Antonio
getApellido: Jabalquinto
getNombreCompleto: Jose Tomas Dodero Ruiz
getCalle: Calle Tiberio
getCalleyNumero: Callejon Del Pretorio 14
getProfesion: Camarera
getPersona: Eloy Garcia Almendro. Calle Correo Viejo 8. Actor.

getNombresCompletos:
1.- M Cristina Lopez Barba
2.- Emilio Jesús Gomez Pescuezo
3.- Pablo Jimenez Caro
4.- Jose-Maria Montiel Garcia
5.- M Trinidad Jimenez Bravo

getPersonas:
1.- Carmen Maria Molero Padilla. Placeta Fernandez De Moratin 7, 4ºF. Guía turístico.
2.- Eugenia Jimenez Lopez. Calle Tio Vazquez 21. Abogado de oficio.
3.- Antonio Jose Veredas Ariza. Calle Pisas 23, 2ºC. Supervisor.
4.- Sonia Moreno Lachica Millan. Calle Albondon 24. Esteticista.
5.- Paloma Rider Jimenez. Calle Parra De San Cecilio 13. Recepcionista.

Para asignar edad sólo tendríamos que generar un número aleatorio en el margen que necesitemos. Cuidando, eso sí, de adaptar el oficio y la edad a las circunstancias. Por ejemplo no es realista que un niño de 12 años sea astronauta, o que una señora de 76 trabaje como herrero. No es imposible, pero desde luego sería inusual y eso distrae la atención del receptor, pues este pasa a fijarse más en el personaje que en la historia. Claro que a veces es eso lo que se pretende.

Sin embargo el módulo no tiene el cuenta ni las tildes ni la concordancia de género a la hora de asignar oficio, así un señor llamado Manolo podría aparecer como actriz. Hay que tener cuidado con eso y siempre repasar manualmente las listas que genere el programa.

Os dejo los archivos y la base de datos en esta dirección. Necesitaréis Perl y sqlite. No descarto más adelante convertirlo en un CGI y colgarlo online.
Artículo completo >>

Curva de respuesta del Dimmer IR

Hay varias entradas dedicadas a un proyecto para hacer un regulador de intensidad luminosa controlado (dimmer) por un mando a distancia infrarrojo. El proyecto tiene una parte hardware -pic, fuente de alimentación sin condensador, optotriac y triac-, y otra parte que es software. De la primera parte hablaremos más adelante.

Grosso modo, el software tiene que:
  • Recibir la señal de un mando NEC o compatible, ya lo explicamos en esta entrada, y modular la intensidad de luz alargando o acortando el tiempo de disparo del triac desde el paso por cero.
  • Al variar este tiempo varía el valor eficaz de la tensión, de lo que ya hablamos aquí.
  • Y cuando la bombilla recibe esa tensión eficaz luce más o menos, dependiendo de la temperatura del filamento que a su vez influye sobre su resistencia interna. Esto lo habíamos calculado también.


Intervalos regulares

Para que las subidas y bajadas de luz sean a intervalos regulares tenemos que compensar los efectos anteriores. Lo hacemos, programamos la interpolación en el PIC... y al probarlo nos sale un bodrio de pelotas. Al principio varía mucho y al final apenas cambia nada. ¿Qué ha pasado? Pues ha pasado que el ojo no es lineal sino que existe una relación entre la luz que recibe y cuánto tiene que variar para notar un cambio apreciable. Tiene lógica, con más luz el ojo reacciona, se adapta y disminuye la entrada, mientras más subamos la luz más se adapta. Por eso notamos más los cambios a intensidades bajas que a intensidades altas. La moraleja es que mientras más subamos la intensidad más grande el salto que debemos dar para el siguiente paso, porque si damos pasos iguales cada vez se notarán menos.

Eso se llama la ley de Weber, que acaba diciendo que la respuesta de los sentidos es logarítmica. Esta "ley" tiene una historia interesante y de ella hablaré en otra entrada. Para el ojo se cumple muy bien con baja intensidad de luz. Por ejemplo la escala de brillo de las estrellas es logarítmica y da muy buenos resultados. En el siguiente gráfico se ve muy bien (http://webvision.med.utah.edu/light_dark.html).


Sin embargo aquí Weber no funciona porque trabajamos con luz más fuerte. Nos interesa más otra ley que es la ley de Stevens. Stevens propone que la respuesta no es logarítmica sino potencial, se podría decir que la ley de Stevens sustituye a la de Weber. Para el coeficiente debemos hacer varias pruebas y quedarnos con el que más nos guste.


Cálculos



Vamos a explicar las operaciones en esta hoja de cálculo. Aunque puedes verla aquí arriba te recomiendo que la abras.

En primer lugar el valor inicial, columna A. Esta es la variable independiente, sobre la que nosotros actuamos en el programa. Cuando la tensión de red pasa por cero se inicializa TMR0 al valor que tenga esta variable. Y cuando TMR0 se desborda (llega a 255+1) se dispara el triac dejando pasar la corriente hasta que de nuevo pase por cero, momento en que el triac corta.

La frecuencia de reloj es de 4MHz (celda M2), o sea un millón de instrucciones por segundo. TMR0 debería incrementarse en una unidad cada µs, pero como tenemos aplicado un prescaler de 64 (celda M3) lo hace cada 64µs, como aparece en la celda P3.

La columna B son los pasos que faltan para llegar desde el valor inicial al desbordamiento. Mientras que la columna C es el tiempo en ms que tarda hasta el disparo. Obviamente nunca puede superar los 10ms porque es lo que dura el intervalo entre un paso por cero y el siguiente. Si TMR0 tarda más de 10ms en desbordarse quiere decir que se reiniciará (se le asignará el valor inicial) antes de que le dé tiempo a desbordarse, y por tanto la bombilla permanecerá apagada.

La D es la fase de la sinusoide donde se produce el disparo, en fracciones de pi. El semiperíodo va entre 0 y π, porque la onda completa va desde 0 a 2π. No la usamos en más cálculos.

La columna E es la tensión eficaz de la sinusoide si la truncamos durante ese tiempo. Uso la expresión que había calculado antes.

La F es la potencia de la bombilla, de acuerdo a cómo la calculamos en esta otra entrada. Hay que tener en cuenta que esa caracterización la hicimos para un tipo de bombilla en particular, y que podría no ser válida para otras. Los coeficientes que obtuvimos los he insertado en M9 y M10.

La siguiente columna F es la compensación que aplicamos por usar la Ley de Stevens con el coeficiente que hayamos puesto en M12. Esto varía con la bombilla y también con cada persona, así que haced varias pruebas y poned el que más os guste.

Por último I es la sensación luminosa expresada en tanto por ciento del máximo que salga. Nos servirá para normalizar el gráfico.


Curva de respuesta

El resultado es esta curva de respuesta. En el eje X está el valor inicial del reloj y en el Y es la sensación luminosa referida al máximo posible.



Fijaos que tiene mucho que ver con la que obtuvimos para la sinusoide. La contribución de la resistencia de la bombilla se nota sobre todo al principio. Y la contribución de Stevens lo que hace es estirar hacia arriba la curva. Así la parte del final está más aplastada que la del comienzo. Por lógica tiene que ser así porque ya dijimos que cuanto más intensidad de luz, más se protegen nuestros ojos y más nos cuesta apreciar el cambio.

La parte central tiene la pendiente muy pronunciada, porque es donde más área se concentra en una sinusoide, y un milisegundo de más o de menos en ese tiempo se deja notar mucho en la potencia que entregamos a la bombilla.


¿Es complicarse mucho para hacer un Dimmer? Hombre, pues sí, y además teniendo en cuenta que los parámetros cambian con cada bombilla y usuario. Para un aparato comercial claro que no es práctico; sin embargo para un diseño propio yo lo veo interesante.
Artículo completo >>

Simulación estadística del Risk

Si juegas al Risk esta entrada te puede gustar. Si no juegas al Risk pero quieres ver cómo se hace una simulación estadística por ordenador también te sirve. El Risk es un juego de estrategia y suerte. Para quien no lo conozca las batallas se deciden de acuerdo con repetidas tiradas de dados que hacen perder al atacante, al defensor o a ambos 1 o 2 ejércitos en cada una.

Lo que voy a hacer es estimar las probabilidades que tenemos de ganar o perder según el número de ejércitos atacantes y defensores. Se puede razonar analíticamente a partir de las probabilidades de cada tirada. Pero yo personalmente prefiero que el ordenador lo calcule mientras hago otras cosas, y después ya analizaré los resultados.

En una simulación por ordenador hay tres etapas básicas.
  1. Definir el algoritmo y programarlo.
  2. Analizar los datos obtenidos.
  3. Presentar los resultados.

Artículo completo >>

Escáner nuevo y difracción

El pasado fin de semana los vecinos nos dieron una multifunción vieja. Una Lexmark X1270. Hay que reconocer que es buena, pero como todas las de tinta, los cartuchos valen una pasta y duran un suspiro. En fin que como impresora no me serviría de mucho. Pero mi ética me prohíbe desguazar cosas que aún funcionan (excepto los matamoscas de 3€, hola Salva), antes la dejo junto a un contenedor.

Sin embargo me llamó la atención que el escáner es compatible con Linux, no del todo pero sí más que el que tenía. Mi escáner era un Canon para puerto paralelo que apenas funciona con Linux, y tenía casi diez años. Me propuse aprovechar el escáner de la X1270.

Estas multifunción no son más que una impresora a la que se le ha pegado por encima un escáner. De hecho una vez separados son totalmente independientes, sólo comparten la placa principal (el cerebro) donde está la alimentación y la clavija USB.
Artículo completo >>

Utilizar un micrófono electret

Habíamos publicado en esta entrada los pasos a la hora de registrar una señal, concretamente una señal sonora. Habíamos planteado más o menos estos:
  1. Crear la señal en las mejores condiciones: adecuar el experimento y el entorno circundante para maximizar la señal útil y minimizar otras señales y el ruido.
  2. Captar la señal generada lo mejor posible. Un buen micrófono, con una respuesta adecuada a lo que queremos, tanto en frecuencia como en presión sonora.
  3. Transferir la señal utilizando canales poco ruidosos (conductores apantallados).
  4. Cuidar la electrónica para no amplificar señales no deseadas.
  5. Preparar los filtros y procesado posterior. IMPORTANTE: hay que captar la señal entera y después, sólo después filtrarla y procesarla. Si primero la procesamos perdemos sin remedio la señal original y con ella matices que más tarde podríamos necesitar.
  6. Utilizar un medio de registro de calidad apropiada, ya sea en soporte físico o electrónico.

Vamos a ocuparnos en esta entrada del punto 2: utilizar un micro adecuado y bien preparado. Le prestaremos especial atención a las cápsulas del tipo electret, cuya relación calidad/precio es de lo mejorcito del mercado.

Artículo completo >>

Matamoscas eléctrónico: flyback

Hace unas semanas pedí por correo un aparato poco común en España, o por lo menos yo no lo he visto nunca. El caso es que lo pedí por curiosidad y porque costaba 4€. Se trata de un matamoscas electrónico, y se supone que fríe a los insectos con una descarga. Es parecido una raqueta de tenis, pero tiene tres niveles de malla. Las dos mallas exteriores tiene unos huecos grandes para permitir el paso del bicho hacia la malla interior, que es de un mallado mucho más tupido. En cuanto la víctima toca ambas mallas recibe una descarga de más de 600V.

La pregunta es ¿cómo obtiene 600V si se alimenta con dos pilas de 1.5V? Creo que no tardé ni diez minutos en desmontarlo. Veamos cómo funciona.
Artículo completo >>