Skill Flow Builder en Linux

No se ustedes, pero yo hace tiempo me he pasado a Linux. Y no me he arrepentido, ya que tengo casi todas las aplicaciones que necesito para trabajar, investigar, y por supuesto, entretenerme.

Y cuando digo “casi todas”, no me refiero al Photoshop…

Resulta que a mediados del año pasado, el equipo de Amazon se despachó con una aplicación que seguramente conocéis (y si no, vayan corriendo a probarla!) que es el Skill Flow Builder, o SFB para abreviar.

¡Se imaginan mi sorpresa cuando voy a la página de descargas y veo que solamente está disponible para Windows y macOS! ¡El team de desarrollo de SFB se ha olvidado de nosotros!

Pues bien, no importa, me dije. Para eso está el Wine. Sin embargo, no he podido instalarla en Wine. No se qué problema con el msi, o qué librería falta… pero no iba a darme por vencido tan fácilmente, así que busqué otro camino, y finalmente tengo la aplicación corriendo en Linux, con algunos problemas y fallos, pero bastante usable.

¿Quieren saber cómo? Sigan leyendo…

Curioso de ver si se podía hacer algo, traté de desempaquetar el archivo de instalacion msi para Windows, pero es complicado. Entonces lo intenté con el dmg de macOS, que no es otra cosa que una imagen de disco empaquetada.

Entonces, primero descargué el archivo de instalación de la última versión de SFB con el link de descarga. La última versión en este momento es la 1.3.4

Necesité convertirla a un formato que pudiera montar, para ello utilicé el comando dmg2img, que la convierte en un archivo img.

dmg2img SFBEditor-1.3.4.signed.dmg

que podemos extraer con 7zip:

7z x SFBEditor-1.3.4.signed.img

que nos genera un directorio “SFB Editor” con la aplicación para macOS.

(Sí, ya sé… también podría haber instalado hfsprogs y montado directamente el dmg…)

Dentro de ese directorio nos encontramos con un subdirectorio “SFB Editor.app/Contents/Resources”. Allí está nuestro objetivo, y podemos ver que SFB es una aplicación desarrollada con electronjs.

El resto de los directorios ya no los necesitamos, así que podemos copiar este “Resources” a algún lado, y eliminar lo demás.

¡Ahora sí! Ejecutamos la aplicación con:

electron app.asar

Arghh… da un error “Unsupported platform: linux”, y nos menciona que el error es en el archivo “/app/main.prod.js”. ¡Se pone interesante!

Vamos a modificar la aplicación, a ver si la podemos hacer funcionar. Como está empaquetada en el archivo app.asar, la desempaquetamos y eliminamos el paquete:

npx asar extract app.asar .
rm app.asar

Vemos también que hay una enorme cantidad de directorios *lproj vacíos que son los recursos de internacionalización de mac. Tampoco los necesitamos:

rm -rf *lproj

Dentro del directorio “app”, nos encontramos con main.prod.js, pero claro, está compilado y minificado. No importa, utilizando algún beautifier lo hacemos legible. Nosotros usamos beautifier.io.

Allí buscamos el texto de error “Unsupported platform” y nos encontramos con un bloque de código donde pregunta por “win32” y “darwin”. Pues entonces agregamos un nuevo bloque:

if ("linux" == e) return "linux";

Lo mismo debemos hacer en los archivos “dist/renderer.prod.js” y “utils-main/metrics.js”. En este último la sintaxis del if es levemente diferente, pero es muy sencilla la modificación:

} else if (platform == 'linux') {
    return 'linux';

Lo último que hay que hacer, por ahora, es habilitar la integracion de la ventana con Nodejs. Para ello, buscamos en main.prod.js la creación de la ventana con “BrowserWindow”, y modificamos la configuración de webPreferences, agregando la línea nodeIntegration: true. Queda así:

webPreferences: {
    nodeIntegration: true, //se agrega esta linea
    webviewTag: !0
}

¡Listo! Ahora ya podemos correr la aplicación, desde el directorio raíz (el que tiene el archivo package.json) con:

electron .

Sin embargo, no todo es color de rosa. La aplicación presenta algunos problemas, principalmente que los diálogos de selección de archivos (en File, Open Project, y en File, New Project, Project Directory) no funcionan.

Pero puedes crear proyectos en el directorio por defecto, que por suerte es el de Documentos de tu home, y abrirlos desde la lista de “Recent Projects”, así que no es demasiado restrictivo.

Tened en cuenta además que SFB no es compatible con ASK CLI 2.0 (ya habéis migrado a 2.0, ¿no?), entonces, el proceso de build hay que hacerlo manualmente.

Germán Viscuso (@germanviscuso, Alexa Evangelist), que es otro al que no le asusta ensuciarse las manos hackeando aplicaciones, publicó un gist muy interesante para tener los dos ASK (1.x y 2.x) corriendo en simultáneo. Pueden ver las instrucciones aquí.

También Luis Verge Gonzalez (Sr. Solution Architect en Amazon) ha escrito una muy buena introducción al SFB.

En fin, me quedo esperando que el team de SFB lance una nueva versión, que soporte ASK CLI 2.0. ¡Y espero que ésta vez implementen soporte para Linux “de fábrica”!

Mientras tanto, diviértanse explorando esta herramienta increíble.