giant tits xmovies

Titan Attacks! 1.9
An arcade game where you have to defend the Solar System from Evil Alien Invaders! more>>
Titan Attacks! 1.9 will provide hours of entertainment for everyone. This is designed as an arcade game where you have to defend the Solar System from Evil Alien Invaders!
The Earth is under attack from evil aliens from Titan! Only you can save us all using a hired space ship. Upgrade your ship with bounty money and drive back the Titans across the Solar System, and defeat them on their homeworld.
Titan Attacks has the same easy-to-learn and addictive gameplay of the classic arcade shoot 'em up, but is packed full of extras - new features, new strategies, and stylish neo-retro visuals. Battle swarms of alien fighters, bombers and giant boss motherships, over 5 unique worlds and 100 levels of frantic action! Earn bounty money and upgrade your ship with extra cannon, rockets and lasers!
You can destroy falling wrecks, dodge hurtling asteroids and capture escaping aliens - or blast them from the skies! Win prizes in sharp-shooter challenge stages and compete on the online hiscores table!
Major Features:
- 100 levels of frantic shooter action
- 5 giant boss motherships
- Upgrade your ship with extra cannon, rockets and lasers
- Challenge stages with prizes
- Online hiscore table
Requirements:
- Java 2 Standard Edition Runtime Environment
DropTeam 1.2.2 DEMO
DropTeam is an online multiplayer FPS for Linux. more>>
DropTeam combines accurate physics and ballistic systems, intelligent and realistic unit and weaponry capabilities with fast paced action set in a stark future of humanity. This Public Test is being offered in three different formats. One for Mac, one for Windows and one for Linux. This marks the first title published by Battlefront.com to offer Linux support!
Main features:
- A rich, fleshed out universe complete with a engaging back story and detailed history.
- Realistic combat system that models projectile/armor penetration, various munition types, and interior vehicle damage in detail.
- Huge, detailed and varied alien landscapes each planet accurately modeling its own gravity and atmospheric density, radically changing the tactical situation.
- Map sizes up to a massive 1000 (!) square kilometers.
- Terrain height resolutions from small ridges and vehicle fighting positions to towering hills and mountains.
- Deformable terrain with engineering vehicles digging out trenches in real time, ordnance created surface cratering and even trees toppling over under artillery fire.
- Dynamic environmental effects include building destruction and vehicles exploding and flipping over.
- Support for enhanced graphics effects including advanced shaders and High Dynamic Range rendering.
- Terrain uses dynamic tessellation (continuous Level of Detail) to render high resolution terrain at large sizes.
- Up to 16 human players or more supported, depending on system specs. Maximum online players realistically only limited by game server bandwidth, CPU and RAM.
More background and info on the game can be found on the DropTeam webpage located here.
The purpose of this release is to test DropTeams network functionality with a large number of players. Anyone can play for free in order to help us test DropTeam but this build has the following important restrictions:
1. Single player is disabled. You can only play network games with this release. The full version of the game includes single player skirmish games and a single player campaign.
2. This release only allows you to play 2 scenarios. The full version of the game includes 21 scenarios with more available for free download after release.
3. This is a test release, which means the game isnt finished yet. It definitely still has bugs. We greatly appreciate your help in finding and fixing them all!
Apart from these restrictions, this is a fully functional release. Players can use all of the dozens of vehicles and deployable items in the game. The two included scenarios are "Ice Field" and "Raid". Ice Field takes place on the frozen wasteland of Arcanum, a once-inhabitable planet orbiting Luytens Star that has had its climate devastated by bombardments from the Mu Arae Entente. The Raid scenario takes place on an inhabitable moon called Hopewell. Hopewell orbits a gas giant in the Wolf 9773 star system. Almost half of the moons surface, called "The Scorch", is a radioactive Hell created by the destruction of an antimatter station that used to orbit the gas giant. The remainder of Hopewell has recovered from this disaster and is once again beginning to flourish with vegetation and a growing human population.
This release includes everything needed to connect to servers and play on the Internet or on Local Area Networks on Windows, Linux, and Mac OS X Tiger. It also includes everything needed for players to run their own public or private servers. This is important since there will be a limited number of public servers made available by TBG. We plan to run only 6 servers for this public test release so players might need to run their own servers if they want to play frequently.
GD::SecurityImage 1.61
GD::SecurityImage is a security image (captcha) generator. more>>
SYNOPSIS
use GD::SecurityImage;
# Create a normal image
my $image = GD::SecurityImage->new(width => 80,
height => 30,
lines => 10,
gd_font => giant);
$image->random($your_random_str);
$image->create(normal => rect);
my($image_data, $mime_type, $random_number) = $image->out;
or
# use external ttf font
my $image = GD::SecurityImage->new(width => 100,
height => 40,
lines => 10,
font => "/absolute/path/to/your.ttf",
scramble => 1);
$image->random($your_random_str);
$image->create(ttf => default);
$image->particle;
my($image_data, $mime_type, $random_number) = $image->out;
or you can just say (most of the public methods can be chained)
my($image, $type, $rnd) = GD::SecurityImage->new->random->create->particle->out;
to create a security image with the default settings. But that may not be useful. If you require the module, you must import it:
require GD::SecurityImage;
GD::SecurityImage->import;
The module also supports Image::Magick, but the default interface uses the GD module. To enable Image::Magick support, you must call the module with the use_magick option:
use GD::SecurityImage use_magick => 1;
If you require the module, you must import it:
require GD::SecurityImage;
GD::SecurityImage->import(use_magick => 1);
The module does not export anything actually. But import loads the necessary sub modules. If you don t import, the required modules will not be loaded and probably, youll die().
The (so called) "Security Images" are so popular. Most internet software use these in their registration screens to block robot programs (which may register tons of fake member accounts). Security images are basicaly, graphical CAPTCHAs (Completely Automated Public Turing Test to Tell Computers and Humans Apart). This module gives you a basic interface to create such an image. The final output is the actual graphic data, the mime type of the graphic and the created random string. The module also has some "styles" that are used to create the background (or foreground) of the image.
If you are an Authen::Captcha user, see GD::SecurityImage::AC for migration from Authen::Captcha to GD::SecurityImage.
This module is just an image generator. Not a captcha handler. The validation of the generated graphic is left to your programming taste.
OwnLinkSite 2.1
Database and administration system for adult pictures and text links sites more>> The OwnLinkSite link engine consists of a database and some php-based scripts. By registering (free!), the user gets access to hundreds of thousands of links to adult pick- and video- sites. Free scripts and templates make both design and daily updating a breeze. The system is particularly useful for attracting as many readers as possible. OwnLinkSite.com has a very extensive tutorial explaining how to set up use the system, and how to get a high rating by Google. A lot of tools for generating text link tables and pick tables is available to ease the design process, and it is also possible to copy complete site templates. The categories one may choose text links from are Amateurs, Asians, Ass, Babes, Bald, Big Girls, Big Tits, Blacks, Blowjob, Bondage, Cartoons, Celebrities, Exhibitionists, Fetishes, Fisting, Hairy, Hardcore, Interracial, Latinas, Lesbians, Lingerie, Male, Mature, Mixed, Pregnants, Teens, Toys, Upskirt, Vintage, Voyeur, Watersports. About one third of those categories are also available for video clips.<<less
Mtp Target 1.2.2
Mtp Target is a Monkey Target clone (one of the six mini-games from the video game : Super Monkey Ball). more>>
After rolling your pingoo ball down a giant ramp, your goal is to hit a target as accurately as possible. You can play on Internet or LAN up to 16 players simultaneously.
Mtp Target is entirely under GNU GPL License. Both client and server run under Windows and GNU/Linux.
Glest 2.0
Glest is a project for making a free 3d real-time customizable strategy game. more>>
Current version is fully playable, includes single player game against CPU controlled players, two factions with their corresponding tech trees, units, buildings and some maps.
Main features:
Customize every aspect of the game
- Custom units can be defined using XML files. Its posible to define its basic parameters (hp, mp, armor, sight, requirements and much more), its skills and commands and the 3d models associated with them.
- Custom upgrades can be defined. Its posibble to define how and what units they affect, its requirements and more.
- Custom factions can be defined by grouping a set of units and upgrades.
- Custom resources can be defined.
- Custom tech-trees can be defined by grouping a set of factions and resources.
- Custom tilesets can be defined. Its posible to define the surface textures, object 3d models (such as trees os rocks), ambient sounds and more.
- Maps can be edited with the glest map editor.
Graphics: OpenGL 1.3 graphics
- Heightmap terrain.
- Free camera movement (translation, rotation and zoom).
- Own 3d format that can be exported from 3dsmax using the g3d export plugin.
- Real-time shadows, projected or shadow mapped.
- Keyframe animated 3d models.
- Particle systems for rain, snow, fire and spells.
- Classical 3d effects: transparency, lighting, fog etc...
A.I.: ARTIFICIAL INTELIGENCY
- A* based pathfinding algorithm.
- Basic AI for computer controlled players.
Enhancements:
- New Magic units:Tower of Souls, Golem, Daemon giant, Drake rider
- New Tech units:Aerodrome, Air ballista, Rider, Ornithopter, Airship
- New Magic upgrades
- New Tech upgrades
- New animations for existing units
- Shared vision between allies
- New particle blending
- Players now start on the location indicated in the game settings menu
- Score system
- HTML documentation
- Increased projectile accuracy
- Optimized particle rendering
- Loads of balance changes
Chatbot::Eliza 1.04
Chatbot::Eliza provides a clone of the classic Eliza program. more>>
This module implements the classic Eliza algorithm. The original Eliza program was written by Joseph Weizenbaum and described in the Communications of the ACM in 1966. Eliza is a mock Rogerian psychotherapist. It prompts for user input, and uses a simple transformation algorithm to change user input into a follow-up question. The program is designed to give the appearance of understanding.
This program is a faithful implementation of the program described by Weizenbaum. It uses a simplified script language (devised by Charles Hayden). The content of the script is the same as Weizenbaums.
This module encapsulates the Eliza algorithm in the form of an object. This should make the functionality easy to incorporate in larger programs.
How the script file is parsed
Each line in the script file contains an "entrytype" (key, decomp, synon) and an "entry", separated by a colon. In turn, each "entry" can itself be composed of a "key" and a "value", separated by a space. The parse_script_data() function parses each line out, and splits the "entry" and "entrytype" portion of each line into two variables, $entry and $entrytype.
Next, it uses the string $entrytype to determine what sort of stuff to expect in the $entry variable, if anything, and parses it accordingly. In some cases, there is no second level of key-value pair, so the function does not even bother to isolate or create $key and $value.
$key is always a single word. $value can be null, or one single word, or a string composed of several words, or an array of words.
Based on all these entries and keys and values, the function creates two giant hashes: %decomplist, which holds the decomposition rules for each keyword, and %reasmblist, which holds the reassembly phrases for each decomposition rule. It also creates %keyranks, which holds the ranks for each key.
Six other arrays are created: %reasm_for_memory, %pre, %post, %synon, @initial, and @final.
Enhancements:
- Added a Norwegian script, kindly contributed by Mats Stafseng Einarsen. Thanks Mats!
Ubuntu Center Alpha 1
Ubuntu Center is a web based interface for accessing all kinds of information thats being stored on your computer. more>>
Ubuntu Center accomplishes all of this by integrating PHP software licensed under the GPL license in one giant package suitable for use on a Ubuntu computer. This release adds tons of new features and bug fixes and is suitable for everyday use.
Enhancements:
- A Web-based installer was implemented and an admin area was added.
NEsGUI 0.1.5
NEsGUI is a peer-to-peer file sharing application written by Neill Miller in GTK+ which utilizes the NEshare library. more>>
I started writing NEshare for many reasons. One reason is because I enjoy file sharing with others and I found that there were no true Free Software implementations or designs from the ground up. Thats one of the most important reasons to me personally, but I understand its probably not the reason youre reading this page. Second, I realized that most file sharing implementations that Ive played with simply DO NOT WORK well. The one implementation that worked *extremely* well for all of the time I participated in using it was Napster. As for the GnutellaNet (and the like), I tend to have problems with the decentralized nature. This is vague, I know. Specifically, they require an extraordinary amount of bandwidth as compared to a centralized counterpart such as Napster. They tend to generate a lot of garbage since they are responsible for tying themselves to a number of other nodes, which are likewise tying themselves to you. The *only* benefit that Ive realized with decentralized networks such as the GnutellaNet is the anonyminity involved. At best, you can see what IP address is downloading or uploading while the upload or download is occuring on your system. Beyond that, there is no record or trace of the transaction and does not involve user names which can be stored or screened, passwords which can be broken or stolen, or any form of user messaging or chat which is prone to SPAM or porn advertisments -- like the sad state of (the oldest widespread and possibly least recognized peer-to-peer system) IRC.
Another reason for writing NEshare is to help you realize that you should not be dependent on a corporation to dictate what you can and cant do with file sharing (a la Napster, FastTrack clients, or any other corporate owned network which you may have become attached to). For example, Napster allowed the sharing of digital music files. Where do you go if you are more interested in sharing original digital pieces of art amongst your friends? What about copies of an ever evolving digital document? Thus, I wanted to provide NEshare to you in case Napster or FastTrack or whatever you use suddenly becomes unavailable, or never suited your needs in the first place. Being Free Software, youre free to modify it and improve it under the terms of the GPL. And if you cant write code, call in a favor from a friend!
NEshare takes the best architectural ideas of centralized networks and mixes them with the best ideas of decentralized networks. It allows anonyminity since there is no messaging system, no username, no password and no record of you once youve left the network. It also works in a reliable manner (minus bugs!) because of the centralized nature. The basic method of transaction is similar to the familiar Napster and FastTrack clients. A user connects to an NEshare server and uploads a file list. The user can search and get results back from the server. Once the results are retrieved by the user, the user connects directly to another user for exchanging files. Thats the basic gist of the centralized approach, however the NEshare architecture is flexible and can work in a decentralized manner with relatively little modification if the benefits become more apparent.
One of the biggest advantages of a purely decentralized network (aside from the anonyminity aspect) is the fact that there is no central server which all users must rely on. In the world today, we see the prevention and the hindering of new technologies because big businesses fear to compete. This is wrong. Decentralized networks address this by not allowing a single entity to have complete control over a system. Thus, although threats can be made, they cannot be enforced against all users of a decentralized network. Contrast this with some centralized models - where a corporation takes control of an entire system. They are only pitting themselves against the giants and unfortunately they probably cannot win since (in recent U.S. history at least), Corporations (with cash) suppress our rights (Constitutional, fair rights, whatever) and dont ever look back. Look at the recent headlines regarding the RIAA and Hollywoods general reaction to Napster and other file sharing services. Everyone pounced on Napster and Napster did not survive. Sure, the company may still have a vision for itself, but everything that you and I enjoyed about the service is gone. The vision weve created for it is gone. I havent used Napster since late 2000.
Im not advocating using this software for actions which are questionably legal. Im providing this software for educational reasons because I believe that there is a lot to learn about networking applications and weve only seen the tip of the iceberg. This software has many legitimate uses such as online collaboration on any number of projects, sharing original works or documents, browsing which new Free Software packages are available amongst your peers, learning how a multi-threaded server works, learning how to use sockets, seeing an example of how a network protocol can be written from scratch, congesting your local network for bandwidth experiments and measurements, etc. The uses are endless. And the uses are legitimate. This software may help other to find something new. This software may *be* something new to others. Whatever the case, its all about vision.
By designing a Free Software implementation of a peer-to-peer protocol, Im offering it to you to suit your vision. I dont want to see one central server out there that everyone connects to for whatever use. I want to see the decentralization of the centralized model. I want to see something like what happened to the webserver to happen to NEshare. Each person that is interested in this kind of project should run and manage their own server for their own intranet. Choices are good. Although NEshare is centralized right now (like a webserver) -- wouldnt it be a horrible thing if all information on the web was hosted on the same server? This is what Napster tried to acomplish. They took the centralized server a little too far to prevent people like you and me from having our own visions and creative uses for the technology. NEshare should work differently. For example, if you look at streaming radio servers -- these are central servers all over the place which have several central resources (i.e. webpages) which tell you about which ones are available and their current status. This feature is planned for NEshare, although the first release of the server will have to be tracked manually if youd like to advertise your server to others.
Id like to add that I do believe that decentralized networks inherently have some cool ideas behind them, so I did not exclude the possibility of NEshare working in a fully decentralized manner. The first version that Im working on will be only centralized, but decentralization is an option since it should not prove to be too difficult given the architecture. However, since in my experience the fully decentralized network tends to have more issues than benefits, I would like to keep NEshare centralized. Again, a decentralization of the centralized model would be ideal.
The other major design goal of NEshare is to make it a toolkit. What I mean by this is that currently, there is a client library which can readily be dropped into an application of any kind. This means that for developers who are working on applications, if peer-to-peer file sharing would be useful, it can be easily used under the terms of the GPL inside of their own applications. This also makes for a more lightweight graphical user interface, since the bulk of the work is inside the client library. In order for all of NEshare to work in a purely decentralized manner, the work of the server must be integrated into the client library and a few new messages will need to be developed so that it can act as a servent. The architecture is rather flexible, and this will remain a design goal moving forward.
Needless to say this takes a lot of work. Im a single hacker at best and Ive been working on this project in free time since the summer of 2001. I can only do so much, and Im limited by my imagination and programming skills. Thats why I need your help. So far, my work consists of designing the networking protocol capable of accomplishing file sharing in a peer to peer manner, implementing this protocol in code, testing the code, improving the code, etc. I cant do this by myself (although unfortunately so far I have been and will continue to if no one volunteers). I would appreciate help in the areas of testing, documentation, and of course good old fashioned hacking. If this project sounds interesting to you, feel free to contact me.
Enhancements:
- Code now honors the std namespace so that its gcc-3.x compatible
- Fixed some event handling that caused erroneous message boxes to appear
- Better unexpected peer disconnection handling
- Added proper ChangeLog entries
TagReport 0.3
TagReport is a nifty little project Ive been working on which is mostly a giant C++ exploration exercise. more>>
Currently it supports 4 libraries with which it can process audio files; libFLAC for FLAC files, libvorbisfile for Ogg Vorbis audio, libid3tag for MP3 audio, and TagLib, an all-in-one library that supports both Ogg Vorbis and MP3 reading.
Enhancements:
- Many many many new things, hence the version leap
- FLAC support: started with forking metaflac, now uses libFLAC
- Support for using libvorbisfile and libid3tag to process MP3s when TagLib is not available
- Piles of code cleanups
- Fix a giant configure bug involving when we search for where the preprocessor is
- Add a man page in SGML. Should not have to be built by normal users, though.
- Move all tag/comment-retrieving code to ftfuncs.{cc,h}
- Move all HTML-related code to html.cc
Ultratron 1.5
Ultratron is an arcade game where you have to destroy the four evil robots of the Apocalypse! more>>
The last human has been slain by evil killer robots. You are the one remaining humanoid battle droid. Your mission is to avenge the human race, and destroy the four bots of the Apocalypse - Ieiunitas, Bellum, Lues and Letum!
Power up your droid with ever more powerful weaponry as you blast your way through the levels, avoiding Chasers, Turrets, Spawners, Minelayers, bombs, and bullets!
Main features:
- 70+ different robots to destroy
- 40+ levels of frantic shooter action
- 4 giant boss robots
- 10 powerups
- Bonus stages
- Online hiscore table
Search::ContextGraph 0.15
Search::ContextGraph is a Perl module for spreading activation search engine. more>>
SYNOPSIS
use Search::ContextGraph;
my $cg = Search::ContextGraph->new();
# first you add some documents, perhaps all at once...
my %docs = (
first => [ elephant, snake ],
second => [ camel, pony ],
third => { snake => 2, constrictor => 1 },
);
$cg->bulk_add( %docs );
# or in a loop...
foreach my $title ( keys %docs ) {
$cg->add( $title, $docs{$title} );
}
# or from a file...
my $cg = Search::ContextGraph->load_from_dir( "./myfiles" );
# you can store a graph object for later use
$cg->store( "stored.cng" );
# and retrieve it later...
my $cg = ContextGraph->retrieve( "stored.cng" );
# SEARCHING
# the easiest way
my @ranked_docs = $cg->simple_search( peanuts );
# get back both related terms and docs for more power
my ( $docs, $words ) = $cg->search(snake);
# you can use a document as your query
my ( $docs, $words ) = $cg->find_similar(First Document);
# Or you can query on a combination of things
my ( $docs, $words ) =
$cg->mixed_search( { docs => [ First Document ],
terms => [ snake, pony ]
);
# Print out result set of returned documents
foreach my $k ( sort { $docs->{$b} $docs->{$a} }
keys %{ $docs } ) {
print "Document $k had relevance ", $docs->{$k}, "n";
}
# Reload it
my $new = Search::ContextGraph->retrieve( "filename" );
Spreading activation is a neat technique for building search engines that return accurate results for a query even when there is no exact keyword match. The engine works by building a data structure called a context graph, which is a giant network of document and term nodes. All document nodes are connected to the terms that occur in that document; similarly, every term node is connected to all of the document nodes that term occurs in. We search the graph by starting at a query node and distributing a set amount of energy to its neighbor nodes. Then we recurse, diminishing the energy at each stage, until this spreading energy falls below a given threshold. Each node keeps track of accumulated energy, and this serves as our measure of relevance.
This means that documents that have many words in common will appear similar to the search engine. Likewise, words that occur together in many documents will be perceived as semantically related. Especially with larger, coherent document collections, the search engine can be quite effective at recognizing synonyms and finding useful relationships between documents. You can read a full description of the algorithm at http://www.nitle.org/papers/Contextual_Network_Graphs.pdf.
The search engine gives expanded recall (relevant results even when there is no keyword match) without incurring the kind of computational and patent issues posed by latent semantic indexing (LSI). The technique used here was originally described in a 1981 dissertation by Scott Preece.
Pentagram 20070522
Pentagram projects goal is to create an Ultima VIII engine. more>>
Pentagram is a game engine for running Ultima VIII on modern operating systems. Since a modified version of the Ultima VIII engine also powered the two Crusader games (Crusader: No Remorse and Crusader: No Regret) the teams ultimate goal is to be able to run those two as well.
For those not familiar with the game: you are playing the role of the Avatar who already several times saved the worlds from evil forces in Ultima I-VII, but now you are thrown into the unknown world, which is already destroyed by those forces and you should explore it and find out the way to defeat the evil yet another time.
On your way you will find many friends and foes including undead creatures, giant spiders and trolls, talk to local people and solve many mysteries and puzzles.
MySQL Squid Access Report 2.1.2
MySQL Squid Access Report, mysar for short, is a reporting system for user web traffic activity, as logged from a squid proxy. more>>
MySAR consists of two parts:
- Command line utilities which import a squid log file in a MySQL database and maintain the databas.
- A web interface for accessing the reports.
Main features:
- Free. Licenced under the GPL, mysar is free for everyone to use.
- Dynamic. Forget about static reports that take ages to generate, hogging the systems CPU. Mysar is is the only squid reporting system with a database as its backend.
- Almost realtime. No longer do you have to wait for the next hour or day for the reports to be generated. All of the user activity is available to you when you want it. NOW.
- Portable. Written in pure PHP, mysar is available to any unix-based OS platform PHP supports, without any modification.
- Flexible. Since the code is open-source, you can customize it to your needs. Create you own reports as you see fit.
- Supported. Mysar project has a mailing-list, forum and an active maintainer.
- Stable. Utilizing mature and stable software like Smarty, MySQL and PHP, mysar is standing on the shoulders of giants.
- Easy. With a foolproof installation and a user-friendly web interface, mysar makes web traffic reporting easier than ever.
- Customizable. Mysar neednt be on the same server as squid or MySQL. If your load is too high, just load-balance your processes as you see fit.
Enhancements:
- This version added 64-bit support for the binary importer.
Module::Install::Philosophy 0.67
Module::Install::Philosophy Perl module contains the concepts behind Module::Install. more>>
SYNOPSIS
This document describes the personal philosophy behind the creation of CPAN::MakeMaker (the predecessor of Module::Install). The views expressed here belong to Brian Ingerson; if they are not of interest to you, you can safely ignore this document.
The above is obviously a mutation of the monumental speech by great Martin Luther King (http://web66.coled.umn.edu/new/MLK/MLK.html). While the contexts are vastly different, I feel that there are some serious parallelisms.
The CPAN has become a place that is not free of injustice. This situation has arisen not out of directed oppression, but from a failure of our community to keep its tools sharp. It is the culmination of many small decisions made in the name of practicality. This is a sad state for an institution that was created to allow all interested people to contribute equally to the best of their ability.
This assertion is rooted in my personal experience as an author. When I created my first Perl module, Inline.pm, I knew that I had done something important. But how was I to make a dent in vast Perl community?
As a complete unknown in the Perl community, my voice did not travel far. I repeatedly tried to get even an acknowledgment from the gurus familiar with XS. No success. I resorted to sending messages with ridiculous subjects to modules@perl.org. (http://www.xray.mpe.mpg.de/mailing-lists/modules/2000-08/msg00078.html) No response. Through sheer determination and shameless self-promotion I eventually got the word out, and I hope the world is a slightly better place for it.
Since then, Inline has won awards and I have had the privilege to meet almost all of Perls finest. But I still remember the pain of starting out, and want to help invite more people into this wonderful world.
One thing I have learned from experience is that the Perl community (and throw in the Python and Ruby people as well) is a small drop in the vast ocean of programming. Its a giant pot of Java out there; and a sea of C. Perl may not be the biggest fish, but with some care and cunning we could become a much bigger school.
These are the current problems that I see with CPAN and the core modules:
New Modules dont help Older Perls
If I were to guess what percent of all Perl5 installations were at the current release level (5.8.0 in October 2002) I would say 3-5%. That may even be generous. Id say that over 40% of installations might still be at 5.005 or earlier.
The biggest problem with adding a module to the core is that it only helps a small subset of Perl users for a long long time. Worse yet, a good module author will still probably avoid using the core additions as prerequisites, because they want their new module to work as well on 5.005 as on 5.8.
CPAN::MakeMaker should be able to help in this regard. For example, instead of putting Inline.pm into the core for 5.9, I can now effectively get it into the core for every version of Perl that Inline supports.
Author Exclusiveness
Not just anybody can get a module into the core. It seems you have to know people in high places. If I were a brilliant new talent with a great new module, it would have a harder time getting the ear of the pumpking, then if I were, say, Damian Conway. In fact, I probably wouldnt even know where to start.
Reduced Competition
One comment Ive heard from some very good Perl programmers is "Everything important has already been done". Their feeling is that even though a module is suboptimal, it would be a waste of time to write a competing module. Who would use it instead of the one already in the core?
When I write a competing module, I know that I have to make it at least twice as good as the existing one to even get noticed. Thats not a bad thing, but should everybody be forced into that situation?
For example, lets say that you have created a really useful CGI script. Lets also say that it makes use of your own CGI::Special module, because CGI.pm doesnt meet your needs. Even though your script might be generally useful and worth sharing, the fact that it requires a non-standard module can only negatively affect its acceptance. Trying to get general acceptance for the superior CGI::Special module will be harder still.
Core modules are assumed by the general public to be "Best of Breed". While this may be true for some modules at some point in time, it keeps talented people from attempting to "breed" something better.
Core Bloat
Every time we add a module to the core it gets bigger and bigger. And we cant ever remove modules from the core, once theyve been added.
If I had my druthers, wed remove all modules from the core that werent necessary for either running Perl or installing modules. Of course, wed need to set things up so that installing modules was so easy, that it could be done on the fly if necessary. Is this easily accomplishable? Nope. Is it impossible? Nope. We have the best language in the world to help us do it!
Maintenance Bitrot
Believe it or not, Perl authors can sometimes acquire a "Life Beyond Perl". They get families or new hobbies or even hit by a bus. (This would be a "Death Beyond Perl".) The fact is, that once somebody writes a piece of code and shares it with the world, they are expected to maintain it for all time.
That is being generous. There are others that think that once their module has become popular or made it into the core, they dont need to keep fixing and improving it. I have personally been guilty of this sin.
And then theres the Damian Conway Effect. This plagues the exceptional authors who are so innovative and prolific they simply dont have time to maintain everything they have written.
I initially formalized these opinions at the YAPC (Yet Another Perl Conference) in June 2001. Since then I have been trying to think of technological solutions to fix these social problems.
One idea was dubbed NAPC. NAPC is CPAN backwards. It is a large system of precompiled modules that can be installed on the fly, with the goal of reducing the number of modules in the core. NAPC hasnt got started yet. Id still like to do it someday, but its a big problem with a lot of issues.
CPAN::MakeMaker (and now Module::Install) on the other hand, is simple and ultimately flexible. It should work with all of the existing CPAN processes without requiring any changes from them. And new features can be continuously added. Even though it doesnt scratch all of my philosophical CPAN itches, its a good start.
- Page: 1 of 2
- 1
- 2