Make a better CodenameOne and get it adopted by more developers around the world

158 views
Skip to first unread message

codeu...@gmail.com

unread,
Apr 24, 2018, 11:44:47 AM4/24/18
to CodenameOne Discussions

Hello,


First of all, i will introduce myself. My name is Eric Dodji Gbofu and I have been using Codename One since its first days. I was already a user of LWUIT before the creation of CN1 so the migration to CN1 was natural for me. I am also the author of the french and first book on Codename One released in 2015. You can read more about that on this page https://www.codenameone.com/blog/book-continued-migration.html .


This message is not only for CN1 team but also for all developers who use this framework. I have been seduced by CN1 since its creation and i always don’t understand why it does not meet the much deserved success yet. So, i just post this message to make some propositions to the CN1 team, but also to allow other developers to give their opinion on everything I'm going to write. I think it is time to contribute more seriously to the success of Codename One.

First point :
On CN1's official website, it is important to add links to Codename One external learning resources. Google is not enough. People need to notice on the CN1 website that other people are also creating resources for CN1. For instance, when you visit other’s framework website, you could find links to others resources like books, videos and articles created by other developers. These resources are put on a dedicated page. This kind of things makes life easier for beginners who can, for example, look for resources in their native language. From 2013 to 2015, I had a website in French about CN1. This site is no longer online since 2015 but I will surely relaunch another site this year.


For example, many people don’t know that there is a book (in French for now) about CN1 since 2015. It would be nice to put this resource and others on a dedicated page on the official website. The resources provided by the CN1 team itself are not enough to make other people understand that the framework interested other developers.


Second point:
Some community members like Steve Hannah (who works with the CN1 team) have created some great stuff that is little known and deserves more recognition and adoption.


Take, for example, the topic of CN1 theme creation. Despite the fact that there are some videos on the subject, it's something that people struggle to create properly. Some have expressed the wish to create their themes with CSS and Steve has fulfilled this wish by creating CN1 CSS. CN1 CSS is cool and really simplifies life to create themes if you know about CSS and don’t want to fight with CN1 designer's theme editor. This library is unknown and the CN1 team does not really put it forward despite the fact that people needs it. There is also another cool tool like CN1ML which is an ambitious project and which also deserves to be known. Same for the tool that allows to use CN1 with PhoneGap / Cordova.


What I propose on this second point is to integrate CN1CSS (priority) and possibly CN1ML directly in the API of CN1. Once these things are integrated, you can for example put them in the CN1 project creation wizard. This will allow new (and even old) developers to know that this or that tool exists and is there to help them. Here is an example of what the content of the CN1 project creation wizard should look like.


• CodenameOne Project (DONE!)
• CodenameOne Library (DONE!)
• CodenameOne Themes with CN1CSS
• CodenameOne Phonegap / Cordova Project
• CodenameOne CN1ML Project


Third point:
Almost two years ago, I announced the arrival of a marketplace for CN1 for the month of July 2016. For those who had missed the announcement made by Shai on this subject, read this article: https://www.codenameone.com/blog/codename-one-store.html . This marketplace has not finally arrived because of some problems I had. First of all, I apologize because I was quiet since July 2016. Now, everything is OK and I will talk about it in this third point.


I want to launch this marketplace because I noticed that some developers wanted premium themes for their apps. In addition, other developers (like me) had also created great plugins for their own projects but didn’t want to give them for free (normal thing that I understand perfectly).


Two years later, I am now very convinced that CN1 needs a marketplace and I have definitely come back to launch it.  Now it's serious and nothing will stop it because I'm finalizing the last points with my team. The domain name has changed and the new address is www.codename1store.com . You can already visit the website and put your email for news. Launch dates are already available on the homepage.


I am available to answer any questions about this marketplace. That said, if you are a developer and you use CN1 intensively, you can already start preparing or creating themes, plugins (CN1LIB), templates and even complete applications for sale on this site.


About this third point, I think it would be cool that the CN1 team adds a menu in the plugin to directly access the marketplace with the browser. A good shortcut to simplify the life of developers. It remains a suggestion and not an obligation.

Fourth point:
To simplify the life of the CN1 developers, I intend to create and offer desktop tools to CN1. I am good in desktop development with the Qt framework (in C++) that I used to develop a lot of tools. I want to recreate in a complete and modern way certain tools of CN1. Currently there are various default built-in tools to the Codename One Designer software. Some are not so easy to take for beginners. Others are not intuitive. Personally, i have no problems with CN1 Designer but I see too many people around me (especially those who start with CN1) who didn’t find this tool intuitive.


Currently, I’am building a better internationalization tool (application) for CN1. This is a simple to use and more complete application than the one built into CN1 Designer too. I was inspired by Qt Linguist app so i named this app Codename One Linguist ;-).


I would like to ask Shai and Chen if they will accept to integrate this tool to CN1 if i give them this software for free ? They will of course test it before it launch next month (in May). In the case they don’t use to accept my gift, i will prefer to sell it in the marketplace. Need your reply here Shaï and Chen ;-)

 Fifth point:

CN1 API is becoming big with more and more features so I think it would be good to start removing some classes and functions that are deprecated. Not all but the oldest that have been marked deprecated for long time. I would like to have your thoughts on that too.


Sixth point:
Publish on your blog interviews of developers and companies that use CN1 to create their applications. Corona and Unity, for example, often do it. Here are some examples here https://coronalabs.com/stories/ . PS: I use Corona too to build games. This is why I put their link there.

Seventh and last point:
I think many will agree with me that we need a new theme editor for CN1. I know that the CN1 team is very busy with a lot of things and I propose to the community that we take care of it.


I really want to create new modern and easier to use software to create themes in CN1. With this app, developers will have the choice to use a visual editor or to code everything in CN1 CSS if they want. What do you think about that ? Is this something that interests you? If so, are there people who will join me to do that? Only developers who know how to use the Qt framework.


Thank you for taking the time to read this long message. I am curious to know what you think about each of these points. Thank you again and look forward to reading you all. Long live toCodename One ;-)

Shai Almog

unread,
Apr 25, 2018, 2:22:03 AM4/25/18
to CodenameOne Discussions
Hi Eric,
thanks for taking the time to write this. It mirrors a lot of our internal discussions & I think it's a good thing to raise some of these points publically as an open project.

Before going into the points I'd like to clarify some of my personal thoughts. Notice that we don't have internal consensus inside the company either on some of these but hopefully once I explain these you'll understand my response more clearly.

I'll first start with a statement of facts:
  • There are quite a few long time Codename One developers that keep the lights on here so we are doing something right
  • Growth for Codename One has been flat for a few years now, we are growing at a very small rate especially when compared to other tools
  • Most of these other tools have a lot of marketing $ and brand names behind them so we can't always do what they do to achieve growth
  • Part of the stagnation is Oracles mishandling of Java that hurt the overall community, this is reflected by the mass exodus of native Android developers to Kotlin

I'd also like to state that the fact that we are a commercial company that needs to turn a profit is problematic in this market. Even though the features we charge for aren't available in any other tool the perception is still damaging. Unfortunately, I can't see a way around this without duplicity.


As an engineer there is a strong desire to pull out my "engineering hammer" and fix the problem. E.g. if we just have this "one feature" people will flock to Codename One. That's wrong. With the exception of one missing feature (instant run on device/on device debugging) we pretty much exceed every other tool in the market.


Personally I think we need to focus a lot on design and providing "ready made solutions" e.g. the Uber App and upcoming Facebook Clone. Our new emphasis on Kotlin also helps with communicating to the "down with Java" crowd. Of all the points you made I think point 2 is the most important. We need the experience of Codename One to be amazing out of the box...

As to your points:

1. We would love to. The problem with that is that these pages make sense when there is a lot to show off. There isn't.
The page would look worse than not having one at all right now.

I would love to have an "Awesome Codename One" git page but it wouldn't have enough materials. As you saw when you tried to create a store it's a chicken/egg problem. The whole "if you build it they will come" mantra works only in movies. In reality a marketing person spends a huge amount of time on the phone talking to people and getting them to write things. That's what we did at Sun when we launched LWUIT. Our manager literally called up potential customers and convinced them to adopt our framework so we would have showcases for the launch.


2. I mostly agree with that. If you will look at our commit log just yesterday Steve added the CSS support into the designer tool which means it will ship by default with Codename One 4.2 which will come within a couple of weeks. He also made some changes to CSS based on my requests that finally make it competitive with the designer tool including things such as "live editing".
I think we need to completely re-do the setup wizard and offer better app templates with better design. It's a matter of time/schedule.

3. That's great. Lets see the marketplace and the content you have there and then we can talk about how we can help promote this.
I'd like to help in any way possible.

4. Steve wanted to create a Codename One desktop project, I'm not sure where he stands on that. We develop our own desktop apps (e.g. the new GUI builder & settings app) using Codename One so it's very possible.
What I would like to do for localization is an "auto-localize" tool in the simulator. It's something that would probably be pretty easy to integrate. It would install a "fake" resource bundle that sees all the localize requests and gather the keys then suggest additions to the resource bundle.  The localization data can be saved as properties under the res directory. Since properties are a standard file format in Java there would be no problem in editing this directly/converting this. 
It should be reasonably easy to write I just didn't get the chance to fit it into my priorities.

You can submit a pull request but we are generally averse to adding big new tools. E.g. the CSS plugin from Steve spent a lot of time as a standalone tool because we didn't want to support something as big as that unless its ready for prime-time. If it's simple then it would be fine but I'd like it to fit with the future direction of the tooling.

5. I agree it makes sense to remove some things but these sort of things should be done very carefully. If you have something in mind file an issue.
In terms of size the impact is negligible as the optimizers remove unused code.

6. I tried to do that a few times. We talked to large companies and tried to get case studies etc. but it never materialized.
One of my friends used to do these interviews as a full time job. I understand it's a pretty difficult task normally as people are very averse to doing it.

We don't need interviews with random developers. We need interviews with banks & hospitals that use Codename One but those guys are generally very secretive.

7. I agree with this. I've given this a lot of thought over the past few years. It's a big task though...
The first step was breaking the GUI builder out of the designer tool but the goal is to ultimately retire that tool entirely.

Shai Almog

unread,
Apr 25, 2018, 3:22:11 AM4/25/18
to CodenameOne Discussions
Despite writing so much I still neglected one important comment... If you want community involvement file RFE's for things like this!
You want a better wizard file a lot of RFE's with specific narrow suggestions ideally with screenshots.

People reading this, vote and type a comment in such issues and help us see what you care about and what you notice... We can then assign milestones and discuss each one of these individually.

Thomas

unread,
May 18, 2018, 3:10:20 PM5/18/18
to CodenameOne Discussions
I think the real issue with CN1 is the lack of user contributions. Despite CN1 beeing 6 years old now, the number of CN1libs is quite limited (and most are from the CN1 Team itself) and if you look at the github, you can see that the number of contributors to the source code is only 25. With more than 40000 developers supposed to be using CN1, this is really few. If you compare to flutter that is more recent, or to openfl (that is probably less popular than CN1), you can see that they both have more than 5 times this number of contributors. And this is kind of a problem as if a developper see that a Framework is only having a few third party libraries or code contributions, he would immediately think that this Framework is more likely to lack some features or libraries he may need. So this is kind of a vicious circle as, the less libraries you offer, the less your Framework is popular and the less you are likely to receive third party contributions...
I think one of the reason of this lack of community involvment into CN1 is the fact that it offers paid services. So, in some people minds (even unconsciously), they don't have to contribute as CN1 is a commercial company. But what if we could make this an advantage rather than a disadvantage?
I was thinking recently that CN1 should use the fact that it offers some paid services to encourage some developpers to share their code that might be usefull to others. 
For this, CN1 could offer to link your github account to your CN1 account and, for each valuable contribution to the community, offer a bounty in the form of points that could be used to have some réductions on paid services (cloud services or courses). For example, for a bug fixed into the source code, you would get Something like 1 point and for a more valuable contribution (like a CN1lib) much more points depending on how much the CN1 Team think your contribution is worth it. If you keep it subjective (I don't think you should use a fixed scheme) and just say: we can reward you some points for valuable contributions I think more users would be motivated to share their code than currently without any significal impact on your earnings (anyway if you see this measure cost you too much, you could change the value of a point (for a start 1 point = 1$ discount seems a mere conversion factor) or just reward less points for each contribution).
I think it is an idea to think about if it can revitalize the community of developpers on CN1 (Note: I am not saying this for me as I have no trouble contibuting to CN1 for free and I will continue this way. I am just a bit sad to have to redevelopp  some classes and libs that someone has probably already developped for himself and just not shared (like recently a circular progress indicator or a color editor, that some people already tried to develop according to this forum, and that would be part of a material design components cn1lib that I would share when ready ;) )

Shai Almog

unread,
May 19, 2018, 1:32:04 AM5/19/18
to CodenameOne Discussions
The contributors to flutter are Google employees in the Dart team which is a HUGE team. They need that many people because the architecture of their VM is pretty complicated (not a very good sign).

It makes more sense to compare us to a project that was shorter lived but highly visible and highly promoted by Oracle/Xamarin: https://github.com/robovm/robovm/graphs/contributors
Our numbers would have been better had we not worked on Google Code until it was shutdown. We should have been on github sooner.

Despite all of the people who work on Flutter they don't have a fraction of the API/library support that we already have with the limited resources at our disposal. 

Most open source projects don't get a lot of 3rd party contributions, especially complex projects (e.g. us). To me the code contribution aspect isn't a huge deal. I care far more about bug reports, questions & community advocacy all of which could also use improvement.

This isn't the first thread that mentioned this. We made a lot of attempts in the past to increase community engagement and most of them weren't very successful. Even basic things like being active on reddit/other sites or writing an article in medium etc. Most developers don't even submit their app to the gallery...

I know the head of the flutter team has personal calls with developers to encourage them to write about the platform. You can literally see the marketing copy he helps them insert into their posts. Unfortunately we don't have the ability to do that.

About giving bonuses to contribution we did exactly that when we launched. We offered a free basic subscription for code contribution & for people who shared information in social networks to help promote our brand. This didn't result in anything. Worse, it created a bad incentive for contribution that triggered bad contributions with the purpose of getting a free subscription.

This further creates a bad incentive by putting a $ sign on the work community developers do... (I don't know if you read Freakonomics but it has a wonderful explanation on the nuances of negative incentives). I think the main value of contribution should be the contribution itself & being a part of the community. If we offer money (or equivalent) we devalue the work which is arguably worth more.

Thomas

unread,
May 19, 2018, 12:20:52 PM5/19/18
to CodenameOne Discussions
Didn't know you already tried this kind of incentive when CN1 was launched. But I think that one of the mistake was to say you would reward a free basic subscription for any contribution. Had you said you MAY give a reaward (at you convenience) for a contribution if you consider it a worth one (bug fix, significant contribution...), you probably wouldn't have experience bad contributions of people only attracted by the reward. Using a system of points rather than direct $ reward would also avoid putting the $ sign on community work (we could imagine others points usage than just converting them into a $ coupon for services)
Anyway, it was just an idea on how you could try to improve the community involvment into CN1. Because unlike you may say, 21 contributors on a project like CN1 is really few. You focussed on Flutter (that is quite recent and probably didn't reach the 40000 developpers yet, which is why I mentionned it in the comparison) but I also compared to the OpenFL project (where the team is pretty much one guy and that is less promoted than CN1 and probably less popular (I doubt that it reached 40000 developpers)). I could also have mentionned libgdx (https://github.com/libgdx/libgdx) that is also quite similar. Your comparison to robovm is not fair as robovm is just a vm and not a multiplatform developpment Framework (it compares to your parparVM for example) so if you want to compare to Xamarin, you should sumup the contributions of xamarin-android (https://github.com/xamarin/xamarin-android), xamarin-macios (https://github.com/xamarin/xamarin-macios) and Mono (https://github.com/mono/mono) ...

Shai Almog

unread,
May 20, 2018, 1:00:56 AM5/20/18
to CodenameOne Discussions
There is still a $ sign associated since there is a value associated with the contribution. Building something like this with gamification etc. would be a whole new startup in its own right...

The problem is that incentives that are misplaced can backfire in a way that's irreparable. With our limited resources we need to be very careful about where we invest our effort. Without a dedicated person for community building I don't think we can invest resources in that at this time.

RoboVM is a lot more like us than  OpenFL & libGDX...

- It had commercial aspects
- Offered IDE integration to support cross platform development to iOS
- They literally copied the text from our website for their marketing
- It was promoted for app development not game development


libGDX & OpenFL:

- Have no commercial aspect
- Target the gaming industry

I've spent a lot of time trying to understand if these are the reasons they have more community involvement or if it's something else. Notice that neither one of those offers any such incentive...

Gaming is a very different type of community to app development. There is more of a "do it yourself" attitude and so contribution comes more naturally.

The fact that we have a commercial aspect to Codename One is a huge blocker to many people. One suggestion was to separate the code aspect of Codename One from the commercial entity but again that requires resources/effort & duplication.

Dave Dyer

unread,
May 20, 2018, 8:07:07 PM5/20/18
to CodenameOne Discussions

From my point of view, the selling points for codename1 are the breadth of platforms supported and
and the high degree of compatibility with standard java.   The best use of resources to enlarge the
community would be to increase public visibility where those things are prominent, and to work
on enhancing the compatibility with standard java applications.

The weakest aspect of this is that legacy java GUIs are a LONG way from Codename1.


Reply all
Reply to author
Forward
0 new messages