Typical buffer-based incremental I/O is based around a single loop,
which reads data from some source (such as a socket or file), transforms
it, and generates one or more outputs (such as a line count, HTTP
responses, or modified file). Although efficient and safe, these loops are
all single-purpose; it is difficult or impossible to compose
buffer-based processing loops.
Haskell's concept of "lazy I/O" allows pure code to operate on data from an
external source. However, lazy I/O has several shortcomings. Most notably,
resources such as memory and file handles can be retained for arbitrarily
long periods of time, causing unpredictable performance and error conditions.
Enumerators are an efficient, predictable, and safe alternative to lazy
I/O. Discovered by Oleg Kiselyov, they allow large datasets to be processed
in near constant space by pure code. Although somewhat more complex
to write, using enumerators instead of lazy I/O produces more correct
programs.
This library contains an enumerator implementation for Haskell, designed to
be both simple and efficient.
log4net is a tool to help the programmer output log statements to a variety of
output targets. In case of problems with an application, it is helpful to
enable logging so that the problem can be located. With log4net it is possible
to enable logging at runtime without modifying the application binary. The
log4net package is designed so that log statements can remain in shipped code
without incurring a high performance cost. It follows that the speed of logging
(or rather not logging) is crucial.
At the same time, log output can be so voluminous that it quickly becomes
overwhelming. One of the distinctive features of log4net is the notion of
hierarchical loggers. Using these loggers it is possible to selectively control
which log statements are output at arbitrary granularity.
log4net is designed with two distinct goals in mind: speed and flexibility.
Features:
* Support for multiple frameworks
* Output to multiple logging targets
* Hierarchical logging architecture
* XML Configuration
* Dynamic Configuration
* Logging Context
* Proven architecture
* Modular and extensible design
* High performance with flexibility
Pidl is an IDL compiler written in Perl that aims to be somewhat
compatible with the midl compiler. IDL stands for "Interface Definition
Language".
Pidl can generate stubs for DCE/RPC server code, DCE/RPC client code and
ethereal dissectors for DCE/RPC traffic.
IDL compilers like pidl take a description of an interface as their
input and use it to generate C (though support for other languages may
be added later) code that can use these interfaces, pretty print data
sent using these interfaces, or even generate ethereal dissectors that
can parse data sent over the wire by these interfaces.
Pidl takes IDL files in the same format as is used by midl, converts it
to a .pidl file (which contains pidl's internal representation of the
interface) and can then generate whatever output you need. .pidl files
should be used for debugging purposes only. Write your interface
definitions in .idl format.
The goal of pidl is to implement a IDL compiler that can be used while
developing the RPC subsystem in Samba (for both marshalling/unmarshalling
and debugging purposes).
Pegex is an Acmeist parser framework. It allows you to easily create parsers
that will work equivalently in lots of programming languages! The inspiration
for Pegex comes from the parsing engine upon which the postmodern programming
language Perl 6 is based on. Pegex brings this beauty to the other justmodern
languages that have a normal regular expression engine available.
Pegex gets it name by combining Parsing Expression Grammars (PEG), with Regular
Expessions (Regex). That's actually what Pegex does.
PEG is the cool new way to elegantly specify recursive descent grammars. The
Perl 6 language is defined in terms of a self modifying PEG language called Perl
6 Rules. Regexes are familiar to programmers of most modern programming
languages. Pegex defines a simple PEG syntax, where all the terminals are
regexes. This means that Pegex can be quite fast and powerful.
Pegex attempts to be the simplest way to define new (or old) Domain Specific
Languages (DSLs) that need to be used in several programming languages and
environments. Things like JSON, YAML, Markdown etc. It also great for writing
parsers/compilers that only need to work in one language.
Struct::Dumb creates record-like structure types, similar to the struct keyword
in C, C++ or C#, or Record in Pascal. An invocation of this module will create a
construction function which returns new object references with the given field
values. These references all respond to lvalue methods that access or modify the
values stored.
It's specifically and intentionally not meant to be an object class. You cannot
subclass it. You cannot provide additional methods. You cannot apply roles or
mixins or metaclasses or traits or antlers or whatever else is in fashion this
week.
On the other hand, it is tiny, creates cheap lightweight array-backed
structures, uses nothing outside of core. It's intended simply to be a slightly
nicer way to store data structures, where otherwise you might be tempted to
abuse a hash, complete with the risk of typoing key names. The constructor will
croak if passed the wrong number of arguments, as will attempts to refer to
fields that don't exist.
HTML_Template_Sigma implements Integrated Templates API designed by Ulf Wendel.
Features:
* Nested blocks. Nesting is controlled by the engine.
* Ability to include files from within template: <!-- INCLUDE -->
* Automatic removal of empty blocks and unknown variables
(methods to manually tweak/override this are also available)
* Methods for runtime addition and replacement of blocks in templates
* Ability to insert simple function calls into templates:
func_uppercase('Hello world!') and to define callback functions for these
* 'Compiled' templates: the engine has to parse a template file using regular
expressions to find all the blocks and variable placeholders.
This is a very "expensive" operation and is an overkill to do on every page
request: templates seldom change on production websites.
Thus this feature: an internal representation of the template structure is
saved into a file and this file gets loaded instead of the source one on
subsequent requests (unless the source changes)
* PHPUnit-based tests to define correct behaviour
* Usage examples for most of the features are available, look in the docs/
directory
PTypes is a C++ Portable Types Library. It offers the following features:
* Threads and synchronization objects along with message queues solve
the vital problem of diversity of the threading API's on different
platforms.
* IP socket classes and utilities provide complete IP-based framework
for both client-side and server-side programming. They can be
combined with PTypes multithreading.
* Dynamic strings, variants, character sets, date/time type and various
kinds of dynamic and associative arrays: Delphi programmers will find
them very similar to the ones in their favorite language.
* Streaming interfaces provide buffered I/O with simple and powerful text
parsing methods. A strictly defined syntax for the given text format
or a formal language can be represented by calls to PTypes token
extraction methods. The unified streaming interface is applicable to
files, named pipes and network sockets.
* Special thread class with enhanced functionality called unit. Units have
their own main() and input/output 'plugs'; they can be connected to each
other within one application to form pipes, like processes in the Unix shell.
* Finally, everything above is portable: all platform-dependent details
are hidden inside.
The BuildBot is a system to automate the compile/test cycle required by most
software projects to validate code changes. By automatically rebuilding and
testing the tree each time something has changed, build problems are
pinpointed quickly, before other developers are inconvenienced by the
failure. The guilty developer can be identified and harassed without human
intervention. By running the builds on a variety of platforms, developers who
do not have the facilities to test their changes everywhere before checkin will
at least know shortly afterwards whether they have broken the build or not.
Warning counts, lint checks, image size, compile time, and other build
parameters can be tracked over time, are more visible, and are therefore
easier to improve.
The overall goal is to reduce tree breakage and provide a platform to run tests
or code-quality checks that are too annoying or pedantic for any human to waste
their time with. Developers get immediate (and potentially public) feedback
about their changes, encouraging them to be more careful about testing before
checkin.
For more information, please see: http://buildbot.net/trac
The Freedroid RPG is an extension/modification of the classical Freedroid
engine into an RPG. The main differences to the classical version are as
follows:
* The Tux is the main character of the rpg.
* The game uses isometric viewpoint and animated pre-rendered 3d character
models for all characters inside the game.
* Dialogs and chatting with friendly droids and humans:
Multiple-choice menus and voice samples (with subtitles for those
without sound).
* There is an item and inventory system that is modeled after some
popular standards of the industry :)
* An automap feature was added. (this is currently a bit unmaintained
since part of the code needs to be re-written for proper OpenGL
support in the automap display)
* Saving and loading of games.
* Shops to trade things and skills to learn.
* Controls are different: Mouse is the input method of choice.
* This is a graphically intense game. Therefore the archive size is
comparably *huge* and not suitable for modem downloads with a dialup
connection.
GtkRadiant is a level design program developed by id Software and Loki
Software. It is used to create maps for a number of computer games.
GtkRadiant originated as Q3Radiant, the Quake III Arena level design tool,
which was a Windows-only application. Two major things are different in
GtkRadiant: it is based on the GTK+ toolkit, so it also works in Linux and Mac
OS X, and it's also game engine-independent, with functionality for new games
added as game packs.
GtkRadiant is an Open Source application. Source code is publicly available
from id Software's Subversion repository and new additions to the code are
covered under open source licenses. The core Q3Radiant code, however, was
originally under id Software's proprietary license. The license for both the
editor and toolset (notably Q3Map2, the BSP compiler) was changed in February
2006, and publicly released under the GPL on February 17.
More up-to-date fork, NetRadiant, is available as `games/netradiant' port.