GSoC 2008 ScripterNG

Google Summer of Code 2008

Project: ScripterNG plug-in for Scribus

Abstract
TODO

Motivation
Scribus shows that serious desktop publishing is possible with free software. Scribus has many powerful features which are often mentioned in articles, e.g. the high quality PDF export and the color management. But the potential of the scripting interface is mostly underestimated. The scripter plug-in is included in the Scribus main distribution together with some example scripts. However it does not get the attention it deserves in my point of view.

Other open-source projects like Firefox, Blender, Inkscape, OpenOffice or Gimp have shown that bindings to scripting languages result in many new features and contribute largely to the success of the application. People without knowledge of C/C++ but some Python-, JavaScript- or Perl-skills can easily write import-/export-filters, create wizards, write plug-ins or realize something nobody else has thought about before. The distributed scripts can be used without recompiling and even without knowledge of the scripting language.

Scripts can help to automate tasks and can fit the special needs of a user. Also it is possible to test new ideas. Languages like Python are great for prototyping. And sometimes it makes more sense to stay with Python instead of rewriting everything in a compiled language.

Project
The current scripter plug-in has its flaws and is hard to extend. Some experiments with boost-bindings never proceeded.

Therefore I want to create a new scripting plug-in (called ScripterNG) which also supports QtScript besides Python and is easily extendible. I hope that this plug-in will catch-up with scripting solutions in other major software products. Besides the technical aspects I want to make sure that extensions are easily accessible and configurable. Another important topic is integration. An extension should look native in Scribus and can hook directly into the GUI.

To make the plug-in usable it has to provide a wide API which includes most of the functionality of the old plug-in plus some more new features.

Architecture
Usually rewriting everything from scratch is a bad idea. But the current approach does not work any more with the growing requirements and code base. The current way of writing bindings by hand is very hard and error-prone. Automated systems exist (like swig and boost) and I have evaluated most of them.

Some are really nice. But I ended up writing my own small system to dynamically access any Qt object. Like Smoke, Kross (http://kross.dipe.org) or PythonQt (http://pythonqt.sf.net, do no confuse with PyQt!) it uses the Qt meta-object-system. It requires sip (the PyQt bindings generator) at build-time and PyQt at runtime. I kept the base small and chose an approach where I can displace things like configuration dialogs or a scripting console into Python extensions. Because QtScript also uses the Qt meta-object-system you can get support for this EcmaScript-compatible scripting language for free.

The api has to be carefully designed to keep it stable across releases. Several people already thought about it and I will try to consider as much ideas as possible:
 * http://wiki.scribus.net/index.php/Public_C%2B%2B_API
 * http://wiki.scribus.net/index.php/ScripterNG#API_brainstorming
 * http://public.joachim-neu.de/mixed/scribus-api-classes.png

For a transition period old scripts for the old scripter plug-in can still be used side-by-side with the new ScripterNG. But I also plan to write a compatibility module.

Roadmap
The roadmap tries to follow the proposed time line published at http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline

Starting with middle of April (selected students are announced and the project can officially start):

First week
 * Setting up the infrastructure (weblog, code repository, ..)
 * Adding details to project plan about exact API, extension meta-data file-format, ..
 * Publishing document on my research of binding technologies
 * Getting additional feedback from developers and from the community about the project

Week 2-3
 * Cleaning up current prototype of ScripterNG and epyqt (build system, i18n, ..)
 * Completing current prototype of the extension manager and extension repository

Until 7th of July
 * Working on extending the ScripterNG API
 * Porting most needed features from old scripter

Until 14th of July
 * Writing mid-term evaluation
 * Until 1st of August
 * Further improving the API
 * Writing examples
 * Porting old extensions like the OpenClipArt browser

Until 11th of August
 * Fixing bugs
 * Reviewing and improving usability
 * Writing documentation for users and developers

Until 18th of august ('pencils down')
 * Writing final evaluation

Benefits
1. Scribus gets a new easy extendible and maintainable scripting plug-in and API.

2. Other developers without knowledge about scripting can make their parts available for scripting.

3. Scribus gets a new additional popular scripting language: JavaScript (QtScript).

4. Scribus users get a powerful and freely extendible desktop publishing platform. This will lead to more features, many new ideas and hopefully even more satisfied users.

Name / University / current enrolment information.
Henning Schröder, studying computer science (diploma and bachelor) at the University of Oldenburg.

Biographical sketch.
1978 I was born in a town called Leer in northern Germany near the North Sea and the Dutch border. In 1993 I learned programming on a 80386. Typically I started with Basic and moved on to Pascal, Assembler and C. Because compiling took such a long time on my Linux 1.2 system I also investigated dynamic languages like Tcl/TK, Perl and Python. From 1992 to 1998 I visited grammar school where I founded a school news paper and used Ventura Publisher and Aldus PageMager on a 80486 at a time where everyone else was doing layout with paper snippets, scissors and glue. Since 1999 I am studying computer science in Oldenburg which is fortunately not that far away. To finance my studies I had some jobs mostly as a software developer but also as a programming tutor and as a designer for websites and leaflets. There I improved my skills in Java, Python, Photoshop and InDesign. Additionally I learnt a lot about project management, feature based programming, versioning (cvs, svn, bzr), bug tracking (mantis, roundup, trac) and team-work. In my free time I like drinking tee, reading, watching good movies, bicycling and doing some non-profit activity: Until last year I was second chairman of one of Germany's largest computer clubs. There I am still the person of charge for some servers and the Linux users group. We are involved in several FOSS-activities, e.g. I organized some events like installfests and we participate regularly in regional Linux information fairs. For things like leaflets, posters and club magazines I was using QuarkXPress for a few years. I was lucky when I could switch to Scribus which is free and runs on my preferred platform. At university I got involved in some political activities around tuition fees. Therefore I used Scribus successfully for publications like newsletters.

Did you ever code in C, C++ or Python? Please provide examples of code.
For work I have written a lot of code but obviously I cannot provide anything from it. Below there are a few links to recent projects
 * ScripterNG (C++ and Python): http://henning.cco-ev.de/scribus/scripterng.tar.bz2
 * Embedded PyQt (C++) support module: http://henning.cco-ev.de/scribus/epyqt.tar.bz2
 * Scribus extensions (Python): http://henning.cco-ev.de/scribus/

Some of my other projects are hosted on Google Code: http://code.google.com/u/henning.schroeder/

Do you use Scribus? Please provide examples if you do.
Yes: http://henning.cco-ev.de/scribus/gsoc/examples/

Do you make other use of Scribus than for laying out articles? Please describe and show examples.
Besides newsletters, leaflets, posters, magazines, business cards and mouse-pads I also extended Scribus in various ways using the Python plug-in. See below for details.

Were you involved in Scribus development in the past? What were your contributions?
I followed Scribus development closely since version 0.2 (which was still Python-based). Although I am currently no Scribus developer I know the code base quite well.

Some scripts I posted on the mailing list ended up in the samples directory (wordcount.py, quote.py, htmlimport.py).

As a passionate PyQt user I experimented with creating GUI elements inside Scribus. This resulted in a OpenClipArt browser. Unfortunately I needed a function to call the SVG-import plug-in which was not possible at that time. So I dug deep into the source and submitted a patch which added this feature: http://bugs.scribus.net/view.php?id=2160 After having so much fun creating this extension I wrote some more extensions and made them available on my own repository.

I started a new scripting plug-in based on the experiences I got and the flaws I found in the scripter plug-in. While writing the prototype I fixed the myplugin example plug-in which had bugs and did not compile: http://bugs.scribus.net/view.php?id=6474

Were you involved in other OpenSource development projects in the past? If yes, please tell us project, when and in what role were you involved.
I created the first web-mail application (BoboMail) in Python a few years ago which was used by some individuals and institutions like universities and small companies. It was also included in the Amphora groupware server for a short time. Now the project is obsolete because a lot of other solutions evolved and I concentrated on new ideas. But I learnt a lot about the free software development process and working with a community of users and contributors.

Why have you chosen your development idea and what do you expect from your implementation?
The extension manager I wrote for the extension repository was inspired by the Firefox add-ons manager. The popularity of Firefox comes from its numerous available add-ons. I thought that Scribus can benefit using the same concept. My implementation consists of two parts. On the one hand I will establish a technology which makes it easy to expose functionality to Python and QtScript. On the other hand the user will see that he can easily add features on-line without recompiling and without waiting for a new release.

Are you confident that you will be able to dedicate time and effort necessary for the successful completion of your GSoC 2008 project?
Yes I am confident. During the last year I did a lot of research on the topic and even built a prototype. So now I know exactly what I am doing and how much time it takes. I am very interested that this project succeeds and I will do everything necessary.

=== Are you you ready and willing to sustain a good level of communication with your mentor and the Scribus Team overall and be open and forthcoming about the progress of your project including coding and personal problems related to your GSoC project? === Two weeks ago I had the chance to meet Franz at his CeBIT booth (I was helping out at the KDE booth) which was quite nice. Also I have been in contact with other developers via mail and IRC and I often hang out on #scribus. So communicating with the Scribus team is nothing new for me. But I am looking forward to intensify the communication. Additionally I would blog about my project so that anyone can read reports about its progress.