←2007-01-08 2007-01-09 2007-01-10→ ↑2007 ↑all
00:00:47 <ihope> Game crazies!
00:00:56 <bsmntbombdood> python crazies!
00:03:33 <bsmntbombdood> 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 <oerjan> On second thought, x + (-x) is always a first player loss, without additional restrictions on the game.
00:37:42 <CakeProphet> do...
00:37:48 <CakeProphet> er...
00:37:50 <CakeProphet> so...
00:37:51 <CakeProphet> x - x?
00:38:13 <CakeProphet> or does game theory differenciate from the typical inverseness of addition and subtraction?
00:38:45 <oerjan> well, x - y may be an abbreviation of x + (-y).
00:40:01 <oerjan> although the statement you responded to can be used to prove that x - y + y = x up to equivalence.
00:41:01 <oerjan> But on the level of exact game structure, that doesn't hold.
00:41:20 <CakeProphet> ....yeah, I don't what the hell you're talking about.
00:41:35 <oerjan> -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 <CakeProphet> I'm not even familiar with mathematical games anyway.
00:42:25 <oerjan> My condolences :)
00:51:07 <CakeProphet> THE WORLD NEEDS A NEW IDE
00:51:44 <CakeProphet> which I have built.
00:53:22 <oerjan> We could name it "Norton utilities", after the great Discordian Saint.
00:54:31 <CakeProphet> Actually..
00:54:37 <CakeProphet> we should just called it MeSophia.
00:54:40 <CakeProphet> 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 <oerjan> ah, wait, alas it already exists: http://yoyo.cc.monash.edu.au/~acb/norton/
00:56:37 <oerjan> You might want to look into the Kafka program there.
00:57:20 <oerjan> 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 <bsmntbombdood> emacs!
01:30:45 <CakeProphet> All the useful configuration I could ever fucking want..
01:30:52 <CakeProphet> that I don't... actually want.
01:30:59 <bsmntbombdood> ~exec os.system("emacs")
01:31:12 <bsmntbombdood> ~ps
01:31:13 <bsmnt_bot_chroot> None
01:31:14 <bsmntbombdood> heh
01:39:52 <CakeProphet> so...
01:39:57 <CakeProphet> 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 <bsmntbombdood> ~quit new user
01:43:21 -!- bsmnt_bot_chroot has quit ("new user").
01:43:23 -!- bsmnt_bot_chroot has joined.
01:43:39 <bsmntbombdood> ~quit
01:43:40 -!- bsmnt_bot_chroot has quit (Client Quit).
01:43:42 -!- bsmnt_bot_chroot has joined.
01:44:01 <bsmntbombdood> ok, now I think a os.system("rm -rf /") is safe
01:44:15 <bsmntbombdood> no, you aren't allowed to do it
01:47:16 <bsmntbombdood> oh wait, rm isn't even in the chroot
01:47:40 -!- pikhq has joined.
01:47:45 * bsmntbombdood giggles
01:48:05 <bsmntbombdood> ~exec os.system("echo *")
01:48:14 <bsmntbombdood> hmph
01:48:57 <bsmntbombdood> ~exec self.my_file = open("/bot/ircbot.py")
01:49:19 <bsmntbombdood> ~exec sys.stdout.write(self.my_file.readline())
01:49:20 <bsmnt_bot_chroot> #! /usr/bin/python
01:49:23 <bsmntbombdood> a ha!
01:49:25 <bsmntbombdood> ~exec sys.stdout.write(self.my_file.readline())
01:49:27 <bsmntbombdood> ~exec sys.stdout.write(self.my_file.readline())
01:49:27 <bsmnt_bot_chroot> import socket
01:49:29 <bsmntbombdood> ~exec sys.stdout.write(self.my_file.readline())
01:49:29 <bsmnt_bot_chroot> import re
01:49:31 <bsmntbombdood> heh
01:49:45 <bsmntbombdood> ~exec self.my_file.close()
01:50:39 <bsmntbombdood> fun
01:54:10 <bsmntbombdood> whoever breaks out of my chroot and tells me what's in the file /home/bsmntbombdood/proof.txt gets a prize
01:59:47 <CakeProphet> ~pexec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read())
02:00:18 <bsmntbombdood> haha
02:00:23 <bsmntbombdood> You have to break out first
02:00:47 <CakeProphet> ....that's what the first bit was.
02:01:09 <bsmntbombdood> And that didn't even get executed
02:01:14 <bsmntbombdood> use ~exec
02:01:23 <CakeProphet> ~exec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read())
02:01:42 <bsmntbombdood> and join #bsmnt_bot_chroot_errors so you can see all the exceptions that you just raised
02:01:59 <CakeProphet> ~exec sys.stdout.write( file(sys.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read())
02:02:19 <CakeProphet> ~exec sys.stdout.write( file(os.path.abspath(".").partition("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read())
02:02:32 <CakeProphet> ....you're not using version 2.5
02:02:41 <bsmntbombdood> no, unfortuneatly
02:02:56 <CakeProphet> ~exec sys.stdout.write( file(os.path.abspath(".").split("/home/")[0] + "/home/bsmntbombdood/proof.txt", "r").read())
02:03:47 <CakeProphet> ~exec sys.stdout.write( file(os.path.abspath(".").split("/home/")[0] + "home/bsmntbombdood/proof.txt", "r").read())
02:04:07 <bsmntbombdood> Like I said, you have to break out first
02:04:11 <CakeProphet> ~exec sys.stdout.write(os.path.abspath("."))
02:04:11 <bsmnt_bot_chroot> /
02:04:17 <CakeProphet> >.>
02:04:52 <CakeProphet> ~exec sys.stdout.write(os.listdir())
02:04:53 <oerjan> cakeprophet: you are aware of what a chroot _is_, are you?
02:04:58 <CakeProphet> ...nope
02:05:15 <CakeProphet> ~exec sys.stdout.write(os.listdir("/"))
02:05:52 <bsmntbombdood> ~exec sys.stdout.write(str(os.listdir("/")))
02:06:09 <CakeProphet> permission denied.
02:06:11 <bsmntbombdood> ha!
02:06:13 <oerjan> 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 <bsmntbombdood> I'll give you read access to /
02:07:00 <bsmntbombdood> ~exec sys.stdout.write(str(os.listdir("/")))
02:07:01 <bsmnt_bot_chroot> ['bin', 'bot', 'etc', 'lib', 'usr']
02:07:20 <oerjan> in other words, the file you want is not inside what your process sees as "/"
02:07:29 <CakeProphet> ~exec sys.stdout.write(os.walk("/"))
02:08:14 <bsmntbombdood> ooops, bug in my code
02:08:21 <bsmntbombdood> Actually, no
02:08:21 <CakeProphet> Thought so :P
02:08:35 <CakeProphet> ~exec sys.stdout.write(list(os.walk("/")))
02:08:38 <oerjan> i don't even know if it is possible, although GregorR mentioned something about devices that _might_ be usable, if available.
02:08:59 <CakeProphet> ~exec sys.stdout.write(str(os.walk("/")))
02:09:00 <bsmnt_bot_chroot> <generator object at 0xb7c4a68c>
02:09:03 <CakeProphet> ...
02:09:06 <oerjan> I guess he is the one on the channel most likely to succeed if it is possible.
02:09:16 <CakeProphet> ~exec sys.stdout.write(str(list(os.walk("/"))))
02:09:19 -!- bsmnt_bot_chroot has quit (Excess Flood).
02:09:24 <oerjan> :D
02:09:27 <bsmntbombdood> dude
02:09:34 <bsmntbombdood> heh
02:09:34 -!- bsmnt_bot_chroot has joined.
02:09:38 <bsmntbombdood> one sec
02:10:40 <bsmntbombdood> 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 <bsmntbombdood> ~exec print list(os.walk("/"))
02:11:56 <bsmntbombdood> wow, that's one long list
02:12:18 <bsmntbombdood> there's a ton of files in /usr/lib/python
02:15:10 <bsmntbombdood> I think you have to get root to break out of a chroot
02:15:28 * bsmntbombdood giggles
02:15:45 <bsmntbombdood> ~exec sys.stdout.write(str(os.getuid()))
02:15:46 <bsmnt_bot_chroot> 1343
02:15:58 <bsmntbombdood> as you can see, you aren't root already
02:16:07 -!- CakeProphet_ has joined.
02:16:14 <bsmntbombdood> te he he
02:17:04 <bsmntbombdood> ~exec os.setuid(0)
02:17:11 <bsmntbombdood> ~exec os.seteuid(0)
02:18:48 <CakeProphet_> ~exec sys.stdout.write(str(os.walk("/")))
02:18:48 <bsmnt_bot_chroot> <generator object at 0xb7cdd92c>
02:18:49 <CakeProphet_> :P
02:19:30 <bsmntbombdood> ~exec sys.stdout.write(str(list(os.walk("/bin"))))
02:19:31 <bsmnt_bot_chroot> [('/bin', [], ['bash'])]
02:19:41 <bsmntbombdood> ~exec sys.stdout.write(str(list(os.walk("/etc"))))
02:19:42 <bsmnt_bot_chroot> [('/etc', [], ['hosts', 'passwd', 'resolv.conf'])]
02:19:54 <bsmntbombdood> ~exec sys.stdout.write(str(list(os.walk("/bot"))))
02:19:54 <bsmnt_bot_chroot> [('/bot', [], ['betterbot.py', 'start.sh', 'better.sh', 'ircbot.py'])]
02:20:21 <bsmntbombdood> ...etc
02:21:15 <bsmntbombdood> heh, I know of a way to get root
02:21:27 <bsmntbombdood> I think
02:21:43 <CakeProphet_> you could make a symbolic link.
02:21:56 <bsmntbombdood> CakeProphet: Nope, symbolic links resolve inside the chroot
02:22:13 <bsmntbombdood> ~exec self.my_file.open("/bot/ircbot.py", "a")
02:22:21 <bsmntbombdood> ~exec self.my_file = open("/bot/ircbot.py", "a")
02:22:30 <bsmntbombdood> ~exec self.my_file = open("/bot/ircbot.py", "w")
02:22:41 <bsmntbombdood> heh, nevermind, that idea won't work
02:23:29 <bsmntbombdood> ~exec self.my_file = open("/bot/start.sh", "a")
02:23:41 <bsmntbombdood> k, i'm safe
02:24:08 <oerjan> hm...
02:25:20 <oerjan> ~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 <oerjan> ~exec sys.stdout.write(str(list(os.walk("/../.."))))
02:26:22 -!- bsmnt_bot_chroot has quit (Excess Flood).
02:26:25 <bsmntbombdood> ...
02:26:28 -!- bsmnt_bot_chroot has joined.
02:27:14 <oerjan> ~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 <oerjan> ~exec sys.stdout.write(str(list(os.walk("/..")))[0..50])
02:28:24 <bsmntbombdood> [0:50]
02:28:37 <oerjan> ~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 <bsmnt_bot_chroot> [('/..', ['bin', 'bot', 'etc', 'lib', 'usr'], []),
02:29:03 <oerjan> ~exec sys.stdout.write(str(list(os.walk("/../..")))[0:50])
02:29:06 <bsmnt_bot_chroot> [('/../..', ['bin', 'bot', 'etc', 'lib', 'usr'], [
02:29:23 <oerjan> ok, not immensely useful. or maybe...
02:29:30 <oerjan> ~exec sys.stdout.write(str(list(os.walk("/")))[0:50])
02:29:34 <bsmnt_bot_chroot> [('/', ['bin', 'bot', 'etc', 'lib', 'usr'], []), (
02:29:52 <bsmntbombdood> ~exec sys.stdout.write(str(list(os.walk("/")))[0:298])
02:29:56 <bsmnt_bot_chroot> [('/', ['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 <bsmntbombdood> yikes, my write method needs to split it up into chunks
02:30:44 <oerjan> ~exec os.system("pwd")
02:32:05 <oerjan> 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 <bsmntbombdood> ~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 <bsmntbombdood> good
02:35:47 <bsmntbombdood> ~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 <pikhq> You fail.
02:36:08 <pikhq> (intentionally, but. . .)
02:36:14 <bsmntbombdood> ?
02:36:30 <pikhq> 19:30 -!- bsmnt_bot_chroot [n=bsmnt@abacus.kwzs.be] has quit [Client Quit]
02:36:34 <pikhq> Failure. :p
02:36:40 <bsmntbombdood> how is that a failure?
02:39:57 <bsmntbombdood> ~quit
02:39:58 -!- bsmnt_bot_chroot has quit (Client Quit).
02:40:00 -!- bsmnt_bot_chroot has joined.
02:40:49 <pikhq> Just felt like accusing you of failure.
02:41:22 <bsmntbombdood> oh, ok
02:41:41 <bsmnt_bot_chroot> no, you fail
02:49:54 -!- oerjan has quit (Remote closed the connection).
02:50:03 -!- oerjan has joined.
02:51:38 <bsmntbombdood> FO FOO FOOO FOO SPAM AND EGGS!
02:53:19 <CakeProphet_> ....emacs really could use a better GUI.
02:53:41 <bsmntbombdood> 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 <CakeProphet_> Sometimes you -just- want to get the job done... not tinker wth your job-doing device.
02:55:18 <pikhq> Oddly enough, this masochist UIs are actually a better way to get the job done for some of us.
02:55:22 <pikhq> Like me.
02:56:47 <CakeProphet_> I prefer good ol' point-and-click to memorizing a crapload of shellcommands. :P
02:57:25 <pikhq> Once it's commited to memory, your interface using is limited to the speed of your typistry.
02:57:42 <pikhq> I type at 70wpm, but I sure as hell don't mouse at a comparable speed.
02:58:01 <CakeProphet_> directory names are kind... annoying to work with.
02:58:12 * CakeProphet_ plays MUDs a lot... thus understands.
02:58:23 <pikhq> Directory names are annoying?
02:58:33 <CakeProphet_> Painfully so.
02:58:45 <CakeProphet_> It's one of my main dislikes of the current OS layout.
02:58:54 <CakeProphet_> The directory system./
02:59:18 <pikhq> $ less re<tab>ba<tab>ba<tab>0<tab>
02:59:27 <pikhq> Compare with:
02:59:34 <bsmntbombdood> CakeProphet_: http://www.catb.org/~esr/writings/unix-koans/gui-programmer.html
02:59:36 <pikhq> $ less release/basm/basm.0.b
03:00:06 <pikhq> 16 characters versus 26.
03:00:12 <pikhq> Tab completion = :)
03:00:18 <bsmntbombdood> indeed
03:00:40 * pikhq only uses the mouse for copy-paste. . .
03:00:52 <pikhq> And only because X makes it so. Damned. Simple.
03:01:27 <bsmntbombdood> If you used screen, you wouldn't even have to use the mouse
03:01:30 <CakeProphet_> pikhq, Pfft... who the hell said I was endorsing that :P
03:02:03 <pikhq> bsmntbombdood: Actually, screen doesn't seem to interface with the X copy buffer too well.
03:02:13 <pikhq> And if it does, well, I'm too lazy to get that set up right.
03:02:16 <bsmntbombdood> it doesn't, at all, I think
03:02:50 <pikhq> 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 <bsmntbombdood> I tried conkeror once
03:03:24 <pikhq> Who said it's the *Windows* command prompt I use?
03:03:29 <pikhq> That thing really, really sucks.
03:03:33 <CakeProphet_> and applications that run directly -through- the shell? worst... experience... ever.
03:03:48 <bsmntbombdood> I stopped using it because it completely took over the chrome
03:03:49 <CakeProphet_> (I've only done the later on Linux)
03:03:55 <pikhq> Did I happen to mention that the Windows shell sucks?
03:04:01 <pikhq> bsmntbombdood: I don
03:04:06 <pikhq> 't like the chrome. ;)
03:04:19 <bsmntbombdood> But I have extensions that use it :/
03:04:24 <pikhq> :/
03:04:32 <CakeProphet_> Any command prompt... would be more accurate.
03:04:39 <bsmntbombdood> conkeror was pretty good other than that though
03:04:47 <CakeProphet_> even the Linux shell is a tad awkward...
03:05:07 <bsmntbombdood> not really
03:05:17 <CakeProphet_> 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 <pikhq> zsh is like an extension of myself.
03:05:45 <pikhq> A user interface doesn't get much better than that.
03:06:16 * bsmntbombdood uses bash ;)
03:06:18 <CakeProphet_> The problem is... I have no clue how to better organize data than with a directory system.
03:06:27 <CakeProphet_> but it seems so obvious that there's a better way.
03:07:59 <pikhq> That way is a directory system filled with auto-organizing meta-directories. ;)
03:08:15 <pikhq> So one gets ~/audio, which automagically organizes itself.
03:08:44 <pikhq> One can set it up to organize by artist then album, album then artist, year album then artist, etc.
03:09:28 <bsmntbombdood> orly?
03:09:37 <pikhq> bsmntbombdood: Just an idea.
03:12:09 <bsmntbombdood> Seems rather un-general to me
03:12:14 <pikhq> True.
03:12:17 <pikhq> Just a thought.
03:12:40 <CakeProphet_> THat's just.... directories with auto-organization.
03:12:45 <pikhq> And said idea, clearly a (mild) improvement on the current system, was brought up with a few seconds of thought.
03:12:52 <oerjan> Sounds like a relational database.
03:12:52 <pikhq> CakeProphet_: And it's an improvement, no?
03:13:03 <CakeProphet_> pikhq, I hate organization. :P
03:13:07 <pikhq> oerjan: That'd be a good way of having it done underneath.
03:13:28 <CakeProphet_> databases are my other pet peeve.
03:13:32 <bsmntbombdood> sounds like itunes
03:13:43 <pikhq> bsmntbombdood: When applied to audio, it would be.
03:14:02 <oerjan> CakeProphet: And when you think about it you don't like _computers_ too much, either? ;)
03:14:24 <bsmntbombdood> flat files > database
03:14:26 <pikhq> One could apply it to just about anything if the interface to the underlying database were done right.
03:14:38 <CakeProphet_> Computers are'nt very organized...
03:14:48 <CakeProphet_> at least... not working with them.
03:15:01 <pikhq> 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 <pikhq> CakeProphet_: Correction: *Windows* computers aren't very organized.
03:16:00 <pikhq> It's spaghetti code. . . as the interface!
03:16:17 <CakeProphet_> I like simplicity... and if you can't make it simple, then make it messy.
03:16:30 <pikhq> What the hell is wrong with you?
03:16:42 <CakeProphet_> ...no clue.
03:16:47 <bsmntbombdood> a CLI is prety simple
03:17:03 <pikhq> Windows is a *case study* in why "messy" is the wrong way to do things.
03:17:46 <CakeProphet_> *shrugs* I don't really.. erm... like Windows.
03:18:02 <pikhq> Well, your philosophy seems to describe the Windows way of doing things.
03:18:18 <CakeProphet_> ...sure, if you grossly oversimplfy things.
03:18:44 <pikhq> Nope.
03:18:54 <pikhq> No oversimplification.
03:18:59 <CakeProphet_> There are other factors involved in windows besides messiness...
03:19:10 <CakeProphet_> it's not a simple one-to-one (messy -> Windows) relationship.
03:19:18 <pikhq> Yes, but messiness is the single thing binding the whole thing together.
03:19:34 <CakeProphet_> ....and?
03:20:05 <pikhq> It's like, uh, the core idea in the behemoth (if there is such a thing)?
03:20:46 <CakeProphet_> Regardless, I don't like Windows.
03:21:05 <CakeProphet_> I do however... like the chaotic mess that is my bedroom.
03:21:20 <pikhq> I like limited amounts of chaos.
03:21:31 <pikhq> But only when it's my *own* chaos.
03:21:32 <CakeProphet_> chaos made the world. ;)
03:21:54 <pikhq> If it's the chaos of others, well, I hate it with a passion.
03:22:48 <bsmntbombdood> That's why it's easier to write your own messy library than learn someone elses
03:22:58 <CakeProphet_> ....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 <pikhq> 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 <CakeProphet_> after I... squash the countless bugs.
03:24:09 <pikhq> I find that bugs are easy to squash when the code is clean and readable.
03:24:11 <CakeProphet_> I have a bad habit of not testing code in pieces.
03:24:20 <CakeProphet_> 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 <pikhq> ;)
03:24:54 <CakeProphet_> pikhq, You have a bad habit of being modest too.
03:24:59 <bsmntbombdood> interpreted languages are great in the respect
03:25:12 <pikhq> It helps that I do interpreted languages most of the time.
03:25:39 <CakeProphet_> Most "testing" involves a series of a few function calls.
03:25:46 <pikhq> CakeProphet_: It's a bit of a character flaw.
03:27:23 <CakeProphet_> hmmm... Python's ideol of readability is actually kind of hard for me to read.
03:27:31 <CakeProphet_> It's overly drawn out.
03:27:36 <CakeProphet_> terseness is more fun.
03:28:40 <oerjan> CakeProphet: try Haskell :)
03:28:41 * pikhq does Tcl
03:28:57 <oerjan> it has _both_
03:29:16 <CakeProphet_> My personal definition of "elegant" is anything that can be summed up in a few quick lines.
03:29:40 <pikhq> Allow me to describe my elegant BFM compiler.
03:29:58 <CakeProphet_> ....do go on...
03:30:35 <pikhq> 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 <pikhq> The passes between macro and brainfuck are completely optional.
03:30:53 <CakeProphet_> hmmm...
03:30:56 <pikhq> Voila, that's the basic structure of the compiler.
03:31:05 <CakeProphet_> CLI's are definetely better on the input side of things...
03:31:16 <pikhq> Indeed they are.
03:31:25 <CakeProphet_> but... it's harder to see the "big picture" of things in a CLI...
03:31:32 <pikhq> Not for me.
03:32:08 <CakeProphet_> a GUI gives you everything you need... a CLI gives you fleeting bits of text as output.
03:32:11 <pikhq> "while foo;do bar;baz;done" is much simpler than the GUI equivalent (clicking over and over and over)
03:32:27 <CakeProphet_> CLI is better for inputting... but I think it fails at outputting productively.
03:32:41 <pikhq> It outputs very productively, IMO.
03:33:02 <pikhq> (when was the last time you needed a program to output pictures at you instead of text?)
03:33:16 <bsmntbombdood> Web browser
03:33:23 <CakeProphet_> I was about to say.
03:33:30 <pikhq> Instead of text?
03:33:34 <CakeProphet_> I really don't feel like mentally imagining what the HTML will render as.
03:33:35 <pikhq> I see pictures and text.
03:33:44 * pikhq shows CakeProphet_ Elinks
03:33:58 <bsmntbombdood> Text based web browers are _terrible_
03:34:08 <pikhq> bsmntbombdood: I find them useful on occasion.
03:34:12 <pikhq> (any time I break X)
03:34:43 <CakeProphet_> so... the best hybrid methinks would be a command line with a nicely coherant graphical output.
03:34:48 <CakeProphet_> like... an IRC client.
03:36:50 * pikhq shows CakeProphet_ Firefox running Conkeror
03:36:50 <pikhq> 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 <pikhq> No graphics needed (seriously: it's overkill for what amounts to a screenful of text)
03:37:50 <CakeProphet_> 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 <bsmntbombdood> despite using both
03:37:58 <CakeProphet_> with a GUI... all the infermation is sprawled out before you.
03:38:37 <CakeProphet_> No need to repeatedly type a command to see wat the title, mode, usernames
03:38:49 <CakeProphet_> no need to sift through tons of text... because the output is split into channel tabs.
03:40:02 <pikhq> You, um, realise that that's how irssi works?
03:40:15 <CakeProphet_> ...that's how most IRC clients work.
03:40:20 <CakeProphet_> via a GUI
03:40:30 <pikhq> Via a TUI.
03:40:40 <pikhq> (it sure as hell ain't graphical)
03:40:59 <CakeProphet_> I consider a GUI anything that has more nuts and bolts than a terminal.
03:41:16 <CakeProphet_> it has tabs... you can click on them... that makes it graphical.
03:41:18 <pikhq> In which case, irssi wouldn't count as a GUI.
03:41:26 <pikhq> It's a terminal app.
03:41:32 <bsmntbombdood> CakeProphet_: Is curses a gui?
03:41:39 <pikhq> You hit alt-(window number) to switch channels.
03:41:55 <CakeProphet_> Not really...
03:42:13 <pikhq> Then irssi, being a curses app, isn't a GUI.
03:42:39 <CakeProphet_> Well then... that's exactly what I mean by a hybrid then.
03:43:00 <CakeProphet_> 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 <pikhq> 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 <CakeProphet_> 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 <pikhq> 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 <pikhq> (although my typistry is such that that's actually rather close)
03:48:54 <CakeProphet_> GUI output, TUI input.... I want my OS GUI to be a giant curses app.
03:49:32 <pikhq> I'm already, like, really happy with mine, as I already said, so. . .
03:49:46 <CakeProphet_> really?
03:49:49 <CakeProphet_> are you sure?
03:49:51 <CakeProphet_> go on.
03:49:54 <pikhq> Pretty certain.
03:49:56 <CakeProphet_> do telll.
03:50:20 <pikhq> Ratpoison + screen + irssi + zsh + (Firefox + conkeror)
03:50:28 <pikhq> + emacs + emacs + emacs
03:51:18 <CakeProphet_> The only thing I'm missing is a nice IDE.
03:51:31 <CakeProphet_> Emacs is just too damn complicated for what I want to use it for.
03:52:56 <bsmntbombdood> emacs!!!!!!!!
03:53:05 <bsmntbombdood> emacs make me all warm and fuzzy inside
03:53:39 <bsmntbombdood> ion > ratpoison ;)
03:53:56 <pikhq> bsmntbombdood: Yeah, well. . .
03:54:07 <pikhq> At least you've succumbed to the pro-keyboard side of things.
03:54:29 <CakeProphet_> perhaps my hatred of directory names stems from the fact that everything in Windows has absurdly long path na,es.
03:54:42 <pikhq> CakeProphet_: Sounds about right.
03:54:45 <bsmntbombdood> I still use my mouse plenty
03:55:03 * CakeProphet_ uses his keyboard and mouse about equal.
03:55:15 <RodgerTheGreat> GUI ftw
03:55:28 <bsmntbombdood> ~ctcp RodgerTheGreat SPANK
03:56:07 <CakeProphet_> Maybe a directory system with like...
03:56:21 <CakeProphet_> at max... 2 directory depth for the "main" stuff.
03:56:29 <pikhq> 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 <RodgerTheGreat> if I'm using a computer, I want it running IBM-DOS or OSX.
03:56:58 <RodgerTheGreat> I still have dosshell's key-combos in my fingers.
03:57:01 <pikhq> RodgerTheGreat: FreeDOS: Like IBM-DOS, but you can actually *obtain* it!
03:57:05 <CakeProphet_> heretic!
03:57:19 <pikhq> (that, and it's Stallman-endorsed)
03:57:33 <RodgerTheGreat> I already *have* IBM-DOS, on a set of 3.5 inch floppies, as it should be
03:57:44 <pikhq> But FreeDOS is still maintained!
03:57:53 <bsmntbombdood> heh
03:57:54 <pikhq> And is free as in freedom!
03:58:03 <RodgerTheGreat> and the fact that it *isn't* "stallman-endorsed" is all the more reason for me to use it
03:58:03 <bsmntbombdood> few weeks, eh?
03:58:21 <pikhq> bsmntbombdood: Don't remember the specific time.
03:58:29 <RodgerTheGreat> DOS doesn't need to be maintained.
03:58:50 <RodgerTheGreat> IBM DOS v6.0 is precisely how I want my DOS to feel.
03:59:45 <RodgerTheGreat> freeDOS has way too much unix in it.
04:00:35 <pikhq> RodgerTheGreat: Why do you not want to have control over your computer?
04:00:54 <pikhq> That would be GNU/FreeDOS.
04:00:59 <RodgerTheGreat> peh
04:01:09 <pikhq> FreeDOS at it's core is, like, DOS++;
04:01:22 <pikhq> And, like, why am I, like, using, like, like?
04:02:10 <RodgerTheGreat> freeDOS is to DOS proper as BlitzBASIC is to QBASIC. They just don't *get* it.
04:02:28 <oerjan> because you, like, like it?
04:02:40 -!- digital_me has joined.
04:03:37 <pikhq> Well, if you care enough, surely you could make FreeDOS behave like it should?
04:03:39 <bsmntbombdood> ha, DOS
04:03:59 <pikhq> After all, you've got the full source and all that.
04:04:16 <RodgerTheGreat> why would I bother *making* freeDOS how I want, when IBM DOS is *already* how I want
04:04:42 <RodgerTheGreat> the entire point is that I don't care
04:04:48 <RodgerTheGreat> I have a DOS that I like
04:05:02 <RodgerTheGreat> I have the original media, and I have a USB floppy drive
04:05:48 <pikhq> And this gets all the way back into the issue of you not wanting control over your computer.
04:06:44 <RodgerTheGreat> 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 <pikhq> 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 <RodgerTheGreat> 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 <bsmntbombdood> ~quit
05:06:49 -!- bsmnt_bot_chroot has quit.
05:06:52 -!- bsmnt_bot_chroot has joined.
05:06:57 <bsmntbombdood> ~ps
05:06:58 <bsmnt_bot_chroot> None
05:07:34 <bsmntbombdood> ~exec self.register_raw(".*", lambda x,y,z : "this fails")
05:07:37 <bsmntbombdood> a
05:08:27 -!- bsmnt_bot_chroot has quit (Client Quit).
05:08:29 -!- bsmnt_bot_chroot has joined.
05:08:33 <bsmntbombdood> ~exec self.register_raw(".*", lambda x,y,z : "this fails")
05:08:35 <bsmntbombdood> a
05:08:43 <bsmntbombdood> good
05:09:13 <bsmntbombdood> ~quit
05:09:13 -!- bsmnt_bot_chroot has quit (Client Quit).
05:09:15 -!- bsmnt_bot_chroot has joined.
05:09:18 <bsmntbombdood> ~exec self.register_raw(".*", lambda x,y,z : "this fails")
05:09:20 <bsmntbombdood> a
05:09:23 <bsmntbombdood> a
05:09:26 <bsmntbombdood> sweet
05:32:21 -!- digital_me has quit ("goodnight").
05:57:47 -!- ShadowHntr has joined.
06:11:15 <oerjan> whoops.
06:27:17 -!- ShadowHntr has quit (Client Quit).
06:41:12 <RodgerTheGreat> '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 <RodgerTheGreat> hello
15:43:32 <SimonRC> hi
15:45:06 * RodgerTheGreat feels deja-vu
16:02:23 <SimonRC> :-)
17:30:02 -!- tgwizard has joined.
18:03:10 <SimonRC> 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 <bsmntbombdood> 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 <ihope> Basement bot change root errors.
20:58:05 <ihope> 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 <bsmntbombdood> ihope: ?
20:59:19 <ihope> The phrase "basement bot change root errors".
20:59:28 <bsmntbombdood> change?
20:59:40 <ihope> That's what "chroot" is, no? "Change root"?
20:59:40 <bsmntbombdood> ooh, chroot
20:59:44 <bsmntbombdood> yeah
20:59:46 <ihope> Just like chmod and... uh.
20:59:52 <bsmntbombdood> I misread root as chroot
21:00:04 <ihope> Oh! chown!
21:00:11 <bsmntbombdood> chown is a funny word
21:00:16 <ihope> Yep.
21:00:33 <ihope> Chowns work at circles, right?
21:00:59 -!- jix has quit ("Bitte waehlen Sie eine Beerdigungnachricht").
21:01:35 <bsmntbombdood> gra
21:01:36 <bsmntbombdood> r
21:01:42 -!- digital_me has joined.
21:01:42 <bsmntbombdood> ~exec print "foo"
21:01:55 <bsmntbombdood> ~exec print >> sys.stdout, "foo"
21:01:55 <bsmnt_bot_chroot> foo
21:02:03 <bsmntbombdood> THAT SHOULDN'T HAPPEN
21:02:18 <bsmntbombdood> ugh
21:02:27 <bsmntbombdood> ~exec print >> sys.stderr, "foo"
21:03:16 <bsmntbombdood> ~exec sys.stdout = IRCFileWrapper(self.raw, "#esoteric")
21:03:21 <bsmntbombdood> ~exec print "foo"
21:03:31 <bsmntbombdood> ~exec print >> sys.stdout, "foo"
21:03:32 <bsmnt_bot_chroot> foo
21:04:06 <bsmntbombdood> ~exec print >>sys.stdout, sys.stdout
21:04:06 <bsmnt_bot_chroot> <__main__.IRCFileWrapper instance at 0xb7c8188c>
21:04:20 <bsmntbombdood> ~exec sys = __import__("sys")
21:04:22 <bsmntbombdood> ~exec print >>sys.stdout, sys.stdout
21:04:22 <bsmnt_bot_chroot> <__main__.IRCFileWrapper instance at 0xb7c8140c>
21:04:29 <bsmntbombdood> ~quit
21:04:29 -!- bsmnt_bot_chroot has quit.
21:04:30 <RodgerTheGreat> woah, sweet: http://www.sics.se/~adam/ubasic/
21:04:32 -!- bsmnt_bot_chroot has joined.
21:04:40 <bsmntbombdood> ~exec print >>sys.stdout, sys.stdout
21:04:41 <bsmnt_bot_chroot> <__main__.IRCFileWrapper instance at 0xb7c0840c>
21:04:44 <bsmntbombdood> hmph
21:06:12 <bsmntbombdood> that's broken
21:08:07 <bsmntbombdood> ~exec print "foo"
21:08:22 <bsmntbombdood> ~exec exec "print sys.stdout"
21:08:38 <bsmntbombdood> ~exec exec "print sys.stdout" in globals()
21:08:44 <bsmntbombdood> ~exec exec "print sys.stdout()" in globals()
21:09:56 <bsmntbombdood> arrrrrrrrrrrrrrrrrrrrrrrrrrrrrugula
21:12:18 <ihope> Arrrrrrrrrrrrrrrrrrrrrrrrrrrrrugula?
21:12:36 <bsmntbombdood> 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 <bsmntbombdood> arrugula
21:38:28 -!- fizzie has joined.
21:55:05 <CakeProphet> hmmmm...
21:55:20 <CakeProphet> My ORK variant looks pretty neat.
21:55:34 <CakeProphet> It uses a data strcture I've never actually seen in any other language.
21:56:33 <bsmntbombdood> which is?
21:57:23 <CakeProphet> a "ring"... which is basically a sequence of co-routines.
21:57:46 <CakeProphet> 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 <CakeProphet> 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 <CakeProphet> 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 <bsmntbombdood> huh?
22:09:53 <CakeProphet> 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 <CakeProphet> it makes it trivial to imlement something like.... a poison effect.
22:10:16 <CakeProphet> you just pop the posion function onto the ring.
22:10:26 <bsmntbombdood> what's poison effect?
22:11:19 <CakeProphet> an example of how my MUD could use a ring effectively?
22:11:32 <bsmntbombdood> ...
22:12:02 <CakeProphet> oh no... Bob got bit by a MUD-snake... now he's poisoned and is losing health...
22:12:04 <CakeProphet> or something./
22:12:08 <CakeProphet> bad example though...
22:12:14 <bsmntbombdood> I don't get it
22:16:38 <CakeProphet> familiar with how coroutines work?
22:17:01 <bsmntbombdood> coroutine is a python style generator, right?
22:17:11 <CakeProphet> Not exactly...
22:17:20 <CakeProphet> generators are a simplified coroutine though.
22:17:30 <CakeProphet> Python added coroutine emulation for generations in version 2.5
22:17:42 <CakeProphet> so that you can do things like x = yield 5
22:19:07 <bsmntbombdood> what does that do?
22:19:38 <CakeProphet> returns 5, freezes execution, and awaits for either the next() or the new send() method to be called./
22:19:57 <bsmntbombdood> oooh, send
22:20:07 <CakeProphet> send is like next... except you can pass it an argument... which becomes the return value of the yield expression.
22:20:13 <bsmntbombdood> that sounds fun
22:20:17 <CakeProphet> if you did MyGenerator.send(10)
22:20:24 <CakeProphet> x would be assigned to 10...
22:20:37 <CakeProphet> so its a generator that can take arguments.
22:20:46 <CakeProphet> upon subsequent calls.
22:20:57 <CakeProphet> rather than -only- the first call... as it was in 2.4
22:21:07 <bsmntbombdood> that's pretty cool
22:21:21 <CakeProphet> So a ring... is a sequence of these.
22:22:51 <CakeProphet> 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 <CakeProphet> 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 <CakeProphet> hmm... it probably qualifies as a self-modifying data type as well...
22:27:11 <CakeProphet> 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 <bsmntbombdood> Yep, I still don't understand why that's useful
22:27:32 <CakeProphet> eh... it's not terribly useful... but it'll be handy for this specific task.
22:28:24 <CakeProphet> 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 <CakeProphet> 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 <CakeProphet> It's callbacks basically.
22:33:57 <CakeProphet> It makes things a little more complicated... but its compensated by making everything super easy to add on to.
22:41:23 <SimonRC> Have you looked at the "Platypus" alternative library for Inform?
22:41:37 <SimonRC> It might be of interest.
22:47:43 <CakeProphet> I don't know what Inform is.
22:50:30 <CakeProphet> this is probably the best way to do it... it simplifies a lot of the tangle involved with event programming.
22:54:29 <SimonRC> 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 <SimonRC> see section 2 of this page:
22:55:07 <SimonRC> http://homepage.ntlworld.com/elvwood/InteractiveFiction/Platypus/Summary.html#2
22:57:58 <CakeProphet> eh... it looks neat... but I don't think I'd like it better.
22:58:30 <CakeProphet> 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 <CakeProphet> 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 <SimonRC> I suppose so
←2007-01-08 2007-01-09 2007-01-10→ ↑2007 ↑all