
talk_dict = {
     1: 'Introduction to Pyparsing: An Object-oriented Easy-to-Use Toolkit for Building Recursive Descent Parsers',
     2: 'Agile Documentation: using tests as documentation',
     4: 'An Interactive Adventure Game Engine Built Using Pyparsing',
     5: 'Desktop Application Programming With PyGTK and Glade',
     6: 'Vertebral Fracture Analysis',
     8: 'Scripting .NET with IronPython',
     11: 'Effective AJAX with TurboGears',
     12: 'Stackless Python in EVE Online',
     13: "Cuaima MetaInstaller. New tool for managing System's Installations.",
     14: 'Osh: An Open-Source Python-Based Object-Oriented Shell',
     16: 'Decimal for beginners',
     17: 'Large-scale, cross-platform synchronization using embedded python',
     18: 'Internet Access via Anti-Virus Policy Enforcement Software and Messaging Service',
     19: 'State-of-the-art Python IDEs',
     21: 'Developing an Internationalized Application in Python: Chandler a case study',
     23: 'Processing XML with ElementTree',
     24: 'What is Nabu?',
     25: 'TurboGears How-To',
     26: 'Packaging Programs with py2exe',
     29: 'Python in Business : Thyme, a business-oriented Python development framework.',
     30: 'Python at Home : In Control',
     31: 'Extending the life of CVS with Python',
     34: 'The State of Dabo',
     35: 'PyPy architecture session',
     36: 'Python Can Survive In The Enterprise',
     37: 'Beyond Scripting: Using Python to create a medical information system with graphical template and database schema design',
     38: 'PyPy -- where we are now',
     39: 'The Rest Of The Web Stack',
     40: 'SAM: Transforming a commandline tool to Web 3000 (c)',
     41: 'Teaching Python - Anecdotes from the Field',
     45: 'Implementation of the Python Bytecode Compiler',
     46: 'Making Apples from Applesauce: The Evolution of cvs2svn',
     47: 'Agile open-source methods, Businesses and EU Funding',
     48: 'Extensible Desktop Applications: Abusing the Zope 3 Project',
     50: 'Using Django to supercharge Web development',
     52: 'New Tools for Testing Web Applications with Python',
     53: 'vobject - An iCalendar Library',
     54: 'Zanshin: Zen and the Art of Network Client Programming',
     55: 'IronPython Implementation',
     56: 'Python tools for regional hydrologic modeling in South Florida',
     57: 'pysense: Humanoid Robots, a Wearable System, and Python',
     58: 'Introduction to Zope Application Development',
     59: 'Introduction to CMF Application Development',
     60: 'Mission-Critical Python and the Brave New Web',
     62: 'Docutils Developers Tutorial: Architecture, Extending, and Embedding',
     63: 'Django How-To',
     64: 'Creating Presentations With Docutils and S5',
     65: 'Understanding Unicode',
     66: 'Building Pluggable Software with Eggs',
     67: 'Gamma: An Atom Publishing Protocol implementation for Zope 3',
     69: 'Python in Your Pocket: Python for Series 60',
     70: 'Simplifying Red-Black Trees',
     71: 'entransit, a content deployment system',
     72: 'bazaar-ng distributed version control',
     73: 'State of Zope',
    }

import cgi

def get_title (num):
    title = talk_dict.get(num)
    if title is None:
        return '#' + str(num)

    url = 'http://wiki.python.org/moin/PyCon2006/Talks#' + str(num)
    title = cgi.escape(title)
    return '<a href="%s">%s</a>' % (url, title)
    
