~mil/mepo

1.3.0 5 months ago

This release was focused on several changes to improve the application's
overall UX. The major changes applied are:

- JSON API Added to Replace Mepolang DSL
- Cancellable & Non-blocking shellpipe_sync (thanks to: Nguyễn Gia Phong)
- GeoJSON Import & Mobroute GTFS Routing Support
- Codebase Updated to Build Against Zig 0.13.0 (thanks to: lauren n. liberda)
- Misc QA & Usability Updates

----

1. JSON API Added to Replace Mepolang DSL
The former 'Mepolang' DSL has been replaced by a standard JSON API. This
was motivated largely by long-term maintainability concerns and user
feedback. One of the major pieces of feedback I've received about Mepo
over time is that the DSL aspect was both difficult to understand and
work with. The new JSON API has the same functionality as the old Mepolang
DSL in that it is just a simple way for you to configure the application
(via ~/.config/mepo/config.json) & pass arbitrary commands to mepo at
runtime in scripts. However the new JSON API both in configuration and
scripting should be much easier to work with (being standard JSON and no
special DSL syntax to learn). All commands and arguments for the JSON API
(formerly Mepolang) have stayed the same for the most part and this is
largely just a syntax / usability update.

In the former Mepolang DSL syntax you would write:
prefset_n lat 33.33;

And now rather, in the new JSON API syntax you write:
[{
  "cmd": "prefset_n",
  "args": {"pref": "lat", "value": 33.33}
}]

More details are available at the new JSON API doc at:
- https://mepo.lrdu.org/jsonapi.html

2. Cancellable & Non-blocking shellpipe_sync (thanks to: Nguyễn Gia Phong)
Nguyễn Gia Phong (~cnx) has graciously taken care of the longstanding
ticket for #65 concerning the fact formerly the entire UI would freeze up
upon launching a command or script via shellpipe_sync. The former model
has been updated in that shellpipe_sync scripts now don't interrupt /
freeze the SDL loop itself and are asynchronously launched. Further and
importantly external shellpipe_sync scripts are now cancellable via a
UI button. Upon launching a script the UI is greyed out and a cancel
button appears. Pressing cancel send a SIGTERM signal to the external
process. Much thanks to ~cnx for taking care of this feature. With this
update, the UX of externally launched scripts is vastly improved.

3. GeoJSON Import & Mobroute GTFS Routing Support
A rudimentary GeoJSON import script has been added
(mepo_geojson_import.sh) which converts each standard GeoJSON Point
to a pin_add mepo JSON API command. This GeoJSON import script may
be used standalone and in addition the geojson script is used by a
new interactive script enabling routing via Mobroute (which outputs
GeoJSON). For the interactive script allowing routing via Mobroute
(mepo_ui_menu_route_mobroute.sh) you can select this item from the central
menu. If you have 2 pins in the currently active pingroup, this script
given a GTFS Feed ID will route between these points. You will need to
be patient as if GTFS data is not loaded for the specified GTFS Feed ID,
the GTFS data will be fetched and prepared upon first usage. See more
details on the new GeoJSON import script & Mobroute GTFS Routing support
at the updated userguide:

- https://mepo.lrdu.org/userguide.html#routing
- https://mepo.lrdu.org/userguide.html#geojson-import

4. Codebase Updated to Build Against Zig 0.13.0 (thanks to: lauren n. liberda)
The codebase has been updated build against zig 0.13.0 via lauren
n. liberda. Packagers should be aware to update the build dependency as
such. Thank you to lauren for taking care of the zig version update.

5. Misc QA & Usability Updates
A number of smaller but important QA and usability updates have been
made which are mentioned in short below:

- User configuration has been moved to ~/.config/mepo/config.json

- Autosave/load functionality in the default configuration has been removed
  and new scripts have been added to save/load state. Buttons for Save/Load
  have been added in the defaults.

- The complex async pin editing script has been removed and replaced by a
  simple 'drop pin' script bound to the 'f' key keybinding. More complex
  pin configuration and bookmarks can be accomplished through the user
  configuration if desired.

- The -ndc commandline flag to disable default configuration has been
  removed. Users who wish to enable custom functionality are encouraged to
  override keybindings & other defaults via their ~/.config/mepo/config.json
  file.

- The -docman commandline flag to generate manpage documentation for the
  Mepolang DSL has been removed. The documentation website at
  http://mepo.lrdu.org is the defacto documentation source for mepo &
  its JSON API.

- The -i commandline flag has been updated to parse JSON API commands. The
  delimiter for each set (array) of JSON commands in the newline. See docs
  for further details.

- The shellpipe_sync command now saves the state of the application
  (equivalent to filedump command) to ~/.cache/mepo/shellpipe_savestate.json
  This state can be parsed through for advanced shellpipe scripts.

- The functionality of the GraphHopper script was changed to match the Mobroute
  script in that it will route between the first 2 pins the current pin group.

- The center button has been removed from the default configuration. Mozilla
  Location Services (MLS) public instance has been deprecated upstream and
  thus this script may no longer function properly. A long term fix is needed.

- A number of small memory leaks have been identified and corrected thanks
  to Nguyễn Gia Phong.

- Findutils has been removed as a dependency thanks to Hugo Osvaldo
  Barrera. (Findutils was only needed in one edgecase in scripts which has
  been removed)

- A few keybindings have changed in the default config: `f` drops a pin,
  `i` saves state, `u` reloads states, `r` routes via Mobroute, `R` routes
  via GraphHopper. See the documentation site / JSON API doc for details
  on default config keybindings.

- As a good amount of default functionality has been changed and with
  the introduction of the JSON API, the documentation has been reworked
  in large part. I've also moved the official documentation site to be
  located at: http://mepo.lrdu.org