Boosting community app development

Let me share my opinion on some of the topics I have read here.

In general, I consent that the documentation needs improvement. However, I think we need a broader style. Currently, we have a basic API reference and a more-or-less walkthrough for a minimalistic app. What I am missing:

  • A general overview of the dev process for complete newbies (get started with web development in 10 minutes)
  • Detailed architectural descriptions on the building blocks of the NC backend (how are the gears mesh )
  • Dedicated chapters related to security-relevant topics: What are the notions? What is the motivation behind certain structures?
  • A complete API reference with all classes/interfaces in \OCP well-defined and documented.
  • There should be different walkthroughs for different levels from beginner to advanced also with different reading speeds and/or cross-links. Keep in mind to have devs from foreign languages but with architecture experience
  • Give the app developers a space to share common APIs to simplify common work. Also, best practices should be defined before.

Adding more documentation might make restructuring the docs important. Currently, there is a category Digging Deeper that is sort of catch-all. This might need a break-apart.


One could consider creating e.g. screencasts and publishing them. This will attend to another audience then just plain text. Example form joomla with youtube video.

I know this is a hell of work to carry out good videos but this might be a community approach at best. But then, it needs backup by the core team to for example not make significant errors or document something in detail that is due to change soon.


One thing, I want to oppose here on the thread a bit is the request for more abstractions. Yes, the NC cure team could implement a general way to exchange data between the backend and frontend. Up to a certain level, this is a good idea. However, this should be the second step.

I have been developing with Joomla and there is a lot more of this automagical shā€¦ going on. Either you know this and learn it by heart or you are lost. You can read other peopleā€™s code but you have a hard time getting your things to work. This is one reason, I abandoned my recent project and decided to do it in the NC core. The documentation and code of the NC are way cleaner. (This is my personal opinion. You can argue but just have a look at their kernel.)
It is true, you can get results faster. But once you leave the basic paths you are mainly lost. You have to do everything manually. There is no Symfony framework having your back and helping with e.g. class loading. Itā€™s on you, mainly.

Long story short: I think the current structure is a good one. You can learn it. You can use it. Yes, you need documentation for it.
Now comes the second step: You could add some abstractions on top of that as an addon to simplify life with typical problems. But this should not render the basic skills second-level citizens. In contrast, this should be marked as such. Devs are responsible for their decision on what interface might be better suited.


There have been requests for Mattermost, Discord, etc here. I do not see fit for these. What is the benefit over the forum here? All of them provide support for markdown, threads, etc. What is the significant difference?
If there is, I might change my mind. I personally prefer Mattermost over discourse but this is just personal taste.

Adding another channel might split the community even further. ATM we have a Matrix channel, this forum, the GitHub discussions/issues, and the various chat rooms on the official server. Did I miss something? The more options we have the more valuable experienced developers need to spread.

I am even considering if the NC talk rooms are a good option for the public community. These are only reachable using a public link. This is not ideal for public community building. No notifications, no last-read state, etc.

After the initial post, I decided to go through some of the topics here on the forum and help out if I can. I see a small part of the responsibility for this situation also with us community members. There are many seeking advice and do not get it. Then, if these devs accumulate their personal knowledge, they do not share it. Voila, you have a vicious circle. I can only pledge: All devs keep a look on the new topics and try to help newcomers as best as you can.


Some things can be done centrally but need documentation before being implemented. For example, it took me quite some time to set up a DevOps system for automated tests to run on the dev machine with an arbitrary PHP version/DB system involved with exactly the same configuration during CI. It is a lengthy python script that might easily be adopted for general use.

It took me quite some time to get it working and Iā€™d like to share it with other authors. But, it will require some setup and documentation on how to integrate it. Here is also the question(probably @Daphne knows who to address), how such contributions can be handled.


What I am missing most is access to the more/most experienced developers. I had quite some time questions related to the core and its behavior. In the end, I debugged the server instead of writing my own app. This is not time-efficient.

In another project (https://octoprint.org/) there is a monthly (?) FAQ over a live video stream with the main developer. It is sort of a Ask Me Anything session (you can provide questions before and these are addressed one by one by her. The session is live for Patreon supporters and the recording is published afterward for all interested. Tina was awarded for a very strong community binding.

Could we do something similar? Maybe even from the community, a few experienced devs are there for questions. These do not need all to be core dev members. But it would be nice if there was at least access to the core team. You could combine this with some sort of badge/tier that must be affordable. These are in fact your future senior devs!


Some other point that the NC company could provide is infrastructure. For example, for devs it can be interesting to extract some sort of telemetry data. For example: is it safe to drop support for NC 21 in my app without losing too many users? What apps are installed alongside the app?
Maybe there are dedicated questions the app devs might ask more specifically (How many recipes are registered per user avg/max?)

This could be extended to other services as well. Example: We are discussing an AI-based detection of strings that needs training data. It would be useful to let the users voluntarily upload data to train/enhance the classifier. But this is rather advanced.


One big time-eater is requesting the required information for bug issues. Sometimes it is hard for the users to collect the required information. An app to open new issues might help them.


Sorry for the very long post.

6 Likes

This is on the cloud.nextcloud.com instance? WHo did you ask to get access? I am just curious how to get access.

1 Like

2 posts were split to a new topic: Cleaning up the appstore and hiding incompatible apps

Any Nextcloud employee can give you access :slight_smile: I can add you! Just send me your mail address in a 1:1 message :smiley:

Hello :wave:

I wanted to update you about what I am doing with the thoughtful feedback of this thread.

Several ideas have been raised here that I already brought up internally to talk about the possibilities.

Maybe you have seen it at the release presentation, but thanks to the feedback and backup of this topic I got engineering resources to develop a series of tutorials in the upcoming months. I test the tutorials with enthusiastic colleagues without development experience from teams like marketing and sales to ensure the writings are easy to follow. We will also have resources to create video tutorials. I donā€™t have a timeline. But! Two tutorials are already live, about setting up a development environment, and developing a simple first app. We will do some marketing around this soon, after the marketing team had a little break to rest after the conference :slight_smile:

Engineering told me they have also made some adjustments to the bot on Github. I am not sure exactly what they did to be honest, but they agreed to the concerns and said they improved it.

We also have the discussion internally about what to do about documentation.

Regarding the communication channel to get help, I know there are many many channels. I think for now it would be best to try to keep the communication and questions central to this forum, I know Nextcloud employees are also checking the questions here regularly. This is why I think itā€™s for now not a good idea to create yet another channel for these questions. But thank you for thinking with us about this.

Also the app store got an update.

Thatā€™s the news for now. I want to say THANK YOU and I can see how much time you have all put into writing your thoughts down to help us further. Thanks a lot for thinking along and for your valuable and constructive input. I promise to take the ideas with me and act upon the ideas that we can realistically implement.

6 Likes

I am in contact with Joas already about joining of christianlupus. The email adresse has a character in it which causes trouble.

2 Likes

Hello Christian! Itā€™s perhaps a bit unfair to only reply to this one paragraph of your reply, thanks again and I can see you have put a lot of time in structuring your thoughts for us. However I wanted to let you know that we have some form of data already available, from the community survey we did a year ago. The results are now also linked on nextcloud.com/developer!
Some of the questions you have are answered there. If there is a need for a new survey, feel free to open a topic, gather the questions developers want answered, and we can pull this off. I can help with that, I will just need some help with the analysis because last time we got over a 1000 replies.

I am still processing all the other ideas you wrote, bear with me :slight_smile:

1 Like

Yes, what we need is a clear channel where people can ask questions. Iā€™m confused because I have the impression it already exist: I think the best channel is still this forum in the development category, I know this is being followed by several Nextcloud employees too. The talk room chat is also actively followed by many employees and core developers and very active contributors. These are also the (only!) two channels linked on Develop for Nextcloud: App development tutorials. Iā€™m not entirely sure yet where exactly we are failing, do people not know these channels exist, are people too shy to write down their question, do people not know how to write their question resulting in such a confusing post that no one can answer?

Iā€™m not sure yet :confused:

1 Like

One idea would be to put this into a tutorial. As you might know Iā€™m starting up the tutorials project, although mainly focussed on new people who want to learn how to develop an app, we could also make a tutorial about your script. But, the main consideration is: does it fit the scope of the tutorials. I made the rule that all tutorials have to be accessible also to people with not a lot of pre-knowledge. Thatā€™s a rather non-negotiable vision I set to make the project work. In other words, that means for your tutorial to be accepted, it needs to be possible to follow by someone without significant prior development experience (e.g. me, or one of my sales colleagues). If you think this could be a fit, feel free to write something down and I will add and market it! If you donā€™t think this is a fit, we can maybe brainstorm about another solution. Maybe a page in the developer documentation? Or a forum thread that I link on Develop for Nextcloud: App development tutorials? What do you think?

1 Like

Yes, those two channels are well communicated. I just signed up for an account on the talk instance (thanks for adding me BTW).

A concrete question (How do I publish my app to the app store after I created the keys to authenticate?) is easy to answer. More involved are open questions or questions that are aimed at concepts (When should one use an OCP event to interact with other components?). They are more diffuse and tend to get lengthy. I have seldomly seen them answered at all.

People do know (I suspect) where to write. It is however hard to get good answers to abstract questions. Writing such things down takes quite some time if it should be complete in some sense.

The section you are referring to here was just a plain (and maybe stupid) idea. I consider this is more a question of the medium than a question of the channel. In a video, I can explain something in 5 minutes that would take multiple pages when written down. In German, we have a saying: Ein Bild sagt mehr als 1000 Worte (roughly: One picture says more than 1000 words). Taking into account that a video has 25 fps, that makes 25000 words per second or 1.5 Mio per minute :wink:.

Ok, back to serious: Writing something down to explain a concept with an example, enough text to get the message, etc takes one hour. I see that no core developer has the time to do such a thing. So, we can only rely on (cheap) community members and these will fail to do the job in the long run. By doing it in a live stream, Tina HƤuƟge can explain such things very efficiently and gets feedback/queries in the same way. That makes communication much faster.

I was thinking of publishing the script in a dedicated repository and writing a tutorial how to integrate the script in the typical (tutorial-aware) app structure. Then, the glorious details of the python script can be hidden in that repository. If someone wants to have a look he/she is free to do so (and point out any errors I made).

For the typical app developer that would be a transparent integration not to be too concerned about. Similar to publishing an app to the app store is an atomic action for most developers.

I would like feedback if this is a good solution before taking the journey to extract that from the cookbook app and no one wants to use it. Eventually, I can talk with @juliushaertl as he also used docker in his debug environment. Would that be a fit?

yes! :slight_smile:

**adding some more emojiā€™s to get to 10 characters :stuck_out_tongue:

2 Likes

Hi @christianlupus :slight_smile:

I agree with you on almost all points :smiley:

Iā€™m just answering you the points where I donā€™t necessarily agree if you donā€™t mind ^^

I understand itā€™s not necessary to change of channel or not use a discord-like is a black-hole for information and we have channels on the Talk apps from https://cloud.nextcloud.com .

However, today developers use a Discord-Like because they can interact with each other quickly and get a response quickly (good or bad).

The Forums donā€™t have a good image for developers or anyone else. Because, you write a topic and you donā€™t know if anyone has seen your topic or if itā€™s interesting.
Finally, you write a topic and you donā€™t get an answer for several months or years.

A Discource-type forum, you have some interaction. But, itā€™s not enough, itā€™s different.

Okay, we have the community chat in the Talk app. But, Talk app similar to the Signal app and not a Discord-Like.
Itā€™s very difficult to get access to community chat, as a developer I have to ask someone to get access.
Whereas with a discord-like, I just have to click on the ā€œjoinā€ button.

From the Talk app, when I would like to share a piece of code, I cannot use Markdown because itā€™s not supported.

Also with the direction of the Talk App, I donā€™t think it can ever be a discord like.

Be careful, I am not saying that Talk is a bad app ! On the contrary, itā€™s a really alternative to Skype or Signal! :blush:

In the same way, I like a Discource-type forum :heart:

But, I think it is missing a layer, another app to complete this forum.

Itā€™s my opinion of course ^^

2 Likes

I donā€™t know if this will help the topic.

I created a PR to improve the Juliusā€™ documentation to deploy a development environment :point_right: Improve getting started by zak39 Ā· Pull Request #87 Ā· juliushaertl/nextcloud-docker-dev Ā· GitHub

Feel free to comment on the PR or here :slight_smile:

To see the result, you can see here :point_right: GitHub - arawa/nextcloud-docker-dev at doc/improve-getting-started

And you can compare with the original documentation here :point_right: GitHub - juliushaertl/nextcloud-docker-dev: Nextcloud development environment using docker-compose

2 Likes

My suggestion is to link the discourse topics you want into your chat system. Example dev tagged chats into the proper Talk developer chat system, then everyone in that chat room is automatically notified of the relevant topics that can discuss on the chat or reply to on the forum.

Chat Integration for discourse offer the ultimate in finesse

  • TagA only show first post in chat room, but no replies
  • TagB show all posts and replies
  • If :information_source: Support category is used skip all posts regardless of tags

or you can just use api, as is done for docs.nextcloudpi.com, or rss / json ā† dev category.

Iā€™ve seen these options used to link particular forum tags / categories to a half dozen chat systems at the same time and it works fine. I little experimentation goes a long way to getting it running simply and smoothly.

Hi,
Eventually I watched Introducing Nextcloud Hub 3 | Shaping the future of privacy - YouTube, I was happy to see what you told there which was discussed here before.
Moreover I was happy that the Hub idea is continuously developed. All that reminded me that I wanted to share my thoughts on this with you.

The Talk discussion of where we are and how it could be.
Following the Hub idea would mean that discussion should not even happened, means Hub would mean you can use any app and its nicely shows up in the Hub Dashboard. That would be would be quite competitive advantage as well. Iā€™m pleased with the usage of MS products at work and often I have to chose between an MS product, what does the basic of what that app should to or live with not ideal integration of full fledged app doing the same thing 100%.
That reminds me on the many post about Talk. So why not:

  • focusing on a good matterbridge integration and let the user use the tool the like work with most
  • Developer program & integrations should introduce minimum requirements on APIs to allow easy integration with other apps. That would allow easier IFTT. That could be even used to sync things between apps. Allowing other apps to consume the information could allow the eco-system to grow more easily with non-integrated 3rd party apps.
    There could different level apps, gold, silver or bronze, each allow better integrating with 3rd party apps.
  • accepting that other apps doing things better than NC apps but allowing to collaborate with them more easily providing standardized APIs and/webhooks.
    In my case there are two examples, https://joplinapp.org/ and PicApport | The self-hosted private photo server with photo gallery and photo management (photo 2.0 closed some gaps to second) or Taiga.io. Ensuring that each of them could consume information from the other (maybe creating a simple interface app) would allow me to use both in parallel, not deciding for only one, so against the other.
  • having a standardized way to speak to the full text search (elastic search) would make all information available in hub (most recent updated notes, pinned notes etc.).
  • the second app is bit more complicated. Until now there is almost no option, to hide content from a server admin, but is was said in Performance & Security that end2end got some improvements. I still hoping that one day, it will be possible that 3rd party apps can make use of it easily.
  • that would means that NC pushes into SSO / Auth-Service as well, allowing other apps easily to integrate that in their app (may that would mean providing libraries for others).
  • Of course, NC has to provide things out of the box to be easily maintainable by admins but doing such things could push Circle to a new level. There wonā€™t be a single groupware/collaboration solution providing best UX/UI for all. Imaging that you could interface easily with apps doing that one thing 100% and having them as item (via Hub) available in NC, you could integrate in an Circle. If you need more details you would jump off to that app (best by an direct link) .

If you starting big about these things I reckon there will be even more. I donā€™t expect that things like this will happen in no-time but we should not stop dreaming.
Just make sure that things go into that directions, other things will happenā€¦ :slight_smile:

Bye the way, thx to make this happen https://nextcloud.com/blog/learn-how-to-develop-a-simple-interface-only-app-with-nextcloud/

2 Likes

I agree, small tutorials on how to develop various aspects of apps or Nextcloud is very useful. I think a lot of people would prefer starting with such examples than from scratch reading only the developer documentation :slight_smile:

3 Likes

thank you for your encouragement and support @PackElend @rawtaz :smiley:

1 Like

Hi everyone :slight_smile:

One user ask us if itā€™s possible to use Pinia instead of the Vuex :point_right: Using Pinia for state management .

Itā€™s a good question, because we (the internal or community developers) donā€™t know if we have to use Vuex or Pinia or both ? :thinking:

So, maybe we must specify this part in the developers documentation, no ?