Hi Ludovic, all
You're right, those are interesting questions to ask ourselves before
going into specific technologies.
Let me try to sum them up for reference :
* Should it be possible/easy for users to download and try XWiki on
their machine ?
* Should it be easy for users to run XWiki on their own server/VPS ?
* Should it be easy to run XWiki on popular PaaS providers platforms ?
More specically :
** SQL-backed ones : Heroky, Cloudbees, etc.
** NoSQL-backed ones : Google app engine, etc.
* Should it be possible to run XWiki in corporate environments ? More
specifically :
** Should it be possible to run XWiki on traditionnal (should I say
"legacy") systems (say websphere + oracle)
** Should it be possible to run XWiki on the more modern systems of
corporate environments (say tomcat+mysql)
Please add more if I missed some.
Jerome
On 03/27/2013 10:30 AM, Ludovic Dubost wrote:
Hi Caleb,
From my point of view, before starting to list technologies that would be
great for a next generation XWiki you first need to define what your exact
target is for XWiki. It is very important to do that because when I look at
Jerome's answer I don't necessarly have the feeling he is looking at
exactly the same objective as I would. While his technology choices might
make a lot of sense for an eCommerce platform, they might not in the
Intranet concept.
This is a first big significant task which depending on the answers will
serve as input on the technology stack to use. Indeed since 2003 when I
started XWiki a lot of new technologies and also use cases or delivery
methods have florished. For instance Cloud is now a very important delivery
method of Web Applications and wether your write for a Cloud service, for
Software deployment or for both this might lead to different technology
choices. Mobile is another key delivery method that was not there in 2003.
On the technology side, SOA, REST, Javascript are everywhere. NoSQL is also
a key technology to consider.
So let me first try to address the question of what a new XWiki could be
used for, what it is currently used for, what are the strength of XWiki and
it's weaknesses.
First the initial objective which is the reason for XWiki:
- building flexible collaborative intranets on top of a Wiki, allowing to
quickly build applications, integrate these applications with the content
Then a lot of things that users, clients have asked for, developers have
done on their own:
- providing Knowledge based solutions
- building applications on top of the "Application" development features of
XWiki (the extension of the previous use case)
- providing a full Intranet solution, including what XWiki does natively,
but also providing "Advanced Profiles", "Groups", "Social
networks", a set
of Collaborative Applications (Forum, files, etc..)
- building public or internal content web sites with limited editors (CMS
use case)
- building a web application using XWiki as a framework, using many or
little of the XWiki existing functions
- just doing a very nice Wiki in an Enterprise or Public context
- doing any of these in the "Cloud" context (multi tenant) and allowing
users to subscribe to an "use-case" that would be built using the XWiki
technology
As you can see this is close to the "flavor" discussion we already have and
I've voluntarily listed the first three which are the flavors we are
currently discussing because this is at XWiki SAS what we see organizations
we discuss with are asking for most.
We have seen the other uses cases also but either we had difficulties
addressing them or it was less natural to use XWiki to address them.
The "framework" use case is a very important one here, because if we think
XWiki's objective is to be a Framework objective for ANY web application,
then this might be incompatible with the Intranet, Knowledge Base and even
the Wiki use case.
For instance Jerome's use case does not fit in the "Intranet" use case and
the problem he has are very different from those you have in an Intranet
environment.
The "Cloud" one is a very big one also and can lead to radical different
technology choices. As we can see many new cloud services are build around
NoSQL and there are some good reason for that. It's because the Cloud
provider wants a unique platform for all his customers and wants to run the
service in a fully multi-tenant way on top of this unique storage mecanism.
The objective here is to reduce the operating cost to the maximum, in order
to be able to provide a "freemium" service. However this choice might have
a lot of benefits in the "Cloud" context, but it is a radical choice which
has a lot of impact if you also want to provide your service as "Software"
like we do for XWiki. It complexifies the installation, reduces the
features of your storage (very little relational queries), is a radical new
technology to learn to build on which is still very young (choosen a NoSQL
platform today is a very risky bet and supporting multiple technologies is
a nightmare). Now not supporting NoSQL does not necessarly mean you cannot
go "Cloud" but this goes against the way of doing business in the cloud and
complexifies the cloud platform, has scalability issues, etc. Now it's
impossible to ignore "Cloud" but it's important to understand which type
of
"Cloud". Is is a unique Cloud or is it SaaS where your objective is to be
able to "host" the service for users and customers. The first choice might
mean going NoSQL, the second might mean sticking with traditional
Databases. The first choice might mean that you will have a hard time
convince "software" users because you also need to convince them to go
NoSQL.
For me the biggest success we have is for "Intranets" and it has always
been the key objective, and what we see is that the "Intranet" use case has
lead us to have to address the "full Intranet" solution but also the
"CMS"
one as some organizations want a unique platform for both publishing and
collaboration. There is a lot of pressure also to support all "Social
Network" features as there are obvious bridges between a software that
would be the main places to manage profile, groups and discussions and
another software that want to manage information, knowledge and
applications.
For me the biggest strength of XWiki is it's flexibility to build
Applications and to Customize it. The first objective of XWiki was to allow
organizations to setup a wiki start sharing knowledge and then extend their
wiki with applications that would organize the information in a better way.
This need is still here today (Podio is a good example of the Application
concept without the Wiki part to glue everything together). I believe many
CMS include more and more "application" features so that you can extend
your web site with more advance organizations and features (but CMS don't
have the same collaborative aspects). The power of XWiki is to allow to do
this fully from your web browser and to do it fast. It is to allow power
users (not developers) to participate because they don't need full
developer skill (this one is very important when it comes to the technology
choices of how XWiki gets extensible). The power of XWiki is to not limit
the customizations capabilities to the content but also allow to customize
the UI by overidding all templates and then morph the initial web site you
created into something else. This power is want allowed XWiki to kind of be
a full "framework" for web development, but it could be that we have pushed
it too far or not far enough. These strength are particularly talking for
some of the users case listed before and for others it can actually be a
weakness.
The weaknesses of XWiki depend on the use cases. For the "Intranet" use
case, our weaknesses have been to not work enough on the UI, to not adapt
enough to the actual intranet use cases (this is where flavors come in).
Another weakness is not enough separation (but not too much) between
content and applications. Applications live in XWiki page but we don't have
enough markers to separate them and not enough "SOA" at the XWiki
Application level. We can fix this. Other weaknesses are how to address
mobile, how to address AJAX development and still allowing power-users (not
developers) to participate in this development. We also took too much time
to build AppWithinMinutes. There are challenges to allowing power-users to
develop and still allow this development to be continued by real developers.
On the "framework" use-case it's another analysis. Do we need to allow
development in the Wiki if XWiki's job is to compete with web-development
frameworks ? Can we go without hosting the development in an IDE and if so
should it be Eclipse or a Web based IDE ?
Is it compatible to provide development features that are more easily
accessible to non power-user (like velocity is) or can we go with more
advanced technologies. Etc... there are many questions coming from that.
There are many other very interesting questions that will yield different
answers. For instance should we do a full AJAX UI. What are the
consequences of it. If we go full AJAX, what about URLs ? What about search
engine indexing. Can we do CMS if we are full AJAX. Full AJAX means more
complex to customize also depending on how it's developped.
To summarize we need to "choose" first what we want XWiki to be. Once we
all agree on this then we can answer how to build the next generation
XWiki. I don't disagree that we should think about this, because it's going
to be 10 years in November since I started building XWiki and of course
technologies evolve and we need to be able to adapt.
I'm looking forward to your opinions on that. Then I propose we discuss for
each of the use-cases we consider are the future of XWiki what are the
right technologies. Then we also look at the compatibility of technologies
with each other. This will give us a lot of answers. One being in which
direction do we need to put our technological effort on. Another being more
clear about what users and developers can expect from XWiki.
Ludovic
2013/3/27 Jerome Velociter <jerome(a)velociter.fr>
Hi Caleb,
Great thread, good exercice.
Like many of us I imagine I've been giving that question some thoughts
already. I've written an article exactly one year ago about this topic [1]
(not on rewritting XWiki per-se, but on writing a similar
application/platform). My thoughts have partly evolved since then, although
I still think most of what I've laid down there at the time.
Basically I would go like this :
- I would stick to the JVM, and to Java.
- I would make it a RESTful web service. And probably even several if I
were to be iso in terms of feature. An example of a feature that I would
see live in a separated web service (so different process and different API
host or subdomain) would be anything open office related. It does not
belong to the base service, and would actually benefit being hosted on the
same machine as an open office server. This is an example, I believe there
are other features that do not belong in the base service (Scheduling ?
Mailing ? etc.). It's SOA, though the base service (the base "wiki engine"
let say) has to be self-sufficient and offer something that work standalone
(even if it means no watch list, no office import, etc.)
- Today I'm not so sure about JAX-RS as I was in my article. It's nice and
and brings a lot "for free" but now I also think it has some limitations
that can be penalties, such as limited dynamicity in the way you can play
with routes. Though maybe this is mitigated by JAX-RS 2.0 filters.
- Front-end templating would be done with dumb templating, for example
handlebars.js or dust.js ; with a flexible intermediary layer for preparing
the "context" needed for such templating mechanisms (written as groovy or
JS scripts).
- I would go for a RDBM (like Postgres) without an "industrial ORM". I
think hibernate and friends bring too much complexity for too little value.
They tend to impose themselves on the DB design instead of having DB design
and object design exists independently and meet at the O/R layer. They make
it hard for the developer to know what is executed against the DB (the "gut
feeling" can be wrong) and when. Also lazy fetching does not solve any
actual problem IMHO.
- I would make anything query related (like searching for objects when
building applications) happen against the search engine and not the DB.
- I would use elasticsearch as a search engine. It can be very easily
embedded (for development and simple deployments) or run as a separate
cluster, it's schemaless and RESTful by nature.
- I would embrace JavaScript fully on the "client" for changing state. It
would be hard for me not to throw AngularJS in the mix.
- In terms of UX, I would make the "administration" a different UI/UX than
the wiki itself, and make it an actual "back office".
- ... it's missing a lot of details, I'll come back if I have some time
Actually I've been trying to put most of those ideas into action for some
months, into a e-commerce/marketplace platform I'm building [2].
Now, I'm very eager to read what others think.
Jerome
[1]
http://velociter.fr/journal/**my-idea-of-a-modern-web-app-**on-the-jvm<h…
[2]
https://github.com/mayocat/**mayocat-shop/<https://github.com/mayocat/ma…
On 03/27/2013 02:12 AM, Caleb James DeLisle wrote:
This is the premise, you are going to write a new
XWiki.
You are not bound by any backward compatibility requirements.
Use any technology or combination of technologies.
PHP? C++? Golang? Node.js? Java? Your call!
Describe it in as much detail as possible.
What frameworks will you use? What ORM? what databases?
Why will it perform well?
How will you get new features into the hands of users quickly?
How will you avoid this:
http://steve-yegge.blogspot.**ca/2007/12/codes-worst-enemy.**html<http:/…
and this:
http://www.laputan.org/mud/
Think big and go wild!
Thanks,
Caleb
______________________________**_________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/**mailman/listinfo/devs<http://lists.xwiki.org/ma…
______________________________**_________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/**mailman/listinfo/devs<http://lists.xwiki.org/ma…