Parrot 4.7.0 "Hispaniolan" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 4 September 2012.
00:12 benabik joined 00:30 kid51 joined 01:32 benabik joined 01:44 MikeFair joined 02:03 mvorl joined
MikeFair Hello there #parrot 02:04
dalek rtcl-nqp/nqp2: 868ef43 | coke++ | src/Partcl/commands/time.pm:
fixup [time]
02:49
rtcl-nqp/nqp2: 4c10dd8 | coke++ | src/Partcl/commands/info.pm:
fixup [info]
rtcl-nqp/nqp2: 488d13d | coke++ | src/Partcl/commands/unset.pm:
fixup [unset]
rtcl-nqp/nqp2: 0b1e72a | coke++ | src/Partcl/commands/upvar.pm:
fixup [upvar]
rtcl-nqp/nqp2: b0ae2f9 | coke++ | src/Partcl/commands/proc.pm:
fixup [proc]
rtcl-nqp/nqp2: f2aa12c | coke++ | src/Partcl/commands/expr.pm:
fixup [expr]
rtcl-nqp/nqp2: b188cf2 | coke++ | src/Partcl/commands/array.pm:
fixup [array]
05:31 contingencyplan joined 06:00 mvorl joined 08:19 Psyche^ joined 09:52 mvorl joined 11:37 whiteknight joined 11:40 JimmyZ joined
dalek p: b4dec6c | jnthn++ | src/PASTRegex.pir:
Stop exporting the dummy PAST package.
11:54
p: e19b5fd | jnthn++ | src/stage0/ (9 files):
Update stage0 to eliminate PAST package cross-refs.
p: 1ff9f02 | jnthn++ | src/PASTRegex.pir:
Further gut the PAST inclusion code.
whiteknight good morning, #parrot 12:00
12:08 JimmyZ joined
dalek p: 718a3fc | jnthn++ | src/ (5 files):
Eliminate a bunch more PAST references.
12:17
kudo/nom: 0ead9e4 | jnthn++ | tools/build/NQP_REVISION:
Bump to an NQP that doesn't load/import PAST.
12:18
12:56 kid51 joined 13:38 PacoAir joined 14:18 Khisanth joined 14:58 JimmyZ joined 17:48 MikeFair joined
MikeFair Howdy #parrot! :) 17:57
nopaste "Allison" at 202.71.99.222 pasted "I'm from England <a href=" purchasekamagra.devhub.com/ ">Purchase Kamagra </a> from a manual claim. <a href=" cheapkamagra.devhub.com/ ">Cheap K" (6 lines) at nopaste.snit.ch/164365 18:14
allison wow, I wish they'd stop using my name for IRC spam :)
pastebot needs captcha 18:16
whiteknight hello MikeFair 18:28
hello allison
18:37 benabik joined
MikeFair whiteknight: Hi there 18:39
allison hi whiteknight :) 18:41
MikeFair allison / whiteknight: I had some ideas /questions to run by you guys 18:53
I've got this idea to make a "program" act like a network of interconnected nodes, basically I think it's the same thing that erlang is doing, but I don't know erlang and haven't studied it 18:54
I've been looking into ZeroMQ / Crossroads I/O and one of the things they've got is idea of a topology, which is linked of networked "contexts" where a context is usually associated with an application or thread 18:55
Then I was thinking / looking at Namespaces in programming languages, like the one I'm thinking of and parrot
and what struck me was the similarities between namespaces in programming languages and network routing 18:56
So what I started considering was constructing a program where each "namespace" got a 24-bit identifier, and every "name" within that namespace also got a 24-bit identifier (aka essentially creating a graph of 24-bit address sapces) 18:57
I selected 24-bits because that lines up with the register size of the NVidia GPU cards 18:58
Coincidentally, putting the two 24-bit identifiers together (Namespace::identifier) == one single 48-bit identifier == the same length as an ethernet MAC address 18:59
So a function call would come from some context (the 24-bit id of the function, plus the 24-bit id of the "context"/"namespace" that function exists in), and go to some function in another(or the same namespace) (again a 24-bit namespace id + 24-bit function id) 19:02
So given a dedicated network consisting of many parrot instances - the instances could share their 24-bit ids with each other, publish the 24-bit ids of the identifiers they make public, and create a kind of distributed networking platform 19:04
This could be easily optimized in the case everything was on the same machine, but the model works as if all the namespaces exist on different machines 19:05
19:05 contingencyplan joined
MikeFair By putting the data of an execution context in the body of the ethernet frame, it could be sent across the wire to another parrot instance. 19:06
Lastly, as all the parrot instances can see each other, and every namespace in the application has its own 24-bit id to identify it, then every parrot instance should be able to get at all the namespaces of all the parrot instances in that "topology" 19:08
Instead of the Parrot VM receiving a block of memory to execute, it would receive a queue of instructions
those instructions would operate on the data frame sent by the caller (or something like that, as there's clearly a separation between code being dequeued and data as an array/namespace block) 19:10
What makes using ZeroMQ /Crossroads I/O useful here is that they've got a zero-copy algorithm for sending messages through their queues intra-process, can use PIPES for interprocess, and sockets for intermachine data, and they present the same API regardless of what mechanism is used 19:14
Gotta go, family is going out to lunch, bbl, and BTW: 19:17
Thanks for parrot!!! It's inspiring! :)
19:18 mvorl joined
tadzik :) 19:19
19:23 lucian joined 19:33 schmooster joined
allison MikeFair: It sounds like a very interesting project. 20:02
MikeFair: I recently worked with ZeroMQ on a smart home project, where the "brain" consisted of a collection of networked nodes communicating 20:03
MikeFair: I was impressed at how lightweight it is, it would work quite well with Parrot
MikeFair: and, it already has C bindings, so would link in easily 20:04
MikeFair allison: great to hear 20:08
allison: I'm glad you've already got some experience with it too! It's hard for me to express how to ppl just how lightweight it is
allison: And the one thing they haven't really worked out is creating their own namespace framework 20:09
allison MikeFair: yeah, they kind of have hacky namespaces in messaging by matching on the first few characters 20:12
MikeFair allison: It's pretty clear to me that having a namespace discovery system all its own that focuses on the topologies of the system rather than the underlying DNS/IP network would help it along quite nicely :)
allison but nothing structured
MikeFair allison: Which is really more of a "topic" kind of concept
:)
allison yeah, sounds like a fun project :) 20:13
MikeFair allison: So the thing I saw was that a DNS domain would publish a series of "topologies" (aka high level services), you'd connect to port 1 (which has an actual IETF standards service for i) which is all about connecting to a named service
allison: port 1 would allow you to initiate the "DOMAIN" command, where you could enter a DNS domain name, and assuming you got past whatever IAAA that domain required then you'd be able to list topologies and connect to them 20:14
allison: At that point you'd likely be talking to parrot and grammars 20:15
:)
That's the kind of vision I've got going for it 20:16
Then the tie in to the GPU is that the way OpenCL/CUDA work is you actually send your code to the GPU to be compiled and executed, which is kind of like what I see Parrot doing
So the concept of running a Parrot VM on each processor in the GPU seems to work out well, at least in concept 20:17
allison MikeFair: kind of like distributed interpreting 20:18
MikeFair I keep trying to imagine how incredibly awesome a GPU based regex parsing engine would be:)
allison: That's exactly it
allison MikeFair: security concerns on an open network, but behind a firewall would be reasonable 20:19
MikeFair allison: I'm thinking of running it over XMPP, and then private networks behind firewalls
allison and, machines could have some form of caching, so code isn't resend constantly
or even remote loading, for common libraries 20:20
MikeFair allison: Exactly! Are you familiar with the nomachine stuff for the X server protocl?
allison: that's more like what I was thinking, actually a distributed version control system for libraries at some point
allison only the general principles, I haven't gotten into the code
MikeFair allison: So the thing they do is register the function, its signature, and each time its called, they cache the variables used 20:21
allison: That 'instance' gets an ID, the id says 'these variables change each time I call and these values are static'
allison: I think technically they predetermine the registered functions 20:22
allison: So its like one step below MMD
allison: In addition to dispatching on types, they can dispatch on 'differing values'
allison ah, interesting 20:23
MikeFair allison: So they can just send 'execute version X of method Y and here's the few parts you don't have'
allison: They are capitalizing on the fact that most function calls are called with most of the same values most of time (like the same bitmap pointer for the background for instance) 20:24
allison: (and the only thing they need to send are the X,Y coordinates to draw it at)
allison yeah, it makes a lot of sense for X 20:25
MikeFair allison: It occurs to me that a lot of more complicated programs could benefit generically from such a feature, especialy in a distributed intrepretter
:)
allison I can think of a lot of cloud services that get called with the same values over and over again 20:26
MikeFair so Parrot, with its ambitious goals of ruling them all becomes the obvious choice for this concept to get baked into :)
allison and, only a few variants each time
MikeFair allison: yeah agreed :) and if each function was its own 24-bit namespace, then you could register 16.7 million variants before even needing to think about it :) 20:27
allison so, do you think it's more important to support sending the uncompiled source "over the wire"? or to support the function calling interface 20:28
?
I've been working a lot lately with JSON RPC-based services
MikeFair allison: I was thinking the source code would generate an MD5SUM or a SHA1 and that would get registered with the network
allison: Actually I take that back, that happens, but that hash key gets bound with an "interface" 20:29
allison so all machines would get identical copies of the source code?
MikeFair allison: they could, what would happen is the interface (function signature) has one key, and that gets bound to another function key
allison: So the service provider side says "I'm publishing these signatures" and then saying "and they are executed/bound to these functions" 20:30
allison: If a node didn't have that function implementation it could ask for it 20:31
allison: I'm thinking of multiple implementations for generating a SHA1 key as an example
allison: Let's say one does it wrong
allison in a distributed fashion, like DNS propagation?
MikeFair allison: Or just different from the others
allison (so, it could ask its neighbor, not just a central service?)
MikeFair allison: Yeah, but its more tightly knit, yes, the central service 20:32
allison: "You have a 24-bit address space in which to register your neighbor namespaces"
allison: "they'll tell you their ID and you tell them yours
allison: Within a one hop mesh, all addresses are unique
allison: Each of them, can then announce/publicize their distinct entities within their 24-bit space 20:33
allison: The combination of 24-bit namespace and 24-bit id = one 48-bit "pointer" to something in the mesh 20:34
allison: Sometimes, a namespace will take up one its slots to announce something that is contained in one of its other neighbors (that's not part of the mesh) 20:35
allison: So each node can talk about 16.7 million things, some of the things are local to it, and some of the things are about its neighbors things
So namespace packages A::B::C::D would suck 'D' into my local space 20:36
but I'd send the request through A when I wanted to atlk to it 20:37
I haven't exactly worked that part out yet
but that's something that you guys have to work with all the time so I figured I learn what it takes to do that here
I think what happens is I make 'D' one of my 16.7 million nodes that my namespace can connect to 20:38
allison: hehe - I actually mispoke earlier about the central service 20:39
allison: it's not the central service model, it's the neighbor query model
allison yes, the neighbor model is more powerful in a mesh
central service is more fragile, single point of failure 20:40
MikeFair allison: though I keep envisioning that the root node might use DNS to discover other meshes so I can talk to things that aren't in my same administrative domain
moritz though easier to guard against races (the central model)
MikeFair moritz: My plan, I think, is to force agreement between two nodes 20:41
moritz: So each "link" can only talk about 16.7 million things
allison MikeFair: you might look at PXE booting as a model
MikeFair moritz: Node A and Node B have to agree that X refers to the same thing on both sides
allison MikeFair: (of code executed via discovery service) 20:42
MikeFair however nothing prevents either of them from translating X into W,Y, and Z when they tell other nodes about it
So the guy in the middle B, might call it X when talking to A, and call it Y when talking to C, and call it Z when talking D 20:43
and the node keep tracks of the mapping like a big NAT table
allison: I'll look at that, I haven't looked at PXE before (though I've used it occasionally) 20:44
I'm kind of lost on the best place to begin though. I ultimately plan on having my own version of an xTalk language, so I figured I start by trying my hand at implementing that (which would get me introduced to the Parrot architecture and world) and then go from there 20:47
By talking about it with other folks I hope to learn what this takes and maybe inspire a few people with some ideas that can make my life easier as they code some of the framework to make something like this possible in what they're already doing :) 20:48
Or at least figure out who to talk to about certain pieces of the code :)
MikeFair gets called away to take his daughter for soccer pictures. :) 20:49
allison / moritz: thanks for the feedback! I'll be back later. :)
allison MikeFair: enjoy the soccer! 20:50
MikeFair: (and you might start with a simple winxed library, as a proof of concept) 20:51
21:05 alvis joined
MikeFair is back. :) 22:13
allison: We enjoyed ourselves, the girls took a beautiful picture, and it should turn out nice! :) 22:15
allison: I was thinking about being brain dead about it initially and adding a ZMQ socket to my base PMC object 22:17
allison: I'm assuming everything I'd ever want to talk to will be some derivation of a PMC somehow
allison: "Packages" would get a new context and bind a device or socket of some kind, then PMCs within that namespace would open up a socket to the namespace 22:19
using PAIR
allison: Then I'd jsut need to get namespaces to PAIR with each other
along the way I'll likely realize how wrong that design is and then see what it really needs to be 22:20
I'm expecting some combination of PUB/SUB REQ/REP and REP/REQ
Perhaps certain objects acting a broker devices for other objects
This is the kind of thing I think SmallTalk, Erlang, and probably a lot of ZMQ / CrossroadsI/O guys already have figured out so i'm expecting to do a lot of copying their patterns instead of designing totally new unless I think I really have to 22:22
Combined with a few thoughts from folks like you, whiteknight, moritz, sorear, and the others around here and I think it could become something pretty cool -- oncely it becomes something sanely comprehensible, that works, and is a good performer. :) 22:24
allison MikeFair: yes, in Parrot the objects are PMCs, the functions are PMCs, pretty much everything you work with from a high-level language is a PMC
MikeFair: with int, float, and strings as lower-level primitives, but still usually PMCs in the HLLs (because each language has extra behaviors, even for strings and numbers) 22:25
MikeFair allison: Right so that follows along with what I was thinking, give PMCs a 24-bit unique id, that's unique within whatever container it's a part of
allison: Right, I was thinking I wouldn't give the primitives a unique id, the get an address within their containing PMC (the PMC creating a 24-bit named register address space) 22:27
sorear me?!
MikeFair allison: So in my world, Parrot would get 16.7 million registers per PMC
allison MikeFair: aye, and best to construct your own id scheme, rather than using implementation details inside the VM
MikeFair: that should last us a while :) 22:28
MikeFair sorear: yeah you because you're doing the .Net implementation of Perl6 and were thinking about the "network namespace of packages" rather than the single global flat namespace, you've already got ideas I can use to make this thing work. :)
allison: Yeah I kind of figured 24-bit per PMC would be enough satisfy people's concerns and yet still be a practical finite limitation that mapped well onto hardware (especially mobile and GPU hardware), and with the builtin 22:29
nesting / NATing of addresses I've got planned it should scale really well 22:30
allison: I also wanted my own addressing scheme so that underlying architecture implementations could use address translation maps to get to the real in-memory address on whatever architecture that was 22:32
22:33 benabik joined
MikeFair allison: I exptect eventual optimizations to ditch the 24-bit scheme whenever talking internally within the same process or even the same machine - and only enforce when going 'outside the VM' 22:33
but that's in the "we'll get there" category atm let's make 'as designed ' work first before "cheating" :) 22:34
allison: So what winxed library did you see would be good? 22:35
allison: I was thinking I'm doing my language 'Safire' which will eventually get classes
allison: At that point, I'll start working with the PMCs 22:36
allison MikeFair: well, I figured starting with winxed+zmq you could get a full model network going
MikeFair: faster for experimenting 22:37
MikeFair allison: agreed, but I had a hard time thinking about "but what would it talk about"
allison: So I was thinking if I created a "Root" namespace that two Parrot VMS could share
allison MikeFair: then move a level deeper as you're comfortable you're heading in the right direction
MikeFair allison: Then creating a package and classes on one node would just "show up" in the other, likely needing to transmit the PBC in the process 22:38
allison MikeFair: on which libraries, you've got network discovery to work on, and compiling code over the wire, and remote function calls
MikeFair: as well as the ZMQ interface 22:39
(wrapping ZMQ in an object is nicer than working directly with the C bindings)
MikeFair allison: exactly, I was thinking that target was small enough to be comprehensible, but big enough to still force all the core issues to the fore
allison: Well I was thinking a PMC would basically become a ZMQ 'queue' device 22:40
allison: and all the magic would 'just happen' inside the PMC implementation
allison: it would figure out what was a remote call and what wasn't, etc 22:41
allison MikeFair: call me greedy, I was hoping for a general ZMQ library that your code uses :)
MikeFair allison: and that's where I'd likely be spending all my time
allison: How more general could it be if every PMC "WAS" a ZMQ library?! ;) 22:42
allison MikeFair: but sure, it could be purely internal
MikeFair allison: but perhaps I'm missing something
allison: I was thinking "ZMQ comes for free when you use Parrot"
allison: And automatically builds a peer2peer mesh kind of like erlang does 22:43
allison MikeFair: follow your gut, it can always be refactored later 22:44
MikeFair allison: sounds good. btw, I like greedy! :)
allison: I plan on using the Microsoft SQL Server Service Broker as something I consider a good mesaging model 22:45
allison: Whereas ZMQ puts the messaging rules in the socket type, the Service Broker uses a second construct called a "contract" and so when you open a "Conversation" to another node, the "conversation" follows the "Contract" but can reuse the channel/queue 22:46
allison MikeFair: I haven't really looked into it, so can't offer much perspective.
MikeFair allison: Where the channel/queue represents a link
allison: I like to think about it from the perspective "Of what is the code I want to end up writing to actually using this thing from my HLL" 22:47
allison: And make the 'top layer' and make whatever is beneath that do anything required to make my interface 'easy' :)
it's like test driven development, so anything you can think of that would make your programming life easier from the perspective of "using" the library, please let me know/keep me in mind/send me some notes 22:48
allison MikeFair: it's a good design methodology 22:49
MikeFair And that goes for everyone else too
The key thing is to actually make it useful and transparent
allison helps avoid the problem of "great idea with an unusable implementation"
MikeFair (or at least as transparent as is useful to still leave people with the controls need) 22:50
allison: totally agreed, and it's not like I'm reinventing or pioneering some new field of computer science here, I think most of these issues have already been worked out in those other systems and I just copy their work and integate those patterns 22:51
like PXE, ZeroConf, erlang, CUDA/OpenCL, DHCP/DNS/ZeroConf/et al, http, json, rest --- all that stuff has already proven most of the core concepts -- so all that's left is how do we make all that work for us :) 22:52
allison MikeFair: it's a time honored tradition :)
MikeFair: most innovation really is a slight edge forward on what went before 22:53
MikeFair I'm with you there
sorear don't forget. 'If I have seen further than others it is because I stand on the shoulders of giants.'
MikeFair exactly! 22:54
As complex as it might sound at first, I'm thinking you take the OpenCL/CUDA concepts and merge them with the Erlang concepts and you get a good distributed messaging/computing platform 22:56
You use Parrot VM and PIR in place of the OpenCL/CUDA code
You let ZeroMQ do its thing as a messaging backbone within and between the packges/namespaces inside the Parrot VM 22:58
and let Parrot PMCs take care of the naming/DNS type lookup, resolution, and execution
Lastly, and this is the 'innovative' part, you make it easy to bind the values between PMCs together throughout the distributed system 22:59
well actually I just ripped that off from .Net -- well more specifically Micosoft's classes
And their ideas behind a "binding context" and "currency manager" 23:01
I think if Parrot had the concept of "entagled" PMCs, where you could use a function to do define the relationship of the entaglement, that could be really powerful 23:02
When the programmer is able to express the concept of "all these PMCs are part of one system and their values are related in this way" it becomes "something new" beyond "the sum of its parts" 23:08
in concept anyway
:)
MikeFair goes back to trying get his "say" statement to work without crashing the interactive interpreter 23:09
allison MikeFair: fun to chat ideas with you, it'll be great to see how it grows! 23:14
MikeFair allison: glad you like it, I think you'll also get really interested in the xTalk work as its really a lot more than just a languge 23:15
allison: I heard that the end game for Parrot for you is ultimately a native language interpretter 23:16
allison: Which is what really attracted to me to the project in the first place
:)
dalek rtcl-nqp/nqp2: 17df463 | coke++ | build/Makefile.in:
improve build deps
23:17
allison MikeFair: I was a big fan of HyperTalk growing up :)
MikeFair: and, yes, Parrot is primarily about tools for implementing languages 23:18
MikeFair: the fact that it happens to be a good place for experimenting with distributed computing is a bonus
MikeFair allison: Excellent!!! Have you experienced 'revolution' yet?
allison: Well what good is a distributed computer if you can't express anything on it!!!?!??!?!? 23:19
:)
allison MikeFair: nope, haven't had a chance to play with Revolution/LiveCode yet 23:20
MikeFair allison: My goal for Safire (or whatever it ends up being called) is that if you can express a formalized english language to make programming commands, then those same abstractions exist in other laguanges
allison: Creating a xTalk byte code would allow a native language code to be translated to/from multiple native languages 23:21
allison: maybe not an actual byte code but some kind of IR/Abstraction Tree 23:22
allison: Then you just have to deal with variable names, which could be done using a dictionary, if the programmers used words in the real dictionary as variable names
allison: Or provided some kind of variable name to dictionary word mapping 23:23
allison: Then that also brings up another reason why I like Parrot for this so much and its because as you introduce new commands to an xTalk, you really, if you're going to do it right, need to make a custom parser just to read your new command. No xTalk interprer I've ever come across has publically considered even attempting this 23:26
allison: So Parrot, by being able to register Grammars at runtime, makes this conceivable 23:27
allison MikeFair: yup, it falls right in Parrot's favorite problem domain 23:28
MikeFair allison: loading a module or external could cause a new command to get registered to parse the new command, or augmentation of an existing command, once you "start using" it 23:29
allison: Then I got a couple other things cooking for making it possible for one person to type USD$100 and having the other person see it as EUR$120 without the programmer really needing to do anything to make that work 23:34
allison: And when you take that all together you have what I'm considering as "the project" I'm working on
:0
:)
allison MikeFair: :)
MikeFair: (I'm fading in and out, prepping for an astrophysics exam today) 23:37
MikeFair allison: That sounds "complicated" :) 23:38
allison MikeFair: nah, it's just math
MikeFair allison: No worries, what I'm mostly excited about is that I think you're the first person I've been able to explain all this to who actually had some semblence of recognition as to what it was I was actually trying to describe
allison MikeFair: yeah, I totally understand that feeling :) 23:39
MikeFair allison: The xTalk folks don't get too technical, the technical folks like crpytic, the single CPU folks have a hard time thinking distributed, the networking folks don't really think 'compilers'
allison MikeFair: hang around this channel, there's lots of "full system" geeks here 23:40
MikeFair allison: The call stack folks have a hard time with messages :)
allison: I kind of got that sense that regardless how difficult it might be for me to get started, i'm in the right place 23:41
allison MikeFair: I've also had that experience trying to explain Parrot
sorear allison: taking or giving?
MikeFair allison: And if I can get as far as a GUI based HyperTalk clone, then I'm clearly winning this game. :)
sorear: I imagine both
allison: I could only imagine 23:42
allison sorear: I'd also say both
sorear allison: I mean the astrophysics exam
allison sorear: oh, taking
sorear: yeah, my background is linguistics and CS, advanced physics is a recent addition 23:43
sorear: fun though :) 23:45
MikeFair allison: I could only imagine the challenges you've experienced explaining parrot to folks 23:47
allison MikeFair: :) 23:48
MikeFair allison: I saw you give a talk on it at SCALE once - and I could tell from the blank expressions on most people's faces they weren't exactly getting everything you were explaining
sorear SCALE? what year? 23:49
MikeFair allison: All I remember thinking was that it was all so cool and it was exactly the kind of thing I needed to make the system multi-lingual xTalk work
sorear: 7x or 8x I believe
I was paying special attention to the context passing paradigm because it was exactly the way "I wished things worked" but I didn't get creative enough to actually think I could use something other than a stack based system 23:52
I just figured it was too hard or something like that and I wasn't about to go invent a whole new computer just to find out people had already proven it couldn't be done 23:53
So I had just accepted the stack based world as my only paradigm but knew/wished for something else, something more fluid 23:54
Suffice it say I think it's really cool 23:55
the whle thing
sorear MikeFair: doesn't the "L" stand for Linux?
so Allison presenting at SCALE in '7x would be a priori impossible, Linux wasn't released until '91 23:56
MikeFair sorear: SCALE 7x
:)
sorear (also I had no idea y'all were that old)
MikeFair sorear: hehe - I'm clearly entering the phase where I can look at the new things being creating and they are begining to come from a different generation of creator 23:58
sorear: It's difficult for me to still consider myself on the 'leading edge'
sorear: Actually, I take that back, it'd be an outright lie
sorear so I guess 'SCALEĀ 7x' does *not* mean "between 1970 and 1979" 23:59
MikeFair sorear: hehe nope- I'm sorry I thought you knew
sorear: It means the 7th SCALE
sorear: This year was 10x