Usability improvements and GTK+ GUI for Aptitude Obey Arthur Liu (Freenode : ArthurLiu) * Abstract * I will create a GTK+ GUI for Aptitude that will work alongside improved current cwidget-ncurses and command-line interfaces. This will offer an alternative to Synaptic with an interface design geared toward usability and advanced functionality. * 1. Rationale * Debian currently supports multiple non-command-line package managers, the most used being Synaptic and Aptitude. Synaptic uses a GTK+ interface but offers no command-line mode. Aptitude offers a command-line mode but no X interface, although it offers a ncurses interface. Comparing the interfaces of Synaptic and Aptitude reveal many design differences. Although Synaptic may be more accessible to beginners, Aptitude offers many interface behaviors and functions that are useful to the regular to advanced users : fully hyperlinked tabbed navigation between packages and versions of packages, mostly modeless interface, interactive dependency conflict resolver... * 2. Project * My project would involve three parts. Each part leads to usable and concrete results. I will first present the user-visible parts. The first part of the work will be to improve the ncurses interface with some task-oriented additions and a string of cosmetic but useful changes that will improve accessibility and day to day usage in prevision of the GTK+ implementation. The second part will be the proper porting of Aptitude to a GTK+ interface using Glade for prototyping. The interface will of course have to make use of the advantages and specificities of fully graphical interfaces. The new interface will have to improve the displayed information density while keeping the readability. It will also be important to keep backward compatibility with the look & feel of the ncurses interface by keeping most of the original interface placements and keyboard bindings. The last part will be to improve the GTK+ interface according to user feedback and extend it beyond the scope and capabilities of a ncurses interface. Improvements will be "backported" to the ncurses interface when possible. Some examples are : * A simple repository manager * A graphical dpkg and debconf phase * Add support for reportbug(-ng), dww, popcon... The execution of this project will have to constantly follow principles of user experience design : exhaustive research of usage patterns, user-centered design, consistent mental model design... * 3. Technical aspects * Only presenting the desired features is of course not enough and for the assured success of the project, the technical challenges behind the task will be thoroughly analyzed. Aptitude is written in C++ with a signals and slot object-oriented design using the sigc++ library. This design is used to implement the Text User Interface with the C++ cwidget wrapper library for ncurses. The advantage of these design choices, and a reason behind my choice of Aptitude, is that this same design will make an implementation using gtkmm and GTK+ easier as these two components take the respective roles of cwidget and ncurses, with the same object oriented programming relationships. Documentation for unusual or complicated parts (smart pointers, threads design, vscreen...) is available for contributors. I have furthermore gathered much insight into the objects structure of Aptitude by using Doxygen against the well documented codebase. Aptitude uses a two parts separation with a common part for the backend work (package installation, dependency resolution...) and two interface part for non-interactive and interactive use. The separation between these three parts is quite clean : files and classes are well separated. We will be able to only touch the interactive interface part. This part is the only part that uses the cwidget and ncurses libraries. The logic behind the ncurses interface and the GTK+ interface we plan to do will be similar in form (from on OOP point of view) and function, so we will be able to reuse some of the existing code and rewrite the necessary parts to gtkmm and GTK+ in a separate source code root fork. We will create separate binary packages (aptitude and aptitude-gtk) and probably use the update-alternatives or dpkg-divert mechanisms. As Aptitude will be used in terminal-only situations on light machines, we don't want the terminal code to be bogged down by unused GTK+ code and dependencies. The difference between the ncurses and GTK+ interfaces is much smaller than with the command-line interface, so they will share a lot of code, at least in the close future. It is possible that as the GTK+ interface will diverge that a separation in three levels (backend, middle-end, front-end) or, if not possible, an interface fork (command-line, ncurses, GTK+) will be necessary. The end result will probably be a mixtures of both solutions. * 4. Roadmap and deliverables * * I will collect information about first time contact with Aptitude and day to * day usage patterns to steer the design of the new interface. I will get * further familiar with the internals of Aptitude as needed for the success of * this project. I will execute the aformentionned tasks. I will ensure that * regular and early test builds are made to get feedback from the community. 1. The ncurses interface improvement task should take 3 weeks. Although I will be familiar with the code structure of Aptitude by the time the project will start, coordination with Daniel Burrows will ensure that the modifications are properly integrated. This part of the project will also be used to prepare the codebase for the clean of the GTK+ interface. 2. The GTK+ interface task should take 5 weeks. By this time, the user-visible part should be usable. I will constantly look for feedback from users and adapt iterations of the interface to real usage patterns. 3. The interface improvement and middle-end/backend reorganization task should take 4 weeks. To stabilize the interface and integrate further improvements, I will need feedback and choices from the community. The behind-the-scene parts will have to be sorted out for long term coding practicality. * An improved ncurses interface Aptitude A GTK+ based Aptitude An improved * graphical Aptitude for long term use and maintainance. * 5. Profit for Debian * 1. A viable alternative to Synaptic targeting regular to advanced users 2. Improved package management for day to day use with usability and useful features in mind 3. Stimulate ongoing work around common libraries for package managers by widening application range * 6. Biography * I am a 21 year old student in Grenoble, the french Silicon Valley, at ENSIMAG[1] studying computer science and applied mathematics. In the course of my studies and personnal projects, I gained a knowledge of C/C++, the language used in Aptitude. I also have a knowledge of Java, OCaml and Ada that helped me further with Object-Oriented programmation and the use of appropriate algorithmic designs. I have maintained a longtime personnal interest for human-computer interaction through reading articles and papers in the field. I use Debian on a daily basis as a user, developer and volunteer sysadmin for various organizations. I have experience managing every class of Debian installations ranging from embedded to server infrastructures. This brought me a broad insight into various package management issues. I am very impressed by the Free Software movement and most particularly by the achievements of the Debian community. It is my ambition to serve it and commit to it as much as it has helped me solve any tasks I could throw at an operating system. The Google Summer of Code is an opportunity for me to work with members of the community I appreciate and dedicate a summer to a task I know I will love. This project will let me get first-hand insight into the field of human-computer interaction and help me determine my possible specialization for the next year into this field. This will also let me work on a well designed codebase with an objective that has a large potential impact on the day to day Debian usage for me and many others. [1]