public inbox for gentoo-soc@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Nandeep Mali" <n9986.mali@gmail.com>
To: gentoo-soc@lists.gentoo.org
Subject: [gentoo-soc] Progress Report - Setting Beacon Afloat
Date: Mon, 11 Aug 2008 23:28:54 +0530	[thread overview]
Message-ID: <b59c1640808111058q1758dec2o3bdebf21ffc30046@mail.gmail.com> (raw)

Hi folks,

It's 11th, the suggested "pencil down" date for Google Summer of Code
2008. It's been fun. And it'll continue to be. No pencil down
unofficially. :)

Here's a long due report on Beacon.

My post mid-term deliverable was the collaborative editor. The initial
week was spent learning, cleaning and sprucing certain sections of
code and realizing how much more I need to learn. I spent quite a time
looking around, reading other codes and going through articles on many
topics in Web Apps. I wanted a know how on how to make a great web
app, issues with scalability (after a twitter/blog update by Anant ;)
[1]), good asynchronous JavaScript programming patterns etc. [2].
There are not many open source collaborative RTEs out there [3]. I
started my coding on it and changed my practices. So the post mid-term
code turned out to be different and more manageable and re-factoring
other code will not be difficult. I had tried to avoid the use of
libraries so I could understand more [4].

The collaborative editor has pretty much the same layout as the 'solo'
editor. The document, but, is not fully editable at once. I am using
inline editors (like in the original beacon), which allow user to edit
a part of the document by clicking on it. The click makes the text
editable (much like the Dojo inline editor, which sadly did not have
the support for an RTE and since I have a framework for one, I forged
it myself). This helps me in applying section locking so as to prevent
changes by different editors from colliding.

There is a tiny chat widget on the page and a user list which can help
editors stay in sync with each other within the editor itself.

As the document is being edited the sections get locked/unlocked
giving the user a complete view of what's happening. Epic events like
adding a chapter/section are handled differently by locking the whole
document. This part is still being worked upon.

Another major learning step was good (shudder) Ajaxing. Reading a lot
many articles by JS gurus I tried to find the best way to handle the
large amount of asynchronous requests made in the collaborative
editor. There are some periodical poll functions like getting the
connected users list, chats, server syncs and data comms. I had to
find the some ways to remove the HTTP open/close overheads but sadly
browsers don't support some hacks so well so went ahead with simple
polling. An interesting read at [5].

So what's remaining now?

- The completion of server-client communication in the collaborative editor.
- Perform the much needed testing and bug fixing.
- Completing the stand-alone editor's missing features like support
for certain GuideXML elements and output of well formatted XML.

Staying in tune to the project 'title' I plan to set afloat a beta
after the first two tasks.

Thanks to bonsaikitten, there's a demo of the current code base at
[6]. The 'solo' editor is pretty useable and you can play with the
chat feature in the collab editor. To let another user join your
session just copy the URL in the browser and paste it to the other
person. Or you could just open two tabs in the browser and chat with
yourself. :P

My future plan is to basically just continue work with Beacon and make
it as extensible and feature rich as possible while keeping it very
easy to install and run anywhere. I also plan to port it to Python
later (for a possible integration with the Google App Engine, thanks
to quantumsummers for that idea :) ).

It has been a great learning experience! More updates later.

Kind Regards
Nandeep


[1] http://www.kix.in/blog/2008/07/weeks-8-9-load-balancing-oauth/
[2] One of the good articles on JS patterns:
http://www.klauskomenda.com/code/javascript-programming-patterns/
[3] Wikipedia: http://en.wikipedia.org/wiki/Collaborative_real-time_editor
[4] A nice article by JS guru Stuart Langridge on use of libraries:
http://www.kryogenix.org/days/2006/12/24/the-fog-of-libraries/
[5] A bit on HTTP connections: http://en.wikipedia.org/wiki/Comet_(programming)
[6] http://dev.gentooexperimental.org/~n9986/beacon/trunk/editor/
(currently supported only in Firefox)



             reply	other threads:[~2008-08-11 17:58 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-11 17:58 Nandeep Mali [this message]
  -- strict thread matches above, loose matches on Subject: below --
2008-07-15 23:05 [gentoo-soc] Progress Report - Setting Beacon Afloat Nandeep Mali
2008-07-16 19:44 ` Donnie Berkholz
2008-07-17 20:15   ` Anant Narayanan
2008-07-19  8:27 ` Arun Raghavan
2008-07-20  3:05   ` Alec Warner
2008-07-20 11:18     ` Nandeep Mali
2008-06-26 12:24 Nandeep Mali
2008-06-26 12:34 ` Luca Barbato
2008-06-27 12:18   ` Nandeep Mali
2008-06-11 14:56 Nandeep Mali

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b59c1640808111058q1758dec2o3bdebf21ffc30046@mail.gmail.com \
    --to=n9986.mali@gmail.com \
    --cc=gentoo-soc@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox