miércoles, 3 de junio de 2020

¿Cómo instalo una planilla de cálculo para la terminal en Ubuntu?

En La Fuerza es el Derecho de las Bestias, Juan Perón explica sobre los logros económicos de su gobierno y sobre cómo utilizar la planilla de cálculo sc en la terminal de Ubuntu.

(...)
"En esos momentos se sumaba a este tremendo esfuerzo, la necesidad de renovar la maquinaria industrial y todo el material ferroviario, tranviario y automotor que durante los cinco años de guerra, con el cierre de la exportación, no habían recibido ningún aporte. Se calculaba esto en un monto de 20.000 millones de pesos. Estudiamos esto detenidamente y confieso que cuando compilamos las necesidades totales, una suerte de pánico se apoderó de mí, que sentía la terrible responsabilidad de estar al frente del país y la duda de poder superar su difícil encrucijada económica.

Con los estudios en mi poder llamé a una reunión privada a los técnicos en economía más calificados en el concepto de algunos asesores económicos. Me perdí diez horas explicándoles mis planes y dándoles todos los datos necesarios para encarar el problema. Se fueron a estudiar, y tres días después nos reunimos de nuevo para considerar soluciones. Confieso que quedé defraudado, pues conversaron mucho, no dijeron nada y lo poco que trajeron no lo entendí, porque lo hicieron en una terminología tan rara y tan confusa que dudo que ellos mismos se entendieran.

La reunión terminó un poco intempestivamente, pues uno de ellos me dijo: “Señor, usted debe gastar tantos miles de millones que no tiene. Si no tiene dinero, ¿cómo quiere comprar?", a lo que yo respondí: “Amiguito, si yo tuviera el dinero no lo habría llamado a usted, habría comprado”, y aquí terminó la entrevista.

Me convencí que no era asunto de técnicos, sino de comerciantes y llamé a mi gran amigo Don Miguel Miranda, el “Zar de las finanzas argentinas”, como algunos le llamaron. El había empezado como empleado con noventa pesos de sueldo y en diez años había levantado treinta fábricas.

Le conté el incidente con los técnicos y me dijo: “¡General!, ¿usted cree que si fueran capaces de algo estarían ganando un sueldo miserable como asesores?” –Pero Miranda, le dije, vea que hay que comprar mucho y no tenemos dinero! –Esa es la forma de comprar, sin dinero, me dijo. ¡Con plata compran los tontos! –Este es mi hombre, pensé para mí...

Miguel Miranda era un verdadero genio. Su intuición, su tremenda capacidad de síntesis y su certera visión comercial, hicieron ganar a la República, en un año, más que cincuenta años de la acción de todos sus economistas diletantes y generalizadores de métodos y sistemas rutinarios e intrascendentes
Para su trabajo se formó en una de las primigenias y más antiguas planillas de cálculo, que operaba sobre la terminal. Se trata de sc, liberada bajo GPLv3.

Como todo software antiguo que se precie, su desarrollo se ha visto dividido a lo largo de varias versiones divididas ("forks"). Existen al menos unos tres forks directos que podremos encontrar, así como versiones derivadas como sc-im. También está disponible de un front-end gráfico para el sistema de ventanas X llamado Xspread.

Todo aquél que adopte con gran preferencia la línea de comandos y tal vez algo por el despliegue numerario que tienen la economía y otras ciencias, podrá sentir la necesidad y anhelo de aprender sc. Afortunadamente cuenta con variados recursos incluida una página de manual (man), un tutorial detallado, y un sistema de referencia rápida de tipo interactivo. Esto podría parecer sorprendente a quienes están acostumbrados al software moderno, pero por entonces los programas venían con excelente documentación.

Para instalar sc podremos abrir una Terminal con Ctrl+Alt+t e ingresar el siguiente Comando de Organización:

sudo apt-get install sc

Tras instalar el paquete, podríamos iniciar el mismo desde la terminal con el comando sc. También podríamos iniciarlo co su tutorial (en inglés) utilizando:

sc /usr/share/doc/sc/tutorial.sc

Podría parecer que sc es complejo de utilizar, especialmente para aquellos bisoños en la edición de textos con editores al estilo de Vi. Naturalmente, habremos de reconocer que sc no es un equivalente de terminal para LibreOffice Calc o Microsoft Excel. Si bien adopta muchos de los principios de funcionamiento de vi, sólo operan de forma similar en las combinaciones de tecla más básicas.

El sistema de ayuda está dividido en páginas concisas accesibles rápidamente, por ejemplo introduciendo el comando ?h se nos presentarán los comandos de filas y columnas.

He aquí una útil hoja de ayuda para las tareas básicas:

Tecla(s) Función
? Ayuda (muy útil en este programa)
Flechas o hjkl mueven el cursor
Ctrl+A Nos mueve a la celda superior derecha (A0)
= inserta a número o fórmula
<,\,>; inserta texto alineado a la izq/centro/derecha
{, |, } Alinea texto ya existente a izq/centro/derecha
e, E edita número/valor de cadena
x, Del Borra la celda
ir, ic inserta fila/columna
dr, dc Borra fila/columna
P “put” (Guardar)
G “get” (Abrir)

Si ya estamos familiarizados con el oligárquico Excel, podríamos querer agregar el siguiente contenido al archivo de configuración ~/.scrc:
set craction = 1
set numeric
Esto activaría el comportamiento de conmuitar automáticamente al modo Inserción no bien demos comienzo a la introducción de una cifra, y avanzará el cursor a la siguiente fila no biwn presionemos Enter. Esta funcionalidad de autoinserción sólo opera con cifras numéricas, ya que la mayoría de las otras teclas responderá al estilo del editor vi.

Por ejemplo, para ingresar los textos debemos ingresar < o bien > para indicar la alineación justificada a izquierda o justificada a derecha.

Las expresiones numéricas, fórmulas, y rangos también operarán de manera muy similar a Exc€l, pero el numerado de las filas comienza en 0, y las funciones estarán precedidas por un número. Por ejemplo @sum(A0;A20). También es importante notar que una celda puede contener tanto números como una etiqueta.

Una tarea muy común al operar una planillas de cálculo es rellenar un rango de celdas con un valor o fórmula (con sus referenciado de filas/columnas ajustadas en forma correspondiente). Para hacer esto, debemos ingresar el valor que deseamos en la primera celda. Luego, con el cursor posicionado sobre dicha celda, tipeamos c. (c punto). Luego desplazamos el cursor a lo largo del rango deseado para el rellenado, y presionamos Enter, lo que completará la operación de rellenado.

Alternativamente, para rellenar un bloque con valores diferentes, primero tipeamos rf (por "range fill" o "relleno de rango"), seleccionamos el bloque desado, y presionamos ; o Tab para cambiar al Modo de Comandos, y luego ingresamos el inicio y su incremento. Por ejemplo, rf9j:3 3 rellenará las primeras celdas de la columna A con múltiplos de 3. Quienes desconozcan la notación Vi, ha de saber que en este caso 9j es un comando estilo Vi que indica "desplazarse hacia abajo nueve veces".

Otra funcionalidad de rango usada a menudo es ordenar, rs ("range sort" u "ordenar rango"). Si deseamos ordenar de forma ascendente en la primer columna de nuestro rango, simplemente ingresamos dicho comando. Sólo la seleccionamos visualmente y presionamos Enter. Caso contrario, tendremos que utilizar algunos de estos ejemplos:

Tipear esto… para ordenar así:
rs:"+#c Valores numéricos con la columna C en ascendente
rs:"-$a-$b Texto en las columnas A y B, descendente.
rs:"+$d+#d Tanto texto como números en columna D, ascendente.

El criterio de ordenamiento es un valor de texto con tres partes, el orden (+ para ascendente, - para descendente), el tipo de valor a buscar (# para numérico, $ para texto), y la columna a ordenar.

Presionar f conmuta al Modo de Configuración de Formato. el cual tiene sus propias asignaciones de teclas. Los formatos configurados de esta manera se aplicarán a la columna entera, que es generalmente lo anhelado.

Teclas(s) Función
h/l, / Ajusta ancho de columna
j/k, / Ajusta precisión decimal
0-9 Configura formato numérico predefinido
= Define el formato numérico
Enter Sale del Modo de Configuración de formato

Los formatos predefinidos que probablemente sean más útiles para las tareas básicas son 0 (cifras numéricas), 3 o 4 (fechas). El formato 4 dispone el uso de años de cuatro dígitos, lo cual es normalmente una buena idea, pero en una terminal serial, donde el espacio de pantalla siempre se presenta como escaso, podríamos preferir formato de años de dos cifras.

Para configurar un formato específico debemos ingresar f=, y luego ingresar el número del formato deseado, y finalmente escribir la cadena de formato (si no tiene set numeric activado. También puede presionar Enter e ingresar los comandos directamente, y emplear las flechas del cursor para obtener un historial de los ítems utilizados. Esto es adecuado si necesitamos experimentar con los distintos formatos para ver cuál nos resulta útil.Por ejemplo, esto configura el slot 7 con el formato de "moneda":

f=7$#,0.>
… lo cual coloca un signo $ delante del valor y emplea la precisión de campo por defecto.

Los formatos de fecha personalizados son similares, y el indicador del formato de fecha es un carácter ^D. Ya que los valores 3 y 4 ya están configurados para las fechas, podríamos mantener todos los valores de hora juntos, y definir 5 o 6 para fecha-hora y hora, respectivamente.

f=5^D%e %b
f=6^D%H:%M

(^D aquí indica que debemos presionar Ctrl+D.) Los códigos % son los mismos que el tiempo en Unix.

Si deseamos mantener estos formatos específicos como una configuración permanente en sc, podremos agregarlos al archivo ~/.scrc. Deberá tener cuidado con los formatos de fecha, ya que requiere un caracter carat "^", que se hace Ctrl+D.

format 5 = "^D%e %b"
format 6 = "^D%H:%M"
format 7 = "$#,0.&"

Afortunadamnete, sc no es tan arcaico como para obligarnos a escribir todas las fechas como valores time_t a fin de que se presenten adecuadamente. Existen varias amneras de expresar fechas y horas. En primer lugar - y probablemente la más útil) es introducir un valor como 2020.25.6 y será interpretado como una fecha. Tengamos presente que el año requiere cuatro dígitos. Esta será permutada tras su introducción a @dts(2020.25.6), lo cual es una fórmula que resulta en el time_t para la medianoche del 25 de mayo de 2020. Existe una función similar llamada @tts que se utiliza para introducir valores de tiempo (a los que incluso podremos sumar dos si queremos definir una fecha y una hora a la vez). Es un poco complejo, pero permite operar en dichas operaciones temporales, y la aparatologia de su fundamento termina teniendo más sentido que los números de fechas decimales que infectan al Exc€l.

Indudablemente, sc no es el programa mas bello del universo, pero si ingresamos set color en nuestro fichero ~/.scrc, podremos al menos obtener algunas combinaciones de colores alternas, e incluso configurar algunos por nosotros mismos. Podremos probar ingresar datos, desplazarnos a la parte superior, e introducir rC (para el comando "Rango en Color"), y luego seleccionar un bloque, luego presionar : e ingresar el número del color que deseamos. O en lugar de ello definir un par de color de la paleta de terminal.

Normalmente los colores por defecto son bastante feos, pero podremos analizar la página mán y editar el fichero ~/.scrc de manera acorde a nuestro criterio estético superior.

También contaremos con un par de configuraciones de color adicionales que podrían interesarnos. set colorneg incrementa el valor del color en uno si el valor de la celda es negativo (-) - en otras palabras, si la celda emplea por defecto el color1, las cifras negativas recibirán el color2. También tendremos el comando set colorerr, el cual remarcará las fórmulas resultantes en error con el color3. Normalmente empleo ellos, y generalmente utilizo los colores 4 a 8 para encabezados y otras celdas varias que podrían requerir cierto tipo de atención, tanto como uno podría utilizar tecto en negrita o itálica.

Una última opción que podrían anhelar conocer es cómo abarcar rangos acotados. Estos se utilizan para definir una serie de celdas que "queden activas" cuando nos movemos en la planilla, y en su forma básica, un rango acotado es similar a la función "congelar" de Excel. Es muy útil emplear la línea de comandos para definir estas celdas congeladas, especialmente para planillas grande que excedan la pantalla. Podremos también seleccionar los rangos interactivamnete si lo preferimos, al ingresar el comando rra. Cualquiera sea la manera de hacerlo que nos guste, la sintaxis general del comando en este caso es:

frame rango_superior rango_inferior

...donde reemplazamos rango_superior y rango_inferior es una notación separada por : que representa los rangos respectivos (por ejemplo A0:D50).

Suponiendo un ejemplo clásico, donde deseamos contar con un "encabezado" de columna A y fila 0 que quede siempre presente en la pantalla toda vez que nos desplazamos la planilla, nuestro rango_superior sería A0:Z199 (o cualquiera que deseamos) ,y el rango_inferior sería B1:Z199. Por tanto, la sintaxis final quedaría así:

frame A0:Z199 B1:Z199

…esto efectivamente "congelará" la primera columna en pantalla en tanto el cursor se encuentre dentro del rango_inferior que hemos definidos. Los rangos acotados son muy útiles, pero este empleo básico es el suficiente para la mayoría de nuestras necesidades.

4 comentarios:

  1. ¡Me hace acordar al Quatro Pro de la oligarquía, General!

    ResponderEliminar
    Respuestas
    1. Estimado Diego:

      Natural, Quattro Pro era oligarca, se basaba en MultiPlan, que tenía reminiscencias de SC.

      Atte.

      Juan Perón

      Eliminar
  2. ESPECTACULAR MUCHAS GRACIAS COMPAÑERO

    ResponderEliminar
    Respuestas
    1. Estimado Nico Coppo:

      Reciba un saludo muy afectuoso.

      Atte.

      Juan Perón

      Eliminar