Giter VIP home page Giter VIP logo

wollok-mobile's Introduction

Wollok Mobile

A mobile IDE for Wollok

Local development

After setting up your development environment, in the project directory you can run:

yarn

To install dependencies

yarn start

To start metro

yarn android

To run the app on your android devices (external devices should be connected by USB)

Assembling APKs

All the generated files will be located in the following directory: android/app/build/outputs/apk/<release or debug>/

Debug APK

Run the following command in the project directory:

yarn publish-debug:android

Release APK

For this you'll need to generate a keystore, it will prompt you to set a password, save it.

keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Place the keystore file under the android/app folder

Then create the file android/keystores/release.keystore.properties with the following information:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=<the password you saved before>
MYAPP_RELEASE_KEY_PASSWORD=<the password you saved before>

Then use the following command to assemble your release APK

yarn publish-release:android

note: The keystore generation is a one time only process, after that you can reuse the already generated one.

Releases

A release is triggered on every push to main. A tag will be created based on the package.json version number, said version must be bumped manually.

Steps for a succesfull release 💪

  1. Bump npm package version on dev. Do not create a tag here.
  2. Merge dev -> main
  3. ????
  4. Profit

wollok-mobile's People

Contributors

github-actions[bot] avatar ivojawer avatar palumbon avatar reslotus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

seanpm2001

wollok-mobile's Issues

Poder correr todos los tests

Debería haber un botón de play a la derecha en el header, y que eso mande a ejecutar todos los tests.

Para eso habría que pasar el estado de los tests a un context 😩

Falta un .nvmrc

Especificando la versión de Node con la que estamos trabajando

Acceder al método label de Wollok

Ahora al mostrar un método se calcula cómo mostrarlo con el nombre del método los nombres de los parámetros: acá (encima tiene un bug)

Esa lógica ya se encuentra en Wollok: acá.

El problema es que ese método no aparece cuando el proyecto es una dependencia 😢

Poder guardar un programa

De manera local en el teléfono, y que se pueda recuperar luego.

Poder elegir el idioma

  • Ahora toma la default del sistema (lo cual está bien).
  • Si se cambia, estaría bueno que quede persistido.
  • Nos va a servir para testear las traducciones.

Spinner mientras buildea el environment

Basicamente siempre que se haga un add member (que sucede al momento de tappear el tick del header) se va a buildear todo el environment que en un celu gama media puede tardar 5-10seg.

  • Que el tick se convierta en un spinner en el header mientras está buildeando
  • Y que luego se convierta en un iconito de validación cuando termine (ok, warn, error). See: #41

Para esto habría que builder en otro thread: #39

Diagrama dinamico

Algunas features que estarían buenas:

  • Que este en la misma pantalla que la consola
    • ⚠️ performance
    • #15
  • Poder mover los nodos
  • Podes ver los nombres de la referencia
  • Gestos/interacciones
    • Zoom
    • Scroll en todas las direcciones

Esto podria ayudar al menos de inspiracion: https://graph-controller.yeger.eu/demo/

Agregar "Empty texts"

Poner un texto descriptivo y cheto para cuando no hay proyectos, entidades, atributos, métodos, tests, etc?

Poder importar / exportar un proyecto Wollok

Esto tiene varias aristas:

  • Poder importar / exportar proyectos para compartir entre Wollok-Mobiles
  • Poder importar un proyecto en código (texto) descargado localmente
  • Poder exportar un proyecto a código (texto)

Soportar mas sentencias

  • Return
  • If
  • Definir una variable / constante local

En el archivo BodyMaker.tsx - posible refactor: mover el switch a otro component/function :P

Mejorar la selección de proyectos

Cosas que quedaron de este PR: #49

  • Actualmente nos guardamos todo el Environment, incluyendo las clases de Wollok. Analizar si eso está bien (no hay problemas con las natives?) o so conviene no hacerlo y pasarles la WRE al "buildear" el proyecto.
  • Ahora los proyectos nuevos se cargan con un ejemplo medio choto de pepita:
    • Estaría bueno la opción de proyecto en blanco (con solamente la WRE) o con algún ejercicio (como pepita, el sueldo de pepe, etc.)
    • Se podría agregar alguna descripción a los "templates". Como a dónde apunta cada ejercicio.
    • Ahora el ejemplo está escrito instanciando los nodos del AST en código. Deberían estar escrito en Wollok (clonados desde GH supongo) y parsearlos desde ahí. La forma más cómoda de escribir un programa en Wollok, por ahora, es codeándolo.
  • El load & save de los proyectos lleva algo de tiempo, agregar alguna animación copada.

App crashea en Android

Al correr los tests la App se cierra con Fatal signal 6. Esto es porque el UI thread se bloquea.

Probar si con esto se arregla: https://github.com/joltup/react-native-threads


EDIT (30/01/2022)

  • react-native-threads se quedó en el tiempo y surgen varios problemas para instalarlo (hay que pelear con el build de RN que te cambia el código de los Packages de Java)
  • Estuvimos logueando dónde está el problema con Wollok-TS y llegamos a que:
    • Probamos usar un ExecutionDirector con un setInterval para darle next "de a pasitos".
    • Hay problemas al crear la Evaluation: se rompe al crear todos los Singletons.
    • Zafando de eso (solamente creando el objeto assert), hay un problema de que la versión de JS no tiene implementado soporte para las WeakRef que se usan para la cache de Literales.
  • Otra alternativa sería ejecutar en una view de un navegador (que es otro proceso) usando: https://www.npmjs.com/package/@cawfree/react-native-elsewhere (tiene problemas con Hermes)

ABM para tod@s

  • Poder borrar un proyecto
  • Poder borrar una entidad / test
  • Poder modificar y borrar un atributo
  • Poder borrar un método

Mejorar el armado de expresiones

Ahora cuando se arma una expresión se pierde el contexto de dónde se está codeando (test / método).

  • Buscar la forma de poder ver esa info mientras se arma la expresión.
  • También mejorar la selección de parámetros -> mostrar la expresión completa (o ver todo el método, no sé).

Configurar Expo

  • Analizar si está piola tenerlo, tal vez no es necesario
  • Si lo es, instalarlo, configurarlo y escribir algo en el README

Poder ver los métodos de los mensajes

Cuando se está enviando un mensaje estaría bueno poder inspeccionar el/los método(s) que posiblemente se ejecute.

Yo había pensado tener un ojo en el listado de mensajes y que despligue el método.

Agregar i18n

Para no hardcodear textos en español en las vistas. Habría que buscar alguno que funcione con React (no conozco ninguno).

Tener una consola

Poder:

  • Armar una expresión
  • Evaluarla
  • Mostrar el resultado si lo hay

Esto debería estar basado en el ExpressionMaker.

Poder asignarle 100 a la energía de Pepita

Al momento de crear un atributo se debería poder asignar un valor inicial (una expresión).

Por ahora dijimos de poder iniciarlizarlo con un número (y tal vez string) y que quede asignado al atributo.

Incluso en la configuracion "debug" se necesita el release.keystore

Esto es muy molesto para alguien que recien comienza en el proyecto, ya que necesitara generar un keystore propio.

Un comienzo

Estas lineas esta al comienzo del build.gradle, pueden ser las causantes del problema.

def keystorePropertiesFile = rootProject.file("keystores/release.keystore.properties");
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

En el peor de los casos

Si no se puede fixear bien, se puede versionar un archivo con datos basura a ser reemplazados cuando se quiera releasear.

Branding aplicacion

Lo que dice el titulo basicamente, al menos para android estaria bueno cambiar

  1. El titulo (actualmente es "wollokMobile")
  2. El icono
  3. La splash screen

No dejar crear entidades sin nombre

Si ahora creo una entidad y nunca le pongo nombre la crea sin problemas, lo que es raro, estaría bueno que no pase.

EDIT: Ahora también pasa que si agregás un Describe sin nombre y entrás para ponerle tests te muestra la pantalla de la definición de un objeto (supongo que es porque se accede por fqn, y no tener nombre rompe el fqn).

Screenshot_20210526-123134_Wollok.jpg

Se podría poner una validación en los diálogos de creación, que te avise que le tenés que poner un nombre.

Poder crear el método volar de Pepita

Depends on #11

Para eso es necesario poder crear el cuerpo al momento de definir método (similar a los atributos).

Esto debería poder crear una asignación de variables y poder enviarle el mensaje - a (la referencia de) el atributo (junto con otro literal).

Mejorar la performance

Ahora la app tarda varios segundos en:

  • Cargar un proyecto
  • Navegar entre entidades y tests
  • Ver una entidad
  • Modificar (atributos / métodos) de una entidad
  • ... prácticamente todo

Lo que habría que hacer es:

  • Dar feedback de que la app no está tildada sino pensando (como un spinner grande en forma de modal)
  • Analizar los cuellos de botellas (probablemente estén en Wollok-TS, pero no sabemos)
  • Mejorar esos cuellos de botellas (cargar más issues si es necesario)

Refactor UX/UI del creador de expresiones

Algunas propuestas

  • Quiere ver la expresión total en todo momento.
  • Quiero poder tappear los espacios vacíos e ir completándolos en el orden que yo quiera.
  • Quiero que se indente la expresión o que sea scrolleable horizontalmente (bugfix: ahora no se puede ver la enteridad de una expresión larga).
  • Mientras armo la expresión quiero poder ver la enteridad del bloque de código en el que se va a introducir la expresión.
    • Inclusive quiero ver el contexto de la sentencia. (e.g. si estoy armando un return quiero verlo)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.