**Google Summer of Code 2008** This is the central location for proposing ideas for the Summer of Code [http://code.google.com/soc]. ''A mailing list (tcl-soc2008 at lists.sourceforge.net) has been created for discussions of project ideas and other conversations about Tcl/Tk SoC. Students, Mentors, Potential Students, and Potential Mentors should join. Details are available at https://lists.sourceforge.net/lists/listinfo/tcl-soc2008.'' The 2008 Tcl/Tk SoC Coordinator is Matthew Burke (mmburke monkey-paw gwu full-stop edu). Contact him if you have any questions. ***Students*** If you are a student interested in getting paid to develop open source software using Tcl/Tk, we encourage you to apply. Why should you want to do this? Tcl/Tk is perhaps the most mature of the dynamic languages, dating back to 1988. The evolution of the language over the last 20 years has been marked by passionate preservation of the balance between maintaining simplicity and utility with the adoption of new ideas and new techniques based on accumulated experience. Tcl/Tk is used in a number of prominent software systems including DejaGnu (e.g. used for testing the gcc compiler), Expect and AOLserver. The language is used by many scientific organizations including NASA as well as being used extensively in the commerical and financial sectors. Please see Google's SoC FAQ [http://code.google.com/soc/2008/faqs.html] for more information on the program. There are several good sources of advice for choosing a project to which you should apply [http://code.google.com/p/google-summer-of-code/wiki/AdviceforStudents], expectations of student participants [http://wiki.python.org/moin/SummerOfCode/Expectations], how to write a compelling application [http://drupal.org/node/59037], and proposing your own project [http://summer.cs.pdx.edu/propose]. ****Added incentive for students**** Any project completed before the 2008 Tcl/Tk Conference will be accepted for presentation in the conference Technical Track. ***Mentors*** If you have an idea, please include it in the list below. Put "MENTOR REQUIRED" in the mentor line if you are unable to serve as mentor for the project. Contact Matthew Burke (see above) with any questions. Also see the [Organization Application for Google Summer of Code 2008] ---- ---- **Accepted Projects** ***Graph Manipulations*** * [Matthew Burke] * Difficulty: easy to medium The tcllib package provides functionality for creating and manipulating graph data structures in Tcl/Tk [http://tcllib.sourceforge.net/doc/graph.html]. Although the package is fairly flexible (e.g. allows attaching arbitrary attributes to graphs, arcs, and nodes), there are a number of useful functions that could be added such as finding connected components, determine (shortest) path between two nodes, etc. Integration with Nauty [http://cs.anu.edu.au/~bdm/nauty/] is another desirable feature. * '''Benefit to student''' Gain experience in writing language extensions. Learn some graph theory. * '''Benefit to community''' More powerful graph handling capabilities. ---- ***Update Tk test system*** * [Jeff Hobbs] * Difficulty: easy The Tk test system still uses primarily tcltest v1, and would benefit from an update to tcltest v2 and a full reexamination of out-dated tests (based on specific font characteristics, etc.). * '''Benefit to student''' Gain experience in developing language extensions. Learn about testing frameworks. * '''Benefit to community''' Improved testing capabilities. ---- ***Loading shared libraries from memory and/or Tcl channels*** * [Andreas Kupries] (@ Activestate) * Difficulty: medium-hard Tcl's support for loading shared libraries from virtual filesystems consists of copying the file in question out of the virtual filesytem to a temp file on disk and having the operating system load that. This project seeks to avoid the clutter of temp files to allow Tcl to directly load shared libraries from memory (or a Tcl channel). Implementations are needed for Win32 (DOS/PE) and Unix (ELF) (MacOS X already supports this, c.f. below). Main use case: single-file deployment (starpacks, freewrap). Also: Use by Tcl Plugin and other high-security environments where an app is not allowed to write to an actual disk. ''Links'' http://www.joachim-bauch.de/tutorials/load_dll_memory.html/en (http://cvs.sourceforge.net/viewcvs.py/py2exe/py2exe/hacks/memimp/) http://www.osdev.org/wiki/ELF#Loading_ELF_Binaries http://www.gelato.unsw.edu.au/IA64wiki/LoadingELFFiles http://plan99.net/~mike/blog/2006/08/25/elf-and-program-loading/ http://sourceware.redhat.com/sid/component-docs/sw-load-elf.html http://0xfe.blogspot.com/2006/03/how-os-x-executes-applications.html * '''Benefits to Student''' A real-world scale project leading to understanding of file and memory handling on multiple platforms * '''Benefits to community''' Adds a feature that will enhance the Tcl language and all applications using Tcl/Tk. Note: Tcl on [MacOS X] (since 8.4.10) does already support loading shared libraries from memory - so this proposal would bring other platforms into line. [DAS]: Specifically, the generic support code for this is #ifdef'd by `TCL_LOAD_FROM_MEMORY` and the [MacOS X]-specific implementation is contained in `tcl/unix/tclLoadDyld.c`, see [http://rutherglen.ics.mq.edu.au/fisheye/changelog/Tcl?cs=MAIN:das:20050523201944] for the patch. ---- ***TclDTrace*** http://wiki.tcl.tk/DTrace * [Daniel Steffen] * Difficulty: easy-medium Tcl has a DTrace provider since 8.4.16/8.5b1, but no binding to the DTrace API (à la ''ruby-dtrace'' [http://rubyforge.org/projects/ruby-dtrace]) exists yet. Such a binding would allow the writing of D scripts in Tcl to trace the system and/or Tcl itself, and the processing of trace results directly in Tcl. Among other things, this would present very interesting opportunities for debugging and profiling Tcl scripts from inside Tcl. http://wiki.tcl.tk/DTrace http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_Internals http://blogs.sun.com/tomee/entry/tom_erickson_s_weblog http://ruby-dtrace.rubyforge.org/ruby-dtrace/ * '''Skills required''': Experience with C, basic experience with (and access to) Solaris 10 and/or Mac OS X Leopard, familiarity with Tcl C API or with DTrace a plus. * '''Benefit to Student''' Gain experience with C, Tcl C API and DTrace internals. * '''Benefit to community''' Very interesting tool for debugging and profiling Tcl scripts, as well as for scripting DTrace in general. ---- ***AOLserver-GD Integration*** http://bluedino.net/nsgd/ * [Matthew Burke] * Difficulty: medium AOLserver [http://www.aolserver.com] is an open source web and application server that uses Tcl as its scripting language. Nsgd is a module for AOLserver that allows a web designer to create dynamically-created graphics using the GD library [http://www.boutell.com/gd/]. The first version of the module [http://aolserver.sourceforge.net] is difficult to configure and build, has a byzantine API, cannot share generated graphics among server threads, and does not take advantage of several functions in the current version of GD. The second version [http://www.aolserver.cz/download.php] has an improved build process and fixes several bugs. However, it does not address the other problems found in version 1, particularly the inability to share graphics across server threads. The current version [http://bluedino.net/nsgd/] is a start at rationalizing the API. There are a number of possible tasks for a student interested in improving this software. Depending on the skills and interests of a student, this could be split into projects for more than one student. The tasks include the following: Use autoconf to improve the build process. Use SWIG [http://www.swig.org/] in order to more easily track improvements in GD. Finish rationalizing the API. Allow sharing of graphics among server threads. Build graphing and sparkline packages using this module. * '''Benefit to student''' Experience in C coding: extending the tcl interpreter and working with AOLserver internals. Experience with developer tools including autoconf and swig. Experience developing an API. Experience in multi-threaded development. * '''Benefit to community''' A polished version of Nsgd will provide a powerful and flexible tool for creating web services for dynamic graphics. ---- *** Printing Support *** NO URL * [Clif Flynt] (No google email yet.) * Difficulty Easy-Medium Tk has supported exporting a canvas to a Postscript File for a long time. The Img extension allows a screen image to be converted into an image object. There are several partially complete PDF generators in pure Tcl, and a few tools to export a canvas to PDF. There is no way to send data to a printer on MS Windows. There is no print facility for a text window. There is no export facility for windows other than the canvas. The project will be to unify these unconnected pieces and make a coherent printing system for Tcl/Tk that allows * Grabbing and printing one or more windows * Exporting data from non-canvas windows in a printable format * Support for PDF as well as Postscript * Mapping Tcl/Tk fonts into PDF font descriptions. * Print on Windows, OS/X and *ix * '''Benefit to Community''' This has been in the top 10 list of things that industrial users want for over 15 years. The code will be put into active use as soon as it's available. * ''' Benefit to Student''' The student will gain real-world experience with extracting a coherent set of specifications from a disparate set of requirements. The project can be partitioned into phases that become larger and more difficult as the project progresses. The student will gain familiarity with the PDF language, as well as Tcl and C. The student will have the opportunity to work physically in a rapid-prototyping environment and see their code go into products as soon as it's ready. ---- ***Tcl FUSE (Filesystem in User Space) Language Binding*** See: [fuse], http://fuse.sourceforge.net * [Steve Huntley] * Difficulty: easy-medium Produce a fully-functional Tcl language binding to FUSE virtual filesystem kernel module, making it possible to create filesystems using Tcl that can be seen by all processes. Ensure the binding works on all or most operating systems supported by FUSE. * '''Benefit to student''' Learn about operating system architecture and administration, kernel modules, virtual filesystems, comparative operation of different OS platforms. * '''Benefit to community''' A Tcl FUSE language binding would leverage two of Tcl's strongest features: its cross-platform capability, and extensibility as demonstrated by the [TclVFS] package. This binding would make it possible to write a single virtual filesystem in Tcl that ran on multiple platforms, thus allowing quick development of many useful solutions for archiving, backup, content management and communication. ---- **A Business Rule Management System based on the high-level object oriented scripting language [XOTcl]*** http://www.xotcl.org/ * [Gustaf Neumann], [Mark Strembeck] (@ wu-wien.ac.at) * Difficulty: medium-hard ****Introduction**** Business Rule engines are gaining popularity in complex situations where a high degree of flexibility and declarative problem formulation are important. High level object oriented scripting languages are as well gaining popularity especially in the area of Web programming. Extended Object Tcl (XOTcl) is one of the most flexible languages of this kind, especially through its highly flexible composition techniques based on mixin classes. The language was originally developed for providing language support for the dynamic use of design patterns. ****Goals of the project**** The core part of this project is an implementation of Charles Forgy's Rete algorithm in XOTcl. The Rete Algorithm is an efficient method for comparing a large collection of patterns to a large collection of objects. It can be used to find all the objects that match specified patterns. The algorithm was developed for use in production system interpreters, and it has been used for systems containing from a few hundred to more than a thousand patterns and objects. It is used in a number of popular systems, as CLIPS or JBoss Rules/Drools for example. This project includes a high performance implementation of the Rete algorithm and an a study, how to use it in combination with the dynamic language features of the base language to define a reusable, flexible, and easy to use system. ****Base Materials**** - Rete algorithm: http://en.wikipedia.org/wiki/Rete_algorithm - XOTcl home page: http://www.xotcl.org - Drools: http://labs.jboss.com/drools/ - Charles Forgy: Rete: A fast algorithm for the many pattern/many object pattern match problem, Artificial Intelligence, Vol 19(1), Sept. 1982, http://dx.doi.org/10.1016/0004-3702(82)90020-0 - U. Zdun, M. Strembeck, G. Neumann: Object-Based and Class-Based Composition of Transitive Mixins, Information and Software Technology, 49(8) 2007, http://nm.wu-wien.ac.at/research/publications/b613.pdf) * '''Benefit to Student''' Gain experiences in dynamic object-oriented programming, pattern-matching and business rules * '''Benefit to community''' A reusable package for the implementation of highly flexible and efficient business rule systems, which can be embedded in various environments. ---- ***Audio input and output library and extension*** http://amsn-project.net * [Youness Alaoui] * Difficulty: medium [aMSN] is a Tcl/Tk Instant Messaging client working on the MSN network. We try to provide as much of the original client's functionality in aMSN. One of the most requested features is to have the ability to do audio conferencing, while the protocol and codecs have already been reverse-engineered, we are stuck now on a limitation of Tcl. There is no acceptable audio output/input extension for Tcl. The only extension available with enough capabilities to satisfy us is the Snack extension which is unmaintained for too long now and has many small issues and limitations which makes real-time audio processing impossible (device is opened/closed on every packet (20ms) and audio is played too fast, so it keeps glitching, etc..). A solution was found in the libao library (http://xiph.org/ao/) which did the trick for audio output and worked nicely on Linux, but it only has a winMM driver for Windows which doesn't seem to work. An alternative is libao2 which is a fork of libao by the mplayer developers, it is much more complete (has many more drivers and has a dsound driver for Windows), but its API is not very usable and its code is dependant on mplayer's internal libraries. This project will consist in merging libao's interface (http://xiph.org/ao) with libao2's drivers (http://mplayerhq.hu) and make it into a single, standalone library, as well as creating an audio input equivalent and writing a Tcl extension to wrap the library, thus providing the Tcl community with a new, more powerful audio input and audio output library. This will allow the creation of new real-time audio processing Tcl applications. A secondary purpose of this project would be to continuously discuss the changes with the mplayer developers in order to have them integrate the new library and to avoid having a third (or more) fork of libao. * '''Benefit to student''' Experience in Tcl, alsa, oss, arts, esd, pulseaudio, jack, winmm, dsound, CoreAudio, etc.. * '''Benefit to community''' Having a more mature Tcl extension for audio processing will be a great addition to Tcl as it will open up a new field for application developers. The advantage of using such a library would be the possibility to write applications that play or record audio in real-time, thus allowing the possibility to build VoIP applications in Tcl. Also, this driver-based library will allow Tcl applications to play and record audio using either alsa, oss, arts, esd, pulseaudio, jack, directX, CoreAudio, etc.. and to integrate with those sound daemons using a single, unified API. Having such a powerful library will also bring a great advantage to the Open Source Community as it will provide application developers of any language to use a much more stable 'libao' alternative without forking the mplayer internal library. ---- ---- **Projects Ideas for the Future** ***Improved HTTP/1.1 support in the core*** * [Jeff Hobbs] * Difficulty: easy Drawing together mixed implementations that are available, this would require a student with an interest in protocols and a good eye for compliance and discipline for test-driven development. * '''Benefit to student''' Gain experience in developing language extensions, develop deeper understanding of HTTP. * '''Benefit to community''' More consistent and powerful functionality for manipulating HTTP requests and responses in Tcl/Tk scripts. ---- ***Megawidget development*** * [Jeff Hobbs] * Difficulty: easy(-ish) Based on the soon-to-be-core TclOO extension, translate and update the plethora of megawidgets into a single, unified megawidget system that can be "core" blessed. Would involve extensive use of OO, x-platform UI, event-driven coding, etc. * '''Benefit to student''' Practical experience in design and implementation of a widget framework. * '''Benefit to community''' A consistent widget system making use of new core functionality. ---- ***AOLserver-libpurple integration*** * [Matthew Burke] * Difficulty: easy to hard (depending on scope and approach) The goal for this project is to develop an AOLserver module which enables the server to generate instant messages in response to HTTP requests and to evaluate resource scripts in response to instant messages. An easy approach would be to create a separate thread which monitors two queues: one for incoming instant messages and one for responses to be sent out as instant messages. A more comprehensive approach would be to develop a request handling framework for instant messages that works like AOLserver's other protocol handlers. Information on libpurple can be found at [http://developer.pidgin.im/]. * '''Benefit to student''' Learn about AOLserver internals, multi-threaded programming, instant message protocols. * '''Benefit to community''' Allow application developers to easily adapt their services to communicate with users over additional channels with minimal duplication of effort. ---- ***Tcl FireFox Scripting and DOM access*** * [Colin McCormack] * Difficulty: medium-hard Firefox has recently been extended to permit scripts in languages other than JavaScript to appear in