This module implements a memory-efficient node type (for trees, skip lists
and similar data structures) for Perl.
You may ask "Why bother implementing an ordered structure such as a tree
when Perl has hashes built-in?" Since Perl is optimized for speed over
memory usage, hashes (and lists) use a lot of memory.
So the purpose of this package is to provide a simple low-level Node class
which can be used as a base class to implement various kinds of tree
structures. Each node has a key/value pair and a variable number of
"children" pointers.
How nodes are organized or the algorithm used to organize them is for you
to implement.
There is no Pure-perl version because this package was written to overcome
limitations of Perl.
A lightweight LLVM python binding for writing JIT compilers
The old llvmpy binding exposes a lot of LLVM APIs but the mapping
of C++-style memory management to Python is error prone. Numba and
many JIT compilers do not need a full LLVM API. Only the IR builder,
optimizer, and JIT compiler APIs are necessary.
llvmlite is a project originally tailored for Numba's needs, using
the following approach:
- A small C wrapper around the parts of the LLVM C++ API we need
that are not already exposed by the LLVM C API.
- A ctypes Python wrapper around the C API.
- A pure Python implementation of the subset of the LLVM IR builder
that we need for Numba.
PyBison is a Python binding to the Bison (yacc) and Flex (lex)
parser-generator utilities.
It allows parsers to be quickly and easily developed as Python class
declarations, and for these parsers to take advantage of the fast and
powerful C-based Bison/Flex.
Users write a subclass of a basic Parser object, containing a set of methods
and attributes specifying the grammar and lexical analysis rules, and taking
callbacks for providing parser input, and receiving parser target events.
Features
* Runs at near the speed of C-based parsers, due to direct hooks into
bison-generated C code
* Full LALR(1) grammar support
* Includes a utility to convert your legacy grammar (.y) and scanner (.l)
scripts into python modules compatible with PyBison
* Easy to understand - the walkthrough and the examples will have you
writing your own parsers in minutes
* Comfortable and intuitive callback mechanisms
* Can export parse tree to XML with a simple method call
* Can reconstitute a parse tree from XML
A "public suffix" is a domain name under which Internet users can directly
register own names.
Browsers and other web clients can use it to
- avoid privacy-leaking "supercookies"
- avoid privacy-leaking "super domain" certificates [1]
- domain highlighting parts of the domain in a user interface
- sorting domain lists by site
Libpsl...
- has built-in PSL data for fast access
- allows to load PSL data from files
- checks if a given domain is a "public suffix"
- provides immediate cookie domain verification
- finds the longest public part of a given domain
- finds the shortest private part of a given domain
- works with international domains (UTF-8 and IDNA2008 Punycode)
- is thread-safe
- handles IDNA2008 UTS#46 (libicu is used by psl2c if installed)
[1] http://lists.gnu.org/archive/html/bug-wget/2014-03/msg00093.html
Mozilla::PublicSuffix provides a single function that returns the public suffix
of a domain name by referencing a parsed copy of Mozilla's Public Suffix List.
From the official website at http://publicsuffix.org:
A "public suffix" is one under which Internet users can directly register names.
Some examples of public suffixes are .com, .co.uk and pvt.k12.wy.us. The Public
Suffix List is a list of all known public suffixes.
A copy of the official list is bundled with the distribution. As the official
list continues to be updated, the bundled copy will inevitably fall out of date.
Therefore, if the bundled copy of found to be over thirty days old, this
distribution's installer provides the option to check for a new version of the
list and download/use it if one is found.
bluemoon - Blue Moon card solitaire
This 52-card solitaire starts with the entire deck shuffled and
dealt out in four rows. The aces are then moved to the left end of
the layout, making 4 initial free spaces. You may move to a space
only the card that matches the left neighbor in suit, and is one
greater in rank. Kings are high, so no cards may be placed to their
right (they create dead spaces).
When no moves can be made, cards still out of sequence are reshuffled
and dealt face up after the ends of the partial sequences, leaving
a card space after each sequence, so that each row looks like a
partial sequence followed by a space, followed by enough cards to
make a row of 14. A moment's reflection will show that this game
cannot take more than 13 deals. A good score is 1-3 deals, 4-7 is
average, 8 or more is poor.
KnightCap is a chess program.
The principal differences between KnightCap and other chess programs
are:
- KnightCap has an optional fully rendered 3D interface, giving a feel much
more like an "over the board" game.
- KnightCap was developed to run on a parallel distributed memory
machine, although it also runs on normal Unix boxes.
- KnightCap does not have an opening book---instead it keeps a file
(brain.dat) of losing moves and inserts them in the hash table at the
start of each search. At present it has about 1500 entries, and
this makes it a pretty competitive opening player.
- KnightCap learns the parameters of its evaluation function as it
plays. The most dramatic example of how this helps is an experiment
we conducted on FICS in which KnightCap learnt from a 1650 player
to a 2100 player in just 300 games. See
http://cs.anu.edu.au/people/Lex.Weaver/pub_sem/publications/knightcap.pdf
for more info on its learning algorithm.
ACM is a LAN-oriented, multiplayer aerial combat simulation. My main
design objective was to provide source code that could be easily
compiled and executed on a wide variety of platforms. To that end,
acm is written entirely in C, exploiting the programming features of
Unix, X11, and the BSD socket interface.
Players engage in air to air combat against one another using heat
seeking missiles and cannons.
ACM is implemented as two programs. The first, named "acm", is a small
program that, when invoked, starts a flight session on a given
workstation. The second component, named "acms", is a server process
that manages the multiplayer environment. It also manages the flight
simulation and display management that is required. Most players will
prefer to run the acms process on a back-end server system on their
local area network. Players at client workstations can then invoke the
acm program to begin play.
Mah jongg is an ancient Chinese game whose origins are supposed to date
back around 3000 years. It is typically a four player game with
similarities to most popular card games. This version is a solitaire
game using the mahjongg tiles. It was inspired by a version originally
seen on a PC.
The object of the game is to remove all the tiles from the board in
matching pairs. Tiles match only if they are identical. Exceptions are
the flower and season tiles. Any season tile will match any other season
tile and any flower tile will match any other flower tile. Tiles may be
removed from the board only if they have either a left or a right edge
open and they do not have a tile covering them.
Open Inventor(TM) is an object-oriented 3D toolkit offering a comprehensive
solution to interactive graphics programming problems. It presents a
programming model based on a 3D scene database that dramatically simplifies
graphics programming. It includes a rich set of objects such as cubes,
polygons, text, materials, cameras, lights, trackballs, handle boxes,
3D viewers, and editors that speed up your programming time and extend
your 3D programming capabilities.
Open Inventor:
- is built on top of OpenGL (R)
- defines a standard file format for 3D data interchange
- introduces a simple event model for 3D interaction
- provides animation objects called Engines
- provides high performance object picking
- is window system and platform independent
- is a cross-platform 3D graphics development system
- supports PostScript printing
- encourages programmers to create new customized objects
- is fun to use