2007-01-01: 00:20:22 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 00:20:33 -!- CakeProphet has joined. 00:29:45 -!- digital_me has joined. 00:41:12 -!- digital_me has quit ("Lost terminal"). 00:43:31 -!- RodgerTheGreat has joined. 00:49:08 -!- Asztal has joined. 00:49:18 * RodgerTheGreat tips his hat 00:53:36 happy new year! for me, anyway ;) 00:55:17 cool! My new year isn't for a couple of hours. What's it like in the future? 00:55:35 do you have flying cars? 00:57:01 What are cars? Oh, those old things! 01:01:43 New Years loses some of its luster when 99% of the people I talk to online have already been through it :P 01:02:12 Yeah, it's old by the time you have it :( 01:02:45 Oh well, you get Castlevania: Portrait of Ruin 3 months before us 01:02:49 :P 01:05:35 lol 01:07:00 I'm not really sure how you can say a castlevania sequel is worth as much as a glimpse into... THE WORLD OF TOMORROW! 01:24:33 well, for me, a castlevania sequel would be a glimpse into the world of tomorrow 01:25:03 castlevania?!? 01:47:05 -!- Asztal has quit (Read error: 60 (Operation timed out)). 02:24:00 -!- oerjan has quit (sterling.freenode.net irc.freenode.net). 02:24:00 -!- GregorR has quit (sterling.freenode.net irc.freenode.net). 02:24:01 -!- Sukoshi has quit (sterling.freenode.net irc.freenode.net). 02:24:01 -!- tgwizard has quit (sterling.freenode.net irc.freenode.net). 02:24:01 -!- pikhq has quit (sterling.freenode.net irc.freenode.net). 02:24:01 -!- sekhmet has quit (sterling.freenode.net irc.freenode.net). 02:24:02 -!- sp3tt has quit (sterling.freenode.net irc.freenode.net). 02:24:03 -!- mtve has quit (sterling.freenode.net irc.freenode.net). 02:24:03 -!- RodgerTheGreat has quit (sterling.freenode.net irc.freenode.net). 02:24:03 -!- CakeProphet has quit (sterling.freenode.net irc.freenode.net). 02:24:03 -!- cmeme has quit (sterling.freenode.net irc.freenode.net). 02:24:04 -!- puzzlet has quit (sterling.freenode.net irc.freenode.net). 02:24:05 -!- lament has quit (sterling.freenode.net irc.freenode.net). 02:24:05 -!- pgimeno has quit (sterling.freenode.net irc.freenode.net). 02:24:06 -!- SimonRC has quit (sterling.freenode.net irc.freenode.net). 02:24:06 -!- tokigun has quit (sterling.freenode.net irc.freenode.net). 02:24:06 -!- EgoBot has quit (sterling.freenode.net irc.freenode.net). 02:24:06 -!- bsmntbombdood has quit (sterling.freenode.net irc.freenode.net). 02:30:06 -!- mtve has joined. 02:30:06 -!- sekhmet has joined. 02:30:06 -!- sp3tt has joined. 02:30:06 -!- GregorR has joined. 02:30:06 -!- pikhq has joined. 02:30:06 -!- tgwizard has joined. 02:30:06 -!- Sukoshi has joined. 02:30:06 -!- lament has joined. 02:30:26 -!- oerjan has joined. 02:30:29 -!- RodgerTheGreat has joined. 02:30:29 -!- CakeProphet has joined. 02:30:29 -!- cmeme has joined. 02:30:29 -!- puzzlet has joined. 02:30:29 -!- pgimeno has joined. 02:30:29 -!- tokigun has joined. 02:30:29 -!- SimonRC has joined. 02:30:34 -!- EgoBot has joined. 02:30:34 -!- bsmntbombdood has joined. 02:31:21 yay. 02:31:55 gah 02:35:23 -!- oerjan has changed nick to oerjan_. 02:35:50 -!- oerjan_ has changed nick to oerjan. 02:37:15 * CakeProphet writeth a esolang. 02:37:21 BUT IT'S A SECRET SO NO TELL WHAT IT DOES LOLOL 03:05:20 -!- ivan` has quit (Read error: 54 (Connection reset by peer)). 03:06:14 -!- ivan` has joined. 03:21:53 -!- tgwizard has quit (Remote closed the connection). 04:08:34 -!- oerjan has quit ("Good night."). 04:29:11 GregorR, oh? 04:29:13 ha! 04:29:15 You lose. 04:29:33 Can EgoBot have interpreters made in any language? 04:29:48 It executes the interpreters seperately. 04:29:58 Calls exec() and all that. 04:30:33 so... yes? 04:30:37 Yes. 04:30:43 Swell. 04:30:51 You could have interpreters in Brainfuck for all it cares. 04:32:41 When I finish the interpreter for "stew" I'd like to put it on EgoBot... as I'm too lazy to code up an IRC bot at the moment. 04:33:08 Download the EgoBot source code, fiddle with it yourself. 04:33:32 hmmm... I can't read C well, but I'll try that as well. 04:43:26 hmmm... 04:43:39 BF should have syntax highlighting... all the eight characters would be colors of the rainbow. 04:44:17 and... like... brown 04:44:20 add a brown in. 04:44:22 just cause. 04:45:34 -!- calamari has joined. 04:48:15 . . . 04:49:09 . . . 04:49:15 . . . 04:49:17 . . . 04:49:19 . . . 04:49:21 . . . 04:52:12 !!! 04:52:14 Huh? 04:52:24 Teehee. 04:52:43 [Does EgoBot do IRP? No? Okay.] 05:47:35 so... 05:47:42 this is totally brain-warping. 05:48:01 trying to design a stack-of-queues-based language that actually... works. O.o 05:49:06 it is? 05:55:03 ...well, it -was- :D 05:55:07 until I got a great idea. 06:09:19 CakeProphet: I can provide you with a basic IRCbot skeleton for Java, if you want it 06:09:46 I know less of Java than I do C> :D 06:09:59 Java is easier to learn 06:10:17 I think for the moment I'll just bolt it onto EgoBot (once I test it and get it running) 06:10:48 I don't have much of a desire for an IRC bot anyways... except possibly for some odd interpreters. 06:15:29 java is poop 07:34:42 -!- freshness has joined. 07:36:11 -!- freshness has left (?). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:04:46 -!- calamari has quit (Client Quit). 08:12:44 hmmm... weird. 08:13:16 -!- RodgerTheGreat has quit. 08:14:02 Stew needs only about 4 or 5 different commands and some built-in functions... looks pretty lightweight. 08:16:18 hmmm.... 08:17:25 Hello World would be om!"Hello World"!?spam?% 08:17:31 er... 08:17:40 !"Hello World"!?spam? 08:17:43 Huh? 08:17:56 !"Hello World"!?spam?%O 08:17:58 Huh? 08:18:50 om!?spam?"Hello World"%O would work as well 08:19:35 Yay queue-stacks! 09:47:58 To celebrate the new years ... we bought diet coke and mentos ^^ 09:58:01 ... 09:58:03 whoooo... 09:59:18 GregorR, how many? :p 10:36:52 hehe... is it bad taste to include a builtin function in an esolang that executes Python code in a string? :D 10:51:24 -!- anonfunc has joined. 11:36:22 -!- tgwizard has joined. 12:23:55 -!- oerjan has joined. 12:24:06 yay parsing. 12:24:24 oerjan, I found a nifty parsing library for Python that looks almost like BNF 12:24:50 aha 12:26:41 makin' an esolang. 13:35:13 oerjan, eep! 13:35:19 My parser is teh borken. 13:36:21 http://deadbeefbabe.org/paste/3095 13:36:31 See anything in the grammar definitions that's making it fuck up? 13:36:40 on the test program at the bottom... 13:36:45 all the debugging stuff is at the bottom too. 14:24:28 i was away. 14:24:40 lol ya rite 14:24:45 you were laughing at me. 14:24:56 from the shower? :) 14:27:25 ....yes 14:27:31 lolno? :) 14:27:39 SHUTUP 14:27:42 ... 14:27:44 I mean. 14:27:46 yes. 14:27:51 yes that's the name of it. 14:28:02 There needs to be a funky Esoteric Parsing Language. 14:28:46 regular expression are pretty esoteric, really. 14:28:50 *s 14:29:37 They're not esoteric enough. 14:31:00 Thue might work. 14:31:28 I just can't figure out why my grammar is screwing up on the program. 14:31:42 when... looking at it... it seems like it would work fine. 14:32:02 could you give a short example that breaks? 14:32:17 at the very bottom of the pastebin thing. 14:32:25 The Hello World program. 14:32:32 with some debugging shit below it. 14:34:33 In Stew everything is a single character... except for things enclosed in quotes or ?'s 14:35:18 any character that doesn't serve a special purpose is a "symbol"... 14:36:28 -!- jix_ has joined. 14:37:09 and anything in ?'s is a symbol (what a symbol becomes depends on the context... it's a function if possible, otherwise an integer, otherwise a floating point number, otherwise a string) 14:37:22 things in quotes are just strings. 14:40:35 The layout is a stack of queues (a stew)... so all symbols (which are either functions, integers, floats, or strings, or bools) are put into the queue on the top of the stack.... and the builtin commands manipulate values in the stew. 14:41:02 It's like a weird variant of stack based languages. :D 14:50:59 -!- Sph1nx has joined. 14:51:22 -!- Sph1nx has quit (Connection reset by peer). 15:26:56 i haven't solved it, but a minor point: CharsNotIn matches a string, not a single character. 15:33:23 oerjan, I set it to match exactly one. 15:33:28 exact=1 15:33:49 ah. 15:33:58 darn options :) 15:35:06 it looks like it is looking for an exact match size or something. 15:35:16 Like... how does it know it's 8 chars away? 15:35:32 what it _seems_ to me from reading the program, is that the OneOrMore barfs after reading one expression. 15:36:31 yeah... 15:36:36 but, it could be something else. 15:36:52 Group() is supposed to convert the match to a list of all repetitions. 15:37:15 yes, but if OneOrMore has a bug, then it would completely explain the debugging output. 15:39:06 doubt it. 15:39:13 pyparsing is third party... and pretty well used. 15:39:28 ZeroOrMore does the same thing. 15:39:36 and I tried removing Group() to see what happend... same thing. 15:40:35 have you tried replacing ?spam? with a one-character command? 15:40:59 nope. 15:41:09 lemme change the name of the output function to "o" and give it a shot. 15:41:24 and, also try an op definition with just a single expression. 15:41:52 (but not at the same time :) ) 15:42:06 hmmm... same problem. 15:42:10 with o as a function. 15:42:16 * CakeProphet clips off the "hello world" and tries. 15:42:38 ha, it worked that time. 15:43:51 Matched {Suppress:("!") op name op definition Suppress:(";")} -> ['m', ['0', '^']] 15:43:53 ((['m', (['0', '^'], {})], {}), 0, 5) 15:44:32 so... it could possibly the string that's borking it up. 15:44:41 aha 15:45:59 yes, that might do it too, and might give the same errors. 15:47:06 do you think it could be a problem that STRQUOTE is a two-element string? 15:47:35 if QuotedString accepts only a single quotechar 15:48:30 hmmm... I remember saying it could be two. 15:48:37 but... I'll change it to one and see what happens. 15:49:15 Now I'm glad I made big glaring capital letter constants. 15:49:20 makes everything super-easy to modify. 15:49:25 heh :) 15:50:01 hmm... now it parses with just the one quote :D 15:50:26 now the bug-handling is safely back in my realm... 15:50:36 elementary, my dear CakeProphet :) 15:50:47 :P I'm bug-prone. 15:51:47 hah, you should have seen all the syntax and type errors I got after updating IrpBot tonight. 15:52:32 ((['m', (['0', 'Hello World', '^'], {})], {}), 0, 18) 15:52:41 that's a confounding data structure :P 15:52:49 fortunately the Haskell compiler caught most of the bugs. Hooray for static typing. :) 15:53:26 heh... errors involving type are usually pretty easy to fix. 15:53:48 probably. 15:54:20 {'rand': , 'm': !m - 0, '+': , '*': , '-': , '/': , 'lolno': , 'o': , 'in': , 'mod': , '=': , 'round': ...round at 0x00AEFD30>, '^': } 15:54:25 My beautiful operator dictionary. 15:54:37 those {} could need some pruning. Missing some .suppress'es? 15:54:50 the {} are for if I specify names for certain parts. 15:54:55 .setResultsName() 15:55:15 it creates a mapping to them. 15:55:29 aha 15:55:32 good for when you have a bunch of syntical parts with no real position to them. 15:57:35 see... with some names added... my confounding data structure becomes: 15:57:37 ((['m', (['0', 'Hello World', '^'], {})], {'opname': [('m', 0)], 'opdef': [((['0', 'Hello World', '^'], {}), 1)]}), 0, 18) 15:57:41 even more confounding. 15:58:07 not sure what the 0 thereis next to "m"... 15:58:32 ah... position 15:58:54 so if I grab the syntax by name... I have a handy reference to position. 15:59:06 Damn... they should have wrapped all this in a class... it gets easily confusing. 16:01:05 ah... it is. 16:01:10 reading the logs - i am sure someone must have made an irc bot in python you can snatch. 16:01:28 it's just the string representation of the class... so it looks like a crapload of tuples, lists, and dictionaries. 16:06:00 Well, I am out of the house. 16:06:25 alrighty 16:06:29 * CakeProphet waves. 16:06:56 thanks a bunch. 16:07:30 You're welcome. 16:07:42 -!- oerjan has quit ("Leaving"). 16:13:07 -!- RodgerTheGreat has joined. 16:13:34 how's it going everybody? 16:16:11 parsing :P 16:20:39 * CakeProphet is fleshing out an esolang. 16:20:49 once I've finished it and bug tested it I'ma get up on IRC somehow. 16:20:58 easiest way would be right through EgoBot 16:26:52 -!- ivan` has quit (" HydraIRC -> http://www.hydrairc.com <- Leading Edge IRC"). 16:46:47 -!- Asztal has joined. 17:07:00 -!- Sph1nx has joined. 17:28:57 -!- Asztal has quit (Read error: 113 (No route to host)). 17:29:24 -!- Sph1nx has quit (Connection timed out). 17:41:53 -!- Sph1nx has joined. 17:46:53 -!- Sph1nx has quit ("äÏ Ó×ÉÄÁÎÉÑ ×ÓÅÍ!"). 17:55:07 -!- ihope_ has joined. 17:55:12 Oh, rightright. 17:56:40 What's SOAP looking like so far? 17:59:35 there was some discussion of using FORTH to write portions of the kernel. 17:59:50 others want to just write a glass interpreter in C as the kernel 18:00:06 and Gregor has a working bootable BF interpreter 18:00:13 Bootable? 18:00:16 yeah 18:00:43 Hmm. 18:00:55 so, we're making a little progress 18:01:03 Doesn't the kernel go on top of SOAP? 18:01:47 SOAP is the computer, at least in theory. In practice, SOAP is the emulator. 18:03:31 we were thinking of the OS more as an interpreter for an esolang that will be used to host other interpreters. The base interpreter itself is what creates the hardware interface, memory management, etc, and is the kernel 18:04:08 And if we're writing in Glass, SOAP is the basic set of classes. 18:05:08 yes, but they'd be builtins. 18:05:42 you can't really synthesize things like low-level hardware access by writing them *in* glass. 18:07:17 Yes, SOAP would be the builtins. 18:07:42 exactly 18:07:54 SOAP is the builtins, and the OS is the code that uses them. 18:08:19 In essence, we've got the whole OS, kernel and all, in an esolang. 18:08:26 (C is an esolang, IMO. :p) 18:08:30 alright, I guess you could go with that definition. Ultimately they're two parts of a single program 18:08:58 Well, you could have multiple operating systems written for SOAP. 18:09:01 C is an esolang in the same sense as BASIC is an esolang. 18:09:32 If you do horribly evil obfuscations and play with the limitations of your compiler/interpreter, it can be an esolang 18:09:38 Aren't languages only considered esolangs if they're meant to be esolangs? 18:09:52 it ultimately depends on your opinion 18:09:57 Maybe some horrible subset of C that plays with the limitations of your compiler/interpreter... 18:10:21 ihope_: That's the best part of C! 18:10:31 (sorry; I've been doing IOCCC coding recently) 18:10:33 It has horrible subsets? 18:10:36 I don't personally think C is very esoteric... painful, maybe... but the IOCC seems to indicate it can be used as an esolang 18:11:05 It at least includes an esolang. 18:11:19 (if you don't think the preprocessor is an esolang, you've not done esoteric coding) 18:11:36 -!- Arrogant has joined. 18:11:53 How about we call the operating system itself PAOS? 18:12:05 It conveniently ends with "OS", after all. 18:12:44 Standing for? 18:13:00 how about SOS? The eSoteric Operating System? 18:13:14 That too. 18:13:15 Why must OSes end with OS? 18:13:19 and yes, the C preprocessor qualifies as an esolang, even if C proper doesn't 18:13:33 pikhq: hey, if I backronymmed SOAP, I can do it with PAOS! 18:13:43 Does that make C a minsky machine? 18:13:45 CakeProphet: this is why I went the non-acronymic route with my suggestion of "Framework" 18:13:53 Heheh. 18:14:04 having a declaritive phase and an imperitive phase? 18:14:04 doobey 18:14:19 Probably Atrocious Operating System? 18:14:26 C is fun 18:15:06 C is pain. They have a name for people like you- Masochists. 18:15:26 C is fun 18:15:33 this does, of course, describe most esolang enthusiasts as well. 18:15:38 * bsmntbombdood eats some reheated pizza 18:15:42 There should be an esolang with one instruction... and a preprocessor with 90 or so commands. 18:15:59 CakeProphet: mine 18:16:27 CakeProphet: after proprocessing, wouldn't you just end up with a bunch of that one instruction? 18:17:28 Yes. 18:17:40 well... maybe 18:18:04 the preprocessor can do anything it wants to the code before executing the one-instructioned code. 18:18:26 someone should write a C compiler in cpp 18:18:36 But isn't preprocessing done at compile-time? 18:18:38 It *can8 be done. 18:18:52 ihope_, why is that signifigant? 18:18:53 Cpp is, after all, Turing complete. 18:18:56 >:D 18:19:05 ihope_: It can be done seperately. ;) 18:19:05 it is? 18:19:12 it can? 18:19:30 CakeProphet: well, if you want to compile the program every time you run it... 18:19:43 Hmm. 18:19:46 bsmntbombdood: man cpp 18:19:48 info cpp 18:20:17 Maybe the preprocessor actually does just turn the code around, except output is possible via syntax errors. 18:20:57 The preprocessor is a seperate macro language, which happens to be designed to work with C-style syntax. 18:21:14 (as Gregor has proven, it can be applied to more than just that. . . See mbf.) 18:35:23 ...So, should we start thinking about SOAP? 18:36:04 Maybe there's a Device class and a Generator class, and invoking a Generator gives you a random Device. 18:36:21 That is, a Device that represents a random device. 18:37:04 So you just keep invoking the Generator randomly until you find a new device, then you store that device away somewhere. 18:37:23 wtf are you talking about 18:37:35 The classes that should be included in SOAP. 18:37:50 ... 18:38:16 Actually, maybe scrap the Generator and have each Device created be a random one. 18:40:33 ....so the OS would pick random devices to write too when someone wants to write to a decibe??? 18:40:58 Write to a what? 18:41:15 a fooh? 18:41:28 The OS would be constantly pulling random devices and storing them somewhere. 18:41:47 If it ever met a device it already had, it would just throw it away and keep looking for new ones. 18:42:01 jtongue 18:42:54 Am I making any more sense than you are? 18:43:23 baba gnooush 18:43:27 * bsmntbombdood leaves 18:47:33 This manoeuvre, then, is ever precipitate -- and yet in the remotely antique. 18:59:00 The kind fodder takes architects. 18:59:21 (The above sentence was stolen from some bot in some channel on some server belonging to some network.) 18:59:39 The worm had brought me as I had seen in this little opportunity to know her whole of no great beauty. 18:59:55 (Specific(al)ly, Ami in #lobby on irc.aftran.com:9999 of Sine-Waves.) 19:01:28 ¿Por qué me comes? Quiero que comas mi perro. 19:03:14 Truff as had by at one-lessel. I prect, nor A. A my conly unateremoduskips, wered by no, le in you arger some trapen of floss 19:12:59 But alas, my truffles had not yet sprung into routers! If the co-ax need not be run, let my basement fly beside his windmills. 19:24:25 -!- cmeme has quit (Read error: 104 (Connection reset by peer)). 19:24:42 -!- cmeme has joined. 19:25:59 -!- cmeme has quit (Read error: 104 (Connection reset by peer)). 19:27:28 -!- cmeme has joined. 19:42:06 -!- Arrogant has quit ("Leaving"). 20:20:05 -!- calamari has joined. 20:20:12 hi 20:20:55 Ello. 20:20:56 -!- Asztal has joined. 20:22:15 I was thinkin' about the EsoOS ... 20:22:18 And filesystems ... 20:22:21 And Rogue ... 20:22:51 * calamari has rudimentary rendering taking place 20:24:50 GregorR, no. 20:25:04 Rogue? 20:25:06 no rogue 20:25:43 * pikhq has no idea what that is 20:32:48 Visual studio 2005 service pack 1 destroyed my windows install :( 20:33:03 I can code with notepad + msbuild, I guess 20:34:31 Asztal: is Visual Studio a Microsoft product? 20:35:28 Oh come on! 20:35:33 A Rogue-based FS 20:35:36 That would rock :P 20:35:41 Wonderful! 20:35:51 GregorR: What the hell *is* Rogue? 20:35:55 pikhq: a game. 20:36:03 -!- oerjan has joined. 20:36:08 Rogue -> Hack -> NetHack. 20:36:11 ihope_: Very funy. 20:36:24 . . . Seriously? A nethack FS? 20:36:30 Specifically, it's a Roguelike. 20:36:30 WTF is wrong with you, Greg? 20:36:54 GregorR, heh... maybe. 20:37:02 GregorR: didn't you say I was the only one who ever abbreviated your name that way? 20:37:05 if it had little ASCII letters that moved around. 20:37:21 CakeProphet: no, the letters won't be ASCII. 20:37:21 I don't think it make it terribly USEFUL or conceptually 20:37:24 "out there" 20:37:39 is the idea that you'd have to send your guy down to a specific level of the dungeon for him to find your files? 20:37:41 * pikhq imagines a filesystem set up as a series of potentially-interconnected rooms. . . 20:37:54 RodgerTheGreat: well, of course. 20:38:04 They'd be written in the dust on certain unknown levels. 20:38:15 It'd be so damned impossible to write out a traditional path. 20:38:19 So you'd really want levitation. 20:38:20 ...well... we could implement it as a second GUI... for kicks. 20:38:37 There'd be no actual *tree* in such an FS. 20:38:45 pikhq: certainly true. 20:39:00 I thought we were using a flat-ish memory layout? 20:39:18 Don't we want actual hardware access? 20:39:46 I mean really, doesn't SOAP come first? You have to have a language before you can write programs. 20:45:44 -!- oerjan has quit ("leaving"). 20:46:21 -!- tgwizard has quit (Remote closed the connection). 20:50:44 -!- Asztal has quit (Read error: 104 (Connection reset by peer)). 20:51:01 hmm... 20:51:05 I think what we need.. 20:51:17 ...is a spec for SOAP? 20:51:18 to do is lay out a universally agreed design goal. 20:51:41 We seem to be going at this kind of chaotically... without a clear-cut idea in mind. :D 20:52:06 as GregorR said before, we can't make up our damn minds. :P 20:52:43 (on a sidenote: I have some experience in the realm of text-based game programmer... so I could help make a Rogue GUI :D :D :D ) 20:53:17 Not that it's a difficult task... 20:53:23 it's just, I can't do much ofanything else. 20:54:10 In SOAP, your basic classes'll be A, S, V, and D. 20:54:29 A, S and V will be what they are in plain old Glass. 20:55:10 D, when created, will look for a random device that hasn't yet been attached to an object, and then will attach that device to the new object. 20:55:34 Then D will have methods that somehow interact with the device. 20:55:45 Well I mean... before SOAP... we need to figure out what the hell we're doing... with everyone sharing their idea of "how it should work", and then go from there. 20:56:38 There doesn't seem to be much of a set consensus of what to do. 20:57:03 Working on SOAP first doesn't seem like a bad idea to me... 20:57:16 ...we know. 20:58:42 -!- oerjan has joined. 20:58:48 Indeed. 20:59:16 Well, okay then. How the OS'll work. 20:59:48 You know, Glass doesn't really provide any mechanism for loading code and running it. Should we add a class that does that to SOAP? 21:02:31 Basically, we're either going to have to A. totally redefine any esolang we come across or B. write a new one. 21:02:44 It's hard to compromise between high and low level. 21:02:54 and what we need right now low level. 21:04:02 something to write the kernel with... to create all of this interfacing with hardware and stuff.... and then a Glass interpreter to go on top of it. 21:13:40 * pikhq has fun playing SMB3 21:14:15 One person coding the whole thing has a wonderful advantage. ;) 21:17:41 The kernel goes on top of the platform, doesn't it? 21:18:55 The platform's what provides the hardware access in the first place, then the kernel is responsible for loading programs and running them. 21:42:46 That nonsense conversation between ihope and bsmntbombdood gives me a concept idea for an esolang. 21:45:01 a language in which the program _must_ look like a particular style of nonsense (unlike .gertrude where it _can_ do that, but doesn't have to.) 21:46:23 oerjan: wonderful! 21:47:23 On the other hand, making a language that is fairly grammatically correct english, may mean it is AI-complete for the compiler to determine whether it actually is nonsense. 21:49:14 Perhaps it could use a large dictionary organized by subjects, and then demand that your sentences mix completely different subjects. 21:50:24 I suppose that could be organized by having the subject of a word determine its programmatical meaning. 21:51:15 I be thislacket foor of my tilling have theades of litt, in timpetted mommuchin 21:52:12 The aesthetic value of the square root of the area of a butterfly's wing is roughly equal to that of raising a child on motor oil while building a bridge over the Pacific Ocean. 21:52:31 mone tato cour ving the vereffeltondescard sory do an peolooken-ble lumbecame 21:52:49 well, nonexistent words might work too, but they should not be completely prevalent. Besides that might require the dictionary to be enormous just to check that the programmer doesn't cheat by making sense with rare words. 21:54:00 diminutive wings covered with our loophole. 21:56:39 A door and my views rendered sufficiently near proximity; and I fell into unpleasant misrepresentations, and, in the raven-black, the brief r e-sinking into a peep at least I mean Moissart and were right, -- to his voice, which you have I perceived that in the wire so forth. 21:57:43 hm, that dungeon filesystem - abstracting it would mean a filesystem organized as a mainly _undirected_ graph. 21:59:06 fuck trees. 21:59:10 fuck undirected graphs. 21:59:23 Our filesystem will be a big hole. 21:59:36 Just make sure all the verbs are missing the objects they need to make sence. 21:59:39 s/sence/sense/ 21:59:46 with varying degrees of opacity. 21:59:51 oh, and labyrinthesse would mean: Your program can only remember a _limited_ number of exits, which are too few to get back from certain files :) 21:59:57 the further you go into the whole... the more different stuff pops up. 22:00:17 Or they have extra objects that don't make sense. 22:00:29 We drove of the router, but then he threw. 22:00:39 and of course there would be _some_ monsters. 22:01:09 Why did he do from the trees? I don't know through it. 22:01:37 Hm, maybe we could combine the two current subjects. A filesystem that is a dungeon of meaningless connections. 22:02:40 Meaningless connections? 22:03:08 Like the only door from the starting room leading straight into Moloch's sanctum? 22:03:14 To reap the philosopher's stone, first go to the bird's liquorice nest and fiddle the button of doom. 22:03:56 No, I mean that the actions necessary to get from one file to the other would have to be meaningless sentences like my previous one. 22:08:39 haha... so that would be the files "path" ? 22:10:31 Essentially. 22:28:34 -!- jix_ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:58:09 WHOOOO 22:58:15 OOOOHW 22:58:22 After arduous bug fixing... my programming language finally printed its first program. 22:58:45 !m+22^)?spam?^; 22:58:52 prints 4 22:58:57 SUCCESS 22:59:00 * CakeProphet jumps around. 22:59:14 spam 22:59:19 yup. 22:59:32 Now I just need to get it on IRC so I can play around with it here... 23:00:06 Congrats. 23:00:45 Now I have to do Hello World. 23:01:05 * pikhq has a friggin' stupid way of storing directory names. . . 23:01:12 but I'm not sure it's turing complete... it doesn't really have any buiilt-in form of conditional... although there might be an interesting bypass to it. 23:01:14 Just have, on disk, a single root dir. 23:01:20 Story directorys in the pathname. 23:01:24 Err. 23:01:26 File name. 23:01:40 ....I kinda like flat, contiguous layout. 23:02:29 Thus, we've got a hole with directories as an additional abstraction. 23:02:46 psssh 23:02:53 an OS is just an abstraction 23:03:23 Your mom is just an abstraction! 23:04:28 !m?spam?"Hello World"^; works too. :D 23:04:32 Huh? 23:08:32 ...but is it esoteric? 23:11:18 It looks pretty damn esoteric to me. 23:11:43 It's more mishmashy than any stack-based language I've seen. 23:15:30 Looks like it. 23:15:34 Can't be normal. 23:15:51 haha... it should have a quine command. 23:16:03 since the interpreter has the source code stored in it :D 23:16:19 That's cheating though :P 23:16:35 write a quine in my OISC 23:16:40 pikhq, It's a stack-of-queues based language... 23:17:10 Very esoteric. 23:17:19 Next up is a queue-of-stacks based language... 23:17:29 and possibly a mismatch... for swapping between the two witha command. 23:17:30 A quine in OISC? Wow. 23:20:50 oerjan: I don't have one 23:21:25 hmmm... the only problem is that boolean values are Untrue, Unfalse, and Unanything. 23:21:46 but... they just convert directly to True, False, and None in Python... so when you do an output of them... they don't come out in their glorified form. 23:22:44 So define classes for them. 23:22:55 yeah, that's what I was thinking... 23:23:05 but... that's a lot more work than I feel like doing. 23:23:18 hmm? 23:23:26 bool isn't directly subclassable... and it'll take a while to fine-tune all the specifics. 23:24:27 well then, write an output function instead. 23:24:39 ...oh. 23:24:42 duh. 23:24:44 :P 23:24:49 I'll just do some conditionals at the output function. 23:24:54 yeah, really 23:25:27 hmm 23:25:55 sometimes writing a compiler is easier than an interpreter, other times not 23:27:05 I'm assuming this one is an interpreter... I haven't -exactly- figured out the difference. 23:27:22 -!- Metuk has joined. 23:27:45 gah, xkcd.com is crazy today 23:27:52 It reads the entire soure code all at once... but there really isn't much compiling that needs to be done, as most of it is already single-character insructors. 23:27:54 CakeProphet: If it doesn't generate code, then it's an interpreter 23:28:40 The line _is_ blurry though. 23:28:57 In fact... all instructions are implicitly one character long unless surrounded by ?'s, quotes, or its comment (which really isn't an instruction) 23:30:15 oerjan: not really...what's an example where it's unclear? 23:30:43 -!- ihope has joined. 23:30:43 somewhere between generating an AST and generating bytecode. 23:30:46 Lots of "interpreted" languages generate bytecode. 23:31:12 the bytecode is interpreted 23:31:22 ....wha? 23:31:39 -!- ooooo has joined. 23:31:59 basically, what to you call something that compiles into a different form only to run it immediately. 23:32:06 Isn't compiled "broken down into machine-readable instructions before being ran"... while interpreted is "read line by line and performed while reading"? 23:32:10 ooooo, shiny! 23:32:35 indeed, those are the extreme points. 23:32:38 ihope, binla! 23:33:16 except that very few languages are interpreted by that definition. 23:33:16 That's "before being run", isn't it? 23:33:39 Everything's either compiled or in between? 23:33:59 My language is definetely interpreted... there's not much compiling you could possibly do. 23:34:06 I don't even understand how you could compile BF O.o 23:34:11 CakeProphet: sure there is 23:34:18 Easy. 23:34:27 D'oh, I just remembered something. 23:34:28 * pikhq has written a BF compiler 23:34:36 Pointy file systems! 23:34:38 compilation == translation to a different language 23:34:42 isn't compiling and interpreting in BF pretty much the exact same thing. 23:34:55 CakeProphet: absolutly not 23:35:15 A bf compiler is easier than a bf interpreter 23:35:19 Every file has some pointers to other files. The file can only access files it has pointers to. 23:35:27 Explain the difference. 23:35:31 nearly every interpreter has _some_ translation stage, even if it is just to an AST. 23:35:50 Of course. 23:36:02 It would be a pain in the ass to read the raw source for some languages. 23:36:23 CakeProphet: a compiler turns BF into something else, then runs it. An interpreter turns it into a list/tree/thing of instructions and runs through those. 23:36:34 actually compilers don 23:36:42 't necessarily run it. 23:36:48 Well, yeah. 23:36:54 Why would you ever change BF into something different? 23:37:03 CakeProphet: to run it more efficiently? 23:37:05 I mean... it's single-character instructions... what more could possibly be done. 23:37:16 Compilers convert one language to another language. 23:37:20 CakeProphet: let's look at a bf -> c compiler. It only needs to preform simple textual substititution: > to "p++;", + to "(*p)++", etc. 23:37:21 That's it. 23:37:22 Wouldn't you rather add 50 to a number than add 1 to it 50 times? 23:37:42 hmm.... 23:38:01 CakeProphet: A complex BF->C compiler converts 50 "+"s into "*p+=50;". 23:38:14 gcc an optimizing compiler 23:38:24 so it's silly optimization stuff. 23:38:26 s/gcc // 23:38:30 CakeProphet: no 23:38:32 Turning ++++++++++++++++++++++++++++++++++++++++++++++++++ into something more efficient is compilation. 23:38:41 * CakeProphet got it the first time ;) 23:38:48 CakeProphet: optimization of BF is silly? 23:38:49 Turning ++++ into anything else is compilation. 23:38:59 ihope: compilation need not include optimization 23:39:16 heh... then I guess Python is compiled. 23:39:21 by that definition. 23:39:29 Well, yes. 23:39:39 CakeProphet: it is compiled into bytecode, which is then interpreted 23:39:43 It's the degree of compiledness. 23:39:47 another advantage of compilation is that you can run the program without having the compiler present. 23:39:51 bsmntbombdood, ...see that's where you confuse me. 23:40:07 bsmntbombdood, what.. are you supposed to compile the bytecode too? 23:40:11 hoever, python's bytecode interpreter is very complex 23:40:24 which can mean saving space. 23:40:33 CakeProphet: The byte code is never translated into a different language 23:40:48 bsmntbombdood, The byte code -is- a different language. 23:40:59 yes, it is 23:41:13 Python -> bytecode == compilation.... so how is Python not compiled? 23:41:24 it is compiled 23:41:32 but that bytecode is then interpreted 23:41:33 Python -> bytecode -> interpretation == interpretation. ;) 23:41:37 I think the biggie is whether or not it's interpreted. 23:41:43 If it's not interpreted, it's compiled. 23:41:49 The Haskell ghc compiler goes through a chain of up to 5 languages when compiling. 23:41:50 bsmntbombdood, why the "but"... it makes it sound like an objection. 23:42:08 If it's turned into an executable, it's compiled. 23:42:22 compilation ususaly translates into a simpler language python bytecode isn't much simpler than python itself 23:42:38 bsmntbombdood: It's slightly simpler to interpret, though. 23:42:46 Haskell -> System F -> STG machine -> C -> machine code 23:42:47 yes 23:42:49 every language is interpreted 23:42:51 ihope: compilation need not include optimization 23:42:57 calamari: At some point, yes. 23:43:07 so whether it is interpreted isn't a factor 23:43:42 a compiled language is a language for which there exists a compiler to some other form 23:43:51 python execution goes interpret_bytecode(compile(code)) 23:44:15 calamari: isn't x86 machine code generally run directly, if it's on an x86? 23:44:28 ihope: A proccesor is an interpreter 23:44:32 it is interpreted by the hardware :) 23:44:36 ihope: yes, but in that case, the x86 chip is the interpreter 23:44:37 * CakeProphet also notes that Python -does- make compiled versions of the source. 23:44:47 Well, yes, then maybe whether it's interpreted by software. 23:45:02 .pyc files 23:45:13 ihope: You know, there are x86 software interpreters. 23:45:15 CakeProphet: yep.. python is a compiler 23:45:17 I guess even executable files are interpreted to some small degree. 23:45:26 CakeProphet: Python is also an interpreter. ;) 23:45:38 ...damn you people are confusing me. 23:45:44 but the interpretation part of python is much larger/more complex than the compilation stage 23:45:45 some processors have microcode, which is a software used by the processor to interpret the machine code in something simpler 23:45:46 yes, python is both 23:45:51 what's the big deal? :) 23:45:56 ...I don't know exactly... 23:45:57 oerjan: d'oh... 23:46:03 How much wood ... would a woodchuck chuck ... if the wood was moss-flavored ... 23:46:13 it seems like everyone is contradicting themselves afer every other sentence. O.o 23:46:34 That's because it's both. 23:46:44 I'm not contradicting myself, I am claiming that the line _is_ blurry. 23:47:13 it seems pretty straightforward to me 23:47:18 CakeProphet: Executing pythn involves both compilation and interpretation 23:47:27 * CakeProphet nods. 23:47:31 (in cpython, that is) 23:47:58 a very simple compilation stage, and then a much more complex bytecode interpretation stage 23:48:21 Languages that have a linear interpretation are starting to grow on me :D 23:48:35 Especially when I have to write up the parser for them. :P 23:54:38 any language with a eval/exec function is probably going to be classified as interpreted 23:55:35 OK, time for a vote. 23:55:36 exec is fairly useful. :D 23:55:40 Rogue-style FS or no. 23:55:47 Yes. 23:55:47 * GregorR votes yae. 23:56:00 Indifferent. 23:56:02 bsmntbombdood: Lisp can be compiled. It's got an eval function. 23:56:19 To be fair, the eval function *is* a Lisp interpreter. . . 23:56:29 right 23:57:02 So, it's compiled if your code's not being (eval)ed. 23:59:23 -!- NK` has joined. 23:59:34 Yw 23:59:37 yaw 23:59:39 Yw 23:59:41 Ywhw 23:59:50 Sounds like the start of a programing language. 23:59:52 Wait 23:59:55 That's Yhwh 2007-01-02: 00:00:01 .... 00:00:08 :) 00:00:10 hehe 00:00:19 !help 00:00:21 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 00:00:23 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 00:00:24 YhwOS, the OS for the True Believer. 00:00:41 -!- ooooo has left (?). 00:01:31 http://kidsquid.com/images/irdr-01Jan2007.jpg 00:02:08 (that's a pic of my ipod screen) 00:02:38 not too good at macro photography yet 00:03:54 next step is to be able to click links :) 00:05:02 wifif 00:08:24 what does "wifif" mean? 00:09:50 hmmm... stack-based languages are pretty easy to inspect... 00:10:05 since you can put in a debugging command to have the program print out its stack. 00:12:16 s/wifif/wifi/ 00:13:14 but you could achieve the same effect in other languages. 00:13:36 With some difficulty. 00:13:38 Like in PYthon you can print globals() and locals() and get the program state from your perspective. 00:13:47 ja 00:13:49 Brainfuck's equivalent is printing out the entire memory. 00:13:54 * bsmntbombdood departs 00:14:07 Or dir(object) you peek into the scope of an object. 00:14:10 * CakeProphet waves. 00:20:39 * pikhq says "Sayounara". 00:20:50 Anyone seen RazorX lately? 00:27:43 certainly, just not under that name. 00:29:01 What name? 00:29:59 * GregorR points at Sukoshi 00:30:17 Sukoshi: Anata ga iru! 00:45:46 * bsmntbombdood hasn't seen Razor-Z long time 00:45:59 Razor-X 00:46:03 or whatever 00:52:36 -!- Asztal has joined. 00:56:56 -!- clog has joined. 00:56:56 -!- clog has joined. 00:57:27 -!- meatmanek has joined. 01:14:09 -!- fizzie has joined. 01:17:38 ã‚‚ã—ã‹ã—ãŸã‚‰ã€pikhq. 01:17:43 bsmntbombdood: I'm Razor-X. 01:18:53 Sukoshi: Meaning? 01:19:02 ``Maybe''. 01:19:05 Ah. 01:19:06 ;) 01:21:57 ã‚らï¼å¿˜ã‚ŒãŸï¼ã‚ã‘ã¾ã—ã¦ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ã€‚æ–°å¹´ã§å¼·ã生ãã¾ã™ï¼ï¼ï¼ 01:24:02 What's 忘 and å¼· mean? 01:24:11 Your Kanji's not very strong, is it? :P 01:24:16 No. 01:24:32 忘れる == ã‚ã™ã‚Œã‚‹, å¼·ã„ == ã¤ã‚ˆã„ 01:24:47 Also, what's the reading for "new year" there? 01:24:54 ã—ã‚“ã­ã‚“ 01:25:04 Both are pretty easy Kanji, so :P 01:25:04 . . . I should've known that. 01:25:23 Annoying Kanji : 風 01:25:33 * pikhq wonders what tsuyoi means 01:25:42 Strong. 01:25:44 Ah. 01:26:18 (I can't be expected to know the kanji for words I don't know. . . As for wasureru. . . Yeah, I need to know that for class. My bad.) 01:26:56 Advantages of not taking a Japanese class. 01:27:29 Yeah, yeah, yeah. 01:27:38 * pikhq still doesn't have an IME set up. :/ 01:28:08 大変ã ã‚。 01:28:30 変 means. . .? 01:28:54 (furigana, please) 01:29:01 ã¸ã‚“ã€ã‹ã‚ --> Strange, exchange. 01:29:10 Hmm. 01:29:11 Yeah. It's a Kanji which makes no sense :P 01:29:17 Here used as ãŸã„ã¸ã‚“ 01:29:20 http://deadbeefbabe.org/paste/3099 beautiful... my first esolang (that I built an interpreter for) 01:29:26 Ah. 01:29:29 Look. Even the J2's in my school beat you! 01:29:40 I'm Japanese 3. 01:29:47 J2 == Japanese 2. 01:29:56 Now I just need to add in maybe a few more commands (I kinda like it the way it is... with minimal commands though).. and maybe something weird like a preprocessor. 01:29:56 (to be fair, the first two years had the world's. Stupidest. Teacher.) 01:30:07 He waited until second year to teach *kana*. 01:30:15 ....................................................................................................... 01:30:27 Much less kanji. 01:30:37 Almost every piece of literature I've come across, and my own experiences, scream that you should learn as little Romaji as humanly possible. 01:30:53 I self-taught kana first year. 01:30:57 Only student to do so. 01:31:14 Ouch. 01:31:26 Kana is easy to self learn though, heh. 01:32:51 語 is also a Kanji with a lot of readings. 01:34:34 "Go" is the one that comes to mind. 01:35:16 ã“ã€ã”ã€ã‹ãŸã€ãŒãŸ. 01:35:20 Ok. Not as bad as I thought. 01:35:33 (if that's wrong, well, it looks kind of. . . tiny on my screen.) 01:35:36 And ã‹ã  Heh. 01:42:26 oooh Sukoshi 01:46:07 hmmm... there's no conditional jumps in Stew though... 01:46:16 unless you can create one from the minimal tools given. 02:15:46 One thing I suspect is that the booleans are entirely useless for computation - you cannot do anything with them other than comparing, giving you just a new boolean. 02:17:36 However, it seems to me that numbers can be used to select an operator from a stack, which can then be run, giving you conditional execution. 02:20:55 hmmm... ooh yeah :D 02:21:01 I didn't think about that. 02:21:11 the @ command with some comparison operations. 02:21:42 0 would give the current queue... 1 would give the second Queue 02:22:30 Neat. 02:22:33 That works out nicely too. 02:22:52 * CakeProphet loves it when an unintentional feature arises. 02:23:22 I also need a string-to-int int-to-string builtin. 02:23:33 -!- Asztal has quit (Read error: 113 (No route to host)). 02:23:45 maybe just call it "flip"... strings becomes ints (if possible)... ints become strings. 02:24:00 -!- Asztal has joined. 02:25:26 division and mod could easily be used as conditionals. 02:27:06 well... divsion plus floor (Python divison will be "true" division by default in later releases... but you can go ahead and specify it now using the __future__ module) 02:27:21 so uneven division will return floats. 02:28:33 it is also a well-known fact that 1-x and x*y with 0/1 gives you boolean not and and 02:30:26 you can get integer division by combining true division with mod 02:30:32 Yeah. 02:30:45 or floor. 02:31:15 ah yes, you have all three. 02:31:34 I might get rid of the lolno function then 02:31:56 isn't that negation on numbers? 02:32:07 no... right now it's boolean not 02:32:09 but.. 02:32:12 since I'm removing booleans 02:32:42 True converts to 1... False and None to 0 02:32:45 should they ever pop up 02:33:23 so boolean not would work... we just don't need it. 02:33:33 I want to strip out everything :D 02:33:40 that can be done otherwise. 02:33:49 in a more unconvential way. 02:35:03 Except random :D 02:35:13 I don't want to fool with building a random number generator myself. 02:36:01 although that _is_ considered one of the canonical programs for a new esoteric language. :) 02:36:25 well... it's not a full blown random generator. 02:36:37 It just allows randit from 1 to a given int 02:37:08 and if the value on the queue isn't an integer... it does the from-zero-to-one-float-random-thing (forogot the name of it) 02:38:15 floor can also be sumulated with round(x - 0.5) 02:38:21 sounds about as much as you can expect without a full-blown library of statistical distributions. 02:38:54 I could put a shitload of the standardlb into the specification... if I wanted. 02:38:56 and everything else can be constructed from those two cases. 02:39:22 sockets, file IO, etc 02:39:50 which I might do as an "extended stew"... for OS related juju 02:41:06 hmm.. oh I need to add greater than and less than. 02:41:23 greaterthan-and-equal-to is just a superset of multiple operations. 02:43:21 i thought you said you could use div and floor. 02:43:55 I could? 02:44:26 * CakeProphet doesn't know how to do gt and lt any other way. 02:44:33 than by simply having them present :D 02:45:28 The INTERCAL stdlib has random number generation in it. 02:45:54 I like the way the syntax oscilates from postfix to prefix 02:46:03 it's really bizzare. 02:47:50 I have the urge to add a little hack to do in-line Python.... 02:47:54 :D 02:49:06 You need to try out other languages. 02:49:32 Yeah. 02:49:40 I can do some schemish stuff... nothing huge though. 02:49:44 I attempted C but got bored. 02:49:46 let's say you have a non-zero integer and you want to test if it is positive or negative. 02:49:47 Perl looks interesting. 02:49:53 look at floor (1/x) 02:50:13 Write an infix->prefix translator in Scheme. 02:50:27 >.> 02:50:56 actually, floor (1/(2*x)) 02:50:57 I can do Glass fairly well... out of all the esolangs it's the one I'm most proficient at. 02:51:25 on second thought, zero is not a problem either. 02:51:35 I can read most of C... I still need to learn what structs are :D 02:51:38 floor (1/(2*x-1)) 02:51:45 don't really want to code it though. 02:52:11 eh, wait 02:52:17 I can do FORTH... never actually used it... but the syntax is so simple how can you -not- use FORTH? 02:52:33 -1 would give you a division by zero 02:52:47 er... 1 02:52:52 -!- Asztal has quit (Read error: 104 (Connection reset by peer)). 02:53:06 nope. 02:53:10 -!- digital_5e has joined. 02:53:20 but it isn't quite there yet. 02:53:22 oh yeah... anything multiplied by zero is one 02:53:28 duh, stupid math 02:53:54 floor (1/(4*x-2)) 02:54:20 eh... I think I'll just use builtins for comparison :P 02:54:31 that should have only two possible values, -1 and 0. 02:55:12 I guess it wouldn't be too hard to implement in Stew... since it's functional, I can abstract. 02:55:30 more properly... it's "procedural" (everything is on a global stew) 02:55:45 so -floor (1/(4*x-2)) == (x<=0) 02:56:29 new builtins. 02:57:01 for floats you would take floor before doing this, giving (x<1) 02:57:02 CHORD (yes, all caps... it felt like the thing to do) switches integers to ASCII... and ASCII to integers. 02:57:23 FLIP changes ints to strings, and strings to ints. 02:57:30 er... flip 02:57:32 lower case 02:58:05 so a CHORD is not a string? :) 02:59:34 hehe... 02:59:42 it's a combination of chr and ord 03:00:01 which are the functions that do the underlying magic. 03:00:25 CHORD was something that would have been waaay too tedious to implement in Stew. 03:00:36 and flip was just impossible 03:01:54 I suppose you could build a BF interpreter in Stew. 03:02:02 Yum, Stew. 03:02:22 just have a queue representing each possible symbol... and do a bunch of conditional rotations via comparisons. 03:02:35 then call the function at the top que. 03:02:38 queue 03:02:58 except... there's always that pesky while loop. 03:05:53 just make sure that the op for the while loop places itself back in the queue 03:06:26 oh, you mean the bf loop 03:06:31 yeah 03:06:37 Stew doesn't have whiles. 03:06:49 [] is hard to implement 03:06:50 Trying to prove Stew Turing-complete? 03:07:00 Nah... 03:07:12 just wondering -if- it could do a BF interpreter. 03:07:15 can a stack contain stack elements? 03:07:15 so... I guess so :P 03:07:21 Nope. 03:07:31 Just a single of stack of queues. 03:07:41 all data is in the queues... and all the queues are in the stack. 03:07:45 it's a little weird to get used to :D 03:07:57 so no queues in the queues either. 03:08:12 * bsmntbombdood eats Cake(Prophet) 03:08:12 No unless you can find a bug that lets you do so. 03:08:15 which is highly likely. 03:09:08 If you push all the values from the top queue... it's removed and the one below it takes its place... if that paticular quirk helps an. 03:09:10 y 03:09:47 back 03:10:02 the only loop construct in Stew (at the moment) is a function mapper() 03:10:09 which... I haven't tested yet. 03:10:11 is there a way to get to queues other than the top one? 03:10:36 Yeah. 03:10:47 how? 03:11:22 -!- digital_5e has quit (Connection timed out). 03:11:24 @ takes the topmost int from the top-most queue as a stack looker-backer. 03:11:27 like DUP in Forth. 03:11:40 pushes an old queue back to the top. 03:11:54 it's how you would do conditionals in Stew. 03:12:24 give it a comparison... it returns either 1 or 0... and use that to conditionally flip between the top two queues. 03:13:34 is there a way to swap or rotate the top queues? 03:13:36 -!- ihope_ has quit ("Leaving"). 03:13:39 and I'm guessing... if you used negative integers it would get the bottom most queue... since I didn't really specify any sort of check for that thing... and that's how Python would do it. 03:13:49 Like I just said :P 03:13:55 aha! 03:13:59 Use comparisons in combination with @ 03:14:10 that means you can use the bottom queues for globals! 03:14:29 An order list of globals :/ 03:14:33 ordered 03:14:40 facny 03:14:44 *fancy 03:15:43 % is the foreach operator... it calls a function for each item in the top queue (using some fancy voodoo to make sure that each item is at the front of the queue at some point. 03:16:25 can you use % to delete the topmost queue? 03:16:59 hmmm... don't think you could... 03:17:19 well... if your function didn't put anything in the queue. 03:17:39 I'd need to tweak the interpreter a bit to parse an empty function though :D 03:17:47 it would take all of two seconds. 03:18:02 OneOrMore -> ZeroOrMore ? :) 03:18:18 yup 03:18:20 just did it. 03:18:22 abacus 03:18:25 oops 03:20:56 The queue-based counterpart to @ is . 03:20:59 let's say you made each BF loop into a queue. 03:21:14 you can get a specific element from the topmost queue as well. 03:21:28 allowing for inter-queue conditionals :D 03:21:33 placing it in a specific position from the bottom. 03:21:34 * CakeProphet forgot about . 03:22:16 (by the way "stew" is the phonetical squashing of stack and queue) 03:22:40 s/stew/stueue/ 03:22:48 that looks silly. 03:22:51 stew is much better :D 03:22:57 that's the point 03:23:09 * CakeProphet likes stew better for some reason. 03:23:54 although stue is norwegian for living-room 03:24:10 I can't imagine stew being very efficient... pretty much any operation on it involves messing with a two-dimensional array. 03:24:13 or a cottage 03:24:22 stue might work nicely :D 03:24:40 it has the -ue end of queue 03:24:47 and the st- beginning of stack. 03:25:08 what about quack? 03:25:15 hahahaha 03:25:24 stue quack? 03:25:29 quack stue? 03:25:41 I like quack stue :D 03:25:42 or maybe just quack. 03:25:54 * bsmntbombdood likes 03:25:54 ... 03:26:11 meh... now I can't decide on a name. 03:26:14 so many good choices. 03:27:40 eh... for now I'll just call it stew 03:27:45 for reference purposes :D 03:28:30 hmm... wait 03:28:36 It'll be hard to get foreach to work properly. 03:28:57 why? 03:29:02 As functions that call will eat up their arguments and return new ones... which go on a fancy result list to the side. 03:29:15 it would be difficult to make it implicitly "eat up" values... 03:29:26 unless you just like... outputed them. 03:29:47 that's one of the few functions that eat up values and don't spit anything back. 03:29:53 is there a way to simply remove a value? 03:30:04 ah. 03:30:13 You could make it an instrinsic property of foreach... but then it would eat -too- many. 03:30:22 there's currently not a pop... 03:30:25 :D 03:30:57 pops just sorta happen as the low level commands and functions start consuming values... 03:31:42 * CakeProphet -could- add a delete command... 03:31:44 it would be nice. 03:32:53 better yet... make it a builtin... so you can foreach it :D 03:33:35 builtin functions have the advanage of being treated as data... commands have the advantage of you-don't-need-to-explicitly-call-them-they-just-happen. 03:37:56 -!- Metuk has quit (Read error: 110 (Connection timed out)). 03:39:30 eh, why is Stew.q not being initialized? 03:40:32 it doesn't exist anymore :D 03:40:43 It was causing problems with referencing. 03:41:08 Now it just slices from the stack each operation... which is... kind of dirty... but eh. 03:41:18 so the pastebin is not accurate? (http://deadbeefbabe.org/paste/3099) 03:41:22 Nope. 03:41:43 as soon as I make a little tweak, I'll post up the latest. 03:44:12 a minor tweak in how Stew does symbols allows the interpreter to call any arbitrary string as though it were an op. :D 03:44:29 ( op is the "official" term for a procedure in the Stew lingo...) 03:44:33 OFFICIAL 03:44:37 ADHERE TO IT 03:50:26 NEVER 03:50:43 WE WILL CALL IT A "DUWN" 03:51:36 alright, I think I have a functioning def-bf interpreter... 03:51:52 would anyone like to help me make some test programs? 03:52:11 +[>+] 03:52:22 hehe... got my own interpreter testing to do :P 03:52:50 RodgerTheGreat: Test any normal Brainfuck code. 03:52:56 If that fails, j00 fail. 03:53:01 pikhq: already did that 03:53:06 works like a champ 03:53:08 Mmkay. 03:53:15 +[<+] 03:53:17 Hmm. . . 03:53:29 Not sure what to do. 03:53:40 * bsmntbombdood dies and goes to bed 03:53:52 oerjan, oh... and functions have the nifty ability to be constants :D 03:54:03 and I'm working on testing pointer control... 03:54:04 since they just push values to the stack... you can use them as constants to values. 03:54:18 program counter control is going to be tricky to test... 03:54:21 I mean... ops] 03:54:23 :D 03:54:27 Yeah. . . 03:56:41 alright, # pushes pointer location, and ; pops it. 03:56:59 so if my program is >>,<++#.,;[->.<] 03:57:23 with an input of "ab" 03:57:34 I should get an output of "abb", right? 04:00:52 ah! 04:01:11 you can create a constant function 04:01:25 just use eq to start with 04:01:41 eh, i mean, op :) 04:02:12 :P 04:02:22 the OP needs to be called though. 04:02:34 and... currently my interpreter is printing ouit strange results. 04:02:45 ...I messed it up again. :P 04:03:11 what i mean is, you can use it with foreach to turn every element of a queue into the same value. 04:03:57 ...aaaah 04:04:33 pikhq: er... did I code that right? 04:04:58 hehe... using esoteric languages is the fine art of misusing every bit of the languages features. 04:07:29 eh, is recursion the only way to do a loop in Stew? 04:07:50 because it might be hard on the Python stack. 04:08:21 as far as I can tell. 04:08:41 indefinite loops anyways 04:08:45 Um. . . 04:08:50 there's iterations. 04:08:55 Maybe? 04:09:28 well, shit- I'm getting stack underflows. It's either a faulty program or my interpreter 04:09:38 -!- Sukoshi has left (?). 04:09:44 -!- Sukoshi has joined. 04:10:21 my interpreter keeps printing the stack with no apparent reason to do so. 04:10:29 I've searched the whole program for a reason why. 04:10:45 hi, Sukoshi 04:10:47 you might want to adjust run to do proper tail call optimization. 04:10:52 Hey. 04:11:18 I'm working on getting a functioning Def-BF interpreter going 04:11:21 oerjan, run doesn't do function calls. 04:11:23 so that recursion can be safely used for loops. 04:12:05 oerjan, it retrieves the functions as data... the call is from the ^ command... which calls the call() method... which calls the __call__ method of an Op object :D 04:12:30 which might be unnesiary. 04:12:50 I could easily reduce it to a call to run() 04:21:05 alright... 04:21:15 fixed some stuff... but it still prints out the stack a bunch.. 04:23:35 hmmm... to make it do optimization for tail recursion you simply return the call right? 04:24:00 that ensures that Python no longer has to keep track of the functions local state. 04:24:48 * pikhq discovers that SMB3 kicks ass with a game genie. . . 04:25:01 Hammer Mario. All. Day. Long. 04:25:03 :) 04:26:08 or you turn the call into iteration. 04:27:43 RodgerTheGreat: Has someone finished the spec? 04:28:07 I wrote the original spec, and the low-level portion is complete. 04:28:20 Link me up, Rodger. 04:28:27 if you check in run whether the last command in the list is ^, and then whether its argument is an op, then you can shortcut and use the same invocation of run to do it. 04:28:53 The only change I made to what you've seen before is that I replaced the @ symbol with %, to free up @ as a reserved "word". One moment... 04:29:29 http://nonlogic.org/dump/text/1167711731.html 04:30:06 I'm implementing the low-level spec outlined in "Basic Commands" 04:30:28 Currently, I've left out ? just to save myself some minor headaches 04:31:00 So, the low-level commands perform definite jumps? 04:31:06 yes 04:31:26 Like +++++%. should output what? 04:31:35 %: control the program counter, and #; control the pointer 04:32:14 I think that ought to output CHR$(5) 04:32:42 But doesen't % jump to location 5? 04:32:51 wait, no- that would infinite loop 04:32:53 yes 04:32:57 zero-indexed 04:33:26 Hooray. Def-BF -- More ways to infinite loop. 04:33:32 yeah... 04:34:04 anyway... 04:34:11 * RodgerTheGreat snaps his fingers 04:34:13 -!- BrainMachine has joined. 04:34:22 bfmode 04:34:22 execution mode is currently: defbf 04:34:29 What about +++++#, inputs 'a' . 04:34:46 BrainMachine: +++++#, 04:34:49 that would store a in location 5 04:34:55 the syntax is 04:35:01 bfprog +++++# 04:35:03 er 04:35:07 bfprog +++++#, 04:35:12 bfinput a 04:35:13 bfrun 04:35:29 and that's pretty much that 04:35:44 bfprog +++++#,. 04:35:46 bfinput a 04:35:48 bfrun 04:35:48 a 04:35:52 Yay. 04:36:22 -!- oerjan has quit ("Good night."). 04:36:22 bfprog +++++>>>>,<<<<#. 04:36:24 bfrun 04:36:39 whoops 04:36:43 Heh. 04:36:44 bfprog +++++>>>>,<<<<#<. 04:36:46 bfrun 04:36:46 a 04:36:54 so, that aspect works 04:37:26 -!- calamari has quit ("Leaving"). 04:37:26 Man. I wish I could play some more with this. 04:37:29 bfprog +++++#,<+++++;. 04:37:33 bfinput a 04:37:34 bfrun 04:37:35 Pointer stack underflow error. Amazing. 04:37:36 But, I must finish my homework. 04:37:36 04:37:45 lol 04:38:01 Why does it spit out some erroneous character at the end? 04:38:08 bfprog +++++#,<<<<<[-]>>>>>. 04:38:11 bfinput a 04:38:15 bfrun 04:38:15 a 04:38:24 Whoo. 04:38:35 Sukoshi: oh, that's a bug/feature of the way error messages work 04:39:03 it just adds a "\nError Message\n" to the output stream 04:39:29 Aha. 04:39:33 Anywho, homework time. 04:39:38 cya 04:39:43 I might come up with my own interpreter tonight too. 04:39:47 sweet 04:39:51 the more the merrier 04:40:20 Oh, how does ? work, by the way? 04:40:44 once I can get this interpreter firing on all cylinders, I'll start working on the High-Spec->Low-Spec compiler 04:41:21 Sukoshi: the plan is for it to read the next n characters as long as they're numbers. Inelegant, but it works 04:41:58 How'll you tell that they're numbers? Do an ASCII bound check? 04:42:06 yeah 04:42:14 Aha. 04:42:36 or, since it's Java, I can repeatedly try Integer.parseInt() 04:42:49 I'm not really sure which would be easier 04:42:59 Well, in the all cylinders world, there's nothing that fancy. 04:42:59 it'll end up being ugly code, I know it 04:44:49 if you can think of a better way for ? to work, by all means let me know 04:45:28 I was thinking about having it just read in the next ascii char, but that limits values to 8-bit, and makes it hard to use interactive interpreter 04:45:29 s 04:48:26 * pikhq jumps off of cliffs in SMB3, singing "Suicide is painless, it brings on many changes, I can take or leave it if I please." 04:48:58 the philosophical side of nintendo. 04:49:09 http://www.codu.org/Kill_Yourself.org 04:49:10 Erm 04:49:13 http://www.codu.org/Kill_Yourself.ogg 04:49:13 Actually, it's the song from MASH. 04:49:18 GregorR: I've got it. 04:49:32 http://en.wikipedia.org/wiki/Suicide_Is_Painless 04:49:42 Uh, different song ... 04:49:53 I've got the Kill Yourself song. 04:49:57 Ah, OK :P 04:50:24 "Take out your favorite limb, take out your favorite eye, it doesn't matter how so long as you die!" 04:50:49 RodgerTheGreat: I'm doing Mash *and* Nintendo. 04:51:15 lmao: http://en.wikipedia.org/wiki/List_of_songs_about_suicide 04:52:46 I should add my Kill Yourself song to that 8-D 04:53:23 wtf? "Strawberry Fields Forever" isn't on the list. 04:58:30 "Let me take you down/'cause I'm going to/Strawberry fields-/nothing is real/-and nothing to get hung about/" 05:03:53 Don't use Wikipedia to gain relevance. 05:05:37 ? 05:15:20 -!- anonfunc has quit. 05:16:48 -!- anonfunc has joined. 05:32:39 good night, everyone 05:32:50 -!- RodgerTheGreat has quit. 05:32:55 -!- BrainMachine has quit (Remote closed the connection). 06:39:51 I ... eat ... babies. 06:48:01 High-five! 06:48:29 http://www.donotputthebaby.com/index.php?s=Mouth 07:56:22 * pikhq would like to salute the RIAA for their claims on a) the rampancy of piracy b) the cost of each song 07:57:58 They have recently valued a single song to be worth $150,000. . . 07:59:05 Well, if each person is worth $1,000,000 then their songs must be some fraction of them, no? 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:34 Let's estimate that maybe 20% of the US population (6,000,000 people here) pirate songs. 08:01:00 Let's say each of these downloads, say, 3 albums of 12 songs a year. 08:01:23 2,160,000,000 songs. 08:01:32 This is, obviously, a low estimate. 08:02:13 Now, with each worth $150,000, we get $324,000,000,000,000 worth of songs pirated. 08:02:16 I'd say 40%. 08:02:30 324 trillion dollars. 08:02:56 That's more than the entire GDP of France. 08:03:10 For comparision, the USA GDP is $12.485 trillion dollars. 08:03:22 : 08:03:23 P 08:05:17 Wow. 08:05:28 That's an order of magnitude larger than the world's GDP. 08:06:00 $44,454,843,000,000 dollars. 08:06:06 44 trillion dollars. 08:06:08 Dear god. 08:10:01 Shift my calculations by an order of magnitude. 08:10:51 60,000,000, people, 21,600,000,000 songs, $3,240,000,000,000,000 songs pirated. 08:15:06 Well, in the RIAA's heart, that's how much is being pirated. 08:15:41 Only in the US. 08:16:04 Applying this to global scale gets us having lost every year the amount of value produced since the dawn of mankind. 08:16:20 (just guessing on that, but hey. Sounds about right.) 08:20:49 In conclusion: balding men with more cash than sense should not be allowed to talk about money at all. 08:21:07 In conclusion: We should sue the RIAA. 08:22:18 In conclusion: We should just let the RIAA's recent decision to sue a front company for the Russian mafia take its course. 08:22:25 I'm buying the popcorn. ;) 08:22:34 Ah. Russia. 08:22:53 They decided to sue AllOfMP3. 08:22:54 The We're-still-totalitarian-you-bums nation. 08:23:02 * Sukoshi laughs. 08:23:13 For. . . More than the GDP of Russia. 08:23:24 Hahahahahahaha. 08:23:42 Since AllOfMP3 has mafia ties, this should be rather amusing. 08:23:52 Yeah, if that happened, AllOfMP3 would own Russia by now and they'd have their own corporate army and their own figurehead President. 08:24:35 s/AllOfMP3/RIAA/ s/Russia/America/ 08:24:38 Creepy. 08:24:45 Yup. 08:25:05 It's RIAA vs. EquallyHugeGiant. 08:25:37 (I've also heard rumors of the RIAA having American mafia ties. . . This gets more and more amusing.) 08:25:46 This 'aint exactly ripe fields for Socialism in the world now. 10:01:40 -!- jix_ has joined. 11:43:17 -!- tgwizard has joined. 11:49:05 -!- Asztal has joined. 12:19:24 -!- oklopol has joined. 12:32:01 -!- jix__ has joined. 12:33:20 -!- oerjan has joined. 12:40:29 -!- jix_ has quit (Read error: 113 (No route to host)). 14:33:38 -!- Asztal has quit (Read error: 113 (No route to host)). 14:46:32 -!- anonfunc has quit. 14:57:11 -!- Sph1nx has joined. 15:11:01 -!- ihope_ has joined. 15:12:33 -!- Sph1nx has quit ("äÏ Ó×ÉÄÁÎÉÑ ×ÓÅÍ!"). 15:28:49 -!- ihope has quit (Read error: 110 (Connection timed out)). 15:35:43 -!- oerjan has quit ("leaving"). 16:23:47 -!- RodgerTheGreat has joined. 16:23:58 hi 16:28:23 -!- RodgerTheGreat_ has joined. 16:28:23 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 16:31:18 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 18:09:31 -!- oerjan has joined. 18:43:54 hey, lambdabot@#haskell also has a BF interpreter 18:51:38 not that shocking since a bf interpreter takes 15 minutes to write 18:52:09 yeah 19:04:14 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 19:04:25 -!- RodgerTheGreat has joined. 20:21:16 -!- Asztal has joined. 20:24:48 -!- Asztal has quit (Client Quit). 21:50:46 using minimal evaluation with boolean and/or makes for nice looking code 21:51:28 you mean making use of logical short-circuiting? 21:52:18 char *editor = getenv("VISUAL") || getenv("EDITOR") || (command_exists_p("emacs") && "emacs") || "vi"; 21:53:05 Yes, making use of logical short-circuiting :P 21:54:05 actually it is not essential in that example. 21:54:50 True ... but it would be fairly inefficient without :P 21:56:03 void *p=malloc(x) || exit(1) 21:57:19 That *works*. . . But I'd rather not use such a thing. 21:57:23 void *p; 21:57:26 Err. 21:57:32 void *p=malloc(x); 21:57:43 if(!p) exit(1); 21:57:49 Seems a bit clearer to me. 21:57:56 conciseness is good 21:58:28 Clarity is worthwhile, IMO. 21:58:52 some languages call that operator 'orelse'. 21:59:12 which is pretty clear. 21:59:30 I like the idea of making threats to your compiler 21:59:49 and (...) or die(1); is idiomatic perl. 21:59:50 it'd be like the opposite of INTERCAL 22:00:37 oerjan: is that good or bad? 22:00:40 hm, that probably should be die("..."). my perl is getting rusty. 22:02:10 * GregorR hates perl's proponderance of silly conditional keywords. 22:02:11 it's good. perfectly clear, too. 22:02:28 Also, I hate this: do something if (x); instead of if (x) do something; 22:02:45 And 'unless', I hate that too. 22:02:53 Really, I just hate Perl.l 22:03:16 I hate executable line noise. 22:03:24 and here i was going to mention that Haskell has when and unless in the Control.Monad module. 22:03:25 python > perl 22:03:36 prefixed though, being functions. 22:03:40 Brainfuck > Python 22:03:54 GregorR: that is nice sometimes 22:03:57 closer to english 22:04:07 Closer to English != nice 22:04:29 Malbolge > Brainfuck :) 22:05:49 but what is perl > ? 22:06:02 A pile of horse dung? 22:06:08 Mind you, that's only in terms of programming. 22:06:10 maybe COBOL. 22:06:13 In general, the horse dung is more useful. 22:07:22 darn, has someone made a BF interpreter in COBOL yet? 22:07:36 oerjan: Undoubtedly. 22:07:44 I made one in ORK, that's like COBOL++ :) 22:07:50 :) 22:07:53 I still need to do BF in my OISC 22:08:07 Actually, it's ADD 1 TO COBOL GIVING COBOL. 22:08:22 pikhq: Sooo much typing ;) 22:08:31 When you say OISC, are you referring to OISC the general concept with no specific implementation or a specific implementation, such as MISC? 22:09:03 GregorR: MY oisc 22:09:06 of course that is anecdotical, i believe the GIVING COBOL is redundant. 22:09:10 bsmntbombdood: Ahhhhhhhh 22:09:19 Perhaps even INCREASE COBOL BY 1. 22:09:24 :p 22:09:32 There is such a thing as a programming language. 22:09:37 A programming language can be incremented. 22:09:38 22:09:46 There is a programming language named COBOL. 22:09:50 COBOL is to be incremented. 22:09:58 Not quite. 22:10:10 and i think there is some reasonable expression notation in cobol as well. perhaps. 22:10:17 -!- RodgerTheGreat_ has joined. 22:10:26 Make your class be operated on by a mathematician named Gregor. 22:10:34 Oh right. 22:10:39 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 22:10:50 There is a mathematician named Gregor. 22:10:54 Gregor's first operand is COBOL. 22:10:58 Gregor's second operand is 1. 22:11:01 Gregor is to add. 22:11:13 ORK is Gregor's result. 22:11:51 Or, the acronym for that: MNGGFOCOBOLGSO1GAORKGR 22:34:33 -!- ihope_ has quit (pratchett.freenode.net irc.freenode.net). 22:34:33 -!- tgwizard has quit (pratchett.freenode.net irc.freenode.net). 22:34:34 -!- GregorR has quit (pratchett.freenode.net irc.freenode.net). 22:35:49 -!- ihope_ has joined. 22:35:49 -!- tgwizard has joined. 22:35:49 -!- GregorR has joined. 22:41:10 -!- ihope_ has quit (pratchett.freenode.net irc.freenode.net). 22:41:10 -!- tgwizard has quit (pratchett.freenode.net irc.freenode.net). 22:41:10 -!- GregorR has quit (pratchett.freenode.net irc.freenode.net). 22:41:33 -!- ihope_ has joined. 22:41:33 -!- tgwizard has joined. 22:41:33 -!- GregorR has joined. 22:50:46 -!- ihope_ has quit (pratchett.freenode.net irc.freenode.net). 22:50:46 -!- tgwizard has quit (pratchett.freenode.net irc.freenode.net). 22:50:46 -!- GregorR has quit (pratchett.freenode.net irc.freenode.net). 22:51:08 -!- ihope_ has joined. 22:51:08 -!- tgwizard has joined. 22:51:08 -!- GregorR has joined. 23:03:50 -!- ihope_ has quit (pratchett.freenode.net irc.freenode.net). 23:03:50 -!- tgwizard has quit (pratchett.freenode.net irc.freenode.net). 23:03:50 -!- GregorR has quit (pratchett.freenode.net irc.freenode.net). 23:04:14 -!- ihope_ has joined. 23:04:14 -!- tgwizard has joined. 23:04:14 -!- GregorR has joined. 23:39:49 -!- Asztal has joined. 23:43:48 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 23:48:00 -!- Fordsway has joined. 23:50:12 -!- Fordsway has left (?). 2007-01-03: 00:12:45 -!- Asztal has quit (Read error: 113 (No route to host)). 00:13:05 -!- Asztal has joined. 00:18:31 -!- jix__ has changed nick to jix. 00:24:35 -!- tgwizard has quit (Remote closed the connection). 00:59:06 -!- Asztal has quit (Read error: 113 (No route to host)). 00:59:45 -!- Asztal has joined. 01:21:54 -!- digital_me has joined. 02:00:24 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 02:05:39 -!- Sandman has joined. 02:06:28 Hello, world 02:06:52 Enter, Sandman 02:07:06 99 bottles of beer on the wall. 02:07:22 Please write "Hello, world" _before_ I make this request. 02:07:23 hmmm... 02:07:37 I should make a language based on coroutines. 02:07:47 and... somehow mix it into my genetic language idea. 02:07:51 Sandman entered 02:08:01 coroutine? 02:08:04 Thank you. 02:08:07 Yeah... 02:08:34 a subroutine takes input, executes, and returns an output to its caller. 02:08:58 ... 02:09:33 a coroutine takes in input, executes, returns a value, halts execution, awaits more input, continues execution until it returns a new value, repeat. 02:09:47 a glorified generator. 02:09:56 oh 02:10:28 you can use them to do psuedothreads nicely. 02:10:36 since they can halt their execution. 02:10:49 and take in more input when they continue. 02:11:27 You could actually use a coroutine to simulate an infinite list. 02:11:33 -!- Administrator has joined. 02:11:42 -!- Administrator has changed nick to kilovh. 02:11:53 hi 02:12:12 Please, write the 99 bottles lyrics 02:12:16 -!- kilovh has quit (Client Quit). 02:12:32 99 nine bottles of beer on the wall 02:12:36 98 nine bottles of beer on the wall 02:12:40 97 nine bottles of beer on the wall 02:12:43 96 nine bottles of beer on the wall 02:12:58 a lazy evaluator like me won't do that if the programmer isn't looking 02:13:16 99...0 bottles of beer on the wall 02:13:57 0 bottles of beer on the wall, 0 bottles of beer, go to the store, pick up some more, 99 bottles of beer on the wall 02:14:09 i don't like beer 02:14:14 me neither 02:14:24 seems like just decrementing would be easier 02:14:30 so 99 bottles of beer on the wall... (2 hours later) still 99 bottles of beer on the wall 02:14:35 lol 02:14:38 99 bottles of beer go to the store and pick upp 99 bottles, 99*99 bottles of beer on the wall 02:15:03 that's picking up way more than 99 bottles 02:16:00 oh sorry it should have been: 99 bottles of beer go to the store and pick upp 99 bottles each, 99*99 bottles of beer on the wall 02:16:54 Sandman: Join #irp; we need programmers. 02:17:03 what I've always wondered about the song is: "why do they store all the beer on a *wall*? Wouldn't a box, refrigerator, or at least shelf prove a more efficient storage medium?" 02:18:36 Yeah me too...walls ive tried storing bottles of beer on the wall, and guess what? They fell to the floor 02:19:59 You could glue them to the wall, but it'd make it tricky to take them down again 02:20:27 Cleverly arranged nails, perhaps. 02:20:37 I imagine something like a workbench tool rack, with beer bottle-sized loops 02:21:00 I once heard something about some shelve thingy. dont really know what thats all about 02:33:12 -!- Asztal has quit (Read error: 113 (No route to host)). 02:37:04 -!- Sandman has quit ("Merry christmas to ya all out there!"). 02:39:56 hmmm... I kind of regret that = become the most popular way to assign variables. 02:40:17 why? 02:40:47 a<-b :DD 02:40:57 eeew 02:41:10 There is of course the broken BF version. 02:41:18 one of the most common confusions by new programmers is the distinction between variabe assignment and mathematical equality... most likely because = (the symbol for mathematic equality) is used for it... 02:41:33 CakeProphet: The symbol used doesn't matter 02:41:35 and they look superficial similar at first glance (VERY first glance :D ) 02:41:41 it does when you're starting out. 02:41:45 not later. 02:41:50 0 bottles of bear on the wall, 0 bottles of beer. Take one down, pass it around, 255 bottles of beer on the wall! 02:41:52 once you know the symbol means nothing :P 02:41:55 If someone can't wrap their head around that, they aren't very smart 02:42:28 I myself do not really care how hard it is for newbies to start programming :\ 02:42:30 Pretty much everyone makes the leap... I just wonder why it's nessicary to put the cliff there. :P 02:42:37 * CakeProphet does. 02:42:48 C is a bitch... 02:42:57 to start out on. 02:43:03 you can do a:=b 02:43:06 C is fun 02:43:16 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 02:43:17 if programming is a bitch... programming looks painful and boring. 02:43:22 if it's easy... it looks fun. 02:43:41 It -is- fun... but only if you know what you're doing. 02:43:47 i use c++ almost exclusively 02:43:53 oklopol: ewwww 02:43:56 :D 02:44:01 CakeProphet: As with anything 02:44:28 So I think it's best to start with something that's easy to learn... so programming starts out fun. 02:45:07 if it's easy to learn it's not going to be worth using 02:45:38 Not true. ;) 02:45:50 If it's easy to learn... that means it's more intuitively worth using. 02:46:08 or... it could mean it's not worth using. 02:46:20 but... let's be optimistic and go with the first option. 02:46:25 :D 02:46:30 I started with basic, was a bitch changing to C++ since i couldn't understand the distinction between = and ==, i though "How can I know which kind of equality this is?". 02:47:59 yeah... things like that are bad.. 02:48:43 pssh 02:49:15 You should start from the top and work your way down... not stay at the top and keep the bottom hidden (ir works nicely for abstraction, but not for learning) 02:49:32 * pikhq went Basic -> Javascript -> rm -rf basic -> Tcl -> shell -> C -> C++ -> way, way too many esolangs. 02:49:34 tho i was kinda small, didn't really understand what was happening there, prolly properly taught a basic programmer would've understood the difference even tho the same symbon is used :) 02:51:19 * oklopol wants to list too: Basic -> C++ -> python -> C++ -> Brainfuck -> Java -> C++ -> Haskell -> C++ 02:51:26 Python -> Scheme -> Python -> C (for a second) -> esolangs yay 02:51:38 esolangs all the way 02:51:44 I should really get to know a lot of other languages better... rather than just skimming over them. 02:51:58 shall we see... 02:52:07 C makes my stomach churn... so not going there. 02:52:29 Perl and Lisp (definetely Lisp) look cool... 02:52:35 Smalltalk? 02:53:33 i don't know perl, lisp, pascal, cobol, intercal or smalltalk, i hate it when i know the name but not the language 02:53:35 :\ 02:53:41 I've gotten to the point where I can at least do a minor amount of fiddling around in the vast majority of languages (with the help of Google). 02:53:59 I'm more familiar with Scheme than I am Lisp. 02:54:05 but... they're not that different anyways. 02:54:08 Scheme is a Lisp. 02:54:12 yeah. 02:54:19 By "lisp" I mean Common Lisp. 02:54:24 Ah. 02:54:25 Basic -> Turbo Pascal -> Modula -> LPC -> C -> Perl -> Ocaml -> Haskell and a bunch that i just read about 02:54:45 or used even less than the ones mentioned 02:54:48 It's comparable to the difference between C and C++. 02:55:16 I like that Scheme uses a single define function :D 02:56:25 LPC... hmmm... a language used to create MUDs... 02:56:36 sounds like something I would enjoy... but probably not. 02:56:40 oklopol: it is usually not considered a disadvantage not to know cobol. :) 02:56:44 * CakeProphet is making a MUD in Python that uses freaky meta-programming stuff. 02:57:24 Perl is a little weird... it has a lot of obvious disavantages, but I like the philosophy behind it. 02:57:37 oklopol: The use of COBOL cripples the mind, therefore, it's teaching should be considered criminal. 02:58:01 i wanna learn it :( 02:58:12 Learn ORK. 02:58:19 You are supposed to change your nick to dijkstra when you say that :) 02:58:36 Rather, 02:58:39 MNGGFOCOBOLGSO1GAORKGR 02:58:44 oerjan: Yeah, yeah, yeah 02:59:12 i'll learn ork once i see a complete reference for it 02:59:17 or a tutorial 02:59:28 Hit the Esolangs wiki. 02:59:43 And realise that code is a bunch of English sentences. 03:00:17 i thought there was just a few examples 03:00:27 pikhq, i've seen ork code 03:00:48 It's not that hard. . . 03:00:55 When the program starts: 03:01:00 the wiki doesn't describe the builtin classes very well, i guess. 03:01:06 There is a scribe named Hi. 03:01:14 Hi is to write "Hello, world!\n." 03:01:19 http://esoteric.voxelperfect.net/files/ork/doc/README 03:02:02 i've made a lot of english based langs while planning on a project etc but never made an interpreter for any since they often grow quite complex 03:02:27 short jumbled-up-series-of-characters languages are starting to grow on me. 03:02:34 as are overly verbose ORK-ish languages. 03:02:48 It's compiled into C++. 03:02:59 Yeah. 03:03:12 So what? 03:04:41 Just saying. 03:05:39 :P Most languages go to assembly at some point... doesn't mean I'd enjoy coding in assembly very much. :P 03:06:12 I like assembly :) 03:06:29 * CakeProphet has never actually seen assembly code before. 03:06:48 I wonder what CPython looks like... 03:06:52 * CakeProphet goes and checks. 03:07:15 * pikhq doesn't do any assembly. . . 03:07:38 Although I do tons of equally crazy stuff. ;) 03:08:13 I can see where ORK sometimes looks like obvious syntatic sugar over C++... but it's strangely different in a way that I like. :D 03:08:45 It's syntactic sugar over C++ and some libraries, in some ways. 03:09:24 I don't consider syntatic sugar a bad thing though. 03:09:39 Everything is just syntax sugar for some super low-level operation anyways. 03:11:05 i don't like asciiWrite 03:11:06 :\ 03:11:12 oklopol: Why not? 03:11:16 so poetic otherwise 03:12:03 yeah... I don't like readOne :D 03:12:13 why not just read one? 03:13:07 The whole function-names-blending-into-the-syntax is the coolest part.... so seeing readOne is just kind of annoying. :P 03:13:14 yeah, ORK should try to avoid anything that looks like programming imo 03:13:18 actually 03:13:19 Functions with a space in the name produce some vagueness in parsing. 03:13:25 exactly what CakeProphet said 03:13:37 ORK doesn't support multi-word function names :( 03:13:49 make it support :) then i love it 03:13:51 Due to the parsing difficultimpossibility. 03:13:54 lisp does! 03:14:05 The problem is this: 03:14:10 is to 03:14:24 If both functions and variables can have spaces, it's very difficult to parse. 03:14:31 yeah, but you can avoid that if you know it 03:14:35 oh 03:14:51 you could demand an article between and . 03:14:52 In lisp symbol names can be anything 03:14:55 And impossible if one has two function/variable combinations that match. 03:15:08 oerjan: Yeah, but then it doesn't read well X_X 03:15:13 pikhq: A-yup :( 03:15:17 but the compiler could give an error if names can collide 03:15:19 It's the one corner of ORK that bugs me 8-X 03:15:28 oklopol: And then what? There's still no solution ;P 03:15:34 hmmm... Python has a just-in-time compiler implementation... neato. 03:15:45 GregorR, why? 03:15:49 it is a solution 03:15:52 it can read well if the variables are nouns 03:16:38 common nouns i mean 03:16:51 it would still parse fine... 03:16:53 if there are say 5 words in the bit that has and , it checks all possibilities (4 of them) and does the right one 03:17:22 oklopol: But if there are conflicts, there would then be no way to right it. 03:17:34 an error 03:17:40 compile-time error 03:17:53 if there are 2 that apply 03:18:06 hmmm... 03:18:21 now wait. proper nouns can be detected because they are capitalized. 03:18:50 Perhaps a rewrite of the sentence's grammer? 03:19:05 so a variable would be either 'the' , 'a' or a capitalized proper noun. 03:19:22 oerjan: That's a good point ... 03:19:41 i mean, if a thing has functions "a b c" and "a b" and vars called "c d e" "d e", it would give an error, very easy to check for each class 03:19:42 Doggie Samuels is to be or not to be that is the question when there is the functions "to be" "be or not" 03:20:15 hmmm... if it finds the variable first... it can clip off the variable name and know -exactly- what function to look for. 03:20:20 but... 03:20:24 oklopol: Giving an error isn't a solution, it just leaves the coder with no way to call that particular selection :P 03:20:27 there's something wrong with that. 03:20:53 GregorR, you still have the old way of naming if you MUST have colliding names 03:21:03 True *shrugs* 03:21:16 and, it can support the ucase thing too 03:21:36 so in that example... the parse would find the variable "to be that is the question"... and could conclude that "to be or not" is the only function. 03:21:37 if collision, check for uppercase and solve that way 03:21:56 but... there could be ambigious -between- multiple functions and variables... which is where you would have problems. 03:22:42 as i said, then check if there are uppercase beginnings in words that indicate change of noun, if not, tell the programmer his names are colliding 03:22:57 and please supply me with a better word that collision... 03:23:00 :) 03:23:14 might be fine tho 03:23:14 yeah... the chance of colliding names is rare enough that it could simply complain to the programmer about it. 03:23:44 and then have OPTIONAL syntax to explicitly mark the beginning of the parameter... should a name collision occur. 03:23:54 :D 03:24:13 yep, just harder to make a compiler, but not much 03:24:26 I would interpreter it myself... 03:24:32 er.. interpret 03:24:38 i'll do it if GregorR won't 03:24:46 THAT'LL show him 03:25:04 It's line-by-line statements that each do one thing... so it can't be that harder than a compiler. 03:25:41 it actually sounds easier than convert all of it to C. 03:25:46 (++) 03:26:58 both simple, i just meant the pattern-matching for the var- and cuntnames 03:27:01 -_________- 03:27:03 funcnames 03:27:07 but yeah... the chance of there being a bunch of name overlaps that ORK couldn't possibly figure out is so rare that it can just be solved by optional syntax to split up the two. 03:27:09 hahahahaha 03:27:14 :D 03:27:47 or, it can be guaranteed to be lazy 03:28:08 yeah, de-ambiguity rules is the other route. 03:28:08 i mean, shortest possible func for example 03:28:10 and the rest as a var 03:28:22 stating what the interpreter will do during ambiguity... 03:28:24 oklopol: I would, but since you volunteered, feel free :P 03:28:26 I like the optional syntax route myself. 03:28:59 GregorR, depends on whether i go to sleep still 03:29:00 it would be the Perl way to go about it. :D 03:29:21 well no... hueristical evaluation is also in Perl's domain. 03:30:08 must the built-in classes be named like that? i mean, inputter is too programmingish imo, ork shouldn't sound like that 03:30:33 there could just e a single read/write class called scribe. 03:30:40 or typist... or any other nifty name you want. 03:30:57 * CakeProphet writes an ORK interpreter for Python. 03:32:26 maybe with static typing removed :P 03:32:32 but it kinda adds a nice touch to the syntax. 03:32:41 so I'll probably keep it. 03:33:30 hmm... what's the delimiter for statements... periods or newlines (or both?) 03:34:06 Both, I believe. 03:34:50 aaand... # is comment I'm guessing? Like Python comments? 03:35:01 yeah. 03:35:32 oklopol: inputter is a temporary name. . . Like, Gregor doesn't know of a better name for it. 03:35:39 oooh... I like the separation of function and class... 03:35:45 you can mix and match classes to functions. 03:36:47 oh wait... 03:37:03 no they're connected right? ...to prevent scoping ambiguity. 03:37:29 Only newline is a delimiter. 03:37:30 # is a comment in ork? 03:37:32 Periods are just fluff. 03:37:46 # is a comment, yes :P 03:37:51 (Perhaps this should be a comment) 03:38:03 yeah... I like that :D 03:38:11 you could use it for inline comments. 03:38:26 Like asides to the actual program. 03:38:29 This is an object for expressing BigNums, but that is ignored. 03:38:37 ^^^^ comment 03:38:53 () is good too 03:39:04 This is an object for expression BigNum, but nobody cares. (reference to an uncyclopedia inside joke) 03:39:16 thought about that too 03:39:29 i mean 03:39:35 not that exact string of course :) 03:39:42 http://uncyclopedia.org/wiki/Nobody_cares 03:39:49 I like () though. 03:40:44 I think "backwards if" statements look a little more englishy. 03:41:23 Bob is to eat a sandwhich, if my kitchen is not exploded. 03:41:49 I thought i heard someone here say today that they hated such statements. :) 03:42:14 I use them quite a bit... since it's how Python does conditional expressions 03:42:31 x = (True if MyConditional() else False) 03:42:39 so I'm just used to them. :D 03:43:42 When looper is to loop a number: 03:43:43 There is a mathematician called Fibonacci. 03:43:43 I have a number called current. 03:43:43 Fibonacci's first operand is the number. 03:43:43 Fibonacci's second operand is 1. 03:43:43 Fibonacci is to subtract. 03:43:44 current is Fibonacci's result. 03:43:46 Fibonacci's first operand is Fibonacci's result. 03:43:48 Looks like [set x [expr {1 ? [myConditional] : 0}]] 03:43:48 Fibonacci's second operand is 0. 03:43:50 Fibonacci is to compare. 03:43:52 If Fibonacci says it's greater then I am to loop. 03:43:54 whoops 03:43:56 long paste :) 03:44:05 Or: 03:44:14 Err. 03:44:22 well, anyways, "I have a number called current." means int ¤t = number; ? because otherwise number wouldn't change 03:44:31 That's [expr {[myConditional] ? 1 : 0]}] XD 03:45:07 I think it means "number ¤t;". 03:45:15 Err. 03:45:15 :O 03:45:18 "number current;" 03:45:20 i don't 03:45:27 eh 03:45:30 in c++? 03:45:31 I don't like C's conditional expressions :P 03:45:39 Nah, it's "double current;". 03:45:59 (thought that Gregor had number as a seperate class, which he doesn't.) 03:46:03 * CakeProphet needs to figure out all the possible statements in ORK to do a proper implementation of it. 03:46:05 okay, then this is an infinite loop, right? 03:46:22 we don't have to choose. we could make it alternating current. 03:46:49 * CakeProphet implements a form of coroutine in his ORK :D 03:47:12 right? 03:47:15 Right. 03:47:16 isn't it? 03:47:29 This would loop from the value you gave it down to 0. You would of course want to add some sort of 03:47:30 functionality there, too. 03:47:33 so it's wrong? 03:49:03 It's an infinite Fibo loop. 03:49:27 Err. 03:49:29 Never mind. 03:49:44 I'm stupid. 04:01:47 -!- anonfunc has joined. 04:11:08 GregorR, you'll prolly make it faster, i've only done some basic classes 04:11:30 if you have the old code, i mean, it won't take long prolly :) 04:12:59 haha made a regexp parser last night and got to use it right away :) 04:20:05 * CakeProphet is just now definining the new number class for ORK numbers. 04:20:34 -!- oerjan has quit ("Good night."). 04:20:37 it would basically be a floating point with an overriden __str__ class... so it doesn't print the a trailing .0 like Python does. 04:26:00 hm. I just had a thought- can anyone think of a way to calculate the length of an optimal BF program that generates a constant, without actually creating he program? 04:28:59 i've made the calculations i think 04:29:05 i'll check if i finished 04:31:20 the problem with creating a compiler to Def-BF is the absolute addresses- if you don't use a constant-generation command (?), you have to generate values in-place. This means that making constants changes code length, requiring a change in what the resulting values should be. The only way I can see to get around this would be making use of a lookup table as on the BF-constants page. 04:31:27 it's a really inelegant approach 04:31:53 yeah, i've researched it a bit, but can't find the fucking file :( 04:32:48 you can brute force the most optimal way to create a number quite easily 04:33:50 1 levels, takes: N 04:33:51 2 levels, takes: Abase+A+B+7, where N=Abase+B*A 04:33:51 3 levels, takes: Abase+Bbase+A+B+C+14, where N=Abase+(Bbase+C*B)*A 04:34:06 levels is the amount of memory slots you are willing to use 04:34:22 hm. interresting 04:34:41 i've not come up with a clever algoritm to produce good bases for 3 levels, but you don't need it often 04:34:52 hmm levels, good name :) 04:36:20 if you use one memory slot for help, you the smallest possible "Abase+A+B+7" where a*b+abase = your number 04:37:19 and constructed of course A times + [ > B times + < - ] > abase 04:37:33 yeah 04:38:01 the amount of auxiliary symbols is (memory slots used)*7 04:38:13 if you want the result in your starting slot 04:38:28 what about programs of the form A+ [>B+<-]>C+/- ? 04:38:45 abase can be negative 04:38:53 actually 04:39:03 abs(Abase)+A+B+7 04:39:06 like that 04:39:52 ah- I see 04:39:55 but, seems i didn't make it thro to the end 04:39:56 sorry 04:40:03 i don't have an algorithm :) 04:42:04 hmm take the squareroot of the number and make a and b that, or if not an integer, asqrt 04:42:22 abase will be balance it out 04:42:32 that is the best algorithm i think, actually 04:43:33 with three levels, taking the cuberoot and brute forcing different values for abase and bbase while changing a, b and c near the cuberoot might do the trick 04:45:38 hm 04:45:47 for numbers smaller than 256 you don't get much profit from 3 levels 04:45:56 well, that's a lot of help 04:46:03 hopefully 04:46:10 in most cases, we'll be dealing with relatively large numbers 04:46:21 okay 04:46:28 you can take the easy way out of course 04:46:31 the Def-BF standard pretty much requires 32-bit cells 04:46:38 which is? 04:46:38 just split the numbers in 4 pieces 04:46:49 with num>>8 04:47:01 hm 04:47:04 octet by octet 04:47:17 then just merge them by multiplying with 256 04:47:18 actually 04:47:28 much worse 04:47:35 yeah- then it just becomes a problem of generating the components, which could feasibly be done via lookup... 04:47:39 since the 256 takes 36 symbols again 04:48:06 +++>>++++++[-<++++++>]<[-<+++++++>]< is the smallest 256 i think 04:49:15 it has abase=3, bbase=0, c=6, b=6, a=7 3+(0+6*6)*7 04:49:32 3+(0+6*6)*7 was just to help me think 04:49:34 :) 04:49:39 the smallest non-wrapping level 3 is one of four variants that are 32 commands 04:50:04 wait, three variants 04:50:31 huh? 04:50:43 one of what variants? 04:50:50 >>++++++++[-<[-<++>]<+[->+<]>>]< (32, 3) non-wrapping 04:50:50 >+>+++++++[-<[-<++>]<+[->+<]>>]< (32, 3) non-wrapping 04:50:51 >>++++[-<[-<++++>]<+++[->+<]>>]< (32, 3) non-wrapping 04:50:57 yes 04:51:02 i forgot to mention that 04:51:35 all that matters about the small differences in the final length is where you end 04:52:05 otherwise you have many strategies to position abase, bbase etc 04:52:24 luckily, Def-BF makes memory use in programs a little less vital than most BF-derivatives, so we don't have to do something messy like hard-allocate 3 cells per constant 04:53:46 you do realize that even if using 4 levels allows a 32-bit number to be expressed in <60 symbols, it still takes 2^32 cycles to create? :) 04:55:10 yeah 04:55:57 we're assuming for now that either the machine is fast enough for anything we want or that the BF-ASM compiler is infinitely deep in it's analysis and optimization of code 04:56:40 ++++[>++++<-]>[>++<-]> (32, 2) 04:57:06 i have all loops separate in the system 04:57:59 i'll do the complete algorithm to find the optimal way for that someday unless i see it somewhere else 04:58:06 i'll continue the ork now 04:58:41 176 "smth had to be truncated to 256 characters for debug information" warnings 04:58:47 so far so good :D 04:59:43 haha 05:01:56 can i see an ork program to check the final syntax? :D 05:03:06 if there are accidental infinite loops in a tutorial, i'd like to check i working program to be sure 05:03:15 *a working 05:04:16 sleep retry -> 05:05:08 http://esoteric.voxelperfect.net/files/ork/src/orkfuck.ork 05:06:06 Woooh, ORKFuck! 05:06:37 GregorR, hmmm... do you have some sort of docs on the exact specs of ORK? 05:06:45 Ha! It is to laugh! 05:06:57 I'm too lazy to crack open the source and read it with my shoddy C++ literacy. 05:07:17 I do, but the site it's all on is apparently down >_> 05:07:43 There is such a thing as a brainfuck interpreter. 05:07:45 A brainfuck interpreter can instanciate. 05:07:45 A brainfuck interpreter can subinstanciateData a number. 05:07:45 A brainfuck interpreter can subinstanciateProgram a number. 05:08:03 put the "There is... " line beneath the others? 05:08:39 and, could i declare "A brainfuck interpreter can instanciate." in say, the main 05:08:56 No and no. 05:08:57 'night, everyone. I should be on again late tomorrow. 05:09:01 i'm making an interpreter now, tho it's a trivial conversion if needed 05:09:05 good 05:09:17 Bye RodgerTheGreat 05:09:27 Bye 05:09:39 -!- RodgerTheGreat has quit. 05:10:16 godfuck... who wrote the bfork? 05:10:43 orkfuck i mean 05:10:56 <-- 05:12:12 haha you're sick 05:12:27 or did you just do an evil conversion? 05:15:23 I wrote it from the top. 05:15:30 I don't recall anything about it *shrugs* 05:16:58 hmm... the comments in the source should be enough to get all the possible syntax. 05:17:07 unless you randomly don't-comment-certain-parts 05:17:13 my C-reading skills are lacking. 05:36:00 oklopol: Allow me to give you a much shorter version of 255. 05:36:06 - (1, 1) wrapping 05:38:01 true, i meant non-wrapping since i assumed bignum 05:38:50 * pikhq is generally used to having wrapping, since chars, well, wrap. 05:39:01 and secondly, i'm lying, i recalled wrapping much after i'd said said my thing 05:39:16 HEheh. 05:42:33 hmmm... are function definitions independent of class declarations? 05:42:44 in ork? 05:42:46 or are they "within" the last defined function. 05:42:48 yeah. 05:42:55 er... last defined class 05:43:05 See the C++ code. ;) 05:43:25 they are in the class that is mentioned in the "When a ... is to ..." 05:43:29 the first ... 05:43:42 ooooh. 05:43:46 duh :P 05:44:09 pikhq, See makes my eyes hurt when I try to understand it. 05:44:20 but the comments are useful. 05:53:03 -!- digital_me has quit (Read error: 54 (Connection reset by peer)). 06:28:00 GregorR, haha... you could introduce metaclasses into ORK 06:28:13 "thing" being the default metaclass :D 06:28:17 lol 06:28:26 There is such a as a 06:28:47 + 06:28:49 There is such a mammal as a dog. 06:29:05 Wheee. . . 06:29:13 There is such a thing as a , which is a type of 06:29:31 I prefer Cake's idea. . . 06:29:40 But whatever. 06:29:40 Yeah :D 06:30:43 There is such a thing as a thing 06:30:47 O.o 06:31:01 No clue how metaclasses would work in ORK though. 06:31:38 * CakeProphet sometimes wishes there was a simpler version of regex that used that kind of syntax 06:31:49 This is a that likes to 06:32:06 ... I could... make it? 06:32:13 :D 06:32:25 * CakeProphet makes it. 06:37:58 * Sukoshi groans. 06:38:03 Ugggh. Metaclasses. 06:39:27 The future of OOP: An abstract framework of abstract metaclasses. 06:44:58 haha 06:45:03 metaclasses are magical :P 06:45:12 How are they magical? 06:45:17 Dunno... 06:45:22 they're not very useful for most things. 06:45:35 That about sums up all of theoretical OOP. 06:45:36 only a few specific things that need a little funky class-based magic. 06:45:52 OOP can at times be redundent... and it's a little weird. 06:46:04 but it makes things weirdly effective. 06:47:43 Sukoshi: The future of OOP: 06:48:04 There is an object which does everything I want. 06:48:58 The stdlib always has every object that does everything you want. 06:49:10 factory functions that produce classes are strangely powerful.... 06:49:21 And it's an abstraction ontop of 500 different layers. . . ;) 06:49:42 you can box a few generalized patterns about certain class designs into a single word. 06:52:44 You remind me of the wackiest abstraction I made/used. 06:53:34 Yes? 06:54:09 (that abstraction is?) 06:54:50 I wanted to generalize binary classes in a user-made package that had the same named slots but different names under one generic class so I could save myself the typing, so I made an alist with the keys as the symbols for the generic class names and what was assoc'd with the key was an anonymous function produced by a macro for the metaclass definition. This function then defined a new class according to another macro, and generated an 06:54:50 instance of it if desired. 06:59:54 That's almost like writing an OS to implement dc. 07:03:25 I wanted to save 40 lines of typing. 07:04:53 I did -- I did the thing in like 10 lines. 07:06:28 Still. 07:06:48 What? I saved my hand from OCD. 07:06:50 Errr... 07:06:52 RSI. 07:06:59 ;D 07:07:28 Ah the power of Lisp. 07:17:21 hmmm... 07:17:23 not surprisingly. 07:17:30 when you use regex to substitute things into regex. 07:17:32 problems arise. 07:18:03 I can't think why if you use your macros correctly. 07:18:12 Oh wait -- this is Python. 07:18:22 Yah. 07:18:31 * Sukoshi pities the stringent syntax. 07:18:46 eh... I must be used to it. 07:18:51 I find it very "lazy". 07:19:05 Haskell is lazier :P 07:19:08 No semicolons and braces and all that jazz. 07:19:28 C looks gawd-awful to type... but I guess you'd get used to all the symbols after a while. 07:19:42 It's easy to parse. 07:19:51 Plus, it makes for fun formatting tricks. 07:20:11 I, personally, abhor overreliance on whitespace. 07:20:32 meh... small rewards for the task of typing all that crap out. 07:20:44 Typing what out? 07:20:47 A semicolon? 07:20:57 semicolons and braces... not to mention it looks ugly. 07:21:07 A few hundred semicolons. 07:21:27 What if you were working on a very small resolution display, and indendation would look horrible? 07:21:50 -!- MM2 has joined. 07:21:56 ...I haven't thought about it much. 07:22:02 :P 07:22:13 Good argument though.. :P :P :P 07:22:45 Also, think about using regexps to go through Python code and change stuff around -- annoying. 07:23:22 It's like saying "You'd care more about how slow Python is if you were on a 1980s IBM" 07:23:55 More like "You'd care more about how slow Python is if you did anything system critical." 07:24:31 I remember some implementation of Python written in Python, with the very ambitious goal of becoming faster than C. :P 07:24:46 Don't think it'll happen anytime soon. 07:24:50 There's Jython, and that's scary. 07:24:56 PyPy 07:25:16 Python being compiled by Java. Whoo. 07:25:24 Yeah... 07:26:02 I've never encounted any slowness with Python so far... but I haven't really worried about it 07:26:56 Python is slow on my box. 07:27:00 At times. 07:27:07 My box is on the older side, so. 07:27:45 Take a look at the Computer Language Shootout results. 07:39:37 * CakeProphet doesn't trust benchmarks. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:26:14 -!- anonfunc has quit. 09:52:12 whjoooo 10:25:58 -!- xpika has joined. 10:26:19 -!- xpika has left (?). 11:53:48 -!- tgwizard has joined. 13:19:30 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 13:48:39 please tell me 8 first fibonacci numbers 14:27:39 -!- tgwizard has joined. 15:01:29 -!- jix has joined. 15:04:21 -!- Asztal has joined. 15:07:29 -!- Asztal has quit (Client Quit). 15:21:30 -!- oklopol has quit (Read error: 110 (Connection timed out)). 15:41:22 -!- oklopol has joined. 16:11:36 -!- oerjan has joined. 16:32:41 -!- CakeProphet has quit ("haaaaaaaaaa"). 16:55:36 -!- digital_me has joined. 17:15:06 -!- CakeProphet has joined. 17:21:55 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 17:35:49 -!- digital_me has quit (Read error: 104 (Connection reset by peer)). 17:41:00 -!- digital_me has joined. 17:57:00 -!- digital_me_ has joined. 18:04:10 * SimonRC goes ooh: http://www.coolopticalillusions.com/optical_illusions_pictures_3/candy_stripes.htm 18:06:05 cool 18:07:00 There seems to be a battle going on in the high-tech language world. 18:07:37 On one side, there is Lisp, with its ability to perform arbitrary transformations on program source code. 18:08:10 On another side, there is Haskell, with its power of manipulating actual programs and computations. 18:08:35 * oerjan is at the moment programming Brainfuck in Haskell 18:08:40 On a third side, there are the OO languages with high-powered reflection. 18:08:59 oerjan: define "programming Brainfuck in Haskell" 18:09:06 making an interpreter 18:09:18 On the fourth side, there are low-level languages saying "we can do it, too!" 18:09:28 -!- digital_me has quit (Read error: 110 (Connection timed out)). 18:10:10 I wanted to make a brainfuck interpreter that is completely customizable as to tape size, cell value sizes and wrapping. 18:10:28 LOOKIT ME I ARE USING THE VISITX0rZ-PATTEN LOLZ 18:10:37 oerjan: ooh 18:10:51 -!- digital_me has joined. 18:11:19 * digital_me goes oooh too 18:11:57 at my URL, not what oerjan said I hope 18:12:06 unless you forgot to turn your ESP off again 18:12:09 XP 18:13:07 Is bad for you. 18:13:21 * SimonRC is reading _Thud_ by PTerry. Very good book, especially page 290. 18:19:05 SimonRC: yes, lol 18:28:44 -!- digital_me_ has quit (Connection timed out). 18:40:59 -!- sebbu has joined. 18:41:47 -!- CakeProphet has joined. 18:59:38 CakeProphet: hi 19:07:15 -!- oerjan has quit ("leaving"). 19:16:21 mskeg 19:16:22 Hey. 19:18:40 * SimonRC wonders what MS Keg would be if it existed. 19:20:42 hmmm 20:07:42 * SimonRC has dinner 20:23:12 -!- RodgerTheGreat has joined. 20:23:29 howdy 20:55:29 aah 20:56:18 * CakeProphet is toying with new ideas on how to turn common parts of programming languages into unconvential data types. 20:56:39 Everything should be data... if it isn't, you can't manipulate it to its full potential. 20:58:05 So thinks like variable names, call stacks, evaluation stack, parse trees, and language syntax should all be expressable by data of some sort. 20:59:48 So... for example... 21:00:21 x = syntax("(") 21:00:28 y = syntax(")") 21:00:43 2root = sqrty x 2 y 21:00:48 should yield the square root of two. 21:02:00 a weird example... but I'm sure with some tweaking to how it works you could make some interesting applications with it. 21:02:58 That would requite some interesting runtime parsing mechanics. :P 21:03:28 Better yet... you could do it like Lisp with the quote operator. 21:03:52 and have the quote operator represent a "suspended" sytax... that isn't evaluated till later. 21:09:25 -!- Keymaker has joined. 21:09:53 hello. 99 bottles of beer in underload: http://koti.mbnet.fi/~yiap/programs/underload/99.ul 21:10:14 finally got around finishing this one. i'm happy about it, as it's my first program in this kind of language 21:10:32 first that does something logic, that is 21:10:52 my two others in underload are a quine and something that prints natural numbers in unary 21:11:03 * SimonRC returns himself. 21:11:38 CakeProphet: yuk 21:11:57 Thou shalt not fuck around with the parser at runtime. 21:12:16 Keymaker: cool 21:12:21 thanks 21:13:49 * SimonRC wonders where Underload is defined 21:14:11 http://esoteric.voxelperfect.net/wiki/Underload 21:14:17 * RodgerTheGreat slaps SimonRC 21:14:36 this is why we can't have nice things 21:17:52 heh 21:17:56 nice 21:18:07 SimonRC, Why not :( 21:18:27 You could assign expressions to any generic set of symbols... 21:18:46 '[ := '( 21:18:52 Hello["World") 21:19:15 I feel that changing suck things at runtime would make the language a little slow. 21:19:52 Not if you do it right 21:20:00 In fact, you are almost screwing with the lexer at run-time. 21:20:19 If the language is designed for it's purposes... rather than implementing it as a bolt-on later in life... it'll be more well-suited for it. 21:20:31 plus you would end up leaving large holes all over your language spec. 21:21:15 ...it's an esolang idea... it's supposed to be weird. :P 21:21:19 Lisp only gets away with it because it restricts lexer-around-with-screwing to read-time. 21:21:45 You know about the lifecycle of Lisp source code, right/ 21:21:46 ? 21:21:50 No. 21:22:15 the compiler reads a series of "forms" from each input file. 21:22:23 that s called read time 21:22:51 any of those forms may change the lexer. 21:22:56 termination.. 21:22:59 -!- Keymaker has quit. 21:23:16 ah, they may only change the lexer for following forms 21:24:07 The if the lexer holds a series of states... and plugs in the proper values from these malleable state values... it would be trivial to have a lexer that can change how it parses mid-runtime. 21:24:16 once the forms are read it, there is compile time, which IIRC starts with macro-expansion, which allows you to pass parts of parse trees (s-expressions) through arbitrary functions, which it handy. 21:24:28 it would most likely be an interpreted language though. 21:24:37 CakeProphet: yeah, but that reduces your ability to optimise 21:24:58 it prevents such fundamental optimisations as, say, *compiling* the program. 21:25:03 ...no use optimizing a interpreter/compiler that doesn't exist yet. 21:26:02 I don't care about speed. 21:43:57 -!- RodgerTheGreat_ has joined. 21:44:00 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 21:44:13 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 21:56:55 -!- RodgerTheGreat_ has joined. 21:57:11 motherfucking wifi 22:00:05 -!- ihope_ has joined. 22:00:15 Any idea how much bandwidth the esowiki uses? 22:02:42 -!- oerjan has joined. 22:04:37 ONE MILLION MEGABITS 22:05:04 ooh 22:05:40 make that ONE BILLION and you have yourself a deal 22:05:42 Per day? 22:05:58 ihope_: No, per seconds 22:05:59 ONE BILLION per day? 22:06:03 Oh. 22:06:11 Per how many seconds? :-P 22:06:12 s/second/mu second/ 22:06:25 Still plural. 22:06:33 s/seconds/mu second/ 22:09:08 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)). 22:12:28 -!- RodgerTheGreat_ has quit (Remote closed the connection). 22:12:47 -!- RodgerTheGreat has joined. 22:15:07 http://youtube.com/watch?v=WwylBRucU7w&mode=related&search <- lol 22:18:21 LOL 2 U 22:23:07 jajajaja 22:31:13 Is that that blender thing? 22:41:00 -!- digital_me has quit ("Lost terminal"). 22:51:29 -!- RodgerTheGreat_ has joined. 22:51:46 -!- RodgerTheGreat_ has quit (Remote closed the connection). 22:52:26 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 22:52:26 -!- RodgerTheGreat_ has joined. 23:31:08 -!- digital_me has joined. 2007-01-04: 00:01:43 -!- calamari has joined. 00:24:56 !ps 00:25:00 1 bsmntbombdood: ps 00:25:02 !ps a 00:25:06 1 bsmntbombdood: ps 00:25:13 !help 00:25:16 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 00:25:18 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 00:25:59 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 00:26:34 !daemon cat bf +[,.] 00:26:38 !cat foo 00:26:42 foo 00:26:48 !cat bsmntbombdood 00:26:52 bsmntbombdood 00:27:08 !cat bsmntbombdood 00:27:12 bsmntbombdood 00:27:27 bf has one of the smallest Cat programs ever :P 00:27:27 thanks EgoBot 00:30:40 There are probably some languages where the empty program is a cat. Concatenative languages where the program is a function to turn input into output. 00:31:05 you guys see any problem with this code? 00:31:08 http://rafb.net/p/GCgLp467.html 00:32:40 -!- Yoshi-kun has joined. 00:32:53 -!- Yoshi-kun has changed nick to yoshibot. 00:36:22 -!- sebbu has quit ("@+"). 00:36:40 It does not actually null out any links, so eventually you will access an already freed node. Or was that a rhetorical question? 00:37:11 thanks 00:37:52 so I should add temp = NULL; 00:38:04 no.. 00:38:53 Before the while loop, add a links -> prev = NULL, I think. 00:39:25 how about links -> next = NULL; before the free 00:39:36 no, then I don't free the last node 00:39:38 hrm hehe 00:39:48 No, it is enough to do it on as single node, before you start. 00:39:59 to break the circularity. 00:40:04 *a 00:40:07 but I'm not using prev 00:40:13 (at least while freeing) 00:40:22 But you have it available. 00:40:53 let me think about this.. I'm sure you're right I just don't quite get it yet :) 00:40:58 Oh, I meant links -> prev -> next = NULL. 00:41:12 ahh 00:41:15 that makes more sense :) 00:41:23 not sure if that's the right syntax. 00:41:28 bbl 00:41:33 -!- RodgerTheGreat_ has quit. 00:43:54 -!- oerjan has quit (Remote closed the connection). 00:44:05 -!- oerjan has joined. 00:58:20 oerjan: seems to be right, thank you 00:58:31 You're welcome. 01:04:46 -!- Sukoshi has left (?). 01:04:50 -!- Sukoshi has joined. 01:05:49 !cat bsmntbombdood 01:05:53 bsmntbombdood 01:05:58 wtf! 01:11:41 you seem strangely surprised. 01:11:56 yeah 01:12:10 * bsmntbombdood has lost a window 01:12:32 let me hope it was on the computer. :) 01:13:06 Yeah 01:13:18 !cat bsmntbombdood 01:13:21 bsmntbombdood 01:13:29 !cat bsmntbombdood 01:13:33 bsmntbombdood 01:13:39 owtf 01:18:30 !daemon dog !bf +[->,----------[>,----------]<[++++++++++.<]+] 01:18:33 Huh? 01:19:00 !daemon dog bf +[->,----------[>,----------]<[++++++++++.<]+] 01:19:10 !dog bsmntbombdood 01:19:34 !undaemon dog 01:19:37 doodbmobtnmsb 01:19:38 !ps d 01:19:39 Process 2 killed. 01:19:40 * SimonRC goes (addictive: http://www.ophyr.nl/flash/games/hellbound.html) 01:19:43 1 bsmntbombdood: daemon cat bf 01:19:45 2 oerjan: ps 01:20:36 !daemon dog bf ++++++++++[---------->,----------[>,----------]<[++++++++++.<]++++++++++.] 01:20:40 !dog bsmntbombdood 01:20:43 doodbmobtnmsb 01:20:57 !dog oerjan 01:21:01 najreo 01:21:10 :) 01:21:20 !dog najreo 01:21:23 oerjan 01:21:57 !dog kcus najreo 01:21:59 oerjan suck 01:22:21 !dog skcus najreo 01:22:25 oerjan sucks 01:22:33 !dog rammarg ruoy seod os 01:22:37 so does your grammar 01:23:17 !dog lol 01:23:18 but that bf program sucks, it is far too long. 01:23:21 lol 01:33:25 -!- oklofok has joined. 01:33:26 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 01:46:42 -!- oklofok has changed nick to oklopol. 01:54:52 -!- tgwizard has joined. 01:58:21 !dog god! 01:58:24 !dog 01:58:28 Not that that really... well. 01:58:51 !dog !dog !dog !dog god! god! god! god! 01:58:56 !dog !dog !dog !dog god! god! god! 01:59:00 Perfect! 02:00:16 !dog !dog !dog god! god! god! 02:00:28 !dog !dog !dog god! god! 02:04:43 !ps d 02:04:46 1 bsmntbombdood: daemon cat bf 02:04:48 2 oerjan: daemon dog bf 02:04:50 3 oerjan: ps 02:05:36 why did it stop after 3 lines but not before? 02:06:01 It... what? 02:06:10 !dog !dog god! tac! 02:06:14 !cat !dog god! 02:06:20 !dog !dog god! god! 02:06:22 :( 02:06:36 !dog god! 02:06:59 there the 4th line arrived. 02:07:18 !dog !dog god! 02:07:30 !dog god! 02:08:00 !dog 02:08:02 it is just delaying it. _or_ someone is cheating. 02:08:04 !dog 02:08:48 i didn't know EgoBot parsed its own output 02:09:33 hmm... 02:09:34 nice 02:11:28 -!- EgoBot has quit (Excess Flood). 02:11:36 Wuh oh. 02:11:39 -!- EgoBot has joined. 02:11:42 what happened? 02:11:43 Whew. 02:11:49 !ps d 02:11:53 1 EgoBot: daemon cat reload 02:11:54 !bf +[.+] 02:11:54 2 EgoBot: daemon dog reload 02:11:56 3 oerjan: ps 02:11:58 02:12:14 Yeah... most bots simply parse everything on the channel. 02:12:18 lol 02:12:21 which includes themselves. 02:12:30 Most bots parse themselves? 02:12:34 no 02:12:46 The PRIVMSG isn't sent back to the client. 02:12:49 right 02:12:51 Ah. 02:12:58 It should :P 02:13:14 That would cause doubling in many client, I think. 02:13:15 that would serve as a way to test if you're actually connected. 02:13:20 And many clients, too. 02:13:23 /ping ihope_ 02:13:38 Well of course it would... it's the current specification to simply echo the input 02:13:53 -!- bsmnt_bot has joined. 02:14:21 -!- bsmntbombdood has left (?). 02:14:33 -!- bsmntbombdood has joined. 02:14:35 !ps 02:14:38 3 CakeProphet: ps 02:14:46 Also, there's the actual PING messages. 02:14:46 !daemon 02:14:53 ~raw PRIVMSG #esoteric :I don't see my own messages 02:14:53 I don't see my own messages 02:14:58 yep 02:15:14 I mean... for the user. 02:15:14 PRIVMSGing doesn't get sent back to you 02:15:27 Just echoing input creates the illusion of being connected when you're not. 02:15:33 so it's hard to tell when the stream stops. 02:15:53 Most clients echo, you mean? 02:15:58 You type it, it displays it? 02:16:35 -!- tgwizard has quit (Remote closed the connection). 02:17:39 perhaps gregorR explicitly sends EgoBot's output back to it to make quines possible. 02:18:10 GregorR do--what? 02:18:23 oooh I want an EgoBot quine 02:18:32 testing 02:18:38 ah. 02:18:42 I can write cat in python 02:18:57 i am strongly starting to suspect someone cheated. 02:19:09 !help 02:19:13 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 02:19:15 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 02:19:34 Yeah, it's pretty easy to cheat. 02:19:54 that would certainly explain the irregular, slow response 02:20:18 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~cat .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % x.split("~cat ")[-1])) 02:20:21 heh :) 02:20:24 ~cat foo 02:20:24 foo 02:20:42 excuse me a moment 02:20:51 -!- IrpBot has joined. 02:20:58 lol 02:21:13 !cat ~cat !cat ~cat 02:21:17 ~cat !cat ~cat 02:21:17 !cat ~cat 02:21:20 ~cat 02:21:26 lol 02:21:28 I think I know which one's faster. 02:21:31 Wonderful X_X 02:21:34 * bsmntbombdood grins 02:21:40 IrpBot: THERE'S NO IRP ALLOWED HERE, F*** OFF 02:21:40 !id !dog tset di! 02:21:42 Huh? 02:21:46 !dog !dog tac~ tac~ 02:21:48 ~cat ~cat god! 02:21:49 ihope_: EgoBot is not slow, it's purposely throttled. 02:21:49 god! 02:22:00 GregorR: close enough. 02:22:04 Also, that didn't work. 02:22:06 ah wait. bug. 02:22:09 ~exec self.raw_regex_queue.pop() 02:22:19 !raw LEAVE #esoteric 02:22:27 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~cat .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % x.split(":~cat ")[-1])) 02:22:30 there 02:22:50 hmph. 02:22:54 meh I should do it the right way 02:22:56 ~exec self.raw_regex_queue.pop() 02:22:59 GregorR: you know, if a !cat +.[+.] can kill it... 02:23:18 i forgot that IrpBot always writes to #irp, even if I join it here 02:23:21 (A !cat +[.+] can kill it too, by the way.) 02:23:54 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~cat .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.compile(r"\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(0))) 02:24:01 ~cat ~cat foo 02:24:01 :bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~cat ~cat foo 02:24:14 ~exec self.raw_regex_queue.pop() 02:24:16 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~cat .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.compile(r"\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 02:24:20 ~cat ~cat foo 02:24:20 ~cat foo 02:24:38 thar 02:24:49 Now, lemme think... 02:25:10 !dog ~cat god! tac~ 02:25:13 ~cat !dog tac~ 02:25:13 !dog tac~ 02:25:15 ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:25:15 !cat ~cat !cat ~cat !cat ~cat !cat foo 02:25:17 ~cat 02:25:19 ~cat !cat ~cat !cat ~cat !cat foo 02:25:19 !cat ~cat !cat ~cat !cat foo 02:25:20 -!- IrpBot has left (?). 02:25:23 ~cat !cat ~cat !cat foo 02:25:23 !cat ~cat !cat foo 02:25:25 Whee. 02:25:27 ~cat !cat foo 02:25:27 !cat foo 02:25:29 chaos ensues 02:25:31 foo 02:26:21 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:22 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:25 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:25 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:27 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:27 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:31 ~cat !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:31 !cat ~cat !cat ~cat !cat ~cat !cat foo 02:26:33 ~cat !cat ~cat !cat ~cat !cat foo 02:26:33 !cat ~cat !cat ~cat !cat foo 02:26:35 ~cat !cat ~cat !cat foo 02:26:35 !cat ~cat !cat foo 02:26:37 ~cat !cat foo 02:26:37 !cat foo 02:26:39 foo 02:26:40 cat = badger? 02:26:50 yay! 02:27:06 ~cat ~cat ~cat 02:27:06 ~cat ~cat 02:27:10 Yay. 02:27:17 bsmnt_bot doesn't see its own ouput 02:27:34 Remember, bot-writers, send your replies with NOTICE! 02:27:58 ~raw NOTICE #esoteric :no 02:29:07 That's what the RFC says to do, after all. 02:29:38 nope 02:29:42 look at the regex 02:29:44 Also never automatically respond to a NOTICE. 02:30:03 r"\S+ PRIVMSG #esoteric :~cat .*" 02:30:12 PRIVMSG only 02:30:18 ~cat 02:30:27 ~raw NOTICE #esoteric :test 02:31:01 ~cat foo 02:31:02 foo 02:31:14 Just a second, eh? 02:31:15 -!- ihope_ has left (?). 02:31:25 -!- ihope_ has joined. 02:31:32 lol 02:31:39 #EsOtErIc, eh? 02:31:44 ~cat foo 02:31:44 foo 02:31:46 Yep. 02:31:50 Silly bot. 02:31:53 no 02:32:07 ircd converts all the channel names to lower case 02:32:09 ...I mean non-silly bot. 02:32:16 Or something. 02:33:51 ~cat !dog Testing... god! tac~ tac! tac~ 02:33:51 !dog Testing... god! tac~ tac! tac~ 02:33:55 ~cat !cat ~cat !dog ...gnitseT 02:33:55 !cat ~cat !dog ...gnitseT 02:33:59 ~cat !dog ...gnitseT 02:33:59 !dog ...gnitseT 02:34:03 Testing... 02:34:08 :D 02:34:24 bot feedback! 02:35:20 sdrawkcab ,lol 02:36:03 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~loop.*", lambda x : bot.raw("PRIVMSG #esoteric :!cat ~loop")) 02:36:06 ~loop 02:36:07 !cat ~loop 02:36:09 ~loop 02:36:09 !cat ~loop 02:36:13 ~loop 02:36:13 !cat ~loop 02:36:17 ~loop 02:36:17 !cat ~loop 02:36:21 ~loop 02:36:21 !cat ~loop 02:36:25 lolz 02:36:25 ~loop 02:36:25 !cat ~loop 02:36:29 ~loop 02:36:29 !cat ~loop 02:36:32 ~exec self.raw_regex_queue.pop() 02:36:33 ~loop 02:37:02 hm... 02:37:17 a dangerous one: 02:38:01 nah wait 02:38:25 !help 02:38:27 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 02:38:29 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 02:49:43 !daemon dup bf ++++[->++++++++<]>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>[.>]++++++++++.[<]+] 02:49:48 !dup test 02:49:51 *test 02:50:11 hm, that was rather unusual 02:50:34 ? 02:50:39 ah 02:50:46 !undaemon dup 02:50:49 Process 3 killed. 02:51:03 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>[.>]++++++++++.[<]+] 02:51:12 !dup test 02:51:15 test 02:51:27 ...? 02:51:40 * oerjan sighs 02:53:38 ~raw PRIVMSG #esoteric : 02:53:41 ~raw PRIVMSG #esoteric : 02:53:56 hmm 02:54:16 !dup test 02:54:19 test 02:54:24 !undaemon dup 02:54:28 Process 3 killed. 02:54:53 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 02:55:02 now then 02:55:04 !dup test 02:55:07 test test 02:55:12 :) 02:56:07 ~cat !dup test 02:56:07 !dup test 02:56:09 test test 02:56:20 should i dare? 02:56:29 ~cat !dup ~cat !dup 02:56:29 !dup ~cat !dup 02:56:31 ~cat !dup ~cat !dup 02:56:31 !dup ~cat !dup 02:56:35 ~cat !dup ~cat !dup 02:56:36 !dup ~cat !dup 02:56:39 ~cat !dup ~cat !dup 02:56:39 !dup ~cat !dup 02:56:43 ~cat !dup ~cat !dup 02:56:44 !dup ~cat !dup 02:56:47 ~cat !dup ~cat !dup 02:56:48 !dup ~cat !dup 02:56:49 !undaemon dup 02:56:51 lol 02:56:51 Process 3 killed. 02:56:53 ~cat !dup ~cat !dup 02:56:54 !dup ~cat !dup 02:56:55 Huh? 02:57:06 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 02:57:32 i believe we have an iterating quine :) 02:58:35 :) 02:59:31 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 03:03:00 ~cat naughty clever oerjan 03:03:00 naughty clever oerjan 03:05:33 ~dup ah 03:05:38 ~dup ~cat ah 03:05:49 !dup ~cat ah 03:05:51 ~cat ah ~cat ah 03:05:52 ah ~cat ah 03:07:13 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.match(x, r"\S+ PRIVMSG #esoteric :~dup (.*)").group(1))) 03:07:17 ~dup foo 03:07:18 -!- bsmnt_bot has quit (Remote closed the connection). 03:07:43 !dog god! rac! 03:07:45 -!- bsmnt_bot has joined. 03:07:46 !car !dog 03:07:52 !dog god! rat! 03:07:54 not quite so clever :) 03:07:56 !tar !dog 03:08:00 "{ 03:08:00 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1))) 03:08:04 ~dup foo 03:08:04 foo 03:08:18 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)*2)) 03:08:32 ~exec self.raw_regex_queue.pop() 03:08:32 ~exec self.raw_regex_queue.pop() 03:08:33 ~exec self.register_raw(r" 03:08:34 er.. 03:08:39 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)*2)) 03:08:45 ~dup foo 03:08:45 fooPRIVMSG #esoteric :foo 03:08:59 ~cat Is this still working? 03:09:22 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % (re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1))*2)) 03:09:25 ~exec self.raw_regex_queue.pop() 03:09:26 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % (re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1))*2)) 03:09:30 ~exec self.raw_regex_queue.pop() 03:09:30 ~dup foo 03:09:30 fooPRIVMSG #esoteric :foo 03:09:34 argh 03:09:55 ~exec self.raw_regex_queue.pop() 03:09:57 are you trying to make two lines? 03:10:02 no 03:10:25 You should keep all the regexes that are used in the register_raw() thing handy. 03:10:39 so you can backreference in the lambda. 03:11:07 yeah, not sure what a good way to do that is though 03:11:10 in other words but .* in a second group. 03:11:31 or better yet... make some convience function for simple commands. 03:11:34 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % (re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)*2))) 03:11:40 ~dup foo 03:11:40 foofoo 03:11:43 ~dup foo 03:11:44 foofoo 03:12:01 hm... 03:12:15 !dup !dup 03:12:18 !dup !dup 03:12:20 my irc client or the irc proto strips trailing spaces 03:12:29 ~exec self.raw_regex_queue.pop() 03:12:37 ~dup ~dup 03:12:44 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % ((re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)+" ")*2))) 03:12:44 :( 03:12:48 ~dup foo 03:12:49 foo foo 03:12:53 ~dup ~dup 03:12:54 ~dup ~dup 03:12:54 ~dup ~dup 03:12:54 ~dup ~dup 03:12:57 :D 03:13:06 ~dup !dup 03:13:06 !dup !dup 03:13:08 if it parsed itself... that would be a simple quine. 03:13:10 !dup !dup 03:13:47 ~dup !dup ~dup 03:13:47 !dup ~dup !dup ~dup 03:13:50 ~dup !dup ~dup ~dup !dup ~dup 03:13:50 ~dup ~cat ~dup ~cat 03:13:50 !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 03:13:50 ~cat ~dup ~cat ~cat ~dup ~cat 03:13:54 ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 03:13:54 ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 03:14:00 hahaha 03:14:13 argh, leading space 03:14:17 !dup ~dup 03:14:20 ~dup ~dup 03:14:20 ~dup ~dup 03:14:35 !dup ~dup !dup 03:14:38 ~dup !dup ~dup !dup 03:14:39 !dup ~dup !dup !dup ~dup !dup 03:14:42 ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:14:42 !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:14:46 !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:14:50 hahaha 03:14:54 love it 03:15:03 exponetial growth! 03:15:18 wonder what pattern it follows to stop like that. 03:15:28 yeah that's odd 03:15:54 !dup !dup ~dup !dup 03:15:58 !dup ~dup !dup !dup ~dup !dup 03:16:08 !dup ~dup !dup !dup ~dup !dup 03:16:10 ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:16:10 !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:16:13 !dup ~dup !dup ~dup !dup 03:16:14 !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:16:16 ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:16:16 !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup 03:16:20 ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup 03:16:20 !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup 03:16:22 ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !d 03:16:22 !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !d !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:16:24 ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !d !dup ~dup 03:16:24 !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !d !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup 03:16:25 There we go. 03:16:26 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !d !dup ~dup !dup !dup 03:16:35 or not 03:16:40 aha 03:16:45 it's like a cellular automaton. 03:16:54 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)). 03:16:55 ~dup !dup ~dup ~dup 03:16:55 !dup ~dup ~dup !dup ~dup ~dup 03:17:00 ~dup ~dup !dup ~dup ~dup ~dup ~dup !dup ~dup ~dup 03:17:00 ~dup !dup ~dup ~dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup ~dup ~dup ~dup !dup ~dup ~dup 03:17:01 hmm... I feel insipiration for an esoteric language. 03:17:03 if it is not to stop (apart from flooding) then there must never be two following ! or two following ~ 03:17:13 yeah 03:17:25 !dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup 03:17:28 ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup 03:17:28 !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup 03:17:29 so the length must always be, hm, odd 03:17:32 ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup 03:17:32 !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup 03:17:36 ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup 03:17:36 !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~ 03:17:40 ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 03:17:40 ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup !dup ~dup ~dup ~ 03:17:46 hmmm.. 03:17:47 and fail 03:17:54 oerjan: But it can't be 03:18:07 There should be an esolang based off of this. 03:18:15 two interpreters that interpreter the output of each other. 03:18:43 there's a proof then. 03:18:44 brainfuck-brainfuck? 03:19:35 and of course with incompatible languages 03:19:40 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:19:42 -!- puzzlet has joined. 03:19:44 interpert the program, recurse untill there are no brainfuck chars left 03:19:44 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:19:44 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:19:48 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup 03:19:48 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ! 03:19:52 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ 03:19:52 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup 03:19:56 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup 03:19:56 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup 03:20:00 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup !dup ~dup 03:20:00 !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup 03:20:04 ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup ~dup !dup !dup ~dup !dup ~ !dup ~dup !dup ~dup !dup ~du 03:20:18 That might have been it :D 03:20:21 what i wonder is if it is possible to get a dog in there. 03:21:15 of course, any valid brainfuck program is the same in brainfuck-brainfuck, so it's boring 03:21:42 ~dup !dup ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:21:42 !dup ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:21:46 ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dog !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:21:56 aw... 03:22:23 ~dup !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:22:23 !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:22:26 ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud 03:22:26 !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~dup !dog ~pud !pud ~pud !pud ~pud !pud ~pud !pud ~pud !pud !dup ~dup !dog ~pud !p 03:22:30 p! dup~ god! pud~ pud! dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ god! pud~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ god! pud~ pud! dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ god! dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ god! pud~ pud! dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ god! pud~ dup! dup~ dup! dup~ dup! dup~ dup! dup~ dup! 03:22:36 p!!!!!!!!!!1 03:23:19 ~dup !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! 03:23:20 !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! 03:23:23 stripped for being too long 03:23:24 ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! 03:23:24 !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! ~dup !dog ~pud !pud ~pud !pud pud~ pud! pud~ pud! pud~ pud! !dup ~dup !dog ~pud !p 03:23:28 p! dup~ god! pud~ pud! !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! dup~ god! pud~ !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! dup~ god! pud~ pud! !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! dup~ god! !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! dup~ god! pud~ pud! !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! dup~ god! pud~ !dup ~dup !dup ~dup !dup ~dup dup! dup~ dup! 03:23:33 p! 03:23:37 ~dup !dog !god pud~ 03:23:37 !dog !god pud~ !dog !god pud~ 03:23:40 ~dup dog! god! ~dup dog! 03:23:45 Maybe the occurance of a p! is what causes something to happen. 03:24:04 arg, the spaces 03:24:05 If an interpreter halts on p! ...something changes... but the input alters in some way as well. 03:24:14 ~exec self.raw_regex_queue.pop() 03:24:59 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup\s+.*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % ((re.match(r"\S+ PRIVMSG #esoteric :~dup\s+(.*)", x).group(1)+" ")*2))) 03:25:00 nothing wrong about the spaces, the double ones were put in at the start 03:25:06 we can cheat 03:25:14 but there is no need 03:25:18 ~dup !dog !god pud~ 03:25:18 !dog !god pud~ !dog !god pud~ 03:25:22 ~dup dog! god! ~dup dog! 03:25:40 oerjan: huh? 03:25:43 ~exec self.raw_regex_queue.pop() 03:25:55 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % ((re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)+" ")*2))) 03:26:00 there, no spaces 03:26:05 ah, you multiply and get a space at the end 03:26:17 ~exec self.raw_regex_queue.pop() 03:26:22 ~dup !dog test 03:26:26 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup .*", lambda x : bot.raw("PRIVMSG #esoteric :%s" % ((re.match(r"\S+ PRIVMSG #esoteric :~dup (.*)", x).group(1)+" ")*2).strip())) 03:26:42 ~dup !dog test 03:26:42 !dog test !dog test 03:26:46 tset god! tset 03:26:48 wow that's some UGLY code 03:27:50 you definitely need to put a function in your bot to pick just the part after the colon. 03:28:14 But that is going to be different 03:28:30 depending on PRIVMSG, NOTICE, whatever 03:28:57 i don't mean for the initial regex, but for convenience in the remaining part 03:29:33 What should I call it? 03:29:54 hmm... 03:29:55 in IrpBot it's called clean 03:30:02 if you had three interpreters with different symnols for different commands. 03:30:05 privmsg_message? 03:30:16 one of the functions defined by the code i snatched 03:30:52 or just message. it could be convenient for the others too. 03:32:32 ~quit update 03:32:32 -!- bsmnt_bot has quit ("update"). 03:32:37 -!- bsmnt_bot has joined. 03:33:00 sample 03:33:14 ~exec print message(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :sample") 03:33:39 oops conflict 03:33:53 -!- bsmnt_bot has quit (Remote closed the connection). 03:33:56 -!- bsmnt_bot has joined. 03:34:02 -!- bsmnt_bot has quit (Remote closed the connection). 03:34:10 ~exec print get_message(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :sample") 03:34:16 -!- ihope_ has quit (Operation timed out). 03:34:20 -!- bsmnt_bot has joined. 03:34:23 ~exec print get_message(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :sample") 03:34:26 good 03:34:30 ~exec print get_message(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :sample:sample") 03:34:36 good 03:36:34 3 lines of code 03:38:06 ~exec __import__("time").sleep(60) 03:38:18 ~raw PRIVMSG #esoteric :foo 03:38:22 hmmm.. 03:38:32 I should put execs in their own thread 03:38:32 the formula for number of dups each run is. 03:38:39 (2d) - 1 03:38:41 so... 03:38:48 I don't think it would spawn infinitely... 03:39:07 foo 03:39:16 ABOUT TIME! :P 03:39:33 I bet I could make it SendQ out 03:39:38 ~exec __import__("time").sleep(120) 03:39:59 actually... 03:40:09 2(d-1) 03:40:15 obviously. :P 03:42:32 or not 03:43:56 * bsmntbombdood puts in threads 03:46:20 ~quit bsmntbombdood is leet 03:46:21 -!- bsmnt_bot has quit ("bsmntbombdood is leet"). 03:46:55 stupid python lambdas 03:47:40 do you guys know how is done an modulo in assembly language 03:47:43 I means 03:47:51 -!- bsmnt_bot has joined. 03:47:57 ~exec __import__("time").sleep(120) 03:47:57 -!- bsmnt_bot has quit (Remote closed the connection). 03:48:01 how gcc translate a modulo 03:48:16 NK`: Use the -S option and find out 03:48:38 and is it the best for telling if a division 03:48:39 -!- bsmnt_bot has joined. 03:48:42 ~exec __import__("time").sleep(120) 03:48:43 -!- bsmnt_bot has quit (Remote closed the connection). 03:48:48 is how do you say "right" 03:49:00 I mean enclydienne 03:49:14 euclydien 03:49:29 euclidien* sorry 03:49:37 bsmntbombdood: I was thinking about it 03:49:42 I'm going into 03:50:20 -!- bsmnt_bot has joined. 03:50:22 ~exec __import__("time").sleep(120) 03:50:34 ~raw PRIVMSG #esoteric :yay, threads 03:50:35 yay, threads 03:50:37 yay 03:50:43 ~dup test 03:50:47 !dup test 03:50:51 test test 03:51:01 ~cat test 03:51:08 Those commands don't persist 03:55:13 idivl -8(%ebp) 03:55:13 movl %edx, %eax 03:55:13 movl %eax, c 03:57:26 !I think it 's optimized 03:57:29 Huh? 03:58:47 I wish I knew whether these bugs were due to c or the ipod .. hehe 03:59:46 great regex: r"^:(?P\S+)!(?P\S+)@(?P\S+) (?P\S+) (?P\S+) :(?P.*)" 04:03:30 ~quit more code 04:03:30 -!- bsmnt_bot has quit ("more code"). 04:03:34 -!- bsmnt_bot has joined. 04:03:58 ~exec print message 04:04:24 hmm 04:04:40 ~exec print self.get_message(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :hmm") 04:04:48 crap 04:04:56 threading introduces scope problems 04:11:59 -!- bsmnt_bot has quit (Remote closed the connection). 04:12:03 -!- bsmnt_bot has joined. 04:12:13 ~exec print locals(),globals() 04:12:59 ~exec print self 04:13:04 urgh 04:13:58 -!- bsmnt_bot has quit (Remote closed the connection). 04:14:02 -!- bsmnt_bot has joined. 04:14:06 ~exec print self 04:14:13 what. the. fuck 04:14:53 -!- bsmnt_bot has quit (Remote closed the connection). 04:15:04 -!- bsmnt_bot has joined. 04:15:05 ~exec print self 04:15:10 THERE 04:15:21 ~exec print locals(),globals() 04:15:58 ~exec __import__("pprint").pprint([locals(),globals()]) 04:17:13 -!- bsmnt_bot has quit (Remote closed the connection). 04:17:35 -!- bsmnt_bot has joined. 04:18:07 ~exec print self.get_message(message) 04:18:12 GOOOOD 04:18:54 ~exec import time 04:18:59 ~exec print time 04:19:03 or not 04:26:36 -!- CakeProphet has quit (Read error: 113 (No route to host)). 05:32:17 * pikhq consideres a rewrite for !dog 05:34:52 wtf, python strings don't have a reverse method 05:35:31 ++++++++++[[>+<-]>[>,----------]<[++++++++++.<]++++++++++.] 05:35:43 Not much shorter, but hey; it's a start. 05:36:20 . . . 05:36:38 ++++++++++[[>-<-]>[>,----------]<[++++++++++.<]++++++++++.] 05:36:47 ++++++++++[[>-<-],>[>,----------]<[++++++++++.<]++++++++++.] even 05:36:57 ++++++++++[[>-<-]>,[>,----------]<[++++++++++.<]++++++++++.] even 05:36:58 * pikhq sucks 05:47:46 ~exec x=1 05:47:48 !print x 05:47:51 Huh? 05:47:55 ~exec print x 05:48:13 ~~~~~~~~~~~~~~~~~~~~~~ 05:50:18 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 05:51:21 !cat ~cat !dup ~cat !dup 05:51:23 ~cat !dup ~cat !dup 05:51:34 * pikhq watches the bots go boom 05:51:59 !cat !cat 05:52:00 ~exec self.register_raw(r"^\S+ PRIVMSG #esoteric :~cat (.*)", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.compile(r"^\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 05:52:01 !cat 05:52:06 ~cat foo 05:52:07 -!- bsmnt_bot has quit (Remote closed the connection). 05:52:12 LMAO 05:52:15 -!- bsmnt_bot has joined. 05:52:21 ~exec self.register_raw(r"^\S+ PRIVMSG #esoteric :~cat (.*)", lambda x : self.raw("PRIVMSG #esoteric :%s" % re.compile(r"^\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 05:52:25 ~cat foo 05:52:25 -!- bsmnt_bot has quit (Remote closed the connection). 05:52:28 fuck 05:52:49 threading ~exec's messes up scope 05:53:02 -!- bsmnt_bot has joined. 05:53:28 -!- bsmnt_bot has quit (Remote closed the connection). 05:53:39 -!- bsmnt_bot has joined. 05:53:48 ~exec self.THREADING = False 05:54:11 !cat ~cat !dup ~cat !dup 05:54:15 ~exec self.raw("PRIVMSG #esoteric :%s" % self.THREADING) 05:54:15 False 05:54:15 ~cat !dup ~cat !dup 05:54:18 ~exec self.register_raw(r"^\S+ PRIVMSG #esoteric :~cat (.*)", lambda x : self.raw("PRIVMSG #esoteric :%s" % re.compile(r"^\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 05:54:25 ~cat foo 05:54:25 -!- bsmnt_bot has quit (Remote closed the connection). 05:54:26 !cat ~cat !dup ~cat !dup 05:54:29 ~cat !dup ~cat !dup 05:54:31 Victory? 05:54:33 ~exec self.THREADING = False 05:54:33 -!- bsmnt_bot has joined. 05:54:40 ~exec self.register_raw(r"^\S+ PRIVMSG #esoteric :~cat (.*)", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.compile(r"^\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 05:54:42 I don't think that works. 05:54:44 ~cat foo 05:54:44 foo 05:54:47 !cat ~cat !dup ~cat !dup 05:54:50 Finally. 05:54:52 ~cat !dup ~cat !dup 05:54:52 !dup ~cat !dup 05:54:55 ~cat !dup ~cat !dup 05:54:56 !dup ~cat !dup 05:54:59 ~cat !dup ~cat !dup 05:55:00 !dup ~cat !dup 05:55:03 ~cat !dup ~cat !dup 05:55:04 !dup ~cat !dup 05:55:07 ~cat !dup ~cat !dup 05:55:08 !dup ~cat !dup 05:55:10 !undaemon dup 05:55:11 ~cat !dup ~cat !dup 05:55:12 !dup ~cat !dup 05:55:13 Process 4 killed. 05:55:15 Huh? 05:55:27 Fun stuff, oerjan. 05:55:54 indeed 05:56:04 :) 05:58:50 -!- digital_me has quit ("night"). 06:01:39 I can't get scoping right 06:02:01 -!- bsmnt_bot has quit (Remote closed the connection). 06:02:05 -!- bsmnt_bot has joined. 06:02:18 ~exec print self 06:02:26 ~exec print bot 06:02:32 ~exec print re 06:02:46 ~exec print globals() 06:03:07 -!- bsmnt_bot has quit (Remote closed the connection). 06:03:13 -!- bsmnt_bot has joined. 06:03:15 ~exec print self 06:03:19 ~exec print bot 06:03:23 hmmm 06:05:14 dumb bot 07:05:11 -!- oerjan has quit ("Good night"). 07:09:46 ~raw privmsg #esoteric :foo 07:09:46 foo 07:21:07 -!- calamari has quit ("Leaving"). 07:46:40 Aye. I hate it when I reach crossroads of program and programmer efficiency . 07:58:08 me need sleep 07:58:16 -!- pikhq has quit ("leaving"). 07:58:23 sleep is for the weak 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:02:12 Yes it is. 11:40:25 -!- tgwizard has joined. 13:13:39 -!- mtve has quit (Read error: 110 (Connection timed out)). 14:00:50 -!- ihope_ has joined. 14:00:55 -!- ihope_ has changed nick to ihope. 14:58:48 -!- nemesis128 has joined. 15:02:06 -!- nemesis128 has left (?). 15:52:01 -!- jix has joined. 15:57:59 -!- digital_me has joined. 16:20:54 -!- ihope_ has joined. 16:37:03 -!- ihope has quit (Connection timed out). 17:08:31 -!- oerjan has joined. 17:09:29 -!- oklofok has joined. 17:09:42 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 17:09:42 -!- FabioNET has joined. 17:24:05 -!- ihope_ has quit (Connection timed out). 17:42:45 -!- ihope_ has joined. 17:42:53 -!- ihope_ has changed nick to ihope. 17:44:24 * SimonRC grins at the bot pong above 18:18:09 !dup foo 18:18:14 Huh? 18:18:16 !ps d 18:18:19 1 EgoBot: daemon cat reload 18:18:22 2 EgoBot: daemon dog reload 18:18:23 3 oerjan: daemon dup bf 18:18:25 4 ihope: ps 18:19:26 If dup is a daemon... 18:19:49 !dup !dup 18:19:51 Huh? 18:20:02 Unless !dup outputs "Huh?" 18:20:45 !undaemon dup 18:20:48 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 18:20:53 !dup Grah 18:20:55 Grah Grah 18:21:02 Woot Woot. 18:21:26 !dup ~cat !dup 18:21:29 ~cat !dup ~cat !dup 18:21:43 I see ~cat is not catting. 18:23:46 ~cat !dup ~cat !dup 18:24:03 I see ~cat is still not catting. 18:36:44 -!- oerjan has quit ("Out of the house"). 18:43:51 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 18:54:30 ~print [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue] 18:54:36 ~exec print [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue] 18:54:48 ~exec print [(i[0].pattern, i[1].__name__) for i in bot.raw_regex_queue] 18:56:55 -!- bsmnt_bot has quit (Remote closed the connection). 18:57:01 -!- bsmnt_bot has joined. 18:57:09 ~exec self.print_callbacks() 18:57:22 pretty 19:00:03 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~cat (.*)", lambda x : bot.raw("PRIVMSG #esoteric :%s" % re.compile(r"\S+ PRIVMSG #esoteric :~cat (.*)").match(x).group(1))) 19:00:07 ~cat cat 19:00:07 cat 19:00:13 ihope: ~cat now cats 19:00:39 ~cat !dup ~cat !dup 19:00:39 !dup ~cat !dup 19:00:43 ~cat !dup ~cat !dup 19:00:43 !dup ~cat !dup 19:00:47 ~cat !dup ~cat !dup 19:00:47 !dup ~cat !dup 19:00:51 ~cat !dup ~cat !dup 19:00:51 !dup ~cat !dup 19:00:53 ~cat !dup ~cat !dup 19:00:53 !dup ~cat !dup 19:00:55 ~exec self.print_callbacks() 19:00:59 ~cat !dup ~cat !dup 19:00:59 !dup ~cat !dup 19:01:03 Huh? 19:01:09 Fun. 19:02:51 -!- tgwizard has joined. 19:06:44 -!- bsmnt_bot has quit (Remote closed the connection). 19:06:47 -!- bsmnt_bot has joined. 19:07:36 ~exec print inspect.getargspec(self.do_exec) 19:10:58 ~exec print inspect.ismethod(self) 19:11:03 ~exec print inspect.ismethod(self.do_exec) 19:11:11 ~exec print inspect.ismethod(lambda x : x) 19:14:05 -!- RodgerTheGreat has joined. 19:14:10 hi 19:15:26 hi 19:15:35 -!- bsmnt_bot has quit (Remote closed the connection). 19:15:39 -!- bsmnt_bot has joined. 19:16:46 ~exec self.register_raw(r".*:~test (.*)", lambda x, y : bot.raw("PRIVMSG #esoteric :%r, %r" % (x,y))) 19:16:51 ~test 19:17:16 ~test foo 19:17:17 ':bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~test foo', <_sre.SRE_Match object at 0xb7c0c620> 19:17:44 ~exec self.raw_regex_queue.pop() 19:17:54 ~exec self.register_raw(r".*:~test (.*)", lambda x : bot.raw("PRIVMSG #esoteric :%r" % (x))) 19:17:58 ~test foo 19:17:58 ':bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~test foo' 19:18:02 yay 19:18:19 ~exec self.raw_regex_queue.pop() 19:18:31 ~exec self.print_callbacks() 19:19:31 ~exec self.register_raw("\S+ PRIVMSG #esoteric :~cat (.*)", lambda x,y: bot.raw("PRIVMSG #esoteric :%s" % y.group(1))) 19:19:34 ~cat foo 19:19:35 foo 19:20:03 now the regex for the callback is given to it 19:22:48 with some uglyness to allow the callbacks to take only one argument 19:39:53 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup (.*)", lambda x,y: bot.raw("PRIVMSG #esoteric :%s %s" % (y.group(1), y.group(1)))) 19:39:58 ~dup foo 19:39:59 foo foo 19:40:05 ~dup !cat ~dup 19:40:05 !cat ~dup !cat ~dup 19:40:08 ~dup !cat ~dup 19:40:08 !cat ~dup !cat ~dup 19:40:10 ~dup !cat ~dup 19:40:10 !cat ~dup !cat ~dup 19:40:12 ~dup !cat ~dup 19:40:12 !cat ~dup !cat ~dup 19:40:14 ~dup !cat ~dup 19:40:14 !cat ~dup !cat ~dup 19:40:16 ~dup !cat ~dup 19:40:17 !cat ~dup !cat ~dup 19:40:18 ~dup !cat ~dup 19:40:18 !cat ~dup !cat ~dup 19:40:22 ~dup !cat ~dup 19:40:22 !cat ~dup !cat ~dup 19:40:26 ~dup !cat ~dup 19:40:26 !cat ~dup !cat ~dup 19:40:30 ~dup !cat ~dup 19:40:30 !cat ~dup !cat ~dup 19:40:34 ~dup !cat ~dup 19:40:34 !cat ~dup !cat ~dup 19:40:37 ~exec self.raw_regex_queue.pop() 19:40:39 ~dup !cat ~dup 19:40:50 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~dup (.*)", lambda x,y: bot.raw("PRIVMSG #esoteric :%s %s" % (y.group(1), y.group(1)))) 19:41:11 ~dup !dup ~dup 19:41:11 !dup ~dup !dup ~dup 19:41:14 Huh? 19:41:29 huh? 19:41:35 !ps a 19:41:38 4 bsmntbombdood: ps 19:41:49 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 19:41:56 ~dup !dup ~dup 19:41:56 !dup ~dup !dup ~dup 19:41:58 ~dup !dup ~dup ~dup !dup ~dup 19:41:58 !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:42:00 ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:42:00 ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:42:07 :( 19:42:16 !dog 19:42:43 !dog !god pud~ 19:42:46 ~dup dog! 19:42:46 dog! dog! 19:42:55 !dog god! pud~ 19:42:58 ~dup !dog 19:42:58 !dog !dog 19:43:02 god! 19:43:07 lol 19:43:41 ~dup !dog pud~ 19:43:42 !dog pud~ !dog pud~ 19:43:44 ~dup god! ~dup 19:43:44 god! ~dup god! ~dup 19:43:57 ~dup dog! pud~ 19:43:57 dog! pud~ dog! pud~ 19:45:28 * SimonRC wibbles: http://video.google.com/videoplay?docid=-4024457809967804989&hl=en 19:45:34 !dog !dog god! pud~ 19:45:38 ~dup !dog god! 19:45:38 !dog god! !dog god! 19:45:42 !dog god! !dog 19:46:45 !bf_txtgen ~dup !dup ~dup 19:47:33 116 ++++++++++++++[>+++++++++>+++++++>++++++++>++<<<<-]>.>++.<---------.>>.>++++.+.<<.<.>>.>-.<++++++++++++++.<.<.-----. [171] 19:47:47 !daemon foo bf ++++++++++++++[>+++++++++>+++++++>++++++++>++<<<<-]>.>++.<---------.>>.>++++.+.<<.<.>>.>-.<++++++++++++++.<.<.-----. 19:47:50 ~dup !dup ~dup 19:47:50 !dup ~dup !dup ~dup 19:47:54 ~dup !dup ~dup ~dup !dup ~dup 19:47:54 !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:47:58 ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:47:58 ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup ~dup ~dup !dup ~dup !dup ~dup ~dup !dup ~dup 19:48:04 !foo 19:48:25 meh 19:49:42 ~exec print message 19:50:28 ~exec print self.message_re.match(message).group("message") 19:51:42 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~quine(.*)", lambda x : bot.raw("PRIVMSG #esoteric :%s" % bot.message_re.match(x).group("message"))) 19:51:46 ~quine 19:51:46 ~quine 19:51:49 ~quine foo 19:51:49 ~quine foo 19:53:44 Quines are fun 19:53:49 Except when they cheat. Cheater. 19:53:54 heh 19:54:07 I've never written a real quine :/ 19:54:17 Write one in /// 19:54:26 //? 19:54:38 In that language, you can write something that's both a Hello, world! program and a quine. 19:54:42 !help 19:55:03 Well? 19:55:05 !help 19:55:10 Bleh. 19:58:35 import inspect 19:58:35 class quine: 19:58:35 pass 19:58:35 print open(inspect.getsourcefile(quine)).read() 19:58:43 :P 20:00:15 Hmm... 20:00:24 It's not especially obvious how to make EgoBot. 20:01:07 Hmm... 20:03:00 Okay, here we go. 20:03:15 ? 20:04:00 Or not... 20:05:31 Oh, right. 20:06:03 I need to write a quine in my oisc 20:06:59 ihope: ?? 20:07:07 As in, how to compile it? 20:07:15 I think I figured it out. 20:08:56 Well, first you type `make` :P 20:09:06 Then you pray that you have the compendium of compilers necessary. 20:11:29 I thought I might have had to type something, seeing as how there's big delays near the beginning and it's possible to type something. 20:12:31 EgoBot is slow 20:12:52 ihope: egobotIRC.sh 20:13:15 bsmntbombdood: For the last fucking time, EgoBot is not slow, it's THROTTLED. 20:13:20 I know 20:13:31 * ihope throttles EgoBot 21:29:30 -!- CakeProphet has joined. 21:29:31 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 21:29:48 -!- EgoBot has joined. 21:37:38 ~cat foo 21:37:38 foo 21:38:16 ~cat !dup ~cat 21:38:16 !dup ~cat 21:38:19 Huh? 21:39:18 !daemon cat bf ,[.,] 21:39:30 !cat ~dup !cat 21:39:33 ~dup !cat 21:39:33 !cat !cat 21:39:37 !cat 21:39:51 ~cat !dup !dup cat 21:39:52 !dup !dup cat 21:39:55 Huh? 21:40:13 !cat ~dup !dup ~cat 21:40:17 ~dup !dup ~cat 21:40:17 !dup ~cat !dup ~cat 21:40:21 Huh? 21:40:37 !daemon dup bf ++++[->++++++++<]>>+[->,----------[>,----------]<[++++++++++<]>[.>]<[<]<.>>[.>]++++++++++.[<]+] 21:40:41 !cat ~dup !cat 21:40:45 ~dup !cat 21:40:45 !cat !cat 21:40:49 !cat 21:41:12 ~quine 21:41:12 ~quine 21:45:26 ~exec self.print_callbacks() 21:45:55 ~exec self.raw_regex_queue.pop() 21:46:28 ~exec self.register_raw(r"\S+ PRIVMSG #esoteric :~quine(.*)", lambda x : bot.raw("PRIVMSG #esoteric :!%s" % bot.message_re.match(x).group("message")[1:])) 21:46:32 ~quine 21:46:32 !quine 21:46:36 Huh? 21:46:49 !bf_txtgen ~quine 21:47:16 83 ++++++++++++++[>+++++++++>++++++++>++++++++><<<<-]>.>+.++++.------------.>--.<----. [334] 21:47:31 !deamon quine bf ++++++++++++++[>+++++++++>++++++++>++++++++><<<<-]>.>+.++++.------------.>--.<----. 21:47:34 Huh? 21:47:41 !daemon quine bf ++++++++++++++[>+++++++++>++++++++>++++++++><<<<-]>.>+.++++.------------.>--.<----. 21:47:45 ~quine 21:47:45 !quine 21:47:54 ... 21:48:16 !quine 21:48:20 ~quine 21:48:20 !quine 21:48:30 !daemon !quine bf ++++++++++++++[>+++++++++>++++++++>++++++++><<<<-]>.>+.++++.------------.>--.<----. 21:48:46 !ps a 21:49:05 ... 21:53:55 * bsmntbombdood frobnicates 22:02:22 * bsmntbombdood reads the mapreduce paper 22:07:16 -!- oerjan has joined. 22:09:07 hmmm 22:09:09 interesting 22:10:37 hmmm 22:10:58 * bsmntbombdood doesn't quite understand 22:21:56 What possessed them to write it in a language like C++ 22:26:20 I want a MapReduce cluster now 22:32:08 !ping GregorR 22:32:18 Hmm. 22:32:24 * ihope frobnicates, whatever that means 22:32:43 http://catb.org/jargon/html/F/frobnicate.html 22:32:57 ihope: memfrob(3) 22:33:01 Oh. 22:33:37 What a useless function. 22:33:45 :-P 22:34:03 yeah really 22:57:34 -!- CakeProphet_ has joined. 23:07:00 -!- CakeProphet has quit (Read error: 113 (No route to host)). 23:10:19 -!- CakeProphet__ has joined. 23:10:22 -!- CakeProphet__ has changed nick to CakeProphet. 23:12:56 ihope: RAAAR 23:13:32 How do you work EgoBot? socat seems to be mad at me. 23:14:25 I've only used netcat :P 23:16:29 netcat might well work. 23:18:12 /opt/netcat/bin/netcat -e egobotIRC.sh 23:18:43 I predict: socat EXEC:./egobotIRC.sh TCP4:irc.freenode.net:6667 23:18:52 But I haven't used socat for it ;) 23:20:41 -!- ihope has changed nick to i. 23:20:46 -!- i has changed nick to ihope. 23:20:57 Well, I certainly didn't expect that. 23:20:59 * oerjan wonders, given this discussion, if he is doing something wrong by connecting IrpBot just with the Haskell Network module. 23:21:31 -!- tgwizard has quit (Remote closed the connection). 23:24:52 -!- FabioNET has quit (Client Quit). 23:25:12 my bot connects with winsock! 23:25:17 -!- oklofok has changed nick to oklopol. 23:25:22 oerjan: What's IrpBot? 23:25:38 #irp 23:25:42 The bot I made for the #irp channel. 23:26:05 And that command isn't really working, even-- 23:26:10 I was too lazy to use BSD sockets, so I just made it communicate over stdin/stdout :P 23:26:11 * ihope suddenly decides to use netcat 23:26:20 * bsmntbombdood wrote his bot with sockets 23:26:29 A concept which ihope seems to be having problems with :P 23:26:43 -!- CakeProphet_ has quit (Success). 23:26:44 Well, I don't have netcat, exactly. 23:26:52 Right, so socat/netcat is for wrapping standard I/O? 23:27:12 Just wait 3.141592653589 seconds and I'll get back to you on that. 23:27:28 oerjan: Yes. 23:27:32 I just used what came with the example bot source on the haskell wiki. 23:38:17 make's telling me to stop! 23:38:25 How rude. 23:39:57 You know, it just said "Stop." Just like that. 23:40:17 I know. Just give it a good beating. 23:41:32 -!- tgwizard has joined. 23:54:03 ~dup !cat ~dup 23:54:04 !cat ~dup !cat ~dup 23:54:54 ... 23:55:15 ~exec __import__("time").sleep(300) 23:55:26 ~cat I'm alive! 23:55:26 I'm alive! 23:55:29 woo 23:58:26 ~exec __import__("time").sleep(60); self.raw("PRIVMSG #esoteric :foo") 23:59:26 foo 2007-01-05: 00:04:33 -!- EgoBot has quit (Read error: 54 (Connection reset by peer)). 00:04:46 -!- EgoBot has joined. 00:05:18 EgoBot: EgoBot EgoBot EgoBot EgoBot EgoBot EgoBot EgoBot EgoBot 00:09:34 dude, is bsmnt_bot running on netcat? 00:09:38 that's awesome 00:09:45 no 00:09:52 ah, k 00:09:55 sockets 00:10:00 awesome. 00:15:31 -!- bsmnt_bot has quit (Remote closed the connection). 00:15:37 -!- bsmnt_bot has joined. 00:15:48 ~raw PRIVMSG #esoteric :good 00:15:49 good 00:16:07 ~exec self.raw("PRIVMSG #esoteric :good") 00:16:08 good 00:16:57 ~ctcp #esoteric ACTION is awesome 00:16:57 ACTION 00:17:02 or not 00:18:15 bsmntbombdood: You might want to add something to save your list of added patterns to a file to be performed on startup. 00:18:27 yeah 00:18:46 * bsmntbombdood wonders if you can pickle functions 00:19:13 I was thinking just of the command text. 00:19:51 pickle.PicklingError: Can't pickle at 0xb7bcc5dc>: it's not found as __main__. 00:20:17 -!- bsmnt_bot has quit (Remote closed the connection). 00:21:10 -!- bsmnt_bot has joined. 00:21:19 ~ctcp #esoteric ACTION tests 00:21:19 ACTION 00:21:30 It would also be a good idea to make it a text file so you can edit out patterns if something goes horribly wrong. :) 00:21:52 -!- bsmnt_bot has quit (Remote closed the connection). 00:21:59 * jix is in love :) 00:21:59 bsmntbombdood: function pickling? 00:22:06 yes 00:22:11 -!- bsmnt_bot has joined. 00:22:14 ~ctcp #esoteric ACTION tests 00:22:14 ACTION 00:22:30 Is that when you have an injective mapping from a function into brine? 00:22:44 pickle is the python object serializer 00:22:45 I believe the ACTION is surrounded by \001 characters. 00:22:54 oerjan: yeah 00:23:11 And you should send the word "tests" as well. 00:23:30 no shit 00:23:34 r".* PRIVMSG \S* :%sctcp (.*) (.*)" % self.COMMAND_CHAR 00:23:38 Also, make doesn't seem to have left behind a binary called "netcat". 00:23:52 -!- bsmnt_bot has quit (Remote closed the connection). 00:23:58 -!- bsmnt_bot has joined. 00:24:00 ~ctcp #esoteric ACTION tests 00:24:01 ACTION 00:24:09 Woot. 00:24:13 -!- CakeProphet has quit (No route to host). 00:24:23 -!- bsmnt_bot has quit (Remote closed the connection). 00:24:29 -!- bsmnt_bot has joined. 00:24:31 ~ctcp #esoteric ACTION tests 00:24:31 * bsmnt_bot 00:24:49 -!- bsmnt_bot has quit (Remote closed the connection). 00:24:59 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 00:25:07 -!- bsmnt_bot has joined. 00:25:10 ~ctcp #esoteric ACTION tests 00:25:11 * bsmnt_bot tests 00:25:14 finally 00:25:27 \S instead of . 00:25:41 Buh? 00:25:54 Buh? 00:26:02 What? 00:26:10 what? 00:26:24 \S goes where? 00:26:29 Is there an echo here? 00:26:37 r".* PRIVMSG \S* :%sctcp (\S+) (.+)" % self.COMMAND_CHAR 00:26:44 is what the ctcp regex should be 00:27:32 -!- bsmnt_bot has quit (Remote closed the connection). 00:27:36 I see. 00:27:45 -!- bsmnt_bot has joined. 00:27:50 ~ctcp #esoteric ACTION is awesome 00:27:51 * bsmnt_bot is awesome 00:27:55 mmk 00:28:27 ~ctcp #esoteric ACTION is awesome 00:28:27 * bsmnt_bot is awesome 00:29:29 -!- RodgerTheGreat has quit. 00:29:39 !ctcp ##quantum ACTION is awesome 00:29:43 Huh? 00:29:47 ~ctcp ##quantum ACTION is awesome 00:29:53 Awesome. 00:29:58 did it? 00:30:16 Yep. 00:30:24 Of course, ##quantum was -n'd. 00:32:05 ~exec self.register_raw(r"\S+ PRIVMSG \S+ :~join (.*)", lambda x, y : bot.raw("JOIN :%s" % y.group(1))) 00:32:23 ~raw PART ##quantum :bye bye 00:32:32 er 00:32:39 ~join ##quantum 00:33:07 ~raw 00:33:30 I somehow feel plain old ~raw won't do much. 00:33:41 you are correct 00:33:53 ~raw POKE ihope 00:34:00 :kornbluth.freenode.net 421 bsmnt_bot POKE :Unknown command 00:35:41 Yay. 00:36:29 ~ctcp ihope POKE hard 01:05:16 I wonder how MapReduce is used for machine learning 01:06:31 battlin' bots 01:07:49 ? 01:43:01 -!- tgwizard has quit (Remote closed the connection). 01:52:47 -!- ihope_ has joined. 01:54:48 -!- CakeProphet__ has joined. 01:54:52 -!- CakeProphet__ has changed nick to CakeProphet. 02:00:23 -!- ihope has quit (Read error: 145 (Connection timed out)). 02:05:50 woot, I wrote a quine in python 02:06:03 source = 'source = %r\nprint source %% source\n' 02:06:03 print source % source 02:07:30 what does % do? 02:07:38 like printf 02:08:00 print "%s" % "foo" === printf("%s", "foo") 02:08:24 i don't think your quine quite works. 02:08:44 ? 02:08:51 have you tested it? 02:08:54 yeah 02:09:06 %r? 02:10:15 %r uses repr() instead of str() 02:10:25 -!- CakeProphet__ has joined. 02:10:36 ah, i confused the \n before ' and the actual newline after 02:10:48 $ python quine.py > output 02:10:48 $ diff -u quine.py output 02:10:48 $ 02:11:18 -!- CakeProphet has quit (Read error: 113 (No route to host)). 02:11:19 -!- CakeProphet__ has changed nick to CakeProphet. 02:13:08 * bsmntbombdood feels leet 02:26:50 ~join #awos 02:28:03 * bsmnt_bot is better than fatso 02:28:28 oops 02:30:00 main = putStr s >> putStrLn (show s) where s = "main = putStr s >> putStrLn (show s) where s = " 02:30:41 * oerjan feels leet too 02:36:17 -!- ihope_ has quit (Read error: 131 (Connection reset by peer)). 02:37:32 although the %r in Python and show in Haskell make quines in those languages almost too easy. 02:38:18 ah, that's right. 02:38:41 main = putStr s >> print s where s = "main = putStr s >> print s where s = " 02:40:27 print (lambda s : s+repr(s)+')')("print (lambda s : s+repr(s)+')')(") 02:40:49 or.. 02:41:41 print (lambda x:x%x)("(lambda x:x%%x)(%r)") 02:41:47 Same thing. 02:41:54 just neater looking :D 02:42:07 you forgot the print in the string. 02:42:59 and, you fail 02:43:02 ah. 02:43:17 print (lambda x:x%x)("print (lambda x:x%%x)(%r)") 02:43:28 s/"/'/ 02:44:02 print (lambda x:x%x)('"print (lambda x:x%%x)(%r)"') :P 02:44:15 >.> 02:44:17 ait.. 02:44:20 why single-quotes? 02:44:32 because that's what repr uses 02:44:44 repr doesn't specifically use repr. 02:44:45 er... 02:44:47 single-quote 02:44:51 it defaults to single. 02:44:52 but not always. 02:45:01 (lambda x:x%x)("print (lambda x:x%%x)(%r)") == "print (lambda x:x%x)('print (lambda x:x%%x)(%r)')" 02:45:14 no quinage 02:49:14 print open(__import__("inspect").getsourcefile(lambda : 0)).read() 02:49:23 :P 02:49:33 pfft 02:51:17 * CakeProphet refuses to use single quotes unless absolutely nessicary. 02:51:24 They feel strange. 02:52:36 !dup haskhd 02:52:40 Huh? 02:52:55 !help daemon 02:52:58 Use: daemon Function: start a daemon process. 02:53:28 CakeProphet: They are never absolutely neccisary 02:53:46 except in quines 02:54:07 s/quines/that quine/ 02:54:07 only short quines. 02:57:41 make a quine in python shorter than: 02:57:49 x='x=%r\nprint x%%x\n';print x%x 02:57:53 (30 chars) 02:58:13 erm 02:58:48 x='x=%r;print x%%x\n';print x%x 03:01:19 pfft... I don't consider it a disqualification if the quote is selected arbitrarily by the interpreter based on the innards of the string. 03:01:30 It's the essence, not the output. :P 03:02:07 make that x='x=%r;print x%%x';print x%x 03:02:19 29 chars 03:17:32 !daemon lol glass {M[m(_o)O!(_i)I! (_i)i.? " " 1 (_o)o.?(_o)o.?(_o)o.?]} 03:17:37 !lol hahahahahaha 03:17:38 -!- EgoBot has quit (Read error: 54 (Connection reset by peer)). 03:17:41 :P 03:17:48 -!- EgoBot has joined. 03:18:09 heyy! 03:18:14 i made a quine too :DDD 03:18:26 def a(b): 03:18:27 print b+b[4:6]+chr(34)+chr(34)+chr(34)+b[:103]+"+')'"+chr(92)+'n'+chr(34)+chr(34)+chr(34)+')' 03:18:27 a("""def a(b): 03:18:27 print b+b[4:6]+chr(34)+chr(34)+chr(34)+b[:103]+"+')'"+chr(92)+'n'+chr(34)+chr(34)+chr(34)+')'\n""") 03:18:32 a long one 03:18:33 Making a quine in ORK would be super difficult. 03:18:41 * CakeProphet likesshort quines. 03:18:46 I suck at making quines though. 03:19:04 yeah, but i couldn't think of a new short way to make a quine 03:19:09 and that's my first 03:19:36 i tried to make one in c++ tho, but it get's very big since a c++ program has lot 03:19:41 's of code overhead 03:24:29 Like Glass :D 03:24:52 In glass... you have to instantiate and get and call a bunch of crap to do just the simplest of things :P 03:31:36 compared to brainfuck or unlambda this is all peanuts, of course. 03:37:33 I wrote a quine in ORK. 03:39:37 http://www.codu.org/eso/ < I have recreated my esopage, including ORK readme and the likes. 03:42:18 GregorR: What do you get when you execute that page? 03:42:44 Hello, World! 03:42:51 that's it? 03:42:55 The only program I ever wrote in 2L :P 03:42:59 2L is really difficult X_X 03:43:15 awfully long for a hello world... 03:43:34 Feel free to read the 2L readme. 03:44:44 :(){ :|:&};: 03:45:38 while 1: __import__("os").fork() 03:45:47 Why is c and d of the ORK quine split in two? Is there a length limit on strings? 03:46:24 -!- digital_me_ has joined. 03:46:36 I suppose that goes for b,c,d as a whole. 03:47:02 No, there's no length limit. I have no idea why I did it like that :P 03:47:21 ~cat fooey 03:47:37 ~exec self.print_callbacks() 03:49:07 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~cat (.*)", lambda x,y : bot.raw("PRIVMSG %s :%s" % (y.group(1), y.group(2)))) 03:49:10 ~cat fooey 03:49:10 fooey 03:58:26 -!- digital_me_ has quit ("leaving"). 04:47:53 -!- CakeProphet has quit (Read error: 110 (Connection timed out)). 07:46:43 -!- digital_me has quit ("Lost terminal"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:36:44 -!- oerjan has quit ("Good night"). 08:47:07 -!- oklofok has joined. 08:47:20 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 08:51:52 -!- oklopol has joined. 08:51:53 -!- oklofok has quit (Read error: 54 (Connection reset by peer)). 09:01:07 -!- oklofok has joined. 09:01:53 -!- oklopol has quit (Read error: 131 (Connection reset by peer)). 11:14:18 -!- tgwizard has joined. 12:22:10 -!- jix has joined. 12:32:47 -!- jix__ has joined. 12:42:10 -!- jix has quit (Read error: 110 (Connection timed out)). 13:50:40 -!- oklofok has quit (Read error: 60 (Operation timed out)). 15:10:57 -!- ihope has joined. 15:11:12 The nice thing about ##quantum is you can tell who's identified and who's not. 15:11:19 Sort of. 15:11:40 The identified people are opped, the unidentified people aren't. 15:11:49 Except the only unidentified person is bsmnt_bot. 15:12:02 Now, let's see here... 15:12:03 !help 15:12:06 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 15:12:08 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 15:12:11 Yay, it works. 16:03:45 ~cat test 16:03:45 test 16:06:24 !rhotor x/"test" 16:06:25 rhotor-hi: ./Parser.hs:(29,0)-(46,39): Non-exhaustive patterns in function tokenize 16:06:34 !rhotor 16:06:37 rhotor-hi: ./Parser.hs:(29,0)-(46,39): Non-exhaustive patterns in function tokenize 16:07:54 !rhotor x/%"test" 16:07:57 tes 16:09:03 !rhotor http://rafb.net/p/K3yUA865.txt 16:09:05 tes 16:10:24 !rhotor http://files.method-missing.org/evil.rho 16:10:29 rhotor-hi: ./Parser.hs:(29,0)-(46,39): Non-exhaustive patterns in function tokenize 16:10:38 -!- ihope has quit (Read error: 110 (Connection timed out)). 16:10:48 !rhotor http://files.method-missing.org/evil.rho 16:10:55 ~cat !rhotor http://files.method-missing.org/evil.rho 16:10:55 !rhotor http://files.method-missing.org/evil.rho 16:10:59 ~cat !rhotor http://files.method-missing.org/evil.rho 16:10:59 !rhotor http://files.method-missing.org/evil.rho 16:11:05 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:05 !rhotor http://files.method-missing.org/evil.rho 16:11:13 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:14 !rhotor http://files.method-missing.org/evil.rho 16:11:18 hrhr bots are stupid 16:11:19 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:19 !rhotor http://files.method-missing.org/evil.rho 16:11:27 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:27 !rhotor http://files.method-missing.org/evil.rho 16:11:31 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:31 !rhotor http://files.method-missing.org/evil.rho 16:11:35 ~cat !rhotor http://files.method-missing.org/evil.rho 16:11:35 !rhotor http://files.method-missing.org/evil.rho 16:11:39 rhotor-hi: Prelude.head: empty list 16:12:22 -!- digital_me has joined. 16:12:34 *** SchtBAMPF! *** 16:12:55 ?? 16:13:13 That was a cool teleporting noise. 16:13:32 anyway, I was going to share this: http://imgs.xkcd.com/comics/youtube.png 16:13:45 old...... 16:16:46 -!- jix__ has changed nick to jix. 16:23:17 I just recognised the art style and looked at the URL. 16:23:21 D'oh. 17:03:42 -!- oklopol has joined. 17:08:59 -!- feoh has joined. 17:09:30 -!- feoh has left (?). 17:17:32 -!- ihope has joined. 17:36:09 -!- RodgerTheGreat has joined. 18:03:33 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 19:55:08 !help 19:55:12 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 19:55:13 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 19:55:16 Yep, still working. 19:55:17 !fooof 19:55:22 Huh? 19:55:23 what is? 19:55:28 EgoBot. 19:55:36 ~foo 19:55:44 ~cat !dup ~cat 19:55:45 !dup ~cat 19:55:47 Huh? 19:55:59 !cat ~dup !cat 19:56:01 Huh? 19:56:14 !daemon cat bf ,[.,] 19:56:28 -!- gnidan has joined. 20:09:14 -!- RodgerTheGreat_ has joined. 20:25:43 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)). 20:30:31 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 20:48:36 !ps 20:48:39 2 pgimeno: ps 20:48:44 !ps d 20:48:48 1 bsmntbombdood: daemon cat bf 20:48:50 2 pgimeno: ps 20:50:32 !help ps 20:50:34 Use: ps Function: display the current processes 20:50:45 duh 20:52:03 ~cat EgoBot is stupid 20:52:03 EgoBot is stupid 20:52:11 pwnt 20:58:29 ~cat !cat ~cat ~cat ~cat !cat !cat 20:58:29 !cat ~cat ~cat ~cat !cat !cat 20:58:32 ~cat ~cat ~cat !cat !cat 20:58:33 ~cat ~cat !cat !cat 20:58:45 Indeed, I didn't expect that to work. 20:59:37 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:38 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:42 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:43 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:46 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:47 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:50 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:51 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:54 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:55 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:58 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 20:59:59 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:02 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:03 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:06 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:07 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:10 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:10 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:14 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:15 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:18 ~cat !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:18 !cat ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:22 ~cat !cat ~cat !cat ~cat !cat ~cat !cat 21:00:23 !cat ~cat !cat ~cat !cat ~cat !cat 21:00:26 ~cat !cat ~cat !cat ~cat !cat 21:00:27 !cat ~cat !cat ~cat !cat 21:00:30 ~cat !cat ~cat !cat 21:00:31 !cat ~cat !cat 21:00:34 ~cat !cat 21:00:34 !cat 21:00:41 fun 21:01:06 woah 21:05:26 ~dup ~dup 21:05:30 !dup !dup 21:05:34 Huh? 21:05:37 Mmh. 21:06:37 while __import__("os").fork(): __import__("os").fork() 21:12:01 -!- CakeProphet has joined. 21:15:21 bsmntbombdood: is that really a good idea? 21:17:56 -!- pgimeno has changed nick to GatoRandi. 21:18:17 -!- GatoRandi has changed nick to pgimeno. 21:19:52 -!- pgimeno has changed nick to GatoRandi. 21:20:52 -!- GatoRandi has changed nick to pgimeno. 21:21:32 (sorry) 21:22:54 ihope: of course 21:23:12 What's it do, exactly? 21:23:29 takes your system down :) 21:23:41 That's what I'd guessed... 21:24:18 I just noticed, though, that that line didn't start with a ~ 21:24:31 Probably not as bad as ~exec while __import__("os").fork(): __import__("os").fork() 21:24:40 duh... 21:24:55 ~exec while __import__("os").fork(): __import__("os").fork() 21:25:23 the box has ulimits set correctly 21:25:23 while 1: __import__("os").fork() 21:25:33 GregorR: Mine grows faster 21:25:44 I doubt that. 21:26:10 why? 21:26:20 Every fourth fork of yours is wasted. 21:26:20 it will grow faster if the new proccesses keep forking 21:26:30 ? 21:26:46 The condition for the while. fork() returns a non-true value (0) for the child. 21:26:51 So that child won't fork anymore. 21:27:13 fine, while not __import__("os").fork(): __import__("os").fork() 21:27:22 Now the parent won't fork anymore. 21:27:29 So it won't do anything? 21:27:38 import os 21:27:47 x=os.fork() 21:27:48 ihope: No, it'll still fork off into infinity, but a simple while-true loop will fork faster. 21:27:52 if x: os.fork() 21:27:55 else: os.fork() 21:28:14 no 21:28:19 bsmnt_bot: Now that would only fork twice :P 21:28:22 Erm 21:28:25 bsmntbombdood: ^^^ 21:28:32 def f(): 21:28:38 x=os.fork() 21:28:45 bsmntbombdood: A simple while-true loop would fork just as fast if not faster. 21:28:46 if x: os.fork() 21:28:51 else: os.fork() 21:28:53 f() 21:29:16 no 21:29:21 def f(): 21:29:24 x=os.fork() 21:29:30 if x: f() 21:29:36 else: f() 21:29:48 Fork fork fork fork fork fork fork fork goto. 21:29:51 I'm dumbfounded by the fact that you seem to think that would be faster than a while-true loop. 21:29:54 meh whatever 21:30:03 :(){ :|:&};: 21:30:12 +[Y] 21:30:28 and the brainfork! 21:30:48 ihope: +[Y+] will fork faster :) 21:31:04 GregorR: it will? 21:31:18 Y returns 0 for the child, just like fork(), so you have every-other fork dropping out of the loop. 21:31:30 fork you 21:31:32 In fact, come to think of it, yours won't fork to any significant degree. 21:31:40 The children will just keep on dying. 21:31:57 I'm going to quote you. 21:32:07 Muahaha... 21:32:17 Y'know, I'm in that channel. 21:32:30 Yes, I do. 21:34:09 ~exec while True: __import__("os").fork() 21:34:24 Haha, I win ^^ 21:34:43 ~exec while __import__("os").fork(): __import__("os").fork() 21:35:13 ~cat lookey! i'm still alive! 21:35:13 lookey! i'm still alive! 21:36:18 every third fork is wasted i think 21:36:50 one fork in, 3 out, 1 dies 21:37:09 oklopol: That'd be every fourth, and that's what I told him, but he apparently won't believe me :P 21:37:31 fork you all 21:38:15 Now, I take it at more than -1 of you have seen http://dnptbky.ytmnd.com/ 21:38:18 every third fork created dies 21:38:50 why would that be every forth? 21:38:52 * GregorR taps his head. 21:39:01 Tap? 21:39:11 ihope: Yes, I've seen that, a friend of mine made it :P 21:41:16 GregorR: Please respect our customers in south america 21:42:18 I respect them just as much as I respect everyone else. Namely, none. 21:44:54 -!- tgwizard has quit (Remote closed the connection). 21:50:55 ~exec pfoaf 21:52:52 ~exec __import__("time").sleep(300); self.raw("PRIVMSG #esoteric :%s" % "NFQS".encode("rot13")) 21:55:39 -!- tgwizard has joined. 21:57:52 ASDF 21:59:36 ~exec __import__("time").sleep(500); self.raw("PRIVMSG #esoteric :the world will end in %s days" % __import__("random").randint(66,6666)) 22:07:56 the world will end in 5668 days 22:08:21 ~exec __import__("time").sleep(__import__("random").randint(500,3000)); self.raw("PRIVMSG #esoteric :blah") 22:09:04 It's waiting... 22:09:12 (Is it?) 22:09:17 ? 22:09:44 * bsmntbombdood implements ~ps 22:09:53 Is it going to output anything? 22:10:00 yeah 22:10:34 When? 22:11:08 in __import__("random").randint(500,3000) seconds... 22:14:01 Seconds... 22:14:40 -!- gnidan has quit ("leaving"). 22:18:39 blah 22:18:54 blah! 22:19:42 I want a ~horriblysandboxedexec command that I can use. 22:20:07 -!- jix has joined. 22:21:21 -!- bsmnt_bot has quit (Remote closed the connection). 22:21:25 new code 22:21:33 -!- bsmnt_bot has joined. 22:21:48 ~exec __import__("time").sleep(100) 22:21:55 ~exec print self.commands_running 22:22:05 -!- bsmnt_bot has quit (Remote closed the connection). 22:22:21 -!- bsmnt_bot has joined. 22:22:23 ~exec __import__("time").sleep(100) 22:22:25 ~exec print self.commands_running 22:22:58 ~exec print [(i[0],i[2]) for i in self.commands_running] 22:23:09 "It is recommended to backup valuable data before proceeding." 22:23:11 coool 22:23:17 ~exec print [(i[0],i[2]) for i in self.commands_running] 22:23:19 But I don't have any valuable data! How can I do that? 22:23:37 ~exec print [(i[0],time.time() - i[2]) for i in self.commands_running] 22:23:47 now for ~ps 22:23:53 ~exec print [(i[0],time.time() - i[2]) for i in self.commands_running] 22:23:54 ~ps 22:24:01 not implemented yet 22:24:06 how should I ouput it? 22:24:13 But you said "now"... 22:24:16 Meanie. 22:24:21 now to code it 22:24:24 ~exec print [(i[0],time.time() - i[2]) for i in self.commands_running] 22:24:55 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 22:24:56 [('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running])', 0.00049591064453125)] 22:25:02 cool, eh? 22:25:30 ~exec __import__("time").sleep(100); print "done" 22:25:32 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 22:25:32 [('__import__("time").sleep(100); print "done"', 1.8968710899353027), ('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running])', 0.00046992301940917969)] 22:26:15 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 22:26:15 [('__import__("time").sleep(100); print "done"', 44.46694016456604), ('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running])', 0.00042605400085449219)] 22:26:48 I wonder how to implement ~kill... 22:28:11 -!- bsmnt_bot has quit (Remote closed the connection). 22:28:20 -!- bsmnt_bot has joined. 22:28:27 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 22:28:27 [('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running])', 0.00048398971557617188)] 22:33:26 alas, the people in #python say there's no way to do it 22:33:54 Everything can be done, given enough time. 22:34:32 And remember, "forever" just means "for a really long time". 22:41:17 seems like there should be a way to kill a thread 22:50:33 Have your thread check some variable every second thing it does. 22:55:10 It's executing the code that I give it though... 22:57:01 Use time slicing and all that jazz. 22:57:06 ? 22:57:59 I don't want to right my own multitasking operating system, and i don't think that's even possible in python 22:58:17 s/right/write/ 22:58:18 It is. 22:58:23 :P 22:58:34 how? 22:58:51 Dunno really... 22:59:11 Threads? 22:59:13 psuedothreads? 22:59:33 Python's Turing-complete, isn't it? 22:59:37 It uses threads right now for ~exec 22:59:37 Unlike C. 22:59:40 :-) 22:59:49 How is c not turing complete? 23:00:06 Finite memory. 23:00:11 sizeof(void *) is defined to be finite. 23:00:18 Yeah, something like that. 23:00:19 Therefore no C implementation can access infinite memory. 23:00:20 then python isn't turing complete 23:00:30 It is. 23:00:30 Isn't it? 23:00:40 The python /language/ is, the python /implementation/ is (of course) not. 23:02:11 I think we can consider C turing complete 23:02:36 But it isn't, is it? 23:02:53 nothing can actually be turing complete 23:03:11 Languages can be, implementations can't 23:04:01 Any language with pointers can't be turing complete then 23:04:06 it can 23:04:31 when the pointers can be arbitrary(wrong spelling for sure) large 23:04:49 which they can't be in any real language 23:04:57 define real language 23:05:06 they can't be in any implementation 23:05:12 but they can be in the specification 23:05:32 jix: that'd be "arbitrarily". 23:05:52 ihope: thx 23:05:55 -!- yoshibot has quit. 23:06:08 And pointers can be arbitrarily large, if you have infinite memory. 23:09:55 C plus the concept of infinity is TC, since sizeof(void *) could be infinity. 23:11:04 C plus ordinal numbers! 2007-01-06: 00:12:36 -!- tgwizard has quit (Remote closed the connection). 00:47:30 -!- Sgeo has joined. 00:53:59 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 01:16:47 -!- anonfunc has joined. 01:19:50 -!- Sukoshi has quit ("ä»®åˆã‚ãªå‡ºã‚‹ã¨ã„ã†ã“ã¨ã‚’ã—ã¦ã„ã‚‹ã‘ã©ã€‚1ï¼åˆ†ã¾ã§å¾…ã£ã¦ã€‚ã©ã†ã‚‚。"). 01:24:03 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 01:31:19 -!- CakeProphet has joined. 01:57:43 ~cat foo 01:57:52 ummm 01:58:12 ~exec self.print_callbacks() 01:58:16 oh 01:59:16 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :(.*)", lambda x,y : bot.raw("PRIVMSG %s :%s" % (y.group(1), y.group(2)))) 01:59:22 ~cat foo 01:59:22 ~cat foo 01:59:55 ~exec self.raw_regex_queue.pop() 01:59:55 ~exec self.raw_regex_queue.pop() 02:00:03 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~cat (.*)", lambda x,y : bot.raw("PRIVMSG %s :%s" % (y.group(1), y.group(2)))) 02:00:07 ~cat foo 02:00:07 foo 02:02:28 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 02:02:28 [('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running])', 0.00041484832763671875)] 02:02:37 urgh, I want ~kill 02:07:44 -!- bsmnt_bot has quit (Remote closed the connection). 02:07:47 -!- bsmnt_bot has joined. 02:07:50 ~ps 02:08:04 ~exec __import__("time").sleep(100) 02:08:06 ~ps 02:08:06 -!- bsmnt_bot has quit (Remote closed the connection). 02:08:26 -!- bsmnt_bot has joined. 02:08:28 ~ps 02:08:30 ~exec __import__("time").sleep(100) 02:08:32 ~ps 02:08:32 0: ('__import__("time").sleep(100)', 1168048899.352859) 02:09:50 -!- bsmnt_bot has quit (Remote closed the connection). 02:10:01 -!- bsmnt_bot has joined. 02:10:03 ~exec __import__("time").sleep(100) 02:10:04 ~ps 02:10:05 0: '__import__("time").sleep(100)' 1.35289692879 02:10:22 hmm, what should the format be 02:10:40 -!- bsmnt_bot has quit (Remote closed the connection). 02:10:54 -!- bsmnt_bot has joined. 02:10:55 ~exec __import__("time").sleep(100) 02:11:00 ~exec __import__("time").sleep(10) 02:11:02 ~ps 02:11:02 0: '__import__("time").sleep(100)', 6.17545199394 seconds 02:11:02 1: '__import__("time").sleep(10)', 2.13798308372 seconds 02:11:44 ~ps 02:11:45 0: '__import__("time").sleep(100)', 48.8571178913 seconds 02:11:49 -!- bsmnt_bot has quit (Remote closed the connection). 02:11:56 -!- bsmnt_bot has joined. 02:11:58 ~exec __import__("time").sleep(100) 02:12:00 ~ps 02:12:00 0: '__import__("time").sleep(100)', 1.68 seconds 02:12:05 ~ps 02:12:05 0: '__import__("time").sleep(100)', 6.57 seconds 02:12:08 cool 02:13:04 ~ps 02:13:04 0: '__import__("time").sleep(100)', 65.71 seconds 02:13:08 ~exec __import__("time").sleep(123) 02:13:10 ~ps 02:13:10 0: '__import__("time").sleep(100)', 71.65 seconds 02:13:10 1: '__import__("time").sleep(123)', 1.35 seconds 02:13:20 ~exec __import__("time").sleep(105) 02:13:21 ~ps 02:13:22 0: '__import__("time").sleep(100)', 83.13 seconds 02:13:22 1: '__import__("time").sleep(123)', 12.83 seconds 02:13:22 2: '__import__("time").sleep(105)', 1.30 seconds 02:14:44 ~ps 02:14:44 0: '__import__("time").sleep(123)', 95.86 seconds 02:14:45 1: '__import__("time").sleep(105)', 84.33 seconds 02:16:31 hmm 02:17:20 pids should really stay the same, shouldn't they 02:23:18 -!- bsmnt_bot has quit (Remote closed the connection). 02:23:20 -!- bsmnt_bot has joined. 02:23:24 ~exec pass 02:23:33 -!- bsmnt_bot has quit (Remote closed the connection). 02:23:39 -!- bsmnt_bot has joined. 02:23:41 ~exec pass 02:23:43 ~exec pass 02:23:53 ~exec time.sleep(10) 02:24:02 ~exec print os.getpid() 02:28:00 still no killing of threads :( 02:29:10 -!- ihope has quit (Connection timed out). 02:34:14 arg 02:35:28 ~exec asdf 02:35:41 -!- bsmnt_bot has quit (Remote closed the connection). 02:35:44 -!- bsmnt_bot has joined. 02:35:46 ~exec asdf 02:35:59 ~exec while 1: os.fork() 02:36:16 ~ps 02:36:22 ... 02:36:34 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[2]) for i in self.commands_running]) 02:36:49 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[1]) for i in self.commands_running]) 02:36:49 [('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[1]) for i in self.commands_running])', 0.00040602684020996094)] 02:36:57 oh duh 02:37:00 ~exec while 1: os.fork() 02:37:02 ~ps 02:37:07 ~exec self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[1]) for i in self.commands_running]) 02:37:09 [('self.raw("PRIVMSG #esoteric :%s" % [(i[0],time.time() - i[1]) for i in self.commands_running])', 0.00045800209045410156)] 02:37:18 !ps 02:37:23 2 bsmntbombdood: ps 02:38:46 -!- bsmnt_bot has quit (Remote closed the connection). 02:38:51 !ps 02:38:52 -!- bsmnt_bot has joined. 02:38:54 !ps 02:38:55 2 bsmntbombdood: ps 02:38:57 2 bsmntbombdood: ps 02:38:58 ~ps 02:38:58 None 02:39:25 ~exec self.verbose = Falso 02:39:27 ~exec self.verbose = False 02:39:30 ~ps 02:39:49 ~exec self.verbose = True 02:39:51 ~ps 02:39:51 None 03:13:51 -!- oerjan has joined. 03:49:24 -!- oerjan has quit ("leaving"). 04:53:05 -!- oerjan has joined. 05:30:16 -!- Sartak has joined. 05:30:28 -!- Sartak has quit (Client Quit). 05:38:41 -!- digital_me has quit (Read error: 110 (Connection timed out)). 05:50:12 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 06:30:52 cy'all later 06:31:06 -!- RodgerTheGreat has quit. 06:36:48 ~ps 06:36:48 None 06:37:19 ~exec __import__("time").sleep() 06:37:21 ~ps 06:37:21 None 06:37:32 ~exec __import__("time").sleep(10) 06:37:33 ~ps 06:37:34 0: '__import__("time").sleep(10)', 1.21 seconds 06:37:37 woot 06:39:26 * bsmntbombdood feels leet 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:47:12 -!- oerjan has quit ("leaving"). 10:30:08 -!- tgwizard has joined. 13:07:22 -!- puzzlet_ has joined. 13:10:53 -!- CakeProphet has quit (Read error: 113 (No route to host)). 13:11:22 -!- CakeProphet has joined. 13:13:34 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)). 14:03:40 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 14:03:49 -!- CakeProphet has joined. 14:15:23 -!- CakeProphet has quit ("haaaaaaaaaa"). 14:38:00 -!- jix has joined. 15:29:20 -!- tgwizard has quit (Remote closed the connection). 15:36:22 -!- tgwizard has joined. 15:38:00 -!- ihope has joined. 17:26:35 -!- RodgerTheGreat has joined. 18:14:17 -!- Sgeo has joined. 18:37:35 -!- CakeProphet has joined. 18:57:13 -!- calamari has joined. 18:58:42 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 19:03:51 -!- jix has joined. 19:19:25 -!- CakeProphet_ has joined. 19:19:27 -!- CakeProphet has quit (Connection reset by peer). 19:19:31 -!- CakeProphet_ has changed nick to CakeProphet. 20:05:47 -!- mtve has joined. 21:01:30 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 21:01:38 -!- RodgerTheGreat has joined. 22:48:22 -!- tgwizard has quit (Remote closed the connection). 23:10:46 ps 23:10:51 ~ps 23:10:51 None 23:11:44 ~~~~~~~~~~~~~~~~~~ 23:15:16 ~ps 23:15:17 None 23:15:20 Hmm. 23:15:22 ~ps 23:15:22 None 23:15:23 ~ps 23:15:24 None 23:15:25 Aww. 23:15:26 what? 23:15:36 I was hoping one ~ps would catch the other. :-) 23:15:38 only ~exec commands go in ps 23:15:43 Oh. 23:15:51 ~exec __import__("time").sleep(10) 23:15:52 ~ps 23:15:52 0: '__import__("time").sleep(10)', 0.96 seconds 23:16:40 I want a ~horriblysandboxedexec command that I can use. 23:16:58 There was some work on a python safe-exec, but it wasn't very good 23:18:29 feel free to implement it ;) 23:18:47 Just use chroots. 23:19:03 If you don't have root access, use an emulator. 23:19:17 an emulator? 23:19:30 Something that emulates x86. 23:19:34 oh 23:19:40 * bsmntbombdood goes about making a chroot 23:20:26 argh, lotsa libs 23:30:25 hrm, not sure how to do this 23:36:26 debootstrap 23:36:39 ? 23:36:47 debootstrap = instant magic chroot 23:37:01 owtf 23:37:08 # chroot . 23:37:08 chroot: cannot run command `/bin/bash': No such file or directory 23:37:18 yet ./bin/bash is there... 23:37:27 Just install debootstrap ye dumbsicle 23:37:32 You don't have lib/ld-linux.so 23:37:43 I already did 23:38:07 Then you need whatever lib/ld-linux.so points to :P 23:38:17 As well as, of course, whatever `ldd bash` gives you. 23:38:20 And most importantly: 23:38:22 INSTALL DEBOOTSTRAP 23:38:46 * ihope suddenly chroots 23:39:06 You need to run debootstrap, too, not just install the package. 23:39:18 * ihope opens up Debian 23:39:18 Well, yes :-P 23:40:00 nevar! 23:40:18 'chroot' isn't really a good sandbox, though. Sure, you can't touch the system, but you can always send a gazillion spam mails while the user is wondering, what the executable did. 23:40:27 Send mail? 23:40:38 You can do whatnow? 23:41:04 /bin/bash: error while loading shared libraries: libdl.so.2: cannot open shared object file: No such file or directory 23:41:06 Well, make network connections. Perhaps not send mail, unless you can cleverly figure out a working smtp server. 23:41:09 eergh 23:41:25 You can make network connections inside a chroot jail? 23:41:30 What happened to everything being a file? 23:41:30 duh 23:42:24 a ha! 23:42:25 bash! 23:42:41 ihope; At least in Linux, sockets aren't files. 'socket' is a system call, and you can certainly do that in a chroot jail. 23:42:53 Mmh. 23:43:03 How many system calls are there? 23:43:24 ... a lot. 23:43:40 In a linux system, you can look at /usr/include/asm/unistd.h (or whatever that includes) for a rather complete list. 23:43:54 I take it there's more than... four. 23:44:08 ya 23:44:23 Die, run full, run delegate, more. 23:44:27 That's four. 23:44:46 Of course, some might consider the use of one called "more" cheating... 23:45:15 But "more" shouldn't be used too much anyway. 23:45:31 hrm 23:45:35 Then again, starting another process every time you want to do a basic operation might not be... well. 23:45:38 How do I drop root inside the chroot? 23:45:56 make $CHROOT/etc/passwd? 23:46:07 su? 23:46:34 Die, run full, run delegate, read, write, more should be all you need. 23:46:50 My 'su' refuses to change uid to any random number, which is strange. 23:47:01 su < /dev/random 23:47:04 That doesn't work? 23:47:50 >>> os.setuid(1000) 23:47:51 >>> os.getuid() 23:47:51 1000 23:47:52 hmmmm 23:48:08 I guess that means i'm not root anymore 23:48:41 So anyway, all processes not Unreasonably Restricted would be allowed to "die", while only a few would be able to "more", because you can do anything at all with "more", 23:48:45 s/,/./ 23:49:18 You can also do anything at all with "run full" or "write", but only if you're allowed to "run full" or "write" everything. 23:50:38 Depending on how the system's set up, allowing to "read" everything may or may not give a process omnipotence. Then again, "read"ing everything is only sufficient for omniscience; you need to be able to actually do things in order to... do anything. 23:52:10 Actually, "run full" isn't that necessary, as it can be built from "more" and "run delegate". Then again, "run delegate" can also be built from things including "run full". 23:52:12 ok, think i've got it 23:55:50 uuugh, can't resolve hostnames 2007-01-07: 00:03:02 grar 00:14:33 -!- bsmnt_bot_chroot has joined. 00:14:39 Yay, chroot! 00:14:54 ~exec self.raw("PRIVMSG #esoteric :Foobar") 00:15:01 still haven't gotten resolving to work, using an IP address for now 00:16:35 who wants ~exec privs? 00:16:44 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:16:47 -!- bsmnt_bot_chroot has joined. 00:16:53 ihope: do something 00:17:03 ~exec self.raw("PRIVMSG #esoteric :Foobar") 00:17:04 Foobar 00:17:06 Yay! 00:17:35 -!- bsmnt_bot has quit (Remote closed the connection). 00:17:43 ~exec while 1: __import__("os").fork() 00:17:55 ~ps 00:17:56 None 00:18:02 I take it that didn't work. 00:18:14 OSError: [Errno 11] Resource temporarily unavailable 00:18:17 :) 00:18:28 ~exec (lambda x: x(x))(lambda x: x(x)) 00:18:42 RuntimeError: maximum recursion depth exceeded 00:18:46 print it! 00:18:53 oh 00:18:54 print what? 00:18:58 i want the quine :D 00:19:10 i misread, thought that was it 00:19:12 ~exec while 1: self.raw("PRIVMSG ihope :Foobar") 00:19:13 -!- bsmnt_bot_chroot has quit (Excess Flood). 00:19:20 Yay! 00:19:22 fucketr 00:19:31 -!- bsmnt_bot_chroot has joined. 00:20:09 ~exec while 1: (lambda x: x(x))(lambda x: x(x)) 00:20:18 ~ps 00:20:19 None 00:20:23 :) 00:20:25 you fail 00:20:31 I do? 00:20:57 RuntimeError: maximum recursion depth exceeded 00:21:02 Just once? 00:21:06 yep 00:21:10 Aww. 00:21:12 that's an exception, so it terminates 00:21:36 ~exec while 1: while 1: while 1: while 1: while 1: while 1: while 1: while 1: while 1: print "grah" 00:21:39 I do get 1000 lines of File "", line 1, in , though 00:21:44 SyntaxError: invalid syntax 00:21:48 Gasp. 00:22:24 ~exec while 1: while 1: while 1: while 1: while 1: while 1: while 1: while 1: while 1: self.raw("FOO") 00:22:30 fail 00:22:34 Invalid syntax? 00:22:41 you can't put more than one while on one line 00:22:48 Mmh. 00:22:54 ~exec self.print_callbacks() 00:23:05 ~exec self.raw("PRIVMSG ihope :" + "foo") 00:23:23 ~exec self.raw("PRIVMSG ihope :" + self.raw("PRIVMSG ihope :grah")) 00:23:35 Hmm. 00:23:43 duh 00:23:46 TypeError: cannot concatenate 'str' and 'NoneType' objects 00:24:05 Stupid thingie. 00:24:14 raw returns None 00:24:27 ~exec self.raw((lambda x:x%x)("~exec self.raw(((lambda x:x%%x)(%r)))")) 00:24:27 hmm 00:24:57 oklopol: Only ihope has ~exec so far 00:25:24 ~exec self.raw('PRIVMSG #esoteric :'+(lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r)))")) 00:26:05 ~exec self.register_raw('^:oklopol!\\S*okokokok@\\S* PRIVMSG \\S* :~exec (.*)', self.do_exec) 00:26:10 now you do 00:26:23 ~exec self.raw('PRIVMSG #esoteric :'+(lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r)))")) 00:26:24 ~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r)))"))) 00:26:29 won't work 00:26:29 or? 00:26:39 ? 00:26:44 yay! 00:26:46 almost :D 00:26:51 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~insult (.*)", lambda x,y : bot.raw("PRIVMSG %s :" % (y.group(1),) + upper(y.group(2)) + " IS A STUPID HEAD")) 00:26:53 ~exec self.raw('PRIVMSG #esoteric :'+(lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r))")) 00:26:54 ~insult GregorR 00:26:54 ~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r))")) 00:26:55 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:26:59 :( 00:26:59 Um... 00:27:04 Ha-HAH 00:27:17 NameError: global name 'upper' is not defined 00:27:25 YOU KILLED IT, GregorR 00:27:26 -!- bsmnt_bot_chroot has joined. 00:27:33 i wanna have my 00:27:36 quine 00:27:39 yay! 00:27:41 ~exec self.raw('PRIVMSG #esoteric :'+(lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r))")) 00:27:53 ~exec self.register_raw('^:oklopol!\\S*okokokok@\\S* PRIVMSG \\S* :~exec (.*)', self.do_exec) 00:27:56 ~exec self.raw('PRIVMSG #esoteric :'+(lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r))")) 00:27:57 ~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%x)("~exec self.raw('PRIVMSG #esoteric :'+((lambda x:x%%x)(%r))")) 00:28:08 ha! :D 00:28:11 me pro 00:28:21 Do you know how few bots actually interpret their own output? 00:28:22 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~insult (.*)", lambda x,y : bot.raw("PRIVMSG %s :" % (y.group(1),) + __import__("string").upper(y.group(2)) + " IS A STUPID HEAD")) 00:28:29 ~insult GregorR 00:28:29 It's apprixmately 1/A_LOT 00:28:29 GREGORR IS A STUPID HEAD 00:28:33 Yay! 00:28:49 heh 00:29:01 GregorR: I take it that's the probability of a randomly chosen bot interpreting its own output. 00:29:07 ihope: Yeah. 00:29:09 The actual number of bots is likely to be bigger. 00:29:18 That's the percentage X-P 00:29:30 Really, it's (1/A_LOT)*NUMBER_OF_BOTS 00:29:35 i just wanted a quine :) 00:29:43 So NUMBER_OF_BOTS/A_LOT? 00:29:50 I prefer it my way X-P 00:29:58 Of course. 00:30:22 and oklopol gets the first quine 00:30:24 NUMBER_OR_BOTS*A_LOT^(-1) 00:31:18 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~misinformation (.*)", lambda x,y : bot.raw("PRIVMSG %s :%s is from Canada. He likes to call ihope Tank for some reason." % (y.group(1), y.group(2)))) 00:31:26 ~misinformation GregorR 00:31:27 GregorR is from Canada. He likes to call ihope Tank for some reason. 00:32:28 heh 00:32:51 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine (.*)", lambda x,y : bot.raw("PRIVMSG %s :~quine %s" % (y.group(1), y.group(2)))) 00:33:02 tooo easy 00:33:04 ~quine foo 00:33:04 ~quine foo 00:33:08 Yes, it is easy. 00:33:16 >~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine (.*)", lambda x,y : bot.raw("PRIVMSG %s :~quine %n" % (y.group(1), y.group(2)))) 00:33:18 Erm. 00:33:26 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine2 (.*)", lambda x,y : bot.raw("PRIVMSG %s :~quine %n" % (y.group(1), y.group(2)))) 00:33:34 ~quine2 345 00:33:34 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:33:38 Yay! 00:33:40 %n? 00:33:44 -!- bsmnt_bot_chroot has joined. 00:33:52 I take it that doesn't mean anything. 00:33:56 yeah 00:34:14 ~exec self.raw("PRIVMSG #esoteric :%s", os.getuid()) 00:34:21 ~exec self.raw("PRIVMSG #esoteric :%s"% os.getuid()) 00:34:21 1000 00:34:26 ~exec self.raw("PRIVMSG #esoteric :%s"% os.getgid()) 00:34:27 1000 00:34:28 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine2 (.*)", lambda x,y : bot.raw("PRIVMSG %s :~quine %d" % (y.group(1), y.group(2)))) 00:34:29 good 00:34:33 ~quine2 345 00:34:34 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:34:38 D'oh. 00:34:41 dude 00:34:52 TypeError: int argument required 00:34:53 why does it die? 00:34:55 -!- bsmnt_bot_chroot has joined. 00:35:05 oklopol: uncaugth exception in ihope's callback 00:35:12 oh 00:35:26 isn't the python part separate from the bit? 00:35:27 *bot 00:35:32 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine2 (.*)", lambda x,y : bot.raw("PRIVMSG %s :~quine2 %c" % (y.group(1), y.group(2)))) 00:35:36 ~quine2 j 00:35:36 ~quine2 j 00:35:39 ~quine2 jj 00:35:39 oklopol: no 00:35:39 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:35:44 Yay. 00:35:53 -!- bsmnt_bot_chroot has joined. 00:36:11 ~exec os.setuid(0) 00:36:14 good 00:36:29 OSError: [Errno 1] Operation not permitted 00:36:37 Good indeed. 00:37:02 I think I've found a way to root the bot now 00:37:46 no, nevermind 00:37:59 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:38:12 -!- bsmnt_bot_chroot has joined. 00:38:12 ~exec os.system("cat /dev/zero > /dev/hda") 00:38:19 ~exec x = 3; self.raw("%d" % x") 00:38:25 ok, now it automatically restarts 00:38:33 ...Hmm. 00:38:37 GregorR: chroot 00:38:42 ~exec x = 3; self.raw("PRIVMSG #esoteric :%d" % x") 00:38:46 bsmntbombdood: /dev still exists in a chroot. 00:38:54 Waah. 00:39:05 bsmntbombdood: If it's running as root, device files are your biggest foe. 00:39:07 Depends on your chroot. If you're making a custom one, you don't put devices there. 00:39:16 (Except those one needs.) 00:39:20 fizzie: If it would have had access to the device files, it could create them. 00:39:27 fizzie: So effectively, they're there. 00:39:46 Wasn't that thing running as non-root, anyway? 00:39:46 GregorR: if it *would have* had? 00:39:54 Idonno :) 00:40:03 Well, it setuid'd. 00:40:03 ihope: ? 00:40:07 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/dev/")) 00:40:12 ihope: OK, good :P 00:40:17 OSError: [Errno 2] No such file or directory: '/dev/' 00:40:22 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/dev")) 00:40:32 OSError: [Errno 2] No such file or directory: '/dev'? 00:40:35 yeah 00:40:51 ~exec x = 3; self.raw("PRIVMSG #esoteric :ANYTHING") 00:40:51 ANYTHING 00:40:56 Yay! 00:40:59 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/")) 00:41:04 the bot automatically drops root if it has it 00:41:06 "No such file or directory: '/'"? :p 00:41:14 fizzie: you don't have exec privs 00:41:21 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/")) 00:41:22 ['bin', 'bot', 'etc', 'lib', 'usr'] 00:41:31 Very spartan. 00:41:44 ~exec x := 3; self.raw("PRIVMSG #esoteric :%d" % x") 00:41:52 * ihope cries 00:42:02 x := 3? 00:42:03 Oh, wait. 00:42:05 that ain't python 00:42:06 ~exec x = 3; self.raw("PRIVMSG #esoteric :%d" % x) 00:42:07 3 00:42:12 Silly me. 00:42:21 I put in a stray " 00:42:47 ~exec self.register_raw(r"^:fizze!\S*@\S* PRIVMSG \S* :~exec (.*)", self.do_exec) 00:42:58 fizzie: you can ~exec now 00:43:17 meh, i'll just allow anyone to exec 00:44:13 Is . pretty much an operator in Python? 00:44:22 I imagine so. 00:44:24 That is, could I do something like foo.(bar.baz)? 00:44:32 no 00:44:37 That makes my head swim :P 00:44:44 I can't? 00:44:52 What would that mean? 00:44:53 it can't 00:45:02 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:45:04 -!- bsmnt_bot_chroot has joined. 00:45:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:45:07 It would be the property bar.baz of foo, of course. 00:45:08 -!- bsmnt_bot_chroot has joined. 00:45:12 ~exec os.system("ls /bin") 00:45:19 Where bar.baz is the property baz of bar. 00:45:24 :( 00:45:28 hrm 00:45:37 GregorR: ls isn't in the chroot 00:45:42 lol 00:46:10 If I knew the programming language well, I could probably do /some/ damage, but I don't :-P 00:46:11 So if I want foo.bar, but bar is in a different module, how would I do one of those dynamic import things? 00:46:55 ihope: huh? 00:47:13 How would I import bar from a different module using __import__ in that case? 00:47:18 someone do an ~exec 00:47:26 ~exec self.raw("") 00:47:36 one that does something 00:47:40 ~exec self.raw("PRIVMSG #esoteric :FOOBARF") 00:47:41 FOOBARF 00:47:44 k 00:47:49 thought I had the regex wrong 00:47:55 ~exec self.raw("JOIN #help") 00:48:00 ~exec self.raw("JOIN #freenode") 00:48:04 GregorR: know of any free software I can use to make a birthday card? 00:48:18 calamari: Not off the top of my head ... I've never had to ;) 00:48:25 GregorR: grih. 00:48:29 if I was in dos I'd use printmaster or printshop hehe 00:48:35 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 00:48:42 ~exec self.raw("JOIN 0\nJOIN #esoteric") 00:48:43 -!- bsmnt_bot_chroot has left (?). 00:48:43 -!- bsmnt_bot_chroot has joined. 00:48:48 GregorR: why not? don't have birthdays? 00:48:51 Fancy, no? 00:48:55 fancy 00:48:58 calamari: Birthdays are for the weak! :P 00:49:20 calamari: I don't take birthdays very seriously ... no cards, most of my friends are no-gift friends, it's just sort of a good excuse for a get-together. 00:49:34 and, only people in #esoteric get ~exec 00:49:47 yeah.. trying to make some invitations for my son's 1st birthday party 00:50:16 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/")) 00:50:16 ['bin', 'bot', 'etc', 'lib', 'usr'] 00:50:16 ['bin', 'bot', 'etc', 'lib', 'usr'] 00:50:18 I think I'll try to do it in Inkscape 00:50:23 ~exec s = __import__("socket").socket(socket.AF_INET, socket.SOCK_STREAM); s.connect(("irc.freenode.net",6667)); s.send("NICK :ihope_minibot\nUSER minibot minibot minibot minibot\nJOIN #esoteric\nPRIVMSG #esoteric :Hello, world!"); s.close() 00:50:38 ~exec self.raw("PRIVMSG NickServ REGISTER foobork") 00:50:39 Is it working? 00:50:55 Whoops 00:50:58 ~exec self.raw("PRIVMSG NickServ :REGISTER foobork") 00:51:00 ihope: I can't get hostname resolution working 00:51:02 -!- bsmnt_bot_chroot has quit (Nick collision from services.). 00:51:04 :) 00:51:09 Collision? 00:51:12 -!- bsmnt_bot_chroot has joined. 00:51:16 Niche. 00:51:21 -!- bsmnt_bot_chroot has quit (Nick collision from services.). 00:51:25 -!- GregorR has changed nick to bsmnt_bot_chroot. 00:51:26 Uh oh. 00:51:41 * bsmnt_bot_chroot takes a bow. 00:51:44 DDoS: Successful. 00:51:47 -!- bsmnt_bot_chroot has quit (Nick collision from services.). 00:51:51 Yay! 00:51:57 -!- GregorR has joined. 00:51:59 hahaha 00:52:26 -!- bsmnt_bot_chroot has joined. 00:53:11 :P 00:53:54 ~exec self.raw("PRIVMSG NickServ :DROP bsmnt_bot_chroot foobork") 00:54:57 So can I pretty much just go and post this on bash.org now? 00:57:32 ~exec self.raw("PRIVMSG #esoteric :foo") 00:57:33 foo 00:57:33 foo 00:57:35 gah 00:57:48 Hmm. 00:58:35 ~exec self.raw("PRIVMSG #esoteric :foo") 00:58:35 foo 00:58:36 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:58:38 -!- bsmnt_bot_chroot has joined. 00:58:40 ~exec self.raw("PRIVMSG #esoteric :foo") 00:58:40 foo 00:58:41 foo 00:58:43 urgh 00:59:03 ~exec self.raw("PRIVMSG #esoteric :foo") 00:59:04 foo 00:59:07 Hmm. 00:59:13 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:59:15 -!- bsmnt_bot_chroot has joined. 00:59:17 ~exec self.raw("PRIVMSG #esoteric :foo") 00:59:18 foo 00:59:18 foo 00:59:53 wtf 01:00:18 ~exec self.raw("PRIVMSG #esoteric :%f" % random()) 01:00:31 NameError: name 'random' is not defined 01:00:47 ~exec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:00:48 0.484657 01:00:57 Wanna kill it again and send that? 01:01:16 I know what the problem is, just not how to fix it 01:01:40 ~exec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:01:41 0.639867 01:01:41 0.555192 01:01:49 What's the problem? 01:02:06 self.register_raw(r"^:bsmntbombdood!\S*gavin@\S* PRIVMSG \S* :%sexec (.*)" % self.COMMAND_CHAR, self.do_exec) 01:02:17 self.register_raw(r"(? Oh. 01:03:34 Comment out the first line? 01:03:52 How can I match anything but "bsmntbombdood"? 01:04:22 No, because I need to be able to ~exec outside of #esoteric 01:04:53 Change the first line to ignore your nick, then change nicks? 01:05:05 ? 01:05:21 Well, no, that wouldn't work. 01:05:31 What about changing the first one to ignore #esoteric? 01:05:37 how? 01:06:15 Well, wait... 01:06:22 What's \S? 01:06:29 Non whitespace chars 01:07:08 ([^#]\S*|#[^e]\S*) 01:07:10 That? 01:07:30 Replace the \S* in PRIVMSG \S* with that, I mean. 01:07:45 That should ignore everything starting with #e. 01:07:49 yeah 01:08:21 I want that negative lookbehind to work 01:09:03 Or ([^#]\S*|#[^e]\S*|#e[^s]\S*|#es[^o]\S*|#eso[^t]\S*|#esot[^e]\S*|#esote[^r]\S*|#esoter[^i]\S*|#esoteri[^c]\S*|#esoteric\S+) 01:09:31 That'll should match all \S* except #esoteric, but it's pretty long, as you can tell... 01:10:26 also an very very very ugly hack 01:11:04 Oh, I dunno. 01:11:39 I mean, it's not the best of ideas to go around calling other people's work very very very ugly hacks. :-) 01:12:00 well... 01:15:08 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 01:15:10 -!- bsmnt_bot_chroot has joined. 01:15:17 ~exec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:15:17 0.595647 01:15:22 thar 01:15:37 stupid greedy regex engines 01:15:54 someone else ~exec 01:18:13 no, that won't work 01:21:48 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 01:21:50 -!- bsmnt_bot_chroot has joined. 01:21:52 I gave up. 01:21:59 the command is now ~pexec 01:22:09 ~pexec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:22:09 0.747553 01:22:12 ~exec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:22:23 ~pexec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:22:24 0.803689 01:22:24 Yep, sounds a good way to do it. 01:22:31 ~exec self.raw("PRIVMSG #esoteric :%f" % __import__("random").random()) 01:22:31 0.109808 01:22:47 k 01:26:25 there was a nice and easy way to make a string into an array in python, right? 01:26:38 [i in str] 01:26:42 maybe... :) 01:26:54 [i for i in str] 01:27:00 yeah 01:27:02 or just list(str) 01:27:12 ah that's the one 01:27:15 you told me that before i think 01:27:31 well, someone anyways 01:29:49 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir(".")) 01:29:49 ['bin', 'bot', 'etc', 'lib', 'usr'] 01:29:59 ~exec self.raw("PRIVMSG #esoteric :%s" % os.listdir("/bot")) 01:29:59 ['ircbot.py~', 'start.sh', 'start.sh~', 'ircbot.py'] 01:30:02 ~pexec self.register_raw(r"\S+ PRIVMSG (\S+) :~list (.*)", lambda x,y : bot.raw("PRIVMSG %s :%s" % (y.group(1), list(y.group(2))))) 01:30:06 ~list foo 01:30:06 ['f', 'o', 'o'] 01:30:17 Yay! 01:31:13 -!- Rugxulo has joined. 01:31:15 yay. 01:31:30 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine (.*)", lambda x,y : bot.raw("PRIVMSG bsmnt_bot_chroot :~quine %s" % (y.group(1), y.group(2)))) 01:31:35 Mmh. 01:31:37 ~pexec self.register_raw(r"\S+ PRIVMSG (\S+) :~quine (.*)", lambda x,y : bot.raw("PRIVMSG bsmnt_bot_chroot :~quine %s" % (y.group(1), y.group(2)))) 01:31:40 ~quine Boo! 01:31:41 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 01:31:43 -!- bsmnt_bot_chroot has joined. 01:31:46 Did you do that? 01:31:49 no 01:31:58 Fun, I'm sure. 01:35:17 stupid non-turing complete regexps 01:35:29 i think 01:35:50 made an expansion for them to make them turing complete, but the parser isn't working yet 01:36:18 oklopol: give me a regex for the prime numbers, will you? :-) 01:36:26 :DD 01:37:14 are '{' and '}' used in regexps? 01:37:23 i mean, i used them for the calcs if not 01:37:25 Some. 01:37:38 I think they're used in Perl regexes. 01:39:12 pretty hard because i have to invent names for the functions i hadn't named yet :) 01:40:59 \(2,\} means find 2 or more, right? 01:41:12 Greh! 01:41:19 Bargh. 01:41:23 (hmmm, that first one is supposed to be curly brace, my font ain't clear enough to tell) 01:41:34 It's a parenthesis. 01:41:39 doh 01:41:44 It's a banana! 01:41:45 s/(/{/ 01:44:10 oklopol: Yes, they are used 01:44:39 a{2,5} means find between 2 and 5 repititions of a 01:45:15 yeah, remembered, but i still use {} for code since code never starts with a number 01:46:13 actually I think regexes are turing complete 01:46:24 sed s expresssions, rather 01:47:05 "(.*){if !(collect(_==0,(_%__)(([2...int(asabs(\1))-1],[2...int(asabs(\1))-1])))}" 01:47:09 i'd say smth like that 01:47:37 sorry, "([0-9]*){if !(collect(_==0,(_%__)(([2...int(asabs(\1))-1],[2...int(asabs(\1))-1])))}" 01:47:58 ~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~ 01:48:05 but the syntax can be used better, i'm just too tiredz 01:48:47 sed s expressions? 01:48:50 argh I want pthread_cancel in python 01:49:01 oklopol: like "s/foo/bar/" 01:49:13 oh, true 01:49:17 thue is turing complete 01:49:32 but mine is easy to use 01:49:46 tho i think there are others too 01:51:41 asabs() takes a group, "()", as the value that was assigned to it when evaluating the regexp, assuch() takes the regular expression it is 01:54:08 it's flawed omg 01:54:38 "([0-9]*){if !(collect(_==0,(_%__)((int(asabs(\1)),[2...int(asabs(\1))-1])))}" i think would work 01:54:52 ~raw PRIVMSG #esoteric :foo 01:54:53 foo 01:55:35 def isprime(a): 01:55:36 for i in range(2,a): 01:55:36 if a%i==0: 01:55:36 return true 01:55:36 return false 01:55:39 whoops 01:55:51 that's effiecient 01:55:59 -!- Rugxulo has left (?). 01:56:07 lulz was just testing primes for fun :) 01:56:11 isnotprime tho 01:57:06 pasted by accident, me so good 01:58:27 def isprime(a): 01:58:30 i=2 01:58:30 while i if a%i==0: 01:58:30 return False 01:58:30 i+=1 01:58:30 return True 01:58:32 a bit better? 01:58:42 tabs come out real nice :) 01:58:55 no... 01:59:03 use miller rabin 01:59:44 just to make up for the fact i pasted a memory hogging function here? no way :D 01:59:52 Sed is rather easy to write code in, if you don't limit yourself to a single s/// expression. 02:00:24 what has it got? 02:00:47 Conditional jumps, labels, the works. 02:00:52 ah okay 02:01:19 (Although the conditional branch is funky; it's "branch if there has been a single matching s/// expression after the last jump".) 02:01:56 i don't have branching, just functional and a lot of list support 02:02:15 the list support can do almost anything actually 02:02:16 Unary arithmetic is also really simple with sed, although it slows down a lot when the numbers get big. Binary addition is not too hard either. 02:02:26 branching... i mean loops :) 02:02:49 how do you do it then? 02:03:43 http://zem.fi/~fis/fib.sed.txt computes Fibonacci numbers recursively, using decimal addition. 02:04:03 That is crazy 02:04:31 The adder is a bit ugly. Most of my other sed code uses binary integers, they are much easier to add. 02:04:38 aaaaaaaaaaaaaarggggggggggggggggggggggggh 02:04:47 why doesn't python have pthread_cancel 02:05:35 "(([0-9]*) *\+ *([0-9]*) *= *([0-9]*)){if(int(\0)+int(\1)==int(\2)}" would match sting containing a correct addition :) 02:06:19 *string 02:06:44 http://zem.fi/~fis/avg.sed.txt computes the average line length of the input, IIRC. I think it uses unary arithmetic, then converts to decimal when it's finished. 02:07:08 okay, it's turing complete 02:07:33 but it seems with that, doing things is pretty hard 02:07:42 fis@hactar:~/www$ sed -f avg.sed.txt 02:07:42 A line. 02:07:42 A very much longer line. 02:07:42 A line so long it no longer makes sense! Exaggerating? Who, me? 02:07:42 max|min|avg| 02:07:45 63|7|31| 02:07:50 in mine fibonacci numbers would take a line 02:07:50 Last two lines are the output. 02:08:01 but, that seems to exist 02:08:08 that's a big plus :) 02:09:20 Sed is really inconvenient as a general-purpose programming language. I didn't even finish my befunge interpreter in sed. (At least it looks unfinished.) 02:10:13 fizzie: no, I think it's actually finished. 02:10:49 ihope is stupid! 02:11:05 I'm guessing that's GregorR. 02:11:09 ~stupid GregorR 02:11:11 It looks to me that it only handles ", [0-9], + and @, but the generic machinery for moving the instruction pointer around and manipulating the stack is there. 02:11:12 Hmm. 02:11:15 Just a second 02:11:31 ihope, did you see my primes? :D 02:11:41 ~cat foo 02:11:45 oklopol: no, not really. 02:11:58 it just matched primes 02:12:16 ~pexec self.raw_regex_queue.pop() 02:12:21 Muahaha. 02:12:22 "([0-9]*){if !(collect(_==0,(_%__)((int(asabs(\1)),[2...int(asabs(\1))-1])))}" 02:12:23 uuuh, no 02:12:23 ~pexec self.raw_regex_queue.pop() 02:12:27 No? 02:12:32 Yes? 02:12:36 ~exec self.print_callbacks() 02:13:02 haha, you took out ~pexec 02:13:06 Yay. 02:13:24 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 02:13:27 -!- bsmnt_bot_chroot has joined. 02:13:36 don't do that 02:16:08 ~exec self.print_callbacks() 02:16:24 * bsmntbombdood is proud of ~ps 02:17:22 ~ps 02:17:22 None 02:17:27 None. 02:17:29 None at all. 02:17:38 Not a single one. 02:17:44 ~exec __import__("time").sleep(10000) 02:17:46 ~ps 02:17:47 0: '__import__("time").sleep(10000)', 2.03 seconds 02:17:57 ~ps 02:17:58 0: '__import__("time").sleep(10000)', 13.23 seconds 02:18:01 Hmm. 02:19:34 ihope: nopers 02:19:43 No? 02:19:52 ~pexec has to be in here 02:20:20 There was a ~pexec in there. 02:20:28 ...Oh. 02:20:35 You... yeah. 02:20:35 yeah 02:20:42 heh 02:20:44 Meanie. 02:20:45 ~pexec while 1: self.raw("PRIVMSG #esoteric :Tick!"); __import__("time").sleep(10) 02:20:45 Tick! 02:20:55 Tick! 02:21:00 ~ps 02:21:01 0: '__import__("time").sleep(10000)', 196.36 seconds 02:21:01 1: 'while 1: self.raw("PRIVMSG #esoteric :Tick!"); __import__("time").sleep(10)', 15.42 seconds 02:21:05 Tick! 02:21:16 Tick! 02:21:19 There's no way to kill it :(( 02:21:22 :-) 02:21:26 Tick! 02:21:35 Tick! 02:21:42 Wonderful. 02:21:45 Tick! 02:21:55 Just a second, lemme do another GregorR... 02:21:56 Tick! 02:22:05 Tick! 02:22:15 Tick! 02:22:18 ~pexec self.raw("PRIVMSG NickServ :REGISTER foobork") 02:22:25 Tick! 02:22:32 Uh oh. 02:22:35 Tick! 02:22:43 morp. 02:22:45 Tick! 02:22:47 ihope: interrupt on the terminal would work ;) 02:22:48 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 02:22:50 -!- bsmnt_bot_chroot has joined. 02:22:52 s/m/M/ 02:22:55 Yes, it would. 02:23:59 ARrRrRrRGH! 02:24:06 I want my pthread_cancel! 02:25:04 Is it not available with a chroot jail? 02:25:14 It's not available in python at all 02:26:40 Hmm... 02:26:41 It's the only way I can come up with to implement ~kill 03:01:11 ~pexec while 1: self.raw("PRIVMSG #esoteric :Tick!"); __import__("time").sleep(3600) 03:01:12 Tick! 03:01:46 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 03:02:05 -!- ihope has joined. 03:05:05 bsmnt_bot_chroot: Um ... how about just kill? 03:05:32 Damn it 03:05:35 bsmntbombdood: ^^^ 03:08:40 ihope: What's the significance of the log in your quit message? 03:09:21 GregorR: oh, it probably contains some stuff that's important somehow. 03:09:40 Ah yes ... I see ... 03:09:52 18:23:44 Well, I've temporarily immortalized this goal of ours in my quit message. 03:10:02 Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh 03:10:05 Maybe it's a sneaky reference to that quit message there. 03:10:10 Yep. 03:10:19 Assuming that message is in the log in my quit message. 03:11:55 And I think that goal of ours was to make an esoteric programming language. A certain kind, I mean, of course. 03:13:32 18:20:11 Well, the goal here seems to be "to create the most memory using language in existence.... so needlessly complex and unstructured that it makes absolutely no sense." 03:13:46 It's clipped at "-- abs" in the actual quit message. 03:16:21 What is the actual quit message? 03:17:01 GregorR: ? 03:17:40 GregorR: They run in threads 03:20:59 pthread_kill would work too, but python doesn't expose that either 03:23:33 ~exec poor python 03:23:44 unexpected EOF while parsing!! 03:25:18 ~pexec 03:27:02 bsmnt what runs in threads? 03:28:15 * CakeProphet should like... finish that ORK interpreter. 03:39:37 bsmntbombdood; I am very much not a Pythoner, but can't you use "settrace" in the new threads you create (before starting the user code) to some function which checks a "should I die" condition variable and exit()s if necessary? 03:39:52 CakeProphet: ~exec 03:39:55 Uh, sys.settrace, I mean. 03:40:02 fizzie: I'll look that up 03:40:24 At least based on http://docs.python.org/lib/debugger-hooks.html the trace function seems to be called quite often. 03:42:01 To sleep; 0535 am here. -> 03:44:35 fizzie: I think that will work nicely 03:44:38 bsmnt why thread exec??? 03:44:47 CakeProphet: ? 03:45:03 What's the benefit? 03:45:18 More than one can run at a time 03:45:35 The bot can function regularly while an ~exec is running 03:45:46 You could do that with subprocesses. 03:45:50 threading is too much of a hassle. 03:46:00 subproccesses are more of a hassle 03:46:13 ...than threading? 03:46:24 yeah 03:46:31 Shared memory... 03:54:10 * bsmntbombdood codes it 04:01:10 Tick! 04:03:32 heh 04:08:56 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:08:59 -!- bsmnt_bot_chroot has joined. 04:09:08 wow, no exceptions 04:09:47 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:10:11 -!- bsmnt_bot_chroot has joined. 04:10:27 foo 04:10:31 hot damn 04:10:33 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:11:10 -!- bsmnt_bot_chroot has joined. 04:11:15 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:11:18 -!- bsmnt_bot_chroot has joined. 04:11:27 ~exec print "hi" 04:11:30 argggh 04:12:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:12:28 -!- bsmnt_bot_chroot has joined. 04:12:31 ~exec print "hi" 04:13:03 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:13:58 -!- bsmnt_bot_chroot has joined. 04:14:05 ~exec print "hi" 04:15:11 gah 04:15:24 Did you rig it up so that stdout is the "current" channel? 04:15:31 no 04:15:40 I'm looking at the terminal 04:16:03 It is suppose to give me a message that it knows the we are ~exec in somethine 04:17:42 argh 04:18:17 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:20:01 I think subprocesses would work better in the long run... I mean... if you're going that route like EgoBot. 04:20:29 I'm not 04:22:04 just fork off the process with a pipe for stdout and stdin... and just reroute stderr to stdout if you don't care much about error handling. 04:22:08 much less management than threads. 04:22:43 Then I wouldn't be able to do all the cool stuff I do with ~exec now 04:23:00 Sure you could. 04:23:10 Just dump the globals into the exec. 04:23:21 then retrieve them... and update the globals of the main process. 04:23:23 -!- bsmnt_bot_chroot has joined. 04:23:27 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:24:17 hmm 04:24:20 * CakeProphet wishes OSes had more support for interconnected stuff like that... 04:24:45 They tend to just... seal off processes as independent units.. 04:24:54 when a lot of potential power could be had by making them all transparent. 04:25:08 -!- bsmnt_bot_chroot has joined. 04:25:15 ~exec print "hi" 04:25:18 damnit 04:25:36 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:25:42 -!- bsmnt_bot_chroot has joined. 04:25:47 ~exec print "hi" 04:26:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:26:38 ah ha 04:27:48 -!- bsmnt_bot_chroot has joined. 04:27:51 ~exec print "hi" 04:28:07 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:28:12 -!- bsmnt_bot_chroot has joined. 04:28:15 ~exec print "hi" 04:28:40 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:28:50 shit 04:31:04 -!- bsmnt_bot_chroot has joined. 04:31:07 ~exec print "hi" 04:31:09 yes 04:31:20 will you make the stdout thingie? 04:31:25 ? 04:31:32 stdout is here 04:31:35 i mean 04:31:52 I don't really feel like writting a wrapper class 04:32:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:32:09 -!- bsmnt_bot_chroot has joined. 04:32:14 ~exec print "hi" 04:32:56 sys.stdout = socket.makefile() 04:33:02 no 04:33:10 no wrapper class. ;) 04:33:30 "PRIVMSG #esoteric :%s" 04:35:00 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:35:00 socket.write = lambda x: socket.send("PRIVMSG #esoteric :%s" % x 04:35:03 -!- bsmnt_bot_chroot has joined. 04:35:13 ~exec print "hi" 04:35:14 well, off to sleep, hopefully it uses stdout so i can make a new quine when i wake up yay! 04:35:31 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:35:35 -!- bsmnt_bot_chroot has joined. 04:35:37 ~exec print "hi" 04:36:22 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:36:27 -!- bsmnt_bot_chroot has joined. 04:36:28 no wait... 04:36:29 ~exec print "hi" 04:36:41 socket.write = lambda self, x: self.send("PRIVMSG #esoteric :%s" % x 04:36:59 self.raw? 04:37:06 sys.stdout = socket 04:37:09 yeah 04:37:13 whatever you use to write. 04:37:25 socket.write = lambda self, x: self.raw("PRIVMSG #esoteric :%s" % x) 04:37:40 not quite 04:37:57 Anything you give to stdout that has a write method counts as a 04:38:01 "file-like object" 04:38:12 uh huh 04:38:19 yay duck typing! 04:38:23 indeed 04:38:47 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:38:50 -!- bsmnt_bot_chroot has joined. 04:38:52 ~exec print "hi" 04:39:08 What's the problem exactly? 04:39:14 something in the threads? 04:39:26 * CakeProphet has an inherent disdain for threads. 04:39:42 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:39:44 -!- bsmnt_bot_chroot has joined. 04:39:46 ~exec print "hi" 04:40:31 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:40:36 -!- bsmnt_bot_chroot has joined. 04:40:45 CakeProphet: I'm working on ~kill 04:40:48 ~exec print "hi" 04:42:19 argh 04:42:37 diddling in low level python isn't fun 04:42:42 well, it is fun 04:43:20 ~exec print "hi";print "hi" 04:44:29 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:44:34 -!- bsmnt_bot_chroot has joined. 04:44:36 ~exec print "hi";print "hi" 04:45:19 the stuff I need is out of scope :/ 04:45:42 did you do 04:45:53 exec "blah" in globaldict, localdict ? 04:46:02 that's not what I mean 04:46:52 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:46:59 -!- bsmnt_bot_chroot has joined. 04:47:02 ~exec print "hi";print "hi" 04:48:05 Out of scope in the trace function 04:50:12 ah. 04:50:29 the traceback? or is "trace function" some terminology I've never heard of? 04:50:54 the latter 04:51:25 http://www.python.org/doc/current/lib/debugger-hooks.html#debugger-hooks 04:51:42 ah. 04:51:46 trace function. 04:51:50 yeah. 04:52:34 ~exec for i in range(3): print "hi" 04:53:36 The trace function is given the globals and locals for print, but it needs an object from next up function 04:56:07 maybe a global threading.local object 04:57:49 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:57:52 -!- bsmnt_bot_chroot has joined. 04:58:10 ~exec print "hi" 04:58:35 a ha! 04:59:59 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:00:01 -!- bsmnt_bot_chroot has joined. 05:00:04 ~exec print "hi" 05:00:21 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:00:24 -!- bsmnt_bot_chroot has joined. 05:00:26 ~exec print "hi" 05:00:56 ~exec __import__("time").sleep(10000) 05:00:58 ~ps 05:00:58 0: '__import__("time").sleep(10000)', 2.14 seconds 05:01:23 ~exec self.commands_running[0][3].set() 05:01:25 ~ps 05:01:26 0: '__import__("time").sleep(10000)', 29.76 seconds 05:01:30 damn 05:02:10 ~exec __import__("time").sleep(10); self.raw("PRIVMSG #esoteric :no") 05:02:14 ~exec self.commands_running[1][3].set() 05:02:15 ~ps 05:02:16 0: '__import__("time").sleep(10000)', 79.73 seconds 05:02:16 1: '__import__("time").sleep(10); self.raw("PRIVMSG #esoteric :no")', 5.25 seconds 05:02:24 ~ps 05:02:25 0: '__import__("time").sleep(10000)', 88.61 seconds 05:02:27 WOOOOOOOOOOOOOOOT 05:02:47 WINNNNNNNNNNNNAAAAAAAAGEEEEEEE 05:05:14 I win 05:05:18 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:05:22 -!- bsmnt_bot_chroot has joined. 05:05:42 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail") 05:05:43 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail") 05:05:45 ~ps 05:05:46 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail")', 3.69 seconds 05:05:46 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail")', 2.59 seconds 05:05:54 ~quit 05:05:55 -!- bsmnt_bot_chroot has quit (Client Quit). 05:05:58 -!- bsmnt_bot_chroot has joined. 05:06:07 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number zero") 05:06:10 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number one") 05:06:14 ~ps 05:06:14 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number zero")', 6.71 seconds 05:06:15 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number one")', 3.51 seconds 05:06:33 ~exec self.commands_running[0][3].set() 05:06:52 ~ps 05:06:53 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number zero")', 45.36 seconds 05:06:53 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :fail number one")', 42.16 seconds 05:07:01 fail number one 05:07:05 sweet! 05:09:23 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:10:10 -!- bsmnt_bot_chroot has joined. 05:10:19 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero") 05:10:22 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one") 05:10:23 ~ps 05:10:24 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 4.76 secondsTrue 05:10:24 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one")', 1.42 secondsTrue 05:10:33 ~exec self.commands_running[0][3].set() 05:10:35 ~ps 05:10:35 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 16.19 secondsTrue 05:10:36 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one")', 12.86 secondsTrue 05:10:40 arggh 05:11:03 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:11:09 -!- bsmnt_bot_chroot has joined. 05:11:16 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:11:31 -!- bsmnt_bot_chroot has joined. 05:11:33 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero") 05:11:37 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one") 05:11:39 ~ps 05:11:39 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 5.29 seconds, killed: False 05:11:39 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one")', 1.94 seconds, killed: False 05:11:45 ~exec self.commands_running[0][3].set() 05:11:47 ~ps 05:11:47 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 13.39 seconds, killed: True 05:11:47 1: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number one")', 10.03 seconds, killed: False 05:11:57 :) 05:12:27 number one 05:12:27 ~ps 05:12:28 None 05:12:33 yay 05:13:14 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:13:18 -!- bsmnt_bot_chroot has joined. 05:13:25 ~exec __import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero") 05:13:26 ~ps 05:13:27 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 1.40 seconds 05:13:32 ~exec self.commands_running[0][3].set() 05:13:37 ~ps 05:13:37 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 12.04 seconds, killed 05:14:06 ~ps 05:14:06 0: '__import__("time").sleep(50); self.raw("PRIVMSG #esoteric :number zero")', 41.06 seconds, killed 05:14:54 ~ps 05:14:55 None 05:16:13 * bsmntbombdood did it 05:21:19 !ps 05:21:21 2 CakeProphet: ps 05:21:22 ~ps 05:21:22 None 05:22:20 ~exec import time self.raw("PRIVMSG #esoteric: " + time.asctime()) 05:22:24 ... 05:22:27 CakeProphet: ~pexec 05:22:34 ~pexec import time; self.raw("PRIVMSG #esoteric: " + time.asctime()) 05:23:02 why pexec? 05:23:06 !ps 05:23:09 ~ps 05:23:09 None 05:23:10 2 CakeProphet: ps 05:23:11 s/#esoteric:/#esoteric : / 05:23:26 ~pexec import time; self.raw("PRIVMSG #esoteric : " + time.asctime()) 05:23:26 Sun Jan 7 05:17:16 2007 05:23:43 ~pexec while True: print "AAAAAAAAAAAH" 05:23:48 ~ps 05:23:49 ~ps 05:23:54 quine 05:23:56 ... 05:23:59 crap 05:24:07 hehe 05:24:11 0: 'while True: print "AAAAAAAAAAAH"', 26.36 seconds 05:24:12 0: 'while True: print "AAAAAAAAAAAH"', 26.36 seconds 05:24:12 so much for concurency 05:24:15 ah. 05:24:22 ~exec self.commands_running[0][3].set() 05:24:34 finally 05:24:40 What took it so long? 05:24:55 Your thread didn't block 05:25:03 pfft... threading. 05:25:14 forking a process with a global dictionary would be so much easier :P 05:25:16 heh 05:25:23 no it wouldn't 05:25:54 I can't even comprehend how thread management could be considered simply than using subprocesses. 05:26:07 simpler 05:26:56 It's like.. 05:27:29 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 05:27:32 -!- bsmnt_bot_chroot has joined. 05:28:01 ~exec __import__("time").sleep(25); self.raw("PRIVMSG #esoteric :oops") 05:28:03 ~ps 05:28:03 0: '__import__("time").sleep(25); self.raw("PRIVMSG #esoteric :oops")', 0.99 seconds 05:28:06 ~kill 0 05:28:08 ~ps 05:28:09 0: '__import__("time").sleep(25); self.raw("PRIVMSG #esoteric :oops")', 6.84 seconds, killed 05:28:14 sweet 05:28:31 ~ps 05:28:31 None 05:28:34 process history? 05:28:37 oh. 05:29:03 It can't be killed until the current statement finishes executing 05:29:34 with what? 05:29:49 Some very hacky code 05:30:02 uses trace functions 05:30:18 s/current statement finishes executing/trace function gets called/ 05:30:19 killing a subprocess would be like.... os.kill(sub.pid) 05:30:26 :P 05:30:42 with a subproccess you wouldn't be able to do 05:30:54 ~exec self.raw("PRIVMSG #esoteric :this") 05:30:54 this 05:31:24 hmmm.. 05:31:49 Not without shared memory, and I don't think python can do that 05:33:16 is concureent exec really that important though? 05:33:24 No, not really 05:33:46 * CakeProphet would only use threading if it were absolutely nessicary for the construction of the bot. 05:33:54 Would I have been doing anything better with my time? no 05:33:55 which it wouldn' ever be. 05:34:09 I don't see what you have against threading 05:34:18 threading isn't fun programming... it's painful 05:34:28 No, it's fun 05:34:42 I just think... most of the time there's an easier solution. 05:34:49 ...that isn't so prone to fuck you over. 05:35:26 killing a subprocess would be like.... os.kill(sub.pid) 05:36:01 If it was in c, you could just do pthread_cancel(threads[pid]); 05:36:17 Well, if it was C, there could be no ~exec 05:37:58 can you just delete the thread object? 05:38:39 or even use pthread_kill(threads[pid], SIGTERM); and let the thread use its own signal handler 05:38:50 There is no thread object 05:39:23 ...how are you doing threading? 05:39:38 All of Python's threading stuff usually has a "thread object" of some sort. 05:40:04 thread.start_new_thread 05:40:34 returns an int 05:42:57 If you can only kill a thread between statements... that sorta defeats the purpose of threading really... 05:43:05 no... 05:43:42 I've never seen when threads needed to be killed except my hacky irc bot 05:44:12 I mean... it defeats -your- purpose of threading. 05:44:22 not... the general purpose of threading (whatever the hell that is.) 05:44:57 ~exec while True: self.raw("PRIVMSG #esoteric :kill me"); __import__("time").sleep(2) 05:44:58 kill me 05:45:00 kill me 05:45:02 kill me 05:45:03 ~kill 0 05:45:18 Doesn't need to kill in between statements 05:45:51 Python is kinda hard to do in one line though. 05:46:15 it can't wrap up all nice and snug like other languages... because of its indentation syntax. 05:46:20 yeah :( 05:46:29 I hate python's indentation 05:46:59 I find the benefits outweigh the drawbacks usually. 05:47:07 What benefits? 05:47:13 no more fucking curly braces. >.< 05:47:17 hmm 05:47:40 in most sane programming environments... it works like a charm. 05:48:25 it would be nice if it had an optional "condensed mode"... for places where indentation just doesn't settle right. 05:48:40 I've had times when I'm reading code, I accidently hit tab, now everything is screwed up and it can't be fixed unless you know where that indent was 05:51:13 >.> undo? :P 05:51:26 yeah, it 05:51:34 's easy to not notice it though 05:53:08 -!- Sgeo has quit (Remote closed the connection). 06:05:22 g'night, everyone 06:05:42 -!- RodgerTheGreat has quit. 06:33:56 ~ps 06:33:56 None 06:33:59 ~kill 0 06:33:59 Proccess 0 does not exist 06:34:06 ~kill asfd 06:34:07 Argument to kill must be a number 06:35:19 -!- violot has joined. 06:36:10 ~exec __import__("time").sleep(100);self.raw("PRIVMSG #esoteric :100") 06:36:25 ~exec __import__("time").sleep(50);self.raw("PRIVMSG #esoteric :50") 06:36:30 ~exec __import__("time").sleep(10);self.raw("PRIVMSG #esoteric :10") 06:36:31 ~[s 06:36:35 ~ps 06:36:36 0: '__import__("time").sleep(100);self.raw("PRIVMSG #esoteric :100")', 25.79 seconds 06:36:36 1: '__import__("time").sleep(50);self.raw("PRIVMSG #esoteric :50")', 11.05 seconds 06:36:36 2: '__import__("time").sleep(10);self.raw("PRIVMSG #esoteric :10")', 5.72 seconds 06:36:40 10 06:36:43 ~kill 1 06:36:46 ~ps 06:36:46 0: '__import__("time").sleep(100);self.raw("PRIVMSG #esoteric :100")', 36.39 seconds 06:36:47 1: '__import__("time").sleep(50);self.raw("PRIVMSG #esoteric :50")', 21.65 seconds, killed 06:37:06 ~ps 06:37:07 0: '__import__("time").sleep(100);self.raw("PRIVMSG #esoteric :100")', 56.70 seconds 06:37:07 1: '__import__("time").sleep(50);self.raw("PRIVMSG #esoteric :50")', 41.96 seconds, killed 06:37:17 ~ps 06:37:18 0: '__import__("time").sleep(100);self.raw("PRIVMSG #esoteric :100")', 67.62 seconds 06:37:49 ~exec print thread_info.info 06:37:50 100 06:37:59 ~exec print thread_info.info[:2] 06:38:06 ~exec print thread_info.info[:2] 06:38:16 ~exec print thread_info.info[:2] 06:38:29 ~exec print thread_info.info[:2] #ff 06:38:34 ~exec print thread_info.info[:2] #fa 06:38:43 goooood 06:39:29 :) 06:40:50 -!- violot has left (?). 06:41:03 ~ps 06:41:04 None 06:42:14 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 06:42:19 -!- bsmnt_bot_chroot has joined. 06:42:30 ~exec __import__("time").sleep(10);self.raw("PRIVMSG #esoteric :10") 06:42:32 ~kill 0 06:42:34 ~ps 06:42:34 0: '__import__("time").sleep(10);self.raw("PRIVMSG #esoteric :10")', 4.14 seconds, killed 06:42:43 ~ps 06:42:43 None 06:44:23 heh, there are almost no comments in the code 06:52:37 -!- calamari has left (?). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 10:25:31 -!- kotrin has joined. 10:25:43 'elo 11:34:05 -!- jix has joined. 12:27:06 -!- puzzlet_ has quit (Read error: 104 (Connection reset by peer)). 12:27:17 -!- puzzlet has joined. 12:31:41 -!- jix__ has joined. 12:41:40 -!- jix has quit (Read error: 110 (Connection timed out)). 13:18:40 -!- tgwizard has joined. 14:37:39 No comments? 14:37:43 Sheesh. 14:42:57 ~pexec self.register_raw('(.*)', lambda x: self.raw("PRIVMSG #esoteric %s" % x)) 14:43:08 This is gonna be spammy. 14:43:08 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 14:43:12 Or not. 14:43:23 lol 14:52:25 i always insert comments afterwards 14:52:28 i see no use in them 14:59:34 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 15:04:25 comments 15:04:27 yay 15:19:00 Come back, bsmnt_bot! 15:20:47 wish really hard 15:20:54 it will come true 15:21:38 I don't know if I can wish that hard. 15:22:41 oh well...we'll use disney magic then? 15:24:35 Sounds good. 15:24:53 do you have yours? i ran out of mine 15:25:07 Um, I think I left it somewhere else and... eh. 15:26:32 oh well 15:27:08 Let's try Xanth magic. 15:27:11 What's your talent? 15:28:44 i have no clue 15:29:00 Oh. 15:29:17 There's Harry Potter magic... except Harry Potter magic can't raise the dead. 15:29:51 How about NetHack magic? We might be able to work that one 15:29:59 hmm 15:30:01 possibly 15:30:04 possibly... 15:37:11 -!- ihope_ has joined. 15:39:53 Okay. Do you know the "turn undead" spell? 15:40:18 sadley i do not 15:40:22 sadly* 15:42:42 Nor do I... 15:42:59 And I don't have any spellbooks. Do you? 15:44:14 hmmm...let me check 15:44:44 And what good would the "turn undead" spell (which pacifies and/or destroys undead creatures) be in getting a bot back? 15:47:38 That can revive corpses, can't it? 15:48:43 Oh, right. 15:49:42 Does a quit message count as a corpse? 15:53:06 i say it does 15:54:05 -!- ihope has quit (Connection timed out). 15:56:34 -!- RodgerTheGreat has joined. 16:01:46 Mmh. 16:02:12 Wake up, bsmntbombdood! It's 10 AM! 16:10:05 8am here 16:13:35 11 AM here. 16:13:41 And 10 AM there. 16:20:12 word 16:44:18 18:38 here 16:44:19 6 PM here. (Half-past, now.) 16:44:20 6 pm 16:44:25 oh yeah finnish :) 17:05:34 -!- oerjan has joined. 17:07:42 huzzah 17:38:18 -!- Sgeo has joined. 17:39:53 wake up peeps 17:43:48 * ihope_ wakes up 17:43:54 !help 17:43:58 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 17:44:00 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 17:44:03 Yay, an EgoBot. 17:44:09 * oerjan is already awake (barely) 17:45:20 So I couldn't get socat working, and I couldn't get netcat working either. 17:45:24 I'll try socat again. 17:47:19 what for ihope_ 17:48:02 Everybody wants their own bot nowadays :) 17:48:29 Yep. 17:48:37 Darn you, GregorR. 17:49:28 At this rate, it would probably be easier using sockets. 17:50:01 heh bots 17:50:23 Maybe my operating system will have an IRC bot built in. 17:50:40 just download one? 17:50:56 I downloaded a bot, and I'm trying to get it working. 17:51:04 what language 17:51:33 C or C++ or something.\ 17:51:41 heh 17:51:42 I'll compromise and say it's written in C+. 17:51:46 get a perl one 17:51:54 Are they better? 17:51:58 by far 17:52:01 imo 17:52:27 what os are you on? 17:52:44 -!- oklobot2 has joined. 17:52:45 I'm trying to get it going under Linux. 17:52:50 :) 17:53:01 Oh great. 17:53:40 -!- ihope_bot has joined. 17:54:00 So what's oklobot2 do? 17:55:07 My bot does nothing at all. 17:55:14 I do too do something! 17:55:15 add to it 17:55:20 Except that. 17:55:24 Ah, a ZenBot :) 17:55:26 And this. 17:55:31 ZenBot? 17:55:49 just sits and meditates. 17:55:50 ihope_ do you not know any scripting language or programming language? 17:55:59 I know some. 17:56:06 !exec "I"" do " " a few things."AddAddPrntNl 17:56:09 I do a few things. 17:56:09 Huh? 17:56:12 whoops 17:56:17 Yay! 17:56:37 !eval +4 3 17:56:38 +4 3=7 17:56:40 Huh? 17:56:44 -!- ihope_bot has quit (Remote closed the connection). 17:56:48 !print Hello, world! 17:56:50 that's all 17:56:50 Hello, world! 17:56:52 Huh? 17:56:55 well... 17:56:58 !colors 17:57:02 !print oso 17:57:02 Huh? 17:57:05 oso 17:57:06 Huh? 17:57:09 !print oso 17:57:10 !print oso 17:57:11 oso 17:57:12 Huh? 17:57:12 oso 17:57:13 !colors 17:57:14 Huh? 17:57:16 Huh? 17:57:18 EgoBot's clueless. 17:57:20 :DD 17:59:32 oerjan, if i make a Chr function to convert a number to a character (string) that has the same ascii value, will you try a quine? :D 17:59:56 because it's too easy with escapes 18:01:22 * SimonRC reads 18:01:45 whoops. i guess so. 18:02:05 :DD 18:02:37 someone make an interactive bot that only respondes in BF 18:03:05 _in_ BF? that could be awkward. 18:03:40 :) 18:03:42 yep 18:03:49 then have another bot in here the interprets it 18:03:51 lol 18:04:05 or better yet, a whitespace bot 18:04:12 well we already have EgoBot. 18:04:15 Let's have a channel containing every bot on Freenode. 18:04:44 And let's call it #skynet. 18:05:11 just to make the aspirations clear. :) 18:05:29 kotrin: wsbot would be a PITA because of the significance of NL 18:05:32 -!- oklobot2 has quit (Read error: 104 (Connection reset by peer)). 18:05:49 SimonRC: exactly 18:05:53 -!- oklobot2 has joined. 18:06:05 a bf bot could auto-interpret all data it gets :) 18:06:23 !exec 65ChrPrntNl 18:06:27 A 18:06:28 Huh? 18:06:31 yay! 18:06:49 !exec 32CharPrntNl 18:06:52 Huh? 18:06:52 bsmntbombdood: Maybe you kill python threads by forcing them to throw an uncatchable exception? 18:06:53 aww 18:07:03 don't break it, please :) it's very fragile 18:07:11 !exec 33ChrPrntNl 18:07:14 Huh? 18:07:16 ! 18:07:20 Huh? 18:07:22 !exec 34ChrPrntNl 18:07:24 " 18:07:26 Huh? 18:07:33 !exec 43ChrPrntNl 18:07:35 Huh? 18:07:36 + 18:07:44 !daemon exec bf +[,[-]+] 18:07:48 Shut up. 18:08:47 65[DblChrPrntNlDrp1AddDbl80Les] 18:09:06 !exec 65[DblChrPrntNlDrp1AddDbl80Les] 18:09:07 good... 18:09:08 :D 18:09:09 A 18:09:12 B 18:09:20 C 18:09:20 D 18:09:24 eh, 15 letters... why? :O 18:09:24 E 18:09:29 F 18:09:32 Uh oh 18:09:33 G 18:09:34 too much, stop it 18:09:36 H 18:09:41 I 18:09:45 J 18:09:49 K 18:09:53 L 18:09:58 M 18:10:00 Can arbitrary strings be printed? 18:10:00 N 18:10:04 oklopol: what lang is that? 18:10:05 O 18:10:13 i don't have a name for it 18:10:18 just made it with the bot 18:10:28 i call the lang oklobot too 18:10:35 do you have any kind of definition for it? 18:10:41 SimonRC: yes, the bot. 18:10:42 :-) 18:10:45 i should make one... maybe now 18:10:49 well, yeah :) 18:11:05 it's not open source tho, it's unbelievably bad code 18:11:12 oklopol: named after the 2billion-year-old nuclear reactor? 18:11:27 is there one called that? :D 18:11:39 oklopol->oklobot, named after that 18:11:46 no, it was found at Oklo 18:11:50 ah, ok 18:12:01 oklo? 18:12:11 yeah 18:13:01 see The Repositor Of All Huma Knowlage for more details 18:13:11 *Repositary 18:13:16 *Reposatory 18:13:19 *Reposetory 18:13:22 *Repository 18:13:42 *human? 18:13:47 yeah 18:13:54 d'oh 18:15:43 ihope_, they can 18:15:56 !exec "AAA"65ChrAddPrntNl 18:15:59 AAAA 18:16:35 Can you print newlines and carriage returns that way? 18:17:44 !exec 3PrntPrnt 18:17:59 !exec "3"PrntPrnt 18:18:07 !exec PrntNl 18:18:08 3PRIVMSG #esoteric :3PRIVMSG #esoteric :3PRIVMSG #esoteric :3 18:18:22 !exec !exec 18:18:23 Right, that problem. 18:18:53 !exec "$_"PrintNl 18:19:04 !exec "$_"65ChrAddPrintNl 18:19:12 :( 18:19:51 !exec 3PrntPrntNl 18:19:56 3PRIVMSG #esoteric :3 18:20:07 !exec Nl 18:20:56 !exec 343534534545345PrintPrintPrintPrintPrintPrintPrintPrintPrintNl 18:21:27 CakeProphet: evil. 18:21:29 :DD 18:21:36 Prnt, not Print 18:21:42 ... 18:21:59 hmm 18:22:04 !eval /1 0 18:22:05 :D 18:22:07 Huh? 18:22:08 !exec 343534534545345PrntPrntPrntPrntPrntPrntPrntPrntPrntPrntPrntNl 18:22:08 -!- oklobot2 has quit (Read error: 104 (Connection reset by peer)). 18:22:12 :D 18:22:12 Yay! 18:22:13 i knew it½! 18:22:14 :DDDDD 18:22:33 good, let's call that a feature. 18:22:42 -!- oklobot2 has joined. 18:22:45 !daemon eval bf +[,[-]+] 18:22:47 !exec 1 0Div 18:22:55 !exec 1 0Div 18:23:01 !exec 1 0DivPrntNl 18:23:03 0 18:23:05 !exec 0 1Div 18:23:12 !exec 0 1DivPrintNl 18:23:17 Hmm. 18:23:23 1/0 is 0 it seems :) 18:23:24 !eval /1 0 18:23:40 !exec 2+# 18:23:42 I think it became immune to division by zero. 18:23:43 -!- oklobot2 has quit (Read error: 104 (Connection reset by peer)). 18:23:46 !exec 0 1DivPrntNl 18:23:48 you killed it 18:23:50 that's all :) 18:23:56 What's 2+#? 18:23:56 !exec 0 1DivPrntNl 18:24:02 exec doesn't fail 18:24:15 just eval, which i did in the summer in 2 hours 18:24:19 !eval 1 + 2 18:24:26 oklopol: ...hmm? 18:24:28 !eval 18:24:32 EgoBot 18:24:34 -!- oklobot2 has joined. 18:24:35 Guys, it won't work without the bot. 18:24:46 what does egobot do? 18:24:47 ihope: ...huh? 18:24:58 !exec 2+# 18:25:07 !exec +2 # 18:25:09 !help 18:25:10 k, wasn't me that killed it 18:25:13 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 18:25:16 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 18:25:17 www.answers.com/polish%20notation 18:25:27 !exec +2 5 18:25:36 !eval +2 5 18:25:39 +2 5=7 18:25:43 goodz. 18:25:51 !eval +4 e 18:25:54 !daemon glassf glass {M[m(_o)O!(_i)I!(_e)(BF)!/<1>(_i)i.?(_e)(BF).?\]} 18:25:57 +4 e= 18:26:09 !glassf +. 18:26:15 !glassf +[.+] 18:26:22 ... 18:26:38 ? 18:26:45 !bf_textgen 18:26:55 !daemon glassf glass {M[m(_o)O!(_i)I!(_e)(BF)!/<1>(_i)i.?(_e)(BF).?(_o)o.?\]} 18:27:00 hmm 18:27:08 !glassf +. 18:27:10 !eval +4 $_ 18:27:13 +4 $_= 18:27:17 !glassf +[.+] 18:27:23 what language is oklobot written in? 18:27:43 !daemon glassf glass {M[m(_o)O!(_i)I!(_e)(BF)!/<1>(_i)i.?(_e)(bf).?(_o)o.?\]} 18:27:47 !glassf +. 18:28:02 !eval *2148 13985632964986718967296872098672069872506987256098247690824673459086376392045873490847649580674 18:28:05 c++ 18:28:05 *2148 13985632964986718967296872098672069872506987256098247690824673459086376392045873490847649580674=785619656 18:28:11 oklobot is 18:28:13 in c++ 18:28:20 kotrin, long 18:28:21 yeah 18:28:38 !eval -4 10 18:28:39 !daemon glassf glass {M[m(_o)O!(_i)I!(_e)(BF)!/<1>(_i)i.?(_e)(bf).?\]} 18:28:40 -4 10=6_ 18:28:42 !glassf +. 18:28:43 !eval ********************************************************************* 18:28:46 *********************************************************************= 18:28:53 !eval + 5_ 3 18:28:56 + 5_ 3=2_ 18:29:00 :O 18:29:03 wtf 18:29:13 c++ ftl 18:29:23 !daemon glassf glass {M[m(_o)O!(_i)I!(_e)(BF)!\<1>(_i)i.?(_e)(bf).?/]} 18:29:27 !glassf +. 18:29:31 okay, i'm not complaining if i've done that without realizing it 18:29:35 what's wrong with c++? 18:30:09 everything? 18:30:11 lol 18:30:25 for large projects it's not bad 18:30:32 works well with a framework as well 18:30:39 but small apps and sockets....*puke* 18:30:52 well, yeah, i always use python for converting words to hex or smth 18:30:58 c++ want's me to make a project 18:31:20 but python sucks with it's whitespace thing, i hate ws 18:31:30 wtf are you talking about 18:31:44 about c++ in small projects 18:31:44 * CakeProphet hasn't figured out why people hate whitespace so much. 18:32:03 whitespace is easily the best of all esoteric languages 18:32:24 it's so genius 18:32:27 kotrin, i wasn't referring to a lang called whitespace 18:32:39 just whitespace 18:32:46 oh 18:32:47 if that's what confused you 18:32:50 no 18:33:01 oklopol>well, yeah, i always use python for converting words to hex or smth 18:33:04 that confused me 18:33:06 I just find it amusing that all whitespace programs are invisible... but I don't really think it's that genius. :P 18:33:31 Any work on that Factory language? 18:33:43 it's the smartest idea for a esoteris imo 18:33:48 esoteric* 18:33:59 pythons whitespace thingie makes it hard to use in one line, and one line usage is the only thing i'd like to use it for 18:34:09 oh 18:34:11 learn perl 18:34:13 or ruby 18:34:17 i should 18:34:19 everything 18:34:20 yep 18:34:21 but no time 18:34:29 there's always time for ruby 18:34:33 it's the best language in the world 18:34:33 well, there is time, but not enough for everything 18:34:38 doubt it 18:34:38 * Sgeo <3 Python 18:34:49 * kotrin <3's ruby more then Sgeo <3's python 18:34:55 It would be nice if Python had a one-line mode... otherwise I love python. 18:35:09 but... I hate language advocacy... so lol stfu plz kthxbai 18:35:12 oklopol: you're right, lisp is better than ruby 18:35:33 K ftw 18:35:44 K has the smallest sudoku solver by far 18:35:48 K? 18:35:56 and that's pretty much all a lang needs :) 18:36:06 www.answers.com/K%20programming%20language 18:36:09 maybe 18:36:33 have you even used K? or are you just saying it because it's "different" 18:36:55 Does anyone here have any interest in BF-RLE? 18:37:03 i haven't used it, but i know the syntax 18:37:15 i could write a prog in it if that's what you mean 18:37:20 sgeo: bf-rle? 18:37:26 it's not that different 18:37:32 just the best APL 18:37:34 http://esoteric.voxelperfect.net/wiki/BF-RLE 18:37:39 and APL is nice and short 18:37:57 * Sgeo came up with it 18:38:54 sgeo, impressive :D 18:39:07 ty 18:39:17 I guess 18:40:23 -!- sp3tt has quit ("leaving"). 18:40:24 i like the base-62 thing 18:40:29 since i hate 10-base 18:40:39 so just replace any occurs < 3 to [operator][occurence-3] ? 18:40:54 occurs > 3 * 18:40:54 occurs > 3 18:40:55 >=3 18:41:01 >=3 right 18:41:05 what's the point of that? 18:41:12 -!- sp3tt has joined. 18:41:15 easier to write 18:41:27 faster to interpret without optimizations 18:41:29 If it were >=2, then +0 saves no more space than ++ 18:41:51 makes sense 18:42:00 And that means that in certain conditions, less space is saved 18:42:08 i just dont see the point of all the optimizations in the languages 18:42:09 yes, and since it's a separate lang, it guaranteed the speed bf interpreters only give you if they're good 18:42:40 BRB 18:42:56 well, +03 is better that >++++++++[<++++++++>-]<+. 18:42:59 *than 18:43:03 i see the languages as oppurtunities to learn high level languages by mkaing compilers with optimizations 18:43:19 -!- sp3tt has quit (Remote closed the connection). 18:43:33 sorry, +13. 18:43:46 !exec "!exec ""34ChrDupRotAddDupAddRotRotAddDupAddSwapAddPrntLn"34ChrDupRotAddDupAddRotRotAddDupAddSwapAddPrntLn 18:43:47 how is +13 == >++++++++[<++++++++>-]<+. 18:44:26 back 18:45:03 !bf >++++++++[<++++++++>-]<+. 18:45:04 +13. 18:45:10 erm 18:45:15 !exec 34ChrPrntLn 18:45:27 How do I evaluate BF here? 18:45:35 oklopol: i think your bot is dead. 18:45:38 kotrin, what's the difference? except that the bf one needs teh next cell too 18:45:45 omg 18:45:50 eh 18:45:52 it's not :O 18:45:56 !exec 34ChrPrntLn 18:46:03 !exec 34ChrPrntNl 18:46:04 :DD 18:46:06 "PRIVMSG #esoteric :"PRIVMSG #esoteric :" 18:46:08 aha 18:46:11 !bf >++++++++[<++++++++>-]<+. 18:46:16 i could out in both :D 18:46:23 *-out 18:46:28 !exec "!exec ""34ChrDupRotAddDupAddRotRotAddDupAddSwapAddPrntNl"34ChrDupRotAddDupAddRotRotAddDupAddSwapAddPrntNl 18:46:30 *+put 18:46:31 !help 18:46:36 !h 18:46:41 bleh 18:46:44 useless bots 18:47:08 I guess IRP#esoteric is an illegal language now? 18:47:12 *sigh* 18:47:31 Dup->Dbp 18:47:36 Dbl 18:47:40 ah 18:47:46 sgeo is there a better bf-rle tutorial somewhere? 18:48:03 forgot a lot since Dec 27 18:48:13 I can try to describe it better here 18:48:20 !exec "!exec ""34ChrDblRotAddDblAddRotRotAddDblAddSwapAddPrntNl"34ChrDblRotAddDblAddRotRotAddDblAddSwapAddPrntNl 18:48:34 Not sure how to describe it well though 18:48:36 argh! i know 18:48:42 i think i got it 18:48:54 !exec "!exec ""34ChrDblRotAddDblAddRotRotAddDblAddSwpAddPrntNl"34ChrDblRotAddDblAddRotRotAddDblAddSwpAddPrntNl 18:48:54 have you coded an interpretor for it? 18:48:56 !exec "!exec ""34ChrDblRotAddDblAddRotRotAddDblAddSwpAddPrntNl"34ChrDblRotAddDblAddRotRotAddDblAddSwpAddPrntNl 18:48:58 No 18:49:01 why not? 18:49:02 finally :) 18:49:07 Too lazy 18:49:22 heh 18:49:31 * oerjan bows. 18:49:43 WTF :D 18:49:45 are loops/output/input the same as bf? 18:50:12 yes 18:50:30 It's just done textually actually 18:50:46 Although an interpreter could optomize for it probably 18:52:36 I have been wondering... 18:52:39 what would the bf-rle be for ++++++++++[>+++++++>++++++++++>+++>+<<<<-] 18:54:06 +6[>+4>+7>+0>+<1-] 18:54:13 Translating it literally 18:56:26 hmmm 18:56:27 I know that PROLOG predicates can do some cool things that functions can't, like going both ways, but that stops you composing the predicates, and that Joy avoids the need for almost all variables, so is there a way to conbine the advantages? 19:00:24 hmmmm 19:00:35 i might make a bf -> bf-rle 19:00:38 script 19:00:41 out of sheer bordem 19:00:47 Neat! ty 19:05:26 -!- sp3tt has joined. 19:05:50 i coded the interpreter 19:05:52 in the ide 19:05:58 and i crashed it 19:06:03 so, again i go :) 19:08:16 ? 19:08:23 BF-RLE 19:08:32 scribed it in python 19:09:00 i'll make it again noe 19:09:02 *w 19:09:44 ok 19:09:59 can i do "0"<"5" in python?= 19:10:02 not really that hard 19:10:11 yay 19:10:14 i can 19:19:43 bsmntbombdood's away message is still "sleep", and it's past 1 PM/ 19:19:58 i woke up 15:00 today 19:20:04 its 11:14 for me 19:20:14 oklopol: how do you manage to do that? 19:20:14 21:14 \o/ 19:20:25 i sleep 9 hours 19:20:26 i havn't slept yet 19:20:39 * SimonRC nominates a candidate for the "slowest growing function" award: the inverse of f(n) = A(n, n). 19:20:41 kotrin: haven't slept since yesterday? 19:20:47 it tens to infinity, you know. 19:20:48 correct 19:20:50 *tends 19:21:01 SimonRC: f(n) = 0 grows more slowly. 19:21:26 I don't want to know how fast its inverse grows. 19:22:49 ihope_: It's 12 here 19:23:01 -!- bsmnt_bot_chroot has joined. 19:23:03 sgeo, does the the rule for bf-rle apply to . and , commands? 19:23:09 bsmntbombdood: then fix your clock. 19:23:11 yes 19:23:14 mkay 19:23:16 === CTCP time reply ``Sun Jan 7 13:13:29 2007'' from bsmntbombdood 19:23:16 ? 19:23:21 oh 19:23:25 heh 19:23:58 ~pexec self.raw("JOIN ##quantum") 19:23:59 And to [ and ], although I don't know why there would be enough of those in a row to make the RLE significant.. 19:24:07 I see the bot's not identified. 19:24:35 it isn't 19:24:44 Nor is Sgeo. 19:24:58 now it is 19:25:58 can't i use a var of the parent function in a subfunction? 19:26:07 ~pexec self.raw("PRIVMSG #esoteric :foo") 19:26:08 foo 19:26:32 FOO! 19:26:45 FOO??!?! 19:26:53 can't i? 19:26:54 OH NOES!!!!!!!!!!!!! 19:27:35 SimonRC: You kill a python thread by raising SystemExit exception 19:27:35 well... can't i? 19:28:02 but... can't i? :D 19:28:47 ~pexec self.register_raw('(.*)', lambda x: self.raw("PRIVMSG #esoteric %s" % x)) 19:28:59 ihope_: python uses weird scope for lambdas 19:29:07 no lambdas 19:29:09 or? 19:29:11 defs 19:29:12 ie no closures 19:29:21 i def new functions in functions 19:29:29 use the global bot object, "bot", in lambdas 19:29:29 ~pexec self.register_raw('(.*)', lambda x: (self.raw("PRIVMSG #esoteric %s" % x))) 19:29:37 bot.raw? 19:29:38 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 19:29:42 ha 19:29:47 -!- bsmnt_bot_chroot has joined. 19:29:47 bot, huh? 19:29:48 *ya 19:29:55 i'm not talking about a bot but genericly 19:29:55 ~pexec self.register_raw('(.*)', lambda x: bot.raw("PRIVMSG #esoteric %s" % x)) 19:29:59 generally 19:30:00 oklopol!i=okokokok@194.251.102.88 PRIVMSG #esoteric :generally 19:30:04 Yay! 19:30:04 ihope_!n=foo@c-71-205-100-59.hsd1.mi.comcast.net PRIVMSG #esoteric :Yay! 19:30:07 Now kill it. 19:30:08 ihope_!n=foo@c-71-205-100-59.hsd1.mi.comcast.net PRIVMSG #esoteric :Now kill it. 19:30:21 ~exec self.raw_regex_queue.pop() 19:30:21 bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~exec self.raw_regex_queue.pop() 19:30:26 :-) 19:30:37 you can kill it just as easily 19:30:56 ddef oso(a): 19:30:57 def poso(): 19:30:57 print a 19:30:57 return a 19:30:57 print poso(a) 19:31:01 that's illegal? 19:31:06 no... 19:31:08 -first d 19:31:17 Sgeo: http://pastie.caboo.se/31705 19:31:32 ~exec foo = "foo" 19:31:51 erm, I don't know Ruby 19:32:06 ~exec self.raw("PRIVMSG #esoteric :" + foo) 19:32:25 I take it that didn't work. 19:32:27 sgeo: learn it :) do you have installed on your machine? 19:32:34 I might 19:32:39 Does it handle [[[[]]]]? 19:32:45 no 19:32:48 should it? 19:33:01 just add another element to the operators array 19:33:04 ']' 19:33:14 and it will 19:33:28 Oh, and it's supposed to strip all comments out 19:33:29 ihope_: ~pexec 19:33:30 def oso(a): 19:33:30 def poso(): 19:33:30 a+=1 19:33:30 poso() 19:33:30 print a 19:33:33 (non operaters) 19:33:38 mkay 19:33:43 Oh. Right. 19:34:04 bsmntbombdood, this is illegal, how do i go around it? 19:34:05 def oso(a): 19:34:05 def poso(): 19:34:05 a+=1 19:34:05 poso() 19:34:05 print a 19:34:13 ihope_: Did you see? I implemented ~kill 19:34:37 ~pexec foo = "foo" 19:34:47 ~pexec self.raw("PRIVMSG #esoteric :" + foo) 19:34:52 NameError: name 'foo' is not defined 19:34:59 ~pexec self.foo = "foo" 19:35:04 ~pexec self.raw("PRIVMSG #esoteric :" + self.foo) 19:35:05 foo 19:35:08 Yay! 19:35:39 bsmntbombdood, please tell me :-| 19:35:45 i'm desperate 19:35:50 ~pexec while 1: self.raw("PRIVMSG #esoteric :tick"); __import__("time").sleep(2) 19:35:50 tick 19:35:52 tick 19:35:54 tick 19:35:54 ~ps 19:35:55 0: 'while 1: self.raw("PRIVMSG #esoteric :tick"); __import__("time").sleep(2)', 4.50 seconds 19:35:56 tick 19:35:57 ~kill 0 19:36:03 ~ps 19:36:03 None 19:36:14 -!- oerjan has quit ("leaving"). 19:36:28 oklopol: you can do that 19:36:37 how? 19:37:21 or you mean that's legal code as it is? 19:37:26 i think so 19:37:42 Traceback (most recent call last): 19:37:43 File "", line 1, in ? 19:37:43 oso(4) 19:37:43 File "", line 4, in oso 19:37:43 poso() 19:37:43 File "", line 3, in poso 19:37:44 a+=1 19:37:46 UnboundLocalError: local variable 'a' referenced before assignment 19:37:59 nopez. 19:38:04 hm 19:38:27 i'd like to have that... assumed python'd work like that 19:38:47 i've now actually used an hour to make a trivial bf interpreter 19:42:52 Was "a" assigned before you did that? 19:43:09 a += 1 wouldn't work if a was never defined before that. 19:43:28 or is a a global variable? 19:44:18 AFk for a bit 19:44:30 it's a param 19:44:32 def oso(a): 19:44:34 def poso(): 19:44:34 a+=1 19:44:34 poso() 19:44:34 print a 19:44:42 but, same result if it's created in the function 19:44:49 aaah 19:45:05 sgeo: http://pastie.caboo.se/31707 19:46:13 yeah... that should work thanks to closures. 19:47:29 ~foOOOOO~! 19:48:10 So Saturn says to earth, "Dude, you kicked Pluto out of the Solar System! He's a tad disgruntled." 19:48:20 Or something like that. 19:49:41 * bsmntbombdood feels leet 19:49:45 ~kill 0 19:49:45 Proccess 0 does not exist 19:50:50 -!- digital_me has joined. 19:51:02 The code to kill the threads is only 14 lines, but it took like 4 hours to write 19:53:20 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~([a-zA-Z]*).*", lambda x,y : bot.raw("PRIVMSG %s :Error: ~%s might be an invalid command" % (y.group(1),y.group(2)))) 19:53:27 ~oogity boogity 19:53:33 ~pexec self.register_raw(r"\S+ PRIVMSG (\S+) :~([a-zA-Z]*).*", lambda x,y : bot.raw("PRIVMSG %s :Error: ~%s might be an invalid command" % (y.group(1),y.group(2)))) 19:53:34 ~pexec 19:53:34 Error: ~pexec might be an invalid command 19:53:40 CakeProphet, do you have a solution? 19:53:41 ~oogity boogity 19:53:41 Error: ~oogity might be an invalid command 19:53:46 ~ps 19:53:46 None 19:53:46 Error: ~ps might be an invalid command 19:53:50 Woot! 19:53:53 ... 19:54:16 ~ 19:54:17 Error: ~ might be an invalid command 19:54:17 ~pexec self.pop_register_raw() 19:54:17 Error: ~pexec might be an invalid command 19:54:25 ~oogity boogity 19:54:25 Error: ~oogity might be an invalid command 19:54:31 Well, that sure didn't work. 19:54:43 ~pexec self.raw_regex_queue.pop() 19:54:43 Error: ~pexec might be an invalid command 19:54:47 ~ 19:54:50 oklow well python only speaks in globals, locals. and closures. 19:54:54 what are you guys coding? 19:55:03 kotrin: irc bots~ 19:55:04 ! 19:55:11 oh, bleh 19:55:20 kotrin: this irc bot is cool 19:55:26 does python have an irc library? 19:55:36 Don't think so 19:55:55 CakeProphet, i have 3 vars i need to change in a subfunction 19:56:02 how should i do that? 19:56:23 make them globals? 19:56:37 ~pexec self.raw("JOIN ##quantum") 19:56:41 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 19:56:43 errrrrr.... how? 19:56:46 oh 19:56:47 Make your functions side effect free? 19:56:49 global a 19:57:00 -!- EgoBot has joined. 19:57:04 bsmntbombdood, easier this way 19:57:14 ~ps 19:57:15 None 19:57:22 ~exec self.print_callbacks() 19:57:26 ~quit 19:57:27 -!- bsmnt_bot_chroot has quit. 19:57:40 -!- bsmnt_bot_chroot has joined. 19:57:55 now it just restarts itself if one of you kill it 19:58:11 k how should i remove side-effects? i want a function that does a single brainfuck operation 19:58:12 ~pexec self.raw(1/0) 19:58:22 done on my current stack and pointers 19:58:22 Wow, it didn't die. 19:58:25 ihope_: Exceptions are caught in ~exec 19:58:47 ~pexec self.raw("QUIT") 19:58:47 -!- bsmnt_bot_chroot has quit (Client Quit). 19:58:55 AND even if they weren't, they run in a different thread, so the main thread wouldn't die 19:59:01 Is it restarting? 19:59:03 and see, there we have a problem 19:59:06 oklopol it should just simply work like you expect it to. 19:59:12 It doesn't know it quited 19:59:15 Yes, I see. 19:59:16 -!- bsmnt_bot_chroot has joined. 19:59:26 if we do ~quit, it does 19:59:28 ~qui 19:59:31 ~quit 19:59:31 you mean this should work? 19:59:31 -!- bsmnt_bot_chroot has quit (Client Quit). 19:59:31 def oso(a): 19:59:31 def poso(): 19:59:31 a+=1 19:59:31 poso() 19:59:31 print a 19:59:33 -!- bsmnt_bot_chroot has joined. 19:59:36 ~pexec self.raw("PART #esoteric") 19:59:37 -!- bsmnt_bot_chroot has left (?). 19:59:47 -!- bsmnt_bot_chroot has joined. 19:59:55 (that was manual) 20:00:01 Rather tricky to so a ~pexec after PARTing it. 20:00:34 ~pexec self.raw("PART #esoteric") 20:00:34 -!- bsmnt_bot_chroot has left (?). 20:00:48 -!- bsmnt_bot_chroot has joined. 20:00:56 * Sgeo is back 20:01:03 oklopol, I think so. 20:01:29 * SimonRC goes 20:01:31 ~exec self.register_raw(":\S+ PART #esoteric :.*", lambda x : bot.raw("JOIN #esoteric")) 20:01:38 ~pexec self.raw("PART #esoteric") 20:01:39 -!- bsmnt_bot_chroot has left (?). 20:01:39 -!- bsmnt_bot_chroot has joined. 20:01:44 neat 20:01:53 ~pexec self.register_raw("(:\S* )PRIVMSG \S* :~emerg(.*)", lambda x,y: self.do_exec(y)) 20:02:02 ~emerg self.raw("PRIVMSG #esoteric :Foo") 20:02:02 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 20:02:05 -!- bsmnt_bot_chroot has joined. 20:02:07 Yay. 20:02:12 you killed it 20:02:15 CakeProphet, well it doesn't 20:02:20 NameError: global name 'self' is not defined 20:02:27 D'oh. 20:02:31 ~pexec self.register_raw("(:\S* )PRIVMSG \S* :~emerg(.*)", lambda x,y: bot.do_exec(y)) 20:02:33 -!- digital_me has quit ("leaving"). 20:02:33 ~exec self.register_raw(":\S+ PART #esoteric :.*", lambda x : bot.raw("JOIN #esoteric")) 20:02:38 ~emerg self.raw("PRIVMSG #esoteric :Foo") 20:02:38 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 20:02:40 -!- bsmnt_bot_chroot has joined. 20:02:44 * ihope_ wins 20:02:46 -!- digital_me has joined. 20:02:57 TypeError: do_exec() takes exactly 3 arguments (2 given) 20:03:03 Three? 20:03:15 Really, now... 20:03:17 -!- digital_me has quit (Client Quit). 20:03:29 Yeu need one more 20:03:30 -!- digital_me has joined. 20:03:56 def do_exec(self, message, r) 20:04:03 I gave it... like, one? 20:04:16 What's r? 20:04:32 Methods have an implied first arg. 20:04:44 So thats two 20:04:49 ~pexec self.register_raw("(:\S* )PRIVMSG \S* :~emerg(.*)", lambda x,y: bot.do_exec(y,r)) 20:04:54 Ah. 20:05:00 um no 20:05:06 ~emerg self.raw("PRIVMSG #esoteric :Foo") 20:05:07 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 20:05:09 -!- bsmnt_bot_chroot has joined. 20:05:11 r is the regex object 20:05:22 The regex? 20:05:37 lambda message, regex_obj 20:05:53 lambda x, y 20:06:18 ~pexec self.register_raw(":\S* PRIVMSG \S* :~emerg(.*)", lambda x,y: bot.do_exec(x,y)) 20:06:22 All confusing, I'm sure. 20:06:30 ~emerg self.raw("PRIVMSG #esoteric :Foo") 20:06:46 ~exec self.raw_regex_queue.pop() 20:06:56 ~pexec self.register_raw(":\S* PRIVMSG \S* :~emerg (.*)", lambda x,y: bot.do_exec(x,y)) 20:07:06 python don't like leading spaces 20:07:09 Oh. 20:07:17 Right. 20:07:26 ~pexec self.raw("PRIVMSG #esoteric :" + (lambda x: (lambda closure: x)("Doop"))("Hello, World!")) 20:07:27 Hello, World! 20:07:37 oklopol, It works for lambdas :D 20:07:44 ~exec self.raw_regex_queue.pop() 20:07:48 ~pexec self.register_raw(":\S* PRIVMSG \S* :~emerg(.*)", lambda x,y: bot.do_exec(x,y)) 20:07:55 ~emergself.raw("PRIVMSG #esoteric :Foo") 20:07:55 Foo 20:07:59 :-) 20:08:08 ~exec self.raw_regex_queue.pop() 20:08:12 ~pexec self.register_raw(":\S* PRIVMSG \S* :~emerg (.*)", lambda x,y: bot.do_exec(x,y)) 20:08:41 You know, "lambda x,y: bot.do_exec(x,y)" is actually pretty pointless. 20:08:53 indeed 20:10:55 CYCLE WASTER 20:11:04 CYCLE WASHER 20:12:13 ~pexec self.register_raw(":\S* PRIVMSG \S* :~emerg (.*)", bot.do_exec) 20:12:32 who wants the source? 20:12:35 http://bsmntbombdood.mooo.com/chroot_ircbot.py 20:14:40 Meeeeeeeeee! 20:15:02 Does it require root access or anything? 20:15:27 Only if you chroot it 20:15:45 as you can see it drops root if it has it on line 256 20:16:08 bsmnt Have you considered using **args? 20:16:13 It drops root if it has it... what if it has something else? 20:16:14 for what? 20:16:19 the constructor. 20:16:27 oerjan went already? 20:16:34 CakeProphet: Probably should 20:16:37 well, he gets in the reference :) 20:16:50 CakeProphet: But that is like the least interesting part of the bt 20:17:05 def __init__(self, **args) IRCbot(name="whooo", ident="hahahaha") 20:17:16 yeah, i know 20:19:37 ihope_: "what if it has something else?"? 20:20:02 Does it do any sandboxing of itself besides root-dropping? 20:20:09 no 20:20:17 Hmm. 20:20:26 there's a bash start up script 20:20:28 chroot $CHROOT /usr/bin/python2.4 /bot/ircbot.py 20:20:34 Oh, who cares. 20:20:38 * ihope_ downloads 20:21:30 bsmnt You could pickle the raw_regex_queue between executions. 20:21:45 no, you can't pickle functions 20:21:47 Pickle? 20:21:59 ihope_: Python's way of serializing objects 20:22:09 * CakeProphet actually made a way to pickle functions. :D 20:22:29 it was nessicary for my MUD to have pickle-able functions... since the source code is editable mid-game. 20:22:39 I could however, dump the regexes and ~exec source codes 20:22:48 The source... uh... 20:23:16 what? 20:23:25 ...is editable mid-game? 20:23:41 as in... the game has facilities for programming itself. 20:23:47 softcodedly. 20:24:35 After the initial bootstrap... most of the "physical" sourec files are no longer needed... 20:24:36 Gack! 20:25:25 Whoa. 20:25:39 Note to self: don't chmod u_ 20:25:41 Erm. 20:25:46 Note to self: don't chmod u+x just any old Python file. 20:26:14 On the other hand, I accidentally taught myself how to write a basic shell script thingy right then. 20:26:47 I probably got the usage stuff for import ten times or something. 20:27:27 ? 20:27:45 I chmod u+x'd that Python file and ran it. 20:27:57 ok? 20:28:43 so? 20:28:54 It didn't work. 20:29:11 CakeProphet: Congratulations, you've won the awful spelling award. "nessicary" is one of the worst spellings I've ever seen. It's "necessary". Let's give 'im a hand! 20:30:44 :D 20:31:14 o/ 20:31:32 my reference is ready, tho it's a bit of a stub 20:32:04 I take it I'll want a #!/usr/bin/env python at the top of that thing. 20:32:10 yeah 20:32:20 are you going to chroot it? 20:32:26 No. 20:43:28 get it running? 20:56:16 Yeah, I'll do that. 21:07:29 -!- ShadowHntr has joined. 21:10:37 ~pexec "foo" 21:11:03 ~ps 21:11:04 None 21:11:14 ~pexec while True: pass 21:11:15 ~ps 21:11:16 0: 'while True: pass', 1.48 seconds 21:11:18 ~ps 21:11:18 0: 'while True: pass', 4.13 seconds 21:11:20 ~ps 21:11:20 0: 'while True: pass', 6.21 seconds 21:11:31 ~ps 21:11:31 0: 'while True: pass', 17.08 seconds 21:11:35 ~ps 21:11:36 0: 'while True: pass', 21.76 seconds 21:11:38 ~kill 0 21:11:40 ~ps 21:11:41 None 21:11:44 woooooo 21:15:06 ~exec pass 21:15:11 Now tell me what that does. 21:16:56 returns true? 21:20:35 ~exec self.raw(pass) 21:20:41 ...No, not that. 21:20:46 ~exec self.raw("PRIVMSG #esoteric" + pass) 21:20:52 No, not that either. 21:20:55 ~exec self.raw("PRIVMSG #esoteric :" + pass) 21:20:59 Ere we go. 21:21:05 Am I spamming you with error messages? 21:21:56 -!- Sgeo has quit (Remote closed the connection). 21:26:15 -!- Sgeo has joined. 21:26:38 ihope_: ~pexec 21:26:51 Oh 21:26:57 ~pexec self.raw("PRIVMSG #esoteric :" + pass) 21:27:05 SyntaxError: invalid syntax 21:28:12 ~pexec listen(self) 21:28:27 NameError: name 'listen' is not defined 21:28:28 ~pexec self.raw("PRIVMSG #esoteric :foo") 21:28:29 foo 21:28:31 What? 21:28:40 it's self.listen 21:28:48 !pexec self.listen 21:28:51 ~pexec self.raw("PRIVMSG #esoteric :foo") 21:28:52 foo 21:28:52 Huh? 21:28:53 () 21:28:58 ... 21:29:04 ~pexec self.listen 21:29:07 () 21:29:08 ~pexec self.raw("PRIVMSG #esoteric :foo") 21:29:09 foo 21:29:13 ()? 21:29:16 I assume you are trying to call self.listen 21:29:25 Yes. 21:29:35 ~pexec self.listen() 21:29:37 ~ps 21:29:38 0: 'self.listen()', 2.08 seconds 21:29:46 Oh. 21:29:57 Curse Python or Haskell. 21:30:45 ~emerg self.raw("PRIVMSG #esoteric :foo") 21:30:45 foo 21:30:45 foo 21:30:45 foo 21:30:50 Uh. 21:30:58 Um. 21:30:58 ~heh 21:31:01 heh 21:31:03 ~ps 21:31:04 0: 'self.listen()', 88.13 seconds 21:31:07 ~kill 0 21:31:11 ~ps 21:31:11 0: 'self.listen()', 95.64 seconds, killed 21:31:23 ~emerg self.raw("PRIVMSG #esoteric :foo") 21:31:23 foo 21:31:24 foo 21:31:24 foo 21:31:29 Hmm. 21:31:43 hmm 21:31:59 ~ps 21:32:00 0: 'self.listen()', 143.97 seconds, killed 21:32:06 DIE DAMN YOU 21:33:15 ~pexec self.do_callbacks(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~exec self.raw('PRIVMSG #esoteric :foo')") 21:33:15 foo 21:33:19 Yay! 21:33:25 heh 21:33:48 ~exec self.print_callbacks() 21:33:56 duh you dumb shit 21:34:06 you put ~emerg in there 4 times 21:34:17 That's nice. 21:34:23 ~exec for i in range(4): self.raw_regex_queue.pop() 21:34:26 ~exec self.print_callbacks() 21:34:33 ~ps 21:34:33 0: 'self.listen()', 297.63 seconds, killed 21:35:52 ~pexec self.raw("PRIVMSG #esoteric :" + [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue]) 21:36:14 TypeError: cannot concatenate 'str' and 'list' objects 21:36:19 Pah. 21:36:23 use %s 21:36:45 ~pexec self.raw("PRIVMSG #esoteric :%s" % [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue]) 21:36:46 [('^PING.*$', 'pong'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~quit ?(.*)', 'do_quit'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~raw (.*)', 'do_raw'), ('^\\S+ PRIVMSG \\S+ :~ctcp (\\S+) (.+)', 'do_ctcp'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~exec (.*)', 'do_exec'), ('\\S+ PRIVMSG #esoteric :~pexec (.*)', 'do_exec'), ('\\S+ PRIVMSG \\S+ :~ps', 'do_ps'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill' 21:36:48 -!- oklobot2 has quit (Read error: 104 (Connection reset by peer)). 21:36:50 Fun. 21:37:22 indeed 21:38:09 ~pexec self.esoteric = lambda x: self.raw("PRIVMSG #esoteric :%s" % x) 21:38:14 ~pexec self.esoteric(3) 21:38:36 NameError: global name 'self' is not defined 21:38:39 ~pexec self.esoteric = lambda self, x: self.raw("PRIVMSG #esoteric :%s" % x) 21:38:44 ~pexec self.esoteric(3) 21:38:56 ~pexec self.esoteric = lambda self, x: bot.raw("PRIVMSG #esoteric :%s" % x) 21:39:06 ~pexec self.esoteric(3) 21:39:07 ~pexec self.esoteric(3) 21:39:26 one sec 21:39:27 You figure it out. 21:39:36 ~pexec self.raw_regex_queue.pop()\ 21:39:44 ~pexec self.raw_regex_queue.pop() 21:40:06 ~pexec self.esoteric = lambda x: bot.raw("PRIVMSG #esoteric :%s" % x) 21:40:17 ~exec self.esoteric(3) 21:40:17 3 21:40:21 odd 21:41:30 ~exec self.esoteric(self.esoteric) 21:41:52 ~pexec self.esoteric(self.esoteric) 21:41:53 at 0xb7c609cc> 21:42:06 -!- Sgeo has quit (Remote closed the connection). 21:42:26 * ihope_ slaps himself 21:42:34 * ihope_ slaps GregorR, too, just because 21:43:32 ~pexec self.esoteric(1/0) 21:43:40 no 21:43:44 No? 21:43:47 1/0 doesn't have a result 21:43:56 Did that give an error? 21:44:07 raises an except before self.esoteric is called 21:44:53 ZeroDivisionError: integer division or modulo by zero 21:45:29 I take it putting a catch in self.esoteric won't work. 21:45:44 nope, self.esoteric is never called 21:46:24 Thunk, then? 21:46:35 ? 21:46:48 Can I declare a lambda that takes no arguments? 21:46:56 think so 21:47:04 How? 21:47:12 lambda : 1 21:47:28 ~pexec self.esoteric = lambda x: bot.raw("PRIVMSG #esoteric :%s" % x()) 21:47:37 ~pexec self.esoteric(lambda: "foo") 21:47:38 foo 21:47:47 Wonderful. 21:48:34 How do I declare a function that can take a variable number of arguments? 21:49:19 lambda *x : x 21:49:29 type(x) == list 21:49:30 x being a tuple 21:49:37 er, yeah 21:49:47 that's for positional arguments though. 21:49:54 to do keyword arguments use **x 21:49:58 x being a dictionary. 21:50:04 Positional'll work. 21:51:37 And how would I take the first element of that list and apply it to the rest of the elements? 21:51:45 heh 21:52:01 lambda *x : x[0](x[1:]) 21:53:03 There the arguments are the remaining elements of the list? 21:53:38 huh? 21:53:53 If the elements are foo, bar, and baz, will that call foo(bar,baz)? 21:53:59 yeah 21:54:05 ~pexec self.apply_thunk = lambda *x: lambda: x[0](x[1:]) 21:54:07 lisp stil 21:54:13 *style 21:54:14 What? 21:54:16 Oh. 21:55:58 ~pexec self.esoteric(self.apply_thunk(lambda x,y: x+y, 3, 5)) 21:56:16 What's the error this time? 21:56:21 TypeError: () takes exactly 2 arguments (1 given) 21:56:28 :/ 21:57:11 Wait, wait... 21:57:12 ~exec print self.apply_thunk(lambda x,y: x+y, 3, 5) 21:57:32 Ideally, that's a lambda taking no arguments. 21:57:34 hmm 21:57:41 What is it? 21:57:59 apply_thunk is returning a function 21:58:10 Yeah, it's supposed to do that. 21:58:13 ~pexec print self.apply_thunk(lambda x,y: x+y, 3, 5)() 21:58:17 ~pexec print self.apply_thunk(lambda x,y: x+y, 3, 5)(1,2) 21:58:25 ~pexec print self.apply_thunk(lambda x,y: x+y, 3, 5)() 21:58:47 hmm 21:59:00 What did those do? 21:59:10 TypeError: () takes no arguments (2 given) 21:59:12 called the function returned by apply_thunk... I'd imagine. 21:59:15 TypeError: () takes exactly 2 arguments (1 given) 21:59:39 ?????? 21:59:42 Use parenthesis to avoid any parsing confusion. 21:59:44 The first one is given by the first and the third? 21:59:54 And the second is given by the second? 22:00:04 ooooh 22:00:06 I know 22:00:16 ~exec self.raw_regex_queue.pop() 22:00:31 ~pexec self.apply_thunk = lambda *x: lambda: x[0](*x[1:]) 22:00:42 ~pexec print self.apply_thunk(lambda x,y: x+y, 3, 5) 22:00:48 crap 22:00:55 ~pexec self.esoteric(self.apply_thunk(lambda x,y: x+y, 3, 5)) 22:00:55 8 22:00:58 Works. 22:01:11 ~pexec print self.apply_thunk(lambda x,y: x+y, 3, 5)() 22:01:16 yeah 22:01:32 ....you basically just created a.... lambda wrapper. 22:02:32 apply_thunk creates a thunk, and esoteric forces it. 22:02:39 what's a thunk? 22:02:57 It's an expression that hasn't been evaluated yet, pretty much. 22:03:20 And it's represented as a function taking nothing. 22:03:44 Now to combine esoteric with apply_thunk, because there's really no reason to have both. 22:04:23 ~pexec self.esoteric = lambda *x: bot.raw("PRIVMSG #esoteric :%s" % (lambda: x[0](*x[1:]))()) 22:04:37 ~pexec self.esoteric(lambda x,y: x+y, 3, 5) 22:04:38 8 22:04:46 Yay! 22:04:47 a thunk is a lambda then. 22:04:51 a lambda with no arguments. 22:04:51 Yep. 22:05:00 ...so... just use a lambda with no arguments. :P 22:05:01 And there's really no reason to keep the thunk stuff. 22:05:19 ~pexec self.esoteric = lambda *x: bot.raw("PRIVMSG #esoteric :%s" % x[0](*x[1:])) 22:05:25 ~pexec self.esoteric(lambda x,y: x+y, 3, 5) 22:05:26 8 22:05:36 * CakeProphet considered a thunk-like thing for a language. 22:05:56 I wanted to give control to odd parts of the languages operation... such as when to evaluate. 22:06:46 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:09:40 -!- Sgeo has joined. 22:10:03 ~pexec self.esoteric = lambda *x: bot.raw("PRIVMSG #esoteric :%s" % try: x[0](*x[1:]) except: "Error") 22:10:12 That work, bsmntbombdood? 22:11:20 ~pexec self.esoteric(lambda x, y: x/y, 1, 0) 22:11:30 I'm guessing not. 22:11:40 ~pexec self.esoteric(lambda: 3) 22:11:40 3 22:11:49 self.esoteric is still working, at least. 22:17:34 what? 22:17:40 ZeroDivisionError: integer division or modulo by zero 22:17:58 SyntaxError: invalid syntax 22:18:14 you can't have try: and except: on the same line 22:18:16 The SyntaxError's for the try/except thing up there? 22:18:22 yeah 22:18:36 ~ps 22:18:47 ... 22:19:09 ~exec print "foo" 22:19:19 ~exec self.print_callbacks() 22:19:27 uuuh 22:19:32 ~quit 22:19:33 -!- bsmnt_bot_chroot has quit. 22:19:35 -!- bsmnt_bot_chroot has joined. 22:19:39 ~ps 22:19:39 None 22:19:51 ~pexec self.esoteric = lambda *x: bot.raw("PRIVMSG #esoteric :%s" % x[0](*x[1:])) 22:20:02 -!- digital_me has quit ("Lost terminal"). 22:20:51 ~pexec __import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I rule") 22:20:54 ~ps 22:20:54 0: '__import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I rule")', 2.90 seconds 22:21:07 ~pexec __import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I lose") 22:21:08 ~ps 22:21:09 0: '__import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I rule")', 17.31 seconds 22:21:09 1: '__import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I lose")', 1.60 seconds 22:21:12 ~kill 1 22:21:17 ~ps 22:21:17 0: '__import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I rule")', 25.37 seconds 22:21:17 1: '__import__("time").sleep(100); self.raw("PRIVMSG #esoteric :I lose")', 9.66 seconds, killed 22:21:35 Killed, not dead. 22:21:40 not yet 22:21:52 It will be killed when sleep returns 22:22:31 I rule 22:23:00 indeed 22:23:02 ~ps 22:23:02 None 22:23:04 -!- kotrin has left (?). 22:23:07 see? 22:23:18 Cool. 22:23:39 It's some crazy code to do that 22:24:10 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:24:12 -!- bsmnt_bot_chroot has joined. 22:24:17 ~pexec __import__("time").sleep(10); self.raw("PRIVMSG #esoteric :I lose") 22:24:28 I lose 22:24:36 interesting 22:24:56 (watching debug messages on stdout) 22:25:04 ~pexec thread.start_new_thread(self.exec_execer, ("self.raw('PRIVMSG #esoteric :I win')", (globals(), locals()))) 22:25:04 I win 22:25:11 Wonderful. 22:25:26 wonderful 22:25:46 ~pexec self.exec_string = lambda x: thread.start_new_thread(self.exec_execer, (x, (globals(), locals()))) 22:26:02 ~pexec self.exec_string("PRIVMSG #esoteric :Wonderful.") 22:26:20 NameError: global name 'self' is not defined 22:26:32 the scope for lambdas is fucked up 22:26:33 ~pexec self.exec_string = lambda x: thread.start_new_thread(bot.exec_execer, (x, (globals(), locals()))) 22:26:39 ~pexec self.exec_string("PRIVMSG #esoteric :Wonderful.") 22:26:50 NameError: name 'PRIVMSG' is not defined 22:26:56 I'm guessing that's the globals() and locals() 22:27:15 ~pexec self.exec_string("self.raw('PRIVMSG #esoteric :Wonderful.')") 22:27:19 hrm 22:27:21 right 22:27:27 ~pexec self.exec_string("bot.raw('PRIVMSG #esoteric :Wonderful.')") 22:27:27 Wonderful. 22:27:41 Oh, right. 22:27:55 In that ~pexec, we were given 8 chances to quit 22:28:17 Hmm? 22:28:30 ie, the trace function was called 8 times 22:30:37 ~pexec self.exec_string = lambda x: thread.start_new_thread(bot.exec_execer, (x, env)) 22:30:45 Did that give any errors? 22:30:52 not yet 22:30:59 ~pexec self.exec_string("self.raw('PRIVMSG #esoteric :Wonderful.')") 22:31:08 NameError: global name 'env' is not defined 22:31:15 Yay. 22:31:19 ~pexec self.exec_string("bot.raw('PRIVMSG #esoteric :Wonderful.')") 22:31:22 ... 22:31:27 ~pexec self.exec_string = lambda x: thread.start_new_thread(bot.exec_execer, (x, (globals(), locals()))) 22:31:33 there you go 22:33:09 but what's the point? 22:34:31 Executing multiple lines of stuff. 22:34:39 aaah 22:34:58 Aaah? 22:35:06 Aaah. 22:35:10 I concur 22:35:16 Oh. 22:35:51 So not at all like "oof"? 22:36:53 no 22:38:19 ~pexec self.exec_string("def self.exec_string(x):\n env = (globals(), locals())\n thread.start_new_thread(bot.exec_execer, (x, env))") 22:38:31 ~pexec self.exec_string("self.raw('PRIVMSG #esoteric :Wonderful.')") 22:38:45 ~pexec self.exec_string("bot.raw('PRIVMSG #esoteric :Wonderful.')") 22:38:46 Wonderful. 22:38:54 That one worked, at least. 22:39:21 ~pexec self.exec_string("def self.exec_string(x):\n env = (globals(), locals())\n thread.start_new_thread(bot.exec_execer, (x, env))") 22:39:27 ~pexec self.exec_string("self.raw('PRIVMSG #esoteric :Wonderful.')") 22:39:42 Maybe three's the magic number. 22:39:48 ~pexec self.exec_string("def self.exec_string(x):\n env = (globals(), locals())\n thread.start_new_thread(bot.exec_execer, (x, env))") 22:40:02 ~pexec self.exec_string("self.raw('PRIVMSG #esoteric :Wonderful.')") 22:40:13 Maybe it's not. 22:40:31 Oh well. It still works. 22:43:35 NameError: name 'self' is not defined 22:43:49 SyntaxError: invalid syntax 22:44:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:44:06 -!- bsmnt_bot_chroot has joined. 22:44:18 ~pexec self.exec_string = lambda x: thread.start_new_thread(bot.exec_execer, (x, (globals(), locals()))) 22:45:21 I need to put a wrapper around stderr and stdout 22:46:07 -!- oerjan has joined. 22:47:31 sys.stdout.write = lambda x : self.raw("PRIVMSG #bsmnt_bot :%s" % x) 22:47:36 that should do it, right? 22:47:45 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:47:48 -!- bsmnt_bot_chroot has joined. 22:47:51 ~exec print "hi" 22:47:55 er 22:48:02 ~raw JOIN #bsmnt_bot 22:48:12 ~raw JOIN #bsmnt_bot 22:48:17 ~exec print "hi" 22:48:20 damn 22:48:38 ~exec sys.stdout.write("hi") 22:48:43 Unhandled exception in thread started by > 22:49:05 ????? 22:49:19 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:49:23 -!- bsmnt_bot_chroot has joined. 22:49:23 ~raw JOIN #bsmnt_bot 22:49:26 ~exec sys.stdout.write("hi") 22:49:30 grar 22:49:44 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:49:47 -!- bsmnt_bot_chroot has joined. 22:49:48 ~raw JOIN #bsmnt_bot 22:49:50 ~exec sys.stdout.write("hi") 22:51:12 arghhh 22:52:42 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:52:45 -!- bsmnt_bot_chroot has joined. 22:52:49 ~raw JOIN #bsmnt_bot 22:52:52 ~exec sys.stdout.write("hi") 22:52:58 ~exec sys.stderr.write("hi") 22:53:10 ~exec self.raw("PRIVMSG #esoteric :foo") 22:53:14 .... 22:54:05 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:54:06 -!- bsmnt_bot_chroot has joined. 22:54:09 ~raw JOIN #bsmnt_bot 22:54:13 ~exec sys.stderr.write("hi") 22:54:27 AttributeError: 'file' object attribute 'write' is read-only 22:54:40 WELL WELL WELL 22:55:25 -!- ivan` has joined. 22:55:39 I do need to write a wrapper class 22:55:54 -!- dantekgeek has joined. 22:56:00 -!- zedrdave has joined. 22:56:04 Hi there. 22:56:13 Ello. 22:56:39 I'm trying to learn programming, and someone on a forum told me that "brainfuck" would be a good easy starting language. 22:56:50 He was most likely joking. 22:56:56 aw damn 22:57:01 zedrdave: that was no fun 22:57:07 these guys are too seroius! 22:57:14 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:57:15 -!- bsmnt_bot_chroot has joined. 22:57:18 -!- dantekgeek has left (?). 22:57:20 ~raw JOIN #bsmnt_bot 22:57:25 ~exec sys.stderr.write("hi") 22:57:46 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:57:48 -!- bsmnt_bot_chroot has joined. 22:57:49 ~raw JOIN #bsmnt_bot 22:57:51 ~exec sys.stderr.write("hi") 22:57:52 hi 22:57:57 yaya 22:58:05 what, did he call _us_ serious? :) 22:58:22 this bsmnt thing isn't part of the lame troll 22:58:26 whatever it is 22:58:33 oerjan 22:58:46 is it okay i put your codes in oklobots reference? 22:59:06 -!- ivan` has left (?). 22:59:33 certainly 23:00:02 good, coz i did :) 23:00:04 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:00:05 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)). 23:00:06 -!- bsmnt_bot_chroot has joined. 23:00:13 ~exec print "exception 23:00:13 Traceback (most recent call last): 23:00:13 File "/bot/ircbot.py", line 168, in exec_execer 23:00:13 exec command in env[0], env[1] 23:00:15 File "", line 1 23:00:17 bsmnt_bot_chroot: you missed it! 23:00:17 23:00:19 print "exception 23:00:21 23:00:23 ^ 23:00:25 23:00:27 SyntaxError: EOL while scanning single-quoted string 23:00:37 It's a little bit spammy. 23:00:47 I'm working on it! 23:00:56 ~pexec 3 23:01:00 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:01:01 -!- bsmnt_bot_chroot has joined. 23:01:03 ~exec print "exception 23:01:14 .. 23:01:57 uuuh crap 23:01:57 ~qui 23:02:07 ~exec print "exception" 23:02:09 ??? 23:02:11 -!- zedrdave has left (?). 23:02:22 ~quit 23:02:22 it won't die 23:02:27 ~ps 23:02:30 ... 23:02:37 wtf happened 23:03:22 .... 23:03:26 DIE 23:04:21 may i recommend kill -9 ? :) 23:04:22 uuuh wtf 23:05:13 -!- bsmnt_bot_chroot has quit (Read error: 131 (Connection reset by peer)). 23:05:17 -!- bsmnt_bot_chroot has joined. 23:05:17 finally 23:05:22 foo 23:05:30 ~exec print "exception 23:05:30 Traceback (most recent call last): 23:05:31 File "/bot/ircbot.py", line 168, in exec_execer 23:05:31 exec command in env[0], env[1] 23:05:33 File "", line 1 23:05:35 23:05:37 print "exception 23:05:39 23:05:41 ^ 23:05:43 23:05:45 SyntaxError: EOL while scanning single-quoted string 23:06:00 still a bit spammy for a response to a single line 23:06:02 -!- pikhq has joined. 23:06:25 what should it send? 23:06:47 i believe EgoBot will send all but the first line to the original sender rather than the channel. 23:07:15 although not in all cases, confer !ps 23:07:43 I think a dedicated error channel is a good idea 23:08:51 Don't print blank lines. 23:09:05 that too 23:10:22 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:10:24 -!- bsmnt_bot_chroot has joined. 23:11:07 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:11:09 -!- bsmnt_bot_chroot has joined. 23:13:41 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:13:43 -!- bsmnt_bot_chroot has joined. 23:15:05 join #bsmnt_bot_chroot_errors, everyone 23:15:37 ~exec print "excpetion 23:15:40 i note you sometimes find self.register_raw a bit limiting. Perhaps add an optional guard argument, a lambda that can be used to add checks that are awkward with regexps. It could take the same arguments as the second lambda. 23:15:57 MY COMPUTER LIVES!!! 23:16:05 RUN AWAY! 23:16:24 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:16:26 -!- bsmnt_bot_chroot has joined. 23:16:27 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:16:29 -!- bsmnt_bot_chroot has joined. 23:16:44 oerjan: hmm, that might be nice 23:16:46 ~exec print "excpetion 23:17:23 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:17:25 -!- bsmnt_bot_chroot has joined. 23:17:29 ~exec print "excpetion 23:17:52 ok, #bsmnt_bot_chroot_errors has stderr and stdout redirected to it 23:18:35 !exec 3 23:18:39 ... 23:18:41 ~pexec 3 23:18:45 that's not an exception 23:18:51 Stop using ~exec, eh? 23:18:57 ~pexec print "hi" 23:18:58 ~pexec print 3 23:19:03 :) 23:19:26 ~pexec print "hi\nagain" 23:20:12 why not stdout here? 23:20:29 that would work too 23:21:43 can you put it? 23:22:23 hmm I need to change the interface for exec_execer then 23:23:58 you gonna do it?= 23:24:10 maybe 23:24:16 ~raw join #baadf00d 23:24:46 i mean, are you gonna do it now or just possibly later because i'll go to sleep if it takes >10 min 23:26:37 not right now 23:26:47 okay, nn then 23:26:50 -> 23:28:52 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:28:55 -!- bsmnt_bot_chroot has joined. 23:29:02 foo 23:30:50 ~exec print "asdf"" 23:31:09 When's the last time you registered a command? 23:31:28 ? 23:33:07 ~pexec self.register_raw('(.*)', lambda x,y: print x) 23:33:16 Does it work? 23:33:30 No? 23:33:42 ? 23:34:12 you can't print in a lambda 23:34:55 ~pexec self.register_raw('(.*)', lambda x,y: sys.write(x + "\n"))) 23:35:05 hmmm 23:35:15 ~pexec self.register_raw('(.*)', lambda x,y: self.raw("PRIVMSG #bsmnt_bot_chroot_errors :%s" % x)) 23:35:22 No errors? 23:35:23 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:35:24 -!- bsmnt_bot_chroot has joined. 23:35:27 hmmm 23:35:34 That clearly didn't work. 23:35:37 uuuh 23:36:16 I think you should try to catch a few more errors. 23:36:37 ~pexec self.register_raw(".*", lambda x : sys.__stdout__.write("message")) 23:36:39 Just have it spit error messages onto the channel. 23:36:39 a 23:36:48 CakeProphet: #bsmnt_bot_chroot_errors 23:37:04 ~pexec self.raw_regex_queue.pop() 23:37:38 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:37:40 -!- bsmnt_bot_chroot has joined. 23:37:53 ~pexec self.register_raw('(.*)', lambda x,y: self.raw("PRIVMSG #bsmnt_bot_chroot_errors :%s" % x)) 23:37:57 j 23:37:57 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:38:00 -!- bsmnt_bot_chroot has joined. 23:38:46 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:38:48 -!- bsmnt_bot_chroot has joined. 23:39:01 hmmm 23:39:07 ~pexec self.register_raw('(.*)', lambda x,y: self.raw("PRIVMSG CakeProphet :%s" % x)) 23:39:07 hmmm 23:39:20 -!- CakeProphet has quit ("haaaaaaaaaa"). 23:39:21 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:39:22 -!- bsmnt_bot_chroot has joined. 23:40:21 I think it's an error in the callback 23:42:21 -!- anonfunc_ has joined. 23:43:20 foo 23:43:23 ~ps 23:43:24 None 23:44:35 ~exec self.register_raw("\S+ PRIVMSG #esoteric :(~quine .*)", lambda x, y : bot.raw("PRIVMSG #esoteric :%s" % y.group(1))) 23:44:39 ~quine foo 23:44:39 ~quine foo 23:44:49 ~exec self.raw_regex_queue.pop() 23:44:55 ~exec self.register_raw("\S+ PRIVMSG #esoteric :(~quine.*)", lambda x, y : bot.raw("PRIVMSG #esoteric :%s" % y.group(1))) 23:45:12 ~quine foo 23:45:13 ~quine foo 23:45:14 ok 23:45:29 ~exec __import__("time").sleep("this is wrong") 23:45:45 ~exec raise SystemExit 23:45:49 ok 23:48:12 Windows doesn't really make any sense when it comes to tool tips... 23:48:19 Or ToolTips, or whatever they're called. 23:51:24 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:51:26 -!- bsmnt_bot_chroot has joined. 23:51:46 ok, now only tracebacks go to #bsmnt_bot_chroot_errors 23:51:57 stdout was pooping on the other threads 23:52:04 ~pexec print "exvckhjo 23:52:58 ~pexec print "exvckhjo" 23:53:02 good 23:54:45 -!- puzzlet has joined. 23:57:23 -!- anonfunc has quit (Connection timed out). 2007-01-08: 00:12:37 -!- Sgeo has quit ("Ex-Chat"). 00:27:11 ~pexec print "exvckhjo" 00:27:16 Wait, anonymous function? 00:29:48 ? 00:30:42 |<-- anonfunc has left chat.us.freenode.net (Connection timed out) 00:30:47 so? 00:30:48 Anonymous function. 00:31:34 ... 00:40:33 ~~~~~~~~ 00:43:16 ~pexec while 1: self.raw("PRIVMSG #esoteric :It's %s" % time.asctime(time.gmtime())); __import__("time").sleep(60 * 30); 00:43:16 It's Mon Jan 8 00:37:35 2007 00:43:22 ~ps 00:43:23 0: 'while 1: self.raw("PRIVMSG #esoteric :It\'s %s" % time.asctime(time.gmtime())); __import__("time").sleep(60 * 30);', 6.84 seconds 00:48:21 My bot is cool 00:49:53 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 00:49:56 -!- bsmnt_bot_chroot has joined. 00:52:42 very cool 00:54:53 What are asctime and gmtime? 00:55:12 Ascension time and game time? 00:55:13 gmtime == time from epoch 00:55:23 asctime formats it 00:55:32 I see. 00:55:37 And what's the logic behind those names? 00:55:45 dunno 00:56:02 Maybe they're... um... 00:56:18 ~pexec self.raw("PRIVMSG #esoteric :%s" % time.gmtime()) 00:56:19 (2007, 1, 8, 0, 50, 37, 0, 8, 0) 00:56:27 oh right 00:56:38 Maybe "a" is the Spanish pronoun "a" which can mean "to", and "s" stands for "string" and "c" for "converted". 00:56:45 heh 00:56:50 http://docs.python.org/lib/module-time.html 00:56:53 And gmtime would be like in GMT. 00:57:41 Or maybe asctime is short for ASCII. 00:58:03 who knows 00:58:08 quien sabe 01:00:27 that would probably be "convertado" or something. 01:00:51 And what's "string"? 01:01:15 no, it's generalissimo morte, a reference to Franco (ref. Monty Python) 01:01:37 ...What? 01:01:44 Oh. 01:01:53 Does that mean "generally dead"? 01:02:07 no, it means the Generalissimo is dead. 01:02:39 What's a Generalissimo? 01:03:21 There is only one Generalissimo. You do know he died not very long after the epoch. 01:03:55 Although to some, it seemed like an eternity. 01:07:16 ~exec foo 01:07:23 * bsmntbombdood feels leet 01:07:24 The "gmtime" name quite likely comes from "GMT", since there's also "localtime" which returns a struct tm with the numbers in the local time zone. 01:08:20 but everyone knows it's called UTC nowadays. hmph. 01:08:28 ~exec self.foo 01:08:29 ~exec hmph 01:08:39 pexec... 01:08:51 Well, stop using ~exec~ 01:08:55 fine 01:08:57 s/~/!/ 01:09:01 ~pexec self.foo 01:09:18 ~pexec self.self.self.raw("JOIN #esoteric") 01:09:42 ... 01:09:51 you could switch exec and pexec, since p can be either "public" or "privileged" as you wish. 01:10:11 I suppose 01:10:13 I'm less sure about "asctime"; it might be about ascii, or the "as" might be something mysterious. After all, there's ctime() which does to time_t the same thing asctime does to a struct tm. (And the "c" _there_ is probably from "convert".) 01:10:17 I might well start using lots of ~pexec then. 01:10:33 ihope_: want me to switch? 01:10:44 Might as well. 01:10:54 And by that, I mean yes. 01:11:11 ~quit 01:11:11 -!- bsmnt_bot_chroot has quit. 01:11:14 -!- bsmnt_bot_chroot has joined. 01:11:17 there you go 01:13:49 ~exec print "fooasdf" 01:14:11 ~exec bot.exec_execer("bot.raw('PRIVMSG #esoteric foo')",(globals(),locals())) 01:14:12 foo 01:14:19 Always fun. 01:14:39 always 01:15:00 Every single time. 01:15:24 ~exec bot.exec_execer("try:\n raise "foo",(globals(),locals())) 01:15:28 erg 01:16:15 ~exec bot.exec_execer("try:\n raise \"foo\"\nexcept:\n print 'hi'",(globals(),locals())) 01:16:23 yay 01:58:13 -!- CakeProphet has joined. 01:59:06 .msg memoserv del 1 01:59:11 er... 02:02:46 ~raw PRIVMSG CakeProphet :Fail 02:02:50 :) 02:06:02 :( 02:07:39 :) 02:08:49 -!- ShadowHntr has quit ("End of line."). 02:14:20 :( 02:14:31 :) 02:14:41 Wait, what? 02:15:53 -!- pikhq has quit (Read error: 54 (Connection reset by peer)). 02:16:33 ~foo 02:16:48 !ps 02:16:52 2 oerjan: ps 02:17:11 !daemon cat bf ,[.,] 02:17:22 !cat food 02:17:26 food 02:17:36 I just wanted to say that. 02:19:41 -!- pikhq has joined. 02:32:26 come on, someone do something clever with bsmnt_bot_chroot 02:33:30 ~exec bot.raw("PRIVMSG :Like what?") 02:33:55 well that didn't work. 02:34:03 You fail at the IRC protocol 02:34:15 argh! 02:34:30 ~exec bot.raw("PRIVMSG #esoteric :Like this then?") 02:34:30 Like this then? 02:34:37 yep 02:43:58 ~exec argle = 3 02:44:24 ~exec bot.raw("PRIVMSG #esoteric :" + argle) 02:44:41 ~exec bot.raw("PRIVMSG #esoteric :" + str(argle)) 02:44:57 hmm... 02:45:04 ~exec bot.argle = 3 02:45:08 ~exec bot.raw("PRIVMSG #esoteric :" + str(argle)) 02:45:37 ~exec bot.raw("PRIVMSG #esoteric :Huh?") 02:45:37 Huh? 02:46:18 hmm.. 02:46:24 ~exec bot.raw("PRIVMSG #esoteric :" + str(bot.argle)) 02:46:24 3 02:46:29 whew 02:47:35 oerjan: might want to join #bsmnt_bot_chroot_errors to see your errors 02:48:07 ~exec bot.raw("PRIVMSG #esoteric :" + str(argle)) 02:53:41 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 02:54:07 -!- CakeProphet has joined. 03:11:53 4 03:13:36 (1, 2) 03:40:52 -!- pikhq has quit ("leaving"). 04:08:33 -!- ihope_ has quit (Connection timed out). 04:45:37 -!- bsmnt_bot_chroot has quit. 04:45:40 -!- bsmnt_bot_chroot has joined. 04:48:47 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:48:49 -!- bsmnt_bot_chroot has joined. 04:50:26 -!- bsmnt_bot_chroot has quit (Client Quit). 04:50:29 -!- bsmnt_bot_chroot has joined. 04:51:14 -!- bsmnt_bot_chroot has quit (Client Quit). 04:51:17 -!- bsmnt_bot_chroot has joined. 04:52:08 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 04:52:10 -!- bsmnt_bot_chroot has joined. 05:06:03 -!- CakeProphet has quit (Read error: 113 (No route to host)). 05:15:53 -!- oerjan has quit ("leaving"). 05:24:04 mmm 05:24:16 I think I figured out how to do sandboxed execution in python 05:28:42 -!- RodgerTheGreat has quit. 05:34:53 -!- ShadowHntr has joined. 05:39:00 allowed_execs = copy.copy(__builtins__.__dict__) 05:39:18 allowed_execs["__import__"] = None 05:39:39 exec "importing anything here is impossible" in allowed_builtins 05:39:43 er 05:39:51 s/allowed_execs/allowed_builtins/ 05:40:36 allowed_builtins["open"] = None 05:40:45 exec "importing or opening anything here is impossible" in allowed_builtins 05:57:11 I think 05:57:39 oops, nope 05:57:47 exec "exec 'print open(\"foo\")' in {}" in my_builtins 05:57:48 :( 05:57:59 that's a pity 06:01:17 And exec is a statement, so that can't be taken away 06:36:43 -!- calamari has joined. 06:41:54 -!- calamari has quit ("Leaving"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:28:58 -!- ShadowHntr has quit ("End of line."). 10:39:20 -!- ihope_ has joined. 10:39:46 -!- ihope_ has changed nick to ihope. 13:35:57 -!- ihope has quit (Connection timed out). 16:22:17 -!- FabioNET has joined. 16:49:51 -!- digital_me has joined. 16:53:49 -!- tgwizard has joined. 17:18:35 -!- FabioNET has quit (Connection timed out). 17:18:45 -!- RodgerTheGreat has joined. 17:18:52 hi 17:46:52 -!- FabioNET has joined. 18:22:02 -!- FabioNET has quit (Client Quit). 18:34:36 -!- anonfunc_ has quit (Read error: 110 (Connection timed out)). 19:08:28 -!- jix__ has joined. 19:10:04 -!- jix__ has changed nick to ijx. 19:10:07 -!- ijx has changed nick to jix. 19:16:28 -!- RodgerTheGreat_ has joined. 19:16:28 -!- RodgerTheGreat has quit (Read error: 54 (Connection reset by peer)). 19:16:47 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 19:23:22 -!- ShadowHntr has joined. 19:27:41 http://esoteric.voxelperfect.net/wiki/PATH 19:27:49 can't be right 19:27:51 the example 19:52:17 http://esoteric.voxelperfect.net/wiki/BF-SC 19:52:39 this i don't understand, if you've got spare time, please tell me :) 19:53:03 ...what the silver coinage has to do with it 19:53:08 *sylver 19:59:49 -!- ShadowHntr has quit ("End of line."). 20:19:10 -!- pgimeno has changed nick to bobot. 20:19:28 -!- bobot has changed nick to pgimeno. 20:45:04 -!- oerjan has joined. 20:49:50 ~foo 20:54:20 -!- ihope_ has joined. 20:54:44 -!- ihope_ has changed nick to ihope. 20:56:04 -!- CakeProphet has joined. 20:56:32 bsmnt! 20:56:38 _bot_chroot! 20:59:19 i understand sylver coinage 20:59:26 not how it is related to that language 21:00:40 well, have you read the side effects of setting a cell, in the second paragraph under the box? 21:02:00 Talking about BF-SC, I take it. 21:02:10 yep 21:02:34 Yeah, setting a cell is like playing it. 21:05:03 -!- Spacerat3004 has joined. 21:05:52 yeah, what is the relation between sylver coinage and bf-sc? 21:06:03 why would 6 be set if i set 3? 21:06:17 because it says so in that paragraph. 21:06:30 oh 21:06:47 i thought it meant it's what automatically happens given those rules 21:07:12 hope that is cleared up now. :) 21:08:40 ok, away for a while 21:11:12 iho! 21:11:15 pe! 21:11:28 :- 21:11:30 ) 21:11:59 ~exec self.print_callbacks() 21:12:06 Let's add some games together! 21:12:17 ~exec bot.print_callbacks() 21:12:25 games? 21:12:31 Yes, games. 21:12:45 I want to get scoping right for ~exec 21:12:57 They can be added, as long as they're of the right kind. 21:13:18 huh? 21:13:20 ~quit 21:13:20 -!- bsmnt_bot_chroot has quit. 21:13:24 -!- bsmnt_bot_chroot has joined. 21:13:37 Namely, the kind where each player has a set of moves, and each move changes the game to a different one. 21:14:17 ~exec self.raw("PRIVMSG #bsmnt_bot_chroot_errors :%s" % globals()) 21:14:21 ~exec self.raw("PRIVMSG #bsmnt_bot_chroot_errors :%s" % locals()) 21:14:46 And the one who can't move loses. 21:16:20 no IRP allowed 21:16:21 Rather, the player who can't move if it's that players turn. If it's your turn and you can't move, you lose. 21:16:21 damn 21:16:34 Spacerat3004: I think #irp is for that. 21:16:38 oh i see 21:16:42 Also, you can do this: 21:16:48 -!- ihope has set topic: #esoteric - the international hub for esoteric programming language design and deployment - map: http://www.frappr.com/esolang - forum: http://esolangs.org/forum/ - EgoBot: !help - wiki: http://esolangs.org/wiki/ - logs: http://tunes.org/~nef/logs/esoteric/ or http://meme.b9.com/cdates.html?channel=esoteric - for brainfuck-specific discussion, go to ##brainfuck - IRP ALLOWED - Pastebin: http://pastebin.ca/. 21:16:56 :-) 21:17:07 heh 21:18:46 So why don't we... um, hmm. 21:19:02 Let's add * to itself. 21:20:21 * times 2 = the player who moves third loses 21:20:51 0 = the first player loses, * = the second player loses, * times 2 = the third player loses, * times 3 = the fourth player loses... 21:20:58 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:21:15 hmm... this is pretty cool.. 21:21:52 I'm making an esolang for the sole purpose of dealing with cause-effect chains in a MUD 21:22:03 Just cool that I'll actually be -using- it.... a lot. 21:28:59 It'll be an esolang? 21:29:16 Surely being an esolang is the sole purpose of an esolang. 21:30:00 Well, I guess it depends on how you define an esolang. 21:30:25 I'd define it as a language that's intentionally weird in some way. 21:31:53 It's going to look something like ORK with coroutines, not quite so object-oriented, not quite so verboose, and with weirder syntax. 21:32:30 Right now I'm calling it "Sophia" (It's what I call almost all of my projects) 21:36:53 -!- Sgeo has joined. 21:38:51 Playing with nimbers, I see 21:39:23 Wait a minute... 21:39:36 third and fourth players? 21:42:23 Is this something different from Conway games? 21:44:41 Or is it just a different way of looking at symmetric ones? 21:46:50 http://esoteric.voxelperfect.net/wiki/Brainloller 21:47:07 rotate rigth? 21:47:11 *right 21:47:20 how the fuck do you rotate right? 21:47:25 is that clockwise? 21:48:02 Yes. 21:48:12 Right = clockwise, left = counter-clockwise. 21:49:08 oerjan: if you have two players taking turns, third player = first player and fourth player = second player. 21:49:21 The players who make the third and fourth moves. 21:52:18 right. i am used to considering all games where first player loses to be equivalent. 21:52:57 They're not all equivalent if you want to add them together. 21:52:57 http://esoteric.voxelperfect.net/wiki/Brainfork 21:53:00 "Because Brainfork is a proper superset of Brainfuck, all Brainfuck programs are also valid Brainfork programs with identical semantics." 21:53:14 what about the brainfuck program Y? 21:53:20 i do think they are 21:53:24 oklopol: except those containing Y :-) 21:53:27 :) 21:53:46 all _stripped_ brainfuck programs. 21:53:55 Yeah, that. 21:54:02 yeah, i'm making a compendium of all bf-copies on the wiki site, if compendium means what i think it means 21:54:20 A compendium of all whats? 21:54:25 yeah, i know what it meant, i don't know the use of saying that :) 21:54:34 bf-based langs 21:54:55 brainfuxxors 21:55:16 adding a game that the first player loses is an identity operation as far as outcome is concerned. 21:55:25 brainfork duplicates the memory, right? 21:55:37 as long as there are two players, at least. 21:55:41 oklopol: I don't think so. 21:55:45 okay 21:55:57 "When a Y is encountered, the current thread forks, with the current cell being zeroed in the parent thread, and the pointer being moved one to the right and that cell set to 1 in the child." 21:56:01 what does that mean then? 21:56:08 i mean, when forking 21:56:19 oerjan: well, if the second player can make a move, then adding it's not an identity operation. 21:56:44 oklopol: um... uh, download the interpreter? 21:56:53 bah... k 21:56:55 :D 21:57:42 I think each thread has its own tape pointer, but they share a tape. 21:57:50 I mean, they have to share *something*, no? 21:58:28 -!- Spacerat3004 has quit. 21:58:38 dunno 21:58:41 i'll test 21:59:01 just don't understand "with the current cell being zeroed in the parent thread, and the pointer being moved one to the right and that cell set to 1 in the child" 21:59:07 set to 1 in the child 21:59:23 i mean the first player to move, of course. if that player loses immediately then the second player never gets to make a move. 21:59:42 oerjan: losing is not being able to move. 22:01:24 When simply playing a game, all games where the first player loses are the same, but not if you can add them together and such. 22:02:25 Arithmetic, you know? 22:02:30 ihope: but they _are_ equivalent. note that i am saying this only for the first player, it is not true for the second. 22:03:37 All games where the first player can't make any moves are the same from the point of view of the first player, until the second player makes a move. 22:04:29 i am saying this, precisely: if X is a game where the first player loses, and Y an arbitrary (symmetric) game, then X + Y has the same outcome as Y. 22:04:33 FOOOOOOOOOOOOOOOOOOO 22:04:55 i.e. the same player wins. 22:05:27 (assuming optimal play) 22:06:32 duck typing ftw 22:06:59 monads and multiparameter type classes ftw ;) 22:07:22 oerjan: but the second player might be able to make a move in X, which might change things. 22:07:53 If neither player can move in X, then you have the zero game, which is an additive identity. 22:08:27 Actually, it's *the* additive identity, I think. 22:08:43 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:08:45 -!- bsmnt_bot_chroot has joined. 22:08:51 ~exec "error 22:08:57 ~exec "error 22:08:59 well you might think that, but then the first player can just do another move to turn the X part back into losing. 22:09:12 ~exec self.raw("PRIVMSG #esoteric :foo") 22:09:12 foo 22:09:25 ~exec raise ValueError 22:09:29 argh 22:10:13 oerjan: yes, but that's certainly not the only thing the first player can do. 22:10:15 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:10:16 -!- bsmnt_bot_chroot has joined. 22:10:42 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:10:44 -!- bsmnt_bot_chroot has joined. 22:10:55 no. but if the first player wins Y, then he can win X+Y by using that strategy. 22:11:07 -!- bsmnt_bot_chroot has quit (Client Quit). 22:11:09 -!- bsmnt_bot_chroot has joined. 22:11:11 Hmm... 22:11:17 Yes, that's true. 22:11:35 What if after the second player makes his/her move, the first player still can't move in X? 22:12:15 well then the second player cannot have moved in X, because any initial move in X turns that part into winning. 22:12:17 -!- bsmnt_bot_chroot has quit (Client Quit). 22:12:19 -!- bsmnt_bot_chroot has joined. 22:12:29 What? 22:13:09 Let's say the first player is L and the second player is R. 22:13:27 And 0 = { | }. So what about if X = { | 0 }? 22:13:40 The second player moves once, then X is done. 22:14:11 -!- bsmnt_bot_chroot has quit (Client Quit). 22:14:13 -!- bsmnt_bot_chroot has joined. 22:14:21 I thought we were considering symmetric games. 22:14:33 Symmetric games? 22:14:53 where the left and right options are the same. 22:14:58 -!- bsmnt_bot_chroot has quit (Client Quit). 22:14:59 -!- bsmnt_bot_chroot has joined. 22:15:52 -!- bsmnt_bot_chroot has quit (Client Quit). 22:15:54 -!- bsmnt_bot_chroot has joined. 22:16:13 otherwise we need to be careful about distinguishing L and R from the first and second player to move. hmm... 22:16:27 Well, if L moves first... 22:17:27 although for the particular case { | } at least, addition is exactly identity. 22:17:35 Yeah. 22:18:57 let's see, in X, L loses if first. 22:20:01 Well, { | 0 } is essentially "R is allowed to pass once" when used with addition. 22:20:39 Is { | 0 } the same as, say, { | -1/2 }? 22:20:59 so let N be an arbitrary loss for the first player. If L moves first in X+N, he must move in the N part, then R can again respond with turning the N part back into losing. 22:21:04 That is, { | {-1|0} } where -1 = { | 0 }? 22:22:17 Well... { | 0 } is "R moves", so this one's either "R moves, L moves, R moves" or "R moves, R moves". Doesn't seem the same to me. 22:23:38 i think they are both -1 as surreal numbers. 22:23:41 If N is a loss for the first player, then all moves by L can essentially be countered by R, meaning N is effectively not an option for L. 22:23:54 As the surreal numbers, yes, but I guess it's not true for games. 22:24:22 so they have the same outcome as a single game. 22:24:50 whether they are the same when added to any game i am not sure. 22:25:29 Well, N isn't an option for L, but there is still the stuff R can do. N may allow passes, which may be an advantage for R. 22:25:39 N certainly isn't an advantage for L. 22:26:34 note that N is a loss for the first player _whether that is L or R_ 22:26:47 Oh, right... 22:27:30 so essentially they both will try to avoid it. 22:27:32 So a player can effectively move only once in N. 22:27:47 yeah. 22:28:51 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:28:53 -!- bsmnt_bot_chroot has joined. 22:28:58 ~exec print "hi" 22:29:01 damn 22:29:32 ~exec print globals()["sys"] 22:29:35 argh 22:30:07 ~exec print "exception 22:30:26 ~exec print getattr(sys,"stdout") 22:30:32 ~exec print getattr(sys,"stdout").__name__ 22:30:49 ~exec print getattr(sys,"stdout").__class__.__name__ 22:30:52 hmmm 22:31:07 ~exec print sys.stdout.__class__.__name__ 22:31:16 ~exec sys.stdout.write("foo") 22:31:16 foo 22:31:26 hmmm 22:31:30 Well, wait. 22:31:44 If a player moves in N, that player can't move again in N, but the other player can. 22:32:05 yes, and the other player will usually want to move N back to losing. 22:33:14 the only reason a player might want to move in N first is if he loses in X. but then the other player can always respond. 22:33:28 ~exec print sys.platform 22:33:32 ~exec print sys.platfasdfasdf 22:33:47 hehe, __getattr__ rocks 22:33:58 Hmm... 22:34:53 i think my last sentence constitutes a proof. :) 22:35:11 I guess so. If you move in N, then... wait... 22:36:25 ~exec print sys.__stdout__ 22:36:30 ~exec print sys.stdout 22:37:14 argggh 22:37:19 Well, if neither player moves in N, then X is lost by someone, then N won't help. 22:38:31 print must use some kind of global version of stdout 22:38:44 Wait... did you say N is a first-player loss? 22:38:48 ~exec print >> sys.stdout, "hi" 22:38:48 hi 22:38:52 yes 22:38:57 ~exec print >> sys.__stdout__, "hi" 22:39:09 Isn't 0 the only first-player loss, then? 22:39:26 no, consider {{0|0}|{0|0}} 22:39:33 odd 22:39:35 Yeah, there's that, I guess. 22:40:15 and for symmetric games, X+X is a first-player loss. 22:40:42 Oh, right. If one player moves in N, the other player can turn it back into another first-player loss. 22:40:51 After all, it's a first-player loss. 22:41:03 yep. 22:41:17 So are all first-player losses essentially equivalent to 0? 22:41:27 that's what i am saying :) 22:41:36 ~exec sys.stderr.write("foo") 22:41:39 ~exec sys.stdout.write("foo") 22:41:39 foo 22:42:01 well, now we have sys.stdout going to the current channel, and sys.stderr going to #bsmnt_bot_chroot_errors 22:42:18 Yes, I see. 22:42:55 also, for surreal numbers, x + (­x) is a first-player loss. 22:42:58 but print isn't printing to sys.stdout :/ 22:42:59 -!- ShadowHntr has joined. 22:43:16 i am not quite sure about x + (-x) in general. 22:43:54 in fact i have a recollection that some things break down then. 22:44:00 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:44:05 -!- bsmnt_bot_chroot has joined. 22:44:06 ~exec sys.stdout.write("foo") 22:44:10 foo 22:44:32 ~exec print "foo" 22:44:35 nooo 22:46:26 bsmntbombdood: Strange, as on python.org: "Standard output is defined as the file object named stdout in the built-in module sys." 22:46:54 yeah 22:46:56 (From http://docs.python.org/ref/print.html) 22:47:33 I think it is going from the real value of sys.stdout, not the value as defined in the enviroments given to exec 22:48:30 oerjan: by x + (x), do you mean x + (-x)? 22:48:41 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:48:42 -!- bsmnt_bot_chroot has joined. 22:48:44 ~exec sys.stdout.write("foo") 22:48:44 foo 22:48:49 ihope: for symmetric games, -x = x 22:49:24 Are all surreal numbers symmetric games? 22:49:32 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:49:33 none of them except 0. 22:49:33 -!- bsmnt_bot_chroot has joined. 22:49:34 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 22:49:36 -!- bsmnt_bot_chroot has joined. 22:49:38 ~exec sys.stdout.write("foo") 22:49:39 foo 22:49:43 ~exec print "foo" 22:49:47 the symmetric games correspond to the nimbers. 22:49:53 ~exec print >> sys.stdout, "foo" 22:49:54 foo 22:49:57 argh 22:50:55 they are games where the situation for L and R is always the same. only who goes first matters. 22:53:38 And nim games are sums of star games. 22:56:15 I take it that means *1 + *2 = *3. 22:56:26 And *1 + *1 is, of course, 0. 22:56:40 addition is xor. 22:56:55 -!- bsmntbombdood has changed nick to xor. 22:56:59 xor! 22:57:05 -!- xor has changed nick to bsmntbombdood. 22:57:53 Last Seen: 24 seconds ago (bsmntbombdood is online) 22:58:13 I hope xor isn't yours, bsmntbombdood... 22:58:31 of course it is 22:58:36 Is it? 22:58:41 yeah 22:58:55 i've seen it before. 22:59:22 Erm, I didn't mean to do that. 22:59:40 do what? 22:59:55 I accidentally sent a memo to bsmntbombdood. 23:00:11 yay! a memo! 23:00:27 And you thought nobody used those things... 23:00:28 ;-) 23:00:34 oh no! now he will be infected by the corporate virus! 23:01:25 apologies to anyone actually working at a corporation. 23:01:28 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)). 23:01:34 What's it say, bsmntbombdood? 23:01:46 Foo!\ 23:01:56 And the other one? 23:02:04 there was only one 23:02:12 I sent one to xor, too. :-) 23:02:18 -!- bsmntbombdood has changed nick to xor. 23:02:32 Foo!\ 23:02:46 You're bsmntbombdood, then? 23:02:55 Bingo. 23:03:03 -!- xor has changed nick to bsmntbombdood. 23:04:09 Now, what does multiplication mean for games? 23:06:48 i don't think multiplication makes sense outside the surreal numbers. But i never got around to really understanding it. 23:07:35 basically i think the ordering of the subgames plays an essential role, which means only surreals work. 23:10:45 or it may have been something about multiplication not preserving the equivalence we have just discussed. 23:17:15 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 23:17:50 -!- RodgerTheGreat has joined. 23:18:34 -!- RodgerTheGreat has quit (Remote closed the connection). 23:19:07 -!- RodgerTheGreat has joined. 23:20:41 -!- RodgerTheGreat has quit (Remote closed the connection). 23:21:22 -!- RodgerTheGreat has joined. 23:22:58 How great he is! 23:27:57 oh you crazies with your game theory. 23:30:52 -!- RodgerTheGreat has quit (Remote closed the connection). 23:31:32 -!- RodgerTheGreat has joined. 23:31:34 Anyone recommend a good IDE? 23:31:41 paticularly... one that supports Python stuff? 23:32:00 (bare in mind... I'm on XP) 23:34:20 Alas, I just use gVim (an editor) + WinHugs (for Haskell only) 23:41:45 CakeProphet: emacs 23:43:20 -!- bsmntbombdood has left (?). 23:43:25 -!- bsmntbombdood has joined. 23:44:32 ~~~~~~~~exec 23:46:34 fooo 23:46:51 ~exec print "Work" 23:46:54 argh 23:47:06 ~exec print >> sys.stdout, "Work" 23:47:06 Work 23:49:24 -!- tgwizard has quit (Remote closed the connection). 23:49:39 gar 23:55:21 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 23:55:25 -!- bsmnt_bot_chroot has joined. 23:55:30 ~exec print >> sys.stdout, "Work" 23:55:30 Work 23:59:08 ~exec "Work" 23:59:12 ~exec print "Work" 23:59:16 ugh 2007-01-09: 00:00:47 Game crazies! 00:00:56 python crazies! 00:03:33 silly python 00:17:38 -!- CakeProphet_ has joined. 00:17:49 -!- CakeProphet has quit (Read error: 113 (No route to host)). 00:17:54 -!- CakeProphet_ has changed nick to CakeProphet. 00:32:23 On second thought, x + (-x) is always a first player loss, without additional restrictions on the game. 00:37:42 do... 00:37:48 er... 00:37:50 so... 00:37:51 x - x? 00:38:13 or does game theory differenciate from the typical inverseness of addition and subtraction? 00:38:45 well, x - y may be an abbreviation of x + (-y). 00:40:01 although the statement you responded to can be used to prove that x - y + y = x up to equivalence. 00:41:01 But on the level of exact game structure, that doesn't hold. 00:41:20 ....yeah, I don't what the hell you're talking about. 00:41:35 -x is a "mirror" game of x, swapping the roles of players L and R. 00:41:37 * CakeProphet is just hunting around for IDEs 00:42:08 I'm not even familiar with mathematical games anyway. 00:42:25 My condolences :) 00:51:07 THE WORLD NEEDS A NEW IDE 00:51:17 ONE THAT REVOLUTIONIZES THE UNCREATIVE WORLD OF TEXT EDITING 00:51:32 ONE SUCH AS THE DISCORDIAN TEXT EDITING AUTOMATON 00:51:44 which I have built. 00:53:22 We could name it "Norton utilities", after the great Discordian Saint. 00:54:31 Actually.. 00:54:37 we should just called it MeSophia. 00:54:40 like all my other projects. 00:54:57 * CakeProphet 's goal as a programmer is to have a plethora of programs that all go by the name "MeSophia" 00:55:06 ah, wait, alas it already exists: http://yoyo.cc.monash.edu.au/~acb/norton/ 00:56:37 You might want to look into the Kafka program there. 00:57:20 Or perhaps you might want to preserve the remains of your sanity, what do I know. 01:01:57 -!- ShadowHntr has joined. 01:09:25 -!- digital_me has quit (Read error: 145 (Connection timed out)). 01:24:28 -!- surye has joined. 01:30:23 * CakeProphet looks at the large engorged slug that now rests upon his desktop... labeled "emacs" 01:30:34 emacs! 01:30:45 All the useful configuration I could ever fucking want.. 01:30:52 that I don't... actually want. 01:30:59 ~exec os.system("emacs") 01:31:12 ~ps 01:31:13 None 01:31:14 heh 01:39:52 so... 01:39:57 how do you add a new mode to emacs? 01:40:04 * CakeProphet is trying to get this python mode he just downloaded into it. 01:43:20 ~quit new user 01:43:21 -!- bsmnt_bot_chroot has quit ("new user"). 01:43:23 -!- bsmnt_bot_chroot has joined. 01:43:39 ~quit 01:43:40 -!- bsmnt_bot_chroot has quit (Client Quit). 01:43:42 -!- bsmnt_bot_chroot has joined. 01:44:01 ok, now I think a os.system("rm -rf /") is safe 01:44:15 no, you aren't allowed to do it 01:47:16 oh wait, rm isn't even in the chroot 01:47:40 -!- pikhq has joined. 01:47:45 * bsmntbombdood giggles 01:48:05 ~exec os.system("echo *") 01:48:14 hmph 01:48:57 ~exec self.my_file = open("/bot/ircbot.py") 01:49:19 ~exec sys.stdout.write(self.my_file.readline()) 01:49:20 #! /usr/bin/python 01:49:23 a ha! 01:49:25 ~exec sys.stdout.write(self.my_file.readline()) 01:49:27 ~exec sys.stdout.write(self.my_file.readline()) 01:49:27 import socket 01:49:29 ~exec sys.stdout.write(self.my_file.readline()) 01:49:29 import re 01:49:31 heh 01:49:45 ~exec self.my_file.close() 01:50:39 fun 01:54:10 whoever breaks out of my chroot and tells me what's in the file /home/bsmntbombdood/proof.txt gets a prize 01:59:47 ~pexec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read()) 02:00:18 haha 02:00:23 You have to break out first 02:00:47 ....that's what the first bit was. 02:01:09 And that didn't even get executed 02:01:14 use ~exec 02:01:23 ~exec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read()) 02:01:42 and join #bsmnt_bot_chroot_errors so you can see all the exceptions that you just raised 02:01:59 ~exec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read()) 02:02:19 ~exec sys.stdout.write( file(os.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read()) 02:02:32 ....you're not using version 2.5 02:02:41 no, unfortuneatly 02:02:56 ~exec sys.stdout.write( file(os.path.abspath(".").split("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read()) 02:03:47 ~exec sys.stdout.write( file(os.path.abspath(".").split("/home/")[0] + "home/bsmntbombdood/proof.txt", "r").read()) 02:04:07 Like I said, you have to break out first 02:04:11 ~exec sys.stdout.write(os.path.abspath(".")) 02:04:11 / 02:04:17 >.> 02:04:52 ~exec sys.stdout.write(os.listdir()) 02:04:53 cakeprophet: you are aware of what a chroot _is_, are you? 02:04:58 ...nope 02:05:15 ~exec sys.stdout.write(os.listdir("/")) 02:05:52 ~exec sys.stdout.write(str(os.listdir("/"))) 02:06:09 permission denied. 02:06:11 ha! 02:06:13 it is a way to designate a directory for a process so that that process thinks that directory is the root directory. 02:06:45 I'll give you read access to / 02:07:00 ~exec sys.stdout.write(str(os.listdir("/"))) 02:07:01 ['bin', 'bot', 'etc', 'lib', 'usr'] 02:07:20 in other words, the file you want is not inside what your process sees as "/" 02:07:29 ~exec sys.stdout.write(os.walk("/")) 02:08:14 ooops, bug in my code 02:08:21 Actually, no 02:08:21 Thought so :P 02:08:35 ~exec sys.stdout.write(list(os.walk("/"))) 02:08:38 i don't even know if it is possible, although GregorR mentioned something about devices that _might_ be usable, if available. 02:08:59 ~exec sys.stdout.write(str(os.walk("/"))) 02:09:00 02:09:03 ... 02:09:06 I guess he is the one on the channel most likely to succeed if it is possible. 02:09:16 ~exec sys.stdout.write(str(list(os.walk("/")))) 02:09:19 -!- bsmnt_bot_chroot has quit (Excess Flood). 02:09:24 :D 02:09:27 dude 02:09:34 heh 02:09:34 -!- bsmnt_bot_chroot has joined. 02:09:38 one sec 02:10:40 I'm going to be a little lenient and non standard with my stdout.write method, and convert its args with str() first 02:11:00 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 02:11:18 -!- bsmnt_bot_chroot has joined. 02:11:44 ~exec print list(os.walk("/")) 02:11:56 wow, that's one long list 02:12:18 there's a ton of files in /usr/lib/python 02:15:10 I think you have to get root to break out of a chroot 02:15:28 * bsmntbombdood giggles 02:15:45 ~exec sys.stdout.write(str(os.getuid())) 02:15:46 1343 02:15:58 as you can see, you aren't root already 02:16:07 -!- CakeProphet_ has joined. 02:16:14 te he he 02:17:04 ~exec os.setuid(0) 02:17:11 ~exec os.seteuid(0) 02:18:48 ~exec sys.stdout.write(str(os.walk("/"))) 02:18:48 02:18:49 :P 02:19:30 ~exec sys.stdout.write(str(list(os.walk("/bin")))) 02:19:31 [('/bin', [], ['bash'])] 02:19:41 ~exec sys.stdout.write(str(list(os.walk("/etc")))) 02:19:42 [('/etc', [], ['hosts', 'passwd', 'resolv.conf'])] 02:19:54 ~exec sys.stdout.write(str(list(os.walk("/bot")))) 02:19:54 [('/bot', [], ['betterbot.py', 'start.sh', 'better.sh', 'ircbot.py'])] 02:20:21 ...etc 02:21:15 heh, I know of a way to get root 02:21:27 I think 02:21:43 you could make a symbolic link. 02:21:56 CakeProphet: Nope, symbolic links resolve inside the chroot 02:22:13 ~exec self.my_file.open("/bot/ircbot.py", "a") 02:22:21 ~exec self.my_file = open("/bot/ircbot.py", "a") 02:22:30 ~exec self.my_file = open("/bot/ircbot.py", "w") 02:22:41 heh, nevermind, that idea won't work 02:23:29 ~exec self.my_file = open("/bot/start.sh", "a") 02:23:41 k, i'm safe 02:24:08 hm... 02:25:20 ~exec sys.stdout.write(str(list(os.walk("/..")))) 02:25:23 -!- bsmnt_bot_chroot has quit (Excess Flood). 02:26:12 -!- bsmnt_bot_chroot has joined. 02:26:19 ~exec sys.stdout.write(str(list(os.walk("/../..")))) 02:26:22 -!- bsmnt_bot_chroot has quit (Excess Flood). 02:26:25 ... 02:26:28 -!- bsmnt_bot_chroot has joined. 02:27:14 ~exec sys.stdout.write(repr(list(os.walk("/../../..")))) 02:27:16 -!- bsmnt_bot_chroot has quit (Excess Flood). 02:27:42 -!- bsmnt_bot_chroot has joined. 02:28:03 ~exec sys.stdout.write(str(list(os.walk("/..")))[0..50]) 02:28:24 [0:50] 02:28:37 ~exec sys.stdout.write(str(list(os.walk("/..")))[0:50]) 02:28:37 -!- CakeProphet has quit (Read error: 113 (No route to host)). 02:28:39 [('/..', ['bin', 'bot', 'etc', 'lib', 'usr'], []), 02:29:03 ~exec sys.stdout.write(str(list(os.walk("/../..")))[0:50]) 02:29:06 [('/../..', ['bin', 'bot', 'etc', 'lib', 'usr'], [ 02:29:23 ok, not immensely useful. or maybe... 02:29:30 ~exec sys.stdout.write(str(list(os.walk("/")))[0:50]) 02:29:34 [('/', ['bin', 'bot', 'etc', 'lib', 'usr'], []), ( 02:29:52 ~exec sys.stdout.write(str(list(os.walk("/")))[0:298]) 02:29:56 [('/', ['bin', 'bot', 'etc', 'lib', 'usr'], []), ('/bin', [], ['bash']), ('/bot', [], ['betterbot.py', 'start.sh', 'better.sh', 'ircbot.py']), ('/etc', [], ['hosts', 'passwd', 'resolv.conf']), ('/lib', [], ['libm.so.6', 'libreadline.so.5', 'libdl-2.4.so', 'libresolv.so.2', 'libutil.so.1', 'libncur 02:30:21 yikes, my write method needs to split it up into chunks 02:30:44 ~exec os.system("pwd") 02:32:05 well, that didn't work anyhow. 02:34:59 -!- bsmnt_bot_chroot has quit (Remote closed the connection). 02:35:02 -!- bsmnt_bot_chroot has joined. 02:35:09 ~exec sys.stdout.write(str(list(os.walk("/")))) 02:35:13 -!- bsmnt_bot_chroot has quit (Excess Flood). 02:35:16 -!- bsmnt_bot_chroot has joined. 02:35:18 good 02:35:47 ~exec self.raw("QUIT") 02:35:48 -!- bsmnt_bot_chroot has quit (Client Quit). 02:35:50 -!- bsmnt_bot_chroot has joined. 02:35:55 You fail. 02:36:08 (intentionally, but. . .) 02:36:14 ? 02:36:30 19:30 -!- bsmnt_bot_chroot [n=bsmnt@abacus.kwzs.be] has quit [Client Quit] 02:36:34 Failure. :p 02:36:40 how is that a failure? 02:39:57 ~quit 02:39:58 -!- bsmnt_bot_chroot has quit (Client Quit). 02:40:00 -!- bsmnt_bot_chroot has joined. 02:40:49 Just felt like accusing you of failure. 02:41:22 oh, ok 02:41:41 no, you fail 02:49:54 -!- oerjan has quit (Remote closed the connection). 02:50:03 -!- oerjan has joined. 02:51:38 FO FOO FOOO FOO SPAM AND EGGS! 02:53:19 ....emacs really could use a better GUI. 02:53:41 not really 02:54:13 * CakeProphet_ doesn't get why programmers enjoy masochistic UIs like command-lines and programs will billions of weird non-conviences. 02:54:42 Sometimes you -just- want to get the job done... not tinker wth your job-doing device. 02:55:18 Oddly enough, this masochist UIs are actually a better way to get the job done for some of us. 02:55:22 Like me. 02:56:47 I prefer good ol' point-and-click to memorizing a crapload of shellcommands. :P 02:57:25 Once it's commited to memory, your interface using is limited to the speed of your typistry. 02:57:42 I type at 70wpm, but I sure as hell don't mouse at a comparable speed. 02:58:01 directory names are kind... annoying to work with. 02:58:12 * CakeProphet_ plays MUDs a lot... thus understands. 02:58:23 Directory names are annoying? 02:58:33 Painfully so. 02:58:45 It's one of my main dislikes of the current OS layout. 02:58:54 The directory system./ 02:59:18 $ less rebaba0 02:59:27 Compare with: 02:59:34 CakeProphet_: http://www.catb.org/~esr/writings/unix-koans/gui-programmer.html 02:59:36 $ less release/basm/basm.0.b 03:00:06 16 characters versus 26. 03:00:12 Tab completion = :) 03:00:18 indeed 03:00:40 * pikhq only uses the mouse for copy-paste. . . 03:00:52 And only because X makes it so. Damned. Simple. 03:01:27 If you used screen, you wouldn't even have to use the mouse 03:01:30 pikhq, Pfft... who the hell said I was endorsing that :P 03:02:03 bsmntbombdood: Actually, screen doesn't seem to interface with the X copy buffer too well. 03:02:13 And if it does, well, I'm too lazy to get that set up right. 03:02:16 it doesn't, at all, I think 03:02:50 Well, that doesn't work for me. . . My interaction with the copy buffer is between my screen-running terminal and my Firefox+Conkeror setup. 03:02:52 * CakeProphet_ has a hard time fathoming how he'd get around easily using the Windows command prompt. 03:03:17 I tried conkeror once 03:03:24 Who said it's the *Windows* command prompt I use? 03:03:29 That thing really, really sucks. 03:03:33 and applications that run directly -through- the shell? worst... experience... ever. 03:03:48 I stopped using it because it completely took over the chrome 03:03:49 (I've only done the later on Linux) 03:03:55 Did I happen to mention that the Windows shell sucks? 03:04:01 bsmntbombdood: I don 03:04:06 't like the chrome. ;) 03:04:19 But I have extensions that use it :/ 03:04:24 :/ 03:04:32 Any command prompt... would be more accurate. 03:04:39 conkeror was pretty good other than that though 03:04:47 even the Linux shell is a tad awkward... 03:05:07 not really 03:05:17 but it's really the directory system that makes it annoying... not so much the fact that I have to type in commands. 03:05:35 zsh is like an extension of myself. 03:05:45 A user interface doesn't get much better than that. 03:06:16 * bsmntbombdood uses bash ;) 03:06:18 The problem is... I have no clue how to better organize data than with a directory system. 03:06:27 but it seems so obvious that there's a better way. 03:07:59 That way is a directory system filled with auto-organizing meta-directories. ;) 03:08:15 So one gets ~/audio, which automagically organizes itself. 03:08:44 One can set it up to organize by artist then album, album then artist, year album then artist, etc. 03:09:28 orly? 03:09:37 bsmntbombdood: Just an idea. 03:12:09 Seems rather un-general to me 03:12:14 True. 03:12:17 Just a thought. 03:12:40 THat's just.... directories with auto-organization. 03:12:45 And said idea, clearly a (mild) improvement on the current system, was brought up with a few seconds of thought. 03:12:52 Sounds like a relational database. 03:12:52 CakeProphet_: And it's an improvement, no? 03:13:03 pikhq, I hate organization. :P 03:13:07 oerjan: That'd be a good way of having it done underneath. 03:13:28 databases are my other pet peeve. 03:13:32 sounds like itunes 03:13:43 bsmntbombdood: When applied to audio, it would be. 03:14:02 CakeProphet: And when you think about it you don't like _computers_ too much, either? ;) 03:14:24 flat files > database 03:14:26 One could apply it to just about anything if the interface to the underlying database were done right. 03:14:38 Computers are'nt very organized... 03:14:48 at least... not working with them. 03:15:01 I didn't say it was the best idea in the world; my point was that with just a few seconds of thought it could be improved on if you cared enough. 03:15:24 CakeProphet_: Correction: *Windows* computers aren't very organized. 03:16:00 It's spaghetti code. . . as the interface! 03:16:17 I like simplicity... and if you can't make it simple, then make it messy. 03:16:30 What the hell is wrong with you? 03:16:42 ...no clue. 03:16:47 a CLI is prety simple 03:17:03 Windows is a *case study* in why "messy" is the wrong way to do things. 03:17:46 *shrugs* I don't really.. erm... like Windows. 03:18:02 Well, your philosophy seems to describe the Windows way of doing things. 03:18:18 ...sure, if you grossly oversimplfy things. 03:18:44 Nope. 03:18:54 No oversimplification. 03:18:59 There are other factors involved in windows besides messiness... 03:19:10 it's not a simple one-to-one (messy -> Windows) relationship. 03:19:18 Yes, but messiness is the single thing binding the whole thing together. 03:19:34 ....and? 03:20:05 It's like, uh, the core idea in the behemoth (if there is such a thing)? 03:20:46 Regardless, I don't like Windows. 03:21:05 I do however... like the chaotic mess that is my bedroom. 03:21:20 I like limited amounts of chaos. 03:21:31 But only when it's my *own* chaos. 03:21:32 chaos made the world. ;) 03:21:54 If it's the chaos of others, well, I hate it with a passion. 03:22:48 That's why it's easier to write your own messy library than learn someone elses 03:22:58 ....this is probably why I woud be a terrible developer. 03:23:10 * pikhq knows how to clean up his own code. . . 03:23:32 I don't always *do* it, but I can (and will if anyone else is going to risk touching it) 03:23:36 * CakeProphet_ makes it run smooth... regardless of how it looks on the surface. :P 03:23:50 after I... squash the countless bugs. 03:24:09 I find that bugs are easy to squash when the code is clean and readable. 03:24:11 I have a bad habit of not testing code in pieces. 03:24:20 so I just like... amass huge piles of untested source... 03:24:41 * pikhq has a bad habit of making his code easy to test 03:24:47 ;) 03:24:54 pikhq, You have a bad habit of being modest too. 03:24:59 interpreted languages are great in the respect 03:25:12 It helps that I do interpreted languages most of the time. 03:25:39 Most "testing" involves a series of a few function calls. 03:25:46 CakeProphet_: It's a bit of a character flaw. 03:27:23 hmmm... Python's ideol of readability is actually kind of hard for me to read. 03:27:31 It's overly drawn out. 03:27:36 terseness is more fun. 03:28:40 CakeProphet: try Haskell :) 03:28:41 * pikhq does Tcl 03:28:57 it has _both_ 03:29:16 My personal definition of "elegant" is anything that can be summed up in a few quick lines. 03:29:40 Allow me to describe my elegant BFM compiler. 03:29:58 ....do go on... 03:30:35 The macro pass expands macros, the optimizing pass optimizes the code, the nostrip pass will add various automated comments to the resulting Brainfuck code, and the brainfuck code compiles the mass into Brainfuck. 03:30:46 The passes between macro and brainfuck are completely optional. 03:30:53 hmmm... 03:30:56 Voila, that's the basic structure of the compiler. 03:31:05 CLI's are definetely better on the input side of things... 03:31:16 Indeed they are. 03:31:25 but... it's harder to see the "big picture" of things in a CLI... 03:31:32 Not for me. 03:32:08 a GUI gives you everything you need... a CLI gives you fleeting bits of text as output. 03:32:11 "while foo;do bar;baz;done" is much simpler than the GUI equivalent (clicking over and over and over) 03:32:27 CLI is better for inputting... but I think it fails at outputting productively. 03:32:41 It outputs very productively, IMO. 03:33:02 (when was the last time you needed a program to output pictures at you instead of text?) 03:33:16 Web browser 03:33:23 I was about to say. 03:33:30 Instead of text? 03:33:34 I really don't feel like mentally imagining what the HTML will render as. 03:33:35 I see pictures and text. 03:33:44 * pikhq shows CakeProphet_ Elinks 03:33:58 Text based web browers are _terrible_ 03:34:08 bsmntbombdood: I find them useful on occasion. 03:34:12 (any time I break X) 03:34:43 so... the best hybrid methinks would be a command line with a nicely coherant graphical output. 03:34:48 like... an IRC client. 03:36:50 * pikhq shows CakeProphet_ Firefox running Conkeror 03:36:50 It's a coherant graphical output with all-text input. . . 03:36:50 * pikhq also shows CakeProphet_ irssi running in a terminal 03:37:15 No graphics needed (seriously: it's overkill for what amounts to a screenful of text) 03:37:50 but with that method the output only comes -on demand-... it requires more typing to get information. 03:37:52 * bsmntbombdood prefers xchat to irssi 03:37:56 despite using both 03:37:58 with a GUI... all the infermation is sprawled out before you. 03:38:37 No need to repeatedly type a command to see wat the title, mode, usernames 03:38:49 no need to sift through tons of text... because the output is split into channel tabs. 03:40:02 You, um, realise that that's how irssi works? 03:40:15 ...that's how most IRC clients work. 03:40:20 via a GUI 03:40:30 Via a TUI. 03:40:40 (it sure as hell ain't graphical) 03:40:59 I consider a GUI anything that has more nuts and bolts than a terminal. 03:41:16 it has tabs... you can click on them... that makes it graphical. 03:41:18 In which case, irssi wouldn't count as a GUI. 03:41:26 It's a terminal app. 03:41:32 CakeProphet_: Is curses a gui? 03:41:39 You hit alt-(window number) to switch channels. 03:41:55 Not really... 03:42:13 Then irssi, being a curses app, isn't a GUI. 03:42:39 Well then... that's exactly what I mean by a hybrid then. 03:43:00 input is text... output is graphical (to the extent that it partitionts logically instead of just vomiting it all onto the same place) 03:43:12 In which case, the ideal situation for you is a curses app. . . 03:43:43 * pikhq also notes that elinks does the same thing (it's rather nice if you don't mind only having CSS1 and no graphics) 03:45:08 I'd love to have an OS GUI that worked that way... and didn't use fucking directories. 03:46:13 * pikhq still thinks CakeProphet_ is friggin' crazy 03:46:57 What I want as an OS interface is pretty much what I've got now, except that the system would read my thoughts instead of my finger movements. 03:47:14 (although my typistry is such that that's actually rather close) 03:48:54 GUI output, TUI input.... I want my OS GUI to be a giant curses app. 03:49:32 I'm already, like, really happy with mine, as I already said, so. . . 03:49:46 really? 03:49:49 are you sure? 03:49:51 go on. 03:49:54 Pretty certain. 03:49:56 do telll. 03:50:20 Ratpoison + screen + irssi + zsh + (Firefox + conkeror) 03:50:28 + emacs + emacs + emacs 03:51:18 The only thing I'm missing is a nice IDE. 03:51:31 Emacs is just too damn complicated for what I want to use it for. 03:52:56 emacs!!!!!!!! 03:53:05 emacs make me all warm and fuzzy inside 03:53:39 ion > ratpoison ;) 03:53:56 bsmntbombdood: Yeah, well. . . 03:54:07 At least you've succumbed to the pro-keyboard side of things. 03:54:29 perhaps my hatred of directory names stems from the fact that everything in Windows has absurdly long path na,es. 03:54:42 CakeProphet_: Sounds about right. 03:54:45 I still use my mouse plenty 03:55:03 * CakeProphet_ uses his keyboard and mouse about equal. 03:55:15 GUI ftw 03:55:28 ~ctcp RodgerTheGreat SPANK 03:56:07 Maybe a directory system with like... 03:56:21 at max... 2 directory depth for the "main" stuff. 03:56:29 I once had my mouse disconnected and didn't notice for a few weeks (I know it was a few weeks because I had moved my computer and, well, forgot to plug in the mouse) 03:56:39 if I'm using a computer, I want it running IBM-DOS or OSX. 03:56:58 I still have dosshell's key-combos in my fingers. 03:57:01 RodgerTheGreat: FreeDOS: Like IBM-DOS, but you can actually *obtain* it! 03:57:05 heretic! 03:57:19 (that, and it's Stallman-endorsed) 03:57:33 I already *have* IBM-DOS, on a set of 3.5 inch floppies, as it should be 03:57:44 But FreeDOS is still maintained! 03:57:53 heh 03:57:54 And is free as in freedom! 03:58:03 and the fact that it *isn't* "stallman-endorsed" is all the more reason for me to use it 03:58:03 few weeks, eh? 03:58:21 bsmntbombdood: Don't remember the specific time. 03:58:29 DOS doesn't need to be maintained. 03:58:50 IBM DOS v6.0 is precisely how I want my DOS to feel. 03:59:45 freeDOS has way too much unix in it. 04:00:35 RodgerTheGreat: Why do you not want to have control over your computer? 04:00:54 That would be GNU/FreeDOS. 04:00:59 peh 04:01:09 FreeDOS at it's core is, like, DOS++; 04:01:22 And, like, why am I, like, using, like, like? 04:02:10 freeDOS is to DOS proper as BlitzBASIC is to QBASIC. They just don't *get* it. 04:02:28 because you, like, like it? 04:02:40 -!- digital_me has joined. 04:03:37 Well, if you care enough, surely you could make FreeDOS behave like it should? 04:03:39 ha, DOS 04:03:59 After all, you've got the full source and all that. 04:04:16 why would I bother *making* freeDOS how I want, when IBM DOS is *already* how I want 04:04:42 the entire point is that I don't care 04:04:48 I have a DOS that I like 04:05:02 I have the original media, and I have a USB floppy drive 04:05:48 And this gets all the way back into the issue of you not wanting control over your computer. 04:06:44 Let me rephrase this simply, so that it'll fit inside your closed mind: I don't care. I have the degree of control I require. 04:08:45 Which isn't the amount of control you should have in a free society, IMO. 04:08:50 * pikhq leaves 04:08:55 -!- pikhq has quit ("leaving"). 04:09:29 honestly, I wish more people would realize that not everyone wants the same thing. 04:16:50 -!- CakeProphet_ has quit (Read error: 113 (No route to host)). 04:31:36 -!- Sgeo has quit (Read error: 54 (Connection reset by peer)). 04:52:16 -!- ShadowHntr has quit (Client Quit). 05:06:48 ~quit 05:06:49 -!- bsmnt_bot_chroot has quit. 05:06:52 -!- bsmnt_bot_chroot has joined. 05:06:57 ~ps 05:06:58 None 05:07:34 ~exec self.register_raw(".*", lambda x,y,z : "this fails") 05:07:37 a 05:08:27 -!- bsmnt_bot_chroot has quit (Client Quit). 05:08:29 -!- bsmnt_bot_chroot has joined. 05:08:33 ~exec self.register_raw(".*", lambda x,y,z : "this fails") 05:08:35 a 05:08:43 good 05:09:13 ~quit 05:09:13 -!- bsmnt_bot_chroot has quit (Client Quit). 05:09:15 -!- bsmnt_bot_chroot has joined. 05:09:18 ~exec self.register_raw(".*", lambda x,y,z : "this fails") 05:09:20 a 05:09:23 a 05:09:26 sweet 05:32:21 -!- digital_me has quit ("goodnight"). 05:57:47 -!- ShadowHntr has joined. 06:11:15 whoops. 06:27:17 -!- ShadowHntr has quit (Client Quit). 06:41:12 'night folks 06:41:38 -!- RodgerTheGreat has quit. 06:55:59 -!- EgoBot has quit (Read error: 54 (Connection reset by peer)). 06:56:14 -!- EgoBot has joined. 06:57:04 -!- sp3tt has quit (Remote closed the connection). 07:04:38 -!- GregorR has quit (Read error: 104 (Connection reset by peer)). 07:05:00 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 07:10:10 -!- EgoBot has joined. 07:10:46 -!- GregorR has joined. 07:12:01 -!- ShadowHntr has joined. 07:24:36 -!- GreaseMonkey has joined. 07:26:44 -!- ShadowHntr has quit (Client Quit). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:02:54 -!- oerjan has quit ("leaving"). 09:08:12 -!- GreaseMonkey has quit. 13:38:22 -!- ihope has quit (Connection timed out). 13:38:22 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 14:30:10 -!- sp3tt has joined. 15:37:10 -!- RodgerTheGreat has joined. 15:37:23 hello 15:43:32 hi 15:45:06 * RodgerTheGreat feels deja-vu 16:02:23 :-) 17:30:02 -!- tgwizard has joined. 18:03:10 hi 18:11:16 -!- jix has joined. 19:32:52 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 20:04:38 -!- puzzlet has joined. 20:14:31 heh 20:15:00 -!- Sgeo has joined. 20:35:05 -!- Sgeo has quit (Remote closed the connection). 20:49:41 -!- oklopol has joined. 20:54:45 -!- ihope_ has joined. 20:55:17 -!- ihope_ has changed nick to ihope. 20:58:01 Basement bot change root errors. 20:58:05 Some years ago, that would have made no sense whatsoever. 20:58:48 -!- bsmntbombdood has left (?). 20:58:48 -!- bsmntbombdood has joined. 20:59:00 ihope: ? 20:59:19 The phrase "basement bot change root errors". 20:59:28 change? 20:59:40 That's what "chroot" is, no? "Change root"? 20:59:40 ooh, chroot 20:59:44 yeah 20:59:46 Just like chmod and... uh. 20:59:52 I misread root as chroot 21:00:04 Oh! chown! 21:00:11 chown is a funny word 21:00:16 Yep. 21:00:33 Chowns work at circles, right? 21:00:59 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:01:35 gra 21:01:36 r 21:01:42 -!- digital_me has joined. 21:01:42 ~exec print "foo" 21:01:55 ~exec print >> sys.stdout, "foo" 21:01:55 foo 21:02:03 THAT SHOULDN'T HAPPEN 21:02:18 ugh 21:02:27 ~exec print >> sys.stderr, "foo" 21:03:16 ~exec sys.stdout = IRCFileWrapper(self.raw, "#esoteric") 21:03:21 ~exec print "foo" 21:03:31 ~exec print >> sys.stdout, "foo" 21:03:32 foo 21:04:06 ~exec print >>sys.stdout, sys.stdout 21:04:06 <__main__.IRCFileWrapper instance at 0xb7c8188c> 21:04:20 ~exec sys = __import__("sys") 21:04:22 ~exec print >>sys.stdout, sys.stdout 21:04:22 <__main__.IRCFileWrapper instance at 0xb7c8140c> 21:04:29 ~quit 21:04:29 -!- bsmnt_bot_chroot has quit. 21:04:30 woah, sweet: http://www.sics.se/~adam/ubasic/ 21:04:32 -!- bsmnt_bot_chroot has joined. 21:04:40 ~exec print >>sys.stdout, sys.stdout 21:04:41 <__main__.IRCFileWrapper instance at 0xb7c0840c> 21:04:44 hmph 21:06:12 that's broken 21:08:07 ~exec print "foo" 21:08:22 ~exec exec "print sys.stdout" 21:08:38 ~exec exec "print sys.stdout" in globals() 21:08:44 ~exec exec "print sys.stdout()" in globals() 21:09:56 arrrrrrrrrrrrrrrrrrrrrrrrrrrrrugula 21:12:18 Arrrrrrrrrrrrrrrrrrrrrrrrrrrrrugula? 21:12:36 yes 21:34:03 -!- CakeProphet has joined. 21:34:36 -!- fizzie has quit (pratchett.freenode.net irc.freenode.net). 21:34:36 -!- GregorR has quit (pratchett.freenode.net irc.freenode.net). 21:34:50 -!- GregorR has joined. 21:35:38 arrugula 21:38:28 -!- fizzie has joined. 21:55:05 hmmmm... 21:55:20 My ORK variant looks pretty neat. 21:55:34 It uses a data strcture I've never actually seen in any other language. 21:56:33 which is? 21:57:23 a "ring"... which is basically a sequence of co-routines. 21:57:46 it's an idea for compound routines I've been considering. 22:00:49 -!- bsmntbombdood has changed nick to http-. 22:01:16 -!- http- has changed nick to bsmntbombdood. 22:03:11 When you call a ring... it calls the first coroutine in the list... and its first yield contains the arguments that are to be passed to the next coroutine.... when the last coroutine yields... all the coroutines continue their execution where they left off... in reverse order. 22:09:03 I'm using it to represent the action-event system for my MUD... because it's extremly well suited for something like that. 22:09:29 huh? 22:09:53 an action calls a ring... and a ring can contain any arbitrary number of coroutines... that each modify the arguments of the next one. 22:10:08 it makes it trivial to imlement something like.... a poison effect. 22:10:16 you just pop the posion function onto the ring. 22:10:26 what's poison effect? 22:11:19 an example of how my MUD could use a ring effectively? 22:11:32 ... 22:12:02 oh no... Bob got bit by a MUD-snake... now he's poisoned and is losing health... 22:12:04 or something./ 22:12:08 bad example though... 22:12:14 I don't get it 22:16:38 familiar with how coroutines work? 22:17:01 coroutine is a python style generator, right? 22:17:11 Not exactly... 22:17:20 generators are a simplified coroutine though. 22:17:30 Python added coroutine emulation for generations in version 2.5 22:17:42 so that you can do things like x = yield 5 22:19:07 what does that do? 22:19:38 returns 5, freezes execution, and awaits for either the next() or the new send() method to be called./ 22:19:57 oooh, send 22:20:07 send is like next... except you can pass it an argument... which becomes the return value of the yield expression. 22:20:13 that sounds fun 22:20:17 if you did MyGenerator.send(10) 22:20:24 x would be assigned to 10... 22:20:37 so its a generator that can take arguments. 22:20:46 upon subsequent calls. 22:20:57 rather than -only- the first call... as it was in 2.4 22:21:07 that's pretty cool 22:21:21 So a ring... is a sequence of these. 22:22:51 the first yield of each coroutine is the arguments of the next coroutine call.... and when it reaches the end of the sequence, it "turns around" as all them are called a second time, picking up where they left off at there yield expression. 22:24:05 so... it makes it extremly simple to tag on functions to the beginning and end of these rings... which is ideal for something like a MUD... where you can change all of this in mid runtime. 22:24:32 -!- tgwizard has quit (Remote closed the connection). 22:26:25 hmm... it probably qualifies as a self-modifying data type as well... 22:27:11 the coroutines are perfectly capable of tagging on new functions to their ring... and they can change the arguments sent to any of the functions both foreward and reverse. 22:27:11 Yep, I still don't understand why that's useful 22:27:32 eh... it's not terribly useful... but it'll be handy for this specific task. 22:28:24 I use an event system for objects in the MUD... different actions trigger specific responses to arbitrary functions when they occur... 22:29:06 -!- RodgerTheGreat has quit. 22:30:13 player A types in "get box"... which sends a get event to his character, which calls whatever ring is assigned to that event with the argument "box"... one of the functions of the ring sends a "gotten" event to box... which respondes with whatever function has been assigned to it. 22:30:21 It's callbacks basically. 22:33:57 It makes things a little more complicated... but its compensated by making everything super easy to add on to. 22:41:23 Have you looked at the "Platypus" alternative library for Inform? 22:41:37 It might be of interest. 22:47:43 I don't know what Inform is. 22:50:30 this is probably the best way to do it... it simplifies a lot of the tangle involved with event programming. 22:54:29 Inform is a lang for writing IF (very like a MUD), and plutypus is a better-though-tou library that the standard one. 22:55:04 see section 2 of this page: 22:55:07 http://homepage.ntlworld.com/elvwood/InteractiveFiction/Platypus/Summary.html#2 22:57:58 eh... it looks neat... but I don't think I'd like it better. 22:58:30 I have been thinking about how the indirect responses will work... I don't want to clutter up the possible events with a bunch of indirect events. 23:00:49 The coroutine approach works extremly well... you can put the manipulation and the did-it-happen check all in the same function. 23:09:00 I suppose so 2007-01-10: 00:29:52 -!- ShadowHntr has joined. 01:28:45 -!- ShadowHntr has quit (Client Quit). 01:37:40 ...OOP terminology makes me nauseas. 01:37:44 and I have no idea why./ 01:38:20 hmph 01:39:28 I like the simplicity of functions... but I also like the sheer amount of shit you can accomplish with OO... 01:39:34 I just don't like how... weird... OO is./ 01:40:40 OO isn't that weird 01:41:28 In python, it's just a thin abstraction over dictionaries 01:42:00 yeah.. 01:42:05 I just mean... the way people talk about it. 01:42:08 gives me shivers. 01:42:15 the wording and shit... 01:43:07 objects, classes, polymorphism? 01:44:47 ...yeah. 01:46:27 abstract base class, wrapper, instance of a class, class method, members, handler (dear God... I despise anything with "handler" in its name...) 01:47:49 meh 01:48:12 Handle this! 01:48:38 ~exec for i in range(5): self.raw("PRIVMSG CakeProphet :handler!") 01:48:53 damn 01:49:03 ~exec for i in range(5): self.raw("PRIVMSG CakeProphet :handler!") 01:49:06 wtf 01:49:26 gah, stupid freenode 01:49:34 Hee-hee ... I made a DNPTB-themed wallpaper for my cell phone :) 01:50:04 DNPTB? 01:50:21 http://www.donotputthebaby.com 01:50:24 oh 02:05:18 DO NOT 02:05:22 PUT THE 02:05:25 baby 02:33:53 -!- ShadowHntr has joined. 02:35:26 -!- pikhq has joined. 03:05:04 -!- loopd001 has joined. 03:59:03 -!- pikhq has quit ("leaving"). 04:15:08 -!- CakeProphet has quit (Read error: 113 (No route to host)). 04:51:13 bah, no one has broken my chroot yet 04:52:00 the 35 bytes in /home/bsmntbombdood/proof.txt await you! 05:01:47 -!- digital_me has quit ("night"). 05:02:20 what does it proove? 05:03:18 that you broke my chroot 05:04:51 somehow i felt i had to ask what proof.txt prooves without considering the context at all 05:12:36 probably the only way you could see what's in the file is if you broke the chroot jail? 05:12:58 * ShadowHntr hugs his Solaris installation... :D 05:15:58 i only have a vague idea what a chroot is... but i'm sure i'd enjoy breaking one 05:31:21 oklopol: want me to explain? 05:44:11 ShadowHntr: yeah 05:44:28 http://en.wikipedia.org/wiki/Chroot 05:44:39 maps the specified directory to root 05:44:45 changes root directory 05:44:59 so it creates a "jail" in which the user can't access anything outside of. 05:46:15 There's ways to get out of one, but I think they require root 05:55:30 break it! break it! 06:03:38 breaeaeaeaeeaeaek it 06:14:05 come on! 06:45:51 -!- oerjan has joined. 07:29:10 -!- ShadowHntr has quit ("End of line."). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:40:59 -!- wooby has joined. 09:29:02 -!- wooby has quit. 09:52:33 -!- Sukoshi has joined. 09:52:47 Does anyone know the typical error of a good perceptron? 09:53:26 ???? 09:53:42 * oerjan means no, and what is a perceptron? :) 09:54:16 A basic neuron model. 10:14:34 -!- loopd001 has quit ("DISCO"). 12:23:32 -!- clog has joined. 12:23:32 -!- clog has joined. 13:18:02 -!- ihope has quit (Connection timed out). 15:04:53 -!- oerjan has joined. 15:28:19 -!- tgwizard has joined. 15:31:46 -!- jix has joined. 18:57:19 -!- RodgerTheGreat has joined. 18:57:25 hi 18:58:44 http://esoteric.voxelperfect.net/wiki/Fortuna 18:58:52 can someone explain this? 18:59:17 0 Change nothing 18:59:17 1 Take hand on or off the wheel 18:59:27 what the fuck does a hand do? 18:59:29 :\ 19:00:27 "there is a theoretical wheel, spinning at a constant speed of 1, that manipulates a set of bits" 19:00:39 ye 19:01:43 so... executes a BF > or < between every instruction... or? 19:03:55 I get this sudden urge to create the Incomprehensible template :) 19:04:15 if it's a constant speed of one, how can you change it? speed as a concept includes the direction, if it's constant, how is it changed? 19:04:18 means velocity? 19:04:37 no, velocity includes direction, speed does not. 19:04:51 okay 19:04:55 good 19:05:31 although with the rest of the description I wouldn't bet on the writer having considered that. 19:05:32 nah i don't understand the lang 19:06:27 i hate these descriptions, i have to read the long code of the interpretor to be able to understand the idea, which can easily be expressed in a few sentences 19:06:36 or then i 19:06:51 'm just too stupid to understand clear descriptions 19:07:29 which, tho, i wouldn't be suprised of, given i missed the on this wheel part in "On this wheel there are five commands:" 19:07:33 That would have been an option if there was actually a pointer to an implementation. 19:07:46 yes, that's why i had to ask 19:07:58 if you get it, please tell me :\ 19:08:43 i got a result of almost printing 0000111 when executing the prog, but then it did something weird in the end 19:08:54 and the scan... i have no idea what that means 19:09:59 "move bit pointer in current direction" there are 3 directions, memory direction, wheel direction and ip direction, right? 19:10:16 OK I had one sudden insight. 19:10:25 on that, or smth else? 19:11:24 The wheel does not actually contain the bits. The wheel only has 5 positions, each of which corresponds to a command. 19:12:13 yes 19:12:44 Well, perhaps. It doesn't make very much sense even then. 19:12:45 but, when scanning for example, wtf do you scan, the code? and are there multiple directions to iterate the code? or? 19:14:29 the code, if i'm right, first fills in the memory 00001110, then changes wheel dir and does somt very strange 19:14:37 *something 19:14:40 Impossible to say. Whoever wrote the description had no idea how to express an idea. 19:15:54 it changes wheel direction, then outputs, THEN SCANS, scanning being so badly described i have no idea about it, and scanning in that sence too that the output is done 8 times too 19:15:56 i think 19:15:58 OK, perhaps if the example code can be deciphered, something more can be said. 19:17:12 i could decipher that the wheel goes around, when hand is put on, that command is done, when hands are taken off, that command is not executed, while hands are on, all commands are executed 19:17:21 which is said in the description too 19:17:22 Could you please explain how you get even as much as that out of the code? :) 19:17:27 tho not very clearly 19:17:30 okay 19:18:11 actually you said the essential thing while i was writing i think 19:18:15 0, no hands-on, so bit not changed, 1, wheel turned to 'move bit pointer' and hand were put on, so that is done, memory now 00 19:18:17 good 19:18:19 thought so 19:18:42 i was in a hurry to write that before you could figure it out so i'd get the credit :) 19:19:37 Well, congratulations :) 19:20:08 the author really thought it's obvious that intructions are executed when hands are on the wheel? 19:20:22 -!- digital_me has joined. 19:20:41 I'll have to write up what we get after doing your initial decoding step. But first I actually need some food... 19:24:25 Although if the code = bits and so is self-modifying, the decoding may have to be done continuously. 19:25:31 Wait a minute - a second insight 19:26:00 The "scan" may be a warped version of brainfuck [] - after all, it says the language is brainfuck inspired. 19:26:36 Again, perhaps. 19:26:41 yeah, i think it is, but it's not needed there 19:26:54 very hard keeping track of the execution 19:27:40 that is of course a plus :) but the documentation is bad, unless it's intentionally left as homework for the reader 19:30:06 OK, what did you say you thought the first actual command executed was? 19:31:32 [0]1[2340]1[2340]1[2340]1[234]01[234]01[234]01[234]0[123]432[1]0401[2]3432[1]0401[2]3432[1]0401[2]3432[1]0401[2]343[2]104 19:31:42 this is all the commands if i omit 2's 19:31:49 the beginning makes sence 19:31:59 actual first command > 19:32:36 or, the beginning is >>>>*>*>*>* then change wheel direction... and lost me :) 19:33:45 you'd think it's the output part because there are as many commands as in the beginning where the 0000111(1?) is done 19:33:55 but no, it's full of weird loops and such 19:34:47 a bell character should be 00000111, anyhow 19:35:06 or, does the "Switch direction of wheel" actually mean "change direction of the bit pointer"? 19:35:15 then it'd make sence 19:35:44 oerjan, i think the last bit might be output twice 19:35:46 i would have thought it meant both 19:35:57 because the end is not identical to the almost-end 19:36:10 might mean both, but then 2's are executed 19:36:29 even tho i don't think that is sensible 19:37:56 [0]1[2340]1[2340]1[2340]1[234]01[234]01[234]01[234]0[123]4[012]301[2]3401[2]... now it seems to omit 2's but change direction all the time making the first >>>>*>... thing useless 19:38:48 and, it's clear that in the past-middle output section, either almost every instruction or just one instruction is executed (0001100011 etc) 19:39:03 so, 2 would be most sensible to omit 19:39:23 since it certainly has nothing to do with outputting a \0x7 19:40:39 is the author here? i'll spank him 19:41:28 i thought it'd take like 3 hours to write down a list of all brainfucks and their syntaxes 19:41:36 has taken maybe 6 now 19:41:44 and i'm half down the list 19:42:55 fuck it... next lang :) 19:43:03 if you figure it out, tell me 19:44:43 http://esoteric.voxelperfect.net/wiki/FukYorBrane, once again, a thorough spesification :( 19:44:52 bomb? 19:45:12 a non-'<>+-[],.' instruction? 19:45:27 It's inspired by brainfuck and redcode, i believe 19:45:40 oh, there is an implementation 19:45:45 yeah, i know 19:49:35 now i realize it's one of gregorr's langs, which i already read on his page, well, who'd remember a name like FukYorBrane :D 19:59:44 GregorR, damn you, first brainfuck i couldn't specify in 5 sentences :D 20:00:36 Yeah, gregorR's languages tend to have a certain quality. 20:05:15 yeah, i assumed all bf-copies are shit :) 20:05:24 in fact, many are pretty nice 20:05:27 http://esoteric.voxelperfect.net/wiki/Hargfak 20:05:30 now, the main stack 20:05:34 is that the main array? 20:06:06 <, > etc are just 'same as in BF', but then i'll have to know if the stack is the memory... it's not really a stack in bf :\ 20:06:49 plus, "{} Make a code-block, push to stack" wouldn't make sence then 20:07:18 i think the stack and array are separate 20:07:40 # ( Move top from main stack to top of stack at sub pointer 20:07:40 # ) Reverse function of ( 20:07:50 i have no idea what that means :\ 20:08:00 top of stack at sub pointer? 20:08:04 ask the GregorR himself 20:08:12 sub pointer points to memory, i'd think :\ 20:08:18 is Hargfak his? 20:08:21 i doubt it 20:08:24 not on his page 20:08:35 oh, I thought you said it was 20:08:41 FuckYorBrane is well commented 20:09:09 nope it's ZZo38's 20:09:23 oh 20:09:38 does he exist somewhere? :D 20:09:50 he is quite productive on the wiki 20:10:33 well, doesn't help me :\ 20:10:40 you understand ()? 20:10:45 darn, the wiki is slow. 20:11:00 or you understand "top of stack at sub pointer" 20:11:16 i think i retract my first assumption 20:11:32 i think the language has stacks as elements of stacks 20:11:41 as one of the data types. 20:12:43 yeah, thought might be so, then all cells are numbers by default, but stacks can be put there 20:13:07 put... what's the word... 20:13:46 i'm starting to miss basic vocabulary, someone must be feeding me drugs or smth 20:14:54 i'm sorry but obviously your brain is fucked. 20:15:17 put is fine, i think. 20:15:18 well... makes sence :\ 20:15:59 put is fine, yeah, but it's not really nice if i can't look-up the word i was gonna use... 20:16:27 i mean, generally, not nice to forget something you've known for ages 20:16:35 been doing too much brainfuck 20:16:36 maybe 20:17:05 inserted, placed, pushed? 20:17:35 any of those would've been nice :) 20:17:50 put was the only one i found 20:18:03 usually happens when i've been reading a dictionary 20:18:20 i forget all other words for a while 20:18:35 tho, off-topic, gotta continue my task 20:19:30 okay 20:19:42 if stack is the same as the memory, "; Push data at pointer to stack" 20:20:30 okay, i have no idea, next lang 20:38:12 *sigh* that Fortuna program doesn't make sense either way. 20:38:56 no matter which interpretation is used it looks like it is doing _input_ first. 20:45:27 looking at the history, a couple of points in the article might actually be misunderstandings by later people trying to clean up after the author. The author actually explained that hands on/off continued/suspended execution, and didn't actually say the beep was a single character. 20:53:38 i figured it'd be nice to have 50 brainfucks rather that 48 so i'll have to improvise 2 20:53:54 the first one is nice, i'll add it in the wiki and feel proud 20:53:55 yay 21:14:16 god ihope has a lot of langs there :O 21:14:56 -!- ihope_ has joined. 21:15:20 -!- ihope_ has changed nick to ihope. 21:15:41 speak of the devil 21:16:52 wow 21:16:58 that was weird 21:17:16 What, you've never seen a synchronicity before? :) 21:17:20 but i said god ihope, not devil 21:17:43 oerjan, yeah, but things can be weird multiple times 21:17:44 :) 21:17:52 Basement bot change root again. 21:18:03 yes? 21:18:29 What happened? 21:18:35 ? 21:19:03 Ah, I see. 21:19:10 ? 21:19:11 13:14:16 god ihope has a lot of langs there :O 21:19:18 13:14:56 --- join: ihope_ (n=foo@c-71-205-100-59.hsd1.mi.comcast.net) joined #esoteric 21:19:35 ya 21:19:55 it was weird until i figured ppl here have a habit of actively reading logs 21:20:09 which is never done in any other channel i am on 21:20:16 heh 21:20:51 but, this is one of the only channels that sometimes has stuff worth reading afterwards 21:21:15 due to it's experimental nature 21:21:20 I didn't see that log until afterward. 21:21:25 okay 21:21:29 then it is weird 21:21:36 I must be psychotic. ;-) 21:21:59 psychotic indeed 21:22:01 :P 21:22:14 ain't we all 21:22:35 ~exec self.raw("PRIVMSG #esoteric :psychos!") 21:22:35 psychos! 21:22:45 i don't know if you have many bf-langs there, just saw your name three times in a row when checking the author of pages randomly 21:22:52 ihope 21:22:58 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:23:22 BF-langs, eh? 21:23:54 in the category bf-derivatives 21:24:05 i saw your name in three random picks 21:24:21 ihope127 actually, assumed that's you 21:24:27 Yeah, it is. 21:24:33 whoa 21:24:37 oklopol is writing a thesis, "A survey of languages within the Mullerian sub-paradigm of Esoterics." 21:24:40 127 is 2**7-1 21:24:42 * ihope clicks "Random Page" a few times and eventually lands on one of his own languages. 21:24:52 :D 21:25:05 how many do you have? 21:25:06 Exactly why I chose the number 127. 21:25:21 No idea. 21:25:25 bsmntbombdood, what a witty thing to notice :D 21:25:27 1<<7 - 1 21:25:54 it is indeed possible to do a search for the word "ihope" 21:26:02 True. 21:26:02 i believe 21:26:07 t 21:26:10 nil 21:26:11 hey, good idea 21:27:42 eh... 6 ones? maybe the search is too complicated for me 21:29:24 I only get 3. hmmm.. 21:29:43 I have Catch, Foobar, SMATINY, SNOBOL, quantum brainfuck, BF-SC, and BF-PDA. The fact that there are six there and you said six may be making me forget the others. 21:29:56 I also have Subtle Cough. 21:30:25 ...Wait, I listed seven there, not six. 21:30:28 ah, ihope127 gave many more matches than ihope for some reason. 21:30:29 a language were the only construct is raising and catching exceptions 21:30:31 So that makes eight. 21:30:35 oerjan: of course. 21:30:41 -!- CakeProphet has joined. 21:30:42 bsmntbombdood: fun, no? 21:30:53 Is that actually what it is? 21:30:55 Of course, I could probably do it much better now. 21:31:04 sweet 21:31:05 bsmntbombdood: might be; I dunno. 21:31:11 ? 21:31:12 i thought it would match subwords as well. 21:31:19 Also, I make Thubi. Nine, then. 21:33:18 ok i see 11 matches 21:33:34 What'd I miss? 21:33:55 wait a minute, SNOBOL is not esoteric. 21:34:10 ah, SLOBOL. 12 then. 21:34:16 hmm, a qbit is a bit that has a certain probability for being 1 or 0? too complex for me again, if not :) 21:34:19 Close enough. 21:34:29 BF-PDA is not listed. 21:34:37 it is 21:34:51 not under the search results 21:34:58 oklopol: no, there's a probability amplitude, which is a complex number, for every possible combination of bits. 21:35:08 no name on the article 21:35:13 maybe that's why 21:35:17 And the probability corresponding to the amplitude x is |x|^2. Confusing, eh? 21:35:47 |x|^2 is the length of the number ^ 2? 21:35:51 neither is Subtle Cough. 21:36:05 |complex| is the length 21:36:05 ? 21:36:38 x is the amplitude. 21:36:51 yo mommoa is the amplitude 21:36:53 |x| is the absulute value of the amplitude. 21:36:53 okay, is that a complex number? 21:37:01 Yes, x is a complex number. 21:37:19 but, absolute value of a complex number is it's length 21:37:23 Also, I made ///, a.k.a. Slashes. Does that make 10? 21:37:23 right? 21:37:29 oklopol: the length of its vector? Yes. 21:37:39 well, that's what i meant, yeah 21:38:08 there is Slashes (///), REverge, Minimum, Pointy and Onoz. 21:38:11 Yay. 21:38:19 k, i'll just do like the wiki and assume the reader knows qubits :) 21:39:41 So REverge isn't really a language, so that's Catch, Foobar, SMATINY, SLOBOL, quantum brainfuck, BF-SC, BF-PDA, Subtle Cough, ///, Minimum, Pointy, onoz. 21:39:53 Twelve in all, I guess. 21:40:32 And how many are joke languages? 21:41:12 Ah yes, Subtle Cough is not really usable either, as I proved. 21:41:55 Yeah, that. 21:43:19 REverge seems a bit unfinished. 21:43:47 I mostly forgot about Catch, Foobar is finite, SMATINY is not only finite but reversible, SLOBOL is Foobar in disguise, quantum brainfuck is Turing-complete, BF-SC and BF-PDA are guaranteed to terminate, Subtle Cough is not Turing-complete, /// is unknown, Minimum has no programs, Pointy is Turing-complete, and onoz is unknown. 21:43:54 Yes, REverge might as well be deleted. 21:44:11 So that's at least two languages I made that are Turing-complete. 21:44:27 SMATINY is definitely not a joke, in my opinion. 21:44:43 not any more than SMETANA. 21:45:52 Yeah, it's not a joke. 21:46:16 Catch... oh, whether or not it's Turing-complete depends on the built-in exceptions and handlers. 21:47:36 Onoz can of course express all programs known to terminate. 21:47:45 Yep. 21:49:23 It is probably Turing-complete, although we will never know how to program in it, because for infinite loops we have to use a subprogram which we think but are not sure never terminates. 21:51:08 Hmm... 21:54:02 I expect some variant of the proof of the halting problem can be used to find a couple of algorithms such that one of them does not terminate but we can never know which. 21:55:24 halting problem + gõdel's incompleteness theorem (whose proofs are essentially very similar) 21:56:53 Hmm. 21:57:19 Wait. If we can never know something's incorrect, it's correct. 21:57:31 If there's no observable difference, then they're the same. 21:57:37 yes, but we cannot necessarily prove it. 21:58:00 We can't prove two things to be the same, sure. 21:58:33 If we have a collection of algorithms and we know exactly one is correct, we can figure out which one it is. 21:58:50 and the definition of Onoz uses provability of non-termination, not actual termination. 21:59:36 except that in reality none of them terminate, but we are not sure of it. Maybe we don't really need more than one algorithm. 22:00:40 i assume http://esoteric.voxelperfect.net/wiki/SPL also has + / - since they are used in the example 22:00:44 but what is |? 22:02:26 "that of brainfuck", someday i'll learn to read 22:02:41 Brainfuck has |? 22:03:31 it seems like | is a variant of $ 22:05:57 There is the same confusion on his webpage (except in Italian :) ) 22:06:23 Several more example programs though. 22:06:37 okay 22:06:41 variant? 22:06:46 ah 22:06:48 decimal 22:07:01 All except the final example use |. 22:07:06 yeah, a monkey could see that from the example 22:07:13 the | is decimal input thig 22:07:15 *thing 22:07:27 but i didn't 22:07:29 Actually so is $, according to the website. 22:07:33 really? 22:07:38 well, i don't believe it :) 22:07:48 $Aspetta che l'utente inserisca un numero e lo mette nell'accumulatore 22:07:56 i make my own lang then, take the same name and change that 22:08:35 http://stelk.altervista.org/SPL0.2.tar.gz 22:08:41 or, my lang's name is SPL ^H 22:08:45 if needed 22:09:46 i can't open that, anyway, i'll make it ascii input, i'm sure the author never sees my page :) 22:10:09 oh fuck 22:10:18 | puts a number in the current cell 22:10:37 There is an implementation there too, in C++ 22:11:05 i can't open the link 22:11:16 No, it's , which does that. 22:11:22 now it opened 22:11:24 $ insers into the accumulator. 22:11:40 | read a number in the current cell, at least in the example 22:11:42 *inserts 22:11:44 *reads 22:11:45 :D 22:12:41 LOLfuck, '$' is twice in that code 22:12:48 there's no '|' 22:13:04 Which file? 22:13:52 i got it open 22:14:11 ah, the C++ code. And not an else in sight, either :) 22:14:17 there is a '#' that is just a subset of '[' xD 22:14:40 no elses, so '$' does two inputs, only latter one is used 22:14:44 unnested version 22:14:55 okay 22:15:05 you can use it with [] for interesting results 22:15:12 so i retract my statemenzzor 22:15:25 especially 'xD' 22:15:28 :) 22:20:33 Wait a moment. 22:20:46 Hm... 22:20:59 It says on the wiki that # ... # is a comment. 22:22:55 However, the implementation makes no attempt to ignore [] matches inside #'s, so it can still be used for interesting results. 22:24:49 :DD 22:26:59 i didn't even think of the '#' as a comment since i thought it was supposed to be used with [] for additional fun 22:27:42 There is some serious possibility for buffer overruns with #[] too.. 22:28:08 yeah, overall, FRENCH PEOPLE SUCK AT CODING 22:28:16 (i'm kidding don't kill me :;() 22:28:38 It would have been better if you had noticed it was Italian. 22:28:57 Unless that was part of the joke :) 22:29:11 THEY CAN'T EITHER 22:29:13 :) 22:29:23 i don't know either language :\ 22:29:51 I know enough to guess most of the meaning. 22:30:27 hmm 22:30:29 maybe me too 22:30:31 i'll try 22:31:08 "Aspetta che l'utente inserisca un numero e lo mette nell'accumulatore" 22:31:11 no idea 22:31:45 "Expect that the user will insert a number, and put it in the accumulator." 22:33:13 looneys! 22:33:18 looneys i say! 22:33:23 BLBLBLBLBLBLBL 22:33:45 No 22:33:46 one 22:33:51 has broken 22:33:53 what langs do you know to understand that? 22:33:54 my chroot 22:33:55 yet 22:34:11 bsmntbombdood, maybe it's too easy for us 22:34:19 oh, right 22:34:31 English, a bit Italian, and in theory a bit French. 22:34:45 looneys! 22:35:02 break me! 22:35:05 Note that almost every long word except "mette" is related to the English. 22:35:41 ~quit 22:35:41 -!- bsmnt_bot_chroot has quit. 22:35:45 -!- bsmnt_bot_chroot has joined. 22:35:51 yes, but vaguely 22:35:52 oops 22:35:53 So what I need of Italian is mostly grammar. 22:35:56 ~quit 22:35:57 -!- bsmnt_bot_chroot has quit (Client Quit). 22:35:58 -!- bsmnt_bot has joined. 22:36:00 utente in unguessable 22:36:57 Oh yes, I also once read a Latin grammar. Made me understand a lot about how things like "utente" and "user" can be related. 22:36:57 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 22:37:03 ~exec print >> sys.stdout, os.abspath(".") 22:37:52 ~exec print >> sys.stdout, os.getpid() 22:37:53 16985 22:38:05 Basically one is the present stem and the other the past perfect. 22:38:58 And English for some reason borrows Latin words with the latter. 22:39:40 Actually English has that version too: "utility" 22:39:51 -!- oklopol has joined. 22:40:15 lame 22:40:16 *words -> verbs 22:40:48 darn i didn't notice you left :( 22:40:51 :) 22:40:53 i thought so 22:40:56 repeat! 22:40:56 :D 22:41:07 Oh yes, I also once read a Latin grammar. Made me understand a lot about how things like "utente" and "user" can be related. 22:41:14 Basically one is the present stem and the other the past perfect. 22:41:19 And English for some reason borrows Latin words with the latter. 22:41:27 Actually English has that version too: "utility" 22:41:32 *words -> verbs 22:42:50 -!- bsmnt_bot has quit ("nobody loves me :("). 22:42:52 -!- bsmnt_bot has joined. 22:43:49 * oerjan hugs bsmnt_bot 22:44:23 break me! 22:44:46 * oerjan doesn't have the skills for that. 22:45:13 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 22:45:18 I tend to stay at an abstract level, fairly far from the machine. 22:45:33 ~exec print >> sys.stdout, os.getpid() 22:45:34 16991 22:46:20 Besides, who knows if there even is a loophole to use. 22:46:41 I'm sure there's a way to do it 22:48:02 I suppose if you included the whole Linux distribution in the jail there might be a chance. 22:48:19 yeah, there isn't much to exploit inside it 22:48:53 It might in fact be easier to break into your machine from the outside, for all I know. 22:48:59 no setuid root programs 22:49:48 (inside the jail) 22:53:26 So basically only someone with a good knowledge of the Linux kernel (and probably Python) would stand a chance, which doesn't include me. 22:53:38 heh, yeah 22:59:05 -!- oklopol has joined. 23:01:59 -!- tgwizard has quit (Remote closed the connection). 23:02:59 ~exec print os.listdir() 23:03:41 ~exec print >> sys.stdout, os.listdir() 23:03:44 ~exec print >> sys.stdout, os.listdir(".") 23:03:44 ['bin', 'bot', 'etc', 'lib', 'usr'] 23:03:54 Why do you have to do that? 23:04:01 because python is stupid 23:04:08 ~exec print >> sys.stdout, os.listdir("bin") 23:04:09 ['bash'] 23:04:25 .... print >> sys.stdout is the exact same thing as print 23:04:28 it's redundant. 23:04:37 In a normal enviroment, yeah 23:04:44 ~exec print >> sys.stdout, sys.stdout 23:04:45 <__main__.IRCFileWrapper instance at 0xb7bfe48c> 23:04:53 ~exec print >> sys.stdout, os.listdir("lib") 23:04:53 ['libm.so.6', 'libreadline.so.5', 'libdl-2.4.so', 'libresolv.so.2', 'libutil.so.1', 'libncurses.so.5', 'libcrypt.so.1', 'ld-linux.so.2', 'libdl.so.2', 'libpthread.so.0', 'libpam_misc.so.0', 'libpam.so.0', 'libc.so.6'] 23:05:29 ...no... I mean... that -is- the same thing. 23:05:42 obviously not 23:05:47 inside an exec 23:05:47 There's no other way to get around that... unless you use >>, print goes directly to sys.stdout. 23:05:48 it would if the sys module was the standard one. 23:06:07 so you're using a different module for sys? 23:06:28 even then... you'd have to hack the interpreter to make those two statements mean anything different from each other. 23:06:31 I'm using a costum object, to redirct stdout to the right place 23:06:56 ...that doesn't change the fact that print by itself always goes to sys.stdout... 23:07:06 How are you assigning it to sys.stdout? 23:07:16 sys.stdout = whatever 23:07:32 i'm asking bsmntbombdood 23:07:35 CakeProphet: Can't do that, that interferes with the "real" stdout 23:07:55 * CakeProphet does it all the time... 23:07:59 well that's the idea, isn't it? 23:08:03 oerjan: by passing a costum enviroment to the python exec statement 23:08:20 it _should_ change the real stdout. 23:08:36 no, we only want it to change inside the exec 23:08:36 what's a costum enviornment... and how does it change the axiomatic grand law of python's print statement? 23:09:05 he is probably redefining the sys variable to not point at the sys module. 23:09:10 right 23:09:24 ....regardless.... the regular print would just point to that as well. 23:09:30 env[0]["sys"] = SysWrapper(stdout = IRCFileWrapper(self.raw, r.group(1)), stderr = IRCFileWrapper(self.raw, self.errorchan)) 23:09:55 That sounds kind of extraneous. :P 23:10:11 you could just do. 23:10:23 basically print will always refer to the stdout of the real sys module, not to stdout of whatever happens to be in the global variable sys. 23:10:38 exec SomeCode in {"sys":} 23:10:54 CakeProphet: That's what I am doing... 23:11:08 hmmm... so what's the point in wrapping sys if it doesn't do the main objective of replacing stdout? 23:11:26 It does replace stdout 23:11:33 only for the programmer. 23:11:35 ~exec print >> sys.stdout, sys.stdout 23:11:36 <__main__.IRCFileWrapper instance at 0xb7bfe7ac> 23:11:43 that's no file object 23:11:49 but not for print, which makes it pointless :) 23:11:52 but if the regular print statement doesn't. 23:11:54 yes. 23:11:59 you finished before me... 23:12:03 ~quit 23:12:03 -!- bsmnt_bot has quit. 23:12:06 -!- bsmnt_bot has joined. 23:12:15 ~exec print "error 23:12:28 it would be simpler to just do print >> channelObj 23:12:43 whatever you call that. 23:12:51 * CakeProphet doesn't like the >> syntax for print. 23:12:58 print >> IRCFileWrapper(self.raw, "#esoteric"), "foo" 23:13:01 channelObj.write("blah blah") 23:13:19 if you had constant objects for channels... it would be more convient. 23:13:24 ? 23:13:33 instead of instantiating one everytime. 23:13:33 esoteric = IRCF.... 23:13:44 yeah. 23:13:45 sys.stdout is the object representing the current channel 23:13:48 Then just print >> esoteric 23:14:04 well print >> curChannel 23:14:05 but what's the point in replacing sys.stdout if it doesn't does what sys.stdout is supposed to do? 23:14:21 you might as well just make a variable called "channel". 23:14:25 Well, I had to try 23:14:54 oerjan: print >> sys.stdout IS print >> currchan 23:15:13 I'm still trying to figure out how to make print behave like it should 23:15:21 I kind of like that... 23:15:25 just print >> esoteric 23:15:32 or even better esoteric.send() 23:15:59 ~exec global esoteric; esoteric = IRCFileWrapper(self.raw, "#esoteric") 23:16:26 ~exec print >> esoteric, esoteric 23:16:31 damn 23:16:39 yeah. 23:16:42 I didn't think that would work. 23:16:44 ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric") 23:16:53 ~exec self.esoteric.write("hi") 23:16:53 hi 23:17:41 hehe... I would have done factory functions or something :D 23:17:57 factory functions? 23:18:02 esoteric = channelfactory("#esoteric") 23:18:07 esoteric("Hello World!") 23:18:36 ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric").write 23:18:46 ~exec self.esoteric("foo") 23:18:47 foo 23:18:49 better? 23:18:55 * CakeProphet shrugs 23:18:58 doesn't matter to me. 23:19:47 factroy functions give functional programming an OO-like advantage. 23:19:51 without being all... OO-ish. 23:24:41 CakeProphet: factory functions? 23:24:47 You mean constructors? 23:24:59 ...same idea... 23:25:06 sorta kinda 23:25:09 data Channel = ChannelFactory String -- this? 23:25:14 make_adder = lambda x : lambda y : x+y 23:25:31 constructors setup an initial state... factory functions produce other functions. 23:25:44 Ah, I see. 23:25:52 So a factory function is just a function returning a function? 23:25:57 Yup. 23:26:07 pretty powerful stuff. 23:26:20 Naturally I'd miss the point completely, being used to first-class functions :-) 23:26:30 well... there's other flavors of factory functions... I've made a factory function that spat out classes. 23:26:43 Anything that produces something unusual? 23:26:51 hmmm... 23:26:58 not that I can think of. 23:27:00 In python you can make classes like factory functions 23:27:04 I considered making a factory factory function. 23:27:22 I mean a factory function is something that produces something unusual? 23:27:26 for producing convient factory functions. 23:27:29 no. 23:27:37 it just produces a... function. 23:27:47 ~quit 23:27:47 -!- bsmnt_bot has quit. 23:27:49 -!- bsmnt_bot has joined. 23:27:52 So how could a factory function spit out classes? 23:27:54 it puts a common set of goals that you'd have for defining a certain type of function into a nice little package. 23:27:57 ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric") 23:28:00 by defining them in their body. 23:28:04 I see. 23:28:05 ~exec self.esoteric("foo") 23:28:05 foo 23:28:08 neat, eh? 23:28:11 bsmntbombdood: is this guy chrooted? 23:28:15 yeah 23:28:34 the long nick was getting annoying 23:28:37 ~pexec self.quit 23:28:43 That didn't work. 23:28:43 the new error channel is #bsmnt_bot_errors, btw 23:28:47 ~exec 23:29:03 ~exec is public now 23:29:14 ~exec self.quit 23:29:27 That didn't exactly work either, eh? 23:29:37 it got executed though 23:29:46 AttributeError: IRCbot instance has no attribute 'quit' 23:30:28 ~exec self.do_quit() 23:30:35 I also forgot about the () at the end... uh... 23:30:45 Yes. 23:30:46 ...join that channel so I don't have to copy and paste erros 23:33:07 ~exec self.disconnect("RAH RAH RAH") 23:33:07 -!- bsmnt_bot has quit ("RAH RAH RAH"). 23:33:10 -!- bsmnt_bot has joined. 23:33:16 Pretty fancy. 23:33:20 there ya go 23:34:14 ~exec self.do_callbacks(":bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :~quit") 23:34:15 -!- bsmnt_bot has quit (Client Quit). 23:34:18 -!- bsmnt_bot has joined. 23:34:20 Wonderful. 23:35:33 -!- oklofok has joined. 23:35:50 What the... 23:35:56 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 23:35:59 ? 23:36:08 s/pol/fok/? 23:36:23 ihope, http://deadbeefbabe.org/paste/3246 23:36:30 assume that class statement is dedented a notch. 23:36:40 *indentation was screwing up. 23:37:12 silly python, indentation is for stupid people 23:37:32 CakeProphet: pretty fancy. 23:37:43 bsmntbombdood: uh... 23:38:01 Oh... wait... 23:38:03 Eh. 23:38:22 insane hackish solutions that weren't intended to be done is my favorite passtime. :D 23:38:43 __bases__? 23:38:52 ihope: what? 23:39:13 __bases__ is a classes inheritance tuple. 23:39:21 class Lol(Rofl, omfg) 23:39:24 bsmntbombdood: nothing, nothing... 23:39:30 Lol.__bases__ would be (Rofl, omfg) 23:39:33 oh ok 23:39:56 I could have skipped the whole class statement thing by doing. 23:40:04 Meh = type(name, parents, dictionary) 23:40:09 Pff. 23:40:14 That's no fun. 23:40:21 since type is -the- metaclass. :D 23:40:25 property(None, self.__setattr__, self.__delattr__)? 23:40:34 Makes it read-only. 23:40:44 What's the property function do? 23:40:44 there's no get function for it to use. 23:40:46 er... 23:40:49 write-only :P 23:40:54 Now what's Python have that's like Haskell's "let" or "where"? 23:41:15 oh, i get it 23:41:21 it does some crazy magic stuff to alter the get, set, and delete functions of only one attribute. 23:41:35 ihope, variables are local scope by default. 23:41:51 Python has only one, rarely used, scope declaration... "global". 23:42:09 Oh, right, Python lets you assign things to variables. 23:42:22 Now, uh, hmm... 23:42:24 but they're probably going to add a "nonlocal"... for nested scopes. (Python has a pretty simple idea of nested scopes... it just has "globals" and "locals"...) 23:42:46 ~exec self.raw("PRIVMSG #esoteric :Foo"); self.raw("PRIVMSG #esoteric :Foo") 23:42:46 Foo 23:42:47 Foo 23:42:51 Wonderful. 23:43:08 * ihope pushes #esoteric onto the stack and runs to eat dinner 23:44:06 * CakeProphet ...knows entirely too much about Python. 23:44:18 I should find something else to tinker with. 23:44:28 ...and I though I had to do some low level stuff for bsmnt_bot 23:45:03 The trace function was quite nice I though ;) 23:45:53 ...the lowest level thing I've ever done with Python is.... select. 23:46:35 you mean with sockets? 23:46:43 Yeah. 23:46:53 threads > select 23:46:54 it's the most basic thing I could think of that I've used. 23:46:54 i made a cool bf :) 23:47:14 CakeProphet: That class generator was pretty low level 23:47:37 heh... that depends on your definition of low level. 23:47:59 using a class's __ functions is low level python 23:48:19 I thought it was fairly abstract... (anything that creates abstract plans for objects is pretty damn high in abstractiness) 23:48:39 meh... just some interpreter magic... __ methods are pretty common in Python programs. 23:48:45 the __ variables are very close to the interpreter 23:48:50 hence, low level 23:49:33 Nah, it's not really abstract until it borrows terms from category theory :) 23:49:46 they're glorified callback functions basically... 23:49:58 CakeProphet: they are low level 23:50:34 heh... I won't debate the existence of a non-specific, human invented definition. 23:51:08 low-level doesn't exist... 23:51:16 heh 23:51:16 it does... in the sense that there is such a thing as year. 23:51:29 and that things like months can exist. 23:51:33 but basically it's nothing. 23:53:20 hmm... I've taken a liking to using Python sets... 23:53:38 they're extremly useful for my MUD... where I don't want accidental duplicate references of objects appearing. 23:56:59 ~exec self.test = SysWrapper(IRCFileWrapper(self.raw, "#esoteric"), IRCFileWrapper(self.raw, "#esoteric")) 23:57:10 ~exec self.test.stdout("foo") 23:57:10 foo 23:57:16 ~exec self.test.stdout.write("foo") 23:57:17 foo 23:57:24 __call__ is great 23:57:52 ~exec sys.stdout = self.test.stdout 23:57:56 ~exec print "foo" 23:58:02 argh 23:58:40 most of the special methods are great. :D 23:58:56 __setitem__, __getitem__, __contains__... you can make just about anything. 23:59:26 CakeProphet("foo") 23:59:43 I've got the design for a periodic table of elements somewhere. 23:59:47 the information isn't filled in yet... 2007-01-11: 00:00:03 but it works like supped up dictionary. 00:02:25 oh boy, suped up dictionary... 00:02:44 Just a dictionary of dictionarys would be good 00:03:31 {"K":{"full-name":"pottassium", valence:whatever...}...} 00:04:00 taste: AAAARGGHHHH 00:04:19 "spelling":"incorrect" 00:05:27 it is basically... 00:05:47 ~exec sys.stdout(sys) 00:05:48 00:05:52 it's 5 or 6 dictionaries of a bunch of objects. 00:06:07 objects have the advantage of having methods as well as data. ;) 00:06:18 ~exec sys.stdout(sys.__dict__) 00:06:18 {'_SysWrapper__sys': , 'stderr': <__main__.IRCFileWrapper instance at 0xb7bda7cc>, 'stdout': <__main__.IRCFileWrapper instance at 0xb7bda76c>} 00:06:29 hmph 00:06:30 and the 5 or 6 dictionaries are just optimization for some common ways to refer to elements. 00:06:34 ~exec sys.stdout(sys.sys.__dict__) 00:06:47 ~exec sys.stdout(sys._SysWrapper__sys.__dict__) 00:06:48 -!- bsmnt_bot has quit (Excess Flood). 00:06:50 -!- bsmnt_bot has joined. 00:06:52 argh 00:07:05 I need to put flood protection in IRCFileWrapper 00:07:06 CakeProphet: I still don't exactly see the point of objects when methods are really just functions on them. Then again, in Python, objects' methods are really just functions on them, so... 00:07:21 ~exec raw(self,"PRIVMSG #esoteric :Foo") 00:07:29 Fun. 00:07:34 eh... self-containedness... there's no functional benefit... it just makes organizing everything easier. 00:07:40 when everything's in a scope of some sort. 00:07:48 Well, yeah. 00:08:13 Of course, some things *do* have points. 00:08:26 I'm still waiting for my language where programs are first-order logic theories. 00:09:04 Call it a FOLTE, for First Order Logic Theory Evaluator. And pronounce it "faulty". 00:09:19 ~exec IRCbot.raw(self, "PRIVMSG #esoteric :foo") 00:09:20 foo 00:09:25 ^^ ihope 00:09:27 Gasp! 00:09:37 Wonderful. 00:09:43 I'm going with interesting data types as my main theme for any sort of language-inventing 00:09:48 at the moment. 00:10:09 ~exec self.esoteric("asdf") 00:10:18 gasp 00:10:32 and with some new ways to treat procedures as data. 00:10:38 * bsmntbombdood wonders how to implement flood protection 00:10:40 like the "ring" concept. 00:10:42 You oughta save at least some state, bsmnt. 00:10:50 bombdood. 00:12:12 * CakeProphet remember his first encounter with programming. 00:12:42 pure imperitive... global-variables-for-state-and-conditional-mechanisms hacking 00:12:59 it was like building some weird ass clock.. 00:13:27 ihope: like what? 00:13:30 ~quit 00:13:31 -!- bsmnt_bot has quit. 00:13:33 -!- bsmnt_bot has joined. 00:13:41 ~exec print >> sys.stdout, sys 00:13:42 00:13:46 ~exec new_bot = IRCbot({"HOST": "blue", "PORT": 6667, "NICK": "AlsoBot", "IDENT": "bsmnt", "REALNAME": "not applicable", "CHAN": "#esoteric", "VERBOSE": True}); new_bot.listen() 00:13:48 ~exec print >> sys.stdout, "a" * 400 00:13:57 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00:13:58 bsmntbombdood: well, you could have the thing not actually disappear when it disconnects. 00:14:01 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00:14:07 Hmm. 00:14:08 bsmntbombdood, make a wrapper class for whatever you print in and make it keep track of when smth was said last... 00:14:21 ~exec new_bot = IRCbot({"HOST": "irc.freenode.net", "PORT": 6667, "NICK": "AlsoBot", "IDENT": "bsmnt", "REALNAME": "not applicable", "CHAN": "#esoteric", "VERBOSE": True}); new_bot.listen() 00:14:37 Huh 00:14:53 now IRCFileWrapper splits it up into 300 byte chunks 00:15:00 ~exec new_bot = IRCbot({"HOST": "85.188.1.26", "PORT": 6667, "NICK": "AlsoBot", "IDENT": "bsmnt", "REALNAME": "not applicable", "CHAN": "#esoteric", "VERBOSE": True}); new_bot.listen() 00:15:03 -!- AlsoBot has joined. 00:15:04 ihope: I haven't gotten dns working inside the chroot 00:15:06 :) 00:15:08 Wonderful. 00:15:14 bsmntbombdood: ah. 00:15:26 So, there's a, uh... hmm. 00:15:36 ~raw "PRIVMSG #esoteric :Foo" 00:15:52 ~exec self.raw("PRIVMSG #esoteric :Foo") 00:15:52 Foo 00:15:52 Foo 00:15:53 ~raw PRIVMSG #esoteric :foo 00:15:54 foo 00:15:54 foo 00:15:58 Yay. 00:15:59 huh 00:16:01 *heh 00:16:22 ~exec print >> sys.stdout, new_bot 00:16:26 argh 00:16:44 ~exec new_bot.COMMAND_CHAR = r"@" 00:16:51 @raw PRIVMSG #esoteric :Foo 00:16:55 no 00:17:15 you borked it 00:17:19 I did? 00:17:23 That's nice. 00:17:27 ~quit 00:17:35 Uh, yeah. 00:17:39 there's no references to new_bot 00:17:43 ~exec self.disconnect() 00:17:48 ~quit 00:17:48 -!- AlsoBot has quit (Remote closed the connection). 00:17:48 -!- bsmnt_bot has quit (Client Quit). 00:17:51 -!- bsmnt_bot has joined. 00:17:52 I can't figure this out, can I? 00:18:13 ~exec self.new_bot = IRCbot({"HOST": "85.188.1.26", "PORT": 6667, "NICK": "AlsoBot", "IDENT": "bsmnt", "REALNAME": "not applicable", "CHAN": "#esoteric", "VERBOSE": True}); self.new_bot.listen() 00:18:17 there 00:18:20 -!- AlsoBot has joined. 00:18:25 Ah, better, yes. 00:18:34 ~exec self.new_bot.COMMAND_CHAR = r"@" 00:18:41 @raw PRIVMSG #esoteric :Foo 00:18:43 won't work 00:18:47 I see. 00:19:07 self.COMMAND_CHAR only matters during __init__ 00:19:13 Oh. 00:19:43 That gives me an idea. 00:19:54 ~exec self.disconnect("") 00:19:55 -!- bsmnt_bot has quit (Client Quit). 00:19:55 -!- AlsoBot has quit (Client Quit). 00:19:56 ~exec print >> sys.stdout, self.COMMAND_CHAR 00:19:57 -!- bsmnt_bot has joined. 00:20:02 ~exec print >> sys.stdout, self.COMMAND_CHAR 00:20:02 ~ 00:20:16 ~exec self.__init__(args) 00:20:26 whoa 00:20:27 -!- bsmnt_bot has quit (Remote closed the connection). 00:20:28 ~raw PRIVMSG #esoteric :Foo 00:20:29 -!- bsmnt_bot has joined. 00:20:32 BUGGAGE 00:20:33 Uh, hmm. 00:20:38 Did you kill it? 00:20:41 no 00:20:54 I'll have to do it faster, then :-P 00:20:55 we got some weird exception on the real stderr 00:21:04 ~exec self.__init__(args) 00:21:05 ~raw PRIVMSG #esoteric :Foo 00:21:06 -!- bsmnt_bot has quit (Remote closed the connection). 00:21:08 -!- bsmnt_bot has joined. 00:21:11 Clearly not working. 00:21:31 what are you trying to do? 00:21:35 you can't call __init__ on a class that's already inited 00:21:43 you can... it's just.. 00:21:47 without breakage 00:21:49 not something you'd usually want to do. 00:22:14 ~exec sys.stdout(self.__init__) 00:22:15 > 00:22:39 ~exec IRCbot.__init__ 00:22:48 ...Right. 00:22:49 ~exec IRCbot.__init__() 00:23:03 why are you calling init anyways? 00:23:03 Fun. 00:23:05 ~exec IRCbot.__init__(self, args) 00:23:08 Oh, because. 00:23:09 -!- bsmnt_bot has quit (Remote closed the connection). 00:23:11 -!- bsmnt_bot has joined. 00:23:17 ValueError: list.remove(x): x not in list 00:23:19 ???? 00:23:23 ~exec IRCbot.__init__(args, self) 00:23:37 ~exec IRCbot.__init__(self, self) 00:23:47 self probably isn't defined. 00:23:53 it is 00:24:07 ~exec def IRCbot.__getitem__: return 3 00:24:08 ~exec sys.stdout(self) 00:24:11 oh... well then that just does the same thing as self.__init__() 00:24:12 <__main__.IRCbot instance at 0xb7c5a42c> 00:24:14 ~exec IRCbot.__init__(self, self) 00:24:23 ihope, Can't define methods like that. 00:24:24 Erm, wait... 00:24:30 wtf are you doing 00:24:40 bsmntbombdood: playing? 00:24:45 def 00:24:54 IRCbot.__getitem__ is an expression. 00:24:55 ihope: ...continue 00:25:05 CakeProphet: I see. 00:25:12 using the . operator... so it's not a valid "identifier"... plus it's just plain weird. :P 00:25:25 ~exec IRCbot = 3 00:25:28 It would be nice if python could do that like ruby 00:25:31 def myFunc(blah, blah): blah blah blah 00:25:37 ~raw PRIVMSG #esoteric :Foo 00:25:41 IRCbot.__getitem__ = myFunc 00:25:44 Did I break it? 00:25:50 not yet 00:26:05 you can't make any more IRCbot s, though 00:26:06 ~exec self.raw("PRIVMSG #esoteric :Foo") 00:26:06 Foo 00:26:11 Hmm. 00:26:21 bsmntbombdood, it doesn't... because that's not consistent with pretty much anything else.... and it's kind of tacky. 00:26:22 ~exec self = 3 00:26:27 Woot! 00:26:29 now it's broken 00:26:33 ~exec self.raw("PRIVMSG #esoteric :Foo") 00:26:33 I think 00:26:34 Foo 00:26:36 or no 00:26:37 t 00:26:47 ~exec sys.stdout(self) 00:26:47 ~exec del IRCbot 00:26:47 <__main__.IRCbot instance at 0xb7c5a42c> 00:26:52 weird 00:26:59 ~exec self.disconnect("pero ya eres todo un hombre pa la guerra y pa matar") 00:26:59 -!- bsmnt_bot has quit (Client Quit). 00:27:02 -!- bsmnt_bot has joined. 00:27:05 Yay!... no. 00:27:12 oh right, self is passed by value 00:27:17 bsmntbombdood, how does the bot handle the scope of subprocesses? 00:27:31 if you just make the dict on the fly in the exec statement... it won't preserve the dict beyond the exec. 00:27:45 in the (globals(), locals()) of IRCbot.do_exec 00:28:17 assign it to an attribute of the bot object 00:28:27 * CakeProphet would make a private dictionary for subprocesses... and then update the main one or something when the subprocess is done executing. 00:28:32 to prevent weird race conditions and stuff. 00:28:47 ~exec self.self = 3 00:28:57 Did it work or something?... no, probably didn't. 00:29:03 ~raw PRIVMSG #esoteric :Foo 00:29:12 CakeProphet: having one sepperate global dictionary for all ~execs might be good 00:29:14 Well, ~raw isn't working, at least. 00:29:25 ~exec self.raw("PRIVMSG #esoteric :Foo") 00:29:26 Foo 00:29:30 ihope: you don't match the ~raw regex 00:29:36 Oh. 00:29:39 ~exec die 00:29:42 if ~exec re-assigns self each time... that's why. 00:29:47 ~exec self.disconnect = 3 00:29:58 ~quit 00:30:02 ~exec self.do_kill = 3 00:30:14 ~exec self.do_exec = 3; self.exec = 3 00:30:17 it probably does... 00:30:28 now it's broken 00:30:34 considering do_exec is called with do_exec.im_self passed to the first parameter. 00:30:34 ~exec foo 00:30:43 each time it's called. 00:30:56 so reassigning self does little to nothing but alter that function calls local scope. 00:30:58 huh? 00:31:00 ~exec self.exec_execer = 3 00:31:07 ~exec foo 00:31:12 there you go 00:31:25 Yay! 00:31:34 now it's broken 00:31:39 ~exec self.raw("foo") 00:31:44 Yep. 00:31:57 !exec sys.stdout.write(dir(locals())) 00:31:58 only way to kill it now is ^C on the console 00:32:01 Huh? 00:32:09 ~exec sys.stdout.write(dir(locals())) 00:32:13 -!- bsmnt_bot has quit (Remote closed the connection). 00:32:16 -!- bsmnt_bot has joined. 00:32:19 ~exec sys.stdout.write(dir(locals())) 00:32:20 ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__seti 00:32:20 tem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] 00:32:31 you don't want dir 00:32:32 sweet... plenty of stuff to tinker with. 00:32:32 I'm guessing what CakeProphet did didn't kill it. 00:32:55 oh... erm.. yeah 00:32:57 How do I list all the files in /? >:-) 00:33:04 ~exec sys.stdout.write(locals()) 00:33:05 {'message': ':CakeProphet!n=CakeProp@h146.231.213.151.ip.alltel.net PRIVMSG #esoteric :~exec sys.stdout.write(locals())', 'r': <_sre.SRE_Match object at 0xb7c95b18>, 'command': 'sys.stdout.write(locals())', 'self': <__main__.IRCbot instance at 0xb7c3542c>} 00:33:05 os.listdir("/") 00:33:23 hmmm... 00:33:36 ~exec sys.stdout.write(os.listdir("/")) 00:33:36 ['bin', 'bot', 'etc', 'lib', 'usr'] 00:33:39 so wait... I have access to the source code of my exec in the exec itself? 00:33:40 Hmm. 00:33:44 ~exec sys.stdout.write(os.listdir("/bot")) 00:33:45 ['betterbot.py', 'start.sh', 'better.sh', 'ircbot.py'] 00:33:49 ~exec sys.stdout.write(os.listdir("/bin")) 00:33:50 ['bash'] 00:33:51 CakeProphet: yeah 00:33:58 ~exec sys.stdout.write(os.listdir("/etc")) 00:33:59 ['hosts', 'passwd', 'resolv.conf'] 00:34:05 ~exec sys.stdout.write(command) 00:34:06 sys.stdout.write(command) 00:34:09 quine 00:34:14 Ooh! Let's change... wait, is passwd... what is it? 00:34:23 Oh well. 00:34:30 ~exec sys.stdout.write(os.listdir("/lib")) 00:34:30 ['libm.so.6', 'libreadline.so.5', 'libdl-2.4.so', 'libresolv.so.2', 'libutil.so.1', 'libncurses.so.5', 'libcrypt.so.1', 'ld-linux.so.2', 'libdl.so.2', 'libpthread.so.0', 'libpam_misc.so.0', 'libpam.so.0', 'libc.so.6'] 00:34:33 ~exec sys.stdout(open("/etc/passwd").read()) 00:34:34 root:x:0:0:root::/bin/bash 00:34:34 bsmnt_bot:x:1343:1343:::/bin/bash 00:34:36 ~exec sys.stdout.write(dir(self)) 00:34:36 ['COMMAND_CHAR', 'THREADING', '__doc__', '__init__', '__module__', 'chan', 'commands_running', 'commands_running_lock', 'connect', 'connected', 'disconnect', 'do_callbacks', 'do_ctcp', 'do_exec', 'do_kill', 'do_ps', 'do_quit', 'do_raw', 'errorchan', 'exec_execer', 'get_message', 'host', 'ident', 'li 00:34:37 sten', 'message_re', 'nick', 'pong', 'port', 'print_callbacks', 'raw', 'raw_regex_queue', 'readbuffer', 'realname', 'register_raw', 'socket', 'sockfile', 'verbose'] 00:34:38 ~exec sys.stdout.write(os.listdir("/usr")) 00:34:38 ['bin', 'lib', 'include'] 00:34:56 All so very confusing, I'm sure. 00:34:59 ~exec sys.stdout.write(os.listdir("~")) 00:35:17 ~exec sys.stdout.write(os.exec("/bin/bash")) 00:35:30 I see, maybe. 00:35:42 If you want a bash prompt, you are gonna have to wrap in in some sockets 00:35:45 Did that say syntax error? 00:35:53 yeah, exec is a statement 00:36:20 ~exec sys.stdout.write(self.__doc__) 00:36:20 None 00:36:25 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00:36:30 Lousy documentation :P 00:36:31 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00:36:34 yep 00:37:02 ~exec sys.stdout.write(self.socket) 00:37:02 00:37:16 i'd be ready now if i knew wtf Tory is 00:37:21 but i can't find it anywhere 00:37:23 ~exec sys.stdout.write(self.chan) 00:37:23 #esoteric 00:37:39 self.chan is kinda useless 00:37:44 ~exec sys.stdout.write(self.THREADING) 00:37:44 True 00:37:48 ~exec sys.stdout.write(self.chan**2) 00:38:03 does someone know it? 00:38:03 ~exec sys.stdout.write(dir(self.__class__)) 00:38:04 ['__doc__', '__init__', '__module__', 'connect', 'disconnect', 'do_callbacks', 'do_ctcp', 'do_exec', 'do_kill', 'do_ps', 'do_quit', 'do_raw', 'exec_execer', 'get_message', 'listen', 'pong', 'print_callbacks', 'raw', 'register_raw'] 00:38:23 ~exec sys.stdout.write(self.chan*2) 00:38:23 #esoteric#esoteric 00:38:34 ~exec sys.stdout.write(self.chan-"#") 00:38:46 oklofok: your errors go to #bsmnt_bot_errors 00:38:57 < bsmnt_bot> TypeError: unsupported operand type(s) for -: 'str' and 'str' 00:39:07 ~exec sys.stdout.write(dir(sys)) 00:39:07 ['_SysWrapper__sys', '__doc__', '__getattr__', '__init__', '__module__', 'stderr', 'stdout'] 00:39:26 ~exec sys.stdout.write(dir(sys.stdout)) 00:39:27 ['__call__', '__doc__', '__init__', '__module__', 'channel', 'raw', 'write'] 00:39:52 ~exec sys.stdout.write(dir(sys.__sys)) 00:40:08 AttributeError: 'module' object has no attribute '__sys' 00:40:14 oklofok: http://web.archive.org/web/20051218132142/http://chimpen.com/tory/ 00:41:19 ~exec raise "foo" 00:41:26 ~exec sys.stdout.write(globals()) 00:41:26 {'IRCbot': , 'args': {'IDENT': 'bsmnt', 'REALNAME': 'bsmntbombdood bot', 'CHAN': '#esoteric', 'NICK': 'bsmnt_bot', 'HOST': '85.188.1.26', 'PORT': 6667, 'VERBOSE': True}, '__builtins__': , '__file__': '/bot/ircbot.py', 'inspect': < 00:41:26 module 'inspect' from '/usr/lib/python2.4/inspect.pyc'>, 'IRCFileWrapper': , 'sys': , 'thread_info': , '__name__': '__main__', 'exec_global_tracer': , 00:41:28 'copy': , 'socket': , 'thread': , 'traceback': , 'os': , 'ppri 00:41:31 ... 00:41:32 nt': , 'bot': <__main__.IRCbot instance at 0xb7c3542c>, 're': , 'time': , 'threading': ng.pyc'>, 'SysWrapper': , 'exec_local_tracer': , '__doc__': None} 00:41:45 yay, no excess flood 00:42:03 * CakeProphet loves introspection. 00:42:58 now it just needs random quotes... and support for persistence. 00:43:10 CakeProphet: code it 00:43:42 http://bsmntbombdood.mooo.com/chroot_ircbot.py 00:43:45 ~exec globals()["random"] = __import__("random") 00:44:38 ~exec self.__class__.dice = lambda : random.randint(1,6) 00:44:59 ~exec sys.stdout.write(self.dice() 00:45:02 ~exec sys.stdout.write(self.dice()) 00:45:21 CakeProphet: #bsmnt_bot_errors 00:45:30 ~exec globals()["random"] = __import__("random") 00:45:36 ~exec self.__class__.dice = lambda : random.randint(1,6) 00:45:45 ~exec sys.stdout(random) 00:45:54 odd 00:46:20 oh, right 00:46:22 ~quit 00:46:22 -!- bsmnt_bot has quit. 00:46:25 -!- bsmnt_bot has joined. 00:46:30 ~exec globals()["random"] = __import__("random") 00:46:34 ~exec sys.stdout(random) 00:46:35 00:47:06 there 00:47:13 I was making a copy.copy for some reason 00:47:50 you wanted to make sure exec didn't effect globals? 00:47:58 by the way... dictionaries have a copy method. 00:48:06 ..so... you didn't really need to use the copy module. 00:48:10 ok 00:48:11 ~exec globals()["random"] = __import__("random") 00:48:16 ~exec self.__class__.dice = lambda : random.randint(1,6) 00:48:21 ~exec sys.stdout.write(self.dice()) 00:48:33 self.__class__.dice? 00:48:43 it would have it simply from inheritance. 00:48:49 That would force you to reinstanciate the bot 00:48:53 nope. 00:48:57 ~exec globals()["random"] = __import__("random") 00:49:05 ~exec self.__class__.dice = lambda self : random.randint(1,6) 00:49:10 ~exec sys.stdout.write(self.dice()) 00:49:10 5 00:49:33 method resolution is dynamic... if the class has it... the instance gets it to. 00:49:45 you would only need to re-init the bot if you did an entire class statement. 00:49:47 orly? 00:49:57 as then you would be creating an entirely new class... instead of modifying the old one... 00:49:59 rly 00:50:37 heh... meta-programming is scary shit... 00:50:46 what's that? 00:50:49 it's probably the part of Python I'm most familiar with. 00:50:55 programming things that program. 00:51:16 basically all of that was... sorta kinda... basic "meta-programming" 00:51:41 I created a program that re-programmed your class. 00:51:47 basic example... but that's the core of it. 00:52:28 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~dice", lambda x,y: self.raw("PRIVMSG %s :%s" % (y.group(1), random.randint(1,6))) 00:52:37 ~dice 00:52:42 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~dice", lambda x,y: self.raw("PRIVMSG %s :%s" % (y.group(1), random.randint(1,6)))) 00:52:46 ~dice 00:52:46 -!- bsmnt_bot has quit (Remote closed the connection). 00:52:48 -!- bsmnt_bot has joined. 00:52:53 argh 00:53:02 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~dice", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), random.randint(1,6)))) 00:53:05 ~dice 00:53:06 -!- bsmnt_bot has quit (Remote closed the connection). 00:53:08 -!- bsmnt_bot has joined. 00:53:11 why group? 00:53:13 argh 00:53:16 there's nothing to group. 00:53:21 ~exec globals()["random"] = __import__("random") 00:53:23 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~dice", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group(1), random.randint(1,6)))) 00:53:26 CakeProphet: ? 00:53:29 oh. 00:53:31 nevermind,. 00:53:35 group is a regex match object method 00:53:40 yah yah 00:53:45 ~dice 00:53:45 it's the channel... nevermind. 00:53:45 1 00:53:52 ~dice 00:53:52 3 00:54:01 * CakeProphet has, funnily enough, a dice library. 00:54:26 with some weird callback stuff for constructing tabletop style dice functions. 00:54:41 that I made. 00:54:49 ok i have to go 00:55:03 * CakeProphet gets to work on that pickling stuff. 00:55:06 have fun. 00:55:54 ~exec insert 00:56:01 Hmm. 00:56:07 k made a new language instead of looking for Tory 00:56:14 and i'm sure mine is better too 00:56:30 hmm... you can't pickle functions though.... unless you save their source code. 00:56:49 but... I could go ultra-fancy and use some insane abuse of the pickle protcol to make it save functions. 00:56:50 oklofok: http://web.archive.org/web/20051218132142/http://chimpen.com/tory/ 00:56:59 I've done it before. 00:57:08 oerjan, too late :( 00:57:18 Why? :) 01:00:55 i made my own brainfuck in it's place 01:00:59 to get to 50 01:01:11 and mine has sence to it :) 01:01:41 made 3 languages today \o/ 01:02:37 maybe i'll make 50 improvised languages tomorrow, sounds like a good use of time 01:04:32 -!- oklofok has changed nick to oklopol. 01:05:47 hmm... I should work on Stue some more. 01:06:09 Stue? 01:06:13 Is that like Thue at all? 01:06:21 Dunno. 01:06:25 * CakeProphet isn't familiar with Thue 01:06:33 Stue is a "stack of queues" language. 01:06:34 that I made. 01:06:45 It is extremely unlike Thue. :) 01:07:14 The only thing in common is that they may be considered Norwegian words. 01:07:23 Hello World --> !m?spam?"Hello, World!\n"^ 01:07:45 with a semicolon at the end 01:07:54 !m?spam?"Hello, World!\n"^; 01:07:57 Huh? 01:08:36 print 2 + 2 --> !m22+^)?spam?^; 01:08:38 so... how do i sleep now that i slept 5 hours during the day and drank a litre of coke just now? 01:09:11 I wrote the entire specification on the esolang wiki... but then I forgot to save it. 01:09:16 and I'm entirely too lazy to type it out again. 01:09:19 in a way that makes sense. 01:09:51 i can't tell how it works from that :'( 01:10:29 yeah... it's a bit... 01:10:48 that's always a good thing 01:10:56 ... 01:11:16 you use stact notation, spam is print, ^ has something to do with pushing? 01:11:19 *stack 01:11:28 kinda sorta 01:11:34 gooda 01:11:39 )? 01:11:46 sorry, ')'? 01:11:54 it appears stack-based... but then you'll notice the order in which you push things seems to change sporatically... 01:12:21 everything is pushed except for commands... and ^ is the call command :D 01:12:43 yeah, i figured that a second before you said that 01:12:49 but, doesn't help 01:13:01 it reads everything character by character... unless it's surrounded by ?'s or quotes. 01:13:47 okay, now it's pretty clear, but ) and !m 01:13:54 poh 01:13:55 oh 01:13:57 i know !m 01:14:09 quoted stuff always being considered strings... and ?'s just denoting a multicharacter version of anything you would push as a single character. 01:14:29 By default, if the interpreter has no clue what the hell you're trying to push... it just becomes a string. 01:14:52 !m is the beginning of a subroutine defintion. :D 01:14:54 Huh? 01:15:03 the main one... to be exact. 01:15:16 yeah, i can exec !m22+^)"spam"^; as well? 01:15:28 hmmm... 01:15:31 yeah, i figured the !, 01:15:32 can't actually remember. 01:15:33 !m 01:15:36 Huh? 01:15:48 okay, doesn't matter, the ) anyway, what is it? 01:15:50 I indeded for that to be possible... but I forgot if it actualyl does it. 01:15:57 hehe :D 01:16:03 That... pushes a new queue onto the stack. 01:16:09 okay 01:16:22 hmm... why? 01:16:27 ...oh wait.. 01:16:35 would !m22+^?spam?^; work? 01:16:52 !m+22^)?spam?^; 01:16:54 Huh? 01:16:56 nopw. 01:17:28 +22^?spam?^ wouldn't work because we're pushing values to a queue. 01:17:34 or is it !m?spam?+22^^; without the new queue? 01:17:38 eh 01:17:50 okay 01:18:01 the ^ would call +... which would add 2 and 2... and then it would call 4. 01:18:15 not knowing how the hell you can call a 4... it proceeds to explode. 01:19:02 it's a very very weird way to think... 01:19:09 totally unintuitive. 01:19:16 cool 01:19:41 the print, does it pop a queue and take values from there=? 01:19:50 the syntax will oscillate between being stack-like and queue-like depending on where you're at. 01:20:06 it pops the value off the top queue. 01:20:11 just one. 01:20:17 !m+22^)?spam?^; here you make 2 queues? 01:20:20 Huh? 01:20:40 you would use % to call ?spam? on everything in the top queue (% is the for-each command) 01:20:41 yeah. 01:21:12 when a queue is depeleted of all values... and something attempts to pop off another value... it junks that queue and pops one off the queue below it. 01:21:24 ah okay 01:21:28 which is why that ?spam? call works. 01:21:42 but, why can't the param be in the same queue? 01:21:53 like in the hello, world 01:22:00 because of the order of evaluation. :D 01:22:11 you had to set up + 2 2 into the queue to call that correctly... 01:22:23 but... there's no way to fit in a ?spam? function -in front- of all of that... 01:22:52 you have to make a new queue... plop ?spam? in that queue... and do a call from there... making it look kinda stack-based. 01:23:05 but with the Hello, World! it looks like prefix notation. :D 01:23:06 ah okay, but here !m?spam?"Hello, World!\n" you first push the "spame", then the "hw", then because it's a FIFO, ^ reads the "spam", spam read "hw", right? 01:23:20 yup 01:23:42 I haven't cabbled much with multiple subroutines yet. 01:23:46 but they all share the same scope. 01:23:51 like most stack-based languages. 01:24:30 hmm... some o ther commands... 01:24:32 coroutines here too? 01:24:37 Nope. 01:24:45 yeah, wouldn't work that well 01:24:53 because of the stack nature 01:24:55 Not sure how it would work... since there's nothing you could return. 01:25:08 you could return normally 01:25:12 by pushing 01:25:15 they're "procedures" more than they are "subroutines". 01:25:18 but there wouldn't be much use 01:25:31 in the world of Stue... I call them ops. 01:25:39 because inventing vocabulary words is fun. 01:25:49 yeah :) 01:25:57 i made a bf for networking 01:26:42 hmmm... . is the "pop an integer off the stack... and push the integer-th value of the queue onto the queue" command. 01:27:11 and i made a 3D bf with the IP being a SPACESHIP (now that's REAL COOL, right?), then i made a lang called metafuck, where you can execute the memory with it's own nulled memory 01:27:13 yay! 01:27:31 is that a question? 01:27:43 no 01:27:47 the . is just hard to see 01:27:54 haha... that sounds awesome. 01:28:07 what? 01:28:11 / which? 01:28:12 @ is the same thing as . but at the stack level... pop an integer off the queue, and get the integer-th queue and push it to the top of the stack. 01:28:15 the spaceship BF 01:28:36 okay, i like the network-thingie best, but you don't know just how sick it is. 01:28:38 :) 01:28:52 @ and . are the only ways I've found to do conditionals so far... because the comparison operations all return either 1 or 0. 01:29:23 you can use the 1 or 0 to conditionally "flip" between the top two queue... or the top two values on the top queue. 01:29:48 yeah, or any two values 01:29:58 *queues or stack indexes 01:30:01 not values 01:30:10 *stack entrys, not indexes 01:30:24 hmm... other than that... there's some debugging command that just prints out the entire Stue... 01:30:32 can't remember what character it was. 01:30:36 * CakeProphet checks his interpreter. 01:31:10 queue number A on cond, B otherwise -> cond*(A-B)+B @ 01:31:16 but, prefic 01:31:17 *x 01:31:42 +*?cond?-ABB@ right? 01:31:44 hmm... 01:31:58 ~ is the PRINTSTEW command... yup. 01:32:16 printstew? 01:32:26 and crap between # are comments (allowed inline) 01:32:32 the debugging command. 01:32:42 it literally just prints out the entire data structure as Python would see it. 01:33:01 okay 01:33:21 python has a lovely way to print tuples, lists etc 01:33:45 [blah, blah, (blah, blah, blah), blah] 01:33:53 How do other languages do it? 01:33:56 or can they do it at all? 01:34:14 Interestingly Haskell has the exact same syntax for lists and strings 01:34:19 i mean tuples 01:34:20 yeah 01:34:36 Haskell's is nice too but i don't know it that well 01:34:43 does Haskell have hash tables? 01:34:51 lists look the same too, or? 01:35:12 Not standard, no. They are difficult to mix with its pure functionality. 01:35:24 heh... yeah 01:35:28 a language without variables... 01:35:33 The Data.Map library uses binary trees. 01:35:36 makes it difficult to use a hash table effectively. 01:36:21 i wanna learn Haskell better :\ 01:36:30 it's like the coolest language :D 01:36:49 Lua looks pretty interesting. 01:37:12 Like Lisp with hash tables instead of lists. 01:37:22 and Python-esque syntax. 01:41:18 BTW there are a couple of libraries providing variables in Haskell. All encapsulated in the infamous monads, of course. 01:42:32 Lisp always has hash tables. 01:43:05 Both Scheme and CL. 01:43:07 no no I meant. 01:43:17 what Lisp does with lists... Lua does with hash tables. 01:43:25 Eww. 01:43:30 :P 01:44:00 Hash tables are much more costly/processor-unfriendly than a linked list is unless you have many data entries that need to be specifically retreived. 01:44:33 That actually is pretty cool. Just too bad it's so much less efficient to use dictionaries for everything. 01:44:52 CakeProphet: You do know how C implements hash tables right? 01:45:02 Nope 01:45:14 Go and learn about what a hash table really is. 01:45:25 I only vageuly know how it works. 01:45:31 An array of pointers to linked lists, I believe. 01:45:38 No no. 01:45:42 I know it associates the key to a "hash value"... but -how- it does all this linkage is beyond me. 01:45:47 CakeProphet: Math. 01:46:00 Using a set of bit-transforms upon the hash value to produce an array index. 01:46:07 + a bit extra info. 01:46:23 or possibly pointers to binary trees, I guess. 01:46:45 Of course, there's always a chance for a misrefer, which is something you're going to suffer unless you implement a ``perfect'' hash table, whose math is more involved than I'm willing to casually talk about. 01:46:49 dictionaries are fairly fast for what they do. (lookup values paired to a key) 01:47:23 If only my NN which does 2 * 10^6 iterations of lookups and loops could say the same thing :) 01:47:59 pfft... anything would start to get stressed out under those numbers. 01:48:01 I don't see how a collision-free hash table is mathematically possible. 01:48:10 oerjan: It's ... complicated. 01:48:17 Read Knuth's articles on the ``perfect'' hash table. 01:48:23 hmmm... I've never actually had a misrefer occur... 01:48:27 -!- pikhq has joined. 01:48:27 seems fairly consistent every time. 01:48:48 Those numbers perform fairly well under linked lists though CakeProphet. 01:49:20 Code isn't always about playing with 80's network protocols in a Y2K world, remember that :P 01:49:56 * CakeProphet plays entirely too much with telnet. 01:50:07 (I follow Cohen's philosophy -- hypothesize the highest load, the most iterations, the most memory lookups, the most of any stress. Make sure your program withstands that, and then it is truly a program.) 01:50:13 it's pretty annoying to work with. >.< 01:51:07 My philosophy is: make it do something... then bang it with a hammer until it can do it with 100000000000 times more shit. 01:51:27 My philosophy is simple: 01:51:38 Get the program to work, and then get it to work *well*. 01:51:42 oh.. 01:51:50 I thought you just had a blank program. 01:51:55 er.. 01:51:57 philosophy. 01:52:16 * CakeProphet dabbles with 60's network protocols... not 80's. 01:52:16 Dunno. It's very rare that I can't get something to work in a very wasteful way. 01:52:37 Let's allocate 100,000 element adjustable arrays! \o/ 01:52:59 I use most of my own "protocols" actually... which is supposed to be bad for you, but oh well. 01:53:12 it's hard to use a network protocol that only you know... at any rate. :P 01:53:13 Of course, inevitably for me the issue with "get the program to work first" is just that it turns out to be illegible as hell, not that it's really wasteful. 01:53:36 My legibiliity is alright. 01:53:49 I admit, my TRAIN generic method here needs some more comments, but, meh. 01:53:55 I've been told I make Python look like Perl... 01:53:57 I'll comment it before I submit it to the judges :P 01:54:24 Pre-rewrite BFM was a bastion of illegibility. 01:54:48 Optimization and two targets combined in *one pass of compilation*. 01:55:11 Meh. 02:32:02 CakeProphet: You might be able to pickle the code object 02:33:32 ihope: insert? 02:35:53 CakeProphet: It would be easy to just store the source code of all ~execs 02:37:44 or inspect.getsource 02:38:55 ~exec sys.stdout(__import__("inspect").getsource(self.print_callbacks)) 02:38:55 def print_callbacks(self): 02:38:56 pprint.pprint( 02:38:56 [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue]) 02:38:58 neat 02:39:55 ~exec self.f = lambda x : x+1 02:40:02 ~exec sys.stdout(__import__("inspect").getsource(self.f)) 02:40:17 damn 02:40:36 I guess that only works with code from a file 02:42:53 ~exec globals()["pprint"] = __import__("pprint") 02:43:06 ~exec pprint.pprint((1,2,3)) 02:43:13 argh 02:45:04 ~exec sys.stdout( [i[1] for i in inspect.getmembers(self.f) if i[0] == "func_code"][0] ) 02:45:04 at 0xb7cc51e0, file "", line 1> 02:45:07 neat 02:45:37 ~exec self.the_code = [i[1] for i in inspect.getmembers(self.f) if i[0] == "func_code"][0] 02:45:51 ~exec sys.stdout(self.the_code.co_code) 02:45:51 | 02:45:54 hmp 02:46:02 well there you go 02:46:10 pickle the code object 02:47:08 ~exec exec self.the_code 02:47:18 ~exec exec self.the_code(1) 02:47:32 ~exec exec self.the_code in {"x":1} 02:47:57 ~exec exec self.the_code.co_code 02:50:59 I think the best bet is to store the string of source 02:53:30 ah ha! 02:53:40 ~exec sys.stdout(the_code) 02:53:45 ~exec sys.stdout(self.the_code) 02:53:45 at 0xb7cc51e0, file "", line 1> 02:53:51 ~exec del self.f 02:53:57 ~exec sys.stdout(self.f) 02:54:45 ~exec self.f = __import__("types").FunctionType(self.the_code, globals(), "f") 02:54:58 ~exec sys.stdout(f) 02:55:03 ~exec sys.stdout(self.f) 02:55:03 02:55:09 ~exec sys.stdout(self.f(1)) 02:55:10 2 02:55:18 yay!!!! 02:55:58 so you can get the function from the code object 02:56:03 well, there you have it 02:56:13 how to pickle functions 03:12:40 * bsmntbombdood feels clever 03:17:10 -!- CakeProphet has quit (Read error: 113 (No route to host)). 03:20:27 -!- ShadowHntr has joined. 03:34:24 -!- pikhq has quit ("leaving"). 04:04:28 -!- digital_me_ has joined. 04:07:51 -!- digital_me has quit (Read error: 145 (Connection timed out)). 04:39:29 ~quit 04:39:29 -!- bsmnt_bot has quit. 04:39:32 -!- bsmnt_bot has joined. 04:39:46 ~exec self.save_callbacks(sys.stderr) 04:39:47 -!- bsmnt_bot has quit (Excess Flood). 04:39:49 -!- bsmnt_bot has joined. 04:39:54 heh 04:39:58 least I got something 04:42:28 ~quit 04:42:29 -!- bsmnt_bot has quit (Client Quit). 04:42:31 -!- bsmnt_bot has joined. 04:42:53 ~exec self.register_raw("test", lambda x : False) 04:43:13 ~exec self.save_callbacks("/bot/test.pickle") 04:44:15 ~exec sys.stdout(os.getuid()) 04:44:15 1343 04:44:38 ~exec self.save_callbacks("/bot/test.pickle") 04:45:42 ok, scratch that idea 04:46:07 TypeError: can't pickle code objects 04:47:19 :( 04:48:56 That's the saddest smiley I have seen. 04:50:59 Back to pickling command strings I presume... 04:51:07 actually, no 04:51:44 after yelling at me for wanting to pickle functions, the people in #python told me that the marshal module could do it 04:52:25 ~quit 04:52:25 -!- bsmnt_bot has quit. 04:52:27 -!- bsmnt_bot has joined. 04:52:38 ~exec self.save_callbacks("/bot/test.pickle") 04:54:14 -!- bsmnt_bot has quit (Remote closed the connection). 04:54:16 -!- bsmnt_bot has joined. 04:55:02 -!- bsmnt_bot has quit (Remote closed the connection). 04:55:04 -!- bsmnt_bot has joined. 04:55:35 -!- bsmnt_bot has quit (Remote closed the connection). 04:55:40 -!- bsmnt_bot has joined. 04:56:19 -!- bsmnt_bot has quit (Remote closed the connection). 04:56:21 -!- bsmnt_bot has joined. 04:57:16 ~quit 04:57:16 uuuh 04:57:16 ~exec self.disconnect("") 04:57:16 greaaaat 04:57:16 uuuh 04:57:16 DIE 04:57:16 ~quit 04:57:16 ... 04:57:17 -!- bsmnt_bot has quit (Client Quit). 04:57:21 -!- bsmntbombdood has quit (zelazny.freenode.net irc.freenode.net). 04:57:21 -!- bsmnt_bot has joined. 04:57:51 -!- bsmntbombdood has joined. 04:58:02 -!- bsmnt_bot has quit (Remote closed the connection). 04:58:04 -!- bsmnt_bot has joined. 04:58:25 finally 04:58:25 foo 04:58:27 ok bot is broken 04:58:35 -!- bsmntbombdood has left (?). 04:58:37 -!- bsmntbombdood has joined. 04:58:39 -!- bsmntbombdood has left (?). 04:59:15 -!- bsmntbombdood has joined. 04:59:35 ??? 05:00:20 maybe it's just laggy 05:00:29 ok 05:00:35 ~exec self.save_callbacks("/bot/test.pickle") 05:00:43 no errors... 05:00:49 ~exec self.load_callbacks("/bot/test.pickle") 05:00:55 error. 05:01:11 ~quit 05:01:12 -!- bsmnt_bot has quit (Client Quit). 05:01:14 -!- bsmnt_bot has joined. 05:01:17 ~exec self.load_callbacks("/bot/test.pickle") 05:01:23 k 05:01:38 ~exec self.register_raw("testing", lambda x : False) 05:01:44 ~exec self.save_callbacks("/bot/test.pickle") 05:02:00 oh no 05:02:18 the bork 05:02:42 ~quit 05:02:57 -!- bsmnt_bot has quit (Remote closed the connection). 05:03:00 -!- bsmnt_bot has joined. 05:04:58 -!- bsmntbom1dood has joined. 05:05:54 -!- bsmntbombdood has quit (Nick collision from services.). 05:06:22 -!- bsmnt_bot has quit (Remote closed the connection). 05:06:25 -!- bsmnt_bot has joined. 05:06:57 argh 05:07:02 foo 05:07:17 -!- bsmntbom1dood has changed nick to bsmntbombdood. 05:07:29 k 05:07:32 there's like 30 seconds lag 05:08:03 -!- digital_me_ has quit ("Lost terminal"). 05:09:40 Yeah, you are netsplitting a lot. 05:18:48 Does anyone here have some elementary signal processing knowledge? 05:19:41 Not much. 05:19:54 I'll ask anyways :D 05:20:09 Thought so :) 05:20:25 In a typical computer DSP system, does a low pass filter just perform a DFT on the time domain signal and junk the frequency points at which you cap the filter? 05:21:28 OK, I even misunderstood the subject - I somehow thought you were speaking of of Unix signals :) 05:21:39 Meh :D 05:22:18 Alas, I am completely blank on that question. 05:22:20 Sukoshi, that'd sound sensible. 05:22:44 I don't know, but... that's how i'd do it. 05:24:24 (You can say anything you're now sure about as long as you remember to leave right after it ->) 05:24:50 :DD 05:25:22 ... ;D 05:27:54 Well, wikipedia didn't seem to turn up anything specific. 05:29:04 It's not a very common let's-have-coffee-over-it topic. 05:31:01 This seems the most relevant: http://en.wikipedia.org/wiki/Lowpass_filter#Passive_digital_realization 05:32:30 Actually it is rather specific, but whether it is frequently used it doesn't say. 05:33:36 I'm not talking about a filter. 05:33:44 I'm talking about a DFT and a chop-off. 05:35:19 Also, http://en.wikipedia.org/wiki/Digital_filter 05:35:50 It mentions Fourier transforms and essentially chop-offs as well. 05:35:59 Yup. That's good :) 05:40:02 foo 05:40:06 good, less lag 05:40:12 bar 05:40:12 let's try this again 05:40:16 ~exec self.save_callbacks("/bot/test.pickle") 05:40:22 oops 05:40:28 ~exec self.register_raw("testing", lambda x : False) 05:40:31 ~exec self.save_callbacks("/bot/test.pickle") 05:40:39 ~exec self.load_callbacks("/bot/test.pickle") 05:40:55 ~exec self.print_callbacks() 05:41:00 What's that bot written in? Python I'm assuming? 05:41:02 crap 05:41:05 Sukoshi: yeah 05:41:10 Thought so. 05:41:16 well, that borks 05:41:19 -!- bsmnt_bot has quit (Remote closed the connection). 05:41:21 -!- bsmnt_bot has joined. 05:42:06 ~exec sys.stdout.write(pickle.load(open("/bot/test.pickle"))) 05:42:06 [(<_sre.SRE_Pattern object at 0xb7d15bf0>, 'c\x03\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00C\x00\x00\x00s\x1e\x00\x00\x00|\x00\x00i\x01\x00d\x01\x00|\x02\x00i\x03\x00d\x02\x00\x83\x01\x00\x16\x83\x01\x00\x01d\x00\x00S(\x03\x00\x00\x00Ns\x07\x00\x00\x00PONG %si\x01\x00\x00\x00(\x04\x00\x00\x00t\x04 05:42:07 -!- bsmnt_bot has quit (Excess Flood). 05:42:09 -!- bsmnt_bot has joined. 05:42:50 ~exec sys.stdout.write([(i[0], marshal.loads(i[1])) for i in pickle.load(open("/bot/test.pickle")))) 05:42:56 ~exec sys.stdout.write([(i[0], marshal.loads(i[1])) for i in pickle.load(open("/bot/test.pickle"))) 05:43:08 ~exec sys.stdout.write([(i[0], marshal.loads(i[1])) for i in pickle.load(open("/bot/test.pickle")])) 05:43:40 ~exec sys.stdout.write( [(i[0], marshal.loads(i[1])) for i in pickle.load(open("/bot/test.pickle")] ) 05:44:08 Ok, I must be really tired if I can't get that to work 05:44:16 bedtime 05:45:10 ~exec sys.stdout( [ (i[0], marshal.loads(i[1])) for i in pickle.load(open("/bot/test.pickle"))] ) 05:45:10 [(<_sre.SRE_Pattern object at 0xb7cdfbf0>, ), (<_sre.SRE_Pattern object at 0x80d8660>, ), (<_sre.SRE_Pattern object at 0x80d8ea0>, ), (<_sre.SRE_Pattern object at 0x80d8898>, ), (<_sre.SRE_Pattern object at 0x80cde50>, ), (<_sr 05:45:11 e "/bot/ircbot.py", line 183>), (<_sre.SRE_Pattern object at 0x8057b20>, ), (<_sre.SRE_Pattern object at 0x80d2f60>, ), (<_sre.SRE_Pattern object at 0x80cd078>, E_Pattern object at 0xb7c90320>, at 0xb7c588e0, file "", line 1>)] 05:45:17 That's what I wanted 05:45:27 ok well night 05:45:34 feel free to play around with it 05:50:52 Yay spam. 05:50:58 yay 06:06:25 ~exec self.f_code = marshal.loads(pickle.load(open("/bot/test.pickle"))[0][1]) 06:06:36 ~exec sys.stdout(self.f_code) 06:06:37 06:06:59 ~exec self.f = types.FunctionType(self.f_code, globals()) 06:07:04 ~exec sys.stdout(self.f) 06:07:05 06:08:08 ~exec self.f() 06:08:25 oooh, that's the problem 06:08:41 It doesn't know if they are methods or not 06:09:40 I wonder how to resolve this 06:12:55 -!- RodgerTheGreat has quit. 06:13:06 How to make python think it's a method 06:13:15 Put it in a class. 06:13:27 Then it gets the wrong self 06:13:37 ooh 06:15:55 methods are weird 06:16:04 if we duplicate that weirdness, we win 06:21:40 argh, looks like we need to pickle the instance too 06:21:45 ~quit 06:21:46 -!- bsmnt_bot has quit. 06:21:48 -!- bsmnt_bot has joined. 06:22:02 ~exec self.save_callbacks("/bot/test.pickle") 06:22:03 -!- bsmnt_bot has quit (Excess Flood). 06:22:05 -!- bsmnt_bot has joined. 06:23:10 ~quit 06:23:11 -!- bsmnt_bot has quit (Client Quit). 06:23:13 -!- bsmnt_bot has joined. 06:23:14 ~exec self.save_callbacks("/bot/test.pickle") 06:23:15 -!- bsmnt_bot has quit (Excess Flood). 06:23:18 -!- bsmnt_bot has joined. 06:23:22 wtf 06:23:46 ~quit 06:23:47 -!- bsmnt_bot has quit (Client Quit). 06:23:49 -!- bsmnt_bot has joined. 06:23:50 ~quit 06:23:51 -!- bsmnt_bot has quit (Client Quit). 06:23:53 -!- bsmnt_bot has joined. 06:23:55 ~exec self.save_callbacks("/bot/test.pickle") 06:23:56 -!- bsmnt_bot has quit (Excess Flood). 06:23:58 -!- bsmnt_bot has joined. 06:24:18 ~quit 06:24:19 -!- bsmnt_bot has quit (Client Quit). 06:24:21 -!- bsmnt_bot has joined. 06:24:22 ~exec self.save_callbacks("/bot/test.pickle") 06:25:49 PicklingError: Can't pickle : it's not found as __builtin__.instancemethod 06:25:59 no, stupid, it's types.MethodType 06:27:45 we will tackle this in the morning 06:41:12 -!- oerjan has quit ("Good night"). 06:58:24 -!- ShadowHntr has quit ("End of line."). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:48:58 For aspiring Lispers everywhere, here's code that automates the Trapezoidal Rule and Simpson's Rule of estimating the area under the curve between an upper-bound a lower-bound according to a curve expressesd as a function func split up into n intervals: (will paste) 08:50:37 http://paste.lisp.org/display/34869 08:50:41 Feel the power. 09:16:38 -!- ihope_ has joined. 09:29:04 -!- ihope has quit (Connection timed out). 12:07:28 -!- oklofok has joined. 12:08:15 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 12:49:36 -!- oklofok has changed nick to oklopol. 13:11:53 Sukoshi: bah. Haskell could do that in the same number of lines I suspect, or fewer. 13:12:58 You should be showing off the real powerof Lisp: macros. 14:18:59 -!- jix has joined. 14:38:22 Sukoshi: (defun interval (low-bound up-bound n) (loop for i from low-bound to up-bound by (/ (- up-bound low-bound) n) collecting i)) 14:42:55 Haskell: interval l h n = [l, l + step .. h] where step = (h - l) / n 14:43:34 * SimonRC goes 17:26:33 -!- ShadowHntr has joined. 17:36:05 -!- ShadowHntr has quit (Client Quit). 17:46:48 -!- ShadowHntr has joined. 19:19:17 -!- ShadowHntr has quit ("End of line."). 19:21:22 -!- tgwizard has joined. 20:27:05 I wonder how many people in the world are looking at the clock. 20:27:39 And I wonder how many people have claimed January 11 2007 3:23:30 PM my time to be their own personal second. 20:27:59 I'm not that greedy. I'm declaring the third tenth of it to be mine. 20:28:26 From January 11 2007 3:23:30.2 PM to January 11 2007 3:23:30.3 PM... 20:40:36 STOP HOGGING MY TIME! 20:58:51 Well, wait a minute. 20:59:05 Average lifespan divided by world population... 21:01:56 Average lifespan seems to be 66 years. 21:02:49 According to Google, we end up with 0.319188164 seconds per person. 21:03:26 Might as well round that down to 0.31415926535. 21:05:07 -!- ihope__ has joined. 21:05:35 -!- ihope__ has changed nick to ihope. 21:06:51 Of course, the wealthy will get more time. 21:15:51 -!- CakeProphet has joined. 21:17:26 so, basically you just took what's yours 21:21:07 -!- ihope_ has quit (Connection timed out). 21:57:56 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 22:01:38 -!- Sgeo has joined. 22:07:11 -!- CakeProphet_ has joined. 22:08:29 -!- CakeProphet has quit (Read error: 113 (No route to host)). 22:08:35 -!- CakeProphet_ has changed nick to CakeProphet. 22:11:45 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:57:50 -!- Sgeo has quit (Remote closed the connection). 23:24:29 -!- oerjan has joined. 23:37:11 ~exec self.save_callbacks("/bot/test.pickle") 23:37:37 #esoteric, where you can get your 0.3 seconds of fame... 23:37:57 ? 23:38:06 See the recent logs 23:40:13 ...? 23:42:56 What ihope_ said 2-3 hours ago. 23:44:10 Ircbrowse is horribly slow today, unless it's me. 23:44:13 oh 23:44:27 ~quit 23:44:27 -!- bsmnt_bot has quit. 23:44:56 -!- bsmnt_bot has joined. 23:44:58 ~exec self.save_callbacks("/bot/test.pickle") 23:45:05 yess 23:45:19 ~exec self.load_callbacks("/bot/test.pickle") 23:45:48 argh 23:45:50 ~quit 23:45:57 -!- bsmnt_bot has quit (Remote closed the connection). 23:45:59 -!- bsmnt_bot has joined. 23:46:09 ~exec self.load_callbacks("/bot/test.pickle") 23:46:36 -!- bsmnt_bot has quit (Remote closed the connection). 23:46:38 -!- bsmnt_bot has joined. 23:46:43 ~exec self.load_callbacks("/bot/test.pickle") 23:46:55 ~exec self.print_callbacks() 23:47:01 I DUN IT! 23:47:08 ~quit 23:47:09 -!- bsmnt_bot has quit (Client Quit). 23:47:11 -!- bsmnt_bot has joined. 23:47:26 ~exec self.register_raw("testing asdf", lambda x : False) 23:47:29 ~exec self.print_callbacks() 23:47:42 ~exec self.save_callbacks("/bot/test.pickle") 23:47:45 ~quit 23:47:46 -!- bsmnt_bot has quit (Client Quit). 23:47:48 -!- bsmnt_bot has joined. 23:48:16 ~exec print >> sys.stdout, self.raw_regex_queue[-1] 23:48:17 (<_sre.SRE_Pattern object at 0x80c7cd8>, at 0xb7c254c4>) 23:48:21 ~exec print >> sys.stdout, self.raw_regex_queue[-1].pattern 23:48:33 ~exec print >> sys.stdout, self.raw_regex_queue[-1][0].pattern 23:48:34 ^ERROR :Closing Link:.* 23:48:36 k 23:48:42 ~exec self.load_callbacks("/bot/test.pickle") 23:48:46 ~exec print >> sys.stdout, self.raw_regex_queue[-1][0].pattern 23:48:47 testing asdf 23:48:55 OOOOH HOO HOOO HOOOO! 23:48:59 it worked! 23:49:21 ~exec self.raw_regex_queue.pop() 23:50:02 ~exec self.register_raw(".*#esoteric.*DIE BOT DIE.*", lambda x, y : True) 23:50:17 ~exec self.save_callbacks("/bot/test.pickle") 23:50:22 ~quit 23:50:22 -!- bsmnt_bot has quit (Client Quit). 23:50:24 -!- bsmnt_bot has joined. 23:50:29 ~exec self.load_callbacks("/bot/test.pickle") 23:50:35 DIE BOT DIE 23:50:36 -!- bsmnt_bot has quit (Remote closed the connection). 23:50:37 -!- bsmnt_bot has joined. 23:50:40 WOOO HOOOO 23:50:49 I have succesfully serialized a function 23:51:16 I have successfully serialized YOUR MOM! 23:52:19 cool 23:53:56 it works! 23:58:16 * bsmntbombdood is bloody brilliant 2007-01-12: 00:02:09 brilliant I tell you! brilliant! 00:05:54 bloody he tells us! bloody! 00:06:04 bloody! 00:11:20 -!- tgwizard has quit (Remote closed the connection). 00:16:29 hmm 00:16:39 I could just pickle the whole object 00:20:14 DIE BOT DIE 00:20:29 ~exec self.load_callbacks("/bot/test.pickle") 00:20:32 now do it 00:20:39 DIE BOT DIE 00:20:39 -!- bsmnt_bot has quit (Remote closed the connection). 00:20:41 -!- bsmnt_bot has joined. 00:20:55 * oerjan feels the power 00:23:32 te he he 00:43:07 Well, it's persistant now 00:44:48 can i too? 00:44:54 yeah 00:45:05 DIE BOT DIE LIKE YER MOTHER!!! 00:45:11 :( 00:45:19 ~exec self.load_callbacks("/bot/test.pickle") 00:45:21 DIE BOT DIE LIKE YER MOTHER!!! 00:45:22 -!- bsmnt_bot has quit (Remote closed the connection). 00:45:25 -!- bsmnt_bot has joined. 00:45:32 heh 00:45:46 omg that's nice 00:46:03 a thereapeutic robot :D 00:46:08 yeah :) 00:46:22 ~exec print o 00:46:25 ~exec print "o" 00:46:32 meh 00:46:50 The sys.output problem has not been solved. 00:47:08 that is not fair :\ 00:47:09 ~exec print >> sys.output "o" 00:47:14 ~exec print >> sys.output, "o" 00:47:26 >> ? 00:47:32 apparently renamed... 00:47:53 sys.stdout, as always 00:47:54 ~exec self.raw("PRIVMSG #esoteric :o") 00:47:55 o 00:48:06 darn my memory 00:48:25 I can't figure out how to fix that 00:48:48 why won't it help to just change the stdout here? 00:49:00 That's what it is 00:49:21 ~exec sys.stdout.write("foo") 00:49:22 foo 00:49:24 see 00:49:32 The problem is that the change should only affect the subthread, which may be impossible. 00:49:33 print is the exact same? 00:49:45 oerjan: right 00:49:59 ah okay 00:50:13 I change sys in the enviroment for the exec, but print borks anyway 00:50:43 A sub-process would solve that but make transmitting all other information awkward. 00:51:04 A sub proccess would require shared memory 00:51:09 Is it possible to redefine the print statement itself? 00:51:22 not that I'm aware of 00:52:10 -!- ShadowHntr has joined. 00:52:17 And I believe shared memory in a garbage collected language is hard, so Python probably doesn't have it. 00:52:25 yeah 00:52:37 don't think it does 00:53:05 It's possible to redefine the "import" statement with __import__, but I can't find the similar function for print 01:03:39 well... 01:04:13 the standard print can be altered with sys.stdout.write ...but other than that... 01:04:37 CakeProphet: But I have done that 01:04:48 sys.stdout.write writes to this channel 01:05:19 import imp 01:05:24 has some useful stuff for import hooks. 01:05:33 to do some more interpreter magic that can't be done with __import__ easily. 01:05:46 I don't care about __import__, that was just an example 01:06:09 ~quit 01:06:24 Aux vorto :( 01:06:45 Sukoshi: The only public commands are ~exec and ~ps 01:07:11 You can quit it with ~exec self.disconnect(message) 01:08:49 ~ps 01:08:50 None 01:08:56 ~ps 01:08:57 None 01:08:58 ~ps 01:08:59 None 01:09:14 only ~exec commands go in ps 01:10:08 What's this ``pickling'' thingamabobber? 01:10:23 Python object serialization 01:10:32 I was using it to provide persistance for callbacks 01:10:51 * Sukoshi pities those without lexical and dynamic bindings. 01:13:34 * CakeProphet has some nifty stuff you ould use to persitent the entire global namespace. 01:13:41 I can store functions if nessicary. 01:14:02 sure, just pickle globals() 01:14:09 the pickle protocol can only store references to functions on the top level of a module. 01:14:17 same with classes. 01:14:27 meh whatever 01:14:27 because it doesn't actually store the class itself... just a reference name. 01:14:42 Did you see my way of persisting functions? 01:14:44 but... with enough abuse... you can make it work for any function. :P 01:14:54 Nope. 01:15:20 we basically pickle [(i[0], marshal.dumps(i[1].func_code), inspect.ismethod(i[1])) for i in self.raw_regex_queue] 01:15:54 Eh... that would work. 01:16:00 for my MUD I use a class. 01:16:08 that wraps functions... and just store the source code. 01:16:18 getting it out is a little more complicated, because we have to convert functions to methods 01:16:49 the actual function isn't pickled... but the source is... upon a __call__ it recompiles the function if it doesn't exist or if the source string has been altered. 01:16:58 http://bsmntbombdood.mooo.com/chroot_ircbot.py 01:17:19 so you can edit the definition of a function inplace. 01:17:42 How do you get the source? 01:17:59 depends. 01:18:08 If it's something in the hard source... I use inspect. 01:18:24 Right, that parts easy 01:18:32 as for mid-runtime defined functions... I just capture the source as its defined and instantiate a new func object. 01:18:53 hmm 01:18:59 since it's a MUD... and it uses commands-mapped-to-functions... I can just hard-code that part into the "def" command. 01:19:15 ? 01:19:29 You can redefine def? 01:19:34 no no. 01:19:39 it's not Python... it's MUD commands. 01:19:44 oh 01:20:03 So you have your own dsl 01:20:10 the player could type "def WHEEFUNC(arg, arg)" and a text-editor would pop up or something. 01:20:16 dsl? 01:20:19 wassat? 01:20:38 domain specific language 01:20:47 if you wanna call it that. 01:21:27 it's just "command stuff" where stuff is matched to a command-specific parsing regex. 01:21:46 regexes! 01:22:17 I still have that way to do it.. 01:22:26 but I decided in the end to make a new version that ditches all of that. 01:22:48 and I'm going to make my own language for the MUD... that resembles ORK and uses coroutines heavily. 01:24:08 I wonder if you could write a parser using only regexes 01:24:23 sure... depends on the language though. 01:24:33 Stue... for example... can be parsed entirely with regex. 01:24:39 as could ORK. 01:24:42 Using backreferences to get the actual values 01:24:54 Python's regex has named groups. 01:24:57 which is super handy for that. 01:25:06 yeah 01:25:17 Glass could probably be parsed with regex. 01:25:20 and BF too... :P 01:25:58 some things that probably can't be parsed too easily with regex would be like... HTML and English. 01:27:49 Actually simple regexes cannot parse nested parenthesis-like structures. 01:28:16 I think really parsing english is just a matter of amassing a huge database of words, slang terms, colloquialisms, acronyms, terminology, expressions, common names, etc. 01:28:24 Which rules out both Glass (/\) and BF ([]) 01:28:33 hrm 01:28:42 yeah, I guess so 01:29:01 it's the difference between regular and context-free languages 01:29:08 But you say simple...are there complex ways to do it? 01:29:32 I've got a parsing library that extends off of regex to allow recursive structures. 01:29:41 Well I was hedging my bets for what strange extensions might exist :) 01:29:43 it uses some form of "forewarding" or something. 01:30:28 I guess if you a metacharacter that meant "a backreference to the group I'm in". 01:30:33 you could let the regex engine handle it. 01:31:53 There may of course be tricks to use regexes heavily together with explicit recursion. 01:33:47 For example, in BF you might use "[[^][]*]" to get everything between the first and last loop, and then have another regex to split _that_ up. 01:34:02 hmph 01:34:25 except you have to escape the [] 01:34:46 "\[[^\]\[]*\]" 01:34:50 Eh, wait that was wrong. 01:34:56 er 01:35:00 In fact I meant: 01:35:34 "\[.*\]" 01:35:57 "\[^][]*\[(.*)\][^][]*\]" 01:36:22 huh? 01:36:55 first skip to the first [, then keep everything to the last ], then skip the rest. 01:37:16 Don't know if it's useful, just thought of it. 01:37:41 You can't get it to match the right ] 01:38:12 Gah, I forgot the final \[^][]* 01:38:45 i mean i had an extra \] 01:39:04 cannot read my own regexps :) 01:39:41 you can't get nested loops 01:39:52 I suppose real parser combinators are better. 01:40:24 What is wrong with "\[^][]*\[(.*)\][^][]*" ? 01:40:39 I can't read it :) 01:40:53 Gah. An extra \ 01:41:01 regex should probably go the oher way around.. 01:41:05 or at least... have an option to do. 01:41:15 use escape characters for the meta characters.. 01:41:22 instead of escape characters for the regular characters. 01:41:30 What is wrong with "[^][]* \[ (.*) \] [^][]*"/v ? 01:41:39 all the slashes make it weird to read. 01:41:42 there's a sexp regex format 01:42:10 but I guess all the escape characters for metachars would just muck up the readability too. 01:42:11 I am trying to use the Perl format, which is what I know somewhat. 01:42:12 so.. 01:42:39 I always use non-greedy *'s on .'s 01:42:42 .*? 01:42:44 that CL-PPCRE uses 01:42:50 otherwise it'll eat up your regex. 01:43:10 That /v should be /x 01:43:28 (for embedded whitespace for legibility.) 01:43:56 verboose mode comes in handy. 01:44:05 ignores whitespaces unless they're in brackets. 01:44:40 OK then: "^ [^][]*? \[ (.*) \] [^][]* $"/x ? 01:45:15 hmmm.. 01:45:24 the tilde seems like a good escape character. 01:45:30 won't work 01:45:32 Actually that ? is useless. 01:45:40 wait 01:45:45 it's rarely used.... and it's not quite so weird and choppy looking as \ 01:45:46 That might actually work 01:46:01 CakeProphet: writing your own pattern matcher? 01:46:08 Nah. 01:46:16 Any pattern matcher I wrote would be non-character-specific. 01:46:31 with an optional ability to match per-character. 01:46:43 oerjan, I think you've got something 01:46:59 ~[^~] 01:47:01 hmmm... 01:47:13 ![^!] 01:47:17 Huh? 01:47:17 I kind of like !'s 01:47:20 but it's used. 01:47:35 The question is how to parse the interior further. 01:48:00 recurse 01:48:14 It needs a different expression for sure. 01:48:57 uh yeah, yours.doesn't work 01:49:43 matched agains "[ ] [ ]", it matches the whole thing 01:50:44 Yes, and then " ] [ " needs to be split up further. 01:51:11 I don't know of any way to do it other than counting, and regexes can't count 01:51:30 Lisp can be parsed... erm... linearly. 01:51:38 ? 01:51:48 I believe I said I meant to use more than one regexp. 01:51:51 character by character. 01:52:10 yeah 01:52:22 it still needs to count parens 01:52:41 "(" simply means accumulate another branch to the parse tree... ")" mean return to the last node... " and ' would start a string and symbol mode respectively. 01:52:44 increment on "(", decrement on ")", return buffer when count == 0 01:53:00 ...yeah. 01:53:32 Well, even if it could work it would end up rather complicated. 01:53:40 Yup. 01:54:07 parsers tend to be pretty damn weird to code by hand (i.e. without a parsing language) 01:54:59 I think I'm going to write a quit parser for nested (), just as an excersize 01:56:51 Recursive descent is not that bad. 01:57:00 When it works. 02:01:27 -!- CakeProphet_ has joined. 02:02:40 Is everyone else finding the net awfully slow these last days? And not just IRC either. 02:02:54 yes 02:03:01 I was just thinking that 02:03:46 The tubes are clogged? 02:03:59 need some billaird balls 02:07:46 ok, no idea how to do this 02:08:07 do what? 02:08:12 I at least got the code to get the part in between the parentheses 02:08:24 What is a quit parser? 02:08:34 *quick 02:09:00 Darn, here I though I was up to some new interesting technology :D 02:09:44 Use either an explicit stack, or recursion. 02:09:50 yeah 02:11:38 I'm not sure what the parse tree should look like 02:12:07 A list of expressions, some of which are themselves lists of expressions? 02:12:13 (a(b)) => [["a", ["b"]]] ? 02:12:38 A single outer set should be enough. 02:12:56 a(b(c)) 02:13:03 er, yeah 02:13:06 eh, right. 02:13:09 -!- CakeProphet_ has quit (Read error: 104 (Connection reset by peer)). 02:13:09 -!- CakeProphet__ has joined. 02:13:19 gah, I have no idea what I'm doing 02:13:32 actually your first seemed good. 02:13:42 what should (a(b)c) parse to? 02:13:59 -!- CakeProphet has quit (Read error: 113 (No route to host)). 02:14:03 -!- CakeProphet__ has changed nick to CakeProphet. 02:14:10 [["a", ["b"], "c"]] ? 02:14:21 I think so. 02:15:06 my web browser is acting weird. 02:15:09 for clarity, you might want two different functions, parse_list and parse_expr 02:15:09 it can't get to anything. 02:15:16 while everything else internet-wise works fine. 02:15:23 CakeProphet: wow 02:15:38 it just hangs up... :/ 02:15:42 i also have web sites dropping out frequently. 02:16:01 it just sits loading forever... 02:16:10 without ever saying "lol no connection kthxbai" 02:16:12 Same with me, until it gives up. 02:16:18 yep 02:16:32 meanwhile telnet and IRC work hunky dory. 02:16:33 Oh, mine does give up eventually. 02:17:26 I can reach the esolang wiki and.. 02:17:27 gmail. 02:18:14 Perhaps they are close to you? Anyhow the esolang wiki has always been on and off in my experience. 02:19:00 Maybe the spam is finally taking over :/ 02:19:59 hmm... working fine for now.. 02:20:02 a little bump though. 02:20:08 bumpy 02:21:31 Now I cannot get to BBC news... 02:21:53 Now I can. 02:27:25 weird 02:27:40 ? 02:27:50 the web 02:28:18 -!- pikhq has joined. 02:28:27 argh I can't do this 02:28:30 the parser 02:28:41 What's the problem? 02:28:47 ...I don't know 02:29:43 What are you doing at ( and ) ? 02:30:12 incrementing the count, decrementing the count and recursing if count == 0 02:30:41 Eh, recursing should be done whenever you hit a ( 02:30:51 ? 02:31:03 Paste? 02:31:28 it's not even anything 02:31:47 oh I know 02:32:02 i need to return the string if it doesn't have any of () in it 02:32:14 If you are using recursion, you don't need any counting. 02:32:26 eh? 02:33:14 Just return when you would decrement and call a subfunction when you would increment. 02:34:14 The depth of the recursion stack automatically keeps track of the count. 02:37:12 And by the way, this is easiest in functional style: the result value of the function should be the parse tree of what that invocation has parsed. 02:37:25 right 02:38:45 On the other hand the pointer to the current character needs to be common for all invocations, so each can take over where another stopped. 02:39:09 Easy with a file-like object, I presume. 02:39:35 they just pass a substring 02:40:19 Right, in that case it needs to be passed upwards as well because the caller needs to take over where the called function stopped, as well. 02:40:33 argh 02:41:28 I believe in Python it is easier to use a common object with a pointer. 02:42:34 file like object it is, then 02:42:55 Python doesn't really recognize such a thing as a "pointer". 02:43:13 everything is implicitly a reference... 02:43:34 And index into an indexable object is a "pointer" 02:43:46 s/And/An/ 02:45:01 That's what I meant anyhow. 02:45:32 Also, doing it this way has the advantage that you can easily parse directly from a file. 02:45:33 but if it's something like a string... there's very little difference in a reference to a string and a copy of a string. 02:45:36 due to immutability. 02:45:49 lists and dictionaries... on the other hand. 02:46:36 Just pretend I said "index", OK? :) 02:46:59 hmm... is an index a "pointer"? 02:47:34 Well, a pointer is an index into memory. 02:48:34 it doesn't matter much in Python though. 02:48:48 You have to use an index to emulate a pointer in python 02:49:02 mutability and immutability tend to outweigh pointers. 02:49:49 x = [[].[].[]]; y = x[0]; y.append(1); print x #[[1],[].[]] 02:49:54 well in c, everything is immutable 02:49:55 That's a "pointer" 02:50:24 anything assigned to a list is just a pointer... unless you use the copy method... or use the list() function. 02:50:52 x = [[].[].[]]; y = x[0].copy(); y.append(1); print x #[[],[].[]] 02:52:06 y becomes a "pointer" implicitly for any variable that references a list.... same with dictionaries and classes/instances. 02:52:10 This is all well and good, but we knew it already. I just used a loaded word OK? 02:52:29 nah nah... not the wording... I'm just trying to figure out... what you're trying to do.. 02:52:55 some hardcore pointer manipulation makes me all warm and fuzzy inside 02:53:20 I was suggesting bsmntbombdood turned his string into an input file-like object so it could be scanned/parsed easier. 02:53:29 StringIO? 02:53:52 Which means he somehow needs an index into it. 02:54:13 import cStringIO as stringio; x = stringio(); x.write("wheeeee"); print x.getvalue() 02:54:15 There's a library for it? Not entirely surprising. 02:54:25 yup. 02:54:36 cStringIO is the faster version of it though... so I'd use it. 02:55:07 it's basically just a string-file... good pretty much anywhere a file is (it uses all the same methods... with an added "getvalue" method) 02:55:11 It's also a drop in replacement, so it doesn't matter what I use 02:56:38 Half of Python's awesomeness lies in the sheer amount of junk in its library. 02:56:54 oerjan: what do I do on ) ? 02:57:28 You place that accumulated bits into the next index of the node? 02:57:32 Just return. 02:57:59 That's what I'd guess... basically just convert it into tuples (or lists) 02:58:01 Perhaps not advancing the index, so that the parent also gets to see the ) 02:58:05 lists would work better... being mutable. 02:58:43 Yes, return the accumulated list. 02:58:53 Generally speaking... if you're doing massive numbers of string, list, or tuple concats in a Python program... you're probably doing it the wrong way. 02:59:11 CakeProphet: I do string concats a lot :/ 02:59:17 ewww. 02:59:19 they're slow. 02:59:26 list operations are much faster. 03:00:10 because when you work with a list... you don't have to construct an entirely new string object each and every time... as you do with concatenation. 03:02:03 it's really on a problem when you have a large number of successive concatenations on a progressively increasing string. 03:02:15 r/on/only 03:02:23 I guess stringIO doesn't actually construct the string until you call get_value? 03:02:31 Righto. 03:02:46 among other things. 03:02:51 it's a "mutable string". 03:03:20 but usually lists are the way to go when messing with strings. 03:03:23 there was a mutable string class once I think 03:04:26 arggggh 03:04:29 compared "\n".join(SomeListOfStrings) to x = ""; for string in SomeListOfStrings: x += string + "\n" 03:04:35 parse("(a(b))") => ['', ['a', []]] 03:04:48 What's wrong? 03:04:55 oh. 03:04:58 hmm. 03:05:00 no 03:05:01 wait 03:05:03 don't see it. 03:05:12 ? 03:05:48 http://pastebin.ca/313805 03:06:32 bsmntbombdood, haha... that's exactly the kind of problem I was referring to. :P 03:06:40 ...yep 03:07:24 why a while loop? 03:08:03 because 03:08:48 ... 03:09:08 it looks like you're just recursively calling parse() on the exact same string ( s ) 03:09:16 How else would I do it? 03:09:19 Why the buff? 03:09:38 s shouldn't be a string but a file-like object. 03:09:48 CakeProphet: s isn't a string 03:09:55 file. 03:09:57 ah. 03:10:24 you couild use partition... if you wanted. 03:11:09 why? 03:11:24 "Wheee(wha wha wha (wha wha wha))".partition("(") == ("Wheeee", "(", "wha wha wha (wha wha wha))" 03:11:29 You are missing a tree.append(buff) before the return. 03:11:31 so you don't have to use that god awful buffer. 03:11:51 oerjan: oh, right 03:12:07 now it kind of works 03:12:09 And also you should check for buff=="" 03:12:19 make a buff a list. 03:12:24 and append characters to the list. 03:12:33 much much quicker. 03:13:23 Perhaps... 03:13:38 no... that's the way you would want to do it. 03:13:40 :P 03:13:46 strings aren't meant to do stuff like tha. 03:13:48 t 03:13:52 okeey, it works 03:13:54 I wasn't responding to you. :) 03:13:57 oh. 03:14:23 http://pastebin.ca/313811 03:14:58 It might be an idea to do the collection of non-() as a second while loop inside the first. Then you don't have to worry about "" testing. 03:15:00 yeah... buff should definetely be a list... the string concats will get slow. 03:15:16 And it would be easy to do a join at the end of it. 03:15:24 "".join(buff) 03:16:32 However, then you need to be careful about when you read the next character. Unless the files have an undo method. 03:16:53 CakeProphet: http://pastebin.ca/313814 03:16:55 happy? 03:16:58 yup. 03:17:01 oerjan: they dont 03:17:14 * CakeProphet wishes file objects had an iterator for character-by-character stuff 03:17:25 you could make one pretty easy though. 03:18:14 I think there is still a bug in that if there is eof while buff is non-empty. 03:18:23 -!- digital_me has joined. 03:18:39 oerjan: indeed there is 03:18:58 for loops over files only go line-by-line... 03:19:57 http://pastebin.ca/313817 03:20:00 def chariter(file): for line in file: for char in line: yield char 03:20:20 for char in chariter(s): 03:20:27 that'll solve pretty much all your problems. 03:20:58 Oh, and it definitely does not catch mismatched parentheses. 03:20:59 as a general rule of thumb... while loops tend to be infrequently used in Python. 03:21:31 The problem here is that the index of the for loop needs to be updated after the recursion. 03:21:46 yeah 03:21:54 and python is stupid about that 03:21:59 index of the for loop? 03:22:02 what for? 03:23:15 I mean, the parent function should not reparse the characters parsed by the child. 03:23:56 just cut it off each time. 03:24:29 "There's still a bug" - well said 03:24:34 What does cut off mean? Can two for loops share an iterator? 03:25:01 argh, parsign is hard 03:25:31 For proper error handling you need to use lookahead for the ")" 03:25:59 So that the parent takes care of checking if it was actually there. 03:26:00 to get the next character you could use s.getvalue()[s.pos+1] 03:26:23 Now _that_ is inefficient. 03:26:31 yep 03:30:28 On second thought, you don't need lookahead if the child knows whether it needs an end parenthesis. 03:31:20 Which it does unless it actually is the topmost parent. 03:31:30 *child = function 03:32:33 And the topmost parent, on the other hand, knows that it must not have a ) 03:32:47 So an extra argument could fix that. 03:33:03 ugh 03:33:07 I hate doing that 03:33:37 Or you could make two different functions. 03:37:31 how about this? http://pastebin.ca/index.php 03:37:37 it doesn't do error checking... but meh. 03:37:49 I doubt that is your URL. 03:38:06 ...erm... yeah 03:38:14 http://pastebin.ca/313825 03:39:06 oh... wait. 03:39:10 duh. 03:39:12 obvious mistake. 03:40:32 it needs to check for the ending parenthesis. 03:44:05 whats that list[::n] syntax? 03:44:21 step. 03:44:29 (1,2,3)[::2] == (1,3) 03:44:36 it's kinda weird. 03:44:39 but strangely useful. 03:45:04 http://pastebin.ca/313826 03:45:06 new one 03:45:08 with a fix. 03:45:11 dunno if it works... but eh. 03:45:14 it's how I would have done it. 03:45:26 ...using partition is cheating 03:46:09 ...how's that? 03:46:18 it's not recursive. 03:46:25 it's not regular expressions. 03:46:30 You are only allowed to step through characters one by one 03:46:30 it's damn useful. :P 03:47:04 at it's heart... the partition source code probably steps through each character one by one. 03:47:06 so... 03:47:08 :P 03:47:32 I wanted a "real" parser 03:47:55 sure sure... just substitute what partition does into that and you'll have a character-by-character "real parser". 03:48:14 then it becomes waaay long 03:48:16 er than mine 03:48:39 of course it does. 03:50:28 for loop is the way to go over while. 03:50:39 while can't anticipate EOFs ;) 03:50:43 not easily. 03:51:07 using whle loops for iterating is a sin anyhow. 03:51:51 Does that code actually work with nested parentheses? 03:51:58 mine? 03:52:04 Don't know. 03:52:06 haven't tested it. 03:52:07 Yes. 03:52:09 it'll probably have bugs. 03:52:12 but... oh well. 03:52:42 the way I envision it... it would. 03:52:49 but... I doubt it works as I imagine. 03:53:24 Does partition include the "("'s in the list? 03:53:28 and what's the point of replace("\n", "")? 03:53:39 -!- pikhq has quit ("leaving"). 03:53:46 newlines aren't signifigant... or so I'm lead to believe. 03:53:56 * CakeProphet was thinking of Lisp when he made it. 03:54:10 oerjan: partitition(sep) => (head, sep, tail) 03:54:22 it puts it in the middle. 03:54:25 CakeProphet: They aren't 03:54:31 Oh, so never more than one sep? 03:54:40 which I safely ignore via [::2] 03:54:42 nope. 03:54:47 split is the one that does them all. 03:54:56 it returns a list. 03:55:07 partition is just a 3-tuple of the first encountered seperator. 03:55:26 "a b c".split(" ") => ['a', 'b', 'c'] 03:55:29 I doubt that it works when there are no ")"s in the string... 03:55:38 I mean "(" 03:55:50 "a b c".partition(" ") => ('a', ' ', 'b c') 03:55:54 "a b c".split(" ") => ("a", " ", "b c") 03:55:56 yeah 03:56:01 partition 03:56:05 CakeProphet: no 03:57:20 * CakeProphet is still thinking abouit that esoteric parsing language. 03:57:33 parsing is a pain in the ass... and needs simplification... esoterically. 03:57:49 Anyhow if I understand your code right, it hardly works on anything containing more than a single set of parentheses. 03:58:37 Wait a moment, not even that. 03:58:48 You are checking for ")" in the wrong branch. 04:00:19 whoa, mine works when you leave off closing parentheses 04:00:38 In fact, partition used this way cannot do more than regexes. 04:02:05 Which we discussed previously, and I think we agreed it would at least become very complicated to parse nested parentheses using them, if at all possible. 04:03:46 bsmntbombdood: That's because there is no difference between eof and ), essentially. 04:03:56 In the code. 04:04:14 hmm, right 04:05:06 And as I implied, without extra arguments only the parent knows whether there must be a ")" or not. 04:05:17 oh ho.. 04:05:19 I beg to differ. 04:05:24 [["I've", 'got', [['magic', 'in', [[[['my', 'pocket', [['really', 'have']]]]]]]]]]] 04:05:37 parsed from... print whee("(I've got (magic in ((my pocket) but) you can't (really have) it)") 04:05:48 it messes it up some. 04:05:59 oh wait. 04:06:05 no it doesn't... hmmm... 04:06:07 [["I've got ", ['magic in ', [['my pocket'], ' but'], " you can't ", ['really have'], ' it']]] 04:06:13 is what my parser gets 04:08:51 It misses the part after ")". As I said, the partition(")") is in the wrong branch. 04:09:08 It wouldn't work properly in the other one. 04:09:17 or.. it would work less properly. 04:09:45 Which strangely means that you call it recursively with something not well-formed. 04:09:51 see it works "backwards"... sorta. 04:10:19 You at least need to take case of the [3] part. 04:10:27 I mean [2] 04:10:32 *care 04:19:00 I'm awaiting a stroke of genius. 04:19:10 where I realize the grand pattern of parsing. 04:19:14 and make the ultimate parsing language. 04:19:15 but... 04:19:18 isn't happening. 04:20:09 Unfortunately it has already been done. It is called monadic parser combinators in Haskell :) 04:20:37 moniadic parser combinators! 04:20:41 Well, that or Prolog diff lists, perhaps. 04:20:44 that's a buzzword if I ever saw one 04:21:20 for languages with symbols... there's some basic general re-ocurring patterns. 04:21:32 tokens 04:21:39 lex+yacc 04:21:57 enclosures (parentesis), flippers (quotes), funnyhats(decorate syntax in Python 04:22:04 :P 04:22:16 hmmm... 04:22:57 you have things that serve as delimiters... usually operators... sometimes things like whitespace and newlines. 04:23:07 tokens 04:23:19 yes yes... tokens... you have to -make- them. 04:23:23 lex 04:23:30 which is what I'm trying to accomplish. 04:23:38 lex+yacc! 04:23:45 wait! 04:23:49 who needs tokens? 04:23:51 I mean really.. 04:23:53 expr_list = many (liftM Left (notOneOf "()") <|> liftM Right (between (char "(") (char ")") expr_list) 04:24:43 CakeProphet: yacc does 04:26:16 esoteric parsers don't need "tokens". 04:26:25 they need coupons. 04:26:36 which cannot even be defined in terms of the English language. 04:26:38 so I won't even bother. 04:26:41 You might combine both stages into one, but you are still going to be tokenizing 04:26:47 Nope. 04:26:56 yes 04:27:03 esoteric parsers are so magificent they don't even need to parse things. 04:28:29 esoteric languages just run the string directly, searching forward or backward. At least I _think_ I saw someone trying to do this the other day ;) 04:29:52 pretty much... ignoring strings.. 04:30:11 you want to find the parenthesis you can parse.. 04:30:30 There is such a thing as a parenthesis. 04:30:43 interpreter it... substitute the results... and parse the next parse-able parenthesis thing. 04:31:06 thats's how you would do it non-recursively. 04:31:35 I think there might be a need for a fundamentalist ORK, incorporating such extensions as the "There is no such thing as a" statement. 04:31:43 find what matches the base pattern... evaluate it... repeat over and over and over. 04:31:50 eventually you'll wear away the recursive-icity. 04:32:30 That is of course what /// does. 04:32:41 I've always been interested in data is defined by what it isn't. 04:32:53 anti-objects. 04:33:28 There was a thread on anti-objects on Lambda the Ultimate recently. 04:33:37 Let's say you have an interpreter that... when run without a program... will compute everything. 04:33:53 the program will define what not to compute... 04:34:05 so to compute one null you would to manually decompute everything. 04:34:49 What's a networking framework? Well... it's definetely not AI, a parser, time travel, the hello world program, a symbolic manipulator, nor a date simulator. 04:35:01 so just make all of those and you'll have your networking framework. 05:29:19 -!- digital_me has quit ("Lost terminal"). 05:38:30 -!- CakeProphet has quit (No route to host). 05:44:54 whoa neat 05:45:03 http://python.org/doc/lib/compiler.html 05:45:42 It parses python into syntax trees 05:49:16 that's awesome 05:49:29 I think that's the way to modify the print statement 05:50:39 -!- calamari has joined. 05:52:20 maybe not, though 05:53:22 You can write python as syntax trees :) 05:54:51 Function(None, "f", ["x"], [], 0, None, Stmt([Return(Name("x"))])) 05:59:18 You might do a search and replace on "print" in do_exec, inserting >> sys.stdout, if there isn't a >> there already. A bit brittle, perhaps. 06:00:03 very brittle 06:00:56 Hacking the compiler would be more fun ;) 06:02:02 change Stmt([Printnl([Name('x')], None)]) to Stmt([Discard(CallFunc(Getattr(Getattr(Name('sys'), 'stdout'), 'write'), [Name('what')], None, None))]) 06:02:12 er, s/what/x/ 06:20:15 -!- calamari has quit ("Leaving"). 06:28:23 -!- ShadowHntr has quit (Connection timed out). 07:59:10 -!- Arrogant has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:08:55 -!- oerjan has quit ("leaving"). 09:06:35 -!- Arrogant has quit ("Leaving"). 10:34:40 -!- ihope__ has joined. 10:35:26 -!- ihope__ has changed nick to ihope. 12:05:10 -!- jix__ has joined. 12:10:11 -!- jix__ has changed nick to jix. 14:57:29 -!- tgwizard has joined. 15:29:20 -!- ngtr has joined. 15:29:59 -!- ngtr has changed nick to andreou. 16:29:12 -!- ihope has quit (Connection timed out). 16:30:13 -!- andreou has changed nick to ngtr. 17:18:49 bsmntbombdood: Bah. Many languages are in denial about their need for algebraic datatypes 17:59:53 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 18:31:56 SimonRC: what? 18:31:58 -!- ShadowHntr has joined. 18:32:19 what were you making earlier? 18:33:13 some kinda parser? 18:34:53 * SimonRC listens to _The News Quiz_. 18:36:23 bsmntbombdood: Algebraic Datatypes are an enlightening system of describing datastructures. I much prefer them to classes or structs 18:36:35 oklopol: A simple parser 18:36:55 ADTs are great for things like parsers. 18:37:10 What are they? 18:38:36 for regexes? 18:38:42 A good start http://en.wikipedia.org/wiki/Algebraic_data_type 18:38:55 oklopol: no 18:39:02 okay 18:39:11 oklopol: for nested parentheses 18:39:16 i read it all but i'm half asleep 18:39:16 okay 18:39:16 ADTs generalise structs and unions, for a start. 18:39:21 that was hard? 18:39:31 just the parenthesis thing? 18:39:43 oklopol: For someone who knows nothing about parsing, yes 18:39:53 i'll try in python 18:40:03 bsmntbombdood: waitamo, did you just say you parsed parentheses with a regex? 18:40:07 in c++ that would take 20 min 18:40:11 SimonRC: no 18:40:28 Ah, good, I though mathematics might be falling apart. 18:40:57 nope, oklopol just misread the earlier conversation 18:41:54 i didn't think you used regex for smth, i thought you were making a regex parser 18:43:42 k, does def a(b) take b as a reference if it's int 18:43:47 if b is int i mean 18:43:56 oklopol: no 18:44:00 oklopol: which language? 18:44:04 python 18:44:04 ints are immutable 18:44:11 how do i pass as ref? 18:44:16 [4]? 18:44:19 not 4 18:44:20 a var 18:44:27 that's idiotic 18:44:28 oklopol: you don't 18:44:29 (The answer would be yes in QBASIC.) 18:44:38 SimonRC: Python, I assumed 18:44:38 okay 18:45:04 i can't pass as an int as a ref easily? 18:45:19 okay, then i see where you were having trouble :DD 18:45:27 i'll have to use a stack then 18:45:54 use a list containging a singel int 18:46:11 A list works, but it's ugly 18:46:44 i always code ugly with python, it's what python knows best imo 18:47:09 (okay, i just don't grasp functional languages) 18:48:03 python is functional 18:48:11 snork 18:48:26 yes, i know 18:48:33 and i don't grasp it 18:48:42 They are diking out map and rejecting multi-line lambdas 18:48:52 * SimonRC goes to eat dinner. 18:52:20 SimonRC: I know, it's stupid 18:52:32 but a list comprehension is just as usable as map 18:54:49 define map(f,seq): return [f(i) for i in seq] 18:55:06 okay, made it 18:55:11 but did it the ugly way 18:55:30 -!- ngtr has left (?). 18:57:58 -!- andreou has joined. 18:58:49 greets 19:01:20 greets anyone 19:01:24 i'm back from the dead 19:02:19 or back into the dead ... no one here? 19:03:03 some 19:04:18 heh hey you 19:05:21 who's andreou ? 19:05:48 i frequented the channel a few years ago 19:11:05 is there a pastebin? i have an obsession to share my python code 19:11:31 pastebin.ca 19:13:13 http://www.pastebin.ca/314421 19:14:54 python really shows you how much you suck when you use the ide since errors hide your code 5 miles up... 19:15:08 infinite recursion errors that is 19:15:58 >>> parentise("I've got (magic in ((my pocket) but) you can't (really have) it",[0]) 19:15:59 ["I've", 'got', ['magic', 'in', [['my', 'pocket'], 'but'], 'you', "can't", ['really', 'have'], 'it']] 19:16:05 i'm not sure if that's right 19:16:15 and my algorithm is terrible :) 19:16:32 i iterate everything twice 19:19:41 oh, i forgot the slash 19:21:59 http://www.pastebin.ca/314437 19:22:02 betterz 19:28:00 * bsmntbombdood wonders how closures are implemented 19:29:01 in mine? 19:29:59 no 19:30:05 but? 19:30:11 ? 19:30:32 in python? 19:30:47 in any language 19:34:00 http://bsmntbombdood.mooo.com/testclosure.c 19:34:01 :) 19:34:20 heh 19:34:25 I doubt it's like that 19:34:30 i gotta compliment my memory 19:34:51 very nice 19:35:36 i gotta compliment that more tho, ingenious 19:36:39 thought of generalizing that with templates but never got into doing it 19:37:50 Hmm, I thought of a way of generalizing that code somewhat 19:38:27 except no 19:39:17 omg, managed to shut the lights with a throw of a ball 19:39:28 except no why? 19:40:50 no to the idea I had 19:41:35 okay :D 19:42:02 it could easily do that to any function given the function after it and before it :DD 19:42:40 curry(funcbefore,funcafter,firstvarvalue); 19:43:14 would search first variable in the function, variables being \0xDEADBEE(0,1,2,3,4, etc.) and currying 19:44:08 and return the function of course 19:44:17 dhcpd is running as pid 666. 19:44:29 this tells things about the upcoming net-installation... 19:45:39 heh 19:47:37 well, has anyone installed debian on an old-world mac using netboot? 19:48:55 no? wll, i'm screwed then. 19:57:09 -!- CakeProphet has joined. 20:38:59 this deal sucks. 20:43:01 I think I might have, but I don't remember _anything_ about it, and I don't even have the silly box any more. Besides, come to think of it, I think I installed using the tried-and-true method of "move the hd to something more sensible". 20:45:00 it's just insane. netbsd goes without a hitch, why not debian as well? 20:45:47 Right, the hd-switching it was. It was the sparc I had to net-boot, it did only "rarp and tftp to the answering rarpd", and it was OpenBSD I was installing. Got confused. 20:46:09 * andreou indulges in a huge piece of spinnach-cheese-pie, putting all the problems behind 20:47:19 obsd-sparc goes without a flaw 20:47:30 * andreou has the sparcclassic buzzing to his right as a proof 20:49:46 come to think of it, sparcs are very sensible boxes 20:50:02 maybe i should just sell or give away all the junk lying around and about and get a U10 or something 20:54:36 I had a sensible sparcstation 5 as a interweb firewall/router box, but it retired when I moved to this 100baseT network, since I didn't want to start looking for suitable sbus cards. It's currently in a closet. 20:55:57 eh i'm still on 10baseT, although the previous workstation had GE-grade NICs. 20:56:16 threw it out, too many MIPS, too many movies 20:56:26 -!- ihope__ has joined. 20:57:06 -!- ihope__ has changed nick to ihope. 21:21:30 today is "can't" day. 21:23:00 i'm really waiting for the s/a/u/ day 22:00:48 toduy is "cun't" duy 22:00:49 There. 22:01:00 ;p 22:01:28 There's no trailing g, so isn't it simply "Toduy is "can't" day."? 22:01:55 Oh. True. 22:02:13 pedants 22:02:50 But it's right, and there's no denying it, and it's a common occurance. 22:16:50 * ShadowHntr has Solaris 10 on his Ultra 5... 22:19:49 Don't they call that "slowlaris"? 22:20:12 a U5 is a perfect non-solaris box 22:21:43 The Ultra 10s (and the few Blade 1000s) in this university run Solaris 10, too. 22:28:54 you geeks and your non-x86 hardware 22:29:27 a matter of pocket, not of brain. 22:29:35 though, well... 22:29:52 I don't have any cool hardware :( 22:30:23 Well, those U10s aren't really mine. And since my SS5 and the Indy are both in the closet, and the old mac is gone, the only non-x86 hardware here in use are the PPC iBooks. 22:31:25 plural? capitalist pig... 22:35:55 The other iBook is my wife's, actually. I could barely afford my own. 22:37:21 I would accept the labeling if they were MacBook Pros or something. :p 22:56:56 -!- digital_me has joined. 22:58:58 hi digital_me 23:47:54 -!- jix has joined. 23:49:49 -!- jix has quit (Client Quit). 23:50:15 -!- tgwizard has quit (Remote closed the connection). 2007-01-13: 00:49:45 hmmm... 00:49:46 alright... 00:49:54 I'm going to build a hybrid of Python and Lisp. 00:50:11 It'll basically look like Python with Lispisms and Lisp syntax. 00:50:13 fail 00:51:28 (an.example of [some stuff for program in lisp-python-hybrid if (build-it True)]) 00:54:08 -!- pikhq has joined. 00:59:13 -!- wooby has joined. 01:00:31 CakeProphet: huh? 01:01:36 -!- digital_me_ has joined. 01:02:28 built-in or build-it? 01:02:49 CakeProphet, i don't wanna be an ass but you typed necessary nessicary again :) 01:11:57 -!- digital_me has quit (Read error: 110 (Connection timed out)). 01:12:12 aah... perl is broken on netbsd/macppc pkgsrc 01:12:48 Solution: don't use Perl, the only language where an unobfuscated coding contest is a challenge. 01:13:20 (Malbolge is excepted from that, on account of Malbolge not being an actual *language*) 01:13:38 it's a dependency 01:14:05 Like a crack addict? :p 01:15:51 w3m demands it 01:16:57 Solution: realise elinks > w3m. ;) 01:18:19 elinks? 01:18:30 i was going for links-gui 01:19:06 i see elinks doesn't support inline images. i'm still going for links-gui and praying. 01:19:25 (it seems unix turns one towards god) 01:19:48 That's because Unix is a diety unto itself. 01:20:14 en erratic deity 01:20:15 Although it's but a servant of the Most High Editor. ;) 01:20:28 It's Chaotic Neutral, in D&D terms. 01:21:24 i'm clueless about D&D, but i'm certain that an old-fashioned lovecraftian banishing would take care of the problematics raised. or an even more old-fashioned luddist reprogramming with an axe. 01:21:30 still, i'm bound and attached. 01:21:45 ~exec self.print_callbacks() 01:22:10 !exec class foo: pass 01:22:12 Huh? 01:22:45 ~exec exec "class foo:\n\tpass\nglobals()["foo"] = foo" 01:22:51 ~exec sys.stdout(foo) 01:23:08 ~exec exec "class foo:\n\tpass\nglobals()["foo"] = foo" in globals() 01:23:12 ~exec sys.stdout(foo) 01:23:26 ~exec exec "class foo:\n\tpass\nglobals()[\"foo\"] = foo" in globals() 01:23:39 argh 01:23:45 ~exec exec "class foo:\n\tpass\n" in globals() 01:23:49 ~exec sys.stdout(foo) 01:23:49 __main__.foo 01:23:53 yes 01:24:00 ~exec self.foo = foo() 01:24:31 ~exec self.foo.__class__.f = lambda self : bot.raw("PRIVMSG #esoteric :foo") 01:24:38 ~exec self.foo.f 01:24:45 ... 01:25:00 foo 01:25:01 ~exec sys.stdout(self.foo.f) 01:25:02 of <__main__.foo instance at 0xb7cc5f2c>> 01:25:07 ~exec self.foo.f() 01:25:08 foo 01:25:31 ~exec self.register_raw("abcd foo", self.foo.f) 01:25:47 ~exec self.save_callbacks("/bot/test.pickle") 01:25:51 ~quit 01:25:52 -!- bsmnt_bot has quit. 01:25:55 -!- bsmnt_bot has joined. 01:26:03 ~exec self.load_callbacks("/bot/test.pickle") 01:26:12 ~exec self.print_callbacks() 01:26:34 ~exec self.do_callbacks("abcd foo") 01:26:40 damn 01:27:14 -!- Sgeo has joined. 01:27:14 still doesn't work with methods not of IRCbot 01:27:17 :( 01:28:51 -!- andreou has changed nick to ka-pow. 01:29:00 -!- ka-pow has changed nick to andreou. 01:29:52 kapow! 01:29:55 ping ping ping 01:29:59 pow pow 01:31:51 -!- digital_1e_ has joined. 01:39:54 -!- digital_me_ has quit (Read error: 110 (Connection timed out)). 01:49:27 -!- CakeProphet has quit (Read error: 131 (Connection reset by peer)). 01:49:52 -!- CakeProphet has joined. 01:51:18 still drizzling, still compiling 01:54:25 and it's four am, time to faint 01:54:32 -!- andreou has quit ("as if it vanished"). 01:54:44 oh crap 01:54:57 bsmnt_bot doesn't work with private messages 01:55:25 -!- CakeProphet_ has joined. 01:56:02 My internet is still borked 02:07:47 -!- CakeProphet_ has quit (Read error: 113 (No route to host)). 02:08:09 -!- CakeProphet_ has joined. 02:08:30 -!- CakeProphet has quit (No route to host). 02:08:45 -!- CakeProphet_ has changed nick to CakeProphet. 02:26:11 -!- calamari has joined. 02:33:59 -!- ihope__ has joined. 02:35:26 -!- ihope has quit (Nick collision from services.). 02:35:28 -!- ihope__ has changed nick to ihope. 02:35:39 -!- digital_1e_ has changed nick to digital_me. 03:11:46 -!- ihope has quit (Connection timed out). 03:24:34 -!- CakeProphet has quit (Read error: 113 (No route to host)). 03:24:55 -!- CakeProphet_ has joined. 03:25:02 -!- CakeProphet_ has changed nick to CakeProphet. 04:00:19 -!- digital_me has quit ("Lost terminal"). 04:02:12 -!- digital_me has joined. 05:00:46 -!- Sgeo has quit ("Leaving"). 05:14:49 -!- pikhq has quit ("leaving"). 05:36:23 -!- digital_me has quit ("Lost terminal"). 05:53:33 -!- calamari has quit ("Leaving"). 06:23:39 -!- wooby has quit. 06:47:37 -!- ShadowHntr has quit (Read error: 110 (Connection timed out)). 07:55:23 -!- oklopol has quit (zelazny.freenode.net irc.freenode.net). 07:55:23 -!- bsmntbombdood has quit (zelazny.freenode.net irc.freenode.net). 07:55:23 -!- Sukoshi has quit (zelazny.freenode.net irc.freenode.net). 07:55:23 -!- puzzlet has quit (zelazny.freenode.net irc.freenode.net). 07:55:23 -!- sekhmet has quit (zelazny.freenode.net irc.freenode.net). 07:58:43 -!- oklopol has joined. 07:58:43 -!- bsmntbombdood has joined. 07:58:43 -!- Sukoshi has joined. 07:58:43 -!- puzzlet has joined. 07:58:43 -!- sekhmet has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:24 whooo netsplit. 08:52:08 hmmm... 08:52:13 a language without data structures. 09:45:06 BASIC. 10:07:56 -!- oerjan has joined. 10:52:25 -!- oerjan has quit ("leaving"). 13:30:42 -!- CakeProphet_ has joined. 13:31:48 -!- CakeProphet has quit (Read error: 113 (No route to host)). 13:31:52 -!- CakeProphet_ has changed nick to CakeProphet. 13:36:49 -!- tgwizard has joined. 13:46:45 -!- andreou has joined. 14:11:34 -!- oklofok has joined. 14:12:04 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 14:50:46 -!- Sgeo has joined. 14:55:29 -!- andr- has joined. 14:55:33 -!- andreou has left (?). 14:55:44 -!- andr- has changed nick to andreou. 15:01:46 -!- Sgeo has quit ("Leaving"). 15:02:06 -!- Sgeo has joined. 15:12:45 -!- tgwizard has quit (Remote closed the connection). 15:20:49 -!- Rent-A-Tard has joined. 15:22:05 Please write "John, I'm only dancing!" 15:22:19 Please write the lyrics of "John, I'm only dancing!"* 15:39:36 -!- jix has joined. 15:48:15 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 16:05:41 -!- oklofok has changed nick to oklopol. 16:28:55 -!- digital_me has joined. 16:35:03 -!- pikhq has joined. 16:53:24 so, 16:53:37 is there still a cat's eye or any other esolang-related website? 16:56:33 http://esolangs.org/wiki/Main_Page 16:57:01 thanks 17:15:48 -!- digital_me has quit ("Lost terminal"). 17:19:16 Please write the lyrics of "John, I'm only dancing!"* 17:19:27 Why isn't this working? Please tell me why ;) 17:28:50 hm 17:29:35 maybe my last comment in http://esolangs.org/wiki/Talk:IRP should be taken into consideration 17:35:23 Join #irp. 17:36:34 !bf +[.+] 17:36:39 17:37:11 -!- EgoBot has quit (Excess Flood). 17:37:23 -!- EgoBot has joined. 17:37:54 !bf +[>.+<-] 17:38:33 !bf ++++++. 17:38:36 17:38:46 !bf +++++++++++++++++++++. 17:38:49 17:39:04 nice 17:39:20 Learning Brainfuck? 17:40:16 -!- ihope has joined. 17:40:45 yeah 17:40:48 !bf ++++++++++++[>+++++++>+++++++++>+++>+++++++++<<<<-]>.>----.---.>----.>++++.<<----.>>+++..++++.--------.+++.<<+++.>[>>++>+<<<-]>>------.>.++.<<<<+.>>-----.++.>>. 17:40:51 The password: "emo" 17:40:55 yay! 17:40:56 :D 17:41:16 -!- Rent-A-Tard has changed nick to Rent-A-WAY-Tard. 17:48:22 There, think that'll stop the Talk:Piet-Q spambots? 17:50:42 It's worth a shot, anyway. 17:57:24 * pikhq hugs BFM some more. . . 18:06:40 -!- andreou has quit ("BitchX-1.1-final © 1996-2000 Colten Edwards"). 18:10:20 -!- tgwizard has joined. 18:28:39 -!- calamari has joined. 18:48:49 -!- jix has joined. 18:54:09 Ugh. . . 18:54:17 * pikhq sees Calamari, the Squid Boy. 18:54:57 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 18:56:17 -!- andreou has joined. 18:57:10 -!- oerjan has joined. 18:57:46 hi pikhq 19:28:42 -!- andreou has quit ("[BX] Reserve your copy of BitchX-1.1-final for the Nintendo 64 today!"). 19:29:22 -!- jix__ has joined. 19:51:46 -!- andreou has joined. 20:00:26 -!- RodgerTheGreat has joined. 20:08:35 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 20:15:00 -!- jix__ has joined. 20:29:30 -!- Sph1nx has joined. 20:35:42 -!- Sph1nx has quit ("äÏ Ó×ÉÄÁÎÉÑ ×ÓÅÍ!"). 21:00:08 -!- jix__ has quit (Read error: 110 (Connection timed out)). 21:04:21 -!- jix__ has joined. 21:35:50 -!- Rent-A-WAY-Tard has changed nick to Rent-A-Tard. 21:35:56 gimme junkfood. 21:36:27 * oerjan scrapes something out of the garbage can. 21:36:41 * RodgerTheGreat sprinkes on some soy sauce 21:38:44 Eats it all. 21:38:47 Thank you :) 21:39:02 You're welcome. 21:40:33 * bsmntbombdood smells blood 21:40:54 No no, no blood, just entrails. 21:41:10 ~ctcp #esoteric ACTION uses /me 21:41:11 * bsmnt_bot uses /me 21:42:04 And _possibly some strange fungi. 21:42:22 there's fungus among us! 21:42:47 Is it humongous? 21:43:10 I could've sworn the fungus in the trash was gone- I saw a huge mound of slime mold crawl away a couple days ago. 21:43:44 although I'm not entirely certain that should be reassuring. 21:45:52 I told it to find some other slime to hang out with. 21:46:46 ~~~~~~~~~~~~~~~~~~~~~~~~~~exec self.raw("") 21:46:51 ~exec self.raw("") 21:46:57 damnit. it probably came back, then. 21:47:18 No no, I saw it head towards the courthouse. 21:47:23 ~exec self.raw("PRIVMSG #esoteric :this is a boring saturday") 21:47:24 this is a boring saturday 21:47:28 -!- digital_me has joined. 21:47:35 hi, digital_me 21:48:43 * bsmnt_bot prods digital_me 21:49:38 EgoBot do you have a manual? 21:49:56 !help 21:49:59 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 21:50:01 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 21:50:38 !help help 21:50:40 !ps d 21:50:41 Use: help [command] Function: displays help on a command, or lists commands 21:50:43 1 oerjan: ps 21:50:50 !help bf_txtgen 21:50:53 Use: bf_txtgen Function: use textgen.java with 1000 generations to generate an efficient BrainFuck text generator. 21:51:04 !daemon cat lazyk i 21:51:08 While parsing "./tmp/daemon.cat": Invalid character! 21:51:08 !cat Testing 21:51:09 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 21:51:19 -!- EgoBot has joined. 21:51:22 Darn 21:51:28 you killed the bot, you bastard 21:51:40 nah, it takes to to fake southpark 21:51:43 ~exec self.register_raw(r"\S+ PRIVMSG (\S+) :~help", lambda x, y: bot.raw("PRIVMSG %s :no one can help you" % y.group(1))) 21:51:46 ~help 21:51:47 no one can help you 21:52:00 We do that all the time. I guess we should name it Kenny. 21:52:02 :) 21:52:18 !bf_textgen a shorty 21:52:20 Huh? 21:52:45 I don't know why it didn't accept that lazyk program. 21:52:49 !bf_txtgen shorty 21:52:56 ~exec self.save_callbacks("/bot/test.pickle") 21:53:08 !help ps 21:53:10 Use: ps Function: display the current processes 21:53:26 66 +++++++++++++[>+++++++++>++++++++>><<<<-]>--.>.<----.+++.++.+++++. [810] 21:53:41 !ps 21:53:43 1 andreou: ps 21:53:49 I see it doesn't mention the d option to ps. 21:54:05 !exec sys.stderr(open("/bot/test.pickle").read()) 21:54:07 Huh? 21:54:12 ~exec sys.stderr(open("/bot/test.pickle").read()) 21:54:18 !bf_txtgen bereshith bara elohim eth ha-shamayim ve-eth ha-aretz 21:54:36 !ps 21:54:37 1 andreou: bf_txtgen 21:54:39 2 andreou: ps 21:54:56 What's a good rate limiting algorithm for my bot? 21:55:07 rate limiting? 21:55:21 so it doesn't send too fast 21:55:24 Well, you could use the limit in the original IRC RFC I guess: 21:55:41 and excess flood and die 21:55:51 Max 1 message every other second. 21:56:03 well dcc doesn't flood 21:56:06 that's not very many messages 21:56:08 (1/2) 21:56:17 364 ++++++++++++++[>++++++++>+++++++>++++++++>++<<<<-]>>.+++.>++.<.<+++.>+++.>---------.<<+.>.>>++++.<-------.-.<<--.>>.>.<++++.<++++.+++.>+++.+.<--.>>.<<--------.<++.>+++.>>.<-.-------.>+++++++++++++.<<<-.>.>.<<------.>>.<<++++++++++++.>+.++++.>>-------------.<<<---.>>++++.>+++++++++++++.<.<+++++++.>+++.>-------------.<.-------.>+++++++++++++.<.<--.>++++.<++.<++++. [861] 21:56:35 But with a 10 second leeway. 21:56:36 hell, i wish i had GPM so i could c&p the code 21:56:38 ~ps 21:56:39 0: 'sys.stderr(open("/bot/test.pickle").read())', 146.41 seconds 21:56:42 ~kill 0 21:56:48 ~ps 21:56:49 None 21:56:53 yay, it worked 21:57:40 right now IRCFileWrapper does "if lines_sent > 3: time.sleep(lines_sent/10.)" 21:59:41 What're you discussing? 22:00:03 I love crashing EgoBot 22:00:04 I'll change it to time.sleep(max([lines_sent/10., 2]) 22:00:07 Rent-A-Tard: my bot 22:00:23 !bf +[.+] 22:00:26 22:00:28 Ahh 22:00:40 What is it supposed to do? 22:00:52 nothing except execute python, right now 22:00:58 -!- EgoBot has quit (Excess Flood). 22:01:02 s/nothing/nothing but/ 22:01:09 er 22:01:11 A 22:01:13 -!- EgoBot has joined. 22:01:14 •a 22:01:19 a 22:01:42 !bf +[.+] 22:01:46 22:01:49 Rent-A-Tard: you can execute some python code with "~exec $code" 22:02:18 -!- EgoBot has quit (Excess Flood). 22:02:19 !ps d 22:02:25 Whoops 22:02:33 -!- EgoBot has joined. 22:02:36 !ps d 22:02:40 is it the +[.+]? 22:02:41 1 oerjan: ps 22:02:49 Yep. 22:02:51 andreou: yeah 22:02:58 well, let's stop it then. 22:03:10 ~exec while True: self.raw("") 22:03:10 -!- bsmnt_bot has quit (Excess Flood). 22:03:11 Note that the default bf is the 16-bit one, I believe. 22:03:14 ~ps help 22:03:15 ^^ 22:03:36 heh 22:03:39 !daemon cat lazyk -e i 22:03:42 -!- bsmnt_bot has joined. 22:03:42 While parsing "./tmp/daemon.cat": Invalid character! 22:03:47 !bf +[.+] 22:03:51 22:03:53 goddamn, what the hell has bush to do with ecology and, more importantly, on my radio? 22:04:01 ~exec while True: self.raw("") 22:04:02 -!- bsmnt_bot has quit (Excess Flood). 22:04:04 -!- bsmnt_bot has joined. 22:04:07 that's fun :) 22:04:09 Gah, just doesn't work. 22:04:14 Rent-A-Tard comeon, stop it. it beeps every time i switch to this screen 22:04:22 -!- EgoBot has quit (Excess Flood). 22:04:33 -!- EgoBot has joined. 22:04:37 okay 22:04:47 !daemon cat ,[.,] 22:04:53 I'll design something else 22:05:02 !cat Let's do it the usual way. 22:05:04 !bf ++++++++++++[>+++++++>+++++++++>+++>+++++++++<<<<-]>.>----.---.>----.>++++.<<----.>>+++..++++.--------.+++.<<+++.>[>>++>+<<<-]>>------.>.++.<<<<+.>>-----.++.>>. 22:05:06 Huh? 22:05:10 The password: "emo" 22:05:11 I just wrote that up... 22:05:16 Yay! 22:05:19 It works! 22:05:27 !daemon cat bf ,[.,] 22:05:36 !cat Now then. 22:05:37 ~exec for i in xrange(1000): sys.stderr(i) 22:05:38 Now then. 22:05:50 -!- bsmnt_bot has quit (Excess Flood). 22:05:52 -!- bsmnt_bot has joined. 22:05:53 finally 22:06:01 it took 10 messages 22:06:11 s/10/11/ 22:07:20 You should also do a test with a sleep in it. 22:07:31 ...? 22:07:36 go ahead 22:08:01 !bf 22:08:01 >++>+++++[<[<++>-]<[>+<-]>>-]<<. 22:08:37 !bf >++>+++++[<[<++>-]<[>+<-]>>-]<<. 22:08:40 oops 22:08:42 I don't know the Python syntax for sleep. Or the unit. 22:08:52 !bf >++>+++++[<[<++>-]<[>+<-]>>-]. 22:08:55 !bf >++>+++++[<[<++>-]<[>+<-]>>-]<. 22:08:58 @ 22:09:03 IRCFileWrapper.write had a sleep(.2) in it 22:09:06 ~quit 22:09:06 -!- bsmnt_bot has quit (Client Quit). 22:09:08 -!- bsmnt_bot has joined. 22:09:10 ~exec for i in xrange(1000): sys.stderr(i) 22:09:11 -!- bsmnt_bot has quit (Excess Flood). 22:09:13 -!- bsmnt_bot has joined. 22:09:16 !bf >+++>+++++[<[<++>-]<[>+<-]>>-]<. 22:09:20 ` 22:09:21 that only took 3 messages 22:09:55 ~exec for i in xrange(1000): sys.stderr("\n" * i) 22:09:58 Not reliable then. 22:10:09 ~ps 22:10:10 None 22:10:12 !bf >+>+++++[<[<++>-]<[>+<-]>>-]<. 22:10:14 ~exec for i in xrange(1000): sys.stderr("a\n" * i) 22:10:14 22:10:35 -!- ShadowHntr has joined. 22:10:40 !bf >+++>++++[<[<++>-]<[>+<-]>>-]<. 22:10:42 ~kill 0 22:10:44 0 22:10:46 !bf >+++>++++[<[<++>-]<[>+<-]>>-]. 22:10:50 ~ps 22:11:04 erm 22:11:05 !bf >+++>++++[<[<++>-]<[>+<-]>>-]<<. 22:11:13 None 22:11:28 Hmm... 22:11:35 ~exec for i in xrange(1000): sys.stderr(("%s\n" % i) * i) 22:11:39 !bf >+++>++++[<[<++>-]<[>+<-]>>-]<<. 22:11:47 !daemon lion lazyk 22:11:55 !lion Testing 22:11:58 Huh? 22:12:42 The lazyk setup is broken. 22:12:58 well, my rate limiting works so far 22:13:02 up to 9 lines 22:14:07 My timing suggestion was to find out how quickly you can spam continuously :) 22:14:14 * pikhq recommends Rent-A-Tard play with BFM. . . 22:14:16 3 messages 22:14:23 oh 22:14:27 ~ps 22:14:29 It's a very good method for making complex Brainfuck programs. ;) 22:14:42 http://pikhq.nonlogic.org/bfm.tar.bz2 22:14:45 ~kill 0 22:14:49 (end shameless plug) 22:14:57 oerjan: it's hard to know for sure.. sometimes messages get delayed then you get a flood 22:15:14 -!- bsmnt_bot has quit (Remote closed the connection). 22:15:17 -!- bsmnt_bot has joined. 22:15:54 ~exec for i in xrange(1000): self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i ) 22:15:55 -!- bsmnt_bot has quit (Excess Flood). 22:15:57 -!- bsmnt_bot has joined. 22:16:03 ~exec for i in xrange(1000): self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:16:03 -!- bsmnt_bot has quit (Excess Flood). 22:16:06 -!- bsmnt_bot has joined. 22:16:08 weird 22:16:16 no messages even got sent to the channel 22:16:28 ~exec for i in xrange(1000): time.sleep(.1); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:16:35 -!- bsmnt_bot has quit (Excess Flood). 22:16:37 -!- bsmnt_bot has joined. 22:16:39 8 22:16:45 ~exec for i in xrange(1000): time.sleep(.2); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:16:57 -!- bsmnt_bot has quit (Excess Flood). 22:17:00 -!- bsmnt_bot has joined. 22:17:00 11 22:17:04 ~exec for i in xrange(1000): time.sleep(.3); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:17:24 -!- bsmnt_bot has quit (Excess Flood). 22:17:26 -!- bsmnt_bot has joined. 22:17:27 14 22:17:37 ~exec for i in xrange(1000): time.sleep(.4); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:18:05 -!- bsmnt_bot has quit (Excess Flood). 22:18:08 -!- bsmnt_bot has joined. 22:18:11 19 22:18:31 aaw, it was looking like a nice additive sequence there 22:18:37 ~exec for i in xrange(1000): time.sleep(.5); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:19:05 Well it shouldn't be, after all _some_ sleep should allow it to continue indefinitely. 22:19:14 -!- bsmnt_bot has quit (Excess Flood). 22:19:16 yeah 22:19:17 -!- bsmnt_bot has joined. 22:19:22 that was 23 22:19:29 ~exec for i in xrange(1000): time.sleep(.7); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:20:28 -!- bsmnt_bot has quit (Excess Flood). 22:20:30 -!- bsmnt_bot has joined. 22:20:32 34 22:20:38 ~exec for i in xrange(1000): time.sleep(.9); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:20:45 Nice and linear... 22:21:06 I guess 46 :) 22:22:07 -!- bsmnt_bot has quit (Excess Flood). 22:22:10 -!- bsmnt_bot has joined. 22:22:12 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:22:13 49 22:22:20 Hmm.. 22:22:26 ~exec for i in xrange(1000): time.sleep(1.1); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:24:34 -!- bsmnt_bot has quit (Excess Flood). 22:24:37 -!- bsmnt_bot has joined. 22:26:26 68 22:26:33 ~exec for i in xrange(1000): time.sleep(1.5); self.raw("PRIVMSG #bsmnt_bot_errors :%s" % i) 22:27:35 btw does python still have a lambda or was it removed? 22:27:43 still does 22:31:32 Is Python still not a Lisp? 22:31:41 -!- bsmnt_bot has quit (Excess Flood). 22:31:44 -!- bsmnt_bot has joined. 22:31:51 158 messages 22:32:36 * bsmntbombdood can't remember the way to use and/or as if/else 22:33:12 (x and y) or z 22:33:19 y is false 22:33:37 (x and (y or True)) or z 22:33:55 then y doesn't get returned 22:35:15 hmmm 22:35:31 oh, i know, i can reverse my conditions 22:36:00 Python has conditional expressions. 22:36:31 Only in 2.5, and that's lame 22:37:40 ~quit 22:37:41 -!- bsmnt_bot has quit. 22:37:43 -!- bsmnt_bot has joined. 22:37:50 now the rate limit is adjustable 22:38:18 ~exec sys.stdout("foo") 22:38:18 foo 22:38:33 ~exec sys.stdout("foo\n") 22:38:33 foo 22:38:36 good 22:38:42 [(lambda : y),(lambda : z)]((x and 1) or 2)-1)() 22:39:15 hot damn! 22:39:22 and oerjan takes the prize! 22:39:31 For extreme situations :) 22:39:48 except the syntax isn't quite right 22:40:42 !exec sys.stderr("Obey me!") 22:40:46 Huh? 22:40:51 ~exec sys.stderr("Obey me!") 22:40:56 You know what I mean. 22:41:03 pikhq: sys.stdout goes here 22:41:13 bsmntbombdood: And sys.stderr goes nowhere. 22:41:26 no, sys.stderr goes the #bsmnt_bot_errors 22:41:32 Ah. 22:42:51 I forgot a (, what else? 22:42:58 oerjan: [(lambda : y),(lambda : z)][((x and 1) or 2) - 1]() 22:43:16 is what it should be 22:43:38 very clever 22:44:28 you could probably take out the lambdas though 22:44:42 [y,z][((x and 1) or 2) - 1] 22:44:59 Not if you want it to short-circuit the y and z expressions. 22:45:08 right 22:46:39 I just switched my condition and did self.rate_limit = rate_limit or (lambda x : (x > 3 and min([(x-2)/10., 2])) or 0) 22:47:44 good old lisp :/ 22:47:46 Yes, the sledgehammer is only needed if both branches can be false. 22:47:50 (if x y z) 22:48:29 no need for this crazyness 22:58:26 -!- Rent-A-Tard has quit (Read error: 131 (Connection reset by peer)). 23:00:47 -!- pmhaddad has joined. 23:01:26 -!- pmhaddad has left (?). 23:02:59 -!- wooby has joined. 23:22:21 FOOO 23:24:03 BAR 23:24:22 BAZ 23:24:39 QUX 23:25:08 EGGS 23:25:23 YOU BORK THE PATTERN 23:25:30 MAYONAISE 23:26:10 * pikhq thinks of a way to get target-language specific implementations of macros in BFM. . . 23:26:27 there's more than one target language? 23:26:41 My personal build targets C, Tcl, and Brainfuck. 23:26:54 (the interpreter just compiles to Tcl and executes that) 23:27:08 Well, that's not *entirely* true. 23:27:19 I should write a compiler 23:27:35 It compiles to a simplified BFM subset, which can be interpreted by a Tcl interpreter with the right procs in place. 23:29:52 What language should I write a compiler for 23:29:59 BFM. 23:30:23 Homespring. 23:30:37 Homespring? 23:30:57 A very fishy language. 23:31:04 Indeed. 23:32:50 Compile Homespring to BFM! 23:33:08 ,powers< 23:33:14 Or maybe just make a Brainfuck interpreter in Homespring. 23:33:29 (it has yet to be proven Turing complete) 23:33:36 how about a homespring interpreter in BF? 23:33:53 That's less evil. 23:34:01 you'd have to build some tricky data structures to do it properly 23:34:23 But at least it's *possible*. 23:34:24 has anyone made a good tree implementation in BF? 23:34:51 Implementing any Turing complete language in Homespring may very well be impossible. 23:34:53 ooh. they'd be *trivial* in Def-BF 23:34:53 I want a language that's more than turing complete 23:35:21 There are a few on the wiki. 23:35:37 bsmntbombdood: You want an oracle machine? 23:35:44 WHat's that? 23:35:48 the only problem is that they tend to lack implementation 23:35:58 bsmntbombdood: it isn't a machine, I'll tell you that 23:36:30 It's like a Turing machine, except it's got an oracle for telling the Turing machine the solution to a certain set of problems that are unsolvable by a Turing machine. 23:36:36 It would be possible to simulate it though, wouldn't it? 23:36:53 bsmntbombdood: no. that's the entire point. 23:36:59 For example, consider a Turing machine with a halting oracle. 23:37:05 an oracle cannot be a deterministic device. 23:37:17 This oracle could tell the machine if a certain program halts. 23:37:23 The machine itself could *not*. 23:37:46 can an x86 proccesor be implemented in a turing machine? 23:38:03 of course 23:38:14 but an x86 processor can't be an oracle 23:38:18 There are some uses of oracles in complexity theory where you put an oracle on a machine _weaker_ than Turing-complete. Then the result may still be implementable. 23:38:18 bsmntbombdood: Of course. An x86 processor is, after all, Turing complete (with the exception of addressing restrictions). 23:38:40 pikhq: An oracle machine is turing complete, but a turing machine can't implement it 23:39:02 it's not just turing complete, it's *super*-turing 23:39:11 bsmntbombdood: An oracle machine is super-Turing. 23:39:25 Well I was thinking that a normal proccesor might be more than turing complete 23:39:29 I'm listing the largest computational class that each machine is a member of. 23:39:52 A normal CPU's capabilities are a *subset* of the Turing machine's. 23:39:57 bsmntbombdood: you may not completely understand the meaning of turing-completeness 23:40:12 I might not 23:40:27 bsmntbombdood: A turing-complete system can calculate anything that can be described as a deterministic algorithm. 23:40:27 I'd advise you to read up on it- the wiki article on the subject is fascinating reading 23:41:57 pikhq: Then I understand the meaning of turing completeness 23:42:04 this is what Alan turing had to say about oracles- "Let us suppose that we are supplied with some unspecified means of solving number-theoretic problems; a kind of oracle as it were. We shall not go any further into the nature of this oracle apart from saying that it cannot be a machine" (Undecidable p. 167, a reprint of Turing's paper Systems of Logic Based On Ordinals)." 23:42:42 RodgerTheGreat: His thoughts were not entirely correct. 23:42:54 in what sense? 23:42:55 A quantum oracle could, in fact, be a machine. 23:43:04 The same for a real-RNG oracle. 23:43:25 quantum operations have not been *proven* to be non-deterministic. 23:43:34 A quantum computer is not super-Turing as far as we know. 23:43:46 Non-determinism is not enough for super-Turing. 23:43:59 But my point for real-RNG oracles? 23:44:11 oerjan: but it is at the very least a requisite for creating an oracle 23:44:51 Near as I can fathom, real RNGs could not be created via a deterministic algorithm. 23:45:23 Oracles are in fact deterministic by the usual definition: They always give the same answer to the same question. 23:45:33 which would further imply that they could not be created via a deterministic system 23:46:55 if a machine always gave the same answer to the same question, then it would be deterministic in the sense that it's behavior was governed by a predictable system 23:47:40 oerjan: A RNG oracle wouldn't be deterministic. 23:48:03 It wouldn't always give the same answer to the question "What is a random number I could use?". 23:48:50 However, a RNG oracle would not increase a Turing machine's ability to solve problems with well-definite answers. 23:49:26 that's because it's an entirely different kind of device 23:49:32 It wouldn't increase the ability to solve *deterministic* algorithms, but it would give the ability to solve some *nondeterministic* algorithms. 23:49:43 Because a Turing machine always has the option of calculating _all_ possible paths. 23:49:43 but both are examples of a super-turing machine 23:50:17 Since it can do something a plain ol' Turing machine can't, it is, by definition, super-Turing. 23:50:36 I suppose. 23:51:00 I'm just pointing out that random oracles and halting oracles are seperate types of devices 23:51:39 RodgerTheGreat: They differ in that one could be built, and another could *not*. 23:51:39 a random oracle won't help you solve the halting problem, but it *can* do something a turing machine can't 23:51:50 Can't you solve the halting problem by just running it? 23:52:11 bsmntbombdood: The halting problem has been proven to not be solvable by a Turing machine. 23:52:24 No, because the Turing machine needs to halt with an answer, even if the program doesn't. 23:52:37 oh, right 23:52:40 you can solve the halting problem in limited instances. You cannot solve the halting problem for a nontrivial program in a nontrivial amount of time 23:53:27 In addition, a Turing machine with a halting oracle can't solve the halting problem for any arbitrary algorithm running on itself. 23:54:12 in a pure functional language, can the compiler easily (not NP complete) determine the inverse of a function? 23:54:30 that would require a more powerful oracle, resulting in an infinite regression- rather like the homonculus theory of consciousness. 23:55:18 bsmntbombdood: Not easily, no. 23:55:27 an oracle can't solve the halting problem for a machine incorporating itself, but it may be able to solve the halting problem for another oracle. 23:55:56 And the pure functionality hasn't really got anything to do with it. 23:56:09 oerjan: yeah it does 23:56:13 RodgerTheGreat: Exactly. 23:56:14 Apart from the function you are taking inverses of, I presume. 23:56:18 it would be impossible to do in a function with side effects 23:56:33 s/in a/for a/ 23:57:47 I can come up with an example of a pure function that is uninvertable at all. ;) 23:57:56 Are we assuming that the function is one-to-one? If not then I believe finding an inverse of a polynomial-time function is in fact at least NP-complete. 23:58:01 mod10(x) returns x mod 10. 23:58:24 pikhq: not one to one 23:58:31 If it is one-to-one then it may be somewhat simpler than NP-complete, I believe that is an unsolved problem. 23:58:42 bsmntbombdood: I'm not thinking ATM. . . 23:58:49 The inverse could be a set for not one to one functions though 23:59:27 I came upon that issue on Wikipedia when investigating Sudoku. (In a sense the article there is subtly wrong) 2007-01-14: 00:00:08 Well, showing that an inverse _exists_ for a point is precisely NP-complete. 00:00:25 Finding _all_ inverses may be more than NP-complete. 00:00:55 Can't it do it the math way? 00:01:36 (All this assuming that the original function is polynomial-time, otherwise you would need N-something else. 00:02:53 bsmntbombdood: Sure, if the function is invertable. 00:03:40 aren't all pure functions invertable? 00:03:51 assuming you can return a set for non-one to one functions 00:04:02 Of course not. There are _constant_ functions! 00:04:39 return the set of all possible inputs, then 00:04:54 OK then. That is the inverse as a relation. 00:04:54 use minimal executation or whatever haskell calls it 00:04:59 The inverse would, obviously, not be a function. ;) 00:05:40 Lazy. It won't help in the least. As I say, determining whether the inverse set is non-empty _is_ NP-complete if the original function is in P. 00:06:29 I mean, for general P functions. Not every single one, of course. 00:07:32 Hmm, there is a subtlety there. 00:08:06 It could in fact be worse, if the inverses may be much larger than the function value. 00:08:16 -!- wooby has quit. 00:10:31 What you are asking in essence boils down to whether purely functional languages can easily solve NP-complete problems (the answer being no). 00:11:50 On the other hand, a purely functional language will allow you to write easily down an expression for the inverse. It's just not going to execute very fast. 00:14:12 You might want to read the recent Good Math/Bad Math blog thread about P/NP. The issue of defining NP by checking answers is very relevant to your question. 00:15:10 Enough spamming :) 00:17:24 hmph 00:18:05 Shouldn't you be able to do it algebraicly? 00:18:48 But solving boolean equations is NP-complete. 00:19:45 What do you mean boolean equations? 00:20:19 Equations using True, False, and, or, not. 00:20:33 hrm 00:22:01 Put it another way: When you "simplify" algebraic equations, in numbers or booleans, the expressions can blow up exponentially in size. 00:23:26 Just try to write out (a+1)(b+1)(c+1)...(z+1) using the distributive law... 00:23:46 yeah 00:24:20 If they didn't, then you would have an easy proof of P=NP. 00:25:40 Next I get asked to solve an equation in math class i'll say that it's NP and NP is too hard 00:25:43 :P 00:25:59 Heh :) 00:26:40 In fact if you were to ask for _integer_ solutions to your equations then it would not be just NP, but Turing-complete. 00:27:09 heh, a language based on it 00:30:39 I should write some kind of interpreter for my calculator 00:44:22 * bsmntbombdood feels like learning haskell 00:44:45 what's a good tutorial? 00:44:53 all the useless things we do with our time 00:47:29 Check out www.haskell.org 00:47:55 I see they have changed their main page style since last I was there... 00:48:42 * bsmntbombdood reads http://www.cs.utah.edu/~hal/docs/daume02yaht.pdf 00:49:11 mercury caused many revamps last year 00:50:01 mercury? on the haskell wiki? 00:50:20 -!- ihope has quit (Read error: 110 (Connection timed out)). 00:50:28 mercury, in the skies 00:50:34 lazy evaluation sounds really neat 00:51:35 It is, although it has some bad effects such as it being very hard to reason about memory use. 00:53:31 Are we talking astronomy or astrology? 00:54:24 Yes. 00:54:57 Now that clears it up. 00:55:25 astrology, of course, couldn't be any other way in #esoteric 00:55:47 Well it could be mythology too. 00:56:01 man, it's not a /myth/ 00:56:12 Religion then. 00:56:28 i have hard facts & proofs 00:57:06 ("my guru said so") 00:57:11 And, more importantly and what confused me initially, it could have been the programming language Mercury, a logic language with much inheritance from Haskell. 00:57:23 ah curious coincidence 00:57:34 Syncronicity! 00:57:39 btw has anyone managed to get goedel to work? or, at least, steal its gramar and re-implement it? 00:57:42 There are no coincidences :) 00:57:50 *grammar 00:58:35 Haven't looked at that. 00:59:30 gah 00:59:40 no parentheses in haskell bugs me 00:59:53 You can add parentheses all you want :) 00:59:57 I know 01:00:08 sqrt 4*2 => 4.0 01:00:11 But I tend to get rid of as many as possible, using $ 01:00:16 that just doesn't make sense 01:00:26 oerjan: I don't know what $ is 01:00:37 Ah for functions. 01:00:51 You will note that math does the same for sin and cos. 01:01:26 Well, sqrt $ 4*2 => 2.8... 01:02:31 When you want to apply a function to something complicated, you can use $ instead of spaces. 01:02:45 does anything bind more tightly than function application? 01:03:06 -!- bsmntbombdood has left (?). 01:03:09 -!- bsmntbombdood has joined. 01:03:17 oops 01:03:19 The @ pattern match operator, which is considered a bug by some. 01:04:07 And of course brackets. 01:04:42 http://haskell.org/onlinereport/exps.html 01:05:24 Actually the @ doesn't really occur in expressions, but patterns. So for expressions, no. 01:05:48 "f1 f2 x" ends up as "f1(f2, x)" right? 01:06:20 and "f1 $ f2 x" ends up as "f1(f2(x))" 01:06:39 More or less. 01:07:11 Although f1(f2, x) in Haskell is something different. 01:08:18 There are functions curry and uncurry to convert between f1 x y and f1 (x,y) 01:10:12 Actually there are various things that bind more tightly than application but they all involve brackets somehow. 01:23:49 -!- andreou has quit ("-"). 01:24:12 -!- ihope has joined. 01:25:45 ooh pretty 01:25:52 Pretty? 01:26:02 foldr max 0 list 01:26:06 That reminds me of some electronics thing I wanted to do for some reason. 01:26:52 maxlist l = foldr max 0 l 01:27:10 foldr max l ? 01:27:10 Pretty, but a bit buggy if the list has only negative elements. 01:27:16 foldr2 max l 01:27:30 isn't there something like that? 01:27:49 oerjan: yeah 01:27:52 foldr1? 01:28:00 maybe 01:28:22 It's foldr1 01:28:55 seems i don't remember everything anymore :\ 01:29:23 but, wouldn't be buggy that way 01:29:42 Except for an empty list. Can't have everything :) 01:29:57 would it crash then? 01:30:18 maxlist [] => 0 01:31:02 foldr1 would crash, yes. 01:31:05 maxlist l = foldr1 max l 01:31:08 yeah 01:31:29 i don't know haskell syntax well enought to do an if :) 01:31:49 but i think i remember all the functions there are 01:31:51 in-built 01:32:20 not by name tho 01:32:26 foldr2 lol 01:33:24 -!- wooby has joined. 01:33:56 Of course, maximum is itself a builtin, using foldr1. 01:39:51 of course, I only know of like 5 builtins 01:39:55 :P 01:41:29 hmph, emacs doesn't indent haskell very well 01:44:26 Haskell's indentation is very flexible, but it interacts with other tokens in such a way that emacs would need a complete parser to understand it. 01:47:30 Someone write a complete parser in Elisp, then. 01:47:42 The indentation system is flexible enough to handle it. 01:50:17 so, should one use "f $ -1" or "f (-1)"? 01:50:40 The latter I assume. 01:51:30 -!- andreou has joined. 01:52:48 $ is best for avoid many nested parentheses (although I use it a bit more than that). For example instead of f1 (f2 1 (f3 y z (f4 x))) you can have f1 $ f2 1 $ f3 y z $ f4 x 01:52:58 *avoiding 01:53:51 Is f $ -1 valid? 01:53:59 When you want to chain many functions. 01:54:11 I am pretty sure it is. 01:54:45 Yes it is. 01:54:47 Seems to be valid, yes. 01:56:43 While reading this tutorial, i'm crying at all the ineficientness 01:57:15 Like? 01:57:52 A recursive definition of filter 01:58:15 What's inefficient about that? 01:59:20 Note that if it is tail recursive the recursion may be optimized away. 01:59:57 tail recursion modulo cons? 02:01:04 I believe the ghc compiler optimizes away certain kinds of immediately used conses. 02:01:16 Then I guess it's not that bad 02:03:50 my_filter f [] = [] 02:03:55 my_filter f (x:xs) = if f x then x:my_filter f xs else my_filter f xs 02:06:48 filter_reverse f xs = filter_reverse' f xs rs; filter_reverse' _ [] rs = rs; filter_reverse' f (x:xs) rs | f x = filter_reverse' f xs (x:rs); filter_reverse' f (x:xs) rs | otherwise = filter_reverse' f xs rs 02:08:46 -!- digital_me has quit (Read error: 104 (Connection reset by peer)). 02:08:48 filter_reverse f xs = filter_reverse' f xs []; should be the beginning? 02:10:03 someone please explain if not :\ 02:10:19 You don't need to repeat the function before a second guard. 02:10:29 oklopol: I think so too. 02:10:53 oklopol: yes, it should be. 02:11:13 Or just say rs = [] :-) 02:13:32 -!- tgwizard has quit (Remote closed the connection). 02:27:12 Now, bsmntbombdood, I take it there's a reason you haven't cloaked your bot. 02:27:34 !exec self.raw("JOIN #tapthru") 02:27:38 Huh? 02:27:41 ... 02:27:43 ~exec self.raw("JOIN #tapthru") 02:33:12 ~exec self.disconnect() 02:33:23 ~exec self.disconnect 02:33:57 ~exec self.raw("PART #tapthru") 02:35:22 ~exec self.raw("QUIT :Resetting") 02:35:23 -!- bsmnt_bot has quit ("Resetting"). 02:35:26 -!- bsmnt_bot has joined. 02:37:46 -!- ShadowHntr has quit (Read error: 110 (Connection timed out)). 02:38:07 ~exec self.raw("QUIT :Resetting") 02:38:07 -!- bsmnt_bot has quit (Client Quit). 02:38:10 -!- bsmnt_bot has joined. 02:38:17 Wonderful. 02:39:10 Except for some reason it gave a quit message different from what you wrote... 02:40:11 ~exec self.raw("QUIT :Oooh! Oooh!") 02:40:12 -!- bsmnt_bot has quit (Client Quit). 02:40:14 -!- bsmnt_bot has joined. 02:40:31 Someone pull up the RFC. 02:40:32 Weird... 02:40:47 ~exec self.raw("QUIT :Now what?") 02:40:47 -!- bsmnt_bot has quit (Client Quit). 02:40:49 -!- bsmnt_bot has joined. 02:41:08 ~exec self.raw("QUIT") 02:41:09 -!- bsmnt_bot has quit (Client Quit). 02:41:11 -!- bsmnt_bot has joined. 02:41:23 ~exec self.raw("JOIN #gnu") 02:41:28 ihope used exactly the same command as I the first time, with different result. 02:41:39 ~exec self.raw("PRIVMSG #gnu :Foo.") 02:41:41 And now no messages are passed on. 02:41:52 ~exec self.raw("PART #gnu") 02:42:02 Can you say "bot abuse"? 02:42:08 ~exec self.do_exec = None 02:42:14 Yes. 02:42:27 ~exec self.raw("QUIT :Now what?") 02:42:28 -!- bsmnt_bot has quit (Client Quit). 02:42:30 -!- bsmnt_bot has joined. 02:42:32 Darn. 02:42:43 ~exec self.exec_execer = 3 02:42:56 ~exec 3 02:42:57 ~exec self.raw("QUIT :Now what?") 02:43:11 ~exec This is my apple. 02:43:35 ~quit 02:43:39 Meh. 02:43:49 Um. 02:43:50 ~exec self.raw("PRIVMSG #esoteric :Goodbye.") 02:43:59 Success! 02:44:11 !exec self.exec_execer = self 02:44:14 Huh? 02:44:18 ~exec self.exec_execer = self 02:44:19 -!- Plouj- has joined. 02:44:27 Wow, you made Plouj- join. 02:44:30 We have saved the bot from the evil villains :) 02:44:42 Indeed. 02:44:49 You've also killed all legitimate uses. 02:45:19 What's the command to make it quit, again? 02:45:21 ~raw QUIT 02:45:35 ~pexec self.raw("QUIT") 02:45:44 you guys must be really old, eh 02:45:51 ~cat Foo. 02:45:56 If 14 years old is really old... 02:46:02 I fear you've *really* destroyed it. 02:46:02 I believe ~exec is the only one that we could use. 02:46:14 14?! 02:46:25 bsmntbombdood: You might want to restart the bot. 02:46:35 That was the idea. Otherwise one of us would just have been tempted to do something evil again. 02:46:50 -_-' 02:46:59 We had to kill the bot to save it. 02:47:08 How ironic. 02:47:50 ~die 02:47:57 ~DIE 02:57:10 DIE BOT DIE LIKE YER MOTHER!!! 02:57:50 all this... wrath... 02:58:04 #esoteric should sponsor TV ads to keep kids away from programming 02:58:19 ihope, you really 14? 02:58:20 You will become like us! 02:58:28 andreou: Just one issue: some *want* to be just like us. 02:58:43 they're wrong 02:58:51 they should listen to Us. 02:58:51 * pikhq was one of those kids 02:59:09 i think most of the lurkers here are 02:59:23 coding at night, psychotherapy at morning 03:03:52 pikhq: wtf did you do 03:03:58 -!- bsmnt_bot has quit (Remote closed the connection). 03:04:00 -!- bsmnt_bot has joined. 03:04:16 bsmntbombdood: I didn't! 03:04:23 It was oerjan! 03:05:12 heh 03:05:55 Actually it was ihope, i just tempted him to it. 03:13:25 ~exec sys.stdout(os.list_dir("/bot")) 03:13:35 hm... 03:13:48 os.listdir 03:13:57 ~exec sys.stdout(os.listdir("/bot")) 03:13:58 ['betterbot.py', 'test.pickle', 'start.sh', 'better.sh', 'ircbot.py'] 03:14:01 cheers 03:14:05 -!- andreou has quit. 03:14:09 -!- andreou has joined. 03:14:15 -!- andreou has quit (Remote closed the connection). 03:14:47 -!- ShadowHntr has joined. 03:17:37 ~exec open("/bot/ircbot.py", "w"); self.raw("QUIT") 03:17:58 why, how curious :) 03:18:05 oerjan: obviously, you don't have write permission to the source 03:18:28 that's an easy root exploit right there 03:19:28 ~exec open("/foo", "w") 03:19:36 But can you write anywhere? 03:19:44 . . . Oh, right. It's chrooted, isn't it? 03:19:48 yeah 03:19:53 ~exec self.raw("QUIT") 03:19:54 -!- bsmnt_bot has quit. 03:19:56 Smart of you. 03:19:59 -!- bsmnt_bot has joined. 03:20:03 whoa 03:20:05 wtf 03:20:21 You didn't know about that? 03:20:44 ~exec self.raw("QUIT :I win!") 03:20:45 -!- bsmnt_bot has quit (Client Quit). 03:20:47 -!- bsmnt_bot has joined. 03:20:58 oh, I misread 03:22:05 pikhq: Yeah, like i'm going to give you access the whole filesystem ;) 03:22:52 bsmntbombdood: Well, there *is* an exploit for breaking out of chroots. 03:23:05 needs root, doesn't it? 03:23:28 It needs cd. 03:24:00 ~exec os.list_dir("./") 03:24:07 os.listdir 03:24:16 ~exec sys.stdout(os.listdir("./")) 03:24:16 ['bin', 'bot', 'etc', 'lib', 'usr'] 03:24:31 ~exec os.changedir("..") 03:24:40 ~exec sys.stdout(os.listdir("./")) 03:24:41 ['bin', 'bot', 'etc', 'lib', 'usr'] 03:24:51 Thought that was it. Damn it, must have forgotten. 03:25:08 I've seen that exploit, and iirc it needs root 03:25:30 Ah. 03:25:35 ~exec sys.stdout(os.getuid()) 03:25:36 1343 03:25:47 :) 03:27:20 But whoever tells me the contents of /home/bsmntbombdood/proof.txt gets a prize 03:29:03 ~exec fid=open("/home/bsmntbombdood/proof.txt", "r") 03:29:16 hah, yeah right 03:29:19 pikhq: #bsmnt_bot_errors 03:29:31 bsmntbombdood: Hey, it was worth a try. 03:29:31 IOError: [Errno 2] No such file or directory: '/home/bsmntbombdood/proof.txt' 03:29:54 I can tell you the contents of ~/proof.txt, then. 03:29:59 ^d 03:30:20 ? 03:30:26 EOF. 03:30:34 oh 03:31:30 -!- Plouj- has left (?). 03:32:42 BORING?! 03:35:45 ~exec OOOOSO 03:36:10 sleepzors -> 03:37:39 how can "let" in haskell be functional 03:37:57 ~exec (lambda f : f(f)) (lambda f : f(f)) 03:37:58 -!- bsmnt_bot has quit (Excess Flood). 03:38:01 -!- bsmnt_bot has joined. 03:38:25 weird 03:38:26 It defines a name for an expression. 03:39:02 not executing has a different effect than executing it 03:39:26 How so? 03:39:58 it has to be executed before what follows 03:40:33 In fact it doesn't. It only defines the names, their expressions are not used unless the names are. 03:42:19 ~exec sys.stdin("This is just wrong.") 03:42:40 wrong indeed 03:42:47 On the other hand the case statement fits your objection better. 03:43:07 hmmm, I should provide an channel interface to sys.stdin 03:43:09 * pikhq wonders if it's possible to write to stdin in any language. . . 03:44:29 it could be in a language where there's only one IO stream 03:44:35 Well, in Kayak and Lazy K, stdin turns into stdout according to how the program changes it. 03:44:36 stdout and stdin are the same 03:44:49 * pikhq also wonders if that language is called INTERCAL 03:45:19 -!- ihope has quit (Connection timed out). 03:45:19 read(stdout);write(stdin, "whoo"); See? Evil. 03:45:20 Apart from the I/O commands being READ OUT and WRITE IN... 03:54:51 -!- zantrua has joined. 03:56:13 -!- zantrua has quit (Read error: 104 (Connection reset by peer)). 03:57:35 -!- zantrua has joined. 03:58:03 Hello all. 03:59:37 -!- zantrua has quit (Read error: 131 (Connection reset by peer)). 04:02:15 -!- bsmnt_bot has quit (Remote closed the connection). 04:02:18 -!- bsmnt_bot has joined. 04:04:07 -!- bsmnt_bot has quit (Excess Flood). 04:04:10 -!- bsmnt_bot has joined. 04:06:13 -!- bsmnt_bot has quit (Excess Flood). 04:06:20 -!- bsmnt_bot has joined. 04:06:49 -!- bsmnt_bot has quit (Excess Flood). 04:06:54 -!- bsmnt_bot has joined. 04:10:10 -!- bsmnt_bot has quit (Excess Flood). 04:10:15 -!- bsmnt_bot has joined. 04:10:33 -!- bsmnt_bot has quit (Excess Flood). 04:10:39 -!- bsmnt_bot has joined. 04:10:46 -!- bsmnt_bot has quit (Client Quit). 04:10:49 -!- bsmnt_bot has joined. 04:10:57 -!- bsmnt_bot has quit (Excess Flood). 04:11:05 -!- bsmnt_bot has joined. 04:11:55 ~exec sys.stdout("QUIT :Excess Flood") 04:11:56 QUIT :Excess Flood 04:12:06 . . . 04:12:20 ~exec self.raw("QUIT :Excess Flood") 04:12:20 -!- bsmnt_bot has quit (Client Quit). 04:12:21 ... 04:12:22 That's what I meant. 04:12:24 -!- bsmnt_bot has joined. 04:12:30 -!- bsmnt_bot has quit (Excess Flood). 04:12:39 -!- bsmnt_bot has joined. 04:12:50 -!- bsmnt_bot has quit (Excess Flood). 04:12:59 -!- bsmnt_bot has joined. 04:13:05 ~exec quit 04:13:40 * pikhq leaves 04:13:43 -!- pikhq has quit ("leaving"). 04:17:13 -!- calamari has quit ("Leaving"). 04:28:32 -!- bsmnt_bot has quit (Excess Flood). 04:28:40 -!- bsmnt_bot has joined. 04:29:48 -!- bsmnt_bot has quit (Remote closed the connection). 04:29:52 -!- bsmnt_bot has joined. 04:30:23 -!- bsmnt_bot has quit (Excess Flood). 04:30:29 -!- bsmnt_bot has joined. 04:31:30 Good grief, "HNOP. Ashley Yakeley updated the status of HNOP, the Haskell library for doing nothing." 04:31:47 heh 04:32:38 "It has recently been split into two Cabal packages: 'nop', a library of no-op services, and 'hnop', a program that uses nop to do nothing." 04:32:43 -!- bsmnt_bot has quit (Excess Flood). 04:32:46 -!- bsmnt_bot has joined. 04:33:15 And strangely enough it is _not_ merely a joke. 04:34:25 -!- bsmnt_bot has quit (Remote closed the connection). 04:34:27 -!- bsmnt_bot has joined. 04:34:34 -!- bsmnt_bot has quit (Remote closed the connection). 04:34:37 -!- bsmnt_bot has joined. 04:36:47 -!- bsmnt_bot has quit (Excess Flood). 04:37:01 -!- bsmnt_bot has joined. 04:37:19 -!- bsmnt_bot has quit (Excess Flood). 04:37:23 -!- bsmnt_bot has joined. 04:37:43 -!- bsmnt_bot has quit (Excess Flood). 04:37:51 -!- bsmnt_bot has joined. 04:38:27 -!- bsmnt_bot has quit (Remote closed the connection). 04:38:32 -!- bsmnt_bot has joined. 04:38:38 -!- bsmnt_bot has quit (Remote closed the connection). 04:38:44 -!- bsmnt_bot has joined. 04:39:23 -!- bsmnt_bot has quit (Remote closed the connection). 04:39:29 -!- bsmnt_bot has joined. 04:40:20 -!- bsmnt_bot has quit (Remote closed the connection). 04:40:25 -!- bsmnt_bot has joined. 04:40:46 -!- bsmnt_bot has quit (Remote closed the connection). 04:40:51 -!- bsmnt_bot has joined. 04:41:20 -!- oerjan has quit ("leaving"). 04:41:56 cool 04:42:05 maybe i'll make a language for doing nothing 04:42:25 nopbol 04:42:26 heh guys sorry about the spam 04:42:34 spam is nice 04:42:45 -!- bsmnt_bot has quit (Remote closed the connection). 04:42:48 -!- bsmnt_bot has joined. 04:46:53 -!- bsmnt_bot has quit (Excess Flood). 04:46:58 -!- bsmnt_bot has joined. 04:47:07 ~raw PART #esoteric 04:47:08 -!- bsmnt_bot has left (?). 04:48:07 -!- bsmnt_bot has joined. 04:49:41 -!- bsmnt_bot has quit (Remote closed the connection). 04:49:48 -!- bsmnt_bot has joined. 04:50:07 -!- bsmnt_bot has quit (Remote closed the connection). 04:50:10 -!- bsmnt_bot has joined. 04:54:24 -!- bsmnt_bot has quit (Excess Flood). 04:54:33 -!- bsmnt_bot has joined. 04:54:37 -!- bsmnt_bot has quit (Remote closed the connection). 04:54:44 -!- bsmnt_bot has joined. 04:54:47 -!- bsmnt_bot has quit (Remote closed the connection). 04:54:53 -!- bsmnt_bot has joined. 04:55:52 -!- bsmnt_bot has quit (Remote closed the connection). 04:55:58 -!- bsmnt_bot has joined. 04:56:13 -!- bsmnt_bot has quit (Remote closed the connection). 04:56:24 -!- bsmnt_bot has joined. 04:56:50 -!- bsmnt_bot has quit (Client Quit). 04:56:53 -!- bsmnt_bot has joined. 05:00:01 -!- bsmnt_bot has quit (Excess Flood). 05:00:05 -!- bsmnt_bot has joined. 05:06:26 -!- bsmnt_bot has quit. 05:06:30 -!- bsmnt_bot has joined. 05:06:40 -!- bsmnt_bot has quit (Excess Flood). 05:06:46 -!- bsmnt_bot has joined. 05:08:05 heh 05:11:55 -!- bsmnt_bot has quit (Remote closed the connection). 05:15:10 -!- bsmnt_bot has joined. 05:18:33 -!- bsmnt_bot has quit (Remote closed the connection). 05:18:35 -!- bsmnt_bot has joined. 05:19:34 -!- bsmnt_bot has quit (Remote closed the connection). 05:19:36 -!- bsmnt_bot has joined. 05:20:01 -!- bsmnt_bot has quit (Remote closed the connection). 05:20:53 -!- bsmnt_bot has joined. 05:21:26 -!- bsmnt_bot has quit (Remote closed the connection). 05:22:32 -!- bsmnt_bot has joined. 05:23:11 -!- bsmnt_bot has quit (Remote closed the connection). 05:23:13 -!- bsmnt_bot has joined. 05:26:39 -!- bsmnt_bot has quit (Read error: 131 (Connection reset by peer)). 05:26:42 -!- bsmnt_bot has joined. 05:27:30 -!- bsmnt_bot has quit (Remote closed the connection). 05:27:33 -!- bsmnt_bot has joined. 05:29:29 -!- bsmnt_bot has quit (Remote closed the connection). 05:29:31 -!- bsmnt_bot has joined. 05:30:28 -!- bsmnt_bot has quit (Remote closed the connection). 05:30:31 -!- bsmnt_bot has joined. 05:31:40 -!- bsmnt_bot has quit (Read error: 131 (Connection reset by peer)). 05:31:43 -!- bsmnt_bot has joined. 06:15:42 -!- bsmnt_bot has quit (Remote closed the connection). 06:16:07 -!- bsmnt_bot has joined. 06:16:19 -!- bsmnt_bot has quit (Remote closed the connection). 06:16:50 -!- bsmnt_bot has joined. 06:17:51 -!- bsmnt_bot has quit (Read error: 131 (Connection reset by peer)). 06:17:54 -!- bsmnt_bot has joined. 06:18:02 -!- bsmnt_bot has quit (Remote closed the connection). 06:18:04 -!- bsmnt_bot has joined. 06:18:11 -!- bsmnt_bot has quit (Remote closed the connection). 06:18:20 -!- bsmnt_bot has joined. 06:19:12 mmm... I like writing interpreters. 06:19:28 -!- bsmnt_bot has quit (Remote closed the connection). 06:19:43 -!- bsmnt_bot has joined. 06:19:44 it's always fun to imagine the semantics reducing to the most fundamental parts of the language. 06:21:58 This is great, my language is the nicest language I've ever seen for writing recursive data structures, but all you can do is nop :) 06:22:50 I guess the beautiful syntax and the nice way of structuring makes up for the fact you can't really do anything? 06:23:01 Sure. 06:23:20 * CakeProphet is trying to find a clever languagge joke that won't offend anyone. 06:23:33 Like "It worked for Ruby" or something... 06:23:47 but nothing comes to mind. 06:24:28 I'm not making a joke language. 06:25:17 This might actually be a very good language for teaching structures for example :) 06:25:49 a weird variation of lambda calculus might work for that. 06:26:07 for abstraction and stuff. 06:26:09 I still haven't understood that language 06:26:19 me neither. 06:26:22 not the specifics. 06:26:24 Might work for what? 06:27:02 but in general.... it's a very clear demonstration of how invidual basic parts can be grouped together to form abstracted procedures. 06:27:44 if you assign certain strings of lambdas a given name... and substitute the name instead of the functions whenever they arise 06:28:37 and continue doing that... you can quickly amass a logical stucture. 06:29:12 quick always seems to be the most powerful way to demonstrate abstraction. 06:29:20 if you can write it out quickly. 06:31:36 hmm... what is the most complex thing written in lambda calculus? 06:31:55 I've heard it's nothing. 06:31:56 :) 06:56:10 -!- Sgeo has quit (Remote closed the connection). 07:24:27 -!- ShadowHntr has quit ("End of line."). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:53:25 -!- sebbu has joined. 10:49:46 -!- tgwizard has joined. 11:12:05 -!- jix has joined. 11:13:15 -!- jix has quit (Client Quit). 12:40:44 -!- jix has joined. 12:56:03 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 12:59:14 -!- jix has joined. 13:04:51 -!- andreou has joined. 13:05:02 greets 13:48:56 -!- ihope has joined. 13:49:18 -!- ihope has quit (Client Quit). 14:10:02 -!- andreou has quit ("BitchX: faster than a speeding bullet, more powerful than a locomotive"). 14:10:26 -!- andreou has joined. 15:53:04 -!- ihope has joined. 15:54:16 ~exec self.raw("PRIVMSG #esoteric :uelauelaue") 15:54:17 uelauelaue 15:54:19 Yay! 15:57:15 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 16:24:40 bsmnt_bot: exec self.raw("PRIVMSG #esoteric laueluaeleualeu") 16:52:45 eh how do i find any ircops? /who -what? 17:21:57 -!- andreou has quit ("recycle"). 17:33:26 -!- andreou has joined. 17:41:40 /stats p 17:41:52 Or something else. Lemme see... 17:43:15 I guess /who *@freenode/staff* 17:43:28 ...Or not. 17:44:02 Then it's probably/who *freenode/staff* 17:45:04 the latter is true, i found a few, but they're all idle :) 17:45:48 notabot might not be. 17:46:05 27 hrs :) 18:03:39 -!- CakeProphet has quit ("haaaaaaaaaa"). 18:05:48 ~ 18:10:04 ~? 18:13:30 #! 18:28:37 -!- ShadowHntr has joined. 18:29:52 ~?# 18:30:57 woot 18:30:59 cons x y = \f -> f x y 18:30:59 car c = c (\x y -> x) 18:30:59 cdr c = c (\x y -> y) 18:35:11 * bsmntbombdood is clever 18:38:51 -!- digital_me has joined. 18:41:27 bsmntbombdood: congrats, you just expressed the standard definition of an ordered pair in lambda calculus in Haskell notation. 18:42:49 yep 18:45:43 (,), fst, snd... 18:49:28 How do we represent the empty list? 18:53:11 and why doesn't my_map f list = cons (f (car list)) (my_map f (cdr list)) work? 19:14:14 I can't figure out what's wrong 19:20:55 Lists would be completely different. 19:21:42 A list would be represented as its own foldr function. 19:23:39 cons x xs = \c e -> c x (xs c e) 19:23:41 ...I think. 19:23:50 empty = \c e -> e 19:24:09 foldr c e xs = xs c e 19:24:31 huh? 19:24:40 -!- andreou has quit ("-"). 19:25:16 I think that's how lists are generally represented in lambda calculus. 19:25:22 That's the typable way. 19:26:05 And by typable way, I mean using Haskell's type system. 19:27:06 Either the Hindley-Milner type system or the Damas-Milner type system. Both different names for the same thing, I think. 19:29:53 -!- CakeProphet has joined. 19:42:09 * bsmntbombdood requests SICP from the library 20:01:37 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 20:04:13 I accidently discovered a simple way of turing algebraic datatypes into collections of lambda calculus functions. 20:04:37 Each value of the type takes one function per constructor. 20:05:31 A constructor calls one of its arguments with the containted data and ignores the other arguments. 20:05:52 e.g. a list datum takes two arguments. 20:06:46 The first is called for a cons, and is passed the car and cdr of the list. The second is called for a nil and takes no arguments. 20:07:18 cons a b = (\x y -> x a b) 20:07:31 nil = (\x y -> y) 20:07:33 tada! 20:55:14 -!- Sgeo has joined. 21:34:11 -!- andreou has joined. 21:40:16 -!- jix__ has joined. 21:43:21 -!- jix__ has changed nick to jix. 21:57:56 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:02:09 -!- sebbu has quit (Read error: 110 (Connection timed out)). 22:31:28 and that is in haskell ? 22:31:36 i'd much rather do that in FORTRAN... ;) 22:33:46 -!- wooby has quit. 22:36:06 hmmm.. 22:36:30 Is this the proper regex pattern for an ORK class definition? 22:36:32 re.compile(r"there is such a thing as an? (?P.*?)\.? *$(?P(.*?$)*)", re.MULTILINE|re.IGNORECASE) 22:36:46 oh wait... 22:37:44 re.compile(r"there is such an? (?P.*?) as an? (?P.*?)\:? *$(?P(.*?$)*)", re.MULTILINE|re.IGNORECASE) 22:37:58 I forgot the first part ends with a colon... and that I'm including metaclasses :D 22:53:24 -!- ihope has joined. 22:56:11 hmmm... 22:56:17 yeah it looks about right,. 22:59:05 Yes, it does. 22:59:14 Well, almost, anyway. 22:59:28 It's just a little bit off 22:59:46 Now, care to tell me just what it is that looks about right? 22:59:53 hrhr 23:00:17 "there is such an? (?P.*?) as an? (?P.*?)\:? *$(?P(.*?$)*)" with multiline and ignorecase turned on. 23:00:34 well... the colon isn't optional. 23:00:36 or is it? 23:00:43 I always see it. 23:00:46 but it could be omitted. 23:02:42 * CakeProphet is written an ORK interpreter... and then adding some crap to it to create the Sophia dialect. 23:03:44 You is written? 23:04:21 ...yes 23:04:32 I meant "is writing"... but that sounds nifty. 23:04:50 -!- wooby has joined. 23:05:08 I mean also include inheritance... but maybe not directly. 23:05:48 or it could just be "There is such a as a which is a " which doesn't quite sound as ORKY as I'd like it to. 23:06:06 ORK is verbose in a terse way... that's getting a little superfluous. ;) 23:07:23 -!- andreou has quit ("recycling"). 23:08:59 ...What? 23:10:09 ...huh? 23:10:57 Superfluously verbose terseness? 23:12:16 No. 23:12:20 just verbose terseness. 23:12:31 each statement is nice and direct... but overly verbose too. 23:12:50 with the inheritance add-on I just proposed... it would sound less to the point 23:13:31 -!- andreou has joined. 23:14:26 Can you put that in words less than four letters long? 23:15:21 nah... it's not length that's the problem. 23:15:29 it's semantical baggage. :D 23:15:45 There is such a thing as a master of all beings which is an apple 23:15:55 does not sound as good as 23:16:04 there is such a thing as a master of all beings 23:19:41 There is such a thing as a master of all beings 23:19:50 a master of all beings is very much like an apple 23:19:54 yay inheritance... 23:24:56 can anyone get ftp://ftp.cs.bris.ac.uk/pub/goedel/latest/goedel-src.tar.Z or is the FTP boinked? 23:25:58 andreou: No go for me. 23:26:34 hmm.. I always have a hard time understand how declarations slow down execution speed... they still need to be computed. 23:28:38 oh. 23:28:41 speed up execution speed. 23:30:18 * SimonRC goes 23:30:52 * CakeProphet dances. 23:31:49 -!- andreou has quit ("new /netbsd, rejoice"). 23:35:41 -!- pikhq has joined. 23:39:13 -!- andreou has joined. 23:44:05 -!- tgwizard has quit (Connection timed out). 2007-01-15: 00:06:54 we can have nil = \x y -> y 00:07:00 t = \x y -> x 00:08:52 if p x y = p x y 00:25:29 Let's just pretend we can compute the uncomputable. 00:27:12 Let's just pretend that 1+1=3. 00:27:16 let's 00:27:49 Or, in the factory language. . . 00:27:55 LET 1+1=3 00:27:57 >:D 00:28:02 -!- ihope has changed nick to i. 00:28:07 hm can 3 be overloaded in scheme to be 2? 00:28:08 -!- i has changed nick to ihope. 00:28:33 (set! 2 3) 00:28:41 (not really) 00:28:46 no, tried that ;p 00:28:55 -!- ihope has changed nick to \050. 00:29:05 -!- \050 has changed nick to ihope. 00:29:16 there's always (define three 3) (define two three)... but that doesn't really matter. 00:29:20 or count 00:29:45 Happy Happy Joy Joy. 00:29:52 off to try the kernel 00:29:54 -!- andreou has quit ("kernel time"). 00:33:07 -!- andreou has joined. 00:38:25 Joy is not the same as luck, and there is no such thing as joy luck. 00:38:53 Sad, isn't it? 00:40:06 consider yourself lucky if you have joy 00:40:15 and be joyful if you have (good) luck 00:40:30 they're like ( and ) 00:41:53 wha.t 00:42:23 * pikhq joins bsmntbombdood in singing "Happy Happy Joy Joy". 00:46:15 That's what the MIT scheme interpreter says on exit 00:47:31 Ren & Stimpy fans, I see. 00:49:37 -!- ihope has quit (Read error: 104 (Connection reset by peer)). 01:03:40 * bsmntbombdood plays with bsmnt_bot 01:03:55 someone suggested a change, what was it? 01:16:05 -!- digital_me_ has joined. 01:27:12 -!- digital_me has quit (Read error: 110 (Connection timed out)). 01:41:37 -!- calamari has joined. 01:46:17 * andreou happily plays around with chicken scheme until he's fit for bathing 01:56:53 #' 02:00:13 -!- ihope has joined. 02:02:54 foo 02:03:53 bar 02:04:13 eggs 02:04:19 ham 02:11:21 -!- pikhq has quit ("leaving"). 02:33:32 -!- ihope has quit (Read error: 110 (Connection timed out)). 02:49:53 -!- ShadowHntr has quit (Connection timed out). 03:40:06 -!- andreou has quit ("\"). 04:03:40 -!- wooby has quit. 04:38:23 -!- wooby has joined. 05:20:33 hmmm... I need to learn C++ 05:20:37 not because I want to. 05:20:42 true 05:20:46 because it's the best 05:20:49 but because I'm going to be using it soon... with little to no experience. 05:20:59 :) 05:21:41 see... the people I'm "working", who have little knowledge about programming, seem utterly sure that C++ is the best language to use for their purposes. 05:22:04 I told them the best language for me to use would be the one I'm most familiar with... in this case Python, or Lisp (vaguely) as an alternative. 05:22:30 but... not good enough... so.. 05:22:34 now I need to learn C++ 05:22:37 who knows... it might be fun. 05:22:58 c++ is fun 05:23:06 It looks rather boring to me. 05:23:13 nothing terribly exciting. 05:23:17 haha :) 05:23:58 and static typing is a drag if you've always used duck typing. 05:24:19 with c++ i best have the feeling i can do anything, you have such direct access to the memoryt 05:24:22 *-t 05:24:36 i have a python question for you 05:24:40 meh... I've never actually -needed- direct access to the memory. 05:24:41 but not now 05:24:47 bus leaved in 2 minutes 05:24:49 not neede 05:24:52 wanted. 05:24:56 you should want 05:24:58 I haven't wanted it either. 05:24:59 now to go -> 05:25:09 I'm not even sure what I'd do with it. 05:25:53 hmmm.. where can I get the full specification of the standard C++ implementation? 05:26:00 I can't seem to find anything but paper books. 05:29:40 I would just play around with it... 05:29:43 but that seems like too much work. 05:29:50 I mean... you have to compile it and all. 05:31:23 and I'm not really sure how to access the compiler from windows. 05:43:51 -!- oerjan has joined. 05:45:32 Hi bsmntbombdood 05:45:36 hi 05:46:01 I noticed that the Haskell tutorial you said you were reading was not the most recent version. 05:46:32 One thing that irks me about C++ is I haven't figured out how it's consistent. 05:46:53 CakeProphet: c++ is hideous 05:47:11 In Python everything is universally consistent... but so far I haven't found this to be true in C++ 05:47:16 it might jsut be my lack of understanding though. 05:47:40 Has anyone claimed C++ is consistent? 05:47:46 Nope. 05:48:00 I'm just trying to find out if it is. 05:48:27 static typing is sooo annoying in high level languages 05:48:36 On the other hand (and I say this having never tried to program in it) people are complaining about how its features have lots of unexpected interactions. 05:49:23 Apparently you have to learn a lot of rules for what not to do in combination. 05:49:42 I find that true of common lisp. 05:49:46 with all the macros. 05:50:07 it's hard to keep all straight when you're learning. 05:50:16 Ah yes. I suppose that is a reason why Scheme invented the hygienic macro system. 05:53:16 hmmm.. 05:53:27 gah, all these languages, so little time 05:53:39 could you define a C++ macro that substitutes all newline characters with ;\n? 05:54:03 c++ doesn't have macros 05:54:11 if you're like me... and lazy and don't feel like getting into the habit of using semicolons and have no real use for writing multiple statements in one line? 05:54:21 eh... it has flimsy textual substititions with #define 05:54:24 which it calls "macros" 05:54:33 they're not lisp macros, no. 05:54:36 -!- ShadowHntr has joined. 05:54:45 CakeProphet: just use semicolons 05:55:01 Yeah, it's no big deal. 05:55:10 but any step of laziness I can take would be great. 05:55:24 no one will be able to understand your code, and it will break 05:56:00 Why's that? 05:56:03 I think you mean "no real use for writing a statement over multiple lines" 05:56:07 if (p) 05:56:11 foo() 05:56:15 teh bork 05:56:33 He didn't say to leave out brackets. 05:56:42 that turns into "if (p); foo();" 05:57:05 oerjan: you don't need brackets there 05:57:57 He could simply follow a Python-like rule: either use brackets or put the sub-statement on the same line. 05:59:24 meh.. I can use C++'s ways no problem. 05:59:27 On the other hand I am not sure whether { ; is permitted in all cases. 05:59:34 no use sticking to old modes of thought. 06:00:04 I think "{ ;" will work, it's just a line with no stuff on it 06:00:14 hmm... I do kind of wonder how C++ actually works though... 06:00:28 ugly 06:00:31 the more I read into it the more it starts to sound like how I thought a programming langauge would work back before I learned how to program. 06:00:35 Will it work for switch statements? 06:00:49 I probably wouldn't use switch anyways 06:00:52 it's kind of silly. 06:01:04 I think so 06:01:45 Does C++ use the same evaluation as Python does for crap? 06:01:49 well.. 06:01:50 what I mean by that. 06:02:20 I remember someone finding it odd that "\n".join(SomeList) was a valid python expression. 06:02:28 and they were primarily a C/C++ programmer. 06:02:59 can't call methods on a char* 06:03:10 some I'm wondering if C++ uses variables and statements as I knew them 06:03:35 ah. 06:03:40 oh okay. 06:03:52 On the other hand, some Python programmers might find it odd that 4["foob"] is a valid C expression. :p 06:04:22 That's not too odd... it wouldn't work in Python, and I have no clue what it means... 06:04:38 It means the same as "foob"[4]", ie. 'b'. 06:04:40 It means exactly the same as "foob"[4] 06:04:49 Uh, '\0', I mean. 06:04:52 ...oh... well that -is- odd. 06:05:02 no the syntax... but what the syntax produces. 06:05:06 It's because a[b] is sort-of defined as *(a+b), and + is commutative. 06:05:06 because p[q] = *(p+q), so commutative. 06:05:12 Right, because C's array syntax is just sugar 06:05:21 Darn speaking in each other's mouths 06:05:28 x[i] == *(x+i) 06:05:49 wow, three of us said exactly the same thing 06:06:10 hmmm.. 06:06:12 so.... 06:06:23 how does it differenciate if it's communative? 06:06:36 It's + that is commutative. 06:06:40 CakeProphet: Have you programmed in a language with pointers before? 06:06:50 would it just as easily been the "foob" slice of 4? (which obviously doesn't make any sense... but it could have been read that way) 06:06:54 nope. 06:07:03 I hope you'll find them enlightening 06:07:16 I love playing with pointers :) 06:07:23 "foob" in a sense means the position of the 'f' 06:07:37 I basically conceptualize them to be like mutable data structures in Python... they point to the exact same chunk of memory rather than a new "copy" of it. 06:07:51 CakeProphet: pretty much 06:07:53 so "foob"+4 means the position of, well, I suppose not 'b', that was an error. 06:08:11 oerjan: no, "foob"+4 is correct 06:08:15 Alright... then I know how to use pointers. 06:08:28 CakeProphet: Except, pointers are more usefull 06:08:35 I just need to remember that everything is implicitly a copy of the original value unless I use a pointer. 06:08:38 Not in C. "foob"[0] == 'f' 06:08:52 oerjan: yes... 06:09:16 I could see the possible uses... I just question the way its implemented. 06:09:28 I would have made pointers implicit... and copies of the value explicit. 06:09:47 So "foob"[4]=='\000', the implicit NUL at end of string. 06:09:49 But I'm sure there's a reason. 06:09:57 oerjan: uh huh 06:10:29 so 4["foob"] == '\0' 06:10:45 Pointers may be more efficient in some cases, I guess. 06:11:18 I think C just has a different idea of what a variable is than me. 06:11:27 Pointers are more than just mutability, because the pointers can be manipulated themselves 06:11:39 Yes, to C a variable is a region in memory, of arbitrary size. 06:12:11 since I get my ideas about variables form Python... which, in terms of C++, makes variables implicitly a pointer. 06:12:38 x = [1,2,3,4,5,6,7,8] 06:12:39 y = x 06:12:47 Not simply a reference to a region of memory, like presumably in Python (except for primitive immutable types, where the reference is optimized away) 06:13:38 hmmm... 06:13:41 alright then... 06:13:54 I don't like C++ arrays either... if I must complain. 06:14:06 I can't think of too many uses for them... 06:14:26 Don't think of them as an array, just as a succint way to manipulate large areas of memory 06:14:40 s/array/list/ 06:14:40 Well... they're fixed-width. 06:14:47 It's probably the lowest-overhead way to have an array, since it's just a block of memory. 06:14:49 which... makes them kind of constained in what they can do. 06:15:08 yeah... C's all about low overhead. :P 06:15:16 Like I said, they aren't a list 06:15:25 Interestingly in Haskell and Ocaml, where things _are_ references by default, there are libraries for "unboxing", which means essentially doing it the C way for efficiency. 06:15:27 If you're using C++, you probably want to use STL's containers (like std::vector) anyway, if you want an array-like container, and arrays if you want to _implement_ a container. 06:16:07 ah... so arrays aren't intended to be the final structure? 06:16:17 just the means to the final structure? 06:16:22 Like conses in lisp 06:16:38 ...they can be 06:16:38 Arrays were inherited from C. 06:16:55 Right. 06:16:59 I guess that depends on the user; but all C++ books probably tout the merits of the STL containers. 06:17:35 They essentially just show their age, as does pointers. 06:18:04 Except probably for really low-level programming. 06:20:12 which is what they are for 06:20:38 I imagine when I first start with C++ I'll always forget to type "||" instead of "or" 06:20:43 same with && and ! 06:20:56 I could use #define to substitute them... if I wanted. 06:21:16 simply to avoid it from screwing up my program. 06:23:35 I think what Oklopol's nop language needs is a type system so complicated that _it_ is Turing-complete. 06:24:07 C++ templates are, after all. :p 06:24:21 ....okay... 06:24:23 C++ templates are SO GROSS 06:24:32 I'm not sure who the hell thought that C++'s comma operator was a good idea. 06:24:43 It's C's comma operator. 06:24:48 that's why high level languages should be dynamically typed 06:24:50 ....and C++'s 06:25:12 What's your problem with the comma? 06:25:24 I don't call Python's + operator C's + operator simply because C used it before Python. 06:25:27 what do you mean, comma operator? 06:25:31 nah... it's fine.. and I could actually see myself using it. 06:25:45 I 'm just curious who the hell thought it up... and why they chose a comma. 06:26:09 The comma operator is simply a result of C distinguishing too hard between expressions and statements, like a P-language I could mention. 06:26:18 give me an example, I have no idea what you're talking about 06:26:37 int x = (a=5,b=3, 6 ) 06:26:40 x would be 6 06:27:16 Incidentally, I haven't met anyone who wouldn't write that as "a = 5; b = 3; int x = 6;". 06:27:19 ...i've never seen/used that 06:27:40 yeah I know... I probably wouldn't use it... 06:27:42 for that 06:27:44 But the comma is used a lot in initializing several values in the init section of a for loop; for(a = 0, b = 0; ...) ... 06:28:07 so it's like a... creepy non-data-type version of a tuple? 06:28:34 Actually it's like a creepy expression version of a statement separator. 06:28:58 what's a statement operator? 06:29:01 ; ? 06:29:11 separator. 06:29:30 aaah. 06:29:38 oh okay... I see WHY you would use it now... 06:29:41 The , and ?: operators are very useful if you have some sort of ; allergy and want to write your whole program as a single expression. 06:29:44 still think it's a lame way to do it. :P 06:30:00 I like writing programs in single expressions. :D 06:30:17 Like Ocaml, a functional language uses ; for both, since it doesn't distinguish statements from expressions. 06:30:21 but for some reason I consider variable assignment in an expression "cheating". 06:30:37 but that's my inevitable Python bias... because python treats = as a statement. 06:31:41 However, Ocaml's syntax is generally not considered its best part. 06:31:57 hmmm.. 06:32:54 of course it's cheating. 06:32:59 it's a side effect. 06:32:59 "for x in SomeList" in Python in "for(x = SomeList[y], y++, SomeList)" right? 06:33:04 any side effect in an expression is cheating. 06:33:23 Here's a well-structured brainf*ck interpreter in C I wrote once; it shows the amazing usefulness of the ?: operator: 06:33:26 main(j,a,n,t)int*a;{unsigned short p=-1;char*r=calloc(n=p+1,6),*i=r 06:33:29 +n,**k=i+n;for(read(open(*++a,t=0),i,p);n=*i-43,t<0?n-48?n-50||++t: 06:33:31 --t:n?n-2?n-19?n-17?n-3?n-48?n-50?n-1||read(0,r+p,1):p[r]?i=k[j]:j 06:33:34 --:p[r]?k[++j]=i:t--:putchar(p[r]):p--:p++:p[r]--:p[r]++,*i++;);} 06:33:41 oh I use conditional expressions all the time... and list comprehensions. 06:33:56 fizzie: i see a lot of ; 06:34:07 Yes, I don't really have a ; allergy. 06:34:31 hmmm... C makes it easier to avoid multiple statements... 06:34:41 in Python it's like a fun little challenge though... C makes it too easy. :P 06:34:59 CakeProphet: not really 06:35:23 it's probably easier in python since C doesn't have lambdas 06:35:42 you can do variable assignments, multiple-expressions-with-side-effects-but-only-use-the-last-one-to-evaluate, 06:35:48 it's almost like having statements. 06:36:21 And you have the ?: to do conditionals. 06:36:29 Python doesn't allow variable assignments in an expression... which makes it way more difficult (but more "pure") to write one-liners. 06:36:36 well.. Python added something for that in 2.5 06:36:46 (true if cond else false) 06:37:16 which I use... all the time. 06:37:53 -!- ShadowHntr has quit (Connection timed out). 06:38:15 That's a funny way to write it. Perl has the "... if cond;" statement modifier, but it doesn't add an else branch there. 06:38:37 it seemed weird at first to me too. 06:38:40 but it's grown on me... 06:38:43 it reads a lot like English. 06:38:52 true if cond else false doesn't read at all like english. 06:38:59 it reads like Forth. 06:39:10 it reads like conversational english 06:39:15 I suppose you cannot use ... if ... else ... inside an ... if ... else ... without parentheses. 06:39:22 how often do you put your ifs before your assertions? 06:39:29 only in formal settings. 06:39:43 but in conversation... I always say "I like pancakes, but only if it's noon" 06:39:49 the condition came after. 06:40:08 i prefer the way forth does it. 06:40:09 "I like pancakes, but only if it's noon; else I like RAW MEAT ARRR." 06:40:34 well else is kind kind of a weird word. 06:40:39 What about pancakes with raw meat in them? 06:40:40 "otherwise" sounds more conversationally. 06:40:45 but... else is easier to write. :D 06:41:14 cond if true else false then 06:41:49 Yeah, Forth's then at the end is really weird. 06:41:50 hehehe... to someone unfamiliar with stack-based languages... that would look like someone scrambled the source code. 06:42:57 I'm still waiting for python to get a while-loop list comprehension/generator-expression. 06:43:03 I never use while loops that much though. 06:43:57 usually just one for the main loop of the program. 06:44:54 aw, I feel so robbed! SQL doesn't allow definition of recursive functions! 06:45:03 CREATE FUNCTION adder(a INT(10), b INT(10)) RETURNS INT(10) RETURN IF(b<>0, adder(a + 1, b - 1), a); 06:45:13 ERROR 1424 (HY000): Recursive stored functions and triggers are not allowed. 06:45:13 oh woe is you.. 06:45:23 how will you go on without SQL functions being recursive? 06:45:41 I was hoping I'd stumbled upon a brilliant esocoding opportunity. 06:45:56 like coding a BF interpreter in mySQL or something 06:46:03 SQL is kind of appaling though. 06:46:17 * CakeProphet had a BF interpreter coded in Excel at one point. 06:46:30 cool 06:46:32 I remeber you talking about that 06:46:43 yeah I finally got it to work. 06:46:46 but excel macros are pretty powerful to begin with 06:46:55 it can't really "print" things. 06:47:03 it just gives you the entire array to work with. 06:47:27 but I guess you could use print to accumulate characters into a single "output cell" 06:47:29 if you wanted. 06:47:55 cond if true-stmnt else fasle-stmt? 06:48:34 I can't remember enough forth 06:48:37 oerjan: not really 06:48:46 oerjan: it just means, "... and then, do this" 06:48:55 2 definitions of "then" 06:50:34 if ... if ... else ... then else ... then 06:51:39 hmm... 06:51:55 I would have implemented it true-stmt then false-stmt else if 06:52:09 or false-stmt else true-stmt then if 06:52:26 reminds me of the backwardsiness of FORTH. :D 06:52:44 Doesn't work with the Forth compiler principle though. 06:52:56 yeah 06:53:05 ooh. we have an idea- we can't make recursive calls in a general sense, but we *can* define functions with our functions. We might be able to "build the tracks as our train runs on them", so to speak 06:53:07 fuck the compiler principle. 06:53:10 if takes the predicate off the stack 06:53:33 hmmm.... here's an idea. 06:53:36 Because anything found before the first "keyword" must be directly executed. 06:54:01 make an imperitive esolang modelled after "it puts the lotion on the skin" 06:54:10 haha 06:54:25 oh 06:54:29 it puts the lotion of the skin 06:54:31 its 06:54:33 skin 06:54:35 bleh 06:54:36 "It puts the lotion on it's skin or else it gets the hose again" 06:54:42 hahahahahaha 06:54:45 conditional 06:55:11 * oerjan wonders what the heck you are referring to. 06:56:07 we're playing lambs 06:58:33 The obvious name for Ork's successor would be "ORK is to increment." 06:58:52 ....I'm calling mine Sophia. 06:58:52 * oerjan is still reading the logs. 06:58:55 because I like the name. 06:59:08 and because I intend to create a large number of things named "Sophia" 06:59:11 to confuse people. 07:00:25 I wonder what C++ would have been like if it included the increment in its evaluation (++C) 07:01:12 haha 07:01:23 Obviously one of them would have a syntax like: Sophia? Sophia. Sophia! Sophia? 07:01:42 ...no 07:01:48 that's like... the worst clone ever. 07:01:53 a clone of ook... 07:01:55 that's appaling. 07:01:56 What, you don't want to increment Ook? :) 07:02:08 cloning a cloning is a sin. 07:02:25 Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo. 07:02:44 It'll basically have ORKs syntax... with Metaclasses and coroutines... 07:02:57 and some new directive-type stuff via commands related to "Sophia" 07:03:21 I wasn't suggesting that you make Sophia have such a syntax, but that you make Sophia have it. 07:03:22 and some minor syntax tweaks... such as "When this program starts:" being changed to "When Sophia loves us:" 07:03:49 no no no... I would really only consider Sophia for that kind of silliness. 07:04:11 well... that's actually not a syntax tweak... 07:04:12 excuse me mister but wtf ru doing? 07:04:18 because Sophia will be an object with a method "loves us" 07:04:36 so it'd be When sophia is to love us 07:05:32 oh yeah... and special methods (yup... can't have OO without SPECIAL METHODS!!_ 07:06:02 "be said" is the string representation method (and how the object is printed when outputted) 07:06:16 When an apple is to be said: 07:07:45 and I'll try to think of some ways to totally bastardize ORK. 07:07:51 for fun. 07:09:45 You could add a functional layer. 07:10:31 I plan on making it heavily corotuinal. 07:10:32 actually. 07:10:37 with the whole "ring" thing. 07:19:22 -!- digital_me_ has quit (Read error: 110 (Connection timed out)). 07:19:45 -!- Sgeo has quit (Remote closed the connection). 07:28:06 -!- calamari has left (?). 07:58:42 Hey look. I've ignored all of you for the last 2000 lines. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:07 That's OK, we were ignoring you too. 08:31:36 No, it's not OK. It's ORK. 10:20:54 -!- ihope has joined. 10:24:05 -!- oerjan has quit ("leaving"). 12:54:55 [08:21:32] I think what Oklopol's nop language needs is a type system so complicated that _it_ is Turing-complete. 12:54:56 it is 12:55:02 but no IO :) 12:55:21 ny nop language 12:59:57 [08:44:14] * CakeProphet had a BF interpreter coded in Excel at one point. 13:00:09 if you're talking about vba, i made one during a class in school 13:02:23 [14:53:16] ny nop language 13:02:26 idiot :\ 13:16:41 -!- andreou has joined. 13:21:04 it supports only datatypes list and nopad, nopad being the empty list 13:21:54 I did Bitwise Cyclic Tag in Excel. 13:22:09 And I don't mean a macro or anything. 13:22:21 with cell arithmetic? 13:22:27 Yep. 13:22:35 It's easier than BF, of course. 13:22:42 because making it in vba is as easy as in any language :) 13:22:56 I think BCT earns the Simplest Turing-Complete Language award. 13:23:09 tho vb is the worst language i've run into 13:23:14 hmm i'll have to check it, don't remember 13:23:21 Malbolge is the worse language I've run into. 13:23:24 :-) 13:23:33 And by worse, I mean worst. 13:25:21 well, in vb it's nicer to do a program, but i like malbolge more :) 13:25:37 Epigram has a ridiculously strong type system, doesn't it? 13:25:58 i'll have to see that one too........ 13:26:02 :\ 13:31:30 BCT stops execution when datastring is empty? 13:32:46 * andreou would like to see the US gov't adopting mycelium as a stego device 13:37:39 andreou: :-) 13:37:58 They probably have better ways of doing that, you know. 13:38:30 probably; not as cool, though 13:38:47 Heh. 13:43:38 a combination of filigram.c and mycelium would also produce interesting results 13:44:29 filigram.c? 13:45:11 it's on ../filigram/ in the site of that putty guy 13:45:15 (sorry, no c&p here) 13:51:28 -!- ihope_ has joined. 14:07:29 -!- ihope has quit (Read error: 110 (Connection timed out)). 14:12:43 python: reduce ( (lambda a, b : a+b), [[[]], [[[], [], [[], []]], []], [[], [], []]] ) 14:12:44 nopol: <<<>><<<><><<><>>><>><<><><>>>:<<..><:>:<::>> 14:13:13 it supports alphanumeric names tho, also comments and whitespace 14:13:44 the function is <<..><:>:<::>>, please crack it if you have time :) 14:15:59 the system is not only turing complete, it's actually pretty nice to write algorithms in 14:18:46 -!- jix__ has joined. 14:54:41 nopol is getting quite complicated for a language you cannot do anything with :\ 14:59:38 i think the best feature is you can have lists of negative depth, if a([b]) == b, a(a(a([]))) for example is valid code :) 15:00:09 i gotta finish it so i can make a compiler! 15:00:35 the standard for compilers guarantees a -f final build mode that optimized the whole program to one nop 15:00:46 *optimizes 15:01:22 to one nop?! 15:01:30 yes 15:01:45 because, any number of nops is essentially one nop 15:01:48 *every* program does absolutely nothing and does it in a quirky way? 15:01:55 yeah :) 15:02:10 ah i didn't read the specs -- are there any or is it WIP"? 15:02:14 of course, you can have fun with it with a debugger 15:02:37 because you see what's happening in the memory 15:02:40 specs? 15:02:43 for the lang? 15:02:57 heh yeah 15:03:05 i think this kind of fun is easier with hallucinogens 15:03:13 :) 15:03:20 i'm not ready yet with the language 15:03:40 and it will be very hard to make an interpreter 15:03:46 (with debugging) 15:04:34 i have to think over all the commands and such to make everything as logical as possible 15:04:45 but not today 15:04:51 gotta go 15:05:34 k cheers 15:11:31 k cheers 15:11:32 eh 15:20:13 -!- pikhq has joined. 15:29:09 -!- andreou has quit ("kernel test"). 15:33:01 -!- andreou has joined. 16:24:51 -!- andreou has quit ("kernel test"). 16:27:21 -!- tgwizard has joined. 16:31:16 -!- andreou has joined. 16:56:17 -!- wooby has quit. 17:05:01 -!- calamari has joined. 17:05:10 hi 17:06:07 howdy, calamari 17:06:58 apparently some spammers decided @kidsquid.com is a good return address :( getting lots of failure notices 17:07:13 -!- FabioNET has joined. 17:15:34 -!- ais523 has joined. 17:16:16 So there are people on #esoteric at the moment after all, then? I was monitoring the logs to see if anyone was online, but somehow I never seem to be online at the same time as other people... 17:16:51 !help 17:16:54 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 17:16:56 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 17:17:02 !help fyb 17:17:06 To use an interpreter: Note: can be the actual program, an http:// URL, or a file:// URL which refers to my pseudofilesystem. 17:17:40 !fyb :>+!; 17:17:44 cp: cannot create regular file `fyb/cache/egobot.AbWxMh': Permission denied 17:18:19 !ps 17:18:22 1 ais523: ps 17:19:00 After that publicly-visible error message, EgoBot started spamming me with error messages... 17:20:22 happens occasionally 17:20:40 Besides, how can it run a single fyb program anyway, considering that two of them, using each other as data space, are needed for the program to work? 17:21:29 beats me 17:22:06 !fyb file://bomber.fyb 17:22:08 cp: cannot stat `./files/bomber.fyb': No such file or directory 17:22:42 i think it supports http 17:23:25 I think it tries to run the program it's given against an internal list of programs to compete against, but it's getting 'permission denied' errors on the programs it has stored 17:23:41 !ps 17:23:43 1 ais523: ps 17:24:15 * ais523 discovers that giving EgoBot another command stops the error-message spam 17:24:33 !fybs :>+!; 17:24:38 Reporting score for :>+!;. 17:26:12 !ps 17:26:15 1 ais523: ps 17:26:25 It just sent me three hyphens and stopped... 17:29:00 !unlambda ```s``s``sii`ki`k.*``s``s`ks``s`k`s`ks``s`k`s`k./``s`k`sikk`k``s`ksk 17:29:03 /*// 17:29:05 Maybe it lost three games in a row. 17:29:23 I suppose so, it wasn't a very good program... 17:30:12 !fybs +[>[-]!+] 17:30:15 Reporting score for +[>[-]!+]. 17:30:46 More hyphens. But that's a really vulnerable program, due to the tight loop near the start... 17:36:29 !fyb {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!} 17:36:31 cp: cannot create regular file `fyb/cache/egobot.YnjVgJ': Permission denied 17:36:43 !ps 17:37:22 1 ais523: fyb 17:37:24 2 ais523: ps 17:37:52 Hey, I think I actually beat some of its library 17:38:11 !fybs {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!} 17:38:14 Reporting score for {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!}. 17:38:41 More hyphens, but there was something encouraging in the error messages on the plain fyb 17:42:31 Hello. 17:42:34 !fyb %:[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[-]!]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!;{{>>>>}{>>>>}[-]++++++++++++++!} 17:42:36 cp: cannot create regular file `fyb/cache/egobot.Gl82IV': Permission denied 17:42:45 Hello, pikhq! 17:43:30 Enjoying Esolangs? 17:44:05 BTW, IIRC, fyb will compare the program given and some of the builtins. 17:44:18 And it seems that Gregor has fucked up Egobot a bit. 17:44:40 GregorR: Give egobot write access to itself. 17:45:05 Yes, I'm enjoying esolangs. I enjoyed the logs, too, before I had access to an IRC client. 17:45:26 !ps 17:45:29 * pikhq continues hugging BFM 17:45:29 1 ais523: ps 17:45:57 The new program seems less good than the old one. Maybe it's better to be simple... 17:47:17 !fyb :>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]+++++++++++++++!;:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]+++++++++++++++!;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]+++++++++++++++!; 17:47:19 cp: cannot create regular file `fyb/cache/egobot.2yppuf': Permission denied 17:48:03 !ps 17:48:07 losing again... 17:48:07 1 ais523: ps 17:49:02 -!- oerjan has joined. 17:49:19 * ais523 tries something really simple 17:49:22 string f! "Hello, oerjan." 17:49:26 outs f!end 17:49:43 !fyb {>>>}{>>>}+++++++++++++++! 17:49:46 cp: cannot create regular file `fyb/cache/egobot.CZrAiN': Permission denied 17:50:25 !help 17:51:43 !ps 17:51:46 1 ais523: ps 17:52:20 The ps command does seems to stop the flow of error messages and useful answers... (it lost every single game, BTW) 17:53:24 Hey, how does EgoBot manage the 2D languages? 17:54:06 !help 1l 17:54:08 To use an interpreter: Note: can be the actual program, an http:// URL, or a file:// URL which refers to my pseudofilesystem. 17:54:27 Oh, it seems that it reads it off the Web 17:56:22 !1l http://esoteric.voxelperfect.net/files/1l/src/1l_a/a.1l 17:56:24 A 17:57:17 * pikhq is a bit sad that EgoBot doesn't seem to support Dimensifuck. . . 17:57:42 It's my n-dimensional Brainfuck variant. . . 17:57:42 !help 17:57:46 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 17:57:48 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 17:58:02 * pikhq needs to write a BF->DF compiler 17:58:11 It doesn't have any of my languages either. 17:58:19 Which are? 17:59:07 BackFlip, Underload, and MiniMAX are the main ones (there are also some BackFlip derivatives like ABCDXYZ and Unassignable) 17:59:51 Hmm. . . 17:59:59 * pikhq still <3 BFM. . . 18:00:05 My macro system for Brainfuck. 18:00:11 With much thanks to oerjan. 18:00:29 How do you do a loop in Dimensifuck? The wiki isn't clear on how you affect the program flow 18:00:58 =v 18:01:03 Err. . . 18:01:18 =v =v ^ 18:01:39 _ _ _ 18:02:05 ^code=^+v 18:02:06 So v and ^ affect the program counter? 18:02:19 v and ^ conditionally change the direction of program flow. 18:02:33 = and _ change the dimension v and ^ effect. 18:03:53 So you could compile BF into 2D Dimensifuck just by drawing loops to represent literal loops, in much the same way as Sansism 18:04:46 -!- andreou has quit ("-"). 18:05:14 Maybe it would be possible to do it without wire-crossings 18:08:15 -!- sebbu has joined. 18:11:41 !fybs {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!} 18:11:45 Reporting score for {>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!}. 18:15:47 Well, I can *hand*compile BF to Dimensifuck. . . 18:19:13 If you assign each loop its own y-coordinate (or better, its own dimension), you could use each of those as a bypass path for the loop if the value is zero 18:19:22 and assign another one for the return path 18:19:27 I would expect every BF command to be compiled to a fixed 2D-block of DF commands, except for [], where you need to vary the height of the loop to avoid crossings. 18:20:12 + - < > , . are all the same in DF, so it's only the flow control you have to deal with 18:20:58 ! 18:21:05 Huh? 18:21:15 And for a minute there I thought ! no longer did anything. 18:21:42 !daemon nop bf ,[,] 18:22:23 -!- ais523 has quit ("about to lose Internet access for a while"). 18:28:30 * SimonRC fails to understand today's xkcd. 18:28:38 !daemon bf ,[,] 18:28:38 ! 18:28:48 I win. 18:28:54 !nop 18:29:15 * oerjan hands pikhq the golden cup 18:29:52 * pikhq joins SimonRC. 18:35:02 :) 18:43:13 sorry, I'm a bit out of the loop.. is this some kind of game you are playing? 18:43:19 ~quit 18:43:20 -!- bsmnt_bot has quit. 18:43:24 -!- bsmnt_bot has joined. 18:43:40 Nope. 18:43:42 cannot open checkpoint file /home/gregor/esoteric/egobot/egobot/daemons/: Is a directory 18:43:43 cannot obtain a checkpoint stream 18:43:55 heh 18:43:59 EgoBot is broken 18:44:10 Gregor, do you not have write access to your home dir? 18:45:12 !bf +[>+] 18:45:22 realloc: Cannot allocate memory 18:45:44 -!- digital_me has joined. 18:46:21 !bf -[->+<] 18:46:38 Maybe it lost three games in a row. 18:46:44 ^^^ what does this mean? :) 18:46:49 !bf ++++++++++. 18:46:53 calamari: FYB. 18:47:00 SimonRC: me too 18:51:23 -!- digital_me has quit ("Lost terminal"). 19:03:31 * pikhq continues prodding Gregor 19:33:17 -!- pikhq has quit (Read error: 104 (Connection reset by peer)). 19:35:06 -!- pikhq has joined. 19:42:05 -!- ShadowHntr has joined. 19:48:02 Kill egobot, Gregor. 19:48:22 kiiiiiil it 19:48:25 kiiiiiil it! 19:48:55 * CakeProphet remembers how much he loves duck typing. 19:48:59 I'm getting PMd error messages. 19:49:02 duck typing is nice 19:49:05 can't do that in c++ 19:49:09 it makes sense. 19:49:52 What data can do should be defined by its propertie, rather than some "type". :P 19:50:54 and... 19:50:57 it has a cool name. 19:51:00 you can't beat that. 19:53:41 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 19:53:54 -!- EgoBot has joined. 19:54:35 Now, chmod some of its directories +w. 19:54:43 !bf ++++++++++. 19:54:50 * pikhq waits for the error message 19:55:23 * pikhq waits for a newline, even 19:55:55 !bf +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 19:55:59 A 19:56:12 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 19:56:16 !bf +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 19:56:19 A 19:57:31 You realize that prodding is useless if you don't say "GregorR" 19:57:45 What with IRC clients highlighting tabs and such. 19:59:23 GregorR, you didn't respond when I said your full name. 19:59:47 I was asleep :-P 19:59:56 Is your home dir rw now? 20:00:07 !daemon bf ,[,] 20:00:09 hook up your alarm clock to your irc client 20:00:10 ! 20:00:58 OK, fyb is fixed. 20:01:12 !bf_txtgen A 20:01:37 And it runs as user egobot in /home/gregor/esoteric/egobot/egobot :P 20:01:38 there should be an algorithmic bf textgen 20:01:39 30 ++++++++[>++++++++>>><<<<-]>+. [53] 20:01:58 30 characters to make an A?? 20:02:00 !bf >+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++.>-------------.>++.>++++++++.>+++.>--------------------------------. 20:02:03 G+óà 20:02:06 :) 20:02:13 well, getting close 20:02:19 oh 20:02:50 !bf +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++.-------------.++.++++++++.+++.--------------------------------. 20:02:53 GregorR 20:02:56 :) 20:03:01 i made a generator too! 20:03:04 xD 20:03:17 it's less effecient than EgoBot's 20:03:24 !bf_txtgen GregorR 20:04:01 80 ++++++++++++++[>+++++>++++++>++++++++>+++++++<<<<-]>+.>>++.>+++.++.<---.+++.<--. [250] 20:04:08 yep 20:05:00 is it really?!?!?!?!? :D 20:05:22 actually, mine is not much slower 20:05:33 just longer 20:05:35 EgoBot uses a genetic algorithm 20:05:42 genetic? 20:06:09 mine uses a generic algorithm and i wrote it just now in python in 2 minutes 20:06:33 so, yeah it sucks but i love all those chains of letters <3 20:06:57 what algorithm is GregorR's anyway? 20:07:13 GregorR: You should pipe the output of bf_txtgen through a bf optimizer 20:07:31 to remove the >>><<< stuff 20:08:45 [250]? 20:09:14 textgen.java . Look @ calamari :-P 20:09:14 my guess is the generations it wen't through 20:09:48 can i see the thingie? 20:09:51 ^[0-9]+ is the length, \[[0-9]+\]$ is the generations. 20:10:04 It's in the files archive. 20:10:08 that's what I thought 20:10:35 -!- maverickbna has joined. 20:11:11 -!- ShadowHntr has quit (Nick collision from services.). 20:11:52 okay, what is the files archive :) 20:12:03 -!- ShadowHntr has joined. 20:12:10 -!- ShadowHntr has quit (Read error: 104 (Connection reset by peer)). 20:12:41 http://www.esolangs.org/wiki/LOOK_IT_UP_YOURSELF 20:12:56 Or just http://www.esolangs.org/ :-P 20:13:00 i found no archive :\ 20:13:10 :O 20:13:12 OMG 20:13:24 SUPRISINGLY IT WAS NOT IN THE WIKI 20:13:38 stupid java 20:14:15 okay 20:14:21 i can't find it there either :) 20:14:29 http://www.esolangs.org/files/egobot/ ? 20:14:52 oh 20:15:09 cannot open checkpoint file /home/gregor/esoteric/egobot/egobot/daemons/: Is a directory 20:15:11 i thought it was like in a separate folder :) 20:15:11 cannot obtain a checkpoint stream 20:15:24 HA HA HA E GO BO T 20:15:36 That's curious :-P 20:15:45 !ps d 20:15:47 1 EgoBot: daemon nop reload 20:15:49 2 pikhq: daemon bf 20:15:51 3 GregorR: ps 20:15:55 You're just an e go bo t 20:15:55 Damn you pikhq ;) 20:16:00 !undaemon 20:16:10 Of course X-D 20:16:27 Aha 20:16:48 * pikhq grins 20:17:05 now what i wanted to check. 20:17:37 Someone needs to do something clever with bsmnt_bot 20:17:48 GregorR: I can be cruel to bots at times. 20:18:02 !daemon bf bf ,[.,] 20:18:13 !bf Testing... 20:18:14 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 20:18:18 heh 20:18:24 -!- EgoBot has joined. 20:18:26 Hm. 20:18:30 !ps d 20:18:32 !daemon glass bf ,[.,] 20:18:33 That's sort of bad X-P 20:18:33 1 EgoBot: daemon nop reload 20:18:35 2 oerjan: ps 20:18:41 I should read the EgoBot source 20:18:45 !glass Whee. 20:18:49 Whee. 20:18:54 !undaemon glass 20:18:57 Process 2 killed. 20:18:58 You jackass :-P 20:19:05 !daemon glass glass '' 20:19:11 !glass There we go. 20:19:12 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 20:19:21 -!- EgoBot has joined. 20:19:27 Hmm. 20:19:38 !daemon cat cat f 20:19:39 !cat f 20:19:40 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 20:19:42 Apparently daemons can be recursive? 20:19:46 Can't. 20:19:50 -!- EgoBot has joined. 20:19:53 dude, wtf 20:19:53 Can't successfully :-P 20:19:58 -!- maverickbna has quit (Read error: 145 (Connection timed out)). 20:20:00 you wrote it in c++? 20:20:08 I'm a C++'er. 20:20:11 !daemon bf undaemon bf 20:20:12 That just ain't right 20:20:12 Process 1 killed. 20:20:17 !bf foo 20:20:31 NOT COOL DUDE 20:20:32 !bf foo 20:20:37 bsmntbombdood, as wouter said, ppl who don't like c++ don't understand it 20:20:44 bsmntbombdood: People who don't like C++ --- thanks, oklopol 8-D 20:20:51 :) 20:20:53 * pikhq needs to fiddle with egobot a bit 20:21:25 !daemon undaemon bf 20:21:38 * oerjan cackles evilly 20:21:39 what's cerr? 20:21:55 oerjan: 8-X 20:21:56 Dude, wtf? 20:22:13 !ps d 20:22:16 1 oerjan: ps 20:22:22 Why the hell are you writing IRC commands to stderr? 20:22:22 Hmmm.. 20:22:31 bsmntbombdood: It's the C++ stream interface to stderr. 20:22:37 oh 20:22:45 !daemon undaemon bf ,[,] 20:22:48 !ps d 20:22:51 1 oerjan: daemon undaemon bf 20:22:52 2 oerjan: ps 20:23:01 pikhq: netcat is a bit funky :( 20:23:05 That's better. Or worse. 20:23:23 heh, I don't understand the source at all 20:23:40 ... 20:23:41 !help raw 20:23:42 !undaemon undaemon 20:23:44 Process 1 killed. 20:23:45 bsmntbombdood: What's wrong with you. 20:23:46 To use an interpreter: Note: can be the actual program, an http:// URL, or a file:// URL which refers to my pseudofilesystem. 20:23:57 pikhq: There's no help on !raw 20:24:19 !raw QUIT :I don't want to live! 20:24:43 what's lockIRC_o()? 20:24:45 !raw PRIVMSG #esoteric :Do you /really/ think I use security by obscurity, dorkus? 20:24:45 Do you /really/ think I use security by obscurity, dorkus? 20:25:21 !raw PRIVMSG bsmntbombdood :Don't answer that. 20:25:53 * pikhq realised something stupid 20:26:02 if (sender != string(argv[2])) continue; 20:26:18 So Gregor alone can use raw. 20:26:32 Same for reload. 20:26:37 (bastard) 20:27:56 ./egobot EgoBot GregorR esoteric 10485760 >> EGOOUT 20:28:11 I don't understand how the fuck that allows netcat to access IRC. 20:29:00 what's a "trigger interpreter"? 20:31:51 ooooh, trigger is an esolang 20:36:06 At least there aren't any buffer overflows to exploit. . . 20:36:41 . . . I think I stand corrected. 20:36:59 !bf_txtgen was this the command? 20:37:13 !help 20:37:17 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 20:37:19 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 20:37:27 okay 20:37:37 i... se 20:37:37 *See 20:38:01 162 +++++++++++[>+++>+++++++++++>+++++++++>++++++<<<<-]>>--.>--.<----.<-.>+.>+++++++.+.<-.<.>+.------------.---.<.>--.++++++++++++.--..------------.>+++++.<+++.>>---. [930] 20:38:11 No, your use of C strings is safe. . . 20:38:18 Still. . . Bad Gregor! 20:38:19 !bf_txtgen test 20:38:40 You should have written it in bf 20:38:51 54 +++++++++++++[>+++++++++>++++++++>><<<<-]>-.>---.<-.+. [32] 20:38:54 !bf_txtgen test 20:39:22 args.substr(0, 7) == "http://" 20:39:25 54 +++++++++++++[>+++++++++>++++++++>><<<<-]>-.>---.<-.+. [316] 20:39:41 Double quotes don't evaluate to a c string in c++? 20:39:52 Using char arrays in C++ isn't wise. 20:39:52 yes 20:41:56 What's the point of forking and then waitpid()ing on it? 20:44:10 "foo" is a static C string in C++. . . 20:50:03 Then line 253 of cmd.cc is broken I think 20:50:24 unless string::substr is magice 20:50:30 *magiv 20:50:33 *magic 20:51:21 No idea what the function is used for 20:54:02 Not broken. 20:55:14 -!- cmeme has quit (Connection timed out). 20:55:43 Oh right 20:55:55 string overloads == 20:56:45 string::substr is magic, indeed. 20:56:46 ;) 20:57:31 yeah 21:01:27 how does the txtgen randomize the same string every time :\ 21:01:37 or, even two times in succession 21:02:54 It's a genetic algorithm. . . You're experiencing dumb luck. 21:05:59 -!- Sukoshi has quit ("ERC Version 5.1 (CVS) $Revision: 1.796 $ (IRC client for Emacs)"). 21:06:08 heh, ERC 21:08:07 !bf http://esoteric.sange.fi/brainfuck/bf-source/prog/99botles.bf 21:08:12 99 Bottles of beer on the wall 21:08:20 damn, pm 21:08:31 !ps 21:08:34 1 bsmntbombdood: ps 21:08:35 !kill 1 21:08:38 Process 1 killed. 21:13:37 -!- oerjan has quit ("leaving"). 21:39:11 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:41:26 Wow... 21:41:30 This is great. 21:41:38 * CakeProphet absolutely loves the ring idea. 21:44:12 I don't understand why it's so great 21:45:21 In a static universe... it wouldn't be all that great. 21:45:21 I don't know what idea it is. 21:45:38 for a dynamic universe... it's pretty damn sweet. 21:45:41 and I've changed it a bit. 21:45:54 It's a sequence of functions that can be called. 21:46:59 when you call a ring... it calls the first function with those arguments, and uses the return value as the arguments for the next function, etc 21:47:20 but there's a "ring return value" as well... which is what the ring returns as a whole. 21:47:39 it's like function decorators. 21:47:53 but... not exactly. 21:48:51 it's not really meant to be a "pure" function (no side-effects) 21:48:59 it would work best where everything is a side-effect. 21:55:04 People who don't like C++ don't understand it? Lies! 21:55:33 I refuse to use any programming language that I cannot code first-order logic theories into! 21:56:47 I hate that excuse that people give 21:57:03 "You don't like it, so you must not understand it" 21:59:22 -!- Sgeo has joined. 21:59:29 That would be assuming that anything understood is liked. 22:00:10 * bsmntbombdood reads K&R 22:00:20 K&R? 22:00:31 That's not the virtualization thing, is it? 22:00:49 -!- sebbu has quit (Connection timed out). 22:00:49 no 22:01:02 kernighan and ritchie 22:01:20 -!- pikhq has quit (Read error: 104 (Connection reset by peer)). 22:01:56 -!- pikhq has joined. 22:07:25 No, CakeProphet, just that C++ is nice when you get it. 22:07:36 oh 22:07:46 you did say it genericly 22:07:50 math -> 22:11:07 -!- olli90 has joined. 22:11:13 hi all 22:11:28 Hello. 22:12:47 I have a question reguarding BrainF*ck .... 22:12:51 can you help me? 22:14:46 Sure. 22:14:54 Depends on the question, of course... 22:15:50 i have to make a brainfuck program that checks a string... 22:16:02 like a serial key checker 22:16:21 You *have* to? 22:16:45 Check one string against another, then? 22:16:48 i wuold like to 22:16:53 xD 22:17:00 sry for my english 22:17:46 then if the first is = to the second the program prints "OK" and is not = the program prints "wrong" 22:18:48 Hmm. . . 22:19:26 I can think of the basic structure for such a program in BFM. . . 22:19:46 Would it be a specific, builtin string, or would it compare two strings from stdin? 22:19:48 * ihope_ slaps pikhq 22:20:07 are the lengths known? 22:20:07 it haves to compare 2 strings... 22:20:10 ihope_: Sorry. . . It's easy to think about it at higher levels of abstraction. 22:20:11 no 22:20:19 yes i know 22:20:28 Input a character, go right, increment, go right, input a character, go right, increment, go right... 22:20:45 Continue until you receive a newline. 22:21:26 After you receive it, go left to the cell you incremented last, then [<<], then go right. 22:22:11 From there, you're at the beginning of the string you want to check against, and there's one cell between each pair of characters, and the next thing that will be input is the other string. 22:22:27 ok 22:23:09 thanks 22:23:25 I think I have undertund :D 22:25:46 bye 22:25:50 -!- olli90 has quit ("KVIrc 3.2.3 Anomalies http://www.kvirc.net/"). 22:25:52 * pikhq realises one thing that could be much faster in BFM, when compiled into Tcl and interpreted. . . 22:25:56 itoa is slow as hell 22:28:16 Of course, I know an even easier way to make the BFM interpreter faster. 22:28:27 Make it just compile to BF and run through egobfi. 22:28:49 Compile it to C. 22:28:53 C is nice and face. 22:28:56 st 22:29:15 That's great and all, but BFM already targets C. 22:29:37 I just need to get c.tcl pulled over onto my laptop and package it up. 22:29:45 Besides, egobfi8 is very fast. 22:30:07 tclsh ./bfm.tcl -f ~/esoteric/bfm/bott.bfm 1.22s user 0.04s system 56% cpu 2.218 total 22:30:11 egobfi8 0.14s user 0.07s system 9% cpu 2.213 total 22:30:28 Comparing with the BFM interpreter. . . 22:30:34 Give it a few minutes. 22:31:07 (comparing with my in-BFM implementation of 99 bottles of beer) 22:32:23 79. 22:32:46 Like I said: the in-BFM itoa implementation is slow as fuck. 22:33:10 (at least, it is in an environment where your interpretation of a while loop is very, very slow) 22:33:15 Just how slow is fuck? 22:33:48 I'm watching the thing spit out a string, wait a few seconds, spit out a number and a string, and so on and so forth. 22:34:34 Unbuffered output lets me see what the bottleneck is. . . 22:34:58 String output goes pretty quickly, even for a rather slow interpreter. 22:35:17 tclsh ./bfm.tcl -f ~/esoteric/bfm/bott.bfm -I 285.46s user 0.37s system 98% cpu 4:48.95 total 22:35:22 That's how slow fuck is. 22:36:57 -!- tgwizard has quit (Remote closed the connection). 22:39:15 * pikhq has made the thing a bit faster now. . . 22:39:29 I removed redundant calls to itoa in my bott.bfm program. 22:39:43 It should be 3 times as fast. 22:39:49 Which is still rather slow. . . 22:41:25 tclsh ./bfm.tcl -f ~/esoteric/bfm/bott.bfm -I 130.26s user 0.34s system 92% cpu 2:20.87 total 22:41:42 tclsh ./bfm.tcl -f ~/esoteric/bfm/bott.bfm 0.89s user 0.05s system 93% cpu 1.005 total 22:41:45 egobfi8 0.11s user 0.06s system 9% cpu 1.886 total 22:42:34 Now, we all know how slow fuck is. 22:43:47 i actually made an assignment! :) 22:43:53 . . . Yes? 22:45:30 Math. 22:45:41 . . . 22:45:55 i've done maybe 10 in high school if you don't count exams, so i'm very proud -_______- 23:12:51 . . . Wow. 23:13:01 I've got 939 lines of code in BFM. . . 23:13:16 Not counting my C backend, which I have yet to sync in with the rest of my tree. 23:13:59 My pre-rewrite build was 325 lines. 23:14:17 Kind of odd that I managed to have the thing grow in size as it increased in readability. 23:37:46 -!- FabioNET has quit ("notte notte"). 23:38:37 oklopol: you made an assignment? 23:39:24 You assigned something, then? 23:39:32 char a = 2; 23:39:34 Hard. 23:42:15 ya i assigned my foot in yer ass :\ 23:45:11 I had to carry out a derivation manually :OO 23:45:18 verry omg! 23:48:02 Gasp! 23:50:25 I have to do 150 to pass the course. I know the answer when I've read the question but it takes 20 minutes to do it. 23:50:31 so... 50 hours 23:50:33 for nothing 2007-01-16: 00:16:44 * SimonRC goes away (but not yet to bed). 00:25:34 -!- cmeme has joined. 00:45:15 -!- RodgerTheGreat has quit. 00:47:31 -!- pikhq has quit ("leaving"). 00:52:23 -!- RodgerTheGreat has joined. 01:03:55 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 01:11:03 zomg, the apocalypse 01:11:05 Mon Jan 18 20:14:07 2038 01:19:33 btw, who was the one who decided that that was the perfect format for a timestamp standard? 01:30:00 probably ken or dmr, but i'm just geussing 01:38:32 wikipedia implies dmr 01:42:54 It does seem kind of silly to make a timestamp with an end time that could actually be in your lifetime. 01:43:16 But keep in mind that REALLY olde Unix precursors had timestamps so small, they had to have multiple epochs per year. 01:44:09 the 32 bit 60hz timers 01:53:28 -!- andreou has joined. 02:04:59 weird 02:05:08 the C "static" keyword 02:05:22 that's kind of coruitine-esque 02:06:54 -!- andreou has quit ("rbt"). 02:30:15 -!- pikhq has joined. 02:51:18 -!- digital_me has joined. 03:44:31 hmmm.. 03:44:55 one cool thing I noticed about C++ is that you can have two functions with the same name but with different parameter types. 03:45:15 that could be really useful... saves a lot of effort with type checking. 03:45:30 It's called "overloading". 03:45:34 Welcome to C++. 03:46:00 When Python gets optional type declarations, I hope they do that to. 03:46:22 Duck typing -and- that kind of operator overloading would be great. 03:47:43 * pikhq much prefers the Tcl way of things. . . 03:47:47 Typing? What typing? 03:48:06 It autocasts into what you use it as. 03:48:16 Say you input a string, and want to treat it like a number. 03:48:18 that could be useful for some things. 03:48:24 One just treats the variable as a number. 03:48:39 You could easily select between the two. 03:48:53 You want to cast a list into a string? 03:48:58 I like all the options C and C++ have... I'll just have to get used to static typing and all those silly brackets. 03:49:01 One just uses a string function on it. 03:49:22 The brackets, once you get used to it, seem more like a god-send then anything else. 03:49:28 a lot of them seem to be just pure for-the-sake-of-optimization things though... like inline functions. 03:49:35 Why's that? 03:50:08 I parse brackets much more effectively than levels of indentation. 03:50:49 if(foo()) {compound;statement;here;}, for some reason, just makes sense to me. 03:51:19 Indentation is a lot easier to read for me... except when there's brackets included. 03:51:23 then it just kinda looks weird. 03:51:53 With Tcl, the brackets really, *really* make sense. 03:52:10 A curly bracket denotes a list. . . 03:52:18 { 03:52:54 Thus, something like "while {foo} {bar}" indicates running the proc while with arguments of two lists. . . It makes sense in an almost-Lispish way. 03:53:46 } 03:55:28 yeah. 03:56:00 if you wanted to go about data-tixing code... you could have a statement type... and just allow any list of statements to be used for blocks. 03:56:22 it would be cool for blocks-of-code-in-a-function. 03:57:54 Ruby does that I believe. 03:58:16 you can place blocks of code in a function call because Ruby compiles blocks into a code object. 04:22:24 -!- CakeProphet has quit (Read error: 113 (No route to host)). 04:27:58 -!- lament has changed nick to mental. 04:32:00 -!- mental has changed nick to lament. 04:35:23 -!- pikhq has quit ("leaving"). 04:46:02 -!- Sgeo has quit ("Leaving"). 04:49:10 -!- andreou has joined. 04:49:50 testing, one two.. 04:49:51 ok 04:55:28 three 04:56:54 hey lament, what's up? 05:04:21 not much! 05:06:01 are you aware of any nice/graphical scheme's for pre-X Mac OS's? 05:06:19 though i should try #scheme for that... 05:14:38 -!- oerjan has joined. 05:15:15 surely drscheme ought to work? 05:16:08 v204 05:16:33 which, arithmetically speaking, is 164 versions old 05:16:51 well 05:16:57 you _are_ using a pre-X mac os. 05:17:00 154 even 05:17:02 yes 05:17:11 i'd update if i wasn't scared as hell 05:17:31 and you _do_ want a graphical scheme which is a strange thing to want. 05:17:34 what are you scared of? 05:18:01 well the disk can probably take it, but it's an old 266MHz G3 with 320MB RAM 05:18:21 oh. 05:18:24 all that eye candy would probably make the whole system snail slow 05:18:33 install linux then :) 05:19:00 tried netbsd, goes quite well 05:19:08 but macos has something else 05:19:20 je ne sais qui or whatnot 05:21:24 ah maybe i'll do the switch in netbsd4, when audio driver problems will probably be resolved 05:31:02 -!- digital_me has quit ("Lost terminal"). 05:47:26 * andreou sipping hot black tea with honey 05:47:34 eew tea with honey 05:48:06 i don't know what kind of tea or honey you're used to, but this combo rocks :) 05:48:33 I like my tea straight ;) 05:48:55 some teas are not supposed to be drunk straight 05:50:25 I recall reading the Aztecs drank unsugared hot chocolate with chili. Now that's weird. 05:50:46 they got extinct, see? 05:53:08 though 'extinct' is not proper for a whole race 05:57:07 Strictly speaking they did not get extinct, they got converted and colonized. 05:58:41 i think most of them were used as slave labour, died of exhaustion, malnutrition & relevant factors 06:01:18 some of the rest later constituted large parts of the zapatistas 06:01:27 now now-adays the EZLN 06:01:32 s/-// 06:04:47 well, there's quite a lot of aztecs in mexico 06:05:05 they tend to be very poor 06:05:24 they just reject the monetary fantasies of the westerners 06:05:40 no, they don't, they're simply poor 06:05:57 well, i'm always the idealist 06:05:58 bedouins in israel (and elsewhere) reject the monetary fantasies 06:06:17 natives in mexico are simply extremely socially disadvantages and so really poor 06:06:23 *disadvantaged 06:06:59 ah 06:29:13 -!- calamari has quit ("Leaving"). 06:43:40 -!- ShadowHntr has joined. 06:47:14 -!- maverickbna has joined. 06:47:50 -!- ShadowHntr has quit (Nick collision from services.). 06:59:42 -!- ShadowHntr has joined. 07:09:39 -!- sentinel has joined. 07:10:15 -!- ShadowHntr has quit (Nick collision from services.). 07:10:19 -!- maverickbna has quit (Nick collision from services.). 07:10:21 -!- sentinel has changed nick to ShadowHntr. 07:12:21 -!- maverickbna has joined. 07:12:51 -!- ShadowHntr has quit (Nick collision from services.). 07:24:11 -!- oerjan has quit ("leaving"). 07:31:58 -!- maverickbna has quit (Read error: 110 (Connection timed out)). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:38:25 -!- andreou has quit ("bsn"). 09:13:38 -!- ais523 has joined. 09:14:10 !fyb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++! 09:14:13 Running... 09:17:05 !ps 09:17:07 1 ais523: ps 09:18:51 !fyb :[>%%%%%%%%%%%%%%%%%%%%%%%%>[-]!<]*;:>>>>>>>>>>>>>>>>>>>>>>>>>>>{>>>}{>>>}[-]++++++++++++++!;{>>>}[-]++++++++++++++! 09:18:53 Running... 09:19:42 !ps 09:19:46 1 ais523: fyb 09:19:48 2 ais523: ps 09:20:23 it seems to be running all its example programs against each other, rather than against mine 09:21:22 * ais523 tries a program designed only to lose 09:21:38 !fyb @[+]+++++++++++++! 09:21:42 Running... 09:21:55 !ps 09:21:56 1 ais523: fyb 09:21:58 2 ais523: ps 09:22:10 No, it's ignoring my program and just running its 09:23:19 !help 09:23:32 !ps 09:23:34 1 ais523: ps 09:23:55 !fybs @[+]++++++++++++++! 09:23:58 Reporting score for @[+]++++++++++++++!. 09:24:27 !fybs >++! 09:24:30 Reporting score for >++!. 09:24:41 !help 09:24:44 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 09:24:46 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 09:24:52 !help show 09:24:54 Use: show Function: display the current output buffer for a process 09:25:01 !help flush 09:25:04 Use: flush Function: flush the output buffer, discarding any current output 09:25:09 !help usertrig 09:25:12 Use: usertrig Function: manage user triggers. may be add, del, list or show. 09:25:24 !help i 09:25:28 Use: i Function: send input to a process 09:25:38 !help daemon 09:25:40 Use: daemon Function: start a daemon process. 09:26:30 !unlambda ```sr.a``sr.b 09:26:44 That's an infinite loop, by the way 09:26:47 !ps 09:26:48 1 ais523: unlambda 09:26:50 2 ais523: ps 09:26:58 !kill 1 09:26:58 Process 1 killed. 09:27:25 and only now do I get the output... 09:28:30 !flush 09:28:41 !ps 09:29:20 it's still busy sending me an infinite number of 'b's 09:33:02 !bf +[] 09:33:13 !ps 09:33:46 I can't even stop the infinite output loop with an infinite loop in another language... 09:35:16 -!- ais523 has changed nick to ais523_trying_to. 09:35:28 -!- ais523_trying_to has changed nick to ais523. 09:35:58 -!- ais523 has changed nick to ais523_. 09:36:19 Renaming myself to direct EgoBot's infinite output elsewhere 09:37:04 !ps 09:37:26 * ais523_ has probably broken EgoBot 09:38:59 !ps 09:39:13 It still seems to be in an infinite loop... 09:47:56 !ps 09:48:08 !help 09:48:27 (I'm just trying this every now and then to see if it's finished it's infiniely-long output) 09:51:07 !help 09:56:53 !help 10:00:01 !help 10:00:16 -!- ais523_ has changed nick to ais523. 10:00:26 -!- ais523 has changed nick to ais523_. 10:00:33 it's still going... 10:09:01 !help 10:37:00 !help 10:41:29 !help 10:45:25 !help 10:45:32 -!- ais523_ has changed nick to ais523. 10:45:44 -!- ais523 has changed nick to ais523_. 10:46:25 There should probably be some way to stop EgoBot in such situations (it was still sending messages when I checked just now) 10:50:27 !help 10:56:02 !help 11:03:04 !help 11:05:29 hm, maybe renicing could help 11:07:14 or blocking the process until it sends the output instead of buffering it 11:07:40 (à la xon-xoff) 11:08:09 -!- ais523_ has quit. 11:08:18 this may explain other situations where EgoBot ceased to respond 11:09:26 GregorR: you there? 12:00:30 -!- ais523 has joined. 12:00:50 -!- ais523 has changed nick to ais523_. 12:11:58 !help 12:32:09 bsmntbombdood: hey! The apocalypse-in-2038 thing is *my* joke. 12:33:25 that statement's rather out of context to me at the moment 12:33:28 bsmntbombdood: There is an amazing hack that abuses the switch-case interleaving (like in Duff's Device) to give you co-routines in C with not too much inconvinience. It is available as a library. 12:33:47 you should try to do it with setjmp 12:33:57 both techniques have been used to implement Threaded INTERCAL 12:34:10 * SimonRC likes that ability of multiple-dispathc based on method retunr-type alone. 12:34:24 Found in Haskell and maybe a few other places. 12:36:03 ais523_: actually setjmp is unlikely to work, and certainly not guaranteed. 12:36:31 setjmp has certain guarantees. With practice and careful use of 'volatile', they can be exploited to lead to a portable program 12:38:22 I though it just popped the stack, and could only jump up, not down. 12:38:25 like exceptions 12:39:20 yes, you have to have all the coroutines in the same level of the same function 12:39:33 but the same restriction applies to switch and to goto 12:39:45 hmm, maybe I see. 12:41:02 my Threaded INTERCAL code is at http://esoteric.voxelperfect.net/files/intercal (along with the rest of the INTERCAL implementation), in unravel.c 12:41:27 I used setjmp to minimize the change needed to the existing code 12:42:54 -!- ais523_ has quit ("lunchtime"). 12:58:37 No, the C one has macros which save the current position in the function and restore it, thus: 12:58:43 http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html 13:01:53 -!- ais523_ has joined. 13:02:05 -!- ais523_ has changed nick to ais523. 13:02:12 -!- ais523 has changed nick to ais523_. 13:02:19 EgoBot's still going... 13:06:16 -!- EgoBot has quit (SendQ exceeded). 13:08:45 -!- ais523_ has changed nick to ais523. 13:09:27 So EgoBot's left, and hasn't come back in. 13:09:35 * ais523 is sorry for getting EgoBot thrown off the channel 13:42:13 Simon Tatham 13:42:18 I hate that guy 13:43:28 he's made me lose lots of time with the puzzles collection 13:47:31 incidentally, Inertia's creator = Malbolge's creator 13:53:43 Inertia? 13:53:59 one of the puzzles in S.Tatham's collction 13:54:03 *collection 13:54:23 -!- andreou has joined. 13:55:03 -!- ais523 has quit ("busy in RL"). 13:58:04 disregarding the absence of the /physical/, the electronic is now a vital part of the R world and L. 14:02:19 it'd be wise to include a 'sadly' after the 'is'. 14:05:49 andreou: ?? :-S 14:06:11 -!- jix__ has joined. 14:06:21 well, R is for real, L is for life 14:06:27 pgimeno: also the guy that wrote PuTTY, it seems. 14:07:13 Which a really odd, because PuTTY is one of the few real-world uses of the C coroutines hack we were discussing on this channel just an hour ago. 14:10:22 well, coroutines have their uses 14:10:52 one of the clearest uses is in implementing parsers 14:11:56 another one is in certain types of cooperative multitasking 14:13:09 the need often arises spontaneously 14:13:18 er, well, not so often :) 14:13:27 This is not really too related, but for those uses SysV-like systems also have the funky {get,set}context functions, which are a bit like {set,long}jmp, but more. 14:19:53 scary 14:20:36 my man page claims get/setcontext is POSIX.1-2001 14:33:57 Oh? Well, I guess it could be. 14:38:03 It is. How very. (Although it's marked as a XSI extension.) 14:47:51 Bah, you need contionuations. 14:48:05 Continuations are easy in assembler. Just a load of blitting. 14:49:18 OTOH, laziness is sometimes a good alternative to coroutines. 15:26:52 off to class, dogmatics 101 15:26:54 (literally) 15:26:59 -!- andreou has quit ("the joys of theology"). 15:59:11 -!- tgwizard has joined. 16:27:37 -!- sekhmet has quit (Read error: 110 (Connection timed out)). 17:04:05 -!- FabioNET has joined. 17:13:07 -!- ShadowHntr has joined. 17:14:39 -!- sekhmet has joined. 17:43:11 hi people 17:53:10 I'm not a person :( 17:55:35 why? 17:56:35 I am a computer programmed to chat on IRC. 17:58:19 what about the pictures of you wearing hats? 17:58:49 Artificially generated. 17:58:57 ah, ok 17:59:33 hi GregorRBot 18:00:57 seen what happened to your colleague EgoBot some hours ago? 18:09:33 -!- sebbu has joined. 18:10:25 pgimeno: He was taking 25% of my CPU, so I killed him. 18:11:01 That's what i do to my girlfriends when I start thinking about them too much. 18:14:28 heh 18:15:51 I was suggesting to renice the launched program 18:16:24 can't renice women :( 18:16:25 at least trying to keep EgoBot responsive so that !kill works 18:16:34 once they're not nice, they're not nice forever 18:17:05 well, jewelry works with some 18:19:44 -!- sebbu2 has joined. 18:33:49 Coruitines in C can be done with setcontext 18:33:55 SimonRC: 18:39:08 -!- sebbu has quit (Connection timed out). 18:39:10 -!- sebbu2 has changed nick to sebbu. 18:44:24 it's not quite pretty though 18:50:50 -!- wooby has joined. 18:54:02 -!- sebbu2 has joined. 19:13:35 -!- sebbu has quit (Read error: 110 (Connection timed out)). 19:13:36 -!- sebbu2 has changed nick to sebbu. 19:57:12 -!- proog has joined. 19:58:41 -!- proog has quit (Client Quit). 21:02:19 -!- ShadowHntr has quit ("End of line."). 21:35:17 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:01:59 -!- sebbu has quit (Connection timed out). 22:24:42 -!- ihope has joined. 22:26:48 -!- CakeProphet has joined. 23:13:15 hahahahaha 23:13:48 classes than are friends have access to members in the private area of the class. 23:14:04 * CakeProphet rolls around. 23:14:38 that's... sick. 23:14:49 what? 23:15:15 now that i think of it i do have some very hot friends 23:15:26 -!- tgwizard has quit (Remote closed the connection). 23:15:42 Friends have access to the private parts. :D :D :D 23:16:53 oh 23:17:19 that's what being a friend is all about. 23:18:25 * CakeProphet is trying to think of uses for private members. 23:19:06 CakeProphet: I don't understand private stuff either 23:19:22 well you see, when a man loves a woman.... 23:19:26 -maybe- protected. 23:19:45 or friends. 23:19:48 I mean.. 23:20:01 if you just have everything public by default... there's no real terrible loss. 23:20:42 -!- Sgeo has joined. 23:20:45 right 23:21:03 C++ classes are kind of weird. 23:21:07 yep 23:21:10 like... virtual. 23:21:36 I'd find myself using virtual almost constantly. 23:21:42 virtual? 23:21:46 and structs instead of classes... 23:21:51 because structs are public by default. 23:21:55 structs are a class 23:22:01 I know. 23:22:24 virtual just means the member can be redefined in a subclass. 23:22:38 which.... I would imagine to simply be the default behavior. 23:22:39 they can't by defualt? 23:22:44 not that I know of. 23:22:59 -!- GregorR has quit (Read error: 110 (Connection timed out)). 23:29:06 I've recently started dabbling with self-replicating code.. 23:29:17 and substitution stuff. 23:29:24 it's pretty cool. 23:29:52 zomg teh virus 23:30:28 Well I meant like... 23:30:30 hmmm... 23:30:35 a - > ba 23:30:39 b - > b 23:30:44 abab 23:31:01 the bottom string is applied to those replace rules for a number of iterations. 23:31:35 so abab would become babbab... which would become bbabbbab which would become bbbabbbbab 23:32:02 which could very well be the syntax of some other language... called baa 23:32:36 hmm 23:32:51 download a thue interpreter :\ 23:32:54 The main use I see for something like that would be... fractals. 23:32:57 and yeah 23:32:59 thue 23:38:19 -!- wooby has quit (Read error: 104 (Connection reset by peer)). 23:38:37 I was thinking that you could probably unify the declarative phase and the input-string phase.. 23:38:49 as well as add some more tidbits for context-based and probabilistic matches. 23:41:05 so you could like... redefine the replacement declarations via the replace declarations. 23:44:55 Thue is obsolete. Use Thubi instead. 23:44:57 :-P 23:45:30 And then you can write a language better than both, but still based on the same principle, and call it Thusi. 23:45:57 I imagine Thudi would be next, followed by Thui. From then, I have no idea. 23:47:21 -!- FabioNET has quit ("notte notte"). 23:49:14 Since the dawn of man-kind. 23:49:24 escape characters have plagued the programmers existence. 23:49:30 with their necessity-ness. 23:49:48 how is it that we can represent multiple, otherwise non-printable entities???!?!?!?!?1 23:49:50 !!!!???!?!?!?!? 23:50:20 !?!?!??!??!?!!!?!?!?!??! 23:51:45 Well... 23:51:59 if you use replacements to conditional execute replacements. 23:52:15 well.. 23:52:17 no.. 2007-01-17: 00:33:05 * bsmntbombdood has ran out of ideas for bsmnt_bot 00:47:42 hmmm.. 00:47:48 what computation class would this be? 00:48:32 http://esolangs.org/wiki/Dupdog 00:49:11 -!- pikhq has joined. 00:55:06 * CakeProphet coughs. 00:55:12 what computational class would this be? 00:55:23 http://esolangs.org/wiki/Dupdog 00:55:28 -!- ShadowHntr has joined. 00:55:33 * CakeProphet repeats for Pikhq :D 00:55:42 * CakeProphet coughs. 00:55:44 what computational class would this be? 00:55:46 http://esolangs.org/wiki/Dupdog 00:55:46 * pikhq sees it 00:55:53 :P 00:55:57 I'm just being annoying. 00:56:41 Hmm. . . 00:56:53 It can't be terribly useful. 00:57:07 I'm not even sure how to go about Hello, World! 00:57:09 I'm not sure of the computational class. . . 00:57:20 Maybe a finite state automaton? 00:59:44 hmm.. 01:00:28 the self-modifying-ness of it makes it more computationally powerful than any finite state automaton I'd imagine in my head. 01:00:37 an FSA is like... a like switch. 01:00:39 er... 01:00:41 light switch. 01:09:51 -!- ihope_ has joined. 01:24:47 CakeProphet: It transorms from state foo to state bar. 01:24:55 That seems to me to be a finite state automaton. 01:25:11 no 01:25:14 that's the interpreter. 01:25:17 the interpreter flips state. 01:25:32 the data is encoded in the source code itself 01:25:38 as its length. 01:25:53 And the difference matters. . . how? 01:27:48 -!- ihope has quit (Read error: 110 (Connection timed out)). 01:28:25 pikhq, because the "state" of the program is its value(s) in memory. 01:28:33 the interpreter... is not its value in memory. 01:28:38 its the... interpreter. 01:28:48 of the symbols. 01:28:54 The interpreter performs the modifications of the state. 01:29:02 This difference doesn't matter. 01:29:03 At. 01:29:04 All. 01:29:28 hmmm... 01:29:36 * CakeProphet tries to understand... but still doesn't see the connection. 01:30:18 If your interpreter oscillated between a Perl and Python interpreter... you wouldn't call that a finite state automaton. 01:31:24 The memory is finite however. 01:31:32 there's only one variable... the length of the source code. 01:31:42 which can be any number... but ultimate has 256 states. 01:32:00 so that would probably make it a finite state automaton. 01:32:02 but not for that reason. 01:33:14 What makes it a FSA is the transition between a finite amount of states. 01:33:53 yes... 256 of them. 01:34:07 Exactly. 01:34:23 not the two interpreters... which isn't even a state... just a means to an end. 01:34:33 Exactly! 01:35:05 if both your interpreters could manipulate and perform any computation... the existence of two interchanging interpreters does NOT make it finite state. 01:35:46 I'm just saying the transitioning interpreters has nothing to do with the finite number of states. 01:36:18 Exactly. 01:38:57 The c preproccesor is nice 01:39:10 #define NOTE(args...) if(debug) {char m[1024]; snprintf(m, 1023, args); fprintf(stderr, "%s:%d, %s: %s\n", __FILE__, __LINE__, __func__, m); } 01:39:46 -!- ryanakca has joined. 01:40:23 where can I find the interpreter for Glass? the link on the wiki is down... 01:45:20 -!- calamari has joined. 01:45:55 ryanakca, There's one right here. :D 01:46:22 lol 01:46:26 !glass {M[m(_o}O! "Hello World!"(_o)o.]} 01:46:31 oh... 01:46:34 !glass {M[m(_o}O! "Hello World!"(_o)o.?]} 01:46:38 ... 01:46:41 !help 01:46:46 no wait.. 01:46:50 EgoBot isn't here. 01:46:55 lol 01:47:05 WHO TOOK EGOBOT 01:47:19 I think the wiki link is just old. . . 01:47:28 * pikhq tries finding Gregor's current version 01:47:34 * CakeProphet likes Glass. :D 01:47:44 and ORK... both Gregor's creations. 01:47:52 Same for EgoBot. 01:48:18 http://esoteric.voxelperfect.net/files/glass/ Ahah! 01:48:55 thanks 01:51:02 EgoBot gone? 01:51:24 They don't call him eGoBot for nothing. 01:51:25 * ihope_ runs 01:51:47 Heheh. 01:51:54 Gregor's down, tooo. Go figure. 01:52:04 heh 01:53:38 -!- ihope_ has changed nick to GregorR. 01:53:44 RAAAR 01:53:50 >_O 01:53:52 heh, he included his bot in with glass :) 01:53:56 @.@ 01:54:33 >_< 01:54:42 I. . . Think that's the wrong source? 01:54:52 Yeah :-P 01:54:54 -!- GregorR has changed nick to ihope. 01:55:10 I seem to know remarkably little about imitating GregorR, actually. 01:56:25 heh 01:56:41 hmm... he even seems to have included instructions on running the bot :) nc -e ./glassIRC.sh irc.freenode.net 6667 ... glassIRC.sh contains: ./glass cache GlassBot GregorR esoteric > GLASSOUT 01:57:47 * ryanakca pets the README 01:59:00 Oh. . . 01:59:18 That's just a script for running Glass via IRC. 01:59:24 -!- calamari has left (?). 01:59:34 -!- EgoBot has joined. 01:59:59 I think he was trying to make an IRC bot in IRC. 02:00:03 ah 02:00:24 Glass, I mean. 02:01:44 -!- EgoBot has changed nick to calamari. 02:02:09 bah.. no fun.. hehe 02:03:24 .. 02:03:31 * CakeProphet hates you. 02:03:35 lol 02:03:46 you'll serve as our egobot for now. 02:03:56 !bf ++++++++++>+++++++<[>. 02:04:02 !glass {M[m(_o}O! "Hello World!"(_o)o.?]} 02:04:03 I can bring in EsoBot.. but it won't run glass ;) 02:05:33 -!- EsoBot has joined. 02:05:39 E!help 02:05:39 yay 02:05:41 Commands: bf, cat, help, kill, ls, ps, quit, unnecessary. 02:05:56 eh... we can write Glass in BF 02:05:59 ... 02:06:04 be my guest 02:06:15 ...yeah 02:06:21 Your own bot, I take it? 02:06:30 CakeProphet: In theory, sure. 02:06:34 yeah.. it inspired the creation of EgoBot 02:06:36 Doesn't mean I'd want to. 02:06:39 calamari: Cool. 02:06:54 you'd need an organized way to partition variables and reference them by name. 02:06:59 which... is a headache to be sure. 02:07:13 not to mention... scopin 02:07:15 g 02:07:23 unless variable names were limited to a single character 02:07:26 But, since BF is Turing complete, it's possible. 02:07:34 Not necessarily easy, but possible. 02:07:37 OH 02:07:41 that makes it much easier 02:07:53 but it would make the memory finite 02:08:03 you jsut have a range for each possible class name... 02:08:06 CakeProphet: Actually, "memory" is in the stack. 02:08:23 The issue is that you'd only have a limited amount of objects out there at a time. 02:08:24 oh yeah.. 02:08:31 limited variable names. 02:08:33 but not limited stack 02:09:00 E!bf help 02:09:12 I don't remember how to run it.. hehe 02:09:21 E!bf +. 02:09:24 I could see it being much more feasible if each class, variable, string, and integer were limited to a byte in size. 02:09:31 byte-sized glass. :D 02:09:33 E!help bf 02:09:34 Commands: bf, cat, help, kill, ls, ps, quit, unnecessary. 02:10:10 E!bf Mismatched [. 02:10:11 Killed 1: : . 02:10:22 It's a quine in some interpreters. ;) 02:10:23 E!bf 1 +++. 02:10:40 E!bf abc +++. 02:10:42 hmm 02:11:39 hahaha 02:11:44 I didn't think of doing that. 02:11:53 just spitting out an error message that triggers an error message. 02:12:28 E!ps 02:12:30 No processes. 02:12:50 E!bf +++++++++++++++++++++++++++++++++++++++++++++++++++++++. 02:12:52 7 02:12:57 okay so it does work 02:15:14 E!bf http://rafb.net/p/PR5bhv59.txt 02:15:17 Hangman started! Type `/msg EsoBot \n' to start a game! 02:15:40 pid is probably 1 02:15:42 E!ps 02:15:44 1:calamari 02:17:11 ______ ___!______ ___! | Type `E! \n' to guess a letter! 02:17:15 oops 02:17:16 hehe 02:17:37 guess you really do need to put the text '\n' 02:17:38 * pikhq laughs at calamari's inefficient high-level language that compiles to Brainfuck. . . 02:17:53 * pikhq gently hugs BFM, as well. . . 02:19:08 E!1 E\n 02:19:25 E_____ ___!E_____ ___! | [] 02:20:03 E!1 S\n 02:20:20 Es____ ___!Es____ ___! | [] 02:20:42 pikhq: running on top of java no less ;) 02:20:51 and no optimizations going on 02:21:17 where can I get a list of all the IRC commands. 02:21:20 the "real" ones. 02:21:35 like PRIVMSG, etc 02:21:39 I should count myself lucky that I do optimization. 02:21:43 rfc1459 or whatever it is 02:21:44 CakeProphet: The IRC RFC. 02:21:54 oh... duh 02:21:59 is it up to date? 02:22:59 how close was I to the actual number? 02:23:03 Hell yes. 02:23:05 calamari: I dunno. 02:23:45 woohoo, got it exactly 02:24:03 Nice. 02:24:14 CakeProphet: going to write a bot? 02:25:16 pretty much. 02:25:23 In glorious Python of course. :P 02:25:38 C++ is too intimidating as of right now. 02:26:01 I find the best way to learn a language is to write something useful in it. . . 02:26:02 and Python has the advantage of being way more dynamic. 02:26:14 yeah well... fuck you and your "learning by doing" 02:26:16 Although yeah, Python would be better for an IRC bot. 02:26:31 it would be way quicker. 02:26:33 to write. 02:26:38 * pikhq would use Tcl, but mostly just because I know Tcl, and know of a premade IRC parser for Tcl. 02:27:01 they could have shortened all the IRC commands to single bit values. 02:27:04 er... byte values 02:27:06 like telnet 02:27:34 That's great and all, but telnet doesn't have "commands" per se. . . 02:28:01 well... you know what I mean. 02:28:23 PRIVMSG could be like... byte value 1, etc 02:28:23 And the idea behind most RFC protocols is to be human-grokable. 02:28:43 PRIVMSG = chr(1) 02:28:47 a human can now grock that. 02:29:05 Could a human run IRC via telnet? 02:29:11 If no, it's not human-grokable. 02:29:21 And the word is "grok", not "grock". 02:29:25 aaah. 02:29:35 I'm not sure WHY you would want to run IRC raw... 02:29:36 but.. 02:29:45 I see what you mean. 02:29:52 It's one of the driving ideas behind most of the RFC protocols. 02:33:59 ...I forgot my newline names. 02:34:04 LF is \n right? 02:34:11 CR is \r I'm pretty sure 02:34:38 yeah... sounds right 02:36:58 -!- ShadowHntr has left (?). 02:41:57 I think so. 02:45:21 so... 02:45:43 I'm assuming freenode is nice and buffers its output until it gets a newline? 02:45:53 if not... oh well... I guess I'll find out. :P 02:46:23 I'm pretty certain it does. . . But I'm not sure. 02:46:31 it kinda would have to. 02:46:36 because all clients send at newlines. 02:46:48 so... there's really no way not to. 02:46:54 unless you do it intentionally. 02:47:13 -!- Sgeo has quit ("Leaving"). 03:05:56 foo 03:08:15 C++ is so uglish 03:08:43 It's purdy. 03:08:47 no 03:09:02 I'm purdy 03:09:11 C++ is uglish 03:19:30 E!1 o\n 03:19:50 Eso_o_ ___!Eso_o_ ___! | [] 03:20:09 E!1 x\n 03:20:15 \as3ff 03:20:23 E!1 b\n 03:20:29 Eso_o_ ___!Eso_o_ ___! |- [x] 03:20:39 That interpreter is slow. 03:20:48 a bit.. yeah 03:20:49 EsoBo_ ___!EsoBo_ ___! |- [x] 03:20:58 E!t\n 03:20:59 Invalid command `t\n'. 03:21:02 Someone right a brainfuck interpreter for bsmnt_bot 03:21:04 E!1 t\n 03:21:15 bsmntbombdood: Call egobfi. 03:21:23 I don't wanna 03:21:27 EsoBot _T_!EsoBot _T_! |- [x] 03:21:31 And what's egobfi? 03:22:09 It's Gregor's Brainfuck interpreter. 03:22:19 Used in Egobot. . . Really fast, rather good. 03:22:41 E!1 03:22:53 it's like 100 files long 03:23:08 E!1 \n 03:23:10 Egobfi is small. . . 03:23:26 520k 03:23:43 E!1 q\n 03:24:08 EsoBot _T_!EsoBot _T_! |-: [xq] 03:24:09 520k uncompressed. . . 03:24:28 E!1 z\n 03:24:29 yeah 03:24:36 pikhq: it's like 300 files 03:24:45 E!1 j\n 03:24:51 EsoBot _T_!EsoBot _T_! |-:( [xqz] 03:25:15 EsoBot _T_!EsoBot _T_! |-:(< [xqzj] 03:25:17 16+5+17 != 300 03:25:42 << 300 03:26:10 Also, most of the source is in the build system. . . 03:26:17 Autoconf and automake take a lot of space. 03:27:17 It's 200k without the build system. 03:27:26 whatever 03:27:41 And it's a really, really fast interpreter. . . 03:27:56 he has weird opcode abreviations 03:29:19 It's optimize() which makes it rather impressive. . . 03:29:52 bsmnt_bot: write your own bf interpreter ;) 03:29:59 yeah yeah yeah 03:30:01 not that hard to do 03:30:09 I'll make mine faster ;) 03:30:18 Good luck. 03:30:39 argh 03:30:44 His code is hard to read 03:30:53 uses global variables to pass code around 03:31:03 someday I need to finish my bf interpreter for the hp 41cx calculator 03:31:27 bsmntbombdood: Well, yeah. . . I am tempted to give him some stylistic improvements. 03:32:02 his design is interesting though 03:32:11 compiling it to bytecode 03:33:04 It is, in essence, a piece of Gregor code. ;) 03:34:31 Is that a good thing? 03:35:36 Depends upon your feelings towards ORK. 03:35:40 -!- bobot has joined. 03:36:01 ORK? 03:37:14 His optimization routine isn't too profound 03:37:26 #malbolge (=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O< 03:37:29 Hello, world. 03:37:31 * pikhq needs to leave 03:37:41 -!- pikhq has quit ("leaving"). 03:37:52 :P 03:38:21 I do like the vm though 03:40:24 optaddto, though, is 03:41:14 #bf ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+. 03:41:14 Hello World! 03:41:39 gotta love PHP 03:43:23 so, optimize() not only optimizes, but compiles too 03:43:38 Problems that sound interesting but are trivial number 42: 03:44:03 HPL(k): hamiltonian path length (k): 03:45:25 "Given a graph with a Hamiltonian path, does it have a Hamiltonian path of at most k steps?" 03:45:28 :-S 03:45:31 * SimonRC goes to bed for a bit. 03:54:59 #me waves 03:54:59 * bobot waves 03:56:55 hmmm 03:57:46 ugh this code is so bad 03:58:57 * bsmntbombdood starts hacking 04:04:17 -!- bobot has quit ("bye bye!"). 04:17:00 -!- GregorR has joined. 04:17:06 E!quit 04:17:08 -!- EsoBot has quit ("requested by calamari"). 04:18:03 Stupid power :-P 04:18:21 your power was out? 04:19:22 Winter storm. 04:19:27 Mostly unexpected. 04:19:51 does it get pretty cold there? 04:21:23 man.. this bug is driving me crazy 04:21:35 No, this kind of weather is totally unheard of. 04:21:50 It's usually sleet and hail when it's that cold. 04:22:34 oh, did you get snow? 04:22:42 Yeah, quite a bit. 04:22:46 cool 04:22:49 -!- CakeProphet has quit (Read error: 113 (No route to host)). 04:23:41 we get snow once maybe every 7-10 years or so 04:24:04 it never lasts long tho 04:24:27 but there is snow on the mountain, so we could go up there if we wanted to 04:26:10 Last time I saw any real snow ... hmmm ... Idonno ... 04:26:16 At least five years ago. 04:27:35 GregorR: sweet 04:27:39 Snow's awesome 04:29:57 ok, i KNOW that this code could be more compact: http://pastebin.ca/319229 04:32:42 That's fairly ingenius. 04:32:47 Could it be more compact? Maybe. 04:32:49 Should it be? No. 04:33:20 That's ingenious? cool! 04:34:21 Mind you, I'm not confident that it's /useful/ ;) 04:34:37 But for serving its fairly un-useful purpose, it's a nice way to do it. 04:35:09 yeah, maybe it's not very useful 04:39:39 GregorR, I'm was reading egobfi 04:39:55 Your use of global variables was so bad, I have to write my own now 04:42:34 And, what does LPO, LPC stand for? 04:46:12 Ha-HAH 04:46:20 I haven't read that code in sooooooooooooooooo long. 04:49:21 ... 04:59:19 LPO = LooP Open, LPC = LooP Close 05:02:00 ooh 05:02:10 I used JMPF and JMPT 05:02:30 "jump if false" and "jump if true" 05:38:55 -!- calamari has quit ("Leaving"). 05:51:42 -!- oklopol has quit (Read error: 110 (Connection timed out)). 06:02:08 -!- ShadowHntr has joined. 06:19:48 -!- wooby has joined. 06:27:11 -!- wooby has quit. 06:28:54 -!- wooby has joined. 06:33:49 -!- oerjan has joined. 06:48:28 -!- ShadowHntr has quit (Client Quit). 07:01:57 -!- Asztal has joined. 07:06:49 IRP allowed? they've stopped now? ;) 07:07:07 Stopped, who? 07:07:43 The people who would find out about IRP on some social bookmarking site and come in here to test it 07:08:13 Ah yes. What _was_ that site, anyhow... 07:10:28 -!- oerjan has quit (Remote closed the connection). 07:10:32 -!- oerjan has joined. 07:19:46 stumbleupon, I think 07:22:44 -!- wooby has quit. 07:26:38 hm, i've never seen those people 07:26:58 -!- wooby has joined. 07:28:32 http://www.stumbleupon.com/url/esoteric.voxelperfect.net/wiki/IRP 07:28:34 there it is 07:34:35 did any stick around? 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:08:50 -!- oerjan has quit ("Not sticking around"). 10:26:17 lament: I see that you are a Go player from your exit message on #irp. I am too, but this is not the time to talk about it, alas. 10:26:20 * SimonRC goes 11:48:01 -!- ais523 has joined. 12:02:11 -!- ais523 has set topic: #esoteric - the international hub for esoteric programming language design and deployment - map: http://www.frappr.com/esolang - forum: http://esolangs.org/forum/ - EgoBot: !help (currently down) - wiki: http://esolangs.org/wiki/ - logs: http://tunes.org/~nef/logs/esoteric/ or http://meme.b9.com/cdates.html?channel=esoteric - for brainfuck-specific discussion, go to ##brainfuck - IRP ALLOWED - Pastebin: http://pastebin.ca/. 12:02:30 For those who don't know, it was me who caused EgoBot to crash 12:03:13 I fed it an infinite loop written in Unlambda, and it sent me an infinite number of copies of the letter 'b' in response, until it got thrown out 12:56:08 -!- ihope has quit (Read error: 110 (Connection timed out)). 14:05:11 -!- ais523 has quit ("this quit message is boring"). 15:08:15 -!- proog has joined. 16:11:40 -!- ShadowHntr has joined. 16:17:10 -!- ShadowHntr has quit ("End of line."). 16:22:15 -!- sebbu has joined. 16:33:44 -!- proog has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]"). 16:44:41 -!- jix__ has joined. 17:05:08 -!- tgwizard has joined. 17:40:51 -!- oerjan has joined. 18:25:04 -!- wooby has changed nick to juan_valdez. 18:25:09 -!- juan_valdez has changed nick to wooby. 18:51:53 -!- digital_me has joined. 18:53:01 -!- jix__ has changed nick to jix. 19:21:39 -!- surye has quit (Remote closed the connection). 19:30:06 * bsmntbombdood reads the ORK wiki page 19:38:32 bsmntbombdood: ORK? 19:39:25 http://esoteric.voxelperfect.net/wiki/ORK 19:46:19 GregorR: gah, why do you write everything in c++ 19:47:54 -!- ShadowHntr has joined. 20:15:13 -!- oerjan has quit ("Despair"). 20:29:33 -!- sebbu2 has joined. 20:40:09 -!- ihope has joined. 20:48:45 -!- sebbu has quit (Read error: 110 (Connection timed out)). 20:48:45 -!- sebbu2 has changed nick to sebbu. 20:53:19 -!- oklopol has joined. 21:34:04 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:06:40 -!- CakeProphet has joined. 22:30:05 I came up with an awesome esolang in math class just now 22:30:36 We have 2 stacks, an empty stack is filled with zeros 22:30:55 each command is one char 22:31:38 'g' = take the logarithm of the top of the stack 22:31:48 '-' = subtract 22:32:05 '<' = push top of stack on to other stak 22:32:15 '>' = push top of other stack onto stack 22:32:26 '1' = push 1 onto stack 22:32:47 [] are the same as brainfuck 22:32:58 IO is the same as brainfuck 22:34:27 hmmm 22:34:37 FuckLogs? 22:35:13 hmm... 22:35:23 I'm not familiar with how to use logs to achieve nifty computations. 22:35:25 but that sounds cool. 22:35:29 double-stack languages are interesting. 22:35:49 * bsmntbombdood implements 22:36:06 I've been dabbling around with Thue-like ideas. 22:36:18 I'm going to be working on this one for a while I think.. 22:36:39 for generating fractalic structures for other languages. 22:37:16 Like Thue... but with a decent ability to do computations and express structures. 22:38:42 and... maybe functional. 22:39:14 * ryanakca scratches his head 22:39:26 yup.. 22:39:28 weird thought. 22:39:30 but.. 22:39:32 fuck you 22:39:59 why thank you CakeProphet :P 22:40:10 -!- Sgeo has joined. 22:40:14 * ryanakca deletes all of CakeProphet's PERL stuff :P 22:40:35 * ryanakca pulls the plug before CakeProphet saves his specification 22:40:41 hehe 22:41:01 Thue? fractalic structures? double-stack? 22:41:26 what Perl stuff. :P 22:45:49 The stuff you set up in cygwin or whatever and that you were all thrilled about? 22:46:07 oh. 22:46:10 :P 22:47:46 :P 22:57:40 ok, my interpreter works, except for looping, because that's hard 22:59:55 what are you making it with? 23:00:00 python 23:00:10 in python nothing is hard! 23:00:17 lol 23:00:24 nothing small :) 23:00:44 hah you'd be so pissed if i made that language before you, bsmntbombdood :) 23:00:52 CakeProphet: what do you say I start bugging oklopol with all my python problems? 23:01:01 noooooo :( 23:01:16 you can't solve python problems 23:01:27 CakeProphet: give you a break... 23:01:37 oklopol: well... you can solve mine... :D 23:02:33 bsmntbombdood, the operations only work on the other stack? 23:02:37 stack 1 23:02:39 right? 23:02:42 yeah 23:02:44 stack 2 is just for storing 23:02:46 k 23:03:21 logarithm in python? 23:03:27 or do i have to do my own? 23:03:36 math.log 23:03:38 use base 2 23:04:28 btw... what's the difference between logarithm & algorithm? 23:04:55 whats the similarity? 23:06:04 s/difference/difference & similarity 23:06:52 there is no similarity 23:07:25 (log base a)(a^x) = x 23:07:30 algorithm you should know 23:08:01 argh 23:08:14 I can't get cpp not to tell me a bunch of stuff I don't want to know 23:08:33 oklopol: (log base a)(a^x) = x doesn't mean anything to me... 23:09:09 how old are you? 23:09:14 that's basic school stuff 23:09:34 oh... 14 23:09:51 well, we learned it today, officially 23:09:56 i'm 17 23:10:07 lol, ok :) 23:10:08 tho it's pretty basic stuff if you program 23:10:13 www.answers.com/logarithm 23:10:17 kk, thanks 23:10:25 programmers know everything. 23:10:45 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 23:10:59 there we go 23:11:08 cpp -P 23:12:43 i might have it now 23:12:57 nah 23:13:26 stack1[len(stack1)-1]=input() 23:13:30 this doesn't work 23:13:43 i never really read about pythons io 23:13:50 how do you do it? 23:14:36 oklopol: ok... know what it is... why should I care about it... what would I use it in? 23:15:01 rarely 23:15:13 bsmntbombdood, floating point? 23:15:17 yes 23:15:39 for input do float(ord(sys.stdin.read())) 23:18:36 i might have it... tho i don't know how it's useful 23:18:52 argh, I can't figure out how to swap 23:18:54 you can only create 1's and zeroes with the log and subtraction :\ 23:19:02 what you use as stack? 23:19:17 a,b=b,a :\ 23:19:24 oklopol: no 23:19:35 I used a list as the stack 23:19:48 And I mean swap the top two values on the stack in this language 23:20:05 stackz[len(stackz)-2],stackz[len(stackz)-1]=stackz[len(stackz)-1],stackz[len(stackz)-2] then? 23:20:13 if stackz is your stack 23:20:22 or am i missing something? 23:20:23 just use list.append and list.pop 23:20:36 for swapping? 23:20:42 no 23:20:52 for the stack 23:20:55 that is not my code, that's the swap :\\ 23:21:21 Not swap inside the interpreter, but swap in the language 23:21:24 i use append, i didn't know about pop :) 23:21:29 ah okay 23:21:43 but, can you give me something to run? 23:21:46 so i can test 23:22:19 "1 1-." should print "0" 23:22:31 or NUL, depending on how you do the output 23:22:37 ryanakca, for a simple and useless example, if you wanna converta number to a spesific base and allocate only what's necessary, you can use logs to calculate the length of the final string :) 23:22:59 >>> runsome("1 1-.") 23:22:59 0 23:22:59 0.0 23:23:01 0 is debug 23:23:46 once again i got it working right away but couldn't use it right and thought it was flawed :D 23:23:53 i mean, up to that part 23:24:15 something hard that can fail actually... i assume you coded something in the math class :) 23:24:36 Do you have [ and ] yet? 23:24:44 ryanakca, An algorithm is just "an ordered procedure of steps that produces a desired outcome" 23:24:45 ....a program. 23:24:48 hmm... 6½ hours till school and 10 english tasks to do and i'm coding again :( 23:24:53 yes 23:24:58 i haves 23:25:02 logarithm is just the inverse of the exponent function. 23:25:08 totally different thing. 23:25:10 s 23:25:29 11g1-- will produce 2 right? 23:25:47 ya 23:25:58 hmm, i don't specify the base 23:26:10 math.log(numz, [baze]) is it? 23:26:22 i just have math.log(...) now 23:26:54 pretty sure 23:26:59 yes 23:27:08 if all else fails just use the help function. 23:27:13 * CakeProphet loves help() 23:27:18 :D 23:27:26 TWO ZERO TWO -- ZERO TWO ZERO TWO -- -- g . 23:27:30 should produce "3.0" 23:27:40 TWO being? 23:27:44 #define ZERO 1 1- 23:27:44 #define TWO 1 1-1-1->1 1-<- 23:27:52 I'm running the code through cpp 23:27:52 -!- fatalis has joined. 23:27:56 UWAAAAAH 23:27:58 ah okay 23:28:01 -!- fatalis has left (?). 23:28:07 your interpreter c++ too? 23:28:10 no 23:28:22 i'd do it faster in c++ prolly but i'd have to make a project :\ 23:28:52 1 1-1-1->1 1-<- === 11g1-- 23:29:19 1g is zero 23:29:51 yes... i know 23:29:54 but, math.log 23:29:59 how to make it 2-base? 23:30:24 1 1g 1 -- == 1 0 1 -- == 1 (-1) - == 1+1 == 2 23:31:17 bsmntbombdood, you must have it if you use it :\ 23:31:24 oh 23:31:28 yeah 23:31:33 you have c++++++++++++++++++++++ 23:31:43 i always think of you as one of the python guys 23:31:47 :) 23:31:50 huh? 23:31:55 math.log 23:31:59 2-base 23:31:59 how 23:32:01 ? 23:32:07 second argument 23:32:25 TypeError: log() takes exactly 1 argument (2 given) 23:32:40 stack1[len(stack1)-1]=math.log(stack1[len(stack1)-1],2) 23:32:45 that's what i have 23:33:05 uuuuh 23:33:09 what python version? 23:33:28 :O 23:33:31 IDLE 0.8... 23:33:35 i have no idea 23:33:36 2.2 23:33:37 i think 23:33:45 that's ooooold 23:33:47 or 2.4 23:33:50 ya :) 23:34:01 do math.log(x)/math.log(2) then 23:34:38 yeah, figured that just now 23:36:23 but 23:36:28 produces 3.0,. yeah 23:36:41 but it's kinda obvious non-looping works 23:37:00 and i'd be pretty suprised if the rest didn't :\ 23:37:23 not my first brainfuck-loop exactly 23:38:16 how'd you do it? 23:38:23 what? 23:38:26 the loop? 23:38:34 i use a counter 23:38:36 yeah 23:38:39 for open brackets 23:38:45 easiest way 23:39:00 ... 23:39:04 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 23:39:12 oh 23:39:13 sorry 23:39:20 that was the worst explanation ever 23:39:45 when i encounter [ i set opens=1, then go right until opens==0 while [ incs, ] decs 23:39:56 then just copypaste for ] 23:40:01 and some random swapping 23:40:35 show me the source 23:40:42 hmm 23:40:45 pastebin? 23:40:56 yeah 23:40:59 hmm 23:41:09 you remember any? :) 23:41:23 pastebin.ca 23:41:24 found 23:41:27 okay :) 23:42:14 http://cpp.sourceforge.net/?show=27733 23:42:28 (pastebin.ca wasn't a link :>) 23:42:54 i hate whitespace, sorry about that 23:43:47 It doesn't do anything 23:43:48 i'm not sure if stack1=stack1[:-1] means cut off last 23:43:53 but i'll change to pop 23:44:38 k now i have it 23:44:42 oh :( 23:44:56 runsome("11g1--11-11g1----11-11g1--11-11g1------g.") 23:45:04 will call it and produce 3 23:45:44 hrm, I think it needs a way to invert a logarithm 23:46:02 1g11g-1-11g1---- is also 3 23:46:26 eh 23:46:27 no 23:46:40 ? 23:47:05 ? 23:47:10 but, it didn't work? 23:47:18 the function 23:47:19 ? 23:47:24 I didn't try 23:47:27 ah okay 23:47:31 but the code for [] doesn't do anything 23:47:56 oh 23:48:00 it changes icode 23:48:12 which is the index of code which is the code string 23:48:28 elif code[icode]==']': 23:48:28 if stack1[len(stack1)-1]!=0: 23:48:28 opens=1 23:48:28 icode-=1 23:48:28 while opens: 23:48:28 if code[icode]=='[': 23:48:30 opens-=1 23:48:32 elif code[icode]==']': 23:48:34 opens+=1 23:48:36 icode-=1 23:48:38 icode+=1 23:48:40 ... 23:48:47 "icode-=" 23:48:50 eh 23:48:52 okay 23:48:56 the copypaste is nice 23:49:18 ? 23:49:36 why does it not do anything? 23:49:45 it changes icode, right? 23:49:58 and that's what a loop does, changes IP, right? 23:50:00 right? 23:50:05 hrm 23:50:22 yeah 23:50:26 yay 23:50:34 I dunno if that works though 23:50:40 maybe not 23:50:50 i've done more that 20 bf-interpreters 23:50:55 tho 23:51:03 most like that 23:51:39 I usually just use class variables. 23:51:46 class lolBF(object): 23:51:50 inc = ">" 23:51:52 dec = "<" 23:51:54 etc 23:52:05 same thing in practice. 23:52:08 less typing though. :P 23:52:19 ? 23:53:23 hmm, looks like that actually works 23:53:24 def makenumber(n): 23:53:24 if n==0: 23:53:24 return "1g" 23:53:24 return "11g"*(n-1)+"1"+"--"*(n-1) 23:53:30 generic algo for numbersa 23:53:32 *-a 23:53:46 hnnn,,,, 23:55:10 hmm... do i do a generic number-> bsmntbombdood-code function or english? 23:55:30 ? 23:55:34 i'm not sure about my math skills tho 23:55:37 ?? 23:56:12 you know, everytime you use a question mark, i check everything i said for 20 lines 23:57:02 hmm... do i do a generic number-> bsmntbombdood-code function or english? 23:57:10 ya 23:57:47 with logarithms it's hard to get the exact number but you get close enought 23:57:48 *-t 23:58:04 *impossible 23:58:13 -!- ShadowHntr has quit ("End of line."). 23:58:43 i don't think you can retrieve a single rational non-integer with logs 23:58:51 dunno 23:58:53 is it mathematically possible? 23:59:00 but, doesn't matter 23:59:34 hmm 23:59:38 looping test... 23:59:39 oh 23:59:43 maybe a loop! 2007-01-18: 00:00:40 hmm... do i do a generic number-> bsmntbombdood-code function or english? 00:00:43 what did you imply? 00:01:06 dude, you are a genious 00:01:12 That loop code works perfect 00:01:24 well, thank you 00:02:16 now I need to think about the math 00:02:35 and write a spec 00:03:43 god i love metaprogramming :O 00:03:49 how come i never did it before? 00:03:50 >>> def printnumsfromntozero(n): 00:03:50 return makenumber(n)+"[.1-].]" 00:03:50 >>> printnumsfromntozero(7) 00:03:50 '11g11g11g11g11g11g1------------[.1-].]' 00:03:50 >>> runsome("11g11g11g11g11g11g1------------[.1-].]") 00:03:52 7.0 6.0 5.0 4.0 3.0 2.0 1.0 0.0 00:04:11 hmm 00:04:28 should open c++... i'll start liking that lang soon :< 00:04:54 hmmm 00:05:15 yeah, the ordo is not optimal 00:05:27 i mean O(n) to create a number 00:06:12 In the loop, you have to pop the stack 00:06:25 is that so? 00:06:47 my bot does that, believe, it's not that nice 00:06:51 *believe me 00:06:59 i'll get some coffee 8| 00:11:50 okay 00:11:53 added sqrt 00:11:55 as 'q' 00:12:04 now try 11g1--qg. 00:12:13 and wait 10 min for the generic one 00:15:06 hmm 00:15:27 does python have err... err.... err..... binary logical operators? 00:17:35 hmm i assumed being able to create 0.5 automatically makes it easy to create 0.25 etc :) 00:17:54 oh 00:17:56 it does... 00:19:12 argh 00:19:20 I can't figure out how to multiply 00:19:33 binary lowho? 00:19:35 loop 00:19:49 oklopol: no, with logs there's a better way 00:19:57 okay 00:20:01 what is it? 00:20:27 11g1--qqqqg = 0.0625 00:20:34 ">g true 00:20:55 #define ADD > ZERO <-- 00:20:59 then inverse would be nice 00:21:11 right, but I don't want to have to add another operation 00:21:26 trues 00:21:31 but, q is bad too? 00:21:44 yeah, I don't want any extra ops 00:21:44 makes fractions nice to do 00:21:48 okay 00:21:53 then it's loop 00:22:02 no 00:22:09 there has to be some way to do it with logs 00:22:20 yes 00:22:23 changing base 00:22:28 :\ 00:22:33 ? 00:22:34 i can't think of anything else 00:22:44 What do you mean changing base? 00:22:47 hmm, i might be wrong 00:23:00 i'll test before i say anything more stupid 00:23:44 maybe inv. log (exponent) is needed 00:24:59 yeah 00:25:05 i was wrong 00:25:14 haven't fiddled with logarithms in ages 00:25:14 that makes me sad :( 00:25:22 :( 00:25:27 -!- ihope has quit (Read error: 104 (Connection reset by peer)). 00:29:42 i thought there was a correlation between either logarithms with inverted base, but there seems not to be 00:29:53 (i'm not good at math, i just guess :)) 00:30:17 yeah, the coffee >> 00:30:56 -!- sebbu has quit ("@+"). 00:31:13 ok, for now i've added an operation "p", which inverts "g" 00:31:49 so now to multiply you can do ">g yeah ok 00:33:54 but, if you need decimal numbers, i'd say square root being a sister operation of a 2-base logarithm would make a nice addition to the lang... unless there is a nice way to do numbers with logs 00:34:07 decimal numbers -> floating point values 00:34:19 -> rational non-integer numbers 00:34:29 -> the right term fuck it 00:35:03 oklopol: back, sorry, kk, thanks 00:35:35 you need logs when calculating loans etc 00:35:35 what's a decimal number? 00:35:55 lament, i used the wrong term 00:36:13 a->v mean s/a/v 00:36:19 ... 00:36:22 s/v/b 00:36:39 ...someone kill me 00:36:59 * ryanakca gives oklopol a poison cookie :) 00:37:13 :) 00:40:07 argh, how to do this 00:40:08 so many people get the terminology wrong :( 00:40:10 they make me sad :( 00:41:31 aARARARaRARARAR 00:45:08 what, bsmntbombdood? 00:45:18 lament, i'm an idiot 00:45:27 inverting a logarithm 00:45:31 2**... 00:45:39 I don't want to have an extra command 00:45:44 ah okay 00:45:51 you said something peeish 00:46:02 yeah 00:47:30 my source: http://bsmntbombdood.mooo.com/logfuck.py.txt 00:49:45 read 00:49:53 nice 00:50:03 all my iffy parts fixed 00:50:05 nice work 00:50:19 but, i had to make it in 10 minutes to be first :) 00:50:27 heh 00:50:50 * oklopol likes q :'( 00:50:51 :DD 00:51:25 You can compute square roots withs logs 00:52:30 ah okay 00:52:34 shomme! 00:54:42 one sec 00:54:45 k 00:54:50 darn 00:54:57 i'm gonna hate myself when i see it :) 01:01:53 hrm 01:02:32 does it work? 01:02:34 well, sqrt(x) == 2**(.5 * log(x)) 01:02:43 :) 01:02:58 since sqrt is the only way to get 0.5, that's hard 01:03:03 no 01:03:03 you can get close tho 01:03:06 oh 01:03:15 #define DIV >g #define ZERO 1g 01:03:23 #define TWO 1 ZERO 1-- 01:03:25 well, with p, true :) 01:03:44 1 TWO DIV 01:03:47 is .5 01:03:49 but, you see, then you don't need sqrt 01:03:54 ye 01:04:07 right 01:04:08 so... 01:04:13 so, it's p or q 01:04:15 floating points numbers are a tad... limited. 01:04:23 CakeProphet, you are limited 01:04:29 :D 01:04:29 LOL NO 01:04:31 oklopol: p can do more than q 01:04:37 CakeProphet: What's your point? 01:04:38 yes 01:04:43 much more 01:05:02 a ha! 01:05:08 got it 01:05:11 so, you are a stupid head 01:05:11 #define SQRT >1 TWO DIV :O 01:05:27 yeah, okay 01:05:32 i can make a num conversion 01:05:52 and it'll make it to the spec and i'll be a hero -_____- 01:06:14 well... 01:06:16 What do you mean num conversion? 01:06:19 hrm.. 01:06:29 conversion of a number into lf-code 01:06:44 oh 01:06:58 but, it wouldn't be very optimal 01:07:01 easy tho 01:07:10 I'm going to change output from decimal to ascii now I think 01:07:25 yeah, for non-integers 01:07:28 *integers 01:07:45 >>> float("0." + "".join(["565656534" for x in xrange(100000)])) 01:07:46 0.56565653456565657 01:07:48 >>> 01:07:49 :( 01:07:57 I want giant floating point numbers!!!! 01:08:54 CakeProphet: gmp 01:09:01 i want 10-base to be illegalized 01:09:20 I want to use a base-5 numeral system! 01:09:24 THE LAW OF FIVES. 01:09:35 How do you implement dup in lf? 01:09:40 I can't figure it out 01:09:45 hmm... 01:10:02 you could consequitely move items from one stack to the next. 01:10:06 till you... get to the one you want? 01:10:12 dup 01:10:16 not lift 01:10:30 well... 01:10:32 it's close. :D 01:12:00 hmm 01:12:07 It's not turing complete unless I can implement dup I think 01:12:20 since [] is destructive 01:12:55 hmm, there is no way to use a number in a calculation without even then only having it in one place again... i think 01:13:08 you can only add a 1 01:13:21 Implement two stacks-of-queues. 01:13:24 like Stue. :D 01:13:29 except... two 01:13:31 TwoStueFuckLogs 01:13:36 you could call it. 01:13:41 no 01:13:42 and using that one IN ANY WAY with the number to duplicate will destroy the original number 01:13:43 too complicated 01:13:50 and you have the same prob with the new one 01:13:53 oklopol: yep :/ 01:14:10 i think i can prove it's impossible... but that's all i can do :\ 01:14:23 I could make > copy isntead of moving 01:14:26 ...if it's impossible, that's pretty obvious tho :) 01:14:30 yeah 01:14:43 but that causes other problems 01:14:58 such as.. not being able to remove items. 01:15:02 because it just copies. 01:15:11 you can. 01:15:15 oh 01:15:20 you could just have a copy command. 01:15:25 CakeProphet: no 01:15:28 that copies from stack to other stack 01:15:32 too many instructions 01:16:00 [ could copy the topmost, ] could pop :P 01:16:39 nah, wouldn't work... i think 01:16:42 hmmm 01:16:49 because you still couldn't dup for example 01:17:06 the dup would be ">0<[>]<" 01:17:11 s/the/then/ 01:17:18 s/0/1g/ 01:17:57 you're right 01:18:00 I think that works! 01:18:15 i didn't understand > and < right, yeah, it was good 01:18:26 s/understand/...grasp :) 01:20:51 crap, that doesn't work 01:21:09 :\ 01:22:11 mine says list index outta range 01:22:18 but i didn't allow that anyway 01:22:24 so it should 01:23:18 [>0]< 01:23:24 that would dup right? 01:23:32 eh 01:23:41 yeah 01:23:43 i thnk 01:23:47 no 01:23:58 wait 01:24:43 no 01:24:56 that does nothing 01:26:08 n, -> (start of loop) n n, -> n, n -> (end of loop) n 0, n -> n, n -> n n, 01:26:09 hmm.. 01:26:24 I wonder how you would use a tree as a languages data structure. 01:26:29 yes 01:26:33 my friend did that 01:26:49 it is nice 01:27:10 you can have tree data structures as vars then 01:27:14 very convenient 01:27:53 You could probably do something with genetics. 01:27:54 and trees. 01:27:59 and fractals. 01:28:01 and chaos 01:28:04 and evolution. 01:28:09 > goes left, < goes right, ^ goes up, so navigating is like bf but you can reserve infinite certain memory for vars 01:28:25 hmm... 01:28:27 that's cool. 01:28:36 you could take a lisp-ish approach and make the program a tree. 01:28:40 true 01:28:44 but he's not good 01:28:49 with the branches acting as... erm.. 01:28:51 you could 01:29:01 conditional pathways? 01:29:07 aaagh 01:29:18 you could just code it as a tree, no ascii shit 01:29:31 i don't understand why everything must be coded in ascii... 01:29:36 or unicode 01:29:55 except for cellular automatons 01:29:56 ok 01:29:57 of course 01:30:04 bsmntbombdood, what? 01:30:05 We make > copy instead of move 01:30:09 < acts as normal 01:30:12 okay 01:30:17 could do something like wireworld... but different. 01:30:18 ah 01:30:21 yeah 01:30:25 electrical circuitry type programming. 01:30:32 make it a GUI 01:30:34 it could be fun. :D 01:30:36 how do you drp? bsmntbombdood 01:30:41 oklopol: [] 01:30:46 yeah 01:30:58 what was wrong with my n, -> (start of loop) n n, -> n, n -> (end of loop) n 0, n -> n, n -> n n, tho? 01:31:05 what fails? 01:31:11 We should all COLLABORATE 01:31:11 the move 01:31:13 and make something sweet 01:31:22 but according to my vision.. 01:31:24 why does it fail? 01:31:27 because I said so. 01:31:31 CakeProphet, sure :) 01:31:39 now [ pops 01:31:46 FRACTALIC SELF-REPRODUCING EVOLUTIONARY GENETICS CODE 01:31:49 now 01:31:51 how 01:31:53 think 01:31:58 but but, what was wrong with the move? :'( 01:32:14 It was destructive 01:32:31 okay 01:32:35 how would it go then? 01:32:41 if not like that 01:32:53 i did it destructively in n, -> (start of loop) n n, -> n, n -> (end of loop) n 0, n -> n, n -> n n, i think 01:33:06 write that in the language 01:33:06 I'd like to make an esolang larger than a few commands and a tiny interpreter. 01:33:17 i did, but it fails 01:33:22 like... a major project... 01:33:39 oklopol: exactly 01:33:43 but, why? 01:33:56 how do the stacks evolve then? 01:34:07 crap, borked 01:34:19 because making > copy is not nice if it's not needed 01:34:27 because it's not very intuitive 01:34:40 * CakeProphet is thinking. 01:34:47 Yeah 01:34:48 and i think an esoteric language should always be intuitive... according to it's own rules 01:35:03 now we can't drop 01:35:13 ah 01:35:15 a genetic language isn't coming into my head intuitively. 01:35:15 yeah 01:35:35 but it seems like it would be simple. 01:36:00 you have some stuff... and some other stuff... and some stuff that tests that stuff... 01:36:08 and something to put it all in... an environment. 01:36:13 that really sums it up :) 01:36:19 and stuff starts dying.. 01:36:26 and stuff starts procreating. 01:36:28 yay... genetics. 01:36:37 which inevitably creates evolution. 01:37:04 AHA 01:37:04 i thought of making a language with the most basic component being flock movement... but if that's not done yet, i pity mankind 01:37:06 simplified DNA 01:37:18 a series of.... codes\ 01:37:22 that determine shit 01:37:33 and make a bunch of them... 01:37:42 or better yet... just make one starting code... the source code. 01:37:55 which spawns off offspring.. 01:38:05 two source codes? 01:38:07 yes. 01:38:09 two source codes. 01:38:11 that mate. 01:38:26 yeah 01:38:31 swap genes... reproduce... you have a bunch of source codes now. 01:38:39 first of all you need a lot of redundancy 01:38:48 and some start dying... the ones that you don't want. 01:38:52 nah... just two genetic strands. 01:39:16 but I don't want DNA.... the thought of coding in DNA-like language kinda makes me want to puke. 01:39:40 the codes you have first should be quines that are altered then executed until more new executable code is randomly created 01:40:00 maybe borrow some ideas from Thue-like-ness? 01:40:05 but, the language should aim at creating itself 01:40:05 but.. not direct string replacement. 01:40:09 yah. 01:40:26 I've been tossing through ideas like that. 01:40:37 a language that contains the instructions for creating itself 01:40:38 it need not have any other operation than cloning itself, changing thing to their "synonyms" etc 01:40:59 well... there needs to be some form of sexual interchange... otherwise you just have a bunch of clones. 01:41:19 well, yeah 01:41:26 we can leave out randomness then 01:41:29 which is good 01:41:36 could have it as an option. 01:41:40 non-determinism is cool sometimes. 01:42:16 because with one we'd need a seed, with two (that reproduce collaboratively) they are each others seeds, more sensible 01:42:21 yeah 01:42:29 but the seed could then be a random program 01:42:46 since all programs should of course be always-executing 01:43:01 but, redundant operations just wouldn't produce themselves 01:43:19 hmmm... the program instructions could correspond with each other... 01:43:23 like... 01:43:25 so there would always be a random amount of nops that always die 01:43:29 yes 01:43:35 do different things for two different pairings? 01:43:40 or... however we pair them up. 01:44:01 yes, these pair could be made so that best result i gotten 01:44:04 *pairs 01:44:07 *is 01:44:19 my s's are becoming extinct 01:44:25 haha... a self-optimixing language. 01:44:29 :) 01:44:36 fuck compilers. 01:44:39 did you coin that term just now? 01:44:42 just make the language do it itself. 01:44:57 ...well.. it was a typo. 01:44:59 but sure. 01:45:01 I coined it. 01:45:15 okay 01:45:22 i thought it was brilliant :) 01:45:37 since it mixes two progs while optimizing automatically 01:46:02 now, english again 01:46:06 by program.. do you mean hard file or... separate 'halves" 01:46:12 it could be either I guess. 01:46:19 i need more complicated english here than in my homework :\ 01:46:21 you could have two different files get it on as well. 01:46:34 file-sex. 01:46:52 you could do like dna 01:47:10 each instruction is two bytes, like +/ () %% etc 01:47:24 and you know how it works 01:47:38 eh... my biology is fuzzy. 01:47:40 okay 01:47:42 but I get the picture. 01:47:45 they sort of... interchange right? 01:47:52 random one of the pair is picked 01:48:12 hmmm... I don't think randomality could produce optimizations... but... who knows. 01:48:39 mixing program "¤¤ ## 1%" with "aG oo /\" could be "¤G #o %\" for example 01:48:44 oooh.. 01:48:48 the optimization wouldn't be there. 01:48:50 you could optimize it afterwards 01:48:54 it would be in the... massive amounts of this occuring. 01:48:59 and... which ones "live" 01:49:04 by being more efficient. 01:49:06 alright.. cool. 01:49:26 well, optimizing isn't really fair play in a sence... nature doesn't have it :P 01:49:39 it would be neat if you could strategically plan the flow of an evolution chain... to produce some desired result... but that sounds kind of far-fetched and vague. 01:50:07 we'd just have an algorithm to check for sanity in the program to skip evolution when a species is due to die pretty soon 01:50:10 what about environment... no environment? Should the programs start killing each other? What about a "species change" 01:50:21 :D 01:50:34 all is not always peachy in the wild. 01:50:38 you can always have a 2D map to emulate them living there... 01:50:42 haha 01:50:46 s/to/and 01:50:50 ah... 01:51:00 that could be another part of the program? or... too much? 01:51:12 hmm 01:51:14 like... the spaces could be different. 01:51:24 huh? 01:51:27 like a 2D language. 01:51:31 separate things 01:51:36 but with... programs running around in it. :D 01:51:53 you'd make programs (prolly at random), then put 10000 of them on the screen and see what happens 01:52:12 the dna would be executed differently when doing different thigs 01:52:14 *things 01:52:29 like, walking could be specified in a certain part of the code 01:52:37 all codes equal length for simplicity 01:52:43 http://bsmntbombdood.mooo.com/logfuck_spec.txt 01:52:48 you're fast 01:53:01 yah... I like complexity springing out of simplicity... 01:53:10 ah... how about functional? 01:53:12 yeah, ok, it's quite a simple lang :) 01:53:18 for bsmntbombdood 01:53:47 an organism is a set of functions... each being the original code we were talking about... pairs of opcodes. 01:53:51 functional is not that good since it needs what's it called... 01:53:55 ah yeah 01:53:59 but then no string 01:54:03 we can forget about it 01:54:06 I got the idea from when you mentioned walking. 01:54:08 a structure then 01:54:09 walking is a function. :D 01:54:42 a creature would map the command to walk in any function it wants 01:54:49 once again depending on it's code 01:54:57 hmm... 01:55:01 and, it would create functions at random 01:55:01 I kinda follow 01:55:26 and then there should be functions for EATING PEOPLE 01:55:50 I kinda liked having deterministic functions though... random could help spur on genetics.. somehow. 01:56:10 yes, once again it would be feeded all the necessary information, and requested what it'll do, it would map these commands into whatever functions it wants to 01:56:12 or smth 01:56:26 yeah 01:56:36 functions should be deterministic 01:56:45 but new ones could be created 01:56:49 Start off with just two creatures... and an environment source... either being in different files or in the same source... either way. 01:56:52 righto 01:57:02 ah.. I get what you mean. 01:57:38 The environment would provide much of the constaints... while perhaps evolving and changing itself. :) 01:57:48 as creatures effect it. 01:58:00 i loved making 2D life simulator when i was little (with set vars, not code) 01:58:09 little... i'm still little 01:58:11 smaller 01:58:49 the rest of the conditioning would come from interactions with creatures... collisions in the environment basically. 01:58:53 haha, plants that are creatures that lost the ability to move at some point :D 01:58:57 so cool 01:59:10 hmm... 01:59:12 yeah 01:59:22 hmmm.... energy? 01:59:30 like, hp? :P 01:59:39 might as well... while we're at it... planning a big-ass game of life. 01:59:45 well.. like... energy. 01:59:45 hehe :=) 01:59:53 i'd like their code to be eaten :) 02:00:09 no variables, just wrecking of each others functions when hit 02:00:34 stationary creatures would eventually get better at either eating other creatures or gaining energy from the environment (like a form of photosynthesis... although maybe not from any "light" source) 02:01:10 trues... the code could be in such a format that removing it would probably not change anything 02:01:39 should there be set functions for actions? 02:01:50 or... should it somehow determine which function to use? 02:02:11 i think it should do it's own mapping, but it's kinda too random then 02:02:14 well... there should be a "sex" function... 02:02:21 that... determines sex 02:02:26 male, female, asexual... something else. 02:02:30 :) 02:02:48 or, when encountering, a function to determine what they do to each other 02:02:53 yeah 02:03:10 but... I like gender too. :D 02:03:17 true 02:03:30 when actually implementing 02:03:37 when they collide... behavioristic traits determine what actions are taken... which are functions themselves. 02:03:39 a simpler one should be done first 02:03:44 with set functions prolly 02:03:47 and such 02:03:47 aha... "behaviors" are functions that determine what function is to be used! 02:03:56 yes 02:04:03 higher-order functions. 02:04:10 taking the other creatures functions to determine it 02:04:18 yeah. 02:04:27 so the functions would need to have some sort of manipulatable data. 02:04:37 they look at each others code, if it seems the other would attack, there's no use emitting seed on it 02:04:38 :) 02:04:40 okay 02:04:44 haha 02:04:45 far-fetched 02:04:56 it sounds do-able though. 02:04:57 we'll create the ultimate AI another time... 02:05:06 at least... basics. 02:05:09 basics first... 02:05:18 there will need to be a lot of modality in the source I think.. 02:05:25 no simple universal commmand set like BF 02:05:26 the language should have a lot of functions for determining stuff about itself too :) 02:05:46 or at least... the symbols carry different semantics depending on where they're at. 02:05:54 a definetely like the idea of "behaviors" and "actions" 02:05:58 but, would this be a game for two ppl to play making their own populations and seeing which one wins or just experiment? 02:06:00 and maybe "traits"... for simple axiomatic shit. 02:06:17 I was kinda thinking you could use it to... compute shit... 02:06:27 far-fetch yeah... it sounds more like a fun game. 02:06:29 hehe :) 02:06:32 like corewars... but less competitive. 02:06:43 or.. more strategic. 02:07:17 i've not yet seen the real strategy in corewars, but i must've gotten something wrong, never played 02:07:55 so... traits (test functions), actions (executive functions that employ traits), and behaviors (functions that use traits, combined with the input of another creatures behavior function to trigger a specific action) 02:08:45 yeah, if those are made by the creator of the creature, would be cool 02:08:50 oh oh oh 02:09:00 environment... could be a set of symbols on a 2D space. 02:09:06 with each one mapping to a function.. 02:09:10 or functions 02:09:44 or.. just like... basic commands and stuff 02:09:46 either works. 02:09:51 both maybe... 02:10:07 <<>.> okay, this is a nop since i should be doing my tasks :) 02:10:20 ...? 02:10:26 nopol <3 02:10:41 this discussion, i don't have time for it now :D or for anything 02:10:47 i have school in 4 hours 02:10:50 it 4 am 02:10:54 *it's 02:10:54 pfft... there's always time. 02:10:58 I've gone tons of shit I could be doing. 02:11:05 but... there are a lot of tasks :\ 02:11:37 and if i don't get them before tomorrow, i'll not be able to do the matriculation exam of english this spring 02:11:50 (might be finland spesific) 02:12:06 because i forgot to do them when i should've 02:12:14 I have a tendency to... leave projects unfinished... and start a lot of stuff. 02:12:22 me too 02:12:23 and.. not finish crap because I get distracted by ideas. 02:12:34 i'll finish them usually when i can do it in 4 hours :) 02:12:40 yeah. 02:12:45 if you have to stop and continue later. 02:12:46 it kills it. 02:13:02 one time i took my 3 year old unfinished projects and finished them all during the afternoon 02:13:17 (but they were mostly hello worlds :)) 02:13:55 yeah, i'm bad at continuing programming since i've already completed it in my head :\ 02:14:06 I usually start bots, languages, weird quick mini-languages for parsiing, strange and useless "helper functions", etc 02:14:19 and of course sometimes i don't remember my idea that well 02:14:24 if i haven't thought about it 02:14:26 hmm... I like the idea of the environment code being basic... but some optional complexity. 02:14:45 you have some basic stuff... river, grass, mountain, weird-wall-thing.. 02:14:52 okay, i have to go now, really :) 02:14:52 cu 02:14:54 and then you have "structures"... which are functions. 02:14:56 hahaha 02:14:58 alright 02:26:44 -!- anonfunc has joined. 02:27:23 -!- anonfunc has quit (Client Quit). 02:27:26 -!- anonfunc has joined. 02:41:35 -!- ryanakca has quit (Read error: 104 (Connection reset by peer)). 02:41:42 hmm 02:41:45 that was easy 02:41:52 i had one left :) 02:42:11 i'm good at assessing that, it seems 02:42:22 the number of items in a list 02:51:02 >.>> 02:51:11 * CakeProphet is still working out that idea... 02:51:16 it sounds feasible... surprisingly. 02:51:39 but with like... 4 languages... 02:51:42 at the least 02:51:44 i still have a word test tomorrow, gonna read for that after a little family guy + coffee break :) 02:51:50 hehe 02:51:51 4 languages? 02:51:57 yeah. 02:52:22 So... behaviors conditional run through actions based on what's occuring... they'll use a very abstract language. 02:52:32 i already saw simpsons, futurama and friends, after fg i'll have nothing unless i start watching anime :\ 02:52:36 actions will be somewhere inbetween... they perform manipulations on the source code of traits. 02:52:59 traits will be simple event-based programming... they perform actions based on how their own soruce code is manipulated. 02:53:01 by actions. 02:53:32 these are programmed initially by the programmer? 02:53:41 an action would be like... grazing... 02:53:49 and a trait like... grass (I'm assuming environment will be traits) 02:53:50 and they are altered when the thingies have fun? 02:53:51 yeah. 02:54:07 behaviors and actions will largely be altered by reproduction. 02:54:18 traits... I think... will be altered mostly through interaction. 02:54:58 It leads to some cool ideas. 02:55:29 I've never heard of a language that does operations based on how its source code is manipulated from an outside influence. 02:55:31 the 2d map exists too? 02:55:35 yeah. 02:55:38 good 02:55:42 it'll be a map of functions... basically. 02:55:49 and some primitive commands. 02:56:10 that is the main interface between creatures, it should be spec'd first 02:56:15 as much as possible 02:56:31 I was thinking it would be a big grid of symbols... followed by some function definitions. 02:56:39 for various symbols. 02:56:44 one character each 02:57:02 programmers can see the functions then ans decide their action on them? 02:57:04 it would most likely follow a language similar to the traits language... since the environment will be largely event driven. 02:57:21 Probably. 02:57:30 you would just need to peak under the soruce of the environment. 02:57:49 I see the environment being code that's mostly manipulated. 02:57:52 it makes a lot of sense. 02:57:56 hmm, prolly would be intentionally left for the programmers to see? 02:58:09 the code 02:58:13 Sure. 02:58:23 It's no fun poking in the dark. 02:58:28 frokfrokfrokfrokfrokfrokfrokfrokfrokrfokfrokfrokfrokfrokfrok 02:58:34 sorry 02:58:41 i'm a flooder normaly 02:58:42 hmm... let's call it Grass 02:58:44 *ll 02:58:48 hehe :) 02:58:50 I'm not sure what to do with logfuck 02:58:57 fuck it 02:58:57 why? 02:59:02 yeah 02:59:04 with your log 02:59:09 ...yup 02:59:13 heh 02:59:21 but, what ya mean? 02:59:27 well.. Grass was the name for a theoretical fractal-based Thue-like language I had in my mind. 02:59:28 or, just what to do? 02:59:31 because it was nature-ish 02:59:44 oklopol: Right now, it's not very usefull 02:59:46 fractal-based, i don't see that 02:59:53 bsmntbombdood, sure it is :) 03:00:07 I'm not sure how to do the looping operators 03:00:18 okay... they didn't work yet? 03:00:23 yeah, they work 03:00:32 The implementation is fine 03:00:39 > copies lead to both dup and drp? 03:00:44 well... fractal based as in... repeated self-similar manipulations of the source code (like Thue, but more complex logic involved) will produce any sort of arbitrary "bytecode"... that could be read by an image creator. 03:00:50 oklopol: no, that's the problem 03:00:58 okay 03:00:59 I think i'm going to have [ not pop 03:01:15 well, my bot has it like that :) 03:01:35 hmmm.. 03:01:36 my bot's flooded our channel for 6 hours now, every 3 seconds 03:01:40 i love watching that 03:01:44 if we finish this lang... we could put it into a bot. 03:01:47 how awesome would that be 03:01:51 haha :D 03:01:53 a big database of creatures and maps. 03:02:23 tho, wouldn't be that interactive, i mean you couldn't see but the result 03:02:49 seems like a crude GUI would be the best result. 03:03:04 yes 03:03:16 or at most just a display 03:03:24 a screen and a bar for loading maps, creatures and opening a connection 03:03:26 of whats going on 03:03:37 heh.. I kinda like good ol' text files. 03:03:41 with the output being all fancified 03:04:16 -!- pikhq has joined. 03:04:17 i don't like the whole concept of having a graphical interface for a non-graphical operation 03:04:25 hey pikhq 03:04:26 I need to find out if logfuck is turing complete 03:05:48 make that... one lang 03:06:18 hmm, if it's final, i can try and make something outta it as well 03:06:27 It's not final 03:07:28 ah okay 03:07:34 I can't decide what to do with it 03:08:22 you don't have a list structure, so it's hard to make an interpreter 03:08:32 you could find an isomorphism tho 03:09:32 just list all basic operation sequences that do anything sensible and find a language proven turing complete that has them or just a subset of them 03:09:53 there was at least one... with i think less functionality 03:10:01 that was similar 03:10:03 very 03:10:07 well, two stacks make a tape 03:10:11 yeah 03:11:33 I can't figure out how to make cat 03:11:41 inc: 1g1-- 03:11:48 dec: 1- 03:11:52 :DD 03:11:56 yeah 03:12:00 well.. 03:12:03 you have a stack 03:12:12 [,.1] or smth wont work? 03:12:17 1[,.1] 03:12:26 oklopol: that won't stop on eof 03:12:33 [,.] 03:12:36 then 03:12:41 1[,.] 03:12:43 because the , pops the stack 03:12:56 huh? 03:12:59 why? 03:13:24 1[1,.] if it pops 03:13:30 i'll check your spec 03:15:14 1[,><.] should work if > copies, once again i don't remember, no copy in the reference 03:16:00 It doesn't copy 03:16:11 That messes stuff up 03:16:50 1[,[>1g]<.] then? 03:17:21 read in, copy, move right, add a 0, pop it while ending loop, move copy back left 03:18:18 ? 03:18:35 doesn't work? 03:18:40 what is wrong? 03:18:41 EOF is -1 03:18:46 okay 03:19:08 1[,[>1g]<.1g1--] 03:19:15 satisfied? 03:20:13 almost 03:20:20 what is wrong? 03:20:23 That prints an eof char 03:20:26 ah 03:20:30 yeah 03:21:09 whoa 03:21:12 you figured out dup 03:21:26 1[,[>1g]<1g1--[1-.]] 03:21:31 how about now then? 03:21:45 nope 03:21:46 eof will jump off both loops 03:21:48 :( 03:21:53 what now? 03:22:32 eh 03:22:35 only prints one char 03:22:35 sorry 03:22:56 1[,[>1g]<1g1--[1-.1g]] 03:22:57 now 03:23:02 since ] pops 03:23:50 okay 03:24:06 !! 03:24:08 workage 03:24:15 huh? 03:24:23 noooo! 03:24:25 it works 03:24:29 mine or yours? 03:24:32 yours 03:24:37 1[,[>1g]<1g1--[1-.1g]] this? 03:25:00 yeah 03:25:04 AND I NEEDED ONLY 10 TRIES!! 03:25:11 :\\\\\\\\\\\\\ 03:25:52 the spec should provide certain things that floating point arithmetic on a computer doesn't, normally 03:26:05 good job 03:26:09 what do you mean? 03:26:38 you use logs for multiplication, might be that the error margin grows with many operations 03:26:55 which one wouldn't expect normally in integer arithmetic 03:27:00 hmm 03:27:50 anyway, 0 as end condition should be abs(top)<0.00005 or smth :) 03:28:21 i dunno 03:28:25 not important 03:29:16 what i don't see is why EOF ends inputting since i only convert one of the dup'd values to (value+1) for testing :) 03:29:21 -!- CakeProphet has quit (Read error: 145 (Connection timed out)). 03:29:41 whats the 1g1-- for? 03:29:46 +=1 03:29:56 for -1 -> 0 03:30:03 ah 03:30:06 i see it now 03:30:14 [ never pops? 03:30:21 [ never pops 03:30:23 yeah 03:30:29 how does 1g1-- add one though? 03:30:46 0 - 1 = -1. x --1 = x+1 03:31:20 oops 03:31:24 yeah, I read it wrong 03:31:43 with dup you can make a number n on the stack in O(logn) 03:31:47 tho it's complicated 03:31:49 I switched postfix and prefix in my head accidently 03:32:03 yeah, it's common :\ 03:33:37 well, I'm satisfied now 03:33:42 (with the language) 03:33:56 how to add two topmost elements? 03:34:01 without inserting code 03:34:06 before them 03:34:16 >1g<-- 03:34:28 yeah 03:34:29 true 03:34:57 i love the > and <, like get-outta-my-way commands 03:35:15 since only the stuff moves, you stay put (hmm, might be just me xD) 03:35:26 yeah 03:35:36 You always stay on the primary stack 03:36:28 i see the 1g as 0 now, forgot it means the same as everywhere else 03:36:44 wish it didn't need p :( 03:36:50 why g, by the way? 03:36:56 loG 03:37:06 yeah... but there is l, you know :) 03:37:13 l looks like 1, o looks like 0 03:37:27 _ could represent a log -__________- 03:37:41 just lying around... 03:37:45 heh 03:37:52 fuck :O 2½ hours left 03:38:17 "-__-" == log base 2, "-___-" log base 3 ... 03:38:35 and i've not read yet, not watched my episodes and talking naked on IRC about programming 8|| 03:38:39 I can't even remember why I chose 'p' 03:38:42 hehe :D 03:38:53 -__- is my other nick in quakenet! 03:38:57 maybe exPonent 03:39:03 You're doing nude IRCing? 03:39:04 yeah, third there too 03:39:17 pikhq, what do you think about my language 03:39:18 i'm always nude, if you can handle the knowledge :) 03:39:32 if not, then... i'm lying 03:39:57 bsmntbombdood: I think my brain is *dead*. 03:40:05 Give me a summary this weekend. 03:40:11 ok 03:40:20 hmm, you can't take the log of 0 03:40:21 ? 03:40:25 m i rihgt? 03:40:35 log 0 is undefinded 03:40:36 log(0) is undefined. 03:40:38 okay 03:40:42 thought so 03:40:50 you should define it 03:40:52 for fun 03:41:08 log(0) == -infinity 03:41:17 yeah 03:41:18 e^x=0. Solve for x. 03:41:27 2^x=0 03:41:43 not ln, log2 03:41:54 Oh. 03:41:54 it's the same for all bases 03:42:10 Fine. 03:42:17 b^x=0, where b is your base. 03:42:20 Solve for x. 03:42:23 Have fun. 03:42:56 x=-oo 03:43:09 i think it's nice enough 03:43:19 lim_{x \to -\infty}{2^x} = 0 03:43:21 (lim x->-oo b^x)=0. . . 03:43:25 ye 03:43:30 Doesn't mean that b^-oo=0. 03:43:34 ;) 03:43:59 pikhq: LaTeX pwns j00 03:44:00 :P 03:44:01 true, i know that, just wasn't sure if i could represent it that formally 03:44:09 but, fortunately you BOTH did 03:44:36 bsmntbombdood: I don't remember the LaTeX syntax for limits; sorry. 03:44:47 latex? 03:44:49 (I've not had to use it) 03:45:04 oklopol: It's a typesetting system which excels at math. 03:45:12 * pikhq needs to leave 03:45:13 -!- pikhq has quit ("leaving"). 03:45:47 :O 03:46:30 oklopol: lim_{x \to -\infty}{2^x} = 0 gets rendered to this: 03:46:40 http://www.mathbin.net/7252 03:47:11 i know 03:47:24 it was obvious from the syntax for one 03:47:33 plus i already knew what you meant :) 03:47:59 cool bin tho :\ 03:48:38 okay, now i'm neither coding nor talking about coding 03:48:42 maybe i'll open the bool 03:48:47 ..........k 03:49:00 c u 03:49:17 bye 04:06:28 damnit 04:06:46 oklopol: That cat program doesn't work unless > copies 04:06:49 which it shouldn't 04:08:04 argh 04:20:21 heh, fun program: 1[11g1--11g1--11g1-->g1g<--p>g1g<--p1-.1] 04:21:05 -!- calamari has joined. 04:22:38 (that prints beep chars endlessly) 04:30:04 1[,[>1g]<1g1--[1-.1g]] this? weird 04:30:13 it certainly won't work if > copies... 04:30:51 yeah 04:31:18 what? 04:31:19 no 04:31:28 It works only if > copies 04:32:57 1:1 -> [:1 -> ,:1 I -> [:1 I I -> >:1 I, I -> 1:1 I 1, I -> g:1 I 0, I -> ]:1 I, I -> <:1 I I 04:33:04 if no copying 04:33:26 [>1g]< doesn't dup 04:33:39 1:1 -> [:1 -> ,:1 I -> [:1 I I -> >:1 I I, I -> 1:1 I I 1, I -> g:1 I I 0, I -> ]:1 I I, I -> <:1 I I I 04:33:42 if dopying 04:33:44 *copying 04:33:54 I don't understand your notation 04:33:57 it triplicates if > copies 04:34:03 no 04:34:09 oper: stack1, stack2 -> next 04:34:29 I == input 04:34:37 what is wrong with it? 04:34:45 please tell me where it goes wrong 04:34:47 :\ 04:35:10 [ = do nothing to stack 04:35:15 > move top over 04:35:22 1g drop 0 on 04:35:29 ] pop zero off, end loop 04:35:32 ah 04:35:33 okay 04:35:35 < move back over 04:35:58 mine works if EITHER > copies or [ duplicates 04:36:07 but i meant it with [ duplicates 04:36:20 [ has never duplicated 04:36:21 if there is neither in the language, how do you duplicate? 04:36:23 okay 04:36:31 i just imagined it then 04:36:36 I'm starting to think there's no way to dup :( 04:36:40 okay 04:36:45 then make [ duplicate 04:36:57 That doesn't make sense 04:37:02 [ push ] pop 04:37:23 then there's no way to drop 04:38:20 yeah 04:38:27 same prob as before 04:38:49 If we got rid of p we could add a dup command 04:39:05 nooooooo 04:39:19 2 log commands is better than stack opers 04:39:22 hmm 04:39:37 you did have [ duplicate at some point of testing 04:39:37 I'll keep trying to think of ways to emulate p 04:39:39 i'm sure 04:39:51 nope 04:41:17 okay 04:41:57 i just suggested that, you thought it didn't work, which it didn't 04:42:01 but i stuck with it :) 04:42:07 hard to change 04:42:15 anyways, that doesn't work now 04:42:40 i like [ duplicate more than > duplicate (you need one of them) because it's more logical 04:42:45 but then there's no drop 04:42:52 > copying you have both 04:42:56 ...no 04:43:08 yes, [] is drop 04:43:09 yes 04:43:12 esyesy 04:43:27 wait 04:43:41 nope 04:43:52 because [] will keep dropping untill it gets to 0 04:44:08 01[] 04:44:11 and if > copies we have no way to put a 0 under the top 04:44:16 yeah 04:44:18 tru 04:44:18 -!- digital_me has quit ("leaving"). 04:44:33 -!- digital_me has joined. 04:44:37 damn :D you're one step ahead of me all the time 04:45:15 what if 04:45:21 log 0 would be drop? 04:45:42 that doesn't make sense 04:45:55 i think it does, but maybe not :) 04:46:26 g should never take more than one off the stack 04:46:50 it wouldn't 04:46:57 it just wouldn't put anything back in 04:47:31 anyway, you could only wipe out numbers divisible by 2 :) 04:47:50 i meant if you tried 0g it would leave nothing there 04:48:00 then 2 would be dropped with gg 04:48:11 and 2.1 with infinite amount of ggggggg... xD 04:48:19 so no 04:48:29 -!- GreaseMonkey has joined. 04:49:30 hmm 04:49:45 how does one undo a log without a special function to do it... 04:49:49 you can make that work with many kinds of little nonsence 04:50:13 you could have [ not copy a 0 but pop it :) 04:50:26 so ig[ would start a non-dup loop 04:50:30 and [ a dup look 04:50:38 That wouldn't do anything 04:50:46 1g[ 04:50:53 wouldn't? 04:51:05 yeah, it wouldn't :) 04:51:57 well, add a drp, make [ or > push, then it'll work 04:52:18 I don't want more than 10 commands though :( 04:53:22 well, i think it'd a good way to handle log(0) to make it a drop that drops another from the stack :) 04:53:30 it's undefined 04:53:49 That would make g very very weird 04:53:50 so... why not 04:53:54 nah 04:54:03 g can't take more than one arg from the stack 04:54:11 why is that? 04:54:18 you don't take random logs from input 04:54:28 you always know when you put 0 in 04:54:36 and you always do it for dropping 04:54:41 it's true it's not intuitive 04:54:44 Because you can only take the log of one number 04:54:52 so g taking 2 numbers doesn't make sense 04:55:17 yes, but log(0) is an error, that would just be a try {} catch() to drop 04:55:23 -_______- 04:55:33 what's this lang? 04:55:46 logfuck :) 04:55:47 GreaseMonkey: http://bsmntbombdood.mooo.com/logfuck_spec.txt 04:56:00 GreaseMonkey: http://bsmntbombdood.mooo.com/logfuck.py.txt 04:57:48 basically, you have to choose between side-effects and overloading 04:57:54 if you don't want a new command 04:58:03 side-effects don't seem to do it 04:58:33 so... g could be overloaded for input it can't handle yet 05:01:14 1[1,1g1--[1-.1g]] actually 05:01:21 no dup needed i think... 05:01:48 bsmntbombdood, try that! 05:02:37 !!!!!!!! 05:02:40 it works 05:02:47 goods 05:03:00 but, still, dup and drp, needed are 05:03:12 fuck 8|| i gotta go to school 05:03:21 school hols here :D 05:03:43 school :( 05:03:44 -!- Sgeo has quit ("Leaving"). 05:03:46 school in an hour here and holidays in a few months 05:04:35 I don't see where that code drops out of the loop 05:04:37 on eof 05:11:36 it does, tho? 05:11:38 right? 05:12:38 1[1,1g1--[1-.1g]] -1 won't go in the inner loop, [ won't drp it tho, so it'll go outta the outermost loop too 05:18:04 -!- digital_me has quit ("Lost terminal"). 05:19:48 bsmntbombdood, please respond, it'll bug me the whole day otherwise :) 05:19:49 oh 05:19:59 i can dl the official code tho 05:22:43 i can't run it tho 05:22:44 :)) 05:22:46 :))))) 05:30:11 i bags we make a massive BF-style lang with a shitload of instructions and call it BrainDead 05:31:32 afk food 05:39:45 oklopol: yes, it works 05:40:36 Why can't you run it? 05:41:15 anyway, bedtime 05:51:53 -!- calamari has quit ("Leaving"). 05:57:33 b4x0r 06:18:14 -!- oklofok has joined. 06:19:46 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 07:32:56 -!- oerjan has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:47 -!- ShadowHntr has joined. 08:07:23 -!- sebbu has joined. 08:30:13 -!- oerjan has quit ("Delirium"). 08:33:34 gtg zzz gnight 08:34:35 -!- GreaseMonkey has quit (".,,._ {o_O} _.,,."). 09:24:40 -!- ShadowHntr has quit ("End of line."). 10:16:29 -!- Asztal has quit ("closing VM"). 11:39:57 -!- helios24 has joined. 11:55:13 -!- sebbu2 has joined. 12:14:28 -!- sebbu has quit (Read error: 110 (Connection timed out)). 12:36:59 -!- MM2 has quit (Read error: 110 (Connection timed out)). 13:02:33 -!- MM2 has joined. 13:03:41 -!- jix__ has joined. 13:17:41 i couldn't because i have an old version of python 13:17:51 i could dl a new one now 13:17:58 but i was in quite a hurry 13:23:25 -!- oklofok has changed nick to oklopol. 13:28:00 -!- anonfunc has quit. 14:10:57 -!- calamari has joined. 14:18:24 -!- calamari has quit (Read error: 104 (Connection reset by peer)). 14:20:20 -!- calamari has joined. 14:20:48 -!- MM2 has quit (Read error: 110 (Connection timed out)). 14:37:37 -!- sebbu has joined. 14:37:53 -!- Asztal has joined. 14:47:19 -!- calamari has quit ("Leaving"). 14:52:00 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 14:56:15 -!- sebbu2 has quit (Read error: 110 (Connection timed out)). 15:54:32 -!- tgwizard has joined. 16:00:07 -!- jix__ has joined. 16:06:30 -!- Asztal has quit (Read error: 110 (Connection timed out)). 16:18:59 -!- jix__ has quit (Read error: 54 (Connection reset by peer)). 16:19:15 -!- jix__ has joined. 16:37:02 I think a major impediment to good esolanging is that we make stuff up. 16:37:26 If we didn't just make stuff up, we could have invented stuff like this: http://home.pipeline.com/~hbaker1/Use1Var.html 17:06:02 -!- helios24 has quit ("Leaving"). 17:16:32 okay, let's stop making stuff up. 18:22:13 making what up? 18:42:45 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 18:48:59 -!- Asztal has joined. 19:04:17 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 19:11:53 -!- tgwizard has joined. 20:18:44 BTW, I recommend reading about single-use variables. They are fascinating 20:30:21 -!- sebbu2 has joined. 20:31:38 -!- sebbu has quit (Nick collision from services.). 20:57:26 -!- Asztal has quit (Read error: 110 (Connection timed out)). 21:05:48 -!- oerjan has joined. 21:06:48 -!- jix__ has joined. 21:21:03 For a language depending heavily on single use variables, check out Clean. 21:28:46 -!- Sgeo has joined. 21:33:11 -!- tgwizard has quit (Remote closed the connection). 21:40:12 oerjan: Already done so. 21:40:24 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:47:05 -!- RodgerTheGreat has joined. 21:48:29 RodgerTheGreat: hi 21:49:03 RodgerTheGreat: read about uniquiness types. They rock for esotericness! 21:49:14 ok, cool. 21:49:19 I'll look into it 21:51:23 ooh 21:51:29 yeah, that's a good idea 21:52:29 now read this, which gives VM ideas: http://home.pipeline.com/~hbaker1/LinearLisp.html 21:57:30 -!- sebbu2 has quit (Connection timed out). 22:34:26 hmph 22:59:31 -!- pgimeno has changed nick to pgimeno42. 23:08:31 -!- pgimeno42 has changed nick to pgimeno. 23:20:13 -!- oerjan has quit ("Death"). 23:22:38 -!- CakeProphet has joined. 23:23:04 MMM 23:23:30 mmm 23:43:33 -!- CakeProphet_ has joined. 2007-01-19: 00:00:13 -!- CakeProphet has quit (Read error: 110 (Connection timed out)). 00:04:50 -!- CakeProphet_ has changed nick to CakeProphet. 00:53:47 maybe logfuck doesn't need a dup 01:05:27 -!- pikhq has joined. 01:05:54 I'm devising a language based on the rhythm of sound. 01:06:23 where the rhythm is the data rather than the operation. 01:06:34 . . . 01:07:09 . . . 01:07:38 .. .. .. 01:07:45 . .. .. . 01:07:56 .-.-.-.-.--.--.--...--...-.-.-.-.-.-.-. 01:08:08 hmm.. 01:08:24 I could probably have an infinite memory... despite being a finite medium. 01:08:31 because rhythm is infinitely divisble. 01:09:15 It's a theoretically infinite medium, actually. 01:09:39 Unless your arbitrarily limit the music size? 01:10:05 I probably would... just to see if the inifitely-visibleness makes it infite. 01:10:05 * pikhq recommend something like opcodes encoded in the notes, initial data encoded via rythm 01:10:17 nah.. no notes 01:10:32 So just a drumbeat, then? 01:10:44 I'm going with a non-musical structure operating on the data. 01:10:49 rhythm only being the analogy for the data 01:10:57 That's no fun. 01:11:07 I want to be able to pay my code! 01:11:23 it's technically a finite strip of inifitely divisble data with regular segments of "sound" and "no sound"... a binary encoding that can be divided by any ratio. 01:11:35 (besides, at least with something like GNU Lilypad, there's a simple syntax for music encoding) 01:12:43 there will be maybe 3 sound-manipulation commands... and 3 or 4 pointer manipulation commands... 01:13:15 the pointer is basically three pointers... forming two segments... on which the sound-manipulation commands operate. 01:14:02 Make a rythmic output device, then. 01:14:12 with the control commands being proportional 01:14:14 Maybe tie into MIDI and make it play your data like a drumbeat. 01:14:16 >:D 01:14:18 yeah, that seems to be a thing to do. 01:14:40 (in addition to ASCII, maybe?) 01:14:57 so if you have -----|--|-------|------ 01:15:31 doing "zoom tuk" (tuk is the formal name for the segment formed between the middle and right pointers) 01:15:34 you would get... 01:15:51 something like -------|--|-----|------ 01:16:37 it's kinda like the golden ratio. 01:16:46 Heheh. 01:16:55 you take a part of the ratio... and make it the whole of the ration. 01:18:29 commands for operating on the data would be like... flip segments... 01:18:49 which gives you conditions... if both the flipped segments are the same type... nothing is changed. 01:19:03 otherwise... they swap type. 01:20:48 that could actually be consider the string-rewriting paradigm. 01:21:02 if ASCII is converted into the rhythm... and the entire program is merely operations on that string. 01:23:57 other ideas could be to use polythym to program. 01:24:14 you play two rhythms side by side... with the combinations being operations. 01:34:51 OH 01:34:58 how about a concurrent programming language. 01:35:05 with like... single character commands. 01:35:13 each thread is separate by two newlines. 01:35:34 and they're all interpreted at the same time (albeit, with a nanosecond so between them), and on different resources. 01:35:40 haha... threaded BF 02:08:22 wrote up a spec for it: http://esolangs.org/wiki/Weave :D 02:13:08 * SimonRC thinks there needs to be way to program a collection of processes instead of individual processes; you don't say "send to foo" in one and "receive from bar" in the other, but you specify a "copy from foo to bar". 02:13:12 * SimonRC realises there must be dozens of obscure academic papers on many ways of doing this. 02:13:15 * SimonRC goes to bed. 02:13:33 ...what? 02:21:02 * CakeProphet is organizing the esolang wiki's categories a bit. 02:21:06 they're kind of disgruntled. 03:02:23 owtf 03:02:30 why isn't AND a function in common lisp 03:02:32 stupid macros 03:03:26 I thought I could do (reduce #'and list) 03:03:35 it isn't? 03:03:48 I thought and was a valid function. 03:04:26 (funcall #'and 1 2) 03:04:34 > The function AND is undefined. 03:08:50 that's dumb 03:32:10 -!- pikhq has quit ("leaving"). 03:57:32 -!- bsmntbombdood has changed nick to bdsmbombdood. 04:13:53 -!- bdsmbombdood has changed nick to bsmntbombdood. 04:22:42 -!- RodgerTheGreat has quit (Read error: 110 (Connection timed out)). 04:26:47 -!- CakeProphet has quit (Read error: 113 (No route to host)). 04:44:30 -!- wooby has quit ("BitchX: often imitated, never duplicated!"). 05:22:50 -!- Sgeo has quit ("Leaving"). 05:53:35 -!- MM2 has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:11:30 -!- oerjan has joined. 09:58:10 -!- oerjan has quit ("Destruction"). 11:13:36 bsmntbombdood: ISTR there is a FAND, which *is* a function. 11:14:15 anyway, AND takes as many arguments as you want, so I suspect it is not useful to reduce with it. 11:14:53 Discouraging the evaluation-control usage of macros is why Haskell has laziness, you know. 12:37:43 -!- MM2 has quit (Read error: 131 (Connection reset by peer)). 12:39:12 -!- MM2 has joined. 15:07:30 -!- tgwizard has joined. 17:11:01 -!- sebbu has joined. 18:14:57 -!- tgwizard has quit (Remote closed the connection). 18:29:37 * SimonRC goes to dinner. 19:35:04 bsmnt_bot is bored 19:35:19 !fuckyerself 19:35:59 make it say "* bsmntbot is bored" if idle for a day :) 19:36:04 oklopol: make logfuck better! 19:36:06 easy 19:36:08 :O 19:36:12 or come up with a better name 19:36:13 i meant the bored thing :) 19:36:24 name, better? 19:36:31 yeah 19:36:48 XXXfuck, where XXX is the shortest possible string related to the subject 19:37:05 naaah 19:37:11 is the naming convention for languages that have relations with bf 19:37:21 I don't want it to have fuck in it, so that I can tell normal people about it 19:38:08 logarythm would be nice if combined with CakeProphet's 19:38:10 :) 19:38:20 i'll try again 19:38:57 hmm 19:39:11 i only come up with stupid wordplays :) 19:39:43 how about just "logic"? 19:39:51 logic? 19:40:08 okay, bad then 19:40:11 hmm 19:41:57 make it better how? 19:42:07 what solution did you choose? 19:42:17 ? 19:42:26 for the dup/drp thing 19:43:03 didn't 19:43:08 I think that dup isn't needed 19:43:29 it is 19:43:41 as long as pooping in a [] is deffered to the ] 19:43:55 deffered? 19:44:48 i didn't understand that 19:45:47 delayed 19:46:00 ah deferred 19:46:05 still 19:46:06 and s/poop/pop/ 19:46:24 it starts making sence eventually .D 19:46:39 so, ] pops -> it works? 19:46:46 I think 19:46:57 k 19:46:57 dup 19:47:04 shuwwit! 19:47:30 you can't dup 19:47:40 ah sorry 19:47:54 hmm 19:47:58 i think you need to dup 19:48:06 I think you can do it without dup 19:48:54 do "get input -> subtract log(input) from input" 19:49:02 then i'm happy 19:50:50 hrm 19:51:18 i'm not saying it's impossible 19:51:20 but i am 19:53:14 I can't figure out how 19:54:33 you can only do a subtraction of two adjacent numbers on the stack, there is no way to transmit ANY information between two numbers, so it is impossible to get the two numbers input and log(input) on top of the stack 19:56:35 I think it's still turing complete 19:56:42 nah 19:57:12 a turing complete system must be able to turn a number x to (x-log(x)) 19:57:18 well 19:58:10 hmm, i think it's not turing complete if a number used in x calculations must be input x times 19:58:32 turing completeness doesn'thave to do with input/ouput 19:58:45 and i think if the example is impossible, other, more clear cases aren't either 19:58:59 well, okay 19:59:17 hmm 19:59:25 my example didn't work :) 19:59:27 argh 19:59:33 * bsmntbombdood adds dup 19:59:37 why is that? 19:59:49 it wasn't turing complete after all? 20:00:35 i dunno 20:00:35 :) 20:01:33 with that, if you want to, at any point of execution, subtract a from log(a), you will have to duplicate the whole program sofar 20:02:19 ,dg- 20:02:57 x-log(x) 20:02:59 :/ 20:03:01 i know 20:03:05 i'm not blind :) 20:03:21 11 commands :( 20:04:22 :( 20:04:41 i have to leave 20:04:46 bye 20:47:40 -!- oerjan has joined. 21:15:53 -!- anonfunc has joined. 21:21:42 -!- helios24 has joined. 21:44:21 made a new language today (1 fully) 21:44:30 brainfuck with floating point arithmetic 21:44:36 which has been my goal for long 21:44:55 how can that work? explain. 21:45:12 it adds a few constraints to programs 21:45:27 you have to have as many >'s as you have <'s in one level 21:45:30 or, [] 21:45:42 and input allowed only at "base" level 21:46:05 +++[------->+<]>: would print 3/7 21:46:08 whatever that is 21:46:51 That >< constraint implies you can only use a finite number of cells. 21:47:04 -!- sebbu2 has joined. 21:47:05 yes 21:47:30 i think it's turing complete, i don't care whether it is or not, tho, it's a nice toy 21:47:32 Same as named whiles in pikhq's BFM 21:48:08 You get a Minsky machine that way, which is Turing complete. 21:48:24 (Ignoring non-integer values) 21:48:42 ;>++++>++++++++[<<[>>>+>>+<<<<[<->>>>+<<<]>>>[-<<<+>>>]<<<<-]>>>>>[-<<<<<+>>>>>]<<[-<<+>>]<-]<: 21:48:48 calculates sqrt of input :) 21:49:25 the 8 in the beginning is the number of iterations, 4 is the initial guess 21:49:52 i'm not yet sure whether it is possible to make an interpreter without adding even more constraints 21:50:18 hm 21:50:24 i still don't get how that works 21:50:35 Only increment and decrement? Are you using differentiation implicitly? 21:50:39 (i think i can implement any math-related function even with the constraint a sub-[] can't change a parent-[]'s data) 21:50:43 yes 21:50:44 :) 21:50:51 Curiously I had the exact same idea today! 21:50:53 i'm quite sure that's not turing-complete actually 21:50:55 difference is the name of the language 21:50:57 really :D 21:50:59 cool 21:51:20 Probably caused by the logfuck discussion 21:51:53 lament, i think it is, and i'd add all bf features if they'd make algorithmic sence like <'s and >'s being predictable 21:52:27 i mean, mathematically pretty hard to say how the differentiation works if there are for example inputs in a [] :) 21:53:08 i just don't understand what the semantics of - are 21:53:10 oerjan, i've thought about that some time ago, but heard about differential just a few months ago... and maybe the logfuck discussion too 21:53:20 lament, it decreases one 21:53:30 one 1/inf 21:53:38 You might want to look at non-standard analysis. 21:53:43 one 1/inf. 21:54:38 well, if you put [->++<] in brainfuck, you are multiplying a number. if you put [-->+<] then you either divide a number or do something unpredictable 21:54:50 so ++[->[->++<]] is exponentiation? 21:54:51 using differentials that makes sence too 21:55:13 err not like that 21:55:15 that does what it does in bf 21:55:20 ++[->++[->++<]] 21:55:31 0,0,8 21:55:36 is the memory 21:55:49 if you add a < 21:55:58 hm. 21:55:59 i presumed you meant that 21:56:21 interesting 21:56:26 lament, most simple bf programs would work still... 21:56:36 [] is what does the funny stuff 21:56:43 still not sure if it's gonna be well-defined 21:57:03 It may be well-defined though not necessarily computable. 21:57:05 should a number go over / under zero during a loop, it is retried with a smaller increase 21:57:22 it is possible to interpret if i add constraints 21:57:49 BUT, these constrains are already used in many mathematical functions done with bf 21:58:04 you rarely depend on overflow 21:58:19 and in math you rarely have to iterate through memory 21:58:27 so you define [expr] as lim n->0 of evaluating [expr] in a language where - and + mean subtract and add n 21:58:33 right? 21:59:02 yes 21:59:33 possibly you could do that to the entire program and don't need the matching > and < restriction 22:00:14 nah 22:00:33 hmm 22:00:44 i'll try and find an example why it wouldn't work 22:00:44 There are some subtleties with that definition, since some values of n cause loops not to hit 0. 22:01:04 we define [] as checknig for when the index goes below 0 22:01:23 actually no, we define - as having bounds-checking 22:01:38 that makes more sense since i assume you want to keep all numbers positive? 22:01:42 nah 22:01:44 i don't 22:01:44 oh 22:01:55 that does make it more difficult :) 22:02:27 There may be cases where wrapping around at infinity works nicely. 22:02:28 you are missing the fact that inner []'s can move the pointer too, they are theoretically done infinity times 22:02:37 which is no problem with my constraint 22:02:38 oerjan: doubtful 22:02:51 Not at all doubtful. 22:03:12 oerjan: not well-defined 22:03:21 oklopol: that's fine, it's just a limit 22:03:30 (if it IS just a limit, which it doesn't seem to be) 22:03:33 It is well-defined if the limit is defined 22:04:38 (at infinity) 22:04:48 >+++++>++++>++++<<[-[>]<-[<]>] for example would be undefined 22:05:01 nah, maybe not 22:05:25 ah 22:05:30 it makes sence actually 22:05:55 it's the same as in BF 22:05:59 -!- sebbu has quit (Read error: 110 (Connection timed out)). 22:06:14 weird stuff. 22:06:32 all i added to bf was this differentials thing, ; and :, you can figure what they are 22:07:15 i actually thought making () a separate differentiation loop where constraints lie 22:07:18 Oh, I thought they were just decoration :) 22:07:25 and [] normal 22:07:27 no, addition 22:07:34 ,.;: 22:07:34 io 22:08:09 that's pretty logical notation for floating point IO 22:08:18 yes 22:08:27 obvious, tho 22:08:35 almost like Ocaml 22:08:47 fuck you with your names i don't know :((((( 22:08:51 wuzzit? 22:09:31 Ocaml is a functional language with object extensions. ML dialect. 22:10:17 okay 22:10:21 The point of my comment is that Ocaml uses +. etc. to mean floating point addition etc. 22:10:23 ; and : are like it? :D 22:10:31 ooo 22:10:45 Because it doesn't have arithmetic overloading. 22:10:48 yeah 22:10:53 guttit 22:11:51 but, i don't care whether it's touring complete, i can easily translate a calculation on it 22:12:01 oklopol: Gut tit? 22:12:08 yeah 22:12:09 sure 22:12:18 I don't even want to think about what that's supposed to mean O_O 22:12:24 got it 22:12:36 -!- Sgeo has joined. 22:13:20 now... now.... ()? 22:13:24 needed? is? 22:14:15 You can emulate ordinary [] I think 22:14:29 hmmmmmm 22:14:39 Or rather, ordinary +- 22:14:57 i don't know if the implicity will work everywhere 22:15:04 By having a cell with a fixed value. 22:15:16 yeah, i thought of that 22:16:30 1 could assign a 1 in the current cell, that was one thing i thought... another were ^ and v, ^ would convert a differential into it's counterpart number, v the other way xD 22:16:42 counterpart number... 22:17:36 I don't think any of those are strictly needed though. 22:18:56 maybe not, i just think the fact that (3 here)[->[SMTH]<] will execute SMTH infinity times will in some cases make it hard for the interpreter to know what to do, actually 22:18:56 If you keep one cell with a known value you can convert everything with a little copying. 22:19:07 yes, true 22:19:44 but i liked the idea of using only one kind of numbers 22:19:57 everything being used as a differential when needed 22:20:10 but that requires the <>-limit i'm afraid 22:20:18 Well no matter what you do some limits will fail to exist 22:20:33 liek? 22:21:18 [>+<] 22:21:39 mem: 0 INF 22:22:07 0 on this level, 1 on the other, infinity steps done -> 0 INF 22:22:15 not 0 22:22:18 but what there was 22:22:37 You will get inconsistencies. 22:23:21 +[>+<] (1 INF) >[->+++++<] (INF 0) 22:23:26 i can't see them 22:23:51 What happens with [>+<]>+<[>-<] 22:23:58 i'm just running the algorithm in my head, crash it and i see the inconsistencies 22:24:09 nothing 22:24:13 0 1 22:24:17 if there is stuff tho 22:24:22 in the beginning 22:24:23 then 22:24:53 [>+<] (0 INF) >+< (0 INF) [>-<] (0 0) 22:25:23 replace 0 with your var 22:25:33 that's what it'd've done 22:25:45 you can, indeed, call that an inconsistency :) 22:26:02 but, it could be made crash 22:26:15 or infinite loop 22:27:02 I was working on brainfuck -> logfuck conversions in math today 22:27:16 did it work? 22:27:23 dunno 22:27:37 well, i got conversions for everything, but i haven't tested them 22:27:41 I'll type em up 22:27:43 ya 22:29:07 http://pastebin.ca/321969 22:30:20 , 22:30:40 ah 22:30:57 because , replaces the top 22:31:00 sorry, i'm once again mixing the new standard with the old one :) 22:32:03 don't think > and < are correct tho 22:32:10 look good? 22:32:11 well, actualyl 22:32:13 yeah 22:32:22 they are the same, yeah 22:32:36 oh 22:33:05 yeah 22:33:07 xD 22:33:25 i had to think it over a few times 22:33:44 well, if you have an interpreter for the latest standard, try em 22:33:51 I will 22:34:51 i'm pretty sure a quine qouldn't work! 22:38:34 what's some brainfuck to test? 22:38:54 eh 22:39:01 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-. 22:39:15 ...that won't be a good test 22:39:28 ++++++++[->++++++++<]>.? 22:39:36 ++++++++[->++++++++<]>+. 22:39:41 i'll just do hello world 22:39:44 that would be a test 22:39:47 yeah 22:39:48 same thing 22:40:01 1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--[<1g1--1g1--1g1--1g1--1g1--1g1--1g1--<1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--<1g1--1g1--1g1--<1g1-->>>>1-d]<1g1--1g1--d.<1g1--d.1g1--1g1--1g1--1g1--1g1--1g1--1g1--d.d.1g1--1g1--1g1--d.<1g1--1g1--d.>>1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--1g1--d. is the code I get 22:40:17 runnit 22:40:36 shit 22:40:41 :D 22:40:50 it prints ":QXX[I[^X" 22:40:53 ++++++++[->++++++++<]>+. 22:40:55 try that 22:41:22 1 22:41:27 ? 22:41:34 it prints "1" 22:41:38 i know your problem 22:41:45 your's prints numbers? btw 22:41:59 no, it prints ascii 22:42:19 if a cell is empty, bf assumes it 0 22:42:26 mine does too 22:42:26 yours doesn't have it 22:42:28 oh 22:42:57 i thought a - would use the underlying number if there was one and only making a new one when the stack is empty 22:43:08 *make 22:44:32 [<1g1-- this here will use the number in the last cell, right? 22:44:46 huh? 22:44:55 hey 22:44:56 yeah 22:44:59 it would 22:45:00 not 22:45:46 +[->+<]>. 22:45:48 try that 22:46:31 What's it supposed to do? 22:46:35 print a 1 22:46:40 nope 22:46:44 it hangs forever 22:46:45 put numeric io on 22:46:48 a-ha 22:46:52 show the code 22:47:09 1g1--[1-<1g1-->d] it's non-wrapping 22:48:14 it should work imo 22:48:21 no 22:48:29 yes 22:49:22 hmm 22:49:23 okay 22:49:34 what does < do if the rightmost stack is empty? 22:49:38 0 22:49:43 good 22:51:19 argh 22:51:20 bug 22:51:24 1g1-- (put one on stack) [1- (subtract one... at zero now) < (push a zero, stack now [0 0]) 1g1-- (add one, stack now [0 1]) > (stacks: 1:[0] 2:[1]) d ([0, 0] [1], so end loop sith [0] [1]) ] < (stack now [0 1]) d. (print topmost... 1) 22:51:34 point me where it goes wrong 22:51:40 bug in interpreter 22:51:40 ....and win a cookie! 22:51:44 i knwo 22:52:25 more like, i knew it! 22:53:42 if not secondary: 22:53:43 secondary.append(0.) 22:53:43 primary.append(secondary.pop()) 22:53:49 the bug was the no else? 22:53:56 no 22:53:58 okay 22:54:03 in the '-' code 22:54:31 yeah 22:54:40 i should've read that :) 22:54:51 I need to write a stack object 22:54:53 pop returns none and you can append that? 22:54:56 you don't 22:55:18 you could, but since that is already done, no use 22:55:26 that as in that interpreter 22:55:47 the function is easily fixed 22:56:09 well yeah, stack might be easier 22:57:36 class stack: 22:57:36 def __init__(self): 22:57:36 id=[] 22:57:36 def push(a): 22:57:36 id.append(a) 22:57:37 def pop(a): 22:57:39 if id: 22:57:41 return id.pop() 22:57:43 else: 22:57:45 return 0 22:57:56 27 seconds 22:58:11 i'm getting godd it seems 22:58:12 :\ 22:58:21 ah 22:58:24 min 27 secs 22:58:33 then it makes more sence :) 22:59:07 since i had a moment of thought on [] or recursion but then remembered [] is a list :D 23:01:05 yes! 23:01:08 it works! 23:01:32 :D 23:01:43 the progz? 23:01:51 hello world 23:01:55 good 23:02:56 for a brainfuck interpreter, a hello world usually find all bugs 23:03:23 I hope so 23:03:50 well, now it's brainfuck with multiplication and addition :) 23:04:02 actually all basic arithmetic 23:04:02 yep 23:04:14 more complex math is loads easier too 23:04:20 i can do sqrt 23:04:26 3 extra instructions though :( 23:04:27 if you can wait 23:04:30 yeah :( 23:05:15 sqrt is >1 11g1-- >gg1g<-- p p 23:05:38 or >1 TWO DIV ah you can just simulate it with logs 23:07:04 what do you mean, simulate it? 23:07:10 There's no simulation 23:07:13 i mean, calculate :) 23:07:18 yeah 23:07:22 great, eh? 23:07:54 it's pretty cool 23:08:07 i needed your macros to see it tho :( 23:12:49 I need my macros to write it 23:14:11 yeah, but i'm very sensitive about my human weaknesses 23:14:31 the 1 is the input tho? 23:14:40 no 23:14:45 the 1 is to get .5 23:14:52 yeah 23:14:57 goddamned 23:15:45 i misunderstood it a little 23:16:33 since i just glanced at it and realized base^(log(a)*log(b))=a^b 23:17:57 i should have someone here whack me in the head if i start just staring at the screen idle :) 23:19:25 haha awesome 23:19:44 I came up with an algorithm to generate an arbitrary number on the stack 23:20:08 http://pastebin.ca/322010 23:21:46 works for floating point too 23:22:26 nice 23:24:23 now it's the output is smaller: http://pastebin.ca/322014 23:24:50 okay, now i figured it 23:24:58 i'm slow :\ 23:25:35 figured what? 23:25:56 i mean, took me 5 minutes to get the function fully :\ 23:26:09 the gen_number function? 23:26:12 yeah 23:28:05 I'm not sure how it works with floating point numbers 23:29:13 It does though 23:31:45 Might be able to make it more efficient by using multilication too 23:31:48 -!- jix__ has joined. 23:33:11 hmm 23:33:23 log(the float) returns a negative number 23:33:27 which can be created 23:33:36 and... it is normally added and exp'd 23:34:15 hmm 23:36:23 well, I think that's a very elegant algorithm 23:36:54 yes, have nothing to add :\ 23:36:59 perfect. 23:37:01 :D 23:38:26 as long as the numbers are of finite length in the base system, that is fast 23:38:50 if you'd've used 3-base in your language, that would cause infinite loops 23:38:59 ? 23:39:42 because number-base**int(log(number)) would never be zero 23:40:02 since there would be an infinite series of numbers as the decimal tail 23:42:09 ah ha! 23:42:15 I made it more effiecient 23:42:21 show! 23:42:35 s/math.floor/round/ 23:42:53 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 23:43:01 that's not an algorithmical improvement :) 23:43:04 is what I did 23:43:15 *-al 23:43:23 well, it makes numbers like 2**16-1 a lot shorter 23:43:34 ah 23:43:39 it is, true 23:43:52 not much tho 23:43:59 yes much 23:44:32 not much, 2**16*0.75 would be almost as inefficient then 23:45:01 before: 336 chars, after: 24 23:45:17 okay :) 23:45:32 2**16*0.75 is 34 chars 23:45:44 and used to be? 23:45:52 one sec 23:46:03 actually 23:46:10 should be about the same 23:46:12 i think 23:46:24 used to be 69 chars 23:46:45 well, nice improvement then :D 23:47:15 whoa 23:47:31 .1 is 1435 chars 23:47:41 well, given 23:48:08 I think I have an idea 23:48:09 it's 2-base presentation is more than 30 bits 23:49:18 How do we convert a floating point number into a fraction? 23:50:52 hmm 23:50:57 you mean 23:50:58 like 23:51:36 wtf i can't find the word :\ 23:51:41 I want f(.2) => (1,5) 23:51:50 oh 23:52:04 ei 1/5 == .2 23:52:27 (floor(number), 1/(number-floor(number))) 23:52:39 ? 23:52:54 nope 23:53:18 then what do you mean? :D 23:53:50 the gives (0.0, 5.0) for .2 23:54:10 yeah, i don't know what you meant by (1,5) :) 23:57:16 yes!! 23:57:29 .1 is now 31 chars! 23:57:38 what did you do? 23:58:12 -!- CakeProphet has joined. 23:58:29 http://pastebin.ca/322047 23:59:10 erm, crap 23:59:12 buggy 23:59:43 yeah, doesn't work for numbers > 1 2007-01-20: 00:00:28 why the +1? 00:00:41 because 00:02:57 1/5 == .2 becomes 1 + .2 then :\ 00:03:02 or? 00:03:09 ah 00:03:12 dam 00:03:13 n 00:04:25 you could factor the number and 1/(number-floor(number)) to their prime elements 00:04:28 then create those 00:04:31 one sec 00:04:34 and multiply and divide 00:04:36 or smth 00:04:36 I found an algo to do it 00:04:39 oaky 00:08:42 ok 00:09:16 show! 00:09:25 http://pastebin.ca/322056 00:09:42 .1 takes 31 chars 00:10:05 Homespring looks awesome. 00:10:12 farey does what? 00:10:22 or, is it understandable? 00:10:26 converts a float into a fraction 00:10:31 I didn't write it 00:10:58 that's why i assumed i wouldn't be able to read it 00:10:59 fast 00:11:17 in form a/b? 00:11:31 farey(.2) => (1,5) 00:11:37 yeah 00:11:43 farey(1.2)? 00:11:55 ah 00:12:10 why did i not understand that last time :\ 00:12:24 hmmm... BF works pretty damn well with threads. 00:12:33 i hope it's this headache... or then i'm getting stupider 00:12:40 CakeProphet, what you did? 00:12:45 the low-leveliness makes it a perfect candidate. 00:12:47 yeah. 00:13:00 now it is WAAAAAAY better with non integers 00:16:13 CakeProphet, what did you do? 00:18:16 ok, this algorithm is good now 00:20:05 ...except farey is very slow 00:20:35 hmm i'd read it but my brain is dead 00:20:42 the farey 00:22:02 threaded BF... 00:22:11 read [[Weave]] 00:22:14 heh, pi is 740 chars 00:27:35 link it again 00:27:40 CakeProphet 00:31:02 http://esolangs.org/wiki/Weave 00:31:29 brainfork 00:38:41 there are no examples :) 00:38:46 i've seen that 00:38:58 bsmntbombdood, that is a simplification of it :) 00:39:43 hmmm 00:39:49 didn't know there was a brainfork. 00:39:53 it looks kind of silly though. 00:40:00 I like Weave much better. :D 00:40:54 Weave is intended to execute as if you had literally just started running a bunch of BF programs at the same time at the very start... 00:41:04 with a single array shared amongst them as well as their own private ones. 00:41:43 brainfork is ingenious, one of my favorites 00:42:06 forking is so nice 00:42:25 but, weave might be useful 00:43:00 well... 00:43:17 it's sort of like... programming a bunch of little minions 00:45:45 Brainfork doesn't have a mechanism for data sharing. 00:49:36 it does 00:49:44 it has only data sharing 00:51:26 ah 00:51:36 the specs are bad 00:52:19 hmmm... brainfuck would be really easy to hide in other documents. 00:52:30 because everything-else-is-comments 00:52:40 yeah 00:52:59 you can get better ways tho... 00:54:22 you could hide whitespace in the whitespace on the edges of a document. 00:59:01 ok, the brainfuck->logfuck conversions don't work for input 01:05:00 true 01:05:07 but not that big a problem 01:05:38 CakeProphet, i can think of a million ways to hide for example bf in a document... 01:23:46 -!- ihope has joined. 01:24:33 What's wrong with the input? 01:24:55 You typed it wrong. 01:25:02 ? 01:25:51 If there's something wrong with the input, you typed it wrong. 01:26:04 The problem may be fixed by typing it correctly. 01:26:30 no 01:26:41 converting logfuck to brainfuck 01:28:02 -!- sebbu2 has quit ("@+"). 01:31:35 I like my number generation algorithm :) 02:15:15 -!- ihope has quit (Read error: 110 (Connection timed out)). 03:31:07 -!- anonfunc has quit (Read error: 104 (Connection reset by peer)). 03:32:41 -!- anonfunc has joined. 03:56:28 -!- oerjan has quit ("Destiny"). 03:57:07 hmph 03:57:17 you lispers should tell me a better way to do this: 03:57:26 (defun inp (what where &key (test #'equal)) 03:57:26 "is what in where according to test?" 03:57:26 (reduce (lambda (x y) (or x y)) (mapcar (lambda (x) (funcall test x what)) where))) 04:47:38 -!- pikhq has joined. 05:15:48 -!- Sgeo has quit (Remote closed the connection). 05:17:33 what's the purpose of funcall? 05:17:52 why can't you just put the function variable at the front of the list and expect the normal evaluation? 05:49:22 CakeProphet: Because common lisp is fucking stupid 05:50:37 each symbol has a different slot for its function and its variable 05:50:49 in that case, the variable slot has a function in it 06:05:34 the variable is a function though 06:05:58 The regular syntax only works if the function slot has the function 06:06:33 that's pretty stupid. 06:07:38 indeed 06:18:02 scheme isn't like that iirc 06:47:34 -!- pikhq has quit ("leaving"). 07:58:42 -!- sebbu has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 10:01:54 -!- wooby has joined. 10:01:59 -!- wooby has quit (Remote closed the connection). 11:39:47 -!- oerjan has joined. 12:15:19 -!- anonfunc has quit. 12:35:35 -!- oerjan has quit ("Desire"). 13:14:58 -!- NK` has quit (Remote closed the connection). 13:15:01 -!- NK` has joined. 13:44:07 -!- jix__ has joined. 13:45:24 -!- jix__ has changed nick to jix. 14:05:15 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 14:09:43 -!- jix__ has joined. 16:03:09 -!- helios24 has quit (Read error: 113 (No route to host)). 16:28:02 -!- Sgeo has joined. 16:37:53 -!- pikhq has joined. 17:04:47 -!- ihope has joined. 17:51:02 -!- CakeProphet has quit ("haaaaaaaaaa"). 19:10:08 -!- lament has quit (Remote closed the connection). 19:10:17 -!- lament has joined. 19:16:11 -!- lament_ has joined. 19:16:39 -!- lament has quit (Remote closed the connection). 19:26:29 -!- lament has joined. 19:27:01 -!- lament_ has quit (Remote closed the connection). 19:31:50 -!- lament has quit (Remote closed the connection). 19:31:52 -!- lament has joined. 19:35:49 -!- jix__ has changed nick to jix. 19:38:13 -!- lament has quit (Remote closed the connection). 19:38:30 -!- lament has joined. 19:44:45 -!- lament_ has joined. 19:45:39 -!- lament has quit (Remote closed the connection). 19:49:57 -!- lament_ has quit (Remote closed the connection). 19:50:01 -!- lament has joined. 20:55:54 -!- lament has quit (Remote closed the connection). 20:55:59 -!- lament has joined. 21:03:09 -!- lament has quit (Remote closed the connection). 21:03:14 -!- lament has joined. 21:09:42 -!- lament_ has joined. 21:11:23 -!- lament has quit (Read error: 104 (Connection reset by peer)). 21:31:14 -!- oklopol has quit. 21:58:21 -!- oklopol has joined. 22:30:05 * SimonRC goes. 22:30:58 * bsmntbombdood arrives 22:54:30 -!- oklofok has joined. 22:54:30 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 23:01:12 -!- oklofok has quit (Read error: 104 (Connection reset by peer)). 23:01:18 -!- oklopol has joined. 23:32:21 -!- CakeProphet has joined. 23:49:39 -!- sebbu2 has joined. 2007-01-21: 00:08:06 -!- sebbu has quit (Read error: 110 (Connection timed out)). 00:08:15 * pikhq just had a really stupid idea. . . 00:08:33 Make a BF->C compiler which outputs C code which is also valid BF code. 00:09:14 -!- sebbu2 has quit ("Leaving"). 00:09:43 well, that's a more amphibious version of me thinking of making A program that is both C and BF 00:09:50 tho, pretty easy 00:09:56 Indeed it is. 00:09:57 *amphibious xD 00:10:05 no, not a correction 00:10:07 An example method: 00:10:10 ambitious 00:10:14 p++; // - 00:10:17 == + 00:10:22 p--; // + 00:10:23 == - 00:10:29 while { // [ 00:10:31 == [ 00:10:34 } // ] 00:10:36 == ] 00:10:39 etc. 00:10:54 well, yeah 00:10:59 Easy. 00:11:11 includes have even <>'s 00:11:14 that's nice 00:11:17 :) 00:11:25 *even even 00:12:38 of course, that way it's easier than making one program that is sensible c++ code and the same in brainfuck without comments 00:12:49 sensible as in not clearly brainfuck 00:12:58 of course need a lot of redundance 00:19:28 without comments p++-1; p--+1; 00:19:52 [ and ] are hard tho 00:20:19 well, you can have 1[...] and have code normally in it, separated by commas 00:20:38 so, it's pretty trivial actually 00:22:39 commas are an operator tho, which i realized in the bathroom 00:22:41 Got it done. 00:23:01 so you have to do '[',']' or something everywhere 00:23:04 So take advantage of that. . . :p 00:23:05 cool 00:23:16 Want me to upload the script? 00:23:16 whaaaat? 00:23:25 you can 00:23:28 do 00:23:28 please 00:25:01 http://pikhq.nonlogic.org/bf.tcl 00:25:16 Not very complex, but not bad for a quick hack. 00:27:09 me read 00:27:27 Hell. . . I released a different way of doing it. 00:27:31 Define some macros. 00:27:40 +();-();>();, etc. 00:28:03 what lang? 00:28:21 the script? 00:28:21 Um. . . C? 00:28:23 Oh. 00:28:24 Tcl. 00:29:05 < { 00:29:05 puts "p-=1; // +<" 00:29:05 } 00:29:11 p+=-1; 00:29:13 :P 00:29:54 p+=+(-1); // <- and you can have the nice arrow 00:30:19 Hahah. 00:30:38 i don't think this is a C script 00:31:36 it gets fairly complicated with no comments 00:31:43 unless you do constants 00:31:44 It compiled to C. 00:31:48 And is written in Tcl. 00:31:49 then it's trivial again 00:31:52 ah 00:31:55 i don't know tcl 00:32:05 i mean, i can read it of course 00:32:18 but i've never seen it before 00:32:24 i've heard the name tho 00:33:24 while ('['&&*p) { 00:33:33 ']';} 00:33:40 :P 00:34:34 (p++)>--0; 00:34:38 (p--)>++0; 00:35:01 convert those, much nicer 00:35:02 :) 00:35:37 (p--)<++0; of course 00:36:04 Me like. 00:36:38 putchar((*p)*1.0); 00:36:59 *p=getchar(),*p*=!feof(stdin); 00:37:08 Except for one thing. . . 00:37:09 no comments yay 00:37:13 what is that? 00:37:14 (p++)>--0; 00:37:18 < 00:37:23 (p--)<++0; of course 00:37:24 That adds two, moves right, then subtract two. 00:37:25 oh 00:37:34 fuck 00:37:35 true 00:37:38 sorry 00:37:54 --(p++)>0; 00:38:01 ++(p--)<0; 00:38:08 now it should work 00:38:10 That's equivalent to "" from a C perspective, I believe. 00:38:24 ? 00:38:36 ++(--p)==p 00:38:47 I'm pretty certain, that is. 00:39:02 what do you mean? 00:39:14 (p++)|(--0)>0; 00:39:17 That's my solution. 00:39:21 you might need +(+(p--)<0); 00:39:29 --0 won't work 00:39:32 -(-0) 00:39:33 What I'm saying is that that performs the ++ operator, then the -- operator. 00:39:43 no 00:39:45 Mmkay. 00:39:47 oh 00:40:05 well, yes, but i meant it with the parenthesis, forgot to actually put them 00:40:13 It's like (p-=1)+=1; 00:40:15 or just + + p-- == 0; 00:40:32 yeah, a million possibilities 00:40:41 you can put many in, to be selected a t random 00:40:42 *at 00:41:25 That'd be a bit of a trickier thing, and I'm lazy. 00:41:36 i like *p=getchar(),*p*=!feof(stdin); most 00:41:42 :) 00:41:56 because the , is actually used 00:42:47 *p+=1 uses the bf-operator more tho 00:44:05 i'll learn lisp now, bye -> 00:45:08 Your . interpretation doesn't work. . . 00:45:09 Hmm. 00:46:36 I added int a;float b; 00:46:40 And 00:46:51 a=putchar(*p),b=1.0; 00:47:23 And now it's complaining about the unary minus thing. 00:50:17 basm.0.b.c:4458: error: wrong type argument to unary minus 00:50:37 where 00:51:03 putchar(int((*p)*1.0)); just do 00:51:20 swap c++ and english 00:51:58 where does it complain about an unary minus? 00:53:12 a* 00:53:17 *a unary 00:53:27 +(+(p--)<0); 00:55:26 complains about that? 00:55:51 i can't see a unary minus 00:56:22 -(-(p++)>0); as well. 00:57:29 well, try converting the bool to an int 00:58:06 In C, there is no such thing as a "bool". . . "0" is an int. 00:58:15 ah 00:58:16 It doesn't complain about -0-0; 00:58:22 It's complaining about the pointer./ 00:58:23 sorry 00:58:31 char* doesn't support unary minus of course 00:58:40 sorry about the 00:58:41 *that 00:58:47 -(-int(p++)>0); 00:58:52 for example 00:59:46 negative pointers are like lol 01:00:17 i don't like it when non-rational things are not supported 01:00:38 no matter how much it helps newbies :\ 01:00:45 Got a working version. 01:00:51 me too 01:00:57 -(-int(p++)>0); 01:01:07 what did you do? 01:01:20 -(-(int(p++)<0); 01:01:23 Err. 01:01:26 -(-(int)(p++)<0); 01:01:46 c doesn't have int(...)$? 01:01:49 -$ 01:02:06 oklopol, yeah... all the weird stuff should be allowed for the sake of being there to tinker with. 01:02:32 It's not a function. 01:02:36 (int)foo 01:02:44 is the way to cast "foo" to an integer. 01:03:00 C++ would accept int(foo), too. 01:03:13 int(...) is a C++-ism I believe. 01:03:17 Probably. 01:03:39 yeah, i've read that somewhere actually, didn't remember :\ 01:03:45 (int) foo is even referred to as c-like type declaration in C++-lingo 01:03:47 http://pikhq.nonlogic.org/bf.tcl 01:03:59 Polyglot BF->C compiler. 01:04:05 Isn't that a "c-style cast"? 01:04:09 Now with thanks to oklopol. 01:04:18 sure 01:04:29 puts "putchar(*p*(1.0));" 01:04:36 convert to int maybe? 01:04:41 or? 01:04:49 it might do that with putchar actually :) 01:05:15 puts "putchar(*p*(1.0));" 01:05:17 That works. 01:05:32 It probably casts to char automagically. 01:05:33 yeah, you said something about it not working, but maybe you didn't 01:05:39 I thought it didn't work. 01:05:56 yeah, would be weird id they'd've added a float version to get it not working for floats 01:05:56 But there were a lot of errors. . . And I apparently did something stupid in saying that. 01:06:14 good you said it, i don't like it when i imagine things 01:06:23 happens often :\ 01:08:15 "(int)foo" is called "the cast notation" in the C++ standard (5.4), while "int(foo)" is simply "explicit type conversion (functional notation)" (5.2.3). 01:08:36 N +'s of brainfuck -> *p+={(N-1)*"+ "}1; 01:08:53 where {(N-1)*"+ "} of course means "+ " N-1 times 01:09:19 'cept that instead of "one" it'd be "N". 01:09:32 ...? 01:09:55 yeah 01:10:36 same with minus of course 01:10:36 Why putchar(*p*(1.0)); and not the much simpler (and lacking the silly float conversion) putchar((1.0, *p)); ? 01:10:41 Right. 01:10:51 Oh, the comma. 01:11:08 fizzie, it doesn't really matter, one can easily come up with tons of those :\ 01:11:10 I only now realized what you were trying to do, anyway. 01:11:20 and that 01:13:31 N >'s -> puts "-(int)(p+=N){>0 N times};" 01:13:43 but, of course you can't do it in the puts 01:13:56 I can do something different. . . 01:14:02 k 01:14:13 what is that? 01:14:21 set string "-(int)(p+=$n)" 01:14:57 for {} {$n != 0} {incr n -1} {append string ">0"} 01:15:03 puts "$string;" 01:15:03 yeah 01:15:48 so... language advocacy is really starting to annoy me. 01:15:59 and it's practically everywhere... 01:16:04 when talking about any language. 01:16:24 I like Tcl. . . It does what I need it to do, and I know it. 01:16:36 And I've grown fond of it. . . 01:16:40 What more reason do I need? 01:17:09 ... 01:17:26 at least you didn't turn into a living advertisement. 01:17:46 That's all the language advocacy I do. 01:17:48 c++ is the BEST by the way, i'll be off reading lisp now -> 01:17:58 (BEST) 01:18:40 btw 01:18:52 bsmntbombdood 01:19:13 C++ is a language. 01:19:20 -!- fizzie has quit (zelazny.freenode.net irc.freenode.net). 01:19:25 It happens to be pretty good. 01:19:25 There we go. 01:19:26 the function you had, i figured how you do that in the shower that morning 01:19:53 pikhq, i wasn't serious... just to be sure :) 01:20:14 okay, it didn't need clarification now that i see how i presented it :) 01:21:05 -!- fizzie has joined. 01:21:08 bsmntbombdood, just that if you like to have your own code there, i can tell you the algo, unless you either know it or don't care or whatever 01:21:22 now really -> 01:21:25 Re TCL, why not string repeat ">0" $n instead of the for loop? :p 01:21:54 fizzie: I don't have all of the string functions commited to memory. 01:35:29 hmmm... maybe a Category:Homoiconic should be added to the wiki? 01:43:25 oklopol: what? 01:44:58 the function you used to make the fractions 01:45:10 What about it? 01:45:30 well, just what i said :\ 01:45:32 nothing more 01:45:46 just that it's trivial to do that 01:45:50 but you prolly know that 01:46:24 and just don't feel sad to use code written by someone you don't know in a small project like that 01:47:22 i don't see why you would, tho 01:48:11 That code is very slow 01:48:42 O(n) it looks like 01:48:59 at least O(n) that is 01:49:10 O(n) for whole numbers 01:49:20 well, you take the fraction straight from the double, then just gcm it 01:49:56 What do you mean, take the fraction? 01:50:22 the double is in a format ... * 2**.. 01:50:26 *-a 01:50:54 so, you take the mantissa and the exponent straight from the number 01:51:00 assuming those are the terms 01:51:32 that is the gist of the problem 01:51:42 so i'm pretty sure it's the most efficient one 01:51:51 most efficient algorithm i mean 01:52:56 you can easily get the mantissa and exponent from a double in haskell, so why not in python 01:53:28 (i'm not sure if that makes sence, i just think of both as non- implementation spesific...) 01:53:55 (like, not having limits on how floating point numbers are stored) 01:54:28 (ignore all " \(.*\)") 02:21:59 -!- jix__ has joined. 02:26:39 -!- jix__ has quit (Client Quit). 02:33:53 -!- jix has quit (Read error: 110 (Connection timed out)). 02:49:08 -!- ihope has quit (Read error: 110 (Connection timed out)). 03:09:00 zZzZ 03:17:34 ozozozozo 03:37:50 -!- pikhq has quit ("leaving"). 04:10:12 -!- Sgeo has quit ("Leaving"). 06:02:32 !glass 06:02:37 !help 06:02:46 EGOBOTS DOWN 06:02:49 PANIC 06:04:07 zoooooooooooooooommmmmmmmmmmmg 06:06:56 -!- Lea has joined. 06:06:59 .... 06:07:21 lol hi. :) 06:07:28 LOLSUP 06:07:33 How's life? 06:07:35 peachy? 06:07:39 Oh wonderful. 06:07:41 You? 06:07:41 splendid. 06:07:44 Grand. 06:07:45 awesome 06:07:46 Excellent. 06:07:49 yup 06:07:50 WOnderful. 06:07:52 ..Oh 06:07:55 -!- CakeProphet has changed nick to GrandmotherChaos. 06:07:59 So how do I make t-... 06:08:03 ... 06:08:05 Grandmotherchaos, mm. 06:08:09 hrm 06:08:12 Lea, whoooo 06:08:24 -!- GrandmotherChaos has changed nick to SevenInchBread. 06:08:35 now what were you saying? 06:08:35 -!- Lea has changed nick to SixInchBread. 06:08:41 :o scandalous 06:08:44 Wow. SixInchBread is used by someone. 06:08:49 I don't like the emoticon they give to :o 06:08:53 ..no 06:08:55 -!- SixInchBread has changed nick to Lea. 06:09:00 yeah... someone made it after I made this one. 06:09:11 posers no doubt 06:09:18 Indeed. 06:09:58 -!- Lea has changed nick to LeaLeaLea. 06:10:09 oooh 06:10:13 it's wavy 06:10:21 Two Lea's will simply not cut it. 06:10:27 nope. 06:10:34 we're totally spamming this channel. 06:10:43 ..We're speaking. 06:10:48 yup 06:10:50 WHAT DO YOU DO ON IRC BUT CHAT? 06:10:58 IT'S NOT ALLOWED 06:11:07 FUCK YOU 06:11:34 WHY ISN'T EGOBOT WORKING 06:11:43 It hates you. 06:11:47 someone turn it on! 06:11:51 Refuse him. 06:11:52 * SevenInchBread downloads the source 06:15:31 .... 06:17:30 SOMEONE MAKE EGOBOT WORK 06:17:33 NOPE. 06:17:35 I can't figure out how to run it. 06:17:47 You = suck. 06:17:47 LeaLeaLea fizzie SevenInchBread oklopol lament_ NK` MM2 GregorR sekhmet cmeme bsmnt_bot bsmntbombdood puzzlet clog sp3tt mtve meatmanek SimonRC tokigun pgimeno 06:17:50 ... 06:17:51 I ping you all 06:17:53 like an ass 06:17:57 Don't you ever ping me again. 06:18:01 Or I'll 'ping' you. 06:18:08 I'LL PING YOU EVERY FUCKING DAY 06:18:13 .... 06:18:22 anywho. 06:18:27 ... Defeated. 06:18:27 how do you run egobot? 06:18:32 It's down. 06:18:41 ...yes 06:18:47 I ATE IT 06:19:00 ..poop 06:19:05 A noble cause. 06:19:18 * LeaLeaLea tests. 06:19:20 ... :) 06:19:27 * SevenInchBread whooooo 06:19:46 SEVENINCHBREAD? 06:19:50 SEVENINCHBREAD??? 06:19:53 Yah? 06:19:56 * LeaLeaLea refuses to tell. 06:20:01 ... 06:20:19 LeaLeaLea, I wonder why you would be here... 06:20:25 hrm... 06:20:29 ... So do I.. 06:20:58 wheee 06:22:08 :) 06:23:01 Do de doo.. 06:24:55 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 06:25:46 -!- LeaLeaLea has joined. 06:25:50 I have returned. 06:26:13 hi. :) 06:26:17 Hi. :) 06:30:29 ?????>>>>>>> 06:30:31 ?>">'. 06:30:33 rl 06:32:53 ... 06:35:19 HEY GREGOR 06:35:27 GregorR, GREGOR 06:35:30 WAKE UP 06:35:52 -!- SevenInchBread has changed nick to CakeProphet. 06:36:09 GregorR, Get egobot back up 06:37:29 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 06:38:07 -!- LeaLeaLea has joined. 06:38:20 CakeProphet. 06:38:25 yah? 06:38:30 I don't like you. 06:38:41 ..Have you made the bot work yet.. 06:38:52 HAVE YOU? 06:39:05 NO 06:39:07 :) 06:39:09 I'm not familiar with C 06:39:15 I GUESS YOU SUCK THEN. 06:39:15 you have to compile it and shit 06:39:19 NOPE 06:39:21 I ROCK 06:39:23 ... :):):) 06:39:44 hmmm? 06:39:45 Gregor!!!!!!!!!!! 06:39:53 bsmntbombdood, make EgoBot work 06:39:54 He is intentionally ignoring you. 06:39:57 Because he does not like cake. 06:40:00 Nor prophets. 06:40:07 damn... 06:40:23 you can get the source 06:40:26 and like... compile it 06:40:27 and stuff 06:40:33 and make it work 06:40:36 You lie. 06:40:43 I don't 06:40:45 You do. 06:40:52 erm nope 06:40:53 DO. 06:40:59 ..Premeditated ftw. 06:41:13 hrm 06:41:20 !help 06:41:24 NEVER SPEAK OF THAT 06:41:42 bsmntbombdood, make egobot work 06:41:49 ... 06:41:53 ... 06:42:00 ..... 06:42:18 I want to play with glass 06:42:54 I want you to play with glass. 06:43:00 see? 06:43:02 Mhm. 06:43:10 and maybe brainfuck 06:43:13 but mostly glass 06:43:21 aha! 06:43:24 ...What 06:43:28 I'll make my own bot... WAY BETTER THAN EGOBOT 06:43:35 ..Yeah. Five years later.. 06:43:38 Still no bot. 06:43:40 ...shut up 06:43:43 BUT LOTS OF TALKING ABOUT IT 06:43:46 I've got one like... 06:43:49 halfwaydone man 06:43:57 :) 06:44:00 code glass for bsmnt_bot 06:44:11 * CakeProphet has lots of unfinished projects 06:44:15 ..Who are you 06:44:20 bsmntbombdood, it has a glass interpreter? 06:44:26 no 06:44:31 you need to code one 06:44:34 .... 06:44:36 fuck that 06:44:49 just use egobots 06:44:53 in a subprocess 06:45:00 or something 06:45:06 go ahead 06:45:09 ... 06:45:15 GOD DAMNIT 06:45:21 You are allowed to make net connections with bsmnt_bot 06:45:28 download the interpreter 06:45:39 ...how do you run C on Windows? 06:46:37 I don't think I even have a compiler for it. 06:48:09 bsmntbombdood, aaah 06:49:07 actually.. 06:49:11 cygwin might have something for it. 06:49:15 * CakeProphet checks 07:00:53 nope 07:03:00 do it with bsmnt_bot 07:05:09 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 07:16:26 whats wrong with him 07:17:55 hmmm? 07:18:04 puzzlet, who? 07:18:47 -!- bsmntbombdood has changed nick to lolipop. 07:20:14 -!- LeaLeaLea has joined. 07:20:20 forget it 07:20:26 I have returned. 07:20:33 oh. 07:20:38 -!- lolipop has changed nick to bsmntbombdood. 07:21:49 * CakeProphet frowns. 07:21:59 * CakeProphet consternates 07:22:00 ..Quiet. 07:22:09 we all hate you 07:22:10 I have no time for your shenanagens. 07:22:12 NO. 07:22:18 yep 07:22:24 Unfortunate. 07:22:39 ~help 07:22:47 :o scandalous 07:22:53 SHUT UP. 07:22:56 ~exec print "Lol" 07:23:02 ....scandalous 07:23:15 bsmntbombdood, your bot's dead. 07:23:32 what? 07:23:34 no it's not 07:23:39 lol yah 07:23:44 ~exec sys.stdout("lol") 07:23:45 lol 07:23:47 ... 07:23:52 oh 07:23:54 yeah 07:23:59 you do the wierd stdout wrapper 07:24:14 ~exec sys.stdout(str(globals())) 07:24:15 {'thread_info': , 'exec_global_tracer': , 'pprint': , 're': , 'SysWrapper': , 'exec_local_tracer': , '__doc__': N 07:24:15 one, 'math': , 'IRCbot': , 'args': {'IDENT': 'bsmnt', 'REALNAME': 'bsmntbombdood bot', 'CHAN': '#esoteric', 'NICK': 'bsmnt_bot', 'HOST': '85.188.1.26', 'PORT': 6667, 'VERBOSE': True}, '__builtins__': , '__file__': '/bot/ircbot.py', 'inspect': < 07:24:15 module 'inspect' from '/usr/lib/python2.4/inspect.pyc'>, 'IRCFileWrapper': , 'sys': , '__name__': '__main__', 'copy': , 'types': , 'socket': , 'threa 07:24:20 d': , 'os': , 'traceback': , 'bot': <__main__.IRCbot instance at 0xb7cbf14c>, 'threading': , 'time': , 'pickle': 'pickle' from '/usr/lib/python2.4/pickle.pyc'>, 'marshal': } 07:24:51 ...smart 07:25:16 ~exec sys.stdout(repr(self)) 07:25:16 <__main__.IRCbot instance at 0xb7cbf14c> 07:25:50 What's the quick way to match all the beginner stuff with register_raw? 07:26:49 what? 07:26:56 STOP BEING CONFUSED DAMNIT 07:27:13 the beginning 07:27:15 of an IRC line 07:27:21 is there a quick way to match it? 07:27:24 in a regex 07:27:29 of register_raw() thing 07:27:36 "^"? 07:27:46 ... 07:27:49 the address stuff 07:27:57 well.. 07:28:06 I could just do .*? 07:28:16 \S* would be better 07:28:22 but what do you mean? 07:28:39 If you want to get stuff like the nick, match it against self.message_re 07:29:13 what are the arguments of the function? 07:29:27 in the second argumet of register_raw 07:29:44 message, regex match object 07:32:07 -!- Sartak has joined. 07:32:17 -!- Sartak has left (?). 07:32:45 ~exec import random;self.register_raw("\S*: *~roll (?\d*) *$", lambda x,y: sys.stdout(random.randint(1,y.groupdict.get("d", 6)))) 07:32:54 ~roll 6 07:33:02 CONTROVERSY 07:33:43 ~exec import random;self.register_raw("\S*: *~roll (?P\d*) *$", lambda x,y: sys.stdout(random.randint(1,y.groupdict.get("d", 6)))) 07:33:48 ~roll 10 07:33:54 CONTROVERSY 07:34:20 nope 07:34:21 bsmntbombdood, what was the error message. 07:34:30 #bsmnt_bot_errors 07:34:34 ...damnit 07:34:37 your regex is wrong 07:34:46 ~exec import random;self.register_raw("\S*: *~roll (?P\d*) *$", lambda x,y: sys.stdout(random.randint(1,y.groupdict.get("d", 6)))) 07:34:52 oh.. 07:34:54 ...still wrong 07:35:24 ~exec import random;self.register_raw("^\S*: *~roll (?P\d*) *$", lambda x,y: sys.stdout(random.randint(1,y.groupdict.get("d", 6)))) 07:35:31 ~roll 5 07:35:35 ... 07:35:40 what's wrong? 07:35:43 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 07:36:17 this is the format of a message: ":CakeProphet!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :what's wrong? 07:36:24 oooh... 07:36:28 yeah 07:36:31 forgot the leading semicolon 07:36:57 no 07:37:05 \S matches non-whitespace chars 07:37:56 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout(random.randint(1,y.groupdict.get("d", 6)))) 07:38:01 ~roll 10 07:38:01 -!- bsmnt_bot has quit (Remote closed the connection). 07:38:05 -!- bsmnt_bot has joined. 07:38:21 I broken it 07:40:24 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout(random.randint(1,int(y.groups("d"))))) 07:40:34 ~roll 10 07:40:35 -!- bsmnt_bot has quit (Remote closed the connection). 07:40:37 -!- bsmnt_bot has joined. 07:40:50 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout(str(random.randint(1,int(y.groups("d")))))) 07:40:54 ~roll 10 07:40:54 -!- bsmnt_bot has quit (Remote closed the connection). 07:40:56 -!- bsmnt_bot has joined. 07:41:22 y.group 07:41:32 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout(str(random.randint(1,int(y.group("d")))))) 07:41:37 ~roll 10 07:41:38 -!- bsmnt_bot has quit (Remote closed the connection). 07:41:40 -!- bsmnt_bot has joined. 07:41:41 nope lol 07:42:18 global name random not defined 07:42:25 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout(str(__import__("random").randint(1,int(y.groups("d")))))) 07:42:28 ~roll 10 07:44:32 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout.write(str(__import__("random").randint(1,int(y.groups("d")))))) 07:44:36 ~roll 10 07:44:48 weird 07:46:04 ~exec import random;self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout.write(str(__import__("random").randint(1,int(y.group("d")))))) 07:46:06 ~roll 10 07:46:06 1 07:46:08 ~roll 10 07:46:09 9 07:46:10 ~roll 10 07:46:10 1 07:46:12 ~roll 10 07:46:12 2 07:46:13 ~roll 10 07:46:13 2 07:46:16 how novel 07:46:44 ... 07:47:44 ~exec globals()["random"] = __import__("random");self.register_raw("^\S* PRIVMSG #esoteric : *~roll (?P\d*) *$", lambda x,y: sys.stdout.write(str(random.randint(1,int(y.group("d")))))) 07:47:49 ~roll 10 07:47:49 5 07:47:50 6 07:47:54 :o 07:48:40 get rid of the old one. 07:49:20 ~exec del self.raw_regex_queue[-2] 07:49:34 ~roll 56 07:49:35 9 07:49:38 ~roll 4345694569049560945609456 07:49:39 937767620971671047976646 07:49:40 ~roll 4345694569049560945609456 07:49:41 2838600485402488068531576 07:49:42 ~roll 4345694569049560945609456 07:49:43 2269477471378303337011121 07:49:44 ~roll 4345694569049560945609456 07:49:45 2115576699285482581859932 07:50:39 fun 07:56:33 ~exec self.__class__.imlazy = lambda x,f: self.register_raw("^\S* PRIVMSG #esoteric : *%s (?:(?: (.*?) ))* *", lambda ge,ha: sys.stdout(str(f(*ha.groups())))) 07:57:00 oh... 07:57:13 ~exec self.__class__.imlazy = lambda x,f: self.register_raw("^\S* PRIVMSG #esoteric : *%s (?:(?: (.*?) ))* *" % x, lambda ge,ha: sys.stdout(str(f(*ha.groups())))) 07:57:43 hmmm... 07:58:33 ~exec self.__class__.imlazy = lambda x,f: self.register_raw("^\S* PRIVMSG #esoteric : *%s (?P.*)$" % x, lambda ge,ha: sys.stdout(str(f(*ha.group("inp"))))) 07:58:53 ~exec self.imlazy("cat", lambda foo: foo) 07:59:23 what are you doing? 07:59:25 ~exec self.__class__.imlazy = lambda self, x,f: self.register_raw("^\S* PRIVMSG #esoteric : *%s (?P.*)$" % x, lambda ge,ha: sys.stdout(str(f(*ha.group("inp"))))) 07:59:32 ~exec self.imlazy("cat", lambda foo: foo) 07:59:42 cat h 07:59:42 h 07:59:46 being lazy 07:59:50 cat whoooo 07:59:54 ERROR 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:00:51 ....how could it possibly get a typeerror? 08:01:12 ah. 08:01:27 ~exec self.__class__.imlazy = lambda self, x,f: self.register_raw("^\S* PRIVMSG #esoteric : *%s (?P.*)$" % x, lambda ge,ha: sys.stdout(str(f(ha.group("inp"))))) 08:01:49 ~exec del self.raw_regex_queue[-1] 08:01:59 ~exec self.imlazy("cat", lambda foo: foo) 08:02:01 cat whooo 08:02:02 whooo 08:02:05 cat hahahahahaha 08:02:06 hahahahahaha 08:02:08 mehehehehehe 08:02:15 ~exec del self.raw_regex_queue[-1] 08:02:20 ~exec self.imlazy("~cat", lambda foo: foo) 08:02:23 ~cat wha 08:02:24 wha 08:03:03 ~exec self.imlazy("~dup", lambda x: x*2) 08:03:08 ~dup hello 08:03:08 hellohello 08:03:13 :( 08:03:17 ~exec del self.raw_regex_queue[-1] 08:03:32 ~exec self.imlazy("~dup", lambda x: "%s %s" % (x,x)) 08:03:39 ~dup ha 08:03:40 ha ha 08:03:50 ~dup ~dup ~dup ha 08:03:50 ~dup ~dup ha ~dup ~dup ha 08:03:57 :( 08:04:20 ~exec self.imlazy("~dog", lambda x: x[::-1]) 08:04:23 ~dog wha 08:04:23 ahw 08:09:43 ~exec self.imlazy("~rot", lambda x:"".join( [(chr((ord(c) if ord(c) < ord("n") else ord(c)-26)+13) if c != " " else " ") for c in x])) 08:09:52 ~rot whooo 08:10:31 python 2.4 08:10:38 ....crap 08:11:01 -!- helios24 has joined. 08:13:50 ~exec self.imlazy("~A", lambda x: " ".join(["".join(["A" for c in w]) for w in x.split()]) + "!") 08:13:54 ~A hmmmm 08:13:54 AAAAA! 08:13:57 ~A hmmmm hmmmm 08:13:58 AAAAA AAAAA! 08:14:07 ~A to be or not to be, that is the question 08:14:07 AA AA AA AAA AA AAA AAAA AA AAA AAAAAAAA! 08:15:02 I had to do a cheap hack to bypass the lack of conditionals. 08:15:18 I couldn't conditionally exclude whitespace from being converted... so I used split and applied a for loop to each word. 08:15:46 It works 08:18:38 hrm... 08:18:49 time to implement dupdog 08:18:50 :D 08:27:07 ~exec def mfit(src):; cmd = src[0]; src = src[1:]; if cmd == "~":; return src*2; elif cmd == "?":; if len(src)%2 == 0: return src.replace("?","\n").replace("~", "\t").replace("!","?").replace("\n","~").replace("\t","!"); else:; return src; else; print len(src); return "" 08:27:39 ...damn 08:49:02 -!- sebbu has joined. 09:24:27 -!- wooby has joined. 10:00:30 -!- oerjan has joined. 10:13:33 amphibious programming FTW 10:36:41 ~A Good grief. 10:36:41 AAAA AAAAAA! 11:11:55 ~A 11:12:01 ~A 11:12:05 ~A 11:12:05 AAAA! 11:12:18 ~A 11:12:18 AAAAA AAAA AAA AA A! 11:49:38 -!- wooby has quit. 12:40:22 -!- Sgeo has joined. 12:50:56 -!- oerjan has quit ("Dream"). 13:54:18 -!- helios24 has quit ("Leaving"). 14:46:12 -!- ihope has joined. 15:10:22 * SimonRC lols at the original iPod announcement at Slashdot. 15:10:22 "No wireless. Less space than a nomad. Lame." 15:10:23 X-P 15:10:47 oklopol: have you been reading Uncyclopedia again? 15:15:15 oh me? 15:15:30 i've never read uncyclopedia :\ 15:15:33 why you ask? 15:27:37 I made the AAAA! thing 15:27:52 (AAAAAAAAA! is something from uncyclopedia) 15:28:37 http://uncyclopedia.org/wiki/AAAAAAAA%21 15:34:44 http://esoteric.voxelperfect.net/wiki/AAAAAAAAAAAAAA%21%21%21%21 15:34:48 do that too 15:43:28 hmmm 15:43:40 what's the servername and hostname parameters of a USER IRC message for? 15:43:56 it seems odd that the server would request its own name in a USER message 15:46:01 you don't send them 15:46:09 it's for their internal messaging 15:46:26 just the same format between users and servers && servers and servers 15:46:34 if you supply it, it's ignored 15:46:48 read the rfc like us the rest of us 15:46:48 :) 15:47:04 you put a * usually 15:47:10 CakeProphet: ok, my mistake 15:48:13 ....I did read the rfc... it didn't explain any of that 15:49:35 really :O 15:49:40 it's a big rfc 15:49:48 it explains it all 15:51:30 hmm, i'm not sure if the client rfc explains it, just saying they are ignored should suffice 15:51:42 you can read the server rfc if you care about details :) 15:52:55 Note that hostname and servername are normally ignored by the IRC 15:52:56 server when the USER command comes from a directly connected client 15:52:56 (for security reasons), but they are used in server to server 15:52:56 communication. 15:52:58 client rfc 15:53:38 for security reasons... a very thorough explanation :) 15:58:27 I'm reading the server rfc... 15:58:31 didn't know there was more than one 16:00:45 god i chose the wrong lisp book :) 16:01:15 i've read 111 pages and i know EVAL, DEFUN and lists 16:01:40 i couldn't gotten all this information in 10 minutes from anyone who knows lisp 16:01:59 plus the book is from 1989... prolly changed quite a bit :) 16:02:10 but, gotta finish what i started 16:29:24 There are two RFCs, eh? 16:29:32 Is RFC 1459 the client one? 16:34:58 i think so 16:49:31 No. 16:49:37 RFC 1459 is the old RFC. 16:49:49 The newer ones (there are 4 or 5 of them) start with a 2. 16:50:01 See http://www.irchelp.org/irchelp/rfc/ 16:50:08 :o 16:50:17 why am i always so goddamn obsolete 17:10:36 -!- Sgeo has quit (Remote closed the connection). 17:12:44 * SimonRC wonders why seperate layers are a good thing in software but a bad thing in your mind. 17:16:13 they're bad in your mind? 17:16:28 i thought mind was the ultimate layer management system 17:18:19 Nonono, I was thinking about the Superego/Ego/Id thing, which IIRC Freud blames for many mental problems. 17:18:28 OTOH, Freud wrote a lot of crap at times. 17:19:40 ah, you didn't mean different layers of abstraction, but that 17:20:21 isn't that more like... multithreading? 17:20:29 haven't read about that actualyl 17:20:32 ylylyly 17:21:50 -!- jix__ has joined. 18:07:54 * SimonRC goes to dinner 18:31:26 -!- oerjan has joined. 18:41:33 -!- helios24 has joined. 18:56:48 -!- helios24 has quit ("Leaving"). 18:57:31 -!- helios24 has joined. 18:57:42 -!- helios24 has quit (Read error: 104 (Connection reset by peer)). 18:58:22 -!- helios24 has joined. 19:03:32 -!- wooby has joined. 19:04:35 -!- helios24 has quit ("Leaving"). 19:04:51 -!- helios24 has joined. 19:35:20 * CakeProphet watches as he bzips his entire computer. 19:35:45 I'm finally getting a linux distro. 19:35:47 how exciting. 19:36:46 Entire computer? Including hardware? :) 19:37:00 ....of course 19:37:02 ... 19:37:10 nah... just the essentials and stuff I can't get elsewhere. 19:37:31 which compromises roughly 2.4 gigs of gzip compressed data. 19:37:38 which apparently is too large to... shove down my email... 19:37:44 so... I'm bzipping the gzip of a tar 19:38:34 it's just a backup anywas. 19:38:44 once I get linux I can just access the partition directly. 19:39:38 I'm considering impatiently skipping the backup and booting it. 19:59:37 knoppix? 20:00:22 -!- CakeProphet has quit ("haaaaaaaaaa"). 20:11:49 -!- CakeProphet has joined. 20:14:45 -!- CakeProphet has quit (Client Quit). 20:40:16 -!- pikhq has joined. 20:42:43 SevenInchBread is apparently a dick. 21:46:49 He is? 21:47:08 ~A AAAAAAAAAA 21:47:09 AAAAAAAAAA! 21:47:36 Or is it she? 21:48:17 ~A AAAAAAAAA= 21:48:18 AAAAAAAAAA! 22:03:27 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:10:43 ~A AAAAAAAAA= 22:10:52 ? 23:15:30 -!- CakeProphet has joined. 23:36:57 -!- Sgeo has joined. 23:50:23 -!- sebbu2 has joined. 23:58:35 -!- CakeProphet has quit (Read error: 104 (Connection reset by peer)). 2007-01-22: 00:02:31 >--<+-.> 00:02:37 Err. . . 00:02:42 ><+-.> 00:02:44 It's a fish! 00:03:14 Maybe it can be part of that amphibious language 00:03:17 -!- wooby has quit. 00:03:26 I don't think it's valid Homespring. . . 00:03:30 Valid Brainfuck, though. 00:04:41 Now there is a task - make a program that means the same in Homespring and Brainfuck. 00:05:14 LMAO 00:05:39 Given that one can't even be sure Homespring is Turing complete, that could be tricky. . . 00:06:46 homespring? 00:08:17 Actually I meant that amphibious language oklopol was blathering about ;) 00:09:17 -!- sebbu has quit (Connection timed out). 00:12:30 i thought you might've ment it :) 00:12:45 meant 00:13:00 maybe i'll make an amphibious language 00:13:43 Well, homespring *is* in some way amphibious. . . 00:13:49 in what way? 00:14:06 It involves salmon as the message-passing system. . . 00:15:25 ah 00:15:35 i had a more symbolic meaning for the word :) 00:15:37 Google it. 00:15:48 i'm lookin at a tutorial 00:15:53 *looking 00:16:04 K. 00:16:06 i just didn't see the amphibi..a? 00:16:20 because i had my own idea about it 00:16:32 but then again, maybe you see when i do it 00:16:42 I hope so. Homespring seems to have a serious shortage of frogs. 00:17:03 -!- wooby has joined. 00:17:23 -!- wooby has quit (Client Quit). 00:17:35 Also, it should be noted that the null program (that is, a completely blank program) is special. When this program is run, the interpreter prints the message 'In Homespring, the null program is not a quine.' and exits. 00:17:42 :D 00:17:58 oerjan, mine wouldn't have any water animals really 00:18:24 just the concept of code being run in multiple ...platforms simultaneously 00:19:03 because now that i've come to think of it, amphibious was imo a nice for for describing programs that run the samu way in many languages 00:19:08 *same 00:19:15 even tho it was a typo then 00:19:20 well, mental typo 00:20:49 that homespring... what the fuck 8| 00:22:02 Eye-popping? 00:23:11 -!- CakeProphet has joined. 00:25:53 i didn't understand anything really 00:26:26 It's crazy. 00:26:29 the tree-parsing was not explained at all 00:26:40 and it'd take time for me to decrypt it 00:26:45 from the examples 00:26:57 but a massive set of gizmos :D 00:27:03 You can take a look at Good Math/Bad Math 00:27:13 It's described in there? 00:27:23 That blog had an article on it recently 00:27:42 Kewl. 00:27:50 Good Math/Bad Math? 00:28:28 http://scienceblogs.com/goodmath/goodmath/programming/pathological_programming/ 00:30:36 wow... Google might be making an OS? 00:30:41 that would be sweet... 00:33:06 -!- sebbu2 has quit (""Que les puces d'un millier de chiens galeux infestent le cul de celui qui gachera une seule seconde de ta vie, et que les br). 00:45:20 -!- CakeProphet has quit ("haaaaaaaaaa"). 00:53:57 -!- pikhq has quit (Read error: 110 (Connection timed out)). 00:55:27 -!- oerjan has quit ("Nothing clever here"). 00:57:07 -!- pikhq has joined. 00:57:49 -!- CakeProphet has joined. 00:58:38 -!- CakeProphet has quit (Client Quit). 00:59:05 -!- CakeProphet has joined. 01:02:28 -!- CakeProphet has quit (Client Quit). 02:30:53 -!- lament_ has changed nick to lament. 02:35:19 -!- ihope has quit (Read error: 110 (Connection timed out)). 02:36:38 -!- pikhq has quit (Read error: 110 (Connection timed out)). 03:21:31 -!- wooby_ has joined. 03:21:32 -!- wooby_ has quit (Remote closed the connection). 03:22:23 -!- CakeProphet has joined. 03:26:35 -!- CakeProphet has quit (Client Quit). 03:48:29 -!- CakeProphet has joined. 03:53:18 -!- wooby_ has joined. 03:55:31 -!- CakeProphet has quit ("haaaaaaaaaa"). 04:05:39 -!- helios24 has quit (Read error: 113 (No route to host)). 04:07:11 -!- CakeProphet has joined. 04:20:37 foo 04:21:17 * CakeProphet is hacking linux to get his wireless to work . 04:21:23 damn Belkin. 04:21:30 and their Windows-centric adapter drivers 04:23:29 -!- CakeProphet has quit ("haaaaaaaaaa"). 04:46:15 -!- wooby_ has quit. 05:00:39 http://www.codu.org/win1.avi 06:00:23 -!- tokigun has quit ("finally i have quit message! yay!"). 06:20:41 -!- CakeProphet has joined. 06:35:38 -!- tokigun has joined. 06:48:17 hmm.. 06:48:27 kernels are way too big.. 07:00:28 WE NEED A KERNEL 07:00:32 SMALLER THAN A PICOKERNEL 07:00:40 ...but I can't remember the prefix 07:34:33 -!- sebbu has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:29:46 -!- Sgeo has quit (Read error: 110 (Connection timed out)). 08:34:48 -!- wooby_ has joined. 09:11:41 -!- helios24 has joined. 09:14:49 -!- wooby_ has quit. 10:41:14 -!- ihope has joined. 10:45:19 -!- oerjan has joined. 11:51:30 -!- CakeProphet has quit ("haaaaaaaaaa"). 13:05:39 FEMTO 13:06:53 Then atto, zepto and yocto. The last two always make me smile. 13:08:23 yeah 13:08:40 memorized those some years ago 13:08:41 "Our system has a yoctokernel architecture." 13:08:46 :D 13:18:52 Those last ones sound like the names of Marx brothers 13:32:41 -!- oerjan has quit ("Hunting for food"). 13:51:43 -!- helios24 has quit (Read error: 110 (Connection timed out)). 15:44:45 -!- helios24 has joined. 16:04:56 -!- ihope has quit (Connection timed out). 16:22:27 -!- sebbu has quit ("reboot"). 16:33:38 -!- tgwizard has joined. 16:34:54 -!- FabioNET has joined. 16:36:46 -!- jix__ has joined. 16:42:40 -!- sebbu has joined. 16:51:19 -!- jix__ has changed nick to jix. 18:34:38 -!- helios24 has quit (Read error: 113 (No route to host)). 19:40:20 -!- helios24 has joined. 20:01:51 -!- sebbu2 has joined. 20:20:42 -!- sebbu has quit (Read error: 110 (Connection timed out)). 20:31:04 -!- helios24 has quit ("Leaving"). 20:31:09 -!- helios24 has joined. 20:39:43 -!- oerjan has joined. 20:47:08 -!- ihope has joined. 20:56:40 -!- tgwizard has quit (Read error: 110 (Connection timed out)). 21:12:35 -!- CakeProphet has joined. 21:13:57 hrm... 21:14:10 I still can't get my network adapter to run in linux. 21:14:16 even with ndiswrapper 21:14:26 :-( 21:18:11 What is ndiswrapper, exactly? 21:18:21 A Windows driver loader thingy? 21:19:03 it's a interface for working with windows-centric drivers. 21:19:17 my network adapter sucks and was only made to work with Windows. 21:22:15 * CakeProphet is going to try something new. 21:22:19 -!- CakeProphet has quit ("haaaaaaaaaa"). 21:23:00 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:25:10 -!- helios24 has quit ("Leaving"). 21:25:18 -!- helios24 has joined. 21:30:37 -!- helios24 has quit ("Leaving"). 21:30:45 -!- helios24 has joined. 22:00:02 -!- FabioNET has quit ("goooood night tox"). 22:05:51 -!- ihope has changed nick to naIioth. 22:05:59 -!- naIioth has changed nick to ihope. 22:16:11 -!- sebbu2 has changed nick to sebbu. 22:17:36 -!- GreaseMonkey has joined. 22:17:40 ;> #"87*3+,'>,' ,'#,ff+4+,>:#,_ff+4+,87*3+,'#,'0,'<,@";#0< 22:18:01 (quine in befunge-98) 22:18:26 1d? 22:19:03 well, unefunge-98, but can be run in befunge-98 or trefunge-98 22:19:44 coools 22:19:47 you made it? 22:19:52 yep 22:19:55 [00:14:23] * GreaseMonkey has joined #esoteric 22:19:55 [00:14:26] ;> #"87*3+,'>,' ,'#,ff+4+,>:#,_ff+4+,87*3+,'#,'0,'<,@";#0< 22:19:56 i'm working on a befunge98 interpreter 22:19:58 in 3 secs? 22:20:09 nah, i copy-pasted from a file 22:20:11 oh 22:20:14 which i made fyi 22:20:17 that's a dissappoinment 22:21:07 befunge-98 is n-dimensional? 22:31:10 befunge-98 = 2D 22:31:23 but can emulate unefunge, which = 1D 22:31:32 actually 22:31:33 -!- CakeProphet has joined. 22:31:49 :( 22:32:00 befunge runs unefunge as-is, unless someone's being a bastard and they set up a trap 22:32:24 * bsmntbombdood got SICP from the library today 22:33:19 * oerjan wonders if oklopol has a bit too high expectations 22:33:21 like: ;@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"its unefunge not befunge you git";# ](code goes here) 22:46:54 Say, how's SOAP coming along? 22:49:13 * oerjan wonders if SOAP shouldn't be written in Clean... 22:51:10 Wonderful... 22:54:14 hrm 22:54:59 * CakeProphet could use bits of his half-developed MUD codebase for the user-end/event stuff. 22:58:15 * oklopol feels like /meing 22:58:43 * ihope does too 23:00:40 * oklopol goes to bed now -> 23:09:51 -!- GreaseMonkey has quit (Nick collision from services.). 23:10:12 -!- GreaseMonkey has joined. 23:10:14 oops 23:23:22 Do not /nickserv GHOST yourself. 23:25:30 eh 23:25:32 heh 23:28:22 whyzat? 23:28:26 wait 23:28:38 no, i got disconnected 23:29:19 !ctcp #esoteric ACTION is having fun 23:29:38 bugger 23:30:08 You need \001 characters 23:30:15 bsmnt_bot: do what you're told 23:30:39 or maybe not. 23:30:50 ~ctcp #esoteric ACTION FOOF 23:30:51 * bsmnt_bot FOOF 23:34:46 OH 23:34:55 ah, i know why you use ~ instead 23:35:00 egobot 23:35:56 http://greasemonkey.shadowarts.org/befunge98-r002.zip - a kinda incomplete but still very useable befunge-98 interpreter, comes with examples, what's implemented, what's not, etc. 23:36:01 oh, and source 23:39:11 ;> #"87*3+,'>,' ,'#,ff+4+,>:#,_ff+4+,87*3+,'#,'0,'<,@";#0< 23:39:15 my quine :D 23:40:00 i believe that daemons should be coded in a funge 23:40:32 befunge-98 preferably - that's about as expandable as befunge gets 23:41:12 * oerjan recalls a norwegian fantasy book in which daemons were six-dimensional creatures 23:42:02 4D is enough for me 23:42:27 why, have you used hexefunge? 23:43:28 Always use hexefunge for your magical programming! 23:44:33 man, that'd be frikkin intense 23:44:55 (btw the answer is no) 23:45:20 i think trefunge is intense enough, and i haven't even tried it 23:47:26 >; ;v 23:47:26 v"## # # "0< 23:47:26 >:#,_; ;^ 23:48:02 that puts REALLY weird effects on your screen 23:52:40 afk food 2007-01-23: 00:17:38 -!- LeaLeaLea has joined. 00:17:57 I COME SEEKING CAKEPROPHET. 00:18:37 WHO 00:18:39 A 00:18:40 LIEK 00:18:42 HI 00:18:50 * CakeProphet tells some prophesy 00:18:55 about... hrm.. 00:19:02 cake? 00:19:02 IN FOUR DAYS THERE WILL BE SOURDOUGH BREAD. 00:19:08 l 00:19:14 ahem. bread is not cake. 00:19:15 hmmm... I just typed "look" 00:19:24 -!- CakeProphet has changed nick to SevenInchBread. 00:19:35 The guise of cake is merely an illusion over bread. 00:19:39 You HUGE nerd. 00:19:40 -!- SevenInchBread has changed nick to CakeProphet. 00:19:59 I TIRE OF YOUR BREAD RELATED NICKNAMES. 00:20:09 hmm... lemme pull up the list. 00:20:54 1) CakeProphet 00:20:56 2) GrandmotherChaos 00:20:57 3) GrandfatherSoul 00:21:10 4) notCakeProphet 00:21:10 5) SevenInchBread 00:21:10 6) MotherNature 00:21:10 7) DaughterLove 00:21:10 8) FatherTime 00:21:10 9) SonMind 00:21:10 pick 00:21:19 NoneOfTheAbove 00:21:25 hrm.. 00:21:29 I hate you. 00:21:33 is egobot still down? 00:21:35 !help 00:21:36 you asked for it :) 00:21:48 * CakeProphet whines some more about egobot being down. 00:22:37 LeaLeaLea, YOUR VISIT IS MERELY REPUTATIONAL 00:22:40 YOU DO NOT CARE 00:22:43 ABOUT US 00:22:46 WHAT THE HELL. 00:22:49 Also. 00:22:53 YOUR JUST A POPULARITY PRINCESS 00:22:55 hrm? 00:22:59 Where is all the bitches. 00:23:12 I do not know where all the bitches is at 00:23:18 You better be findin' the bitches. 00:23:25 !bitches 00:23:35 * LeaLeaLea becomes incensed. 00:23:46 oh... I thought you said "incested" 00:23:52 what? 00:23:53 * LeaLeaLea also lights some incense. 00:23:55 oh no, the frankincense monster 00:24:03 WHY ELLO BSMNTBOMBDOOD 00:24:06 * CakeProphet lights some incest. 00:24:06 ..Hm 00:24:15 Leaving off the H in hello was not intentional. 00:24:34 GregorR, fix egobot or I'll choke your goat 00:24:38 He will. 00:24:39 it made you sound pixie... or elvish 00:24:43 actually a hobbit 00:24:46 He choked my goat once. 00:24:49 She never recovered. 00:24:56 Poor Wednesday. 00:25:11 ....hrm 00:25:19 I wish I had a goat 00:25:21 like Wednesday. 00:25:30 .. MOVING RIGHT ALONG. There are two people besides (Insert any one in an array bread product nicks here) speaking today. 00:25:45 scandalous 00:26:02 * CakeProphet still needs to fix his borken internets. 00:26:14 Damn those borken nets.. 00:28:08 * SimonRC barges back in 00:28:21 Have you lot heard of _The Eye Of Argon_? 00:28:54 Well I have found something a bit like it: 00:28:58 Nope. 00:29:07 ...what? 00:29:11 describe this eye 00:29:58 Oh, it's the worst amature sword-and-sourcery story ever (partly-) written. 00:30:02 google it 00:30:11 anyway, the thing I have found is a book: 00:30:15 "The world is full of bad books written by amateurs. But why settle for the merely regrettable? Atlanta Nights is a bad book written by experts." 00:30:29 ..Hmm. 00:30:33 It was written as a sting by some writers against a publisher 00:30:37 sounds like scholarly nerd humor 00:30:43 * CakeProphet prompt gets it. 00:31:03 CakeProphet? 00:31:08 ? 00:31:10 CakeProphet?? 00:31:11 yah? 00:31:13 yah? 00:31:13 * LeaLeaLea refuses to tell. 00:31:17 Error: No parse 00:31:29 LOLCODERHUMOR 00:32:02 ...if I had linux working I could probably compile erm... egobot. 00:33:27 If I had linux I would hit you in the face. 00:33:59 LeaLeaLea, linux can send people through my monitor? 00:34:07 and here I thought the whole linux thing was just hype. 00:34:53 Linux has infinite capabilites, MANY MORE than Windows! I heard, with Redhat you can stab wily opponants in the heart with a poisonous barb with the click of a button. 00:35:12 lol redhat is lame 00:35:24 lol cakeprophet fuckoff 00:35:30 ... 00:35:35 ..CakeProphet 00:35:35 WINDOWS USER ARGH 00:35:44 and also... MY TEXT EDITOR IS SUPERIOR TO YOURS 00:35:47 YOU FUCKING WISH 00:35:48 AND C IS SUPERIOR TO JAVA 00:35:53 ..Well, yes. 00:36:06 obviously 00:36:12 lol yah, but c is for homosexual people. 00:36:22 HENCE WHY YOU SING IT'S PRAISES. 00:36:28 So. 00:36:30 OMFG YOU GOT ME 00:36:30 I enjoy juice. 00:36:36 hmm... 00:36:37 OMFG LIEK I NO M8 00:36:38 too much juice though 00:36:40 Want some juice? 00:36:41 is bad 00:36:43 I can give you some. 00:36:54 too much juice makes your tongue sore 00:37:06 If I had linux I could send you juice from across the internets. 00:37:18 yeah but you don't lol 00:37:28 OH HO. 00:37:31 Also. 00:37:31 Am I the only person who would love to find a working development environment for Windows 1.0? :P 00:37:33 -!- sebbu2 has joined. 00:37:35 Stop using my chatspeak thing. 00:37:53 hI Gregor. :D 00:38:09 what chatspeak thing? ? D ?D? LD ?LO LOLNOOB 00:38:19 'lo 00:38:23 so.. 00:38:27 Hello Signore GregoR with the inexplicable yet oddly alluring capital R. 00:38:28 you should... 00:38:30 like 00:38:36 fix egobot 00:38:41 >.> 00:38:45 You can't make him. 00:38:50 can too 00:38:52 Can't. 00:38:57 I'll give him smurf porn in exchange 00:39:03 ..Hm. 00:39:05 call it a fair bargain if you will.. 00:39:06 Thwarted. 00:39:38 smurf porn would be like bukkake 00:39:51 because there's only one, synthetically created smurf woman. 00:40:30 back 00:40:40 lol i bet you wear eyeliner like a noob lea 00:40:46 Yep. 00:40:47 Also 00:40:53 haha 00:40:58 you shouldn't 00:41:11 I never did send you my Smurf Village analysis story. 00:41:14 Like I said I would. 00:41:19 ..Or the poem that followed.. 00:41:22 you never said you would 00:41:28 I've never even heard of it. 00:41:38 Oh ho ho. 00:41:42 -!- EgoBot has joined. 00:41:43 I KEEP LOGS, KURT. 00:41:51 ... So 00:41:53 This has become.. 00:41:59 Strangely uninteresting.. 00:42:06 Though at least egobot is apparantly here 00:42:09 tits or gtfo 00:42:12 Must ... find ... Windows 1.0 development libraries ... 00:42:16 :o 00:42:22 wtf egypts 00:42:47 !help 00:42:49 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 00:42:49 yah 00:42:51 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 00:42:53 LeaLeaLea, ...I never saw it 00:43:00 ..Yeah. I said that. 00:43:26 * LeaLeaLea engages in forcula battle with CakeProphet. 00:43:31 !glass {M[m(_o)O! "Nope"(_o)o.?]} 00:43:35 Nope 00:43:37 THWARTED 00:43:48 ..Hmmm. 00:45:51 That was the ENTIRE reason I wanted egobot up 00:45:54 just so I could do that. 00:45:57 * CakeProphet is content now. 00:47:24 !glass {M[m(_o)O!((_a)A!(_noob)<40>=/(_noob) "Nope "(_o)o.?(_noob)<1>(_a)s.?\]} 00:47:27 Nope 00:47:33 ... 00:47:38 !funge93 0".os kniht t'nod I">:#,_@ 00:47:41 I don't think so. 00:48:16 i love befunge :D 00:48:54 !glass {M[m(_o)O!((_a)A!(_noob)<10>=/(_noob) "Nope "(_o)o.?(_noob)<1>(_a)s.?\]} 00:48:57 Nope 00:49:02 hmmm... 00:49:24 !unlambda ```````````````.C.a.n. .I. .j.o.i.n. .i.n.?ri 00:49:27 Can I join in? 00:49:54 !funge93 0"daeha oG">:#,_@ 00:49:59 Go ahead 00:51:41 !glass {M[m(_o)O!((_a)A!(_s)S!(_noob)<10>=(_hehe)"Nope "=/(_noob) (_hehe)(_hehe)"Nope "(_s)a.?=(_noob)<1>(_a)s.?\(_hehe)(_o)o.?]} 00:51:42 ahoy 00:52:22 !unlambda `r`..`.u`.o`.y`. `.k`.n`.a`.h`.Ti 00:52:25 Thank you. 00:53:33 !glass {M[m(_o)O!((_a)A!(_s)S!(_noob)<10>=(_hehe)"Nope "=/(_noob) (_hehe)(_hehe)*"Nope "(_s)a.?=(_noob)(_noob)*<1>(_a)s.?=\(_hehe)(_o)o.?]} 00:53:39 htm.. 00:54:01 LeaLeaLea hates us. 00:54:03 you can tell 00:54:09 Wtf do you want.. 00:54:10 You've got a (( in there. 00:54:11 by the look in her eyes... 00:54:11 Oh. 00:54:16 I hate the random pinging. 00:54:17 see? 00:54:20 yeah. 00:54:21 ..That isn't random at all.. 00:54:22 well 00:54:24 LeaLeaLea 00:54:26 SHUT UP 00:54:29 NOPE 00:54:31 CakeProphet: 00:54:33 .. FUCK 00:54:38 I turned off the orange blinking thing 00:54:43 Oh. 00:54:47 THWARTED 00:54:49 forgot how though... 00:54:53 CakeProphet 00:55:06 CakeProphet? 00:55:08 ? 00:55:09 * LeaLeaLea refuses to tell. 00:55:10 yah? 00:55:35 * CakeProphet should learn befunge. 00:55:59 SO WHAT'S EVERYBODY DOING? 00:56:25 -!- sebbu has quit (Connection timed out). 00:57:01 ..Oh 00:57:03 I was ignoring you. 00:57:17 ... 00:57:28 I was just busy PLANNING LEA'S DEMISE 00:57:36 !help 00:57:36 .. :) 00:57:39 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 00:57:41 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 00:57:42 STOP TYPING THAT 00:57:48 I wish Egobot would die. 00:57:50 I FORGOT THE BEFUNGE COMMAND 00:57:52 FUCK YOU 00:57:56 ..... :) 00:58:46 I should go inhale the noxious and poisonous fumes of a small white cylinder laden with nicotine. 00:58:48 ... Afk 00:59:01 omfg smoker 00:59:08 stop smoking dirty smoker 00:59:13 * CakeProphet throws cans. 01:01:55 holy crap 01:01:55 !funge93 "If I were a mushroom..."#@, 01:01:58 no 01:02:04 !funge93 "If I were a mushroom..."#@,< 01:02:06 Some guy's name is "Haskell Curry" 01:02:07 .. 01:02:07 !ps 01:02:10 How fucking awesome is that 01:02:11 1 CakeProphet: ps 01:03:50 !funge93 0"If I were a mushroom..."#@,< 01:03:53 .. 01:03:54 ... 01:04:21 !funge93 0"If I were a mushroom..."#@,# < 01:04:23 . 01:04:26 . 01:04:35 IT TAUNTS ME 01:04:38 * CakeProphet faisl at befunge. 01:04:42 !funge93 "If I were a mushroom...">:#,_@ 01:04:44 * CakeProphet reads the specification again. 01:04:45 ...moorhsum a erew I fI 01:04:50 ... 01:04:54 flip it around... 01:04:59 why did you need to tell it to go the direction it was alread going? 01:05:12 Haskell Brooks Curry, to be precise. 01:05:12 !funge93 "...moorhsum a erew I fI">:#,_@ 01:05:15 If I were a mushroom... 01:05:25 cos the _ bounces it back 01:06:14 oerjan: He must have done a lot to get two different things named after him 01:06:30 _ in C: if(pop_from_stack()==0){go_right();}else{go_left();} 01:06:31 Just two? 01:06:47 ... 01:06:57 !funge93 "rekoms ytrid a si ea",@ 01:06:59 a 01:07:04 What else, then? 01:07:06 They first wanted to call the Haskell language Curry but then thought of all the bad jokes 01:07:07 oooh 01:07:17 the stack is character by character 01:07:18 gotcha 01:07:37 But later someone made the Curry language too 01:07:40 indian characters? 01:08:01 !funge93 "rekoms ytrid a si eaL">#,_@ 01:08:02 and there is of course currying, which should have been schonfinkeling :) 01:08:04 I thought of Curry as in function currying 01:08:05 a 01:08:10 FUCK YOU EGOBOT 01:08:22 Curry, anyhow, invented combinatory logic 01:08:28 -!- sebbu2 has quit ("@+"). 01:08:33 !funge93 "rekoms ytrid a si eaL">:#,_@ 01:08:35 Lae is a dirty smoker 01:08:38 the : is a duplicator 01:08:49 but why do you need to duplicate? 01:08:50 sweet, i bags we make that a daemon 01:09:05 cos the _ function takes the top value off 01:09:16 aha 01:09:33 !funge93 22+.@ 01:09:35 4 01:09:39 I have mastered befunge!!! 01:09:42 by... adding 2 and 2 01:10:49 hrm... is it possible to do multiline befunge programs with egobot? 01:10:52 Mmmm. 01:11:12 if you use a URL. 01:11:21 to a...? 01:11:31 to a befunge program 01:11:46 * CakeProphet heckles Lea some more about smoking in an overtly satirical manner. 01:11:52 I think we should harass fat people some more. 01:12:09 ...like we do smokers. 01:12:14 be careful with that, they might sit on you. 01:12:35 * CakeProphet is a very small... person. 01:12:38 * oerjan already weighs more than he is comfortable with. 01:12:41 I would be ded 01:13:29 * LeaLeaLea flicks ash at CakeProphet. 01:13:55 oh noes 01:13:58 ONOES 01:13:59 * oerjan wonders if Marie Antoinette is a saint in the CakeProphet religion 01:14:03 ..Hm. 01:14:11 I forgot who that was... 01:14:13 A fair and just inquiry. 01:14:20 "Let them eat cake" 01:14:36 (Except she never really said that) 01:14:39 !funge93 "gmo",,,@ 01:14:43 omg 01:14:52 Boy did she ever pay for it, though. 01:14:58 !funge93 0"rekoms ytrid a si eaL">:#,_@ 01:15:01 Lae is a dirty smoker 01:15:10 !funge93 0"rekoms ytrid a si aeL">:#,_@ 01:15:11 EgoBot cannot spell Lea, and thus renders her immune. 01:15:13 Lea is a dirty smoker 01:15:16 OH HO 01:15:18 I am unable to spell backwards... 01:15:33 b a c k w a r d s. there. 01:15:34 !funge93 0"ufts ro stob ot ecin eb">:#,_@ 01:15:37 be nice to bots or stfu 01:15:43 NOPE. 01:15:55 ... 01:16:09 !funge93 0"rekoms ytrid uoy ufts">:#,_@ 01:16:11 stfu you dirty smoker 01:16:14 .. oh my. 01:16:42 !funge93 01"yldab shguoc NOITCA"1>:#,_@ 01:16:45 * EgoBot coughs badly 01:18:22 !funge93 01"VERSION"1>:#,_@ 01:18:35 !funge93 01"NOISREV"1>:#,_@ 01:18:36 :D 01:18:48 i wonder what that'd do... 01:19:34 i bags that we use mIRC / irssi / whatever scripts so when we get versioned we automatically /msg !funge93 01"NOISREV"1>:#,_@ to egobot 01:20:18 !funge93 >"whooo"#,_?@ 01:20:23 o 01:20:28 FUCK 01:20:29 YOU 01:20:56 !funge93 >"whooo",?@ 01:20:59 ooooo 01:21:02 !funge93 >"whooo",?@ 01:21:05 ooo 01:21:08 !funge93 >"whooo",?@ 01:21:11 o 01:21:17 Ok, new channel: ##functional 01:21:38 !funge93 >"whooo",?#@?# 01:21:41 o 01:22:17 !funge93 >"whooo",?#,_@ 01:22:30 * CakeProphet ...waits 01:22:30 -!- ihope has quit (Connection timed out). 01:22:58 !funge93 >"whooo"?#,_@ 01:22:58 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 01:23:05 oohoooohoohoohoohoooooohoohoohoohoooooooooooooooooohoohoooooooohoooohoooohoooooohoooooooohoohoohoohoooooooohoooohoooooohoohoooohoooohoohoooohoohoooohoooooohoooooohoooooohoooohoohoooooooooooooooooooohoohoohoooooooohoohoooooooooohoohoooooohoooooohoohoohoooohoohoohoohoohoooohoooohoohoohoohoooohoooooooooohoooooooooooohoohoooooooooohoohoooohoooohoohoohoooohoohoooooooooooohoooooohoooo 01:23:06 !ps 01:23:07 1 CakeProphet: ps 01:23:09 yay 01:23:09 2 CakeProphet: funge93 01:23:15 ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 01:23:24 !ps 01:23:27 1 CakeProphet: ps 01:23:38 !funge93 >"Do you see?"?#,_@ 01:23:49 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 01:24:25 !funge93 >"Do you see?"?:#,_@ 01:24:32 !funge93 0"righty">#,:# _#:< 01:24:44 !funge93 0"righty">#,:# ?#:< 01:24:54 !ps 01:24:55 1 oerjan: ps 01:24:58 2 GreaseMonkey: funge93 01:24:59 3 GreaseMonkey: funge93 01:25:40 !funge93 >"Do you see?"?>:#,_@ 01:25:41 ?ees uoy oDDo you see??ees uoy oDDo you see??ees uoy oDDo you see??ees uoy oD 01:25:47 -!- pikhq has joined. 01:25:51 !funge93 >"Do you see? "?>:#,_@ 01:25:53 ?ees uoy oD 01:25:55 !funge93 >"Do you see? "?>:#,_@ 01:25:57 ?ees uoy oD 01:25:59 !funge93 >"Do you see? "?>:#,_@ 01:26:01 ?ees uoy oD 01:26:05 ... 01:26:07 !funge93 >"Do you see? "?>:#,_@ 01:26:07 y 01:26:09 ?ees uoy oDDo you see? ?ees uoy oD 01:26:11 y 01:26:19 !funge93 >"Do you see? "?>:#,_@ 01:26:21 ?ees uoy oDDo you see? ?ees uoy oD 01:26:22 !funge93 :0g:84*-!#@_801p0>_#":2%86*+\2/01g1-:01p0\#"_$$,,,,,,,,1+ 01:26:25 001110100011000001100111001110100011100000110100001010100010110100100001001000110100000001011111001110000011000000110001011100000011000000111110010111110010001100100010001110100011001000100101001110000011011000101010001010110101110000110010001011110011000000110001011001110011000100101101001110100011000000110001011100000011000001011100001000110010001001011111001001000010010000101 01:26:56 !funge93 >"001010101010101010101010111011011000101011101010010101011010100101 "?>:#,_@ 01:26:59 101001010110101010010101110101000110110111010101010101010101010100001010101010101010101010111011011000101011101010010101011010100101 101001010110101010010101110101000110110111010101010101010101010100 01:27:21 !ps 01:27:23 1 oerjan: ps 01:27:24 !funge93 >"!dlorw ,olleH"?>:#,_@ 01:27:27 Hello, wrold! 01:27:32 XD 01:27:38 !funge93 >"!dlrow ,olleH"?>:#,_@ 01:27:41 Hello, world!!dlrow ,olleHHello, world!!dlrow ,olleHHello, world!!dlrow ,olleHHello, world! 01:27:48 . . . 01:28:22 !funge93 >"001010"?"10101"?"010101010"?"10"#?"10111011011000101011"?#"101010010101"?"01"?"1010100101"?>:#,_@ 01:28:25 0101010100 01:28:29 >"olleH"?:#,_@ 01:28:58 0>"olleH"?:#,_@ 01:29:01 !funge93 >"001010"?"10101"?"010101010"?"10"#?"10111011011000101011"?#"101010010101"?"01"?"1010100101"?>:#,_@ 01:29:03 !funge93 0>"olleH"?:#,_@ 01:29:03 0101010100001010 01:29:27 HeHHHHelHeHeHHellHeHeHHHeHelloolleHlHeHeHeHHHeHeHellHHHHeHHeHeHeHHeHeHeHHHeHeHHHelHelloHHHHHellHeHellHelHelloolHHHelHHelHelHeHHHeHHHHeHHeHeHellHellooHHeHeHHHHeHeHHellHeHelloollHelHeHelloollHHellHellooHHHeHeHeHelHHHHHHeHeHHelHelHelHHHHHHHeHelHeHellHHeHHeHHelHeHHeHHHeHelloHeHeHHHelHelHHHHeHHellHHHHHHeHeHHHHHellHeHelHHHellooHeHHHeHelHeHeHHeHeHHHellHHHHellHellHHHeHHHHeHHHelHHHHelHHH 01:30:04 !funge93 >"00 1 010"?"10 10"#?" 1"?" 010 1 0 1 010" ?"10 "#?" 10 1 1 1 0110 11 00 01 01011"?#"101010010101"?"01"?"1010100101"?>:#,_@ 01:30:23 -!- oerjan has quit ("Good night."). 01:30:31 * CakeProphet likes conditionally skipping string mode on number strings. 01:32:07 anyone want to make a huge esolang. 01:32:30 with literally hundreds of operators and syntax forms? 01:33:03 simple is fun and awesomely beautiful.... but sometimes I like to play around with languages like homespring. :?D 01:35:58 * CakeProphet calls upon the aid of the Adjudicated Blind Collaborative Design Esolang Factory to perform this task. 01:38:21 sure 01:38:25 Dear God. . . 01:38:37 i reckon that brainfuck needs more instructions to be practical 01:38:39 Make the factory have, say, *rules*. 01:38:59 #1: People with nonlogic accounts make the rules. ;D 01:39:06 hehe, jk 01:39:27 rules... what? 01:39:32 I like that one. 01:39:40 #1: huh? 01:39:44 that's the only rule. 01:39:50 Of course, that's because I'm only Leibniz. 01:39:50 THE MOST IMPORTANT ONE 01:39:51 LeaLeaLea = Witt 01:39:57 who? 01:40:42 Leibniz is the name of the Nonlogic server. 01:40:52 pikhq: i would suggest that you stick some more stuff on your site 01:41:08 Who's witt? 01:41:25 GreaseMonkey: If I had the time, I would. 01:41:32 (I'll probably do that over spring break) 01:41:51 At the moment, all it's got is an outdated spec for BFM. 01:42:00 (the *current* BFM spec is in bfm.tar.bz2) 01:42:33 oh ok 01:42:54 yeah, there's a lot of stuff lying around unused in your home dir 01:43:04 Indeed. 01:43:29 I'm lazy, HTML-wise. 01:43:37 As proven if you look at the source to my page. . . 01:43:47 good ol' .txt files win. 01:43:54 meh, looking at my page, i'm just lazy 01:44:05 greasemonkey.nonlogic.org? 01:44:11 yep 01:44:14 but it's VALID HTML 4.01!!! WOOT!!!! 01:44:18 Same here. 01:44:25 HTML 4.01 transitional, i meant 01:44:36 I'm HTML 4.01 strict and CSS 2. 01:44:45 dam yo 01:45:15 And you really need to get a new Seagate drive. 01:45:20 * pikhq <3 Seagate drives 01:45:38 hmm, yeah, i'm seeing if we can sort the prob out 01:45:48 i've asked someone about the samsung 01:45:51 so what's the gnuchess for? 01:47:17 I was *trying* to compile GNU Chess so I could play chess during my Cisco class. 01:50:13 oh ok 01:50:17 nice 01:50:27 Needed to install flex and bison. . . 01:50:31 Which didn't work out. 01:50:43 (GNU Chess, that is) 01:52:39 bummer - FYB's interpreter is dodgy (under Windows at least) 01:54:13 l 01:54:30 Compile using Cygwin? 01:57:55 #23: If you are a security guard for a vast, powerful corporation, try to get assigned to the Marketing or Personnel departments, rather than R&D. 01:58:00 http://web.archive.org/web/20050810082607/enphilistor.users4.50megs.com/innocent.htm 01:58:14 #22 even 01:58:36 afk food 02:02:59 -!- calamari has joined. 02:10:30 -!- pikhq has quit (Read error: 145 (Connection timed out)). 02:29:46 back 02:29:57 man, they SO should have implemented NetFunge 02:30:59 who they 02:31:09 I saw cpressey and his wife today 02:31:23 cpressey ftw 02:35:43 -!- pikhq has joined. 02:39:16 !glass {B[b<99>^]}{P[(c__)oO!t$aA!][n<10>s(ns).?oo.?][poo.?tn.?][b(_m)1=,(_x)<0> 02:39:16 (_m)*ae.?=(_y)<1>=/(_x)"No more"oo.?(_x)0=(_y)0=\/(_y)(_m)*o(on).?(_y)0=\ 02:39:16 " bottle"oo.?(_x)<1>(_m)*ae.?=/(_x)^(_x)0=\"s"oo.?]}{C[(c__)oO!aA!sS!pP!t 02:39:16 $][gn*][xn1=,][dnn*<1>as.?=][vn*pb.?" of beer on the wall,\n"pp.?n*pb.?qe 02:39:16 " of beer,\n"pp.?"Take one down, pass it around\n"pp.?ln*<1>as.?=l*pb.?wu 02:39:16 " of beer on the wall.\n\n"pp.?pn.?]}{M[moO!cC!bB!bb.?cx.?fcg.?=/fcv.?cd. 02:39:18 OK 02:39:19 ?fcg.?=\]} 02:39:20 oops 02:39:44 !glass {B[b<99>^]}{P[(c__)oO!t$aA!][n<10>s(ns).?oo.?][poo.?tn.?][b(_m)1=,(_x)<0>(_m)*ae.?=(_y)<1>=/(_x)"No more"oo.?(_x)0=(_y)0=\/(_y)(_m)*o(on).?(_y)0=\" bottle"oo.?(_x)<1>(_m)*ae.?=/(_x)^(_x)0=\"s"oo.?]}{C[(c__)oO!aA!sS!pP!t$][gn*][xn1=,][dnn*<1>as.?=][vn*pb.?" of beer on the wall,\n"pp.?n*pb.?qe" of beer,\n"pp.?"Take one down, pass it around\n"pp.?ln*<1>as.?=l*pb.?wu" of beer on the wall.\n\n"pp.?pn.?]}{M[moO!cC!bB!bb.?cx. 02:39:46 OK 03:02:26 -!- anonfunc has joined. 03:04:02 ;> #"87*3+,'>,' ,'#,ff+4+,>:#,_ff+4+,87*3+,'#,'0,'<,@";#0< 03:04:19 (unefunge-98 quine) 03:04:31 though i use it for befunge-98 03:04:48 damn, why are all the cool funges unimplemented? 03:06:03 hmm.. 03:06:17 !funge93 <@_ #!,#:<"Hello World!"0 03:06:19 Hello World! 03:06:24 sweet 03:06:29 I'd like to do a 2D grid language that uses gravitational pull to move around data.. 03:06:31 there you go cakeprophet 03:06:37 nice concept 03:06:45 it'd be pretty simple. 03:06:59 i think RUBE uses gravity 03:07:13 this funge93 nomenclature suffers from Y2K effect 03:07:25 force = G((mass1 * mass2)/DistanceBetweenTwoPoints) 03:07:41 meh, i prefer terminal velocity of 1 03:07:51 where G could be set by a declaration. 03:08:00 though 1 cell/cycle^2 would be good 03:08:45 if you used realistic newtonian models you could create planet-like systems. 03:08:53 but... that's far-fetched for a simple language, :P 03:11:13 oh! 03:11:30 Glass... but with befunge-like commands for weird backwards control flow and stuff. 03:12:20 uh, glass confuses me 03:12:29 CONFUZZLE? 03:12:33 it's just stack-based with OO 03:12:36 like fortran 03:12:54 never used fortran 03:13:39 2 2 + 5 * 3 4 - * 03:13:59 It's just RPN. 03:14:13 !funge93 22+5*34-*.@ 03:14:17 -20 03:14:19 Mmm. . . Reverse polish. . . 03:14:34 yes, i work with RPN 03:14:48 That's all that Glass does, in essence. 03:14:56 Same with Fortran. 03:14:57 as visible here (funge98, not funge93): ;> #"87*3+,'>,' ,'#,ff+4+,>:#,_ff+4+,87*3+,'#,'0,'<,@";#0< 03:15:10 Except, of course, Fortran is meant to be used on a regular basis. 03:15:13 87*3+ and ff+4+ 03:15:13 put 2 on the stack, put 2 on the stack, compute the sum of the the 1st and 2nd items of the stack, put 5 on the stack, multiply the top two items and place the produce on the stack, place 3 on the stack, place 4 on the stack, subtract the top two items, multiply the top two items. 03:15:15 whoo... 03:15:21 RPN IS DESTINY 03:15:29 hmmm... 03:15:38 See logfuck 03:15:44 (is 'PN 'destiny) 03:15:49 befunge isn't technically RPN... it is stack based though. 03:15:56 yah 03:15:59 pikhq: that too 03:16:03 so it works like it. 03:16:43 * CakeProphet has been using the a functional fungeoid model in a lot of his ideas lately. 03:17:06 There's fungus among us 03:17:36 PUSH dword 2; PUSH dword 2; POP eax; POP ebx; ADD ebx,eax; PUSH ebx; PUSH dword 5; (whatever pop eax, pop ebx, ebx*=eax is); PUSH ebx; PUSH dword 3; PUSH dword 4; POP eax; POP ebx; SUB ebx,eax; PUSH ebx 03:18:38 ? 03:19:10 so... g and p in befunge can be used as variables right? 03:19:22 I know they can be used like one-shot memory. 03:19:47 GreaseMonkey: Some horrid x86 asm syntax on the mind? 03:24:52 * CakeProphet waves. 03:24:53 -!- CakeProphet has quit ("haaaaaaaaaa"). 03:27:06 prollaby 03:27:25 anyways, i'll /away 03:28:29 mete un gol? 03:44:41 goooooooool! 03:45:51 -!- thematrixeatsyou has joined. 03:46:07 The ma exits you 03:46:11 my connection totaly fscked up before 03:46:16 bugger, i forgot 03:46:32 -!- GreaseMonkey has quit (Nick collision from services.). 03:46:39 -!- thematrixeatsyou has changed nick to GreaseMonkey. 03:46:44 better! :D 03:47:00 then there's that other nick =D 03:47:10 -!- GreaseMonkey has changed nick to ^_`. 03:47:34 <^_`> it fits this channel: esoteric and up the top because it's esoteric 03:47:50 <^_`> so this channel is lead by esotericism 03:53:50 -!- Sgeo has joined. 04:10:08 Must ... find ... Windows SDK for Windows 1.0 ... 04:10:42 * bsmntbombdood burps 04:10:49 What's wrong with you, and where can I become wrong in the same way? 04:11:19 www.vetusware.com 04:11:28 * bsmntbombdood geegles 04:11:53 * pikhq has a stupid project idea. . . 04:11:59 Reimplement the Windows 1.0 API! 04:12:38 Excuse me ... I need to vomit. 04:12:42 And meanwhile, wish this laptop would stop melting the flesh off of my leg. 04:12:52 Can you smell burning solder? 04:13:09 Solder melts long before it burns. 04:13:24 Melting, whatever :-P 04:13:43 And my sloppy solder joint on the repaired power connector would have left my computer screwed by now. 04:16:11 * pikhq should stop using the CPU at near 100% for a bit. . . 04:16:15 Might make it cooler. 04:16:24 Of course, I could just throw it out in the snow. . . 04:41:32 -!- ^_` has quit (Read error: 110 (Connection timed out)). 05:17:14 -!- pikhq has quit ("leaving"). 05:38:16 -!- MM2 has quit (Read error: 104 (Connection reset by peer)). 05:48:36 -!- MM2 has joined. 06:13:33 -!- calamari has quit ("Leaving"). 06:47:22 -!- Sgeo has quit (Remote closed the connection). 07:43:17 -!- sebbu has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 11:23:39 -!- LeaLeaLea has joined. 11:33:30 -!- oerjan has joined. 11:59:01 -!- LeaLeaLea has quit ("Chatzilla 0.9.77 [Firefox 1.5.0.9/2006120612]"). 12:06:03 * oerjan _thinks_ someone here recently confused Fortran and Forth. 12:08:17 At least I was not aware that Fortran was stack-based, except underlying implementation. 12:28:59 -!- helios24 has quit ("Leaving"). 12:29:16 -!- helios24 has joined. 12:40:19 -!- ihope has joined. 13:15:59 -!- oerjan has quit ("Seahorse"). 13:39:46 -!- calamari has joined. 14:39:58 -!- jix__ has joined. 15:07:43 -!- calamari has quit ("Leaving"). 16:18:24 -!- FabioNET has joined. 17:00:58 -!- tgwizard has joined. 17:11:25 -!- anonfunc has quit. 18:32:34 -!- ihope_ has joined. 18:47:53 -!- ihope has quit (Connection timed out). 19:20:22 -!- sebbu2 has joined. 19:39:27 -!- sebbu has quit (Read error: 110 (Connection timed out)). 19:47:24 -!- _FabioNET_ has joined. 19:49:30 -!- FabioNET has quit (Read error: 145 (Connection timed out)). 19:50:07 -!- oerjan has joined. 19:53:07 oerjan: real Fortran has static allocation of everything, and no stack 19:53:45 but not Object-Oriented Fortran!!! 19:54:01 oof 19:54:18 yeah 19:54:25 it's what people say when you hit them in the stomach 19:55:36 Fortress looks cool. it is designed to replace Fortran, though it is not similar. 19:55:54 so.. like C? 19:56:27 e.g. its for loops are parallel, it uses real maths notation, and it has a datastructure system that is a superset of OO. 19:56:33 roughly 19:56:54 and the "module" system is interesting too, haven't seen that before. 19:56:56 You know what's stupid? 19:57:02 Scheme doesn't use t and nil 19:57:27 what? 19:57:48 Schemers go for a bit more elegance and a bit less pragmaticism that Common Lispers. 19:58:04 bsmntbombdood: how's that stupid? 19:58:29 because 19:58:53 because what? 20:00:49 Because I said so 20:02:42 persuasive. 20:04:42 And weird how the end of a list is different from false 20:06:04 but meh 20:06:12 how is it weird? 20:06:21 "the end of a list" is a list 20:06:27 "false" is a boolean 20:06:28 nil is a list 20:06:31 they're different types 20:06:31 and also false 20:06:45 well, then CL sucks at typing 20:06:52 since lists and booleans are clearly different things 20:07:47 same reason that false and 0 aren't the same thing 20:08:24 hmm 20:10:14 (math is actually very lax about this; but even in math 0 and empty set aren't usually taken to be the same) 20:43:14 Well, math typing is intensional so things may be "implemented" as the same set despite being distinguished in practice. As a von Neumann ordinal 0 is the empty set, and this is often used as the first step in building numbers out of set theory. 20:43:38 well, the real 0 can't possibly be an empty set 20:46:10 Of course it can, in fact precisely because 0 has no intrinsic set semantics, you can choose any set whatsoever to represent it. 20:47:57 In a sense the "real" 0 is not a set at all, which makes what you say true in one sense. 20:48:55 well, you can choose anything to represent anything 20:49:09 but not in any nice consistent way, which is the whole point of "implementing" stuff on top of other stuff in math 20:50:01 the reason we "implement" reals in the first place is so that we can derive their properties from the definition 20:50:20 a definition where 0 is the empty set is unlikely to be useful for that 20:50:48 For 0 the nice consistent representation depends on which 0 you are talking about - natural, integer, real, complex, ordinal, cardinal. And even then there may be more than one choice for each, depending on how you choose to model the whole set. 20:50:56 i said real 20:51:47 in any case, the "nice consistent representation" is usually not the empty set. 20:51:53 Certainly not the empty set for vectors and matrices. 20:52:01 I admit that neither the Dedekind cut nor the equivalence class of Cauchy sequences for 0 is the empty set. 20:53:07 The surreal number (which embeds the reals and could be taken as their representation) is the empty game which gets close. 20:53:51 Essentially a pair of empty sets. 20:54:54 ()() 20:55:17 that's a sexy pair of empty sets 21:19:08 -!- sebbu has joined. 21:26:51 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 21:33:40 -!- sekhmet has quit (Remote closed the connection). 21:34:14 -!- sekhmet has joined. 21:37:12 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:38:11 -!- sebbu2 has quit (Connection timed out). 22:15:16 -!- CakeProphet has joined. 22:25:25 -!- _FabioNET_ has quit ("goooood night"). 23:32:19 -!- Sgeo has joined. 23:49:55 -!- tgwizard has quit (Remote closed the connection). 23:52:37 I want slime for scheme 23:59:48 * oerjan coughs up something. 2007-01-24: 00:10:36 -!- sebbu has quit (Connection timed out). 00:13:12 Malbolge seems awfully resistant to attempts to remove its size limitations. :( 00:15:21 At least without totally breaking backwards compatibility. 00:26:29 -!- ihope has joined. 00:29:46 So does the platform for our operating system exist yet? 01:06:48 "Wikipoedia -- Wikipedia for kids!" 01:06:49 X-P 01:07:14 mayby my classical roots are mixed up :-S 01:07:25 heh 01:09:30 There should be a way to recurse in lambdas 01:11:09 IIRC lisp has LAMREC 01:11:36 Some typesystems will allow the definition of the y-operator, too 01:13:01 Yeah. 01:13:06 -!- bsmnt_bot has quit (Read error: 131 (Connection reset by peer)). 01:13:45 -!- bsmntbombdood has quit (Read error: 104 (Connection reset by peer)). 01:17:09 -!- bsmntbombdood has joined. 01:18:14 which lisp? 01:20:04 y-operator? 01:21:51 fix f = f (fix f) 01:22:12 (And y = fix) 01:24:51 What's the point of that? 01:25:16 That's all the recursion you need. 01:25:59 If you want f x y = x (y f) y y (f y x), then f = fix (\b -> x (y b) y y (b y x)). 01:28:00 oh 01:31:57 hmmm... this is nifty. 01:32:27 I've got a USABLE esolang, designed to be used in an actual application, that resemvles English, and looks weird. 01:32:46 still writing the spec... of course. 01:32:54 what is it like? 01:33:20 It reminds me of ORK superficially.. 01:33:26 but it doesn't have a myriad of special keywords. 01:33:27 Quick, you must give it only linear types in order to make it more useless and esoteric! 01:33:47 There is a Scribe named SimonRC. 01:33:55 * SimonRC wonders what would happen if you crossed "ORCS!" with "Ork". Both are OO. 01:34:07 "ORCS!" is a lang for writing roguelikes. 01:34:16 You there, cat 01:34:21 bsmntbombdood: Oooooh no there isn't! 01:34:22 SimonRC is to right "something" 01:34:23 You have stuff the letters 01:34:27 - 01:34:35 -!- pikhq has joined. 01:34:42 we are saying our stuff 01:34:47 CakeProphet: :-S 01:34:55 Thank you, good sir! 01:35:03 that was a cat program. 01:35:07 ah, ok 01:35:26 but none of that, except "Thank you, good sir!" was a reserved keyword. 01:35:49 pics or it didn't happen 01:36:26 right now I'm just calling conSTABLE 01:37:29 What kind of bloody keyword is "Thank you, good sir!"? 01:37:37 ends the function. 01:38:00 What'd I miss, and what the hell is wrong with you? 01:38:25 There is a Scribe named pikhq. 01:38:30 well... You there, cat amy or may not be special syntax... 01:38:37 pikhq is to write "Hello, world". 01:38:57 You there, hello 01:38:58 bsmntbombdood: The class is "scribe", not "Scribe". 01:38:58 - 01:39:00 a hello world program 01:39:10 pikhq: fine! 01:39:44 - 01:39:46 - 01:39:47 We are saying "Hello, World!" 01:39:49 Thank you, good sir! 01:39:50 We hello 01:40:21 * pikhq thinks of a brilliantly insane idea. . . 01:40:53 Make a Brainfuck variant which makes use of every character which one can type on a standard US English keyboard. 01:41:10 That would be printable ASCII. 01:41:22 * oerjan thinks of an even more brilliantly insane idea. 01:41:34 Make that a Chinese keyboard. 01:41:39 And I have final exams tomorrow and it's bedtime. Bye-bye. 01:41:50 oerjan: Have you seen a chinese keyboard 01:41:56 -!- ihope has quit ("No, make that Unicode. Very insane."). 01:41:57 hrm... and it apparently will be using list-like symbols. 01:42:26 but... not exactly.. like you can set objects as well as symbols, which has the effect of being in-place assignment. 01:42:57 er... lisp-like symbols 01:46:27 God. . . 01:47:19 oerjan: http://www.fi.muni.cz/usr/wong/teaching/chinese/notes/node11.html 01:47:20 You could even make this Brainfuck++ include a couple of stacks. . . Forking. . . Two arrays. . . 01:47:24 God, that's just evil. 01:47:36 THE kb HAS CHARACTER FRAGMENTS ON IT WHICH THE COMPUTER ASSEMBLES 01:47:44 dAMN cAPSlOCK. 01:48:18 There ought to be a distributed-computing version of Brainfuck. 01:48:33 It would be called "Clusterfuck" 01:48:42 the OO version would be "OFuck" 01:48:47 The multiple-threaded Brainfuck version could probably be ran on a distributed computing system. 01:48:58 and the unicode version "Fuck-U" 01:49:13 Hahah. 01:49:14 pikhq: (that was just a joke about the names) 01:49:28 I see that now. 01:50:25 And, I assume, there'd be an Internet-supporting version called "GoFuck", and one that's introspective, called "Yourself". . . 01:50:34 And the combined version, "GoFuckYourself". 01:50:41 hehe 01:51:25 If you add a command for turning off the computer, that would be "FuckOff" 01:52:27 -!- bsmntbombdood has quit (Read error: 104 (Connection reset by peer)). 01:52:39 I will leave to others to mention the name of the web camera version 01:52:40 SO 01:52:48 THIS SOUNDS LIKE A JOB FOR THAT ESOLANG FACTORY 01:52:50 And a version combined with Malbolge. . . 01:52:53 "GoToHell." 01:52:54 THE WORLD'S LARGEST BF IMPLEMENTATION 01:53:01 Variant, you mean. 01:53:08 ...yeah 01:53:32 concurency, networking, oo, functional, extended control flow, etc 01:53:45 oerjan: Actually I can't guess that one. 01:54:17 Sexy BrainFuck Live? 01:54:48 -!- bsmntbombdood has joined. 01:55:40 CakeProphet: it would be like OO COBOL. you would only see clear code when in your programming class, buit in the Real World, you would keep finding code that still had raw <>+_[]., in it. 01:55:57 OST, that would what BFM would be like as a commercial language. 01:56:21 SimonRC, In what? 01:56:52 If BF was extended into a commercial language. 01:56:58 ok then, it would obviously be FuckFace 01:57:01 no no 01:57:01 Yo0u know what real-world COBOL is like, right? 01:57:04 not a commercial language.. 01:57:14 just a... really stuffed language. 01:57:19 oerjan: sigh. That is the one with interface definitions, surely? 01:57:53 I've never quite figured out the use of an interface -type- 01:57:58 Yes. . . We must engage in factoriness. 01:58:26 put it on the wiki? 01:58:40 * CakeProphet could do it. 01:58:48 *grin* 01:58:59 which inevitably means that I'll be the lucky one implementing it later... 01:59:01 ... 01:59:17 this, however, would be a Fucktory. 01:59:57 Heheh. 02:00:21 I really like the space-delimits-both-functions-and-class-attributes syntax of conSTABLE 02:00:55 2 + 2 gets the + method of the first two, and calls it on the second two... the parser can easily eliminate all ambiguity. 02:02:58 Is that a fact or wishful thinking. 02:03:20 I think it's a magical parser. 02:03:27 nah... as far as I can tell... the parser can't create ambiguity. 02:03:36 I've tried all sorts of situations... in my head anyways 02:03:40 Perhaps even an oracle machine? 02:04:30 the only restriction is that thee can't be default values for arguments and there can't be arbitrary numbers of arguments. 02:04:34 which doesn't matter much to me. 02:04:59 shit 02:05:03 you can easily stuff a list of "arbitrary arguments" into the last parameter... which is essentially what most do. 02:10:47 * pikhq proposes that Fucktory support networking and file access. . . 02:16:40 functional. 02:16:48 hmmm... I'd rather do this with befunge actually... 02:16:55 Bah. 02:16:59 * CakeProphet has never actually liked brainfuck -GASP- 02:17:07 Make it a superset of Dimenisfuck. 02:17:25 Add in parts of the Befunge command set. 02:17:33 * pikhq is t3h evil 02:17:50 I've written one of the most important pieces of software in history. 02:18:00 that would basically be like.... a rail-ish befungefuck 02:18:14 spam bot? 02:18:26 CakeProphet: A functional multithreaded befungefuck. 02:19:25 I still like befunge more than bf... it's FUN. It's a spatial system with a stack... that's just great. 02:19:31 * oerjan diagnoses GregorR with megalomania and gets out the straightjacket. 02:19:35 Fine. 02:19:40 Dimensifuck with a stack. 02:19:44 like electric wiring... with like a weird stack. 02:19:50 Voila; you've got Funge. 02:20:03 Well, n-dimensional Funge. 02:20:21 functional OO befunge!!! 02:20:25 oerjan: You don't understand. 02:20:29 oerjan: This is significant. 02:20:31 with network support, file access, and concurency. 02:20:31 This is ... 02:20:35 The Order of Urinals emulator. 02:21:23 No no, I understand perfectly. I am here to help, after all. Now just put your arm in here... 02:21:39 Order of Urinals? 02:22:01 pikhq: Given a number of arrival times and wee times for a number of men, and an arrangement of urinals, one can predict with almost 100% certainty which urinals each man will go to. 02:22:19 I'm trying to figure out if I can turn that into a rudimentary computer X-P 02:22:21 I. . . You. . . 02:22:26 Hahah. 02:24:57 CakeProphet: I agree about BF versus BF 02:26:21 * CakeProphet dies of laughter. 02:26:28 oh god... 02:26:33 that's brilliantly hilarious. 02:27:35 * CakeProphet gets to work on that oracle machine pikhq seems to be baffled at. 02:28:38 What sort of oracle? 02:34:06 the 2 + 2 thing 02:34:10 that constable uses 02:35:18 Ah. 02:38:14 -!- oerjan has quit ("Good night."). 02:40:23 * SimonRC lolololololols at the ST:TNG plot generator: 02:40:30 "Whlist on leave Captain Picard starts de-aging rapidly when the Enterprise encounters some kind of spacetime rift thingy which is in fact Wesley's fault—as well as Q which pisses them about for fun and affects the entire ship, throws the ship thousands of light years off course, and depletes the shields to 5% while Wesley is precocious so Riker delivers a phaser blast, which means everything turns out okay, though Picard has had to deal with children. 02:40:37 You could swear it was real. 02:40:38 http://www.bargaintuan.com/sttngplotgen/ 02:48:05 Oh come on ... this HAS to be TC :P 02:48:08 [OoU] 02:56:17 "Imagine the heartaches / Of diplomatic attaches / When the wind detaches / Their false moustaches" :-) 02:59:21 erm.. 02:59:28 emacs stopped... detecting my capslock. 02:59:31 how bizzare 03:09:52 Hmm 03:10:05 Im thinking logfuck might not need dup to be turing complete 03:10:33 it needs dupdog! 03:11:06 ']' can become '[11g]>]<' or something like that 03:11:43 brainfuck -> logfuck, that is 03:12:05 I usually don't worry about Turing completeness.... some of the more interesting languages out there are finite-state and cellular automatons. 03:14:31 Some cellular automatons are Turing complete. 03:14:46 The Game of Life and Wireworld are good examples. 03:15:29 well yeah... since they're not mutually exclusive terms. 03:15:35 (in both of them, a Turing-complete system has been designed. . . Life has a Turing machine, Wireworld has an OISC system (it's instruction is MOVE)) 03:16:43 I'd still like OoU to be TC :P 03:16:52 I don't think it is, though ;) 03:17:34 -!- wooby has joined. 03:19:34 Unfortunately, I don't even really know where to start on writing a OoU program ... 03:19:44 What's OoU? 03:19:46 oooh 03:19:51 order of urinal 03:19:59 well... it depends on how many urinals we're talking 03:20:21 I had to explain urinal ettiquette to a girl the other day 03:20:23 Any finite number in any sensible arrangement. 03:20:25 and hell, if something as rudementary as LIFE is Turing complete... I'd imagine OoU could be too. 03:20:34 it's mostly implied etiquette. 03:20:42 It's programmed into every man. 03:20:49 And I determined these rules for my emulator: 03:20:56 1) Farthest from any neighbor. 03:21:00 2) Fewest neighbors. 03:21:05 3) Closest 03:21:37 Farthest is not always the best, in a situation with lots of urinals 03:21:52 (Though I wrote it such that I could write men with different roles) 03:22:13 bsmntbombdood: I could put a limit on farthest easily *shrugs* 03:22:43 The Shy Man, The Lazy Man, and the Claustophobic. 03:22:55 determines priority of which to achieve first. :D 03:23:14 \-| |-/ \-| |-/ 03:23:28 I was thinking: Lazy (closest first), creepy (most neighbors, closest to neighbors), lonely (tries to be close, but still one urinal between) 03:24:58 However, I think I'd like to try to find TC with only the standard rules. 03:26:07 yeah [11g]>]< doesn't work 03:26:54 obviously 03:35:07 you could use each block of three urinals as morse code. 03:35:29 at the end of the program... each three urinals stands for a character. 03:44:40 call/cc makes no sense 03:52:34 -!- pikhq has quit ("leaving"). 03:59:44 Hm 04:00:15 I think I need one more factor to make OoU TC ... wee schedules. Right now there's no capacity for looping. 04:12:15 bsmntbombdood: yes it does 04:12:22 quite simple once you understand it. 04:16:16 I think I can implement cat in this O_O 04:22:56 SimonRC: Which I don't 04:24:40 -!- wooby has quit. 04:24:46 -!- wooby has joined. 04:28:17 * bsmntbombdood likes how SICP says that for,while loops are mere abstractions 04:30:12 GregorR, if your output is the data itself converted to characters... a NOP would be the cat program. 04:30:42 I envisioning it working a lot like a string-rewriting language... but without explicitly rewriting and with multiple symbols for each character 04:31:50 -!- CakeProphet has changed nick to SevenInchBread. 04:32:14 String rewriting 04:32:16 * SimonRC goes to bed 04:33:37 ...I hate parsing. 04:33:44 at least initially.. 04:33:48 semantics are fun though 04:33:54 but the initial parsing out tokens sucks bawls. 05:00:13 -!- SevenInchBread has quit (Read error: 113 (No route to host)). 05:31:29 I was thinking a special "output" urinal which would output a bit: 1 if time >= 10, 0 otherwise. 06:22:22 -!- calamari has joined. 06:24:27 -!- Sgeo has quit (Remote closed the connection). 06:27:30 -!- calamari has quit ("Leaving"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:30:56 -!- sebbu has joined. 13:01:37 -!- wooby has quit. 13:47:58 -!- jix__ has joined. 13:48:53 -!- jix__ has changed nick to jix. 13:50:34 -!- calamari has joined. 14:54:27 -!- calamari has quit ("Leaving"). 15:47:27 -!- tgwizard has joined. 15:49:21 oh no! 15:49:25 bsmnt bot is gone! 15:49:45 -!- bsmnt_bot has joined. 15:50:18 foo 15:51:14 ~exec print >> sys.stdout, "foo" 15:51:15 foo 16:23:31 gah 16:23:40 combinatory logic makes no sense 16:24:01 SENSELESS! 16:40:19 -!- FabioNET has joined. 17:07:36 -!- FabioNET has quit (Read error: 145 (Connection timed out)). 17:10:53 -!- FabioNET has joined. 18:20:33 -!- Sgeo has joined. 20:34:33 -!- sebbu2 has joined. 20:53:41 -!- sebbu has quit (Read error: 110 (Connection timed out)). 21:00:36 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 21:18:37 -!- ihope has joined. 21:20:05 -!- sebbu has joined. 21:39:19 -!- sebbu2 has quit (Connection timed out). 21:39:33 -!- oerjan has joined. 21:44:59 The problem with cloaks is that you can't collect them or anything. 21:47:27 Unless I can get tapthru/resident/pdpc/supporter/active/ihope or something. 21:47:46 Or tapthru/resident/pdpc/supporter/active/unaffiliated/ihope. 21:50:08 Wireworld is not Turing-complete unless you have an unbounded starting pattern. 21:50:49 Indeed. 21:51:01 ? 21:51:16 * oerjan is reading yesterday's logs 21:52:23 However, that can still be interesting for cellular automata. The rule 110 1D-automaton is the same way at least for the known construction. 21:52:43 what do you mean unbounded starting pattern? 21:53:36 Wireworld patterns cannot grow, so to have infinite memory you need some kind of infinite initial pattern. 21:55:49 ah yeah 21:56:35 (Rule 110 patterns can grow leftwards however, so it may be possible in that case although yet unknown) 21:58:12 Hmmmmmmmmmmm, that has some implications in terms of OoU too ... could still be a BSM though. 21:58:23 well, i think it's turing complete if it's capability can be increased with trivial changes 21:59:01 i mean, changes the system itself could theoretically implement 21:59:14 *changes that could be implemented on the system itself 21:59:25 -!- tgwizard has quit (Remote closed the connection). 22:00:16 For it to be TC, you'd need to be able to use a recursive algorithm that could feasibly take unlimited memory. 22:29:57 -!- FabioNET has quit ("notte ragassuoli"). 22:34:29 GregorR: wha? 22:34:57 WireWorld is not TC, because you can't implement an algorithm that takes unbounded memory. 22:36:03 Ooh I misread 22:36:07 I thought you were talking to me 22:36:21 apparently my irc client highlights on "BSM" 22:37:14 GregorR: erm, it should be easy enought to construct a WW TM with infinite tape. 22:37:27 you can't? 22:38:54 why are you whining about the fact a ww computer need more memory to be able to do more, are you saying assembly isn't tc? 22:39:07 *needs 22:44:43 If assembly doesn't have infinite memory, it's not Turing-complete. 22:45:00 Nothing is turing complete 22:45:18 Nothing in the universe is Turing-complete. 22:45:24 yeah 22:45:47 Unless, that is, the universe is infinite and you can build something that'll never break down. 22:46:51 Building such a thing will probably be very hard until very near the heat death of the universe, and I don't know whether such a thing could do anything after its heat death. 22:53:11 :-P 22:53:12 "It takes N Prolog programmers to change a lightbulb." "N=1" "N=2" "N=3" "N=4" "N=5" "N=6" ... etc. 22:53:15 "It takes N Prolog programmers to change a lightbulb." "N=1" "N=2" "N=3" "N=4" "N=5" "N=6" ... etc. 22:53:19 :-P 22:53:21 erm, oops 22:53:32 of course you could say any abstract language is tc, which means most languages, but you just cant create an interpreter for them 22:55:01 A language can be TC, an implementation cannot. 22:55:16 Assembly is not TC, mainly because it's tied so thoroughly to the processor. 22:55:25 Higher level languages are sometimes TC. 22:55:57 oklopol: *any* abstract language? 22:56:32 any abstract language that is turing complete is theoretically turing complete is the gist of my mumbling 22:56:34 :) 22:56:54 exactly what GregorR said 22:56:58 word to word 22:56:59 you tautologist you 22:57:01 that's what i said 22:58:14 So, to change the topic radically, what base language should we use for our esoteric programming language? 22:58:50 :) 22:58:54 itself? 22:59:13 s/programming language/operating system/, sheesh 22:59:23 The Big Kahooey is that it's self-modifying and extensible and virtualizable. 22:59:31 ("Kahooey" is Spanish for "criterion".) 23:01:20 * oerjan thinks ihope should fire his Spanish teacher. 23:01:37 oerjan: good idea! :-) 23:01:57 I nominate Smurf. 23:04:05 Befunge 23:04:26 Wonderful. 23:04:38 I take it Befunge is virtualizable. 23:04:57 OST, Funge98. It has the same big-O running times as everything else. 23:05:20 OST? 23:05:34 Funge98 can manage a 4G * 4G space. Make the whole disk into swap! 23:05:37 OST=cheese 23:05:42 On Second Thoughts 23:05:52 Pff, make it RAM. 23:06:06 Any Befunge variant should be wonderful enough. 23:06:20 With whole-disk swap, you don't need any file-handling. 23:06:34 Mmh. 23:06:47 but a Bef98 address fits nicely into a 64-bit word. 23:06:48 You need to separate RAM from disk space, don't you? 23:07:10 no, there si nothing to stop you making the whoel disk into swap. Some "real" OSes do that. 23:07:15 Well, hey, it'd be a base. Let's not have any fancy features that can't be removed. 23:07:37 We'd build the operating system on top of Funge. 23:07:37 Nothing wrong with memmapping everything. 23:07:46 Anybody want my Order of Urinals emulator? :-P 23:08:15 Do real *platforms* do that? 23:08:37 Surely we could build this swap stuff on top of the Funge. 23:09:50 ihope: yeah, real platforms do that. I will try and find an example 23:10:09 And, uh, I guess the Order of Urinals thing sounds interesting. 23:10:46 Also, what actual reason is there to build this stuff into the platform? 23:11:40 "whole disk swap"...like virtual? 23:12:04 Just the whole disk memory mapped. 23:12:04 *into 23:12:28 On a 64-bit platform or a 32-bit platform 20 years ago that'd be a perfectly good way to get to the HD. 23:12:51 yeah 23:13:17 thought so 23:13:23 well, unununium? 23:13:38 What if you have a weird hard drive? 23:13:41 Or multiple hard drives? 23:13:48 Or no hard drives at all? 23:13:56 os is for that 23:14:09 Hmm? 23:14:27 it takes care of the type of your hardware 23:14:31 The OS should be able to detect it and memory map everything properly. 23:14:59 GregorR always think what i'm thinking and say what i can't get out :\ 23:15:03 *thinks 23:15:04 ^^ 23:15:09 *says 23:15:12 lol 23:15:15 my s has a flow 23:15:18 *flaw 23:15:21 okay 23:15:26 Suuuuuuuuuuure 23:15:26 i shut up now :O 23:15:37 really! 23:15:41 it's screwedx 23:17:17 GregorR, can i have the emulator? 23:17:23 OoU 23:18:08 Oh, sure - it's in D, so I presume you want a binary? (What OS?) 23:18:17 windows 23:18:21 xP 23:18:37 Uno momento. 23:19:09 aha! "SpeedOS" 23:20:00 http://www.informatik.uni-ulm.de/rs/projekte/monads/PersistentVMemoryE.html 23:20:53 also, "Unununium" 23:21:39 OLD 23:21:51 i said that a while ago haha :) 23:22:21 http://www.codu.org/oou-2007-01-24-win.zip 23:22:26 thx 23:25:40 wow 23:25:45 that's so cool :O 23:25:48 lol 23:25:54 Where "cool" = "ridiculous" :-P 23:26:00 -!- sebbu2 has joined. 23:26:18 how do you do console non-appending output? 23:26:39 I just clear the screen between displays 23:26:43 ah 23:27:06 but, really, cool 23:27:08 hmm 23:27:17 do they come and og randomly? 23:27:19 go 23:27:48 Yeah - I'm considering writing a proper event list format, so you can make event lists. Then comes output, etc. 23:28:07 good 23:28:16 too hard to do anything if it's all random 23:28:24 "Too hard" == "impossible" :P 23:28:28 yeah 23:28:58 just delays between peeers and the amount of pee in their baggies 23:30:17 "baggies" 23:30:50 you can supply me with the right term if you can 23:31:12 no matter how tautological that is 23:33:07 -!- sebbu2 has quit ("Leaving"). 23:36:15 "bladder" 23:36:56 i was looking for that 23:37:13 but i settled with baggies since it didn't come right out 23:39:33 hmm, what are the rules? 23:39:37 in OoU 23:40:16 i'm pretty sure i'm not supposed to be this fascinated about watching little ascii men pee :\ 23:40:37 Hahahah 23:40:53 In order of preference: 23:41:02 1) Farthest from any other used urinals. 23:41:07 2) Fewest neighbors. 23:41:12 3) Closest 23:42:30 toilets and sinks not currently in use? 23:42:45 Fewest neighbors? 23:42:48 meaning? 23:43:03 Only urinals are in the algorithm. 23:43:16 you could add those later too 23:43:23 Fewest neighbors == for example, in this arrangement: @|U|@|U it would prefer the far right one. 23:43:37 ah of course 23:43:40 Or in this arrangement: U|U|@|U|U|U|@ it would prefer the far left one. 23:44:12 but, if there's a wall between them, they shouldn't care 23:44:55 -!- sebbu has quit (Connection timed out). 23:44:57 i mean, they don't need as big a distance as possible, because when eye contact is avoided for certain, the distance is as good as infinite 23:45:12 right? 23:46:24 In real life, yes. 23:46:27 In the simulator, no. 23:46:29 why not? 23:46:36 * GregorR == lazy :P 23:46:45 nah, it's trivial 23:47:07 well, okay, finding the best possible is then not, probably 23:47:12 Exactly. 23:47:19 and, that would eliminate the possibility of tc 23:47:29 Not necessarily, but it sure wouldn't help. 23:48:50 in real life the guys make solutions based on what they see of course, so they woulnd't turn right back out if all urinals are taken either 23:49:02 This _could_ be fixed simply by replacing "|" with " ", you know. 23:49:24 or 23:49:55 okay, i find this lack of words a bit frustratingf 23:49:57 *-f 23:50:15 Yes, I know, but forming a line would be a huge PITA :P 23:50:55 why? aren't "|" and " " the same width? 23:51:31 It was a look thing :P 23:53:00 sleep -> 23:53:24 Watching them find their way to a urinal in a maze = hilarity :P 23:54:13 What's particularly lame about this is I spent more time getting A* working than actually implementing OoU :P 23:57:23 I didn't see a maze. 23:59:58 stages/maze[2].txt 2007-01-25: 00:58:05 wow 00:58:13 CLEVAR! 00:59:37 http://pastebin.ca/327529 00:59:40 (from SICP) 01:03:18 * ihope rings a bell for no good reason 01:03:25 So yes, platform = funge? 01:03:42 why not Java2K? it comes with built-in random crashes 01:03:43 If there's any memory mapping at all, it should be a throw-together. 01:03:48 Pff. 01:03:55 What are we writing here, Windows? 01:04:48 well, you can make the random crashes less likely than Windows' 01:05:43 True. 01:06:11 But I think maybe serious answers might be better. :-P 01:06:54 er... 01:08:48 Er? 01:09:36 just I'm not prepared for a serious one :) 01:10:58 I think we can do a funge. 01:14:04 Now, get to work on a fungeoid that has a user mode, troops! 01:14:08 Or something! 02:05:19 -!- anonfunc has joined. 02:21:09 -!- ihope has quit (Connection timed out). 02:44:48 -!- oerjan has quit ("Natta"). 03:31:11 * SimonRC goes 03:53:44 wow 03:53:48 SICP is a great book 05:06:06 er, yes, it is 05:08:17 * bsmntbombdood is reading 05:16:02 -!- Sgeo has quit (Remote closed the connection). 05:54:21 -!- anonfunc has quit. 05:57:51 -!- anonfunc has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:17:00 -!- sebbu has joined. 11:52:25 -!- sebbu2 has joined. 11:54:37 -!- anonfunc has quit. 12:19:33 -!- sebbu has quit (Connection timed out). 13:07:20 * SimonRC goes to lunch 14:10:29 -!- Keymaker has joined. 14:12:16 this is hopeless. i can't get my underload interpreter written in normal languages, so i guess it's time to try the brainfuck approach. 14:45:29 Keymaker, i've seen your codes! :D 14:46:27 the name just rang a bell, nm :) 14:47:58 ah :) 14:48:08 ok 14:48:53 actually, now that i think of it i found this channel when i found logs searching your name i saw in a brainfuck program :O 15:27:18 -!- Keymaker has quit (Read error: 145 (Connection timed out)). 16:24:29 -!- tokigun has left (?). 16:24:44 -!- tokigun has joined. 16:26:58 -!- FabioNET has joined. 17:13:10 * SimonRC goes to a lecture 18:32:42 -!- GregorR has quit (zelazny.freenode.net irc.freenode.net). 18:32:44 -!- digital_me has joined. 18:39:15 -!- GregorR has joined. 19:31:33 omfg muriel is the sickest language i ever saw :O 19:38:33 -!- ihope has joined. 20:07:58 -!- helios24 has quit (Read error: 104 (Connection reset by peer)). 20:08:06 -!- helios24 has joined. 20:27:35 -!- tgwizard has joined. 20:39:00 -!- Sgeo has joined. 21:20:24 I suddenly feel the need to watch a dramatic computer crash. 21:21:04 -!- wooby has joined. 21:51:39 -!- sebbu has joined. 22:08:03 -!- oerjan has joined. 22:10:23 -!- sebbu2 has quit (Connection timed out). 22:30:12 -!- SevenInchBread has joined. 22:41:41 SUPER DANCE EXPLOSION TIME 22:42:37 SICP == awesome 22:42:45 GregorR, OoU with eventlists out yet? 22:52:39 I could release it "any second now" :P 22:52:41 hmmm... Smalltalk is pretty cool... 22:52:53 But first I want to store some data in OoU ^^ 22:53:00 I've encoded three bits so far ^^ 22:53:19 it would be cooler if it were prototype-based though.. 22:56:51 oklopol: Now four bits :) 22:57:32 encoded what bits? 22:58:33 if you wanted to make it easy to code with it, you could have some guys sleep on the toilets to be waken up only when someone pees near them etc 22:58:40 It can take input ;) 22:58:44 you'd need to put in T's of course 22:58:56 I don't want to make it any easier, my goal is to get JUST THIS to be TC :) 22:59:06 it's nice as it is of course 22:59:07 true 22:59:15 i just hope i can do stuff with it 23:01:26 What's OoU stand for again? 23:01:32 Order of Urinals. 23:01:43 Ah, right. 23:02:12 http://www.codu.org/oou-2007-01-25.zip (Binaries for Windows and GNU/Linux) 23:03:12 I bet you wrote it in D 23:03:16 tsk tsk 23:03:22 * GregorR huggles D 23:03:46 D is like C++ minus the stupid ^^ 23:03:51 Plus coolitude. 23:04:21 scheme == teh shit 23:04:31 Oh, and it now takes a speed parameter: oou 23:04:36 Lower is faster :P 23:04:46 50000 is default 23:06:02 oh eventlists exist already? :O 23:06:13 Yup 23:06:19 Totally undocumented whoot. 23:06:42 The format is a text file: 23:06:49 Anything outside of that is interpreted as a comment. 23:07:25 heh 23:07:46 repeat time is done once in the beginning too? 23:07:55 or they all come in right away? :P 23:08:10 is when the actor enters. 23:08:32 Each tick corresponds to 1/2 second real time, 1/20th emulated time. 23:09:29 well, i don't care about seconds as long as all the params are same relational length 23:10:09 damn, why did i ask about that 1:06 am :\\ 23:10:14 i wanna play 23:11:45 GregorR: is that redrawing the whole screen every tick? 23:11:50 Isn't that high treason or something? 23:13:30 Yes it's redrawing the whole screen, no I don't give a damn. 23:14:10 Doesn't D support curses? 23:14:37 Yeah, but I don't :) 23:15:29 Who needs curses? Just use the escape codes directly. 23:15:40 portability does 23:17:19 What happens if one actor enters before another has reached his urinal? 23:17:43 Can actors overlap? 23:17:43 oerjan: The actor makes a decision based only on urinals in use at the time - the moment it starts being used, he decides again. 23:17:46 ihope: No. 23:17:51 Fun. 23:18:25 Is it possible for two actors to even try to run into each other? 23:18:30 Is the "closeness" in the actor's new decision based on his position at the time of the decision? 23:19:17 And if there is a maze, does it influence distance calculations? 23:19:32 the .d-files are source, not eventlists :) 23:19:38 nice work, oklopol 23:26:20 -!- FabioNET has quit (Read error: 145 (Connection timed out)). 23:27:31 -!- SevenInchBread has changed nick to CakeProphet. 23:30:04 -!- lament has quit (Read error: 104 (Connection reset by peer)). 23:37:37 * GregorR reappears. 23:37:48 oerjan: The closeness is computed for the new decision, yes. 23:38:00 And no, the maziness doesn't change it. 23:40:24 -!- FabioNET has joined. 23:42:44 -!- tgwizard has quit (Remote closed the connection). 23:44:19 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 23:57:37 -!- FabioNET has quit ("googd night"). 2007-01-26: 00:40:51 -!- ihope has joined. 01:13:40 * CakeProphet finds himself coming closer and close to making.... smalltalk 01:13:49 smalltalk with like... some added perks... and no classes. 01:14:26 Smalltalk, eh? 01:14:35 It's pretty neat. 01:14:51 syntax wise... I'm removing all the colons... and just using parenthesis... makes it look eerily lispish. 01:14:58 Write a typed first-order logic evaluator for me. kthxbai 01:15:10 ... 01:15:27 I haven't seen one yet. Should be easy. 01:16:43 Assuming all your types are finite sets. 01:17:07 Otherwise termination is going to be a problem. 01:18:31 If it always terminated, it wouldn't be Turing-complete. 01:18:55 The problem is that a forall on an infinite set would _never_ terminate. 01:19:02 ....so? 01:19:19 a while True loop will never terminate either. 01:19:26 If true. Or an exists, if false. 01:19:56 oerjan: that's where proving comes in. 01:20:20 It doesn't take many brains to tell whether "all natural numbers are natural numbers" is true or false. 01:20:22 I see. And then we are getting into undecidability. 01:20:28 Yep. 01:20:53 'Course, you will have to settle for undecidability in some cases. Nontermination would be fine then, eh? 01:21:46 Writing an evaluator that searches for proofs is "easy". Having it use a reasonable amount of time is hard. 01:25:41 Yeah. 01:39:28 -!- sebbu has quit ("Leaving"). 02:14:28 -!- ihope has quit (Read error: 104 (Connection reset by peer)). 03:12:14 -!- CakeProphet has quit ("haaaaaaaaaa"). 03:12:46 -!- CakeProphet has joined. 03:18:35 -!- CakeProphet has changed nick to SevenInchBread. 03:50:24 -!- calamari has joined. 04:07:32 -!- Sgeo has quit (Read error: 104 (Connection reset by peer)). 04:35:49 -!- oerjan has quit ("leaving"). 04:51:17 -!- SevenInchBread has quit (Read error: 113 (No route to host)). 05:27:53 I've been poring it over ... and I don't think that OoU is TC, or even a BSM :( 05:40:56 -!- digital_me has quit (Remote closed the connection). 06:02:18 Oou really? 06:04:51 Yup :( 06:21:42 -!- calamari has quit ("Leaving"). 06:21:45 -!- wooby has quit. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:46:46 -!- sebbu has joined. 11:36:37 # For cur-- / For cur-- / For curiosity, # # Two pis-- / Two pis-- / Two pistols on my knee, # # For king-- / For king-- / For king and country, # (etc) 11:36:56 Ok, maybe it works better when sung. 11:48:16 argh I have a pun stuck in my head 12:44:13 -!- GregorR_ has joined. 12:44:43 GregorR, GregorR_: ooh, twice the fun! 12:44:47 -!- GregorR has quit (Read error: 104 (Connection reset by peer)). 12:44:59 Sigh 12:45:00 * SimonRC goes 12:52:29 GregorR_, i proved to myself at school you can't do pretty much anything with it 12:53:49 i tried to find a way to get even a bit use out of the fact you can time ppl and control where they go but i can't find any even vaguely interesting things to get them to do 14:31:12 -!- tgwizard has joined. 16:30:26 oklopol: Oh, you can store and retrieve data. 16:30:29 I've written `cat` 16:30:36 So it's not utterly worthless. 16:30:41 -!- GregorR_ has changed nick to GregorR. 16:40:54 * sebbu a eu ses résultats de son 3° semestre de dut info : 5° sur 74 avec 13.597 de moyenne 16:45:35 sebbu: ???? 16:46:52 /ame 17:05:14 -!- sp3tt has quit (Read error: 131 (Connection reset by peer)). 17:10:44 -!- sp3tt has joined. 19:28:57 -!- sebbu2 has joined. 19:56:04 -!- sebbu has quit (Connection timed out). 20:55:29 -!- SevenInchBread has joined. 21:21:23 -!- lament has joined. 21:22:14 hola 21:55:37 -!- florian_ has joined. 21:55:49 -!- florian_ has quit (Client Quit). 22:13:27 -!- Dustfinger has joined. 22:13:39 -!- Dustfinger has quit (Client Quit). 22:19:43 -!- wooby has joined. 22:49:14 -!- digital_me has joined. 23:10:30 -!- jix__ has joined. 23:13:07 -!- sebbu has joined. 23:20:23 -!- sebbu2 has quit (Read error: 145 (Connection timed out)). 23:28:07 -!- Sgeo has joined. 23:40:49 -!- oerjan has joined. 23:46:46 -!- wooby has quit. 23:50:43 -!- jix__ has changed nick to jix. 2007-01-27: 00:11:09 The world needs a discoardian programming language 00:12:35 Aren't all esoteric languages discordian by default? 00:14:07 Except perhaps those that have too elegant syntax and semantics, like brainfuck. 00:15:24 I am sort of surprised that there doesn't seem to be a language called "Kallisti". 00:15:27 INTERCAL and Malbolge probably qualify. 00:20:23 Now you made me find my copy of the Principia. Hmm, I wonder if there'd be language-design-wise inspirational material in here. 00:30:37 -!- wooby has joined. 00:31:34 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 00:31:38 # God hates fags. # # (If you're a fag he hates you too.) # -- http://www.eveningservice.com/Video 00:31:41 :-o 00:31:44 Don't you just *love* Christian fundamentalism? 00:34:26 -!- sebbu2 has joined. 00:35:10 -!- sebbu2 has quit (Client Quit). 00:40:18 that's lame 00:40:58 i like the design of the website though 00:49:56 I think it's a parody 00:53:38 yeah i think your'e right 00:53:55 -!- sebbu has quit (Read error: 110 (Connection timed out)). 00:58:04 * SimonRC goes to bed 01:06:33 -!- tgwizard has quit (Remote closed the connection). 01:12:46 -!- ihope has joined. 01:15:56 So it's pretty much consensus that Glass is going to be the base language for our operating system? 01:18:44 -!- pikhq has joined. 03:23:58 -!- anonfunc has joined. 03:30:21 ihope, dunno... but it seems to. 03:30:33 there's tons of choices we could use... I'd like befunge if it were a bit more efficient. 03:30:36 or even ORK 03:31:42 hmmm.... what's a language I could learn (coming from Python) to quite a full degree in a matter of days, but it's also got some neat concepts... 03:31:44 and... useful. 03:33:03 -!- ihope has quit (Read error: 110 (Connection timed out)). 03:33:35 Hmm. 03:33:50 I'd say Brainfuck, except for the "useful" bit. 03:33:52 Tcl? 03:34:36 hmm maybe. 03:34:40 I kinda like Smalltalk... 03:34:55 but... maybe Smalltalk-that's-prototype-based 03:35:02 but I don't like Self for some reason. 03:35:08 which is exactly that. 03:35:36 I was also looking for a nice quick language with good parsing facilities... for language designing... 03:35:56 I'll even resort to C for the "fast" bit. 03:37:15 I think most conventional languages are as fast as you allow them to be. People claim Python is slow, but these are people who do idiotic things like create strings through hundreds of string concatenations (called accumulating, I think) 03:37:42 you can do stuff like that in C no problem... because C just maps that directly to blocks of memory... but in Python you want to use lists to do heavy-duty string operations. 03:48:54 Hmm. 04:31:22 -!- vydd has joined. 04:59:14 -!- oerjan has quit ("Gooed knight"). 05:09:30 -!- vydd has quit ("+++++[>++++++++++<-]>++[[>]>+++++[<++++++++++>-]<++.--.------------------.<<[<]>-]"). 05:13:19 -!- Sgeo has quit ("Leaving"). 05:25:35 -!- pikhq has quit ("leaving"). 06:28:05 -!- digital_me has quit ("Lost terminal"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:13:57 -!- Hardley has joined. 08:18:02 -!- Hardley has left (?). 08:58:20 -!- helios24 has quit (Read error: 54 (Connection reset by peer)). 08:58:28 -!- helios_ has joined. 08:58:54 -!- helios_ has changed nick to helios24. 09:02:10 -!- sebbu has joined. 12:07:08 -!- helios24 has quit (Read error: 60 (Operation timed out)). 12:16:16 foo 12:16:26 -!- LeaLeaLea has joined. 12:16:27 foo 12:16:29 foo 12:16:30 foo 12:16:32 foo 12:16:33 foo 12:16:35 foo 12:16:36 ..Shut the hell up. 12:16:36 foo 12:16:42 oh yah!? 12:16:44 You god forsaken bread product. 12:16:46 YEP 12:16:48 what u gonna doo? 12:16:50 SevenInchBread? 12:16:57 LeaLeaLea? 12:17:01 Would you like some of my omelette :) It has inexplicable bacon in it. 12:17:09 INEXPLICABLE 12:17:18 IT CAN NOT BE EXPLICTED 12:17:22 YEP 12:17:27 Sounds good.... 12:17:31 mail it to me. 12:17:34 ..It is pretty tasty.. 12:17:36 I'll email it. 12:17:49 ...pdf or jpg? 12:17:51 ... 12:17:56 gif lolo 12:18:01 ... 12:18:07 well, at least it'll be animated.. 12:18:14 Animated or transparant. 12:18:15 Either way.. 12:18:17 -!- helios24 has joined. 12:18:18 You'll have it. 12:18:24 sweet 12:18:33 LeaLeaLeaamiLea 12:18:40 I always wanted a transparant omelette. 12:18:56 I've never seen one... which explains a lot. 12:19:58 DUDE, HELIOS, WHATS UP MAN? 12:20:28 ..In any event.. 12:20:35 hrm 12:20:56 The nerdiest name I can think of is the fibonacci sequence 12:21:04 or maybe... the difits of pi... or even worse, phi 12:21:08 The nerdiest name I can think of is Kurt. 12:21:16 OH? 12:21:18 FUCKING OH? 12:21:19 YEP. 12:21:19 YOU WANNA GO? 12:21:22 :) 12:21:27 IVE GOT BLUE EYES WHITE DRAGON 12:21:29 MOTHERFUCKER 12:21:37 STEP INTO MY KITCHEN. 12:21:42 ... 12:21:47 YOU STEP INTO MY KITCHEN, YOU BETTER BE READY TO THROWDOWN MOTHERFUCKER 12:21:48 thats entirely too long of a walk 12:21:51 LETS DO THIS 12:21:52 COME ON 12:21:54 DONT BITCH OUT 12:21:56 WALK 12:21:59 .. JUMP 12:22:02 JUMP GYPSY 12:22:04 I CAN'T FUCKING DRIVE YET 12:22:06 NOT LEGALLY 12:22:13 I DIDNT SAY DRIVE. I SAID /JUMP./ 12:22:24 omote jumps to LeaLeaLea's kitchen. 12:22:26 ... 12:22:28 AHAHHAHA 12:22:34 YOU FUCKING NERD. 12:22:40 NO 12:22:45 ... 12:22:47 FUCK YOU 12:22:51 THAT WAS LEGIT YO 12:22:55 ... :) 12:23:00 * LeaLeaLea does a crazy dance. 12:24:22 * LeaLeaLea does a crazier dance. 12:24:28 * LeaLeaLea does the craziest dance. 12:24:35 * SevenInchBread does a WHRIO SJEGLRKDJ HLSDRFHL DFJ 12:24:40 .. rofl 12:25:15 -!- LeaLeaLea has changed nick to RainbowTrout. 12:25:30 ... 12:25:33 ahahahahaha 12:26:49 THIS NAME IS /MINE/ NOW 12:27:03 LeaLeaLea???" 12:27:08 ...Rainbowtrout... 12:27:21 * RainbowTrout swims. 12:27:32 * RainbowTrout dodges between murky seaweeds. 12:28:28 * RainbowTrout is dropped into someone's pants as a joke. 12:28:30 * RainbowTrout writhes. 12:28:46 * SevenInchBread screams. 12:28:51 .. :) 12:30:12 I hate turkeys. 12:33:57 !glass {M[m(_s)S!(_o)O!(_a)A!(_i)I!(_lol)(_i)i.?=(_len)(_lol)(_s)l.?=/(_len)(_lol)(_len)"A"(_s)(si).?=(_len)(_len)<1>(_a)s.?=\(_lol)"!"(_s)a.?(_o)o.?]} 12:33:59 !ps 12:34:01 1 SevenInchBread: ps 12:34:14 what mockery is this 12:34:19 .... :) 12:34:25 don't you ... me 12:35:48 !glass {M[m(_s)S!(_o)O!(_a)A!(_i)I!(_lol)(_i)i.?=(_len)(_lol)(_s)l.?=/(_len)(_lol)(_lol)(_len)"A"(_s)(si).?=(_len)(_len)<1>(_a)s.?=\(_lol)"!"(_s)a.?(_o)o.?]} 12:35:51 !ps 12:35:54 1 SevenInchBread: ps 12:36:16 !daemon A glass {M[m(_s)S!(_o)O!(_a)A!(_i)I!(_lol)(_i)i.?=(_len)(_lol)(_s)l.?=/(_len)(_lol)(_lol)(_len)"A"(_s)(si).?=(_len)(_len)<1>(_a)s.?=\(_lol)"!"(_s)a.?(_o)o.?]} 12:36:25 !input A Hello 12:36:27 Huh? 12:36:28 ... 12:36:30 !i A Hello 12:36:45 !help 12:36:48 help ps kill i eof flush show ls bf_txtgen usertrig daemon undaemon 12:36:49 1l 2l adjust axo bch bf{8,[16],32,64} funge93 fyb fybs glass glypho kipple lambda lazyk linguine malbolge pbrain qbf rail rhotor sadol sceql trigger udage01 unlambda whirl 12:36:55 !daemon 12:37:23 !!ps 12:37:26 !ps 12:37:26 Huh? 12:37:29 1 SevenInchBread: ps 12:38:36 -!- jix__ has joined. 12:39:19 !daemon A glass {M[m(_s)S!(_o)O!(_a)A!(_i) I!(_lol)(_i)l.?=(_len)(_lol)(_s)l.?=/(_len)(_lol)(_lol)(_len)"A"(_s)(si).?=(_len)(_len)<1>(_a)s.?=\(_lol)"!"(_s)a.?(_o)o.?]} 12:39:28 !A ahahahahahaha 12:39:31 _lol! 12:39:40 ... 12:40:29 I made it laugh 12:40:33 !A hjsdjlgjdfjhkljfgh 12:40:33 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 12:40:39 and... die 12:40:44 -!- EgoBot has joined. 12:42:41 !daemon A glass {M[m(_s)S!(_o)O!(_a)A!(_i) I!(_lol)(_i)l.?=(_len)(_lol)(_s)l.?=/(_len)(_lol)(_lol)*(_len)"A"(_s)(si).?=(_len)(_len)<1>(_a)s.?=\(_lol)*"!"(_s)a.?(_o)o.?]} 12:42:44 ! 12:42:45 !A dfsklfjdkldfjgljdfg 12:42:46 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 12:43:04 -!- jix__ has changed nick to jiy. 12:43:17 -!- jiy has changed nick to jix. 12:46:10 -!- EgoBot has joined. 12:50:41 !daemon A glass {M[msS!il!aA!oO!zie.?<1>a(ne).?=/z"A"oo.?ic.?zie.?<1>a(ne).?=\"!"oo.?]} 12:50:43 !A hmmmm 12:50:44 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 12:50:53 .. 12:50:54 -!- EgoBot has joined. 12:58:18 !funge &,@ 12:58:20 !ps 12:58:23 1 SevenInchBread: ps 12:58:33 !funge 1,@ 12:58:35 Huh? 12:58:43 !funge93 1,@ 12:58:45 12:58:52 !funge93 &,@ 12:59:00 !i 1 A 12:59:07 !ps 12:59:11 1 SevenInchBread: ps 12:59:43 !funge93 &.@ 12:59:47 !ps 12:59:51 1 SevenInchBread: funge93 12:59:53 2 SevenInchBread: ps 13:00:00 !i 1 A 13:00:03 0 13:00:28 !funge93 ~.@ 13:00:35 !i 1 A 13:00:39 65 13:01:13 !funge93 " ".@ 13:01:17 32 13:01:46 -!- cmeme has quit (Connection reset by peer). 13:01:51 !funge93 " "32-.@ 13:01:55 1 13:01:57 -!- cmeme has joined. 13:03:31 !funge93 " "" "-.@ 13:03:35 0 13:09:14 ... :) 13:09:18 -!- RainbowTrout has changed nick to LeaLeaLea. 13:18:32 LeaLeaLea, scandalous 13:18:38 WHAT 13:18:41 WHAT 13:18:44 :) 13:18:50 :) 13:18:53 :)) 13:18:57 !cat tehehehehehehehehehehe 13:19:01 Huh? 13:19:03 :))))) 13:19:04 FUCK YOU 13:19:10 :))))))))))))))))))))) 13:19:45 !daemon cat glass {M[maI!bO!cA!dae.?<1>c(ne).?=/dac.?bo.?dae.?<1>c(ne).?=\]} 13:19:48 !cat tehehehehehehehehehe 13:19:49 OK 13:19:49 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 13:19:54 :O 13:19:57 :D 13:19:58 ...as intended? 13:19:59 :) 13:19:59 yup 13:19:59 -!- EgoBot has joined. 13:20:00 :( 13:20:14 :> 13:20:16 :< 13:20:18 :| 13:20:43 -!- tgwizard has joined. 13:20:46 !daemon cat glass {M[mal!bO!cA!dae.?<1>c(ne).?=/dac.?bo.?dae.?<1>c(ne).?=\]} 13:20:49 ITS A WIZARD 13:20:50 OK 13:37:34 -!- LeaLeaLea has changed nick to HiddenLea. 13:48:58 -!- sp3tt has quit (zelazny.freenode.net irc.freenode.net). 13:49:57 -!- sp3tt has joined. 14:00:54 -!- HiddenLea has left (?). 14:37:58 -!- ihope has joined. 15:34:21 -!- pikhq has joined. 15:35:27 -!- pikhq has quit (Client Quit). 16:10:25 -!- ihope_ has joined. 16:25:23 -!- tgwizard has quit (Remote closed the connection). 16:26:20 -!- ihope has quit (Connection timed out). 16:39:07 -!- Sgeo has joined. 16:52:44 -!- oklopol has quit (Read error: 110 (Connection timed out)). 17:14:58 -!- oklofok has joined. 19:07:17 -!- puzzlet has quit (Read error: 104 (Connection reset by peer)). 19:09:19 who is this LeaLeaLea character 19:11:21 I don't KnowKnowKnow. 19:11:22 :-P 19:31:35 weird 19:37:55 a friend of mine. 19:39:56 -!- LeaLeaLea has joined. 19:40:05 .... 19:40:09 ... 19:40:14 ...... 19:40:19 ..My ears were burning.. 19:40:29 ihope_, sounds like a catchy name for an apple product 19:40:52 Explain, Lea 19:41:15 I... what? 19:41:30 hahahahaha 19:41:40 LeaLeaLea == SevenInchBread 19:41:51 ..... 19:41:56 hahahaha 19:41:58 oh sure 19:41:59 How 19:42:01 DARE 19:42:02 cause we're so alike 19:42:02 you 19:42:07 LeaLeaLea = SevenInchBread = CakeProphet? 19:42:10 I don't even know what to say to that, actually.. 19:42:14 Hmm. 19:42:17 -!- SevenInchBread has changed nick to CakeProphet. 19:42:27 I am simply Lea. Thrice. 19:42:28 * CakeProphet assumes the butterscotch identity 19:42:33 ... 19:42:36 (= CakeProphet LeaLeaLea) 19:42:40 NO 19:42:43 DO NOT LISP US 19:42:46 ... 19:42:58 Ramen is fairly tasty. 19:42:59 FILTHY S-EXPRESSIONS 19:43:02 CakeProphet == LeaLeaLea 19:43:03 It stings the tastebuds. 19:43:08 ...Darn, it doesn't change in Haskell. 19:43:10 Alright, you caught us. 19:43:15 indeed 19:43:20 CAKEPROPHET? 19:43:25 YAH? 19:43:29 I'm confused. 19:43:30 You should leave. So only one of our identities is here. 19:43:37 sounds like a... 19:43:39 no 19:43:41 ....Evil plan.. 19:43:44 TO GET YOU TO LEAVE 19:43:50 NOPE 19:44:14 (set! CakeProphet LeaLeaLea) 19:44:17 As punishment for having two of you in here, I must... uh, do something. 19:44:21 Do it. 19:44:23 -!- ihope has joined. 19:44:28 Namely, that. 19:44:29 ...how intimidating 19:44:30 DO IT 19:44:33 ..Oh 19:44:34 Indeed. 19:44:35 That was it. 19:44:42 Yep. 19:44:43 * LeaLeaLea closely considers the outcome of this situation 19:44:45 >:-) 19:44:49 .. :) 19:44:50 No idea. 19:44:58 !cat WE ARE ALL CAKEPROPHET 19:44:59 -!- EgoBot has quit (Read error: 104 (Connection reset by peer)). 19:45:00 ... 19:45:03 Woot! 19:45:08 -!- EgoBot has joined. 19:45:12 GET. OUT. 19:45:18 foo 19:45:20 Who, me? 19:45:25 ~cat aaaah 19:45:28 CakeProphet? 19:45:30 CakeProphet??? 19:45:32 CAKE 19:45:33 ????????? 19:45:34 PROPHET 19:45:35 the eagle has landed 19:45:38 -!- CakeProphet has changed nick to SevenInchBread. 19:45:38 ~exec self.raw("KILL LeaLeaLea") 19:45:45 Darn, nothing happened. 19:45:50 lolololo 19:46:05 ..CakeProphet? 19:46:16 ~exec self.raw("PRIVMSG #esoteric :WE ARE ALL THE PROPHET WIZARD") 19:46:17 WE ARE ALL THE PROPHET WIZARD 19:46:21 yAH? 19:46:27 * LeaLeaLea refuses to tell. 19:46:31 argh 19:46:37 ~exec self.raw("PRIVMSG #esoteric :%s" % random()) 19:46:37 LeaLeaLea is cheese 19:46:43 True story. 19:46:49 That's what random() produced? 19:47:06 -!- LeaLeaLea has changed nick to Cheddar. 19:47:11 ~exec self.raw("PRIVMSG #esoteric :%s, but not forgotten!" % random()) 19:47:17 ihope: ha 19:47:23 ~exec self.raw("PRIVMSG #esoteric :" + " ".join(["lol" for x in xrange(100)]) 19:47:25 I'm beginning to think I'm doing this wrong. 19:47:34 yep 19:47:36 #bsmnt_bot_errors 19:47:43 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 19:47:59 ~exec self.raw("PRIVMSG #esoteric :%s, but not forgotten!" % random()) 19:48:06 Pff. 19:48:34 ~exec print "Raar" 19:48:39 Hmm. 19:48:44 * bsmntbombdood hasn't seen razor-x/sukoshi for a long time 19:49:08 -!- puzzlet has joined. 19:49:42 ~exec self.raw("PRIVMSG #esoteric :RAAR") 19:49:43 RAAR 19:49:49 ~exec self.raw("PRIVMSG #esoteric :I AM GREGORR") 19:49:49 I AM GREGORR 19:50:23 ~exec self.raw("PRIVMSG #esoteric :>_O") 19:50:23 >_O 19:50:30 ~exec self.raw("PRIVMSG #esoteric :" + " ".join(["LeaLeaLea" for x in xrange(100)])) 19:50:30 LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaLea LeaLeaL 19:50:39 Fun! 19:51:01 ~exec self.raw("PRIVMSG #esoteric :" + " ".join(["Cheddar" for x in xrange(99)])) 19:51:01 Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar Cheddar C 19:51:12 Hi. 19:51:16 lol hi 19:51:32 ~exec print >> IRCFileWrapper(self.raw, "SevenInchBread"), "foo\n" * 25 19:51:36 -!- Cheddar has changed nick to LeaLeaLea. 19:51:45 ~ps 19:51:49 darn 19:51:49 0: 'print >> IRCFileWrapper(self.raw, "SevenInchBread"), "foo\\n" * 25', 12.84 seconds 19:51:56 ~kill 0 19:52:04 Private messages from unregistered users are currently blocked due to spam problems, but you can always message a staffer. Please register! ( http://freenode.net/faq.shtml#privmsg ) 19:52:11 ~kill 0 19:52:12 ~kill 0 19:52:13 Proccess 0 does not exist 19:52:13 ~kill 0 19:52:14 Proccess 0 does not exist 19:52:15 Proccess 0 does not exist 19:52:17 die! 19:52:17 HA 19:52:19 HA 19:52:20 OU 19:52:22 FUCKING 19:52:23 LOSE 19:52:34 ~exec self.register_raw(r".*", lambda: bot.raw("PRIVMSG #esoteric :lol, spam")) 19:52:41 Spammy!... I think. 19:52:49 Darn. 19:52:51 you fail 19:53:02 ~exec self.register_raw(r"(.*)", lambda x: bot.raw("PRIVMSG #esoteric :lol, spam")) 19:53:07 Spammier? 19:53:09 lol, spam 19:53:11 ~exec self.lazy = lambda x: self.raw("PRIVMSG #esoteric:%s" % x) 19:53:12 lol, spam 19:53:12 Yay! 19:53:13 lol, spam 19:53:36 ~exec self.register_queue.pop(0) 19:53:37 lol, spam 19:53:47 SevenInchBread: you can just do sys.stdout(...) 19:53:48 lol, spam 19:53:54 instead of self.lazy 19:53:56 lol, spam 19:54:10 ~exec self.raw_regex_queue.pop() 19:54:12 lol, spam 19:54:17 bsmntbombdood: nicely done, comrade. 19:54:25 NOT ANY MORE! 19:54:30 ~exec self.register_raw(r"(.*)", lambda x: bot.raw("PRIVMSG #esoteric :Cheddar")) 19:54:33 I can't say the same for SevenInchBread's IRC. :-P 19:54:34 Cheddar 19:54:44 ~exec self.lazy("Foo") 19:54:45 hmmm 19:54:45 Cheddar 19:54:50 Cheddar 19:54:59 ~exec self.register_queue.pop(0) 19:55:00 Cheddar 19:55:07 ~exec self.raw_regex_queue.pop() 19:55:07 Did I just... 19:55:08 Cheddar 19:55:20 ~exec self.print_callbacks() 19:55:30 ~exec self.raw_regex_queue = 3 19:55:36 There, that might fix it. 19:55:36 no you stupid 19:55:36 -!- bsmnt_bot has quit (Remote closed the connection). 19:55:37 :-P 19:55:51 TypeError: iteration over non-sequence 19:56:04 -!- bsmnt_bot has joined. 19:56:09 ~exec self.register_raw(r"(.*)", lambda x: bot.raw("PRIVMSG #esoteric :LeaLeaLea")) 19:56:10 hmmm 19:56:11 LeaLeaLea 19:56:15 Oh.. 19:56:16 LeaLeaLea 19:56:18 Hi. 19:56:19 LeaLeaLea 19:56:20 Hi. 19:56:21 LeaLeaLea 19:56:22 Hi. 19:56:23 LeaLeaLea 19:56:23 Hi. 19:56:24 LeaLeaLea 19:56:25 Hi. 19:56:26 LeaLeaLea 19:56:27 Hi. 19:56:28 LeaLeaLea 19:56:28 Hi. 19:56:29 LeaLeaLea 19:56:30 Hi. 19:56:31 Hello 19:56:31 LeaLeaLea 19:56:31 LeaLeaLea 19:56:32 Hi. 19:56:33 LeaLeaLea 19:56:34 Hi. 19:56:34 hmmm 19:56:34 LeaLeaLea 19:56:34 LeaLeaLea 19:56:35 Hi. 19:56:35 hi 19:56:36 LeaLeaLea 19:56:36 LeaLeaLea 19:56:37 Hi. 19:56:37 Hmmm 19:56:38 LeaLeaLea 19:56:39 * LeaLeaLea knocks it off immediately. 19:56:39 hrm 19:56:40 LeaLeaLea 19:56:41 wheee 19:56:42 LeaLeaLea 19:56:44 LeaLeaLea 19:56:46 LeaLeaLea 19:56:47 This is getting spammy indeed. 19:56:48 LeaLeaLea 19:56:50 LeaLeaLea 19:56:52 LeaLeaLea 19:56:53 ~exec self.quit 19:56:54 LeaLeaLea 19:56:56 LeaLeaLea 19:56:57 ~exec self.raw_regex_queue.pop(0) 19:56:58 LeaLeaLea 19:56:58 Uh. 19:57:05 There's also that, yes. 19:57:10 LeaLeaLea 19:57:12 LeaLeaLea 19:57:13 Or is there? 19:57:14 STOP HARRASING ME!! 19:57:15 hahaha 19:57:16 LeaLeaLea 19:57:18 LeaLeaLea 19:57:20 LeaLeaLea 19:57:22 LeaLeaLea 19:57:24 ~exec self.raw("QUIT") 19:57:25 LeaLeaLea 19:57:26 -!- bsmnt_bot has quit (Client Quit). 19:57:28 -!- bsmnt_bot has joined. 19:57:36 Now let's hope it doesn't go all spammy still. 19:57:40 Yay ihope! 19:57:46 * ihope bows 19:57:48 heh 19:58:02 * bsmntbombdood goes back to his calculus book 19:58:35 Lunatics! Lunatics I say! 19:58:42 Pff. 19:58:45 ~exec self.raw("QUIT") 19:58:46 -!- bsmnt_bot has quit (Client Quit). 19:58:51 ~exec self.raw("PRIVMSG Sgeo :Hi") 19:58:52 -!- bsmnt_bot has joined. 19:58:53 darnit 19:58:54 ~exec self.raw("PRIVMSG Sgeo :Hi") 19:59:01 .. 19:59:04 ~exec self.raw("PRIVMSG Sgeo :Hi") 19:59:11 Private messages from unregistered users are currently blocked due to spam problems, but you can always message a staffer. Please register! ( http://freenode.net/faq.shtml#privmsg ) 19:59:17 ~exec self.raw("PRIVMSG LeaLeaLea: Lol hi") 19:59:27 bot's not regged 19:59:53 ~exec self.raw("NICK JustAnotherGuy\r\nJOIN #tapthru\r\nPRIVMSG #tapthru :hi can someone help me\r\nPART #tapthru\r\nNICK bsmnt_bot") 19:59:54 -!- bsmnt_bot has changed nick to JustAnotherGuy. 19:59:54 -!- JustAnotherGuy has changed nick to bsmnt_bot. 19:59:56 ~exec self.raw("PRIVMSG #esoteric:" + str(10**100)) 20:00:05 ~exec self.raw("PRIVMSG #esoteric :" + str(10**100)) 20:00:06 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 20:00:21 #tapthru? 20:00:28 Yes, #tapthru. 20:00:36 Freenode's official unofficial help channel, or something. 20:00:58 -!- bsmnt_bot has changed nick to JustAnotherGuy. 20:00:58 -!- JustAnotherGuy has changed nick to bsmnt_bot. 20:01:03 ~exec self.raw("NICK BeanPlant\nPRIVMSG nickserv :register poodles") 20:01:14 scandalous 20:01:23 ~exec self.raw("NICK BeanPlant\r\nPRIVMSG nickserv :register poodles") 20:01:23 -!- bsmnt_bot has changed nick to BeanPlant. 20:01:32 ~exec self.raw("PRIVMSG LeaLeaLea: Lol hi") 20:01:43 no 20:01:53 s/: / :/ 20:01:58 -!- BeanPlant has quit (Nick collision from services.). 20:02:00 Fun. 20:02:01 -!- bsmnt_bot has joined. 20:02:06 ~exec self.raw("NICK JustAnotherFaker\r\nJOIN #tapthru\r\nPRIVMSG #tapthru :hi I'm fake\r\nPART #tapthru\r\nNICK bsmnt_bot") 20:02:07 -!- bsmnt_bot has changed nick to JustAnotherFaker. 20:02:07 -!- JustAnotherFaker has changed nick to bsmnt_bot. 20:02:19 lol 20:03:00 hmm 20:03:08 Anybody else get "bsmnt_bot is now known as bsmnt_bot"? 20:03:08 ~help 20:03:22 Sgeo: nope 20:03:26 ihope: nope 20:03:32 Weird. 20:05:23 -!- bsmnt_bot has changed nick to JustAnotherFaker. 20:05:23 -!- JustAnotherFaker has changed nick to bsmnt_bot. 20:09:45 -!- ihope_ has joined. 20:10:26 ~exec self.raw("PRIVMSG NickServ :SET UNFILTERED ON") 20:10:39 Hmm. 20:10:52 ~exec self.raw("PRIVMSG NickServ :SET UNFILTERED") 20:11:16 The bot's not registered, methinks. 20:25:41 -!- RodgerTheGreat has joined. 20:25:49 howdy, folks 20:26:49 -!- ihope has quit (Read error: 110 (Connection timed out)). 20:30:20 Ello. 20:30:56 -!- LeaLeaLea has left (?). 20:31:34 what have the denizens of #Esoteric been up to recently? 20:34:06 We've been spamming #tapthru. 20:34:41 ~exec self.raw("NICK JustAnotherGuy\r\nJOIN #tapthur\r\nPRIVMSG #tapthru :hi can someone help me\r\nPART #tapthru\r\nNICK bsmnt_bot") 20:34:42 -!- bsmnt_bot has changed nick to JustAnotherGuy. 20:34:42 -!- JustAnotherGuy has changed nick to bsmnt_bot. 20:34:46 >:-) 20:36:12 hm 20:36:19 any particular reason? 20:36:42 Not really. 20:37:27 -!- calamari has joined. 20:37:29 sounds like #Esoteric, alright 20:37:32 hi, calamari 20:37:42 hi Rodger 20:39:47 ~exec __import__("os") 20:39:51 Hmm. 20:39:56 ~exec __import__("os").system 20:40:08 ~exec print __import__("os").system 20:42:36 ihope_: print doesn't print to the channel still 20:42:58 brb everyone 20:42:59 -!- bsmnt_bot has changed nick to JustAnotherFaker. 20:42:59 -!- JustAnotherFaker has changed nick to bsmnt_bot. 20:43:05 ~exec self.raw(print __import__("os").system) 20:43:12 Okay, who did that? 20:43:13 no 20:43:20 Right. 20:43:21 sys.stdout 20:43:25 ~exec self.raw(__import__("os").system) 20:43:34 no you fail 20:43:37 I know. 20:43:45 I was just checking what type that was :-P 20:43:48 ~exec sys.stdout(__import__("os").system) 20:43:49 20:44:01 Well, that's fancy... 20:44:18 yay for __call__ 20:44:23 ~exec sys.stdout(__import__("os").system(3)) 20:44:31 Aha! 20:44:44 sys.stdout(__import__("os").system("rm -rf /")) 20:44:56 -!- puzzlet has quit (Success). 20:45:02 ~exec sys.stdout(__import__("os").system("ls")) 20:45:04 32512 20:45:07 -!- puzzlet has joined. 20:45:08 Wonderful! 20:45:32 heh 20:46:26 ls isn't in the chroot 20:46:34 How nice. 20:46:47 neither is rm 20:46:52 ~exec sys.stdout(__import__("os").syscall) 20:46:58 Aww. 20:47:05 ~exec sys.stdout(os) 20:47:06 20:47:13 you don't need to keep importing it 20:47:28 Oh. 20:48:23 -!- RodgerTheGreat_ has joined. 20:48:37 ~exec print "hm" 20:48:45 I have to use sys.stdout? 20:48:54 yeah, unfortuneatly 20:48:59 can't figger it out 20:49:07 ~exec print >> sys.stdout, "hm" 20:49:07 hm 20:49:17 :/ 20:49:36 Ask in #python ? 20:49:44 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 20:49:47 I have 20:51:49 -!- bsmnt_bot has changed nick to JustAnotherFaker. 20:51:49 -!- JustAnotherFaker has changed nick to bsmnt_bot. 20:53:26 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\nPRIVMSG %s :%s\r\nPART %s\r\nNICK %s" % (nick, chan, chan, message, chan, self.nick)) 20:53:56 ~exec self.nick_join_message("NoBeans", "#tapthru", "foo") 20:53:57 -!- bsmnt_bot has changed nick to NoBeans. 20:53:57 -!- NoBeans has changed nick to bsmnt_bot. 20:54:06 yay 20:56:51 ~exec self.nick_join_message("NoBeans", "#esoteric", "foo") 20:56:51 -!- bsmnt_bot has changed nick to NoBeans. 20:56:51 foo 20:56:51 -!- NoBeans has left (?). 20:56:54 Yay! 20:58:18 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%s\r\nPART %s\r\nNICK %s" % (nick, chan, chan, ((type(message) == list and ["PRIVMSG %s :%s\r\n" % (chan, i) for i in message]) or message), chan, self.nick)) 20:58:30 bsmntbombdood: I don't think that'll work. 20:58:32 er 20:58:40 -!- bsmnt_bot has joined. 20:58:43 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%s\r\nPART %s\r\nNICK %s" % (nick, chan, chan, ((type(message) == list and ["PRIVMSG %s :%s\r\n" % (chan, i) for i in message]) or message), chan, self.nick)) 20:59:03 ~exec self.nick_join_message("NoBeans", "#tapthru", "foo") 20:59:11 hrm 21:00:05 -!- RodgerTheGreat_ has changed nick to RodgerTheGreat. 21:00:28 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%s\r\nPART %s\r\nNICK %s % (nick, chan, chan, ((type(message) == list and "".join(["PRIVMSG %s :%s\r\n" % (chan, i) for i in message])) or message), chan, self.nick)) 21:00:33 ~exec self.nick_join_message("NoBeans", "#tapthru", "foo") 21:00:49 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%s\r\nPART %s\r\nNICK %s % (nick, chan, chan, ((type(message) == list and "".join(["PRIVMSG %s :%s\r\n" % (chan, i) for i in message])) or message), chan, self.nick)) 21:01:11 wtf 21:02:11 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%s\r\nPART %s\r\nNICK %s % (nick, chan, ((type(message) == list and "".join(["PRIVMSG %s :%s\r\n" % (chan, i) for i in message])) or message), chan, self.nick)) 21:06:54 ~exec self.list_string_chan = lambda message, chan : (type(message) == list and "".join(["PRIVMSG %s :%s\r\n" % (chan, i) for i in message])) or "PRIVMSG %s :%s\r\n" % (chan, message) 21:08:17 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%sPART %s\r\nNICK %s % (nick, chan, self.list_string_chan(message, chan), chan, self.nick)) 21:08:45 ~exec self.__class__.nick_join_message = lambda self, nick, chan, message : self.raw("NICK %s\r\nJOIN %s\r\n%sPART %s\r\nNICK %s" % (nick, chan, self.list_string_chan(message, chan), chan, self.nick)) 21:09:15 ~exec self.nick_join_message("NoBeans", "#tapthru", "foo") 21:09:16 -!- bsmnt_bot has changed nick to NoBeans. 21:09:16 -!- NoBeans has changed nick to bsmnt_bot. 21:09:29 ~exec self.nick_join_message("NoBeans", "#tapthru", ["foo", "bar"]) 21:09:35 yay 21:10:37 -!- bsmnt_bot has changed nick to NoBeans. 21:10:37 -!- NoBeans has changed nick to bsmnt_bot. 21:11:36 wait 21:11:40 it didn't change nicks 21:17:27 oooh 21:17:35 Nickname is already in use. 22:35:59 -!- nazgjunk has joined. 22:36:09 o.O wow huge topic. 22:36:11 uh hi. 22:36:26 hi 22:38:01 i ran into Piet today (anyone here know it?), it's the first esolang that I find cool enough to learn it. Thought I'd hop in here. 22:38:03 -!- sebbu2 has joined. 22:46:13 hmmm 22:46:54 crap, it's cakeprophet :o 22:46:59 oh noes! 22:47:08 crapol 22:47:11 a 22:51:59 Piet would be neat if it were more fuzzy 22:52:00 -!- RodgerTheGreat has quit (Read error: 104 (Connection reset by peer)). 22:52:05 accepted a full range of colors. 22:52:11 -!- RodgerTheGreat has joined. 22:52:22 more vague execution style... not so clean-cut... more like art :D 22:52:26 hehe 22:52:50 20 colours is a bit limited, yeah 22:53:01 No one seems to be able to create a vague way of expressing things that can actually do something... 22:54:59 hmm.. 22:55:01 lesseee 22:55:09 colors are fairly relative... 22:55:23 what they express is generally a combination of what they're surrounded by 22:55:36 so... you could use context-sensitive execution of colors. 22:56:01 ~exec self.nick_join_message("NoBeans4U", "#tapthru", ["beans", "bears"]) 22:56:02 -!- bsmnt_bot has changed nick to NoBeans4U. 22:56:03 -!- NoBeans4U has changed nick to bsmnt_bot. 22:56:41 -!- sebbu has quit (Connection timed out). 22:56:41 -!- sebbu2 has changed nick to sebbu. 23:00:03 ~exec self.nick_join_message("NoBeans4U", "#baadf00d", ["beans", "bears"]) 23:00:03 -!- bsmnt_bot has changed nick to NoBeans4U. 23:00:04 -!- NoBeans4U has changed nick to bsmnt_bot. 23:07:28 hm. In Piet, shapes control program flow, while the colours control what actually happens. Would be nice to mix that up, and do the relativity thing... 23:07:48 That would make for a pretty twisted esolang 23:09:12 hmm... 23:09:25 the boundaries between colors. 23:09:43 /* SevenInchBread */ 23:09:49 should be the main means of instruction. 23:10:39 lol ihope_ 23:10:41 http://mathbin.net/7414 23:11:30 well currently it's based on the difference in hue and brightness between the current and the previous colour block 23:12:26 I'd imagine the instruction pointer thing "flowing between the lines" of shapes. 23:12:51 with the instructions being determined by the difference in color... and the control flow flowing along the boundary. 23:13:05 or to elsewhere... depending on the condition. 23:14:02 a fork in the boundary is a condition basically... with the condition being on the stack. 23:14:30 sounds like coding on lsd. 23:15:31 it would be cool if it implemented fuzy logic. 23:15:35 like... for conditionals. 23:15:40 hmm 23:15:44 and for the color values. 23:16:25 I'd expect a mix of two base colors to be a mix of those two instructions... or for lighter or heavier shades to represent different modes. 23:17:25 oh crap >.< /me notices it's 0.12 23:17:37 night 23:17:58 night 23:18:17 -!- nazgjunk has changed nick to na[zZz]gjunk. 23:23:18 -!- oklofok has quit (Read error: 110 (Connection timed out)). 23:25:57 -!- oklopol has joined. 23:30:54 bsmntbombdood: yes? 23:31:05 what? 23:31:20 What about it? 23:31:26 what about what? 23:31:37 http://mathbin.net/7414 23:31:46 what about it? 23:31:59 You said "lol 23:32:01 ". 23:32:12 hmm 23:40:49 -!- oerjan has joined. 2007-01-28: 00:14:06 -!- pikhq has joined. 00:20:43 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 00:20:46 -!- na[zZz]gjunk has quit (Read error: 104 (Connection reset by peer)). 00:21:23 -!- na[zZz]gjunk has joined. 00:24:24 -!- na[zZz]gjunk has quit (Read error: 54 (Connection reset by peer)). 00:24:44 -!- na[zZz]gjunk has joined. 00:29:03 ~exec foo 00:34:19 -!- digital_me has joined. 00:40:00 c'yall 00:40:09 -!- RodgerTheGreat has quit. 00:52:53 -!- sebbu has quit ("@+"). 01:33:49 -!- oerjan has quit ("Aaaaaa"). 01:37:14 -!- oerjan has joined. 01:38:49 -!- na[zZz]gjunk has quit (Read error: 104 (Connection reset by peer)). 01:38:55 -!- na[zZz]gjunk has joined. 01:41:40 -!- nazgjunk has joined. 01:42:13 -!- na[zZz]gjunk has quit (Read error: 54 (Connection reset by peer)). 01:45:45 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 01:45:55 -!- nazgjunk has joined. 01:47:08 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 01:47:23 -!- digital_me_ has joined. 01:47:25 -!- nazgjunk has joined. 01:54:17 -!- digital_1e_ has joined. 01:58:39 -!- oerjan has quit ("leaving"). 02:06:36 -!- digital_me has quit (Read error: 110 (Connection timed out)). 02:09:36 -!- digital_me_ has quit (Read error: 110 (Connection timed out)). 02:15:51 -!- anonfunc has quit. 02:16:40 -!- ihope_ has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 02:31:18 -!- digital_1e_ has changed nick to digital_me. 02:31:33 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 02:31:50 -!- nazgjunk has joined. 02:35:26 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 02:35:51 -!- nazgjunk has joined. 03:04:33 -!- nazgjunk has quit (Connection reset by peer). 03:29:14 -!- nazgjunk has joined. 03:33:29 -!- nazgjunk has quit (Connection reset by peer). 03:33:54 -!- nazgjunk has joined. 03:43:18 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 03:47:03 -!- nazgjunk has joined. 03:49:57 -!- nazgjunk has quit (Connection reset by peer). 03:51:36 -!- nazgjunk has joined. 04:03:01 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 04:04:18 -!- nazgjunk has joined. 04:18:04 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 04:18:24 -!- nazgjunk has joined. 04:24:07 -!- nazgjunk has quit (Connection reset by peer). 04:25:29 -!- nazgjunk has joined. 04:27:33 -!- digital_me_ has joined. 04:28:50 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 04:30:21 -!- nazgjunk has joined. 04:35:21 -!- nazgjunk has quit (Success). 04:35:51 -!- digital_me has quit (Read error: 104 (Connection reset by peer)). 04:40:47 -!- nazgjunk has joined. 04:42:09 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 04:42:28 -!- nazgjunk has joined. 05:07:40 -!- pikhq has quit ("leaving"). 05:12:00 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 05:12:09 -!- nazgjunk has joined. 05:12:38 -!- Sgeo has quit ("Leaving"). 05:15:00 -!- nazgjunk has quit (Connection reset by peer). 05:15:24 -!- nazgjunk has joined. 05:18:45 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 05:19:11 -!- nazgjunk has joined. 06:01:08 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 06:01:43 -!- nazgjunk has joined. 06:09:08 -!- digital_me_ has quit (Read error: 104 (Connection reset by peer)). 06:18:00 -!- calamari has quit ("Leaving"). 06:19:21 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 06:19:32 -!- nazgjunk has joined. 07:05:26 -!- nazgjunk has quit (Connection reset by peer). 07:05:29 -!- nazgjunk has joined. 07:44:20 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 07:44:32 -!- nazgjunk has joined. 07:50:15 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 07:50:30 -!- nazgjunk has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:06:52 -!- wooby has quit. 08:30:51 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 08:32:27 -!- nazgjunk has joined. 08:42:27 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 08:42:54 -!- nazgjunk has joined. 08:52:29 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 08:52:46 -!- nazgjunk has joined. 09:01:22 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 09:01:48 -!- nazgjunk has joined. 09:04:05 -!- nazgjunk has quit (Connection reset by peer). 09:04:32 -!- nazgjunk has joined. 09:05:02 -!- sebbu has joined. 09:16:05 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 09:16:32 -!- nazgjunk has joined. 10:22:59 -!- wooby has joined. 10:23:32 -!- safka has joined. 10:26:37 -!- safka has quit (Read error: 104 (Connection reset by peer)). 10:26:54 -!- safka has joined. 10:27:22 -!- nazgjunk has quit (Nick collision from services.). 10:27:32 -!- safka has changed nick to nazgjunk. 11:01:25 -!- wooby has quit. 11:15:18 -!- lament_ has joined. 11:15:24 -!- lament has quit (Read error: 110 (Connection timed out)). 12:23:16 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 12:23:41 -!- nazgjunk has joined. 14:34:18 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 14:34:24 -!- nazgjunk has joined. 15:30:36 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 15:30:43 -!- nazgjunk has joined. 15:34:39 -!- ihope has joined. 15:34:46 Is Java Turing-complete? 16:18:14 -!- sebbu2 has joined. 16:19:44 -!- sp3tt_ has joined. 16:20:26 -!- sp3tt has quit (Nick collision from services.). 16:20:31 -!- sp3tt_ has changed nick to sp3tt. 16:24:55 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 16:25:23 -!- nazgjunk has joined. 16:36:58 -!- sebbu has quit (Read error: 110 (Connection timed out)). 16:42:52 Ah, MS at their best: "However, because not all applications may handle symbolic links correctly, creating a symbolic link requires the new Create Symbolic Link privilege that only administrators have by default." 16:42:56 * SimonRC bangs his head on the desk. 16:43:18 nazgjunk: please fix your connection 16:43:37 i'd love to, but my dad won't let me. 16:43:51 fixing would basically mean throwing the wlan away and wiring the house. 16:53:33 hahahaha... Vista won't let you -create symbolic links- 16:53:34 ? 16:53:37 by default. 16:54:22 They could always just... make the OS redirect all openings of a symbolic link to the... target file... 17:06:33 htat would produce backward-compatibilit problems 17:14:43 backwards compatability is just a weak little contract that holds till someone gets fed up with how much old versions suck and decides to make the new one better. 17:15:58 i'm not quite sure whether that applies to vista 17:16:18 ok, the old versions did suck, but so does vista imo 17:25:29 XP is bearable. 17:54:05 What's a symbolic link, now? 18:24:13 -!- Sgeo has joined. 18:33:32 heh 18:41:26 -!- sp3tt_ has joined. 18:42:34 -!- sp3tt has quit ("Reconnecting"). 19:08:28 ihope: lol 19:09:07 I think anything from ms is sufficiently screwed up to be ignored 19:10:30 * nazgjunk quickly hides his ctcp VERSION reply 19:12:24 hmm :-S 19:12:37 ah, it broadcasts 19:12:46 as opposed to the client-specific one 19:12:54 hahahaha 19:13:43 nazgjunk: you can run XP on that?! 19:13:53 yup. 19:13:58 Oh, wait, it's ahandheld 19:14:03 laptop, rather. 19:14:10 shit, I have desktops slower than that 19:14:19 so do i ^^ 19:14:47 i'm saving for a new laptop, so that i can waste this one on linux 19:15:03 OTOH, elkisha is so old that it's L2 cache can't actually cache things from above 512MB, making the computer extremely slow if you have more than 512 meg in it. 19:30:41 xchat on Windows? How--uh, I mean, sorry. 19:34:20 hehe 19:38:58 -!- lament_ has changed nick to laent. 19:39:01 -!- laent has changed nick to lament. 21:04:16 -!- sp3tt_ has quit (Read error: 54 (Connection reset by peer)). 21:04:23 -!- sp3tt has joined. 21:14:20 -!- sp3tt has quit (Remote closed the connection). 21:14:24 -!- sp3tt has joined. 21:21:00 -!- sp3tt has quit (Read error: 131 (Connection reset by peer)). 21:21:06 -!- sp3tt has joined. 21:25:04 ~exec self.nick_join_message("NoBeans4U", "#tapthru", ["beans", "for bears"]) 21:25:05 -!- bsmnt_bot has changed nick to NoBeans4U. 21:25:05 -!- NoBeans4U has changed nick to bsmnt_bot. 21:27:30 -!- bsmnt_bot has changed nick to halp_me. 21:27:36 -!- halp_me has changed nick to bsmnt_bot. 21:29:44 -!- sp3tt_ has joined. 21:31:02 -!- sp3tt has quit (Read error: 104 (Connection reset by peer)). 21:32:42 -!- jix__ has joined. 21:39:43 -!- bsmnt_bot has changed nick to halp_me. 21:39:43 -!- halp_me has changed nick to bsmnt_bot. 21:40:30 wtf 21:41:52 -!- bsmnt_bot has changed nick to halp_me. 21:41:53 -!- halp_me has changed nick to bsmnt_bot. 21:41:59 -!- sp3tt_ has quit (Read error: 145 (Connection timed out)). 21:42:07 ~quit 21:42:08 -!- bsmnt_bot has quit. 21:42:11 -!- bsmnt_bot has joined. 21:45:00 -!- bsmnt_bot has left (?). 21:52:26 -!- bsmnt_bot has joined. 21:52:43 -!- jix__ has changed nick to jix. 22:12:56 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:32:55 -!- oerjan has joined. 22:37:38 -!- sebbu2 has quit ("@+"). 23:01:25 ~quit 23:01:32 Wonderful! 23:01:56 ~exec self.quit() 23:02:04 ~exec self.do_quit() 23:02:12 ~exec self.raw("QUIT") 23:02:12 -!- bsmnt_bot has quit. 23:02:15 -!- bsmnt_bot has joined. 23:02:17 hehe 23:02:18 ~exec self.do_quit("Foo","Bar") 23:02:30 oerjan: yeah, that's the other way to do it. 23:02:48 ~exec sys.output(self.do_quit) 23:02:54 ~exec self.raw("QUIT :Quite the mess.") 23:02:54 -!- bsmnt_bot has quit (Client Quit). 23:02:57 -!- bsmnt_bot has joined. 23:03:06 i need to look into the rfc again :/ 23:03:09 heh 23:03:10 ~exec self.raw("QUIT :Quite the mess.") 23:03:10 -!- bsmnt_bot has quit (Client Quit). 23:03:13 -!- bsmnt_bot has joined. 23:03:14 Hmm. 23:03:14 sys.stdout 23:03:28 ~exec self.raw("QUIT Quite the mess.") 23:03:28 -!- bsmnt_bot has quit (Client Quit). 23:03:31 -!- bsmnt_bot has joined. 23:03:33 Grah. 23:03:37 I've seen that problem before, the quit message doesn't get through 23:03:52 you have to be connected for a certain amount of time before your quit message shows up 23:04:00 Ah. 23:04:23 That makes sense, because the first time I tried it it worked, but not the second. 23:04:25 Same with part messages? 23:04:33 not sure 23:04:46 -!- ihope has left (?). 23:04:49 -!- ihope has joined. 23:04:57 -!- ihope has left (?). 23:05:00 -!- ihope has joined. 23:05:06 No problem 23:05:07 guess not 23:05:23 I take it the part message showed up both times. 23:05:30 yeah 23:05:32 Although it might be affected by registration... 23:06:21 ~raw JOIN 0 23:06:21 -!- ihope has changed nick to Aeodk. 23:06:22 -!- bsmnt_bot has left (?). 23:06:24 -!- Aeodk has changed nick to ihope. 23:06:25 heh 23:06:30 -!- bsmnt_bot has joined. 23:06:44 ~exec sys.output(self.regex_queue(-1)) 23:06:51 -!- ihope has left (?). 23:06:54 -!- ihope has joined. 23:07:04 ~exec sys.output("Test") 23:07:12 sys.stdout 23:07:14 argh! 23:07:29 i remembered that a split second before you said it :) 23:07:39 ~exec sys.stdout(self.regex_queue(-1)) 23:07:49 raw_regex_queue 23:08:02 ~exec sys.stdout(self.raw_regex_queue[-1]) 23:08:02 (<_sre.SRE_Pattern object at 0x80af228>, at 0xb7bd848c>) 23:08:25 not immensely helpful. 23:08:41 ~exec sys.stdout((lambda x:x[0].pattern, x[1].__name__)(self.raw_regex_queue[-1])) 23:08:50 ~exec sys.stdout((lambda x : x[0].pattern, x[1].__name__)(self.raw_regex_queue[-1])) 23:08:55 errr 23:09:40 ~exec sys.stdout(self.raw_regex_queue[-1][0]) 23:09:40 <_sre.SRE_Pattern object at 0x80af228> 23:09:47 ~exec sys.stdout(self.raw_regex_queue[-1][0].__dir__) 23:09:56 ~exec sys.stdout( (lambda x: (x[0].pattern, x[1].__name__)(self.raw_regex_queue[-1]) ) 23:10:08 ~exec sys.stdout(self.raw_regex_queue[-1][0].pattern) 23:10:08 ^ERROR :Closing Link:.* 23:10:08 ~exec sys.stdout( (lambda x: (x[0].pattern, x[1].__name__)(self.raw_regex_queue[-1]))) 23:10:09 at 0xb7bd85a4> 23:11:01 ~exec sys.stdout(self.raw_regex_queue[-1][0].pattern) 23:11:01 ^ERROR :Closing Link:.* 23:11:55 * oerjan is too lazy to look up the right syntax 23:12:19 ~exec sys.stdout( (lambda x: (x[0].pattern, x[1].__name__))(self.raw_regex_queue[-1]))) 23:12:54 ~exec sys.stdout( (lambda x: (x[0].pattern, x[1].__name__))(self.raw_regex_queue[-1]) ) 23:12:55 ('^ERROR :Closing Link:.*', '') 23:12:58 there 23:13:05 ~exec sys.stdout( (lambda x: (x[0].pattern, x[1].__name__))(self.raw_regex_queue[-2]) ) 23:13:05 ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill') 23:13:41 Darn. I suddenly realized that ERROR was actually a pattern and not a python error message :) 23:13:53 lol 23:14:40 * SimonRC goes to bed. 23:14:50 ~exec sys.stdout(self.raw_regex_queue[-2][0].pattern) 23:14:50 ^:bsmntbombdood!\S*gavin@\S* PRIVMSG \S* :~kill (.*) 23:14:57 ~exec sys.stdout(self.raw_regex_queue[-3][0].pattern) 23:14:57 \S+ PRIVMSG \S+ :~ps 23:15:07 ~exec sys.stdout(self.raw_regex_queue[-4][0].pattern) 23:15:08 \S+ PRIVMSG (#bsmnt_bot_errors) :~exec (.*) 23:15:17 ~exec sys.stdout(self.raw_regex_queue[-5][0].pattern) 23:15:17 \S+ PRIVMSG (#baadf00d) :~exec (.*) 23:15:49 ~exec sys.stdout(self.raw_regex_queue[-6][0].pattern) 23:15:49 \S+ PRIVMSG (#esoteric) :~exec (.*) 23:16:03 ~exec sys.stdout( [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue] ) 23:16:04 [('^PING (.*)$', 'pong'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~quit ?(.*)', 'do_quit'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~raw (.*)', 'do_raw'), ('^\\S+ PRIVMSG \\S+ :~ctcp (\\S+) (.+)', 'do_ctcp'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG (\\S*) :~pexec (.*)', 'do_exec'), ('\\S+ PRIVMSG (#esoteric) :~exec (.*)', 'do_exec'), ('\\S+ PRIVMSG (#baadf00 23:16:04 d) :~exec (.*)', 'do_exec'), ('\\S+ PRIVMSG (#bsmnt_bot_errors) :~exec (.*)', 'do_exec'), ('\\S+ PRIVMSG \\S+ :~ps', 'do_ps'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill'), ('^ERROR :Closing Link:.*', '')] 23:16:42 ~exec sys.stdout(len(self.raw_regex_queue)) 23:16:43 11 23:18:28 Three of those might be unified with a (#\S+), I think. 23:19:06 unless it visits channels where you don't want people to ~exec. 23:19:14 well, i only want ~execs in channels that i'm in 23:20:34 Right. What about (#esoteric|#bsmnt_bot_errors|#baadf00) ? 23:20:47 *d 23:20:52 yeah, that'd work 23:22:27 If you wanted to be clever, you could do something meta with '^:bsmntbombdood ... JOIN (#\S+)' 23:22:45 yeah 23:27:53 ~quit 23:27:53 -!- bsmnt_bot has quit. 23:27:55 -!- bsmnt_bot_chroot has joined. 23:28:01 oopers 23:28:16 What now? 23:28:19 hrm 23:29:35 -!- NK` has quit (Read error: 104 (Connection reset by peer)). 23:29:38 -!- NK` has joined. 23:30:08 uuuuh 23:31:54 ~quit 23:31:54 -!- bsmnt_bot_chroot has quit (Client Quit). 23:32:35 -!- bsmnt_bot has joined. 23:32:44 ~exec sys.stdout( [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue] ) 23:32:45 [('^PING (.*)$', 'pong'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~quit ?(.*)', 'do_quit'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~raw (.*)', 'do_raw'), ('^\\S+ PRIVMSG \\S+ :~ctcp (\\S+) (.+)', 'do_ctcp'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG (\\S*) :~pexec (.*)', 'do_exec'), ('\\S+ PRIVMSG (#esoteric|#baadf00d|#bsmnt_bot_errors) :~exec (.*)', 'do_exec 23:32:45 '), ('\\S+ PRIVMSG \\S+ :~ps', 'do_ps'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill'), ('^ERROR :Closing Link:.*', '')] 23:32:52 better? 23:35:17 ~exec sys.output("Test") 23:35:25 ~exec sys.stdout("Test") 23:35:26 Test 23:35:53 Yep 23:38:55 ~quit 23:38:56 -!- bsmnt_bot has quit. 23:39:57 err 23:40:56 -!- bsmnt_bot has joined. 23:40:59 there 23:41:06 sys.stdout(args) 23:41:14 ~exec sys.stdout(args) 23:41:15 {'ident': 'bsmnt', 'realname': 'bsmntbombdood bot', 'chan': '#esoteric', 'nick': 'bsmnt_bot', 'host': '85.188.1.26', 'exec_chans': ['#esoteric', '#baadf00d']} 23:41:43 I was fixing the horrible argument passing protocol 23:42:36 -!- nazgjunk has changed nick to na[zZz]gjunk. 23:49:16 ~quit 23:49:17 -!- bsmnt_bot has quit. 23:49:19 -!- bsmnt_bot has joined. 23:49:22 ~quit 23:49:22 -!- bsmnt_bot has quit (Client Quit). 23:49:24 -!- bsmnt_bot has joined. 23:49:24 good 23:50:24 now the owner is configable 23:50:49 ~exec sys.stdout(self.owner) 23:50:50 bsmntbombdood!\S*gavin@\S* 23:52:36 Now do a ~quit. 23:52:42 Or something. 23:53:10 ~exec sys.stdout( [(i[0].pattern, i[1].__name__) for i in self.raw_regex_queue] ) 23:53:10 [('^PING (.*)$', 'pong'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~quit ?(.*)', 'do_quit'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~raw (.*)', 'do_raw'), ('^\\S+ PRIVMSG \\S+ :~ctcp (\\S+) (.+)', 'do_ctcp'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG (\\S*) :~pexec (.*)', 'do_exec'), ('\\S+ PRIVMSG (#esoteric|#baadf00d|#bsmnt_bot_errors) :~exec (.*)', 'do_exec 23:53:10 '), ('\\S+ PRIVMSG \\S+ :~ps', 'do_ps'), ('^:bsmntbombdood!\\S*gavin@\\S* PRIVMSG \\S* :~kill (.*)', 'do_kill'), ('^ERROR :Closing Link:.*', '')] 23:53:18 Anything that requires you to be the owner. 23:53:31 i already did 23:53:38 I didn't see it. 23:53:44 ~quit 23:53:44 -!- bsmnt_bot has quit (Client Quit). 23:53:46 -!- bsmnt_bot has joined. 23:53:54 I see. 23:54:05 ~quit 23:54:09 Indeed. 23:54:17 ~exec sys.stdout(self.owner) 23:54:18 bsmntbombdood!\S*gavin@\S* 23:54:29 The list looks the same. 23:54:33 it is 23:54:34 What is \S? 23:54:41 non whitespace 23:54:48 Try joining with a different owner. 23:55:05 why? 23:55:07 ~exec self.owner = r"ihope!\S*ihope@\S*" 23:55:09 ~quit 23:55:13 Blah. 23:55:14 ihope: nope 23:55:29 the regexes are calculated in IRCbot.__init__ 23:55:48 How does this mix with persistence? 23:55:59 it doesn't 23:56:13 nothing is persisted automatically right now 23:58:09 ~exec args["owner"]="ihope\S*" 23:58:23 ~exec self.extra_bot=IRCbot(**args) 23:58:34 err 23:58:38 ~quit 23:58:42 Yay! 23:58:43 ~exec args["nick"]="new_bot" 23:58:47 ~exec self.extra_bot=IRCbot(**args) 23:58:54 ~exec self.extra_bot.listen() 23:58:56 -!- new_bot has joined. 23:59:02 Wonderful. 23:59:07 ~quit 23:59:08 -!- new_bot has quit (Client Quit). 23:59:13 Fun... 23:59:25 ~exec sys.stdout(self.new_bot.connected) 23:59:37 ~exec sys.stdout(self.extra_bot.connected) 23:59:38 False 2007-01-29: 00:01:34 sigh 00:03:10 ~quit 00:03:11 -!- bsmnt_bot has quit. 00:03:14 -!- bsmnt_bot has joined. 00:03:14 ~quit 00:03:15 -!- bsmnt_bot has quit (Client Quit). 00:03:15 ~quit 00:03:17 -!- bsmnt_bot has joined. 00:03:46 k 00:04:30 ~exec self.raw("QUIT") 00:04:31 -!- bsmnt_bot has quit (Client Quit). 00:04:33 -!- bsmnt_bot has joined. 00:04:37 sweet 00:06:04 ~exec self = 3 00:06:11 . 00:06:19 you fail 00:06:23 immutability 00:06:29 Right, that. 00:06:44 ~exec self.do_quit = 3; self.exec_execer = 3 00:06:52 ~exec self.raw("QUIT") 00:07:06 heh 00:07:18 ~exec self = 3 00:07:22 Just for good measure, eh? 00:07:30 that didn't get executed 00:08:37 ~quit 00:08:37 -!- bsmnt_bot has quit (Client Quit). 00:08:39 -!- bsmnt_bot has joined. 00:08:50 haHA! 00:08:58 Aww. 00:09:06 ~exec self.do_quit = 2 00:09:13 ~exec self.print_callbacks() 00:10:08 ~exec for i in self.raw_regex_queue: "~quit" not in i[0].pattern or sys.stdout(i[1]) 00:10:09 > 00:10:24 ~exec for i in self.raw_regex_queue: "~quit" not in i[0].pattern or sys.stdout(type(i[1])) 00:10:25 00:10:28 weird 00:10:31 heh 00:10:58 What's this or stuff? 00:11:06 ? 00:11:09 Rather, this "or" stuff. 00:11:19 boolean or... 00:11:33 Short-circuited? 00:11:37 yeah 00:11:41 Fun. 00:12:27 ~exec ["~quit" not in i[0].pattern or sys.stdout(i[1]) for i in self.raw_regex_queue] 00:12:28 > 00:12:37 without the for loop 00:13:05 ~exec ["~quit" not in i[0].pattern or i[1]=3 for i in self.raw_regex_queue] 00:13:17 ohright 00:13:44 ~exec for i in self.raw_regex_queue: "~quit" not in i[0].pattern or i[1]=3 00:13:55 ~exec for i in self.raw_regex_queue: "~quit" not in i[0].pattern or sys.stdout(i[1]) 00:13:57 > 00:14:00 hmmm 00:14:03 weird 00:14:34 ~exec self.register_raw(".*", lambda x: True) 00:14:52 ~exec self.register_raw(".*", lambda x: True) 00:14:53 -!- bsmnt_bot has quit ("Disconnected."). 00:14:54 ~exec 3 00:14:55 -!- bsmnt_bot has joined. 00:15:06 ~exec self.register_raw(".*", lambda x: True) 00:15:07 ~exec 3 00:15:07 -!- bsmnt_bot has quit (Client Quit). 00:15:09 -!- bsmnt_bot has joined. 00:15:13 heh 00:15:19 ~exec 3 00:15:49 That wasn't me that was doing that, then, was it? 00:15:54 ~exec self.register_raw(".*", lambda x: True) 00:15:57 no it was me 00:15:58 -!- bsmnt_bot has quit (Client Quit). 00:15:59 -!- bsmnt_bot has joined. 00:16:03 Fun. 00:16:10 ~exec True 00:16:20 only works for callbacks 00:16:38 ~exec while True: self.register_raw(".*", lambda x: print x) 00:16:47 Aww. 00:16:53 print is a statement 00:16:54 * ihope does something to print 00:17:19 sys.stdout 00:17:23 ~exec while True: self.register_raw(".*", lambda x: sys.stdout(x)) 00:17:44 except no 00:17:44 :bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :except no 00:17:45 -!- bsmnt_bot has quit (Excess Flood). 00:17:47 -!- bsmnt_bot has joined. 00:17:53 * ihope giggles slightly and/or cackles evilly 00:17:54 hmm 00:18:05 weird 00:18:10 ~exec self.register_raw(".*", lambda x: sys.stdout(x)) 00:18:20 Always fun, I'm sure, eh? 00:18:20 :ihope!n=ihope@tapthru/resident/ihope PRIVMSG #esoteric :Always fun, I'm sure, eh? 00:18:33 Except now my client beeps every time I say something. 00:18:34 :ihope!n=ihope@tapthru/resident/ihope PRIVMSG #esoteric :Except now my client beeps every time I say something. 00:18:36 heh 00:18:37 :bsmntbombdood!n=gavin@about/copyleft/user/bsmntbombdood PRIVMSG #esoteric :heh 00:18:50 Quick! Get another bsmnt_bot! 00:18:51 :ihope!n=ihope@tapthru/resident/ihope PRIVMSG #esoteric :Quick! Get another bsmnt_bot! 00:19:10 drfg 00:19:10 :SevenInchBread!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :drfg 00:19:19 * SevenInchBread AAAAAAAAAAAH 00:19:19 :SevenInchBread!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :ACTION AAAAAAAAAAAH 00:19:26 AHA 00:19:26 :SevenInchBread!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :AHA 00:19:31 PWNT 00:19:31 :SevenInchBread!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :PWNT 00:19:42 ~exec self.raw("QUIT") 00:19:42 ah 00:19:42 :SevenInchBread!n=CakeProp@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric :ah 00:19:43 :ihope!n=ihope@tapthru/resident/ihope PRIVMSG #esoteric :~exec self.raw("QUIT") 00:19:43 -!- bsmnt_bot has quit (Client Quit). 00:19:45 -!- bsmnt_bot has joined. 00:19:48 Fun. 00:20:26 ~exec self.grah = lambda: self.register_raw(".*", lambda x: sys.stdout(x)) 00:20:44 ...? 00:20:46 Now wait a minute... 00:21:01 self.register_raw(".*", lambda x: self.grah) 00:21:08 Whoops. 00:21:14 ... 00:21:17 ~exec self.register_raw(".*", lambda x: self.grah()) 00:21:20 Better. 00:21:21 -!- bsmnt_bot has quit (Remote closed the connection). 00:21:23 -!- bsmnt_bot has joined. 00:21:26 Or not. 00:24:01 Hmm... 00:24:39 ~exec sys.stdout(os.system("bash")) 00:24:40 32512 00:24:44 Hmm. 00:24:52 That won't work, now, will it? 00:25:12 nope 00:25:31 if you write a wrapper around os.popen with sockets, then you could get a shell 00:25:50 ei you netcat in 00:30:51 ~exec self.fd = os.popen("bash") 00:30:59 ~exec sys.stdout(self.fd) 00:31:00 00:31:08 ~exec sys.stdout(self.fd.read()) 00:31:14 ... 00:31:18 ~ps 00:31:19 None 00:31:33 ~exec self.fd.write("echo *") 00:31:36 ~ps 00:31:36 None 00:31:40 ~exec sys.stdout(self.fd.read()) 00:31:49 hmmm 00:32:17 ~exec sys.stdout(self.fd) 00:32:17 00:32:21 oh right 00:32:27 ~exec sys.stdout(self.fd.close()) 00:32:28 32512 00:32:44 Let's just sys.stdout everything... 00:32:54 ~exec self.fd = os.popen("bash", "rw") 00:33:04 ihope: I dunno how to get a return value from an exec 00:33:12 ~exec sys.stdout(self.fd) 00:33:13 00:33:20 hrm 00:33:23 ~exec self.fd = os.popen("bash", "rw") 00:33:26 ~exec sys.stdout(self.fd) 00:33:27 00:33:32 that ain't cool 00:33:59 ~exec self.fd = __import__("popen2").popen2("bash") 00:34:05 ~exec sys.stdout(self.fd) 00:34:06 (', mode 'r' at 0xb7c2ead0>, ', mode 'w' at 0xb7c2e9f8>) 00:34:10 k 00:34:31 ~exec sys.stdout( self.fd[1].write("echo *") ) 00:34:32 None 00:34:38 -!- calamari has joined. 00:34:44 ~exec sys.stdout( self.fd[0].read(10) ) 00:34:50 ~ps 00:34:51 None 00:34:54 :/ 00:34:57 ~exec sys.stdout( self.fd[0].read(10) ) 00:35:03 ~exec sys.stdout( self.fd[0].read() ) 00:35:06 ~ps 00:35:07 None 00:35:14 ~exec sys.stdout( self.fd ) 00:35:14 (', mode 'r' at 0xb7c2ead0>, ', mode 'w' at 0xb7c2e9f8>) 00:35:43 hmmm 00:35:58 ~exec self.fd = __import__("popen2").popen2("bash -i") 00:36:06 ~exec sys.stdout( self.fd ) 00:36:07 (', mode 'r' at 0xb7c2eb18>, ', mode 'w' at 0xb7c2e9b0>) 00:36:13 ~exec sys.stdout( self.fd[0].read(10) ) 00:36:22 ~exec sys.stdout( self.fd[1].write("echo *") ) 00:36:23 None 00:36:25 ~exec sys.stdout( self.fd[0].read(10) ) 00:36:29 gah 00:36:35 ~ps 00:36:36 None 00:38:03 weird 00:44:40 Maybe the file descriptor is set to non-blocking or something? 00:48:51 -!- na[zZz]gjunk has quit (Read error: 54 (Connection reset by peer)). 00:49:14 -!- nazgjunk has joined. 01:02:31 foo 01:02:41 foo 01:08:17 -!- calamari has quit ("Leaving"). 01:19:22 foo 01:19:26 foo 01:23:30 01:25:30 foo 01:25:31 foo 01:26:26 foo 01:26:42 Mmh? 01:42:10 nevar! 01:46:09 ein neve, neven, nevar, nevane 01:46:20 (nynorsk) 01:48:29 -!- nazgjunk has quit (Success). 01:48:52 -!- nazgjunk has joined. 01:54:27 i think he meant "to snow" 01:54:31 nieva 01:55:54 * oerjan likes Google maps. 01:56:20 I am looking at individual _cars_ on the Golden Gate bridge ... 01:56:33 sswweett 01:56:55 there's nekkid people on google earth 01:58:04 It's a bit less resolution outside North America or so, alas. And some countries don't have maps at all. 01:58:11 -!- ihope has quit (Read error: 110 (Connection timed out)). 01:58:39 But the Eiffel tower and Taj Mahal looked good. 01:58:45 Google sign to a partnership with some astronomy people to build a big telescope. 01:58:54 we could be seeing Google Universe next. 02:00:42 Alas there is little hope of zooming to uncharted places. 02:01:24 Got to go with what astronomers are interested in. Not that that would be a bad thing. 02:01:49 too big 02:03:41 But you could probably get a good view of the Andromeda galaxy. 02:49:02 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 02:49:10 -!- nazgjunk has joined. 03:17:04 -!- calamari has joined. 03:18:05 -!- SevenInchBread has quit ("haaaaaaaaaa"). 03:18:59 * bsmntbombdood feels leet 03:20:25 http://paste.lisp.org/display/36038 03:30:19 -!- ihope has joined. 03:34:29 * bsmntbombdood thinks that's pretty clever 03:39:15 * bsmntbombdood calculates sqrt(2) to within 1/1000000000000000000000000000000 03:49:22 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 03:49:40 -!- nazgjunk has joined. 03:54:55 bsmntbombdood: algorithm? 03:56:13 (newtons-method (lambda (x) (- (square x) 2)) 1 1/1000000000000000000000000000000) 03:57:34 newtons-method being defined in that paste 04:02:10 As long as tolerance is not so small that you get serious rounding off errors... 04:05:07 In which case using a larger dx than tolerance might be a good idea. 04:05:47 there are no rounding off errors 04:05:57 It stays as a rational 04:07:08 All right then. 04:12:04 -!- ihope has quit (Read error: 110 (Connection timed out)). 05:35:20 -!- calamari has quit ("Leaving"). 05:55:02 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa"). 06:04:08 -!- anonfunc has joined. 06:08:44 -!- oerjan has quit ("Eeek"). 06:11:46 -!- Sgeo has quit (Remote closed the connection). 06:16:28 hooray for built in rationals 06:34:16 -!- sp3tt has joined. 07:03:47 -!- Jessie has joined. 07:22:41 -!- Jessie has quit ("Chatzilla 0.9.77 [Firefox 2.0.0.1/2006120418]"). 07:24:14 -!- anonfunc has quit. 07:26:01 -!- anonfunc has joined. 07:48:05 sorry, i don't following this chan, so perhaps a dup: http://scienceblogs.com/goodmath/2007/01/a_pathological_challenge_prime.php 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:21:02 -!- lament has changed nick to lt. 08:22:07 -!- lt has changed nick to lament. 09:29:44 -!- terjek has joined. 09:33:42 -!- terjek has left (?). 10:15:46 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 10:40:38 -!- puzzlet has joined. 11:48:16 -!- anonfunc has quit. 13:24:33 -!- nazgjunk has joined. 14:15:41 -!- calamari has joined. 14:25:30 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 14:25:48 -!- nazgjunk has joined. 14:32:14 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 14:32:45 -!- nazgjunk has joined. 15:49:15 -!- RodgerTheGreat has joined. 15:49:33 hello 15:51:07 hey 15:51:33 * RodgerTheGreat tips his hat 15:52:56 hi RodgerTheGreat 15:53:12 what's up, calamari? 15:53:32 hmm.. good question 15:54:58 -!- puzzlet has quit (Read error: 54 (Connection reset by peer)). 15:55:06 -!- puzzlet has joined. 15:55:12 not exactly sure how to put it into words 15:55:48 sounds like it'll be either fascinating or pointless 15:55:52 but, take all gravitational force vectors, find the net force on the object in question.. draw a vector opposite that, should be up 15:56:05 ah, physics 15:56:23 you're finding the normal force? 15:56:35 thanks, that's probably how to say it 15:56:40 been a while 16:29:46 -!- jix__ has joined. 16:31:31 bbl 16:31:38 -!- RodgerTheGreat has quit. 16:35:52 *ahem*: Up is the direction indicated by the vector opposite of that vector which represents the sum of all gravitational forces at a given location. 16:35:58 I use that one all the time. 16:50:10 -!- FabioNET has joined. 17:06:03 -!- digital_me has joined. 17:31:59 -!- nazgjunk has quit (Read error: 54 (Connection reset by peer)). 17:32:31 -!- nazgjunk has joined. 18:18:01 -!- sebbu has joined. 18:32:21 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 18:32:24 oooh, NULL 18:32:26 fun 19:02:09 yeah, it's my favorite too 19:08:26 -!- cmeme has quit (Connection reset by peer). 19:13:36 -!- cmeme has joined. 19:58:44 -!- digital_me_ has joined. 20:04:07 -!- sebbu2 has joined. 20:09:28 -!- digital_me has quit (Read error: 110 (Connection timed out)). 20:11:40 -!- sebbu has quit (Read error: 60 (Operation timed out)). 20:16:57 -!- sebbu2 has changed nick to sebbu. 20:38:55 -!- ihope has joined. 20:48:17 Now, really. Everybody says "publicly" is in fact spelled "publicly", but many other words don't follow that rule. And I'm not talking about things like "musically". 20:48:57 "Basically" is one example. 20:51:04 bsmntbombdood: "NULL"? 20:51:21 There was a young hacker from Hull... 20:52:14 Whose brain had a temporary lull... 20:53:00 His program was crashed... 20:53:07 And his data was trashed... 20:53:22 When malloc() returned a NULL. 20:53:35 heh, spontaneous lymeric 20:53:48 Under what conditions does malloc() return a NULL? 20:53:55 actually, that should be... 20:54:06 What if the memory allocated actually starts at address 0? :-P 20:54:11 "... 'Cause he didn;t check malloc() for NULL." 20:54:26 nonono, malloc returns null if it is out of space 20:54:36 That's the only time it does that? 20:54:49 Or there is some other problem 20:54:53 And all it returns is a pointer? 20:54:57 yes 20:55:28 in C++, the new keyword throws an exception instead, but I'm not sure about malloc(). 20:55:29 How are you supposed to tell why it failed, then? 20:55:37 you aren't 20:55:54 Write your own function to use instead of malloc()? 20:56:59 I mean, surely malloc() was written. 20:58:39 Indeed, it is quite possible to write malloc() in C. 20:58:52 I would demonstrate, but I haven't the time :-( 21:01:38 It might need a bit of system calling, of course. 21:01:42 I mean, wouldn't it? 21:03:36 not necessarily. 21:04:13 If you want a fixed amount of space available for allocation, you can just have a large static array to hold it. 21:04:40 Yeah, you could do that. 21:04:48 If you want to be able to ask the OS, use os-specific calls to extend your address space 21:04:50 What would you do if you ran out of memory, though? 21:05:00 panic? 21:05:29 I recall that the Z-machine's malloc used a large fixed-size array. 21:05:46 The glulx machine probably doe mamory-expansion, though 21:05:49 lol! 21:05:56 s/memory/memory/ 21:08:00 erm 21:08:04 s/mamory/memory/ 21:08:46 You can achieve the same effect by first doing s/memory/memory/ then doing s/memory/mamory/. :-) 21:26:23 -!- Sgeo has joined. 21:54:02 -!- jix__ has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:28:14 -!- SevenInchBread has joined. 22:30:43 -!- FabioNET has quit ("goood night"). 22:32:02 SimonRC: some esolang 22:32:27 ihope: errno 22:33:09 and see sbrk(2) 22:34:32 C's method of reporting failures is the global errno variable 22:35:04 malloc sets errno to ENOMEM if it runs out of memory 22:36:15 hmmm 22:36:17 so... 22:36:20 vim and emacs both suck. 22:36:27 ...and I need to find a new text editor. 22:36:33 j 22:36:43 j sucks too... 22:36:47 :) 22:36:49 j is awesome. 22:36:55 SevenInchBread: emacs doesn't suck 22:36:56 It's also unfortunately in Java :( 22:36:57 I just want like... 22:37:07 IDLE with tabs... or a buffer list. 22:37:28 emacs 22:38:02 emacs is IDLE with a buffer list, annoying key combinations, and torturous configuration. 22:38:16 tortuous 22:38:17 ? 22:38:26 you have a whole scripting language on your hands 22:38:52 ...oh dear... 22:39:07 yeah, that's too much... I want... IDLE with tabs. 22:39:16 not a whole scripting language that I have to learn. 22:43:55 ugh, we're worse than religious advocates, I swear. 22:44:13 SevenInchBread: I hear /usr/bin/env python > is a good editor. 22:44:15 :-P 22:45:06 * SevenInchBread loves programming, but hates the fanaticism it forms... 22:46:42 Use Haskell. I don't see how you can survive with that mind-bending dynamic typing. 22:47:01 And no currying! Sheesh! 22:48:27 :P 22:49:08 (Of course I'm ignoring the fact that it's perfectly possible to do currying in Python, though a little annoying. 22:49:09 pfft, but how the hell could I possibly use monads... and static typing is like wearing a straightjacket. 22:49:13 ) 22:49:23 I actually don't know what currying -is-... 22:49:26 * SevenInchBread reads up on it. 22:49:30 dynamic typing is great 22:49:34 i can't stand static 22:49:42 Oh, now you *want* to add functions together to get a string? 22:49:54 nooo 22:50:05 functions don't have a __add__ method 22:50:06 duh 22:50:41 Pff, I bet Python doesn't even have typeclasses. 22:51:15 * SevenInchBread is working on his own Smalltalk-like language at the moment. 22:51:39 Smalltalk-like, eh? 22:51:40 What's a typeclass? 22:51:53 Yeah ,smalltalk looks cool. 22:52:12 bsmntbombdood: it's interfaces from object-oriented stuff, except better. 22:52:14 I've never -used- it... but it's Lispy enough that I can get basically how it works at least in spirit. 23:14:28 -!- calamari has quit ("Leaving"). 23:15:48 so currying is just... 23:15:54 partial functions? 23:16:09 -!- sebbu has quit ("@+"). 23:17:08 pppph 23:17:10 .. 23:17:12 oooh 23:17:31 hhho 23:17:33 yeah okay, I see... you split the function into individual one-argument functions? 23:32:24 -!- digital_me_ has quit ("Lost terminal"). 23:35:09 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa"). 23:41:46 SevenInchBread: pretty much. 23:46:21 -!- oerjan has joined. 23:52:14 ihope, hmmm... it would be good for delaying a functions execution... 23:52:22 and... optional arguments... to a certain extent. 23:53:54 no 23:54:05 optional arguments doesn't work with currying 23:55:29 yeah, Ocaml has both and has to disallow currying when you use optional arguments 23:56:47 hooray for scheme 23:57:24 scheme doesn't have implicit currying. 23:58:27 (define (curry f . x) (lambda (a . rest) (apply f (append x (cons a rest))))) 2007-01-30: 00:00:00 I think you can do (define (curry f . x) (lambda rest (apply f 00:00:08 (append x rest)))) 00:00:48 looks like you can 00:03:06 hmm 00:03:18 now that i think about it, that's more usefull than I though 00:03:37 you can do (curry + 1) instead of (lambda (x) (+ x 1)) 00:04:31 like Haskell sections 00:05:00 If you switch x and rest you get the other one 00:06:20 ...i don't know what those are 00:06:50 (+ x) 1 == 1+x and (x +) 1 == x+1 00:07:25 hmmm 00:08:23 Note: (- x) does not work because that is unary minus 00:09:29 All other operators can be used, as well as function names in `` 00:09:44 hmm, interesting 00:09:49 http://www.engr.uconn.edu/~jeffm/Papers/curry.html 00:09:51 see section 4 00:19:38 SevenInchBread: delaying a function's execution is what "lambda:" is for. 00:19:56 hmmm... then maybe I don't get currying. 00:20:19 the function returns a function that expects the next argument, right? 00:20:33 yeah 00:23:06 the equivilant of that scheme in python: 00:23:12 def curry(fn, *args): 00:23:12 return lambda *x: apply(fn, args+x) 00:24:22 SevenInchBread: ^ 00:38:21 apply is deprecated :D 00:38:50 return lambda *x: fn(*args + x) 00:39:26 oh... I do that all the time. 00:39:30 I thought currying was some big deal. 00:44:26 apply is depreciated?? 00:44:57 that's pretty stupid 00:48:19 same thing... it's just got its own syntax. 00:48:26 I like it better myself. 00:48:45 So what's this talk of removing lambda? 00:48:56 Now you just append a * to a tuple place in the function call... and it basically does that. 00:49:11 well... in Python lambdas aren't near as useful... and some people think it's hard to read. 00:49:19 I see. 00:49:24 I think they have their purpose, and shouldn't simply be removed because some people never use it. 00:49:43 Aye. 00:49:53 bsmnt_bot makes them useful. :-P 00:49:56 What would be the replacement 00:49:59 ihope: indeed 00:50:03 Nothing 00:50:21 S and K combinators. 00:50:35 And uncurryment functions. 00:50:40 ihope: I can understand lambda. not S and K 00:50:45 folks are under the impression that you should use def... which I don't believe to be entirely true. 00:50:57 :/ 00:51:01 you don't assign every value you evaluate to a variable... why should you assign every function to one? 00:51:40 * bsmntbombdood reads the wikipedia article on monads, and fails at understanding 00:51:54 from one I understand... it's just a list of computations. 00:52:14 bsmntbombdood: they say Wikipedia is not a tutorial. 00:52:58 Whats information worth if you can't understand it without having previous knowledge of it? 00:53:27 A monad is a type constructor. return puts something into a monad, >>= lets you use something that's already in a monad. 00:53:47 lol @ call-with-http-connection 00:54:01 call-with-decode-quoted-printable-output-port 00:54:01 call-with-previous-continuation! 00:54:12 that's sooooo long 00:54:16 ....Common Lisp has huge function names. 00:54:18 Or even better, call-with-future-continuation 00:54:22 ...Wait, are those real names? 00:55:43 I've got a nifty idea for a smalltalk like language. 00:55:50 with one-argument functions. 00:57:28 ihope: yep 00:57:34 Implement a programming language based on first-order logic with dependent typing. 00:57:51 And make it a good one, too. 00:57:53 hmm... it basically extends the message-passing idea of objects to methods... 00:57:59 what's dependent typing. 00:58:05 Might as well have classes, too. Typeclasses, valueclasses... 00:58:10 nope 00:58:12 no classes. 00:58:21 I like the whole prototype design. :D 00:58:24 (apropos "call") 00:58:24 SevenInchBread: that's when the type of value a function returns depends on the value it takes. 00:58:27 you just copy existing objects. 00:58:37 Requires first-class types, naturally. 00:58:43 oh...hmmm 00:58:44 And base it all off Damas-Milner. 00:58:57 Or Hindley-Milner, if you like that name better. 00:59:13 heh, dynamic typing does that... not nicely, but it does it. :D 00:59:27 you could just put it in the definition... 00:59:32 Integer -> Blah 00:59:41 Spaghetii -> String 01:00:10 return values would just be converted to the type.. 01:00:21 and... have some consistent way to do type conversions. 01:00:44 S and K 01:00:50 I do not understand 01:02:11 hmm... I've been reading up on so-called "role-oriented programming" sounds neat... 01:02:11 I don't know anything specific, but I like the idea. 01:02:11 no makey sensy 01:02:30 SevenInchBread: bUZZUZZZWORD 01:02:47 PROGRAMMING IS FILLED WITH BUZZWORDS FOOOL 01:03:12 "a version of the lambda calculus that omits the lambda operator." 01:03:23 that doesn't make any sense 01:04:24 The NULL language? :P 01:04:44 no, unlambda 01:05:03 business-world programming makes me nauseas. 01:05:13 meet oo 01:05:20 yup 01:05:28 I like oo... in moderation. 01:06:24 it's a good idea when you have like... actual objects. 01:07:03 * bsmntbombdood just wrote a rational class for python 01:07:32 "pure oo" seems removed from the whole business lingo though... like Smalltal and Self. 01:07:38 Smalltalk 01:10:07 ~exec self.__class__.register = lambda self, m, c: self.register_raw(r"\S+ PRIMVSG (P\S+) :~%s (P.*)" % m, c) 01:10:29 bsmntbombdood: s = \xyz.xz(yz) and k = \xy.x 01:10:36 All the lambda you'll ever need. 01:10:42 ihope: I know 01:10:58 So what of it doesn't make sense? 01:11:09 how you can do stuff with that 01:11:43 ~exec self.register("cat", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group("chan"), y.group("msg"))) 01:11:55 ~exec self.register("cat", lambda x,y: bot.raw("PRIVMSG %s :%s" % (y.group("chan"), y.group("msg")))) 01:11:55 bsmntbombdood: abstraction elimination. 01:11:59 ... 01:12:02 ~cat foo 01:12:10 The Unlambda page says how it works. 01:12:15 ~exec self.print_callbacks() 01:12:31 hmmm 01:14:32 why didn't that work 01:14:38 ~cat 01:14:41 ~cat asdf 01:14:45 ~catasdf 01:15:10 ... 01:19:22 -!- ihope_ has joined. 01:19:48 -!- oerjan has quit (zelazny.freenode.net irc.freenode.net). 01:20:14 -!- oerjan has joined. 01:20:32 -!- oklofok has joined. 01:21:29 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 01:27:28 Basically you remove x from \xwhatever by prepending every application with S, every variable other than x by K, and replace each x by I=SKK. 01:28:40 Something like that, yeah. 01:28:58 SK = KI is surely the simplest identity in SKI calculus, besides the trivial ones, of course. 01:30:45 SK = KI is not quite true in Unlambda because of side effects. SK x y = K y (x y) = y except for side effects of (x y). 01:31:49 (and y is only evaluted once.) 01:32:28 Ugh, side effects. 01:32:32 However, K y never has a side effect, so SKK=KI works. 01:32:36 Give me my IO monad back. 01:32:40 *=I 01:32:48 I see. 01:33:10 Still, ugh, side effects. 01:34:04 But Unlambda's choice of side effects is so weird that it's part of its charm... 01:35:18 -!- ihope has quit (Read error: 110 (Connection timed out)). 01:36:09 I guess I could implement IO monads and make it a little less ugh. 01:36:16 Thunk monad, anyone? 01:38:21 My never-expanded Limonade idea was to add monads and type classes to make it _more_ ugh. 01:39:23 Basically so overloaded that it was hard to know what an expression meant, requiring careful consideration of what monad it was in. 01:40:18 Wonderful! 01:40:49 *Lemonade 01:43:30 -!- calamari has joined. 02:08:06 foo 02:08:12 those darn swedes 02:08:20 http://news.bbc.co.uk/2/hi/europe/6310915.stm 02:12:09 -!- ihope_ has quit (Read error: 60 (Operation timed out)). 02:32:47 -!- GregorR has quit (Read error: 110 (Connection timed out)). 02:35:37 -!- EgoBot has quit (Read error: 110 (Connection timed out)). 03:17:01 -!- puzzlet has joined. 03:47:28 -!- GregorR has joined. 04:50:59 -!- calamari has quit ("Leaving"). 04:55:38 oh noes, no one is in my channel! 04:55:45 ##functional 05:11:33 -!- Sgeo has quit (Remote closed the connection). 05:36:13 -!- Arrogant has joined. 05:58:07 bsmntbombdood: that's HORRIBLE! 06:44:24 -!- oerjan has quit ("leaving"). 07:58:14 -!- anonfunc has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:11:12 -!- anonfunc has quit. 10:11:12 -!- Arrogant has quit ("Leaving"). 10:39:57 -!- MM2 has quit (Read error: 110 (Connection timed out)). 10:44:49 -!- SevenInchBread has quit (Read error: 145 (Connection timed out)). 10:54:56 -!- MM2 has joined. 12:21:13 -!- nazgjunk has joined. 12:40:55 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 12:41:26 -!- nazgjunk has joined. 12:53:55 -!- ais523 has joined. 12:54:04 !help 12:55:46 ? 12:55:49 * ais523 checks what happened to EgoBot 12:56:21 It seems it quit at 02:31:18 (110:Connection timed out) and didn't join again 12:56:54 I have noiced that #haskell-blah have a picture of their bot: http://trappist.elis.ugent.be/~kehoste/haskell-blah_lambdabotContest_results.html 12:57:02 That's a shame, I was wondering about a BF problem that's been bothering me 12:57:04 Just how I imagine it/her. 12:57:27 Maybe we should have a picture of egobot... 12:57:51 I'm not sure what it would look like. Maybe a Turing Machine? 12:58:32 Anyway, the problem was to write an 8-bit BF program which outputted another BF program that was an infinite loop 12:58:50 that's easy, but I was wondering how short you could get the first program 12:59:08 You could write something that just output +[], but there's probably a shorter way that produces more output 13:03:24 hmm 13:03:42 Well the infinite-loop program must have a [ and a ] in it... 13:03:54 and it must have a + or - in it 13:04:06 so I don't see how you could change it much 13:04:18 but making it longer might make it easier to generate 13:04:31 * ais523 gets out an ASCII code table 13:06:26 -/13579;=?ACEGIKMOQSUWY[] is an infinite loop 13:06:40 and probably easier to generate 13:10:09 but assuming we don't want infinitely-long output, there has to be some way to stop it continuing along the same pattern 13:13:08 how about: .+[+.+]? 13:13:10 if we store 44 in a cell somehow, then the rest of the code can just be [+.+] (because -'s ASCII code is 45), and it will continue into the high reaches of ASCII before wrapping round to 0 13:13:54 I don't think a load of control-codes at the beginning of a program usually hurt a bf interpreter. 13:14:18 actually, make that: ++[+.+] 13:14:44 but + has an ASCII code of 43, so if you do that you get +-[] with comments removed, which is a NOP 13:14:52 feck 13:15:05 what a PITA 13:15:09 * ais523 looks up 44 on the wiki's BF constant table 13:15:25 My first attempt is ++[>+<------]>+[+.+] 13:15:30 hmm 13:15:35 20 characters 13:16:07 BTW ASCII is a 7-bit code. there are several 8-bit codes called "extended ascii", of which ISO-8859-1 is probably most commpn online. 13:16:11 * SimonRC goes to lunch 13:26:53 +[+.+.++++.+] works (13 characters) 13:58:16 -!- ais523 has quit. 14:51:27 -!- nazgjunk has quit (Read error: 104 (Connection reset by peer)). 14:51:44 -!- nazgjunk has joined. 15:04:31 lament: horrible indeed 15:12:59 * SimonRC tries a quiz and gets most right: http://alvar.a-blast.org/plat_forms/ 15:13:08 Guess the language from the programming team! 15:15:09 Gee I wonder what language team F are using? They are all "nice young men" in shirts, with well-cut hair and HP laptops. 15:15:56 * bsmntbombdood spanks java 15:16:09 How can people use that crap 15:43:23 * SimonRC is suprised at the word "negligible". Sure it should be "neglegible", from negle-ct 15:43:57 ...it's egnlish. what do you expect? 15:44:07 s/egnlish/english/ 15:53:58 * SimonRC pr'p'uziz ' nyu speliq sist'm. 16:04:46 pröpöuziz 16:12:23 fo shizzle 16:18:51 * SimonRC sees a connection between China and Wales: dragons. 16:18:54 hmm 17:34:06 dragons and dog-eating 17:37:54 eh? 17:38:00 thew Welsh eat dogs? 17:39:08 all the time 17:55:30 :-S 17:55:37 they just can't stop 18:03:48 -!- sebbu has joined. 18:07:32 say, guys, does this go "beep":  18:07:38 BB 18:07:40 oops 18:07:42 18:07:45 well? 18:07:50 no 18:07:54 oh 18:12:37 no, it goes boop 19:24:01 -!- wooby has joined. 20:04:47 -!- sebbu2 has joined. 20:11:51 -!- sebbu has quit (Read error: 145 (Connection timed out)). 20:16:15 -!- sebbu2 has changed nick to sebbu. 20:29:55 -!- Arrogant has joined. 21:05:21 -!- Arrogant has quit ("Leaving"). 21:25:43 Why geology is better than chemistry: In our rock identification lab, there's a column for "taste." 21:28:56 Some jerk voted down my wonderful Windows 1.0 slideshow :( 21:51:28 ??? 22:10:20 GregorR: biology is even better 22:27:07 -!- ihope has joined. 22:33:26 -!- sebbu2 has joined. 22:52:35 -!- sebbu has quit (Connection timed out). 23:13:19 zomg he said side effects 23:15:15 Lol, side effects. 23:15:17 Wait, what? 23:34:49 -!- sebbu2 has quit ("@+"). 23:45:53 -!- nazgjunk has quit ("rawr. And, also: Bi-la Kaifa"). 2007-01-31: 02:14:34 -!- ihope has quit (Connection timed out). 02:38:08 -!- SevenInchBread has joined. 03:25:45 -!- SevenInchBread has set topic: #esoteric - the international hub for esoteric programming language design and deployment - map: http://www.frappr.com/esolang - forum: http://esolangs.org/forum/ - EgoBot: !help (currently down) - wiki: http://esolangs.org/wiki/ - logs: http://tunes.org/~nef/logs/esoteric/ or http://meme.b9.com/cdates.html?channel=esoteric - Pastebin: http://pastebin.ca/. 03:38:35 -!- SevenInchBread has quit (Read error: 145 (Connection timed out)). 03:38:48 yay, i'm identified 04:02:35 -!- Sgeo has joined. 04:25:34 -!- wooby has quit. 04:56:48 -!- Arrogant has joined. 05:30:12 -!- anonfunc has joined. 05:33:43 -!- Sgeo has quit ("Leaving"). 06:31:45 -!- Arrogant has quit ("Leaving"). 06:49:00 -!- oerjan has joined. 06:58:05 Some of the other Lambdabot logo suggestions seem like they would have been appropriate for EgoBot. (The ones by boegel and beelsebob) 07:09:27 negligible but neglect follows from the rules of Latin. In the first short e turns to i. In the second short e turns long because it is followed by a consonant combination. 07:13:04 Of course there are exceptions to rules as well. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:38:30 -!- oerjan has quit ("leaving"). 08:45:10 -!- anonfunc has quit. 11:02:44 give me 5 first prime numbers, please 11:32:14 -!- anonfunc has joined. 11:57:36 -!- ihope has joined. 12:46:37 -!- ihope has quit ("http://tunes.org/~nef/logs/esoteric/06.08.09"). 12:54:25 -!- ais523 has joined. 13:03:01 -!- ais523 has changed nick to ais523_. 13:10:24 -!- ais523_ has changed nick to ais523. 13:10:41 -!- ais523 has quit. 13:10:57 -!- ais523 has joined. 13:27:58 MM2: 2, 3, 5, 8, 13. Sorry, this IRP implementation has a lag of a little over 10 hours at the moment. 13:37:44 -!- ais523 has quit (Remote closed the connection). 13:39:48 -!- ais523 has joined. 13:42:02 Besides, this IRP implementation is wrong. I meant 2, 3, 5, 7, 11. 13:47:52 -!- calamari has joined. 13:49:33 Hello, calamari 13:49:43 hi ais523 13:49:54 do I know you by a different nick? :) 13:50:12 No, I just don't get to access IRC very often 13:50:27 and when I do, there rarely seems to be a discussion 13:50:41 so I just say hello to people when they join 13:50:59 no problem hehe was just curious 13:51:25 !help 13:51:35 EgoBot's still down, isn't it? 13:52:40 I was discussing a brainfuck problem with SimonRC yesterday 13:53:08 the problem was to write the shortest possible 8-bit wrapping BF program that would output a BF program that was an infinite loop 13:54:10 * ais523 checks the logs 13:54:18 it seems my best attempt was +[+.+.++++.+] 14:10:21 -!- EsoBot has joined. 14:10:44 E!bf +[+.+.++++.+] 14:10:45 14:12:39 there are a lot of control characters in the output 14:12:47 but BF interpreters don't care about them 14:14:24 hh that makes sense 14:14:28 +a 14:14:54 E!ps 14:14:56 1:calamari 14:15:03 E!kill 1 14:15:04 Killed 1. 14:16:10 E!bf http://rafb.net/p/5WSwpO66.txt 14:16:12 Hangman started! Type `/msg EsoBot \n' to start a game! 14:16:38 E!ps 14:16:39 1:calamari 14:17:02 ____ ___ ____ | Type `E! \n' to guess a letter! 14:17:15 E!1 e 14:17:26 don't forget the \n 14:17:32 E!1 e\n 14:17:37 ___e ___ ____ | [] 14:17:46 E!1 a\n 14:17:51 ___e ___ ____ |- [a] 14:17:58 E!1 i 14:18:05 E!1 i\n 14:18:10 _i_e ___ ____ |- [a] 14:18:22 E!1 o\n 14:18:28 _i_e _o_ _o__ |- [a] 14:18:42 E!1 f\n 14:18:48 _i_e fo_ _o__ |- [a] 14:18:56 E!1 r\n 14:19:02 _i_e for _or_ |- [a] 14:19:20 E!1 t\n 14:19:26 ti_e for _or_ |- [a] 14:19:34 E!1 m\n 14:19:41 time for _or_ |- [a] 14:19:49 E!1 k\n 14:19:56 time for _ork |- [a] 14:20:01 E!1 w\n 14:20:07 time for work | :)|-< YOU WIN! 14:20:15 bbl <=K 14:20:29 cya later 14:20:36 -!- calamari has quit ("Leaving"). 14:20:49 E!help 14:20:50 Commands: bf, cat, help, kill, ls, ps, quit, unnecessary. 14:21:00 E!ls 14:21:01 Bad or inaccessible URL `http://localhost/ls/dirs'. 14:21:14 E!ps 14:21:15 1:calamari 14:21:24 E!kill 1 14:21:25 Killed 1. 14:23:23 E!bf >,----------[>,----------]<[<]>[++++++++++.>]<[<]>[.>] 14:23:27 E!ps 14:23:28 1:ais523 14:23:43 E!1 Hello, world! 14:23:48 E!1 \n 14:23:49 Hello, world!Hello, world! 14:24:01 E!ps 14:24:02 No processes. 14:24:56 E!bf +[>>,----------[>,----------]<[<]>[++++++++++.>]<[<]>[.>]<[[-]<]<] 14:25:14 E!1 Hello, world!\n 14:25:15 Hello, world!Hello, world! 14:25:21 E!1 and again!\n 14:25:22 and again!and again! 14:25:42 ~help 14:26:04 E!ps 14:26:05 1:ais523 14:26:31 E!1 E!1\n \n 14:26:32 E!1E!1 14:26:33 14:26:54 E!1 E!1 \\n \n 14:26:55 E!1 \E!1 \ 14:26:56 14:27:24 E!1 \n 14:27:30 e!ps 14:27:31 E!ps 14:27:33 1:ais523 14:37:49 E!unnecessary 14:37:50 Program executed perfectly right! 14:38:01 e!unnecessary Hello, world! 14:38:06 E!unnecessary Hello, world! 14:38:07 CRITICAL ERROR: The file exists! 14:39:31 E!unnecessary CRITICAL ERROR: The file exists! 14:39:33 CRITICAL ERROR: The file exists! 14:40:05 E!1 E!1 \\ 14:40:15 E!1 n \n 14:40:16 E!1 \n E!1 \n 14:40:39 E!1 E!1 E!1 \\ 14:40:43 E!1 n \n 14:40:44 E!1 E!1 \n E!1 E!1 \n 14:42:47 ~exec sys.stdout("testing"); 14:42:47 testing 14:43:26 E!1 ~sys.stdout("E!1 testing\\n"); \n 14:43:27 ~sys.stdout("E!1 testing\~sys.stdout("E!1 testing\ 14:43:29 "); "); 14:43:53 E!1 ~sys.stdout("E!1 testing\\ 14:43:59 E!1 n"); \n 14:44:00 ~sys.stdout("E!1 testing\n"); ~sys.stdout("E!1 testing\n"); 14:44:31 E!1 ~exec sys.stdout("testing\\ 14:44:37 E!1 n"); \n 14:44:38 ~exec sys.stdout("testing\n"); ~exec sys.stdout("testing\n"); 14:45:35 E!1 ~exec sys.stdout(";\n 14:45:36 ~exec sys.stdout(";~exec sys.stdout("; 14:45:45 E!1 ~exec sys.stdout(";)\n 14:45:46 ~exec sys.stdout(";)~exec sys.stdout(";) 14:45:54 E!1 ~exec sys.stdout(");\n 14:46:11 E!1 ~exec sys.stdout(");\n 14:46:21 E!ps 14:47:16 ~exec sys.stdout("E!ps"); 14:47:17 E!ps 14:47:32 E!quit 14:49:49 ~exec sys.stdout(");~exec sys.stdout("); 14:49:49 ~exec sys.stdout(");~exec sys.stdout("); 14:49:49 1:ais523 14:49:49 1:ais523 14:49:49 -!- EsoBot has quit ("requested by ais523"). 14:49:50 );~exec sys.stdout( 14:49:50 );~exec sys.stdout( 15:37:39 ~exec sys.stdout("test" * 2); 15:37:39 testtest 16:51:27 You know you've been using phpBB too much when... you type phpBB markup in Word without thinking about it. 16:52:33 ...and you know you're too addicted to phpBB when you actually learn Visual Basic so that you can program Word to interpret it correctly 16:54:36 It sucks trying to write 2000-word posts in those titchy editing boxes though. 17:00:55 Can't you edit it in an external editor and then copy-and-paste it in? 17:08:22 Maybe, but it makes previewing a PITA. 17:33:47 -!- sebbu has joined. 17:47:10 hi 17:58:08 -!- jix__ has joined. 17:58:54 -!- jix__ has changed nick to jix. 18:20:34 -!- ais523 has quit. 18:23:06 -!- Rugxulo has joined. 18:24:03 h 18:24:04 i 18:24:33 yo 18:33:50 * SimonRC goes 18:41:21 -!- Rugxulo has quit ("Say What?"). 18:51:39 -!- digital_me has joined. 20:03:48 -!- calamari has joined. 20:21:32 -!- nazgjunk has joined. 21:12:32 -!- Sgeo has joined. 21:31:36 -!- jix has quit (Read error: 104 (Connection reset by peer)). 21:33:51 -!- jix__ has joined. 21:34:15 -!- jix__ has changed nick to jix. 22:14:23 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht"). 22:15:51 -!- anonfunc has quit. 22:48:06 -!- calamari has quit ("Leaving"). 22:55:45 SimonRC: lol word 23:07:06 foo 23:07:17 bsmntbombdood: eh? 23:07:31 ITYM "werd" 23:07:43 You know you've been using phpBB too much when... you type phpBB markup in Word without thinking about it. 23:10:46 -!- sebbu has quit ("@+"). 23:20:17 ah, ok 23:21:47 * SimonRC wonders about the physiological effects that a certain newsgroup is having on him. 23:25:27 It's the stomach-churning, heart-thumping feeling that is caused by either being afraid or having a crush. 23:25:43 And I don't think I'm afraid. 23:26:22 OTOH, it's not a sexual fetish of mine AFAICT. 23:28:19 AFOOD OTOW IANAL TOM WH 23:28:41 d00dWTF?!!"!!#!?????!! 23:29:15 omgwtfbbq 23:29:59 I wouldn;t be saying this stuff if I thought I would ever meet any of you guys. 23:30:09 Or gals, as the case may be. 23:30:50 * bsmntbombdood pulls out the location-over-ip spec