# Escoha de tecnologias # UI ## Web app #### pros: - Fácil acesso a partir de qualquer dispositivo com ligação à internet - Não requer instalação ou atualizações nos dispositivos para poder ser usado - É possível implementar atualizações e correções instantaneamente - Permite o uso de recursos de nuvem para armazenamento e processamento de dados #### contras: - Requer uma ligação constante à internet - Pode ter um desempenho mais lento e menor capacidade de processamento - Depende da compatibilidade dos navegadores web para o seu funcionamento correto - Desenvolvimento de Web-only features. ex: login, protecao contra xss, sqli ... ## Desktop app #### pros: - Maior desempenho e capacidade de processamento, possibilitando maior complexidade de funcionalidades - Não depende de ligação constante com a internet, funcionando mesmo em ambientes offline - Possibilidade de desenvolvimento independente de navegadores web #### contras: - Requer instalação e atualizações no dispositivo - Pode ter dificuldades de compatibilidade entre diferentes sistemas operacionais e dispositivos - Não permite acesso remoto tão fácil quanto as web applications - Não permite o uso de recursos de nuvem para armazenamento e processamento de dados - Menor alcance em comparação com web applications, que podem ser acessados a partir de qualquer dispositivo com ligação à Internet. ## Frameworks for WebApp ### [Django](https://www.djangoproject.com/) #### pros: - Estrutura abrangente: fornece tudo o que um desenvolvedor precisa para criar uma web application completa - Segurança: tem uma forte ênfase na segurança, incluindo recursos como prevenção de ataques CSRF (Cross-Site Request Forgery) e sanitização de entrada de dados - Escalabilidade: é escalável e pode lidar com aplicações de grande escala - Administração: tem um sistema de administração integrado que permite que os desenvolvedores criem interfaces de administração de usuário sem escrever nenhum código - Comunidade: é a mais famosa framework baseada em Python, tem uma grande comunidade de desenvolvedores ativos, o que pode tornar mais fácil encontrar ajuda e recursos. - Alta produtividade: O Django oferece uma configuração fácil e recursos de desenvolvimento rápido, o que torna o processo de desenvolvimento de aplicativos da web mais rápido e produtivo. - Batteries included: solucões pre-feitas para autenticacao, admin, sessões e [outros](https://djangopackages.org/) - Arquitetura MVT(Model-View-Template) - Templates, ex: table template, facilitam e aceleram o desenvolvimento - Django’s Models: camada ORM (Object Relation Mapping) que simplifica a interacão com a base de dados #### contras: - Curva de aprendizagem: tem uma curva de aprendizagem íngreme, especialmente para iniciantes - Flexibilidade: pode ser menos flexível do que outros frameworks, especialmente quando se trata de personalização - Performance: pode ser menos eficiente do que outros frameworks em termos de desempenho, especialmente quando se trata de aplicações com grande volume de tráfego - Complexidade: pode ser complexo e pode levar mais tempo para configurar e implantar do que outros frameworks - Dependência de bibliotecas: depende fortemente de bibliotecas externas para adicionar funcionalidades, o que pode tornar a manutenção da aplicação mais complexa - Tamanho do aplicativo: Os aplicativos Django tendem a ser maiores em tamanho em comparação com outros frameworks web, o que pode afetar o tempo de carregamento do aplicativo. ### [Laravel](https://laravel.com/) #### pros: - Facilidade de uso: é conhecido pela sua facilidade de uso e simplicidade, o que pode acelerar o processo de desenvolvimento. - Grande comunidade: tem uma grande comunidade de desenvolvedores que podem ajudar com problemas e fornecer soluções - Segurança: tem recursos de segurança embutidos, como proteção contra SQL injection e proteção contra ataques de CSRF - Arquitetura MVC: segue a arquitetura Model-View-Controller (MVC), que ajuda a manter o código organizado e escalável - Ferramentas integradas: tem muitas ferramentas integradas, como um sistema de autenticação, que pode ajudar a acelerar o desenvolvimento #### contras: - Velocidade: pode ser um pouco mais lento do que outros frameworks em termos de velocidade de execução, o que pode ser um problema para aplicações com alto volume de tráfego - Limitações: pode ter algumas limitações em comparação com outros frameworks, especialmente para aplicações com requisitos mais avançados - Atualizações: Como qualquer framework, precisa de ser atualizado regularmente para garantir que esteja sempre atualizado com as mais recentes correções de segurança e recursos - Requisitos do servidor: pode ter requisitos específicos do servidor, como uma versão específica do PHP, o que pode ser um desafio em alguns casos - Requisitos de hospedagem: pode ter requisitos específicos de hospedagem, como suporte a bancos de dados MySQL ou PostgreSQL. Isso pode limitar as opções de hospedagem disponíveis para o desenvolvedor - Focado em server-side development, menos favorável ao nosso caso de uso. ### [Ruby on Rails](https://rubyonrails.org/) #### pros: - Produtividade: é conhecido pela sua produtividade, oferecendo uma ampla gama de recursos e ferramentas para agilizar o desenvolvimento - Convenções: tem uma série de convenções que ajudam os desenvolvedores a escrever código mais limpo e organizado, reduzindo a necessidade de tomadas de decisão - MVC: segue o padrão MVC (Model-View-Controller), o que pode facilitar a divisão e organização do código - Escalabilidade: é escalável e pode lidar com aplicações de grande escala - Comunidade: tem uma grande comunidade de desenvolvedores ativos, o que pode tornar mais fácil encontrar ajuda e recursos #### contras: - Curva de aprendizagem: tem uma curva de aprendizagem íngreme, especialmente para iniciantes - Performance: pode ser menos eficiente do que outros frameworks, especialmente quando se trata de aplicações com grande volume de tráfego - Dificuldade para personalização: pode ter limitações em termos de personalização, o que pode ser um problema para aplicações que precisam de recursos específicos - Dependência de gems: o Ruby on Rails depende fortemente de gems (bibliotecas de código aberto) para adicionar funcionalidades, o que pode tornar a manutenção da aplicação mais complexa - Concorrência: pode ter problemas de concorrência, especialmente se a aplicação precisa lidar com muitos usuários simultâneos ### [Flutter for Web](https://flutter.dev/multi-platform/web) #### pros: - Desenvolvimento multiplataforma: O Flutter for Web permite criar aplicativos web usando a mesma base de código do Flutter para aplicativos móveis, economizando tempo e esforço no desenvolvimento. - Ótimo desempenho: O Flutter for Web é projetado para fornecer desempenho rápido e suave em navegadores modernos. - Widgets: O Flutter for Web possui widgets e ferramentas para criar interfaces de usuário atraentes e personalizadas para a web. - Comunidade em crescimento: A comunidade de desenvolvedores do Flutter for Web está crescendo rapidamente, o que significa que há cada vez mais recursos e suporte disponíveis. #### contras: - Suporte a navegadores limitado: Embora o Flutter for Web suporte a maioria dos navegadores modernos, alguns recursos podem não estar disponíveis em todos os navegadores. - Tamanho do pacote maior: O pacote do Flutter for Web pode ser maior do que outros frameworks da web, o que pode afetar o tempo de carregamento do aplicativo da web. - Curva de aprendizado: Embora o Flutter seja relativamente fácil de aprender, o desenvolvimento da web com o Flutter for Web pode ter uma curva de aprendizado para desenvolvedores que não estão familiarizados com o Flutter. - Biblioteca limitada: Embora o Flutter for Web tenha uma biblioteca crescente de plugins e pacotes, ele ainda tem menos recursos em comparação com outras estruturas de desenvolvimento da web. - Não adequado para todos os tipos de aplicativos da web: Embora o Flutter for Web seja adequado para a maioria dos aplicativos da web, pode haver casos de uso específicos em que outras estruturas da web são mais adequadas. - A otimização de motores de pesquisa é mais difícil com flutter - Podem não ser tão rápidas ou responsivas como web apps tradicionais ## Frameworks for Desktop app ### [Kivy](https://kivy.org/) #### pros: - Desenvolvimento multiplataforma: O Kivy permite que os desenvolvedores criem aplicativos para várias plataformas, incluindo Android, iOS, Windows, macOS e Linux, usando a mesma base de código. - Linguagem Python: O Kivy é baseado em Python, uma linguagem de programação popular e fácil de aprender, o que facilita para o desenvolvimento da aplicação. - Widgets personalizados: O Kivy oferece recursos para criar widgets personalizados, que permitem aos desenvolvedores criar interfaces de usuário personalizadas e atraentes. - Open source: O Kivy é uma estrutura de código aberto, o que significa que é gratuito e os desenvolvedores podem contribuir para o seu desenvolvimento. - Grande comunidade de desenvolvedores: O Kivy tem uma comunidade de desenvolvedores grande e ativa, o que significa que há muitos recursos e suporte disponíveis. #### contras: - Curva de aprendizado: O Kivy tem uma curva de aprendizado íngreme, especialmente para desenvolvedores iniciantes que não estão familiarizados com programação de interface do usuário. - Poucos recursos: Embora o Kivy tenha recursos para criar aplicativos básicos, a estrutura pode ser limitada para projetos mais complexos. - Documentação insuficiente: A documentação do Kivy é considerada insuficiente por alguns desenvolvedores, o que pode tornar o processo de aprendizado mais difícil. - Desempenho: O Kivy pode ser menos eficiente em termos de desempenho em comparação com outras estruturas de programação de interface do usuário. - Dificuldade em integração com outras bibliotecas: Integrar outras bibliotecas externas com o Kivy pode ser um desafio, especialmente para desenvolvedores menos experientes. ### [Tkinter](https://pythonbasics.org/tkinter/) #### pros: - Fácil de aprender: Tkinter tem uma API simples e intuitiva que é fácil de aprender, especialmente para iniciantes que estão a começar com programação GUI. - Cross-platform: Tkinter está incluído com Python e está disponível em todas as principais plataformas, incluindo Windows, macOS, e Linux, o que torna fácil a criação de aplicações multi-plataforma. - Documentação extensiva e apoio à comunidade: Tkinter tem uma extensa documentação e uma grande comunidade de programadores, o que facilita a procura de recursos, tutoriais e apoio. - Built-in widgets: Tkinter fornece uma vasta gama de widgets built-in, tais como botões, etiquetas, caixas de texto, e scrollbars, que podem ser facilmente personalizados para criar uma variedade de componentes GUI. - Open source: É livre de usar e pode ser modificado para se adaptar a requisitos específicos do projeto. #### contras: - Opções de estilo limitadas: Tkinter tem opções limitadas de estilo e personalizações, tornando difícil criar aplicações GUI modernas e visualmente atractivas. - Suporte fraco para gráficos: Tkinter tem um suporte limitado para gráficos e animações avançadas, o que pode tornar difícil a criação de aplicações sofisticadas com visualizações complexas. - Funcionalidade limitada: Tkinter é limitado em termos de funcionalidade em comparação com outras bibliotecas e estruturas GUI, o que pode tornar difícil a criação de aplicações grandes e complexas. - Não tão "performant" como as aplicações nativas: Embora Tkinter seja geralmente rápido e eficiente, pode não ser tão "performant" como as aplicações nativas ou outras bibliotecas GUI, especialmente para aplicações complexas e de recursos intensivos. - Problemas de compatibilidade: Tkinter pode ter problemas de compatibilidade com versões mais recentes do Python, o que pode causar problemas no uso de versões mais antigas da biblioteca. ### [PyQT](https://pypi.org/project/PyQt5/) #### pros: - Cross-plataform, permite desenvolvimento para vários sistemas operativos - Baseado em python, simplicidade de sintax e mais rápido desenvolvimento - Pode ser incorporado em aplicacõs baseadas em c++. Flexibilidade futura. - Baseado na framework QT, grande ecosystemas de UI components, widgets e APIs, flexivel e robusta, com quality-management-tools, boas para manter a aplicacão. - Extensa documentacão. - Inclui sistema SQL database support, solucão out-of-the-box para interacão com a base de dados - Bom track-record. Usada em aplicacões de larga escala #### contras: - Curva de aprendizagem íngreme. Tem de se saber python e aprender a usar a QT framework - Licenca comercial necessária para distribuicão não open-source. Licenca GPL para open-source - Documentacão principalmente para QT (versão de C++) ### [Flutter](https://flutter.dev/) #### pros: - Desenvolvimento multiplataforma: O Flutter permite criar aplicativos móveis para iOS e Android usando um único código-base, economizando tempo e esforço no desenvolvimento. - Desenvolvimento rápido: O recurso de recarga rápida do Flutter permite que os desenvolvedores vejam as mudanças no aplicativo em tempo real, tornando o desenvolvimento mais rápido e eficiente. - Designs bonitos: O Flutter possui widgets e ferramentas embutidos que tornam fácil criar interfaces de usuário (UIs) bonitas e visualmente atraentes. - Ótimo desempenho: A arquitetura e os widgets embutidos do Flutter fornecem desempenho rápido e suave. - Grande comunidade de desenvolvedores: O Flutter tem uma comunidade de desenvolvedores grande e ativa, o que significa que há muitos recursos e suporte disponíveis. #### contras: - Bibliotecas limitadas: Embora o Flutter tenha uma biblioteca crescente de plugins e pacotes, ele ainda tem menos recursos em comparação com outras plataformas estabelecidas de desenvolvimento de aplicativos móveis. - Curva de aprendizado: Embora o Flutter seja relativamente fácil de aprender, ele tem uma curva de aprendizado, especialmente se você é novo no desenvolvimento de aplicativos móveis ou na linguagem de programação Dart. - Pool de talentos menor: Como o Flutter é uma estrutura mais recente, pode haver menos desenvolvedores disponíveis com experiência em Flutter, em comparação com estruturas mais estabelecidas como React Native ou Java. - Tamanho do aplicativo maior: Os aplicativos do Flutter tendem a ser maiores em tamanho em comparação com aplicativos desenvolvidos usando linguagens de programação nativas, o que pode afetar o tempo de download e instalação do aplicativo. - Não adequado para todos os aplicativos: Embora o Flutter seja adequado para a maioria dos projetos de desenvolvimento de aplicativos móveis, pode haver casos de uso específicos em que o Flutter não é a melhor escolha. # DADOS [páginas do horário](https://paginas.fe.up.pt/~sigarra/horarios22_23-2S/) base de dados em sqlite [Diagrama UML](https://app.diagrams.net/#G1_KTNCZ2xhpdl1hKZ4w8ru0uTjQPRfPZy) - python: import [sqlite3](https://www.geeksforgeeks.org/python-sqlite-connecting-to-database/) - flutter: [sqlite plugin](https://docs.flutter.dev/cookbook/persistence/sqlite) # HTML - python: import [requests and BeautifulSoup](https://www.geeksforgeeks.org/python-web-scraping-tutorial/) - flutter: [http and html parser](https://www.geeksforgeeks.org/web-scraping-in-flutter/)