![Consrupt](http://swpat.ffii.org/img/banners/reboot0501.en.gif)
Le Conseil de l'UE s'apprête à balayer le vote du Parlement sans discussion
Le Conseil des ministres de l'UE est en train de prouver que la notion de démocratie est étrangère à l'Union européenne. La présidence irlandaise est parvenue à obtenir une majorité qualifiée pour une contre-proposition à la directive sur les brevets logiciel, avec seulement quelques pays - dont la Belgique et l'Allemagne - faisant preuve de résistance. Le nouveau texte propose de jeter tous les amendements du Parlement européen qui imposaient des limites à la brevetabilité. Au lieu de cela, il rétablit dans sa totalité le langage sibyllin de la proposition originale de la Commission, en y ajoutant la brevetabilité directe de programmes d'ordinateur, de structures de données et de description de processus comme cerise sur le gâteau. Les membres du Parlement européen de tous les groupes de l'échiquier politique condamnent cette irrévérence flagrante pour la démocratie en Europe.
|
EU Council Plans to Scrap Parliamentary Vote without Discussion
The EU Council of Ministers is demonstrating that the concept of democracy is alien to the EU. The Irish Presidency managed to secure a qualified majority for a counter-proposal to the software patents directive, with only a few countries - including Belgium and Germany - showing resistance. The new text proposes to discard all the amendments from the European which would limite patentability. Instead the lax language of the original Commission proposal is to be reinstated in its entirety, with direct patentability of computer programs, data structures and process descriptions added as icing on the cake. Members of the European Parliament from all groups across the political spectrum are condemning this blatant disrespect for democracy in Europe.
|
The Cheap Matrix Package
Description
There
already exist quite a few matrix packages over
the internet, like Blitz++ and the Matrix Template Library, to mention only 2.
So, what? Yet another matrix package? Why should I bother...
:-)
Because there was a need for
handling huge matrices, and all the other packages I found are optimized for
speed, not memory.
Because
there was a need for functions like Singular Value Decomposition, that
are implemented in LAPACK.
Because
I needed some very simple code, just to fit my needs. By simple, I mean
not a code you have to read pages of documentation before using it (Really! Go and
check the examples now if you didn't do it first thing!). No template, to
begin with, Matrix is ready to use. And also a syntax I think is 'natural': no
stencil, no Range2D or whatever class for matrix extraction, no
Array<arg, arg, arg...> unterminable lists of adjustable features, etc...
Most of those user-specified parameters aren't used in practice anyway, so I
prefered to implement the ones that really are in the most straightforward way
I found.
And because
no other package was satisfying enough for what I need. Not that
I claim this one is perfect, its usefulness depends on what you want to do with
it. But at least it combines easy to use matrix manipulation, transparent
swaping using mmap and reference counting for low memory usage, and the possibility
to use the power of LAPACK in the background.
What you'll find:
- A Matrix (and Vector) class in its own namespace, with the corresponding C++
facilities (operators, overload of 'math.h' functions that work on Matrices, I/O
streaming...) but not so excessive as to bloat the code or the compiler. And as
a dynamic library. Two of its strong points are reference counting, and the ability
to dump the data in a file and load it only partially in memory, transparently.
- C++ wrappers for LAPACK functions: inverse using LU, eigenvalues/vectors,
singular values/vectors, and least square estimation. Please send them
if you write more wrappers (it's really easy), as I wrote only those I need.
- Utilities that you would miss if you have an Octave/Matlab(r)/Scilab background.
Those include functions like eye, mean, randn, and the range generator (-1:2:5),
for example.
- A plug-in framework for optimizers and models. Writing your model and calling
an optimizer on it (or the other way around!) takes just a few lines, seeing the
corresponding examples should convince you.
- Documentation and examples.
What you won't find:
- Speed optimized functions. I did that whenever possible, but this package
assumes your main goal is to work on big matrices, or with LAPACK, or using
coordinate transforms (transpose, sub-matrix extraction, flip row/column...)
in which case the speed is there. It is perfectly possible to work on
small matrices and do arithmetic on them, and the performances are even
fair enough, but just don't hope to write a powerful 3D engine out of it.
- Generic matrices using templates, or custom storage types.
Use Blitz++ if you want that. This package has been kept simple on
purpose to provide what's needed and no more, in a straightforward way.
- A working LAPACK with only 10 bytes of memory. Short of rewriting it,
LAPACK needs the full matrix loaded. The deal is that with this
package you can use simultaneously many matrices, totalling much more
memory than you have, and transparently load only what's required. The reference
counting also helps, by reusing the data that is in memory without actually copying
it.
What could be done to improve this package (feel free to contribute!):
- A library of commonly used scientific
functions. The very basic, like mean and standard deviation, are there already,
but contouring (interpolation), fft/dwt, filtering, etc... are missing.
- A generic plotting system, that doesn't depend on a specific widget library
(yes, please, let's avoid holy wars there!).
It could be done in a similar way as the optimizer architecture, with generic
drawing functions, resolution independant (all coordinates double between 0 and 1
for example), and let the subclasses doing the actual rendering. This could at
the same time offer an eps output seamlessly.
- More LAPACK wrappers.
- Use sparse, symmetric, diagonal and all the LAPACK storage types, probably by
adding some code in translate_coord. Then possibly optimize the operators, like
matrix multiplication on sparse matrices.
- Test and if necessary port it to other architectures than Linux on
x368 & alpha processors, and IRIX64.
- If you feel that motivated, a m2cpp converter to translate m files.
- Anything else you'd like to see there!
Download
You can download the source package here (http may be faster).
CheapMatrix-0.2.tar.gz
(ftp link)
192662 bytes.
CheapMatrix-0.2.tar.bz2
(ftp link)
162021 bytes.
And for your convenience I've also prepared a dynamic library version of LAPACK:
dynlapack-0.1.tar.gz
(ftp link)
1958551 bytes.
dynlapack-0.1.tar.bz2
(ftp link)
1325475 bytes.
This is the documentation released with the 0.2 version. It is also provided
in the source packages.
You can also ask questions on the mailing lists:
- Concerning the development or the internals of the CheapMatrix package. (click here)
- Concerning the usage of the matrices. (click here).
The cvs server isn't set up yet