๐พ Archived View for devbeejohn.de โบ posts โบ 2023-09-13-Sane-app-development.gmi captured on 2024-09-29 at 00:07:32. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
..........................................................................
..........................................................................
How to write a Free and Open Source (FLOSS) application, that works cross platform - at least on some (mobile) platforms?
In a first attempt of writing this gemlog post I tried to put in place and utilize the business-solid Java ecosystem. But when trying it out I recognized that it is not sane at all. At least to me. Its heavy resource usage, complexity and, uhm, heaviness, make it too hard to handle for me. The process eats the joy of development instead of spreading it as soon as you start one of the common Java IDEs (knowing that JetBrain's IDE is one of the better examples).
Now I'm writing this blogpost using Sublime Text again and put in place a collaboration of solutions I consider sane because it fits to my resources available and hopefully to the possibilities of people using a solution I built upon this plan.
It's built upon the foundation of the C language, its Free and Open Source compilers, the GObject/GLib ecosystem and easy to handle wrappers around it like Objective-C (leveraging ObjFW) and PHP.
As a foundational layer for structuring data I'd try to utilize Midgard accessed through an Objective-C wrapper for ObjFW.
That said, the approach below is heavily based upon upcycling old, mostly abondoned, but slim and slick software.
See notes about app development regarding Midgard
Apps should be beautiful and at least behave native. You have to make compromises on cross platform solutions, but native GUI kits are important. (Qt is ugly.)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โญโโโโโโโโโโโโโโโโโโโโโโฎ โ โ โ Database: โ ___ โ โ โ SQLite โ /\ \ โ โ โ โ /::\ \ โ โ โฐโโโโโโโโฒโโโโโโโโโโโโโโฏ /::\:\__\ โ โ โญโโโโโโโโโโโโผโโโโโโโโโโฎ \/\::/ / โ โ โ libgda โ /:/ / โ โ โโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโ \/__/ โ โ โ โ ___ โ โ โ Midgard2 โ /\ \ โ โ โ โ /::\ \ โ โ โโโโโโโโโโโโโโโโโโโโโโโ /::\:\__\ โ โ โ โโบโบโบโบโบโบโบโบโบโ โ \/\::/ / โ โ โ โMidgard โ ObjC/ โ \/__/ โ โ โ โbased โ ObjFW โ โ โ โ โModels โ wrapper โ ___ โ โ โ โโบโบโบโบโบโบโบโบโบโ โ /\ \ โ โ โโโโโโโโโโโโโโโโโโโโโโโ /::\ \ โ โ โ UI: โ โ /::\:\__\ โ โ โ GTK โ UIKit โ \/\::/ / โ โ โ โ โ \/__/ โ โ โฐโโโโโโโโโโโโโโโโโโโโโโฏ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1. Finish the Objective-C bindings for GTK(4) and the GObject ecosystem
ObjGTKGen: Generates GObject/GTK bindings for ObjFW
2. Update Midgard and libgda to work with current dependencies
As Midgard depends on libgda both need to be updated to work with current databases. This concerns sqlite3 and PostgreSQL since libgda 5 only supported PostgreSQL up to version 11 but needs to work with version 15.
Well, that's it. From this I should make a working app using a solid foundation. Let's see what I come up with.
Further elaborting:
Running an app directly connected to a networked database solution like PostgreSQL or only using SQLite is no permanent solution for deployments that address more than only personal use cases of course. I'm thinking of organizational use cases which depend on a single common data source and service providing it.
So make let's make the approach above a more grown architecture by putting in place PostgreSQL and some well established PHP solutions:
โโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโ โ โญโโโโโโโโโโโโโโโโโโโฎ +-+ โ โ โDatabase: โ |S| โ โ โ PostgreSQL โ +-+ โ โ โ โ +-+ โ โ โฐโโโโโโโโฒโโโโฌโโโโโโโฏ |e| โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +-+ โ โ โ โญโโโโโโโโดโโโโผโโโโโโโฌโโโฎ โ +-+ โ โ โ โ Midgard โ โโถโถโถโถโถโถโถโถโ โ |r| โ โ โ โ PHPCR โ โ S โ PHP โ +-+ โ โ โ โโฌโโโโโโโโโโโโโโโโโฌโ โ y โ โ +-+ โ โ โ โDoctrine/CR ODM โ โ m โ FastCGI โ |v| โ โ โ โญโโโโโโโโโโโโโโโโโโโฎ โ f โ โ +-+ โ โ โ โ โ โ o โ Nginx/ โ +-+ โ โ โ โ FOSRestBundle โ โ n โ Apache โ |e| โ โ โ โ โ โ y โ โ +-+ โ โ โ โฐโโโโฒโโโโโโโฒโโโโโโโโดโโโโถโถโถโถโถโถโถโถโ โ +-+ โ โ โโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |r| โ โ โ HTTPSโ +-+ โ โโถโถโถโถโถโถโถโถโโถโถโถโถโถโถโโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโถโ โ โ GET โ โ PUT / UPDATE / DELETE โ โ โโโโฌโโโโโดโโโโโฌโโดโโโโโโโโฌโโโโ C โ โ Mantle/ โ Local โ โ โ โ RestKit โ Midgard โ โ L โ โ โ Cache โ โ โ โโโโโโโโโโโดโโโโโโโโโโค โ I โ โ โ โ โ โ Midgard based โ โ E โ โ โ โ โ โ Models โ โ N โ โ โ โ โ โโโโโโโโโโโฌโโโโโโโโโโค โ T โ โ GUI: โ โ โ โ โ GTK โ UIKit โ โ โ โ โ โ โ A โ โโโโโโโโโโโดโโโโโโโโโโ โ โ Mobile App (ObjFW) โ P โโโโโโโโโโโโโโโโโโโโโโโโโโโโ P S
1. Wait for ObjFW to have KVO/OFCoding support
ObjFW: Ticket: OFCoding support (FR)
ObjFW: Ticket: KVO support (FR)
2. Port Mantle or RestKit to ObjFW. Currently I don't know yet which ones suites better. I consider it important to still have Midgard to cache data locally since you don't want to depend on the REST service (aka "the cloud").
GitHub: RestKit (this one was not mainted 3 years longer)
3. Add a plugin to either Midgard or Doctrine to generate fitting Objective-C and PHP models (for Mantle/RestKit)
Making Glom work again could be useful for quick database prototyping (only for PostgreSQL though).
If I update libgda to work with PostgreSQL 15, Glom may work out of the box (maybe). Glom then generally could be used to test libgda's capabilities.
https://gitlab.gnome.org/Archive/glom/-/issues/9
The next step could be to add the generation of Midgard description files out of the database schema ("reverse engineering") to Glom.
Sane app development was published on 2023-09-13.
The content on this site is licensed under CC BY-SA 4.0.
..........................................................................