Changes

Jump to navigation Jump to search
m
moved Print Support to Summer of Code/2009/Print Support: Moved to the correct ns to make room for proper documentation
Line 14: Line 14:  
:'''4 What is your IRC nickname? '''
 
:'''4 What is your IRC nickname? '''
   −
:IwikiwI
+
:IwikiwI/iwikiwi ( Sometimes vkd, Vamsi, Vamsi_)
 
   
 
   
 
:'''5 What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you'd prefer.) '''
 
:'''5 What is your primary language? (We have mentors who speak multiple languages and can match you with one of them if you'd prefer.) '''
Line 22: Line 22:  
:'''6 Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.) '''
 
:'''6 Where are you located, and what hours do you tend to work? (We also try to match mentors by general time zone if possible.) '''
   −
:I am located in india (5:30+ GMT), I usually work in the night, from my 7 pm to 2:30 am
+
:I am located in India (5:30+ GMT), I usually work in the night, from my 7 pm to 2:30 am
 
:So any mentor should be ideal.
 
:So any mentor should be ideal.
   −
:'''7 Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in :open-:source. If not, why do you want to work on an open-source project this summer? '''
+
:'''7 Have you participated in an open-source project before? If so, please send us URLs to your profile pages for those projects, or some other demonstration of the work that you have done in open-source. If not, why do you want to work on an open-source project this summer? '''
   −
:I have not been part of an open source development team. Nor do I have a very profound understanding of the OS development paradigm yet. But seeing how I could never afford software which was sold at :high price even though that software was the bare essential software for me to get my computer working. And as my experiences are true for almost two thirds of other students, I would like to see them :not to have to put up with the buy-what-you-want software, in-fact I would love for them to grow up using free software that I make and hope that they will produce free software themselves, a few of them :at least.
+
:I have not been part of an open source development team nor do I have a very profound understanding of the OS development paradigm - so far, but seeing how I could never afford software which was sold at high price even though that software was the bare essential software for me to get my computer working. And as my experiences are true for almost two thirds of other students, I would like to see them not to have to put up with the buy-what-you-want software, in-fact I would love for them to grow up using free software that I make and hope that they will produce free software themselves, a few of them at least.
    
:Although not really a group developmental project, I have coded two networks projects and a prototype game for windows. (the source is in downloads)
 
:Although not really a group developmental project, I have coded two networks projects and a prototype game for windows. (the source is in downloads)
Line 52: Line 52:     
:As the self explanatory name suggests, the project is to add print support to the laptops.For the time being, the print requests will be sent to the school server through a moodle print page  
 
:As the self explanatory name suggests, the project is to add print support to the laptops.For the time being, the print requests will be sent to the school server through a moodle print page  
:then the teacher can view the files through his login in the same application, and approve them for printing to a print server. Later on as we are going with a CUPS architecture, we can include USB   
+
:then the teacher can view the files through his login in the same application, and approve them for printing to a print server. We will also be including a fallback strategy that is usb printing.
:printing on demand!
      
:''Why should my idea be considered:''
 
:''Why should my idea be considered:''
Line 59: Line 58:  
:My refined version of the print support idea is actually a better way of ensuring that paper abuse will be curbed, as the kids wouldn't really take into account :all the predicaments associated with :printing. And needless to say printing does take place with the teacher's intervention. And everything takes place in a moodle environment, plus there is the added benefit of printing in the No XO case.
 
:My refined version of the print support idea is actually a better way of ensuring that paper abuse will be curbed, as the kids wouldn't really take into account :all the predicaments associated with :printing. And needless to say printing does take place with the teacher's intervention. And everything takes place in a moodle environment, plus there is the added benefit of printing in the No XO case.
   −
:A step by step abstraction:
+
:'''A step by step abstraction:'''
 
   
 
   
 
:(The first step would essentially mean a Save as PDF hack and put the jobs for processing on moodle )   
 
:(The first step would essentially mean a Save as PDF hack and put the jobs for processing on moodle )   
      −
:'''1)''' (this is no way related to abiword's print to pdf ability)
+
:'''1)'''
:The right click menu of an item in the journal will have a new option, i.e. create PDF. When clicked, the item will be sent to a local virtual CUPS-PDF printer, and the pdf will be marked with metadata attached stating its details.The PDF can be marked for printing or unmarked for printing. We will be using moodle as our interface for sending print requests on the network. The interface will have a user page and a teacher page. The page will have a report of his print jobs and a status report of his live jobs. And the ability to put 3 live jobs on queue. The no of upload slots will be dynamically updated according to his live jobs pending for teacher's approval. And the number of free slots will automatically be filled up by the browser with the to print PDFs. And then these objects can be sent to the moodle web folder.
+
:The right click menu of an item in the journal will have a new option, i.e. "print!". When clicked, the item will be opened with Read and if its not a recognized format, convert it with cups-pdf and open with Read. and the pdf will have metadata attached stating its details (this PDF plus metadata wont be visible to the user).The user can have a preview of his print, save it as a pdf in the journal, and send a PDFed version to moodle.
 +
:advantage cups-pdf (text will be mapped as text only)
 +
:Later on we can extend this to have a print button in every activity, so that the default activity which opens the object can print from itself.
   −
:'''3)''' Through moodle the teacher will have a page displaying the contents of the print datastore along with user names attached, and he/she will be able to download them to his remote system, and  check them and approve them for printing if he/she wishes. After his/her approval or disapproval (that is a delete along with an option why) the information is held in the datastore, and the user can view it in the form of history transactions pertaining to his id, and teacher can view a finite list of previous transactions pertaining to all.   :
+
:The usecase would be, distinction of saving a pdf and sending it to printing. And the conversion is mandatory so as to prevent a scenario where the sugar file type might not be recognized by the teacher's machine.
   −
:'''4)''' The no School Server case. The simple solution to this case is to print directly through usb. And this won't be counter productive to the idea of teacher moderated printing, as the printer won't be available for just anyone; this is only a quick alternative to the 'save to portable drive and do the printing' method.     
+
:We will be using moodle as our interface for sending print requests on the network. The interface will have a user page and a teacher page. The page will have a report of his print jobs and a status report of his live jobs. And the ability to put 3 live jobs on queue. The number of upload slots will be dynamically updated according to his live jobs pending for teacher's approval(which is a maximum of 3). And the number of free slots will automatically be filled up by the browser with the to-print PDFs. And then these objects will be sent to the moodle web folder.
 +
 
 +
:(The 2nd would be implementing queuing and teacher review, reject approve facilities       
 +
:'''2)''' Through moodle the teacher will have a page displaying the contents of the moodle print datastore along with user names attached, and he/she will be able to download them to his remote system, and  check them and approve them for printing if he/she wishes. After his/her approval or disapproval (that is a delete along with an option why) the information is held in the datastore, and the user can view it in the form of history transactions pertaining to his id, and teacher can view a finite list of previous transactions pertaining to all. 
 +
 
 +
:( The 3rd usb printing on demand!)
 +
 
 +
:'''3)''' The no School Server case. The simple solution to this case is to print directly through usb. And this won't be counter productive to the idea of teacher moderated printing, as the printer won't be available for just anyone; this is only a quick alternative to the 'save to portable drive and do the printing' method.     
    
:'''In-Depth analysis:'''
 
:'''In-Depth analysis:'''
      −
:for step-1, We use CUPS. The API has a nice array of functions, one of which is to get the printer's name (the cups-pdf virtual printer).( Since we know the name is CUPS-PDF, we can check it) and print our file as a PDF in the journal. For the sake of our python convenience we will be using a python wrapper to cups, pycups. The print objects will have metadata attached to them through the sugar datastore API.  
+
:For step-1,We hack into Read and create a new print toolbar, one with direct printing, one with moodle printing, and one with export as pdf. For all things other than direct printing a dummy pdf is created.
 +
:For Read to send jobs to moodle and get the queue details we use xmlrpclib , and send only as much as the number of free slots . (Or a simpler way will be to bypass the dialog automatically). The execution part of this will take place dynamically as soon as the user requests the print page. And also, once the pdf is read, it is destroyed.
 +
:We will also provide a way so the user can send only pdf files through the moodle user page, which will be based on the upload many number of files module.
   −
:For the second part of it when ever the print page url is found, we make browse communicate with the moodle print queue through xmlrpc get the details, and upload to that many slots (as the number of slots will also be dependent on the print queue) This would essentially mean a rainbow hack so that browse can communicate with journal without a dialog. The execution part of this will take place as the
+
:For step-2, We will be using the interface already created, but for the teacher we will issue global access privileges enabling him/her to access all the sent requests for his group.The approve button will initiate shell commands to send the particular file to a network printer through CUPS installed on the server.This can again be achieved through hacking into moodle and understanding how notifications are sent to the students from teacher. The notifications would be relating to whether the teacher has approved or disapproved the print.  
    +
:The moodle part can be achieved through hacking the already existing plugin [http://docs.moodle.org/en/Upload_a_single_file_assignment] and looking into the moodle API and plugin documentation. From my research so far, moodle has most of all the low level details already existing within the moodle libraries. Even $_GET $_POST methods are abstracted into simpler functions.
   −
:for step-2, We will be using the interface already created, but for the teacher we will issue global access privileges enabling him/her to access all the sent requests, and the approve button will initiate shell commands to send the particular file to a network printer through CUPS installed on the server.This can again be achieved through hacking into moodle and understanding how notifications are sent to the students from teacher. The notifications would be relating to whether the teacher has approved or disapproved the print.  case a, we would just make
+
:For step-3, no new code is required; a few more dependencies are required, which wont exceed 16mb. We will be including print directly (usb) as an option under the item's right click menu too. This will have the same code as print to pdf for the most part, but will have added code to select a new default printer.
 
  −
:for step-3, no new code is required, just a slight modification of the cp activity to select the type of printing. A few more dependencies, Which wont exceed 17mb.  
      
:''Is there a disadvantage in relying upon moodle for network printing?''
 
:''Is there a disadvantage in relying upon moodle for network printing?''
Line 91: Line 100:  
:* Will be able to print to any USB printer
 
:* Will be able to print to any USB printer
 
:* Will be able to output a print as a PDF
 
:* Will be able to output a print as a PDF
:* Includes a local queue and a teacher queue
+
:* Includes a user queue and a teacher queue
 
:* automatically parses print requests to the print page
 
:* automatically parses print requests to the print page
 
:* Uses moodle as interface for teacher moderated printing
 
:* Uses moodle as interface for teacher moderated printing
Line 102: Line 111:  
:'''3 Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, :credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.'''
 
:'''3 Convince us, in 5-15 sentences, that you will be able to successfully complete your project in the timeline you have described. This is usually where people describe their past experiences, :credentials, prior projects, schoolwork, and that sort of thing, but be creative. Link to prior work or other resources as relevant.'''
   −
:I have a fairly good understanding of communication models, and my skill with networks is quite satisfactory. And as most of the implementation is already available in form of python bindings, all that :remains is placing them together with a sound design, which I have already discussed with several community members. And I can provide as much time as is required for the work to get done.
+
:I have a fairly good understanding of communication models, and my skill with networks is quite satisfactory. And as most of the implementation is already available in form of python bindings, all that :remains is placing them together with a sound design, which I have already discussed with several community members. And I can provide as much time as is required for the work to get done. I am introduced to server side programming through django on which I had worked to develop a weblog ( I dont have the code for it, and the weblog isn't operational), all I can say is I had *fun* with the template language they had, which was mostly regexp parsing.
 +
:And I have learnt php these last few days enough to hack on moodle.
    
:''My credentials include: ''
 
:''My credentials include: ''
Line 139: Line 149:  
:* Look into moodle APIs
 
:* Look into moodle APIs
 
:* Focus on the bare essential dependencies required to get the job done
 
:* Focus on the bare essential dependencies required to get the job done
 +
 +
:My job will be not only writing working code, but regularly getting it deployed to check if the user's find it good and working to their needs or not.
 +
:So when I say community feedback, I will be using it interchangeably between actual deployment and the irc community depending on context
 +
    
:'''Milestone 1'''
 
:'''Milestone 1'''
    
:'''Week 1 : '''
 
:'''Week 1 : '''
:Write code which prints to any selected printer. (CUPS-pdf will be the primary case till gsoc), and add the print button to the item right click menu of journal.
+
:: Start work on Read and add printing buttons to it (see that they do their jobs), and write minimal journal code.
:Start working on code browse hack to parse file paths to a specific pages forum input box.
+
           
 
   
:'''Week 2 : '''
 
:'''Week 2 : '''
:Finish with browse.  
+
:: hack on browse so it can save html files, and see to it that read can convert and save all files to pdf and send to moodle.
   −
Mile stone 1 result : Sugar side of our code will be done. get community feedback
+
:''Milestone 1 result : Sugar side of our code will be done. ''
   −
'''Milestone 2'''
+
:'''Milestone 2'''
    
:'''Week 3 : '''
 
:'''Week 3 : '''
:Start working on moodle's userpage.
+
:Start working on moodle's userpage.(Hack the 'upload several assignments' code and make a new plugin out of it.)
:Hack the 'upload an assignment' code and make a new plugin out of it.
+
:Use xml-rpc to link moodle's datastore with Read code
 
  −
 
  −
:'''Milestone 2'''
      
:'''Week 4 '''
 
:'''Week 4 '''
 
:start working on moodles teacher page, and see that he/she can review only his group's assignments
 
:start working on moodles teacher page, and see that he/she can review only his group's assignments
 +
:And start working on a php script for shell commands to directly print to the network printer.Get mentor and community feedback. 
    +
:Milestone 2 result :'' The teacher review feature and student upload features are working
 +
 +
:'''Milestone 3''':
 
:'''Week 5'''
 
:'''Week 5'''
:And start working on a php script for shell commands to directly print to the
+
:Start working on creating a nice html layout for the page, get feedback and make corrections accordingly.
network printer.
+
:Test code on a server with a printer, and test if everything works, get mentor and community feedback, and if any integration bugs remain, drill them out.
 
  −
:Mile stone 2 result :'' The teacher review feature and student upload features are working
  −
Get mentor and community feedback.  
     −
'''Milestone 3'''
+
:Milestone 3 result: '' It would be to finish the moodle plugin, and see to it that printing can be done through it by the teacher and that we have thousands of happy XO user's faces''
    +
:'''Milestone 4'''
 
:'''Week 6'''
 
:'''Week 6'''
:Start working on creating a nice html layout for the page, get feedback and make corrections accordingly.
+
:Make an extended print dialog activity (use gtkprint dialog), which has options such as select printer and pages for local and pdf printing and moodle added as printer option.
    
:'''week 7'''
 
:'''week 7'''
:Test code on a server with a printer, and test if everything works, get mentor
+
:Replicate the features in each activity, so that when opened with default activity in journal, they can print.
and community feedback, and if any integration bugs remain, drill them out.
     −
:Milestone 3 result: '' It would be to finish the moodle plugin, and see to it that
+
:Milestone 4 result : '' Well we have everything set up folks! APART from wifi printing! get feedback
printing can be done through it by the teacher''
     −
Beyond GSoC:
+
:'''Then''':
 +
:Fix last minute bugs, check with a sample deployment.
   −
Make the printing feature an integral part of the API so that printing can be done directly without the journal UI's intervention
+
:'''Beyond GSoC:'''
Make a CP activity to select the default printer.
+
:''primary focus'':
 +
:*Add a direct network printing mechanism ( avahi if not the CUPS provided Bonjour for DNS-SD/mDNS) and print directly to the print server through wi-fi. This will be .This will be disabled when ever an XS is connected.
 +
:I have written a sample program http://pastebin.be/17562
 +
:What this does is, it gets the list of printers from the print server, and prints to the default configured one.
 +
:It can be extended to select the print server automatically, traverse through the printers, select appropriate one. And also implement a local queue, cancel option.
    
====You and the community====
 
====You and the community====
Line 220: Line 235:  
:'''3 What will you do if you get stuck on your project and your mentor isn't around?'''
 
:'''3 What will you do if you get stuck on your project and your mentor isn't around?'''
   −
:I will of course go through the net. developer mailing lists, and forums.
+
:I will of course go through the net. developer mailing lists, and forums. And the irc channels of each component I am handling.
 
:But more over, the community has been very helpful without having a mentor as of yet. I will look forward to the community then!
 
:But more over, the community has been very helpful without having a mentor as of yet. I will look forward to the community then!
   Line 244: Line 259:  
:what someone else can do, So can I.  
 
:what someone else can do, So can I.  
    +
====Use Cases====
 +
 +
 +
:'''1 GPA, the SoaS pilot school in Boston MA
 +
 +
GPA has the following network printers
 +
 +
Their network printers are :
 +
*  Xerox Phaser 3400
 +
*  Xerox Phaser 3500
 +
*  Xerox Phaser 6360DN
 +
*  HP Laserjet 2100
 +
*  Lexmark Optra T520
 +
*  Lexmark Optra M410
 +
*  Xerox Document Centre 470
 +
 +
Currently they do not let students print, but since students only use a computer for an hour a week this is not a hardship. As they have students compute more they would like them to be able to print.
 +
 +
I asked them which of the following was their current biggest problem:
 +
 +
#1  The printers are too busy, you have to wait for your documents to print out.
 +
#2  There is not enough money to buy toner and paper.
 +
#3 The printers are too far away, the teachers have to waste time walking to get their printouts.
 +
#4  The printing system is too confusing or broken and people can't get their stuff to print on the printer they want to use.
 +
 +
#3 is definitely this schools biggest issue.
 +
 +
We will be collecting used computers for the SoaS project.  We could probably easily also get donations of small printers for each classroom and it sounds like they would want that.
 +
 +
====Possible User Interface Designs====
 +
 +
{|
 +
|[[Image:print_device_mockup_for_vamsi_1.png|thumb|350px|Example print device palette showing one active print job. Job can be cancelled via (x) icon]]
 +
|[[Image:print_device_mockup_for_Vamsi_2.png|thumb|350px| Example print device palette showing several print job items with different states in the print queue.]]
 +
|}
    
[[Category:2009_GSoC_applications]]
 
[[Category:2009_GSoC_applications]]
31

edits

Navigation menu