lunes, 12 de marzo de 2018

Multi-agent Building System using an Architectural Plan Language and some other Microlanguages

Hello! So long time!

I would like to share with you the following idea of a building system. My be an already existent one, but any way... it is just an idea.


Thinking about some building printing systems, suddenly an automated Lego-based building system came up in my mind. This system could use a multi-agent robotic system to orchestrate the building process. The problem is, how to guide the multi-agent system to proceed?


One solution, is to use some ADL (Architecture Description Language) as a visual language to describe the architectural, electric and plumbing/piping blueprint, an interior design description (may be using a CSS based description linked to the previous ADL definitions), schedule of the project (including human and material resources) and a contingency plan to be translated into a high level optimized language, perhaps based on URBI, to guide the execution of the multi-agent system along the building process. This multi-agent guidance process should be performed by a Universal Controller Module (UCM) fed up with some necessary inputs, described below:


  • Main human responsible of the building process, to be feed-backed  with main reports generated by the UCM. 
  • Current availability of materials in units, volume or mass.
  • Which responsible units (robots) are in charge of which material.
  • Which responsible humans are in charge of inspect the robotic units. (to be feed-backed with the real-time reports generated by the UCM through a web-app or mobile-app)
  • Time clock punching of human inspectors, to keep track the predefined schedule.
  • Security and quality standards to follow, perhaps described using some microlanguage.
To summarize the idea, the building process using this system is:

  1. Using some ADL:
    1. Define the architectural blueprint.
    2. Define the electric blueprint.
    3. Define the plumbing/piping blueprint.
    4. Develop an interior design description.
    5. Define a scheduling of the project.
    6. Define a contingency plan.
  2. Compile the ADL definitions to generate an URBI based code to be executed by the multi-agent system.
  3. Feed up the UCM with the compiled program and the rest of the just mentioned parameters (humans in charge, material availability, time clock punching and security and quality standards).
  4. Execute the building process.
What else? Your comments are welcome!

domingo, 12 de febrero de 2017

passseder - A new way to generate passwords


PassSeeder 1.0

About

passseeder is a language to generate passwords beginning from a set of alphanumeric list words (seeds) and a string of instructions (generator). To build the generator string there is a pre-defined set of instructions and a constrained range of values for parameters. We will call core word to each word in seeds.

Next, it is shown the syntax to build the generator string by using BNF:

generator = L+num + (M) + core
core = J+symb + (T+num) + W+id + core

Where...
  • L is to limit the length of the password to generate, defined by num.
  • num is a natural number between 1 (included) to infinity.
  • M is for mix in a loop fashion throughout the core words.
  • core is a sequence that defines how to traverse each core word.
  • J is the way to jump characters in a core word, defined by symb.
  • T is the way to take a certain number of character in each jump, defined by num.
  • W represents the inclusion of a core words, identify by id.
  • id is the identifier of a core word, which is a natural number.
symb could be:
  • 1...infinity: jumping of 1, 2, 3, ..., infinity.
  • f: Jumps by following Fibonacci sequence.
  • a: arithmetic progression.
  • g: geometric progression.

Example

*********************************************
****INPUTS***********************************
*** seeds    : hello,world,1234567890,password
*** generator: L16MJ2W1J2W2J2W3J2W4
*********************************************
*** L16     : Length of 16 characters.
*** M       : Mixed (iterate) among core words in seeds.
*** J2 W1   : Pick one character each 2 ones of word 1 (hello).
*** J2 W2   : Pick one character each 2 ones of word 2 (world).
*** J2 W3   : Pick one character each 2 ones of word 3 (1234567890).
*** J2 W4   : Pick one character each 2 ones of word 4 (password).
*********************************************
****OUTPUTS**********************************
** new password: eo2all4shw6olr8d
**********************************

Another example:

  • Seeds    : hello,world,1234567890,password
  • Generator: L32MJ2W1JgW2J1W3JaW4
  • New password: eo2slr3whd4rll5poo6ser7wld8rhl9p

License

passseeder, password generator.
Copyright (C) 2017 Sebastián A. Moraga Garrido.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

NOTE: I have implemented both a web and a nodejs versions of this algorithm. If you want it, please, leave a comment in this post.

Try it bellow! Use inputs from examples above! :-)

Inputs: Seeds:

Generator:

Password: ****************
Error: ****************
Copyright (C) 2017 Sebastián A. Moraga Garrido - GNU-GPL

viernes, 6 de septiembre de 2013

Embeber Archivos a PDF Generado usando LaTeX

Nunca pensé que se podría hacer algo así, pero sí, se puede y resulta muy práctico. Esto se trata acerca de embeber un archivo en un PDF generado desde LaTeX. ¿Qué les parece?

Quizás se estén preguntando, bueno, ¿y para qué querría embeber un archivo en un PDF? La respuesta resulta muy simple, y voy a reflejarlo con algunas situaciones:

  1. Se está generando un resumen estadístico que se necesita entregar -- digitalmente, por supuesto. Pero también, se desea adjuntar al resumen una planilla de cálculo muy completa con todos los datos brutos y análisis realizados.
  2. Se ha generado un reporte o libro sobre algún tema, y se envía a algún revisor o editor que, eventualmente, deberá realizar algunas modificaciones sobre él. Como ha sido hecho en LaTeX, se necesita adjuntar los fuentes y otros archivos.

En general, ante cualquier situación donde se requiera acompañar el PDF con información extra, es posible embeber tales archivos en el mismísimo PDF generado utilizando el siguiente comando:
\usepackage{embedfile} 
\embedfile{archivo-1-a-embeber.abc} 
\embedfile{archivo-2-a-embeber.abc}  
\embedfile{archivo-3-a-embeber.abc}  
· · ·
 \embedfile{archivo-N-a-embeber.abc} 

miércoles, 24 de julio de 2013

Transmisión de Datos con Menor Pérdida por WiFi

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

Tomando la idea del artículo «Códigos QR para mejorar la encriptación óptica y proteger información confidencial», el otro día me preguntaba qué otra aplicación se le podría dar para la transmisión de datos, a parte de la mencionada en el artículo Transmisión de Datos de Mayor Densidad por Fibra Óptica, y comencé a imaginar un problema donde las virtudes de corrección de datos del QR se podría aplicar, llegando a visualizar la incómoda situación que se da cuando uno está ni muy lejos ni muy cerca de una red WiFi; mientras más lejos de una red de estas características, los paquetes de datos llegan más dañados, entonces, ¿en cuánto mejoraría si los paquetes fuesen envueltos en un QR?
Reflexionando al respecto, en este caso se podría utilizar sólo una conexión UDP, donde sólo se transmitan paquetes apropiadamente etiquetados con un id secuencial, para llevar una seguidilla, y en caso de que un paquete llegue con una distorsión tal que sea imposible decodificarlo, se vuelve a pedir por su id. En este último caso se aplicaría algo similar a una conexión TCP.
Ya he comenzado a trabajar en un protocolo, inspirado en Tor, a ver dónde llego. Lo he llamado InternetQRLayer.
A continuación, dejo un diagrama de esta idea.
InternetQRLayer project.
Diagrama del protocolo utilizado en InternetQRLayer.
Sus comentarios e ideas, por favor.

Transmisión de Datos de Mayor Densidad por Fibra Óptica

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

Hace un tiempo, buscaba algunas aplicaciones para los códigos QR. Finalmente, en mi cerebro escuché un ¡clic!, y visualicé transferencia de datos entre celulares utilizando este medio. De forma entusiasta comencé a buscar qué había hecho ya al respecto que fuera similar, y me encontré con algo que no era similar a la idea, sino que ¡era idéntico! En el artículo «QuickeR: Using video QR codes to transfer data» se describe mi tristeza.
No quise ser derrotista, por lo que comencé a buscar alguna variante útil. Un día, leyendo algunas noticias, me encontré con el artículo titulado «Códigos QR para mejorar la encriptación óptica y proteger información confidencial», el cual hablaba acerca de utilizar el código QR como un contenedor de datos para enviarlos encriptados ópticamente y, aunque llegue distorsionado, decodificarlo en el receptor aprovechando las virtudes de corrección de errores del QR. A partir de esta última idea, se podrían mezclar con dos más, a saber el expuesto en el artículo QR de Mayor Densidad y el «High capacity colored two dimensional codes» de Grillo et al, utilizando un QR de mayor densidad, expuesto en el primer artículo, extendiéndolo utilizando colores, de tal forma que, en teoría, se podría densificar aún más. Esto último, eventualmente, sería posible debido a que la transmisión del código se haría a través de un medio medianamente controlado como lo es la fibra óptica.
Las preguntas que surgen de esta idea son:
  • ¿Qué tasa de transferencia se lograría?
  • ¿Se podría reutilizar la infraestructura de fibra óptica actual con un mínimo de modificaciones?
¿Alguna idea?

QR de Mayor Densidad

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

El código QR convencional trabaja de forma binaria, codificando sus datos a través de bits representados mediante formas cuadradas en blanco y negro. En «High capacity colored two dimensional codes» de Grillo et al, se discute una extensión del QR utilizando color. De esta forma, los autores densifican la cantidad de datos a codificar en la misma área del QR. Sin embargo, existe un problema al utilizar colores: la luz del ambiente. Si el problema es la luz, entonces ¡por qué no descartarla! Entonces, ¿cómo densificar la codificación de datos de un QR?
Pensando en esta última cuestión, la respuesta vino de sopetón a mi mente, y me dije «¡si el problema es la luz, entonces usemos la forma!».
En un curso de la universidad donde trabajo, este semestre trabajamos junto a un alumno en esta idea, y conseguimos algunos resultados iniciales. Elegimos estratégicamente formas tales que fueran de simple identificación por parte de algún software, consiguiendo un sistema de representación en base 5 -- representándose 5 formas diferentes. Uno de los resultados más destacables es el hecho de que un caracter ASCII se puede codificar con 4 bits en base 5, consiguiendo, en forma teórica, doblar la densidad de un QR convencional.
A continuación, dejo dos imágenes que codifican 1 Juan 4:8, una versión usando el código QR y la otra el código propuesto. Es necesario aclarar que la imagen del código propuesto codifica sólo los datos ASCII en bruto, sin información de control ni de corrección de error ni datos para corregir distorsiones.
El que no ama no conoce a Dios, porque Dios es amor.
1 Juan 4:8 versión código QR.

El que no ama no conoce a Dios, porque Dios es amor.
1 Juan 4:8 versión código propuesto.


Compresión de Datos Utilizando Poliominós

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

Específicamente, pentominós, los que podrían ofrecer una buena alternativa para representar formas, basándose en la morfología matemática.
Esta idea nace como una alternativa a la compresión utilizando las matrices Sudoku, discutida en el artículo Compresión de Datos Utilizando Matrices Sudoku -- estos problemas me estaban causando demasiados cortocircuitos cerebrales; por eso consideré esta idea, como una nueva vía.
La idea principal es implementar un algoritmo cuya entrada sea un flujo de bits, y cuya salida sea otro con ciertas propiedades que a continuación explico.
Internamente, el algoritmo va tomando de a m bits en m bits, conformando matrices binarias de nxn que llamaremos matriz T. A partir de T, se busca «encajar» poliominós donde existan conjuntos de bits encendidos (i.e. unos), generando un conjunto de poliominós utilizados que llamaremos P. De esta manera, sólo se necesitará codificar no toda la matriz, sino sólo el conjunto P.

Es necesario mencionar que en T pueden surgir tres situaciones. La primera es que en T existan mayor cantidad de unos que de ceros. En este caso, la cantidad de poliominós necesarios para cubrir la superficie de T será grande. Una solución simple, es invertir los bits de T. La segunda situación, es que ocurra lo contrario a la primera. En este caso, no es necesario hacer algo. Finalmente, la tercera situación es que vengan tantos unos como ceros en igual cantidad.

Los problemas que surgen de esta propuesta son los siguientes:
  • Se necesita encontrar la combinación óptima de poliominós p en P sobre T, tal que ||P|| sea el mínimo en U, donde U es el universo de conjuntos de poliominós.
  • Se requiere encontrar una representación óptima para p.
¿Alguna idea?

Compresión de Datos Utilizando Matrices Sudoku

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

El objetivo de esta idea es conseguir un algoritmo que dado un conjunto de bytes de entrada, genere otro flujo de salida con ciertas propiedades que explico a continuación.
El algoritmo, en una primera versión, internamente va tomando subconjuntos de 81 bytes, conformando matrices de 9x9 que llamaremos matriz T (el tamaño del tablero de Sudoku tradicional; otra versión podría extenderse a otros tamaños). Posteriormente, a partir de T se busca un conjunto de matrices Sudoku S tal que aplicada alguna función, como sumas y multiplicaciones (u otro operador), se pueda reconstruir T.
Dada la naturaleza del Sudoku, es posible dejar sólo algunos datos en las matrices s en S. De esta forma, la representación binaria de s pudiera reducirse considerablemente, y no tan sólo porque, eventualmente, serían menos números, sino porque los números van de 1 a 9, representables con 4 bits.

Algunos pequeños gigantes problemas son los siguientes:

  • La búsqueda del conjunto S óptimo es un problema de combinación, resultando en un algoritmo exponencial. Se podría tratar con metaheurísticas, pero no garantizaría completitud.
  • Suponiendo que se ha encontrado un S óptimo, al momento de descomprimir, cada s debe ser reconstruido. Los mejores algoritmos para resolver Sudokus aún son exponenciales.
¿Alguna idea?

Obtención de Información a través de Datos Aleatorios

He querido y estoy trabajando en algunas ideas que me parecen muy interesantes -- claro, de lo contrario no las pensaría ni trabajaría en ellas... el cerebro algunas veces es muy antojado.
En los siguientes artículos, quisiera ir dando a conocer estas ideas una a una.
La primera la presento en las siguientes líneas.

Hace un par de años atrás, alrededor de 2007, más o menos, comencé a trabajar en una idea basadas en algunos conceptos de The Global Consciousness Project, el código de la Biblia e hipótesis de Masaru Emoto. La idea era hacer lo mismo que hacían con el código de la Biblia (aquí la relación con aquel tema), pero en lugar de utilizar como entrada la Biblia, utilizaba datos generados aleatoriamente. Específicamente, desde el servicio «Quantum Random Bit Generator Service», que envía números generados a través de dispositivos que utilizan técnicas cuánticas. La razón de utilizar números generados cuánticamente está basada en las ideas de Emoto, las cuales apuntan a que la mente humana, las ideas, las intenciones de un individuo, o un grupo de ellos, afectan la materia que le rodea. Por lo tanto, y a nivel cuántico aún con mayor razón, de alguna manera los datos aleatorios generados cuánticamente codifican las intenciones de los individuos que le rodean. 
A partir de los datos aleatorios obtenidos, a través de algoritmos similares a los utilizados para obtener códigos de la Biblia, pretendía extraer información, buscando patrones ASCII (nombres, principalmente) en una gigantezca matriz aleatoria. 
Mi hipótesis era aún es que a partir de tales datos y funciones matemáticas y algoritmos es posible extraer información acerca de las intenciones o impresiones de algún grupo de personas.
Yendo aún más allá, quizás a través de métodos de análisis matemático, estadístico o algorítmico complejos se podría llegar a filtrar intenciones, pensamientos o algo más acerca de personas de forma individual. Quizás, esto se podría comparar a una emisora transmitiendo su señal -- estos serían los individuos -- y una radio que capta la señal transmitida -- esto sería el sistema propuesto.
Este año, me vengo a enterar, gracias a que mi amigo +Ramiro Rebolledo comentó este artículo, que alguien más ha pensado algo muy similar.
Actualmente, he quedado varado en cuál es la codificación adecuada para los datos y cuál es el análisis adecuado para filtrar lo que se necesita... ¿alguna idea?

martes, 23 de julio de 2013

El Conocer el Conocer

En el capítulo uno del libro El Árbol del Conocimiento de Humberto Maturana, el autor plantea interesantes ideas sobre el verdadero conocer de la realidad.

Normalmente, nosotros, los seres humanos, aceptamos la realidad tal y cual la percibimos, creando dogmas y certidumbres innegables al respecto; de los sentidos experimentamos la realidad, y la asimilamos y aceptamos. Los sistemas educacionales actuales nos presentan hechos, en su mayoría dogmáticos, que debemos aceptar, transformando nuestras estructuras mentales al consenso universal humano, descrito más o menos por el concepto istina en la lengua rusa, que da a entender la acción de adaptar nuestras estructuras mentales al mundo que nos rodea. De esta forma, el sistema educacional enseña «istinas» al estudiante a través de hechos ya digeridos... evitando dos proceso cognitivos trascendentales en el ser humano: Experiencia y Reflexión.

Maturana plantea que cada individuo humano percibe el mundo según su mundo. ¿Qué quiere decir esto? Cada individuo es en sí un mundo de mundos. Esto lo podríamos resumir en el concepto de metamundo. Maturana al considerar  a cada uno de nosotros como un metamundo, habla acerca de que cada uno de nosotros poseemos estructuras mentales propias que nos hace ser únicos. Tales estructuras han sido moldeadas por vivencias a lo largo de nuestra vida o por la misma biología. Maturana ejemplifica esto a través de dos experimentos: El punto ciego del ojo; y, la percepción de los colores. Con respecto a este último, no sólo factores biológicos pueden alterar la forma en que reconocemos o entendemos los colores, sino que también factores lingüísticos alteran la manera en que los reconocemos; no en todas las lenguas humanas existen palabras para distinguir entre el verde y el azul, o el negro y el azul.

Es increíble, pero el consenso social es a crear certidumbre acerca de lo que se percibe. Bajo este paradigma de vida y de educación, evitamos la reflexión, y sólo nos concentramos en la acción, tan propia de nuestra cultura occidental. Finalmente, aprendemos a no pensar, sólo a aceptar. ¿Qué sociedad crece virtuosa así? Quizás esto explica lo viciosa que es.

A través de los sentidos captamos todo lo que nos rodea. Sin embargo, esto es sólo una pequeña parte de la realidad. Peor aún, es lo que nuestros sentidos -- con todas sus limitaciones y falencias -- nos dicen acerca de la realidad; no es la realidad misma. Aceptar que es la realidad misma sería un error horroroso: pero, irónicamente, del cotidiano vivir. En otras palabras, vivimos sumidos en el error, quedándonos sentados esperando a recibir el dogma del día.

Esto me recuerda a la caverna de Platón, donde las sombras serían la realidad que nos hacen ver de los sentidos.

El proceso de experiencia-reflexión rompe este esquema. Sin embargo, requiere del cambio cultural de nuestra sociedad. Por una parte, la experiencia mueve al individuo al hacer, al buscar, al observar y, por otra parte, la reflexión ayuda al individuo a conocer cómo conocer y, finalmente, a conocer. Como lo explica Maturana, el proceso de reflexión es similar al peculiar momento cuando un ser humano observa su reflejo en un espejo, permitiéndole ver su propio yo físico; mismo para un nivel intelectual y espiritual. La reflexión permite sacar al hombre de la caverna y liberarlo de la visión de sólo sombras, haciendo que vea la realidad tal cual.

Según Maturana, cada reflexión es un mundo en la mano. Esto resulta especialmente interesante, pues cada reflexión, entonces, llega a ser parte de nuestras estructuras biológicas mentales, por lo tanto, somos un metamundo. Sin embargo, todo parte de alguna parte, esto es, de una idea que alguien alguna vez a dicho. Tal idea inicial ha sido parte del mundo de otro individuo que ha sido transmitido a través de algo maravilloso, del que los humanos nos jactamos por su complejidad. Me refiero al lenguaje, que corresponde al puente de tránsito entre metamundos. Sin él, viviríamos en una sociedad inválida, incolora, inmóvil. Con él, es posible hacer intercambiar mundos, ideas y generar reflexiones a través de diálogos, ya sea, entre metamundos o de forma imaginaria, es decir con el mismo metamundo.

De lo anterior, en conclusión, la única verdad es la que no se percibe por los sentidos; similar a lo que dice Antoine de Saint-Exupéry en su obra El Principito:
Solo se ve bien con el corazón. Lo esencial es invisible a los ojos.
Quizás, esto último de un atisbo acerca de lo verdadero. Si los sentidos impiden ver la realidad, entonces la realidad no se mira con los sentidos, sino que con la mente; esta es la forma en cómo se conoce lo Divino.

domingo, 21 de julio de 2013

Virtua-Vida

Para entender este post, primero, por favor, leer "Descubrir al creador" de +Ramiro Rebolledo. De hecho, en op. cit. está el mismo comentario que a continuación dejo a ustedes.

Ya es conocido que existen varios intentos por replicar el funcionamiento neuronal de forma muy precisa; creo que así como vamos (y considerando ese impactante hallazgo del Blue Gene de IBM respecto de la generación espontánea de impulsos eléctricos espontáneos -- por supuesto, simulados), en una década más ya se encontrarán maneras primitivas de replicar la consciencia en las máquinas.

Con lo anterior ya conseguido por nuestra sociedad, ¿qué será lo primero en que pensarán las máquinas de forma autónoma?

El santo grial de la IA es crear un fiel reflejo de nosotros mismos en una máquina. Esta búsqueda implica llegar a conocernos profundamente a nosotros mismos; entender cómo emerge la inteligencia y la consciencia a partir de un sistema tan maravillosa y prolijamente diseñado como lo es el sistema nervioso. ¿Estas criaturas de seguro harían los mismo si se les deja ser en su mundo virtual? ¿En algún punto de su historia se agruparán en tribus, luego en villas, luego en reinos? ¿Surgirán grandes civilizaciones que aporten conocimiento a su civilización virtual? ¿Se crearían ciencias que tengan equivalencia a las nuestras, tales como la matemática, la física, la química, las ciencias de la computación? Con esto último, ¿sentirán la necesidad de entenderse a ellos mismos y comenzarán a buscar la forma de volver a replicarse en criaturas artificiales -- desde su punto de vista, claro está -- y observar cómo su creación evoluciona tal y cual como nosotros, eventualmente, lo haríamos?

Consideremos los siguientes supuestos: Supongamos que en algún momento de nuestra historia se consigue crear un simulador H que posee la capacidad de simular de forma exacta a un ser humano. Supongamos que existe otro simulador R que consigue simular de forma exacta la realidad; simula la naturaleza, la vida microbiana, la vida vegetal, la vida animal, la atmósfera y el sistema solar y el firmamento. Supongamos que se lanza la ejecución de esta simulación de R con un hombre H1 y una mujer H2 en un entorno donde R está en completo equilibrio, y H1 y H2 no tienen fallas genéticas ni desequilibrios neuronales. Dado que el simulador H respeta todas las leyes biológicas, físicas, químicas y genéticas que nos rigen, y si no hubiese intervención de parte de nosotros, los creadores, en la simulación ni de R ni de H, ¿qué historia nos contaría estas simulaciones? ¿Habría una Babilonia, un Israel, una Roma, una India, una Grecia, una Persia, un Egipto, un pueblo Maya o Inca en su historia? Ahora, supongamos que sólo en algunas ocasiones intervenimos, y supongamos que sí surgen civilizaciones equivalentes a las antes mencionadas. ¿Qué ocurriría, por ejemplo, si la civilización equivalente a la griega nunca fuese destruida, y que todo su conocimiento se preservara y se acrecentara, incluyendo el libre ejercicio de su ideal democrático, sin la destrucción y perpetua pérdida que implicaron las guerras con la "virtua-Roma"? ¿Qué ocurriría si en la simulación surgiera un equivalente a la Biblioteca de Alejandría pero que jamás fuese destruida? Personalmente, me inquieta el conocer a qué llegarían esas civilizaciones simuladas en el año 2000 d.C. de nuestra realidad; qué avances tendrían, qué descubrimientos habrían hecho. Además, ¿en qué se encontrarían las civilizaciones de nuestro continente si jamás fuesen perturbados por otras de otros continentes? ¿en qué estarían y cuánto avance tendrían? ¿qué tecnologías habrían surgido de sus mentes?. Finalmente, ¿qué religiones, filosofías e ideologías sociales existirían?

Hablando hipotéticamente, este tipo de tecnologías de simulación se podrían aprovechar para crear proyecciones alternativas de la ciencia y el arte para nuestra realidad; dado que los tiempos virtuales no necesariamente deben ser equivalentes a los tiempos reales, la simulación se podría acelerar para conocer y estudiar tecnologías futuras (en la simulación) que aún no existen en nuestra realidad, y así traer desde el "virtua-futuro" beneficios para nuestra sociedad...o maleficios.

Ahora, dado que H y R son réplicas, se podría levantar fuertes discusiones polémicas sobre si de H emerge consciencia, y decretar que H es en sí vida, aunque virtual, pero vida al fin y al cabo, y que JUGAR (en el sentido literal de la palabra) con ellos es absolutamente inmoral y totalmente anti-ético. Pero, si, eventualmente, se llegara a esa conclusión y las instancias jurídicas que decreten anti-ética las simulaciones decreten terminar con ellas, ¿sería ético apagar todas las simulaciones que los centros de investigación de "virtua-vida" para finalizar esta posible inmoralidad, poniendo fin a todas las simulaciones H que fueron decretadas vida?

jueves, 2 de agosto de 2012

Pensamiento sobre las Ciencias de la Computación

Una breve cita de José Galaviz Casas sobre las Ciencias de la Computación:
Las matemáticas y la física tienen siglos de existencia, son grandes montañas de conocimiento que la humanidad ha construido piedra por piedra para poder ver más lejos en el horizonte y sin embargo nos siguen sorprendiendo todos los días, seguimos acarreando piedras; lo mejor de la ciencia de la computación está aun por venir…Probablemente las futuras generaciones sonrían al pensarnos ingenuos por no percatarnos de una gran roca que estaba allí y nunca vimos, como sonreímos cuando nos enteramos de que los griegos pasaron de largo junto al álgebra sin verla.
Tomado desde www.revista.unam.mx, publicado el 10 de septiembre de 2004 Vol. 5, No. 7 ISSN: 1607 - 6079.

lunes, 12 de marzo de 2012

Función para Calcular Calificaciones con Nivel de Complejidad

Estimados Cyber-lectores:

  Hace un tiempo atrás, estuve discutiendo el asunto de los niveles de exigencia para las evaluaciones con uno de mis colegas en el trabajo; él me comentaba que era necesario utilizar una tabla de valores para el cálculo de la calificación. Sin embargo, al plantear el problema, con el colega decidimos trabajar en una función matemática que hiciera la misma correlación. Investigando, descubrimos que la tabla se había calculado en base a una función definida por trazos, utilizando dos funciones lineales, definidas en el punto donde se parametriza el nivel de exigencia requerido. El modelo propuesto aquí, se define de la misma forma, pero en lugar de ser dos líneas rectas, corresponde a una curva, que "curva" la misma escala lineal de evaluación común (nivel de exigencia al 60%).

  La función, corresponde a la siguiente:

f(x) = ((24-n+36)/2400)x² + ((n-36)/24)x

donde n es el nivel de exigencia requerido.

Para ejemplificar lo anterior, a continuación se muestra una figura donde se contrastan las curvas con n=60 (f1(x)) y n = 51 (f2(x)):



  A continuación, dejo a ustedes una miniaplicación en Javascript para calcular una calificación en el rango de 0-100, parametrizando el nivel de exigencia (por defecto en 51):









Nivel de Exigencia:

Calificación Obtenida:











¡Saludos!

miércoles, 4 de enero de 2012

Fórmula para Crecer

Estimados Ciber-lectores, quisiera compartir con ustedes una excelente reflexión que hace un par de días atrás me hizo llegar mi esposa; esta reflexión la ha escrito la gran Pilar Sordo y trata sobre una muy buena fórmula para este año. A continuación, se las comparto:

FÓRMULA PARA CRECER
Por Pilar Sordo

Mi percepción a medida que envejezco es que no hay años malos. Hay años de fuertes aprendizajes y otros que son como un recreo, pero malos no son. Creo firmemente que la forma en que se debería evaluar un año tendría más que ver con cuánto fuimos capaces de amar, de perdonar, de reír, de aprender cosas nuevas, de haber desafiado nuestros egos y nuestros apegos.
Por eso, no debiéramos tenerle miedo al sufrimiento ni al tan temido fracaso, porque ambos son sólo instancias de aprendizaje.
Nos cuesta mucho entender que la vida y el cómo vivirla depende de nosotros, el cómo enganchamos con las cosas que no queremos, depende sólo del cultivo de la voluntad. Si no me gusta la vida que tengo, deberé desarrollar las estrategias para cambiarla, pero está en mi voluntad el poder hacerlo. "Ser feliz es una decisión", no nos olvidemos de eso.
Entonces, con estos criterios me preguntaba qué tenía que hacer yo para poder construir un buen año 2011/2012 porque todos estamos en el camino de aprender todos los días a ser mejores y de entender que a esta vida vinimos a tres cosas:
  • a aprender a amar.
  • a dejar huella.
  • a ser felices.
En esas tres cosas debiéramos trabajar todos los días, el tema es cómo y creo que hay tres factores que ayudan en estos puntos:
  1. Aprender a amar la responsabilidad como una instancia de crecimiento. El trabajo sea remunerado o no, dignifica el alma y el espíritu y nos hace bien en nuestra salud mental. En Chile el significado del cansancio es visto como algo negativo de lo cual debemos deshacernos y no cómo el privilegio de estar cansados porque eso significa que estamos entregando lo mejor de nosotros. A esta tierra vinimos a cansarnos, para dormir tenemos siglos después.
  2. Valorar la libertad como una forma de vencerme a mi misma y entender que ser libre no es hacer lo que yo quiero. Quizás el 2012 deberíamos ejercer nuestra libertad haciendo lo que debemos con placer y decir que estamos felizmente agotados y así poder amar más y mejor.
  3. El tercer y último punto a cultivar durante el 2012 es el desarrollo de la fuerza de voluntad, ese maravilloso talento de poder esperar, de postergar gratificaciones inmediatas en pos de cosas mejores. Este a mi juicio es el gran elemento a educar no sólo el 2012 sino que durante todo el siglo XXI.
Es dentro de todo este trabajo donde nos debiéramos concentrar en:
  • Sentarnos en la mesa en familia, mínimo una vez a la semana, ojala todos los días.
  • Apagar las pantallas mientras estamos comiendo, no contestar teléfonos, sentir que los únicos ruidos que se escuchan sean los de nuestras voces.
  • Hacernos cariño y tratarnos bien como país y como familia, saludarnos en los ascensores, saludar a los guardias, a los choferes de las micros, sonreír por lo menos una o varias veces al día. Querernos.
  • Crear dentro de nuestras casas, hogares. Y para eso tiene que haber olor a comida, cojines aplastados y hasta manchados, cierto desorden que acuse que ahí hay vida. Nuestras casas, independientes de los recursos, se están volviendo demasiado perfectas que parece que nadie puede vivir adentro.
  • Tengamos contacto con la naturaleza, juguemos, riamos y démonos el tiempo de compartir con los abuelos, imprimámosle las fotos para que las vean como a ellos les gusta y disfrutemos de sus sabidurías. Obliguemos a nuestros hijos a compartir con ellos, así entenderán sus historias.
  • Tratemos de crecer en lo espiritual, cualquiera sea la visión de ello. La trascendencia y el darle sentido a lo que hacemos tiene que ver con la inteligencia del nuevo siglo: la inteligencia espiritual.
  • Tratemos de dosificar la tecnología y demos paso a la conversación, a los juegos "antiguos", a los encuentros familiares, a los encuentros con amigos, dentro de casa. Valoremos la intimidad, el calor y el amor dentro de nuestras familias.
Si logramos trabajar en estos puntos y yo me comprometo a intentarlo habremos decretado ser felices, lo cual no nos exime de los problemas, pero nos hace entender que la única diferencia entre alguien feliz o no, no tiene que ver con los problemas que tengamos sino que con la ACTITUD con la cual enfrentemos lo que nos toca.
El 2012 vendrá con lo que tenga que venir, todo será necesario y maravilloso, lo bueno, lo malo, lo bonito y lo feo, acojámoslo con amor y con gratitud y con el alma abierta a todo lo que tendremos que aprender de él.

miércoles, 17 de agosto de 2011

¡¡¡No Cuadro, sino Tabla!!! ...el típico dolor de cabeza en LaTeX.

Para nosotros, los hispanohablantes de latinoamérica, es en ocasiones desagradable que en LaTeX salga "Cuadro" en lugar de "Tabla" cuando insertamos datos representados en tablas. Existen varias alternativas, como el típico:

\renewcommand{\tablename}{Tabla}

ó

\def\tablename{Tabla}

Sin embargo, esta solución no siempre funciona con todos los formatos. La solución es más simple que esta, y siempre había estado justo frente a nuestras narices. El paquete "babel" ofrece varias alternativas, y entre ellas la panacea a este problema. Pero basta de palabras, y veamos cómo cambiar el nombre de "Cuadro" por "Tabla" sin más penas ni llantos:

\usepackage[spanish,es-tabla]{babel}

...con la opción "es-tabla" el paquete "babel" realiza internamente el cambio, independiente del "documentclass" que estemos utilizando.

Aquí dejo un enlace para ver otras opciones del paquete en cuestión.

jueves, 14 de julio de 2011

Historia de Elsevier


Elsevier fue una pequeña publicadora que parte con una familia holandesa en 1580. Actualmente es una de las publicadora más grandes y conocidas del mundo de las ciencias, que atiende a más de 30 millones de científicos, estudiantes y profesionales de la salud y de la información.

Aquí está su historia, una que no está demás saber (para más detalles, este es el sitio de descarga).

jueves, 20 de enero de 2011

Change Extension to a Group of Files in The Linux's Console

Hello, cyber-surfers!

How many times have we faced the problem where we have to change the file extension to a lot of files? ...Will we do it by hand? No way!!! This is the why machines exist!!!

Well, here you are a simple solution: Its name is rename. Hey! It is not a joke! This is a Linux's command which allows us, as its name, rename to a group of files by using Perl's RegEx.

Now, e.g. related with the last post, where I talked to you about how to  get audio from the Google's magic servers, this is a great tool, because the Google's servers' audio come in .mpga file extension, but the common mobile devices support the .mp3 file extension for audio. How can we solve this problem? By using the following command:

rename 's/\.mpga/\.mp3/' *.mpga

...to convert from .mpga to .mp3 audio file extension, as it is proposed here.

See you soon! ;-)

Sonidos de Eventos de Sistema

¡Saludos Cybernautas!

  Bueno, este post tratará sobre un tema más bien vano, pero muchas veces necesario para embellecer el entorno de productividad. Y es que nosotros, los seres humanos, gustamos de lo bello y adaptado a nuestras condiciones. ¿No me creen? Entonces, por qué el dicho "En gustos no hay nada escrito"...

  0K, ¿te gustaría que tu máquina -- y hablo en usando el amplio sentido de la palabra -- te hablara? ¿Y qué te parece si lo hiciera en tu propio idioma? Bueno, ¿la solución? ¡San Google! Sí, aunque no lo creas, Google habla, ¡¡¡y en muchos idiomas!!! ...bueno, la verdad es que esto es una pequeña pillería.

  Vamos y veamos cómo lo hace este gigante:
  • Examinemos esta URL. Aquí encontramos la interfaz típica que ofrece Google para realizar las traducciones desde un idioma hacia otro. Para probarla simplemente escribe "Hello World" en el cuadro de texto principal, y "mágicamente" (automáticamente) aparecerá la traducción "Hola Mundo" en un área de texto contigua. Luego, notemos que bajo ambas áreas de texto aparece un botón con la leyenda "Escuchar". Es aquí donde comienza la pillería; haz clic sobre ellos, y en cada caso escucharás la pronunciación en el respectivo idioma de su traducción. ¡Sonido! Sí, efectivamente: Sonido; y el sonido de una agradable voz femenina, de la cual sacaremos nuestros sonidos de eventos. ...pero, ¿y cómo extraemos el sonido? Probando... probando... mmm... no se puede de forma típica; nuestro clic derecho y guardar archivo no funciona en este caso. Pero no desesperen, a continuación, la solución...
  • Navegando por Internet, en un foro encontré la siguiente línea: http://translate.google.es/translate_tts?q="xxxxxxx"&tl=yy
0K, ¡pero de qué se trata esta línea! Bueno, ahora la explicación:
  • Esta línea es una URL que le dice a los mágicos servidores de Google que deben enviar al cliente un archivo de audio con una voz artificial sintetizando el mensaje "xxxxxxx".
  • Además, el mágico servidor debe sintetizar el mensaje antes mencionado considerando las reglas de pronunciación de la lengua yy (al final de la URL), donde yy es alguna de las abreviaciones de nombres de idiomas codificados bajo el estándar ISO 639-1 (sigue el link y encontrarás con una lista de nombres estándares, e.g. para el español es es, para el inglés es en, para el portugués es pt, para el francés es fr, y la lista sigue...).
0K, ahora veamos algunos ejemplos:
  • ¿Qué les parece si quisiéramos que nuestro móvil nos dijera que tenemos un mensaje de texto entrante en latín? Entonces la URL debiera ser algo así:
http://translate.google.es/translate_tts?q="Reditus verbum Text"&tl=la

  • ¿Y si nos llega un correo electrónico de Gmail y queremos escuchar el aviso en alemán?
http://translate.google.es/translate_tts?q="Eingehende "Gmail"-Meldung"&tl=de
 
  •   ¿Y un recordatorio sobre un pendiente en la lista de tareas, y queremos que nuestro móvil nos hable en inglés?
 http://translate.google.es/translate_tts?q="You have an event in the tasks list"&tl=en

  •  ¿Y un mensaje en Facebook, y que nos avise en francés?
http://translate.google.es/translate_tts?q="Vous avez un nouveau message dans fâisbouk"&tl=fr

...aaah! ¡momento! ¿Por qué "fâisbouk"? Porque el sintetizador pronuncia lo que le dicen, y /fâisbouk/ suena más similar a Facebook (pronunciado como corresponde, i.e. en inglés, dado que es la lengua de donde proviene este nombre) que si lo escribiéramos /facebook/. ¡Hagan la prueba! Reemplacen "Fâisbouk" por "Facebook" en la URL y contrasten las pronunciaciones. ...esto es sólo un juego fonético y estético.
  • ¿Y qué tal un aviso de Tweet en portugués?
 http://translate.google.es/translate_tts?q="Tem um novo Twe"&tl=pt

...aquí jugamos con la fonética de igual forma como lo hicimos con el ejemplo anterior: Aprovechando que en portugués la última "e" de las palabras suena como /i/, entonces escribimos "twe" para que suene similar a /tuIt/, voz con la cual se pronuncia la palabra Tweet en inglés.

Sí, es cierto, a este sintetizador provisto por estos mágicos servidores de San Google se les puede sacar mejor provecho que para esto tan vano. Sin embargo, sólo he pretendido mostrar una de estas tantas formas de utilizar este fantástico servicio, y con el ánimo de ejemplificar una de las formas -- bien, es cierto, una forma muy informática -- de obtener sus resultados.

Aquí les dejo algunos eventos ya listos para utilizar. Todos en formato "mpga" que es el formato en el cual retorna el audio el servicio... y no es otra cosa que el vital formato "mp3". Era sólo cosa de cambiar el nombre de la extensión... pero no es necesario, a menos que el software donde ejecuten el audio se los pida arrojándoles un desagradable error. Otra cosa, el nombre de cada archivo y antes de la extensión, lleva la abreviación del estándar ISO 639-1 del idioma en el cual está dicha la frase. Por ejemplo: EventInTheCalendar-de.mpga significa que es el audio que avisa de un evento en el calendario del equipo, y que está en alemán por la abreviación de al final del nombre. El mismo aviso bajo el nombre EventInTheCalendar-fr.mpga significa que está en francés, por la abreviación fr al final del nombre.

Enjoy this! ¡Saludos!

jueves, 28 de octubre de 2010

Generador de Password en Java

Estimados cybernautas:
Dejo a continuación, una pequeña y simple implementación de un comando en Java para generar passwords.
Descargen el fuente y compilado desde aquí.

Saludos cordiales. :-)

lunes, 25 de octubre de 2010

Lector RSS hecho con XSL y XML

A continuación, dejo a la disposición de quien quiera usarlo, una implementación de lector de feeds RSS producto de la necesidad de contar con algo que funcionara en la mayoría de los browsers, no teniendo los conflictos que surgen al usar scripts.

Descargar lector feeds RSS en XSL desde aquí.

Saludos cordiales.