--- Log opened Wed Nov 22 00:00:12 2006 |
00:02 | <@Vornicus> | your entry point will be a function in the SDL stuff |
00:11 | | ChalcyGone [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
00:12 | | ChalcyGone is now known as Chalcedon |
00:12 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
00:20 | | ReivOut is now known as Reiver |
00:30 | | Chalcedon is now known as ChalcyNap |
00:46 | | Thaqui[ToDoctor] is now known as Thaqui |
00:48 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has quit [Connection reset by peer] |
00:48 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has joined #code |
00:56 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has quit [Client exited] |
00:56 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has joined #code |
01:02 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has quit [Connection reset by peer] |
01:03 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has joined #code |
01:09 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has quit [Client exited] |
01:10 | | GeoTube [~Unknown@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] has joined #code |
01:14 | <@ToxicFrog> | So, has anyone got any advice re: spellcast protocol as detailed earlier? |
01:19 | <@Vornicus> | I haven't seen it |
01:21 | <@ToxicFrog> | <ToxicFrog> Hmm. So. Protocol between client and server in spellcast3. |
01:21 | <@ToxicFrog> | <ToxicFrog> The easy way is simply to have a Message object generate a function that when executed constructs and returns a copy of the Message, then send that. |
01:21 | <@ToxicFrog> | <ToxicFrog> However, this involves taking arbitrary code off the wire and running it, and while I can protect the host system and the server's internal state from alteration, I can't protect against, say, [[while true do end]]. |
01:21 | <@ToxicFrog> | <ToxicFrog> The alternative is writing my own format and parser. Again. |
01:25 | | AnnoDomini [~fark.off@Nightstar-29172.neoplus.adsl.tpnet.pl] has quit [Quit: Some people find sanity a little confining.] |
01:27 | < MyCatOwnz> | ToxicFrog: XML! XML! XML! XML! XML! |
01:27 | | * MyCatOwnz starts up a chant. |
01:27 | < MyCatOwnz> | So anyway. What is Spellcast3? |
01:27 | <@ToxicFrog> | NO. FUCKING. XML. |
01:27 | <@ToxicFrog> | I hate XML. |
01:27 | <@ToxicFrog> | I hate it with every fibre of my being. |
01:28 | < MyCatOwnz> | If it's not realtime and the bandwidth requirement is negligible, may as well make it, uh, pretty much anything you can write quickly. |
01:28 | < MyCatOwnz> | XML, LISP-blob, Lua table, CSV, plain-text. |
01:29 | <@ToxicFrog> | It's turn-based and the bandwidth requirement is negligible. |
01:30 | < MyCatOwnz> | At a guess, base the format off a chess board in postscript style. |
01:30 | <@ToxicFrog> | ...A /what/ |
01:30 | < MyCatOwnz> | Y'know how moves in chess are described when playing o'er the phone or when described in prose? |
01:30 | <@ToxicFrog> | And again the problem with using Lua tables is that the way you serialize and deserialize a table is generate a function that creates and returns a copy of the table when called. |
01:31 | < MyCatOwnz> | Convert that idea to postfix notation and run wi' it. ^_^ |
01:31 | <@ToxicFrog> | ... |
01:32 | <@ToxicFrog> | You are not making any sense. |
01:32 | < MyCatOwnz> | +4 -3 vector 0x00F3 unit move -> "make a vector (+4,-3) and move unit 0x00F3 to it." |
01:32 | <@ToxicFrog> | First of all, Spellcast is not that kind of game. |
01:32 | < MyCatOwnz> | Just imitate postscript, but change all the drawing commands to movements! |
01:33 | < MyCatOwnz> | Well, I did ask, but when you didn't answer I just started making crap up at random. |
01:33 | <@ToxicFrog> | You could have googled it, which will return the xspellcast page as the first result. |
01:33 | < MyCatOwnz> | I hadn't bothered because I assumed Googling "spellcast" would get me a bunch of D&D fansites. |
01:34 | < MyCatOwnz> | wxSpellCast, right? |
01:34 | <@ToxicFrog> | No. |
01:34 | <@ToxicFrog> | That's a still-incomplete re-implementation. |
01:35 | < MyCatOwnz> | Well, "spellcast3" gave me a pile of D&D fansites and "xspellcast" gave me the wxSpellCast freshmeat page. |
01:35 | <@ToxicFrog> | "spellcast" |
01:35 | <@ToxicFrog> | spellcast3 is the working name for this implementation of it. |
01:35 | <@Vornicus> | throwing around code in sockets is a recipe for disaster unless you're working in something like Java where you can certify it. |
01:35 | <@ToxicFrog> | ANYWAYS. |
01:36 | <@Vornicus> | and if you're looking at RMI you're probably want to use an established protocol for it. |
01:36 | <@ToxicFrog> | The point here is that I wish to avoid having to write a parser for a custom serialization language as I have done twice before. |
01:36 | <@Vornicus> | like, say, CORBA |
01:36 | <@ToxicFrog> | Lua tables /would/ be ideal for this if I could verify the code coming over the wire, but I can't think of how to do so. |
01:37 | < MyCatOwnz> | ToxicFrog: you couldn't do something silly like a lex/yacc grammar, could you? |
01:37 | <@Vornicus> | Or you could, like, build it on top of IRC |
01:37 | <@ToxicFrog> | As in, use the IRC standards for field delimiting and the like? |
01:38 | < MyCatOwnz> | Yeah, but bundling an IRCD for use as a gameserver sounds a little suicidal. |
01:38 | <@Vornicus> | As a forinstance, yes |
01:38 | < MyCatOwnz> | And making the game use ordinary internet IRCDs sounds antisocial in the extreme. |
01:38 | | * ToxicFrog thwaps MCO |
01:38 | <@ToxicFrog> | You know full well that's not what's being said. |
01:39 | <@ToxicFrog> | Anyways. Yes, spellcast2 used something similar and that' |
01:39 | <@ToxicFrog> | s what I'll use here if I can't devise a better way. |
01:40 | < MyCatOwnz> | ...WTF? How come the RFC for IP has a higher number than that for UDP? |
01:41 | < MyCatOwnz> | Aren't those numbers handed out sequentially? |
01:41 | <@Vornicus> | ...hey, Sam is a Cthulhu. |
01:42 | | Stephenie [Safyra@Nightstar-25904.ok.ok.cox.net] has joined #code |
01:43 | < MyCatOwnz> | ToxicFrog: so, what, you pass gamedata using a slightly trimmed down version of RFC1459? |
01:43 | <@ToxicFrog> | Sort of. It's inspired by 1459, not based on it. |
01:43 | < MyCatOwnz> | Hallo Stephenie. |
01:43 | < MyCatOwnz> | I can see why that'd be practical, but what leg-up does it give you over any other method? |
01:44 | < MyCatOwnz> | Unless you're used to writing software with IRC support, I guess... |
01:44 | <@ToxicFrog> | Ok, first of all, as I said, it's not 1459. |
01:45 | < MyCatOwnz> | Mmmmmyes... |
01:45 | <@ToxicFrog> | It's a simple format, using ^A to delimit fields and ^B to delimit structures. The first field is a message name that tells the program what parsing routing should be invoked. |
01:45 | < MyCatOwnz> | It's the delimiting and so on you're pinching, right? |
01:45 | <@ToxicFrog> | As I said, it is inspired by 1459 (and by the CTCP sped) |
01:46 | < MyCatOwnz> | Oh. Sounds like it has absolutely nothing to do with 1459 and an awful lot to do with the CTCP spec. :/ |
01:46 | <@ToxicFrog> | As for advantages...compared to what? |
01:47 | <@Vornicus> | Fortunately this isn't a realtime game. |
01:47 | < MyCatOwnz> | Anything else. Serialising/deserialising into plaintext or some notation similar to, say, the command notation used in HTTP. |
01:48 | <@ToxicFrog> | No advantages, but no disadvantages eaither. |
01:48 | < MyCatOwnz> | Works. |
01:48 | < MyCatOwnz> | Damn good reasonin'. |
01:48 | <@ToxicFrog> | However, it's inflexible and inelegant. |
01:50 | < MyCatOwnz> | Well... what if you write a spec-as-code for something flexible (elegance aside) in some easy to understand language? |
01:50 | < MyCatOwnz> | Thinking of how the official Smalltalk spec is apparently supposed to be supplemented (or even *is*, I'm not sure) a tiny golfball of Smalltalk code. |
01:51 | <@ToxicFrog> | I do plan to do something like that. An extension of the spellcast2 protocol that uses key-value pairs. This is still a pain when dealing with nested tables and the like, though. |
01:52 | < MyCatOwnz> | Come up with something that can be implemented in too few lines of code to get it wrong using some arbitrary language. Dump that code golfball in the documentation and pretty much say, "That code is the spec. Unless we find bugs in it, all other code must parse things identically to that code." |
01:52 | < MyCatOwnz> | ...is that even practical? I'm not speaking from experience, not even close to it. |
01:53 | <@ToxicFrog> | If it comes to that, it may be better to rewrite the protocol to not require nested tables (or any tables) rather than attempt to write my own serialization format and parser for same. |
01:54 | <@ToxicFrog> | And no, it's not. You can't write code for this without knowing how the underlying data is/will be structured. |
01:54 | < MyCatOwnz> | Ah, k. OTOH, nesting is why I suggested lex/yacc. |
01:54 | <@ToxicFrog> | Hell no. |
01:54 | | Vornicus [~vorn@Nightstar-18307.slkc.qwest.net] has quit [Quit: ] |
01:54 | <@ToxicFrog> | That would be massive, massive overkill and would furthermore require me to bind the generated libraries to Lua. |
01:55 | < MyCatOwnz> | Not quite. I can think of an even screwier method to make it work in Unix. |
01:56 | < MyCatOwnz> | Use one yacc parser to transform some arbitrary spellcast3 wire format into lua tables and another to transform Lua tables to yonder arbitrary wire format. |
01:56 | <@ToxicFrog> | At any rate. I know full well how to serialize and deserialize these messages without using function generation. |
01:56 | <@ToxicFrog> | What I was hoping for was advice on verifying/validating generated functions so that I don't need to. |
01:56 | <@ToxicFrog> | And your suggestion is meaningless. |
01:56 | < MyCatOwnz> | Oh. |
01:56 | < MyCatOwnz> | Write a bunch of unit tests. |
01:57 | <@ToxicFrog> | ........ |
01:57 | < MyCatOwnz> | k. |
01:57 | <@ToxicFrog> | You appear to have fundamentally misunderstood what is going on here. |
01:57 | <@ToxicFrog> | I have a Lua table whih represents a message. |
01:57 | <@ToxicFrog> | This message must be sent through a TCP socket. |
01:58 | < MyCatOwnz> | Yes. Lua tables being plaintext, I fail to see the problem thus far. |
01:58 | <@ToxicFrog> | The obvious way to do this is to translate the table into text, and then back into a table. |
01:58 | <@ToxicFrog> | Lua tables are not plaintext. |
01:58 | <@ToxicFrog> | There are structures in memory. |
01:58 | <@ToxicFrog> | They can be represented in plaintext. |
01:59 | < MyCatOwnz> | They're trivially (de)serializable. As good as, for purposes of wire transmission and reception. But my bad, please continue. |
01:59 | <@ToxicFrog> | They're trivially deserializable, yes, given certain assumptions which I am currently trying to lay out. |
02:00 | <@ToxicFrog> | The logical way to serialize a table - which is not as trivial as you make out if you have to deal with things like nested recursive subtables - is to turn it into a Lua table declaration. |
02:00 | < MyCatOwnz> | Is the problem the possibility of an ambiguity in deserialization? |
02:00 | <@ToxicFrog> | This declaration is actually a function which, when executed, creates an exact copy of the table. |
02:01 | <@ToxicFrog> | Just listen, ok? There's no ambiguity. |
02:01 | < MyCatOwnz> | Or is it with the possibility of a corrupted (maliciously or otherwise) table being laid on the wire? |
02:01 | <@ToxicFrog> | This means, however, that you are reading and executing arbitrary program code from the network |
02:01 | < MyCatOwnz> | Eeep. |
02:01 | < MyCatOwnz> | So, number two. |
02:02 | <@ToxicFrog> | It is trivially easy to encapsulate the function in a sterile environment table that will prevent it from alterating either the host system or the program's internal state. |
02:02 | < MyCatOwnz> | The nontrivial part being? |
02:02 | <@ToxicFrog> | However, say that someone sends something like: |
02:03 | <@ToxicFrog> | while true do |
02:03 | <@ToxicFrog> | end |
02:03 | < MyCatOwnz> | Oh shit. |
02:03 | <@ToxicFrog> | Bam. The server just livelocked executing that. |
02:03 | < MyCatOwnz> | Paging Dr. Turing! We have a halting problem! |
02:05 | <@ToxicFrog> | This is...kind of like the halting problem, yes. |
02:05 | <@ToxicFrog> | Given a function, I need to be able to determine if it runs to completion in some sharply bounded amount of time, say eight seconds. |
02:05 | < MyCatOwnz> | So write a parser that understands enough Lua syntax to be able to tell the difference between, say, the word "while" quoted inside a string literal and the word "while" as an executable keyword. Then reject all messages that contain looping or branching constructs? |
02:06 | <@ToxicFrog> | At this point it becomes easier to write a parser for a custom serialization format. |
02:07 | < MyCatOwnz> | k. Can you interrogate the machine to see how much CPU time (rather than real time) a given thread has recieved thus far in Lua? |
02:08 | <@ToxicFrog> | Lua doesn't have preemptive threads, only cooperative ones. |
02:08 | <@ToxicFrog> | Although through my will it will soon have preemptive ones. |
02:08 | < MyCatOwnz> | If possible, just write a kludge that rejects whole messages if the thread parsing them survives for more than, say, 200 milliseconds of CPU time... |
02:08 | < MyCatOwnz> | Ah, damn. |
02:09 | <@ToxicFrog> | This is in fact what I have been pondering. Parse messages in a seperate thread; if it takes too long, reject the message and kill the thread by force. |
02:09 | < MyCatOwnz> | It's bloody ugly though. |
02:10 | <@ToxicFrog> | Yeah. |
02:10 | < MyCatOwnz> | And doesn't deal with scheduling concerns: what if someone tries to hammer a box by repeatedly submitting neverending loops (possibly even ones with memory leaks). |
02:10 | <@ToxicFrog> | Lua can't leak memory. |
02:10 | < MyCatOwnz> | Suuuuuuuure it can't. Well, the restricted tables are probably safe, at least. |
02:11 | < MyCatOwnz> | Thing is, if an attacker keeps submitting functions faster than the rejection threshold, the machine will get its CPU tied up and its sysadmin pissed off. |
02:11 | <@ToxicFrog> | Ok, let me rephrase. |
02:11 | < MyCatOwnz> | Whereas if you make the threshold really low, it's possible to overrun it entirely without actually dedicating any CPU time to it (the wonders of scheduling). |
02:12 | <@ToxicFrog> | Barring horrific bugs in the interpreter's garbage collector, Lua cannot leak memory |
02:12 | < MyCatOwnz> | ToxicFrog: frighteningly long-lived references? |
02:12 | <@ToxicFrog> | That's not a memory leak, because it's still referred to. |
02:12 | < MyCatOwnz> | ToxicFrog: recursive loops that create massive nested tables o' junk? |
02:12 | <@ToxicFrog> | As soon as the table is no longer used, it ceases to be. |
02:13 | <@ToxicFrog> | What you are describing are not memory leaks. |
02:13 | <@ToxicFrog> | They are memory consumption attacks. |
02:13 | <@ToxicFrog> | Furthermore, since we are talking about thread-based parsing - when the parser thread is destroyed, all memory allocated by it is freed. |
02:14 | < MyCatOwnz> | 'Tis a bloody good way to set the thing's swapfile going, though. |
02:14 | <@ToxicFrog> | If you can use up enough memory to hit swap in 200ms of CPU time... |
02:14 | <@ToxicFrog> | Besides which, there's an easy defence against repetition. |
02:15 | <@ToxicFrog> | If a client repeatedly sends you bad messages, it gets dropped. |
02:15 | < MyCatOwnz> | Ooooh? |
02:15 | < MyCatOwnz> | Ahhh. |
02:15 | < MyCatOwnz> | Simple but effective. |
02:15 | < MyCatOwnz> | This sounds like it'd be safer and less effort to design a wire protocol. |
02:16 | <@ToxicFrog> | Quite possibly. |
02:16 | <@ToxicFrog> | Especially since I am not entirely sure that it is within my power to remote-kill individual threads. |
02:16 | < MyCatOwnz> | And since you're already doing *that*, you might as well use something resembling *ptooie!* XML, since that handles nesting pretty much perfectly. |
02:17 | < MyCatOwnz> | ToxicFrog: I had wondered about that, what with the cooperative threading model and all. |
02:17 | <@ToxicFrog> | pthread_kill allows one to /signal/ a thread, but uncaught signals will terminate the entire program. |
02:17 | < MyCatOwnz> | (You did say it was cooperative, right? That oughta mean you can't touch it until it yields, unless I've failed to understand something fucking else. >=/) |
02:18 | < MyCatOwnz> | What, pthread? The Heck is pthread? Not POSIX threads, surely? |
02:18 | <@ToxicFrog> | My best bet would probably be to install a signal handler in libsurtr itself, and use pthread_kill and have the signal handler destroy the lua_State associated with that thread- if such a thing can be done safely after what is effectively a longjmp(). |
02:18 | <@ToxicFrog> | Yes, POSIX threads. Libsurtr is built on top of them, although it uses a drastically different model. |
02:19 | < MyCatOwnz> | Doesn't sound kludgy at all. Nope, nosirreee. |
02:19 | <@ToxicFrog> | And yes, Lua threads are cooperative, and yes, this means what you think it does. |
02:19 | <@ToxicFrog> | However, as I said, I am in the process of giving Lua preemptive multithreading. |
02:19 | <@ToxicFrog> | Indeed, I have already succeeded at a beta version. |
02:19 | <@ToxicFrog> | Without modifying the interpreter, either. |
02:19 | | * MyCatOwnz wasn't being sarcy, since the pthreads model is explicitly *designed* to support entirely different threading models on top of itself. Srsly, it's in the design brief or some crazy stuff like that. ^_^ |
02:20 | <@ToxicFrog> | In specific, it's synchronous send-recieve-reply with limited support for asynchronous ITC. |
02:20 | <@ToxicFrog> | Modeled after SGOS threads, which in turn are based on Thoth threads. |
02:20 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has joined #Code |
02:21 | <@ToxicFrog> | Individual threads can communicate only using the ITC functions, which neatly disguises the fact that underneath, they are in fact running on different VMs. |
02:22 | < MyCatOwnz> | Which actually translates to, "I've been working with various threading models for years now, some of which I've loved and some of which I've hated. I've tried to make this as close as possible to what appears to be the easiest possible model, according to my experiences." ? |
02:22 | < MyCatOwnz> | *experience |
02:22 | <@ToxicFrog> | Hardly. |
02:22 | < MyCatOwnz> | What, you've never hated a threading model? |
02:23 | <@ToxicFrog> | First of all, the only threading models I've worked with extensively are pthreads and sgosthreads - coordination structures/shared memory and send-recieve-reply respectively. |
02:23 | < MyCatOwnz> | Ah, fair 'nuff. |
02:23 | <@ToxicFrog> | I hate neither of them, and they each have their own strengths and weaknesses, although I'm more comfortable with SGOSthreads. |
02:23 | < MyCatOwnz> | Makes sense. |
02:23 | <@ToxicFrog> | However, I chose SGOSthreads not because it's easier to use than pthreads, but because it maps much more naturally onto Lua. |
02:24 | <@ToxicFrog> | Mapping pthreads directly into Lua would have either been very unsafe, or required serious terp hacking, or required some performance-crippling and rather ugly behind-the-scenes hacks. |
02:25 | | * MyCatOwnz nods. |
02:25 | < MyCatOwnz> | Not to mention that it's a Hell of a lot less intuitive than send-recieve-reply. |
02:25 | < MyCatOwnz> | POSIX threads takes some training to get used to. >< |
02:26 | <@ToxicFrog> | Using SGOSthreads it all fits together naturally. One thread == one VM. Threads communicate by passing Lua data structures back and forth, which is actually, underneath, libsurtr serializing and deserializing them into shared memory with appropriate locking constructs. |
02:26 | <@ToxicFrog> | Really? I didn't have any problem with them. |
02:26 | < MyCatOwnz> | ToxicFrog: what did you read to pick the model up? |
02:27 | <@ToxicFrog> | Umm. pthreads(7), pthread_create(3), most of the other associated man pages. |
02:27 | <@ToxicFrog> | There may also have been something on pthreads in TUPE, let me check. |
02:28 | < MyCatOwnz> | I'm currently reading a book called "Programming with POSIX Threads" by some bloke called David Butenhof. Either the writer gave up on bothering to explain things properly or even at the very least tersely about halfway through, or I'm having difficulty with condition variables. |
02:28 | <@ToxicFrog> | Nope, not in TUPE. |
02:28 | < MyCatOwnz> | And yes, I'm tempted to throw it out of the window and stick to the NTPL man pages, now that you mention it. |
02:29 | <@ToxicFrog> | Condition variables are kind of nasty, really. |
02:29 | <@ToxicFrog> | I mean, in theory, they're quite simple and elegant: |
02:29 | < MyCatOwnz> | ToxicFrog: the writer also seems to have given up at that point, which doesn't help. |
02:29 | <@ToxicFrog> | - create a condition variable |
02:29 | <@ToxicFrog> | - threads can choose to "wait" on this variable, which will cause them to block |
02:30 | <@ToxicFrog> | - threads can also "signal" or "broadcast" on the variable, which will unblock one or all of the threads blocked on it respectively |
02:30 | < MyCatOwnz> | He spends a lot of time setting up elaborate, detailed and relevant models and metaphorical examples, then suddenly stops bothering to even reference them except for the occasional cartoon in the margin. |
02:30 | <@ToxicFrog> | So you can, say, use it to set up a worker pool. |
02:30 | <@ToxicFrog> | Have a bunch of worker threads, they all block on the condition variable. |
02:30 | < MyCatOwnz> | ToxicFrog: handy. Some day I shall write an httpd on that principle. |
02:30 | <@ToxicFrog> | When you need a worker, you pthread_cond_signal() the condition variable and off goes one of the threads. |
02:31 | < MyCatOwnz> | I see. And signal the variable for one client request, or broadcast to it when you want to set the whole lot off at once for some crazy reason. |
02:31 | <@ToxicFrog> | SGOS uses a similar design - for each subsystem, one admin thread and many worker threads - except that here, blocking and resuming worker threads happens automatically as part of SRR. |
02:31 | <@ToxicFrog> | Yeah. |
02:31 | <@ToxicFrog> | So, that's the theory. |
02:31 | <@ToxicFrog> | In practice, however, condition variables are not quite so elegant. |
02:32 | <@ToxicFrog> | In particular, it is possible for threads blocked on a condition variable to be woken up even if it wasn't signaled or broadcast. |
02:32 | < MyCatOwnz> | NUMA FTW, indeed. |
02:32 | <@ToxicFrog> | Which is where the associated mutex comes into play. |
02:32 | <@ToxicFrog> | NUMA? |
02:32 | < MyCatOwnz> | Nonuniform memory access. |
02:33 | <@ToxicFrog> | Anyways. The solution is kind of manky. |
02:33 | <@ToxicFrog> | You have a mutex. You lock this mutex before calling pthread_cond_wait(), which atomically unlocks the mutex and then blocks on the condition variable. |
02:33 | < MyCatOwnz> | Or, I should say, "SMP, NUMA and all that jazz," since it's their practical considerations that make the occasional accidental wakeup a common tradeoff for speed. |
02:33 | <@ToxicFrog> | When pthread_cond_wait() returns, it atomically relocks the mutex. |
02:34 | <@ToxicFrog> | So, what you do is, when it returns, you check the actual condition that should have caused a wakeup. |
02:34 | < MyCatOwnz> | And when you pthread_cond_broadcast() to it? Which thread gets the lock then? |
02:34 | <@ToxicFrog> | All of them, one at a time. |
02:34 | < MyCatOwnz> | Or do they all get it in turn, as each one in turn unlocks it? |
02:34 | <@ToxicFrog> | That is to say, the kernel picks one, which gets the mutex. |
02:34 | <@ToxicFrog> | When that one unlocks it, the next one gets it. |
02:34 | <@ToxicFrog> | Etc. |
02:34 | < MyCatOwnz> | Makes sense. |
02:34 | <@ToxicFrog> | Yes. |
02:35 | <@ToxicFrog> | And this is so that if, say, two threads get awoken at the same time, you don't have a race condition as they all scramble to look at and possibly modify the reason for their awakening. |
02:35 | < MyCatOwnz> | Hmmm. Perhaps all it took was conversing about the subject with a wise and experienced master of the subject material at twenty five to three o'clock in the morning. |
02:35 | < MyCatOwnz> | (Thanks, BTW. =D) |
02:36 | <@ToxicFrog> | This is largely a non-issue in SRR and someday I shall implement SRR on top of pthreads for use in C as well as in Lua. |
02:37 | < MyCatOwnz> | ToxicFrog: yeah... isn't pthreads designed to be deliberately minimal so that it's efficient enough that you can harmlessly build other threading models on top of it? |
02:37 | < MyCatOwnz> | I do believe I remember reading that somewhere, but can't remember where. |
02:38 | <@ToxicFrog> | I do not remember ever reading this, but it is possible. |
02:38 | < MyCatOwnz> | Which is apparently the rationale for why they do no sanity checks whatsoever. |
02:39 | <@ToxicFrog> | I'm not sure I would call pthreads minimal, especially when man -k pthread returns 103 man pages, but I can't offhand think of anything in it that could be feasibly implemented in terms of the rest of it, so... |
02:41 | <@ToxicFrog> | Still, compared to SRR...I mean, you have three ITC functions, four if you want async as well, and a few bookkeeping functions and that's pretty much all you need. |
02:45 | | * ToxicFrog rocks out to .hack//SIGN - Aura while fiddling with spellcast's netcode |
02:45 | < MyCatOwnz> | I wasn't thinking of the complexity of the API so much as the CPU burn for each call. |
02:46 | <@ToxicFrog> | Aah. |
02:46 | <@ToxicFrog> | In that case, yes, possibly. |
02:46 | < MyCatOwnz> | I mean, if one SRR call achieves a result that'd take, say, ten or fifteen pthread calls to complete... |
02:46 | <@ToxicFrog> | Quite. |
02:47 | <@ToxicFrog> | Although SRR is much more efficient when one implements it at the kernel level. |
02:47 | <@ToxicFrog> | Rather than on top of another, radically different threading model. |
02:47 | < MyCatOwnz> | (Like how open,read,write and close are actually the most complicated calls in any Unix system, despite having the single simplest API) |
02:47 | <@ToxicFrog> | (I would have thought fork() would be more complicated) |
02:48 | < MyCatOwnz> | You kidding me? fork() never has to interact with network code ^_^ |
02:48 | <@ToxicFrog> | (although I haven't read the source) |
02:48 | < MyCatOwnz> | Or any device drivers whatsoever ever under any circumstances, nor filesystem drivers... |
02:48 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has quit [Quit: run away! run away!] |
02:48 | <@ToxicFrog> | Yes, but in that case the /driver/ handles it all /underneath/ open. |
02:49 | <@ToxicFrog> | open() doesn't need to know anything about it. |
02:49 | <@ToxicFrog> | And open() doesn't even interact with network code at any level, although close() does. |
02:49 | < MyCatOwnz> | Where else can you abstract to once you've already hit the open(2) kernel API? |
02:50 | <@ToxicFrog> | The filesystem driver. |
02:50 | <@ToxicFrog> | open()'s job is to get an internal structure representing an open file from the filesystem driver and return an int that can be used to retrieve it for other operations, or die in the attempt. |
02:51 | < MyCatOwnz> | Point. I was just thinking of the fact that Torvalds described the open() call as being the most difficult to write into Linux (when it was metamorphasizing from a terminal emulator into something else) because it needed the whole filesystem and disk driving layer to be written from scratch. |
02:51 | <@ToxicFrog> | However, the filesystem driver handles actually turning a pathname into a file descriptor, which could be very complex or very simple depending on the filesystem in question. |
02:51 | < MyCatOwnz> | Heheheheheh. |
02:51 | <@ToxicFrog> | And Linux was never a terminal emulator. It started out as a kernel. |
02:51 | < MyCatOwnz> | Having read "Just for Fun" (with Linus' name on the authors list), I respectfully disagree. |
02:52 | <@ToxicFrog> | IIRC, it /started out/ with a context switcher. |
02:52 | < MyCatOwnz> | It was a terminal emulator at one particular point before he even began calling it "Linux" |
02:52 | <@ToxicFrog> | This was followed with a terminal driver, which != a terminal emulator. |
02:53 | < MyCatOwnz> | I reserve the right to call it a terminal emulator 'cuz a 386 is whale guts compared to a VT100. |
02:54 | <@ToxicFrog> | It is, but that doesn't make Linux a terminal emulator any more than bash is. |
02:58 | < MyCatOwnz> | Okay, this makes no sense. So at the first point of actual functionality it emulates a vt100 on a 386, interfacing to a grand total of one RS-232 port, one screen and one keyboard (presumably both via the BIOS soft interrupts). It context switches between exactly two threads, one for reading from the modem to the screen and one for writing from the keyboard to the local echo (assuming there was one) and the modem. |
02:58 | < MyCatOwnz> | So, aside from the fact that it's running on bare metal, please explain the dissimilarity with a terminal emulator? |
03:10 | | MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Quit: Sleepin'. G'ni!] |
03:26 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
03:26 | | mode/#code [+o Chalcy] by ChanServ |
03:28 | | ChalcyNap [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
03:53 | | Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
03:54 | < Janus> | Good Lord, it actually ran... |
03:56 | <@McMartin> | I recall Linus describing Linux as "My terminal emulator grew legs". Whether the terminal emulator counts as a version of "Linux" or not is an open question. |
03:58 | < Takyoji> | heh |
03:58 | < Takyoji> | anyway. |
03:59 | < Takyoji> | Do you think putting Linux on a junky computer would be a good decision? |
03:59 | < Takyoji> | or ubuntu or something? |
04:04 | | Takyoji is now known as Takyoji[work] |
04:05 | <@McMartin> | Probably will run better than XP, especiall y if you don't use a massive bloated desktop environment |
04:05 | < Takyoji[work]> | ahh |
04:05 | < Takyoji[work]> | Because I've already downloaded the CD image for the imstallation disc of ubuntu |
04:09 | <@McMartin> | Sounds good. |
04:09 | <@McMartin> | There shuold be a couple of optiosn for desktop environment. |
04:09 | <@McMartin> | I forget off hand the name of it, but KDE and GNOME are Large (tm), but there's a smaller one. |
04:11 | | Vornicus-Latens is now known as Vornicus |
04:11 | < Vornicus> | There's WindowMaker |
04:12 | | Vornicus is now known as NSGuest-266 |
04:12 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has quit [Ping Timeout] |
04:12 | <@McMartin> | VornIt's some four-letter acronym on Fedora. |
04:14 | | NSGuest-266 is now known as Vornicus |
04:15 | < Janus> | I'll admit, Visual Studio is pretty nice when it's not killing my cat. |
04:17 | <@McMartin> | > FEAST ON KITTEN HEARTS |
04:19 | < Takyoji[work]> | I'm afraid of programming now.. because it kills animals! |
04:19 | | * Takyoji[work] sobs |
04:20 | < Takyoji[work]> | Anyway, I'm getting close to done on my PHP/MySQL e-commerce application |
04:21 | < Janus> | Error9310: "../Kitten" not found, executing "../Puppy" instead. |
04:21 | < Takyoji[work]> | xD |
04:22 | | * Stephenie blinks and saves all the kittens and puppies |
04:22 | <@McMartin> | http://kittenbreak.com |
04:22 | < Janus> | What're we supposed to toss in the furnace now? |
04:23 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has joined #code |
04:23 | < Janus> | Aww! I'd buy coal for that snuckie~ |
04:24 | < Stephenie> | thats such a cute kittie |
04:24 | <@McMartin> | The main site is a random kitten, of course. |
04:24 | < Stephenie> | Janus toss your extremities into the furnace :) |
04:25 | < Vornicus> | http://kittenauth.com/ <--- more on-topic |
04:27 | < Stephenie> | Unable to connect to database server |
04:27 | < Janus> | My username is Dru? |
04:27 | < Stephenie> | hey me to ;) |
04:28 | < Stephenie> | And Janus I was only kidding about the extremities |
04:28 | < Janus> | Now you tell me. |
04:28 | <@McMartin> | (he says, now reduced to typing with his nose) |
04:29 | | * Janus waves a stub at Stephanie menacingly. |
04:29 | | * Stephenie coughs "StephEnie" lol |
04:29 | < Janus> | Bless you. |
04:29 | < Stephenie> | Thank you :) |
04:35 | | Chalcy is now known as Chalcedon |
04:40 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
04:40 | | mode/#code [+o Chalcy] by ChanServ |
04:41 | | Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
04:44 | | Chalcy is now known as ChalcyOut |
04:45 | < Takyoji[work]> | ;O |
04:45 | < Takyoji[work]> | "Unable to connect to database server" on kittenauth.com |
04:45 | < Takyoji[work]> | *gasp* |
04:46 | < Takyoji[work]> | Interesting error screen though |
04:50 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
04:50 | | mode/#code [+o Chalcy] by ChanServ |
04:51 | <@McMartin> | KITTENZ0R3D |
04:51 | | ChalcyOut [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
05:02 | < Reiver> | |
05:15 | | Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: !hiatus%] |
06:27 | | Safyra_Away [Safyra@Nightstar-25904.ok.ok.cox.net] has joined #code |
06:28 | | Stephenie [Safyra@Nightstar-25904.ok.ok.cox.net] has quit [Operation timed out] |
06:44 | | Reiver is now known as ReivOut |
06:46 | | Safyra_Away is now known as Stephenie |
06:54 | | TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
06:56 | | Takyoji[work] [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Ping Timeout] |
06:59 | | ReivOut is now known as Reiver |
07:08 | | TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Quit: Leaving] |
07:24 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
07:40 | | Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
07:40 | | mode/#code [+o Chalcedon] by ChanServ |
07:47 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
07:47 | | mode/#code [+o Chalcy] by ChanServ |
07:48 | | Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
07:53 | | Chalcy is now known as Chalcedon |
08:33 | | Chalcedon is now known as ChalcyMovie |
08:36 | | You're now known as TheWatcher |
08:47 | | Ev3 [~-@87.72.36.ns-26407] has quit [Quit: Don't try to read the quit message, that is impossible. Instead only realize the thruth; "there is no quit message" and you will see it is not you who read the quit message but the quit message who reads you.] |
08:51 | | Vornicus is now known as Vornicus-Latens |
09:04 | | ChalcyMovie is now known as ChalcyZzz |
09:15 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has joined #Code |
09:20 | | AnnoDomini [~fark.off@Nightstar-29172.neoplus.adsl.tpnet.pl] has joined #Code |
09:38 | | MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has joined #code |
09:54 | | Thaqui [~Thaqui@124.197.36.ns-12825] has quit [Client exited] |
09:58 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has quit [Ping Timeout] |
10:06 | | Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
10:06 | | mode/#code [+o Chalcedon] by ChanServ |
10:07 | | ChalcyZzz [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
10:24 | | MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Quit: Argh!] |
10:25 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has joined #Code |
11:22 | | timelady [~romana@Nightstar-15011.lns7.adl2.internode.on.net] has quit [Quit: run away! run away!] |
11:43 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has quit [Operation timed out] |
11:45 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has joined #code |
11:45 | | mode/#code [+o ToxicFrog] by ChanServ |
11:48 | | Ev3 [~-@87.72.36.ns-26407] has joined #Code |
12:47 | | AnnoDomini [~fark.off@Nightstar-29172.neoplus.adsl.tpnet.pl] has quit [Ping Timeout] |
12:49 | | Reiver is now known as ReivZzz |
12:54 | | AnnoDomini [~fark.off@Nightstar-29088.neoplus.adsl.tpnet.pl] has joined #Code |
13:47 | | Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code |
13:47 | | mode/#code [+o Chalcy] by ChanServ |
13:48 | | Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout] |
16:33 | | Ev3 [~-@87.72.36.ns-26407] has quit [Quit: Don't try to read the quit message, that is impossible. Instead only realize the thruth; "there is no quit message" and you will see it is not you who read the quit message but the quit message who reads you.] |
16:52 | | MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has joined #code |
17:03 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has quit [Ping Timeout] |
17:13 | | Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
17:14 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has joined #code |
17:22 | | You're now known as TheWatcher[afk] |
17:33 | | Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code |
17:54 | < Janus> | This is going to sound strange... but if a shape is fairly mathematical, would it be easy to create in OpenGL? |
17:55 | | Vornicus [~vorn@Nightstar-18307.slkc.qwest.net] has joined #code |
17:55 | | mode/#code [+o Vornicus] by ChanServ |
17:55 | < MyCatOwnz> | Janus: you mean a parametric surface? |
17:55 | < GeoTube> | Janus, ust try to make a mathematical knot using just an algorithm and OpenGL. |
17:55 | < GeoTube> | *just |
17:57 | <@ToxicFrog> | MCO: I think that's what he means, yes. Who here has OGL-fu? |
17:57 | <@ToxicFrog> | I know you can do that sort of thing easily in POV-ray, at least~ |
17:57 | < Janus> | Umm... I'm not quite sure what a Parametric Surface is... and, by my knowledge, OpenGL has to work on a per-polygon basis, which may be hard when the only thing to go on is numbers. |
17:57 | | * Vornicus has minor opengl-fu, but not very good memory |
17:58 | <@ToxicFrog> | Janus: you specify a mathematical function, and a surface is generated by plotting the function. |
17:58 | < MyCatOwnz> | Janus: TF is right. If all you need to do is render a still image, use a raytracer, as they support parametric surfaces quite nicely and easily. |
17:58 | <@Vornicus> | THere is a way to specify a bilinear/bicubic/biwhatever patch and tell it to plot points on that patch |
17:58 | | * GeoTube wonders what the hell everyone is talking about.. and looks up string theory |
17:58 | <@ToxicFrog> | Janus: what kind of shape are you talking about, anyways? |
17:58 | < Janus> | I'd want it to be able to some around said object as well, and, it's kind of a funny shape I'm going for... |
17:58 | <@ToxicFrog> | GeoTube: you aren't helping. |
17:59 | < GeoTube> | I'm not, not helping either. |
17:59 | <@Vornicus> | sigh |
17:59 | <@ToxicFrog> | Janus: 2d, 3d with static view, 3d model? |
17:59 | | mode/#code [+b *!*@Nightstar-2556.cable.ubr01.dund.blueyonder.co.uk] by Vornicus |
17:59 | | GeoTube was kicked from #code by Vornicus [Go 'way] |
17:59 | | mode/#code [+oooooo AnnoDomini EvilSchemingLord Janus MyCatOwnz ReivZzz Stephenie] by ToxicFrog |
17:59 | <@Janus> | It's like a -- something I'll have to draw in photobucket-kind-of-shape, and yes, it's a 3d model. |
17:59 | <@Vornicus> | I feel better now. |
17:59 | <@ToxicFrog> | Thank you, Vorn. |
18:00 | | mode/#code [+oo Takyoji Vornicus-Latens] by ToxicFrog |
18:00 | <@ToxicFrog> | Janus: "photobucket kind of shape"? |
18:00 | <@AnnoDomini> | Why are there two Vornicus'? |
18:00 | <@Vornicus> | I'm at work, and it's at home |
18:00 | <@AnnoDomini> | Ah. |
18:00 | <@Vornicus> | TF: a (something I'll have to draw in photobucket) kind of shape. |
18:00 | <@Vornicus> | It's, as it were, hard to describe. |
18:01 | <@ToxicFrog> | Aah. |
18:01 | <@ToxicFrog> | Janus: ok, wrong question. How is it going to be /used/? |
18:02 | <@MyCatOwnz> | Janus: are you after a single still image? An animation? Or do you want it rendered in real time? |
18:03 | <@Janus> | (Don't laugh~) I'm trying to make something to represent a thing of 4-Dimensional space. (It's just 3-D with alpha blending in it, really.) It's important for thing concept I want to add to Cerulean called the ChromaShpere. |
18:03 | <@Janus> | s/-thing |
18:04 | <@Vornicus> | Even if it is to be rendered in real-time, what you do is you create a function that takes two parameters U and V and spews a point |
18:04 | <@MyCatOwnz> | Yesh. Do you have a mathematical description of it? |
18:04 | <@Vornicus> | and then when you need a point on the surface, you call the function with the appropriate U and V. |
18:04 | <@ToxicFrog> | Janus: yes, but that doesn't tell us how you will /use/ it. |
18:05 | <@ToxicFrog> | As MCO said, do you need a single still image? Several stills? Real-time, arbitrary-angle viewing? |
18:05 | <@Vornicus> | Are we talking FF7 prerendered? |
18:05 | <@Janus> | Just imagine a big funny-looking hour-glass with dust floating inside of it. And... well, I'm assuming it can be made using an mathimatical expression because it looks so darn mathimatical. And it would be real-time, arbitrary angled viewing. |
18:05 | <@Vornicus> | If we're talking prerendered we shouldn't even be thinking about drawing it in real time, ray tracing gets better results. |
18:06 | <@Vornicus> | Aha |
18:06 | <@Vornicus> | Okay |
18:08 | <@MyCatOwnz> | Janus: could you provide a rough sketch of the shape you're after, please? |
18:08 | <@Vornicus> | So you're going to need, probably, a thing with very high alpha but also a lot of specular reflection. |
18:08 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has quit [Ping Timeout] |
18:08 | <@MyCatOwnz> | ...it's not a Klein bottle, by any chance, is it? |
18:08 | <@Janus> | I'm working on it~ |
18:08 | <@Vornicus> | ...is high alpha transparent, or is that low alpha? I always get it messed up |
18:09 | <@ToxicFrog> | Low alpha. |
18:09 | <@Vornicus> | oh, ok |
18:09 | <@Janus> | 0xFF is fully opaque, though they change it every so often; keeps you on your toes. |
18:09 | <@ToxicFrog> | It occurs to me, if OGL has some mechanism for easy loading and display of 3d models, that the easiest approach might be to generate it in PVO-ray and export to a polygon-quantized 3d model. |
18:09 | <@ToxicFrog> | Assuming POV-ray has that capability, which I'm not entirely sure of. |
18:10 | <@Vornicus> | OGL, as far as I know, doesn't come with it out of the box, and POV-Ray doesn't come with that out of the box either. |
18:11 | <@Vornicus> | ...well, see how glut draws a teapon |
18:11 | <@Vornicus> | teapot |
18:12 | <@MyCatOwnz> | Vornicus: that program is a for loop through a huge list of triangles' vertices, isn't it? |
18:12 | <@Vornicus> | Probably |
18:15 | <@ToxicFrog> | Eep, class is over. Bbiab. |
18:15 | <@Vornicus> | lasers |
18:15 | <@Vornicus> | ...er |
18:15 | <@Vornicus> | laters |
18:15 | <@ToxicFrog> | Pfft |
18:15 | <@MyCatOwnz> | Class is over? Eh? |
18:15 | <@Janus> | Alright, finished with the masterpiece~ |
18:16 | <@Janus> | http://img.photobucket.com/albums/v492/tai_ragnarok/Geometricthingy.jpg <-- like that, but better, and with more Dimensions. |
18:16 | | * MyCatOwnz whips up the pundits. |
18:16 | | EvilSchemingLord [althalas@Nightstar-17046.a80-186-184-83.elisa-laajakaista.fi] has joined #code |
18:16 | <@Takyoji> | ooo |
18:17 | <@Vornicus> | ...aah |
18:17 | <@MyCatOwnz> | Oh. You want two tetrahedrons, displayed vertices-only, sorta laid into each other? |
18:17 | <@Janus> | One of the circles is being hidden, but basically, it's like a cube died and it's skeleten is left. |
18:18 | <@MyCatOwnz> | Ahhh, I see! Yes, that makes sense. |
18:19 | <@MyCatOwnz> | And at what rate do you wish to make that shape? Real-time or will a still image or a prerendered animation do? |
18:20 | <@MyCatOwnz> | Real-time will require OpenGL, indeed - you'll have to write a program to approximate that shape using triangles (difficult, very difficult). If you just want a still or an animation, you should be able to get it done in POVray easier than anything else. |
18:20 | | * Vornicus tries to figure out a decent approximation |
18:20 | <@Vornicus> | ...ah! |
18:20 | | * Vornicus finds it |
18:20 | <@Janus> | Real-time. It needs to be zoomed in on, around, and even viewed from the inside-out, as there's going to be dust-like things floating through it. |
18:21 | <@MyCatOwnz> | Janus: so you'll want to write a program that generates a set of triangles to approximate that shape, then another program that pumps that list of triangles directly to the video hardware. |
18:22 | <@MyCatOwnz> | It appears that Vorn has just fallen naked out of his bathtub, so I'll leave him to do the hard bit =) |
18:22 | <@Janus> | It's a tall order, but I suppose it must be done. |
18:23 | <@Vornicus> | so a sphere is easy, generally, it's just a bunch of rectangles |
18:23 | | * Vornicus drawdrawdraws |
18:24 | <@Janus> | The spheres in the drawing ideally wouldn't be there, actually. (They were sort of a drawing aid; circles are a nightmare to draw freehanded.) |
18:24 | <@Vornicus> | ...okay I don't know what your shape looks like then |
18:26 | <@MyCatOwnz> | So it's like a partially-transparent goo, which bunches up around the vertexes of a cube and forms kinda tubules between them? |
18:28 | <@Janus> | http://img.photobucket.com/albums/v492/tai_ragnarok/Geometricthingy.jpg <-- modified it a tiny bit, but yes, it looks a bit like cubish goo. |
18:29 | <@Vornicus> | ah, it just, okay |
18:31 | <@Janus> | Sorry for any confusion I caused~ |
18:32 | <@Vornicus> | ok, tricky bits |
18:33 | <@MyCatOwnz> | Okay. The computer scientist in me says, be lazy, let the machine do all the work. Create a million free-moving dots and define a physical model where they're gravitationally attracted to each of the vertexes and also they undergo atmospheric friction. |
18:33 | <@MyCatOwnz> | That way you'll end up with a dot-density that looks *kinda* reminiscent of that, but needing some work to get the linkages in correctly. ^_^ |
18:38 | <@Janus> | Two things I think would be a problem, with the dust inside of the hour-glass, would be both determining how it would flow, and how it wouldn't escape the boundaries. I've never worked with collision-detection like that before, so it won't be boring at least. |
18:39 | <@Janus> | Actually... |
18:40 | <@Janus> | So long as the dust moves like it should, the shape itself isn't really anymore than eye-candy. |
18:41 | <@MyCatOwnz> | Hmmm. |
18:41 | <@Vornicus> | A possible solution is to just put the thing into a cube with particles flowing regularly through it - just, like, linearly, or perhaps add a gimbal to it so the direction kind of moves |
18:41 | <@Vornicus> | And then just clip the stuff that doesn't fall inside the object |
18:42 | <@Vornicus> | It doesn't look great, but it looks sane |
18:42 | <@MyCatOwnz> | Define a function V(x,y,z) to take a 3d coordinate (x,y,z) and return the sum of the distances between the point at those coordinates and each of the cube's vertexes. |
18:43 | <@MyCatOwnz> | Define a function V(x,y,z) to take a 3d coordinate (x,y,z) and return the sum of the distances between the point at those coordinates and each of the cube's *edges* (possibly harder?) |
18:43 | <@Vornicus> | ...gner |
18:43 | | * Vornicus fiddles |
18:43 | <@MyCatOwnz> | Er, call the second one something else. E, perhaps. |
18:43 | <@Vornicus> | You're going to want to prerender the surface |
18:43 | <@Takyoji> | You registered on Jan 19th |
18:43 | <@Takyoji> | Crap, wrong window |
18:43 | <@MyCatOwnz> | Then make up a function F(x,y,z) which returns E(x,y,z)+V(x,y,z). |
18:44 | <@Janus> | Cliping may not work, the none of the dust can stray. The player owns one of the particles as it would be implemented in the game. If it gets clipped out, ouch. |
18:44 | <@Janus> | *s/the/as |
18:44 | <@MyCatOwnz> | And plot a point at every set of (x,y,z) for which F is in a certain tight range, say, 0.013 to 0.0135 units. |
18:45 | <@MyCatOwnz> | That'd give you a set of points to play with, at the cost of a very large amount of computer time. |
18:46 | <@MyCatOwnz> | Then break the points into several distinct sets (one for each arm) and use a hull calculation algorithm to find which are the outermost points of each of the arms' surfaces. |
18:46 | <@MyCatOwnz> | Then generate a triangle list for each arm from those points. Hmmm. |
18:46 | | * Vornicus wonders if there's an attractor that looks like that |
18:47 | <@MyCatOwnz> | Sounds slow, difficult and ugly. Not to mention inelegant. |
18:48 | <@MyCatOwnz> | Vornicus: an attractor would be ideal, yes... |
18:48 | | You're now known as TheWatcher |
18:49 | | TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
18:50 | | Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Killed (NickServ (GHOST command used by TakyojiClone))] |
18:50 | | TakyojiClone is now known as Takyoji |
18:50 | <@Janus> | So long as the points are only generated once, it shouldn't be too bad. |
18:51 | <@Vornicus> | then you could just generate random particles with random speed, and they would just fall into the appropriate places |
18:52 | | * Vornicus fiddles |
18:52 | <@Vornicus> | ...god, I need a 3d physics simulator |
18:53 | <@MyCatOwnz> | Vornicus: ODE? |
18:53 | <@Janus> | Maya's pretty good at that, if you can find it. |
18:54 | <@Vornicus> | More along the lines of magnetics, but |
18:54 | < Takyoji> | or 3ds max |
18:54 | <@Janus> | ... how about conditional attractors? |
18:54 | < Takyoji> | hmm |
18:55 | < Takyoji> | I actually think it might |
18:55 | < Takyoji> | I'll check |
18:55 | | * Vornicus needs to be able to define a force field |
18:56 | | * Janus closes down everything but the IRC and Clock to get enough memory for Maya. |
19:00 | | Clairvoire [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code |
19:00 | < Takyoji> | hmm |
19:01 | < Takyoji> | It only has attractors for particle flow |
19:01 | < Clairvoire> | Greedy. |
19:01 | <@Vornicus> | What's greedy? |
19:01 | | * Clairvoire at least has a watch. |
19:01 | | Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Ping Timeout] |
19:02 | | Clairvoire is now known as Janus |
19:02 | <@Vornicus> | --we are /doing/ particle flow, so attractors are what we're looking at |
19:02 | < Takyoji> | oh |
19:02 | < Takyoji> | let me qualify that |
19:03 | | MyCatOwnz is now known as MyCatKeelhaulsMe |
19:04 | <@Vornicus> | arr. |
19:05 | < Janus> | Maya is a ram hog, rascally swine, and it doesn't have any magnetic fields, though you could probably mix some of the others create something like it. |
19:05 | | * Vornicus is trying to figure out an appropriate thing here, he may have something, he just needs more power! |
19:06 | | * Janus shines more sunlight |
19:06 | < Takyoji> | sorry |
19:06 | < Takyoji> | can't do so on 3ds max either |
19:06 | <@Vornicus> | ...well, what I /really/ need is the ability to render stuff |
19:07 | < Takyoji> | you'd have to know some physics and know how to program in MaxScript to do so |
19:07 | < Takyoji> | 3ds max, maya, blender, |
19:08 | < Takyoji> | blender - free, 3ds max - $1200, maya - $3000 |
19:08 | | * Janus is a felon~ |
19:08 | < Takyoji> | I dont really use blender much at all, but could give a shot at it |
19:08 | < Takyoji> | almost everyone is |
19:09 | <@Vornicus> | what i need is to be able to design the gravity field for a bar |
19:09 | <@Vornicus> | and then I can combine twelve of those fields to get all the edges, and then I have my attractor |
19:10 | < Takyoji> | hmm |
19:10 | <@ToxicFrog> | The attractor is an octahedron? |
19:10 | <@Vornicus> | Cube |
19:10 | <@Vornicus> | both have 12 edges |
19:11 | < Takyoji> | blender doesn't have any physics support of what I know, 3ds max has a pretty good physics system called 'reactor', and I haven't played with Maya' |
19:11 | <@ToxicFrog> | Yes, but the octahedron is made of 8 triangles and the cube of 12. |
19:11 | <@Vornicus> | right, but the object is a cube, and we're not worrying about the "faces" |
19:12 | <@Vornicus> | we're using the edges as gravitational objects |
19:13 | | * ToxicFrog works on a 30-page lab report |
19:14 | | Chalcy is now known as Chalcedon |
19:14 | <@Vornicus> | and if I had any real skill at physics I could throw together a gravity model for a long object. |
19:20 | | * Vornicus ponders the madness of actually using, say, ten point sources |
19:20 | <@Vornicus> | ...I need a tool that draws a 3-d line graph. My usual prototyper isn't cutting it |
19:22 | <@Vornicus> | (my usual prototyper, for the record, is Excel) |
19:40 | < Janus> | (reminds me when I'd make terrain maps with the plane map.) |
19:41 | <@Vornicus> | oh, yes. |
19:41 | | * Vornicus actually has around here somewhere a heightfield drawing thing that makes the world smooth. |
19:42 | <@Vornicus> | ...but it is /grindtastic/, taking five minutes to /parse/. THis is what you get when you try to do heavy math in, of all things, POV-Ray. |
19:45 | | EvilSchemingLord is now known as EvilDarkLord |
19:48 | < Janus> | The world wasn't smoothed in a day [/grsh] |
19:48 | | MyCatKeelhaulsMe is now known as MyCatOwnz |
19:49 | <@Vornicus> | mh, but I could do it in much less time if I knew opengl enough |
19:53 | < Janus> | Last time I used it was when I first got Dev-Cpp; made one green polygon that rotated around, it did. (iow, time to open the Red Book again.) |
20:01 | | Thaqui [~Thaqui@124.197.36.ns-12825] has joined #code |
20:01 | | * Vornicus had a handmade heightfield with gridlines and water, and was working on the control scheme |
20:05 | < Janus> | I wanna see~ |
20:05 | | * Vornicus hunts it down |
20:06 | <@Vornicus> | http://vorn.dyndns.org/~vorn/ottdgfx/ |
20:07 | <@Vornicus> | Sort by date modified for best viewing |
20:08 | <@Vornicus> | THe first few are all from POV-Ray |
20:10 | <@Vornicus> | wholemap2.jpg is the coup de grace - I had a full heightfield ganked from an OTTD game, with proper lighting. |
20:11 | <@Vornicus> | and my progress on the OpenGL one ended at light2.png. |
20:12 | <@Vornicus> | which had all the normals straight, and the lighting right. |
20:12 | <@Vornicus> | ...ah god that code is awful |
20:13 | < Janus> | That's one of the best isometric renderings I've ever seen. |
20:13 | <@Vornicus> | what, wholemap2, or light2? |
20:13 | < Janus> | Wholemap2. |
20:13 | <@Vornicus> | ah |
20:13 | <@Vornicus> | well, thank you |
20:14 | <@Vornicus> | Would you like to know how I did it? |
20:14 | < Janus> | Yes'sum. |
20:14 | <@Vornicus> | Really simple |
20:14 | <@Vornicus> | first, you do linear interpolation over the /cells/, getting the centers of edges and cells. |
20:15 | <@Vornicus> | THen, you take the nine points around each corner, and do biquadratic interpolation over that. |
20:15 | <@Vornicus> | ...Firefox needs an option to switch to a grab-hand when dealing with big images |
20:18 | | * Janus writes that down, something to try after he gets OpenGL to submit. |
20:21 | | * Vornicus ponders drawing something quick & dirty in POV to show why that works. |
20:21 | < Janus> | An isometric grid like that would be quite nice looking in Cerulean, especially when it's time to write a random terrain generator. |
20:22 | <@Vornicus> | Wholemap2.jpg actually uses the least possible detail. |
20:25 | <@Vornicus> | which is, imo, freakishly impressive |
20:25 | < Janus> | Really? Outside of the tiled water, it looks quite high resolutioned. |
20:25 | < Janus> | Aye. |
20:26 | <@Vornicus> | Each cell is made up of exactly eight triangles (note - the usual for heightfields is two) |
20:27 | < Janus> | Hmm... yeah, you can sort of see the upper and lower most triangles on some of the grades if you look close enough. |
20:28 | <@Vornicus> | Yes |
20:30 | <@Vornicus> | (also, the water is one gigantic polygon. SOmething higher performance is possible. |
20:32 | <@Vornicus> | But the thing that makes it look so smooth is that it changes the invariant from the altitude of the points to the slopes at the centers of the cells. |
20:34 | <@MyCatOwnz> | Vornicus: wholemap2 looks reminiscent of Transport Tycoon's terrain. |
20:35 | <@Vornicus> | MyCatOwnz: Try expanding the acronym OTTD |
20:36 | <@MyCatOwnz> | Vornicus: ah! I didn't know what that was from. You're adding OpenGL support to OpenTTD? |
20:36 | <@Vornicus> | No. |
20:36 | <@Vornicus> | THis is from many moons ago, back when I was in the community. |
20:36 | <@Vornicus> | And it was more "let's see what I can do" than "let's change the game" |
20:36 | | * MyCatOwnz nods. |
20:37 | <@Vornicus> | But then their IRC channel moved to a different network rather suddenly, and I didn't have the attention span to follow. |
20:38 | | * MyCatOwnz checks the backchat. |
20:38 | <@MyCatOwnz> | Ah, I see. |
20:43 | <@Vornicus> | So yes |
20:43 | <@MyCatOwnz> | Hrmn. |
20:43 | <@MyCatOwnz> | What about using POVray to generate realistic-looking TTD tiles? =) |
20:44 | | Ev3 [~-@87.72.36.ns-26407] has joined #Code |
20:44 | <@Vornicus> | THe folks over there had been using Blender |
20:44 | <@Vornicus> | The amount of stuff they had made was entirely absurd |
20:51 | <@ToxicFrog> | So, the digital systems simulation software is generating results that are physically impossible. |
20:53 | <@Vornicus> | ...hee |
20:56 | <@ToxicFrog> | We will set aside for the moment the fact that the outputs appear before the inputs are applied. |
20:57 | <@ToxicFrog> | The output from the 7-segment controller is 1000000b. |
20:57 | <@ToxicFrog> | There is no possible combination of inputs to it that will generate this output. None. |
20:57 | <@Vornicus> | ...weird |
20:58 | <@Vornicus> | 1000000b - the top line is on, everything else is off? |
21:00 | <@Vornicus> | also, scp is relaxingly easy to use. |
21:03 | <@ToxicFrog> | The middle line, I think. |
21:03 | <@Vornicus> | ah |
21:03 | <@ToxicFrog> | And yes, it is, although I prefer rsync. |
21:03 | <@ToxicFrog> | It deals with directories better. |
21:04 | | * MyCatOwnz is lazy enough not to have learned anything beyond tar ;) |
21:04 | <@ToxicFrog> | Tar doesn't do cross-machine copies. |
21:04 | <@ToxicFrog> | Which is the purpose of scp and rsync. |
21:06 | | * Vornicus <3 scp. |
21:13 | <@MyCatOwnz> | ToxicFrog: tar for the directories, sftp for the transfer. |
21:13 | <@MyCatOwnz> | ToxicFrog: sheer laziness for the inefficiency. |
21:13 | | TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
21:14 | < TakyojiClone> | Anyone know of a good all in one cellphone, pda, audio player? |
21:15 | < TakyojiClone> | With Windows Mobile or CE(or whatever its called) |
21:15 | | Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Ping Timeout] |
21:15 | | TakyojiClone is now known as Takyoji |
21:16 | < Takyoji> | My brother is looking for one |
21:17 | | * Vornicus has no idea |
21:18 | < Takyoji> | my brother found something like that, but without the audio player |
21:31 | | Vornicus [~vorn@Nightstar-18307.slkc.qwest.net] has quit [Quit: ] |
21:43 | < Janus> | Visual Studio tried to boil an egg in the microwave this time. |
22:03 | <@ToxicFrog> | Takyoji: no idea. Why does it have to be winCE based? |
22:04 | <@ToxicFrog> | A Sharp Zaurus will do all of that except the cellphone part, unless they've added cell capability since I last checked. |
22:04 | <@ToxicFrog> | (since it's basically a PDA-sized, fully-featured Linux system) |
22:05 | | TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code |
22:05 | <@MyCatOwnz> | ToxicFrog: oh no. |
22:06 | <@MyCatOwnz> | ToxicFrog: it's actually even better than that, because on the C3*00 series models, you can use OpenBSD, too =D |
22:06 | <@ToxicFrog> | Yeah, but you can use openBSD on anything, so I didn't think it worth mentioning~ |
22:07 | | Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Ping Timeout] |
22:09 | <@ToxicFrog> | Anyways. I don't offhand know of a cellphone-PDA combo other than the Sidekick II, which I know almost nothing about, and personally I consider such things a very bad idea in any case. |
22:14 | < Janus> | If I seen someone holding a PDA like a cellphone, I'd immediately think "Jackoff." (assuming they didn't have those headset things, in which case I would think "Hollywood Jackoff.") |
22:15 | < TakyojiClone> | ToxicFrog: I mean, basically anything with a decent OS |
22:15 | < TakyojiClone> | I was gone for a bit.. made something to eat |
22:16 | <@MyCatOwnz> | ToxicFrog: uh, it's NetBSD that's ported everywhere, not OpenBSD. |
22:16 | <@ToxicFrog> | MyCatOwnz: oh. Oops. |
22:17 | <@ToxicFrog> | I tend to get the different *BSDs mixed up. |
22:17 | <@MyCatOwnz> | OpenBSD has, like, i386/x64, SPARC, Alpha, PA-RISC, 68k and PPC. I think those are the only ones still supported officially. |
22:17 | <@ToxicFrog> | Janus: I just think it's a bad idea because (1) one device that does many things will, as a rule, do them worse than many devices that do one thing and (2) if you want to upgrade one component, you have to upgrade the entire thing |
22:18 | <@MyCatOwnz> | D'oh. They also do MIPS and a couple of miscellaneous ARM-ish ports. Plus... VAXen (!?!?) and something called LUNA. |
22:19 | <@MyCatOwnz> | ToxicFrog: which is a merely large quantity of supported hardware, rather than an obscene amount =) |
22:20 | <@MyCatOwnz> | ...I'm still buggered sideways by the concept that they still support VAXen. That's crazy. |
22:21 | <@ToxicFrog> | TakyojiClone: anyways. Zaurii are good, but none of them double as cell phones. Later models come with built in microphones and 802.11 so you could use them as VOIP clients, however. |
22:22 | < TakyojiClone> | hmm |
22:23 | < Janus> | What would the PDA be used for, anywho? |
22:23 | <@MyCatOwnz> | Pity Linux on Palm has virtually no support for any of the hardware. |
22:23 | < TakyojiClone> | Scheduling, cell phone, |
22:23 | <@MyCatOwnz> | (Apparently most of it boots multiuser quite happily, but not much of it has, say, framebuffers for the screen or support for the styluses.) |
22:24 | < TakyojiClone> | and a few others |
22:24 | | * Janus thinks a black book and a Chocolate Phone looks far more smexy a substitute if there's no computations to be done on it. |
22:25 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has quit [Ping Timeout] |
22:25 | <@MyCatOwnz> | Janus: the advantage of, say, a Zaurus, is that you have access to various spreadsheeting tools (thing "Gnumeric", not "OpenOffice"), a laarrrge set of very good calculators (e.g. dc) and so on. |
22:25 | <@MyCatOwnz> | s/thing/think |
22:26 | < Janus> | I know, but unless there's a need to do such things on the road, (can't use a regular computer, iow), a black book is less expensive and more suitable for appointments and such. |
22:27 | | ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has joined #code |
22:27 | | mode/#code [+o ToxicFrog] by ChanServ |
22:28 | <@ToxicFrog> | AAAAAAAARGH IDIOT HOUSEMATES |
22:28 | <@MyCatOwnz> | Janus: black books don't have integrated alarm clocks. |
22:28 | <@MyCatOwnz> | ToxicFrog: "That was my fucking network cable, not the goddamn speaker, you assmunch!" <--- ? |
22:29 | < Janus> | A nice big ditch, some Red Vines for later, and an alibi will solve that. |
22:30 | <@ToxicFrog> | "Stop plugging the goddamn hairdryer into that outlet, it caused a power outage the last four times you did it and hasn't mysteriously stopped doing so since then" |
22:30 | <@ToxicFrog> | I need to get a UPS for the network closet if they're going to keep doing this. |
22:34 | <@MyCatOwnz> | Pattern recognition is generally considered to be a computationally complex problem. |
22:34 | <@MyCatOwnz> | To help them solve this in a reasonable time, you should increase their MIPS ratings, ideally by firing a 486 chip into each of their skulls at five times the speed of sound. |
22:35 | < Janus> | You should consider conditioning them; doing action A results in having appendage B severed, etc. |
22:54 | | TakyojiClone is now known as takyoji |
22:55 | | You're now known as TheWatcher[T-2] |
22:57 | | Janus is now known as Jan[dinnered] |
22:59 | | You're now known as TheWatcher[zZzZ] |
23:16 | | * AnnoDomini idly recalls his Digital Technology teacher telling the class that when he was a student, they didn't have calculators and used logarithmic slides - once, he used such a slide to calculate 8*8, because he was in a hurry, and jotted down "63.8". The grader made a comment, "Amazing precision there." |
23:16 | <@MyCatOwnz> | Heh, sweet. |
23:16 | <@ToxicFrog> | ... |
23:17 | <@ToxicFrog> | How can you be in Digital Systems and not know intrisically what 2^6 is? |
23:17 | <@AnnoDomini> | Me? It wasn't ME. My professor, in ages bygone. |
23:18 | <@ToxicFrog> | Yes. I meant the generic "you". |
23:18 | <@ToxicFrog> | Not you specifically. |
23:18 | <@AnnoDomini> | Ah. |
23:18 | <@AnnoDomini> | I see. |
23:18 | <@MyCatOwnz> | Eh, 2^8, 2^10 and 2^16 are the main intrinsics. It's not so common to want t'others on the spur of the moment. |
23:18 | | * ToxicFrog has 2^1 through 2^12 and 2^16 |
23:19 | <@ToxicFrog> | And 2^32 approximately. |
23:19 | <@AnnoDomini> | Well. 1. He was still studying. 2. This was probably before anyone in the class saw a computer in real life. |
23:19 | <@MyCatOwnz> | OTOH, you come across t'others so bloody often it's hard to not learn them without attempting to. |
23:19 | <@ToxicFrog> | MCO: yes, that was my point. |
23:20 | <@MyCatOwnz> | ToxicFrog: just to float a possibility, perhaps he was educated back in the days when Digital Technology meant either of two things: multimillion dollar machines that not many people had access to or hardwired logic. |
23:20 | <@ToxicFrog> | Yeah, but in either case you're working in binary. |
23:21 | <@MyCatOwnz> | ToxicFrog: heck, considering that AnnoDomini is a grown adult, I wouldn't be surprised if his education might've been much more concerned with electronics itself rather than anythign CS-ish. |
23:21 | <@MyCatOwnz> | ToxicFrog: nah, you spend *way* more time on predicate logic than on binary. |
23:21 | <@ToxicFrog> | If you're working with analog electronics, it's not binary. |
23:21 | <@MyCatOwnz> | (in hardwired logic, I mean) |
23:21 | <@AnnoDomini> | The proff. looks about 50ish. That means 30 years ago. |
23:22 | <@MyCatOwnz> | ToxicFrog: yes. What I'm saying is that the guy may well have been educated on some other engineering discipline, electronics being particularly likely, and then transitioned to digital systems. It's not uncommon. |
23:22 | <@AnnoDomini> | A much younger teacher, not a professor yet, told us that in Uni was the first time people actually saw a computer. |
23:23 | <@AnnoDomini> | They all got Fs for not being able to so much as activate them. |
23:23 | <@MyCatOwnz> | That's nice. And fucking retarded. |
23:23 | <@AnnoDomini> | Well. One guy accidentally turned one on. And got some kind of DOS bluescreen. |
23:23 | <@AnnoDomini> | MyCatOwnz: Yes. |
23:23 | <@ToxicFrog> | MCO: Aha. |
23:24 | <@AnnoDomini> | And my Uni STILL employs the professor that did it. |
23:24 | <@ToxicFrog> | ... |
23:24 | <@AnnoDomini> | Actually, I had my second semester Algorithmics with him. |
23:24 | <@MyCatOwnz> | Starfish may be starfish *now*, but not expecting the pygmy tribes of the fucking rainforest to run a vacuum cleaner without instruction is rather stupid. |
23:24 | <@MyCatOwnz> | s/not// |
23:26 | <@MyCatOwnz> | (was that an apt analogy...?) |
23:26 | <@AnnoDomini> | Yep. |
23:26 | <@MyCatOwnz> | Danke. |
23:27 | <@AnnoDomini> | For the next lesson, someone brought - GASP - a startup disk, and the prof. only then told them about how to get around to launching Turbo Pascal. |
23:29 | <@AnnoDomini> | Needless to say, the student parliament has been - ineffectually, so far - trying to get that guy kicked out. |
23:30 | <@AnnoDomini> | At least they kicked out the other stupid bloke. But that's not #Code-related, so eh. |
23:42 | | Jan[dinnered] is now known as Janus |
23:53 | <@Chalain> | Java reflection guru question... |
23:53 | | Oggy_ [~user@Nightstar-22137.fmtc.com] has joined #code |
23:53 | | Oggy_ is now known as The-Librarian |
23:54 | <@Chalain> | I have some code that takes a known class name and instantiates an object of it. Now I want to search a package for ALL class names whose that conform to a given pattern. Is this possible? |
23:54 | < The-Librarian> | Chalain! Your back! |
23:54 | <@ToxicFrog> | No idea; poke McMartin? |
23:54 | <@Chalain> | Yup. Never left, actually... I just wear low-profile armor everywhere. Keeps me off most radar and lidar. |
23:55 | < The-Librarian> | heh |
23:55 | < The-Librarian> | how've you been? |
23:57 | <@Chalain> | Good, you? |
23:57 | < The-Librarian> | busier than a hug salesman in retard town |
23:57 | <@Chalain> | GNAAAAGH |
23:57 | < The-Librarian> | currently butting heads with Rails |
23:57 | | * Chalain drools on Oggy. |
23:57 | <@Chalain> | Mmmmrails. |
23:57 | <@Chalain> | Haven't touched Rails in months, sadly. |
23:57 | < The-Librarian> | it's absolutely wonderful |
23:58 | < The-Librarian> | except where it's not. |
23:58 | <@Chalain> | Hee |
23:58 | < The-Librarian> | and it's not like what I'm trying to do is that difficult. |
23:58 | < The-Librarian> | Given an input of a hash, each value of which is an array... |
23:59 | | AnnoDomini [~fark.off@Nightstar-29088.neoplus.adsl.tpnet.pl] has quit [Ping Timeout] |
23:59 | < The-Librarian> | I want a <ul> containing a <li> for each key, which will contain the key name, and a <ul> with a <li> for each value in the array |
23:59 | <@ToxicFrog> | ...that really doesn't sound at all hard. |
--- Log closed Thu Nov 23 00:00:09 2006 |