sons
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 13
Way Of The Warrior: Sons of twilight 5.0
Way of The Warrior: Sons of Twilight is a Web-based boardgame of fantasy battle. more>>
Way of The Warrior: Sons of Twilight is a Web-based boardgame of fantasy battle. Like a boardgame, it is turn based and at least 2 players are neeed, but there is no upper limit on the number of players.
Way Of The Warrior: Sons of twilight is fully and easily customizable, from the unit to the board tile.
Enhancements:
- board visualization is now good
- sincronization algoritm for the save process
<<lessWay Of The Warrior: Sons of twilight is fully and easily customizable, from the unit to the board tile.
Enhancements:
- board visualization is now good
- sincronization algoritm for the save process
Download (3.0MB)
Added: 2006-10-11 License: Other/Proprietary License Price:
1110 downloads
Son of Service 0.1.5
Son of Service is a Web-based, multi-user volunteer management database for non-profits, schools, clubs, etc. more>>
Son of Service (SOS) is a multiuser volunteer management database for non-profits, charities, schools, churches, and clubs. SOS will keep track of your volunteers, their contact information, availability, work history, comments, reminders, and relationships.
It will help you quickly find the right volunteer for the job and e-mail him, and it will make reports about how you are using volunteers.
SOS is a helpful tool for organizations with many volunteers or multiple volunteer coordinators.
Your organization helps people for free, and your volunteers work for free. So you know there is a "free lunch."
SOS is free. Its free from charge: notice there is no menu option for purchasing or ordering. But SOS also provides freedom from many restrictions. Download the program, install it, and use it without buying expensive licenses.
Use it on as many systems with as many users and volunteers as you have. Use your choice of server operating system and RDBMS. (You dont need to buy a RDBMS or other server software.) You can even modify SOS to meet your specific needs because the full source is available to you.
<<lessIt will help you quickly find the right volunteer for the job and e-mail him, and it will make reports about how you are using volunteers.
SOS is a helpful tool for organizations with many volunteers or multiple volunteer coordinators.
Your organization helps people for free, and your volunteers work for free. So you know there is a "free lunch."
SOS is free. Its free from charge: notice there is no menu option for purchasing or ordering. But SOS also provides freedom from many restrictions. Download the program, install it, and use it without buying expensive licenses.
Use it on as many systems with as many users and volunteers as you have. Use your choice of server operating system and RDBMS. (You dont need to buy a RDBMS or other server software.) You can even modify SOS to meet your specific needs because the full source is available to you.
Download (0.48MB)
Added: 2006-08-14 License: GPL (GNU General Public License) Price:
1167 downloads
Sort::Key 1.28
Sort::Key is the fastest way to sort anything in Perl. more>>
Sort::Key is the fastest way to sort anything in Perl.
SYNOPSIS
use Sort::Key qw(keysort nkeysort ikeysort);
@by_name = keysort { "$_->{surname} $_->{name}" } @people;
# sorting by a numeric key:
@by_age = nkeysort { $_->{age} } @people;
# sorting by a numeric integer key:
@by_sons = ikeysort { $_->{sons} } @people;
Sort::Key provides a set of functions to sort lists of values by some calculated key value.
It is faster (usually much faster) and uses less memory than other alternatives implemented around perl sort function (ST, GRT, etc.).
Multikey sorting functionality is also provided via the companion modules Sort::Key::Multi, Sort::Key::Maker and Sort::Key::Register.
FUNCTIONS
This module provides a large number of sorting subroutines but they are all variations off the keysort one:
@sorted = keysort { CALC_KEY($_) } @data
that is conceptually equivalent to
@sorted = sort { CALC_KEY($a) cmp CALC_KEY($b) } @data
and where CALC_KEY($_) can be any expresion to extract the key value from $_ (not only a subroutine call).
For instance, some variations are nkeysort that performs a numeric comparison, rkeysort that orders the data in descending order, ikeysort and ukeysort that are optimized versions of nkeysort that can be used when the keys are integers or unsigned integers respectively, etc.
Also, inplace versions of the sorters are provided. For instance
keysort_inplace { CALC_KEY($_) } @data
that is equivalent to
@data = keysort { CALC_KEY($_) } @data
but being (a bit) faster and using less memory.
The full list of subroutines that can be imported from this module follows:
keysort { CALC_KEY } @array
returns the elements on @array sorted by the key calculated applying { CALC_KEY } to them.
Inside { CALC_KEY }, the object is available as $_.
For example:
@a=({name=>john, surname=>smith}, {name=>paul, surname=>belvedere});
@by_name=keysort {$_->{name}} @a;
This function honours the use locale pragma.
nkeysort { CALC_KEY } @array
similar to keysort but compares the keys numerically instead of as strings.
This function honours the use integer pragma, i.e.:
use integer;
my @s=(2.4, 2.0, 1.6, 1.2, 0.8);
my @ns = nkeysort { $_ } @s;
print "@nsn"
prints
0.8 1.6 1.2 2.4 2
rnkeysort { CALC_KEY } @array
works as nkeysort, comparing keys in reverse (or descending) numerical order.
ikeysort { CALC_KEY } @array
works as keysort but compares the keys as integers (32 bits or more, no checking is performed for overflows).
rikeysort { CALC_KEY } @array
works as ikeysort, but in reverse (or descending) order.
ukeysort { CALC_KEY } @array
works as keysort but compares the keys as unsigned integers (32 bits or more).
For instance, it can be used to efficiently sort IP4 addresses:
my @data = qw(1.2.3.4 4.3.2.1 11.1.111.1 222.12.1.34
0.0.0.0 255.255.255.0) 127.0.0.1);
my @sorted = ukeysort {
my @a = split /./;
(((($a[0] name,
$_->middlename },
qw(str str str);
Sort::Key::register_type Color =>
sub { $_->R, $_->G, $_->B },
qw(int int int);
Once a datatype has been registered it can be used in the same way as types supported natively, even for defining new types, i.e.:
Sort::Key::register_type Family =>
sub { $_->man, $_->woman },
qw(Person Person);
<<lessSYNOPSIS
use Sort::Key qw(keysort nkeysort ikeysort);
@by_name = keysort { "$_->{surname} $_->{name}" } @people;
# sorting by a numeric key:
@by_age = nkeysort { $_->{age} } @people;
# sorting by a numeric integer key:
@by_sons = ikeysort { $_->{sons} } @people;
Sort::Key provides a set of functions to sort lists of values by some calculated key value.
It is faster (usually much faster) and uses less memory than other alternatives implemented around perl sort function (ST, GRT, etc.).
Multikey sorting functionality is also provided via the companion modules Sort::Key::Multi, Sort::Key::Maker and Sort::Key::Register.
FUNCTIONS
This module provides a large number of sorting subroutines but they are all variations off the keysort one:
@sorted = keysort { CALC_KEY($_) } @data
that is conceptually equivalent to
@sorted = sort { CALC_KEY($a) cmp CALC_KEY($b) } @data
and where CALC_KEY($_) can be any expresion to extract the key value from $_ (not only a subroutine call).
For instance, some variations are nkeysort that performs a numeric comparison, rkeysort that orders the data in descending order, ikeysort and ukeysort that are optimized versions of nkeysort that can be used when the keys are integers or unsigned integers respectively, etc.
Also, inplace versions of the sorters are provided. For instance
keysort_inplace { CALC_KEY($_) } @data
that is equivalent to
@data = keysort { CALC_KEY($_) } @data
but being (a bit) faster and using less memory.
The full list of subroutines that can be imported from this module follows:
keysort { CALC_KEY } @array
returns the elements on @array sorted by the key calculated applying { CALC_KEY } to them.
Inside { CALC_KEY }, the object is available as $_.
For example:
@a=({name=>john, surname=>smith}, {name=>paul, surname=>belvedere});
@by_name=keysort {$_->{name}} @a;
This function honours the use locale pragma.
nkeysort { CALC_KEY } @array
similar to keysort but compares the keys numerically instead of as strings.
This function honours the use integer pragma, i.e.:
use integer;
my @s=(2.4, 2.0, 1.6, 1.2, 0.8);
my @ns = nkeysort { $_ } @s;
print "@nsn"
prints
0.8 1.6 1.2 2.4 2
rnkeysort { CALC_KEY } @array
works as nkeysort, comparing keys in reverse (or descending) numerical order.
ikeysort { CALC_KEY } @array
works as keysort but compares the keys as integers (32 bits or more, no checking is performed for overflows).
rikeysort { CALC_KEY } @array
works as ikeysort, but in reverse (or descending) order.
ukeysort { CALC_KEY } @array
works as keysort but compares the keys as unsigned integers (32 bits or more).
For instance, it can be used to efficiently sort IP4 addresses:
my @data = qw(1.2.3.4 4.3.2.1 11.1.111.1 222.12.1.34
0.0.0.0 255.255.255.0) 127.0.0.1);
my @sorted = ukeysort {
my @a = split /./;
(((($a[0] name,
$_->middlename },
qw(str str str);
Sort::Key::register_type Color =>
sub { $_->R, $_->G, $_->B },
qw(int int int);
Once a datatype has been registered it can be used in the same way as types supported natively, even for defining new types, i.e.:
Sort::Key::register_type Family =>
sub { $_->man, $_->woman },
qw(Person Person);
Download (0.055MB)
Added: 2007-05-22 License: Perl Artistic License Price:
888 downloads
SA report series for ipfilter for Unix 1.3
Present you the new reporting system for ipfilter. more>> Being a FreeBSD solution provider, we proudly present you the new reporting system for ipfilter. It comes with the following features:
Cross platform
This program based on java technology and supposed to run on any system support J2SE without problem.
Comprehensive report
rich report set covering traffic utilization and internet threat.
Internationalization
Currently english and tranditional chinese supported<<less
Download (4.03MB)
Added: 2009-04-24 License: Freeware Price: Free
182 downloads
Statistics::Hartigan 0.01
Statistics::Hartigan is a Perl extension for the stopping rule proposed by Hartigan J. Hartigan, J. (1975). more>>
Statistics::Hartigan is a Perl extension for the stopping rule proposed by Hartigan J. Hartigan, J. (1975). Clustering Algorithms. John Wiley and Sons, New York, NY, US.
SYNOPSIS
use Statistics::Hartigan;
&hartigan(InputFile, "agglo", 6, 10);
Input file is expected in the "dense" format -
Sample Input file:
6 5
1 1 0 0 1
1 0 0 0 0
1 1 0 0 1
1 1 0 0 1
1 0 0 0 1
1 1 0 0 1
Hartigan J. uses the Within Cluster/Group Sum of Squares (WGSS) to estimate the number of clusters a given data naturally falls into. The is goal is to minimize WG.
<<lessSYNOPSIS
use Statistics::Hartigan;
&hartigan(InputFile, "agglo", 6, 10);
Input file is expected in the "dense" format -
Sample Input file:
6 5
1 1 0 0 1
1 0 0 0 0
1 1 0 0 1
1 1 0 0 1
1 0 0 0 1
1 1 0 0 1
Hartigan J. uses the Within Cluster/Group Sum of Squares (WGSS) to estimate the number of clusters a given data naturally falls into. The is goal is to minimize WG.
Download (0.006MB)
Added: 2007-05-23 License: Perl Artistic License Price:
884 downloads
SLFFEA 1.4
SLFFEA stands for San Les Free Finite Element Analysis. more>>
SLFFEA stands for San Les Free Finite Element Analysis. SLFFEA is a package of scientific software and graphical user interfaces for use in finite element analysis. It is written in ANSI C by San Le and distributed under the terms of the GNU license.
SLFFEA includes:
9 of the basic finite element types:
- 3-D 2 node beam
- 3-D 8 node brick
- 2-D 4 node plate
- 2-D 4 node quad (plane stress and plane strain)
- 3-D 4 node doubly curved shell (individual element defined by 4 or 8 nodes)
- 3-D 4 node tetrahedron
- 2-D 3 node triangle
- 3-D 2 node truss
- 3-D 6 node wedge
non-linear large deformation element:
- 3-D 8 node brick - Updated Lagrange formulation with Jaumann Stress Rate
And 1 thermal element:
- 3-D 8 node brick - It can handle thermal loads as well as orthotropy.
9 Graphical User Interfaces for each element type.
- Example of brick GUI
- Example of beam GUI
SLFFEA is dedicated to Richard Stallman , Granddaddy of the Free Software Movement, Linus Torvalds, its prodigal son, and everyone on comp.os.linux.setup .
<<lessSLFFEA includes:
9 of the basic finite element types:
- 3-D 2 node beam
- 3-D 8 node brick
- 2-D 4 node plate
- 2-D 4 node quad (plane stress and plane strain)
- 3-D 4 node doubly curved shell (individual element defined by 4 or 8 nodes)
- 3-D 4 node tetrahedron
- 2-D 3 node triangle
- 3-D 2 node truss
- 3-D 6 node wedge
non-linear large deformation element:
- 3-D 8 node brick - Updated Lagrange formulation with Jaumann Stress Rate
And 1 thermal element:
- 3-D 8 node brick - It can handle thermal loads as well as orthotropy.
9 Graphical User Interfaces for each element type.
- Example of brick GUI
- Example of beam GUI
SLFFEA is dedicated to Richard Stallman , Granddaddy of the Free Software Movement, Linus Torvalds, its prodigal son, and everyone on comp.os.linux.setup .
Download (1.0MB)
Added: 2006-11-16 License: LGPL (GNU Lesser General Public License) Price:
1076 downloads
fortune-mod-southpark 0.2
fortune-mod-southpark project consists of a fortune file with quotes from South Park. more>>
fortune-mod-southpark project consists of a fortune file with quotes from South Park.
South Park Fortunes is a package containing various quotes from "South Park: Bigger, Longer, and Uncut" in the UNIX fortune file format.
Examples:
Rub my nipples as I torture this little piggy!
No dude, Id be scared too, youre mom is a fucking bitch.
Dont call my mom a bitch, you fat fuck!
Dont call me fat you buttfucking son of a bitch.
Should we blame the government?
Or blame society?
Or should we blame the images on TV?
NO! Blame Canada!
Enhancements:
- Fixed typos, nothing noteworthy. Released for the sake of the English language
- probably final release
<<lessSouth Park Fortunes is a package containing various quotes from "South Park: Bigger, Longer, and Uncut" in the UNIX fortune file format.
Examples:
Rub my nipples as I torture this little piggy!
No dude, Id be scared too, youre mom is a fucking bitch.
Dont call my mom a bitch, you fat fuck!
Dont call me fat you buttfucking son of a bitch.
Should we blame the government?
Or blame society?
Or should we blame the images on TV?
NO! Blame Canada!
Enhancements:
- Fixed typos, nothing noteworthy. Released for the sake of the English language
- probably final release
Download (0.010MB)
Added: 2006-12-13 License: GPL (GNU General Public License) Price:
1050 downloads
Fenris 0.07-m2 build 3245
Fenris is a multipurpose tracer, debugger, and code analysis tool. more>>
Fenris is a suite of tools suitable for code analysis, debugging, protocol analysis, reverse engineering, forensics, diagnostics, security audits, vulnerability research and many other purposes.
The main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
<<lessThe main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
Download (1.1MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1657 downloads
GoblinX Mini Edition 2.0.0
GoblinX Mini Edition is a son of GoblinX and contains only XFCE as windows manager and GTK/GTK2 based applications. more>>
GoblinX Mini Edition is a son of GoblinX and contains only XFCE as windows manager and GTK2/GTK based applications.
The edition is indicated for those users whose want to remaster the distro and also those with difficulties to download more than three hundreds of megabytes, original size of GoblinX Main distro.
The GoblinX Mini Edition will have newer versions released faster and it will be used also for tests and for system and hardware support improvements.
The Mini Edition includes GoblinX default modules such as 01.x.base.mo, 02.x.deflibs.mo, 03.x.defX.mo, 04.x.default.mo, modules included also in master edition, and 08.x.mini.mo, which adds more applications to the edition.
The ISO image is about one hundred and fifty megabytes, but the mini edition contains an excellent source of applications and its more easy to download and also to remaster because modules are already prepared to allow a fast rebuild of the ISO file.
The ISO image has less than half size of the original GoblinX.
The edition also is been used for tests and all applications not based on QT libraries will be tested first by the mini edition, and these tests will make more stable the main distro.
Try out the mini edition, make it your small Linux LiveCD and save memory, you can also use a minicd to burn it and some other devices... If you edit or remove some applications, it can fit into a 128MB pen drive...
The Mini Edition will use the same version definition of GoblinX, so the mini edition is starting using 1.2.0 as edition version.
Enhancements:
- GoblinX Mini 2.0.0 is released. The GoblinX Mini Edition is the son of GoblinX and contains only the Xfce windows manager and GTK+-based applications. This release follows Premium 2007.1 edition and starts the second generation of the distribution. All new features and upgrades prepared for the Premium edition are included, including a new functional Magic Center which works with Xfce and all graphical user interfaces.
<<lessThe edition is indicated for those users whose want to remaster the distro and also those with difficulties to download more than three hundreds of megabytes, original size of GoblinX Main distro.
The GoblinX Mini Edition will have newer versions released faster and it will be used also for tests and for system and hardware support improvements.
The Mini Edition includes GoblinX default modules such as 01.x.base.mo, 02.x.deflibs.mo, 03.x.defX.mo, 04.x.default.mo, modules included also in master edition, and 08.x.mini.mo, which adds more applications to the edition.
The ISO image is about one hundred and fifty megabytes, but the mini edition contains an excellent source of applications and its more easy to download and also to remaster because modules are already prepared to allow a fast rebuild of the ISO file.
The ISO image has less than half size of the original GoblinX.
The edition also is been used for tests and all applications not based on QT libraries will be tested first by the mini edition, and these tests will make more stable the main distro.
Try out the mini edition, make it your small Linux LiveCD and save memory, you can also use a minicd to burn it and some other devices... If you edit or remove some applications, it can fit into a 128MB pen drive...
The Mini Edition will use the same version definition of GoblinX, so the mini edition is starting using 1.2.0 as edition version.
Enhancements:
- GoblinX Mini 2.0.0 is released. The GoblinX Mini Edition is the son of GoblinX and contains only the Xfce windows manager and GTK+-based applications. This release follows Premium 2007.1 edition and starts the second generation of the distribution. All new features and upgrades prepared for the Premium edition are included, including a new functional Magic Center which works with Xfce and all graphical user interfaces.
Download (167MB)
Added: 2007-04-09 License: GPL (GNU General Public License) Price:
928 downloads
Boomer 3.1.2
Boomer project is a general purpose modeling and simulation program. more>>
Boomer project is a general purpose modeling and simulation program.
It provides the estimation of parameter values by non-linear weighted least squares regression or the simulation of complex systems of differential equations.
Parameter estimation can be by normal or Bayesian methods. A comprehensive list of weighting schemes is included. The model to be analyzed can be entered as a system of integrated equations or as a system of differential equations.
Differential equations are solved by a classical fourth order Runge-Kutta method, a fourth order Runge-Kutta-Gill method, a four/five Runge-Kutta-Fehlberg method, an Adams predictor-corrector method, or Gears method for stiff equations.
Simulation with random error in parameters or data are also possible. A batch run can be repeated many times to assist in Monte Carlo type studies.
Installation:
Untar the downloaded file with
tar -xvzf fboomer312a.tar.gz
As an administrator user you can move boomer to your PATH and thereby invoke the program globally. The command:
sudo cp boomer /usr/bin/boomer
Enter password
from your download folder (where the new version of boomer resides) will put boomer in a directory usually included in your PATH variable. This can be checked with the command:
echo $PATH
I havent checked this with Linux/Fedora yet but something similar should work. I only get limited time on my younger sons game machine.
<<lessIt provides the estimation of parameter values by non-linear weighted least squares regression or the simulation of complex systems of differential equations.
Parameter estimation can be by normal or Bayesian methods. A comprehensive list of weighting schemes is included. The model to be analyzed can be entered as a system of integrated equations or as a system of differential equations.
Differential equations are solved by a classical fourth order Runge-Kutta method, a fourth order Runge-Kutta-Gill method, a four/five Runge-Kutta-Fehlberg method, an Adams predictor-corrector method, or Gears method for stiff equations.
Simulation with random error in parameters or data are also possible. A batch run can be repeated many times to assist in Monte Carlo type studies.
Installation:
Untar the downloaded file with
tar -xvzf fboomer312a.tar.gz
As an administrator user you can move boomer to your PATH and thereby invoke the program globally. The command:
sudo cp boomer /usr/bin/boomer
Enter password
from your download folder (where the new version of boomer resides) will put boomer in a directory usually included in your PATH variable. This can be checked with the command:
echo $PATH
I havent checked this with Linux/Fedora yet but something similar should work. I only get limited time on my younger sons game machine.
Download (0.13MB)
Added: 2005-12-28 License: Freeware Price:
1396 downloads
Games::Maze::SVG::Manual 0.75
Games::Maze::SVG::Manual is a Perl module with manual for the Games::Maze::SVG modules. more>>
Games::Maze::SVG::Manual is a Perl module with manual for the Games::Maze::SVG modules.
PURPOSE
The Games::Maze::SVG module supports the creation of 2-dimensional mazes in an SVG format suitable for printing or playing interactively. This module use the Games::Maze module to perform the actual work of creating the mazes.
HISTORY
During the middle of 2004, my son was extremely interested in mazes. We could not get enough mazes for him to solve. As a Perl programmer, I decided there must be some way to generate mazes and went to CPAN. I found Games::Maze. I printed a few pages of these mazes, and he was happy.
Unfortunately, the ASCII-based maze was not really satisfying for me. So I wrote code to convert the output of Games::Maze to SVG. This made much nicer looking mazes. I worked for a while to make the lines look better and to vary the corners to generate mazes that looked even better.
But the mazes were still missing something. So, I added the scripting support that would make the maze playable. I wrapped an HTML form around the generation program to allow it to be launched from the web.
I made this version available on my website. A friend of mine made some suggestions for individual visual changes that I incorporated. The design of the code did not change much during the next year. It was still a quick hacked wrapper around Games::Maze without much flexibility.
A year later, a comment on the SVG Developers mailing list made me dust off the code with an ey towards making a legitimate Perl module out of it. When I began looking at the code again, I realized that the original had been more of a hack than I remembered. The new version still could use some significant cleanup, but I am much happier with the overall design.
SYNOPSIS
use Games::Maze::SVG;
my $maze = Games::Maze::SVG->new( Rect, wallform => roundcorners );
my $svgout = $maze->toString();
OVERVIEW
The Games::Maze::SVG module can produce interactive or non-interactive mazes in SVG of three basic shapes. The shape of the maze is determined by the first parameter. This parameter is a string with one of the following values:
Rect
A maze with a rectangular overall shape and rectangular hallways.
RectHex
A maze with a rectangular overall shape and hallways made from hexagonal cells.
Hex
A maze with a hexagonal overall shape and hallways made from hexagonal cells.
The mazes can be further configured using a set of named parameters that follow the shape parameter. Most of these parameters are independent of the shape chosen. In addition, the mazeparams parameter supports passing parameters directly to the internal Games::Maze object which is used to create the maze.
<<lessPURPOSE
The Games::Maze::SVG module supports the creation of 2-dimensional mazes in an SVG format suitable for printing or playing interactively. This module use the Games::Maze module to perform the actual work of creating the mazes.
HISTORY
During the middle of 2004, my son was extremely interested in mazes. We could not get enough mazes for him to solve. As a Perl programmer, I decided there must be some way to generate mazes and went to CPAN. I found Games::Maze. I printed a few pages of these mazes, and he was happy.
Unfortunately, the ASCII-based maze was not really satisfying for me. So I wrote code to convert the output of Games::Maze to SVG. This made much nicer looking mazes. I worked for a while to make the lines look better and to vary the corners to generate mazes that looked even better.
But the mazes were still missing something. So, I added the scripting support that would make the maze playable. I wrapped an HTML form around the generation program to allow it to be launched from the web.
I made this version available on my website. A friend of mine made some suggestions for individual visual changes that I incorporated. The design of the code did not change much during the next year. It was still a quick hacked wrapper around Games::Maze without much flexibility.
A year later, a comment on the SVG Developers mailing list made me dust off the code with an ey towards making a legitimate Perl module out of it. When I began looking at the code again, I realized that the original had been more of a hack than I remembered. The new version still could use some significant cleanup, but I am much happier with the overall design.
SYNOPSIS
use Games::Maze::SVG;
my $maze = Games::Maze::SVG->new( Rect, wallform => roundcorners );
my $svgout = $maze->toString();
OVERVIEW
The Games::Maze::SVG module can produce interactive or non-interactive mazes in SVG of three basic shapes. The shape of the maze is determined by the first parameter. This parameter is a string with one of the following values:
Rect
A maze with a rectangular overall shape and rectangular hallways.
RectHex
A maze with a rectangular overall shape and hallways made from hexagonal cells.
Hex
A maze with a hexagonal overall shape and hallways made from hexagonal cells.
The mazes can be further configured using a set of named parameters that follow the shape parameter. Most of these parameters are independent of the shape chosen. In addition, the mazeparams parameter supports passing parameters directly to the internal Games::Maze object which is used to create the maze.
Download (0.035MB)
Added: 2007-01-08 License: Perl Artistic License Price:
601 downloads
KoffeePhoto 2.5.127
KoffeePhoto est un logiciel gratuit pour organiser, stocker et partager vos photos. Son système unique de sauvegarde sécurisée assure la conservation ... more>> <<less
Download (2441KB)
Added: 2009-04-27 License: Freeware Price: Free
258 downloads
Bio::Root::Object 1.4
Bio::Root::Object is a core Perl 5 object. more>>
Bio::Root::Object is a core Perl 5 object.
SYNOPSIS
# Use this module as the root of your inheritance tree.
Object Creation
require Bio::Root::Object;
$dad = new Bio::Root::Object();
$son = new Bio::Root::Object(-name => Junior,
-parent => $dad,
-make => full);
See the new() method for a complete description of parameters. See also the USAGE section .
Bio::Root::Object attempts to encapsulate the "core" Perl5 object: What are the key data and behaviors ALL (or at least most) Perl5 objects should have?
Rationale
Use of Bio::Root::Object.pm within the Bioperl framework facilitates operational consistency across the different modules defined within the Bio:: namespace. Not all objects need to derive from Bio::Root::Object.pm. However, when generating lots of different types of potentially complex objects which should all conform to a set of basic expectations, this module may be handy.
At the very least, this module saves you from re-writing the new() method for each module you develop. It also permits consistent and robust handling of -tag => value method arguments via the Bio::Root::RootI::_rearrange() method and provides a object-oriented way handle exceptions and warnings via the Bio::Root::Root::throw() and Bio::Root::Root::warn() methods.
See the APPENDIX section for some other handy methods.
Fault-Tolerant Objects
A major motivation for this module was to promote the creation of robust, fault-tolerant Perl5 objects. The Bio::Root::Root::throw() method relies on Perls built-in eval{}/die exception mechanism to generate fatal exceptions. The data comprising an exception is managed by the Bio::Root::Err.pm module, which essentially allows the data thrown by a die() event to be wrapped into an object that can be easily examined and possibly re-thrown.
The intent here is three-fold:
1 Detailed error reporting.
Allow objects to report detailed information about the error condition (who, what, where, why, how).
2 Handle complex errors in objects.
The goal is to make it relatively painless to detect and handle the wide variety of errors possible with a complex Perl object. Perls error handling mechanism is a might clunky when it comes to handling complex errors within complex objects, but it is improving.
3 Efficient & easy exception handling.
To enable robust exception handling without incurring a significant performance penalty in the resulting code. Ideally, exception handling code should be transparent to the cpu until and unless an exception arises.
These goals may at times be at odds and we are not claiming to have achieved the perfect balance. Ultimately, we want self- sufficient object-oriented systems able to deal with their own errors. This area should improve as the module, and Perl, evolve. One possible modification might be to utilize Graham Barrs Error.pm module or Torsten Ekedahls Experimental::Exception.pm module (see "Other Exception Modules").
Technologies such as these may eventually be incorporated into future releases of Perl. The exception handling used by Bio::Root::Object.pm can be expected to change as Perls exception handling mechanism evolves.
TERMINOLOGY NOTE: In this discussion and elsewhere in this module, the terms "Exception" and "Error" are used interchangeably to mean "something unexpected occurred" either as a result of incorrect user input or faulty internal processing.
<<lessSYNOPSIS
# Use this module as the root of your inheritance tree.
Object Creation
require Bio::Root::Object;
$dad = new Bio::Root::Object();
$son = new Bio::Root::Object(-name => Junior,
-parent => $dad,
-make => full);
See the new() method for a complete description of parameters. See also the USAGE section .
Bio::Root::Object attempts to encapsulate the "core" Perl5 object: What are the key data and behaviors ALL (or at least most) Perl5 objects should have?
Rationale
Use of Bio::Root::Object.pm within the Bioperl framework facilitates operational consistency across the different modules defined within the Bio:: namespace. Not all objects need to derive from Bio::Root::Object.pm. However, when generating lots of different types of potentially complex objects which should all conform to a set of basic expectations, this module may be handy.
At the very least, this module saves you from re-writing the new() method for each module you develop. It also permits consistent and robust handling of -tag => value method arguments via the Bio::Root::RootI::_rearrange() method and provides a object-oriented way handle exceptions and warnings via the Bio::Root::Root::throw() and Bio::Root::Root::warn() methods.
See the APPENDIX section for some other handy methods.
Fault-Tolerant Objects
A major motivation for this module was to promote the creation of robust, fault-tolerant Perl5 objects. The Bio::Root::Root::throw() method relies on Perls built-in eval{}/die exception mechanism to generate fatal exceptions. The data comprising an exception is managed by the Bio::Root::Err.pm module, which essentially allows the data thrown by a die() event to be wrapped into an object that can be easily examined and possibly re-thrown.
The intent here is three-fold:
1 Detailed error reporting.
Allow objects to report detailed information about the error condition (who, what, where, why, how).
2 Handle complex errors in objects.
The goal is to make it relatively painless to detect and handle the wide variety of errors possible with a complex Perl object. Perls error handling mechanism is a might clunky when it comes to handling complex errors within complex objects, but it is improving.
3 Efficient & easy exception handling.
To enable robust exception handling without incurring a significant performance penalty in the resulting code. Ideally, exception handling code should be transparent to the cpu until and unless an exception arises.
These goals may at times be at odds and we are not claiming to have achieved the perfect balance. Ultimately, we want self- sufficient object-oriented systems able to deal with their own errors. This area should improve as the module, and Perl, evolve. One possible modification might be to utilize Graham Barrs Error.pm module or Torsten Ekedahls Experimental::Exception.pm module (see "Other Exception Modules").
Technologies such as these may eventually be incorporated into future releases of Perl. The exception handling used by Bio::Root::Object.pm can be expected to change as Perls exception handling mechanism evolves.
TERMINOLOGY NOTE: In this discussion and elsewhere in this module, the terms "Exception" and "Error" are used interchangeably to mean "something unexpected occurred" either as a result of incorrect user input or faulty internal processing.
Download (4.7MB)
Added: 2006-06-16 License: Perl Artistic License Price:
1225 downloads
Secleted [ 0 ] software to compare
- Page: 1 of 1
- 1
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above sons 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