Four thoughts on building networked, situational apps based on the free software platform DeepaMehta 4. These are based on some hints i sent out to the developers mailing list since i had the opportunity to do a lot of plugin development with deepamehta4 over the last two years:
1. Think of your application and its functionality as lots of small services integrated with many others in a network. Integrating other plugins services is as easy as injecting them into your Plugin implementation. Thus, try to build upon (and, if necessary, challenge and contribute to) existing semantics within the network of plugins wherever possible.
2. Likewise so, split up your application in more than one plugin, divide them by feature set or architecture level (client, server). Distinct plugins here mean variability and thus we actively increase the possibilities for everyone in the community.
3. Start think agile when writing new applications with type definitions. It’s a “data tree” ready to grow and ready to change in the future but now to plant. Structures and data will most probably evolve and change, may it be through the users themselves or through your new conception of the application. The migration machinery of deepamehta4 supports this at any time, don’t worry to much in advance.
4. The standard dm4-webclient allows you and your users to interactively and draft such “data trees”. You can use the dm4-webclient to share, edit and compose the terms your application is made. Make sure your users have heard of this type-building language as it is the same for plugin developers and users and may facilitate communications in your project.
It is fair to say that the type building vocabulary in deepamehta4, along with its basic terms, graphics and UI, were conceived to bridge and challenge the gap between software developers (as designers) and users (as mainly design addressees). I know that many have tried this before but that doesn’t mean it’s not worth trying to go further here in 2015. Lots of people work with the web and may have already built an app. So, who knows if with deepamehta4 things and ideas get together more easily. By today, except maybe for software security, i don’t see many reasons left why users could not start trying to design, install and ship their own situational apps based on DeepaMehta 4 or dmx. Read on to learn how to make use of existing plugins and type definitions in your software application.
Re-using type definitions and building networked apps
Re-using existing type definition from available modules fosters integrated data. To build up a semantic network of applications across your personal destop/maptop not only identifiers (and identifying keys in your data model) are important but also the re-use of existing type definitions. Some examples for most commonly used types by applications are
- the dm4-contacts module ships types like E-Mail Address, for a Person or Institution
- the dm4-webbrowser module ships with an URL (uri=”dm4.webbrowser.url”),
- the dm4-files module ships the File (uri=”dm4.files.file”) and
- the dm4-notes module ships Note (“dm4.notes.note”).
All of these plugins listed here are part of the DM 4 Standard Distribution and already available. For integrating your application with apps, joining concepts of various plugins is essential.
To be able to join (or let us say: re-use, reference) other type definitions in your application you need to make sure to include the bundles-symbolic name first, and you do so in your plugin.properties file in a line like the following:
This configuration tells dm4-core (PluginManager) to make sure that the notes, tags and acl-plugin (those with these three bundle-identifiers) are loaded and available in the system when your plugins migration is run. So, this line is a pre-requisite to reference other plugins types in one of your imperative or declarative migration.
Existing deepamehta4 plugins include Mail, CSV, Images, Tags, Sign-up, Publish/Subscribe, Import Export, Wikidata Search, Wikidata Toolkit, Twitter, EduZEN Profiles or EduZEN Reviews. If you want to start your own or join in the development of some of these plugins, this Plugin Development Guide will prove helpful.
I am on the executive board of the non-profit organisation supporting the developers and users of the DeepaMehta Software Platform (DeepaMehta e.V.).