definition of poor implementation
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 2416
Bellagio OpenMAX IL Implementation 0.3.1
Bellagio is a sample implementation of OpenMAX IL for Linux. more>>
Bellagio is a sample implementation of OpenMAX IL for Linux.
It enables software developers and ISVs to familiarize themselves with the OpenMAX IL API and to develop their own OpenMAX multimedia and streaming media components for mobile devices, including codecs, video I/O, and audio mixers.
Included sample components comply with the OpenMAX base and interoperability profiles and can be tunnelled together.
Main features:
- a shared library with the IL core and a "reference" OpenMAX component
- a number of OpenMAX components which pass Khronos conformance tests
- a set of GStreamer plugins that use the IL API (not available yet)
Enhancements:
New video components:
- ffmpeg based MPEG4/H.264 decoder
- color converter component YUV -> RGB
- video renderer based on devFB
New audio component:
- audio file reader based on ffmpeg audio format
- volume component
Fixed known bugs:
- FFMPEG audio decoder now works on FC6 and other distributions with the latest ffmpeg release (0.4.9-0.35.20070204)
Known pending bugs:
- some ogg streams can not be decoded properly
- the tunneling between file reader, mp3 dec based on ffmpeg - alsa sink ends in a deadlock sometimes.
- This behavior has been detected some times using FC6 and UBUNTU, not with the FC4
Full list of components:
Audio:
- ogg decoder based on libvorbis (stand alone components, and multiple roles component)
- mp3 decoder based on mad decoder
- mp3 decoder based on ffmpeg (multiple roles component)
- volume component
- alsa audio sink
- ffmpeg audio file reader (to be used with mp3 ffmpeg decoder)
Video:
- MPEG4 decoder based on ffmpeg (multiple roles component)
- H.264 decoder based on ffmpeg (multiple roles component)
- Color converter based on ffmpeg
- video renderer based on devFB
- Major additions to the 0.2
- New port classes
The components are:
- multiple formats audio decoder component that supports mp3 and ogg audio formats
- alsa sink component
- all the other components are NOT compatible with the new architecture.
- They have been removed and will be ported to the new architecture in a further delivery
<<lessIt enables software developers and ISVs to familiarize themselves with the OpenMAX IL API and to develop their own OpenMAX multimedia and streaming media components for mobile devices, including codecs, video I/O, and audio mixers.
Included sample components comply with the OpenMAX base and interoperability profiles and can be tunnelled together.
Main features:
- a shared library with the IL core and a "reference" OpenMAX component
- a number of OpenMAX components which pass Khronos conformance tests
- a set of GStreamer plugins that use the IL API (not available yet)
Enhancements:
New video components:
- ffmpeg based MPEG4/H.264 decoder
- color converter component YUV -> RGB
- video renderer based on devFB
New audio component:
- audio file reader based on ffmpeg audio format
- volume component
Fixed known bugs:
- FFMPEG audio decoder now works on FC6 and other distributions with the latest ffmpeg release (0.4.9-0.35.20070204)
Known pending bugs:
- some ogg streams can not be decoded properly
- the tunneling between file reader, mp3 dec based on ffmpeg - alsa sink ends in a deadlock sometimes.
- This behavior has been detected some times using FC6 and UBUNTU, not with the FC4
Full list of components:
Audio:
- ogg decoder based on libvorbis (stand alone components, and multiple roles component)
- mp3 decoder based on mad decoder
- mp3 decoder based on ffmpeg (multiple roles component)
- volume component
- alsa audio sink
- ffmpeg audio file reader (to be used with mp3 ffmpeg decoder)
Video:
- MPEG4 decoder based on ffmpeg (multiple roles component)
- H.264 decoder based on ffmpeg (multiple roles component)
- Color converter based on ffmpeg
- video renderer based on devFB
- Major additions to the 0.2
- New port classes
The components are:
- multiple formats audio decoder component that supports mp3 and ogg audio formats
- alsa sink component
- all the other components are NOT compatible with the new architecture.
- They have been removed and will be ported to the new architecture in a further delivery
Download (0.49MB)
Added: 2007-06-06 License: GPL (GNU General Public License) Price:
895 downloads
Procinfo NG 2.0.113 (C++ Implementation)
Procinfo NG is a ground-up rewrite of the procinfo program. more>>
Procinfo NG is a ground-up rewrite of the procinfo program. Procinfo NGs goal is to make the code more readable (and reusable) and to restore broken functionality of the original program.
The original program was written for Linux 1.0, and updated through 2.2. This version is for 2.6.
Enhancements:
- Updates were made to match what some Linux distributions have done to procinfo-18.
- Support for MSI and XEN interrupts were added.
- Some non-x86 architectures are handled.
- Assorted bugs and 80-character console nonsense were fixed.
<<lessThe original program was written for Linux 1.0, and updated through 2.2. This version is for 2.6.
Enhancements:
- Updates were made to match what some Linux distributions have done to procinfo-18.
- Support for MSI and XEN interrupts were added.
- Some non-x86 architectures are handled.
- Assorted bugs and 80-character console nonsense were fixed.
Download (0.041MB)
Added: 2007-08-11 License: GPL (GNU General Public License) Price:
805 downloads
Other version of Procinfo NG
License:GPL (GNU General Public License)
Suffix tree implementation library 1.2
Suffix tree implementation library is a C library, an implementation of the suffix trees algorithm to store/retrieve key/data pa more>>
Suffix tree implementation library is a C library, an implementation of the suffix trees algorithm to store/retrieve key/data pairs.
The main advantages are a linear indexing time, little memory usage, and very fast retrieving.
It has been developped on FreeBSD/gcc but should be fairly portable.
The source code "testsfx.c" show an example of how to use the library both for inserting, retrieving, and deleting data. There arent many functions and comments should be enough to give you an idea of how to use the library. (read the header of the source file)
You should edit sfxdisk.h to suit your needs: you can change the alphabet size and the offset type. It should be OK to use "long long" 64 bits ints instead of long, in fact I tested it succesfully but havent gone to the point of filling more than 2 GB of data (needless to say you need a 64 bits filesystem).
Two "tools" come with the library (new with version 1.2): dumpsfx and loadsfx. dumpsfx is used to dump the database: dumpsfx [-s separator] if you want to output the result as readable text or dumpsfx < file.sfx > -h to output it for reloading with loadsfx.
dumpsfx outputs on stdout and loadsfx reads from stdin. loadsfx < suffix tree file to create > < dumped_file
Enhancements:
- removed an useless offset incrementation in STwritenode
<<lessThe main advantages are a linear indexing time, little memory usage, and very fast retrieving.
It has been developped on FreeBSD/gcc but should be fairly portable.
The source code "testsfx.c" show an example of how to use the library both for inserting, retrieving, and deleting data. There arent many functions and comments should be enough to give you an idea of how to use the library. (read the header of the source file)
You should edit sfxdisk.h to suit your needs: you can change the alphabet size and the offset type. It should be OK to use "long long" 64 bits ints instead of long, in fact I tested it succesfully but havent gone to the point of filling more than 2 GB of data (needless to say you need a 64 bits filesystem).
Two "tools" come with the library (new with version 1.2): dumpsfx and loadsfx. dumpsfx is used to dump the database: dumpsfx [-s separator] if you want to output the result as readable text or dumpsfx < file.sfx > -h to output it for reloading with loadsfx.
dumpsfx outputs on stdout and loadsfx reads from stdin. loadsfx < suffix tree file to create > < dumped_file
Enhancements:
- removed an useless offset incrementation in STwritenode
Download (0.015MB)
Added: 2006-08-07 License: GPL (GNU General Public License) Price:
1189 downloads
Objective Modula-2 1.00 (Reference Implementation)
Objective Modula-2 programming language is a hybrid between Smalltalk and Modula-2. more>>
Objective Modula-2 programming language is a hybrid between Smalltalk and Modula-2 based on the object model and runtime of Objective-C.
The design is an example how native Cocoa/GNUstep support can be added to static imperative programming languages without implementing a bridge.
Objective Modula-2s scope encompasses the design of the Objective Modula-2 programming language and the implementation of a compiler to implement it. The initial compiler will generate Objective-C source code.
Enhancements:
- This code is used to verify ideas and concepts which come up in the course of defining the language.
- It is in an early stage, incomplete and subject to frequent changes.
<<lessThe design is an example how native Cocoa/GNUstep support can be added to static imperative programming languages without implementing a bridge.
Objective Modula-2s scope encompasses the design of the Objective Modula-2 programming language and the implementation of a compiler to implement it. The initial compiler will generate Objective-C source code.
Enhancements:
- This code is used to verify ideas and concepts which come up in the course of defining the language.
- It is in an early stage, incomplete and subject to frequent changes.
Download (0.019MB)
Added: 2007-07-21 License: (FDL) GNU Free Documentation License Price:
825 downloads
Other version of Objective Modula-2
License:(FDL) GNU Free Documentation License
Fast MD5 Implementation in Java 2.6.1
Fast MD5 Implementation in Java is a heavily optimized implementation of the MD5 hashing algorithm written in Java. more>>
Fast MD5 Implementation in Java is a heavily optimized implementation of the MD5 hashing algorithm written in Java.
Fast MD5 Implementation in Java includes an optional native method for even greater speed improvements.
How Fast Is It?
Short answer:Much faster than any other Java implementation that I have tested and (surprisingly) even faster than the native, non-Java MD5 implementation on some systems.
Long answer:First of all, it is important to note that the term "fast" is used here in relative terms. The implementation of the MD5 message digest algorithm available on this page is written in Java and is fast compared with other implementations written in Java, both because it is heavily optimized by itself and because there is an optional native method that makes it even faster when the platform supports it. How it compares to a sensible implementation written in a language, such as C, that is compiled directly to machine code, is heavily dependent upon how good of a job the JIT compiler in your JVM does in compiling the code or whether you are able to use the optional native method.
Enhancements:
- Martin West contributed a bug fix and some code refactoring to make all targets work out of the box in the Ant build file. Previously, the "dist" target did not work if the "docs" directory was not present.
<<lessFast MD5 Implementation in Java includes an optional native method for even greater speed improvements.
How Fast Is It?
Short answer:Much faster than any other Java implementation that I have tested and (surprisingly) even faster than the native, non-Java MD5 implementation on some systems.
Long answer:First of all, it is important to note that the term "fast" is used here in relative terms. The implementation of the MD5 message digest algorithm available on this page is written in Java and is fast compared with other implementations written in Java, both because it is heavily optimized by itself and because there is an optional native method that makes it even faster when the platform supports it. How it compares to a sensible implementation written in a language, such as C, that is compiled directly to machine code, is heavily dependent upon how good of a job the JIT compiler in your JVM does in compiling the code or whether you are able to use the optional native method.
Enhancements:
- Martin West contributed a bug fix and some code refactoring to make all targets work out of the box in the Ant build file. Previously, the "dist" target did not work if the "docs" directory was not present.
Download (0.073MB)
Added: 2006-03-06 License: LGPL (GNU Lesser General Public License) Price:
1350 downloads
IronPython 1.0 Final
IronPython is an implementation of Python running on Microsoft .NET / Mono. more>>
IronPython is an implementation of Python running on Microsoft .NET / Mono. It supports an interactive interpreter with fully dynamic compilation.
IronPython is well integrated with the rest of the framework and makes all .NET libraries easily available to Python programmers.
<<lessIronPython is well integrated with the rest of the framework and makes all .NET libraries easily available to Python programmers.
Download (MB)
Added: 2006-09-06 License: Other/Proprietary License Price:
1148 downloads
Bio::PrimarySeqI 1.4
Bio::PrimarySeqI is a Perl Interface definition for a Bio::PrimarySeq. more>>
Bio::PrimarySeqI is a Perl Interface definition for a Bio::PrimarySeq.
SYNOPSIS
# Bio::PrimarySeqI is the interface class for sequences.
# If you are a newcomer to bioperl, you should
# start with Bio::Seq documentation. This
# documentation is mainly for developers using
# Bioperl.
# to test this is a seq object
$obj->isa("Bio::PrimarySeqI") ||
$obj->throw("$obj does not implement the Bio::PrimarySeqI interface");
# accessors
$string = $obj->seq();
$substring = $obj->subseq(12,50);
$display = $obj->display_id(); # for human display
$id = $obj->primary_id(); # unique id for this object,
# implementation defined
$unique_key= $obj->accession_number();
# unique biological id
# object manipulation
eval {
$rev = $obj->revcom();
};
if( $@ ) {
$obj->throw(-class => Bio::Root::Exception,
-text => "Could not reverse complement. ".
"Probably not DNA. Actual exceptionn$@n",
-value => $@);
}
$trunc = $obj->trunc(12,50);
# $rev and $trunc are Bio::PrimarySeqI compliant objects
This object defines an abstract interface to basic sequence information - for most users of the package the documentation (and methods) in this class are not useful - this is a developers only class which defines what methods have to be implmented by other Perl objects to comply to the Bio::PrimarySeqI interface. Go "perldoc Bio::Seq" or "man Bio::Seq" for more information on the main class for sequences.
PrimarySeq is an object just for the sequence and its name(s), nothing more. Seq is the larger object complete with features. There is a pure perl implementation of this in Bio::PrimarySeq. If you just want to use Bio::PrimarySeq objects, then please read that module first. This module defines the interface, and is of more interest to people who want to wrap their own Perl Objects/RDBs/FileSystems etc in way that they "are" bioperl sequence objects, even though it is not using Perl to store the sequence etc.
This interface defines what bioperl consideres necessary to "be" a sequence, without providing an implementation of this. (An implementation is provided in Bio::PrimarySeq). If you want to provide a Bio::PrimarySeq compliant object which in fact wraps another object/database/out-of-perl experience, then this is the correct thing to wrap, generally by providing a wrapper class which would inheriet from your object and this Bio::PrimarySeqI interface. The wrapper class then would have methods lists in the "Implementation Specific Functions" which would provide these methods for your object.
<<lessSYNOPSIS
# Bio::PrimarySeqI is the interface class for sequences.
# If you are a newcomer to bioperl, you should
# start with Bio::Seq documentation. This
# documentation is mainly for developers using
# Bioperl.
# to test this is a seq object
$obj->isa("Bio::PrimarySeqI") ||
$obj->throw("$obj does not implement the Bio::PrimarySeqI interface");
# accessors
$string = $obj->seq();
$substring = $obj->subseq(12,50);
$display = $obj->display_id(); # for human display
$id = $obj->primary_id(); # unique id for this object,
# implementation defined
$unique_key= $obj->accession_number();
# unique biological id
# object manipulation
eval {
$rev = $obj->revcom();
};
if( $@ ) {
$obj->throw(-class => Bio::Root::Exception,
-text => "Could not reverse complement. ".
"Probably not DNA. Actual exceptionn$@n",
-value => $@);
}
$trunc = $obj->trunc(12,50);
# $rev and $trunc are Bio::PrimarySeqI compliant objects
This object defines an abstract interface to basic sequence information - for most users of the package the documentation (and methods) in this class are not useful - this is a developers only class which defines what methods have to be implmented by other Perl objects to comply to the Bio::PrimarySeqI interface. Go "perldoc Bio::Seq" or "man Bio::Seq" for more information on the main class for sequences.
PrimarySeq is an object just for the sequence and its name(s), nothing more. Seq is the larger object complete with features. There is a pure perl implementation of this in Bio::PrimarySeq. If you just want to use Bio::PrimarySeq objects, then please read that module first. This module defines the interface, and is of more interest to people who want to wrap their own Perl Objects/RDBs/FileSystems etc in way that they "are" bioperl sequence objects, even though it is not using Perl to store the sequence etc.
This interface defines what bioperl consideres necessary to "be" a sequence, without providing an implementation of this. (An implementation is provided in Bio::PrimarySeq). If you want to provide a Bio::PrimarySeq compliant object which in fact wraps another object/database/out-of-perl experience, then this is the correct thing to wrap, generally by providing a wrapper class which would inheriet from your object and this Bio::PrimarySeqI interface. The wrapper class then would have methods lists in the "Implementation Specific Functions" which would provide these methods for your object.
Download (4.7MB)
Added: 2006-09-23 License: Perl Artistic License Price:
1126 downloads
Poor mans Financial Calculator 1.1
Poor mans Financial Calculator is a small financial and basic mathematical operations calculator applet. more>>
Poor mans Financial Calculator project is a small financial and basic mathematical operations calculator applet.
The calculator registers work like the mythical HP-12C financial calculator, even the "n" rounding behaviour. The yellow fields also serve as operands for the arithmetic operations; for such ops, the blue field will show the result.
BEGIN button: If enabled, means that the first payment is made at the beginning of the period (important only for financial operations that involve PMT register)
FPC button: if enabled, Fractionary part of the Period ("n") will also be calculated using Compound interest; if disabled, fractionary part will use simple (linear) interest, which gives slightly higher interest values.
Enhancements:
- This release translates the code and messages to English and changes the license to the LGPL.
<<lessThe calculator registers work like the mythical HP-12C financial calculator, even the "n" rounding behaviour. The yellow fields also serve as operands for the arithmetic operations; for such ops, the blue field will show the result.
BEGIN button: If enabled, means that the first payment is made at the beginning of the period (important only for financial operations that involve PMT register)
FPC button: if enabled, Fractionary part of the Period ("n") will also be calculated using Compound interest; if disabled, fractionary part will use simple (linear) interest, which gives slightly higher interest values.
Enhancements:
- This release translates the code and messages to English and changes the license to the LGPL.
Download (0.009MB)
Added: 2005-12-09 License: LGPL (GNU Lesser General Public License) Price:
1414 downloads
XML::NodeFilter 0.01
XML::NodeFilter is a generic XML::NodeFilter Class. more>>
XML::NodeFilter is a generic XML::NodeFilter Class.
SYNOPSIS
use XML::NodeFilter;
my $filter = XML::NodeFilter->new();
$your_iterator->set_filter( $filter );
"Filters are objects that know how to "filter out" nodes. If a NodeIterator or a TreeWalker is given a NodeFilter, it applies the filter before it returns the next node. If the filter says to accept the node, the traversal logic returns it; otherwise, traversal looks for the next node and pretends that the node was rejected was not there."
This definition is given by the DOM Traversal and Range Specification. It explains pretty well, what this class is for: A XML::NodeFilter will recieve a node from a traversal object, such as XML::LibXML::Iterator is one and tells if the given node should be returned to the caller or not.
Although I refere only to XML::LibXML here, XML::NodeFilter is implemented more open, so it can be used with other DOM implementations as well.
The Spec And The Implementation
The DOM Traversal and Range Specification just defines the contstants and accept_node() for a node filter. The XML::NodeFilter implementation also adds the what_to_show() function to the class definition, since I think that it is a filters job to decide which node-types should be shown and which not.
Also XML::NodeFilter adds two constants which are not part of the specification. The first one is FILTER_DECLINED. It tells the traversal logic, that it should apply another filter in order to decide if the node should be visible or not. While the spec only defines the traversal logic to have either one or no filter applied, it showed that it leads to cleaner code if more filter could be used in conjunktion. If a traversal logic finds a single filter that returns FILTER_DECLINED, it should be handled as a synonym of FILTER_ACCEPT. While FILTER_ACCEPT is finite and would cause all other not to be executed, FILTER_DECLINED gives one more flexibility.
The second extension of the specification is the SHOW_NONE symbol. It was added for operational completeness, so one can explicitly switch the node type filter off (means all node types are rejected). This will cause the two calls of what_to_show have a different result:
$filter->what_to_show( undef ); # will set SHOW_ALL
$filter->what_to_show( SHOW_NONE ); # will not set SHOW_ALL
Infact SHOW_NONE is a NULL flag, that means it can be added to any list of flags without altering it.
$filter->what_to_show( SHOW_ELEMENT | SHOW_TEXT | SHOW_NONE );
is therefore identical to
$filter->what_to_show( SHOW_ELEMENT | SHOW_TEXT );
SHOW_NONE is espacially usefull to avoid numerically or even more ugly unintialized values while building such flag lists dynamically.
<<lessSYNOPSIS
use XML::NodeFilter;
my $filter = XML::NodeFilter->new();
$your_iterator->set_filter( $filter );
"Filters are objects that know how to "filter out" nodes. If a NodeIterator or a TreeWalker is given a NodeFilter, it applies the filter before it returns the next node. If the filter says to accept the node, the traversal logic returns it; otherwise, traversal looks for the next node and pretends that the node was rejected was not there."
This definition is given by the DOM Traversal and Range Specification. It explains pretty well, what this class is for: A XML::NodeFilter will recieve a node from a traversal object, such as XML::LibXML::Iterator is one and tells if the given node should be returned to the caller or not.
Although I refere only to XML::LibXML here, XML::NodeFilter is implemented more open, so it can be used with other DOM implementations as well.
The Spec And The Implementation
The DOM Traversal and Range Specification just defines the contstants and accept_node() for a node filter. The XML::NodeFilter implementation also adds the what_to_show() function to the class definition, since I think that it is a filters job to decide which node-types should be shown and which not.
Also XML::NodeFilter adds two constants which are not part of the specification. The first one is FILTER_DECLINED. It tells the traversal logic, that it should apply another filter in order to decide if the node should be visible or not. While the spec only defines the traversal logic to have either one or no filter applied, it showed that it leads to cleaner code if more filter could be used in conjunktion. If a traversal logic finds a single filter that returns FILTER_DECLINED, it should be handled as a synonym of FILTER_ACCEPT. While FILTER_ACCEPT is finite and would cause all other not to be executed, FILTER_DECLINED gives one more flexibility.
The second extension of the specification is the SHOW_NONE symbol. It was added for operational completeness, so one can explicitly switch the node type filter off (means all node types are rejected). This will cause the two calls of what_to_show have a different result:
$filter->what_to_show( undef ); # will set SHOW_ALL
$filter->what_to_show( SHOW_NONE ); # will not set SHOW_ALL
Infact SHOW_NONE is a NULL flag, that means it can be added to any list of flags without altering it.
$filter->what_to_show( SHOW_ELEMENT | SHOW_TEXT | SHOW_NONE );
is therefore identical to
$filter->what_to_show( SHOW_ELEMENT | SHOW_TEXT );
SHOW_NONE is espacially usefull to avoid numerically or even more ugly unintialized values while building such flag lists dynamically.
Download (0.006MB)
Added: 2006-10-25 License: Perl Artistic License Price:
1094 downloads
Performance Application Programming Interface 3.9.0
Performance Application Programming Interface is an API for a CPU performance counter. more>>
PAPI aims to provide the tool designer and application engineer with a consistent interface and methodology for use of the performance counter hardware found in most major microprocessors.
PAPI enables software engineers to see, in near real time, the relation between software performance and processor events.
The Performance API (PAPI) project specifies a standard application programming interface (API) for accessing hardware performance counters available on most modern microprocessors.
These counters exist as a small set of registers that count Events, occurrences of specific signals related to the processors function. Monitoring these events facilitates correlation between the structure of source/object code and the efficiency of the mapping of that code to the underlying architecture.
This correlation has a variety of uses in performance analysis including hand tuning, compiler optimization, debugging, benchmarking, monitoring and performance modeling. In addition, it is hoped that this information will prove useful in the development of new compilation technology as well as in steering architectural development towards alleviating commonly occurring bottlenecks in high performance computing.
PAPI provides two interfaces to the underlying counter hardware; a simple, high level interface for the acquisition of simple measurements and a fully programmable, low level interface directed towards users with more sophisticated needs.
The low level PAPI interface deals with hardware events in groups called EventSets. EventSets reflect how the counters are most frequently used, such as taking simultaneous measurements of different hardware events and relating them to one another.
For example, relating cycles to memory references or flops to level 1 cache misses can indicate poor locality and memory management. In addition, EventSets allow a highly efficient implementation which translates to more detailed and accurate measurements.
EventSets are fully programmable and have features such as guaranteed thread safety, writing of counter values, multiplexing and notification on threshold crossing, as well as processor specific features. The high level interface simply provides the ability to start, stop and read specific events, one at a time.
PAPI provides portability across different platforms. It uses the same routines with similar argument lists to control and access the counters for every architecture. As part of PAPI, we have predefined a set of events that we feel represents the lowest common denominator of every good counter implementation.
Our intent is that the same source code will count similar and possibly comparable events when run on different platforms. If the programmer chooses to use this set of standardized events, then the source code need not be changed and only a fresh compilation and link is necessary. However, should the developer wish to access machine specific events, the low level API provides access to all available events and counting modes.
If an event or feature does not exist on the current platform, PAPI returns an appropriate error code. This significantly reduces the porting effort of code using PAPI because the semantics of each call to PAPI remains the same, just the argument lists need updating. In addition to the standard set, each PAPI implementation supports all native events through the ability to directly accept platform specific counter numbers. Definitions for most, if not all of these, are included as conditional macros in the header file. In this way, PAPI avoids having inefficient code to translate all events for all platforms into a uniform representation and back again.
This translation is only done for the relatively few events defined in the standardized set. Some processors like those in the POWER series have counter groups. They enable access to specific groups of counters, instead of individual events. This presents a serious portability problem, thus PAPI abstracts hardware counters from their groups with a packed naming scheme. Each counter control value or event is made up of the counter group number and the number of the specific counter in that group.
PAPI can be divided into two layers of software. The upper layer consists of the API and machine independent support functions. The lower layer defines and exports a machine independent interface to machine dependent functions and data structures. These functions access the substrate, which may consist of the operating system, a kernel extension or assembly functions to directly access the processors registers.
PAPI tries to use the most efficient and flexible of the three, depending on what is available. Naturally, the functionality of the upper layers heavily depends on that provided by the substrate. In cases where the substrates do not provide highly desirable features, PAPI attempts to emulate them as described below.
PAPI makes sure the underlying operating system or library guards against overflow of counter values.
Each counter can potentially be incremented multiple times in a single clock cycle. This combined with increasing clock speeds and the small precision of some of the physical counters means that overflow is likely to occur.
One of the more advanced features of PAPI is to provide a portable implementation of asynchronous notification when counters exceed a user specified value.
This functionality provides the basis for PAPIs SVR4 compatible profiling calls, that generate an accurate histogram of performance interrupts based on hardware metrics, not on time. Such functionality provides the basis for all line level performance analysis software, from the antiquated days of AT&Ts prof to SGIs SpeedShop. Thus for any architecture with even the most rudimentary access to hardware performance counters, PAPI provides the foundation for a truly portable, source level, performance analysis tool based on real processor statistics.
Enhancements:
- The API was extended to decouple abstraction layers from hardware support and to provide initial support for different types of performance counters.
<<lessPAPI enables software engineers to see, in near real time, the relation between software performance and processor events.
The Performance API (PAPI) project specifies a standard application programming interface (API) for accessing hardware performance counters available on most modern microprocessors.
These counters exist as a small set of registers that count Events, occurrences of specific signals related to the processors function. Monitoring these events facilitates correlation between the structure of source/object code and the efficiency of the mapping of that code to the underlying architecture.
This correlation has a variety of uses in performance analysis including hand tuning, compiler optimization, debugging, benchmarking, monitoring and performance modeling. In addition, it is hoped that this information will prove useful in the development of new compilation technology as well as in steering architectural development towards alleviating commonly occurring bottlenecks in high performance computing.
PAPI provides two interfaces to the underlying counter hardware; a simple, high level interface for the acquisition of simple measurements and a fully programmable, low level interface directed towards users with more sophisticated needs.
The low level PAPI interface deals with hardware events in groups called EventSets. EventSets reflect how the counters are most frequently used, such as taking simultaneous measurements of different hardware events and relating them to one another.
For example, relating cycles to memory references or flops to level 1 cache misses can indicate poor locality and memory management. In addition, EventSets allow a highly efficient implementation which translates to more detailed and accurate measurements.
EventSets are fully programmable and have features such as guaranteed thread safety, writing of counter values, multiplexing and notification on threshold crossing, as well as processor specific features. The high level interface simply provides the ability to start, stop and read specific events, one at a time.
PAPI provides portability across different platforms. It uses the same routines with similar argument lists to control and access the counters for every architecture. As part of PAPI, we have predefined a set of events that we feel represents the lowest common denominator of every good counter implementation.
Our intent is that the same source code will count similar and possibly comparable events when run on different platforms. If the programmer chooses to use this set of standardized events, then the source code need not be changed and only a fresh compilation and link is necessary. However, should the developer wish to access machine specific events, the low level API provides access to all available events and counting modes.
If an event or feature does not exist on the current platform, PAPI returns an appropriate error code. This significantly reduces the porting effort of code using PAPI because the semantics of each call to PAPI remains the same, just the argument lists need updating. In addition to the standard set, each PAPI implementation supports all native events through the ability to directly accept platform specific counter numbers. Definitions for most, if not all of these, are included as conditional macros in the header file. In this way, PAPI avoids having inefficient code to translate all events for all platforms into a uniform representation and back again.
This translation is only done for the relatively few events defined in the standardized set. Some processors like those in the POWER series have counter groups. They enable access to specific groups of counters, instead of individual events. This presents a serious portability problem, thus PAPI abstracts hardware counters from their groups with a packed naming scheme. Each counter control value or event is made up of the counter group number and the number of the specific counter in that group.
PAPI can be divided into two layers of software. The upper layer consists of the API and machine independent support functions. The lower layer defines and exports a machine independent interface to machine dependent functions and data structures. These functions access the substrate, which may consist of the operating system, a kernel extension or assembly functions to directly access the processors registers.
PAPI tries to use the most efficient and flexible of the three, depending on what is available. Naturally, the functionality of the upper layers heavily depends on that provided by the substrate. In cases where the substrates do not provide highly desirable features, PAPI attempts to emulate them as described below.
PAPI makes sure the underlying operating system or library guards against overflow of counter values.
Each counter can potentially be incremented multiple times in a single clock cycle. This combined with increasing clock speeds and the small precision of some of the physical counters means that overflow is likely to occur.
One of the more advanced features of PAPI is to provide a portable implementation of asynchronous notification when counters exceed a user specified value.
This functionality provides the basis for PAPIs SVR4 compatible profiling calls, that generate an accurate histogram of performance interrupts based on hardware metrics, not on time. Such functionality provides the basis for all line level performance analysis software, from the antiquated days of AT&Ts prof to SGIs SpeedShop. Thus for any architecture with even the most rudimentary access to hardware performance counters, PAPI provides the foundation for a truly portable, source level, performance analysis tool based on real processor statistics.
Enhancements:
- The API was extended to decouple abstraction layers from hardware support and to provide initial support for different types of performance counters.
Download (2.9MB)
Added: 2007-04-23 License: BSD License Price:
925 downloads
RIG (Random Identity Generator) 1.11
RIG is a program I wrote to replace a particularly poor closed-source unattributed public-domain implementation for MS-DOS. more>>
RIG is a program I wrote to replace a particularly poor closed-source unattributed public-domain implementation for MS-DOS. Essentially it gathers random selections of first and last names, location data, and street names, to assemble a fake name and address, complete with geographically consistant ZIP code, area code, state, and city name.
My implementation of fake is GPL, however its database belongs to whoever wrote the original implementation, or if that person remains unknown then I suppose it lies in the public domain. If you feel uncomfortable with this then please provide a new database. It shouldnt be too hard to create a new one.
Install should be pretty easy, just type "make install". If your system dosent
have /dev/urandom and youd like to use /dev/random instead, do
make install CFLAGS=-DDEVRANDOM
Enhancements:
- Fix compilation on some platforms. Thanks to many people for noticing these problems.
- Fix problems with the -m and -f options. Thanks to Casey Carter noticing this problem, and to the Debian developers (notably Norbert Veber and Aaron Lehmann ) for proposing a fix.
- Add an entry for Coward, SC.
- Make Biloxi area and ZIP codes match the same physical spot. Thanks to Chris Lawrence for noticing this.
<<lessMy implementation of fake is GPL, however its database belongs to whoever wrote the original implementation, or if that person remains unknown then I suppose it lies in the public domain. If you feel uncomfortable with this then please provide a new database. It shouldnt be too hard to create a new one.
Install should be pretty easy, just type "make install". If your system dosent
have /dev/urandom and youd like to use /dev/random instead, do
make install CFLAGS=-DDEVRANDOM
Enhancements:
- Fix compilation on some platforms. Thanks to many people for noticing these problems.
- Fix problems with the -m and -f options. Thanks to Casey Carter noticing this problem, and to the Debian developers (notably Norbert Veber and Aaron Lehmann ) for proposing a fix.
- Add an entry for Coward, SC.
- Make Biloxi area and ZIP codes match the same physical spot. Thanks to Chris Lawrence for noticing this.
Download (0.027MB)
Added: 2006-07-14 License: GPL (GNU General Public License) Price:
691 downloads
SimpleJTA 2.0.2 Alpha
SimpleJTA implements a standalone JTA compliant Transaction Manager. more>>
SimpleJTA implements a standalone JTA compliant Transaction Manager. SimpleJTA project is primarily designed to be used when a J2EE server is not available, for example, in Servlet applications, or standalone Java programs.
SimpleJTA is being developed and tested with Oracle 9i and Apache Derby database management systems. It is fairly easy to add support for other database systems that support the XA interface.
Main features:
- SimpleJTA does not require a J2EE or Servlet container. It provides an implementation of UserTransaction interface so that an application using SimpleJTA can easily switch to another JTA implementation.
- SimpleJTA implements a transaction log to enable recovery after system crashes.
- Distributed transaction propagation between multiple application servers is not supported. There is no support for JTS.
- SimpleJTA implements the UserTransaction, Transaction and TransactionManager interfaces. The Transaction and TransactionManager interfaces have not been tested extensively.
- SimpleJTA provides its own JDBC datasources for Oracle and Derby. It is easy to add support for other database systems.
- SimpleJTA JDBC datasources and UserTransaction implementation can be registered to JNDI, but this has not been tested yet.
- There is experimental support for two JMS providers - Websphere MQ and Oracle AQ.
- SimpleJTA can be used within a Spring Framework managed application.
Enhancements:
- Added spring-dao to the list of dependencies in pom.xml.
- Added TransactionManager interface to SimpleUserTransaction.
- Added SpringTransactionManager bean definition to testConfig.xml.
- Fixed problems reported by FindBugs (4 defects remaining).
- Added very basic test case for ActiveMQ.
- Fixed incorrect classname in ActiveMQJMSConnectionFactoryAdaptor.
<<lessSimpleJTA is being developed and tested with Oracle 9i and Apache Derby database management systems. It is fairly easy to add support for other database systems that support the XA interface.
Main features:
- SimpleJTA does not require a J2EE or Servlet container. It provides an implementation of UserTransaction interface so that an application using SimpleJTA can easily switch to another JTA implementation.
- SimpleJTA implements a transaction log to enable recovery after system crashes.
- Distributed transaction propagation between multiple application servers is not supported. There is no support for JTS.
- SimpleJTA implements the UserTransaction, Transaction and TransactionManager interfaces. The Transaction and TransactionManager interfaces have not been tested extensively.
- SimpleJTA provides its own JDBC datasources for Oracle and Derby. It is easy to add support for other database systems.
- SimpleJTA JDBC datasources and UserTransaction implementation can be registered to JNDI, but this has not been tested yet.
- There is experimental support for two JMS providers - Websphere MQ and Oracle AQ.
- SimpleJTA can be used within a Spring Framework managed application.
Enhancements:
- Added spring-dao to the list of dependencies in pom.xml.
- Added TransactionManager interface to SimpleUserTransaction.
- Added SpringTransactionManager bean definition to testConfig.xml.
- Fixed problems reported by FindBugs (4 defects remaining).
- Added very basic test case for ActiveMQ.
- Fixed incorrect classname in ActiveMQJMSConnectionFactoryAdaptor.
Download (0.093MB)
Added: 2007-04-15 License: The Apache License 2.0 Price:
926 downloads
AI::FuzzyInference 0.05
AI::FuzzyInference is a Perl module to implement a Fuzzy Inference System. more>>
AI::FuzzyInference is a Perl module to implement a Fuzzy Inference System.
SYNOPSYS
use AI::FuzzyInference;
my $s = new AI::FuzzyInference;
$s->inVar(service, 0, 10,
poor => [0, 0,
2, 1,
4, 0],
good => [2, 0,
4, 1,
6, 0],
excellent => [4, 0,
6, 1,
8, 0],
amazing => [6, 0,
8, 1,
10, 0],
);
$s->inVar(food, 0, 10,
poor => [0, 0,
2, 1,
4, 0],
good => [2, 0,
4, 1,
6, 0],
excellent => [4, 0,
6, 1,
8, 0],
amazing => [6, 0,
8, 1,
10, 0],
);
$s->outVar(tip, 5, 30,
poor => [5, 0,
10, 1,
15, 0],
good => [10, 0,
15, 1,
20, 0],
excellent => [15, 0,
20, 1,
25, 0],
amazing => [20, 0,
25, 1,
30, 0],
);
$s->addRule(
service=poor & food=poor => tip=poor,
service=good & food=poor => tip=poor,
service=excellent & food=poor => tip=good,
service=amazing & food=poor => tip=good,
service=poor & food=good => tip=poor,
service=good & food=good => tip=good,
service=excellent & food=good => tip=good,
service=amazing & food=good => tip=excellent,
service=poor & food=excellent => tip=good,
service=good & food=excellent => tip=excellent,
service=excellent & food=excellent => tip=excellent,
service=amazing & food=excellent => tip=amazing,
service=poor & food=amazing => tip=good,
service=good & food=amazing => tip=excellent,
service=excellent & food=amazing => tip=amazing,
service=amazing & food=amazing => tip=amazing,
);
$s->compute(service => 2,
food => 7);
<<lessSYNOPSYS
use AI::FuzzyInference;
my $s = new AI::FuzzyInference;
$s->inVar(service, 0, 10,
poor => [0, 0,
2, 1,
4, 0],
good => [2, 0,
4, 1,
6, 0],
excellent => [4, 0,
6, 1,
8, 0],
amazing => [6, 0,
8, 1,
10, 0],
);
$s->inVar(food, 0, 10,
poor => [0, 0,
2, 1,
4, 0],
good => [2, 0,
4, 1,
6, 0],
excellent => [4, 0,
6, 1,
8, 0],
amazing => [6, 0,
8, 1,
10, 0],
);
$s->outVar(tip, 5, 30,
poor => [5, 0,
10, 1,
15, 0],
good => [10, 0,
15, 1,
20, 0],
excellent => [15, 0,
20, 1,
25, 0],
amazing => [20, 0,
25, 1,
30, 0],
);
$s->addRule(
service=poor & food=poor => tip=poor,
service=good & food=poor => tip=poor,
service=excellent & food=poor => tip=good,
service=amazing & food=poor => tip=good,
service=poor & food=good => tip=poor,
service=good & food=good => tip=good,
service=excellent & food=good => tip=good,
service=amazing & food=good => tip=excellent,
service=poor & food=excellent => tip=good,
service=good & food=excellent => tip=excellent,
service=excellent & food=excellent => tip=excellent,
service=amazing & food=excellent => tip=amazing,
service=poor & food=amazing => tip=good,
service=good & food=amazing => tip=excellent,
service=excellent & food=amazing => tip=amazing,
service=amazing & food=amazing => tip=amazing,
);
$s->compute(service => 2,
food => 7);
Download (0.010MB)
Added: 2007-07-14 License: Perl Artistic License Price:
832 downloads
libCoroutine 0.9
libCoroutine is a simple stackfull coroutine implementation, largely based on ucontext and fibers. more>>
libCoroutine is a simple stackfull coroutine implementation, largely based on ucontext and fibers.
This library is built from the coroutine implementation of the Io programming language project.
<<lessThis library is built from the coroutine implementation of the Io programming language project.
Download (0.012MB)
Added: 2006-05-22 License: BSD License Price:
1254 downloads
ANUGA 1.0 Beta 4669
ANUGA is a software implementation of a hydrodynamic model that is specifically designed to model wetting and drying processes. more>>
ANUGA is a software implementation of a hydrodynamic model that is specifically designed to model wetting and drying processes.
<<less Download (3.5MB)
Added: 2007-08-17 License: GPL (GNU General Public License) Price:
803 downloads
Secleted [ 0 ] software to compare
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above definition of poor implementation search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed