Perl Conference 5 Sessions

Wednesday | Thursday | Friday

Wednesday, July 25

Will the Next Generation Internet Still Depend on Open Source?
Fred Baker, Cisco Systems
Track: Keynote
Date: Wednesday, July 25
Time: 9:00am - 9:30am
Location: Grande Ballrooms ABC in the East Tower

Sponsored by
IBM
How important is open source to the future of the Internet? The Internet evolved as it did because of open source software and open standards. The spirit of open source is best expressed by the Internet Engineering Task Force, which operates on the basis of "rough consensus and running code." However, today's Internet is not the playground it was a decade ago. While some applications, like Napster and AIM, use the open Internet effectively, the sacrifice of the end-to-end model makes deployment of innovative applications challenging. The introduction of so-called "middle boxes" - firewalls, translators, caches, and application layer gateways - means that the new applications must actively circumvent these, or must gain their cooperation.

In a highly competitive market, with a lot at stake, developing consensus as well as running code can be difficult. Industry consortia and business models may determine how the future of the Internet gets decided - and who makes those decisions. Cisco Fellow Fred Baker will talk about the challenges that will shape the Internet, and whether Open Source will play as big a role as it has in the past.


An Open Source Success Story on Wall Street
W. Phillip Moore, Open Source Advocate
Track: Keynote
Date: Wednesday, July 25
Time: 9:45am - 10:15am
Location: Grande Ballrooms ABC in the East Tower

Sponsored by
IBM
Morgan Stanley has what is widely recognized as one of the best IT departments in the financial industry, and has built one of the worlds largest integrated and truly "Enterprise-wide" technology platforms for application deployment.

This infrastructure was architected with a combination of Open Source and proprietary software. This presentation will discuss the challenges faced, both technical and political, when deploying OSS on such a large scale and the problems managed as the environment changes and grows.

The discussion covers the contrast between the OSS experience with that of proprietary closed source products in the same environment, the lessons learned from this experience, and how the OSS community can help make OSS a continued success.


Transfusing Message Plasma into Business with Perl and Other Magic
DJ Adams, Piers Harding
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 10:45am - 11:30am
Location: Grande Ballroom B in the East Tower

The talk has a number of aims:


An Improved Perl Beautifier
Dr. Tim Maher, CONSULTIX
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 10:45am - 11:30am
Location: Grande Ballroom A in the East Tower
Download presentation files

A beautifier is a programmer's utility that reformats source code for compliance with a standard of presentation. The reformatting performed by a basic beautifier would include splitting long lines into shorter ones, adjusting the indentation step-size, and modifying indentation to properly reflect nesting levels. More elaborate beautifiers have options to align rows of initializers, align the opening and closing braces of code blocks, insert blank lines before and after subroutine definitions, insert a space between a function name and the opening parenthesis of its argument list, and so forth. For example, the GNU "indent" beautifier for the C language provides 51 separate user- selectable options, that provide for highly individualized definitions of beauty.

Beautifiers can enhance a program's readability, maintainability, and "debugability," and are generally considered essential utilities for high-level programming languages. So why doesn't Perl have one? One reason may be the widespread belief that writing a Perl beautifier would be a very difficult undertaking.


Tangram: Object Persistence in Relational Databases
Jean-Louis Leroy, Sound Object Logic
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 10:45am - 11:30am
Location: Grande Ballroom C in the East Tower

Tangram is an object-relational mapper: it makes objects persist in conventional relational databases, in effect letting you use RDBMSes as if they were object databases.

Tangram supports inheritance (including multiple inheritance), polymorphism, object identity, relationships (including collections), load-on-demand, etc. It also gives access to the powerful query facilities found in RDBMSes via an intuitive object syntax.

In my talk I will first present the issues involved in object-relational mapping. I will explain how one can implement OO concepts like inheritance on top of relational concepts.

In the second part I will explain how these issues are solved by Tangram, and how you use the module to essentially rid yourself of any persistence concerns. At that point I will give a live demonstration.

Finally I will explain the more interesting Perl techniques that make it possible to build object persistence in a manner that is both orthogonal and efficient (e.g. ties, dynamic code generation, weak references, etc). I will trace in the most interesting parts of the demo.


The Identity Function
Mark-Jason Dominus, Plover Systems Co.
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 11:30am - 12:15pm
Location: Grande Ballroom B in the East Tower

The identity function:

and its variations: are more useful than they appear. I will show at least three surprising and unexpected uses for the identity function, in the style of my "Perl Hardware Store" and "Tricks of the Wizards" talks of past years.

The identity functions I'll discuss may include:


Alzabo: A Data Modeller and RDBMS-OO Mapper
David Rolsky, House Absolute Consulting
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 11:30am - 12:15pm
Location: Grande Ballroom C in the East Tower

Alzabo is a tool designed to ease the pains of dealing with a database. It serves several functions. First, it is a data-modeling tool. You describe your schema (tables, columns, indexes, relations, etc.) via a data modeling interface and then Alzabo can generate the SQL necessary to instantiate your schema. It can also reverse engineer an existing schema from a database. Finally, it is capable of generating the SQL necessary to transform an existing schema based on changes made in the data modeler (a SQL diff, if you will).

As an RDBMS-OO mapper, Alzabo is capable of abstracting most types of SQL queries. It has several efficiency features such as lazy column loading, cursors, and row caching. It is also capable of auto-generating various convenience methods to simplify programming.

The presentation will cover:


Pretty Printing Perl
Simon Cozens
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 11:30am - 12:15pm
Location: Grande Ballroom A in the East Tower

Chaim Frankel famously said "The only thing that can parse Perl is perl", effectively killing anyone's chances of writing tools to manipulate Perl source.

Nevertheless, we look at the problems involved in parsing Perl source, and what makes it such a difficult challenge. Next we examine some of the solutions that have been proposed, especially Tim Maher's Perl beautifier and Damian Conway's nascent Parse::Perl module.

We then turn to the solution I recently came up with, tokeniser reporting; we describe how it works and how it can be used from C and Perl programs. Finally, we look at some simple tools built on top of tokeniser reporting to manipulate Perl source, and how even once you have parsed Perl source, pretty printing is still a difficult process.


Statistical Disambiguation of Word Senses with Perl
Dan Brian, Conceptuary
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 1:45pm - 2:15pm
Location: Grande Ballroom B in the East Tower

This presentation examines a new technology that uses Perl in a complex Natural Language Processing application. Word sense ambiguity is considered one of the most difficult tasks that must be performed by all NLP ontologies. This presentation will examine the problems facing NLP development. Next, it will briefly explore the Perl modules Lingua::Wordnet and Lingua::LinkParser and their uses in addressing these problems. A framework that draws upon these technologies will then be presented, including a new algorithm, which makes possible the accurate unsupervised disambiguation of an entire English text using grammatical and collocational statistics of a referenced Wordnet lexicon. The end result is an arbitrary text having word sense tags, which may be used in application ranging from automated document categorization, to smart retrieval technologies, to conversation simulators.

This presentation holds value for developers interested not only in Natural Language Processing, but also statistical analysis, complex data models, use of the Tk modules for graphical analysis of algorithmic processes, and data storage. While technically advanced, this presentation may be attended by beginning Perl programmers also, since the results are easily understood and appreciated.


A Novel Approach for Porting Perl to the Java Virtual Machine
Bradley M. Kuhn, Software Freedom Law Center
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 1:45pm - 2:15pm
Location: Grande Ballroom A in the East Tower

At the fourth Perl Conference, two possible approaches for porting Perl to the Java Virtual Machine (JVM) were presented. Both these approaches have unfortunate drawbacks that render them cumbersome for all but trivial subsets of Perl. This paper discusses a novel approach for porting Perl to the JVM. Due to an "impedance mismatch" between perl's intermediate representation (IR) and the bare JVM, the more generalized GNU Kawa IR is used as a companion to perl's IR. The perl IR is massaged into Kawa's "middle-layer" IR. In turn, Kawa's IR compiles directly to JVM bytecode. While Kawa's IR does not hand us a ready-made port of Perl to the JVM, it does provide more infrastructure than is available with any other system. Using Kawa's IR, together with the B module, brings us much closer to a full Perl port to the JVM than has hitherto been possible.


Increasing Perl Use
Dave Cross, Magnum Solutions Ltd
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 1:45pm - 2:15pm
Location: Grande Ballroom C in the East Tower

We all want to increase the number of people using Perl, right? The "modest proposal" looks at a way to achieve that by slightly unusual means. It's just a case of getting the law on our side and declaring all other language illegal!


Automatic Document Categorization
Ken Williams
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 2:15pm - 2:45pm
Location: Grande Ballroom B in the East Tower

In this talk, Ken Williams presents one effective mechanism for categorization, implemented using Perl and a mySQL database. Several technologies exist allowing computers to discern meta-information. One useful task computers perform is analyzing properties of an incoming document and place it into one or more predefined categories based on existing pre-categorized documents.

For more on this subject please read this short paper.


Instant Compilers
Damian Conway, Thoughtstream, Leon Brocard
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 2:15pm - 3:15pm
Location: Grande Ballroom A in the East Tower

This talk shows how to use Perl to build compilers for little programming languages. Techniques covered include: grammars and source parsing (both Parse::RecDescent and Parse::Yapp), abstract syntax trees, code generation, diagnostics/error recovery, and source filters, culminating in a compiler for a not-so-little language.


Advocacy-Case Study: TMTOWTG(T)T(LY)DI
John W. Adams
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 2:15pm - 2:45pm
Location: Grande Ballroom C in the East Tower

There's More Than One Way To Get (Them) To (Let You) Do It is an exploration of effective Perl advocacy inside an organization through a study of the speaker's experiences in using (and getting to use) Perl. Topics to be covered include:


Linguana
Dan Brian, Conceptuary
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 2:45pm - 3:15pm
Location: Grande Ballroom B in the East Tower

Can Perl objects be used to model concepts in Natural Language? Dan Brain demonstrates the use of such a technique that enables writing programs in natural English. The Linguana project is described, and an invitation for participation extended.


XML::Schema
Andy Wardley, Canon Research Centre Europe Ltd.
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 2:45pm - 3:15pm
Location: Grande Ballroom C in the East Tower

This presentation reports on writing a set of Perl modules for parsing and manipulating XML Schema documents. It is intended to provide an XML Schema validation component for the Perl XML::Parser module, and act as a general-purpose tool (a parser generator) for building other tools and application components around specific XML schemata.

The presentation should provoke the question: What can we now do using XML::Schema?


Perl Refactorings or The Good From The Bad and The Ugly
Michael G. Schwern
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 3:45pm - 4:30pm
Location: Grande Ballroom A in the East Tower

There's a lot of old code out there, and a lot of it is in Perl. Sometimes its good, some of its bad, and a lot of its ugly. What to do with it? Usually you just throw it away and rewrite, at a high cost and effort. Or it’s left where it is with everyone afraid to touch it for fear of it breaking out of spite.

Refactoring provides an alternative, to actually improve the design of old code in place potentially saving vast tracts of work from the bit bucket. It involves many small, well-defined, systematic changes that do not effect its function and yet make it more readable and flexible. It can work for something as small as detangling a noisy regex to as large as rewiring an entire class hierarchy.

Traditionally, refactoring has been reserved for smaller and more strictly OO languages like Java and Smalltalk. Here we show how it can be applied to Perl along with new refactorings unique to Perl and what existing ones don't work for Perl. We'll also look into the problems of automating refactoring. As the grand finale, we'll tear into a piece of code from the Perl core library.later than July 1 2001.


Flash in the Pan
Simon Wistow
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 3:45pm - 4:30pm
Location: Grande Ballroom B in the East Tower

This talk intends to show some of the possibilities of using Perl to dynamically generate Flash animations and, furthermore, how the technology behind it can be extended to do some very, very cool things.

The scope of the talk will include :


Pathologically Polluting Perl with C, Python and Other Rubbish using Inline.pm
Brian Ingerson, Social Text, Inc.
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 3:45pm - 4:30pm
Location: Grande Ballroom C in the East Tower

No programming language is Perfect. Sometimes it just makes sense to use another language. Wouldn't it be great to use Perl most of the time, but be able to invoke something else when you had to? Inline.pm is a new module that glues other programming languages to Perl. It allows you to write C, C++, and Python code directly inside your Perl scripts and modules.

The Inline experience is similar to that of Perl itself. You simply write your code and run it. Inline will silently take care of all the messy implementation details and ``do the right thing''. It analyzes your code, compiles it if necessary, creates the correct Perl bindings, loads everything up, and runs the whole schmear. Now you can write functions, subroutines, classes, and methods in other languages and call them as if they were Perl. All in the privacy of your own script!

This talk is a whirlwind tour of the world of Inline. You'll see:


Complex Application Engineering with Perl: Stability and Speed
Jason W. May, Billpoint
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 4:30pm - 5:15pm
Location: Grande Ballroom A in the East Tower

Perl is considered appropriate only for administrative tasks and content-delivery systems. However, Perl is also suitable for implementation of core enterprise applications, and provides compelling advantages over languages such as C++ and Java. This talk presents a case study of the pros and cons of using Perl for a prime time, high-availability financial transaction-processing system.


Graphing Perl
Leon Brocard
Track: Perl Conference 5
Date: Wednesday, July 25
Time: 4:30pm - 5:15pm
Location: Grande Ballroom B in the East Tower

This talk will explore visualization of various parts of Perl using directed graphs and the GraphViz module. It will cover:


Thursday, July 26

Shared Source vs. Open Source: Debate and Panel Discussion
Craig Mundie, Microsoft, Michael Tiemann, RedHat, Inc.
Track: Keynote
Date: Thursday, July 26
Time: 8:45am - 10:15am
Location: Grande Ballrooms ABC in the East Tower

Sponsored by
Sun Microsystems
Microsoft Senior Vice President Craig Mundie and Red Hat CTO Michael Tiemann set the stage for a wide-open panel discussion about Microsoft's Shared Source program and the response from the open source community, when they square off in this shared source vs. open source debate.

Mundie set off a far-reaching discussion recently when he introduced Microsoft's Shared Source program, which blends access to source code with the preservation of strong intellectual property rights by software developers, and contrasted Shared Source to Open Source and the GNU General Public License.

There's been a strong response from the open source and free software communities, accusing Microsoft of trying to co-opt the momentum of open source with a program that offers superficial similarities, but few of the real benefits. Microsoft counters that they are trying to find a balance between the needs of commercial developers and the lessons learned from the open source movement.

Mundie will discuss ways in which Shared Source differs from Open Source, and why Microsoft believes that the Shared Source Philosophy supports a strong software business case for commercial software developers and their customers.

Red Hat CTO Michael Tiemann will then discuss the industry's experience with open source vs. pseudo-open licensing, and why he believes that the future will favor stronger (rather than weaker) licenses to protect choice for users and freedom for developers.

His speech will be followed by a panel discussion with Tiemann, Mundie, and other experts on intellectual property and the software industry including,

Tim O'Reilly will moderate the panel.


Perl and Speech
Kevin Lenzo, Cepstral, LLC
Track: Perl Conference 5
Date: Thursday, July 26
Time: 10:45am - 11:30am
Location: Grande Ballroom A in the East Tower

In this talk, we will discuss the use of speech technology in applications, and how to integrate recognition and synthesis components in Perl. The CMU Sphinx, Festival, FestVox, and the Edinburgh Speech Tools are available from Perl modules, and can be used to create IVR and Dialog systems, as well as text readers and agents that respond to commands in naturalistic language.


ReBug: A Regular Expression Debugger in Perl
Michel Lambert
Track: Perl Conference 5
Date: Thursday, July 26
Time: 10:45am - 11:15am
Location: Grande Ballroom B in the East Tower

Extended Abstract: ReBug: A Regular Expression Debugger in Perl

Most programmers very rarely utilize the full power of regular expressions, because learning this distinct language and it's associatedidiosyncrasies just doesn't seem worth the effort. One possible cause isthat while other languages have debuggers, and sometimes even IDEs and other niceties, regular expressions never have such luxuries. Always content to be included in other languages and programs as a subset or an extra added feature, regular expressions have rarely been given the spotlight to shine on their own, and consequently have never received the attention to have debuggers and other tools develop around their usage. One could argue that regular expressions are too simple of a language to need a debugger, but regular expressions have tests, branching (whether it matches or not, move forward in the regex or backtrack), memory retention ($1, $2, and so on), and as of Perl 5.005, full fledged Perl (with the (?{}) operator).

As programmers who uphold perl's virtues of laziness, impatience, and hubris, we can find it hard to learn about regular expressions. The first one interferes with our ability to learn. The second means we want to just use the regular expressions, instead of having to spend the time to thoroughly understand them. And the third implies that we feel too proud to go and learn about something we consider to be so "beneath us." So instead, we content ourselves with the "leftmost, longest" rules of thumb, and are prepared to recant voodoo spells over the regex as we try to get it to work. The lucky ones among us who haven't followed Perl's virtues religiously, and have spent the time to read through Jeffrey Friedl's "Mastering Regular Expressions" or Mark-Jason Dominus's descriptions in The Perl Journal, have a much better understanding of how regular expressions work, and are able to use this intuitive sense to more quickly create powerful regexes to do their bidding.

Regular expressions need to be considered a true language, and be given the set of tools normally associated with languages. Maybe a full-fledged IDE just for regexes is a bit-farfetched, but one can easily justify a regular expression debugger as a valuable tool. Imagine being able to test one's regex against some text to see the process by which it matches or (more likely, if you're using the debugger,) fails. Watching how the regex goes through your regex, and seeing if it's actually attempting to match the regex token you think it's matching. Or set a breakpoint to bypass all the early parts of the match to find the part where it fails. When you find that the regex engine is using the wrong part of your regex to match the text, there's no need to restart with new breakpoint conditions. Because of the simplicity of state data with regexes, you can just start running or steeping the regex debugger backwards until it makes sense again, and then step forward to find the point of error.

What makes it all possible is a regex construct introduced in Perl 5.005. The (?{}) syntax allows one to execute arbitrary code when the engine reaches a certain point in the regex. With this functionality, it becomes much easier to implement a full-fledged debugger. In a nutshell, you can have the (?{}) construct (with code to call a particular callback) inserted at very many points within the regex. As the regex matches, the callback is called many times, as the regex engine travels up and down the target string in it's attempt to match. This callback is able to query variables like $1, $`, $&, and so on to get a picture of how far along the regular expression is. With some analyzing of this information, one is able to show exactly how a regex matches, from its deadend attempts to its successful completion.

Because a regex match does not carry along much state information (as opposed to a real program which has numerous variables and memory usage), it is possible to store the entire state of the regex quite simply. Because of this, we can store the current state of the regex with every callback. This then provides an array of states which we can traversed both up and down, to travel both forwards and backwards in time along the regex matching. Playing, rewinding, stepping, and other such tasks are merely a simple traversal through the array. Try picturing what it would be like to undo what the last 'step' did in a real debugger, and you'll realize how a regex's simplicity allows for this incredible power. This idea has one pitfall, however. As a regular expression debugger, you should be immune to any failures upon the part of the code you're testing. While a regex should seem to be self-contained (the syntax described above aside), a never-ending regex, or at least one that does not complete in any reasonable amount of time, can easily cause a program to appear to hang. Simply traveling through the regex and storing the states in an array for later traversal is not an option anymore.

The approach that was used, (which as based off a proof of concept prototype of a regex debugger created by Mark-Jason Dominus,) was to separate the execution of the script into the GUI front-end and the regex parsing backend. The way it works is more complicated than the simple one described in the preceding paragraph, although it adheres to the same underlying principles. The GUI front-end accepts a regex and a string to test it against. Instead of trying to process the regex itself, it sends the regex and the string to a forked copy of the program that accepts the data and waits. When the user hits the forward button, the GUI portion requests the next state from the parser through Inter-Process Communication (IPC). The parser then moves along the regex execution one step. In other words, it returns out of the first (?{}) construct to allow the parsing to continue, and stops when it encounters the next (?{}). The parser then constructs the fields needed by the GUI front-end ($1 to $9, $`, $&, and $') and sends them back through IPC. The GUI then uses the information to display the information, from using $`.$& to show how far along the regex 'pointer is', to $& to show what the current match consists of, to showing what was matched by the first set of parenthesis, and what has been matched thus far in the second set, and so on. The GUI end then adds this new state information to its list of states as it progresses through a match. Every time the user restarts or backs up to one of the previous states, it doesn't need to ask the parser backend, and can just pull the data from the array. In a way, the GUI creates a lazily-filled array, only pulling in values from the parsing backend as necessary to fulfill the user's desire to see further along the parsing of the regex. If one includes a way to reset what regex and string are being matched by the backend, then one can prevent incredibly long regexes from locking up the application. And finally, both breakpoint and variable watches are implemented, allowing one to set a breakpoint on a particular variable (when $1 eq "abc", stop), or allow one to watch the value of $& change as the regex progresses in pseudo-real-time.

CURRENT STATUS

Currently, the regular expression debugger, tentatively titled Rebug, implements the following features:

Planned features include:


Internals of Rx
Mark-Jason Dominus, Plover Systems Co.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 11:15am - 11:45am
Location: Grande Ballroom B in the East Tower

In 1999-2000 Mark-Jason Dominus wrote the back-end internals of the ActiveState graphical regex debugger, named 'Rx'.

In this presentation he discusses the history of the project from the 1998 original concept through to the present including the prototype Perl-only implementation and the eventual ActiveState XS version – the advantages and disadvantages of both approaches – and a postmortem. He also discusses the internals of Perl's regex engine in detail, where it is relevant to the operation of the debugger, and concludes by suggesting the future of the work and additional debugger features not yet added.

Outline:


10 Modules I Wouldn't Go Anywhere Without
Simon Cozens
Track: Perl Conference 5
Date: Thursday, July 26
Time: 11:30am - 12:15pm
Location: Grande Ballroom C in the East Tower

In this session Simon Cozens shows that CPAN modules are the building blocks of successful Perl programs and provides a gentle introduction to ten CPAN modules that should not just be in every Perl programmer's tool bag, but also on the workbench for daily use.


Extensible POD
Adam Turoff
Track: Perl Conference 5
Date: Thursday, July 26
Time: 11:30am - 12:15pm
Location: Grande Ballroom A in the East Tower


Dirty Stories About the Perl Regex Engine
Mark-Jason Dominus, Plover Systems Co.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 11:45am - 12:15pm
Location: Grande Ballroom B in the East Tower

This talk is too short (20 minutes) to tell you all about how the Perl regex engine works---that would take years, and cost millions of lives. Instead, witness three very brief case studies of how it handles certain specific features. You've probably always suspected that the Perl regex engine concealed filthy secrets and nasty surprises and these three features are noteworthy for being particularly disgusting.

Barf bags will be provided.

Outline:


Cross-Database Perl Applications
Matt Sergeant, MessageLabs Inc.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 1:45pm - 2:15pm
Location: Grande Ballroom B in the East Tower

Perl's DBI is a great module to build database applications on, however, when building large complex cross database applications (that have to run on more than one database platform), DBI is not abstract enough to hide the differences between databases. This talk will introduce DBIx::AnyDBD, a module designed specifically for developing cross database applications, originally developed for O'Reilly's WebBoard NNTP server, and now used in O'Reilly's WebBoard for Unix.


use Python;
Simon Cozens
Track: Perl Conference 5
Date: Thursday, July 26
Time: 1:45pm - 2:15pm
Location: Grande Ballroom A in the East Tower

This presentation describes a work in progress, an attempt to harness the Perl interpreter's runtime environment for the creation of interpreters for other languages.


The Camel Goes Kite Surfing
Andy Wardley, Canon Research Centre Europe Ltd.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 1:45pm - 2:15pm
Location: Grande Ballroom C in the East Tower

This talk describes how Perl helped design, visualize and construct a new kind of traction kite aimed at the kite surfing market. Designing such complex 3 dimensional shapes would almost certainly be an insurmountable task without the aid of the computer. Worry free kite design is best with the right programming language (e.g. memory allocation and reclamation, strict type checking, program compilation, etc). Perl is the best language for getting the job done.


Developing WAP Applications with Perl
Dan Brian, Conceptuary
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:15pm - 2:45pm
Location: Grande Ballroom C in the East Tower

This short presentation explores the use of Perl to create wireless applications using the Wireless Application Protocol. The philosophies behind mobile clients and wireless computing trends are summarized, followed by an explanation of the basics of WAP architecture and markup. Examples of WAP applications in Perl will be explored, with a focus on the simplicity of the WAP client + Perl server development combination.

This presentation is of general interest, and requires only beginning Perl knowledge.


TIGER by the Tail: Geographic Mapping Systems from Public Domain Data
Michael G. Schwern
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:15pm - 2:45pm
Location: Grande Ballroom B in the East Tower

There's a lot you can do with a good map. Figure out how to get to Valhalla, New York from Pittsburgh, PA. Find the nearest ATM machine to your house. Even figuring out the best bus route across town. Unfortunately, the available mapping systems and their data such as Mapquest, Terraserver, and Street Atlas, are largely proprietary requiring licensing fees and often-limited access to the raw map data. As such, open source development of good geographic software has been limited.

Fortunately, the U.S. Census has been conducting a systematic survey of the entire United States in a project called TIGER/Line. This treasure trove of data contains not only street information, but also waterways, power lines, political boundaries, public buildings, parks...most everything you can draw on a map. Add to this data from the U.S. Geological Survey along with declassified government satellite photos and you have the potential for an extremely accurate, extremely detailed map. And it’s all public domain data! Perfect for open source!

We will lay open this vast wealth of data and dig through its often baroque and confusing formats to show how the data can easily be sifted through and parsed with the Geo::TigerLine module. We'll also walkthrough the Geo::Walkabout mapping library, its interface, algorithms, strengths, and shortcomings. Finally, some applications in development will be showcased.


XML-RPC with Perl and Apache
Randy Ray, Tellme Networks, Inc.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:15pm - 2:45pm
Location: Grande Ballroom A in the East Tower

As wonderfully clean, simple and effective as XML-RPC is, it hasn't yet had the support for Perl that other languages such as Java and Python have. This presentation describes a new module to bridge this gap.


The Perl Geek Code
Michel Rodriguez
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:45pm - 3:15pm
Location: Grande Ballroom B in the East Tower

The talk will describe the content of the Perl Geek Code and how Perl scripts are used to generate the various descriptions/forms/CGI's files from a single XML source.

The Perl Geek Code is currently (Jan 21st) in version 0.1. It is similar to the generic Geek Code but allows Perl hackers to describe themselves in various ways: Core Hacking, Perl Skills, Community, Typically Perl (poetry, obfuscation...), Other Languages, OSs...

I will describe the current code and ask for input for the next version of the code.

The Perl Geek Code is described in an XML file, from which an HTML description and various forms and CGI scripts are generated. I will show all the scripts as a practical (OK, fun) use of XML.

View The Perl Geek code at www.xmltwig.com/pgc/.


Calendering Toolkit
Simon Cozens, Kirrily "Skud" Robert, e-smith, Inc.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:45pm - 3:15pm
Location: Grande Ballroom A in the East Tower

This paper describes a work in progress. Reefknot is a project to provide a comprehensive, open source, standards-compliant calendaring toolkit to enable the easy creation of calendar and scheduling applications and utilities.


Camelot
Andy Wardley, Canon Research Centre Europe Ltd.
Track: Perl Conference 5
Date: Thursday, July 26
Time: 2:45pm - 3:15pm
Location: Grande Ballroom C in the East Tower


Lazy Web Site Maintenance
Damian Conway, Thoughtstream
Track: Perl Conference 5
Date: Thursday, July 26
Time: 3:45pm - 4:30pm
Location: Grande Ballroom C in the East Tower

I love having a slick website, and news feed, but *hate* writing HTML or RSS. HTML::Mason and Text::Template are brilliant automation tools, but they make my brain hurt.

In this talk I will demonstrate the alternative: a set of simple Perl scripts (and techniques) that allow me to update and maintain the ever changing content of the Conway Channel via a pathetically simple plaintext interface.


Perl on the Microsoft .NET Framework
Jan Dubois
Track: Perl Conference 5
Date: Thursday, July 26
Time: 3:45pm - 4:30pm
Location: Grande Ballroom B in the East Tower

This talk shows how Perl can be used on the Microsoft .NET Framework. It will start with a brief overview of .NET and especially the .NET Framework, which is the new language-neutral virtual execution environment from Microsoft.

The first part of this talk will describe the initial "Perl for .NET Research" attempt to create a Perl compiler generating native IL (Intermediate Language of the .NET runtime) using a custom B::* backend module. A sample will be shown that uses an abstract base class written in Visual Basic with some of the pure virtual methods implemented in Perl.

As an alternate approach, ActiveState has implemented "Perl for .NET Proxy", which creates proxy objects living inside the .NET runtime but executing the actual Perl code on the outside. Since it is running within a standard Perl interpreter, even hard to compile language constructs like string eval() or runtime require() are supported. This approach also makes all the CPAN modules containing XS code available.

The talk will finish with some thoughts for Perl 6: What can we do to make it easier to compile Perl to strongly typed execution environments? How could the .NET runtime be enhanced to better support dynamic languages? Why do we need a higher level of abstraction for XS extension code?


A First Look at the Insides of Perl 6
Dan Sugalski, The Perl Foundation
Track: Perl Conference 5
Date: Thursday, July 26
Time: 3:45pm - 4:30pm
Location: Grande Ballroom A in the East Tower

This talk presents an overview of the internals of Perl 6. We'll start with a broad overview of the internals, and focus in from there, covering such topics as:


Other topics may be covered as time permits.


VSAP: A Dynamic, Scalable Hosting Application Platform
Dan Brian, Conceptuary
Track: Perl Conference 5
Date: Thursday, July 26
Time: 4:30pm - 5:15pm
Location: Grande Ballroom C in the East Tower

This presentation describes a project completed at Verio, Inc. to create a brandable, scalable web hosting application platform for the use of Verio clients and resellers. Using a distributed, Perl daemon that sends and receives XML, a Java XSLT engine running under Apache Jakarta, and a hierarchical database of XSL/XML branding data, the applications group at Verio has created a framework that allows resellers to independently deploy custom applications that get distributed across servers.

The presentation will cover the following points:

The presentation is of interest to anyone involved in the development of large applications, especially within web hosting environments.


SOAP: The Power of Simplicity
Pavel Kulchenko, eScout
Track: Perl Conference 5
Date: Thursday, July 26
Time: 4:30pm - 5:15pm
Location: Grande Ballroom B in the East Tower

This talk covers technology aspects of SOAP protocol and shows how to use Perl to build SOAP client and server implementations in portable, platform independent fashion in a minutes. Based on SOAP::Lite module available from CPAN or from soaplite.com.

Techniques covered include:


What's New in 5.8
Jarkko Hietaniemi
Track: Perl Conference 5
Date: Thursday, July 26
Time: 4:30pm - 5:15pm
Location: Grande Ballroom A in the East Tower

Perl 5.8 is coming hot on the heels of the long-awaited maintenance release 5.6.1. What makes it different? What features are better? What are the new features? What features have been declared unfit to live?


Friday, July 27

Big Hairy Problems: Open Source Challenges in the Enterprise
Michael Tiemann, RedHat, Inc.
Track: Keynote
Date: Friday, July 27
Time: 8:45am - 10:15am
Location: Grande Ballrooms ABC in the East Tower

Sponsored by
ActiveState
If you talk to CTOs, their biggest concerns aren’t whether to use commercial software or open source software but a set of large-scale problems that don’t yet have obvious solutions. Oracle may not have solutions for them, but neither does Open Source. Our panel of top CTOs will tell us about enterprise-class problems that they are worried about solving into the future.


pyperl: Perl & Python is True!
Gisle Aas, ActiveState, Neil Watkiss, ActiveState
Track: Perl Conference 5
Date: Friday, July 27
Time: 10:45am - 11:30am
Location: Grande Ballroom A in the East Tower

'pyperl' is an extension module that bridges the gap between Perl and Python. It allows Python code to invoke Perl code and operate directly on Perl data and permits Perl code to do the same to Python code and data. This provides for almost seamless integration between the languages and thereby greatly expands the library of modules available to each of the languages.

ActiveState and Digital initially developed the pyperl extension Creations as the foundation for supporting Perl in the Zope application server. It has since been used to glue Perl and Python together in several other projects at ActiveState.

This talk will present the design and major features that pyperl provides to both Python and Perl programmers. The talk will describe how the function call, data, thread and exception models of the two languages mix together and it will demonstrate how you can take advantage of CPAN modules from Python. We will also show how pyperl was integrated into the Inline.pm framework to create Inline::Python.


Slash: Taming the Beast
Brian Aker, MySQL AB, Chris Nandor, Slashdot
Track: Perl Conference 5
Date: Friday, July 27
Time: 10:45am - 11:30am
Location: Grande Ballroom B in the East Tower

Slash, the code that runs the popular "News for Nerds" site, Slashdot, started as a small bit of Perl code running on a shared web server. Slashdot quickly grew, and the code did, too. It was not long before the code became hard to manage. It needed to be rewritten. First, the code had to be cleaned up; global variables, hardcoded HTML, SQL interspersed with Perl, lack of coherent API, and other problems needed to be straightened out. Further, there was a lot of room for optimization, taking advantage of many of the features mod_perl and Apache have to offer.

This session will go over the architecture of the system (LAMP: Linux, Apache, MySQL, Perl), including how we solved the issue of having multiple database backends, moved to a template system to make customization easier, and created a plugin structure to make the system's functionality easily extensible.

This is the story of what was wrong with Slash, how its problems were fixed, and how it was made better.


The Conway Channel
Damian Conway, Thoughtstream
Track: Perl Conference 5
Date: Friday, July 27
Time: 10:45am - 12:15pm
Location: Grande Ballroom C in the East Tower

A smorgasbord of new modules including: Regexp::Common, Filter::Simple, String::EditDistance, Bleach, Inline::Files, and Lingua::tlhIngan::yIghun.


File Conversion for Space Shuttle Issue Trouble Reports
Dave Carvell, Galaxy Global Corporation
Track: Perl Conference 5
Date: Friday, July 27
Time: 11:30am - 12:15pm
Location: Grande Ballroom B in the East Tower

The conversion of text documents to a database should be a straightforward process, but human error and inconsistency can lead to unexpected complexities. With thousands of documents to convert, and hundreds of small formatting errors, exceptions build up quickly. Corrective methods had to account not only for these, but also the exceptions to the exceptions. This talk explains the various pitfalls and how to resolved them


Oracle::OCI Module
Tim Bunce, Data Plan Services
Track: Perl Conference 5
Date: Friday, July 27
Time: 11:30am - 12:15pm
Location: Grande Ballroom A in the East Tower

This seminar will introduce the new and powerful Oracle::OCI module. This new module gives direct access to the Oracle Call Interface API from perl and the DBI (including handling Oracle object types, REF cursors, LOB locators, streaming data, direct-loading, and more.) Tired of writing and debugging your OCI applications in C? Try Perl!


An Introduction to Mail::Audit
Simon Cozens
Track: Perl Conference 5
Date: Friday, July 27
Time: 1:45pm - 2:30pm
Location: Grande Ballroom A in the East Tower

Mail::Audit is a popular module for filtering and organizing mail, intended as the Perl programmer's replacement to procmail. It allows writing mail-filtering programs in clear and flexible Perl, rather than in arcane procmail recipes. It's also a great example of an application of Perl that is both very simple and very powerful.

Simon Cozens will explain what inspired him to write the module and how he set about it; next, we'll examine how to use Mail::Audit by taking a look at a sample-filtering program.

We'll then investigate some more advanced things that can be done with the module, and some imaginative uses to which it has been put. Finally, we look at what problems it currently suffers from, and what will happen to it in the future.


Extreme Perl
Damian Conway, Thoughtstream
Track: Perl Conference 5
Date: Friday, July 27
Time: 1:45pm - 2:45pm
Location: Grande Ballroom C in the East Tower

In this talk I dissect the 999 overachieving bytes of the "SelfGOL" program: an obfuscated, self-aware, viral quine that can:

SelfGOL accomplishes these feats in standard Perl, without importing any modules, and without using a single if, unless, while, until, for, foreach, goto, next, last, redo, map, or grep statement in its source code.

To do all that in less than 1K of code, it relies on some extreme programming techniques, and on many of the obscure backwaters of the Perl syntax. This talk explores both.


Pushing the Envelope with Perl: Using Perl with Microsoft Exchange
Rick Tatem, SAS Institute
Track: Perl Conference 5
Date: Friday, July 27
Time: 1:45pm - 2:30pm
Location: Grande Ballroom B in the East Tower

This presentation discusses the use of Perl for managing and extending the Microsoft Exchange messaging system. Perl's versatility makes several critical (and often expensive!) tasks possible. From synchronizing the Exchange Directory Service with an employee directory to reporting on the volume of mail traffic between servers and sites, Perl is up to the task in several incarnations: plain scripts, PerlScript in ASP pages, "executable" (IndigoSTAR's perl2exe), and Win32 COM objects (ActiveState's PerlCtrl). In a solutions imperative environment, Perl always delivers.


Applications of Perl in Medical Informatics
Rex Jakobovits
Track: Perl Conference 5
Date: Friday, July 27
Time: 2:30pm - 3:15pm
Location: Grande Ballroom B in the East Tower

In this talk, Rex Jakobovits describes how WIRM is used in several ongoing medical informatics projects: the Digital Anatomist Repository, a service enabling medical schools to build image archives; Fathom, a repository for a natural language processor of patient records; MyPACS, a telediagnosis system for radiologists, and Brain Mapper, an experiment management system for neuroscientists. For each of these projects, he describes the requirements, how WIRM was used to build the solution, show examples of the API at work, and explain which CPAN modules or Perl features were particularly helpful in solving the problem.

With the advent of new technologies for generating medical research data, there is a growing need for innovative tools that enable clinicians, researchers, and educators to manage multimedia information. Open source technologies are beginning to have an impact in the medical informatics arena, making it possible for medical professionals to develop systems that effectively manage the acquisition, organization, and dissemination of their data and knowledge. By enabling domain experts to build their own individually-tailored interfaces for managing biomedical data, Perl is helping to speed the process of scientific discovery, reduce the cost of research, and facilitate the sharing of knowledge.

The web provides a framework for exporting interfaces to share data, but there is currently a lack of high-level web application development tools suitable for use by scientists and health professionals who are not skilled programmers. A biomedical information system often needs to provide individually-tailored interfaces for different classes of end-user, handle the modeling of complex data types, offer customizable forms for acquisition and editing of data, interface with databases and other software applications, and provide support for a wide range of multimedia documents. While CPAN does provide the building blocks for meeting these requirements, the level of expertise needed to tie them together often exceeds the capabilities of the personnel involved in the project (there just aren’t enough gurus out there). Hence, laboratories and hospitals tend to buy into proprietary systems, and find themselves at the mercy of a vendor.

We are developing an open source application server, the Web Interfacing Repository Manager (WIRM), which makes the power of CPAN more accessible to medical professionals. WIRM is a layer over CGI.pm, DBI, Perl Magick, and other modules, providing a high-level API for building persistent web objects. Like the popular application server Zope, WIRM provides a simple framework for building web applications. But WIRM-based applications enjoy the added benefit of seamless access to CPAN modules, and of course, the pattern-matching capabilities of Perl.

WIRM includes a browser-based console that allows scientists and clinicians to describe the structure of their domain knowledge. Using this information, WIRM automatically generates a web application that enables end-users to import, organize, query, and visualize domain data. By following a simple methodology, the system developer may then customize the application for different classes of end user.

STATUS: The five applications described in this article are all running and accessible over the web (see http://mypacs.net, http://digitalanatomist.com, http://radbay.com, and http://wirm.org/brain). WIRM 1.0 was released last year. It is currently undergoing a major rewrite, and it will be released "real soon now" as an object-oriented module, with an improved interface and a more scalable way of reusing web objects. See http://wirm.org.

Outline:


Dissecting Regular Expressions
Jeff Pinyan, Rensselaer Polytechnic Institute
Track: Perl Conference 5
Date: Friday, July 27
Time: 2:30pm - 3:15pm
Location: Grande Ballroom A in the East Tower

Perl's regular expressions, arguably its most powerful and confusing feature, are not terribly easy to decipher, specifically for beginners to the language, and those that aren't familiar with shell tools like sed, awk, and grep. Using the YAPE::Regex module, though, we can parse a regex and break it up into tokens -- and the YAPE::Regex::Explain module can turn these tokens into meaningful text. Y::R::E serves as a teaching tool, showing how a regex functions, with useful reminders of the intricacies of Perl's regexes.


Porting Perl to Make Porting Perl Unnecessary
Gurusamy Sarathy, ActiveState Corporation
Track: Perl Conference 5
Date: Friday, July 27
Time: 3:45pm - 4:30pm
Location: Grande Ballroom A in the East Tower
Download presentation files

There are two common ways to port software to new places. One is to make the software run directly on the hardware of the new place. The other is to make it run on other software that already runs there.

While the first approach has traditionally provided the most efficient execution, Virtual Machine (VM) implementations are now increasingly common. The idea behind a VM is to serve as a uniform, well specified abstraction of the underlying hardware, making it possible for most software to run on top of the VM instead of the real hardware.

The VM approach to language implementation has several advantages. Implementations of different languages can share the same VM, enabling language interoperability. Maintaining languages that target a VM would also be much simpler, since the developers need not be stymied by machine-specific issues. Other benefits include: Just-In-Time compilation; OS-neutrality; not having to worry about issues such as memory allocation; more robust software through automatic code verification and security controls.

A VM can also be viewed as a machine-oriented language, as opposed to languages like Perl which are programmer-oriented. Separating the machine-oriented parts of software from the programmer-oriented parts allows them to be optimized effectively and independently.

Developers currently implement Perl as an informal "virtual machine", but neither the language nor the implementation takes a VM-friendly design approach. Doing so makes it possible to retarget Perl to popular VMs, and allow Perl to benefit from independent advances in VM technology. This talk explores the potential approaches to such a VM-friendly implementation of Perl.


Lightning Talks

Track: Perl Conference 5
Date: Friday, July 27
Time: 3:45pm - 5:15pm
Location: Grande Ballroom C in the East Tower

These 5-minute talks cover a variety of topics related to Perl and Open Source. Sign up for lightning talks at: http://perl.plover.com/lightning-talks.html


How to Write a DBD Driver
Daini Xie Strathy, Munica Corporation
Track: Perl Conference 5
Date: Friday, July 27
Time: 4:30pm - 5:15pm
Location: Grande Ballroom B in the East Tower

Target audience:
DBMS developers, DBI developers and anyone with a curious mind, who is proficient in C and PERL.

What attendees will learn:
Attendees will not only gain in-depth understanding of PERL DBI and its interaction with DBMS through DBD drivers, but also learn how to write DBD drivers for DBMS.

Tutorial outline:


Embedded Testing with Pod::Tests
Michael G. Schwern
Track: Perl Conference 5
Date: Friday, July 27
Time: 4:30pm - 5:15pm
Location: Grande Ballroom A in the East Tower

Its long been known that the closer your documentation is to the code it documents, the more likely it will be kept up to date and the more accurate it will be. Perl has POD for this purpose, allowing us to intermingle docs and code as we please. But what about tests? Shouldn't a test be close to the code it’s testing?

Pod::Tests and the accompanying pod2test squeeze one more feature out of POD by allowing tests to be embedded right next to the code its testing and the documentation its validating! As an added bonus, it’s also possible to test example code in your documentation. And with no performance penalties!

We'll show how this was pulled off, how it is used in concert with traditional tests, how it is made to work *without* Pod::Tests installed, and how it makes the unglamorous job of writing tests a bit more palatable than licking all the bathrooms in Grand Central Station.