The Return of the Journal : pugs.blogs.com/ | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6 Set by GammaRay on 31 December 2005. |
|||
00:39
gugod joined
01:53
gugod joined,
cookys joined
01:54
tewk joined,
lampus joined,
mtve joined,
arguile joined,
metaperl joined,
jp-autark joined,
gantrixx joined,
beppu joined
01:55
Medvekom_ joined
01:56
Bit-Man joined
01:57
drbean left
02:15
Amnesiac joined,
orafu joined
02:41
vel joined
|
|||
clkao | win 15 | 02:54 | |
02:58
Cryptic_K joined,
stevan_ joined,
kanru joined
03:16
vel__ joined
03:57
vel__ left
04:00
vel left
04:01
scook0 joined
|
|||
buu | Hrm. Whose the owner of evalbot? | 04:20 | |
Whois* | |||
05:13
drbean joined
05:18
xern joined
06:07
elmex joined
06:18
lypanov joined
06:19
iblechbot joined
|
|||
gaal | "but it's not really a concern when it's been typechecked in another language already." (pugs blog) | 06:22 | |
talk about compile-time typechecking! | |||
06:56
GeJ joined
|
|||
GeJ | greetings all | 07:06 | |
dduncan | greetings | ||
hachi raises his glass | 07:09 | ||
dduncan | what are you raising your glass to? | 07:24 | |
over here in Canada, a reason could be the new government we just elected today | |||
hachi | it was for you, sir | 07:25 | |
oh whatever... I'm a little slow | 07:26 | ||
"hello" and whatever | |||
07:31
feng joined
07:34
Aankhen`` joined
08:09
Cryptic_K joined
08:22
nothingmuch joined
08:24
Aankh|Clone joined
08:30
MrFarts joined
|
|||
MrFarts | hi | 08:30 | |
can someone perhaps help me | |||
i have a perl5 question, but no one in any of the regular perl channels is any help | |||
nothingmuch | what about #perl? | 08:32 | |
it's always very busy (~400 users) | |||
MrFarts | no use | ||
nothingmuch | but I can help if you really insist | ||
MrFarts | i'm just trying to install a signal handler for SIGCHLD | 08:33 | |
but it won't work | |||
i have ... | |||
$SIG{CHLD} = \&REAPER; | |||
in the parent | |||
but the REAPER handler is never execured | |||
even though the child dies | |||
nothingmuch | what OS? | ||
MrFarts | linux | ||
nothingmuch | very odd | ||
how are you creating the child? | 08:34 | ||
MrFarts | i have something like print "hello world: in the handler | ||
never gets there | |||
nothingmuch | perl's system() and `` thingies will automatically reap one child | ||
MrFarts | i'm using fork() | ||
nothingmuch | try replacing 'print' with 'syswrite STDOUT' | ||
it might be a bufferring issue | |||
you can use nopaste services | |||
and share your code | |||
e.g. sial.org | 08:35 | ||
08:35
G2 joined
|
|||
MrFarts | nothingmuch, one second | 08:35 | |
nothingmuch, here's the relevant code: | 08:36 | ||
pastebin.com/520294 | |||
nothingmuch | you don't need to backslash escape /, btw =) | 08:37 | |
MrFarts | thanks | ||
nothingmuch | also, i reccomend using 3 arg open | ||
MrFarts | i'm used to C :) | ||
nothingmuch | e.g. open my $fh, "<", $filename; | 08:38 | |
much more safer | |||
err, bad english =) | |||
MrFarts | what about the actual signal handler ? | ||
nothingmuch | one sec, still reading =) | ||
sleep 1000 can be done without system() | |||
MrFarts | i know | ||
it's just scaffolding | 08:39 | ||
nothingmuch | hmm | ||
MrFarts | i'm intentionally doing it from system | ||
nothingmuch | okies | ||
MrFarts | i'll be calling some real programs later | ||
right now "sleep 1000" is a good approximation :) | |||
nothingmuch | add a 'sleep 1000' (no system) to the parent | ||
right after setting the $SIG{CHLD} handler | |||
MrFarts | nothingmuch, why would i want to do that ? | 08:40 | |
nothingmuch | because possibly the parent is exiting before the child | ||
MrFarts | all right ... | ||
works ! | |||
i'll be damned :) | |||
nothingmuch | well, just keep your parent alive | 08:41 | |
you can do this by doing waitpid $pid, 0 | |||
(IIRC) | |||
MrFarts | well i don't want to wait on each pid | ||
nothingmuch | which is a blocking wait on a specific PID | ||
MrFarts | that'll block | ||
nothingmuch | i mean, when the parent exits | ||
MrFarts | i'm forking a bunch of processes | ||
nothingmuch | otherwise just keep your parent running | ||
what does the parent do while waiting for thie children? | |||
MrFarts | nothing | 08:42 | |
nothingmuch | okay, so it needs to wait | ||
MrFarts | the children do all the work | ||
i can't have it do a blocking wait for each child | |||
nothingmuch | or if you want this stuff backgrounded the children need to setsid and what not | ||
MrFarts | the children need to run in parallel | ||
nothingmuch | that doesn't matter | ||
they keep running | |||
but you can also do a blocking wait for any pid | |||
there's snippets for this in perlipc | |||
MrFarts | link ? | 08:43 | |
nothingmuch | 'wait' as opposed to 'waitpid' | ||
67.186.136.119 | |||
08:43
Khisanth joined
|
|||
nothingmuch | crap | 08:43 | |
that's not it, that's stevan_ ;-) | |||
perldoc.perl.org/perlipc.html | |||
or just 'perldoc perlipc' on your CLI | |||
MrFarts | thanks ... | ||
nothingmuch | see also Parallel::ForkManager on the CPAN | 08:44 | |
and IPC::Run | |||
which might be more convenient for you | |||
MrFarts | ok ... | 08:45 | |
i'm looking at parallel::forkmanager | 08:47 | ||
it doesnt' seem to be very well documented | |||
nothingmuch | one sec | 08:48 | |
looks pretty good to me | |||
what's lacking? | |||
search.cpan.org/~dlux/Parallel-Fork...Manager.pm | |||
MrFarts | doesn't make any sense at all | ||
it's clear hwo to fork off whatever number of processes | |||
not at all clear how to control the logic within each | 08:49 | ||
nothingmuch | ah | ||
well, in the SYNOPSIS what you do is | |||
create $pm with a limit of processes | |||
then call ->start | |||
->start returns 0 if you're a child, much like fork | |||
you do the work in the child | |||
and then call $pm->finish | |||
or call $pm->start again in the parent | |||
$pm->start will block once $MAX_PROCESSES is hit | 08:50 | ||
until $pm->finish is called | |||
MrFarts | got it ... | ||
nothingmuch | $pm->wait_all_children will do a blocking wait for any pid until no children are left | ||
MrFarts | i'll try it out ... | 08:51 | |
thanks a lot | |||
nothingmuch | sure thing | ||
i still don't understand why #perl is broken though =) | |||
MrFarts | too bad the #perl guys aren't very helpful | ||
because they are assholes mostly :) | |||
pdcawley just had a thought; Are we still going to be able to do 'given $an_object { .do_this; .do_that; .do_the_other }' ? | |||
And if we're not, *is* there a construct available that's akin to the Smalltalk 'anObject doThis; doThat; doTheOther.' ? | 08:52 | ||
MrFarts | i was in #perl asking abuot timers and some guy banned me after i told him that "sleep" was not my idea of a timer | ||
nothingmuch | heh | ||
perldoc Time::HiRes | |||
was this on freenode or irc.perl.org? | 08:53 | ||
MrFarts | it was on one of the large irc networks | ||
i don't even remember which one | |||
i'm banned from most of the perl channels by nwo :) | |||
nothingmuch | if shlomif is not banned in freenode #perl then I doubt you are ;-) | ||
i don't see why... you were pretty polite and to the point | |||
you didn't paste code to the channel | |||
you weren't abusive | |||
MrFarts | *shrug* | ||
nothingmuch | and you gave specific info to help the dialogue | 08:54 | |
all the things we wish newbies would do more often | |||
MrFarts | unfortunately, many operators have serious mental problems :) | ||
nothingmuch | heh | 08:55 | |
join #perl on this network | |||
MrFarts | honest to god, i got banned for telling a guy that "sleep" was not what i wanted | ||
wolverian | I have too many #perl* channels as well, and irssi doesn't like to show which network the channel is on. | ||
nothingmuch | here? | ||
that's very odd | |||
MrFarts | it's IRC -- it doesn't surprise me any more | ||
wolverian | /statusbar window doesn't show a 'network' entry. hm | 08:56 | |
wonder if there's one in the scripts archive | |||
08:57
KingDiamond joined
|
|||
MrFarts | why doesn't perl have multi-line comments btw | 09:00 | |
C-style comments would be nice :( | |||
Khisanth | nothingmuch: shlomif doesn't actually talk much in #perl | 09:03 | |
09:06
wilx joined
|
|||
nothingmuch | Khisanth: by the name rindolf? | 09:08 | |
IIRC it's quite a lot | |||
nevermind though, it's unimportant | |||
i just know that a. he has a habit of getting banned and b. he is not banned on #perl on freenode | 09:09 | ||
MrFarts | does anyone know whethere Parallel::Forkmanager has any way of giving feedback regaridng the number of children left ? | ||
Khisanth | nothingmuch: yes | ||
MrFarts | nothingmuch, are you there ? | 09:12 | |
nothingmuch | MrFarts: doersn't seem to have a documented API | ||
post a bug | |||
MrFarts | nothingmuch, have you ever played with this thing ? | ||
i reallly don't have much time to get this working | |||
nothingmuch | nope | ||
MrFarts | damn it :( | ||
:( :( :( | |||
nothingmuch | numbder of running children: keys %{ $pm->{processes} } | ||
file a bug | |||
there's a good chance it'll be added in several days | 09:13 | ||
MrFarts | i have about an hour :) | ||
nothingmuch | there are also other interfaces | ||
MrFarts | i'm really beginning to hate perl more and more | 09:14 | |
09:14
kane_ joined
|
|||
nothingmuch | sub Parallel::ForkManager::number_of_children { my $self = shift; keys %{ $self->{processes} } }; | 09:14 | |
MrFarts | with C, things are a pain but you expect them to be | ||
nothingmuch | then you can say $pm->number_of_children | ||
see also Proc::Fork | |||
you might like it more | |||
Parallel::Forker | |||
which isn't as old as Parallel:::ForkManager | |||
Proc::Queue | |||
MrFarts | man, i don't have time for all this | 09:15 | |
i just need it to work | |||
nothingmuch | err | ||
that's not perl's problem | |||
that's opensource in general | |||
wide variety | |||
try IPC::Run | |||
MrFarts | no it's not, but perl is a bit crap | ||
nothingmuch | i think it's going to let you do what you want | ||
Khisanth | chance of being updated in several days seems a bit slim | ||
nothingmuch | with start/pump/finish | ||
09:15
bsb joined
|
|||
nothingmuch | Khisanth: most the modules I've dealt with are fixed pretty fast | 09:15 | |
MrFarts | nothingmuch, i can tell you exactly what i'm trying to do | ||
nothingmuch, maybe you know of some tool suitable for this | |||
nothingmuch | and for those which aren't (e.g. Apache::Htpasswd) i have an army of minions to write alternatives for me (Authen::Htpasswd) | 09:16 | |
MrFarts: spew it, i'm listening | |||
MrFarts | i need to run a whole bunch of external programs and monitor them at intervals | ||
nothingmuch | okay | ||
MrFarts | that's it really | ||
nothingmuch | (IPC::Run, IPC::Run) | ||
;-) | |||
use IPC::Run qw/start finish pump/; | |||
start \@command_line_args, $in, $out, $err; | |||
$in, $out, $err are either filenames, filehandles, callbacks, or scalar refs | 09:17 | ||
MrFarts | ok and then what ? | ||
nothingmuch | they DWIM | ||
or DWYM in this case | |||
MrFarts | DWYM ? | ||
nothingmuch | this returns a handle object | ||
do what you mean | |||
MrFarts | i don't care about getting output from the programs | ||
nothingmuch | my $hgandle = start [qw/some command/], ...; | ||
MrFarts | i just want to know whether they are dead or alive | ||
nothingmuch | push @handles, $handle; | ||
ah | |||
wait | |||
you want to just start a bunch of things? | 09:18 | ||
MrFarts | i want to start a bunch of things and know what's running longer than it should be | ||
nothingmuch | and notify when they've finished? | ||
ah | |||
MrFarts | any ideas ? | 09:19 | |
nothingmuch | you can roll your own | ||
you had a good start | |||
then you can create a queue of items | |||
by the time they're expected to finish | |||
MrFarts | well that's what i was doing already | ||
nothingmuch | sleep the parent until the earliest time of expiry | ||
if the sleep finishes, and not because of a SIGCHLD, then complain loudly | |||
MrFarts | i don't quite understand that | ||
nothingmuch | so what's the problem? | ||
MrFarts | i need to start a certain numbers of subprocs at once | 09:20 | |
and i can't block waiting for each one to finish | |||
nothingmuch | foreach my $task (@tasks) { if ( my $pid = fork ) { push @child, { pid => $pid, eta => $timestamp } } else { exec @$task } } | ||
MrFarts | oh this is using IPC::RUN ? | 09:21 | |
nothingmuch | my $earliest = sort { $a->{eta} <=> $b->{eta} } @children; | ||
no, this is manual | |||
MrFarts | ok if you're in the parnt, keep on spawning more children | ||
nothingmuch | if ( $earliest->{eta} > time() ) { sleep $earliest->{eta} - time } else { warn "child $earliest->{pid} is overdue"; kill 9, $earliest->{pid} } | 09:22 | |
MrFarts | otherwise call exec from within the child ... | ||
nothingmuch | right | ||
wrap that in while ( @children ) { } | |||
and in SIG{CHLD} cleanup the relevant children from @children | |||
MrFarts | what in the world is my $erlist ? | ||
nothingmuch | make sure you're in perl 5.8 or higher | ||
it declares the var $earliest | |||
which contains the structure for the child that is supposed to end soonest | 09:23 | ||
MrFarts | honestly, i'm not following what's going on after you create the parent and child | ||
nothingmuch | based on 'eta' | ||
do all the children end at the same time | |||
? | |||
MrFarts | no | ||
nothingmuch | okay, each one has it's own duration? | ||
MrFarts | yes | ||
nothingmuch | okay | ||
so given time() + $duration you know it's latest eta | |||
err, eta is a bad term | |||
it's deadline | |||
MrFarts | you're going too fast for me... i'm not that familiar with perl | 09:24 | |
nothingmuch | push @children, { pid => $pid, cmd => $cmd, deadline => $timestamp }; | ||
MrFarts | i have to make this into pseudocode | ||
nothingmuch | if you're not familiar with perl but are with C, why not just do it in C? | ||
MrFarts | nothingmuch, because i was under the impression that it would be fast in perl | ||
faster | |||
:) | |||
nothingmuch | struct task { whatever pid; size_t deadline; char * cmd } | ||
well, yes | |||
but only if you know it | 09:25 | ||
IPC::Run can help | |||
but i think it's too much abstraction for someone with your familiarity | |||
it'll probably end up confusing you | |||
and you said you have an hour | |||
you can also use an event loop library like Event or LibEvent | |||
MrFarts | i'm trying to understand what you're trying to do conceptually first | ||
nothingmuch | err, Event::Lib | 09:26 | |
MrFarts | when you got into ETA, i was pretty confused | ||
nothingmuch | well, wrt the child queue - find out what is the earliest child that's supposed to finish | ||
MrFarts | i don't see how you are checking up on the processes | ||
nothingmuch | the earliest deadline | ||
you aren't | |||
you are just waiting | |||
if it's not gone from the queue by then, you kill it | |||
the singal handler cleans the queue | |||
search.cpan.org/~vparseval/Event-Li...ent/Lib.pm | |||
search.cpan.org/~jprit/Event-1.06/lib/Event.pod | 09:27 | ||
these two might be nicer for you | |||
read tutorials and what not | |||
but it won't be an hour, I guarantee you that | |||
writing it will take 15 mins | |||
but learning the libs a bit more | |||
MrFarts | well i guess i'm just going to struggle with this | ||
if i cna't get it done in an hour, i'll do it in C | |||
but that'll take a while | 09:28 | ||
Khisanth | hmm sounds like a simple modification of poe.perl.org/?POE_Cookbook/Child_Processes_3 actually | ||
nothingmuch | oh right, there's POE | ||
but POE is not grokked in an hour either | |||
MrFarts | gah | 09:29 | |
nothingmuch | look, there's a fundamental conflict | ||
you want time saving that is achieved by investing in advance: learning a library | |||
you already know the standard C library | |||
perl offers you that | |||
that can help, or it might not | |||
i think it's a fair balance | |||
if you have an hour it doesn't make sense to spend 5 hours learning a tool that will save you 45 minutes | 09:30 | ||
unless you're going to use it a lot | |||
MrFarts | right | ||
nothingmuch | that's basically it =) | ||
if i wasn't at work i might be tempted to walk you through one of those | |||
but I can't afford that, time wise | |||
MrFarts | i understand | ||
thanks anyway | |||
i'll try to pound this thing into submission | 09:31 | ||
") | |||
:) | |||
nothingmuch is a misantrope | 09:33 | ||
=( | |||
MrFarts | actually i think i figured it out anyway :) | 09:34 | |
nothingmuch | goody | ||
MrFarts | i'll just do it by hand | ||
i'll just put a decrement in the signal handler for sigchld | |||
when that things goes to 0, i'm all out of children | 09:35 | ||
for somre reason it's not going back to 0 though | 09:38 | ||
it's stuck at 7 | |||
hmm | |||
bsb | perldoc -f waitpid | ||
MrFarts | what does waitpid have to do with anything ? | 09:39 | |
09:40
KingDiamond joined,
bsb left
|
|||
MrFarts | ayone ? | 09:43 | |
nothingmuch, idle | 09:44 | ||
? | |||
why aren't all the processes generating SIGCHLD ? | 09:46 | ||
nothingmuch | sorry | 09:47 | |
MrFarts | well you aren't obligated to help me | 09:48 | |
:) | |||
but i'd really appreciate it if you could | |||
nothingmuch | i hve to go in ~2 mins so quickly please =) | ||
read perlipc | |||
MrFarts | for some reason SIGCHLD isn't being generated by everything it seems | ||
nothingmuch | it knows to tell you if there are no children left | ||
MrFarts | i don't understand why | ||
nothingmuch | 3hmm | ||
please no paste | 09:49 | ||
i can look at it in ~4 hours | |||
MrFarts | 3hmm ? | ||
nothingmuch | typo | ||
'hmm' | |||
MrFarts | any ideas on what to check | ||
nothingmuch | not really | ||
MrFarts | this is just sadistic | ||
nothingmuch | this sounds odd | ||
nothingmuch wrote weird shit in his day of perlipc curiosity | |||
i even wrote a traffic shaper once | |||
MrFarts | yeah, i get ~38 kills | ||
nothingmuch | with nonblocking IO and SIGIO and stuff | ||
MrFarts | the last 12 are disappearing | ||
don't get it | 09:50 | ||
50 dies, 49 ... | |||
etc. | |||
then i get to 38 | |||
er | |||
12 | |||
nothingmuch | hmm | ||
how are you reaping them? | |||
MrFarts | pastebin.com/520322 | 09:51 | |
nothingmuch | the definition of SIGCHLD is that it's delivered when your process gets a timeslice and children are waiting to be reaped | ||
(IIRC) | |||
okay | |||
the while loop is taking out several at a time | |||
perldoc -f waitpid will explain that idio | |||
m | |||
MrFarts | i'm not sure why i'm re-installing the handler | 09:52 | |
nothingmuch | that's an old sysv thing | ||
also documented in perlipc | |||
linux doesn't need it | |||
MrFarts | anything strike you as being wrong here ? | ||
nothingmuch | yes | ||
the while loop =) | |||
it's explained in perldoc -f waitpid | 09:53 | ||
what it's doing is reaping any pid | |||
MrFarts | i don't have perldoc | ||
nothingmuch | nonblocking | ||
for as long as there are children running | |||
no way | |||
MrFarts | anything via google | ||
nothingmuch | on linux?! | ||
MrFarts | yeah | ||
nothingmuch | wtf kind of distro is that? | ||
MrFarts | ubuntu | ||
suse has it ... | |||
nothingmuch | anyway, the while loop is reaping any number of children, nonblocking, and > 0 means keep doing it as long as children are left | ||
no way | |||
ubuntu isa debia | |||
n | |||
it shoul;d have perldoc | |||
check your path | 09:54 | ||
anyway, put --numprocs in the while loop's body | |||
and you can make it $numprocs--; | |||
perl will opptimize it into --$numprocs if you really care ;-() | |||
;-) | |||
MrFarts | that doesn't make sense | ||
nothingmuch | why not? | ||
MrFarts | i mean the numprocs into the while | ||
nothingmuch | read man waitpid | ||
MrFarts | because it'll go down to negative numbers pretty quickly :) | ||
let me run it just to shit myself :) | |||
nothingmuch | while ( waitpid -1, &WNOHANG > 0 ) { } | ||
no | |||
waitpid will return immediately each timed | 09:55 | ||
MrFarts | it works | ||
wow | |||
nothingmuch | it will return a nonzero number if there are more children | ||
sigchld isn't delivered once per child | |||
it's delivered whenever there are any children | |||
MrFarts | thanks ... | ||
nothingmuch | if you're taking out N children per handling, then that's the behavior | ||
MrFarts | now i'm more or less in business | ||
:) | |||
nothingmuch | yummy goodnes | ||
i've got to go | 09:56 | ||
MrFarts | goodbye | ||
thanks again | |||
nothingmuch | =) | ||
i'll bbl | |||
if you need me again | |||
MrFarts | ok. maybe i'll still be around | ||
hopefully not struggling :) | |||
Khisanth | nothingmuch: perl-doc is not installed by defaul | 09:57 | |
10:00
drbean_ joined
10:04
scook0 joined,
pjmm joined
10:17
rantanplan_ joined
10:23
dada joined
10:26
elmex joined
|
|||
MrFarts | anyone still alive ? | 10:34 | |
webmind | ? | 10:39 | |
10:49
marmic joined
|
|||
gaal | ingy/audrey: what about $DOC in Perldoc? I don't see it... | 11:00 | |
is there a way to export a variable and mark it as strict-clean? | 11:01 | ||
so the user can say "use strict; use Perldoc; print $DOC->html" or whatever | |||
ingy | gaal: coming soon | 11:03 | |
gaal | I wonder how that works in Perl 6 as well: do exported vars need to be declared? | ||
ingy: can it be done in pure Perl at all? | |||
ingy | gaal: what? | 11:04 | |
gaal | It looks like you have to get prettty dirty to make $DOC strict-clean :-) | ||
ingy | gaal: I see | 11:05 | |
what does `use vars` do? | |||
gaal | package level global I believe. | ||
vs. our which is weirly lexically scoped | |||
but you can't use-vars-at-a-distance | 11:06 | ||
oh wait! maybe you can! | |||
package Other; use vars... | |||
ugh, need an eval for that. | |||
ingy | :) | ||
gaal | because Other is runtime. | ||
ingy | not so bad to use eval | ||
gaal | right. and use vars kind of scope is reasonable in Perl 5 there | 11:07 | |
ingy | at least the problem is solved :) | ||
gaal++ | |||
damn my hands arqe cold, can't type | 11:08 | ||
gaal | good thing ";`rm -rf /`" isn't a valid package name. :-P | ||
ingy | gaal: I have another proble maybe you can help me with | 11:09 | |
gaal | your moose is my wapiti | ||
I can teach you a way to warm your hands | 11:10 | ||
ingy | yeah? | ||
gaal | you need another person for it. | ||
ingy | sex? | 11:11 | |
gaal | no (that can work too though). you each put your palms against each other like in an oriental bow | ||
ingy | they're warming up slowly... | 11:12 | |
gaal | face and point your hands towards each other | ||
ingy | I just went on a cold scooter ride with no gloves | ||
gaal | separate your fingers and cross your with theirs | ||
uh, this is less complicated than it sounds :) | 11:13 | ||
so your left hadn is crossed with their right and vv | |||
ingy | sounds like this leads to sex | ||
gaal | then comes the warm part: rub your hands vigorously | ||
it can lead up to that if you wish. it's a versatile technique! | 11:14 | ||
it's much better than rubbing your own hands in terms of warmth production (and sex leaduptotude, come to think of it) | |||
ingy | :D | 11:15 | |
gaal | so, what else can I help you with? :) | ||
ingy | well I want Perldoc docs to be per "class" ie per package; not per module | 11:16 | |
the $DOC thing still works fine | 11:17 | ||
but the flow for the other processes is weird | |||
gaal | where's the svn repo for Perldoc? | 11:18 | |
ingy | svn.kwiki.org/ingy/Perldoc | 11:19 | |
gaal | hmm, actually there isn't a bulletproof way of doing this, is there? you have to parse perl. | 11:20 | |
ingy | I think i want to add the concept of a Perldoc::Document class | ||
gaal: I'm not really worried about that | 11:21 | ||
I just want to get the conceptual structure right | |||
gaal | you can assume /^package \s* (\S+) \s* ;/x in most cases :) | ||
OK | |||
starting with which version, the Haskell one? | 11:22 | ||
ingy | actually I think that $DOC points to a Perldoc::Document object | ||
Haskell version of what? | 11:23 | ||
gaal | (hey, what drives the haskell version anyway? there's no target in the makefile that builds it, that I saw) | ||
Text.Parser.Kwid | |||
ingy | Well I'm really just concentrating on the Perl5 Perldoc project for right now | 11:24 | |
Based off the work and ideas I started last spring | 11:25 | ||
Audrey wrote a nice Kwid parser, which was my bottleneck | 11:26 | ||
gaal | all right, so Kwid > Doc > [Para], or Doc > Kwid > [Para] ? | ||
or is the Kwid structure in the haskell version what you need for Perldoc::Document in p5? | 11:27 | ||
ingy | gaal: there are a few things going on with Perldoc | 11:28 | |
I should summarize somewhere | |||
Maybe I'll write a design document in the repo | |||
and then we can talk better about this | 11:29 | ||
you around for a while? | |||
11:29
Kattana joined
|
|||
gaal | yeah, grabbing lunch but i | 11:29 | |
'll be back. | |||
ingy | ok, I have a small stack to pop first, but should have that doc in 2-3 hours | 11:30 | |
11:30
Debolaz joined
|
|||
gaal | cool | 11:31 | |
MrFarts | anyone willing to help me out | ||
i'm probably doping somethign stupid but i can't see what | |||
11:38
Debolaz joined
|
|||
MrFarts | how can i get the pid of the last process launched via system | 11:43 | |
11:53
lisppaste3 joined
|
|||
gaal | MrFarts: fork and exec yourself instead? | 12:19 | |
12:24
KingDiamond joined
|
|||
Juerd | MrFarts: The last process launched with system no longer exists when you're past that call. | 12:34 | |
MrFarts: Its PID is of no use whatsoever. | 12:35 | ||
12:40
elmex joined
12:41
elmex joined
12:42
elmex joined,
feng joined
|
|||
gaal | Juerd: system "do_something &" uses the shell to run do_something in the background | 12:43 | |
I know that you know that technically that wasn't launched by system itself :-) | |||
12:44
Southen joined
|
|||
Juerd | gaal: Right. The PID of do_something is unknown to Perl anyway. | 12:47 | |
gaal | if you're only using the shell to get &, and not redirection or search, you can fork+exec instead. | 12:50 | |
12:52
drbean joined
12:54
Bit-Man joined
|
|||
ingy | gaal: stack popping proceeding well... | 12:58 | |
are you a mac user? | |||
if so we could do a subetha thing perhaps | 12:59 | ||
obra | what happened to subethawikiwyg? | 13:03 | |
ingy | obra: it's coming soon | 13:05 | |
obra | oooooo | ||
WANT :) | |||
I'll pay you in beer. and bao. | |||
ingy | bao zi | 13:06 | |
bao == container | |||
zi == child | |||
bao zi == tasty pork buns | |||
obra | or in cantonese "Char su bao" | 13:07 | |
ingy | I think it is getting time to boot the cross-browser app, and embrace at least the xul, if not the ff extension | 13:11 | |
obra | That'd be too bad. | ||
I'd use it for me, but for released stuff, I need to work in safari and IE | |||
ingy | that would be so good. | ||
no, you just think you do | 13:12 | ||
obra | My customers would stop paying me | ||
ingy | I kinda doubt that | ||
obra | "If it doesn't work in IE, we can't and won' use it" | ||
That's a direct quote | |||
more than one of my custoemrs has workstations locked down that have no firefox | 13:13 | ||
ingy | let's take this out of perl6 | ||
obra | oops. indeed | ||
13:14
Debolaz2 joined
|
|||
integral | write parrot plugins for all major browsers, and use perl6. It'd be just like Flash (and Java moreso) | 13:14 | |
13:23
blm joined
|
|||
lypanov wonders what "su" alone means | 13:27 | ||
ingy | super user? | 13:28 | |
blm | as opposed to su -? su - sets up the environment as if you had of logged on directly as the superuser (root) | ||
su doesn't | 13:29 | ||
13:38
nnunley joined
|
|||
nothingmuch | moose moose | 13:41 | |
gaal | moose indeed! | 13:46 | |
rehi too | |||
ingy: not a mac user. But I can find my Goby install somewhere | 13:47 | ||
*Gobby, and found it. :-) | 13:50 | ||
13:52
kolibrie joined
|
|||
nothingmuch wonders what mooseness is about | 13:53 | ||
gaal | nothingmuch: I'm helping ingy warm his hands! | ||
kolibrie is going to the Netherlands in March! | 13:55 | ||
nothingmuch | ingy: if you sit on your hands they will be warm | ||
gaal gets coffee, will brb | 13:57 | ||
b | 14:01 | ||
has ingy gone to sleep? | 14:07 | ||
14:15
KingDiamond joined
|
|||
lypanov | ingy: sorry, i meant in the context of char su ;) | 14:15 | |
kolibrie: .nl is fun :) | 14:16 | ||
kolibrie | lypanov: I'm taking my family, so we can all brush up on our Dutch | 14:17 | |
gaal | haskell language design question: when you say "deriving Ord", why can't the compiler infer you also want to derive Eq? You can, after all, derive that too. | 14:24 | |
integral | what if you wanted to write your own Eq? | 14:25 | |
gaal | can you not write specific methods for typeclasses you derive automatically? | ||
MrFarts | is there anything fundamentally different about system("sleep 100") and system("perl foobar.pl") ? | ||
integral | I don't know :-/ | 14:26 | |
MrFarts | for some reason i can set timers on one but nto the other | ||
anyone ? | 14:31 | ||
gaal | MrFarts: sorry, no idea | 14:32 | |
integral: turns out you can't | |||
so if you derive, you get the automatic implementation, no override possible. | |||
bbiab | 14:42 | ||
14:44
joepurl joined
14:45
chris2 joined
14:46
nothingmuch joined
14:52
hcarty joined
14:58
hcarty left
15:03
iblechbot joined
15:08
pjmm left
15:09
theorb joined
15:14
robkinyon joined
15:23
ajs joined
15:44
Eimi joined
|
|||
lypanov ponders learning haskell | 15:46 | ||
gaal encourages lypanov | 15:52 | ||
it's a fun language! | |||
kolibrie | lypanov: what I've learned has been great - very mind expanding | 15:53 | |
15:55
rantanplan_ joined
|
|||
lypanov | any idea for something i could write using it? | 15:56 | |
i aim too big usually.. | |||
but what i see is "don't aim too small" | |||
so i don't know what :P | 15:57 | ||
maybe i should just hack on pugs | |||
gaal | sure | ||
kolibrie | I just worked on the tutorial, but haven't started any real projects in haskell | 15:58 | |
16:01
dada joined
|
|||
lypanov | is there a tasks list for pugs? | 16:02 | |
16:03
elmex joined
|
|||
ingy | lypanov: I've discovered a mindset for learning haskell | 16:03 | |
You don't actually program in Haskell | 16:04 | ||
Haskell writes the program, you just set the rules | |||
if you try to learn the language thinking otherwise, you are likely in for pain | 16:05 | ||
kolibrie | lypanov: if you see a problem with pugs, write a test, if you have tuits, fix pugs so that the tests pass | ||
16:05
sapper joined
|
|||
kolibrie | lypanov: that's the basic tasks list | 16:05 | |
theorb | There's been some discussion about creating a real tasks list; AFAIK nothing like that has actually been done, however. | 16:06 | |
lypanov | tuits? | 16:08 | |
theorb | lypanov: time units. That is, free time. | ||
lypanov | aha :) | ||
not really, but i've always been able to find new ones in the past ;) | 16:09 | ||
okay. so basically, run the tests | |||
find tests that don't work | |||
fix them? | |||
kolibrie | lypanov: sounds good | 16:10 | |
lypanov | ingy: sure sounds like the way my mind thinks anyways. i've never been able to dive into something without doing it headfirst | ||
gaal | ingy: hi! | 16:11 | |
ingy | hi gaal | ||
lypanov hopes make unoptimized + gcc3.3 on osx is gonna work | |||
gaal | ingy: got gobby? got skype? | ||
chris2 | lypanov: you are on the ibook? | 16:33 | |
lypanov | chris2: yup | ||
chris2 | lypanov: *happy* compiling then :P | 16:34 | |
lypanov | yeah... | ||
its just sitting here thinking about pugs.run for no real reason | |||
oh well | |||
now i remember why i didn't bother hacking on darcs | 16:35 | ||
can you do edit-test-debug-test cycles in any saner way with haskell? | |||
chris2 | :P | ||
lypanov | this is unworkable | ||
even c++ is faster than this... | 16:36 | ||
lypanov giggles | |||
chris2: even withkit with its ~30 second rebuild when on ac power is just a bit too much for me | 16:37 | ||
theorb | ghci? | ||
lypanov | ghc-6.4 on osx on ibook 1.2ghz | ||
whats ghci? the interactive version? | |||
theorb | Yes. | ||
lypanov | lets me mod code and restart? | 16:38 | |
as in, change code, "recompile", and rerun a testcase? | |||
theorb | Donno. | ||
lypanov | chris2: want the reallllly sad bit? | 16:39 | |
chris2: java has the best support for this... | |||
chris2 | no, lisp :P | ||
lypanov | true, but thats not in the ranks of easy ;) | ||
slime looked nifty | |||
maybe one day | |||
chris2 | i mean, real lisp :) | ||
Odin- | What is "real lisp"? | 16:40 | |
chris2 | actually, smalltalk does it even better, but let's stop that :P | ||
lypanov | okay. train time. maybe some hacking if this thing actually ever finishes running | ||
chris2 | Odin-: on a lisp machine | ||
Odin- | Ah. | ||
gaal | lypanov: yes, ghci is an interactive haskell environment for you; you can reload modules you'd edited on and only they are recompiled. | ||
lypanov | gaal: i noticed that run.hs is obscenely slow in compiling, is there a reason for this? is it only building once? | ||
gaal | there is a reason for this :) it includes a whopping 1m generated file containing the Prelude | 16:41 | |
after the coming release we'll work on improving this | |||
depending on what you're hacking on, you might do better by turning off precompiled Prelude | 16:42 | ||
ingy | gaal++ # nice fellow :) | ||
gaal | also, there's "make unoptimized" you can use | ||
lypanov | gaal: i'm using make unoptimized now, and its still just sitting spinning | ||
gaal | ingy++ # flattery will get you anywhere :) | 16:43 | |
ingy | :p | ||
lypanov | gaal: would switching off precompiled prelude slow runtime down but speed up compilation? | ||
gaal | lypanov: ah, mixing precomp prelude and unoptimized is like drinking while taking antibiotics | ||
lypanov | gaal: i don't care about runtime. i only ever run one test, then run all when needed | ||
gaal | lypanov: exactly | ||
lypanov | how do i switch off precomp prelude? | ||
gaal | lypanov: in your case you want to edit config.yml and set "optimization" to -O0 | 16:44 | |
and "precompile_prelude" to "false" | |||
then you need to perl Makefile.PL | |||
how's our wiki doing? this should really make it into the faq | |||
lypanov | whats the point in the precompiling of the prelude btw? | 16:45 | |
reduces start up time per test? | |||
gaal | lypanov: the prelude is a perl module containing standard functions you are very likely to want | ||
theorb | lypanov: Exactly. Avoids having to parse the prelude every time. | ||
lypanov nods | |||
makes perfect sense for a "test all" build | |||
gaal | it takes, say, 7 seconds to parse Prelude.pm | ||
makes sense for general use, but not for development | 16:46 | ||
lypanov | any point in using make unoptimized now that i've set -O0 ? | ||
gaal | no, same thing | ||
lypanov | k | ||
gaal | if you want to force -O now you can say "make optimized" on the command line. | ||
lypanov | excellent | 16:47 | |
16:47
hexmode joined
|
|||
gaal | incidentally there's a mechanism to inline other modules into the pugs executable; Test.pm is a favorite for "make smoke". but we broke it now and probably won't fix it until after the release | 16:47 | |
lypanov | nice to see a sane devel env :) | 16:48 | |
gaal | the cost: Test.pm precomp is an additional ~5 min in pugs build time, but saves about twice (and counting) on a whole test run | ||
lypanov | how long is your average code->test cycle? | 16:49 | |
gaal | lypanov: this is certainly not a sane devel env :) | ||
lypanov | in what senses? | ||
it could be improved further? | 16:50 | ||
gaal | lypanov: when you're zeroing in on a feature, as you've discovered, you needn't build the whole thing and you can -O0. so quite fast really | ||
but then a test might take 30 seconds to run | |||
lypanov | 30 seconds is quite okay :) | ||
gaal | lypanov: we're pretty chaotic but we have fun. :-) | ||
lypanov | hehe | 16:51 | |
getting "precompiled prelude for js doesn't exist yet" | |||
whats that exactly? | |||
gaal | if you're interested in how long it's taking people to run the whole suite, take a look at smoke.pugscode.org | ||
lypanov: you can ignore it for now; | |||
lypanov | it only happens the once then? | ||
gaal | one of the backends pugs has is JavaScript | 16:52 | |
lypanov | aha | ||
gaal | (you can write code in p6 and have it run in your browser!) | ||
lypanov | (neat ;)) | ||
gaal | yeah, it won't happen often and it doesn't take very long anyway | ||
lypanov ponders taking a day out to write a javascript backend for his own evil | |||
gaal | i'm sure it's possible to make it switchoffable, but we don't want to bloat the build system | 16:53 | |
lypanov | /me nods | ||
okay. must run for real now else i'll miss the train | |||
back in a few hours | |||
gaal | bye :) | ||
lypanov | thanks very much for the help gaal, theorb, ingy, kolibrie, and other people i can't find in the scrollback history | 16:54 | |
kolibrie | lypanov: you're welcome | ||
ingy | :) | 16:55 | |
theorb doesn't think he did much, but you're welcome for whatever I did. | |||
17:19
sapper left
17:32
sjl joined
|
|||
rafl | ingy: ping | 17:39 | |
17:44
gantrixx joined
17:53
bsb joined
|
|||
ingy | rafl: pong | 18:00 | |
rafl | ingy: Is YAML >0.50 100% backward compatible? And does it fix the two YAML bugs that were reported in the Debian BTS? bugs.debian.org/libyaml-perl | 18:01 | |
ingy | rafl: I made it pass all the old tests. I added a bunch of new tests. fixed a bunch of rt tickets with new tests. etc | 18:02 | |
I think it's a good release | 18:03 | ||
but I can't guarantee 100% | |||
rafl | ingy: OK, so I don't need to fear upgrading it in Debian. Great.. | ||
ingy | that's not really possible | ||
yeah, i would... | 18:04 | ||
rafl | As long as it's kind of backward compatible that's fine. So it wont break all applications that rely on it. | ||
ingy | let me look at those bugs | ||
rafl | Thanks. | ||
ingy | I have specific tests for svk and META.yml ;) | ||
and I am in a good position to fix bugs quickly | 18:05 | ||
bsb | ingy: did you work out /20\d\d/ in haskell? | 18:07 | |
ingy | bsd: audrey did :) | ||
bsb | hey, that's cheating | 18:08 | |
rafl | ingy: I don't have time to verify those bugs currently.. two new jobs, my girlfriend had a car accident, etc.. so it would be nice if you could check that and reply to the Debian bts. | ||
ingy | the pattern simply needed to be a list | ||
rafl | ${bugnr}@bugs.debian.or that is. Or ${bugnr}-submiter@bugs.debian.org if you need to ask the submiter something. | ||
ingy | '2':'0':_:_:[] | ||
iirc | 18:09 | ||
not that I grok it, bsd :-) | |||
bsb | I got something like that eventually | ||
gaal | but that's /^20\d\d/ | ||
ingy | grr, bsb | ||
gaal | err, that's /^20\d\d$/ even! | ||
rafl needs to go. Bye! | 18:10 | ||
bsb | plus another case or two to bump: _:xs = fn xs | ||
ingy | audrey has the code unfortunately | ||
bsb | what was it for? | 18:11 | |
gaal | ingy: :[] means this ends the list | ||
$ in regexp-speak :) | 18:12 | ||
not that this is a regexp | |||
18:33
eric256 joined
18:34
eric256 left
18:41
avar joined
18:44
Southen_ joined
18:45
avar joined
18:48
avar is now known as \xe6var
18:53
\xe6var joined
19:11
r0nny joined
19:28
dduncan joined
19:41
ebvv joined
19:42
ebvv left
20:02
vel__ joined
20:10
vel__ left
20:15
vel joined
20:22
penk joined
20:28
nnunley joined
20:47
vel joined
21:04
putter joined
21:05
vel joined
|
|||
putter | One-year anniversary of pugs is coming up. Perhaps an opportunity to reflect, and to plan. | 21:05 | |
kolibrie | gosh golly, that was fast (in retrospect) | 21:06 | |
putter | yeah | ||
slow too though | 21:07 | ||
;) | |||
21:09
vel joined
|
|||
putter | Journal entry is up. $job pushes us back another couple of days. | 21:09 | |
Someone remind me - Why did the perl community collectively decide it was worth delaying perl6 for half a year in order to save $20k? Are we planning on making the same choice this year? | 21:11 | ||
21:11
trym_ is now known as trym
|
|||
\xe6var | putter: what was that about, hadn't heard about that... | 21:11 | |
integral didn't here this one either (yet) | 21:14 | ||
and I've never seen the "perl community" make a decision ever... | |||
putter | audreyt self-funded for half a year. we needed ~$3k/mo for $job == pugs. didn't find it. so $job != pugs, and pugs gets the timeslices left over after $job and life. | 21:16 | |
integral | oh. Did audrey apply to TPF in the end then? | 21:17 | |
putter | I don't know. at one point I asked them "what's going on here?"... my fuzzy recollection is the answer was one of limited funds and interest. | 21:22 | |
21:24
Juerd joined
|
|||
robkinyon | I think it's because Pugs is seen as competing with Parrot vs. complementing it | 21:28 | |
maybe it's because audreyt & co are -too- successful | |||
integral | and both Parrot and Perl 6 have a lot of real perception problems further out in the "community" | ||
putter | TFP grants seem to focus on the $5e2 to $5e3 range. news.perlfoundation.org/2005/12/the...we_do.html | 21:33 | |
the -too- successful seems to conspiracy-theoryish. but I've repeatedly seen generally well informed perl folks with very little clue about perl6 and/or pugs. | 21:34 | ||
s/to/too | 21:35 | ||
integral | hmm, we do now have binary packages in pxperl and debian (at least), I wonder if there's not some scope for a perl6 tutorial that for the first time people can try themselves? | 21:36 | |
21:38
hcarty joined,
hcarty left
|
|||
putter | could be. certainly once the new runcore is in and working. the docs/ tree could also use updating. | 21:40 | |
robkinyon | putter: Conspiracy theories are still theories. :- | 21:41 | |
:-) | |||
integral | yes, it'd be nice to have an example which runs faster than perl5! | ||
Kattana | i have not seen anyone with any clue about perl6 let alone parrot | ||
the info is not out there, and it takes alot to figure out what is going on and how to get something working. | 21:42 | ||
integral | although one thing would be nice to have IMHO would be some kind of frozen perl6 spec, so you know ??!!'s not going to change again, and the like | ||
PerlJam | Kattana: What info are you looking for? | ||
Kattana | i just spent the weekend catching up myself. | ||
integral | hmm, do we use the pugs kwiki much? | 21:43 | |
sili | no | ||
not enough | |||
Kattana | well right now i still to actualy try writing something, just to make sure its working, and to do that i have to find what the actual current perl syntax is | ||
*perl6 | |||
integral | should throw up some pointers from the wiki into specific parts of doc/ | 21:44 | |
PerlJam | Kattana: The synopses show you the most current thinking on perl6's syntax (and occasionally semantics too) | ||
putter | there is ./docs/getting_started explicitly begging to be fleshed out... | 21:45 | |
integral admits to having given up reading p6l again | |||
integral thinks up a new trick: reading docs using vi instead of less | |||
PerlJam | p6l hasn't had much activity lately. | 21:46 | |
Kattana | yes, i know all that now, but i was speaking generaly before, peopel can not get something written without jumping through a lot of hoops | ||
putter thinks "ah, good trick integral" | |||
PerlJam | Kattana: I can write all sorts of things without jumping through hoops. | 21:47 | |
Kattana: unless you count "starting an editor" and "typing" as hoops :) | |||
Kattana | you already have everything, and all you need to know | ||
integral just dumped links to .../docs and getting_started on the wiki frontpage | 21:48 | ||
PerlJam | Kattana: and if what I'm trying to do is on the fringe of what's known, I get a shot at extending reality the way I want | ||
integral | PerlJam: that's very scary. | ||
PerlJam | integral: until we have a perl6 compiler (the real deal, not pugs) just think "there be dragons here" always | 21:49 | |
integral | people don't like dragons. Is there not even a core of a language that can be firmly, and very loudly declared to be frozen? | 21:50 | |
putter | integral++ #links | 21:51 | |
PerlJam | given and when aren't likely to change syntax ever. variables will keep their sigil. The C-derived bits aren't likely to change. | ||
sjl | i'm probably not the first person to ask this, but when will we have the real deal ? | ||
PerlJam | ~ as string concatenation has gone enough rounds that I think it won't change. | 21:52 | |
integral | okay, I'll write a .../frozen_perl6_syntax | ||
*../docs/... | |||
Kattana | Is there a page with smoke-like test results for parrot? I have not seen a good status page of whats works that I could compare with pugs smoke tests. | ||
PerlJam | sjl: expect an alpha compiler this year. Expect a *real* compiler within the following 2 years. | ||
sjl: Expect something worthy of replacing perl5 in about 5 years. | 21:53 | ||
sjl | seriously ? | ||
webmind | sjl, perl5 and cpan is big | ||
integral | Kattana: yep, smoke.pugscode.org | ||
Kattana | sjl: if you want it faster get to work ;) | ||
integral | Kattana: try pugs.kwiki.org it seems to have a good crop of project links on it | ||
PerlJam | sjl: Well, that's how I've currently calibrated my expectations. Whether that's accurate or not depends on the time and energy people can devote to the project. | 21:54 | |
integral | oh, parrot oops, I mean smoke.parrotcode.org should work | ||
21:54
theorb joined
|
|||
Kattana | see, there should be a link to that on the main site. | 21:54 | |
trym | PerlJam: are there no financial resources being put into the project? | ||
integral | the parrot website has been badly maintained for ages :-/ | ||
PerlJam | trym: last I looked, very very little. | 21:55 | |
sjl | <Kattana> sjl: if you want it faster get to work ;) | ||
trym | PerlJam: what about companies that make tons of $$$ utilizing perl ? | ||
sjl | what do you need me to do ? | ||
Kattana | hmm, does not give me any info i can use to compare the two either, at least not untill i fiure out what all the tests mean, along with the pugs ones. | 21:56 | |
trym | If any of my projects that utilize perl makes it "big".. I will be sure to donate a fair percentage to perl development | ||
PerlJam | trym: What about them? They already have perl. Why would they need perl6? | ||
nnunley | It is adiffere | ||
trym | the same reason people would want windows XP instead of windows 98 | 21:57 | |
except of course the gap is bigger | |||
integral | trym: because microsoft dropped support for it? | ||
nnunley | Ugh. It's a different beast. | ||
integral | people still use 5.4 and earlier which are unsupported. | ||
Kattana | winXP has M$ selling it to them tho, no one is pushing perl6 | ||
PerlJam | trym: "the problem" is that nobody has marketed perl6 in that way. | ||
trym | "it still works" does not seem to make people stop want new stuff | ||
sjl | i have some different concerns.... | ||
trym | the perl6 project should aquire a marketing genious.. it shouldnt be hard raising a few millions | 21:58 | |
which would speed up the development process by a lot | |||
PerlJam | trym: That would be some trick. | ||
sjl | i have loved perl for a number of years, and have used it at least to some degree in my work wherever i went, and now i find myself looking for my next gig.... | ||
and the need to perl seems almost non-existant | |||
nnunley | The market share that would tend towards perl6 have moved instead towards Java, C# and to even higher level constructs. It's going to be a long battle winning them back again. | ||
trym | sjl: how so ? | ||
sjl | like it's fallen out of favor with business | ||
PerlJam | trym: "Wanted: a self starter who can raise money for the perl6 project. Oh, and by the way, you'll need to raise the money to pay yourself too" | ||
trym | PerlJam: there are idealists out there | 21:59 | |
sjl | maybe it's just my location, but i'm rather dissapointed by it | ||
trym | sjl: well maybe you should stop waiting, and try finding or creating? | ||
PerlJam | sjl: it's just a programming language. There's no "need" that perl can fill that can't also be filled by python, ruby, or php (for instance) | 22:00 | |
trym | in most cases its a matter of preference | ||
sjl | perljam, the opposite is true as well, so why are people chosing the others over perl ? | ||
trym | but I see huge advantages of using perl instead of say python or php in many cases | ||
PerlJam | sjl: personal bias, propaganda, etc. | 22:01 | |
trym: such as? | |||
trym | PerlJam: developing web applications | 22:02 | |
putter | integral: I wonder what the relative importances are of spec changes, things unspecced, and things simply buggy. remember all the dark greens are things which dont actually work yet. the last release was thus say a 1/4 to 1/3 test fail. | ||
Kattana | php has a company backing it and tools to help it replace java on the web, python has the new shiny clean maintainable look going for it, and its a good language | ||
trym | cpan deserves much of the creds for that | ||
PerlJam | trym: And why would I use perl there instead of PHP? | 22:03 | |
trym | mod_perl.. HTML::Mason | ||
PerlJam: ease of use, cpan, preference and just google for perl vs PHP.. and you'll find lots of reasons | |||
PerlJam | trym: most of those reasons don't matter to getting work done. | ||
trym | PHP (at least >= 4.x) is hopeless if you're developing something bigger than a webshop | ||
integral | putter: sounds like I could just sit down and get some tests unTODOed then | ||
Kattana | perl is not made for anything bigger either | 22:04 | |
PerlJam | trym: to continue playing devil's advocate, why would I choose perl when php is ubiquitous on apache installations *and* comes with everything under the sun (i.e., no need for CPAN because it's already included) | ||
trym | PerlJam: well it surely matters. It can cause slower development, poorer development - leaving the application more vulnerable. Reducing the maintainability etc | ||
putter | Kattana: would something like www.zenspider.com/Languages/Ruby/QuickRef.html have helped? | ||
PerlJam | trym: see, you're arguing things that are essentially language agnostic. | 22:05 | |
trym: Just alike anyone can write a poor perl program, anyone can also write a good php program | |||
php programs can be made as secure as perl programs. | |||
Kattana | putter: that looks good, but a little concise, with all the things going on with perl6 some explanation would be good | ||
trym | sure can | ||
sjl | not to the same degree as perl | ||
trym | but you have to put more effort into it | 22:06 | |
php is not a designed language | |||
its a farking patchwork | |||
integral | argh, smoke reports are too wide in my browser :-/ | ||
PerlJam | php programs can be developed as fast and as well as perl programs. | ||
putter | integral: maybe after the release (to get that out the door and out of the way)? perhaps also after the runcore is swapped, so it's easy to see regressions? or not.. | ||
sjl | depends on who's developing them perljam | ||
integral | putter: I really, really, really hate release freezes; OTOH I use svk so local branching is easy. | ||
PerlJam | trym: who says you have to put more effort into it? | ||
trym | PerlJam: I do ;) | 22:07 | |
PerlJam | sjl: right. So the programming language doesn't matter. Any choice is equally valid. Soo why would someone choose perl? | ||
trym | and I think a few people would back me up on that | ||
putter | svk++ | ||
integral | it's irritating to finally work up energy to just get on and do something but have to wait for a release :) | ||
integral is just bad with working with others really | |||
putter | oh yes :) | ||
Kattana hates the "others" | |||
sjl | perl is amazingly flexible | ||
trym | PerlJam: any choice of language might be "valid".. but its not optimal.. and it might even be stupid | 22:08 | |
Juerd bends perl | |||
putter | err, "oh yes" re energy and wait, not others ;) | ||
trym | you wouldnt code most web-applications in C | ||
Kattana | so flexible anyone can tie perl in a knot and hang themselves with it. | ||
Juerd | 23:15 < PerlJam> php programs can be developed as fast and as well as perl programs. | ||
trym | but you could.. and it wouldnt be an "invalid" choice of language | ||
Juerd | PerlJam: That VERY MUCH depends on the kind of program. | ||
sjl | and that 'flexibility' can lead to absolute garbage code, but it can also lead to very elegant solutions | ||
Juerd | PerlJam: But for web applications especially, you're right | ||
PerlJam | Juerd: sure. Still playing devil's advocate :) Why would someone choose perl? | ||
Juerd | PerlJam: Because of CPAN | 22:09 | |
trym | Namespace support is something that comes in handy when developing larger applications | ||
Juerd | CPAN's Perl's most important selling point | ||
PerlJam | Juerd: CPAN is even losing it's luster now that there are CPAN-a-likes springing up | ||
Juerd | Manipulexity and whipituptitude are important to hackers, but ignored by many ignorant decision makers | ||
sjl | perljam, you would pick perl because of it's potential | ||
PerlJam | Also, note all the trouble on CPAN between EU::MM and MM::B | ||
er, M::B | |||
Juerd | PerlJam: Very true. | 22:10 | |
integral | haskell, ruby etc all have those. | ||
Kattana | PHP has pear as perl has CPAN | ||
sili | except cpan doesn't blow | ||
integral | python comes with lots of modules, you don't have to use a silly shell that can't format it's prompts properly | ||
Juerd | In my opinion, M::B makers should have made it interface-wise compatible with E::MM from the very beginning. | ||
PerlJam | sjl: No one chooses a programming language for what it may be able to do tomorrow. They choose a programming language for what they can do with it todya. | ||
sjl | if i were given a complex web task and a team of smart coders, i'd pick perl, if i had a team of fools, i'd go with php | 22:11 | |
Juerd | And the community should have supported M::B earlier on. | ||
PerlJam | Juerd: amen to that. | ||
Juerd | And we need CPANPLUS to succeed, which means designing it by a more diverse committee. | ||
But fortunately, Perl 6 will fix all this. | |||
(...) | |||
sjl | real men install by hand | ||
integral | there is no CPANPLUS or M::B written in perl6 yet. | 22:12 | |
I'm sure pugs already has all the features needed to write one. | |||
Juerd | integral: No, much smarter solutions are being invented :) | ||
integral: Ask rafl and kane | |||
integral | I'd just like something that works please. | ||
22:12
Amnesiac joined
|
|||
PerlJam | indeed | 22:12 | |
integral | things can really suck, but still be useable if 70% of users can use the "Quick Start" instructions | 22:13 | |
sjl | how have business needs shaped perl6? | ||
PerlJam | sjl: um ... they haven't. | 22:14 | |
business needs are satisfied by perl6 purely as a side effect. | |||
trym | PerlJam: I know you're playing devils advocate here.. but there are reasons to prefer perl to other languages. Otherwise you wouldn't be here. But I do honestly believe that if marketed properly, one should be able to raise money and resources to speed up perl development | ||
Juerd | integral: Why do you assume it will not work? | 22:15 | |
PerlJam | trym: I'm here because I've used perl for 13+ years and will continue to use it in the future. But I'm not a language zealot and so will use whatever works :-) | ||
Juerd | integral: I also like simple solutions that "just work", but the world of platforms and compilation to binary is tremendously harsh. | ||
integral | Juerd: My assumption isn't that, it's that it'll take years and years, and the implementation will lag behind the designing | ||
sjl | business needs are satisfied as a side effect? | 22:16 | |
Juerd | integral: As does Perl 6 itself. | ||
integral: I'd say they're currently pretty much in synch. | |||
PerlJam | trym: btw, can you turn that belief into something tangible for perl6? | ||
trym | PerlJam: I'll do my best | ||
integral | Juerd: do you have a repository url? | ||
PerlJam | trym++ | ||
putter | Hmm, a company is funding parrot $70k news.perlfoundation.org/2005/12/par...shmen.html | ||
Juerd | integral: No. What makes you think there is a repository? | 22:17 | |
trym | PerlJam: A guy I know just donated $40k to a school linux project | ||
integral | Okay, how do I download the implementation then? | ||
Juerd | integral: What makes you think there is an implementation? | ||
PerlJam | trym: Well get him to donate $40k to perl6! :) | ||
trym | PerlJam: I'll try :) | 22:18 | |
Juerd | integral: What makes you assume your current attitude? | ||
integral | Juerd: So zero implementation? So if that's instep with the designing, there must be zero design. | ||
sili | wtf 20 questions | ||
trym | But I have a few interesting projects going on that utilizes perl.. if they are successfull.. I'll give a fair percentage to development of perl6 and the smaller components I use | ||
Juerd | integral: Execute reality check | ||
integral | huh? | ||
PerlJam | integral: have you been reading aevil's blog or talking to her otherwise? | 22:19 | |
integral | I don't understand, I was trying to be straight for once | ||
22:19
ajs left
|
|||
integral | You said rafl and kane were working on something, but I don't know where they're doing that. And I thought you would know. | 22:19 | |
22:19
_SamB_ joined
|
|||
Juerd | integral: There was a kwiki, but it's down at the moment. | 22:19 | |
integral | Well, okay, so you mean there's actually nothing? | 22:20 | |
sili | yay for not | ||
integral | PerlJam: hmm, I do read her blog occasionally, but for the food :) | 22:21 | |
Juerd | integral: Sorry, I don't like the tone. I'm terminating our conversation, to avoid losing my temper. | ||
22:21
drbean joined
|
|||
integral | okay. | 22:21 | |
PerlJam | integral: well, go read something a little more upbeat. You're starting to sound like he :) | 22:22 | |
s/he/her/ | |||
sili | hahah | ||
integral goes back to looking for easy TODO bugs | |||
Juerd | integral: Ask rafl to start his apache, or look in feather:~rafl/sixpan/htdocs/sixpan/database | 22:23 | |
putter | Kattana: what about a "wizard"-like web page? eg, a text box, and buttons "insert definition of" <sub>, <method>, <multi method>. "insert argument", etc. ? | ||
integral | thanks! Juerd++ | ||
Juerd | Or Google for sixpan when Google's cache is back online. | 22:24 | |
Kattana | putter: i dont quite follow you, but something simple is best imo. | 22:25 | |
PerlJam: link to blog? trying to cover all the bases while catching up with everyone | 22:26 | ||
PerlJam | Kattana: um ... which blog? aevil's? | 22:27 | |
Khisanth | google offline?! | ||
PerlJam | if so, you're asking the wrong person. I actively ignore aevil these days | ||
integral | aevil says little to do with perl these days afaics | 22:28 | |
Kattana | PerlJam: yes. | 22:29 | |
PerlJam | integral: good. Her perl prose is too depressing or filled with too much vitriol | ||
sili | try not to use words i don't know... | ||
PerlJam | sili: How else are you to learn new words? I'm here to educate you! ;) | 22:31 | |
sili | aye. | ||
putter | "something simple is best"++ | 22:32 | |
integral | ./pugs -Iext/Cipher/lib -Iblib6/lib ext/Cipher/t/arcfour.t # which doc would tell me this was how to run one test? | 22:33 | |
sili | it's hidden in the mailing lists. | ||
like everything else | |||
PerlJam | integral: um ... that's ye olde standard perl method for running one test except we've substituted pugs for perl. | 22:34 | |
integral | is the svnbot not running? | ||
PerlJam: except I keep forgetting to say blib6 and not blib, and normally I use the blib module. | |||
putter | ./lib/pugs/hack.pod? | ||
PerlJam | integral: yeah, I do that too :) | ||
integral | eh? what's the difference between ./lib/pugs and ./docs? | ||
putter | ? | ||
integral | How do I know which to look in to find something out? | 22:35 | |
putter | re 6pan, there's misc/sixpan/ | ||
re lib/pugs, let's see... | |||
integral | ah, misc/sixpan looks like what I was asking for | 22:38 | |
putter | I guess the theory is pugs::run and pugs::hack get p5-installed. man pugs::run. docs/SEEALSO points to them. | 22:39 | |
integral | ah, I don't install things I'm developing, so I rarely use man near them | ||
putter | me neither. I'm hypothesizing. | 22:44 | |
22:49
_SamB_ is now known as SamB
|
|||
integral | ah, Cipher::Arcfour appears to be broken because method lookup isn't working :-/ | 22:51 | |
putter | :/ | 22:53 | |
integral | hmm, so can someone explain to me whether the new object metamodel thingie is used when using the old evaluator? Or is this something else that needs to wait until the great switch over to PIL? | 22:54 | |
putter | my understanding is great switch | 22:55 | |
integral appears to be getting closer to yak shaving with every step | 22:57 | ||
putter snifs. you smell wet yak hair? | 22:58 | ||
which yak? | |||
integral | PIL2 evaluation | ||
integral hopes it's not a yak herd | 22:59 | ||
22:59
bsb left
|
|||
putter | (please don't say the unshaven one...:) | 22:59 | |
integral | hmm, there appears to be a PIL2 evaluator but not plugged into the pugs frontend, so that appears to take me back to rewriting Pugs.Run again | 23:00 | |
sili | what's pil | ||
putter | "yak shaving is what you are doing when you're doing some stupid, fiddly little task that bears no obvious relationship to what you're supposed to be working on, but yet a chain of twelve causal relations links what you're doing to the original meta-task." | ||
Juerd | Wasn't pil2 obsoleted by piln? | 23:01 | |
sili | maybe, what's pil? | ||
integral | ugh, I just picked the highest number I saw :-/ | ||
Juerd | integral: n > 2 | ||
Or, at least, it can be. | 23:02 | ||
:) | |||
putter | p6->pil2->piln pil2 is an unsugared p6, piln a minimalistic "kernel" language. | 23:03 | |
sili | that sounds confusing. | ||
putter | src/PIL | ||
integral | okay, sounds like a frontend would be useful anyway. Just tell it what you're feeding it, and what you want out avoiding the current scary arg parsing and decisions on what to do | 23:04 | |
sili | source is not documentation | ||
:( | |||
Juerd | sili: Yes, it is. | ||
integral | haddocks? | 23:05 | |
sili | Juerd: ok, i'll share that with my coworkers and lead | ||
"dude, just read the source. trust me, it's documentation" | |||
integral | sili: nothingmuch.woobling.org/pugs_test_...k/PIL.html | ||
putter | pil2 is similar to pil1. piln is a "vm" low level representation, so backends dont have to build high to reach pil2 support (thus introducing incompatibilities, and duping work) | ||
sili | thanks | ||
integral | is there a reason we haven't dumped all the PIL1 source yet? Is it needed for reference? | ||
sili | isn't that what cvs and archives are for? | 23:06 | |
Juerd | sili: That's the important difference. We're not commercial here, or working with any organisational structure *whatsoever* | ||
When people feel like writing code, but not like writing documentation, we get undocumented code. We should be grateful for that. | |||
Or so I believe. | |||
putter | err, aren't we still using pil1? or have we switched over to pil2? | ||
integral | depends what you mean by "using". If you just run pugs you get the original evaluator that's running straight off the AST without any PIL* | 23:07 | |
sili | sounds unproductive | ||
putter | ah. | ||
and pil2js... | 23:08 | ||
stevan_ | sili: it is -Ofun :) | ||
integral | but if stuff like the JS is using PIL1, one question is: can it be forward ported to PIL1, or will it need rewritten? | ||
sili | maybe even... backwards productive or something | ||
23:08
stevan_ is now known as stevan
|
|||
integral | if the latter it can get junked | 23:08 | |
stevan | integral: PIL2 is very diff from PIL1... I doubt much can be saved,.. but then,. not as much is needed :) | ||
Juerd | sili: Though if you do feel like writing documentation for things that others didn't like to document, feel free :) | 23:09 | |
integral | sounds like we just need someone brave with a delete button then | ||
stevan | sili: the goal of the pugs project is not to create the "official" perl 6,.. but to experiment with Perl 6 | ||
integral | so it can wait til after the next release and everything | ||
sili | stevan: that's fine | ||
stevan | integral: eventually yes, but right now you would break a lot of stuff doing that :) | ||
23:09
nothingmuch joined
|
|||
Juerd | integral: You have that delete button, I think. Are you brave? And probably more fundamentally: do you have spare tuits? | 23:10 | |
sili | stevan: i think the bottom line is that i'm a noob and would like to help, but have no direction. i have some incomplete or outdated specs, various docs in various places, and the whole process is difficutl and i hate life | ||
integral | well I hesitate because audrey suggested that it was best leaving these things for the next release, then junking :) | ||
nothingmuch | evening | ||
stevan | sili: yes, it is a little messy right now, sorry bout that :) | ||
integral | sili: sounds like a job for the Samaritans rather than p6c... | ||
stevan | hey nothingmuch | ||
Juerd | sili: Hey, that's my world. | 23:11 | |
putter | hi nm | ||
23:11
theorb is now known as theorbtwo
|
|||
stevan | putter: re: "why is pugs not funded", that is a choice audreyt made a while back | 23:11 | |
as for how we releate to the "official" Perl 6 project,.. thats kind of fuzzy | |||
integral | I don't think audrey ruled out other people being funded for pugs work | 23:12 | |
stevan | integral: nope :) | ||
I actually applied for a TPF grant to go to YAPC::Asia hackathon with Larry & Damian | |||
Juerd | 00:20 < stevan> putter: re: "why is pugs not funded", that is a choice audreyt made a while back | ||
stevan crosses his fingers and knocks on all available wood | |||
Juerd | Though I think one can be personally funded to work on pugs | 23:13 | |
Which would fund the person, not the project. | |||
stevan | Juerd: in a way, my boss is helping fund pugs since he is allowing me to spend my spare work cycles on it | ||
nothingmuch | stevan: but your boss also understands the benefits of letting you do that | 23:14 | |
stevan | your company is funding pugs by providing feather | ||
nothingmuch | mediocre programmers are noncurious ones | ||
stevan | nothingmuch: exactly :) | ||
Juerd | I think the wikistyle open source development of pugs cannot prevent this. And I believe nobody should feel obliged to make the same decision Audrey made. | ||
stevan | Juerd: of course,.. but I dont think the money is their anyway | ||
Juerd | stevan: That's very nice of your boss. | ||
stevan | too much is being pushed towards Parrot | ||
Juerd | s/their/there/? | ||
nothingmuch wonders if when speaking in past tense you say "autrijus decided" or "audreyt decided" ;-) | 23:15 | ||
stevan | Juerd: yes,.. thanks :) | ||
Juerd | nothingmuch: Audrey. | ||
stevan | name change is retroactive | ||
nothingmuch | this is a philosphical silliness discussion | ||
Juerd | nothingmuch: At least that's what appears most sane to me. | ||
nothingmuch | oh | ||
i didn't know that was formal ;-) | |||
Juerd | stevan: I don't know. I can imagine that there may be corporate backing somewhere. | 23:16 | |
nothingmuch | this reminds me of that book in THGTTG | ||
Juerd | stevan: Or perhaps a university. | ||
stevan | Juerd: maybe | ||
it would be nice | |||
nothingmuch | the grammar book, for when you go to the resteraunt at the end of the universe | ||
Juerd | stevan: After all, this is in some ways rather groundbreaking research. | ||
nothingmuch | restraunt? | ||
damnit, i need to get autospellchecking in the terminal | |||
Juerd | restauraunt | ||
stevan | however, TPF owns the copyright, so I would expect they would need to be involved | ||
nothingmuch | damnit | ||
integral | nothingmuch: "willont goinging on to the restaurant..." | ||
Juerd | PECTOPAH :) | ||
stevan | unless we forked Perl 6 (no I am not serious) | ||
nothingmuch | integral++ | 23:17 | |
tr/f/b/; | |||
integral | we fork it implicitly by what we choose to implement, and say to p6l... | ||
Juerd | stevan: Copyright to what? | ||
stevan | Juerd: Copyright to perl 6 IIRC | ||
Juerd | stevan: Copyright to what substance? | ||
stevan | Allison has been doing a bunch of legal stuff re: Parrot,.. I assume Perl 6 is included somehow | ||
Juerd | I see | ||
Khisanth wonders how you can fork something that doesn't really exists yet | 23:18 | ||
Juerd | Is there a license? Otherwise pugs might be illegal. | ||
putter eats an imaginary olive | |||
Juerd curses obligatory intellectual property | |||
stevan | Juerd: no idea,.. best to ask TPF maybe | ||
if you care that is | |||
Juerd | I don't | 23:19 | |
stevan doesnt either :) | |||
unless of course we start a p6l mutiny in which case it might be a good idea to start caring | |||
Khisanth | well even if it was illegal, anyone actually trying to ..."enforce" it would likely be lynch :) | 23:20 | |
stevan | Khisanth: well considering we are doing thier research for them, I doubt they would mind ;) | ||
integral | and we're very geographically diverse too | ||
Juerd | integral: And work without paper, without licenses, without contracts. | ||
stevan | of course that assumes they actually use the things we have learned/discovered/etc | ||
stevan disappears into the Perl 6 underground ... | 23:21 | ||
putter | so what parts actually exist at this point? parser->pil2 complete pil2 (class defs and all)? pil2->piln? piln engine? | ||
Khisanth | stevan: who knows, people have always done stupid things for various immutable principles | ||
stevan always wanted to work for some clandestine organization | |||
Juerd | integral: To license anything in pugs, all the developers who have worked on the file in question and closely linked subsystems, would have to be contacted and would have to agree. But that legal crap is impossible, so the semi-legal path is more likely to be followed. | ||
Already-licensed parts are fine, of course. | 23:22 | ||
stevan | putter: PIL^N still needs work, but my tuits currently need to be used for $work | ||
Juerd | -Ofun and -Ilaw often clash. | ||
putter | which part(s) of piln need work? | ||
stevan | putter: the Container types need fleshing out | 23:23 | |
integral | Juerd: hmm, README implies that the whole lot is already licenced. Dual gpl2 and Artistic2.0beta5 | ||
stevan | and the instance creation part of the metamodel needs work to support them | ||
Juerd | integral: GPL has more strict requirements. Every file needs to start with a shitload of legal info. | ||
putter | stevan: is there enough there to bootstrap? ie, is it a bootstrap, sanity, or test suite issue? | 23:24 | |
Khisanth | so it's already violating the license? :) | ||
Juerd | Just saying "it's GPL" doesn't make it validly GPL. | ||
integral has given up on doing anything with the GPL as it's just too complicated | |||
Juerd | It has to include the entire GPL in a file called COPYING or LICENSE, IIRC | ||
stevan | putter: well if you leave the containers out, the bootstrap is there | ||
the roles implementation is still broken,.. but thats probably better done in P6 anyway | |||
integral | while we put it in LICENSE/GPL-2 *sigh* | ||
stevan | putter: we probably have enough to hack PILN into a new runcore | 23:25 | |
but in order to do that we need PIL2 designed/implemented and the PIL2 -> PILN compiler | |||
and that is audreyt territory,.. not stevan territory | |||
putter | one can bootstrap without containers?!? neat. what exactly does the bootstrap bootstrap? what shape boot? | 23:26 | |
stevan | putter: it just bootstraps the class system | ||
s/class/class-object/ | |||
the containers are implemented on top of that | |||
and so is the roles system | |||
putter | packages and modules? | 23:27 | |
stevan | in the class/object system | ||
Class.isa(Package) | |||
Class.isa(Module), Module.isa(Package), Package.isa(Object) | |||
putter: see perl5/Perl6-MetaModel/docs/*.jpg | |||
putter | so there's some "bootstrap" p6 to be written, to set up roles and such, before the rest of a p6 prelude can run | 23:28 | |
stevan | putter: depends on what the p6 prelude has in it | ||
integral & | |||
putter | and set up containers of course | ||
bye integral & | |||
stevan | PILN is still a long way away from Perl 6,.. thats the gap PIL2 is supposed to fill | ||
putter | right | 23:29 | |
Juerd | I had assumed that piln superseded pil2, but it appears my casual reading of the blogs wasn't enough. | ||
putter thinks, hmm, implementing roles in p6 is a great opportunity to add lots of unspecced flexible meta stuff... ;) | 23:30 | ||
stevan | Juerd: think of PILN as like PIR, and PIL2 as ... well... nothing equivalent in the Parrot world | ||
putter: the unspeced flexible meta-stuff is in the core metamodel already :) | |||
putter | :) | ||
stevan | thats how we can do roles :) | ||
roles are very simple really | |||
its the conflict resolution stuff thats a real pain | |||
putter | conflict resolution stuff? | 23:31 | |
stevan | cause we need to be able to check for conflict when roles are composed together | ||
but those conflicts dont do anything | |||
they are in stasis | |||
because a role which composed those two could have resolved it | |||
putter | why a pain? | ||
stevan | pain in PILN | 23:32 | |
stevan really has to run,.. dinner time | |||
23:32
scook0 joined
|
|||
putter | ahhhh. | 23:32 | |
bye stevan & | |||
stevan | I will be back on later.. read S12 and the Perl6-MetaModel stuff,.. see what you can figure out | ||
I would love some help on this,. :) | |||
stevan & | 23:33 | ||
putter | ok, so piln boots classes, but not datastructures or roles. roles arent really that complex, but complex enough that you want datastructures. but the normal datastructures are likely defined&implemented using roles. hmm... | 23:34 |