psycopg2 is a PostgreSQL database adapter for the Python programming language.
It was written from scratch with the aim of being small, fast and stable. It
supports the full Python DBAPI-2.0 and is thread safe.
psycopg2 is different from the other database adapter because it was designed
for heavily multi-threaded applications that create and destroy lots of cursors
and make a conspicuous number of concurrent INSERTs or UPDATEs. Every open
Python connection keeps a pool of real (UNIX or TCP/IP) connections to the
database. Every time a new cursor is created, a new connection does not need to
be opened; instead one of the unused connections from the pool is used. That
makes psycopg very fast in typical client-server applications that create a
servicing thread every time a client request arrives.
R.V. Guha's rdfDB. Intended to be a simple, scalable, open-source
database for RDF. Written in C and based on top of the Sleepycat
Berkeley Database, it supports interrogation via TCP/IP sockets,
meaning integration is possible with any programming language.
rdfDB uses a high level SQLish query language. The data is modelled as
a directed labelled graph (RDF).
The goals of this project are to build a database that is capable of:
1. Supporting a graph oriented API via a textual query language ala
SQL.
2. Load/Reload an RDF file from a url into the database
3. Scalable to millions of nodes and triples.
4. Provide support for RDF Schemas.
5. Provide support for some basic forms of inferencing.
6. Provide both C and Perl access to the database.
7. The Perl philosophy applies : Simple things should be simple and
complex things should be possible.
While teaching a data structures course at University of California,
Irvine, I developed a program called GPERF that generates perfect hash
functions for sets of key words. A perfect hash function is simply:
A hash function and a data structure that allows
recognition of a key word in a set of words using
exactly 1 probe into the data structure.
The gperf.texinfo file explains how the program works, the form of the
input, what options are available, and hints on choosing the best
options for particular key word sets. The texinfo file is readable
both via the GNU emacs `info' command, and is also suitable for
typesetting with TeX.
The enclosed Makefile creates the executable program ``gperf'' and
also runs some tests.
Output from the GPERF program is used to recognize reserved words in
the GNU C, GNU C++, and GNU Pascal compilers, as well as with the GNU
indent program.
LICENSE: GPL2 or later
QB stands for Quick Binary. It's a PHP extension designed to enable faster
handling of binary data. It takes a function written in PHP and translate it
for a specialized virtual machine. The use of static type information leads
significantly higher performance than under PHP regular dynamic type system.
A PHP+QB function can run anywhere from five to twenty times faster than
regular PHP code. For even higher level of performance, one can compile PHP+QB
functions to native code (on supported platforms).
QB performs code translation on a per-function basis. It does not affect in
anyway code not specially marked. Interaction between PHP+QB functions and
regular PHP code is basically seamless. A key design objective of QB is to
let developers harness greater processing power than what baseline PHP offers
without the risk involved in adopting a brand new platform.
The Lemon program is an LALR(1) parser generator. It takes a context free
grammar and converts it into a subroutine that will parse a file using that
grammar.
Lemon is similar to much more famous programs Yacc and Bison. But lemon is
not compatible with either of them; there are several important differences:
- Lemon using a different grammar syntax which is less prone to
programming errors
- Lemon generates a parser that is faster than Yacc or Bison parsers
(according to the author)
- The parser generated by Lemon is both re-entrant and thread-safe
- Lemon includes the concept of a non-terminal destructor, which makes
it much easier to write a parser that does not leak memory
The libevent API provides a mechanism to execute a callback function when
a specific event occurs on a file descriptor or after a timeout has been
reached. Furthermore, libevent also support callbacks due to signals or
regular timeouts.
libevent is meant to replace the event loop found in event driven network
servers. An application just needs to call event_dispatch() and then add
or remove events dynamically without having to change the event loop.
Currently, libevent supports /dev/poll, kqueue(2), event ports, select(2),
poll(2) and epoll(4). The internal event mechanism is completely independent
of the exposed event API, and a simple update of libevent can provide new
functionality without having to redesign the applications. As a result,
Libevent allows for portable application development and provides the most
scalable event notification mechanism available on an operating system.
Libevent can also be used for multi-threaded applications.
The App::Cache module lets an application cache data locally. There are a
few times an application would need to cache data: when it is retrieving
information from the network or when it has to complete a large
calculation.
For example, the Parse::BACKPAN::Packages module downloads a file off the
net and parses it, creating a data structure. Only then can it actually
provide any useful information for the programmer.
Parse::BACKPAN::Packages uses App::Cache to cache both the file download
and data structures, providing much faster use when the data is cached.
This module stores data in the home directory of the user, in a dot
directory. For example, the Parse::BACKPAN::Packages cache is actually
stored underneath "~/.parse_backpan_packages/cache/". This is so that
permissions are not a problem - it is a per-user, per-application cache.
This module allow the user to dump variables in a Data::Dumper format.
Unlike the default behavior of Data::Dumper, the variables are named
(instead of $VAR1, $VAR2, etc.) Data::Dumper provides an extended
interface that allows the programmer to name the variables, but this
interface requires a lot of typing and is prone to tyops (sic). This
module fixes that.
Data::Dumper::Simple is actually a source filter that replaces all
instances of Dumper($some, @args) in your code with a call to
Data::Dumper->Dump(). You can use the one function provided to make
dumping variables for debugging a trivial task.
Note that this is primarily a debugging tool. Data::Dumper offers a
bit more than that, so don't expect this module to be more than it is.
The Digest::TransformPath module implements the TransformPath concept.
A TransformPath is a complex higher-order key that is designed for use
with chains of functions that sequentially transform a piece of data.
The concept starts with a sizable chunk of data, for example an image,
for which we can determine a unique identifier, and for which we can
cheaply determine if and when the source material has changed. A series
of resource-intensive transforms might be applied to this original data
to produce another piece of data. In the image example, we might auto-level,
crop, scale, rotate, colour-balance and then thumbnail the image. This
transformed data would be put into a cache. If at some future point
we wish to obtain the same image, but would preferably like to use the
cached version, we would have to take the original image, reapply the
transforms, and then compare to the result the first time around.
Further documentation is found within the module.
Time::Format provides a very easy way to format dates and times. The
formatting functions are tied to hash variables, so they can be used
inside strings as well as in ordinary expressions. The formatting
codes used are meant to be easy to remember, use, and read. They
follow a simple, consistent pattern. If I've done my job right, once
you learn the codes, you should never have to refer to the
documentation again.
A quick-reference page is included, just in case. ;-)
Time::Format can also format DateTime objects, and strings created
with Date::Manip.
Also provided is a tied-hash interface to POSIX::strftime and
Date::Manip::UnixDate.
If the I18N::Langinfo module is available, Time::Format provides
weekday and month names in a language appropriate for your locale.
A companion module, Time::Format_XS, is also available; if it is
installed, Time::Format will detect and use it, which will result in a
significant speed improvement.