[yaala] So, lets actually do something...

Florian Forster yaala@verplant.org
Sat, 30 Nov 2002 20:47:13 -0500


--vkogqOf2sHV7VnPd
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hi there ;)

ok, the computer I'm reading mails on is back online.

On Sat, Nov 30, 2002 at 09:09:06PM +0600, qmax wrote:
> Truely saying, my version of yaala is unconsistent:
> - very nonoptimal memory usage;

Ok, this is kind of a two sided blade: On the one hand, we _need_ to find
a good way to store data befor we actually get to work (anything else is
just impractical), on the other hand: some issues may not be expected to
show up or may rise with new modules being written.

In particular it would be very interesting to know wether
  $hash->{'a'}{'b'}
or
  $hash->{'a' . 'b'}
consumes more memory and which has the fater access-times.

> - complicated selection syntax;

One thing that would really make things easier was, if keyfield-selection
and selection of aggregations would be on one line. Something like:
  select: field0, field1 by sum(aggr);

Since, as soon as you have such operators the question of precedence
arises, I would suggest the following (rough overview; ignore spaces,
precedence is descending):
 ( )
 ,
 +
 /

With: ',' being the keyfield-seperator, '+' to combine fields and '/' to
relate the fields just as it was. Your meta-keys (keys filtered by their
value) something like this came to my mind:
  select: key[value] by sum(aggr);

'value' could be a regular expression and therefore being parsed by perl..

> - untractable and unenhanceable internal agregation storage;

probably related to point (1)..

> And i think, that we should chose your branch end as start point,
> redesigning it step-by step.

Sorry, what do you mean by "chose your branch end as start point"??

> The primary issues IMHO are:
> - making clean interface b/wean modules to allow them to be
>   modificable independantly;

Yes. That is mostly the parser modules and the report-generating part. All
the other modules shoudl have a well-defined interface as well, though.

> - redesigning data storage to allow further enhancement;
> - implementing another table description scheme;

Roger that. See above ;)

> - making yaala more configureable;

Yas. I wanted to move the config-parsing parts out of the main program and
change it so the config syntax would be far more flexible.

> Primary modules are:
> - setup: to parse config-options;

Erm, well, se above ;)

> - parser;
> - data: to store data;
> - report;

Ditto ;)

> The main module should allow to configure yaala from config file or
> command line.
> I thing, this should be done as --option=3Dvalue parameter.

I think it would be best to use Getopt::Long or something along this
lines. As far as I know is it part of all major perl distributions and
shouldn't nag the users..

> The setup module should then parse those options and create internal
> data structure, other then main::config.
> IMHO main::config should hold only string presentation,
> and other structure required to hold parsed parameters.
> This structure avoids need of alot of functions like
> setup::datalabels, setup::datatypes, etc (from yaala-qmax).

I think there should be a subroutine to access configuration options and
an interface for parser modules to register with that module. Other
modules (data-storage, report-generation) should then be able to query
that subroutine for configuration settings.

Also, there should be a public subroutine for parsing (i.e. "importing")
the config file, so we can easily parse a secondary config file, which
hold special settings for that particular module (parser modules mostly I
guess).

> The data module should be able to store tree-structured data pool -
> to allow specifyng aggregation for any key combination.
> I suggested [ \@keysequence, \%tree, \$exprdef ] and going to
> implement this soon.

Ok, cool :) I wonder how good this structure could be:
  $hash->{$aggr}{"$key1:$val1;$key2:$val2;...keyN:valN;"}
I put "$aggr" first because I assume that accessing a very small hash
first, and then a big one is more efficient than accessing a huge hash
first and then a (just as) very small one.

This structure makes data-retrieval very slow, but data-storage rather
fast. So the parsing-part is likely to speed up, but in turn the
page-generation process would slow down.=20

> Interface functions are
>     init() - should get all necessary from config structure
>     store(%parsed_hash)
>     retrieve(something) - to retrieve data from pool.
> This 'something' should represent reference to data in pool and be
> enough universal to avoid data-dependency b/wean report and data
> modules.

Clean, easy and functional. I like it ;)

> Later i'll post my suggestions about new selection expr.

For some random thoughts of mine see above. It's just some brainstorming
ideas that I got at 2:45 at night, so if it's all crap don't mind it
please ;)

> I guess u should also make yaala-discuss maillist - for users to
> post suggestions and bug-reports and announce it at yaala homepage.
> This is out of developement scope.

I will do that as soon as it seems to become a problem. With only two
people on the ML this is very unlikely and a second ML would be oversized
;)

Ok, good night, have fun hacking and I'll dig into a config-module
tomorrow ;)

~ octo

--=20
Florian Forster
Hacker in training
GnuPG: 0x91523C3D
http://verplant.org/
http://octo-pus.de/

#!/usr/bin/perl
$o=3Dfiihcgdjdghfdfhcggeh;
@o=3Dsplit//,q!:./eajkhn!.
q@o/rorhppt/ttveglnocto@
;for(c..o){$o=3D~s#$_#q&&.
shift@o#ge;}print$o."\n"

--vkogqOf2sHV7VnPd
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)

iD8DBQE96Wohjvke9ZFSPD0RArTqAJ0Sivh7si0/8L10GwOfkSbidNX13gCfTIfB
2Iwbm6tVADm6crHJ33mB4wo=
=pkGA
-----END PGP SIGNATURE-----

--vkogqOf2sHV7VnPd--