00:29:52 -!- ShadowHntr has joined.
01:28:45 -!- ShadowHntr has quit (Client Quit).
01:39:28 <CakeProphet> I like the simplicity of functions... but I also like the sheer amount of shit you can accomplish with OO...
01:41:28 <bsmntbombdood> In python, it's just a thin abstraction over dictionaries
01:42:05 <CakeProphet> I just mean... the way people talk about it.
01:46:27 <CakeProphet> abstract base class, wrapper, instance of a class, class method, members, handler (dear God... I despise anything with "handler" in its name...)
01:48:38 <bsmntbombdood> ~exec for i in range(5): self.raw("PRIVMSG CakeProphet :handler!")
01:49:03 <bsmntbombdood> ~exec for i in range(5): self.raw("PRIVMSG CakeProphet :handler!")
01:49:34 <GregorR> Hee-hee ... I made a DNPTB-themed wallpaper for my cell phone :)
01:50:21 <GregorR> http://www.donotputthebaby.com
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:52:00 <bsmntbombdood> the 35 bytes in /home/bsmntbombdood/proof.txt await you!
05:01:47 -!- digital_me has quit ("night").
05:04:51 <oklopol> somehow i felt i had to ask what proof.txt prooves without considering the context at all
05:12:36 <ShadowHntr> probably the only way you could see what's in the file is if you broke the chroot jail?
05:15:58 <oklopol> i only have a vague idea what a chroot is... but i'm sure i'd enjoy breaking one
05:44:59 <ShadowHntr> so it creates a "jail" in which the user can't access anything outside of.
05:46:15 <bsmntbombdood> There's ways to get out of one, but I think they require root
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 <Sukoshi> Does anyone know the typical error of a good perceptron?
09:53:42 * oerjan means no, and what is a perceptron? :)
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:58:44 <oklopol> http://esoteric.voxelperfect.net/wiki/Fortuna
18:59:17 <oklopol> 1 Take hand on or off the wheel
18:59:27 <oklopol> what the fuck does a hand do?
19:00:27 <RodgerTheGreat> "there is a theoretical wheel, spinning at a constant speed of 1, that manipulates a set of bits"
19:01:43 <oklopol> so... executes a BF > or < between every instruction... or?
19:03:55 <oerjan> I get this sudden urge to create the Incomprehensible template :)
19:04:15 <oklopol> 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:37 <oerjan> no, velocity includes direction, speed does not.
19:05:31 <oerjan> although with the rest of the description I wouldn't bet on the writer having considered that.
19:05:32 <oklopol> nah i don't understand the lang
19:06:27 <oklopol> 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:51 <oklopol> 'm just too stupid to understand clear descriptions
19:07:29 <oklopol> 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 <oerjan> That would have been an option if there was actually a pointer to an implementation.
19:07:46 <oklopol> yes, that's why i had to ask
19:07:58 <oklopol> if you get it, please tell me :\
19:08:43 <oklopol> i got a result of almost printing 0000111 when executing the prog, but then it did something weird in the end
19:08:54 <oklopol> and the scan... i have no idea what that means
19:09:59 <oklopol> "move bit pointer in current direction" there are 3 directions, memory direction, wheel direction and ip direction, right?
19:10:16 <oerjan> OK I had one sudden insight.
19:11:24 <oerjan> The wheel does not actually contain the bits. The wheel only has 5 positions, each of which corresponds to a command.
19:12:44 <oerjan> Well, perhaps. It doesn't make very much sense even then.
19:12:45 <oklopol> but, when scanning for example, wtf do you scan, the code? and are there multiple directions to iterate the code? or?
19:14:29 <oklopol> the code, if i'm right, first fills in the memory 00001110, then changes wheel dir and does somt very strange
19:14:40 <oerjan> Impossible to say. Whoever wrote the description had no idea how to express an idea.
19:15:54 <oklopol> 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:58 <oerjan> OK, perhaps if the example code can be deciphered, something more can be said.
19:17:12 <oklopol> 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 <oklopol> which is said in the description too
19:17:22 <oerjan> Could you please explain how you get even as much as that out of the code? :)
19:18:11 <oerjan> actually you said the essential thing while i was writing i think
19:18:15 <oklopol> 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:42 <oklopol> i was in a hurry to write that before you could figure it out so i'd get the credit :)
19:19:37 <oerjan> Well, congratulations :)
19:20:08 <oklopol> 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 <oerjan> 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 <oerjan> Although if the code = bits and so is self-modifying, the decoding may have to be done continuously.
19:25:31 <oerjan> Wait a minute - a second insight
19:26:00 <oerjan> The "scan" may be a warped version of brainfuck [] - after all, it says the language is brainfuck inspired.
19:26:41 <oklopol> yeah, i think it is, but it's not needed there
19:26:54 <oklopol> very hard keeping track of the execution
19:27:40 <oklopol> that is of course a plus :) but the documentation is bad, unless it's intentionally left as homework for the reader
19:30:06 <oerjan> OK, what did you say you thought the first actual command executed was?
19:31:32 <oklopol> [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 <oklopol> this is all the commands if i omit 2's
19:32:36 <oklopol> or, the beginning is >>>>*>*>*>* then change wheel direction... and lost me :)
19:33:45 <oklopol> 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 <oklopol> but no, it's full of weird loops and such
19:34:47 <oerjan> a bell character should be 00000111, anyhow
19:35:06 <oklopol> or, does the "Switch direction of wheel" actually mean "change direction of the bit pointer"?
19:35:44 <oklopol> oerjan, i think the last bit might be output twice
19:35:46 <oerjan> i would have thought it meant both
19:35:57 <oklopol> because the end is not identical to the almost-end
19:36:10 <oklopol> might mean both, but then 2's are executed
19:36:29 <oklopol> even tho i don't think that is sensible
19:37:56 <oklopol> [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 <oklopol> 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 <oklopol> so, 2 would be most sensible to omit
19:39:23 <oklopol> since it certainly has nothing to do with outputting a \0x7
19:40:39 <oklopol> is the author here? i'll spank him
19:41:28 <oklopol> i thought it'd take like 3 hours to write down a list of all brainfucks and their syntaxes
19:41:44 <oklopol> and i'm half down the list
19:43:03 <oklopol> if you figure it out, tell me
19:44:43 <oklopol> http://esoteric.voxelperfect.net/wiki/FukYorBrane, once again, a thorough spesification :(
19:45:12 <oklopol> a non-'<>+-[],.' instruction?
19:45:27 <oerjan> It's inspired by brainfuck and redcode, i believe
19:45:40 <oklopol> oh, there is an implementation
19:49:35 <oklopol> 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 <oklopol> GregorR, damn you, first brainfuck i couldn't specify in 5 sentences :D
20:00:36 <oerjan> Yeah, gregorR's languages tend to have a certain quality.
20:05:15 <oklopol> yeah, i assumed all bf-copies are shit :)
20:05:24 <oklopol> in fact, many are pretty nice
20:05:27 <oklopol> http://esoteric.voxelperfect.net/wiki/Hargfak
20:06:06 <oklopol> <, > 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 <oklopol> plus, "{} Make a code-block, push to stack" wouldn't make sence then
20:07:18 <oerjan> i think the stack and array are separate
20:07:40 <oklopol> # ( Move top from main stack to top of stack at sub pointer
20:07:50 <oklopol> i have no idea what that means :\
20:08:00 <oklopol> top of stack at sub pointer?
20:08:12 <oklopol> sub pointer points to memory, i'd think :\
20:08:41 <oklopol> FuckYorBrane is well commented
20:09:38 <oklopol> does he exist somewhere? :D
20:09:50 <oerjan> he is quite productive on the wiki
20:10:45 <oerjan> darn, the wiki is slow.
20:11:00 <oklopol> or you understand "top of stack at sub pointer"
20:11:16 <oerjan> i think i retract my first assumption
20:11:32 <oerjan> i think the language has stacks as elements of stacks
20:11:41 <oerjan> as one of the data types.
20:12:43 <oklopol> yeah, thought might be so, then all cells are numbers by default, but stacks can be put there
20:13:46 <oklopol> i'm starting to miss basic vocabulary, someone must be feeding me drugs or smth
20:14:54 <oerjan> i'm sorry but obviously your brain is fucked.
20:15:59 <oklopol> 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 <oklopol> i mean, generally, not nice to forget something you've known for ages
20:16:35 <oklopol> been doing too much brainfuck
20:17:05 <oerjan> inserted, placed, pushed?
20:17:35 <oklopol> any of those would've been nice :)
20:17:50 <oklopol> put was the only one i found
20:18:03 <oklopol> usually happens when i've been reading a dictionary
20:18:20 <oklopol> i forget all other words for a while
20:18:35 <oklopol> tho, off-topic, gotta continue my task
20:19:42 <oklopol> if stack is the same as the memory, "; Push data at pointer to stack"
20:20:30 <oklopol> okay, i have no idea, next lang
20:38:12 <oerjan> *sigh* that Fortuna program doesn't make sense either way.
20:38:56 <oerjan> no matter which interpretation is used it looks like it is doing _input_ first.
20:45:27 <oerjan> 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 <oklopol> i figured it'd be nice to have 50 brainfucks rather that 48 so i'll have to improvise 2
20:53:54 <oklopol> the first one is nice, i'll add it in the wiki and feel proud
21:14:16 <oklopol> 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:17:16 <oerjan> What, you've never seen a synchronicity before? :)
21:17:20 <oklopol> but i said god ihope, not devil
21:17:43 <oklopol> oerjan, yeah, but things can be weird multiple times
21:17:52 <ihope> Basement bot change root again.
21:19:11 <ihope> 13:14:16 <oklopol> god ihope has a lot of langs there :O
21:19:18 <ihope> 13:14:56 --- join: ihope_ (n=foo@c-71-205-100-59.hsd1.mi.comcast.net) joined #esoteric
21:19:55 <oklopol> it was weird until i figured ppl here have a habit of actively reading logs
21:20:09 <oklopol> which is never done in any other channel i am on
21:20:51 <oklopol> but, this is one of the only channels that sometimes has stuff worth reading afterwards
21:21:15 <oklopol> due to it's experimental nature
21:21:20 <ihope> I didn't see that log until afterward.
21:21:36 <ihope> I must be psychotic. ;-)
21:22:45 <oklopol> 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:58 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:23:54 <oklopol> in the category bf-derivatives
21:24:05 <oklopol> i saw your name in three random picks
21:24:21 <oklopol> ihope127 actually, assumed that's you
21:24:37 <oerjan> oklopol is writing a thesis, "A survey of languages within the Mullerian sub-paradigm of Esoterics."
21:24:42 * ihope clicks "Random Page" a few times and eventually lands on one of his own languages.
21:25:06 <ihope> Exactly why I chose the number 127.
21:25:25 <oklopol> bsmntbombdood, what a witty thing to notice :D
21:25:54 <oerjan> it is indeed possible to do a search for the word "ihope"
21:27:42 <oklopol> eh... 6 ones? maybe the search is too complicated for me
21:29:43 <ihope> 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 <ihope> I also have Subtle Cough.
21:30:25 <ihope> ...Wait, I listed seven there, not six.
21:30:28 <oerjan> ah, ihope127 gave many more matches than ihope for some reason.
21:30:29 <bsmntbombdood> a language were the only construct is raising and catching exceptions
21:30:31 <ihope> So that makes eight.
21:30:35 <ihope> oerjan: of course.
21:30:41 -!- CakeProphet has joined.
21:30:42 <ihope> bsmntbombdood: fun, no?
21:30:55 <ihope> Of course, I could probably do it much better now.
21:31:05 <ihope> bsmntbombdood: might be; I dunno.
21:31:12 <oerjan> i thought it would match subwords as well.
21:31:19 <ihope> Also, I make Thubi. Nine, then.
21:33:55 <oerjan> wait a minute, SNOBOL is not esoteric.
21:34:16 <oklopol> 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:51 <oerjan> not under the search results
21:34:58 <ihope> oklopol: no, there's a probability amplitude, which is a complex number, for every possible combination of bits.
21:35:17 <ihope> And the probability corresponding to the amplitude x is |x|^2. Confusing, eh?
21:35:47 <oklopol> |x|^2 is the length of the number ^ 2?
21:35:51 <oerjan> neither is Subtle Cough.
21:36:38 <ihope> x is the amplitude.
21:36:53 <ihope> |x| is the absulute value of the amplitude.
21:36:53 <oklopol> okay, is that a complex number?
21:37:01 <ihope> Yes, x is a complex number.
21:37:19 <oklopol> but, absolute value of a complex number is it's length
21:37:23 <ihope> Also, I made ///, a.k.a. Slashes. Does that make 10?
21:37:29 <ihope> oklopol: the length of its vector? Yes.
21:37:39 <oklopol> well, that's what i meant, yeah
21:38:08 <oerjan> there is Slashes (///), REverge, Minimum, Pointy and Onoz.
21:38:19 <oklopol> k, i'll just do like the wiki and assume the reader knows qubits :)
21:39:41 <ihope> 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 <ihope> Twelve in all, I guess.
21:40:32 <ihope> And how many are joke languages?
21:41:12 <oerjan> Ah yes, Subtle Cough is not really usable either, as I proved.
21:43:19 <oerjan> REverge seems a bit unfinished.
21:43:47 <ihope> 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 <ihope> Yes, REverge might as well be deleted.
21:44:11 <ihope> So that's at least two languages I made that are Turing-complete.
21:44:27 <oerjan> SMATINY is definitely not a joke, in my opinion.
21:44:43 <oerjan> not any more than SMETANA.
21:45:52 <ihope> Yeah, it's not a joke.
21:46:16 <ihope> Catch... oh, whether or not it's Turing-complete depends on the built-in exceptions and handlers.
21:47:36 <oerjan> Onoz can of course express all programs known to terminate.
21:49:23 <oerjan> 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:54:02 <oerjan> 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 <oerjan> halting problem + gdel's incompleteness theorem (whose proofs are essentially very similar)
21:57:19 <ihope> Wait. If we can never know something's incorrect, it's correct.
21:57:31 <ihope> If there's no observable difference, then they're the same.
21:57:37 <oerjan> yes, but we cannot necessarily prove it.
21:58:00 <ihope> We can't prove two things to be the same, sure.
21:58:33 <ihope> 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 <oerjan> and the definition of Onoz uses provability of non-termination, not actual termination.
21:59:36 <oerjan> 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 <oklopol> i assume http://esoteric.voxelperfect.net/wiki/SPL also has + / - since they are used in the example
22:02:26 <oklopol> "that of brainfuck", someday i'll learn to read
22:03:31 <oerjan> it seems like | is a variant of $
22:05:57 <oerjan> There is the same confusion on his webpage (except in Italian :) )
22:06:23 <oerjan> Several more example programs though.
22:07:01 <oerjan> All except the final example use |.
22:07:06 <oklopol> yeah, a monkey could see that from the example
22:07:13 <oklopol> the | is decimal input thig
22:07:29 <oerjan> Actually so is $, according to the website.
22:07:38 <oklopol> well, i don't believe it :)
22:07:48 <oerjan> $Aspetta che l'utente inserisca un numero e lo mette nell'accumulatore
22:07:56 <oklopol> i make my own lang then, take the same name and change that
22:08:35 <oerjan> http://stelk.altervista.org/SPL0.2.tar.gz
22:08:41 <oklopol> or, my lang's name is SPL ^H
22:09:46 <oklopol> i can't open that, anyway, i'll make it ascii input, i'm sure the author never sees my page :)
22:10:18 <oklopol> | puts a number in the current cell
22:10:37 <oerjan> There is an implementation there too, in C++
22:11:16 <oerjan> No, it's , which does that.
22:11:24 <oerjan> $ insers into the accumulator.
22:11:40 <oklopol> | read a number in the current cell, at least in the example
22:12:41 <oklopol> LOLfuck, '$' is twice in that code
22:14:11 <oerjan> ah, the C++ code. And not an else in sight, either :)
22:14:17 <oklopol> there is a '#' that is just a subset of '[' xD
22:14:40 <oklopol> no elses, so '$' does two inputs, only latter one is used
22:15:05 <oklopol> you can use it with [] for interesting results
22:15:12 <oklopol> so i retract my statemenzzor
22:20:59 <oerjan> It says on the wiki that # ... # is a comment.
22:22:55 <oerjan> However, the implementation makes no attempt to ignore [] matches inside #'s, so it can still be used for interesting results.
22:26:59 <oklopol> 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 <oerjan> There is some serious possibility for buffer overruns with #[] too..
22:28:08 <oklopol> yeah, overall, FRENCH PEOPLE SUCK AT CODING
22:28:16 <oklopol> (i'm kidding don't kill me :;()
22:28:38 <oerjan> It would have been better if you had noticed it was Italian.
22:28:57 <oerjan> Unless that was part of the joke :)
22:29:23 <oklopol> i don't know either language :\
22:29:51 <oerjan> I know enough to guess most of the meaning.
22:31:08 <oklopol> "Aspetta che l'utente inserisca un numero e lo mette nell'accumulatore"
22:31:45 <oerjan> "Expect that the user will insert a number, and put it in the accumulator."
22:33:53 <oklopol> what langs do you know to understand that?
22:34:11 <oklopol> bsmntbombdood, maybe it's too easy for us
22:34:31 <oerjan> English, a bit Italian, and in theory a bit French.
22:35:05 <oerjan> Note that almost every long word except "mette" is related to the English.
22:35:41 -!- bsmnt_bot_chroot has quit.
22:35:45 -!- bsmnt_bot_chroot has joined.
22:35:53 <oerjan> So what I need of Italian is mostly grammar.
22:35:57 -!- bsmnt_bot_chroot has quit (Client Quit).
22:35:58 -!- bsmnt_bot has joined.
22:36:57 <oerjan> 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:38:05 <oerjan> Basically one is the present stem and the other the past perfect.
22:38:58 <oerjan> And English for some reason borrows Latin words with the latter.
22:39:40 <oerjan> Actually English has that version too: "utility"
22:39:51 -!- oklopol has joined.
22:40:48 <oerjan> darn i didn't notice you left :(
22:41:07 <oerjan> 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 <oerjan> Basically one is the present stem and the other the past perfect.
22:41:19 <oerjan> And English for some reason borrows Latin words with the latter.
22:41:27 <oerjan> Actually English has that version too: "utility"
22:42:50 -!- bsmnt_bot has quit ("nobody loves me :(").
22:42:52 -!- bsmnt_bot has joined.
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 <oerjan> I tend to stay at an abstract level, fairly far from the machine.
22:46:20 <oerjan> Besides, who knows if there even is a loophole to use.
22:48:02 <oerjan> I suppose if you included the whole Linux distribution in the jail there might be a chance.
22:48:53 <oerjan> It might in fact be easier to break into your machine from the outside, for all I know.
22:53:26 <oerjan> 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:59:05 -!- oklopol has joined.
23:01:59 -!- tgwizard has quit (Remote closed the connection).
23:03:44 <bsmnt_bot> ['bin', 'bot', 'etc', 'lib', 'usr']
23:04:08 <CakeProphet> ~exec print >> sys.stdout, os.listdir("bin")
23:04:25 <CakeProphet> .... print >> sys.stdout is the exact same thing as print
23:04:45 <bsmnt_bot> <__main__.IRCFileWrapper instance at 0xb7bfe48c>
23:04:53 <oerjan> ~exec print >> sys.stdout, os.listdir("lib")
23:04:53 <bsmnt_bot> ['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 <CakeProphet> ...no... I mean... that -is- the same thing.
23:05:47 <CakeProphet> There's no other way to get around that... unless you use >>, print goes directly to sys.stdout.
23:05:48 <oerjan> it would if the sys module was the standard one.
23:06:07 <CakeProphet> so you're using a different module for sys?
23:06:28 <CakeProphet> even then... you'd have to hack the interpreter to make those two statements mean anything different from each other.
23:06:31 <bsmntbombdood> I'm using a costum object, to redirct stdout to the right place
23:06:56 <CakeProphet> ...that doesn't change the fact that print by itself always goes to sys.stdout...
23:07:06 <oerjan> How are you assigning it to sys.stdout?
23:07:32 <oerjan> i'm asking bsmntbombdood
23:07:35 <bsmntbombdood> CakeProphet: Can't do that, that interferes with the "real" stdout
23:07:59 <oerjan> well that's the idea, isn't it?
23:08:03 <bsmntbombdood> oerjan: by passing a costum enviroment to the python exec statement
23:08:20 <oerjan> it _should_ change the real stdout.
23:08:36 <CakeProphet> what's a costum enviornment... and how does it change the axiomatic grand law of python's print statement?
23:09:05 <oerjan> he is probably redefining the sys variable to not point at the sys module.
23:09:24 <CakeProphet> ....regardless.... the regular print would just point to that as well.
23:09:30 <bsmntbombdood> env[0]["sys"] = SysWrapper(stdout = IRCFileWrapper(self.raw, r.group(1)), stderr = IRCFileWrapper(self.raw, self.errorchan))
23:10:23 <oerjan> 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:11:08 <CakeProphet> hmmm... so what's the point in wrapping sys if it doesn't do the main objective of replacing stdout?
23:11:36 <bsmnt_bot> <__main__.IRCFileWrapper instance at 0xb7bfe7ac>
23:11:49 <oerjan> but not for print, which makes it pointless :)
23:11:52 <CakeProphet> but if the regular print statement doesn't.
23:12:03 -!- bsmnt_bot has quit.
23:12:06 -!- bsmnt_bot has joined.
23:12:28 <oerjan> it would be simpler to just do print >> channelObj
23:12:43 <oerjan> whatever you call that.
23:12:58 <bsmntbombdood> print >> IRCFileWrapper(self.raw, "#esoteric"), "foo"
23:13:19 <CakeProphet> if you had constant objects for channels... it would be more convient.
23:13:45 <bsmntbombdood> sys.stdout is the object representing the current channel
23:13:48 <oerjan> Then just print >> esoteric
23:14:04 <oerjan> well print >> curChannel
23:14:05 <CakeProphet> but what's the point in replacing sys.stdout if it doesn't does what sys.stdout is supposed to do?
23:14:21 <CakeProphet> you might as well just make a variable called "channel".
23:15:13 <bsmntbombdood> I'm still trying to figure out how to make print behave like it should
23:15:59 <bsmntbombdood> ~exec global esoteric; esoteric = IRCFileWrapper(self.raw, "#esoteric")
23:16:44 <bsmntbombdood> ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric")
23:17:41 <CakeProphet> hehe... I would have done factory functions or something :D
23:18:36 <bsmntbombdood> ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric").write
23:19:47 <CakeProphet> factroy functions give functional programming an OO-like advantage.
23:24:41 <ihope> CakeProphet: factory functions?
23:24:47 <ihope> You mean constructors?
23:25:09 <ihope> data Channel = ChannelFactory String -- this?
23:25:31 <CakeProphet> constructors setup an initial state... factory functions produce other functions.
23:25:52 <ihope> So a factory function is just a function returning a function?
23:26:20 <ihope> Naturally I'd miss the point completely, being used to first-class functions :-)
23:26:30 <CakeProphet> well... there's other flavors of factory functions... I've made a factory function that spat out classes.
23:26:43 <ihope> Anything that produces something unusual?
23:27:00 <bsmntbombdood> In python you can make classes like factory functions
23:27:04 <CakeProphet> I considered making a factory factory function.
23:27:22 <ihope> I mean a factory function is something that produces something unusual?
23:27:47 -!- bsmnt_bot has quit.
23:27:49 -!- bsmnt_bot has joined.
23:27:52 <ihope> So how could a factory function spit out classes?
23:27:54 <CakeProphet> 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 <bsmntbombdood> ~exec self.esoteric = IRCFileWrapper(self.raw, "#esoteric")
23:28:11 <ihope> bsmntbombdood: is this guy chrooted?
23:29:27 <ihope> That didn't exactly work either, eh?
23:29:46 <bsmntbombdood> <bsmnt_bot> AttributeError: IRCbot instance has no attribute 'quit'
23:30:28 <ihope> ~exec self.do_quit()
23:30:35 <ihope> I also forgot about the () at the end... uh...
23:30:46 <bsmntbombdood> ...join that channel so I don't have to copy and paste erros
23:33:07 <ihope> ~exec self.disconnect("RAH RAH RAH")
23:33:07 -!- bsmnt_bot has quit ("RAH RAH RAH").
23:33:10 -!- bsmnt_bot has joined.
23:34:14 <ihope> ~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:35:33 -!- oklofok has joined.
23:35:56 -!- oklopol has quit (Read error: 104 (Connection reset by peer)).
23:36:30 <CakeProphet> assume that class statement is dedented a notch.
23:37:32 <ihope> CakeProphet: pretty fancy.
23:37:43 <ihope> bsmntbombdood: uh...
23:38:22 <CakeProphet> insane hackish solutions that weren't intended to be done is my favorite passtime. :D
23:39:24 <ihope> bsmntbombdood: nothing, nothing...
23:39:56 <CakeProphet> I could have skipped the whole class statement thing by doing.
23:40:25 <bsmntbombdood> property(None, self.__setattr__, self.__delattr__)?
23:40:54 <ihope> Now what's Python have that's like Haskell's "let" or "where"?
23:41:21 <CakeProphet> it does some crazy magic stuff to alter the get, set, and delete functions of only one attribute.
23:41:35 <CakeProphet> ihope, variables are local scope by default.
23:41:51 <CakeProphet> Python has only one, rarely used, scope declaration... "global".
23:42:09 <ihope> Oh, right, Python lets you assign things to variables.
23:42:24 <CakeProphet> 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 <ihope> ~exec self.raw("PRIVMSG #esoteric :Foo"); self.raw("PRIVMSG #esoteric :Foo")
23:43:08 * ihope pushes #esoteric onto the stack and runs to eat dinner
23:44:18 <CakeProphet> I should find something else to tinker with.
23:44:28 <bsmntbombdood> ...and I though I had to do some low level stuff for bsmnt_bot
23:45:53 <CakeProphet> ...the lowest level thing I've ever done with Python is.... select.
23:46:54 <CakeProphet> it's the most basic thing I could think of that I've used.
23:47:14 <bsmntbombdood> CakeProphet: That class generator was pretty low level
23:47:37 <CakeProphet> heh... that depends on your definition of low level.
23:48:19 <CakeProphet> I thought it was fairly abstract... (anything that creates abstract plans for objects is pretty damn high in abstractiness)
23:48:39 <CakeProphet> meh... just some interpreter magic... __ methods are pretty common in Python programs.
23:48:45 <bsmntbombdood> the __ variables are very close to the interpreter
23:49:33 <oerjan> Nah, it's not really abstract until it borrows terms from category theory :)
23:49:46 <CakeProphet> they're glorified callback functions basically...
23:50:34 <CakeProphet> heh... I won't debate the existence of a non-specific, human invented definition.
23:51:16 <CakeProphet> it does... in the sense that there is such a thing as year.
23:53:20 <CakeProphet> hmm... I've taken a liking to using Python sets...
23:53:38 <CakeProphet> they're extremly useful for my MUD... where I don't want accidental duplicate references of objects appearing.
23:56:59 <bsmntbombdood> ~exec self.test = SysWrapper(IRCFileWrapper(self.raw, "#esoteric"), IRCFileWrapper(self.raw, "#esoteric"))
23:58:56 <CakeProphet> __setitem__, __getitem__, __contains__... you can make just about anything.
23:59:43 <CakeProphet> I've got the design for a periodic table of elements somewhere.