Hi all!
I recently started using Embeetle after having difficulties with using a custom library with the Arduino IDE. Perhaps I’ll first situate myself somewhat, so that you have at least some idea from which perspective I’m writing. I’ve currently just finished my engineering studies at KU Leuven and I am doing a personal embedded project. While I learned about many engineering subjects, I did not have much classes about implementation of embedded projects. In short, I’m basically a novice when it comes to embedded development.
My project is not very large (a few thousand lines of own code). Most of my own code concerns control algorithms and is therefore platform independent. My interest lies mostly in the control theory parts and less in implementing it in software and hardware. Nevertheless, in a real-life product the latter step is always necessary, so I’m trying to get some experience with it.
I’ll provide a few comments of my experience with Embeetle so far. I hope these might be useful in the development, and perhaps serve as a motivation to continue developing this nice piece of software.
I started using it last Saturday after having issues with trying to use functionality from my library. I used the Arduino IDE which appears rather restrictive when it comes to library structures. I developed my library separately (I compile it for testing on my PC, with corresponding CMakeLists etc.) and using it with the Arduino IDE appeared close to impossible unless I restructured it completely. Last week, Bert told me “try the beetle”. So I thought, why not?
Well, 30 minutes after clicking “download” I was running code from the library on my Uno. Fantastic!
General thoughts
- Fast
- Excellent tiling system
- Good file usage (I use a second editor with files open in both and have no conflicts)
- Clean interface
- Good documentation, both on the website as well as spread out over the program. Please continue doing this. It helps novices like me a lot!
- Integrating my library went very smoothly. Being able to deselect and force a few files allowed it to compile.
- Transition from Arduino IDE was excellent. Project conversion went almost perfectly (see comment later).
Scaling
- “Embeetle IDE” logo in “Embeetle Home” window does not scale when adjusting “Global scale” slider?
- “Global scale” is difficult to adjust using the provided slider. Suggestions:
- a wider slider in a wider window
- logarithmic instead of linear such that a distance delta (on the slider) represents a scaling multiplication factor
- box to enter a number
- a few clickable presets, for example 0.50, 1.00, 2.00, 4.00
- On Ubuntu 20.04.2, GNOME desktop (version 3.36.8), adjustments to the “Scale” setting in the Ubuntu displays settings do not appear to be applied to all visual elements. Screenshot in the next post. (I tested this on a 4K screen).
VCS
- I currently use Git. It is configured with a remote (even though I work alone). I do not desire to track files that are easily regenerated. I currently have in my .gitignore: “build”, “.beetle”, “config/filetree.mk” and “.cache”. I haven’t yet tested whether I track sufficient files. Could Embeetle perhaps put a .gitignore in the project directory automatically such that I don’t have to add it manually?
- I read that one of the arguments behind self-contained projects relies on making good use of a VCS. Does that perhaps involve (git) submodules? I do have a bit of experience with branching and merging, yet not with submodules. A concise write-up about using Git together with Embeetle might be helpful for novice users?
Other
-
I imported an Arduino .ino file. All required files were copied over except for a few header and source files that were in the same directory as the .ino file. The .ino had includes referring to this file. I expected that those files would also be copied over.
-
I’ve the impression that the IDE (currently) only supports self-contained projects. There certainly is something to be said for self contained projects. On the other hand, forcing the user to do so feels somewhat over the top. Therefore I suggest:
- Allow using directories from outside the project directory by allowing
- adding search paths
- usage of symlinks that point from inside the project directory to outside it
- Ease using both local and nonlocal files using the following functionality
- Marking the files with colors (for example, a colored tab, or perhaps a shaded background) depending on their type such that it is immediately clear to the user which files they can safely change and which not. Something like
- inside the project, no dependencies on files outside: green
- inside the project, yet dependencies on files outside: yellow
- outside the project: red
- Easy copying of the library to the project directory. For example, when editing a file outside the project, show a pop-up that offers to copy the library in the project, such that the modified version of the library becomes part of the project. And also add the required stuff so that the modified version of the library gets used.
- Marking the files with colors (for example, a colored tab, or perhaps a shaded background) depending on their type such that it is immediately clear to the user which files they can safely change and which not. Something like
- Output human-readable summary of all external files and their paths, and of the library version numbers, such that when a dependency issue occurs, it can be resolved reasonably easily. Perhaps even a hash of each file such that the ‘library once used’ can be compared with the current library. This file can be tracked using the VCS such that one can go back in time.
- Allow using directories from outside the project directory by allowing
-
Symlink support, for linking files within the project
source
directory. I don’t use symlinks often, but when I do, I find them very valuable. (edit Tue 13h15) I tried again and I see that the code compiles, yet that the labels and settings in the Filetree do not appear to work as I expected. I expected that if I force excluded the symlink that the file would not be used (and hence yield a compilation error). However, the compiler still uses the file if the original file (not the simlink) is force included. Perhaps this behaviour is desired, but I did not expect it. Suggestions:- Some documentation on how Embeetle handles symlinks
- Show in the Filetree which files are actually symlinks. Currently the user has to right click, click “Show full path” and then scrutinize the path text. Perhaps put symlink names in another color or font (italic?), or show an icon to the right of the name?
- Regarding desired behaviour I see three options (not sure how realistic these are):
- Bind the exclude/include settings to the real file/directory. Hence, changing the force exclude/include settings of the symlink changes those of the original file and vice versa.
- Do not synchronize them and treat them as completely separate files/directories.
- A mix of 1 and 2 with some complicated, yet well-documented synchronization rules. Here, the option to travel the symlinks in the other direction, something like right clicking the original file to get a view of all the symlink that point to it (with their exclude/include status etc.), appears useful to me.
(end edit Tue 13h15)
-
In the Filetree I can see which files are used in the compilation. In my project, there are currently many files marked used (green) while they do not appear to be contribute relevant functionality (such as
IPAddress.cpp
). Concerning the used files, is there an easy way to see why they are used? I could force exclude them and try to compile, but that feels more complicated than necessary. -
Editor “search” and “replace” functionality
- The highlighting could be a bit more striking, for example orange or red instead of grey and dark blue.
- It offers “replace next occurrence”. However, it appears that this “next occurrence” is not highlighted, so it remains up to the user to know where this “next occurrence” exactly lies and what text will be replaced. I would prefer that the next occurrence is highlighted as well.
- when doing “search”, would it make sense to always highlight all occurrences by default in a first highlight style and the current one in a more obtrusive style?
-
I use a second display. It appears that the current tiling system does not allow dragging a frame to another display? It would be nice if doing so created a second window.
-
For the Arduino Uno (with the ATMEGA328P-PU dinosaur), the dashboard shows “128 Kb” for “text” and “63 Kb” for “data”. I’m used to some slightly smaller numbers, or was Embeetle able to download a bit of extra RAM?
-
I had an issue after I messed with the file names of the source files. The compiler kept nagging that a particular file was unfindable. Deleting the cache (as described when clicking the “Re-analyze all” button of the Source Analyzer solved the issue. It took some time to find this button. The “Re-analyse all” button, could it perhaps be put just left of the Source Analyzer progress bar such that it is easier to find?
-
A dark theme? Perhaps support for the Geany color scheme format (Themes | Geany)?
-
Would it be possible to have a lexer for Markdown? Something like gedit does.
-
A small install script that ‘registers’ Embeetle, such that is shows up in the program list (Ubuntu), would be nice?
-
(edit Tue 13h15) Documentation: is there a search function somewhere? For example, I wanted to search whether you have any information about Git. (end edit Tue 13h15)
I hope my thoughts about my experience so far are somewhat helpful. I’m well aware that it is written from the standpoint of a novice in embedded development, and it that regard I’m open to feedback.
Best regards,
Ramses