Wow, this has some great thoughts.
When I wrote up the mail I was thinking about XWiki as basically
what it is being used for right now. I want it to be easy for non-devs
to build basic applications and easy for the IT departments and project
managers (XWiki SAS) to make entire customized services from reusable
building blocks.
The most important part in my mind is search. A company can't just throw
their crown jewels up on the web and wait for google to index them.
We need to be able to take dirty data sets and respond to poorly formed
search queries with relevant information quickly. If we can do that
then XWiki will be first in the bookmarks list of the work computer,
just like google is on everybody's home computer.
Second is the user defined model and revision history which make XWiki
what it is. With a mutable model, the technical and non-technical users
at a customer site can work together applying script and domain knowledge
to clean up dirty datasets which might begin their life as a huge word
document or excel sheet and then work their way toward becoming a set of
XObjects with accompanying data collection APIs and report generation
scripts. Without revision history, you don't have the "contribute first
ask questions later" culture which makes wiki collaboration work.
Third is of course a simple way for project teams to build custom
web services. Users have similar needs but they also have edge cases and
may want the site to look completely different, this should be easy
for developers but need not be within reach for non-developers.
I used to think 1 hard drive was plenty for my desktop. When I began
to learn about ZFS I realized that actually I had much more data than
I had ever thought I had and I really cared about disk failure and silent
corruption and the performance of my harddrive was rather poor. Now
I know that I need 9 hard drives and 1 ssd cache device.
XWiki needs to be the ZFS of industrial intelligence.
We need to prove that all companies have much more data than they thought
they had, that all employees and customers produce data all the time
(the vast majority of which is wasted), and that all data can be converted
in to actionable intelligence through collaboration (otherwise it's noise).
Once that narrative becomes universal, the need for XWiki will be obvious.
More inline:
On 03/27/2013 05: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.
I think that when we reach the stage where XWiki is "google for your
company". They will suddenly realize they have much more information than
mysql could hold without painful replication.
Of course for people who believe they will be the next twitter, a massively
scalable framework is quite interesting.
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.
I don't think we will get many technologically savvy customers who want
public websites (EG: ecommerce). The market is flooded with competing
frameworks and everybody has their own favorite language. Where we win is
"the framework with versioning and search built in".
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.
I spent some time thinking about this and determined that if we are to
support either multi-tenent or multi-node systems, we really need to store
any code which might be changed in the database.
Even with
myxwiki.org, editing a template must be done on both nodes.
One option would be for the scripting to be something the user can
git clone and push to a jgit server which is integrated in the wiki,
similar to how Heroku hosts apps.
While that is interesting, it doesn't rank on my list because it is a
significant challenge and is of little benefit to the intranet users.
Thanks,
Caleb
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…