Contents
Project Proposal
A Text Editor like User Interface written completely in Python that allows developers to work with each other and with new developers in a collaborative manner.
Idea of Project
The idea is based upon the necessity that most of the new developers face while programming over their files. Sometimes the situation arises that we have to learn or look for a piece of code or documentations and we need to obtain those piece of code or documentations instantly and sometimes it happens that two or more people need to work on the same files simultaneously. In those situation we have to look over the web to reach to a particular file or code block to learn them for our solution which may be time taking and management of those informations is extremely terrible.
So what if there is a Text Editor or an IDE for a user that embeds remote files written or currently being edited either in plain text or in some programming language by a developer or programmer? And user can view the categorized hierarchy of currently working developers and their files. And user can easily navigate to the files containing the required code block or piece of information by searching appropriate category. What if there are many developers working over same kind of interest at one place? If it happens, it will be very much helpful for beginners and new developer and will increase collaboration among developers.
Benefits
Consider there is a place where you can meet many open source developers of same interest and you can directly interact with their codes and for a beginner it will be easy to learn new codes through the codes' documentations and shared resources (files, docs etc) of the developers. Developers can work with each others in more collaborative manner. The codes can be written as a tutorial with proper comments and can be shared to everyone. This way code will be in contact with lot many people and there might be a chance that code will grow more rapidly. Apart from these we can see a lot of open source code to be developed at one place. Therefore the code will be more open and that's what the open source is meant to be.
Goals
The main goals are
-
Increasing collaboration among developers.
-
Direct interaction of new developers with open source codes and spreading them infinitely.
-
Forming better communities for developers.
Why Gnome
Since I've started living in Gnome Environment, I haven't switched to any other Desktop Environment ever. I became very much addicted to it. I see a lot of people coming forward, enlarging the Gnome community, contributing in it and helping millions of people with their contributions. This fact drives me to become a developer for Gnome and help those millions with my contributions and therefore it has become passion that urges a strong will to contribute to Gnome community with my work.
Requirements
Python (2.5 or higher)
WX module (2.8.10.1 or higher, having AUI package)
Twisted module (8.1.0 or higher)
Components
1. User Interface
The server program is without User Interface till now. I'm planning to integrate the server program with an User Interface but at this moment I'm currently working on client's UI and trying to increase its functionality.
The main components of client User Interface are -
Menu Bar, Tool Bar, Side Pane (for connected developers), Bottom Pane (for all the logs or output), Tabbed Windows, Resource Tree Pane, A common Chat Box.
The initial GUI of client program will contain an interface like a simple text editor. At the top there will be a Menu bar and Tool Bar having options just like an editor does. The editor will contain a side pane (left or right) having connected node point (a connecting point or server) with all the categorized developers.
There will be tabbed windows for editing. If user selects a developer from the side pane (below the Node Point), it will be displayed in a new tab window. At the bottom, there will be a pane having the output and log of all the happenings inside the editor. Below it, there will be status bar indicating the current status. And there will be a shared resource tree pane and common chat box too. The initial GUI of client program is almost complete.
Toolkit - wxPython

Proposed GUI

Node Point sidepane

Tabbed windows for editing
2. Communication Interface
Till now I'm designing the application that works over Local Area Network. But my main motive is to design the application that can work over the web. The communication uses Twisted protocol framework backend for transmission of data between server and client.
Backend – Twisted Protocol Framework
Concepts and Implementation
The concept includes the communication and sharing of information between clients and server. Each client connects to the server and server maintains the list of clients connected to it. The server works as a node point and categorizes the clients according to the piece of information given by the client when connection establishes. Then each client receives a categorized list of developers that are connected to the server and can see the files currently being edited by a specific developer in Notebook pages (separate tab window) whenever client user selects it .
I might be wrong in some places while implementing the concepts and there's lots of work needs to be done. As for now what I've thought for the project, the implementation of concepts will proceed in this way (but any good guidance will help me a lot and save my lots of time).
1. Integration of GUI with client/server communication
This is the part I'm currently working on and finding the different ways of implementing it. In the very beginning I tried to make separate threads of Twisted and Wxpython and that doesn't feel much comfortable. After hours of studying I came up with the solution of using reactor with wx in twisted. The reactor combines the UI in a communication event loop that keeps listening to a particular port with TCP.
2. Node Point
The Node Point may have the similar concept as of the IRC. But till now what I've implemented, a node point is a simple server which maintains the list of users connected to it. Further I'm working on making this list categorized by receiving some information from client side. The node point will be displayed in side pane having the categorized developers according to their interest.
3. Real Time Approach
In the current program all the communication is done using LineReceiver's sendLine() method which processes each Enter and then sends a line to server or client. But for further implementation a Real Time approach can be used for communication.
I've worked upon sending and receiving data in simple client/server socket program in which client sends character whenever a corresponding key is pressed and characters are received by the server program in Real Time. Further these received characters can be appended to a Wx Text Control (TextCtrl or text window) simultaneously with AppendText() functionality. So far what I've discovered Google Wave too uses AppendText() in its API for appending the real time data. What I did simply is in the code block -
Code block (client side) -
def OnKeyDown(self, event):
keycode = event.GetKeyCode()
print keycode
data= chr(keycode)
if keycode==27:
quit("You have exited")
else:
if(UDPSock.sendto(data,addr)):
print "Sent character '",data,"'....."
Here I simply bind a wx.EVT_CHAR (wx character events ) to a particular frame object and OnKeyDown(self, event) is the event handler which stops sending characters after pressing ESC key (keycode 27). On other side (server side) received data is appended to a text window in Real Time.
4. Security features
After the initial GUI starts functioning successfully, I will try to implement security features over the connections as SSL in Twisted using ContextFactory (for server) and ClientContextFactroy with twisted.internet.ssl package. I've also read how we can write the server and client programs using Jabber and XMPP protocols with Twisted framework too. So these can be the further implementations of my work.
5. Resource sharing
The client UI will also contain the side pane where developers can share necessary files and transmission of files will done using ftplib module in python.
My Current Works
Currently I'm working on how to combine the communication interface and user interface together perfectly. The server program works fine and has no user interface. At this moment, communication between server and clients is being done successfully. Each client can easily get the data what the other client is writing in its editor window. In the client's user interface there are 4 tabs at this moment –
Welcome Page (To display any welcome message)
Messages (To display the messages sent from the server)
User's Page (The page where user writes its own file)
Receive Page. (The page where user will get all the text written on other client's User's Page window)
So far the UI works fine for two clients. If third client comes then its data too will be displayed in same Receive Page. The only thing is I need to do is simply create a new tab window whenever a new client comes in the communication and this is almost to be done within this week.
So far, the very first line in the User's Page window will corresponds to the user name of that client and all the communication will be done using that name by the server. The text written by one client will be displayed to other client in read only and if the client makes changes in between the text, the changes will be displayed to other client as well.
Here is the screenshot of two running clients on localhost -

The very first line in User's Page corrosponds to the user name of the client.

Files (source code)
Details of my plan for project
Right now I'm working on client's UI for receiving data in new separate tab window whenever it gets new client connection i.e. a client will have separate tab windows for each client connected to server. This work is about to be completed and will be done by the end of this week. After that I will proceed with this schedule -
Till April 25-30 – I'll work on creating categorized list of developers and placing them in side tree pane of client UI. I've created successfully the list of users on server side and trying to make it categorized.
Till May 10-15– Work on Bottom tree pane and its customization in client. The generation of logs have been created succesfully. The work is to place them in bottom pane.
Till June 10-15 – Integrating common chat in client's UI. This may take much time and I have lots of work needs to be done.
So far I strongly want achieve these targets first. Further plans will be based upon the extent of completion these tasks.
Further works to be done -
-
Syntax Highlighting ( 1-2 week)
- Toolbar Options (2-3 weeks)
-
Work on resource sharing (20-25days)
-
Integration of resource tree pane (20-25 days)
-
Real Time implementation (4-5 weeks )
-
Including security features (yet to decide)
Personal information
Name Manish Yadav
Email manishady@gmail.com
Website http://www.techtickle.com/
Mobile 9023061898
My Objective
My strong will is to work as an open source developer and to compose innovative solutions for people. I wish to contribute in open source codes and unfold myself as a community person. I desire my contributions to reach to the boundaries and to the maximum amount of people. I just live to be an open source coder.
I'm a 3rd year student studying Computer Science and Engineering in National Institute of Technology Jalandhar (Punjab), India.
Area of Interest
-
Keen interest in Linux Kernel and Gnome project
-
FOSS activities and Open Source.
-
Interest in making websites on Wordpress and Joomla. I'm the Administrator of the website http://www.techtickle.com/
-
Application Development on GNU/Linux Platform
I have been involved in celebration of “Firefox Day” sponsered by Firefox and arranging the guest lectures from Indian Fedora Ambassador (Mr. Kevin Verma) and Redhat Corporate Affairs Director (Mr. Venktesh Hariharan) in my college last year.
Thanks.