197 - Scripts en JavaScript en Ubuntu. Historia de GTK 2 a 3.

197 - Scripts en JavaScript en Ubuntu. Historia de GTK 2 a 3.

Es posible crear tus scripts en JavaScript, ya sea para Ubuntu, o para otras distribuciones. Y por supuesto, interfaces gráficas en JavaScript.

1:25
-3:15

Hace unos días en el grupo de Telegram, surgió el tema de ejecutar JavaScript en el terminal. Evidentemente, lo primero que se te viene a la cabeza es recurrir a Node.js. Sin embargo, no es necesario nada de eso. Ni mucho menos. No necesitas instalar nada. O al menos no necesitas instalar nada en Ubuntu. ¿Que te parecería hacer tus scripts en JavaScript?

Supongo, que si no conoces esto que te estoy contando, te estés preguntando cosas como que ¿Que hace ese motor de JavaScript en Ubuntu?¿Que sentido tiene desarrollar scripts en JavaScript en Ubuntu?

Lo cierto, es que hace un tiempo, básicamente cuando escribí el artículo sobre ejecutar JavaScript en el terminal en Ubuntu, probablemente, yo también me planteé lo mismo. Es mas, probablemente, fuera hasta crítico con este movimiento. Sin embargo, ahora me parece un paso lógico, lento pero lógico.

Lógico, porque JavaScript está adquiriendo mucha relevancia en lo que a desarrollo se refiere. Lento, porque desde mi punto de vista, toda está sucediéndose muy poco a poco. Sinceramente, esperaba que esto fuera mucho más rápido de lo que hasta el momento ha ido.

Scripts en JavaScript

Scripts en JavaScript en Ubuntu

Momentos de gloria de JavaScript

Tal y como indico en el artículo que he mencionado en la introducción, lo que es indudable es que JavaScript está viviendo momentos de gloria. Desde hace mas de ocho años JavaScript es el lenguaje de programación mas utilizado. O al menos así se desprende de la encuesta publicada en StackOverflow. O sea, que esto es tan válido, hoy en día, como cuando publiqué ese artículo.

Aquí tengo que decirte, que mi amado Python se encuentra en cuarta posición. Y algunos otros datos, que he visto en la estadística y que hasta el momento no había caído, y que seguramente a ti también te llamarán la atención,

  • El tan denostado por unos y amados por otros PHP, y sin el que la tercera parte de las páginas web no funcionaría está entre los diez primeros. Nunca llegaré a entender, esa manía a un lenguaje de programación.
  • En el caso de los frameworks mas utilizados, los primeros puestos, están ocupados por JavaScript, como ya te podías imaginar. Sin embargo, ahí están también otros conocidos como Django o Flask, para el caso de Python o Laravel para PHP.
  • Respecto a las bases de datos, la primera es MySQL y la segunda PostgreSQL. Pero, ahí, también puedes encontrar SQLite, MariaDB o Redis, por citarte algunas que utilizo en mi tiempo de ocio.
  • Respecto a las plataformas mas populares en lo que a desarollo se refiere, la primera, está Linux, como seguro que ya te podías imaginar. Pero, no te pierdas, que la tercera es Docker.
  • Sin embargo, me llama la atención, que el sistema operativo principal, sea Windows, seguido primero por MacOS y muy cerquita, Linux… Que pena.

En fin, que enseguida me despisto. Lo cierto es que como puedes ver, JavaScript está en todo lo alto, y por tanto es ese lenguaje al que, actualmente, le tienes que hacer ojitos.

GJS

GJS te permite utilizar las librerías de la plataforma GNOME en tus aplicaciones implementadas con JavaScript. Así, GJS es el motor de GNOME Shell, Polari, GNOME Documents, y otras aplicaciones. Bajo el capó, GJS utiliza SpiderMonkey el motor JavaScript desarrollada originalmente para Firefox.

Un poquito de historia

Según los propios desarrolladores, GJS probablemente comenzó su camino en 2008, y desde el principio se adoptó como la base del código de GNOME SHELL, debutando como componente fundamental en GNOME 3.0.

En febrero de 2013 en el GNOME Developer Experience Hackfest GJS fue declarado el primero entre iguales en cuanto a lenguajes de programación para GNOME para el desarrollo de aplicaciones. Pero como de costumbre, esto resultó controvertido, y se abandonó. Ya vez, como somos la comunidad.

Mi historia con GJS

Como te puedes imaginar, el cambio de GTK 2.0 a GTK 3.0, supuso toda una revolución. Toda una revolución, tanto para bien, como para mal. Yo desde luego no lo supe entender. Eso de tener que migrar todo mis indicadores a extensiones de GNOME Shell, no me sentó nada bien.

No solo por el trabajo que tenía que realizar de nuevo, sino también, porque tenía que cambiar de lenguaje de programación. Tenía que dejar de lado a mi amado Python, en favor de JavaScript. Para mi era como ser infiel a Python. En ese momento pensé que esto no tenía sentido.

El estancamiento de Unity

Sin embargo, por aquel entonces, Unity, y todo el entorno de escritorio en Ubuntu estaba completamente estancado. No se veía evolución. Se pasaba de una versión a otra, y prácticamente no veías cambios. Era necesario hacer algo, o migrar a otro entorno de escritorio, o cualquier otra acción, pero la pasividad no era la solución,

En esta situación, me decidí a probar Linux Mint, en concreto el entrono de escritorio Cinnamon. Y fue una experiencia interesante, agradable, pero yo notaba que me faltaba algo. Sinceramente, sentía con Cinnamon, que me encontraba estancado con un entorno de escritorio como Windows, en palabras de aquel momento, mas de lo mismo. Por supuesto, que esto es mi experiencia, dentro de lo que andaba buscando.

Tienes que partir de la premisa, que a mi el cambio de Unity, lo cierto ese que me enamoró, porque es exactamente, como yo utilizo el escritorio. Exactamente lo mismo que ahora me pasa con GNOME Shell. Ahora me encuentro cómodo,

Pulso la tecla Super y las primeras letras de la aplicación que quiero iniciar.

Ubuncon 2018

Para la Ubuncon 2018, preparé una ponencia, gracias totalmente a la insistencia de Marcos Costales al que tanto tengo que agradecer. No solo por darnos a todos la posibilidad de participar en un evento como una Ubucon Europe en España, sino también porque insistiera en dar esa ponencia.

En concreto, la ponencia, hablaba sobre extender Ubuntu con JavaScript. Y es que por aquel entonces, ya había entendido el movimiento realizado por la gente de GNOME. ¿Porque?

Las extensiones de GNOME Shell suponían un cambio diferenciador respecto a lo que había visto hasta el momento. Mientras que con AppIndicator, apenas puedes poner una imagen, porque el funcionamiento es el de un menú, con las extensiones de GNOME Shell, se pueden hacer verdaderas maravillas. Solo tienes que comparar, como se ve mi indicador del tiempo, con el que puedes instalar desde las extensiones de GNOME,

y con GNOME Shell

Y eso que he hecho todo tipo de esfuerzos para mejorarlo y hacerlo lo mas visual posible. Sin embargo, no me podrás negar, que el salto cualitativo entre una solución y la otra no es notable.

Esto fue la razón, por la que finalmente me decidió a migrar los indicadores a GNOME Shell. Y sobre todo, a entender la razón por la que pasar de Unity a GNOME Shell.

Lo cierto es que con GJS, actualmente tienes todo un potencial increíble, no solo para crear extensiones para GNOME Shell, sino también, para crear tus propias aplicaciones gráficas, implementadas por completo en JavaScript.

Solo tienes que ver el ejemplo que te muestro a continuación, y que puedes copiar, pegar y ejecutar, directamente en tu terminal, para hacer tu primer hola mundo en GJS,

#!/usr/bin/gjs

print('Hola Mundo');

O incluso para crear tu primera ventana gráfica,

#!/usr/bin/gjs

const Gtk = imports.gi.Gtk;
Gtk.init(null);

let win = new Gtk.Window();
win.connect("delete-event", Gtk.main_quit);
win.show_all();
Gtk.main();

O por supuesto, un ejemplo algo mas complejo, aunque no mucho,

#!/usr/bin/gjs

imports.gi.versions.Gtk = '3.0';
const {GObject, Gtk} = imports.gi;

Gtk.init(null);

const MyWindow = GObject.registerClass(class MyWindow extends Gtk.Window {
    _init() {
        super._init({ title: "Hello World" });
        let box = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL,
                               spacing: 5, margin: 5});
        this.add(box);
        let button = new Gtk.Button({ label: "Click here" });
        button.connect("clicked", this.onButtonClicked);
        box.add(button);
        let label = new Gtk.Label({label:"Hello World", angle:25,
                                   halign: Gtk.Align.CENTER});
        box.add(label);
    }
    onButtonClicked(widget) {
        print("Hello World");
    }
});

let win = new MyWindow();
win.connect("delete-event", () => Gtk.main_quit());
win.show_all();
Gtk.main();

Indicarte que me estoy planteando seriamente incorporar esto en el tutorial de diálogos para scripts, porque puede ser algo realmente interesante. Ya sea para crear scripts en JavaScript o interfaces.

Pero no todo es un camino de rosas

Para mi esto ha supuesto una verdadera revolución por la cantidad de posibilidades que todo esto te ofrece. Sin embargo, como digo, no es un camino de rosas. Ni mucho menos. Uno de los problemas con los que me encontré, o mas bien que se encontraron los que empezaron a desarrollar con GJS, es que el desarrollo, en las primeras etapas era muy lento.

Mientras que el motor de JavaScript de Firefox, SpiderMonkey, iba evolucionando, el de GJS estaba totalmente estancado. Así, entre los años 2013 a 2017, mientras que en Firefox, se pasó de la versión 24 a la 54, GJS se quedó en la 24.

Como te puedes imaginar, cuando se adaptó GJS a SpiderMonekey, parte de las extensiones para versiones anteriores dejaron de funcionar, y esto fue un duro golpe para los desarrolladores. Y no es la única vez que sucede.

Pero no solo esto, y es que el problema de crear extensiones para GNOME Shell, es precisamente ese, que son extensiones para GNOME Shell. ¿Y que pasa con el resto de entornos de escritorio? Pues simplemente que tendrás que desarrollar tus extensiones utilizando otras herramientas.

En cuanto a las aplicaciones que desarrolles con JavaScript utilizando GJS, o los scripts en JavaScript, no tendrás problema. Simplemente, tienes que añadir GJS como dependencia y a funcionar.

Conclusiones

Desde mi punto de vista, si utilizas JavaScript en otros ámbitos, esta es una excelente manera de adentrarte en el mundo de las interfaces de escritorio, sin necesidad de aprender otro lenguaje de programación, implementados scripts en JavaScript o incluso interfaces gráficas en JavaScript.

Si no conoces ningún lenguaje de programación, esta es una magnífica posibilidad de comenzar a aprender por ti mismo, un lenguaje de programación con el potencial que tiene JavaScript actualmente. Y sobre todo con el futuro prometedor que se le augura.

Así que no te lo pienses dos veces y empieza a desarrollar con JavaScript y GJS en Ubuntu, o en el entorno de escritorio que quieras.


Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *