Las unidades de magnitudes físicas son extremadamente importantes para científicos e ingenieros. Se comunican mucho, pero, desafortunadamente, pueden provocar errores graves y costosos. Se ha desarrollado un complemento para gestionar las unidades en JMP y reducir estos errores. Este complemento utiliza la nueva integración con Python en JMP 18 para facilitar lo que habría sido difícil de lograr en JMP 17. Esta presentación muestra las capacidades de este complemento y su desarrollo, incluyendo el uso de Python, el control de código fuente, las pruebas, la documentación y los sistemas de compilación.
Hola, me llamo Evan McCorkle. Soy desarrollador de JMP y hoy les presento un complemento que desarrollé con la nueva integración de Python en JMP 18. Este complemento sirve para la conversión de unidades físicas. Voy a explicar por qué lo desarrollé, cómo lo hice, las técnicas que utilizo y algunos detalles sobre la integración de Python en JMP 18.
Mi formación y mis inicios profesionales fueron como ingeniero. Durante esa formación y mis inicios profesionales, tuve que lidiar con diferentes sistemas y tipos de unidades, principalmente unidades del sistema métrico decimal y unidades del sistema estadounidense. Estoy seguro de que muchos de ustedes también tienen que hacer esto, y sé que muchos saben que se han cometido muchos errores costosos y de alto perfil debido a problemas de conversión de unidades. Por eso, siempre intenté usar una herramienta que me ayudara a comprobar mis conversiones de unidades.
A menudo, uso una biblioteca de Python llamada Pint para ello. Estaba analizando la nueva integración de JMP 18 con Python y quería ver si podíamos integrarla con la función existente de JMP de anotar columnas con sus unidades. Si se accede a una columna, se puede asignar una unidad a esa columna, y ¿podemos usar eso para realizar conversiones de unidades y validar las unidades, entre otras cosas?
Ese fue el impulso para desarrollar este complemento. Al incorporar una tabla, este puede detectar unidades entre paréntesis en las columnas, asignar automáticamente la propiedad de unidad y validar dichas unidades. Permite ver rápidamente la tabla completa y sus unidades, realizar cambios masivos en las unidades, asegurarse de que el sistema comprenda las unidades y las abreviaturas utilizadas, y determinar las unidades para columnas de fórmulas simples.
La función principal del complemento es convertir columnas entre unidades. Por ejemplo, de pulgadas a milímetros. Puede hacerlo in situ o como una nueva columna. Al convertir los datos, también se convertirán las propiedades de la columna, como las líneas de referencia, la configuración de acceso, los límites de especificación, etc.
Además de estas funciones, hay una base de datos explorable con todas las unidades compatibles y las formas de componerlas, así como una API JSL. Si te interesa, puedes ver el código QR en pantalla aquí o visitar la comunidad y buscar el complemento de conversión de unidades.
Eso es todo lo que voy a decir sobre las características del complemento. Ahora voy a explicar cómo se desarrolló. Para el control de código fuente, usé Git y una instancia interna de GitLab. Para compilarlo e implementarlo, utilicé una solución personalizada: un archivo JSL de compilación y un archivo JSL de manifiesto, que detallaré en breve. Para las pruebas, utilizo el framework JSL Hamcrest, que pueden encontrar en GitHub. Soy codesarrollador de dicho framework. Lo usamos internamente en JMP para probar el propio JMP, y también lo uso para probar este complemento.
Para la documentación, se utilizan principalmente archivos Markdown que luego se convierten a HTML con Pandoc, se insertan en el complemento y se muestran en él mediante el navegador web integrado de JMP. Todo se implementa mediante JSL y Python con la biblioteca pint de Python. Además, se utilizan otras herramientas como JMP, VS Code, Git, Pandoc y Google Material Icons.
La estructura del complemento en el nivel superior se ve así. Tienes la carpeta de compilación, la documentación, el código fuente, las pruebas y los archivos "léeme" en Markdown. Por lo tanto, las pruebas son independientes. La compilación contiene el complemento de compilación, el archivo de manifiesto y la subcarpeta de artefactos, que es donde se almacena el HTML y donde se almacenará el complemento JMP al compilarse. La documentación consiste principalmente en capturas de pantalla y elementos similares. La carpeta de código fuente tiene varias subcarpetas, iconos y un menú. El menú contiene estos archivos JSL de acción, que son muy simples. El archivo JMPcust los usa como punto de partida, así como el código fuente, que constituye la mayor parte del código. Luego tenemos la definición de JMPcust y el archivo JSL de carga.
Para el archivo de manifiesto, se trata básicamente de una lista de todos los archivos de esta estructura a la izquierda, que se almacenarán en el archivo del complemento JMP que se instalará posteriormente. El script JSL del complemento de compilación realiza el paso de Pandoc para convertir Markdown a HTML, lee el manifiesto y utiliza la API de archivo zip de JSL para recopilar todos los archivos y colocarlos en un archivo del complemento JMP en el directorio de artefactos de compilación.
Cada vez que quería añadir una nueva función, añadía un icono en el menú de iconos de código fuente. Tenía un pequeño fragmento de código en el menú de código fuente, y luego la mayor parte del código iba al código fuente. Añadía los tres archivos al manifiesto y editaba el archivo cliente del complemento JMP para que hiciera referencia a ese fragmento en el menú de código fuente. Después, podía compilar el complemento, empezar a desarrollar esa función y añadir la prueba a la suite en los archivos de prueba.
El submenú del código fuente solo realizaría una validación básica, como buscar una tabla de datos actual o algo similar. Luego, incluiría el archivo fuente principal e invocaría la interfaz gráfica de usuario. Esta separación se debe a que podemos incluir fácilmente este archivo fuente principal en la prueba y luego probar esa función sin invocar la interfaz gráfica de usuario. Es una buena división entre el menú fuente, que se invoca interactivamente al hacer clic en él, y los archivos de prueba, y ambos se ejecutan mediante el código fuente.
Finalmente, dado que gran parte de este complemento utiliza la nueva integración de Python con JMP 18, quería explicar en detalle su funcionamiento. Básicamente, consta de tres partes. Primero, en el archivo de carga del complemento. Al cargar el complemento, intentamos instalar los paquetes de Python. Pint es uno de ellos. Lo instalamos y nos aseguramos de que esté instalado. Luego, tengo un archivo com_jmp_unitconversion.py que se instala con el complemento. Lo importaré con este nombre completo.
Básicamente, todo lo que hay en ese archivo Python son solo un montón de definiciones de funciones, y todas usan la biblioteca pint. Pero no hay trabajo real. Son solo las definiciones de funciones. Luego, en el código JSL principal, envuelvo esas llamadas de Python usando ese nombre completo y la integración de Python dentro de una función JSL. Luego, en el resto del complemento, puedo usar las funciones JSL de aquí a la derecha. ¿Se pueden convertir las unidades de pies a kilómetros? Sí. ¿Pies a mililitros? No. Simplemente usa funciones JSL normales, pero internamente, estas se integran en el código Python mediante la integración de Python. Todo se configura al cargar el complemento, y todo mi código Python está bien contenido dentro de este único paquete, así que no contamino todo el espacio de nombres de Python.
Así es como utilicé la nueva integración de Python en JMP 18 para desarrollar este complemento de conversión de unidades físicas. Gracias.