Esta semana no se vio el avance como la semana anterior ya que tuve que investigar. Este proceso de análisis era para buscar información sobre las consolas de los sistemas operativos. La verdad me encontré con tres términos que no sabían que eran diferentes: consola, terminal y shell. En el prototipo yo use el término consola porque en realidad lo veía más parecido al cmd de windows. La idea era tener algunos comandos especiales para los administradores avanzados y configurar el software. Teniendo eso en cuenta las opciones del sistema disponibles inicialmente son gestión de claves, archivos y carpetas (arca) y una opción especial de backup. Lo ideal era usar funciones de las librerías que ya estaban creadas, pero a veces encontramos con que falta algo. En este punto del proyecto todo queda anotado para futuras actualizaciones.
El término seleccionado no fue ni terminal, shell ni consola
Lo más curioso es que ninguno de los tres términos se usa para lo que yo pensaba que era la consola. En realidad el término consola se usaba para referirse a la CPU directamente. Es decir, la parte física de las grandes computadoras que en ese entonces eran gigantes. Como lo que yo pretendo no tiene nada que ver quedó descartado por el momento. Los otros dos términos son relativamente nuevos para mi ya que pensaba que significaban lo mismo. El concepto de terminal era el entorno de entrada y salida de texto, pero más enfocado a las características físicas. En el pasado no se usaba el mouse por lo que todas las órdenes tenían que hacerse por teclado.
Me resultó difícil encontrar la diferencia entre terminal y shell, lo más acertado que encontré es que el shell es un emulador de consola. Lo que entiendo es que al final cuando ya teníamos interfaz gráfica, el término tampoco se acoplaba a lo que buscaban los programadores de sistemas operativos. La solución fue apoyarse en el diseño para crear este programa especial, muy cercano a mi caso. Pero lo más interesante que aprendí esta semana es que el término que buscaba era CLI: Command line interface o intérprete de líneas de comandos.
Diseño de funcionalidad del CLI y primera parte
En principio, para el prototipo podemos ver que solo definí 3 funcionalidades, claves, arca y backup. Sin embargo al tener todas las librerías he decidido cambiar el de backup por sistema. Acá se pueden condensar otras funcionalidades como el reloj del sistema, paso a pruebas o producción entre otras preferencias del software. Entrando ya en la parte técnica el funcionamiento es sencillo: enviar un comando y el sistema interpreta y da una respuesta. Visualmente tenemos la pantalla de información y la barra para enviar los comandos. Internamente el CLI debe saber si está en el menú principal o en un programa interno.
El prototipo envía el comando y el sistema, que es web, recarga la página y todos los elementos con la respuesta. Evidentemente esto no es lo ideal porque en algunos casos se pierde continuidad, como cuando no hay internet. Entonces la primera parte consistió en aprender algo de Javascript y Ajax con CodeIgniter para que la página envíe la información pero no tenga que recargarse cada vez. Luego de eso empecé a hacer unos avances en la gestión de claves como listar, consulta y cambio de claves especiales.