pugs.blogs.com | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 | <stevan> Moose... it's the new Camel ":P | .pmc == PPI source filters!
Set by Alias_ on 16 March 2006.
00:01 jdrago left 00:06 JohnDrago joined 00:56 nirgle joined
svnbot6 r9873 | fglock++ | PC-Tokenizer - more tests; failing match stringification 00:57
00:57 nirgle left 01:08 ayrnieu joined, Quell joined
meppl gute nacht 01:12
01:30 hexmode joined
audreyt 'morning 01:45
Steve_p Good evening :) 01:48
01:48 xern joined 01:49 xern joined 01:50 frederico joined
dduncan good 6:51pm 01:51
audreyt :) 01:54
emeijer++ # very nice memoir to which I agree 150% 01:56
# research.microsoft.com/~emeijer/Pap...ICFP06.pdf
dduncan what in the who now? 01:58
audreyt what?
dduncan I'm just starting to look at that link ... 01:59
02:00 stclare joined
dduncan but speaking for relational databases, there is no such thing as a impedence mismatch between them and ordinary programming languages or objects if the system is built properly 02:00
on that note, I'm borrowing many pages from functional programming in my design of Rosetta
audreyt right. same can be said of O/X 02:01
it's just "properly" designed systems are rare to comeby
dduncan and in Rosetta, I'm trying to build a proper system
audreyt *nod*
dduncan that *is* relational, but can represent anything natively
existing (SQL) systems are half-baked 02:02
and hence we have all these impedence mismatches
audreyt *nod* 02:03
dduncan now, as I'm trying to borrow from Haskell et al, but don't know Haskell much, I have a few questions for you
audreyt sure
dduncan first of all, the meaning of a 'pure' function ... 02:04
in Haskell, is there such a thing as 'global' variables, besides monads?
audreyt a pure function is one that always returns the same thing given the same arguments.
there is no global variable in Haskell
but there are global variables in GHC.
dduncan okay, no globals
can a function read said variables in GHC? 02:05
audreyt (which we use in pugs to perform end-of-program finalization etc)
ayrnieu use Memoize; memoize('pure_function');
dduncan a Haskell function
audreyt a function cannot read said variables without being in the IO monad.
dduncan okay
wolverian I don't like this "object initializer" stuff in c#. isn't it just a special syntax rule for named parameters? heh
dduncan now, ...
as a main part of making Rosetta, which is now its own relational DBMS (with swappable back-ends) ... 02:06
I am designing a new language, for now called "Rosetta D"
my current thought is to make that language as pure as possible
ayrnieu why do you want that?
dduncan easier to implement, and optimize 02:07
and validate
I'm putting a strong emphasis on correctness and reliability
so my current thought of the language is that it is mainly pure, but that in appearance it is mainly imperative ... or so much so that Perl is 02:08
now, with traditional databases ... 02:09
the actual persistent data appears like a set of global data
if I were providing operators that were pure in the Haskell sense, invokers of those would have to pass a reference or copy of that same data as an argument rather than the operator just referring to it directly 02:10
as a side note, audreyt, ...
can a pure function take references as arguments, or do all inputs have to be pass-by-value? 02:11
eg, how would the assignment operator be defined in Haskell, if there is one?
ayrnieu Haskell does not have an assignment operator.
audreyt mutable imperative "references" in haskell are IORefs. 02:12
the assignment in haskell is spelled
dduncan okey ... pure functional
audreyt writeIORef :: IORef a -> a -> IO ()
and if you cannot change something a reference refers to
then it's indistinguishable with the thing it refers to anyway.
dduncan yes
to put in a bit of context ... 02:13
Rosetta is now officially implementing thethirdmanifesto.com/
audreyt oooooh
dduncan according to its definition ...
audreyt wish you said that sooner!
dduncan operators fall into read-only and update operators 02:14
the first sounds like Haskell's pure functions
audreyt (it's like when I introduced various javascript-2 features and raved about them in japan
to dankogai, he listened passively for a while
until I said "javascript2 is self-hosting"
and then he went "ooooh, wish you said that sooner")
dduncan the latter is how an assignment operator is defined; it is not a 'function' and doesn't return a value; it takes at least one argument by reference and updates it 02:15
02:15 q[uri]_ joined
dduncan audreyt, admittedly I haven't hung around #perl6 much in the last month, as I have now gained my first paid work in a long while that keeps me busy ... it isn't related to Perl alas 02:16
but right now I'm taking a day's break from that
otherwise you might have heard my plan sooner
now, in Haskell terms, a persistent relational data store is a monad, though a non-persistent one doesn't have to be 02:18
but given that the 'main' data I address is persistent (what people usually use databases for), its access will probably be monadic 02:19
however, I would like my operators themselves to be pure where at all possible
eg, operators that derive numbers from numbers, strings from strings, relations from relations, each from others, etc
the built-in ones anyway 02:20
but I know people will want to make the equivalent of 'stored procedures', which would not be pure as they change monadic data 02:21
anyway, thanks for your feedback ... I was wondering about Haskell purity and whatnot 02:22
audreyt np :) 02:31
dduncan FYI, my current working plan for Rosetta D is that it resembles Perl 6 in appearance, though the grammar is very simple (eg, all function calls are in prefix notation), and it expressly does not support the concept of 'undef'. 02:34
audreyt woot 02:35
also it should not contain any BEGIN parts
i.e. you'd have to say
&sub := sub { ... };
to define a function
dduncan Theoretically, Perl 6 itself could have the functionality I'm designing built-in and/or a module, if it were possible to make Perl 6 itself less permissive
er, not only is it a much simpler grammar, but much simpler functionality 02:36
audreyt sure, but so far p6's must troublesome functionality
is the BEGIN block
and I discovered once we did without that
dduncan that won't exist
audreyt then the runtime parts become very simple
dduncan the relationship between compile time and run time is somewhat like it is with standard SQL databases 02:37
but I'm trying to make it possible that all language error checking (besides logic mistakes) can be checked at compile time
audreyt yup 02:38
dduncan one way that's being made so is that the language is strongly typed only
though users can define strong types that emulate weak types
so if you pass an argument to a function that is of the wrong data type, that is caught at compile time 02:39
as a result, Rosetta D is probably more verbose than some languages
but I anticipate that much of it will be generated anyway, rather than hand written, by wrapper modules 02:40
kind of like how no one writes PIL directly
02:44 r0nny joined
audreyt that seems sane, yeah. 02:47
(sorry for the high latency; post-conference multitasking)
02:48 Quell joined 02:50 qu1j0t3 joined
dduncan about that conference ... I should check up on your blog ... 03:04
on a different note ...
I assume this is just due to being in a transition, but a couple days ago it seems that Pugs took orders of magnitude longer to compile something simple than it used to; eg, taking about 70 seconds where it used to take maybe 10 seconds. 03:05
or maybe its just me 03:06
03:06 FurnaceBoy joined 03:07 coumbes joined
dduncan audreyt, and everyone ... while this isn't Perl 6, I suggest that anyone interested in databases should look at Jeffrey Cohen's Genezzo project, on CPAN and at www.genezzo.com/ ... my current hope is to form an alliance between Genezzo and Rosetta, where the former handles the data layer and the latter handles the public interface layer 03:15
eg, if that works out, that will be my favored back-end 03:16
I'm not sure how high a profile Genezzo keeps in different circles, so I'm not sure if you've heard of it ... but you should know of it for the future 03:17
svnbot6 r9874 | Darren_Duncan++ | ext/Rosetta/ : rewrote half the DESCRIPTION pod in Rosetta.pm 03:55
audreyt dduncan: interesting indeed 04:08
dduncan yes 04:09
from what I know of Genezzo, I think our projects are a great match
innovation below plus innovation above
audreyt it looks like so. yes.
dduncan moreover, my Rosetta design probably lends itself more to larger databases than lite ones anyway 04:10
audreyt, addressing your earlier "wish you said that sooner" 04:13
...
did you have previous experience with The Third Manifesto? 04:14
or was it just that the link helped you understand what I was trying to do?
mind you, with all the advanced and/or theory materials you like to read, TTM may be right up your alley
audreyt I've read TTM before 04:15
dduncan okay
fyi, there's a new mailing list for discussion on it, started this last July
myself and a couple other CPAN folks are on it
and Darwen 04:16
audreyt cool
dduncan apparently, while its only planning stage, Darwen liked what I was doing enough that he offered to send me a complementary copy of the 3rd edition book
I accepted and got it signed too ... its currently in the mail system 04:17
meanwhile, a different book I already read is the Oreilly 'Database in Depth', which I added to our ReadThem file a few months ago
audreyt dduncan++ 04:18
shamu Do you have recommendations for prereqs needed to understand what 'The Third Manifesto' is about? I'm familiar with SQL, normalization, ... up to ERDs (but don't have any language design background -- ex EE) 04:19
dduncan if my plan works out, Rosetta should be a FULL implementation of what Darwen and Date want, and not just a partial or compromising one
shamu, you have enough rereqs to get started
TTM is aimed at people that already know about databases, and want to know them better 04:20
shamu can you give me 25-words or less on what problem it's trying to solve?
dduncan or more specifically, the "Database in Depth" book is aimed at people who are already db developers
shamu let me check that out
dduncan the book "The Third Manifesto" is more of a thicker college text
DiD is easy to read and not so deep on details 04:21
the core of TTM is about 10 pages long, and a PDF copy is on the web site ... the rest of the book expands on it
see web.onetel.com/~hughdarwen/TheThird...CHAP04.pdf 04:22
that's the core of the TTM college book right there, which everything else is in support of
shamu, to answer your question, TTM is basically a recipe for how to make a relational database properly ... and not the half-baked way that SQL databases do it 04:23
s/relational database/relational database manager/
a database that follows the recipe of TTM should be easier to use, more reliable, and developers don't have an impedence mismatch problem between it and other languages 04:26
no one has yet implemented it completely, but I intend to with Rosetta
that pdf link was for the 3rd edition of TTM, which just went on sale last month 04:27
shamu sorry, 'impedance mismatch problem between it (RDBM) and 'other'? languages '
audreyt adds it to her huge to-read pile
dduncan maybe I used the wrong word
shamu you mean a proper way to match RDBM <->programming language , instead of the
dduncan but its the same subject matter as audreyt's link 04:28
yes
shamu current mechanism of RDBM<->SQL<->languag?
dduncan if you have a proper relational database, you don't need object-relational mappers, for example
since a proper RDBMS can store objects somewhat natively
technically, you probably still need a lite wrapper, but it is fairly straightforward 04:29
not big bulky mappers like we have now
now, when I say store natively, I mean that a proper RDBMS can let you define arbitrary data types, so you can define one that matches up with your object structure 04:30
shamu example of the o-r mappers you're referring to?
dduncan so mapping is very straight forward
lets see: Class::DBI to start
04:31 Khisanth joined
dduncan okay, Tangram, Alzabo, DBIx::Class, DBIx::SQLEngine, Rose::DB 04:31
SPOPS, DBIx::Abstract, DBIx::DBSchema 04:32
yadda yadda yadda
er, technically only some of those are actually object-relational mappers in one sense
others are "object persistence tools" 04:33
audreyt (also Jifty::DBI)
dduncan or others allow you to use perl data structures to define things that you would use sql for
audreyt, yes
essentially, I see a large number of modules doing that sort of thing
at a glance, Rosetta may look like yet another of those, but I like to think differently 04:34
I've got a long list of perl modules that do data or database stuff in my SeeAlso; I'll do a brute paste here
L<DBI>, L<Tangram>, L<DBIx::Class>, L<HDB>, L<Genezzo>, L<Class::DBI>, L<Pixie>, L<Alzabo>, L<DBIx::SQLEngine>, L<SPOPS>, L<DBIx::SearchBuilder>, L<DBIx::RecordSet>, L<DBIx::Abstract>, L<DBIx::AnyDBD>, L<DBIx::Browse>, L<DBIx::DBH>, L<MKDoc::SQL>, L<Data::Transactional>, L<DBIx::ModelUpdate>, L<DBIx::ProcedureCall>, L<DB::Ent>, L<DBIx::DBSchema>, L<DBIx::Namespace>, L<TripleStore>, L<Data::Table>, L<ORM>, L<OOPS>, L<SQL::Statement>, L<S 04:35
and even that excludes a lot
I may have never added Jifty for example
shamu some of what you pasted is targeted at sql-style interaction directly, but I get your point
dduncan but it seems like new modules of that type come along on a regular basis, and I'm not trying to keep an exhaustive list 04:36
one commonality is that every one of those seems to be SQL centered, despite all their differences
mugwump ahems
dduncan I am trying to be very not like SQL 04:37
shamu probably because SQL is what's out there
mugwump Pixie isn't, and I don't think Tangram is, either
dduncan yes
I understand why people do it ... SQL is what most people use
but I'm trying to tackle a different problem and not do it the same as others
mugwump having said that, Tangram's querying does import a lot of the brain damage of SQL 04:38
dduncan s/others/the masses/
shamu I had a roomie in 1993 who ended up working for Versant; they were doing object databases back then
mugwump not all, mind
dduncan and that was my main point, actually
I haven't looked at all of Pixie's internals, but it seemed to be centered on a SQL model
shamu what's the different problem? My quick skim of chap04 seems to be trying to force the interface into the db to effectively enforce object encapsulation, of a sort? 04:39
mugwump dduncan: Pixie is basically just a lazy (oid) => (structure) system. it can run atop BDB, for instance
dduncan one thing that TTM emphasizes is that users should not have to know any implementation details for their database
that a proper relational database simply provides consistent views of data 04:40
and how its implemented underneath can change without affecting them
shamu well, that's sort of the case with sql -- you just need to know you're working with tables
dduncan by contrast, lots of things in SQL are a symptom of implementation leaking through to the interface
for example, the char vs varchar type distinctions
shamu I read that sql has the problem of a set of fields from a db having an implementation/design wart of being ordered, when it really needs to be an associative fieldname->value -- a level up of 'not knowing about the details of the implementation' -- am I correct? 04:41
dduncan or the fact that you explicitly declare indexes
you shouldn't have to say anything to help the database be faster, ...
you should simply have a good logical design
and the database engine should figure out itself how to do it quickly
but more bluntly, there's still the char vs varchar thing 04:42
that screams implementation: fixed width storage vs not
auto padding or not
shamu it should be able to figure it out itself as a side effect of it storing data structures at the object level, and indexing more based on its idea of an object instance, rather than some random field in a table?
dduncan you still indicate logical relationships of data 04:43
eg, a certain attribute (column) is supposed to be unique
shamu and hence an index
dduncan or one is related to another
shamu ok, so it's still basically relational
dduncan an index is implicitly used behind the scenes to enforce a constraint you specify 04:44
mugwump offers popcorn around the channel
shamu wants some without butter (dairy intolerance), please
dduncan but you shouldn't need to declare an index which doesn't specify an explicit constraint or relationship
an 'index' is an implementation detail 04:45
shamu sure
hmm -- but sometimes you want to speed up queries on a non-unique field, right?
dduncan all the user cares about is that a unique constraint is a constraint
speeding up your example is not up to the user
the user shouldn't have to care about that ... the program should do it for them 04:46
shamu based solely on data relationships? Or based on usage patterns? I
dduncan eg, the program can analyse usage and dynamically make indexes when they would help
shamu gotcha
dduncan the program would use both constraints, relationships, and runtime analysis
the point is that making things fast is automatic 04:47
not something the user specifies
think of it like this ...
lots of things people specify in SQL is something to make one brand of db faster, but with another brand, they have to rewrite their sql for its implementation
a proper db has that automatic so you don't have to rewrite when changing vendors 04:48
another thing the db should do automatically is rearrange queries to perform faster, but have the same result
shamu err, could you restate that with a little more specificity as to your terms?
when you switch db vendors, you're switching dbs, right? 04:49
dduncan eg, if you use Oracle, you may write your queries or create your indexes or tune things in one specific way, but if you switch to Postgres or Sybase or something, those special optimizations that you specify yourself don't work and you have to make new ones
each db vendor has a different db program 04:50
usually
shamu sure
mugwump yes, quite often "tuning" becomes a little too application intrusive
dduncan people waste lots of time on tuning
on a proper db, they wouldn't
this is one example of ease of use that TTM brings
mugwump dduncan, I'm thinking a great way to demonstrate your concept would be to have a "reference" database, that's just a pure Perl implementation that doesn't support saving its state (except perhaps via complete dump/loads) 04:51
shamu many corporations pay big bucks to dedicated dbas to service tuning requests (creating indices, etc)
dduncan then they can redirect that money to some use that is more productive
mugwump, I agree 04:52
shamu so this could be implemented in an intermediate sql layer that would generate the vendor-specific index creation, et al requests?
dduncan my Rosetta DBMS, which is to implement TTM, has swappable back-ends
I will make a simple one myself, which is for learning, and slow 04:53
I hope to use Genezzo as another fast powerful one
and many others can be made which actually sit over SQL databases, and generate tuned SQL and indexes for them
shamu or altenately, if someone wants to, they could rip the sql front-end off a free db (sqlite, etc) and use rosetta instead? 04:54
dduncan so if a SQL back end is used that can't tune itself (some actually can, to an extent), the Rosetta back-end for it will try to generate the most tuned SQL possible
that is possible
shamu if the proper interface layer is made available
dduncan replace the SQL layer with a Rosetta D layer
04:54 Nouk joined
mugwump dduncan: have you looked at mnesia? 04:54
dduncan well, as it happens, SQLite does have a layered implementation; we could strip out the SQl parser and just use its virtual machine and btree and pager layers 04:55
audreyt yeah, a reusable vdbe sounds useful
dduncan however, in the short term I see better milage trying to use Genezzo instead of SQLite for that approach ... Genezzo is Perl for one thing, and it is a clustered database
look at sqlite.org 04:56
shamu sure.
dduncan despite the shortcomings of SQL, SQLite is a great product, one of my favorite SQL databases
sqlite.org has the specs for its structure there
shamu well, sql is not the database engine. Like you said, relational dbs are oo to some extent, and sql is definitely not.
dduncan here: sqlite.org/arch.html 04:57
that has the architecture diagram
easy to read
I call things SQl databases that use SQl as their primary interface, and so their behaviour as a whole product is strongly influenced by it
FurnaceBoy whispers Mnesia .. 04:58
dduncan yes, about that
I've never heard of Mnesia, will have to look
FurnaceBoy I was looking at it a while back, most intriguing
Erlang db
i.e. functional (not that I'm an expert on FP)
shamu so, on a related note ... is there anything like ruby on rails/activerecord that's usable as a framework under perl?
dduncan oh, any of you that didn't look at genezzo.com should do so now
mugwump erlang is an interesting language alright. it has no mutable state :)
FurnaceBoy I did look at genezzo, also interesting
ayrnieu mugwump - no, it has mutable state. 04:59
FurnaceBoy thx for the link
wolverian shamu, catalyst, jifty
dduncan if you wanna put up links for Mnesia, Erlang, that may speed up people looking at them
er, urls
some irc clients turn 'em into links
FurnaceBoy www.catalystframework.org
ayrnieu start at www.erlang.org
dduncan I am aware of catalyst 05:00
its an mvc where you plug what you want
FurnaceBoy www.erlang.org/faq/x1351.html
^ mnesia
dduncan I planned to make a Rosetta binding for it
or help someone do so
mugwump www.erlang.org/~hakan/mnesia_overview.pdf # perhaps a bit heavy, but goes through the basics 05:01
ayrnieu: I recently had a description from someone who uses it about how it doesn't. I don't know whether that was only under certain conditions etc.
he just said that each code pointer returns a pointer to the current state, so to change state you return a new state pointer that points to a replica of the old state, with the state changes in it 05:02
ayrnieu mugwump - processes have a local dictionary, which is not often used -- and anyway across processes 'state' can be kept easily enough in recursion loops that this is transparent. 05:03
mugwump - I've no idea what you just said.
dduncan now, if you guys are interested in doing this, please look at the lib/SeeAlso.pod file in my Rosetta distribution (in ext/ of pugs, and also on mugwump's utsl server), then go ahead and add links and descriptions to things 05:04
sometimes that's better than just telling me
mugwump ayrnieu: ok, I'll rephrease. basically as I understood you can only return new state, not change old state.
dduncan but just edit one copy; I'll resync the other one with it regularly 05:05
ayrnieu mugwump - um, let's just say that Erlang does not have 'variables' and that it does not have mutable data structures, with the small exception of the process dictionary. 05:06
dduncan no mutable data structures?
mugwump :) you'd have to be a lisp geek to understand it :)
dduncan is it supposed to be a ROM database engine?
mugwump no, you can create new structures, and the old ones get GC'd 05:07
ayrnieu dduncan - yes, there are no mutable data structures.
FurnaceBoy no -- you should read that Mnesia paper... it seems relevant to Rosetta ideas
mugwump basically a GC is constantly doing that anyway
(well, some do)
dduncan will try to look at it
FurnaceBoy s/no//
shamu dduncan, have you heard of 'Versant'? They're an object database company, at least 13 years old at this point. 05:10
dduncan boing boing
shamu, I have not
shamu It's faster than a wingped pig on a lightning bolt, if I am to believe the t-shirt I got from my roomie.
dduncan but there are hundreds of db companies out there 05:11
can't track 'em all
shamu These guys were specifically focusing on object storage in databases back then.
dduncan however, I do plan for the Rosetta distro to have an index of all the other dbs, for reference
FurnaceBoy Kdb is supposed to be pretty fast ;-) and Genezzo seems to have a lot of potential ... love the low-level ops idea
dduncan and Genezzo is written in perl ... can any other db say that?
shamu pro'lly not 05:12
dduncan said index of other dbs will be in the SeeAlso.pod file ... my aggregation point of external links
anyway, Rosetta is in version control for a reason, you guys are welcome to make reasonable changes to it as you see fit, though perhaps stick more to adding stuff for now 05:13
like all those wonderful other projects people really should look at
mugwump ok, mnesia and genezzo are quite similar in some ways. but mnesia is probably more robust, and offering much finer control over replication/transactions/etc, using the power of erlang 05:17
dduncan well, I'm going to bed ... good night! 05:26
FurnaceBoy too
thanks for the interesting discussion
shamu good night
FurnaceBoy I hope this channel is logged, otherwise I was tempted to clip :)
dduncan it is logged, but I tend to clip such things and email them to myself for backup 05:27
after all, the log is huge, and where would you know to look
FurnaceBoy yeah.
nite
shamu colabti.de/irclogger/irclogger_log/...-04-10,Mon
dduncan um, if any of you want copies, give me your email ... or clip yourself
yes, that's the log 05:28
shamu good, because that's what this guy 'dduncan' on that web page says too
bbiab 05:29
audreyt TimToady: why allow non-whitespace in the 05:30
$x. .foo
form of long dot?
I've implemented the whitespace-only variant 05:31
but I'd like to understand what the value is in 05:32
$x. foo(3) .bar
to be parsed as $x.bar
svnbot6 r9875 | audreyt++ | * Support for "long dot" in method calls: 05:35
r9875 | audreyt++ | 4. .sqrt();
r9875 | audreyt++ | Currently only whitespace is allowed between the two dots
r9875 | audreyt++ | to save lookahead time; further clarifications needed to
r9875 | audreyt++ | support the full form.
05:44 GeJ joined
mugwump audreyt: isn't that to support method chaining? 05:48
eg, like the current practice of some authors to make a function that doesn't have anything else worth returning to return $self
so that you can go $object.do_this.do_that.do_something_else 05:49
except s/\./\n\t->/g :)
ayrnieu some authors? Who doesn't do that? GIVE ME THEIR NAMES. 05:53
mugwump it's an idiom that's makes me groan every time 05:55
gaal with 'given' this becomes less of an issue 06:01
06:03 avar joined 06:13 dduncan left 06:19 GeJ joined 06:32 elmex joined 06:44 Aankhen`` joined, nothingmuch joined
nothingmuch do we have a seen bot nowadays/ 06:46
?
06:47 Grrrr joined
mugwump Hi all, I'm giving a talk tomorrow about doing perl 6 things on perl 5 today. I've knocked out a structure for my talk, and would be interested in feedback. particularly whether there are any recent developments I have overlooked. 07:02
the initial sketch is at www.utsl.gen.nz/talks/perl6.now/
nothingmuch spork spork spork spork spork
wasn't pX renamed lrep?
mugwump right, I'll fix that
nothingmuch ESLIDETOOLONG: www.utsl.gen.nz/talks/perl6.now/slide2f.html#end 07:03
make each project it's own slide
i like the haskell joke ;-)
mugwump thanks :) 07:04
nothingmuch what about 'use v5'?
err
v6?
mugwump ah yes, good point
nothingmuch actually, you have Module::Compile
just expand on it
mugwump nods
nothingmuch again: one slide per topic: 07:05
www.utsl.gen.nz/talks/perl6.now/slide3g.html#end
also, abolish Contextual::Return
it is the work of satan!
mugwump heh
I'll tell dconway that the next time I see him :) 07:06
the plan is to talk a bit about each of those areas. so I'll probably break up the slides a lot
going afk for a bit, travelling home ... will be back later on 07:07
07:14 drrho joined 07:15 KingDiamond joined
gaal seen jabbot 07:22
nothingmuch: guess not
nothingmuch err, sorry, back 07:24
mugwump: i was just kidding about Contexttual::Return =) 07:25
07:41 Alias_ joined
Alias_ audreyt: ping? 07:41
07:44 bsb joined
mugwump thanks nm, I'll put it back :-P 07:50
nothingmuch mugwump: it's not very Perl 6 related 07:59
and it is pretty evil (what with the ties and all) 08:00
but that doesn't mean that dconway is satan ;-)
just... half way there
paste.scsys.co.uk/1073 (my YAPC::NA talk proposals) 08:02
08:16 lisppaste3 joined
Alias_ You can never find a MakeMaker expert when you need one 08:18
buu Did I leave my bot in here/ 08:19
nothingmuch audreyt: you'll be at YAPC::NA, right?
buu Oh I did. How nice.
08:21 elmex joined, digwuren joined
nothingmuch ingy: ping 08:24
stevan: ping
audreyt: ping 08:27
luqui: also ping
maybe
gaal hey nothingmuch, i submitted a 20 minute talk on smokes 08:28
nothingmuch you're going to YAPC::NA? yay!
gaal that's the plan
nothingmuch in that case we should collaborate
gaal okay. rub my back
nothingmuch i think i'm going to play the "Ooh! shiney" card
Alias_ on smokes? 08:29
Why haven't I drafted you for PITA yet
:)
gaal Alias_: 'make smoke'
i'm not known to be a very draftable moose
Alias_ I was thinking more 'pita-server run pugs-smoke.xml platforms/*' 08:30
What's the difference between smoke and test 08:31
gaal Alias_: make test is with the mainstream Test::Harness
Alias_: make smoke is with util/yaml_harness.pl, a hacked up possibly-parallelizable harness that stores TAP output in yaml 08:32
all our fancy tools use the make smoke output
Alias_ interesting
I guess I'm just working in a slightly more abstract direction
gaal Alias_: then you want to look at Test::TAP::Model which is not related to serialization encoding 08:33
Alias_ Storing the entire output, TAP-inclusive, as XML documents, and lunching test runs inside of virtual machines
Yeah, I've been watching the model stuff
I'm hoping there's a good way for my to XSLT the PITA-XML out to something I can plug into that
s/my/me/
Which shouldn't be too hard, because the actual TAP details aren't XMLified 08:34
08:34 hcchien joined
Alias_ Each test output is a saved as-is 08:34
nothingmuch Alias_: i'm currently generalizing that stuff 08:35
into a more "deployable" smoke server
Alias_ hmm
nothingmuch dev.catalyst.perl.org/repos/Catalys...mokeServer 08:36
smoke.woobling.org/
Alias_ I was kind of going to just do all the platforms on one
nothingmuch well, that works
Alias_ By installing into the virtual machines
nothingmuch these are orthogonal =)
Alias_ true
nothingmuch the smoke server is just for displaying results
and collecting them
Alias_ oh, the analysis part?
nothingmuch yes
that's what gaal was talking about 08:37
Alias_ ok
nothingmuch make smoke creates a smoke report
anyway, that smoke server thing abuses tags with prefixes to hack a group-by like behavior
Alias_ If you were to install PITA::XML, take a look at PITA::XML::Install
nothingmuch so you have 'platform.osx' and if you "group by" platform you get the reports partitioned by platform
and also you can filter by tag, ofcourse
err, not right now
ETOOBUSY 08:38
Alias_ It would be interesting if you could convert a PITA::XML::Install object into a smoke report compatible with your system
nothingmuch reverse engineering oracle insanities
Alias_ ah
nothingmuch the smoke reports are really just TAP output
serialized into a deep hash
with some tags and timing info
think of tags as extended attrs
Alias_ A PITA::XML::Install is just the output of the C< perl Makefile.PL; make; make test >
nothingmuch theoreticallyh all of perl -V or pugs -V should go into tags if it affects the behavior of the system
Alias_ As a complete thing
with metadata and such 08:39
nothingmuch ah
this is slightly lower level than make test
since it replaces Test::Harness
T::H is for humans
Alias_ sort of
nothingmuch Test::TAP::Model is for machines
(i mean our system)
Alias_ I'm working on a patch for Test::Harness that will make it dump a copy of each TAP run to a dir
nothingmuch err
Alias_ As a side effect
nothingmuch integrate it with Test::TAP::Model somehow 08:40
you can "parse" recorded taps with TTM
or you can replace Test::TAP::Harness::Straps
Alias_ Right, which is why I'm just recording the TAP
As is
As little analysis as possible happens inside the virtual machine
nothingmuch the diff is that if TTM replaces ::Straps you can capture timing info
Alias_ It just records
nothingmuch but that's usually overkill
aye
Alias_ Then the XML document gets extracted, and saved into a whopping DB 08:41
So we can do whatever we like to it later
nothingmuch anyway, i suggest that your "hierarchal" report format contains a dump of Test::TAP::Model
Alias_ Why?
Can't I build that later?
Oh, right
There's an <analysis> tag
So you can attach post-processing anaylsis of various types
nothingmuch i mean in the object that analysis tools will get
Alias_ We'd just need to invent you a mime type :)
nothingmuch just because it's slightly STD
Alias_ STD? 08:42
nothingmuch standard
there are a few tools that abuse this already
see also sourceforge.net/projects/smolder
it's a more "serious" smoke server
Alias_ If Test::TAP::Model just processes TAP, then it's a post-processing stage
nothingmuch with deployment issues =/
again, Test::TAP::Model takes TAP and gives you an introspectable thing
like how many failed
Alias_ That's fine
nothingmuch how many passed
sub tests 08:43
etc
Alias_ I'll post-process it and attach
nothingmuch it's just a "view"
it can even be a temporary thing, such that the analysis server holds the "raw" TAP output and rebuilds the model on the fly
08:43 lypie joined
nothingmuch think of it as a DOM for TAP 08:43
Alias_ Well, I don't care about the analysis so much
nothingmuch right
so it really doesn't matter where Test::TAP::Model fits in
lypie waves to all 08:44
Alias_ At the moment I'm just building the enormous clusterable intrastructure part
nothingmuch i'm just lobbying that you use it in the API that you expose
Alias_ I expose XML
nothingmuch with CDATA?
Alias_ You send me a testing require file, I run it on the cluster, and you pull back the data afterwards
requirement
nothingmuch sounds good
... but you'll probably also release a perl library to futz the XML later, right?
*that* part should have TTM built in ;-) 08:45
Alias_ So <xml> ... run this package, on this set of platforms, etc etc, heres a GUID, etc </xml>
Well, PITA::XML already exists
nothingmuch GUID?
Alias_ The system gobally uniquely stamps everything
globally
Globally Unique Identifier
So if you want to throw pugs at 50 platforms, you just give a request 08:46
nothingmuch yeah
i was just unfamiliar with GUID
i know UUID
Alias_ What you do with the resulting mountain of data is up to you (for now)
nothingmuch what's the diff between em? the TLA?
Alias_ Same thing I believe 08:47
Might be subtle differences if you ask an expert
nothingmuch ah
anyway, i'm still lobying for PITA::XML to have Test::TAP::Model somewhere for ease of use
so that you could take a PITA::XML and make a Test::TAP::HTMLMatrix in 2 lines of code 08:48
08:48 wilx joined
Alias_ As I said, it has an <analysis> section 08:48
nothingmuch err, no 08:49
Alias_ So you can attach completely arbitrary analysis to the document
nothingmuch not XML data
just perl side
it's not a part of the document
Alias_ oh, there
nothingmuch it's a view on the core data of the document
Alias_ ok
nothingmuch it's just glue =)
Alias_ Well, it would bloat the deps
nothingmuch sub tap_as_model {
Alias_ deps, not core
err code
nothingmuch eval { require Test::TAP::model } or die "Test::TAP::Model is required to invoke this method";
Alias_ Better on the other side 08:50
nothingmuch ...;
}
Alias_ sub new_from_pita_xml { ... }
nothingmuch fair enough
Alias_ Since there's not question that you have the XML module on the from side
no
nothingmuch patches welcome =)
Alias_ If I ever get that far
Currently trying to finish the tests for the core test loop
nothingmuch for repo in nothingmuch.woobling.org/Test-TAP-{...MLMatrix}; do darcs get $repo; done
Alias_ Waiting on a 1-2 meg specialised linux image
Apparently nobody can build one 08:51
nothingmuch why 1-2 meg?
isn't ~40 meg more common?
Alias_ So it's safe to upload to CPAN without too much bloat
nothingmuch oh
nothingmuch wouldn't want to go into *that*
Alias_ And yeah, 50 meg are more common
But the whole "boot floppy" era did exist at one point
nothingmuch i'd post a bit torrent client that can auto install for you
instead of a copy
Alias_ That's a pretty heavy Makefile.PL 08:52
nothingmuch i.e., you run it, and it says "no virtual platforms are configured, would you like me to download them?"
Alias_ And there are no Perl bittorrent clients
nothingmuch "would you like me to run under $vm_engine? do you have it installed?"
Alias_ Also, it's like 1-2 meg
nothingmuch i thought there was
it's theoretically 1-2 megs 08:53
Alias_ Google funded one, and paid up, but it failed
nothingmuch theoretically it's 40 megs
and not just linux
so theoretically it's 100-300 mb of small OSs ;-)
Alias_ Well, it's "an OS that can wget a fixed URI"
That's it
09:10 tifo_ joined
tifo_ \exit 09:19
\quit 09:20
Alias_ other slash
:)
09:22 hugues23 joined 09:33 marmic joined 09:46 bsb joined 09:47 tifo joined 09:49 ruz joined, lypie left
nothingmuch looking at the coverity stuff in p5p 10:00
i think i'm getting ideas on how the pluggable "optimizer" API can be used for regular warnings, code critique like coverity, as well as optimizations
nothingmuch tries to remember this for his talk
pmurias_ nivk pmurias
nothingmuch pmurias: don't you mean "m/gs NickServer IDENTIFY secret" ? 10:02
;-)
gaal nothingmuch: hey! how did you know my password!
nothingmuch hmm 10:03
i see no nick colliding ;-)
all: gaal's passwd is not "secret" ;-) 10:04
pmurias have you checked? :)
nothingmuch yes
pmurias my freenode password i 100% secure even i don't know it 10:06
s/i/is/ 10:07
nothingmuch: shouldn't the "optimizer" api get much lower level form then code critique needs? 10:10
nothingmuch pmurias: aha 10:11
exactly
the idea is that an optimizer, a warner, an other thing, etc are all just functions
AST -> AST
e.g. String -> ParseTree is the parser
and a lint function might be ParseTree -> ParseTree 10:12
and an optimizer might be at ParseTree -> ParseTree *and* AST -> AST simultaneously
if it's generalized it can just be the same API
the top down-ish approach that the whole Perl 6 community is taking WRT perl 6 kind of ensures that this will happen 10:13
azuroth roar 10:18
pmurias it would be nice to be able to specifiy what sort of things you want to have removed/simplified in the ast you get? 10:19
s/?/./
nothingmuch pmurias: no, just think of it as pipeline plugins and meta plugins 10:21
for example, the peep hole optimizer is e.g. [PeepHoleSubOptimizer] -> AST -> AST
and then it recurses the tree, tries to match the sub optimizers to tree nodes, and then return a transformed tree 10:22
so the peephole optimizer is a meta plugin
(meta = pluugin that has other plugins)
if this whole pipeline is not hard coded
and not glued together like in Perl 5
then we are in a good shape
because unforseen extensions should be easier to write 10:23
pmurias you could add a new optimiser, instead of rewriting your code in a faster but uglier way? 10:25
nothingmuch potentially yes 10:26
i hope that the next generation of languages will let the users start prefering beautiful code over fast code 10:27
right now it's either or
pmurias neither
nothingmuch i believe that with good enough toolchains beautiful code can be faster than fast code ;-)
because beautiful code carries over much semantic meaning
"fast" code like one might write in C is not portably fast, usually 10:28
if you really want to be fast you #ifdef on your processor type, etc etc
and even so, some things simply cannot be expressed in their most simpler form
otoh a language such as haskell is free to choose the implementation strategy of a function application
in a few years I hope that systems like GHC and Perl 6 will choose the simplest runtime system that can work for a given chunk of code for a given processor and for a given data set 10:29
so that computers will be better at optimizing than humans 99% of the time
and people will have no more excuses to write "high performance" code
and the people who will really need that speed will have to do the next big step: design custom hardware 10:30
which is a much more valid option than writing unreadable code
anyway, $musings.disable
pmurias perl6 machines :)
10:31 kane__ joined
nothingmuch pmurias: i was thinking more like "crypto chips" or "compression chips" or "Graphics cards"= 10:32
oh wait ;-)
gaal are perl6 machines made of camel hair?
azuroth I want to wear moosehair underwear. 10:33
gaal azuroth: forum2.org/moose/moose08.html
nothingmuch gaal: i linked to that a few days ago 10:34
azuroth hahaha, what the hell
nothingmuch we were having a "my moose is bigger" discussion in #catalyst
gaal alternatively forum2.org/moose/moose16.html
nothingmuch i blame you =)
gaal by all means blame me
nothingmuch not many people have the privilige of being responsible for a mainstream obsession
the pokemon guys
the tamaguchi guys 10:35
though that was short lived
gaal of course, you didn't feed it
nothingmuch and Gaal Yahas =)
haha
azuroth papervision monocolour... :-)
nothingmuch azuroth: what's that?
gaal dolby antler in selected browsers!
nothingmuch oh
azuroth forum2.org/moose/moose01.html
nothingmuch papervision 10:36
yeah, that's because it's a real book in Gaal's apartment =)
azuroth haha :D
pmurias can one remove roles from an object?
nothingmuch pmurias: yes, we just don't have a syntax for that yet =) 10:37
gaal pmurias: why would you want to do that? :)
nothingmuch it's like my $x = $y but Foo;
i'm not sure if it's a coercion
or a different "view" into the same object
i think it's more like the second
azuroth hmm. interesting
nothingmuch it's probably something like 'my $z = $x but !Foo'
or butn't
;-) 10:38
gaal I don't get it, if we have structural typing then, uh, you can remove a role if you break one of the methods
nothingmuch the &prefix:<!> method in Class returns an overloaded object that *removes* that class when assigned to the metaclass's inheritence list ;-)
gaal: think of the operation as:
my $new_class = $x.meta.clone 10:39
gaal do you want something like mixing in everything but removing the trace of having mixed it in from a particular role?
nothingmuch $new_class.does( Foo ); # appends
my $y = bless $x, $new_class; # it mgihtb e bless $x.clone, $new_class
pmurias gaal: if want to mix stuff out, $fido but !Bite 10:40
gaal <pmurias nothingmuch>, you are insane
nothingmuch as for conflict resolution (or unresolution) in role (de)composition:
theorbtwo That, or create a new op with the same category as but, called "without".
nothingmuch you simply get a runtime conflict if something insane is happenning =)
or a compile time one if that can be inferred
azuroth gaal++
10:40 stclare joined 10:41 KingDiamond joined
nothingmuch theorbtwo: but is more general than this 10:41
it's the "add a role at runtime or otherwise annotate" operator =)
gaal azuroth: what, I get karma for calling people insane? Surely I'll be a moose in my next life
nothingmuch so presumably it's a short cut to a better named "mix in a role" method
which could be negated
azuroth you get karma for being right
gaal ah. 1+1 == 2! 10:42
nothingmuch azuroth: uh, if you can add a role at runtime, why can't you take one away?
let's say you were implementing a role playing game ;-)
my $elf = Elf.new; # initial
azuroth sorry, I'm only half serious
nothingmuch # elf finds scroll
$elf = $elf but Wizard;
(sorry, i don't know RPGs well, so the actual fnords I'm using are probably lousy) 10:43
the idea is that since an object can change it's member data during it's life
gaal nothingmuch: hw 3
nothingmuch then most people either create a new object or change the member data in ugly ways
in order to do a big change
pmurias you change it's role,right? 10:44
nothingmuch if we allow objects to transcend between classes (properly! not just rebless but with well known hooks and stuff, much like coercion) and roles then we can clean this up
pmurias: you *add* a role
azuroth I haven't really looked into roles much. but what if Elf and Wizard both implement two same methods?
nothingmuch azuroth: role composition says that it's a conflict
== fatal runtime error
azuroth oh, excellent
nothingmuch *OR* fatal compile time error
azuroth I like it.
nothingmuch i'll give a practical example
this one time i implemented a pop server in perl 5 10:45
i love perl 5 much more ever since
i'll love perl 6 even more since it will let me do it better
the pop3 protocol specs that most command have exactly the same syntax:
my ( $cmd, @args ) = split;
so you have a socket listener 10:46
that reads lines
and then does eval { $obj->$cmd( @args ) }
azuroth there's the trait handles... can you go "$x but $y handles<Foo>" ?
nothingmuch (with some more scrubbing to make sure that $cmd is just \w+, etc)
then $obj reblesses itself into new protocol states
you get the same benefits of implementing it as a state machine with e.g. Workflow 10:47
but with FAR less code
pmurias how can one define self excluding roles, if i mix one in, the other gets mixed out?
nothingmuch that operates in a domain you're already familiar with (classes and methods, not XML files for states and transitions and crap like that)
pmurias: good question
p6l it?
azuroth interesting.. cool! 10:48
theorbtwo It is a pretty nifty idea.
nothingmuch the reason I liked Perl is that it was lax enough to just let me do that reblessing stuff in place without anyone really caring =)
It Just Workedā„¢ 10:49
in C++ i would have to make all of these things virtual, and do weird in place assignemnts, reallocate, etc etc
that is, I could pull it off
pmurias nothingmuch: i'll subscribe to p6l and ask it
nothingmuch but the overhead towards pulling it off would outweigh the gained simplicity
gaal well, in p5 everything is virtual 10:50
nothingmuch ofcourse =)
even more than that
delegated vtables
that are really a deep structure
with symbolic lookups =) 10:51
azuroth what, like go new OtherTypeOfPop, putting the value where 'this' currently is, or something magic? or a wrapper class I guess.
gaal so my question is, if you need this kind of polymorphism, why insist on using roles?
nothingmuch gaal: it's just another way to do it
gaal sure
nothingmuch gaal: and a pretty clean one
gaal but it stresses roles hella lot
nothingmuch i dunno:
gaal because their point is that things are mixed in
nothingmuch my $user = $user but Admin; 10:52
i like that
gaal plus, what do you do with things that ain't code?
pmurias gaal: what should be used instead classes?
nothingmuch it says "from here on, treat it as ...."
member data and method names are treated the same in role composition:
private names are "masked", i.e. they don't conflict
gaal pmurias: way I imagine it, what nothingmuch did in p5 should still be possible in p6, yes
nothingmuch and public ones explode
loudly
gaal: what I did in perl 5 was still quite "hacky" 10:53
with runtime role composition it would have been cleaner
10:53 kanru joined
gaal nothingmuch: it's decomposition that scares me :) 10:53
nothingmuch symmetry =)
gaal oh, is there a summary of masking somewhere? 10:54
$:x_from_roleA
$:x_from_roleB?
it's all in the metamodel? 10:55
$self.meta.roleA.x ? 10:56
nothingmuch gaal: err 10:57
the idea is that roleA and roleB are talking about different things
which they both named 'x'
but that aren't the same
they are implementation details
you can probably just say $self.RoleA::x or something
gaal indeed 10:58
the methods in the roles just say $:x, yes? 10:59
nothingmuch yes
sorry, i need to fade out
gaal wonders how $self.yaml (for example) should show this
nothingmuch someone else can play demagogue instead =)
probably with fully qualified names
azuroth I'll dem your gog
gaal me too, c++ unfun wants me
nothingmuch oracle reverse engineering wants me =(
they are insane 11:00
string lengths are stored in duplicate for strings under 255 chars long
one right beside the string
the other several bytes before
when it overflows 255 then one of these becomes the magic number 0xFE40
the other is '02 xx xx'
where 02 is thw width of the int field 11:01
etc etc etc
numbers are always returned +1
i suspect that 0 means NULL in the result table
but i've yet to verify that (been concentrating on queries, not results)
*sigh*
azuroth for what purpose are you doing this?
11:04 chris2 joined
nothingmuch azuroth: work 11:05
azuroth sounds interesting work
nothingmuch yes 11:06
but frustrating too
reverrse engineering is never more than 70% finished, i think
for binary protocols anyway
azuroth hmm. that wouldn't surprise 11:07
gaal hmm, won't DBD::Oracle be useful for this stuff?
or that pure java driver, i forget what they call it 11:08
(tight client?)
nothingmuch gaal: IIRC yes 11:09
but ENOTIME
DBD::oracle links to OCI 11:10
so the "good parts" are effectively closed source
is the pure java client opensource?
gaal wow, that hash thing mentioned on perl-il really does look like a bug
don't think so, oracle provide it IIRC but maybe the sources are there 11:11
nothingmuch hmm
i will have a second look
boss told me something about it
gaal jars often do
nothingmuch but I think he said it was closed
gaal decompile :) 11:12
i one word he told me secret of success in revengineering 11:13
heh heh it isn't a DD bug, he used a dot instead of a comma
nothingmuch hahahahaaaaaaaaaaaaaa 11:14
gaal++
i thought it was something like that where the keys became scalars in the first example
but '= >' didn't make sense like that
gaal did reply with the answer, but it's in his hashcash queue 11:16
11:16 tifo joined 11:19 hlen joined
ingy nothingmuch: pong 11:20
azuroth intercepts the ball 11:21
ingy :p 11:25
11:25 lichtkind joined
lichtkind Tim Toady hello i have maybe foun inconsistence in the ops may i ask something? 11:28
gaal lichtkind: maybe just ask on perl6-language?
(the mailing list) 11:29
azuroth or just hope he or audreyt will backlog it
lichtkind gaal like this one dev.perl.org/perl6/lists/ ?
azuroth yep 11:31
11:34 frederico joined
gaal are there substitution objects? my $s = s/<rule1>/replacement/ 11:52
or is a closure the way to capture that?
12:01 nnunley joined 12:14 kolibrie joined
bsb gaal: does s/// still default to $_? 12:33
azuroth surely
gaal yeah i hope so :) 12:35
bsb: also, moose
bsb s/gaal/what are substitution objects?/moose 12:40
12:45 fordinal joined
nothingmuch ingy: will you be at YAPC::NA? 12:48
12:48 SamB joined
nothingmuch gaal: ping too on that topic, actually 12:48
would you guys want to share a room?
also, bsb: some guy on the Catalyst mailing list has been complaining for about a week now that CGI::Expand won't install on windows, and that you don't respond to mail 12:49
bsb nothingmuch: haven't seen any mail... got a url? 12:51
nothingmuch yes, one sec
bsb: lists.rawmode.org/pipermail/catalys...06303.html
the thread winds down to "don't reinvent the wheel" 12:52
and then subsequently he says "well, i'll keep my reinvented version because CGI::Expand doesn't install on Windows"
gaal nothingmuch: yes i would, I'd also like to know about hackathon der^Htails in advance so I can plan my trip 12:56
azuroth night, all! 12:57
gaal putter said something about hackage in boston but I haven't seen him around since $jabbot_knows_when
night azuroth 12:58
12:58 Qiang joined 13:04 PolettiX joined 13:07 mshiltonj joined
bsb nothingmuch: C::Expand 2.02 tries to avoid unixisms in the Makefile.PL output, but I windows testing will need to wait 13:07
nothingmuch bsb++
nothingmuch goes home 13:08
13:13 vel joined 13:14 jserv-- joined, fglock joined
svnbot6 r9876 | fglock++ | PC-Tokenizer - added 'prefix'; TODO 13:15
pmurias hi fglock 13:18
spinclad bsb: the moose operator is $_$, not $_? 13:19
U
pmurias what does it do, enforce moose context? 13:20
spinclad i'm not really sure... anything a moose can do, i expect, which is a Lot. 13:21
gaal well, you can protect anything with moose quotes: (:{ anything }:)
spinclad #:( anything at all ):# 13:22
#:(new style comment):#
gaal spinclad: except "):#" :-)
spinclad true, true 13:23
#:{ even }:# 13:24
13:24 mshiltonj left, Limbic_Region joined
spinclad mugwump: 'perl 6 begat haskell, whence pugs came': wed not begat; of their begetting came pugs... (and the same again with lrep) 13:24
mugwump: 'Haskell bootstraps with perl5': huh. i wasn't aware of a haskell implementation in lrep... :) 13:25
mugwump: nor a pugs one, for that matter, though at least interest and maybe work already on reimplementing the Parsec parts in Perl6 rules
(and thus lrep / PGE) 13:26
lumi Haskell actually does afaik bootstrap with p5
gaal @google evil mangler
spinclad ah, that's what i was missing there, thanks 13:27
lumi I guess it can't be glorious when bootstrapping
gaal "It derives it evilness from its utterly ad hoc, machine, compiler, and whatnot dependent design and implementation" - note, not a word about perl
fglock pmurias: hi 13:28
lumi They're not allowed to say bad things about Perl anymore :P
gaal nah, that doc has been around for a while 13:29
# www.cse.unsw.edu.au/~chak/haskell/g...ngler.html
spinclad lumi: which haskell? ghc, hugs, or something i should already know about just named 'Haskell'?
lumi ghc
Mea maxima culpa
spinclad nulla culpa 13:30
Alias_ lichtkind: ping?
spinclad (of course lots of things bootstrap with 'perl Configure.pl' these days...) 13:31
pmurias whats the best way to search the p6l archive google,asking the list manager for old messages...? 13:32
fglock is someone interested in starting a new p5-pugs module? - an operator-precedence parser that uses Pugs-Compiler-Tokenizer 13:33
pmurias fglock: i could do it but i have to finish Embed::Parrot first 13:37
fglock pmurias: cool - so I'll keep working on the tokenizer for a while 13:41
kolibrie fglock: I have very few tuits, but it sounds interesting
bsb ingy: Is YAML::SortKeys gone? 13:42
13:44 Alias_ left
fglock the op-precedence parser can reuse the algorithm in PGE - as in misc/pX/tewk/Rules-P5 - but it needs to be adapted to accept AST as tokens 13:45
(or Match objects)
13:55 justatheory joined
Limbic_Region fglock - were you able to get Parse::Yapp to work as your shift-reduce parser with the p6 tokens? 13:58
fglock Limbic_Region: no, I need something that can accept objects as tokens - but the algorithm can be reused 13:59
Limbic_Region fglock - is it as simple as subclassing so that a token is first checked if it is an object and if so a method is called to obtain the token or is it more complicated than that? 14:15
Limbic_Region is mildly interested in helping but only mildly
fglock it doesn't look so easy - Parse::Yapp is a compiler - it takes a text as input 14:16
I mean, it takes a text as the specification 14:17
while the p6 specification is based on tables 14:18
Limbic_Region ok - well, if there is some non-thinking grunt work you could have me do - let me know (emphasis on the non-thinking part)
fglock I didn't find a clear explanation of the shift-reduce algorithm yet - that would help 14:19
Limbic_Region ok - and I assume that inlcudes the one on wikipedia 14:21
so basically if I find something that I can understand then you can understand it too
fglock yep
Limbic_Region gotcha - will look around
fglock thanks!
Limbic_Region most of what I saw was focused on C
I will look for a language independent clear explanation of the algorithm 14:22
PerlJam Isn't it just shifting tokens onto a stack and when they match a production, they're "reduced" to that production? 14:23
fglock PerlJam> basically, yes - but you have to check for circumfix/postcircumfix, etc 14:24
gaal actually sees the Evil Mangler for the firt time and is amused to find it is written in Literate Perl
(TeX-style) 14:25
fglock and it must be correct and well tested
14:26 sockstat joined
pmurias fglock: there is a clear explanation of the shift reduce algorithm in the book "lex and yacc" by o'reilly 14:32
reread and explain it to you if you want
i could 14:33
svnbot6 r9877 | fglock++ | PC-Tokenizer - add_rule() creates new tokens; recompile() refreshes the
r9877 | fglock++ | internal tables
Limbic_Region fglock - I have found a combination of 3 links that I think do a fairly adequate job (when combined) of everything that you need to know 14:35
fglock pmurias: I'll check if they have the book in the library
pmurias do you need to know how it works, or how to implement it? 14:36
fglock pmurias: both, because I need to be able to modify it
Limbic_Region: can you paste the links? 14:37
Limbic_Region err, I just /msg'd them to you
www.cs.binghamton.edu/~zdu/parsdemo/srintro.html # introduction to shift-reduce parsing
fglock I see it now :)
Limbic_Region www.cs.rpi.edu/~gregod/Sugar/doc/design.html # Shift/Reduce Expression Parsing 14:38
www.cs.grinnell.edu/~rebelsky/Cours...ne.20.html # Compiler class outline for shift-reduce parsing
The last one comes in 3 parts 14:39
pmurias fglock: you have o'reilly books in your library? 14:40
fglock pmurias: I have some 14:41
Limbic_Region woah - my library has Safari access from remote locations - just enter your library card number 14:44
Limbic_Region needs to get a library card
even better - I can register for a card online 14:45
pmurias Limbic_Region: where do you live? 14:48
Limbic_Region Odenton, MD
Limbic_Region has to wait about a week for the card to show up 14:49
pmurias Limic 14:51
Limbic_Region ?
pmurias typo
you aren't talking about your town library for sure? 14:52
Limbic_Region yes
why? 14:55
pmurias in mine it's only forth an fortran and they won't let you borrow a book, just wanted to now what is the state of library service elsewhere 14:57
s/an/and/
Limbic_Region oh, well I have never used this library - we moved here less than a year ago and I am a big fan of owning books versus borrowing them 14:58
svnbot6 r9878 | fglock++ | PC-Tokenizer - 'term' checks for modifications in the base categories 15:02
fglock I often donate perl books at YAPC meetings (after reading them) - I usually don't read a book twice 15:04
but I have a few 'historical' ones - like a 1964 Fortran book 15:05
15:08 hlen joined, hexmode joined
Limbic_Region fglock - web.mit.edu/gnu/doc/html/bison_toc.html may be of some interest as well though it is specifically focused on bison 15:09
Limbic_Region mostly uses books as reference and started collecting them when he found that, after giving several away after reading them, they were out of print 15:10
fglock Limbic_Region: thanks
lunch &
15:26 hlen_ joined 15:35 autark joined 15:42 cdpruden joined
kolibrie suddenly realizes Limbic_Region lives less than an hour away (given good traffic conditions) 15:46
PerlJam kolibrie: planning a hit or just stalking? :)
kolibrie PerlJam: my life is too boring for either 15:47
Limbic_Region kolibrie in what direction?
kolibrie Fairfax
15:47 FurnaceBoy joined
Limbic_Region oh, well you are being extremly optimistic about good traffic conditions then 15:47
last time I was in FairFax it was to meet jdporter (PerlMonks) for drinks, filipino food, and karaoke 15:48
PerlJam He may have also been factoring in his normal average speed.
kolibrie I only drive to MD before 7:00 Saturday mornings
Limbic_Region well - if you happen to be in the Baltimore area and want to meet, let me know 15:49
kolibrie Limbic_Region: sure
Limbic_Region it is a bit more difficult these days with a new baby to just do things without planning but with a day or two notice most anything could be arranged
ingy bsb: shouldn't be 15:50
kolibrie Limbic_Region: I usually make plans days or weeks in advance (we have three small kids) 15:52
bsb ingy: you're right, I was misled by: 15:58
15:58 justatheory joined
bsb perl -w -MYAML -e '$YAML::SortKeys = 0' 15:58
Name "YAML::SortKeys" used only once: possible typo at -e line 1.
but it still actually works
ingy yeah, so?
doesn't Data::Dumper do the same thing? 15:59
gaal yes
ingy it's just a global var
bsb It was just a new warning
gaal eg if you want to fudge DD::Indent you need to no warnings 'once' it
bsb no big deal
gaal or += 0 it
or $^W = 0 :) 16:00
ayrnieu YAML and DD::Indent could just export a subroutine to change this. 16:01
gaal YAML.pm and YAML::Syck should both have class method variants for Dump and Load etc, so it becomes easy for client code to do $YAMLCLASS->Load(..) 16:02
also people should buy ingy a beer
also my cat should not attempt to eat this fly 16:03
bsb I owe ingy soooo many beers
gaal I'm just sayin'.
ingy :D 16:04
I LIKE BEER
and coffee too 16:05
FurnaceBoy mmmmmmm coffee 16:06
thanks for reminding me
I knew there was something missing from my morning
gaal it's a tricky business, expecting us to remeber coffee in the morning before we've had our coffees 16:08
& 16:09
bsb ingy, if I make it to taipei from hong kong I'll repay me debts
ingy bsb: cool 16:11
how long are you there?
bsb 19/april - 3/may 16:12
this time
16:13 xinming joined 16:19 pdcawley_ joined 16:32 ilogger2 joined 16:40 fglock joined 16:42 ghenry joined 16:48 chovy joined
svnbot6 r9879 | fglock++ | PC-Tokenizer - added 'infix' category 16:48
chovy anybody know what app was used to create this chart? www.pugscode.org/images/container.png
wolverian visio, I believe 16:49
gaal anyone around who groks higher-order types?
in haskell 16:50
wolverian I might, if you tell me what they are
:)
gaal :)
FurnaceBoy lol@gaal coffee 16:53
wolverian hrm coffee might be a good idea 16:54
thanks!
chovy those icons look like KDE 17:04
wolverian they do. 17:05
.o(Crystal?)
17:07 _bernhard joined 17:31 david_ joined 17:42 justatheory joined 17:44 rindolf joined
rindolf Hi all! 17:44
TimToady: here?
fglock rindolf: hi 17:46
rindolf fglock: hi! What's up?
fglock I'm working on p5-pugs - I could use some help :) 17:47
17:47 arcady joined
fglock rindolf: re pessach - look for 'matzo-man' in google 17:53
rindolf fglock: OK. 17:56
fglock: is p5-pugs the pugs Perl 5 compiler backend? 17:57
fglock it's 'pugs', but written in p5
rindolf fglock: so you're re-writing pugs in perl5? 17:59
18:01 larsen joined
fglock the very early initial plan for bootstrapping p6 was to write it in perl5 - it's much easier now that we have more detailed synopsis and Pugs and Parrot experience 18:04
rindolf fglock: I see. 18:05
TimToady rindolf: you rang? 18:06
rindolf TimToady: yes.
TimToady: we finished transcribing wiki.osdc.org.il/index.php/Larry_Wa...re_Perfect . You may wish to proof read the transcription. 18:07
TimToady okay, thanks.
rindolf TimToady: no problem. 18:09
TimToady audreyt: just refactored long dot to take only <ws>, but of course that now includes #(comment) so you can still write foo.#<bar>.baz and mean foo.baz. #() is now officially whitespace rather than non. 18:11
wolverian that's a bit weird when using <ws> outside perl6 source 18:13
TimToady or whatever the <ws> rule is in Perl 6's grammar... 18:14
it can be <p6ws> to match #() etc.
was just trying to abbreviate "whitespace", which I get tired of typing... 18:15
wolverian right. :)
rules have namespaces (grammars), right? so it can be <Perl6.ws> or so?
TimToady right, in which case it's still <ws> :)
wolverian just not the generic <ws>, I hope :) 18:16
(if I use <ws> inside a class called Perl6, does it look up <Perl6.ws>?)
TimToady generic whitespace is \s*
fglock TimToady: I'm looking for existing p5 op-precedence parsers to reuse - do you have any recommendation? I'm currently thinking about using Parse-Yapp as a starting point
wolverian oh. I thought <ws> was generic. nevermind then
TimToady actually, <ws> is supposed to be the smart whitespace matcher that :w uses. 18:17
18:17 rindolf left
TimToady \s+ between idents, \s* otherwise. 18:17
but maybe that should be "between tokens that would otherwise be confused as single tokens" 18:18
18:18 PerlJam joined
TimToady since that's precisely the situation with .. and .#(). now. 18:18
18:22 nothingmuch joined
TimToady so maybe it's really <tb> for "token boundary" or some such. On the other hand, if we do all our longest-token matching with <%hash>, maybe the situation never arises in a "real" grammar. 18:22
well, gotta transit, commute, and associate. not planning to distribute soon, however... & 18:23
wolverian cheers :) 18:24
18:27 KingDiamond joined 18:39 b_jonas joined
svnbot6 r9880 | fglock++ | Pugs-Compiler-Precedence - experimental precedence parser using Parse::Yapp 18:48
r9881 | fglock++ | PC-Precedence - Parse::Yapp can generate "ast" 18:54
PerlJam just notices that fglock is taking PCP 19:02
actually, I guess he's a manufacturer and distributor of PCP
svnbot6 r9882 | fglock++ | Pugs-Compiler-Precedence - Parse::Yapp takes ast as input 19:04
19:04 ifdev joined
fglock monopolizes PCP production and terminals 19:05
19:09 hlen joined
fglock Wow, that was easy 19:12
19:15 david__ joined
kolibrie fglock now has a precedence parser? 19:22
19:26 r0nny joined, zgh joined 19:30 r0nny joined
fglock kolibrie: yes! I'm packaging it and adding API and tests stuff 19:31
19:31 chris2 joined
svnbot6 r9884 | fglock++ | PCR - moved Category stuff to the new PC-Precedence module 19:31
kolibrie fglock: woot!
PerlJam fglock: now all you need to do is create a TGE in perl5 and you'll have recreated the entire toolchain that will be used to make a perl6 compiler. 19:32
fglock so we mostly have the 3 layers of p6 parser figured out
PerlJam: TGE is not necessary with the new 'return blocks' 19:33
TGE is useful for optimizations, but you can make the compiler without it
arcady perl 6 is looking like a very good language for writing compilers in 19:37
presumably because that's the biggest use for it that has been found so far
Limbic_Region fglock - Parse::Yap takes ast as input? 19:38
s/p/pp/
19:39 Ann joined
fglock Limbic_Region: yes - I can feed the matches from Pugs-Compiler-Tokenizer into Parse::Yapp using a few transformations 19:40
Limbic_Region: and I can get ast back 19:44
Limbic_Region ok - still color me confused 19:45
ast is going into P::Y or is coming out
PerlJam both sounds like
fglock I'm using P::Y for ast->ast transformation (ast list to ast tree) 19:46
Limbic_Region ah
ok so the "few transmformations" is what is making the object as a token problem go away? 19:47
fglock this is surprisingly not documented
yes
Limbic_Region cool beaners and moldy chicken 19:48
fglock this is the prototype - misc/pX/Common/Pugs-Compiler-Precedence/precedence.pl 19:49
Limbic_Region I currently can't get Pugs to build on my work machine so my local repo is out of date - I will svn up 19:51
Limbic_Region really needs to figure out why Pugs doesn't build here though
fglock you don't need pugs to run p5-pugs 19:52
19:52 FurnaceBoy joined
Limbic_Region I know 19:52
perhaps you missed the part where I said my local repo was out of date and that I will svn up 19:53
and that the figuring out why pugs doesn't run here was a "though"
fglock ok 19:54
Limbic_Region it has been a couple of weeks - this might take a while
svnbot6 r9885 | fglock++ | Pugs-Compiler-Precedence/precedence.pl - added more operators 20:01
Limbic_Region wow - short and sweet
fglock Limbic_Region: I wrote quite a few parsers myself using a lot of different algorithms before finding this out 20:05
Limbic_Region just noticed the eval $p 20:06
how is the performance?
fglock quite good - there is a report that says it's half the speed of the C version 20:07
I mean, half the speed of some better parser - I don't know if it was in C 20:08
clkao summon audreyt
fglock and magnitudes faster than Parse::RecDescent 20:09
the eval disappears if you are compiling code - it turns into plain source code 20:10
Limbic_Region hrmm 20:11
presumably all optimizations happen in Parse::Yapp land which is mature enough to have already gone through a few trips to the tinker shop
fglock PGE works this way too
PCR also generates source code and than evals it 20:13
Limbic_Region was misremembering something about Safe and eval 20:16
or rather, I was misattributing a performance issue with Safe and eval to eval
20:21 david_ joined
Limbic_Region fglock - the bigger difference with Parse::RecDescent that Larry was harping about was the ease of adding in precedence levels later 20:25
beyond just the speed that is
fglock that, and P::R needs some tricks to avoid infinite loops 20:27
Limbic_Region ok - well my grats message apparently didn't come through - so grats
Limbic_Region is headed homewards 20:28
TimToady fglock+=42 20:32
fglock thanks! 20:33
20:39 macli joined 20:41 tri joined 21:00 p5evalbot joined, ifdev left 21:17 FurnaceBoy is now known as FB|afk
lichtkind ? eval 4 21:27
?eval 4 21:28
evalbot_9885 4
21:28 b_jonas left
lichtkind ?eval @a<1 2>; 21:29
evalbot_9885 Error: Undeclared variable: "@a"
lichtkind ?eval my @a = (1,2); @a<0 1>;
evalbot_9885 Error: Cannot cast into Hash: VRef <Array> 21:30
fglock ?eval my @a = (1,2); @a[<0 1>]; 21:32
evalbot_9885 [1, 2]
lichtkind no i wanted to know if i can use the <> syntax also to ask for subarrays 21:33
like with hashes
fglock it would be nice, but you can't - it's like saying @a{'0','1'} 21:34
lichtkind i know 21:44
it would be a bit of dwimmery 21:45
i just tried
svnbot6 r9886 | fglock++ | PCP - added Precedence.pm, TODO 21:53
21:57 KingDiamond joined 22:02 Limbic_Region joined
cognominal ?eval my @a = ('toto'); say @a<0> 22:12
evalbot_9886 Error: Cannot cast into Hash: VRef <Array>
cognominal ?eval my @a = ('toto'); say @a['0']
evalbot_9886 OUTPUT[toto ] bool::true
cognominal say 'toto' 22:13
?eval say 'toto'
evalbot_9886 OUTPUT[toto ] bool::true 22:14
22:21 tri left 22:25 justathe1ry joined 22:30 frederico joined 22:36 colares joined 22:42 vel joined
wolverian hm, what are the current thoughts on open()? is http.open, file.open etc still the way to go? 22:42
(mm, lowercase modules) 22:43
Limbic_Region wolverian - were you present for the stream of conciousness chat larry had on the topic here in #perl6?
wolverian yes, I was wondering if there were any developments on it afterwards 22:44
didn't see any in the logs, though.
(egrep Tim.*open) 22:45
Limbic_Region wolverian - you have your own local copy of the logs? 22:46
why not just use colabti.de/irclogger/irclogger_log_search/perl6
?
wolverian yes, I have my own copy.
I'm not sure what the www page has that the localy copy doesn't, besides downtime (which shouldn't be drastic) 22:47
anyway, thanks, I guess that discussion was the latest on the topic :)
Juerd wolverian: I hope for a URI based open. 23:02
wolverian Juerd, I think I still want open "foo.txt" to work, though. 23:03
23:04 macli left
arcady it could be something like ruby's uriopen module 23:05
open "foo.txt" works
require 'uriopen'; open "www.ruby-lang.org/" also works 23:06
wolverian does anyone use that? 23:07
arcady yes
rubygems does, I'm fairly sure
err... actually it's called open-uri 23:11
and is a part of rubygems
Juerd wolverian: Local filesystem as fallback in case of absense of ^\w+\: makes sense, yes :) 23:16
wolverian: And an :adverb can decide if the string should be parsed as URI or local file, to override the heuristics 23:17
wolverian Juerd, then again I'm not sure if I want even that much magic in open()
Juerd wolverian: I do. 23:18
I want magic everywhere.
arcady putting the magic in a separate module would work, though
23:18 rafl joined
wolverian Juerd, how about io() and open(), and put the magic in io()? 23:19
23:19 Quell joined
Juerd I also want magical @ARGS open to be smart enough to never parse things specially. 23:19
wolverian: io() is a silly name. Everything a program does to communicate is io.
wolverian I'd assume it would be magic enough to fit that bill...
Juerd Maybe File.open, and URI.open, where Magic.open is the default.
wolverian that's an interesting idea 23:20
I like Magic :)
Juerd use File <open>; to override lexically.
wolverian open file: ...;
Juerd open File: ...; 23:21
wolverian I wonder how often I want to specify what I want to open
Juerd I would want to specify it only when I have arbitrary filenames.
Calculating URIs is counterproductive, and hoping they won't trigger URI parsing heuristics is dangerous.
arcady opening a URI is much less common than opening a file, so specifiying that that's what you want is the better idea 23:22
Juerd Consider @ARGV's huge gaping security breach waiting to happen in Perl 5.
arcady: I would want URI opening to become a natural action, possible because Perl supports it naturally.
Not because the programmer was clever enough to support it.
There are many things I use in Perl programs that the authors never thought of, but are possible because Perl is so cleverly designed. 23:23
(Or, not designed at all, and flexible enough to compensate for that, depending on your theory of evolution versus ID ;))
wolverian I can certainly understand making open() understand URIs. it's just future proof.
arcady there are very evil uses for a OpenURI type functionality 23:25
Juerd arcady: There are.
arcady such as installation scripts:
eval(open("foo.com/install").read)
Juerd OTOH, I may not want URIs to be the default because they're entirely incompatible with many other file operations, like -d or unlink.
arcady: I think that point is highly irrelevant. 23:26
arcady sure
Juerd Opening *arbitrary* files is dangerous by definition if there's any magic. See also Perl 5 and ARGV.
Opening *literal* URIs will be done anyway, regardless of URI open being the default or not.
arcady right 23:27
wolverian some programmers won't know that open() understands URIs, creating DoS scripts, perhaps.
mugwump can p6compiler.pl compile without running the program? 23:28
Juerd wolverian: But if "some programmers" who "don't know" (or in fact "won't know") that arbitrary open is dangerous, and they ALSO don't/won't use taint mode, let them suffer. 23:29
Let them create dangerous programs and lose their jobs. Please.
theorbtwo ...or make a locally-accessable priv esc become global, when silly programmers assume that on-the-filesystem paths must be safe.
Juerd And in case you didn't know, Perl 5's <> is dangerous in almost the same way.
theorbtwo Of course, that's no worse then now, when silly admins assume on the local network is safe, and forget about their open 802.11 with convient DHCP. 23:30
Juerd Perl 5 has URI open, except you have to use external commands to get it.
theorbtwo Perl has never been shy about letting you have enough rope.
Juerd perl -e'print while <>' "|curl juerd.nl/"
wolverian GET! (it's even perl)
Juerd Believe me, I've used (and abused) this more than once. 23:31
Ever used somescript.pl /path/to/*
theorbtwo A lexical no open 'URI' would be nice, of course. 23:32
Juerd That's a little bit safer than ./somescript.pl * if somescript.pl happens to use ARGV (through readline ARGV, which is what <> is, for example)
mugwump fglock: you available to give a tour of lrep? 23:33
or does anyone know how to get lrep to build itself? 23:34
I get an error trying to use it on, say, iterator_engine.p6 23:35
`perl p6compiler.pl p6prelude.p6' seems to hang 23:36
Juerd Your quotes are different.
mugwump they're called `TeX' quotes :) 23:37
23:37 zgh joined
theorbtwo They're called "stupid-looking non-matching quotes", too. 23:37
They are one of my major pet peeves.
Juerd I'd call them a silly attempt to refit ASCII into something that it is not and can never be. 23:38
23:38 FurnaceBoy_ joined
Juerd If you want to have bracketing quotes, use any of the many unicode alternatives, but not ASCII. 23:38
In Dutch it can be even funnier (sadder), as the traditional form of quotes is sometimes asciified as ,,foo'' 23:39
I don't know which other languages use this kind of quoting. Fortunately, in the youngest decade, the use of these quotes has dramatically decreased :) 23:40
TimToady I'm partial to āfatāž quotes myself...
theorbtwo Apparently, in some very old fonts, ` and ' did form a reasonable-looking pair. Those fonts are now properly considered wrong.
Juerd: They're traditional German too, I think. 23:41
wolverian TimToady, it's so wrong to quite the 'fat' there.
er, s,quite,quote,
23:41 mako132_ joined
theorbtwo I didn't actually see them when I lived in Germany, though. 23:41
Juerd theorbtwo: I thought German used >>these<<?
theorbtwo I suspect, like the Gothic font, they are considered old and stogy.
Sometimes. Mostly they use "normal" double-quotes. 23:42
>>foo<< seems to be the German equiv of scare quotes.
wolverian I wonder if I can make my locale insert the unicode curly quotes when I type ".
mugwump ok, I'll use ā€œunicodeā€ quotes from now on :)
wolverian since that would be proper for fi_FI.utf8
(then again, I'm not typing finnish now, so it'd break. oh well.)
TimToady Actually, ASCII quoting still works fine as long as you don't assume ` is symmetrical with ' 23:43
(my current font has them symmetrical though, grr...)
mugwump well, moving right along... 23:44
Juerd I always use "ASCII quotes"
Sometimes 'these'
mugwump onto lrep: running p6compiler.pl on p6primitives.p6 seems to work on head
Juerd I don't care enough about the glyphs to use anything else. Straight, non-curly, quotes are good enough, as long as they're somewhat symmetrical and not abused.
theorbtwo wonders if he should map compose-6-6 and compose-9-9 to ā€Ÿ...ā€. 23:45
Then gain, I don't care.
s/gain/again/
mugwump but, using p6compiler.pl on p6prelude.p6 hangs, and iterator_engine.p6 fails 23:46
wolverian never could figure out how to use compose 23:47
Juerd en.wikipedia.org/wiki/Quotation_mark#Table # What a mess!
theorbtwo xmodmap -e 'keycode 94 = Multi_key' 23:48
Now the key to the right of left shift is compose. Try compose, s, s.
Juerd I never knew that besides <<foo>> and >>foo<<, even >>foo>> existed, each with and without inner spacing.
theorbtwo (Assuming xorg on a normal european PC keyboard.) 23:49
wolverian I don't have a key to the right of the left shit.
Juerd "Normal European"
wolverian er, shift.
er
sigh, I'm retarded.
Juerd Mind you that in .nl, American keyboards are used. On a QWERTY model, the key right of the left shift is Z.
wolverian theorbtwo, thanks, that worked
now I can't type the arrow brackets anymore 23:50
heh.
23:50 Cyrup joined
Juerd I think it's more sane to map Alt Gr to compose. 23:50
mugwump also try gnome-keyboard-properties
Juerd Or any of the windows keys
wolverian I need alt gr to type @ and such
TimToady theorbtwo: it would appear that your ā€Ÿ...ā€ quotes aren't matching quotes. your left one is DOUBLE HIGH-REVERSED-9 QUOTATION MARK, while your right one appears to be RIGHT DOUBLE QUOTATION MARK 23:51
Juerd wolverian: You can still do so, iirc. It's the difference between using it as a key and as a meta key.
wolverian Juerd, ah.
heh, how can I clear the keycode mapping? 23:52
Juerd By re-loading an entire keymap 23:53
xsetkbmap us # or s/us/whatever/
xmodmap -e 'keycode 117 = Multi_key'
117 is the Windows menu key.
arcady back when I had a mac, I used the option key for that purpose 23:54
wolverian I don't have a xsetkbmap. heh
23:54 Cyrup left
theorbtwo I use an en_US keymap on european keyboards, so the key to the left of right shift is useless except for compose. I like having two alt keys, and the keyboard on my desktop doesn't have windows keys, so it works out well for me. 23:54
mugwump mail.pm.org/pipermail/wellington-pm...00338.html # my thoughts on keymaps 23:55
theorbtwo I use "normal european" to mean 102 key, plus possible windows keys. Most european keyboards seem to be like that, though what's printed on the keycaps varies.
Juerd wolverian: setxkbmap, sorry. 23:56
xsetkxmap is a contamination of xset and setxkbmap
arcady there's plenty of extra keys, if you really need one, though 23:57
I mean, does pause/break do anything on linux?
or scroll lock?
theorbtwo Scroll lock is quite useful -- it will "pause" output on terminals, like ^Q/^S. Also, alt-scroll-lock can be used as a magic sysrq. 23:58
Juerd Err, scroll lock is essential. Couldn't do without it :)
theorbtwo However, the second will happily ignore keyboard mappings, which is part of the point.
wolverian Juerd, thanks!
Juerd theorbtwo: sysrq can be on scroll lock or print scrn or break, depending on the keyboard (and/or mapping?)
There's always a key that someone thinks is useless, until it's taken away 23:59
Consider some of the new Logitech keyboards, without insert key.
theorbtwo EEEP!