Hello everyone, first post over here, I’m a junior dev that was working on an open source picture organizer based on location groups within sub-directories, like streets and cities (inferred from EXIF geotags being extracted and sent to a reverse geocoding API) which I’ve first coined as GeoPicSorter (outlined in its home page). There’s a TL;DR at the bottom if you want to get right into my questions, but I felt like talking about my tool could be of help and worth it in case anyone ever wants to help with its development, anyway…

To develop it, I used Java and NetBeans (as the only IDE I found with a free GUI editor at the time I started ― at least over a year ago) and GeoPicSorter accomplishes the goal I needed it for, however, as I updated it, I started to feel like I’ve underestimated how hard to maintain and messy code becomes for the GUI part. NetBeans had its own gimmicks like making it read-only, fully naming the Swing classes every single time they were called, etc. The Swing GUI also feels kind of uncomfortable to me (specially in the folder selection part where I choose a folder with the pictures to organize, it’s too compact/constrained) and I’d like for my program to use the system GUI, or at least something that makes it feel classic yet user-friendly. But it’s not like Java is the worst option to use, I just feel like there could be better options suited for the project, and I want to learn a new language in the process.

I’ve attempted to re-write my tool (and rebrand it in hopes the name can be shortened without conflict with “GPS”), to write cleaner code while attempting to retain cross-platform compatibility (which ideally, I’d like my tool to have so more people can try it. I’d like it to work at least for Windows, and hopefully Linux without Wine, maybe Mac too). It’s not a necessity though, just would be great to reach more users. The re-write would be available at a Codeberg repo.

For the re-write: I’ve tried Dart, Python, and C++ so far, however, I struggle with different things in each language that make it impossible for me to figure out on my own with my experience, and I feel like I’m wasting time going in circles. The problems I have are:

  • Dart: I haven’t touched it in a long time, but I believe my issue was the lack of documentation and functions/methods for the only EXIF reader I could find, and how it extracts the coordinates (into an array-like set of 3 numbers that represents latitude/longitude in DMS format) without functions to handle them and convert them to DD easily.
  • Python: while it was a satisfying language to learn and experiment with (and had everything I needed), I couldn’t figure out how to make an executable that could detect (and depend) on the system installation of Python (instead of bundling one), I’ve exhausted every EXE-generating option I could find, and none worked the way I needed it to. If there’s one you think I possibly didn’t try, I’d love to know!
  • C++: I’m having trouble to start a project properly. I’m pretty much a newbie with CMake (which seems I need to use if I want to make a cross-platform C++ project), and my greatest struggle was setting up the dependencies so as to not to give a hard time to new contributors to join or make one-time contributions (and when I move to another setup). I’ve tried Conan, and its repository has everything I needed (including Qt for the GUI), but for some reason it’s been a struggle to get the dependencies (and the project itself) set up around it. I’m using Visual Studio for now since I found it best to get into C++ and it was recommended, but I’m open to other options. Qt always failed to install via Conan on the command line (IIRC, the error was just a generic one and occurred after waiting for the download and install).

So, I’ve been using FLTK, but the GUI options and components feel very limited, and I’m stuck with VS2017 and Conan 1.x, because the add-on for VS is outdated, and I couldn’t integrate 2.x into VS.

After all this context (which I’m sorry it dragged for so long already), I can finally ask: what can I do to properly start my project from scratch? Or is there a language/framework that’ll best suit my needs? The dependencies it has are already mentioned on the home page, but the EXIF reader should be able to at least make it possible to get the coordinates in DD format, and consider the reference cardinals for latitude and longitude before the conversion from DMS format.

Should note that I’m determined to see my project through, I’m just lost on what to do and in need of advice.

Any help is appreciated, thanks in advance!

TL;DR: I’d like directions on how to set up a software project with dependencies, so that future contributors can pitch in with the least amount of set-up required when they clone the repo. The original program is an open source location-based picture organizer for desktop systems, and I want to rewrite it with a different set of tools (preferably not Java with NetBeans), its code will be hosted at Codeberg.

  • Kissaki@programming.dev
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    9 months ago

    I’m familiar and usually working with .NET, and am a strong advocate for it.

    • The language is similar to Java, so not that difficult of a switch language-wise. Visual Studio makes good suggestions introducing you to newer and more concise syntax too. If you install the VS SonarLint extension it’ll guide you to good practices.
    • Excluding the GUI for now; you can target cross-platform.
    • GUI is somewhat of a mess like anywhere else, but you have decent options and you certainly have more viable alternatives compared to other languages. If your target is cross platform, check out MAUI for the recommended/officially suggested approach. I find the XML GUI coding irritating and inconvenient, but it is well-established and popular. Although I haven’t implemented a noteworthy project with it, I prefer coding UI in web tech, so I like that you can embed a WebView2 and connect and bind between the C# code and the HTML rendering. Using WebView2 for program GUI requires a container app window. Targeting Web/Browser-rendering directly is viable too with Blazor and more broadly ASP.NET with multiple alternatives and openness to web frontend UI frameworks and libs.
    • With one project structure the project can be worked with with dotnet CLI (leaving users open to use their own IDE or text editor choice), Visual Studio, or Visual Studio Code. NuGet packages as dependencies are automatically handled within the default build toolchain.
    • .NET is well-established and popular.
    • Official documentation is great. It is exhaustive, with guidance, references, examples, and tutorials. It is open to feedback and change requests/suggestions.

    As for what you tried, how I would personally react to a project:

    I don’t like python. For anything that is not a script, I would likely skip considering contributing. It is an overall popular language though. Prevalent as a language, and at least reasonably popular / niche-popular for apps with UI.

    C++ is a mess to set up and manage. Qt is huge. It’s popular and powerful. But in the aspect of low-barrier, it is the opposite.