**Google Summer of Code 2008** This is the central location for proposing ideas for the Summer of Code [http://code.google.com/soc]. 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], 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. Also see the [Organization Application for Google Summer of Code 2008] ---- ***Projects*** **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), Unix (ELF), and OS-X (Mach-O). 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. ---- **Tcl/Tk Browser Plugin User-Privileged Security** http://plugin.tcl.tk/ * [Jeff Hobbs] (@ ActiveState) * Difficulty: medium-hard The current Tcl plugin is based on security policies that are configurable via special configuration files on the local system. These may be extended, but only what is named and known at runtime is available. A tclet (Tcl plugin application) can request a certain security level and is only given access if the local configuration expressly allows it. A user is not allowed to "opt-in" some tclets. More information on the current design is at: http://www.tcl.tk/software/plugin/safetcl.html http://www.tcl.tk/software/plugin/man/pluginDoc/policy.htm This project seeks to revamp the security policy management in the Tcl plugin to allow for UI-level control of security policies, as well as dynamic control for elevation/restriction of security based on domain and/or URL. * '''Benefit to Student''' Gain experience in web based security and secure coding practices. * '''Benefit to community''' Improved plugin for web applications. ---- **Gtk theme for Tk** http://tktable.sourceforge.net/tile/ * Pat Thoyts and/or Joe English * Difficulty: medium-hard Tk 8.5 supports themed widgets. On Windows and MacOS X the theme engine calls the native APIs to draw widget elements and achieve a native look. On X Window System desktops however Tk uses its own drawing code. There is a theme using Qt for KDE integration but nothing that permits integration on a Gtk desktop. Some initial experimentation by Pat Thoyts shows that it is at least possible to have the Gtk style engine draw Tk theme elements. * '''Benefit to student''' Experience with Gtk and Tk libraries. * '''Benefit to community''' Significantly improved integration of Tk applications on Gtk-based desktops (e.g. [Ubuntu], Fedora) ---- **TkCocoa** http://sourceforge.net/projects/tktoolkit * [Daniel Steffen] * Difficulty: hard The current implementation of the native [MacOS X] Tk is based on the legacy Carbon/HIToolbox API. Large parts of this API are deprecated with Leopard and not available to 64bit applications. This project aims to replace Tk's use of HIToolbox with Cocoa/AppKit. In a first instance, window (toplevel) creation and management would be targeted, with other areas like widget creation or event handling to follow if time permits. http://developer.apple.com/cocoa/ http://developer.apple.com/documentation/Cocoa/Conceptual/WinPanel/WinPanel.html http://rutherglen.ics.mq.edu.au/fisheye/browse/Tk/tk/macosx http://rutherglen.ics.mq.edu.au/fisheye/browse/Tk/tk/macosx/tkMacOSXWm.c?r=HEAD * '''Skills required''' Experience with C and Objective-C, in-depth familiarity with Cocoa frameworks, familiarity with Carbon and X11 APIs a plus. * '''Benefit to Student''' Gain experience with the use of Cocoa in an unfamiliar and challenging environment, learn about lower-level details of the [MacOS X] frameworks. * '''Benefit to community''' Assure Tk's future on [MacOS X] by moving away from deprecated APIs in the Tk implementation. ---- **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. ---- ** BLT Vector / Graph Refactor** http://sourceforge.net/projects/blt http://wiki.tck.tk/199 * [Bob Techentin] * Difficulty: medium BLT is one of the most delightfully useful Tcl/Tk extensions. It provides an extremely efficient implementation of floating point vectors, which greatly enhance Tcl's ability to do number crunching. And the graph widget enables rapid development of analysis scripts that are highly functional and very fast. Unfortunately, BLT's origins predate many of the modern Tcl extension features, and because it is not TEA (Tcl Extension Architecture) compliant, it is challenging to update it for new language releases. This goal of this project is to refactor the vector and graph portions of BLT into a new, TEA compliant extension. Some portions (i.e., bgexec) have already been extracted, and some portions (e.g., tabsets) are now available in other extensions. The new extension resulting from this development will be immediately functional with Tcl 8.5 and deployable in starkits as a standard extension. * '''Benefit to student''' Experience working with C - the lingua franca of system programming. BLT is a positively brilliant, well written, C extension. Experience developing a comprehensive test suite using tcltest as the tool to support agile, test-driven development. * '''Benefit to community''' The BLT graph and vectors will be available to programmers and users wanting to upgrade to Tcl/Tk 8.5. BLT will be easily deployable in starkits and starpacks. BLT will have an opportunity to be considered for inclusion in distributions such as ActiveTcl. ---- **Talend Open Studio Integration** http://www.talend.com/ * [Nima Mazloumi] * Difficulty: medium-high Talend Open Studio [http://www.talend.com] is an open source integration suite based on the Eclipse platform [http://www.eclipse.org]. Talend is a graphical Extract, Transform, Load (ETL) editor with support for Perl and Java code generation. The open architecture of Talend makes it extensible regarding new editors and ELT-components [http://www.talendforge.org/components/index.php]. The Eclipse Dynamic Languages Toolkit (DLTK)[http://www.eclipse.org/dltk/] provides a TCL development environment ready to use out of the box which could serve as the basis to provide TCL support to Talend. There are two possible tasks for a student interested in this project depending on the skills and interests. The tasks include the following: Integrate DLTK inside Talend and implement the interfaces for the Tcl code generation engine. Provide Tcl ELT component counterparts to those available for Perl and Java. * '''Benefit to student''' Experience in Tcl, Java and templating languages (code generation). Experience in platform and RCP programming. Experience data mining and enterprise integration. * '''Benefit to community''' Providing Tcl support to Talend is a significant contribution to the Tcl community. It will provide Tcl developers all fully integrated and graphical development environment for data and system integration. Generated ETL jobs can be easily deployed on any operating system with Tcl support. ---- ***Constraints in the Tcl Core*** * [Phil Mercurio] * Difficulty: medium-high A constraint solver can be an effective way to support a more declarative programming style and to exploit parallelism. This project would investigate adding constraints to the Tcl core by implementing a constraint solver as a package and identifying the core modifications that would be necessary to support it. As a starting point, the mentors can provide a working one-way constraint implementation, a discussion of the likely core changes needed, and a pointer to a multi-way constraint algorithm that would be a good candidate for implementation [http://citeseer.ist.psu.edu/sannella93multiway.html]. * '''Benefit to student''' Experience in Tcl and C/C++, constraints, and parallel processing. * '''Benefit to community''' Providing a robust constraint solver that can be integrated into the Tcl core is a significant contribution to the Tcl community that will complement Tcl's existing strong support for thread-based multiprocessing. ---- ** 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. ---- ** HTTP Server in pure Tcl (the one to rule them all) ** URL: [tothttpd] (TheOneTclHTTPD) * [Tomasz Kosiak] * Difficulty: medium Consolidate best practices from existing custom-built Tcl web servers into one multiplatform (unix/windows/embedded) embeddable, multi-threaded application web server in pure Tcl - modular, supporting HTTP/1.1 mechanisms like pipelining, caching, streaming data. Something like Mongrel for Ruby or Simple for Java. [wub] and [tclhttpd] should be considered in the plan * '''Benefit to student''' Experience in HTTP protocol internals, developing an Tcl API for very common problem, multi-threaded development in Tcl * '''Benefit to community''' There will be one fully functional HTTP server to embed in Tcl application instead of many non functional ones. Web application written to it's API could be ported to [AOLServer] (fully blown web server developed in C) as we plan to provide with compatibility API. ---- ** HTTP/1.1 client library in pure Tcl ** URL: [http] (discussion of the problem) * [Tomasz Kosiak] * Difficulty: medium Full HTTP/1.1 support in core http library (smaller part or counterpart of above [tothttpd]) This problem is already discussed in the wiki [http]. There is also an implementation http2.6 in [tclsoap] project at [http://tclvfs.cvs.sourceforge.net/tclvfs/tclvfs/http2.6/] * '''Benefit to student''' Practical insight into HTTP/1.1 protocol internals. Building API in Tcl to solve very common problem. Network programming. * '''Benefit to community''' Currently Tcl http library supports only HTTP/1.0. Supporting HTTP/1.1 out of the box will allow to easily use from Tcl advanced mechanism like streaming, chunk transfer encoding, persistent connection, etc. ---- **Tcl/Tk/Tile based cross platform framework for development of database application UI (like build with RAD's such as Borland Delphi)** URL: [Cross-platform framework for database application UI development] * [Tomasz Kosiak] * Difficulty: medium Tcl/Tk/Tile framework for building form-based database application as pioneered by Borland Delphi. Project aim is to compose sample application from available components, integrating it and showing how to use and glue them together to accomplish database UI application in Tcl with native look & feel. * '''Benefit to student''' Getting to know Tcl/Tk toolkit with native widget support by Tile extension (integrated in Tk as ttk::* namespace). * '''Benefit to community''' Consolidation of separate components needed to build very common kind of application. ---- **Tcl FUSE (Filesystem in User Space) Language Binding** [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. ---- !!!!!! %| [Category Internet] |% !!!!!!