GSoC 2008 ScripterNG
Google Summer of Code 2008
Project: ScripterNG plug-in for Scribus
Scribus shows that serious desktop publishing is possible with Free Software. Scribus has many powerful features which are often mentioned in articles, eg. high quality PDF export and 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, from my point of view it does not get the attention it deserves.
Scripts can help to automate tasks and can adjust a program to the special needs of a user. It is also possible to test new ideas, as 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.
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 issue 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 many new features.
In general, rewriting everything from scratch is a bad idea. But the current approach does not work anymore with the growing requirements and the 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 interesting, 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. Since QtScript also uses the Qt meta-object-system, one can get support for this EcmaScript-compatible scripting language without additional work.
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 of the ideas as possible:
For a transition period old scripts for the old Scripter plug-in can still be used side by side with the new ScripterNG. I also plan to write a compatibility module.
The roadmap tries to follow the proposed time line published at http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline
Work on the project will start in the middle of April (selected students are announced and the project can officially start):
- 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
- 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
1. Scribus gets a new easy extendible and maintainable scripting plug-in and API.
2. Other developers without knowledge about scripting can make their enhancements available for scripting.
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.
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.
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.
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.