Sunday, August 31, 2014

Javascript y su irrupción en el escritorio



Node Webkit
¿Cómo lo conocimos en Kinética Mobile?
Patentes y el mundo de algoritmos/software.
Problemas confrontados Nodewebkit
    Librerías en C de Node
    Ejecutar el proyecto
    Montar el EXE






Un anillo para gobernarlos a todos


Node Webkit

Es una aplicación basada en Chromium y nodejs. Te permite escribir aplicaciones nativas(Linux, MacOS, Windows) usando Html y Javascript. Pone a disposición de desarrollador el uso de módulos de nodejs directamente desde el DOM y te capacita para escribir aplicaciones nativas con todas las tecnologías web.

Descripción extraída y traducida de la propia documentación del proyecto

Node Webkit une dos cosas, por una parte toda la potencia y el ecosistema de node(acceso a archivos,base de datos y mil más), y un navegador, Chromium, para ejecutar nuestra aplicación web. Todo ello empaquetado y distribuible en las tres grandes plataformas de Escritorio Linux/MacOs/Windows.

Tenemos la experiencia del intento de unificación de un mismo código en javascript para las plataformas móviles, personalmente creo que de forma fallida, pues al final lo que se hace es pasar código javascript a código nativo.



En el caso de Node Webkit es darle la vuelta, utilizar algo que está testado y pulido intensivamente como es el motor V8 para javascript y aunar dos herramientas que lo usan para unificar lenguaje.

Desde luego con opciones como estas es como Javascript puede empezar a conquistar terrenos que antes tenía vedados.

El mismo proyecto reúne un listado de aplicaciones desarrollados con nodewebkit
Giftrocket (La usamos y detectamos rápidamente que era nodewebkit)
Game Dev Tycoon
Pop Corn Time


¿Cómo lo conocimos en Kinética Mobile?

En Kinetica Mobile tenemos un cliente que de forma anual genera una serie de CDs con una aplicación de consulta.

Antes de conocernos tenían una aplicación en Java con un diseño muy rudimentario. Cuando empezamos a trabajar para ellos nos preguntaron si éramos capaces de desarrollar una aplicación distribuible por CD para adecuar a la nueva imagen corporativa.

Hacemos desarrollos móviles/web y en este caso estaba orientado a desarrollar aplicación para escritorios Windows, ¿podíamos asumirlo?. Estuvimos buscando soluciones y dimos con una herramienta que te permitía desde CD montar un entorno LAMP y poder lanzar un navegador Firefox. Como la aplicación a desarrollar ya tenía versión web simplemente teníamos que copiar el código y realizar una serie de modificaciones específicas para la versión de escritorio.

La verdad es que una vez arrancada iba bastante fina, pero obviamente montar todo un entorno LAMP desde 0 es una tarea pesada y tardaba en hacer el deploy desde CD y setup cerca de un minuto.
El primer año lo dejamos así pero con la idea de intentar buscar alternativas para el año siguiente.
Pues bien, llegó el día y nos pusimos a investigar. Previamente ya habíamos recopilado algunos enlaces para leer. Entre ellos estaba nodewebkit.



¿Hacer una aplicación de escritorio multiplataforma(con los binarios para cada uno) sólo con Javascript? Sonaba un poco raro pero le dimos una oportunidad. Tras un par de pruebas vimos que era viable. Tuvimos que rehacer la aplicación con js, pero bueno tampoco era enorme y la satisfacción por solventar el minuto de carga de la versión anterior bien merecía la pena.

Tras el desarrollo tengo que decir que el concepto es muy sencillo, pero el resultado es realmente excepcional. Si tenemos en cuenta que somos empresa dedicada a desarrollo para plataformas móviles y en aplicaciones web, esto nos abría una puerta para tipo de propuestas que de otra manera rechazaríamos.


Patentes y el mundo de algoritmos/software.

El marido de una prima es ginecólogo/obstetra y por lo que tengo entendido bastante bien reconocido por su labor de investigación.

Coincidimos en una comida familiar y me comentó que quería que hablar conmigo para ver si le podía resolver unas cuestiones de desarrollo. Un par de meses más tarde, cuando ya lo tenía prácticamente olvidado, se produce la conversación. Su objetivo es obtener una patente sobre un algoritmo origen de su investigación.

Tras unas rondas de dudas en la oficina le comentan que patentar un algoritmo es complicado y que algo que sí puede patentar es un software y ahí es donde entra mi labor. Me pregunta si me puedo hacer cargo del desarrollo. Tras un par de emails me manda el resultado de la investigación y se resumen en una ecuación con un par de variables concretas del ámbito del problema.

Al verlo le digo que sin problemas, que mi especialidad es Android/Web y que puedo montarle lo que necesite en este aspecto. Me responde que lo necesita para Windows. Como no sabe exactamente lo que quiere, concreto con él hacer un prototipo en Android y, en caso de que se parezca a lo que busca, realizar el desarrollo para Windows.

Ese mismo fin de semana dedico una mañana a hacer el desarrollo para Android para tener un prototipo y se lo envio, a pesar de que no tiene apenas diseño parece que le ha gustado bastante. Una vez dado el visto bueno, dedico dos tarde para realizar el desarrollo y generar la documentación técnica para la parte de la Patente.

Como veis lo tiempos muy reducidos debido a la facilidad del proyecto y a conocer el entorno Android/Web. Si hubiera tenido que aprender ahora C# o rememorar lo poco que aprendí de Java Swing me hubiera llevado mucho más tiempo.

Tras el trabajo me comenta que sería interesante hablar sobre posibles colaboraciones con su equipo de investigación ya entrando en temas económicos.



Problemas confrontados Nodewebkit

Voy a contar problemas que nos encontramos a la hora del primer desarrollo, más que nada para que la gente pueda evitarlos si se decide a probarlo.


Librerías en C de Node

En el proyecto del CD necesitábamos una base de datos contra la cual realizar las consultas. El caso es metimos MongoDB y una pruebas básicas. Todo funcionaba perfectamente y no se cómo pero detectamos un “problema” con MongoDB para NodeWebkit y es que la librería para nodejs de MongoDB está en C por lo tanto habría que compilar la librería en las distintas plataformas para las que fuera a realizarse el desarrollo.

Por suerte ya existía una base de datos para nodejs con un mismo/parecido sistema de consultas y escrito totalmente en javascript NeDB. Gracias desde aquí a sus contribuidores.

De todas formas estuvimos unos días con la mosca detrás de la oreja por si acaso se nos escapaba algún detalle relacionado con este tema. Al final todo ok.


Ejecutar el proyecto

Imagina que tienes que estar tocando CSS o cambiando javascript, en web los cambios son prácticamente automáticos. Realizas cambios, guardas fichero, te vas al navegador y refrescas.

Pues bien, este workflow no podía hacerse porque hay que seguir una serie de pasos. Comprimir la carpeta del proyecto, renombrar  ese archivo resultante cambiando la extension y ejecutar.

Tras detectar que iba a ser una cosa muy común decidimos resumir esos pasos que hacíamos de forma visual y pasarlo a un comando de terminal. Espléndida idea.

Para el último desarrollo y tras mi experiencia con yeoman decidí consultar si había algún generador para nodewebkit. Existe y hace la la misma tarea aparte añadir cosas típicas como LINT, etc.


Montar el EXE

OJO. No hace falta ejecutar el EXE para ir viendo el desarrollo.

Cuando ya teníamos algo visible nos dispusimos a pasarlo a un archivo .EXE.

En la propia documentación de nodewebkit te explican todos los pasos. La primera vez puede ser algo lioso pero si sigues los pasos tal y como vienen lo consigues.

Una vez que los has realizado una vez el proceso se interioriza muy rápido y se puede hacer en poco tiempo.

No comments:

Post a Comment