Skip to content

14. Interface and Application Programming

Group assignment: compare as many tool options as possible

PyQt5 (tested by Michael Tucci)

https://www.riverbankcomputing.com/software/pyqt/

Overview: PyQt5 is a set of Python bindings for the Qt application framework and runs on all platforms supported by Qt. It allows the creation of complex and responsive GUI applications in Python.

Development Environment: PyQt5 integrates with Python, allowing the use of Python’s straightforward syntax along with Qt’s powerful capabilities for desktop application development. It supports cross-platform development across Windows, macOS, and Linux.

Strengths: Integrates well with Python, enabling the use of its powerful features and easy-to-write syntax for building feature-rich desktop applications. It supports various operating systems like Windows, macOS, and Linux.

Challenges: Requires understanding of both Python and the Qt framework, which can be daunting for beginners. The dual licensing of Qt may also be restrictive depending on the project.

Opinion & conclusion: with developer tools and the use of ChatGPT I found PyQt5 very user friendly. The framework itself feels very lightweight (i.e. the code calling specific modules for the GUI is simple, straightforward and easy to understand). I created a simple app that calls the Google Speech Recognition API and allows you to push a button, speak into your mic, and have a transcription of what you say.

React (tested by Daniel Mateos)

https://react.dev/

Overview: React is a declarative, efficient, and flexible JavaScript library for building user interfaces. It lets you compose complex UIs from small and isolated pieces of code called “components.”

Development Environment: React primarily uses JavaScript or TypeScript and is heavily integrated with modern toolchains, such as Babel and Webpack. It is most commonly used with the JSX syntax extension, which allows HTML to be written in JavaScript code.

Here is an example of how to set it up from scratch.

Strengths: - It’s very flexible, you can build as sophisticated a web app as you want. - It has a big community

Challenges: - Requires a good understanding of modern JavaScript and the React ecosystem. - It’s big, so it won’t fit in the memory or flash storage of many microcontrollers

MediaPipe (tested by Riichiro Yamamoto)

Overview: MediaPipe is a framework for building multimodal (video, audio, any time-series data) applied ML pipelines. It provides a robust solution for building and deploying machine learning models that process or interpret sensory data.

Development Environment: MediaPipe supports C++, Python, and JavaScript, offering a flexible toolset for developers working on cross-platform applications. It can deploy on mobile devices, browsers, and edge computing environments. Strengths: Enables developers to build complex, real-time, cross-platform ML systems quickly and with a high degree of flexibility. Supports deployment across different platforms including mobile devices and browsers.

Personal Experience: I used Python to use MediaPipe. It was not a very straightforward process to set up a developing environment and run the script with the pre-trained model. However, there are many tutorials and reports that explains the use of MediaPipe

Useful Tutorial and Repo https://www.youtube.com/watch?v=vQZ4IvB07ec https://github.com/nicknochnack/MediaPipeHandPose/blob/main/Handpose%20Tutorial.ipynb https://www.youtube.com/watch?v=a99p_fAr6e4&t=15s https://github.com/kinivi/hand-gesture-recognition-mediapipe

Processing (tested by Susanna Brolhani)

https://processing.org/

Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts, designed to teach fundamentals of computer programming in a visual context and serve as a foundation for electronic art and visual design projects. It was easy to run graphic tests and connecting with the microcontroller was quite straightforward.

Environment: Processing offers its own development environment, which includes an editor and a viewer for immediate feedback on the code. It supports Java, JavaScript (through Processing.js), and Python (via Processing.py)

Strengths: suits beginners and artists due to its ease of use, supportive community, and extensive documentation. It integrates seamlessly with Arduino for interactive projects.

Challenges: While excellent for learning and small projects, Processing is not geared towards the development of complex or UI-intensive applications.

Flutter (tested by Susanna Brolhani)

https://flutter.dev/

Flutter is an open-source UI software development kit created by Google. It is used for developing natively compiled applications for mobile, web, and desktop from a single codebase. I tested Flutter for my final project, as I wanted to create a multi-platform application that would communicate via bluetooth with my digital pen.

Environment: Flutter uses the Dart programming language and includes a rich set of pre-built and customizable widgets. The environment supports hot reloading, which allows developers to see the effects of their changes in real time without restarting the application.

Strengths: Provides a rich set of pre-designed widgets which help in crafting beautiful and highly interactive user interfaces. Flutter’s hot reload feature helps you quickly and easily experiment, build UIs, add features, and fix bugs.

Challenges: As Flutter uses Dart, a less commonly used programming language—the learning curve might be steep if you are not familiar with it. The ecosystem is robust but still younger compared to other mature frameworks. I had difficulties trying to implement BLE with Flutter on my application.