00:10:46 <Sgeo> Eversion LP > Homework
00:20:48 -!- TLUL has joined.
00:39:52 -!- FireFly has quit (Quit: swatted to death).
00:56:50 -!- Ilari has quit (Quit: maintenance).
00:58:09 <Sgeo> Is http://www.wolframalpha.com/input/?i=integral+of+4-x+from+-1+to+0 Wolfram Alpha mistaken here, or am I screwing up my math?
00:58:35 <Deewiant> In all likelihood it's you. :-P
00:59:47 <pikhq> Sgeo: You're screwing up.
01:00:46 <Sgeo> 4(0) - 0 - [-4 - 1/2] = +5/2
01:02:05 <pikhq> See, you're screwing up.
01:14:16 -!- augur has joined.
01:28:52 <elliott> Sgeo: you're about to be made active in agora
01:28:56 <elliott> and then what if people invade?!
01:29:03 <elliott> we can't even get 8 objectors to a dangerous scammer right now!!!
01:32:43 <Sgeo> I thought everyone was so in love with "It should be so difficult to make arbitrary power-1 changes, no need to defend power-3 stuff against power-1 stuff" argumet
01:37:27 <Sgeo> It's Agoran culture's fault
01:37:49 <elliott> heh, git does directories the same way as elliott's-view-of-scapegoat
01:38:00 -!- Iwnda0 has joined.
01:38:38 <elliott> heh, and stores the root directory hash with a patch
01:38:41 <Iwnda0> I think you'll find that the universe pretty much covers everything.
01:40:11 <elliott> I can go back in time and make a different commit instead
01:40:11 <elliott> Commits not reachable from any head are eventually discarded
01:40:13 <elliott> Typically after 90 days or so
01:40:17 <elliott> ok so it has anonymous commits too ...
01:41:01 <Gregor> Iwnda0: SHUT UP WOMAN GET ON MY HORSE
01:41:01 <Iwnda0> Look at my horse, my horse is amazing.
01:41:28 <elliott> Iwnda0: I refuse to entertain your notions.
01:41:46 <Iwnda0> dont rock the boat baby
01:42:09 <elliott> Okay, so git just stores the entire current commit's tree ...
01:42:36 <elliott> http://perl.plover.com/classes/git/samples/slide039.html "Look! It's like darcs but with an inferior UI!"
01:43:15 <elliott> TODO: read http://www.newartisans.com/2008/04/git-from-the-bottom-up.html
01:44:03 <Iwnda0> is this the chat of intellectual geeks
01:44:10 <Iwnda0> because that's what im looking for
01:44:42 <elliott> Iwnda0: it's for esoteric programming languages.
01:44:50 <elliott> but, yes, it's rarely on-topic.
01:45:53 <elliott> Iwnda0: If I start ranting about something this goat that it's me singlehandedly destroying my inner concept of version control systems through overthinking.
01:46:00 <zzo38> Iwnda0: And if you read the topic message, they always change it, except the log URL should stay there. You can read the log if you want to.
01:46:21 <elliott> They aaalways change it :P
01:46:25 <elliott> They being the gods, obviously.
01:46:49 -!- Ilari has joined.
01:46:51 <elliott> Iwnda0: Additionally, EgoBot, HackEgo and fungot are absolutely not bots and acting as if they are will hurt their feelings.
01:46:52 <fungot> elliott: well yeah... loop through the sequence, it gives bizarre results.... but it seems what he actually checks
01:47:03 <elliott> (Also http://esolangs.org/ since nobody reads the ChanServ message.)
01:47:06 <zzo38> Actually anyone can, I am the last guy to change the topic message.
01:47:54 <zzo38> Iwnda0: Look at the wiki if you are interested with esoteric programming.
01:48:32 <Iwnda0> ok thanks for all of that
01:48:37 * Sgeo wonders what elliott thinks of Ur/Web
01:48:56 <Sgeo> IMO, single-purpose languages scare me a bit, but it looks interesting. But magic syntax scares me
01:49:08 <elliott> Sgeo: It's an interesting research topic by an expert and innovator in the field, the web part is totally irrelevant, and if you fall in love with it I will tear your heart out and smash it to pieces.
01:49:48 <elliott> Anyone trying to understand Ur/Web without a solid background in programming language design and type theory is really going to get nothing out of the exercise.
01:53:13 -!- elliott has quit (Quit: Leaving).
01:54:16 -!- TLUL has quit (Quit: *disappears in a puff of orange smoke*).
01:55:03 <zzo38> Sgeo: Is it single-purpose?
01:55:40 -!- Iwnda0 has left (?).
01:55:45 <Sgeo> I don't know how well Ur works as a standalone language
01:59:34 <Sgeo> http://www.impredicative.com/ur/
02:00:03 <zzo38> I don't know. What I do know is I have made a few programming languages meant for a single-purpose but can do other things as well due to turing-complete. I don't know if Ur/Web can make command-line programs either.
02:03:54 <coppro> it does not look as clean as haskell
02:04:16 <zzo38> Do you know how to help make a few things with TAVSYS standard libraries?
02:10:38 <coppro> Sgeo: Ur seems ugly compared to haskell
02:10:58 -!- Gregor has changed nick to ILoveEval.
02:13:18 * Sgeo assassinates ILoveEval for the good of security
02:15:02 <Sgeo> Do you love it eval(some_user_entered_supposed_number) much?
02:21:39 -!- augur has quit (Remote host closed the connection).
02:23:51 -!- oerjan has joined.
02:24:58 -!- augur has joined.
02:28:18 -!- augur has quit (Remote host closed the connection).
02:39:53 -!- zeotrope has joined.
02:41:21 -!- tswett has changed nick to DDDD.
02:41:41 -!- DDDD has changed nick to tswett.
02:48:40 -!- wareya has joined.
02:51:46 -!- wareya_ has quit (Read error: Operation timed out).
03:00:22 <sshc> Your C is terrible.
03:00:32 <sshc> What say you, pikhq?
03:00:47 <oerjan> those are not C's, they're D's
03:03:27 <sshc> The last good thing written in C was Chopin's Concerto 3
03:08:58 <sshc> What is you guisers favorite distro?
03:09:48 -!- zzo38 has quit (Remote host closed the connection).
03:13:53 <ILoveEval> Your C is terrible because it has no eval.
03:14:13 -!- augur has joined.
03:15:04 <sshc> I've recieved numurous affirmative PMs from augur
03:15:09 <sshc> The answer is quite clear.
03:15:33 <sshc> Ah, he's here now
03:15:49 <sshc> I've said nothing
03:16:09 <oerjan> \& means the entire matched string
03:16:21 <sshc> C has been used for plenty eval.
03:16:26 <sshc> quintopia: Ping!
03:16:29 <ILoveEval> AnybodyElseWhoMightWantToProofreadAPaper: Ping?
03:17:08 <sshc> oerjan: Not with less sophisticated regex transmissions
03:17:33 <sshc> It was quite convenient to hide our quite excellent strategy from augur, no?
03:17:57 * oerjan has no idea who sshc is talking to
03:18:44 <sshc> Why... I am sshc.
03:18:51 <sshc> Most well known IRC user of this channel, at the moment.
03:19:11 <sshc> I...am rather green.
03:19:16 <sshc> That's who I am.
03:20:13 <sshc> HOLY SHIT SOMEBODY ACTUALLY JOINED ##############################################
03:20:20 * sshc feels lucky for guessing right
03:20:21 <augur> well i have no idea what you're on about
03:20:28 <sshc> Right, later dude!
03:20:46 * oerjan wonders what bai nao means in chinese
03:24:36 -!- fungot has quit (Read error: Operation timed out).
03:25:19 -!- Wamanuz has quit (Ping timeout: 240 seconds).
03:25:24 -!- Wamanuz2 has joined.
03:26:34 <Sgeo> http://askville.amazon.com/eversion-video-game-children-play-adult/AnswerViewer.do?requestId=32693562
04:21:00 <Sgeo> oerjan, I should not be on IRC tomorrow. If I am, feel free to ban me for the duration. Duration ends ... should really end Saturday, I guess, not Friday
04:21:18 <Sgeo> But what if I start feeling depressedly lonely again?
04:22:27 <Sgeo> I think I drained myself of happiness this past Thanksgiving
04:23:27 <Sgeo> From Tuesday to Saturday during that break, I was giddy. Stuff happened Saturday, and I wasn't the same, even after she told me to forget about it
04:23:57 -!- DrPhillate has joined.
04:26:10 <Sgeo> This past Tuesday, a friend of mine was telling me something that happened on the road that day
04:26:38 <Sgeo> I keep thinking that if she had been paying less attention, she might have died
04:26:46 <Sgeo> Although I don't know the details, maybe I'm mistaken
04:27:31 <coppro> I've been driving and been in a situation where myself and one other driver needed to be alert or bad things might have happened
04:27:56 <coppro> a truck ahead of me made a sudden stop and I was forced to make an emergency lane change; if the guy in the other lane hadn't slowed back things would have been ugly
04:29:41 <Sgeo> Should I be worried that she listens to audiobooks in the car?
04:29:46 <Sgeo> coppro, that's scary
04:30:51 * Sgeo suddenly wonders what thing "Very" was in response to
04:34:59 <coppro> the line immediately above it?
04:36:34 <Sgeo> I think I don't want to drive
04:38:56 -!- zeotrope has quit (Quit: Lost terminal).
04:48:03 -!- poiuy_qwert has joined.
04:57:41 -!- DrPhillate has changed nick to Room42.
05:02:01 <Ilari> Hmm... APNIC has 1.06 /8s left before crossing 2x/8 threshold...
05:02:14 -!- Room42 has changed nick to Elephantitus.
05:03:48 -!- Elephantitus has changed nick to VerticalSmile.
05:07:24 <Ilari> 10 575 872 addresses (63.0% of /8) allocated this calender month...
05:08:36 <oerjan> IT'S THE FINAL COUNTDOOOOWN
05:09:13 <Ilari> About 17.8M addresses left to the threshold...
05:13:26 <Ilari> Average allocation rate would be 700k addresses per day... At that rate 17.8M addresses would be gone in less than 4 weeks (mid-January that is)...
05:16:59 <Sgeo> You know, Sam Hughes's rant about One Chance comes to mind...
05:17:58 <Ilari> Also looks like IPv6 routing is seriously borked for me... :-/
05:18:45 <Ilari> ftp.fi.debian.org is reachable, ftp.se.debian.org isn't, as isn't Freenode IRC servers...
05:20:18 <Ilari> Traceroute6 isn't very helpful...
05:20:45 <Ilari> (besides pointing out that packets do reach the gateway).
05:20:49 <Sgeo> If the public starts pressuring ISPs sooner, say now instead of in 4 weeks, will there be 4 weeks less of pain?
05:23:12 <Ilari> "The Internet Corporation for Assigned IP address ICANNâ's experts warned that the existing IPv4 address will run out next January."...
05:24:24 <Sgeo> The sooner we raise a fuss, the sooner ISPs feel pressure, and... it's at least a little help. Although atually, it could backfire if the day comes around and the world doesn't end, which it won't
05:29:13 <Ilari> Reminds me of some long lived threads on ISP forums about IPv6: The general theme is: 2005: "We have IPv6 in production use in our core network". Winter 2009: "When are customers going to get IPv6?", "It is planned, no timetable to annouce yet.". Repeat for each season.
05:29:20 -!- augur has quit (Ping timeout: 260 seconds).
05:31:51 <Ilari> That is, Winter 2009, Spring 2009, Summer 2009, Fall 2009, Winter 2010, Spring 2010, Summer 2010, Fall 2010...
05:32:05 <Ilari> ... The same Q&A pair...
05:39:50 -!- augur has joined.
05:42:52 <Sgeo> Ilari, is http://pastie.org/private/fuqe7yxf4gztpaofh0xbmg reasonably accurate?
05:44:48 <Sgeo> (It's not going to the press. Just my Facebook friends)
05:45:55 <Ilari> "it" meaning IANA depletion?
05:46:24 <Sgeo> I titled it "The Internet is Full"
05:46:28 <Sgeo> Maybe a bit hyperbolic?
05:46:57 <Sgeo> Hmm, RIRs still have addresses, right?
05:49:16 <Sgeo> Hmm, how can I fix for accuracy?
05:49:41 -!- VerticalSmile has changed nick to tehjamezs.
05:49:42 -!- tehjamezs has changed nick to tehjamez.
05:52:50 <Sgeo> Instead of "it" in the January sentence, should I say "a major milestone"?
05:53:54 * Sgeo tentatively pokes Ilari
05:55:24 * Sgeo puts a clarifying thing in parentheses
05:55:51 <Sgeo> "ome estimates are predicting it (well, a major milestone showing that it's going to happen soon) to happen in January"
05:59:33 <Ilari> I really hope 700k a day isn't going to be long time trend...
06:00:05 <Sgeo> After the RIRs are depleted, it won't be.
06:01:08 <Ilari> Yes, it would drain APNIC enough to make it allocate about 2 weeks ahead of (pessimistic) model predictions, but the bigger problem is that it would drain APNIC completely months before even the most pessimistic estimates so far...
06:01:49 <Ilari> And there's no telling what happens once IANA depletion is announced...
06:02:45 <Sgeo> We should make sure that IANA depletion makes the news. And not just the geek news
06:02:54 <Sgeo> We should get people angry at the ISPs
06:04:28 <Vorpal> Ilari, APNIC, is that asia?
06:07:20 <Ilari> Problems with native IPv6: 1) Access networks usually can't carry it. 2) modems usually don't support it. Tunneled IPv6: Poor software support.
06:08:07 <Ilari> Sure, if you control the CPE, you could upgrade it to terminate the tunnel, but usually that's not the case.
06:08:17 <Sgeo> Another problem with tunneled IPv6: Most users have no idea how to set such a thing up
06:08:21 <Vorpal> Ilari, hm... what will happens to phones?
06:08:31 <Sgeo> The IPv6-only Internet would be inaccessible to them
06:08:40 <Vorpal> Sgeo, it is 10 easy steps (and 5 hard)!
06:08:56 <Vorpal> (the hard ones are convincing sixxs)
06:09:06 <Sgeo> Vorpal, and getting every clueless Internet user to do those steps?
06:12:20 <Ilari> Actually, with DHCP and access to logically same network segment, one could theoretically provode IPv6 access in automated fashion. But that "same network segment" is kinda tall order.
06:13:14 <Sgeo> End-user hardware tends not to support IPv6?
06:13:28 <Sgeo> Um... does this mean we're completely fucked?
06:14:12 <Ilari> Basically, wait for user to send DHCP request. And in return, send back DHCP response and IPv6 router advertaisment.
06:15:04 <Ilari> DHCP configures IPv4 + nameservers, the RA configures the IPv6 layer 3...
06:16:44 * Sgeo needs to sleep soo
06:18:08 <Ilari> Hmm... Arp table has entry for default gateway that does not correspond to any known MAC of the DSL modem...
06:19:00 <Ilari> Which would mean some telco equipment is on the same segment, or at least in bridged segment...
06:19:40 <Ilari> Oh, and then there is some bad software that will crash if it receives a RA...
06:19:59 <pikhq> Sgeo: Very, very little end-user hardware supports IPv6, yes.
06:20:13 <pikhq> Sgeo: Because the only people more short-sighted than ISPs are electronics manufacturers.
06:20:26 <pikhq> And we don't have rational, informed actors.
06:23:47 <Sgeo> Well, that settles it.
06:24:16 <Sgeo> Humanity is going to be either wiped out or delt a severe blow due to Global Warming
06:24:44 <Sgeo> IPv4 depletion, given enough time, is FAR simpler to solve
06:24:56 <Sgeo> Given everyone working together
06:25:05 <Sgeo> We can't do that much...
06:28:22 <fizzie> 3G network standards have supported an IPv4/IPv6 mixture since 2004 (3GPP R5); the 3GPP address autoconfiguration does IPv6 assignments (spec'd to provide a /64 for each mobile device, for personal-area-network brouhaha); I don't know about phones except that Symbian has done IPv6 since version 7.0s (2003).
06:28:41 <fizzie> (That's in theory; I don't know how well that will go in practice, and whether anyone's actually tried that stuff out.)
06:39:38 -!- Sgeo has quit (Read error: Connection reset by peer).
06:50:00 <pikhq> fizzie: Well, Android phones should at least be trivially upgradable to IPv6.
06:50:22 <pikhq> (note: "should". You never know what some ignorant moron has done to it.)
07:39:51 -!- ILoveEval has changed nick to Gregor.
07:58:42 -!- nopseudoidea has joined.
07:59:46 -!- nopseudoidea has quit (Client Quit).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:06:26 -!- evincar has joined.
08:07:08 <evincar> Everyone has seen me sign on but I'm saying something to let you know I'm not just lurking.
08:07:36 <oerjan> eek, the evil car is back
08:08:39 <oerjan> sadly you are the first to say anything for 1 hour 17 minutes
08:09:33 -!- pikhq has quit (Ping timeout: 265 seconds).
08:45:49 <evincar> oerjan: And I didn't notice you said anything for a while, either. I'm a great chatter.
08:46:08 <oerjan> yay. sadly i'm about to leave soon.
08:46:12 <evincar> And sadly I must retire too.
08:46:27 <evincar> Being sick and having to get up for class in four hours...
08:46:35 -!- evincar has quit (Quit: Blah.).
08:59:48 -!- oerjan has quit (Quit: leaving).
09:16:59 -!- tehjamez has changed nick to tehjamezZzZz.
09:36:59 -!- atrapado has joined.
09:45:33 -!- Mathnerd314 has quit (Ping timeout: 260 seconds).
09:50:07 <quintopia> also i have the write-up on document classification now wee
09:51:34 -!- Ilari_ has joined.
09:52:54 -!- Ilari has quit (Quit: Changing server).
09:53:41 -!- Ilari has joined.
09:54:03 -!- Ilari_ has changed nick to Ilari_antrcomp.
10:13:52 -!- Ilari_ has joined.
10:15:07 -!- Ilari_antrcomp has quit (Quit: leaving).
10:15:09 -!- Ilari_ has changed nick to Ilari_antrcomp.
10:57:31 -!- MigoMipo has joined.
11:05:36 -!- MigoMipo has quit (Remote host closed the connection).
11:27:02 -!- Mathnerd314 has joined.
11:27:35 -!- Mathnerd314 has quit (Client Quit).
11:33:15 -!- elliott has joined.
11:33:44 <elliott> 18:03:54 <coppro> it does not look as clean as haskell
11:33:45 <elliott> 18:10:38 <coppro> Sgeo: Ur seems ugly compared to haskell
11:33:58 <elliott> coppro: please STFU, it is more powerful than haskell
11:34:02 <elliott> coppro: it contains new type-system research
11:34:15 <elliott> it's not some random language
11:34:42 <elliott> 19:16:29 <ILoveEval> AnybodyElseWhoMightWantToProofreadAPaper: Ping?
11:40:28 <elliott> 21:20:49 <Sgeo> If the public starts pressuring ISPs sooner, say now instead of in 4 weeks, will there be 4 weeks less of pain?
11:40:34 <elliott> people have been pressuring ISPs for 10 years.
11:41:09 <elliott> 21:46:24 <Sgeo> I titled it "The Internet is Full"
11:41:09 <elliott> 21:46:28 <Sgeo> Maybe a bit hyperbolic?
11:41:41 <elliott> 21:42:52 <Sgeo> Ilari, is http://pastie.org/private/fuqe7yxf4gztpaofh0xbmg reasonably accurate?
11:41:54 <elliott> what hope do we have for solving climate change? none without bioengineering, which won't happen because of politics! enjoy!
11:50:51 -!- Leonidas has quit (Quit: An ideal world is left as an exercise to the reader).
11:51:30 <elliott> http://blogs.wsj.com/metropolis/2010/08/18/212-lust-old-phone-numbers-are-new-thing-in-tech-scene/ this is the stupidest thing ever i can't even comprehend
11:54:07 -!- Leonidas_ has joined.
11:54:43 -!- Leonidas_ has changed nick to Leonidas.
11:58:16 <Ilari> Actually, bioengineering won't happen because it isn't as good as it is portrayed as. What really prevents action on climate change is economics...
11:58:19 <elliott> 22:23:47 <Sgeo> Well, that settles it.
11:58:19 <elliott> 22:24:16 <Sgeo> Humanity is going to be either wiped out or delt a severe blow due to Global Warming
11:58:19 <elliott> 22:24:44 <Sgeo> IPv4 depletion, given enough time, is FAR simpler to solve
11:58:19 <elliott> 22:24:56 <Sgeo> Given everyone working together
11:58:19 <elliott> 22:25:05 <Sgeo> We can't do that much...
11:58:28 <elliott> You are so naïve it is hilarious.
11:58:55 <Ilari> Converging catastrophes... Global Warming is just one of those...
12:00:30 -!- oerjan has joined.
12:00:58 <elliott> Ilari: Obviously we will all die.
12:01:56 <Ilari> Actually, humankind getting dealt serious blow is much more likely than full wipeout.
12:02:07 <Ilari> (actually, inevitable)
12:02:38 <elliott> Ilari: I disagree about its inevitability.
12:04:39 <Ilari> It won't be global warming that is going to deal the main blow (just additional one).
12:06:44 <fizzie> Yes, the main blow will come from IPv4 depletion.
12:08:21 <Ilari> More like depletion of natural resources.
12:08:37 <Ilari> (IPv4 addresses don't count as natural resources) :->
12:09:05 -!- ais523 has joined.
12:09:42 * quintopia compresses fizzie's filesystem with md5sum
12:10:12 <oerjan> phosphorus looks like a big one... we're going to have to start recycling human sewage again
12:19:50 <elliott> oerjan: let's hope the arsenic bacteria don't take over :D
12:20:10 <oerjan> heh, that seems to have been shoddy science anyway
12:21:18 <elliott> fizzie: "Uh oh, Minecraft update."
12:22:02 <fizzie> "The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new."
12:22:09 <oerjan> arsenic is immensely rarer than phosphorus anyway
12:22:24 <elliott> "The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new."
12:23:49 -!- fungot has joined.
12:24:25 <oerjan> ^echo "The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new."
12:24:25 <fungot> "The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new." "The client wasn't updated, btw, that was a side-effect of copying the files around. T ...
12:27:20 <fizzie> That is, in fact, exactly what made me bring the 'got here.
12:27:40 <quintopia> `echo "\"The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new.\""
12:28:01 <HackEgo> "\"The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new.\""
12:29:29 -!- Slereah has quit.
12:30:40 <elliott> <fizzie> That is, in fact, exactly what made me bring the 'got here.
12:31:44 <fizzie> I wanted to do the whole "there's an echo here", but noticed the lack of 'got.
12:32:17 -!- Slereah has joined.
12:33:36 <fizzie> Incidentally, I wonder if the updater compares the web-version timestamp and the local minecraft.jar timestamp, and if so, whether you could disable auto-updating by adding a "touch ~/.minecraft/bin/minecraft.jar" into your minecraft startup script.
12:35:42 <elliott> fizzie: Maybe it hashes the server pathname too for NO GOOD REASON./
12:35:53 <elliott> fizzie: Wait, maybe "moving things around" meant moving things around in ~/.minecraft.
12:36:10 <fizzie> Actually it probably just looks at the value in ~/.minecraft/bin/version, which looks suspiciously like a time_t *1000.
12:36:45 <fizzie> So maybe you can disable auto-updating by putting a ridickulously large number in.
12:37:02 <elliott> fizzie: Hey, look at Notch's ingenious solution to the problem "lastServer:hostname:port discards the port value because of the separator": "lastServer:aNNN.org_MMMMM"
12:37:06 <elliott> (For appropriate Ns and Ms.)
12:37:27 <elliott> I guess the equivalent of "key, value = line.split(':', 1)" was just TOO HARD.
12:38:01 -!- FireFly has joined.
12:38:19 * oerjan swats FireFly -----###
12:38:36 <fizzie> It'd be String[] key_value = line.split(":", 2);
12:38:42 -!- MigoMipo has joined.
12:39:20 <fizzie> Actually, it's one of the examples in the String.split(String regex, int limit) documentation.
12:39:45 <fizzie> "The string "boo:and:foo", for example, yields -- [regex :, limit 2:] { "boo", "and:foo" }"
12:39:55 <elliott> oerjan: FireFly has developed crushing depression due to your constant swattling.
12:40:29 <oerjan> elliott: well flies are supposed to live shitty lives
12:40:40 <fizzie> At least _ is a non-DNS-friendly replacement character, compared to something like "q".
12:40:59 <elliott> oerjan: yes but he's a firefly, he already has a recent, awful, overplayed pop song involving him, give him a break
12:41:00 <FireFly> And so is your mom, oerjan :|
12:41:19 <elliott> DING DING DING someone did the your mom joke on one of the incorrect targets
12:41:24 <elliott> prepare for canned response
12:41:45 <oerjan> MY MOM IS DEAD YOU INSENSITIVE CLOD
12:41:53 <oerjan> elliott: close enough?
12:42:15 <elliott> oerjan: I would have gone for "MY MOTHER WAS KILLED BY YOUR KIND", but that is acceptable
12:42:37 <oerjan> i ... don't recall any flies being involved.
12:43:32 <fizzie> In the Semantic Web, FireFly's client would have seen the mom-dead metadata and made a yes/no confirmation query before sending the comment.
12:43:50 <elliott> fizzie: surely it would be the mother metadata's dead property
12:43:54 <elliott> oerjan: isn't this conversation SO COMFORTABLE
12:44:00 <elliott> anyway he's a firefly, not a fly :P
12:44:08 <elliott> or maybe he's a Fire Fly, like a fly on fire or something
12:44:19 <fizzie> Well, yes, it would be in the Ontology(tm) somewhere, I just simplified.
12:44:43 <FireFly> Being a fly on fire would make the swatting pretty pointless, though
12:44:48 <fizzie> Probably some sort of a RDF graph.
12:46:05 <elliott> FireFly: well oerjan is just that cruel
12:46:14 <elliott> and i don't think he's speaking to me any more :D
12:49:04 <fizzie> "He's so nice, he wouldn't hurt an on-fire fly", as the saying goes.
12:49:18 -!- nopseudoidea has joined.
12:50:56 -!- nopseudoidea has quit (Client Quit).
12:53:59 <elliott> oerjan: so how's the ultimately-meaningless patch theory going :D
13:00:04 -!- MigoMipo has quit (Ping timeout: 250 seconds).
13:28:57 <elliott> http://74.125.155.132/scholar?q=cache:Dk-wWK6NAaIJ:scholar.google.com/+hello+world+considered+harmful&hl=en&as_sdt=40000000000
13:34:12 <quintopia> try this one http://journalofcosmology.com/Mars144.html
13:35:35 <Ilari> There are probably a lot worse papers than those...
13:39:15 <quintopia> oh, i know, but that was one i was already looking at that seemed at least a little bit worse
13:39:39 <quintopia> so, go go gadget quick reply counterexample reflex!
13:47:46 <elliott> <quintopia> try this one http://journalofcosmology.com/Mars144.html
13:48:44 <quintopia> i suppose. but it's amusing that it is in journal of cosmology, clearly being an analysis of human sexual relations
13:48:56 <quintopia> not what i usually think of as cosmology
13:49:56 <quintopia> i thought the message of the paper you linked was dead-on though. A lot of people teach OO very wrong.
13:50:35 <elliott> quintopia: thinking that paper and its "solution" are reasonable are a sign of brain damage.
13:51:05 <elliott> only one who truly believes OO is the One True Solution to everything would mangle and overcomplicate Hello-fucking-world to fit their disastrous worldview.
13:51:09 <quintopia> i didn't say the solution was reasonable
13:51:26 <elliott> the message includes the solution
13:51:42 <quintopia> i wholeheartedly disagree with your statement
13:52:02 <quintopia> this is a question of pedagogy techniques, not whether or not OO is the One True Solution
13:52:23 <quintopia> i would rather see hello world not used at all, however
13:52:46 <quintopia> and actually jump right into a real problem that actually shows the purpose of OO
13:53:12 <elliott> quintopia: here's an idea, maybe we shouldn't teach possibly the worst paradigm in recent history
13:53:17 <elliott> (original OO I can accept, Java I cannot)
13:53:37 <quintopia> i agree. Smalltalk is better suited for teaching OO.
13:53:55 <quintopia> it's just there aren't any truly non-shitty implementations of Smalltalk
13:54:58 <elliott> quintopia: "I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. Nor Smalltalk." --Alan Kay, last sentenced paraphrased because I can't find a source actually including that bit
13:55:08 <elliott> anyway smalltalk has perfectly good implementations
13:55:19 <elliott> Squeak's UI is a bit stupid but it has the Smalltalk-80 lineage.
13:55:50 <elliott> quintopia: from what do you derive that conclusion
13:56:22 <quintopia> that you need to tell me where i can find a non-shitty smalltalk?
13:56:31 <elliott> quintopia: you fail at english
13:56:37 <elliott> quintopia: from what do you derive the conclusion that squeak is pretty shitty
13:57:14 <quintopia> all the problems i had with the system. i'd rather have one that didn't act like a VM, really.
13:57:20 <elliott> quintopia: it is not a VM.
13:57:32 <quintopia> it acts like an OS being run in a VM
13:57:48 <elliott> quintopia: Smalltalk-80 ran on the bare metal; Squeak is directly based on it, runs under an existing kernel and graphics layer because of portability. it also provides access to the filesystem as a convenience.
13:57:50 <quintopia> which is understandable considering smalltalk's origins
13:57:59 <elliott> it is like saying "I wish Linux didn't act like a VM, really."
13:58:09 <elliott> Smalltalk's power is /nothing/ and worthless without the integrated environment.
13:58:20 <quintopia> < quintopia> which is understandable considering smalltalk's origins
13:58:42 <quintopia> but i disagree that you need it to be implemented like /that/
13:58:50 <elliott> Feel free to disagree, but you're wrong.
13:59:04 <elliott> In fact the adherence to the shitty Unix-alike OSes we all run on is why every development environment more or less completely sucks.
13:59:05 <quintopia> feel free to disagree, but you're wrong
13:59:18 <elliott> Thankfully Emacs is a slightly nicer environment, and is widely accepted -- but --
13:59:31 <elliott> So would you prefer it if Smalltalk booted on the bare metal?
13:59:41 <elliott> That would be even less integrated with your OS, and less portable too.
13:59:50 <quintopia> however, i would like a smalltalk that integrates nicely into /other/ tools. i don't want it running on the bare metal.
14:00:27 <quintopia> like i would be happy with a lisp machine
14:00:36 <elliott> quintopia: ok, so press fullscreen in a smalltalk window. :p
14:00:36 <quintopia> for the purposes of the /computer i have/
14:00:51 <quintopia> ...they window already fills the screen :P
14:01:04 <quintopia> anyway, the abstraction there is way too leaky
14:01:18 <elliott> i would switch to squeak if it booted on the bare metal and had drivers, probably.
14:01:26 <elliott> and i could make the UI less irritating.
14:01:52 <quintopia> i might as well...not for everything of course, just for fun, and only if i had another computer to use it on
14:02:36 <elliott> eh, i'd just need a browser. :p
14:03:00 <quintopia> anyway, i thought alan kay had a heavy hand in designing smalltalk
14:03:02 -!- ais523 has quit (Remote host closed the connection).
14:03:13 <elliott> but smalltalk is broken too.
14:03:25 <quintopia> yeah, i'm wondering where that quote comes from
14:03:34 <elliott> a talk he did; the bit without smalltalk is widely quoted.
14:03:58 <quintopia> so how does he think smalltalk is not OO?
14:04:00 <elliott> quintopia: one of smalltalk's main problems is that it has inheritance, of course.
14:04:24 <elliott> OO has always been about message-passing from the start, not classes, not inheritance, message-passing, and anything that disrupts that isn't OO
14:04:27 <quintopia> what's the proper way to do templating/code reuse in OO?
14:04:53 <elliott> combine components to produce bigger components.
14:05:25 <quintopia> and the proper way to do shared interfaces/interchangeable types?
14:05:56 <elliott> quintopia: you're going to have to state that in terms of what you're trying to accomplish, not OO buzzwords, for me to give a coherent answer. :)
14:09:19 -!- ais523 has joined.
14:10:45 <elliott> ais523: can i ask a scapegoat-related question?
14:11:42 <ais523> but feel free to ask a different one
14:11:59 -!- sftp has quit (Remote host closed the connection).
14:12:01 <ais523> (semantic argument: are scapegoat-related-question-related questions scapegoat-related questions?)
14:12:20 <elliott> ais523: only if you program Pelr
14:13:04 <ais523> that's because array constants embed into other array constants by definition
14:13:16 <ais523> it's what the , operator does when given an array and scalar, or two arrays, as arguments in list contexts
14:13:52 <quintopia> elliott: i mean, you can't always have your code going around asking what kind of object it has been passed and whether it accepts those messages, but you may want to have an entire class of objects that believe differently yet are guaranteed to have the same messages available
14:14:01 <elliott> ugh, i've forgotten the question
14:14:11 <elliott> "you can't always have your code going around asking what kind of object it has been passed and whether it accepts those messages," erm why would code ever do this quintopia
14:14:18 <quintopia> well i can't be here every second of the day
14:14:34 <ais523> quintopia: isn't that what an interface is, in the OO sense?
14:14:51 <quintopia> ais523: that's what i'm trying to describe yes
14:14:51 <ais523> oh, I had a new esolang idea last night
14:15:03 <ais523> it was basically, "make a cross between ML and Prolog"
14:15:20 <ais523> the idea is sufficiently crazy to need no further complications to be eso, but I'd probably add some anyway
14:15:57 <ais523> (you can tell I had to do a project in OCaml over the last couple of days, it's what got me thinking along those lines...)
14:16:02 <quintopia> elliott: what are your thoughts on contracts, in the eiffel sense?
14:17:06 <ais523> hmm, I want some editor advice; what's the fastest way to, given a huge number of files, look at them all and edit a small subset based on what they look like?
14:17:20 <ais523> at the moment I'm scrolling through them in less and using vi for any edits I need to make
14:17:22 <elliott> <quintopia> elliott: i mean, you can't always have your code going around asking what kind of object it has been passed and whether it accepts those messages, but you may want to have an entire class of objects that believe differently yet are guaranteed to have the same messages available
14:17:25 <elliott> can you answer my question?
14:17:41 <elliott> why would code ever be "going around asking what kind of object it has been passed and whether it accepts those messages"
14:17:49 <elliott> <ais523> hmm, I want some editor advice; what's the fastest way to, given a huge number of files, look at them all and edit a small subset based on what they look like?
14:18:17 <ais523> it 's a situation that isn't really suited for grep
14:18:23 <quintopia> elliott: if it didn't have the ability to determine what messages an object had available by apriori knowledge like "it implements this interface" or "it inherits from that class"
14:18:29 <ais523> I'm trying to look at a bunch of files submitted by students and fix the ones that are malformed
14:18:35 <ais523> and they come up with really creative ways to do malformed
14:18:50 <elliott> quintopia: if you're passed an object as a parameter, then you use it according to some interface
14:19:15 <elliott> if some parameter is a number, you can do x*2. if it's a string, you can do x length. if it's a random-access container of some sort, you can do x at(3) or whatever.
14:19:19 <ais523> hmm, vi keeps annoying me with its nonintuitive choices of units of measurement
14:19:19 <quintopia> elliott: when you want to ensure that the wrong object doesn't get passed crashing your entire program
14:19:26 <ais523> e.g. d2j deletes three lines, who'd have guessed?
14:19:50 <quintopia> (it'd be nice to be able to guarantee this things at compile time, and it'd be nice to be able to compile)
14:19:51 <ais523> elliott: well, j moves a line downwards
14:19:59 <ais523> so d2j would delete two lines downwards, logically
14:20:22 <elliott> ais523: don't you mean d2d?
14:20:35 <elliott> quintopia: ok, well, we're talking about where smalltalk went wrong here
14:20:40 <ais523> again, perhaps, but d to mean line doesn't really make sense
14:20:40 <elliott> quintopia: and duck typing is a major part of smalltalk
14:20:44 <elliott> so i don't see the relevance at all
14:20:52 <ais523> I keep using vim like it would be meant to work, rather than like it actually works
14:21:08 <ais523> I mean, I'm assuming it sticks to a really rigid philosophy which is only an approximation of the one it's actually based on
14:21:10 <elliott> ais523: use traditional-vi, see what it does :p
14:21:45 <ais523> I also understand why vi doesn't do major modes, after using it for a while
14:21:56 <ais523> you really need to memorise things like what its definition of a word is to use it efficiently
14:22:04 <ais523> and if that kept changing on you, it wouldn't really help
14:23:14 <quintopia> elliott: fine. so what are your thoughts on contracts, then?
14:23:24 <elliott> quintopia: completely unrelated?
14:23:53 <quintopia> whether they are a valuable idea in OO language design
14:24:25 <elliott> quintopia: i'm uninterested in OO language design
14:24:42 <quintopia> oh. you don't act like it. you can understand my thinking you are.
14:24:52 <elliott> quintopia: well, i know what smalltalk did wrong.
14:24:56 <elliott> but i don't think OO is the way forward.
14:25:06 <ais523> oh, I also have a vaguely related question: elliott and/or quintopia, what are your opinions on Objective C (purely as a language, ignoring things like userbase, etc)
14:25:42 <elliott> ais523: all the safety of C with all the speed of Smalltalk! at least the Smalltalk part's good.
14:25:44 -!- sftp has joined.
14:26:00 <ais523> I spent ages reading Apple's guidelines about Objective C memory management; they were, surprisingly, exactly the same as Perl uses internally
14:26:57 -!- zeotrope has joined.
14:27:13 <ais523> I should have said perl(1)
14:27:26 <ais523> it's basically refcounting with a strong convention for when you change the reference count
14:27:31 <elliott> ais523: nah, it's "only perl can parse Perl", not "only perl(1) can parse Perl"
14:27:50 <ais523> and the ability for the reference count to go below 1 without freeing the object, as long as it comes back up "soon enough"
14:28:56 <elliott> <ais523> and the ability for the reference count to go below 1 without freeing the object, as long as it comes back up "soon enough"
14:31:46 <ais523> it's useful, though; the idea is that you always free an object before returning it from a function
14:32:03 <ais523> and the function you returned it to allocates it again if it wants it to stick around
14:32:15 <elliott> ais523: that sounds brittle :)
14:32:30 <ais523> there's a defined place where everything with a refcount of 0 gets freed at once
14:32:43 <ais523> it's between statements in Perl, or each iteration of the event loop in Cocoa
14:34:10 <ais523> so it's not brittle, but only works if you understand how it's meant to work
14:35:05 <elliott> ais523: brittle from a human point of view, i mean
14:35:39 <ais523> in theory, you should be able to do it statically
14:44:12 -!- augur has quit (Remote host closed the connection).
14:44:35 <elliott> ais523: wrt scapegoat, I think I'm going to start hacking up a "test" implementation in Haskell or C, just to see "how it works" and catch any potential major problems before taking all the effort to start a complicated, optimised, robust implementation
14:44:36 -!- augur has joined.
14:44:41 <elliott> also because i'm lazy, but want something to code
14:45:32 <fizzie> Don't you mean "optomized"?
14:46:19 <elliott> ais523: btw, highly recommended reading: http://perl.plover.com/yak/git/ -- turns out git has a lot of *my* ideas :P
14:46:59 <elliott> ais523: e.g., immutable hash-based indexing, maintaining directories the same way as files, and anonymous commits newer than the head (automatically removed after 90 days, apparently; not sure whether it's on next git invocation or "git gc" or whatever)
14:47:10 <elliott> ofc, it still lacks the Scapegoat Patch Format of Wonderment
14:48:54 <ais523> didn't you know git had immutable hash-based indexing?
14:49:38 -!- augur has quit (Ping timeout: 276 seconds).
14:49:52 <elliott> ais523: I just didn't realise that it combined it with other parts of my design
14:50:24 <elliott> ais523: it seems that about half of my scapegoat ideas are basically unintentional adaptions of git to the scapegoat model :P
14:50:29 <ais523> hmm, incidentally, today as an experiment I deleted all my cookies and set Firefox to prompt before accepting them
14:50:32 <elliott> (wtf spellchecker, adaptions is a word)
14:50:39 <elliott> ais523: lynx does that by default, it's intensely irritating
14:50:48 <ais523> and it's... surprisingly less irritating than I thought it would be
14:51:01 <ais523> mostly because it gives me the optoin to whitelist or blacklist domains the first time it happens
14:51:02 <elliott> you get like 50 cookie requests
14:51:06 <ais523> I had them blacklisted already
14:51:17 <ais523> so I'm only getting one question per page request
14:51:30 <ais523> if I accept any cookies from a domain, I'm probably going to want to accept all of them, after all
14:51:36 <elliott> ais523: you'd like this, if it were for Firefox: https://chrome.google.com/extensions/detail/jeoacafpbcihiomhlakheieifhpjdfeo
14:51:54 <elliott> ais523: completely anonymises google, disables tracking by digg, facebook, google, twitter, yahoo
14:52:38 <ais523> hmm, yes, it seems a little complex
14:52:47 <ais523> more or less like what I'm doing except with defaults
14:53:02 <elliott> ais523: for a second there, you were zzo38
14:53:15 <elliott> "That thing that does exactly what I want to do is too complex in my opinion, so I wrote my own."
14:53:22 <elliott> (zzo-ly english left to the reader)
14:53:43 <elliott> see with me i just write my own without justifying it :D
14:54:26 <ais523> cookies seem like javascript to me; most of the time they don't actually do anything useful for me so I may as well leave them off, and some of the time they're actively annoying
14:54:56 <elliott> ais523: the web is kind of inherently irritating :P
14:56:25 <ais523> IRC's nicer in that respect
14:56:41 <ais523> unfortunately, the web is kind-of hard to avoid nowadays if you use the Internet a lot
15:01:34 <elliott> ais523: if you ever figure out how you're meant to use trackpads ergonomically, please tell me
15:01:41 <elliott> I can't figure out how to do it without holding your wrist up uncomfortably
15:02:29 <ais523> I use my index finger, with my wrist below the trackpad on the table
15:02:43 <ais523> it works quite well, except I have to use my other hand to click
15:02:53 <ais523> if I'm doing something that can't be done with a simple tap on the touchpad
15:03:06 <ais523> that's how I play Enigma on this laptop, at least, and that needs quite a lot of precision
15:03:09 <elliott> ais523: wrist-on-table is very uncomfortable, and also you can't do that with it in your lap
15:03:22 <elliott> ("you're not meant to put it on your lap!!!!" only if it's a stupidly overly hot machine)
15:03:28 <ais523> I don't have enough coordination to use a trackpad while holding the laptop
15:03:36 <elliott> as in sitting, on your lap
15:03:44 <ais523> then it'd be too low to reach
15:04:03 <ais523> most of my laptop use at home is in bed, with me lying down and the laptop on top of the duvet
15:04:22 <elliott> ais523: wrist-on-duvet isn't a very stable position
15:05:30 <ais523> but I can use my other hand to help hold the laptop steady
15:05:41 <ais523> and the duvet is relatively stable because the rest of my body's holding it in place
15:05:59 <elliott> ais523: personally, if i was designing a laptop, i'd make it longer, and somehow make the bit after the trackpad soft
15:06:05 <elliott> so you could use it as a wrist-rest
15:06:34 <ais523> and put the trackpad somewhere other than the centre, to stop it being knocked so easily?
15:06:53 <ais523> I suppose the alternative's to use something other than a trackpad
15:06:59 <elliott> or just somehow detect the hand position on the laptop
15:06:59 <ais523> like a good old-fashioned trackball
15:07:02 <elliott> and disable the trackpad accordingly
15:07:05 <elliott> ais523: ugh, i hate trackballs
15:07:19 <ais523> hmm, I think I've used most of the common pointing devices in existence now
15:07:24 <elliott> I used a logitech trackball mouse exclusively for over a month, and when I switched back to a mouse I was so much faster and more comfortable
15:07:36 <ais523> mouse, trackpad, trackball, touchscreen, MouseKeys
15:07:41 <ais523> hmm, that's interesting
15:07:50 <ais523> was it a finger trackball, or a thumb trackball?
15:08:09 <ais523> I used a thumb trackball by Microsoft, and it worked pretty well; it was much better than a mouse because the mice kept falling off the table and breaking
15:09:11 <elliott> ais523: it was a well-regarded one, too
15:09:22 <elliott> ais523: this: http://www.bluesnews.com/miscimages/tmmarble150.gif
15:09:23 <ais523> hmm, I suppose it varies from person to person
15:12:53 <elliott> ais523: scapegoat question: what's the algorithm to find @tip? I know how the Official Branch is defined
15:13:03 <elliott> but how would scapegoat actually go about finding the right hash in a haystack of hashes?
15:13:56 <ais523> here's one that would work but be inefficient: start off by taking all hashes from the branch you're trying to find @tip for; eliminate any commit/revert pairs (always necessary for anything sensible to work)
15:14:14 <elliott> how can multiple branches have a @tip?
15:14:15 <ais523> if there are no conflicts, you're done; otherwise, remove the chronologically newest patch and check for conflicts, etc
15:14:23 <ais523> well, @tip is defined with respect to a repo and/or a branch
15:14:34 <ais523> otherwise it would mean "the most current version of everything"
15:14:40 <ais523> which is hilarious, but would take a while to calculate
15:15:01 <elliott> ais523: the design in my head has no concept of repository, it seems
15:15:40 <ais523> it's basically just a branch, but one defined by physical location
15:15:56 <elliott> ais523: anyway, sure, that algo would work, but I was thinking something vaguely efficient :-)
15:16:01 <elliott> if you have millions of hashes that would be ... "fun"
15:16:02 <ais523> because you have a concept of push and pull, you have to have a concept of repository so you have something to push and pull into
15:16:16 <elliott> ais523: do you have a concept of push and pull?
15:16:23 <ais523> I do, in terms of whitelisting
15:16:25 <elliott> in my model, pushing is just cp -R +scapegoat /another/+scapegoat
15:16:32 <elliott> and pulling is just cp -R /another/+scapegoat +scapegoat
15:16:51 <ais523> elliott: in your model, then, your repo is the set of all hashes in the +scapegoat directory
15:17:13 <elliott> ais523: fair enough; I was under the impression that +scapegoat's not having some hashes is purely an implementation detail
15:17:39 <ais523> elliott: you were inconsistent on the point, I wasn't sure what your impression was
15:18:03 <elliott> ais523: ok, so are there any more efficient algorithms than you can think of than O(hashes)? :p
15:18:05 <ais523> we can do things as either "all hashes in +scapegoat are part of the repo" or "only whitelisted hashes in +scapegoat are part of the repo"
15:18:31 <ais523> elliott: same algo, but optimised such that "check whether this set of hashes conflict" is efficient
15:18:54 <ais523> in particular, I'm thinking of caching whether the set of dependencies of a given hash are mutually consistent or not
15:18:55 <elliott> ais523: i can't think how to make that efficient without reading every single hash in th repo
15:19:48 <ais523> so then, all you'd have to do is take toplevel hashes - those which nothing currently depends on - and take their most recent common ancestors, which would be quite a fast thing to do
15:19:51 <ais523> and reconstruct from there
15:20:06 <ais523> (the notion of a toplevel hash is pretty irrelevant as far as the VCS goes, but seems to be very useful for optimisation)
15:22:30 -!- oerjan has quit (Quit: leaving).
15:30:14 -!- augur has joined.
15:31:56 <cheater99> http://www.ukresistance.co.uk/2010/12/by-public-demand-the-sega-toilet-game/
15:40:14 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep).
15:51:43 -!- MigoMipo has joined.
16:02:40 -!- poiuy_qwert has joined.
16:02:45 -!- Phantom_Hoover has joined.
16:08:00 <ais523> hmm, a forum I just logged into had two checkboxes for "remember me?", one marked yes and one marked no
16:08:05 <ais523> so I checked both of them to see what would happen
16:08:10 <ais523> I'll have to see if I'm still logged in tomorrow
16:28:50 <cheater99> ais523: in this electronics/wires analogy for monads, what is >>= ?
16:32:07 <ais523> cheater99: connecting two blocks to each other, and also taking a second connection from the output of the first
16:32:27 <cheater99> where does the second connection go to?
16:33:05 <cheater99> (but i'm sure it can be explained without one)
16:33:25 <ais523> well, >>= is combined with a lambda
16:33:37 <ais523> it goes to wherever that lambda's connected to
16:34:33 <ais523> let's see... monads are just computations with a sidechannel
16:34:46 <ais523> now, the computations might do nothing but interact with the sidechannel, as in IO () or whatever
16:34:51 <ais523> in which case, you just connect with >>
16:34:58 <ais523> however, they might also produce a result, entirely independent of the monad
16:35:12 <ais523> in which case, you need to put the result somewhere
16:35:16 <ais523> Phantom_Hoover: it doesn't extend forever
16:35:21 <ais523> but I used it to teach cheater99 monads months ago
16:35:42 <ais523> now, >>= is like >>, but it lets you specify somewhere to put the result of the computation that the monad wraps
16:36:26 <ais523> oh, >> is literally just connecting two blocks together
16:36:31 <ais523> do you understand do notation?
16:36:40 <ais523> or do you just understand the concept but not any notation?
16:37:00 <cheater99> i may or may not understand the concepts behind them
16:37:10 <cheater99> i don't know const, i'm a haskell n00b
16:37:29 <cheater99> i've just recently learnt about the state monad, and i'm trying to figure out how that works with the idea you gave me ais523
16:37:50 <ais523> let's see... imagine a simple computation which doesn't have a monad at all
16:38:04 <ais523> let a = 2 + 2 in a * 3, let's say
16:38:10 <Phantom_Hoover> cheater99, such things are probably a bad idea; the State monad is trivial enough that you can just look at the code itself.
16:38:12 <cheater99> so for example, a box, with a "pin" on the left and a "pin" on the right
16:38:19 <cheater99> like a DIP with just one pin on each side
16:38:30 <ais523> and a monad is a sidechannel representing that
16:38:41 <ais523> *sidechannel alongside that
16:38:53 <cheater99> a monad is a wire running above our box
16:38:58 <cheater99> our box is not connected to it yet
16:39:08 <ais523> nor need it be ever, depending on what we do with the monad
16:39:37 <ais523> so, notationally speaking, we want to connect both the wire representing the monad, and the inputs and outputs of the boxes below
16:39:54 <ais523> so there's more than one thing to connect, and that's where the notation gets a little complex
16:40:12 <ais523> it's easier to start with >> first; that corresponds to ignoring the output pin of the computation itself, and just connecting the monad
16:40:18 <ais523> ------------------------
16:40:37 <ais523> where the -o means I didn't connect it to anything
16:40:50 <ais523> connecting the inputs of the boxes a and b is easy enough, as they're just functions and can take arguments
16:40:50 <cheater99> but the monad in your drawing isn't connected
16:40:56 <ais523> the monad is, that line above is continuous
16:41:02 <ais523> but the boxes below aren't connected to each other at all
16:41:10 <cheater99> wait let's use some sort of online whiteboard maybe
16:41:18 <ais523> is there such a thing?
16:41:42 <ais523> suppose I want to give inputs to a and b, still not connecting them to each other at all
16:41:46 <ais523> if I do (a 6) >> (b 7)
16:42:11 <ais523> hmm, yes, but not the Oracle version, and it's unreliable sometimes
16:42:21 <ais523> it's probably easier just to do it over IR
16:43:13 <ais523> so the point is, that although connecting the output of a to the input of b is the "obvious" thing to do, you could actually connect them anywhere
16:43:36 <ais523> so long as you don't try to take them in the opposite direction to the monad (that is, you can't take outputs from blocks that haven't run yet, unless you're writing in TwoDucks or something)
16:44:02 -!- sebbu has quit (Ping timeout: 255 seconds).
16:45:56 <ais523> are you following this so far?
16:46:18 <cheater99> i need to think about it but i just remembered i have to call someone real quick
16:46:30 <cheater99> i'll let you know when i'm back, ok? shouldn't take a lot of time
16:46:40 <Phantom_Hoover> cheater99, incidentally, do you know how the Maybe monad works? It's the easiest to understand non-trivial one.
16:47:19 <ais523> Phantom_Hoover: no it isn't, State is in this model
16:47:30 <ais523> there are a huge number of different ways to understand monads
16:47:38 <ais523> and different people learn it different ways
16:47:53 <ais523> there are concepts of monads where IO is simplest, where Maybe is simplest, where State is simplest
16:48:06 <ais523> there are even ways of understanding monads based on starting from the trivial monad
16:48:15 <ais523> (which is, surprisingly, actually useful on occasion)
16:48:28 <Phantom_Hoover> I mean, the category-theoretical version of monads is identical, but the metaphors you'd use are *completely* different.
16:49:25 <ais523> you can use it for tagging values hungarian-notation-style, but more reliably
16:49:37 <ais523> as in, "this needs to be escaped before showing to the user", etc
16:49:48 <ais523> although there are other ways to do that anyway in Haskell
16:50:21 <ais523> also, for encapsulation purposes, to make an opaque handle that can only be passed around, not modified directly, by other parts of the program
16:51:12 <Phantom_Hoover> ais523, using the Identity monad for that seems utterly stupid.
16:51:44 <Phantom_Hoover> I mean, why not just do data EscapedString = EscapedString String, then give it a Show instance that escapes it?
16:51:51 <ais523> it doesn't really do a lot, though, just tag things
16:51:58 <ais523> also, ouch at making that a Show instance
16:52:12 <ais523> and the reason is, you couldn't do things like, say, concatenate your EscapedStrings together
16:52:22 <ais523> *UnescapedString, I suppose
16:53:48 <ais523> you could do something as simple as liftM reverse to reverse an EscapedString if it were a monad
16:54:03 <ais523> again, *UnescapedString
16:54:18 <ais523> (the idea is that these are identical to ordinary strings, just you have to be careful not to use them in situations you don't want)
16:54:18 <elliott> <ais523> Phantom_Hoover: it doesn't extend forever
16:54:18 <elliott> <ais523> but I used it to teach cheater99 monads months ago
16:54:29 <ais523> elliott: well, I think he "got" them
16:54:39 <ais523> even though the metaphor was imperfect
16:54:42 <ais523> Phantom_Hoover: well, monads are sorts of functors
16:55:02 <ais523> in fact, liftM and fmap are IIRC the same function
16:55:09 <Phantom_Hoover> ais523, yes, but why make them monads when they have no monadic properties whatsoever?
16:55:47 <ais523> the monad version would be Tainted String, rather than UnescapedString
16:55:51 <ais523> i.e. it actually takes a type as an argument
16:55:59 <Phantom_Hoover> There's an article on the Haskell wiki which complains about people who use monads when some other category-theory thing would do the job.
16:56:34 <Phantom_Hoover> Also, you *could* just define the relevant functions yourself.
16:56:35 <ais523> hmm, "unescaped" was too specific
16:56:42 <ais523> I meant "untrusted", etc.
16:56:48 <elliott> <Phantom_Hoover> ais523, yes, but why make them monads when they have no monadic properties whatsoever?
16:56:52 <elliott> if they're monads they should have a Monad instance
16:56:56 <elliott> regardless of how useful it may seem
16:56:57 <ais523> i.e. user input that you don't want to put straight into your SQL queries, whether they're strings or not
16:57:24 <ais523> with them as monads, rather than functors, if you convert them from strings to, say, magic numbers for accessing some crazy enterprisey database
16:57:41 <ais523> then they're still inside the same monad, and thus won't be passed to the database without explicitly extracting them from the monad
16:57:53 <Phantom_Hoover> ais523, wait, the point here is that you /don't want a functor/.
16:58:05 <ais523> it's fine to do arbitrary operations on the untrusted data
16:58:08 <ais523> so long as it remains untrusted
16:58:27 <Phantom_Hoover> The original thing here was to escape strings, not have some general interface thing.
16:58:51 <ais523> Phantom_Hoover: I slightly screwed up my original statement, I was being slightly too specific and should have realised you'd take me literally
16:59:34 <Phantom_Hoover> But you were talking about uses of the Identity monad.
16:59:50 <ais523> well, the point here is that Untrusted /is/ the Identity monad
17:00:04 <ais523> if you work out what >>=, return, etc. are, they come to the same thing
17:02:32 <elliott> ais523: i saw a post on perlmonks saying perl doesn't need monads because perl already has taint built in
17:02:48 <elliott> (the example being used for monads was "look, you can do taint in it without even any language support!")
17:03:28 <Vorpal> elliott, oh mc updated
17:03:38 <Vorpal> elliott, does it break with the server now?
17:03:40 -!- sebbu has joined.
17:03:43 -!- MigoMipo has quit (Ping timeout: 276 seconds).
17:03:50 <elliott> Vorpal: he just moved some files.
17:04:05 <Vorpal> elliott, oh? so what was that then
17:04:09 <elliott> Vorpal: he just moved some files.
17:04:18 <Vorpal> elliott, changing directory structure?
17:04:30 <elliott> not in ~/.minecraft it seems, i checked
17:05:20 <elliott> ais523: so would a scapegoat impl cache the list of toplevel patches?
17:09:39 <Phantom_Hoover> ais523, out of curiosity, where does join fit into your metaphor?
17:10:43 <cheater99> ais523: http://skrbl.com/156427695
17:10:46 <elliott> [[Although most filepatches will be hunks, darcs is clever enough to support other types of changes as well. A ``token replace'' patch replaces all instances of a given token with some other version. A token, here, is defined by a regular expression, which must be of the simple [a-z...] type, indicating which characters are allowed in a token, with all other characters acting as delimiters. For example, a C identifier would be a token with the fl
17:10:46 <elliott> What makes the token replace patch special is the fact that a token replace can be merged with almost any ordinary hunk, giving exactly what you would want. For example, you might want to change the patch type TokReplace to TokenReplace (if you decided that saving two characters of space was stupid). If you did this using hunks, it would modify every line where TokReplace occurred, and quite likely provoke a conflict with another patch modifying
17:10:48 <elliott> those lines. On the other hand, if you did this using a token replace patch, the only change that it could conflict with would be if someone else had used the token ``TokenReplace'' in their patch rather than TokReplace--and that actually would be a real conflict! ]]
17:10:52 <elliott> ais523: i did not know this ^
17:10:58 <cheater99> ais523: we start out with a simple function, Ax = 2x
17:11:23 <cheater99> ais523: and let's see how >>= works on things
17:11:31 -!- sebbu has quit (Ping timeout: 276 seconds).
17:12:05 <ais523> I've even used it before now
17:12:11 <elliott> ais523: problem is, you have to do it manually
17:12:13 <Vorpal> Phantom_Hoover, there?
17:12:21 <Vorpal> Phantom_Hoover, weird track south of your place. where does it go?
17:12:22 <elliott> ais523: which sort of makes the VCS a version ... creation system
17:12:24 <ais523> also, it isn't language-aware, so it replaces inside comments
17:12:36 <elliott> ais523: hmm, not a very useful feature, then
17:12:48 <Vorpal> elliott, you involved in it? it is above ground
17:12:49 <ais523> it's rather limited, yes
17:12:54 <ais523> it could be much better
17:13:06 <elliott> Vorpal: what kind of track
17:13:08 <ais523> cheater99: well, in Haskell notation, we'd write that a x = 2 * x
17:13:16 <ais523> (capital letters are reserved for type names)
17:13:21 <elliott> ais523: you didn't click his fancy java whiteboard! he won't talk to you!1111
17:13:28 <elliott> Vorpal: i have no idea. ride it and see
17:13:34 -!- sebbu has joined.
17:13:43 <Vorpal> elliott, it completely lacks boosters, but it is mega-scale
17:13:47 <ais523> so if we want to double a value, and double it again, we could write, say, a (a 5), and get 20
17:14:09 <cheater99> ais523: so we have a x = 2 * x. ok.
17:14:21 <cheater99> now it is represented by a box with one pin on the left and one on the right.
17:15:00 <elliott> ais523: hmm, does scapegoat have an easy patch-invert algo?
17:15:04 <cheater99> http://dabbleboard.com/draw?b=Guest527979&i=0&c=9d321a8e4ccd7efbf770e3f5f3517f427b010b35
17:15:10 <cheater99> do you see a box with "a" on it here?
17:15:25 <elliott> ais523: darcs does inverse patches as P^-1 P = nothing, but I think it's easier to do P P^-1 = nothing... I may be wrong though
17:15:47 <elliott> ais523: that dabbleboard thing is flash.
17:15:55 <elliott> to save you opening a browser.
17:18:03 -!- ais523 has quit (Read error: Operation timed out).
17:18:39 <cheater99> well, i hope thatwasn't the whiteboard!
17:19:25 -!- ais523 has joined.
17:19:48 <cheater99> ais523: did the whiteboard hang up your pc? :O
17:19:48 <ais523> sorry, connection dropped
17:19:57 <ais523> also, you didn't actually link me to the whiteboard thing
17:20:01 <cheater99> http://dabbleboard.com/draw?b=Guest527979&i=0&c=9d321a8e4ccd7efbf770e3f5f3517f427b010b35
17:20:05 <elliott> he did, two of them, one JS, the other flash
17:21:15 <ais523> I loaded it in my non-locked-down browser
17:21:39 <cheater99> OK. do you see a box with an "a" on the drawing??
17:21:57 <ais523> so I guess it isn't working
17:22:12 <ais523> it loaded, but doesn't seem to have anything to do with what you're doing
17:22:15 <elliott> i wish i had that kind of dedication to explaining things to trolls
17:22:20 <ais523> as in, seems to be independent between me and you
17:22:26 <ais523> elliott: I'm a teacher, remember? it's good practice
17:22:32 -!- MigoMipo has joined.
17:22:44 <elliott> ais523: well, most students aren't outright trying to waste your time ... ok maybe they are
17:23:01 <cheater99> ais523: ok, let's abandon the whiteboard concept. i'll try to find something for next time. let's continue describing on irc :)
17:23:04 <ais523> elliott: well, it isn't their fault
17:23:17 <ais523> [17:13] <cheater99> ais523: so we have a x = 2 * x. ok.
17:23:18 <ais523> [17:13] <cheater99> now it is represented by a box with one pin on the left and one on the right.
17:23:21 <ais523> [17:14] <ais523> if we want to connect two of them together, we can do something like "let b = (a x) in (a b)"
17:23:22 <ais523> [17:14] <ais523> i.e. we've given a name to the result, and we can use the name later on
17:23:33 <ais523> I think that's where we'd got to
17:24:11 <ais523> so, that's how it works with monads involved
17:24:18 <ais523> now, let's wrap that one into a monad
17:24:28 <elliott> http://blog.plover.com/prog/burritos.html
17:24:34 <ais523> if I write (liftM a), that's our a function, except now it's inside a monad (and doesn't interact with it)
17:24:35 <elliott> it's the only acceptable way to explain them
17:24:46 <ais523> that's the case of the sidechannel being independent of the function itself
17:24:59 <ais523> (because it's Haskell and amazing at figuring out types, we don't have to say /which/ monad)
17:25:00 <cheater99> ais523: how does liftM know which monad i want?
17:25:24 <ais523> (but we could, as in ((liftM a) :: Int -> State Int Int))
17:25:43 <ais523> cheater99: basically, if there's only one that works from context, it uses that one
17:25:47 <ais523> and normally, there is
17:25:47 <elliott> ais523: i am unconvinced your analogy has pedagogical value... although no monad analogy does
17:26:02 <elliott> usually they just convey a sense of giving knowledge IMO
17:26:19 <ais523> elliott: you can tell when it's worked when the other person starts disagreeing with you
17:26:25 <ais523> because it shows they've slipped into a different analogy from you
17:26:31 <ais523> everyone has their own mental model of things like monads
17:26:37 <elliott> ais523: monads are like mirrored piles of dung
17:26:47 <ais523> elliott: now /you're/ trolling
17:26:57 <elliott> ais523: but if you don't agree, that's proof that it worked!
17:27:25 <ais523> so, what I did before, was to give a name to the return value of a x, so that I could pass it to another function
17:27:30 <cheater99> ais523: ok, so liftM just takes a function and gives it monadic type, without the function interacting with the monad in any way
17:27:34 <ais523> (Haskell lets you abbreviate that a lot, but I won't because it's clearer without)
17:27:39 <ais523> cheater99: yep, it wraps the function up in a monad
17:27:55 <cheater99> what do you mean "give a name to the return value of a"?
17:28:08 <elliott> ais523: btw, 09:25:24 <ais523> (but we could, as in ((liftM a) :: Int -> State Int Int))
17:28:10 <ais523> cheater99: well, if we wanted to use it more than once, for instance
17:28:16 <ais523> elliott: did I typo slightly?
17:28:16 <elliott> liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r
17:28:34 <elliott> it'd be State Int Int -> ...
17:28:36 <ais523> it should be State Int Int -> State Int Int
17:28:44 <ais523> I did mean liftM, I just braintypoed for a moment
17:30:00 <ais523> cheater99: anyway, it's sort-of like assigning to a variable, except that it's a functional-style variable (lambda binding) which just gets its value once and then keeps it until it goes out of scope, rather than an imperative-style variable whose value you can change
17:30:32 <elliott> ais523: an immutariable :)
17:31:09 <ais523> that's probably a better name than the usual "lambda binding"
17:31:32 <elliott> ais523: "constant" would be right but unfortunately has incorrect connotations
17:31:34 <cheater99> how is liftM a "like assigning to a variable"?
17:32:20 <ais523> cheater99: oh, it isn't liftM I was talking about
17:32:35 <ais523> it's the "let b = (a x) in (a b)" example, because I thought you asked me about it
17:32:43 <ais523> <cheater99> what do you mean "give a name to the return value of a"?
17:32:50 <ais523> and I mean, I named it b so I could use it later on
17:33:34 <ais523> one of the issues with IRC is that you get used to having multiple conversations at once, even with the same person
17:33:49 <cheater99> we want to connect two a's together and call them b. ok.
17:34:20 <cheater99> we want to connect two a's together and call one of them b for some unknown reason
17:34:32 <ais523> we want to connect them together
17:34:36 <ais523> we call the point where we connect them b
17:34:48 <ais523> so here, the first one takes input x, and output b
17:35:04 <ais523> and the second one takes input b, and its output is the output of the expression as a whole
17:35:26 <cheater99> where . is a "place for a variable"
17:35:39 <cheater99> our aim is to understand >> or >>=
17:36:00 <ais523> so, let's say we want to connect two (liftM a)s together, and also connect their sidechannels together
17:36:22 <ais523> >> and >>= are what we use to do the connection
17:36:48 <ais523> so now, x is an integer with state as a sidechannel
17:37:44 <ais523> if I feed it to one (liftM a), as in (liftM a) x, there isn't much of a problem
17:37:56 <ais523> suppose I want to connect it to both the liftM as, and they have connected sidechannels
17:38:05 <ais523> I need to connect the sidechannel, and connect the output as well
17:38:20 <ais523> so I do (liftM a) >>= (\b. liftM a b)
17:38:32 <ais523> so, the >>= is doing two things
17:38:48 <ais523> *so I do (liftM a) >>= (\b -> liftM a b)
17:39:01 <ais523> elliott: Haskell busy using a different notation from maths, it caught me out
17:39:17 <cheater99> so is ( (liftM a) >>= (\b. liftM a b)) 2 == 8?
17:39:23 <elliott> ais523: (\x.e) isn't very common maths :P
17:39:26 <ais523> no, because 2 doesn't have a sidechannel
17:39:27 <cheater99> or is it "8 with some monad stuff wrapped around it"?
17:39:39 <ais523> if you gave it a 2 with state, it'd give you an 8 with the same state
17:40:55 <ais523> because liftM-produced monad actions aren't interfering with the sidechannel at all
17:40:59 <ais523> which is why it has to be the same state
17:42:11 <ais523> \lambda q. (\lambda g. g (\lambda x. g (q x))) (\lambda b. (\lambda k. ((k (\lambda u. u)) (\lambda l. ((k b) (\lambda t. (l (t\ \mathsf{skip}))))))) (\lambda v.\lambda w. w v))
17:42:21 <ais523> elliott: that's an actual quote from my most recent paper
17:42:34 <ais523> also, probably the esoprogrammingiest bit of it
17:42:35 -!- tehjamezZzZz has changed nick to tehjamez.
17:42:36 <elliott> ais523: can i read that paper? :p
17:42:48 <ais523> um, I'm not sure, let me check if it's online somewhere
17:42:52 <elliott> or is it paywalled and copyright-stolen (alternatively, if you just don't like me)
17:43:15 <elliott> (copyright-stolen, n. a nonce neologism for what journals do to the copyright ownership of papers.)
17:43:26 <elliott> admittedly, a pretty rubbish neologism
17:44:47 <ais523> elliott: I don't think it's been published yet
17:44:56 <ais523> here's the one before it: http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B75H1-50XT4JJ-M-1&_cdi=13109&_user=122868&_pii=S1571066110000976&_origin=search&_coverDate=09%2F06%2F2010&_sk=997349999&view=c&wchp=dGLzVtz-zSkWA&md5=29034da8cccf0c1f639f8277873c9ad1&ie=/sdarticle.pdf
17:45:13 <ais523> (in other news, online journal places have stupid URLs)
17:45:42 <ais523> doesn't paywall for me, presumably because I'm inside the University, rather than because I wrote it
17:45:47 <ais523> the DOI is http://dx.doi.org/10.1016/j.entcs.2010.08.018
17:46:18 <ais523> oh, but it links back to the same place
17:46:39 <ais523> elliott: $20 per read seems a little excessive for that sort of thing :)
17:47:39 <Phantom_Hoover> ais523, does your scrupulous adherence to the law prevent you from letting us see it?
17:47:53 <ais523> I'm a little confused, because I never knowingly signed copyright over to them myself
17:47:55 <nooga> it does not probably
17:48:05 <ais523> but I think it comes under the writing things for your employer category
17:48:11 <elliott> ais523: what most people do, that I know of,
17:48:19 <elliott> ais523: is publish the final-but-one draft before submitting it
17:48:35 <elliott> I think that's "more legal"
17:48:43 <elliott> since you're not publishing what they're publishing
17:48:50 <elliott> you're publishing a clearly inferior draft version, with three words different
17:49:13 <ais523> aha: http://www.cs.bham.ac.uk/~drg/papers/mfps10.pdf
17:49:20 <elliott> ais523: SO HEY SCIENCE IS FREE RIGHT
17:49:25 <elliott> ais523: OPEN ACCESS, WORLD'S KNOWLEDGE FOR EVERYONE
17:49:35 <ais523> 'tis indeed different, it's missing the logo
17:49:45 <elliott> ais523: oh man, without the logo why should i even bother reading it
17:49:46 <ais523> and not, AFAICT, paywalled
17:50:10 <elliott> ais523: permission to upload that to filebin.ca for backup?
17:50:19 <ais523> it'll be there forever
17:50:20 <elliott> on the off-hand chance that you own the copyrights to that draft
17:50:36 <ais523> also, filebin.ca doesn't last forever
17:50:40 <ais523> I know this from experience
17:50:47 <elliott> This paper is electronically published in
17:50:47 <elliott> Electronic Notes in Theoretical Computer Science
17:50:47 <elliott> URL: www.elsevier.nl/locate/entcs
17:51:13 <nooga> i like this typographic awesomness of science papers... made by LaTeX
17:51:23 <elliott> This “functionalised” syntax can be represented in a more conventional way. For
17:51:23 <elliott> example, a program such as bool x; if (y) x=z and t else x=z or t can be
17:51:23 <elliott> written using the functionalised syntax as:
17:51:23 <elliott> newvar(λx.if y (asg((and(der z)(der t)), x))(asg((or((der z), (der t))), x))).
17:51:35 <elliott> nooga: um you realise latex is ubiquitous?
17:51:38 <ais523> elliott: we're saying that the functionalised syntax is more convenient for our purposes
17:51:42 <ais523> even though it's harder to read
17:51:48 <elliott> ais523: i'm just kidding :)
17:51:56 <elliott> ais523: nice that the references are hyperlinked
17:52:15 <cheater99> ais523: we have LiftM a's connected with >>=. What does >> do?
17:52:25 <ais523> what >> does is, it doesn't connect the output at all
17:52:35 <ais523> this is mostly only useful if there isn't one in the first place
17:52:50 <ais523> say, if you're not connecting liftM a, but, say, something that changes the state
17:53:01 <ais523> which would change the sidechannel, but not produce output of its own
17:53:09 <elliott> ais523: darcs pet peeve: Shall I record this change? (1/2) [ynWsfvplxdaqjk], or ? for help:
17:53:21 <elliott> ais523: nonono, not the UI
17:53:22 <ais523> and you know you can use -a, right?
17:53:30 <elliott> ais523: the "[ynWsfvplxdaqjk]"
17:53:35 <ais523> oh, the summary of what keys you can press?
17:53:39 <elliott> ais523: really, it could at least list the commands in separate blocks according to what they do (respond to the question, navigate, etc.)
17:53:43 <elliott> or just have fewer keys :)
17:53:49 <nooga> elliott: sure, even I use LaTeX
17:53:54 <elliott> the [] is basically useless, if you forget how it works you need to use ? anyway
17:54:01 <elliott> ais523: it's a pet peeve, it doesn't have to matter :)
17:54:34 <ais523> cheater99: the other thing to mention is that there's a different notation you can use which does the same thing, just you don't have to write out all the >>=s and lambads
17:54:49 <nooga> ais523: gotta admint, it's interesting
17:55:00 <ais523> it looks like this: {do b <- a x; a b}
17:55:11 <ais523> I've messed it up again, haven't I
17:55:21 <ais523> oh, almost write this time
17:55:27 <ais523> you can tell I haven't used Haskell for a while :)
17:55:39 <ais523> Haskell and ML are two languages that I find it hard to think about simultaneously
17:56:20 <elliott> ais523: hmm, doing the scapegoat first draft in haskell may be a bad idea from you-reading-it POV :)
17:56:37 <ais523> elliott: nah, I've done my little OCaml sideproject
17:56:42 <ais523> and can go back to thinking in monads again
17:57:16 <cheater99> ais523: so if i did (LiftM a >> LiftM a) x, where x is two-with-a-state, what would i get?
17:57:44 <ais523> it's liftM with a lowercase l; and I think you'd just get an error
17:57:56 <nooga> the proof is .... interesting
17:57:58 <ais523> because you haven't given LiftM a an argument
17:58:12 <ais523> (at least, not giving a function an argument doesn't normally cause an error in Haskell, just a partial application)
17:58:24 <ais523> (but I think it'd make them not connect due to being of the wrong types)
17:58:37 <nooga> MONAD... now you're thinking with monads
17:59:14 <ais523> nooga: the long proof at the end, in an appendix?
17:59:19 <ais523> that bit was mostly me, most of the rest was mostly Dan
17:59:37 <nooga> ais523: yes, that one
17:59:39 <ais523> it was a really annoying proof, it's something like 1000 simple cases
17:59:47 <ais523> and a few that require more thought
17:59:51 <nooga> it's a bit hard to read
17:59:55 <elliott> ais523: do it in COQ!!1112
18:00:19 -!- atrapado has quit (Quit: Abandonando).
18:00:58 <elliott> ais523: ugh, did you write this latex?
18:01:27 <Phantom_Hoover> ais523, are my continued exhortations for you to explain how join fits into this growing obnoxious?
18:01:42 <cheater99> ais523: i think electronics are a very good parallel for functional programming
18:01:49 <ais523> elliott: no, I wrote it in LaTeX, but the whole thing was retyped
18:01:59 <ais523> so it isn't my LaTeX you're seeing there
18:02:05 <ais523> Phantom_Hoover: I can't remember what join does
18:02:06 <cheater99> since electronics circuits are (in theory) pretty much like functional language programs
18:02:13 <ais523> but I suspect it doens't fit the analogy too well
18:02:14 <elliott> ais523: ah... because there's "FORK; XOR" in math mode; the problem is, latex is seeing that as F*O*R*K;X*O*R, so the spacing is horrid
18:02:20 <cheater99> there are no side effects, for example, and no state unless you introduce it
18:02:27 <elliott> ais523: and \mathnormal{FORK} or however you do proper text italics in math mode (I forget) should have been used
18:02:30 <ais523> cheater99: in practice too, that's what my papers are about
18:02:48 <Phantom_Hoover> At which the analogy seems to break down since id doesn't map nicely to a box.
18:02:50 <ais523> elliott: oh right, Dan's awful wrt text in math mode
18:03:06 <elliott> ais523: stab him a bit for me, if you please
18:03:07 <nooga> now write a compiler
18:03:10 <ais523> I've known him to set \mathsf{} for an entire expression, just to write a few words in sans-serif
18:03:17 <ais523> nooga: that's likely my PhD project
18:03:42 <cheater99> ais523: well, in practice, you have problems such as ground plane interaction, capacitive coupling, ...
18:03:53 <elliott> ais523: psht, no, clearly Feather is
18:03:57 <ais523> cheater99: umm, I'm a qualified electronic engineer?
18:04:00 <cheater99> but with careful analog design those are bypassed
18:04:11 <tehjamez> everyimre you say anaology i get a notofication
18:04:13 <ais523> but we're just compiling onto FPGAs
18:04:15 <tehjamez> because anal is a hottoipic word for me
18:04:18 <elliott> tehjamez: analogy analogy analogy
18:04:31 <ais523> tehjamez: why don't you filter it to whole words, rather than anywhere in a word?
18:04:34 <cheater99> ais523: that's fine, i'm just pointing out that you're thinking of fpgas whereas i'm thinking of linear electronic circuits in general
18:04:35 <elliott> methinks tehjamez has no idea where he is
18:04:44 <tehjamez> what if someone says anal with a ? at the end
18:04:45 <ais523> otherwise, you'll find it quite banal when people talk about analysis
18:04:52 <ais523> tehjamez: ? is nonalphabetic
18:04:53 <elliott> ais523: damn you, i was pulling out analysis
18:04:58 <ais523> elliott: take that back!
18:05:13 <elliott> ais523: oh fine, i take it back
18:05:28 <ais523> tehjamez: you could use \banal\b if you're using Perl-style regular expressions for stalkwords
18:05:58 <cheater99> nonanalphabetic: made out of nine letters.
18:06:07 <elliott> I think we might see a banal publication in the correctly-spelled version of "Anals of Mathematics", analysing the most common analogies.
18:06:22 <ais523> the joke doesn't work if you misspell a word
18:06:29 <elliott> ais523: no, the correctly-spelled version of Anals of Mathematics is Annals of Mathematics
18:06:36 <elliott> that's why it's quoted, and corrected in the sentence
18:06:58 <tehjamez> It's better to say annal with one n anyways
18:07:01 <cheater99> ais523: hey, i have a question about verilog
18:07:05 <cheater99> ais523: do you use verilog at all?
18:07:10 <cheater99> and can you recommend learning it?
18:07:18 <ais523> I grew up on VHDL, rather than Verilog, but know a bit of Verilog
18:07:20 <cheater99> i want to learn *something* for fpgas but not sure if verilog is the best
18:07:21 <ais523> it depends on what you want to do
18:07:29 <ais523> Verilog and VHDL are basically the same language with different syntax
18:07:31 <cheater99> well, i want to start with something simple
18:07:57 <cheater99> i.e. a different clock for incoming and a different for reading out
18:08:00 <ais523> they suffer from the Brainfuck issue in a way, they're not only simple, but perhaps a little too simple to accomplish anything useful without lots of code
18:08:14 <cheater99> ais523: are they functional languages?
18:08:20 <ais523> no, they're behavioural
18:08:42 <ais523> the main primitive in the langs in question is connecting wires
18:08:52 <elliott> ais523: it's interesting watching the patterns of one side of this conversation, as my IRC client is arranging for me :P
18:09:03 <ais523> e.g. in VHDL syntax, a <= b means that b (an output) is connected to a (an input)
18:09:21 <ais523> and pretty much all you do in the lang are connect components together by connecting their pins
18:09:30 <elliott> ais523: whereas b => a is greater-than-or-equal-to, naturally!
18:09:43 <ais523> no, it actually means something completely different, and I can't remember what offhand
18:09:48 <elliott> ais523: well it /should/ be taht.
18:09:49 <ais523> greater-than-or-equal-to is >=
18:09:54 <ais523> elliott: it's unrelated to <=, anyway
18:10:07 <elliott> greater-than-or-equal-to is unrelated to connecting wires! :P
18:10:24 <ais523> (actually, greater-or-equal is probably something slightly different)
18:10:38 <ais523> anyway, the language doesn't have statements, like some other langs do
18:10:44 <ais523> it's just a whole load of "when a changes, b changes"
18:10:49 <ais523> umm, "when b changes, a changes"
18:10:54 <ais523> so, e.g. if you do a <= b + 5
18:11:02 <ais523> then whenever b changes, a changes to the new value of b, plus 5
18:11:12 <ais523> also, the change is very slightly delayed
18:11:31 <elliott> ais523: what i'd like to see
18:11:39 <elliott> is a semi-functional language based on "signals"
18:11:43 <elliott> sort of like VHDL but with parameters
18:11:51 <elliott> then if you had a print function you could do
18:11:52 <ais523> the langs also let you do things like "when the clock has a positive edge, b changes to a"
18:12:08 <ais523> and, that's pretty much all you can do if you want it to synthesize into hardware
18:12:33 <ais523> if you're just simulating, you can do more things, like use imperative-style variables, and even print messages (thus a VHDL hello world is both possible and incredibly misleading)
18:12:52 <elliott> Phantom_Hoover: similar, but not quite
18:13:09 <ais523> cheater99: got that? that's basically all VHDL and Verilog are, and yet they're what people /actually use/ to program FPGAs
18:13:29 <elliott> a(m) <= b(n), add(n, 5, m)
18:13:44 <elliott> where add is a "virtual" signal that continuously emits every combination of A+B = C
18:13:48 <elliott> valid combination, that is
18:13:55 <ais523> elliott: this sounds quite a bit like Proud now
18:13:59 <elliott> tehjamez: if you don't know what esoteric programming languages are, go away
18:14:06 <elliott> ais523: this is computable, though (add only does that in theory)
18:14:24 <ais523> except it was uncomputable due to doing things like quantifying over all functions
18:14:33 <elliott> factorial_result(0) <= factorial_of(0)
18:15:22 <elliott> factorial(n, r) <= sub(m, 1, m'), factorial(m', r'), times(n, r', r)
18:15:38 <elliott> tick could theoretically just tick at N Hz
18:15:46 <elliott> but in an actual implementation, you'd probably simulate it ticking at infinity Hz
18:15:57 <elliott> i.e. everything depending on tick executes immediately
18:16:01 <elliott> or rather, you'd treat it as constant
18:16:15 <elliott> "factorial(0, 1) <= tick" would just add a permanent entry into a table saying "yup, factorial(0, 1) is being emitted"
18:16:38 <elliott> ais523: it's basically Prolog for events :)
18:16:49 <elliott> you could even implement add, e.g.
18:17:41 <elliott> add(n, m, r) <= add(m', 1, m), add(n, m', r'), succ(r', r)
18:17:55 <elliott> succ would have to be built-in, though (assuming numbers are primitive)
18:18:22 <ais523> <ais523> Assume for contradiction that there is an interaction v·w·m in exactly one of the sets [[M_2]](*) • [[M_1]](*) and K_2 • K_1 (with v and w interactions, and m a move), all moves in w are in θ', the last move in v is in θ, v is in both [[M_2]](*) • [[M_1]](*) and K_2 • K_1, and at least one of the following statements is true: m is not in θ, m is a P-move in M_1, or the last move in v is an O-move in M_1 and v·w·m is not a subse
18:18:24 <elliott> ais523: name some non-altera, non-xilinx brand
18:18:29 <elliott> ais523: oh wait, there aren't any
18:18:30 <ais523> elliott: I'm not sure if there /are/ any
18:18:55 <ais523> cheater99: let's say, I spent weeks trying to get the Xilinx boards to work, and couldn't
18:19:07 <ais523> so my supervisor gave the FPGA job to someone else
18:19:17 <ais523> I haven't been involved since, but I notice there's an Altera board sitting on the desk now
18:19:33 <elliott> do_print(n) <= some_signal(n)
18:19:48 <elliott> ^ you could imagine that the platonically perfect runtime system would have a rule
18:19:53 <elliott> has_been_printed(n) <= do_print(n)
18:19:54 <cheater99> ais523: i hope you will get back on top of it
18:20:02 <ais523> it made sense to move it
18:20:04 <elliott> and every program that /read/ things just set up a signal on that, etc.
18:20:10 <cheater99> ais523: so what are you doing now?
18:20:15 <ais523> doing research >>> struggling with an FPGA board with incomplete and misleading documentation
18:20:16 <elliott> so this is "functional", arguably; at least, as functional as the language's actual mechanism
18:20:20 <ais523> cheater99: writing papers, rather than struggling with hardware
18:20:37 <fizzie> I think I saw a FPGA ad in one of the magazines at the coffee room, and I don't think it was either one of those. (Though it could have been Xilinx. It was something PowerPC-based.)
18:20:42 <elliott> ais523 man, why don't you want to enjoy the INNER LOVELINESS of working with fpgas
18:20:49 <elliott> i hope you can get back to fighting the IDEs!!!
18:20:55 <ais523> elliott: because FPGA companies know they have no competitors
18:21:04 <ais523> at least, that's the impression I get
18:21:24 <elliott> ais523: (wrt cheater's response to the job being reassigned)
18:21:44 <ais523> better to put me somewhere where I can do something useful, than somewhere where I can't
18:22:30 <ais523> (I was reaching the point of writing a bunch of programs just to pulse individual pins on the FPGA from the software's point of view, then getting an oscilloscope onto the FPGA board, all because, amazingly, Xilinx didn't even have a pinout for the evaluation board available)
18:22:33 <elliott> ais523: agreed, thus the joke
18:23:40 <ais523> (instead, they had a big complex IDE-like program that was basically an FPGA setup wizard, which was huge and monolithic and did all sorts of crazy things, like embedding a processor onto the FPGA and forcing you to communicate via it if you wanted to do any I/O over an unnecessarily complex custom protocol)
18:24:05 <ais523> I seriously doubt it's possible to write a portable FPGA program
18:24:09 <elliott> fizzie: so where's our mcmap
18:24:18 <ais523> if you want to interact with hardware, rather than just toggle pins on and off
18:25:04 <ais523> elliott: heh, I just saw the copyright notice at the bottom of Dan's website: "Copyright notice: This work is Copyrighted, and anybody caught usin' it without our permission, will be mighty good friends of ourn, cause we don't give a dern. We wrote it, that's all we wanted to do. (Woody Guthrie)"
18:32:02 * cheater99 is munching on some really good panettone
18:32:18 <cheater99> there should be a language based on the concept of panettone.
18:32:48 <ais523> elliott: I also notice it's legally equivalent to all-rights-reserved, which is hilarious
18:32:52 <elliott> ais523: did you answer my sg implementation question? I forget
18:33:08 <elliott> except, suing someone isn't very friendly
18:33:15 <elliott> so i imagine it's slightly permissive in practice
18:34:00 <ais523> elliott: I forget what the question was
18:34:03 <ais523> you may as well ask again
18:34:14 <elliott> ais523: would an sg implementation cache a list of top-level patches?
18:34:45 <ais523> elliott: I think so, it seems like the most efficient way to get things done
18:34:51 <elliott> ais523: how would it maintain this list?
18:34:54 <ais523> if there aren't too many, it might make sense even to cache their intersections
18:35:37 <ais523> and I'd imagine in a subdir of +scapegoat; you'd delete them from the cache if they turned out to be depended upon by other apparently top-level patches
18:35:47 <ais523> but the great thing is, that lets you copy one subdir over another and it just works
18:36:16 <ais523> thus preserving the ehird VCS property
18:36:28 <elliott> ais523: I mean, how would it know when to add or remove from the cache?
18:36:32 <elliott> and how would it generate the cache the first time?
18:37:07 <elliott> also, I'd likely maintain caches as e.g. cache/<hash-of-contents>-toplevels, and then if there's two toplevel caches, sg discards them both and regenerates them
18:37:15 <ais523> whenever you add a patch to the DB, you also add it to the cache
18:37:28 <ais523> whenever you add something that depends on a patch in the cache to the DB, you delete the patch it depends on from the cache
18:37:28 <elliott> ais523: that's all patches, then, isn't it? unless you remove them often
18:37:45 <elliott> ais523: depends on == references a part of, right?
18:38:19 <ais523> the cache doesn't need to hold the patches themselves, incidentally, just the list
18:38:27 <ais523> together with things like the most recent common ancestor of given pairs
18:38:38 <ais523> yes, it holds their names
18:38:44 <elliott> ais523: hmm, most common ancestor doesn't sound that hard
18:38:45 <ais523> and some precalculated data
18:39:23 <elliott> ais523: get lists of all dependencies of P1 and P2, which is a simple tree-walk, really; then just iterate through both until you find a common one
18:39:39 <elliott> unless the most recent common ancestor is thousands of revisions back, it'll be instant
18:39:48 <elliott> get lists being lazy there, that is
18:39:52 <elliott> so that you only read what you need to
18:39:58 <elliott> (an argument for impure lazy computation...)
18:40:29 <ais523> ML does impure + lazy quite well, basically using closures that need a dummy argument to force them
18:40:40 <ais523> let a = 1 + 2 calculates it now
18:40:48 <elliott> ais523: indeed; scheme has basically the same thing
18:40:50 <ais523> let a () = 1 + 2 calculates it each time you write a()
18:41:07 <elliott> (force (delay (+ 2 2))) => 4
18:41:34 <elliott> ais523: hmm, scapegoat prototype 1 should load the whole repository into memory, I think
18:41:35 <ais523> Underlambda does that too
18:41:43 <elliott> to avoid having to do lazy IO, which would be an unreliable pain in Haskell
18:42:01 <ais523> on small projects, it might even be efficient and reliable
18:43:00 <ais523> <ais523> Assume for contradiction that there is an interaction v·w·m in exactly one of the sets [[M_2]](*) • [[M_1]](*) and K_2 • K_1 (with v and w interactions, and m a move), all moves in w are in θ', the last move in v is in θ, v is in both [[M_2]](*) • [[M_1]](*) and K_2 • K_1, and at least one of the following statements is true: m is not in θ, m is a P-move in M_1, or the last move in v is an O-move in M_1 and v·w·m is not a
18:43:01 <elliott> ais523: we should probably take the Varnish route in an actual implementation
18:43:01 <ais523> subset of K_2 • K_1. <-- my favourite part of that proof
18:43:06 <elliott> ais523: just mmap the repository
18:43:21 <ais523> that sentence took me hours to figure out
18:43:29 <ais523> because it's just a list of apparently arbitrary assumptions
18:43:47 <elliott> ais523: that way, we can allocate repositories as big as we want (with a careless enough OS, which is Linux by default and I think BSDs), access them as ordinary memory, and still do things efficiently otherwise
18:43:54 <ais523> then I spend half a page proving that they contradict each other
18:43:59 <elliott> (I've been won over by the Most Stuff Should Be In A Single DB position.)
18:44:09 <cheater99> wow, this is insane: http://www.ramblesandruminations.com/2006/12/hi-im-here-for-my-panetone.html
18:44:30 <elliott> ais523: btw, we wouldn't need a DB file if it weren't for the fact that individual changes need to be accessible
18:44:38 <elliott> leading to a huge explosion of objects
18:45:01 <ais523> that's what a VCS is, isn't it?
18:45:04 <ais523> anyway, I should go home
18:45:10 -!- ais523 has quit (Remote host closed the connection).
18:45:27 <elliott> ais523: no, change != patch
18:45:42 <elliott> if it was just storing patches, that'd be okay, but every single change in the patch has to be stored separately
18:48:30 <elliott> hmm, repo = set of patches + irrelevant stuff like nicknames and caches
18:49:21 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep).
18:51:45 -!- poiuy_qwert has joined.
18:57:51 <Vorpal> fizzie, Deewiant: down?
19:01:21 <elliott> Vorpal: have you seen the destruction
19:02:14 <elliott> Vorpal: so where did the ground-level minecart path go
19:04:22 -!- cheater99 has quit (Ping timeout: 240 seconds).
19:13:50 <Phantom_Hoover> elliott, to a hill to the south of Mt. Hoover. Some furnaces and a workbench at the end.
19:14:21 <elliott> Phantom_Hoover: Anyone admitted to making it?
19:17:32 -!- cheater99 has joined.
19:17:52 <elliott> Vorpal: btw yesterday I found some pumpkins in mount vorpal and took them
19:19:07 <cheater99> that's funny, i couldn't get gnocchi today at the italian place because they couldn't find any pumpkins
19:19:55 -!- sebbu has quit (Ping timeout: 265 seconds).
19:33:54 <Vorpal> <elliott> Vorpal: btw yesterday I found some pumpkins in mount vorpal and took them <-- if you did that I expect them back
19:34:24 <elliott> Vorpal: to be fair i also put the same number + 1 back in
19:34:50 -!- hagb4rd has joined.
19:35:02 -!- sebbu has joined.
19:35:44 <Vorpal> elliott, built marker at (4000,4000)
19:37:07 <Vorpal> elliott, yeah you don't get it
19:39:04 -!- pikhq has joined.
19:40:09 <pikhq> Fun fact: invalid UTF-8 can make X crash.
19:40:26 <elliott> a light breeze can make X crash
19:47:03 <elliott> Vorpal: mind if I colonise the unused peak of mt. vorpal?
19:50:52 <Vorpal> elliott: it isn't unused. The throne room extends below it
19:51:29 <Vorpal> elliott: so basically it won't be a good idea
19:51:30 <elliott> Vorpal: below it, but not on top
19:51:43 <Vorpal> elliott: I plan stuff there
19:51:55 <Vorpal> elliott: a glass star observatorium
19:52:20 <Vorpal> elliott, it already has some buildings on it
19:52:36 <Vorpal> elliott, anyway, given your lava handling I want you NOWHERE NEAR ME
19:52:42 <Vorpal> elliott, I don't want everything burned down
19:53:17 <Vorpal> nor do I want a waterfall there
19:53:36 <elliott> Vorpal: what have I done with lava lately??
19:53:38 <Vorpal> elliott, go make your class cube somewhere far away
19:53:44 <Vorpal> elliott, up at Deewiant's place...
19:54:31 <elliott> Vorpal: btw, have you done anything to the deewiant express lately?
19:57:12 <elliott> Vorpal: btw, almost all the house survived the lava, and dewi didn't seem overly pissed off at it, so "fuck off" is a slight overreaction.
19:58:59 <elliott> Vorpal: are you /ignoring me?
19:59:29 <elliott> Deewiant: that doesn't mean he isn't /ignoring me!
19:59:43 <Deewiant> No, but it can explain why he's not saying anything
19:59:54 <elliott> Deewiant: Does the Express still loop
20:00:19 <Deewiant> Because with lag, it's hard to stop
20:00:27 <elliott> I'm going to pour lava all over Mount Vorpal in protest
20:00:48 <elliott> And then dig Vorpal down to bedrock and surround him with a ten-thick layer of obsidian.
20:00:56 <elliott> And the rest up to sea level with TNT.
20:01:01 <elliott> That is what you have done to me, Deewiant.
20:04:28 <elliott> Deewiant just doesn't realise the horror.
20:07:29 <Vorpal> elliott, I was not /ignoring
20:09:58 -!- hagb4rd has quit (Ping timeout: 240 seconds).
20:10:43 -!- ais523 has joined.
20:12:50 -!- hagb4rd has joined.
20:13:08 <elliott> ais523: opinion poll: "verify :: Hash -> ByteString -> Bool" or "verify :: ByteString -> Hash -> Bool"
20:13:49 <ais523> elliott: it's obviously irrelevant, but I think the first is a little neater
20:13:51 <Vorpal> elliott, yes due to denying that you messed up
20:14:04 <elliott> yep, i was an evil deceiver
20:14:14 <elliott> how did i think that i could possibly defeat the awesome power of screenshots that everyone has seen
20:14:19 <elliott> but darnit, I had malicious intent!
20:14:26 <elliott> ais523: Deewiant: you two have to duke it out to the death now
20:15:26 <Deewiant> Of course, I'm the one with no clue what the params mean
20:16:14 <elliott> Deewiant: ais523 doesn't either, but it just checks that the bytestring hashes to the given hash
20:16:18 <elliott> which is sha-512, but that's irrelevant
20:16:22 <elliott> and returns whether it does or not
20:17:10 <Deewiant> With the latter, verify = (==) . sha512
20:17:48 -!- Sasha2 has joined.
20:19:18 <elliott> Deewiant: Know what's awesome? Two libraries, one that uses strict bytestrings, the other that uses lazy
20:19:27 <fizzie> Okay, the map thing's online now. But do remember that I'm only sharing it on the "no bitching about it" condition; in fact I'll be away immediately and not discuss it at all, even if it has trivial bugs (like it probably has).
20:19:30 <elliott> Specifically, trying to use them both in one module
20:19:35 <fizzie> It's at https://github.com/fis/mcmap now.
20:19:40 <fizzie> (And there's a README anyway.)
20:19:49 <elliott> fizzie: Thanks. If Vorpal whines I'll lava Mount Vorpal.
20:19:57 <elliott> (That should be sufficient incentive, one thinks.)
20:19:59 <Deewiant> fizzie: What's the *ware term for that condition?
20:20:24 <fizzie> That sounds reasonable, yes.
20:20:41 <fizzie> I'll have to add some sort of a COPYING file at some point, maybe.
20:21:14 <elliott> fizzie: But until you do, it's PUBLIC DOMAIN!*
20:21:57 -!- Ilari_antrcomp has quit (Read error: Operation timed out).
20:22:06 <fizzie> I'm not expecting it to be horribly popular; it's not a very user-friendly tool.
20:22:24 <elliott> fizzie: "In the most basic form, ./mcmap -r 600x600 host:port"; "Unknown option -r".
20:22:29 <elliott> fizzie: (Not a whine, just a bug report.)
20:22:31 <elliott> in either the readme or the C :P
20:23:26 -!- Ilari_antrcomp has joined.
20:24:19 <fizzie> Shouldn't have done it from memory.
20:24:57 <fizzie> Well, I did fix at least that.
20:26:18 <elliott> fizzie: OMG IT DOESN'T HANDLE RIDING IN MINECARTS FIX IT FIX IT FIX IT I PAID FOR THIS SOFTWARE NOW GIVE ME MY SUPPORT
20:26:48 <fizzie> Incidentally, I wonder what is with riding. It seems to go to (0,0,0) for that.
20:27:39 <fizzie> There is an "attach entity" packet that (according to the protocol wiki) "is believed to" be sent when a player has been attached to a cart.
20:27:43 <ais523> <elliott> Deewiant: ais523 doesn't either, but it just checks that the bytestring hashes to the given hash <-- I guessed that from the signature, with a name like that there's not much else it could do and yet be vaguely sane
20:27:55 <fizzie> I guess after that it sends player motion relative to the attached entity, and then just moves the entity around.
20:28:28 <elliott> fizzie: I like how chats are invisible if you use a light background, got confused there for a second. :p
20:28:39 -!- hagb4rd has quit (Ping timeout: 240 seconds).
20:28:51 <fizzie> Heh, yes. There's the --nocolor flag for that.
20:29:12 <fizzie> Though then it won't strip out the color codes either.
20:29:20 <fizzie> And you'll see §f's everywhere.
20:30:31 -!- ais523 has set topic: Carapace Averages Nine Thin Zit Loots | http://tunes.org/~nef/logs/esoteric/?C=M;O=D.
20:30:49 <ais523> that topic was crying out to be anagrammed
20:31:17 <Vorpal> fizzie, err, I have zlib but not in pkg-config it seems
20:31:47 <elliott> Vorpal: That's not fizzie's problem
20:32:00 <Vorpal> fizzie, just wondering why
20:32:06 <Vorpal> fizzie, ubuntu 10.04 LTS
20:32:11 <elliott> fizzie probably knows, 'cuz he's psychic.
20:32:18 <elliott> And you're totally obeying the "no questions" policy.
20:32:21 <Vorpal> elliott, I thought he used ubuntu too nowdays
20:32:30 <ais523> Vorpal: sometimes I think the main difference between you and zzo38 is that you give the context
20:32:49 <elliott> ais523: and zzo38 is too detached from what we're saying to get angry :P
20:33:07 <elliott> I think I'd take two zzos over one Vorpal
20:34:15 <olsner> since this one is zzo38, there should be 38 before him
20:34:34 <Vorpal> fizzie, switching to -lz for zlib works
20:35:51 <fizzie> $ dpkg-query -S zlib.pc
20:35:51 <fizzie> zlib1g-dev: /usr/lib/pkgconfig/zlib.pc
20:35:55 <fizzie> That's where mine is from.
20:38:19 <Vorpal> fizzie, I have that package
20:38:23 <Vorpal> fizzie, but I'm on last LTS
20:39:00 -!- augur has quit (Ping timeout: 260 seconds).
20:44:39 <elliott> ais523: hmm, I think scapegoat objects need types as part of their name, so e.g. "look at all patches" is a reasonable operation
20:45:02 <elliott> 10:44:30 <elliott> ais523: btw, we wouldn't need a DB file if it weren't for the fact that individual changes need to be accessible
20:45:02 <elliott> 10:44:38 <elliott> leading to a huge explosion of objects
20:45:02 <elliott> 10:45:01 <ais523> that's what a VCS is, isn't it?
20:45:02 <elliott> 10:45:04 <ais523> anyway, I should go home
20:45:03 <elliott> 10:45:10 --- quit: ais523 (Remote host closed the connection)
20:45:05 <elliott> 10:45:27 <elliott> ais523: no, change != patch
20:45:07 <elliott> 10:45:42 <elliott> if it was just storing patches, that'd be okay, but every single change in the patch has to be stored separately
20:45:10 <elliott> 10:48:30 <elliott> hmm, repo = set of patches + irrelevant stuff like nicknames and caches
20:45:12 <elliott> 10:48:32 <elliott> patches = set of changes
20:46:39 -!- augur has joined.
20:47:50 -!- hagb4rd has joined.
20:51:11 <Vorpal> Phantom_Hoover, stop ruining the hole
20:51:22 <ais523> elliott: a patch either has exactly one change, or is a set of other patches
20:51:22 <Vorpal> Phantom_Hoover, conclusion: in the future keep exploration silent
20:51:32 <Vorpal> Phantom_Hoover, you broke it. Lava does not belong there
20:51:46 <ais523> I should probably go back to calling them turtles again
20:51:52 <Phantom_Hoover> Vorpal, but if you were silent about your achievements how would you prop up your ego?
20:52:22 <Vorpal> Phantom_Hoover, very droll
20:52:51 -!- elliott has quit (Quit: Leaving).
20:52:59 <ais523> hmm, seems it didn't remember my login
21:03:30 <Vorpal> fizzie, would it be feasible to make it render leaves transparently?
21:08:32 <Vorpal> hard coded patch thoug
21:09:03 <fizzie> You could more easily just not render leaves at all. The surface bitmap (well, "blockmap") is being separately maintained by the updates for faster drawing, so you could just either skip leaves (like it skips air).
21:10:21 <Vorpal> fizzie, that is what I did
21:10:54 <fizzie> If you want to do that properly, you'll need to do that in both handle_chunk and block_change.
21:11:46 <Vorpal> fizzie, ah just did it in handle_chunk
21:12:02 <fizzie> Well, the latter only matters if you go and dig out the leaves.
21:12:25 <fizzie> Should probably add some sort of block-type enum for any block-specific customizations at some point. The current testing for air (!x) is a bit iffy too.
21:13:06 <Vorpal> fizzie, also yeah the AIR_COLOUR thing for stuff like buttons won't do much
21:13:26 <fizzie> That's mostly meant for the cross-section map.
21:13:31 <fizzie> Where it works reasonably well.
21:15:03 <Vorpal> fizzie, why is south now down btw?
21:15:04 <fizzie> But I could have a better "these blocks are practically empty" table that it'd use for the surface map, and a command-line flag to include/exclude leaves in that.
21:15:19 <fizzie> At least I don't think it is.
21:15:33 <fizzie> Because I've oriented myself to ineiros' maps.
21:16:01 <fizzie> And if I just swap x/y y/x, I get north/south properly but then east/west will be the wrong way around, and that's really confusing.
21:16:18 <Vorpal> fizzie, and yes zoom would be nice, kind of hard to spot pumpkins now
21:17:32 <fizzie> There could be some sort of highlight mode that'd greyscale the other block colors and turn the one you're looking for red, or something. (Or just desaturate-but-not-completely.)
21:17:33 <Vorpal> fizzie, I hit some kind of redrawing bug
21:17:59 <fizzie> (Not that I'm going to think about it now.)
21:18:02 <Vorpal> fizzie, vertical 1 pix wide lines
21:18:06 <Vorpal> fizzie, when I go south
21:18:26 <Vorpal> fizzie, note I have both a chunk at spawn, and a chunk at 4000,4000
21:18:26 <fizzie> I don't know about that. Screenshot?
21:18:41 <Vorpal> fizzie, sure, could be my fault when hiding leaves. who knows
21:19:16 <fizzie> A surface that large will take quite a bit of memory. (61 megs or so.)
21:20:24 <Vorpal> fizzie, http://sporksirc.net/~anmaster/tmp/mcmap.png
21:20:36 <Vorpal> fizzie, and I run the mapper on a separate computer :P
21:21:03 <Vorpal> Phantom_Hoover, see what Deewiant said
21:21:33 <Vorpal> fizzie, I did enter a minecart by mistake, not sure if that affects it
21:21:59 <fizzie> I got some bit strange-looking surfaces when traveling by minecart, but, well, who knows.
21:23:29 <fizzie> Re zoom, you could just use compiz' magical zoom if you're running it on another box (that can do that).
21:24:15 <fizzie> I hope all the exploration won't make the server really run out of memory storing the world.
21:24:44 <fizzie> I guess when unloading blocks from the clients it also unloads them from itself and only keeps them in the disk storage, though.
21:24:48 <fizzie> At least one could hope so.
21:25:03 -!- elliott has joined.
21:25:09 <elliott> <ais523> elliott: a patch either has exactly one change, or is a set of other patches
21:25:19 <Vorpal> fizzie, that box has intel graphics
21:25:20 <elliott> ais523: why not just do patch = set of changes
21:25:26 <Vorpal> fizzie, I don't think compiz is a good idea there
21:25:34 -!- hagb4rd has quit (Ping timeout: 240 seconds).
21:25:45 <elliott> <ais523> I should probably go back to calling them turtles again
21:25:50 <elliott> ais523: turtles are the file trees
21:26:12 <elliott> as in, the actual tree with all the files, belonging to a specific patch
21:28:30 -!- hagb4rd has joined.
21:43:57 -!- zeotrope has quit (Quit: Lost terminal).
21:45:23 <Vorpal> Phantom_Hoover, got it to work btw?
21:46:06 <Vorpal> Phantom_Hoover, lime = green cobble
21:46:48 <Vorpal> Phantom_Hoover, probably
21:49:19 <elliott> http://imgur.com/1jip7 Goodbye AltaVista and delicious.
21:50:40 -!- yiyus_ has quit (Ping timeout: 240 seconds).
21:51:23 -!- Slereah has quit (Ping timeout: 255 seconds).
21:52:17 -!- reiffert has quit (Ping timeout: 255 seconds).
21:52:44 -!- jix has quit (Ping timeout: 255 seconds).
21:52:44 -!- fxkr has quit (Ping timeout: 255 seconds).
21:57:47 -!- fungot has quit (*.net *.split).
21:57:47 -!- fizzie has quit (*.net *.split).
21:57:48 -!- tehjamez has quit (*.net *.split).
21:57:48 -!- sshc has quit (*.net *.split).
21:57:48 -!- myndzi has quit (*.net *.split).
21:57:49 -!- lifthrasiir has quit (*.net *.split).
21:57:49 -!- yiyus has quit (*.net *.split).
21:57:49 -!- jcp has quit (*.net *.split).
21:57:49 -!- augur has quit (*.net *.split).
21:57:49 -!- Ilari_antrcomp has quit (*.net *.split).
21:57:49 -!- Sasha2 has quit (*.net *.split).
21:57:50 -!- Ilari has quit (*.net *.split).
21:57:50 -!- quintopia has quit (*.net *.split).
21:57:50 -!- Zuu has quit (*.net *.split).
21:57:50 -!- mycroftiv has quit (*.net *.split).
21:57:50 -!- Leonidas has quit (*.net *.split).
21:57:51 -!- hagb4rd has quit (*.net *.split).
21:57:51 -!- ais523 has quit (*.net *.split).
21:57:51 -!- poiuy_qwert has quit (*.net *.split).
21:57:51 -!- Phantom_Hoover has quit (*.net *.split).
21:57:52 -!- olsner has quit (*.net *.split).
21:57:52 -!- cheater99 has quit (*.net *.split).
21:57:52 -!- MigoMipo has quit (*.net *.split).
21:57:52 -!- FireFly has quit (*.net *.split).
21:57:52 -!- sebbu has quit (*.net *.split).
21:57:53 -!- Vorpal has quit (*.net *.split).
21:57:53 -!- Gregor has quit (*.net *.split).
21:58:19 -!- Slereah has joined.
21:58:19 -!- yiyus has joined.
21:58:19 -!- fxkr has joined.
21:58:19 -!- jix has joined.
21:58:19 -!- reiffert has joined.
21:58:19 -!- hagb4rd has joined.
21:58:19 -!- augur has joined.
21:58:19 -!- Ilari_antrcomp has joined.
21:58:19 -!- Sasha2 has joined.
21:58:19 -!- ais523 has joined.
21:58:19 -!- sebbu has joined.
21:58:19 -!- cheater99 has joined.
21:58:19 -!- poiuy_qwert has joined.
21:58:19 -!- MigoMipo has joined.
21:58:19 -!- Phantom_Hoover has joined.
21:58:19 -!- FireFly has joined.
21:58:19 -!- fungot has joined.
21:58:19 -!- Leonidas has joined.
21:58:19 -!- Ilari has joined.
21:58:19 -!- tehjamez has joined.
21:58:19 -!- fizzie has joined.
21:58:19 -!- Vorpal has joined.
21:58:19 -!- quintopia has joined.
21:58:19 -!- sshc has joined.
21:58:19 -!- Gregor has joined.
21:58:19 -!- olsner has joined.
21:58:19 -!- Zuu has joined.
21:58:19 -!- mycroftiv has joined.
21:58:19 -!- jcp has joined.
21:58:19 -!- myndzi has joined.
21:58:19 -!- lifthrasiir has joined.
21:58:32 -!- pikhq has quit (Excess Flood).
21:58:59 -!- pikhq_ has joined.
21:59:43 <olsner> ah, tab stacking is nice
21:59:57 <olsner> quartered the height of my tab bar
22:01:26 <olsner> new feature in opera 11, allows you to combine tabs into tab groups (maybe they're called stacks)
22:03:43 <olsner> indeed it's called a "tab stack", it displays the active tab and a small button to expand it and view all the other tabs in the stack
22:04:10 -!- Sasha2_ has joined.
22:04:58 <elliott> olsner: oh, you're a stupid opera user, i forgot
22:05:42 <elliott> olsner: only in that you use opera :)
22:06:39 -!- yiyus_ has joined.
22:06:48 -!- Sasha2 has quit (Ping timeout: 260 seconds).
22:07:06 <elliott> olsner: it's like, a little pocket of stupidity
22:07:13 <elliott> like, if albert einstein regularly shot himself in the face
22:07:20 <elliott> he'd be a stupid self-face-shooter
22:07:39 <olsner> fuck you ubuntu: "The computer needs to restart to finish installing updates. Please save your work before continuing."
22:07:52 <elliott> olsner: dude, even debian does that
22:08:01 <elliott> (although it lets you make it go away for N times)
22:08:07 <olsner> the thing is, it wants to restart *before* upgrading
22:08:07 <elliott> where times = seconds, minutes, whatever
22:08:18 <elliott> olsner: no, i think that's misleading wording
22:08:25 <elliott> it just means "i replaced the kernel, reboot, you bum"
22:08:44 <olsner> elliott: no, it's serious: pressing "install updates" does nothing but pops up that message
22:09:20 <elliott> olsner: not even os x does that ;)
22:09:25 <ineiros> Vorpal: Yes. They released another episode of Pioneer One. Shouldn't take long.
22:10:00 <olsner> elliott: os x does that for many (most?) upgrades though, you have to install-and-reboot in one operation
22:10:20 <elliott> olsner: it's irritating how long it can lock you in an "upgrading lol" screen
22:10:24 <elliott> it never used to do that in Tiger
22:10:49 <elliott> ineiros: You may NEVER EVER use your internet connection for recreational purposes; we *depend* on Minecraft!
22:11:51 <ineiros> elliott: That is honestly scary. :P
22:12:01 <olsner> I guess I'll just have to uninstall the automatic updates program so I'm not annoyed by there being updates it won't allow me to install
22:12:06 -!- tehjamez has left (?).
22:12:07 <elliott> ineiros: Well, if Vorpal was the only player, that would in fact be the case.
22:12:17 <elliott> olsner: you could just disable them rather than uninstalling it :)
22:12:22 <ineiros> elliott: Maybe I should take a second connection with a better upstream and make you people pay for it. :)
22:12:33 <elliott> ineiros: or just colocate :P
22:12:53 <olsner> elliott: but... why would I keep it installed when I've disabled it?
22:13:07 <elliott> olsner: because of the ubuntu-desktop metapackage
22:13:14 <olsner> it's not as if I have infinity space to give away to useless software
22:13:18 <fizzie> ineiros: I keep suggesting the CloudCraft.
22:13:21 <elliott> olsner: so that when Canonical add more and more crap in the next major release, you can get it without manually installing it!
22:13:45 <elliott> fizzie: If everyone democratically decides that you're in a gigantic lava pit covered with obsidian at the bottom of the sea, well, you are!
22:14:28 <olsner> elliott: ubuntu-desktop doesn't fit :)
22:14:40 <elliott> olsner: ok, i'll bite: what machine is this?
22:15:06 <cheater99> that's cool, i didn't know there was a parisc channel
22:15:28 <olsner> hmm, actually it would fit according to the package manager's estimate of used space
22:15:46 <olsner> it'd leave ~100MB of free space
22:16:08 <Phantom_Hoover> fizzie, incidentally, what happens when Beta comes out?
22:16:14 <Deewiant> fizzie: To quote the SDL documentation wiki: "A lot of the keysyms are unavailable on most keyboards. For example, the SDLK_1 keysym can't be accessed on a French keyboard. You get the SDLK_AMPERSAND instead. So, you should not hardcode any keysym unless it's one of the universal keys that are available on all keyboards."
22:16:28 <olsner> elliott: it's just this one, my main desktop system
22:16:40 <elliott> olsner: how much disk have you got? how much is used? :p
22:16:49 <olsner> 5GB used to be plenty of space for linux, apparently not so much anymore
22:16:58 <olsner> (currently using 4.6GB of it)
22:16:59 <Phantom_Hoover> Do you pick apart that protocol and reimplement mcmap?
22:17:01 <elliott> Deewiant: mcmap is provided without support. :p
22:17:05 <elliott> olsner: erm do you have a separate /home?
22:17:09 <elliott> or do you really stuff everything into 5 gigs?
22:17:15 <Deewiant> elliott: I didn't ask him to fix it, I'm just informing. :-P
22:17:19 <elliott> Phantom_Hoover: no, he just adds handling for server-side inventory packets.
22:17:51 <elliott> Deewiant: (Do French keyboards have & where 1 should be?)
22:18:10 <Deewiant> I don't know, but SDLK_1 doesn't work for my keyboard so I have to hack it.
22:18:16 <elliott> http://3.bp.blogspot.com/_z9jvYW4hF3k/Sw56ZFHSceI/AAAAAAAAAB8/OhcuW0qzRG0/s1600/titanium_azerty_keyboard.jpg
22:18:21 <elliott> Looks like Frenchies have punctuation on shift.
22:18:28 <elliott> Looks like Frenchies have digits on shift.
22:19:20 <elliott> Deewiant: That's 'cuz you're Finnish.
22:19:24 <elliott> (The explanation for everything.)
22:20:19 <fizzie> Phantom_Hoover: Sure, I'll fix for beta if it breaks, assuming it's not too dissimilar.
22:20:40 <fizzie> Deewiant: Do the Unicode-translation chars work better?
22:21:03 <Deewiant> fizzie: Yes, my workaround was to add SDL_EnableUNICODE and use the .unicode field for 1,2,3
22:21:08 <elliott> fizzie: I demand you add a command to spit out the locations of objects in a specific list of object ID #s within +-X,Y,Z of your current position. --Vorpal
22:21:16 <elliott> fizzie: (Actually that *would* be kind of useful X-D)
22:21:24 <olsner> elliott: a big part of the partition is used by my home folder though, 300MB of irc logs for example :P
22:21:32 <Deewiant> fizzie: But upon reflection, I probably should've made it respond to !,@,# so I don't have to press shift. :-P
22:21:32 <fizzie> Deewiant: I'll fix it like that in the next version.
22:21:36 <elliott> olsner: Consider bzipping them :P
22:21:59 <fizzie> Deewiant: Ooh, or a keyboard mapping config file. :p
22:22:02 <elliott> fizzie: Just make it subtract (keysym of 1) from the keycode, and %3 it.
22:22:10 <elliott> fizzie: Then every 3 successive keysyms on the keyboard work.
22:22:17 <Deewiant> elliott: !,@,# aren't successive.
22:22:27 <elliott> Deewiant: Pick better keys
22:22:33 <elliott> Or use multiple hands, stretched
22:22:44 <elliott> <elliott> fizzie: Just make it subtract (keysym of 1) from the keycode, and %3 it.
22:22:44 <elliott> <elliott> fizzie: Then every 3 successive keysyms on the keyboard work.
22:22:59 <elliott> You could use qwe, rty, or uio! Assuming those scan properly. If not, pick other keys!
22:24:17 <elliott> Deewiant passed out from the awesomeness of my idea.
22:24:26 <elliott> YOU COULD EVEN USE NUMLOCK
22:24:36 -!- Sasha2_ has quit (Ping timeout: 260 seconds).
22:28:13 <Phantom_Hoover> fizzie, incidentally, you might want to change the readme for mcmap to make it clear that you have to connect to 127.0.0.1
22:28:29 <Deewiant> I thought that was pretty clear
22:28:35 <elliott> <elliott> <ais523> elliott: a patch either has exactly one change, or is a set of other patches
22:28:35 <elliott> <elliott> ais523: why not just do patch = set of changes
22:28:38 <elliott> <elliott> <ais523> I should probably go back to calling them turtles again
22:28:38 <elliott> <elliott> ais523: turtles are the file trees
22:28:38 <elliott> <elliott> as in, the actual tree with all the files, belonging to a specific patch
22:28:51 <elliott> Deewiant: I tried localhost, which doesn't work
22:28:56 <ais523> elliott: because patch = set of changes only does one level
22:29:03 <elliott> Deewiant: Also :(the port we use) whereas it's always :25567 for mcmap.
22:29:10 <ais523> you should be able to group individual changes into a commit, individual commits into a tag, etc
22:29:20 <elliott> ais523: oh, true... but does a tag have to be a patch?
22:29:22 <ais523> also, a "merge resolution" is also a set of patches, some reverts and some unreverts
22:29:26 <elliott> ais523: I mean, a patch to /what/?
22:29:33 <elliott> <ais523> also, a "merge resolution" is also a set of patches, some reverts and some unreverts
22:29:35 <elliott> ais523: then it's not a set!
22:29:37 <ais523> elliott: well, /everything/'s a patch to nothing
22:29:39 <elliott> because the application order matters
22:29:40 <ais523> elliott: no, it's a set
22:29:47 -!- zzo38 has joined.
22:29:59 <ais523> the rule is, you apply patches before patches that depend on them
22:30:10 <ais523> and if it's ambiguous even then, you have a merge conflict
22:30:26 <ais523> oh, the other rule is, you don't apply a reverted patch at all (that is, if both the patch and its revert are in the set)
22:30:40 <ais523> which is needed for merge resolutions to make sense at all
22:30:43 <elliott> ais523: I'm fairly sure that we need to reserve two hashes, BTW
22:30:51 <elliott> ais523: for "Start" and "End"
22:30:58 <elliott> which have no valid expression as patches
22:31:06 <ais523> I think that makes sense
22:31:11 <elliott> ais523: I'd just do all-zeroes and all-ones, as that's a pretty unlikely hash
22:31:18 <ais523> wait, that's wrong altogether
22:31:18 <elliott> OK, not unlikely in absolute senses
22:31:23 <ais523> different files have different SOF and EOF
22:31:32 <elliott> ais523: But there are no files.
22:31:50 <elliott> ais523: Consider: Two empty files in a directory point to the same object, the Start/End patch.
22:31:50 <ais523> what do directories contain?
22:32:06 <ais523> two empty files each have their own start and their own end
22:32:15 <ais523> otherwise, if you did "add between start and end", how would you know which file it went into?
22:32:28 <elliott> ais523: you don't have to; the directory tells you what to put in what file
22:32:31 <ais523> the /only/ information for an addition is what it goes between
22:32:35 <ais523> elliott: that seems very backwards
22:32:47 <elliott> ais523: you look at the patch, apply it to the [(Start,""),(End,"")] string, and then write it to the file listed in the directory entry
22:32:48 <ais523> then, you'd have to amend the directory every time you changed a file in it
22:32:55 <elliott> ais523: this is great because you can completely rip out FS-centrism
22:32:56 <ais523> patches /do not have directory data/
22:32:58 <elliott> just by replacing directories
22:33:04 <elliott> ais523: <ais523> then, you'd have to amend the directory every time you changed a file in it
22:33:06 <elliott> ais523: err, you do anyway
22:33:19 <ais523> the directory doesn't depend on the files in it at all
22:33:23 <ais523> see, I create an empty directory
22:33:29 <ais523> then I add a file to it, that doesn't change the original hash
22:33:42 <ais523> it just adds a new one, "add file to directory with hash 1298371028938"
22:33:59 <elliott> ais523: *add file to directory OSDIJFSODF with hash ASOIDHASOD
22:34:22 <elliott> ais523: so directories are maintained completely differently to files?
22:34:24 <ais523> the hash of "add file to directory with hash 129837192837", together with metadata, etc, /is/ the hash used to refer to the new file
22:34:32 <ais523> so directories are maintained completely the same as files
22:34:36 <elliott> ais523: why can't you have a file outside a directory?
22:34:51 <ais523> because then how would you know what project it was in?
22:35:06 <ais523> you seemed to understand this a couple of days ago...
22:35:25 <elliott> I'm just trolling you at this point, in the hopes of making the system even more interesting
22:35:30 <elliott> (OK, <ais523> the hash of "add file to directory with hash 129837192837", together with metadata, etc, /is/ the hash used to refer to the new file
22:35:35 <elliott> helped, but after that I've just been trolling :))
22:35:50 <ais523> in that case, shouldn't I just ignore you until you stop?
22:36:08 <elliott> ais523: OK then, given "add file to directory with hash 129837192837", what does a patch that inserts a single line "hi" into that file look like?
22:36:56 <ais523> it's "add 'hi' between 239487-SOF and 239487-EOF", where 239487 is the hash in question and -SOF and -EOF are hashes based on that
22:37:17 <ais523> in fact, you could literally append the -SOF and -EOF to the end, because all that matters about the hashes is a unique method of creating them
22:37:17 <olsner> haha, this mp3 player has a built-in hypnotoad feature, that plays the hypnotoad tune in the background when the program is running
22:37:18 <elliott> ais523: OK, what object do those hashes point to?
22:37:34 <elliott> as the Implementation Guy, I insist all hashes point to an actual object
22:37:39 <elliott> ais523: no, because they're != 239487
22:37:46 <elliott> ais523: say they're 27 and 72 respectively
22:37:49 <elliott> what objects do they point do?
22:37:56 <ais523> the start and end of 239487
22:38:06 <ais523> which are real concepts
22:38:11 <elliott> ais523: so every time you create a file, you create two patch objects too?
22:38:24 <elliott> ais523: And these patch objects are "SOF" and "EOF"?
22:38:40 <elliott> ais523: OK, so "SOF <filehash>" and "EOF <filehash>"?
22:38:53 <ais523> that would be one way to express it
22:39:00 <ais523> but, of course, an impl detail
22:39:13 <elliott> ais523: Of course; it's just that I'm the Implementation Guy looking to Actually Implement it. :)
22:39:26 <elliott> (I'm still down in the trenches of the object storage layer right now, though.)
22:40:45 <elliott> ais523: patch := insert <string> between <patch> and <patch> | replace <patch> with <string> | delete <patch> | do all of <set of patches> | start of file <patch> | end of file <patch>
22:40:50 <elliott> ais523: except, for directories, it's
22:41:09 <elliott> patch := insert <string> | delete <patch> | do all of <set of patches> | empty-directory
22:41:14 <fizzie> Phantom_Hoover: Plain "localhost" worked just fine for me, too.
22:41:55 <ais523> for directories, it'd be patch := insert file <filename> | insert directory <dirname>
22:41:56 <fizzie> And it's 25565 (not 25567) that's mcmap's (and Minecraft's) default port, unless I'm mistaken.
22:42:02 <ais523> rather than just a plain insert
22:42:14 <fizzie> (The listening port is a command line option too.)
22:42:23 <elliott> ais523: patch := insert <fileinfo> | delete <patch> | do all of <set of patches> | empty directory
22:42:24 -!- oerjan has joined.
22:42:28 <elliott> ais523: where fileinfo also allows symlinks, etc
22:42:41 <ais523> I'm thinking that these types will likely eventually be pluggable anyway
22:43:04 <elliott> ais523: one problem I can see right off the bat is that "start of file <patch> | end of file <patch>" is a type constraint -- those must be "insert <fileinfo>" changes -- that is not represented within the implementation type system
22:43:09 <elliott> the eventual plan is to use C
22:43:13 <oerjan> <ais523> so I checked both of them to see what would happen
22:43:15 <elliott> so we're in for that kind of pain /anyway/ :)
22:43:49 <ais523> oerjan: turns out, my login wasn't remembered
22:44:10 <ais523> you wonder if the people in charge of the forum had ever heard of radio buttons
22:44:16 <elliott> ais523: hmm, say P:S means "line S (blame: patch P)"; what does the patch (insert "cat" between P1 and P2) do to the file [P1:"rabbit", P3:"weasel", P2:"dog"]?
22:44:28 <elliott> that's how my apply function did it, it just wouldn't let you
22:44:31 <elliott> ais523: (assuming no merge handling)
22:44:45 <fizzie> For the real "x-ray" vision mode, I thought I'd just add a key that causes mcmap to send "set block to glass" packets for each non-interesting (not ore, chest, etc.) block inside a given radius, and then (for fake-glass) reply to all "player digging" packets with set-block-to-what-it-was.
22:45:17 <ais523> (because there's no way to automatically guess whether it should go before or after the weasel)
22:45:39 <elliott> ais523: I like how it turned from the string "weasel" into an actual weasel embedded in the file in the space of a few IRC messages.
22:45:39 <ais523> also, as for your hatred of the automatic v v v v ^ ^ ^ ^ conflict marking in files
22:45:59 <ais523> the obvious thing to do is to have a command to edit the files with conflict marking, but not do it by default
22:46:13 <elliott> ais523: possibly, but it shouldn't name it with the original filename
22:46:20 <elliott> ais523: foo.conflicts I could accept, but not foo
22:46:28 <ais523> hmm, often, in such cases, you want to edit the file into the unconflicted version
22:46:38 <elliott> ais523: so mv it back afterwards?
22:46:48 <fizzie> Incidentally, if you have sensible-for-everyone mcmap fixes (as opposed to local-only kludges), the github repo is public read-write, you can just push there.
22:46:51 <elliott> the VCS shouldn't pose one of its own-format (even if it is a simple format) files as the real thing
22:47:00 -!- MigoMipo has quit (Quit: Quit).
22:47:14 <ais523> elliott: I sort-of see what you mean; on the other hand, they're presenting something that should be edited into the real thing
22:47:18 <elliott> ais523: IMO, if sg gets a merge conflict, it should refuse to update /any/ file you have *by default*
22:47:20 <ais523> hmm, obviously it should work like sudoedit
22:47:32 <ais523> elliott: not even the files not involved in the conflict?
22:47:33 -!- wareya has quit (Read error: Connection reset by peer).
22:47:41 <elliott> ais523: indeed, since working directory wouldn't be in a consistent state
22:48:10 <elliott> ais523: it should print out the conflicts, you should be able to do "sg conflicts write filename" which would create filename.conflicts or whatever, which you would then fix,
22:48:22 <elliott> ais523: and then you'd do "sg conflicts fixed filename"
22:48:25 -!- wareya has joined.
22:48:34 <elliott> ais523: and once you'd fixed all conflicts, you could do "sg conflicts commit-fix" (command names all hypothetical)
22:48:40 <elliott> ais523: something like that, anyway
22:48:55 <elliott> ais523: of course, this only applies to when you try and check out a conflicting revision which ... wait
22:48:58 <elliott> can that ever actually happen with sg?
22:49:09 <ais523> yes, if you explicitly specify a conflicting revision
22:49:15 <ais523> which would make sense if, say, you wanted to fix the conflict
22:49:27 <elliott> ais523: how an a revision conflict with itself?
22:49:39 <ais523> well, you specify a patchset
22:49:44 <ais523> if the set is internally inconsistent, that's a conflict
22:49:53 <elliott> ais523: why can you checkout multiple patches? shouldn't you only be able to check out one?
22:50:14 <ais523> well, indeed, but that patch might be a set of patches
22:50:18 <ais523> which conflict with each other
22:50:24 <ais523> and that's a perfectly sensible thing to want to do
22:50:43 <ais523> people will want to resolve merge conflicts eventually, rather than leave the two version in the repo forever
22:51:01 <elliott> ais523: OK, but should you really be able to commit a patch that conflicts?
22:51:09 <elliott> just speaking platonically here
22:51:32 <ais523> you should be able to pull a patch that conflicts, certainly
22:52:02 <ais523> there are a huge number of usecases for that
22:52:10 <ais523> and then your repo would be inconsistent, but you probably intended that
22:52:12 <Phantom_Hoover> elliott, does the joint mine agreement cover the spoils from dungeon crawling?
22:52:13 <ais523> and then you fix the inconsistency
22:54:05 <Phantom_Hoover> The iron is unambiguously shared, though, so I'll give you half of that.
23:01:05 <Vorpal> ineiros, can you generate a new map sometime soon?
23:05:35 <elliott> ais523: we need so many caches... maybe we can replace sg(1) with one big cache :)
23:05:38 -!- rodgort has quit (Quit: Coyote finally caught me).
23:05:50 -!- rodgort has joined.
23:06:16 <elliott> ais523: I don't get darcs' patch theory
23:06:16 <ineiros> Vorpal: Except one in about an hour.
23:06:21 <elliott> ais523: all this commuting patches and stuff
23:06:29 <elliott> ais523: it's never explained why it's really useful or correct at all
23:06:39 <elliott> it doesn't ever elaborate on why this is a good way to do merging
23:06:50 <ais523> elliott: sorear looked into it, and concluded that it was just smoke and mirrors
23:07:03 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:07:22 <elliott> ais523: so, tl;dr: "I'm a physicist and can use LaTeX, therefore I've solved merging!"?
23:08:18 <elliott> ais523: (as opposed to you: "I'm a computer scientist and it's fractal, therefore I've solved merging!" :-))
23:08:36 <ais523> elliott: I'm not claiming to have solved merging, necessarily; I just came up with the model and noticed it had good merging properties
23:09:33 <elliott> ais523: FWIW, the model seems sound to me.
23:10:18 <ais523> indeed, it's at least fully-specified
23:10:28 <ais523> the only way in which it could malfunction is it not doing what we want
23:14:03 -!- FireFly has quit (Quit: swatted to death).
23:14:18 <elliott> ais523: hmm, the type system of the object store I have in mind is quite queer
23:14:20 <Ilari> Nifty... Konqi does not fallback from IPv6 to IPv4 at all (and neither it presumably will fallback from one address to another)...
23:14:57 <elliott> ais523: Every object has a type, and every type mandates a certain set of fields. But arbitrary fields can be added to it, and are just ignored by clients that don't support them.
23:15:08 <Ilari> Couple this with IPv6 routing problems and one is in for some nasty surprises...
23:15:08 <elliott> ais523: Modelling this in Haskell = OH SO MUCH FUN (pain)
23:15:36 <pikhq_> Ilari: Everyone sucks!
23:16:43 <elliott> ais523: I've been coding this like every object would have its own serialisation procedure, but I think I'm going to rewrite it to only support "string -> arbitrary binary data" maps.
23:16:54 <elliott> And then you write procedures to extract the keys you care about into a Haskell value.
23:18:18 <elliott> ais523: any opinions on --and I know this is horribly implementationy-- the object store file format?
23:18:33 <ais523> I can't think of any obvious features it would need
23:18:41 <ais523> other than storing the data, ofc
23:18:51 <elliott> ais523: I was thinking a B-tree, but I'm not sure how well that would work for a structure that's essentially a big set of (type,hash)=>stuff, with random lookup required on hash.
23:18:54 <ais523> give it a version number, so we can subsequently change the format if necessary
23:19:11 <elliott> Specifically it shouldn't require too many seeks, or a huge amount of iteration, to get to the stuff belonging to a given hash.
23:19:26 <ais523> well, the obvious storage system is a Perl-style associative array
23:19:33 <elliott> ais523: that's not much of a serialisation format, though
23:20:46 -!- augur has quit (Remote host closed the connection).
23:21:28 -!- augur has joined.
23:21:46 <elliott> ais523: I'm not sure how B-trees let me do a random lookup like this, though, as I'm no filesystems guy... :/
23:22:56 <ais523> the trick with filesystem-style things is to reduce the number of seeks you need
23:23:17 <ais523> but I'm far from an expert on that sort of thing either
23:23:30 <elliott> I hear B-trees are used, but *eh*, serialisation format can wait!
23:23:33 <elliott> Who tracks revisions on disk anyway.
23:25:51 -!- augur has quit (Ping timeout: 260 seconds).
23:26:49 <Vorpal> Deewiant, does the server work for you?
23:26:57 <Vorpal> Deewiant, I get null pointer exception all the time no
23:27:06 -!- zzo38 has quit (Quit: Now I will write TeXnicard.).
23:27:23 <Vorpal> Deewiant, I had some weird item dupe bug then got disconnected
23:27:37 <Vorpal> I'll wait a few minutes for anything floating around there to get timed out
23:28:00 <Vorpal> Deewiant, if that doesn't work, do you have any way to poke the server?
23:29:06 * oerjan has to admit all the spam in the esoforum doesn't look good, even if the noise is visible mainly because the signal is so tiny
23:29:33 <Vorpal> Deewiant, as in, get in contact with ineiros
23:29:57 <elliott> Yes, I'm sure ineiros REALLY WANTS TO BE CONTACTABLE 24/7 FOR THIS.
23:30:09 <elliott> In fact, Vorpal, maybe you should move in with him and watch him sleep.
23:30:19 <elliott> If the server goes down you could just breathe into his face until he wakes up.
23:30:40 <elliott> Sure, you could make an effigy of ineiros while you're there.
23:30:44 <oerjan> elliott: clearly what we need here is some kind of server-dream interface
23:30:58 <oerjan> oh wait logic turns off when you sleep. never mind.
23:31:07 <elliott> oerjan: Maybe we could just rewire ineiros's brain to connect to Minecraft when he sleeps.
23:31:14 <elliott> ...hell, *I* would go for that
23:32:40 -!- augur has joined.
23:33:02 <elliott> ais523: hmm, any opinions on Unicode support?
23:33:17 <ais523> it's obviously better than no Unicode support
23:33:20 <elliott> ais523: I /think/ at least the first paragraph won't have a smaller VCS-relevant unit than the line, so it isn't a big problem there
23:33:37 <elliott> so I guess it's just patch descriptions etc., where it's obviously a good thing
23:33:39 -!- Sgeo has joined.
23:33:59 <ais523> I'd suggest as using lines as the VCS basis to get something working, and switching to pluggable bases later
23:34:01 <Sgeo> I will IRC, homework, and verb nouns at the same time
23:34:08 <elliott> ais523: oh, and at the moment, the model of scapegoat we have /will/ mangle any binary file it can if you stuff one in
23:34:12 <ais523> also, with patch descriptions, etc, couldn't you just store them verbatim
23:34:17 <elliott> I suppose if \r isn't treated specially, it could be okay
23:34:21 <elliott> certainly won't get small patches though
23:35:17 <elliott> oerjan: http://esolangs.org/wiki/Talk:Tubes#Boxdrawing_symols aaargh painful to read
23:35:30 <elliott> oerjan: why don't you delete that page, seeing as you're a wiki admin as we all know >:D
23:35:33 <ais523> elliott: I stayed well out of that, because I couldn't understand what it was about
23:36:09 <elliott> ais523: "I want a charset encoding that has box-drawing chars as single bytes. What is it? (Is it obscure? If so, I'd better not use it.) Here is a C-based demonstration that I have no idea what the hell I'm talking about, and also use Windows. Goodbye!"
23:37:28 <ais523> I think he's talking about IBMgraphics, potentially
23:37:30 -!- ChanServ has set channel mode: +o oerjan.
23:37:41 -!- oerjan has set channel mode: +b *!*Sgeo@*.dyn.optonline.net.
23:37:42 <elliott> ais523: yes, which == codepage 437
23:38:01 <oerjan> (he asked me to do this yesterday if he failed the temptation)
23:38:15 <elliott> i like how you waited before pouncing
23:38:28 <oerjan> actually i didn't i just was web browsing :D
23:38:47 <elliott> oerjan: but it LOOKED like you did
23:38:49 -!- oerjan has set channel mode: -o oerjan.
23:38:58 <elliott> i think he's crying now, he isn't responding to my /msg :D
23:42:00 <elliott> * Sgeo drowns elliott in tears
23:42:07 <elliott> oerjan: you forgot to ban his clog access
23:43:53 <Vorpal> <@oerjan> (he asked me to do this yesterday if he failed the temptation) <-- what temptation?
23:44:28 <oerjan> Vorpal: the temptation to irc when he needed to do his homework
23:44:35 -!- Mathnerd314 has joined.
23:44:36 <Vorpal> elliott, actually I just observed it was night
23:44:43 <elliott> ais523: should object keys be Unicode? :-D
23:44:49 <Vorpal> elliott, the observation is still accurate
23:47:03 <elliott> "Minecraft is a game about placing blocks to build anything you can imagine. At night monsters come out, make sure to build a shelter before that happens."
23:51:41 <ais523> elliott: are you forgetting Enigma?
23:51:50 <ais523> enigma contains different floors !
23:51:58 <elliott> ais523: dammit, I *did* just forget about that before you reminded me
23:52:08 <elliott> now the general quality of things in my head has decreased significantly
23:52:13 <nooga> i want minecraft ;f
23:52:15 <ais523> still, you never know, it /could/ help
23:52:27 <elliott> ais523: if I ever need to cheesy someone to death?
23:52:33 <elliott> also, sorry it, I retract that statement
23:52:39 <ais523> elliott: well, it's bad enough for people to talk about it
23:52:46 <elliott> ais523: "Downloading of large movie clips is useful, as you will likely review them many times."
23:52:49 <elliott> not /that/ one, I sure won't!
23:52:52 <ais523> nooga: have you seen the Enigma trailer? it's hilarious
23:54:17 <elliott> nooga: http://www.youtube.com/watch?v=WV9l26Y-mBk
23:54:35 <elliott> nooga: (turn up for bad music)