Descartes, Matemáticas interactivas ProyectoDescartes.org
   

Actualizado a las 19:30 del 05 de julio de 2013

 

   

Descartes 5 y DescartesJS para cartesianos
     
 

¿Cuál es el objetivo de este documento?

 
 

El objeto de este documento es indicar a todo cartesiano que conoce versiones anteriores de la herramienta Descartes las diferencias que hay con la nueva versión 5 y la relación existente con DescartesJS. Pero también a todos los que sin dominar excesivamente la herramienta quieran adentrarse en la revisión, en la conversión de escenas a DescartesJS, en la traducción a otras lenguas, etc., es decir es de utilidad ¡para todos los cartesianos! en su diferentes contextos y ámbitos de actuación. No hay niveles, ni exigencias mínimas, sólo debe haber ganas de formarse y colaborar con Descartes.

 
     
 

¿Qué es Descartes 5?

 
 

Es la última versión liberada de Descartes en Java.

 
     
 

 ¿Qué es DescartesJS?

 
 

DescartesJS es un intérprete desarrollado en javascript. Conceptual y prácticamente DescartesJS lee el código de una escena de Descartes y lo transforma en un código javascript que es ejecutable sobre cualquier navegador compatible HTML5.

 
     
  ¿Qué es HTML5?  
  HTML5 que es el actual estándar del lenguaje de marcas para páginas web y al que progresivamente van adaptándose todos los navegadores en todos los sistemas operativos. Hay que ser conscientes que cada navegador tiene diferente nivel de estandarización y que podremos encontrarnos comportamientos distintos no sólo en el navegador que se use, sino de la versión del mismo en cada sistema operativo, versión de éste e incluso fabricante que lo distribuye. Ello ocurre especialmente en las tabletas y smartphones. ¡Ciertamente es un handicap!, pero ¿qué iba a ser de la informática sin su implícita intriga y saco de sorpresas? Es de esperar que vayan confluyendo todos hacia lo establecido.  
     
  ¿Por qué utilizar un intérprete?  
  Es conocido que desde la entrada del iPad e iPhone, bien por la estrategia e intereses comerciales de Apple o bien por otras razones ajenas a este tema, quedaron proscritos tanto Java como Flash. Los recursos elaborados con ese software no son visibles en esos dispositivos. Esto se extendió a los dispositivos con Android y aunque pueden encontrarse algunas aplicaciones que lo simulen la compatibilidad es discutible y en definitiva no es operativo.

La estrategia que se decidió desde el equipo de desarrollo de la herramienta Descartes, dirigido por José Luis Abreu, fue elaborar un intérprete que trasladara el código de las escenas de Descartes, generadas con el editor de escenas, en código javascript ejecutable en cualquier navegador HTML5, de manera que cada escena de Descartes pasa a ser un objeto en HTML5 que no necesita de ningún otro software para ser visible en el navegador.

 
     
  ¿Descartes en Java no es también un intérprete?  
  Correcto. Una escena de Descartes no es más que una estructura de datos xml muy simple (recordemos que el código de una escena es un conjunto de parámetros: <param name=... >) en la que se vuelca toda la información que se requiere para que Descartes la interprete, la entienda.

Descartes5 versión Java es un código en Java que hace tal interpretación. DescartesJS es un código en JavaScript que también hace tal interpretación.

En esencia, Descartes en abstracto es una máquina virtual que interpreta esa estructura de datos de la manera en que lo hemos venido conviniendo por 15 años. Descartes5.jar contiene un código en Java que implementa a ese Descartes abstracto y descartes-min.js contiene un código en JavaScript que hace más o menos lo mismo. 

 
     
  ¿Comparativamente cuál de los dos intérpretes manifiesta mayor eficiencia?  
  Conceptualmente ambos intérpretes se ubican en igual estatus inicial.

Experimentalmente puede comprobarse que la carga de una escena con el intérprete en javascript suele manifestarse como más rápida que el intérprete en Java. Ello es consecuencia de que Java opera con un JIT (just in time compiler) que en principio retrasa un poco el inicio de la ejecución pero consigue que ésta sea más rápida, pero nada impide a javascript funcionar de la misma manera, y seguramente irá mejorando.

 
     
  ¿Cuál es la principal ventaja que se obtiene al usar DescartesJS?  
  La ventaja mayor se encuentra en que todo el proceso de interpretación e interacción con la escena se realiza exclusivamente en el navegador sin utilizar ningún software adicional. Bien conocido es la dificultad que a los usuarios siempre le ha supuesto la instalación de Java y, aunque últimamente los sistemas operativos de ordenadores suelen incorporarlo, las continuas actualizaciones en las que se ha embarcado Oracle (actual desarrollador de Java) han ido generando problemas en las escenas de Descartes siendo el sumum el que se ha alcanzado a partir de la versión 7.13 de Java que ha bloqueado la ejecución de los applets de Descartes que usan la versión instalada (plugin de Descartes) y en una nueva versión no instalada de Descartes5 aún sigue ocasionando múltiples incompatibilidades.

Coloquialmente se dice "muerto el perro se acabó la rabia" y a ello, desde mi punto de vista, es lo que desde Oracle nos está conduciendo. Si bien ése no fue el motivo que promovió el desarrollo de DescartesJS, pues el intérprete lo que buscaba es llegar a tabletas y teléfonos inteligentes para las que están vetados los applets Java, lo que sí nos ha permitido es "matar dos pájaros de un tiro". No obstante hay que reconocer la innovación que Java introdujo en los años 90 del pasado siglo y que a Descartes ha aportado muchísimo.

 
     
  ¿Qué es la versión instalada y la no instalada de Descartes5 con Java?  
  La versión 4 de Java contemplaba la instalación del plugin de Descartes que ubicaba las clases de Descartes en el ordenador local y así éstas estaban disponibles en la carga de cualquier escena. No era necesario leer un archivo jar que las contuviera.

Ante el bloqueo del plugin la versión 5 ha retomado la versión no instalada, es decir, los applets hacen referencia al archivo Descartes5.jar del que hay que referenciar su ubicación. Éste era el procedimiento inicial desde los inicios de Descartes hasta dicha versión 4. El gestor de escenas se encarga de controlar todo esto incluyéndolo en el código de la escena. Para su detalle leer la parte correspondiente al gestor.

A pesar de usar la versión no instalada, salvando el bloqueo citado, se han seguido detectando nuevos problemas en la ejecución de escenas con Java. Ello nos impulsa a adaptar los recursos de Descartes a DescartesJS  y Java por ahora será necesario en la edición y desarrollo de nuevos materiales y el mantenimiento de los actuales. El gestor de escenas está en Java.

 
     
  ¿Cuáles son los principales inconvenientes de DescartesJS?  
  No hay una equivalencia exacta entre el tratamiento a bajo nivel que hace Java y el que hace javascript, consecuentemente determinados objetos cartesianos no se visualizan de la misma forma si se ejecutan en Java o con DescartesJS. Principalmente ocurre con los textos. Si bien el equipo de desarrollo de Descartes ha tratado de minimizar estas diferencias no ha podido conseguirse la equivalencia total. Eso es especialmente negativo para escenas que estaban ya desarrolladasy que ahora pasen a interpretarse con DescartesJS, pues requerirá una revisión y adaptación, pero obviamente no lo es para escenas que se desarrollen en el nuevo entorno

Con DescartesJS no se cuenta actualmente con la edición interactiva de la escena, es decir, al pulsar el botón auxiliar del ratón no se abrirá la ventana de edición. Para editar una escena tendremos que usar el gestor de escenas. Perdemos algo que era intrínseco a Descartes, pero que por ahora se ha tenido que dejar en el camino. Esperemos que se pueda recuperar.

 
     
 

 ¿Cómo se llama al intérprete DescartesJS?

 
  Para que una escena de Descartes (código comprendido entre las etiquetas <applet> y </applet>) sea ejecutado con DescartesJS basta incluir en la página html en la que está embebida la escena y antes que la etiqueta <applet> la siguiente línea:

<script type='text/javascript' src='http://arquimedes.matem.unam.mx/Descartes5/lib/descartes-min.js'></script>

En ella lo que se indica es que el navegador incorpore a la página un código javascript incluido en el archivo denominado descartes-min.js, el cual está ubicado en el directorio Descartes5/lib del servidor arquimedes.matem.unam.mx, que es el servidor de José Luis Abreu ubicado en el Instituto de Matemáticas de la Universidad Nacional Autónoma de México (UNAM).

Obviamente ese archivo descartes-min.js puede descargarse y ubicarse en otro servidor o en local. En ese caso la línea a incluir sería:

<script type='text/javascript' src='http://servidor/directorio/descartes-min.js'></script> para leerlo desde el directorio "directorio" ubicado en el servidor "servidor"

Si escribimos <script type='text/javascript' src='./lib/descartes-min.js'></script> lo leeríamos desde la carpeta lib ubicada en el directorio que almacena la pagina html desde la que se le llama.

Por defecto el gestor de escenas ubica la línea de llamada al intérprete en la cabecera (<head>) de la página html, pero como todo script puede ubicarse en la posición que se desee, lógicamente delante de la escena que se desea interpretar.

 
     
  ¿Por qué se llama el intérprete descartes-min.js?  
   El prefijo descartes es obvio ¿verdad?, la extensión es js porque es código en javascript,  y el sufijo min es de minimizado, el código se compacta quitando espacios y denominaciones más extensas que son necesarias en el desarrollo, pero no en la ejecución.  
     
  ¿Cómo embeber una escena en un blog, wiki, o espacio 2.0?  
  El procedimiento es el que se usaba en Java, pero anteponiendo a la etiqueta <applet> la llamada al intérprete DescartesJS.

Con Java el codebase se utilizaba para indicar la dirección donde se alojaban macros, ficheros e imágenes. Parece que no funciona ahora y se revisará.

 
     
  ¿Qué diferencias hay entre acceder a descartes-min.js bien en el servidor de arquimedes, a uno propio o en local  
   En http://arquimedes.matem.unam.mx/Descartes5/lib/ estará siempre la última versión del intérprete. Si se utiliza esta referencia siempre se interpretará la escena con la última versión existente.

Si se utiliza un servidor propio obviamente se estará interpretando con la versión de DescartesJS que se aloje ahí y que no tiene por qué coincidir con la última existente.

Si se aloja en una librería local ./lib/descartes-min.js se ejecutará con la versión local ahí referenciada.

Cada opción tiene sus ventajas y es decisión del usuario desarrollador optar por una u otra. Si se utiliza una versión local se tiene garantía que una escena que cuando fue desarrollada era bien interpretada por el descartes-min.js ahí alojado, seguirá interpretándose siempre igual. No hay posibles incompatibilidades hacia atrás como consecuencia de nuevas versiones del intérprete.

Si se utiliza un servidor propio se mantendrían todas las escenas que apuntan a él en la misma versión y si se usa el servidor arquimedes se utiliza siempre la última que puede incorporar mejoras.

 
     
  ¿Qué ocurre si no se localiza el archivo descartes-min.js?  
  Si por un error de codificación o de referencia o por cualquier otra causa no se localiza el archivo descartes-min.js entonces el navegador no cuenta con el intérprete DescartesJS y consecuentemente al llegar a la etiqueta <applet> intentará abrir éste con Java,  para ello necesitará que el dispositivo disponga de este software y si no dispone de él daría un aviso de que es necesario Java (como era lo usual hasta ahora).  
     
 

 ¿Cómo distingo si una escena se está ejecutando con Java o con el intérprete DescartesJS?

 
 

Últimamente es muy fácil saber si vamos a cargar un applet con Java porque los navegadores incluyen múltiples avisos de advertencia de la posible peligrosidad de lo que se va a ejecutar, incluso estando en local y habiéndole dicho que ya me he enterado y que quiero ejecutarlo, Pero si sois unos manitas que habéis evitado todos esos avisos (¡enhorabuena! ¡sois dignos de alabanza!) entonces podremos observar que si se carga la escena con Java aparece la D del logotipo de Descartes, y si es con el intérprete aparece el logo de DescartesJS.

También si se está interpretando con DescartesJS no se abrirá con el botón auxiliar del ratón la ventana de edición, y si es con Java sí lo hará.

 
     
 

 ¿Cómo convierto una escena de Descartes en Java a DescartesJS?

 
 

Basta llamar al intérprete, pero hay que ser consciente de la necesidad de revisar el funcionamiento de la misma. Se está en una versión beta y, aún liberada, no todo funcionará como se espera, pero sí gran parte. Para ayudar en la depuración cuando se detecte un error debemos informar del mismo. Por el medio que estiméis oportuno (correo, este foro o el foro de socios que habilitemos). Incluid en un zip la escena que produce el error (con todos los elementos auxiliares que use, imágenes, archivos, etc) de manera que el revisor pueda ejecutarla y reproducir lo que indicáis, y un pdf en el que se describa lo más detalladamente posible lo que acontece, adjuntando imágenes, indicando navegador utilizado, sistema operativo y versión de descartes-min.js que si abrís el intérprete observaréis que está en la sexta línea:

/*
 Joel Espinosa Longi
 joel.espinosa@amite.mx
 j.longi@gmail.com
 LGPL - http://www.gnu.org/licenses/lgpl.html
 2013-06-27

Y será muy de agradecer si en lugar de una escena compleja se incluye una en la que el error detectado esté aislado. 

 
     
  ¿Si he convertido una escena mía o de otro cartesiano a DescartesJS qué puedo hacer?  
  Pues si ya la has convertido y está operativa empaquétala en un zip y envíasela a Josep Mª Navarro (josepmnc@telefonica.net) que la cuidará como oro en paño y la incluiremos en el protocolo de publicación en el nuevo repositorio de la RED Descartes y que pronto esté disponible en la red.

Y si lo comunicamos podremos evitar duplicidades y optimizar el esfuerzo. Esa comunicación podría hacerla el que ha convertido la escena o Josep Mª al recibirla.

El envío se refiere a un objeto completo, es decir: una unidad didáctica, una miscelánea, un objeto de Canals o de PI, una quincena de EDAD, es decir el objeto completo, y no escenas aisladas. Los discursos se van a adaptar en el LITE y los objetos procedentes de telesecundaria también, tenedlo en cuenta.

Estamos planificando la conversión de EDAD, para ello formaremos equipos de trabajo pronto.

 
     
  ¿Cómo edito una escena?  
  Una escena que deseamos se ejecute en DescartesJS hay que editarla con el gestor de escenas Descartes.jar y para abrirlo hemos de ejecutar este archivo. Si utilizamos el archivo Descartes.bat se nos abrirá también una ventana del sistema donde podremos ver determinados errores que podamos cometer en la edición de nuestras escenas, es una buena costumbre para quienes se dedican al desarrollo.  
     
  ¿Dónde localizo el gestor de escenas con Descartes5 y DescartesJS?  
 

 La última versión del gestor de escenas Descartes.jar se aloja en:  http://arquimedes.matem.unam.mx/Descartes5/distribucion/. O bien accediendo a http://arquimedes.matem.unam.mx/ se puede observar un apartado "Descartes 5 distribución" que seleccionándolo nos conduce al enlace anterior. Ahí figura también un enlace a la documentación, pero ésta en este momento no está actualizada.

En el directorio de distribución también hay un Descartes.bat que es útil descargar.

Estos archivos conviene ubicarlos en una carpeta y es cómodo utilizar ésta como la carpeta raíz en el desarrollo de nuestros proyectos, es decir incluir una subcarpeta proyectos y dentro de ésta otras para cada proyecto.

 
     
  ¿Necesita Java el gestor de escenas?  
  Sí, el gestor de escenas sigue siendo una herramienta desarrollada en Java y requiere disponer de este software. No obstante todas las incompatibilidades, bloqueos y demás problemas de ejecución detectados con los applets no se producen con el gestor.  
     
  ¿Hay cambios en el gestor de escenas?  
  El funcionamiento del gestor es el habitual hasta ahora y está descrito por ejemplo en este documento que no está todavía adaptado a la nueva versión de Descartes5 (hay trabajo que hacer y lo haremos). Los cambios principales se pueden observar en una nueva opción de menú etiquetada como "opciones" y las opciones del menú Insertar.  
     
  ¿Para qué sirve la opción del menú del gestor de escenas etiquetada como "Opciones"?  
  Opciones permite indicar la posición absoluta o relativa en la que se ubicará el archivo Descartes5.jar y el archivo descartes-min.js.

Menú opciones en el gestor de escenas

  • La opción Librería portable tiene como objetivo crear un objeto desagregado, es decir que si se copia toda la carpeta que lo contiene se puede trasladar a cualquier otro lugar del ordenador u otro ordenador y seguirá funcionando igual (es portable).

    • Si se usa la opción "sólo para JS" al guardar la página que se está editando con el gestor (llamémosle pagina.html) al mismo nivel se crea una carpeta lib que contendrá el intérprete descartes-min.js que está referenciado en pagina.html para que lo localice.

    • Si  se usa la opción "para Java y JS" al guardar la página se crea pagina.html y pagina-JS.html la primera para ejecutar con Java (no incluye la llamada al intérprete) y la segunda para ejecutar con DescartesJS. En una carpeta lib al mismo nivel se ubicará Descartes5.jar y descartes-min.js.

    Para la opción JS la línea incluida es <script type='text/javascript' src='lib/descartes-min.js'></script>

     

  • La opción de librería de proyecto busca compartir un único Descartes5.jar y descartes-min.js para un conjunto de páginas ubicadas a diferente nivel. Así en la imagen siguiente podemos ver un proyecto que utiliza diferentes escenas, cada una de ellas ubicadas en una carpeta y una única carpeta lib compartida por ellas. Esta distribución se ha utilizado en el desarollo de objetos en Canals y Pizarra interactiva y suele ser una estructura muy útil. De ahí que se haya contemplado en el gestor de escenas esta opción

Ubicación de la librería de proyecto

Para la opción JS la línea incluida en la página de cada escena es:

 <script type='text/javascript' src='../lib/descartes-min.js'></script>

  • La opción librería en internet direcciona a Descartes5.jar y a descartes-min.js al directorio de distribución del servidor arquimedes. Para JS se incluye:

<script type='text/javascript' src='http://arquimedes.matem.unam.mx/Descartes5/lib/descartes-min.js'></script>

___________________________________________

Nota: Cuando se edita una página el gestor de escenas detecta con qué opción se guardó y activa esa opción.

La opción que está seleccionada en cada momento se refleja en la zona de mensajes de la parte inferior del gestor de escenas:

zona de mensajes, indicando la opción actual

 

 
     
  ¿Qué variación hay en la opción "Insertar" del menú del gestor de escenas?  
  Las opciones que se incluyen en "agregar escena" son las reflejadas en la imagen siguiente:

donde se distinguen las escenas de Descartes 2 y  las escenas de Descartes 5

 
     
  ¿Hay cambios en el editor de escenas?  
  Sí hay muchos cambios en el editor de escenas que podremos ir investigando y/o preguntando por ellos e ir completando este "documento".

Cambio principal en los paneles de edición:

paneles de edición

Aparece un panel de Definiciones y otro de Programa que remplazan al panel de Auxiliares.

 
  .  
  ¿Por qué un panel de Definiciones y otro de Programas en lugar del de Auxiliares?  
  Como matemáticos no nos debe de sorprender que en una estructura lógica primero se aborden las definiciones y posteriormente se proceda al trabajo con ellas. En el panel de auxiliares que se tenía en versiones anteriores se constataba que era un totum revolotum en el que en un orden generalmente improvisado se incluían constantes, variables, eventos, funciones, algoritmos, etc. y llegado el momento de la ejecución gran parte de las veces era dificultoso saber que lógica se estaba empleando. La división en el panel de Definiciones y Programa tiene un objetivo de organizar la información de la escena y su lógica.

En el panel de Definiciones abordaremos la definición de variables, funciones, vectores y matrices:

panel de Definiciones

y en el panel de Programa podemos observar que se incluye un algoritmo INICIO que se ejecuta una sola vez y un algoritmo CALCULOS que se ejecuta siempre. Su nombre bien indica que el el primero se podrá todo aquello que se quiera se haga al iniciar la escena y el segundo lo que ha de hacer en todo momento que se produzca un cambio en la escena. ¡Y no hace falta nada más si nos acostumbramos a este esquema que es sencillo y natural! Bueno se ha dejado una pequeña salida a aquellos que echan de menos los eventos (que en una buena estructura en general son innecesarios) y podrán incluir estos, pero mejor ser prudentes con ellos.

panel de Programa

Se simplifica y clarifica todo ¿no os parece? Meditad, probad y comprobad que es así :-)

 
     
  ¿En el panel de espacio hay nuevos tipos de espacio?  
  Sí, en el panel de espacio nos encontramos:

panel Espacio

donde R2 es un espacio bidimensional, R3 tridimension, AP de inclusión de otra aplicación (Geolab o Geogebra o ...) y HTMLIframe para inserción del código html que se desee. Si el objetivo del desarrollo es DescartesJS entonces no se deben usar espacios AP sino los HTMLIFrame que son mucho más flexibles y abren posibilidades que no se tenían en la versión Java

Los espacios TA correspondientes al tutor algebraico no están incluidos en esta versión.

 
     
  Si ha cambiado la estructura y paneles ¿dónde estarán los auxiliares que usaba en mi escena?  
  ¿Desde cuándo Descartes ha sido irrespetuoso contigo? Tus auxiliares estarán ubicados entre las definiciones y programa, lo que no podrás es incluir más, más bien deberías reestructurarlo e incluirlo adecuadamente a la estructura comentada. Bueno, siempre puedes acudir a la ventana de edición manual de los objetos y en este caso tú serás el que eres algo irrespetuoso con Descartes ;-)  
     
  ¿Qué más hay?  
  ¿Quieres embeber vídeos? Pues adelante  
  ¿Puedo usar variables globales y locales? Sí  
  ¿Puedo preguntar más? Sí, pero también puedo dar respuestas y compartir lo que sé con los demás :-)  
     
     
 

Contacte con nosotros: Descartes@ProyectoDescartes.org 

 
         
     

Red Educativa Digital Descartes