Line 45: |
Line 45: |
| ====About your project==== | | ====About your project==== |
| | | |
− | 1) What is the name of your project? | + | :'''1) What is the name of your project? ''' |
| | | |
− | Print Support for the XO laptops | + | :Print Support for the XO laptops |
| | | |
− | 2)Describe your project in 10-20 sentences. | + | :'''2) Describe your project in 10-20 sentences'''. |
| | | |
− | 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 which would be connected to a printer/or to a machine with a printer. Later on as we are going with a CUPS architecture, we can include USB printing on demand! | + | :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 which would be connected to a printer/or :to a machine with a printer. Later on as we are going with a CUPS architecture, we can include USB printing on demand! |
| | | |
− | A step by step absraction: | + | :A step by step absraction: |
| | | |
− | 1) During boot of the xos, the shell will compile itself in compliance to supported file types, and have the print button enabled only when they are. | + | :'''1)''' During boot of the xos, the shell will compile itself in compliance to supported file types, and have the print button enabled only when they are. |
| | | |
| | | |
− | 2) The print button on click saves the file to journal.This will have the same implementation as of a save file. | + | :'''2)''' The print button on click saves the file to journal.This will have the same implementation as of a save file. |
| | | |
− | 3) There will be a file-transfer-wizard (an activity) which allows the user to send server recognized formats to the school server. This will be provided as a notification in the activity the user is using when he clicks the print button and asks whether the user would like to go to the file-transfer-wizard. | + | :'''3)''' There will be a file-transfer-wizard (an activity) which allows the user to send server recognized formats to the school server. This will be provided as a notification in the activity the user is using when he clicks the print button and asks whether the user would like to go to the file-transfer-wizard. |
| | | |
− | 4) The file-transfer-wizard will be a simple interface. It will send the current /stacked up/ files to the school server by the users intervention, this can even be configured to send automatically as well. | + | :'''4)''' The file-transfer-wizard will be a simple interface. It will send the current /stacked up/ files to the school server by the users intervention, this can even be configured to send automatically as well. |
| | | |
− | 5) The school server converts the requests into PDF and will store them in a web folder. And through moodle the teacher will have a page displaying the contents of the folder(a type of queue), 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 approval, a background process on the school server prints to a network printer. Otherwise the job will be left to remain, or be discarded. | + | :'''5)''' The school server converts the requests into PDF and will store them in a web folder. And through moodle the teacher will have a page displaying the contents of the folder(a type of queue), 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 approval, a background process on the school server prints to a network printer. Otherwise the job will be left to remain, or be discarded. |
| | | |
| | | |
− | In-Depth analysis. | + | :'''In-Depth analysis:''' |
| | | |
− | The easiest way to implement step-1 would be to check which mime types exist on the server side in the etc/cups/mime.types file with a simple python method (getAllowableMIMETypes) and make it available on the server's web folder, and access it with a c program during the xo's boot and append the list to our client side mime.types. So anything non-existent here will have its corresponding activities print button disabled | + | :The easiest way to implement step-1 would be to check which mime types exist on the server side in the etc/cups/mime.types file with a simple python method (getAllowableMIMETypes) and make it available :on the server's web folder, and access it with a c program during the xo's boot and append the list to our client side mime.types. So anything non-existent here will have its corresponding activities :print button disabled |
| | | |
− | As an Alternative, CUPS print function returns a python -1/ C 0 when a non-supported MIME type is used, so we can take advantage of that and display a non supported format error. | + | :As an Alternative, CUPS print function returns a python -1/ C 0 when a non-supported MIME type is used, so we can take advantage of that and display a non supported format error. |
| | | |
− | The xo already comes with a nice save feature which saves files to the journal and categorizes them under the activity name. I will use a similar implementation for the print button in activities (which is activated from step-1) and have it save files under a 'To Print' category/tag in the journal. | + | :The xo already comes with a nice save feature which saves files to the journal and categorizes them under the activity name. I will use a similar implementation for the print button in activities (which :is activated from step-1) and have it save files under a 'To Print' category/tag in the journal. |
| | | |
− | for step-3, we use CUPS. The API has a nice array of functions, one of which is to get the printers name (we will be having the network printer, and especially the cups-pdf printer installed on the server). Since we know the name is CUPS-PDF, we can check it, and print our file as a PDF on the server. | + | :for step-3, we use CUPS. The API has a nice array of functions, one of which is to get the printers name (we will be having the network printer, and especially the cups-pdf printer installed on the :server). Since we know the name is CUPS-PDF, we can check it, and print our file as a PDF on the server. |
− | For the sake of our python convenience we will be using a python wrapper to cups, pycups. | + | :For the sake of our python convenience we will be using a python wrapper to cups, pycups. |
| | | |
− | for step-4, we will be using our Sugar api to create a nice simple interface, and for communicating with the journal through the D-BUS IPC, this will just be a click of a button. And when a print is finally done(see step -5 expansion), an acknowledgement notification pops back. The server background program sends a string packet back.This will be done with minimal client/server code. (the sending back of a notification) | + | :for step-4, we will be using our Sugar api to create a nice simple interface, and for communicating with the journal through the D-BUS IPC, this will just be a click of a button. And when a print is :finally done(see step -5 expansion), an acknowledgement notification pops back. The server background program sends a string packet back.This will be done with minimal client/server code. (the sending :back of a notification) |
| | | |
− | for step-5, We will be saving the printed pdf files into a web folder, and we will add a page which lists the contents dynamically to moodle.And provide access rights only to the teacher's log in. The teacher can download the file to his/her terminal from the page, view it and approve it for printing. Here comes to light a background program written in C which listens to requests every sleep(30) secs, and this will every time it wakes up access the moodle's datastore( mysql table) and checks if the approve has been hit for a specific id(id is generated with respect to job arrival, and every time a job in between is printed or removed, the ids sort themselves back). Consequently a remove buttom will also be provided, which does just what it says. | + | :for step-5, We will be saving the printed pdf files into a web folder, and we will add a page which lists the contents dynamically to moodle.And provide access rights only to the teacher's log in. The :teacher can download the file to his/her terminal from the page, view it and approve it for printing. Here comes to light a background program written in C which listens to requests every sleep(30) secs, :and this will every time it wakes up access the moodle's datastore( mysql table) and checks if the approve has been hit for a specific id(id is generated with respect to job arrival, and every time a job :in between is printed or removed, the ids sort themselves back). Consequently a remove buttom will also be provided, which does just what it says. |
| | | |
| | | |
| | | |
− | 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. |
| | | |
− | My credentials include: | + | :''My credentials include: '' |
| | | |
− | 1)The ability to finish projects on his own, with self motivation, as the 3 projects I have attached have been made as a self interest. | + | :'''1)''' The ability to finish projects on his own, with self motivation, as the 3 projects I have attached have been made as a self interest. |
| | | |
− | 2)An internship at Kenexa which had been to develop an assembly which logged database transactions, written in c#, so I have an exposure to infrastructure. | + | :'''2)''' An internship at Kenexa which had been to develop an assembly which logged database transactions, written in c#, so I have an exposure to infrastructure. |
| | | |
− | 3)winner of a coding event, Mind-Hunters, at a national level technical festival. | + | :'''3)''' winner of a coding event, Mind-Hunters, at a national level technical festival. |
| | | |
− | I have already added a fix to Write so that it can export to pdf files, and I have provided a temporary fix for a screen bug, for which I will provide a complete fix. | + | :I have already added a fix to Write so that it can export to pdf files, and I have provided a temporary fix for a screen bug, for which I will provide a complete fix. |
| | | |
− | And I have checked the feasibility of my approach by going through the source files/apis, and writing sample programs like | + | :And I have checked the feasibility of my approach by going through the source files/apis, and writing sample programs like |
| | | |
| | | |
Line 110: |
Line 110: |
| printf("error printing file, unsupported format"); | | printf("error printing file, unsupported format"); |
| | | |
− | for printing | + | :for printing |
| | | |
| ====You and the community==== | | ====You and the community==== |