TakeNotes

Scrum es una metodología de trabajo que se usa para resolver proyectos, especialmente proyectos de desarrollo de software, en este foro se resolveran dudas sobre SCRUM
Post Reply
User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

TakeNotes

Post by SamuelR » Mon Jan 28, 2019 3:37 pm

Presentación de la idea:


Modelo Canvas:
Image

Planeación de actividades:
Image

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Tue Jan 29, 2019 10:49 pm

Sprint 1
Fecha inicio: 28-01-2019
Fecha fin: 04-02-2019


Actividades

  • Generar idea de proyecto. (4)
  • Realizar cronograma de actividades. (3)
  • Registrar el proyecto en holamundo.co (2)
  • Presentar el proyecto. (1)
  • Recopilar información sobre las aplicaciones similares al proyecto. (2)
  • Planear el primer diseño de la interfaz del proyecto. (3)
  • Consultar sobre el uso de Google Speech. (2)


Velocidad inicial: 17
Velocidad final: 17

¿Que se hizo?
  • Se generó la idea de proyecto.
    Presentación de la idea:


    Modelo Canvas:
    Image
  • Se hizo un cronograma de actividades prototipo.
    Planeación de actividades:
    Image
  • Se registró el proyecto en holamundo.co
    Image
  • Se presentó el Pitch del proyecto.
  • Se buscó información sobre aplicaciones similares.
  • Se programó el primer prototipo de la interfaz gráfica en Android Studio.
    Image
  • Se recopiló información sobre el funcionamiento de Google Speech.


¿Que voy a hacer?
Agregar foto de perfil en holamundo.co
Publicar evidencias del Sprint 1.
Planear Sprint 2.

¿Que problemas se han tenido?
Necesidad de ajustes en el Modelo Canvas.
Optimización de la planeación del proyecto.
Last edited by SamuelR on Mon Feb 18, 2019 4:16 pm, edited 5 times in total.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Feb 04, 2019 4:25 pm

Sprint 2
Fecha inicio: 04-02-2019
Fecha fin: 11-02-2019


Actividades
Crear el repositorio. (2)
Definir lenguaje de programación y entorno de desarrollo para el proyecto. (2)
Formular requisitos del proyecto. (3)

Velocidad inicial: 7
Velocidad final: 5

¿Que se hizo?

  • Se agregó foto de perfil en holamundo.co
    Image
  • Se publicaron evidencias del Sprint 1.
    Image
  • Se creó el repositorio.
    Image
  • Se especificaron los requisitos del proyecto.
    • La aplicación debe tener una interfaz clara y fácil de utilizar.
    • El usuario debe tener la opción de ingresar audio al aplicativo.
    • La aplicación debe tener un cuadro de texto en el que se escriba el resultado del Speech.
    • La aplicación debe permitir exportar el cuadro de texto a un documento.
    • La aplicación debe permitir escanear imágenes con texto y ofrecer el mismo resultado (No confirmado).


¿Que voy a hacer?

  • Planificar el Sprint 3.
  • Terminar de decidir las herramientas que se utilizarán en el proyecto.


¿Que problemas se han tenido?
No se presentaron problemas.
Last edited by SamuelR on Mon Feb 18, 2019 4:18 pm, edited 1 time in total.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Feb 11, 2019 4:02 pm

Sprint 3
Fecha inicio: 11-02-2019
Fecha fin: 18-02-2019


Actividades
Comenzar a programar la aplicación haciendo pruebas con el Framework. (3)
Asistir a un meetup. (2)

Velocidad inicial: 5
Velocidad final: 3

¿Que se hizo?

  • Para la aplicación se optó por utilizar el lenguaje de programación Python y el framework Kivy para la creación de aplicaciones en distintas plataformas.
    Image
    Image
  • Se instalaron dependencias y el framework.
    Image

    Image
  • Se programo un diseño inicial para probar el framework.
    Image

    Image

    Resultado:
    Image


¿Que voy a hacer?

  • Planificar el Sprint 4.
  • Asistir a un meetup futuro.


¿Que problemas se han tenido?
No se presentaron problemas.
Last edited by SamuelR on Mon Feb 18, 2019 3:09 pm, edited 1 time in total.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Feb 18, 2019 10:16 am

Sprint 4
Fecha inicio: 18-02-2019
Fecha fin: 25-02-2019


Actividades
Instalar las herramientas de python para el reconocimiento de voz y el API. (2)
Vincular el API con el framework Kivy. (3)
Diseñar el Wireframe. (2)
Consultar sobre las interfaces en Kivy. (1)

Velocidad inicial: 8
Velocidad final: 8

¿Que se hizo?

  • Se instaló SpeechRecognition para Python.
    Image
  • Se intentó instalar pyaudio mediante pip sin ningún resultado.
    Image
  • Se probó instalar pyaudio mediante el paquete distutils, el módulo fue instalado pero la librería PortAudio no.
    Image
  • Se instaló Anaconda para poder instalar pyaudio correctamente, no se tuvo éxito.
    Image
  • Se instaló finalmente el módulo pyaudio a través de un archivo .whl
    Image
  • Se creó un archivo .py en el que se hace uso del Reconocimiento de voz.

    Code: Select all

    import speech_recognition as sr
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print('Diga algo')
        audio = r.listen(source)
        
    try:
        print('Usted dijo: \n' + r.recognize_google(audio))
    except:
        pass
  • Se encontró un error al iniciar el programa, simplemente se necesitaba de un micrófono para poder ejecutarlo.
    Image

    Resultado del programa (Aunque el programa no tenía errores, no se pudo ingresar audio):
    Image
  • Se creo un programa para implementar el reconocimiento de voz con Kivy.

    Code: Select all

    from kivy.app import App
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout
    import speech_recognition as sr
    
    class myLayout(BoxLayout):
        def __init__(self, **kwargs):
            super(myLayout, self).__init__(**kwargs)
    
            btn = Button(text = "Click")
            btn.bind(on_press=self.clk)
    
            self.add_widget(btn)
    
        def clk(self, obj):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                print('Diga algo')
                audio = r.listen(source)
        
            try:
                print('Usted dijo: \n' + r.recognize_google(audio))
            except:
                pass
    
    class apitest(App):
        def build(self):
            mL = myLayout()
            return mL
        
    apitest().run()
    
    Resultado del programa:
    Image

    Resultado del programa luego de hacer click en el botón:
    Image
  • Se diseño el Wireframe del aplicativo.
    Image
  • Se consultó sobre el lenguaje .kv para crear Interfaces.
¿Que voy a hacer?
  • Planificar el Sprint 5.
¿Que problemas se han tenido?
  • La instalación de ciertas herramientas tomó más esfuerzo del previsto.
Last edited by SamuelR on Sun Mar 03, 2019 5:26 pm, edited 1 time in total.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Feb 25, 2019 4:27 pm

Sprint 5
Fecha inicio: 25-02-2019
Fecha fin: 4-03-2019


Actividades
Diseñar las interfaces del programa a través de Kivy. (3)
Programar la funcionalidad del botón Speech. (3)
Programar el resultado del código en el Label. (2)

Historias de usuario
Como cliente deseo poder utilizar la aplicación fácilmente.
Como cliente deseo poder ingresar audio a la aplicación con solo presionar un botón.
Como cliente quiero tener la capacidad de visualizar el resultado del reconocimiento de voz en pantalla.

Condiciones de satisfacción
La aplicación tendrá una interfaz simple de utilizar.
El cliente tendrá la capacidad de utilizar el Speech con tan solo presionar un botón.
El cliente podrá visualizar el resultado del programa en pantalla.

Velocidad inicial: 8
Velocidad final: 8

¿Que se hizo?

  • Se programo la funcionalidad de Speech y el label de Main.
    py:

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    import speech_recognition as sr
    
    from kivy.config import Config
    Config.set('graphics', 'resizable', 0)
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class Container(BoxLayout):
        def __init__(self):
            super(Container, self).__init__()
    
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
        
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
        
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return Container()
        
    if __name__ == '__main__':
        MainApp().run()
    
    kv:

    Code: Select all

    <Container>:
        lbl: my_label
    
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
            Label:
                id: my_label
                text: 'Content'
            Button:
                text: 'Export'
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    Resultado:
    Image

    Image
  • Se diseñaron las demás interfaces.
    Login
    py:

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    
    from kivy.config import Config
    Config.set('graphics', 'resizable', 0)
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class Container(BoxLayout):
        def __init__(self):
            super(Container, self).__init__()
    
    class LoginApp(App):
        def build(self):
            return Container()
    
    if __name__ == '__main__':
        LoginApp().run()
    
    kv:

    Code: Select all

    <Container>:
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            Image:
                source: 'TakeNotes.png'
            TextInput:
                id: login
            TextInput:
                id: passw
                password: True
            Button:
                text: 'Enter'
    Resultado:
    Image

    Options
    py:

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    
    from kivy.config import Config
    Config.set('graphics', 'resizable', 0)
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class Container(BoxLayout):
        def __init__(self):
            super(Container, self).__init__()
    
    class OptionsApp(App):
        def build(self):
            return Container()
    
    if __name__ == '__main__':
        OptionsApp().run()
    
    kv:

    Code: Select all

    <Container>:
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            Image:
                source: 'TakeNotes.png'
            Button:
                text: 'Placeholder'
            Button:
                text: 'Speech to Text'
    Resultado:
    Image

    Sobre el repositorio
    Image

    Image

    Image

    Image

    ¿Que voy a hacer?
    • Planificar el Sprint 6.
    ¿Que problemas se han tenido?
    No se presentaron problemas.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Mon Mar 04, 2019 4:48 pm

Sprint 6
Fecha inicio: 4-03-2019
Fecha fin: 11-03-2019


Actividades
Mejorar el diseño de las interfaces de la aplicación. (2)
Comenzar a programar la función Login. (4)
Comenzar a programar la navegación dentro de la aplicación. (3)

Historias de usuario
Como cliente quiero que la aplicación tenga una interfaz con buen aspecto.
Como cliente deseo poder enviar los resultado del programa a mi correo.
Como usuario quiero poder navegar a través de la aplicación.

Condiciones de Satisfacción
La aplicación tendrá una interfaz bien diseñada estéticamente.
La aplicación tendrá una función de Inicio de Sesión.
El aplicativo contará con un sistema de navegación.

Velocidad inicial: 9
Velocidad final: 8

¿Que se hizo?

  • Se programo la navegación en la aplicación.

    Image

    Para ello en el main.py se crearon clases Screen y ScreenManager y se cambió la forma de invocar el archivo .kv

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    import speech_recognition as sr
    
    from kivy.config import Config
    Config.set('graphics', 'resizable', 0)
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
        
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
    
    class LoginScreen(Screen):
        pass
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    presentation = Builder.load_file("main.kv")
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return presentation
        
    if __name__ == '__main__':
        MainApp().run()
    
    Se crearon instancias de las demás Screens en main.kv

    Code: Select all

    #: import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:include login.kv
    #:include options.kv
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Label:
                    id: my_label
                    text: 'Content'
            Button:
                text: 'Export'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_release: app.root.current = "options"
    
    <LoginScreen>:
        name: "login"
    
    <OptionsScreen>:
        name: "options"
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    Screens se refiere a las demás interfaces, Login y Options, cuyos .kv fueron reestructurados. Para estos se cambiaron los Contenedores que guardaban las interfaces por clases dinámicas (Para que sean instanciadas en main.kv).

    Login.kv

    Code: Select all

    <LoginScreen@Screen>:
        name: "login"
        spacing: 10
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            size_hint_y: None
            orientation: 'vertical'
            height: 50
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Login"
            Label:
                text: "Username"
            TextInput:
                id: usrname
                hint_text: "Username"
                multiline: False
            Label:
                text: "Password"
            TextInput:
                id: passw
                hint_text: "Password"
                password: True
                multiline: False
            Button:
                text: 'Enter'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "options"
                
    Options.kv

    Code: Select all

    <OptionsScreen@Screen>:
        name: "options"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.4,0.4,0.4, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Image:
                    source: 'TakeNotes.png'
                Label:
                    text: "Options"
            Label:
                text: "Choose one"
            Button:
                text: 'Reconsider Login'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "login"
            Button:
                text: 'Speech to Text'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_press: app.root.current = "main"
    
    Los archivos login.py y Options.py no fueron modificados.
  • Se comenzó a trabajar en la interfaz Login.
  • Se mejoró el diseño de la aplicacion, cambiando el color al fondo, modificando algunas interfaces y cambiando el color de los botones en funcionamiento.

    Image
Los 20 commits

Image

Burn down chart

Image

¿Que voy a hacer?
  • Planificar el Sprint 7.
  • Continuar con la programacion de Login.
¿Que problemas se han tenido?
  • Se presentaron problemas en la funcionalidad de inicio de sesión.
  • Se presentaron problemas para transportar la funcionalidad del main a las nuevas clases, al final se pudo resolver.

User avatar
SamuelR
Posts: 8
Joined: Mon Jan 28, 2019 3:21 pm

Re: TakeNotes

Post by SamuelR » Wed Mar 13, 2019 10:57 pm

Sprint 7
Fecha inicio: 11-03-2019
Fecha fin: 18-03-2019


Actividades
Continuar con la programación de la funcionalidad Login. (4)
Comenzar a crear la presentación del proyecto. (2)
Hacer pruebas del proyecto en Android. (3)

Historias de usuario
Como cliente deseo poder enviar los resultado del programa a mi correo.
Como cliente y dueño de un Motorola Moto G5 deseo poder usar la aplicación en él.

Condiciones de Satisfacción
La aplicación tendrá una función de Inicio de Sesión.
La aplicación estará disponible para dispositivos Android.

Velocidad inicial: 9
Velocidad final: 9

¿Que se hizo?

  • Se termino de programar el Login (un poco precario) de la app.
    En el main.py se crearon PopUps y se usó el módulo DataBase.

    main.py

    Code: Select all

    import kivy
    kivy.require('1.10.1')
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
    from kivy.lang import Builder
    from kivy.properties import ObjectProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase
    import speech_recognition as sr
    
    from kivy.config import Config
    Config.set('graphics', 'resizable', 0)
    Config.set('graphics', 'width', 400)
    Config.set('graphics', 'height', 500)
    
    class MainScreen(Screen):
        def btn_clk(self):
            r = sr.Recognizer()
            with sr.Microphone() as source:
                self.lbl.text = 'Say something...'
                audio = r.listen(source)
        
            try:
                self.lbl.text = 'You said: \n' + r.recognize_google(audio)
            except:
                pass
    
    class LoginScreen(Screen):
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def loginBtn(self):
            if db.validate(self.email.text, self.password.text):
                MainScreen.current = self.email.text
                self.reset()
                sm.current = "options"
            else:
                invalidLogin()
    
        def createBtn(self):
            self.reset()
            sm.current = "new"
    
        def reset(self):
            self.email.text = ""
            self.password.text = "" 
    
    
    class NewAccountScreen(Screen):
        namee = ObjectProperty(None)
        email = ObjectProperty(None)
        password = ObjectProperty(None)
    
        def submit(self):
            if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
                if self.password != "":
                    db.add_user(self.email.text, self.password.text, self.namee.text)
    
                    self.reset()
    
                    sm.current = "login"
                else:
                    invalidForm()
            else:
                invalidForm()
    
        def login(self):
            self.reset()
            sm.current = "login"
    
        def reset(self):
            self.email.text = ""
            self.password.text = ""
            self.namee.text = ""
    
    class OptionsScreen(Screen):
        pass
    
    class ScreenManagement(ScreenManager):
        pass
    
    def invalidLogin():
        pop = Popup(title='Invalid Login',
                      content=Label(text='Invalid username or password.'),
                      size_hint=(None, None), size=(400, 400))
        pop.open()
    
    
    def invalidForm():
        pop = Popup(title='Invalid Form',
                      content=Label(text='Please fill in all inputs with valid information.'),
                      size_hint=(None, None), size=(400, 400))
    
        pop.open()
    
    def existingAccount():
            pop = Popup(title='Existing account',
                          content=Label(text='Account already exists'),
                          size_hint=(None, None), size=(400, 400))
            pop.open()
    
    presentation = Builder.load_file("main.kv")
    sm = ScreenManagement()
    db = DataBase("users.txt")
    
    screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")]
    for screen in screens:
        sm.add_widget(screen)
    
    sm.current = "login"
     
    class MainApp(App):
        title = "TakeNotes"
        def build(self):
            return sm
        
    if __name__ == '__main__':
        MainApp().run()
    
    
  • Se creó un nuevo archivo .py llamado database.

    database.py

    Code: Select all

    import datetime
    from kivy.uix.popup import Popup
    
    class DataBase:
        def __init__(self, filename):
            self.filename = filename
            self.users = None
            self.file = None
            self.load()
    
        def load(self):
            self.file = open(self.filename, "r")
            self.users = {}
    
            for line in self.file:
                email, password, name, created = line.strip().split(";")
                self.users[email] = (password, name, created)
    
            self.file.close()
    
        def get_user(self, email):
            if email in self.users:
                return self.users[email]
            else:
                return -1
    
        def add_user(self, email, password, name):
            if email.strip() not in self.users:
                self.users[email.strip()] = (password.strip(), name.strip(), DataBase.get_date())
                self.save()
                return 1
            else:
                print("Existing account")
                return -1
    
        def validate(self, email, password):
            if self.get_user(email) != -1:
                return self.users[email][0] == password
            else:
                return False
    
        def save(self):
            with open(self.filename, "w") as f:
                for user in self.users:
                    f.write(user + ";" + self.users[user][0] + ";" + self.users[user][1] + ";" + self.users[user][2] + "\n")
    
        @staticmethod
        def get_date():
            return str(datetime.datetime.now()).split(" ")[0]
    
    
  • Se creó una nueva pantalla para ingresar nuevos usuarios directamente en el main.kv

    main.kv

    Code: Select all

    #: import FadeTransition kivy.uix.screenmanager.FadeTransition
    #:include login.kv
    #:include options.kv
    
    ScreenManagement:
        transition: FadeTransition()
        LoginScreen:
        OptionsScreen:
        MainScreen:
    
    <MainScreen>:
        name: "main"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        BoxLayout:
            orientation: 'vertical'
            size: root.size
            spacing: 20
            padding: 20
            ImageButton:
                source: 'TakeNotes.png'
                on_press:root.btn_clk()
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
            BoxLayout:
                canvas.before:
                    Color:
                        rgba: (0.52,0.52,0.52, 1)
                    Rectangle:
                        size: self.size
                        pos: self.pos
                Label:
                    id: my_label
                    text: 'Content'
            Button:
                text: 'Export'
                on_press: self.background_color = (0.1, 0.1, 0.1, 1)
                on_release: self.background_color = (1, 1, 1, 1)
                on_release: app.root.current = "options"
    
    <LoginScreen>:
        name: "login"
    
    <OptionsScreen>:
        name: "options"
    
    <Container>:
        lbl: my_label
    
    <ImageButton@Button>:
        source: None
    
        Image:
            source: root.source
            pos: root.pos
            size: root.size
    
    <NewAccountScreen>:
        name: "new"
        canvas.before:
            Color:
                rgba: (0.5,0.5,0.5, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        namee: namee
        email: email
        password: passw
    
        FloatLayout:
            cols:1
    
            FloatLayout:
                size: root.width, root.height/2
    
                Label:
                    text: "Create an Account"
                    size_hint: 0.8, 0.2
                    pos_hint: {"x":0.1, "top":1}
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                Label:
                    size_hint: 0.5,0.12
                    pos_hint: {"x":0, "top":0.8}
                    text: "Name: "
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                TextInput:
                    pos_hint: {"x":0.5, "top":0.8}
                    size_hint: 0.4, 0.12
                    id: namee
                    multiline: False
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                Label:
                    size_hint: 0.5,0.12
                    pos_hint: {"x":0, "top":0.8-0.13}
                    text: "Email: "
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                TextInput:
                    pos_hint: {"x":0.5, "top":0.8-0.13}
                    size_hint: 0.4, 0.12
                    id: email
                    multiline: False
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                Label:
                    size_hint: 0.5,0.12
                    pos_hint: {"x":0, "top":0.8-0.13*2}
                    text: "Password: "
                    font_size: (root.width**2 + root.height**2) / 14**4
    
                TextInput:
                    pos_hint: {"x":0.5, "top":0.8-0.13*2}
                    size_hint: 0.4, 0.12
                    id: passw
                    multiline: False
                    password: True
                    font_size: (root.width**2 + root.height**2) / 14**4
    
            Button:
                pos_hint:{"x":0.3,"y":0.25}
                size_hint: 0.4, 0.1
                font_size: (root.width**2 + root.height**2) / 17**4
                text: "Already have an Account? Log In"
                on_release:
                    root.manager.transition.direction = "left"
                    root.login()
    
            Button:
                pos_hint:{"x":0.2,"y":0.05}
                size_hint: 0.6, 0.15
                text: "Submit"
                font_size: (root.width**2 + root.height**2) / 14**4
                on_release:
                    root.manager.transition.direction = "left"
                    root.submit()
    Image
  • Se creó la plantilla de la presentación del proyecto.

    Image

    Image

    Image
  • Se descargó la aplicación Kivy Launcher para hacer las pruebas de la aplicacion en un dispositivo Android.

    Image

    Image
  • Se exportó el programa al móvil y se probó su funcionamiento.
    Lamentablemente no funcionó ya que Kivy Launcher no opera con aplicaciones complejas de Kivy.

    Image
Burndown Chart

Image


¿Que voy a hacer?
  • Planificar el Sprint 8.
¿Que problemas se han tenido?
  • No se presentaron problemas.

Post Reply