00:00:59 Deewiant: server down? 00:01:32 Nope 00:10:46 Eversion LP > Homework 00:20:48 -!- TLUL has joined. 00:39:52 -!- FireFly has quit (Quit: swatted to death). 00:53:06 dammit, ais went again 00:56:50 -!- Ilari has quit (Quit: maintenance). 00:58:09 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 In all likelihood it's you. :-P 00:59:47 Sgeo: You're screwing up. 01:00:46 4(0) - 0 - [-4 - 1/2] = +5/2 01:00:54 Wait what? 01:01:09 * Sgeo slaps self 01:02:05 See, you're screwing up. 01:07:36 Deewiant: Down? 01:14:16 -!- augur has joined. 01:28:52 Sgeo: you're about to be made active in agora 01:28:56 and then what if people invade?! 01:29:03 we can't even get 8 objectors to a dangerous scammer right now!!! 01:29:04 SAVE AGORA 01:30:48 Why 8? 01:30:51 Why not 20? 01:32:43 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:32:47 *argument 01:33:41 Sgeo: It's 8. 01:33:47 In this case. 01:33:49 Ratification scam. 01:36:40 Objected 01:37:27 It's Agoran culture's fault 01:37:37 Whine whine whine 01:37:42 I like scams. 01:37:49 heh, git does directories the same way as elliott's-view-of-scapegoat 01:38:00 -!- Iwnda0 has joined. 01:38:38 heh, and stores the root directory hash with a patch 01:38:41 I think you'll find that the universe pretty much covers everything. 01:40:11 * 01:40:11 I can go back in time and make a different commit instead 01:40:11 01:40:11 * 01:40:11 Commits not reachable from any head are eventually discarded 01:40:11 o 01:40:13 Typically after 90 days or so 01:40:17 ok so it has anonymous commits too ... 01:40:20 like scapegoat! 01:41:01 Iwnda0: SHUT UP WOMAN GET ON MY HORSE 01:41:01 Look at my horse, my horse is amazing. 01:41:15 finally. 01:41:28 Iwnda0: I refuse to entertain your notions. 01:41:43 i got the notion 01:41:46 dont rock the boat baby 01:42:09 Okay, so git just stores the entire current commit's tree ... 01:42:36 http://perl.plover.com/classes/git/samples/slide039.html "Look! It's like darcs but with an inferior UI!" 01:43:15 TODO: read http://www.newartisans.com/2008/04/git-from-the-bottom-up.html 01:44:03 is this the chat of intellectual geeks 01:44:10 because that's what im looking for 01:44:42 Iwnda0: it's for esoteric programming languages. 01:44:50 but, yes, it's rarely on-topic. 01:44:53 oh cool thats close 01:45:53 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 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 They aaalways change it :P 01:46:25 They being the gods, obviously. 01:46:49 -!- Ilari has joined. 01:46:51 Iwnda0: Additionally, EgoBot, HackEgo and fungot are absolutely not bots and acting as if they are will hurt their feelings. 01:46:52 elliott: well yeah... loop through the sequence, it gives bizarre results.... but it seems what he actually checks 01:47:03 (Also http://esolangs.org/ since nobody reads the ChanServ message.) 01:47:06 Actually anyone can, I am the last guy to change the topic message. 01:47:20 bots with receptors 01:47:54 Iwnda0: Look at the wiki if you are interested with esoteric programming. 01:48:32 ok thanks for all of that 01:48:37 * Sgeo wonders what elliott thinks of Ur/Web 01:48:56 IMO, single-purpose languages scare me a bit, but it looks interesting. But magic syntax scares me 01:49:08 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:15 "Magic syntax"? What? 01:49:23 01:49:27 That's not "magic". 01:49:48 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 Sgeo: Is it single-purpose? 01:55:40 -!- Iwnda0 has left (?). 01:55:45 I don't know how well Ur works as a standalone language 01:56:26 Ur/Web? 01:59:34 http://www.impredicative.com/ur/ 02:00:03 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 it does not look as clean as haskell 02:04:16 Do you know how to help make a few things with TAVSYS standard libraries? 02:10:38 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:14:12 I LURRRRVE EVAL 02:15:02 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:44:33 o.O' 02:48:40 -!- wareya has joined. 02:51:46 -!- wareya_ has quit (Read error: Operation timed out). 03:00:22 Your C is terrible. 03:00:32 What say you, pikhq? 03:00:47 those are not C's, they're D's 03:01:22 Bah. 03:03:13 sshc: Ùńĩçôđë! 03:03:27 The last good thing written in C was Chopin's Concerto 3 03:08:45 * sshc salivates 03:08:58 What is you guisers favorite distro? 03:09:48 -!- zzo38 has quit (Remote host closed the connection). 03:13:53 Your C is terrible because it has no eval. 03:14:13 -!- augur has joined. 03:15:04 I've recieved numurous affirmative PMs from augur 03:15:09 The answer is quite clear. 03:15:14 sshc: s/^.*$/"\&"/ 03:15:33 Ah, he's here now 03:15:49 I've said nothing 03:15:51 "&" 03:16:09 \& means the entire matched string 03:16:18 quintopia: Ping? 03:16:21 C has been used for plenty eval. 03:16:26 quintopia: Ping! 03:16:29 AnybodyElseWhoMightWantToProofreadAPaper: Ping? 03:16:37 C no eval 03:16:57 Ping! 03:17:08 oerjan: Not with less sophisticated regex transmissions 03:17:33 It was quite convenient to hide our quite excellent strategy from augur, no? 03:17:57 D: 03:17:57 * oerjan has no idea who sshc is talking to 03:18:04 who are you 03:18:44 Why... I am sshc. 03:18:51 Most well known IRC user of this channel, at the moment. 03:19:11 I...am rather green. 03:19:16 That's who I am. 03:20:12 right 03:20:13 HOLY SHIT SOMEBODY ACTUALLY JOINED ############################################## 03:20:20 * sshc feels lucky for guessing right 03:20:21 well i have no idea what you're on about 03:20:23 bai nao 03:20:28 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 http://askville.amazon.com/eversion-video-game-children-play-adult/AnswerViewer.do?requestId=32693562 03:26:37 * Sgeo facepalns 03:26:40 palms too 04:21:00 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 But what if I start feeling depressedly lonely again? 04:21:19 Sgeo: is that an actual question? :O 04:22:27 I think I drained myself of happiness this past Thanksgiving 04:22:34 ouch 04:23:27 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 This past Tuesday, a friend of mine was telling me something that happened on the road that day 04:26:38 I keep thinking that if she had been paying less attention, she might have died 04:26:46 Although I don't know the details, maybe I'm mistaken 04:27:31 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 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 Should I be worried that she listens to audiobooks in the car? 04:29:46 coppro, that's scary 04:30:02 Sgeo: Very. 04:30:51 * Sgeo suddenly wonders what thing "Very" was in response to 04:34:59 the line immediately above it? 04:36:18 >.> 04:36:34 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 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 10 575 872 addresses (63.0% of /8) allocated this calender month... 05:08:36 IT'S THE FINAL COUNTDOOOOWN 05:09:13 About 17.8M addresses left to the threshold... 05:13:26 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 You know, Sam Hughes's rant about One Chance comes to mind... 05:17:58 Also looks like IPv6 routing is seriously borked for me... :-/ 05:18:45 ftp.fi.debian.org is reachable, ftp.se.debian.org isn't, as isn't Freenode IRC servers... 05:20:18 Traceroute6 isn't very helpful... 05:20:45 (besides pointing out that packets do reach the gateway). 05:20:49 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 "The Internet Corporation for Assigned IP address ICANNâ's experts warned that the existing IPv4 address will run out next January."... 05:24:24 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 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 That is, Winter 2009, Spring 2009, Summer 2009, Fall 2009, Winter 2010, Spring 2010, Summer 2010, Fall 2010... 05:32:05 ... The same Q&A pair... 05:39:50 -!- augur has joined. 05:42:52 Ilari, is http://pastie.org/private/fuqe7yxf4gztpaofh0xbmg reasonably accurate? 05:44:48 (It's not going to the press. Just my Facebook friends) 05:45:48 famous last words 05:45:55 "it" meaning IANA depletion? 05:46:24 I titled it "The Internet is Full" 05:46:28 Maybe a bit hyperbolic? 05:46:29 :/ 05:46:57 Hmm, RIRs still have addresses, right? 05:49:16 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 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 "ome estimates are predicting it (well, a major milestone showing that it's going to happen soon) to happen in January" 05:55:54 A bit awkward 05:55:56 * Sgeo shrugs 05:59:33 I really hope 700k a day isn't going to be long time trend... 06:00:05 After the RIRs are depleted, it won't be. 06:01:08 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 And there's no telling what happens once IANA depletion is announced... 06:02:45 We should make sure that IANA depletion makes the news. And not just the geek news 06:02:54 We should get people angry at the ISPs 06:04:28 Ilari, APNIC, is that asia? 06:05:57 Vorpal: Yes. 06:07:20 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 Sure, if you control the CPE, you could upgrade it to terminate the tunnel, but usually that's not the case. 06:08:17 Another problem with tunneled IPv6: Most users have no idea how to set such a thing up 06:08:21 Ilari, hm... what will happens to phones? 06:08:31 The IPv6-only Internet would be inaccessible to them 06:08:40 Sgeo, it is 10 easy steps (and 5 hard)! 06:08:56 (the hard ones are convincing sixxs) 06:09:06 Vorpal, and getting every clueless Internet user to do those steps? 06:09:08 sixxs? 06:09:18 Sgeo, SixXS yes 06:09:51 bbl university 06:12:20 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:03 Wait 06:13:14 End-user hardware tends not to support IPv6? 06:13:28 Um... does this mean we're completely fucked? 06:14:12 Basically, wait for user to send DHCP request. And in return, send back DHCP response and IPv6 router advertaisment. 06:15:04 DHCP configures IPv4 + nameservers, the RA configures the IPv6 layer 3... 06:16:44 * Sgeo needs to sleep soo 06:16:46 n 06:18:08 Hmm... Arp table has entry for default gateway that does not correspond to any known MAC of the DSL modem... 06:19:00 Which would mean some telco equipment is on the same segment, or at least in bridged segment... 06:19:40 Oh, and then there is some bad software that will crash if it receives a RA... 06:19:59 Sgeo: Very, very little end-user hardware supports IPv6, yes. 06:20:13 Sgeo: Because the only people more short-sighted than ISPs are electronics manufacturers. 06:20:26 And we don't have rational, informed actors. 06:23:47 Well, that settles it. 06:24:16 Humanity is going to be either wiped out or delt a severe blow due to Global Warming 06:24:44 IPv4 depletion, given enough time, is FAR simpler to solve 06:24:56 Given everyone working together 06:25:05 We can't do that much... 06:28:22 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 (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:38:39 Night all 06:39:38 -!- Sgeo has quit (Read error: Connection reset by peer). 06:50:00 fizzie: Well, Android phones should at least be trivially upgradable to IPv6. 06:50:22 (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 Everyone has seen me sign on but I'm saying something to let you know I'm not just lurking. 08:07:36 eek, the evil car is back 08:08:39 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 oerjan: And I didn't notice you said anything for a while, either. I'm a great chatter. 08:46:08 yay. sadly i'm about to leave soon. 08:46:12 And sadly I must retire too. 08:46:25 well bye then 08:46:27 Being sick and having to get up for class in four hours... 08:46:30 ...sigh. 08:46:33 Yeah, later. 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:49:04 gregor has pingeth me 09:49:13 yes gregor? 09:50:07 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 18:03:54 it does not look as clean as haskell 11:33:45 18:10:38 Sgeo: Ur seems ugly compared to haskell 11:33:58 coppro: please STFU, it is more powerful than haskell 11:34:02 coppro: it contains new type-system research 11:34:15 it's not some random language 11:34:42 19:16:29 AnybodyElseWhoMightWantToProofreadAPaper: Ping? 11:34:46 Gregor: Shure 11:40:28 21:20:49 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 people have been pressuring ISPs for 10 years. 11:41:09 21:46:24 I titled it "The Internet is Full" 11:41:09 21:46:28 Maybe a bit hyperbolic? 11:41:11 YOU DON'T SAY 11:41:41 21:42:52 Ilari, is http://pastie.org/private/fuqe7yxf4gztpaofh0xbmg reasonably accurate? 11:41:54 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 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 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 22:23:47 Well, that settles it. 11:58:19 22:24:16 Humanity is going to be either wiped out or delt a severe blow due to Global Warming 11:58:19 22:24:44 IPv4 depletion, given enough time, is FAR simpler to solve 11:58:19 22:24:56 Given everyone working together 11:58:19 22:25:05 We can't do that much... 11:58:28 You are so naïve it is hilarious. 11:58:55 Converging catastrophes... Global Warming is just one of those... 12:00:30 -!- oerjan has joined. 12:00:58 Ilari: Obviously we will all die. 12:01:56 Actually, humankind getting dealt serious blow is much more likely than full wipeout. 12:02:07 (actually, inevitable) 12:02:38 Ilari: I disagree about its inevitability. 12:04:39 It won't be global warming that is going to deal the main blow (just additional one). 12:06:44 Yes, the main blow will come from IPv4 depletion. 12:07:00 * oerjan swats fizzie -----### 12:08:21 More like depletion of natural resources. 12:08:37 (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 phosphorus looks like a big one... we're going to have to start recycling human sewage again 12:19:50 oerjan: let's hope the arsenic bacteria don't take over :D 12:20:10 heh, that seems to have been shoddy science anyway 12:21:18 fizzie: "Uh oh, Minecraft update." 12:21:22 oerjan: shush :) 12:22:02 "The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new." 12:22:06 (Notch twitter feed.) 12:22:09 arsenic is immensely rarer than phosphorus anyway 12:22:24 "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 ^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 "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 That is, in fact, exactly what made me bring the 'got here. 12:27:40 `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 "\"The client wasn't updated, btw, that was a side-effect of copying the files around. The updater thought they were new.\"" 12:28:07 oh damn 12:28:07 FAIL 12:28:18 sorry :( 12:28:29 anyway, retweeting in irc is fun 12:29:29 -!- Slereah has quit. 12:30:40 That is, in fact, exactly what made me bring the 'got here. 12:30:44 What, me pinging you? 12:31:08 No, what oerjan did. 12:31:44 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 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 fizzie: Maybe it hashes the server pathname too for NO GOOD REASON./ 12:35:53 fizzie: Wait, maybe "moving things around" meant moving things around in ~/.minecraft. 12:35:54 Creepy. 12:36:04 Doesn't look like it :P 12:36:10 Actually it probably just looks at the value in ~/.minecraft/bin/version, which looks suspiciously like a time_t *1000. 12:36:45 So maybe you can disable auto-updating by putting a ridickulously large number in. 12:37:02 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 (For appropriate Ns and Ms.) 12:37:20 Yes, I noticed. 12:37:27 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:35 :< 12:38:36 It'd be String[] key_value = line.split(":", 2); 12:38:42 -!- MigoMipo has joined. 12:39:20 Actually, it's one of the examples in the String.split(String regex, int limit) documentation. 12:39:45 "The string "boo:and:foo", for example, yields -- [regex :, limit 2:] { "boo", "and:foo" }" 12:39:55 oerjan: FireFly has developed crushing depression due to your constant swattling. 12:40:01 fizzie: bahahaha 12:40:04 Yeah 12:40:18 Hrm 12:40:29 elliott: well flies are supposed to live shitty lives 12:40:40 At least _ is a non-DNS-friendly replacement character, compared to something like "q". 12:40:59 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 And so is your mom, oerjan :| 12:41:19 DING DING DING someone did the your mom joke on one of the incorrect targets 12:41:24 prepare for canned response 12:41:28 Ow 12:41:41 That sounds.. bad 12:41:45 MY MOM IS DEAD YOU INSENSITIVE CLOD 12:41:53 elliott: close enough? 12:41:59 oerjan: should do 12:42:15 oerjan: I would have gone for "MY MOTHER WAS KILLED BY YOUR KIND", but that is acceptable 12:42:37 i ... don't recall any flies being involved. 12:43:32 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 fizzie: surely it would be the mother metadata's dead property 12:43:54 oerjan: isn't this conversation SO COMFORTABLE 12:44:00 anyway he's a firefly, not a fly :P 12:44:08 or maybe he's a Fire Fly, like a fly on fire or something 12:44:19 Well, yes, it would be in the Ontology(tm) somewhere, I just simplified. 12:44:43 Being a fly on fire would make the swatting pretty pointless, though 12:44:48 Probably some sort of a RDF graph. 12:46:05 FireFly: well oerjan is just that cruel 12:46:14 and i don't think he's speaking to me any more :D 12:47:34 ...what 12:49:04 "He's so nice, he wouldn't hurt an on-fire fly", as the saying goes. 12:49:18 -!- nopseudoidea has joined. 12:50:19 oerjan: wut 12:50:56 -!- nopseudoidea has quit (Client Quit). 12:53:59 oerjan: so how's the ultimately-meaningless patch theory going :D 13:00:04 -!- MigoMipo has quit (Ping timeout: 250 seconds). 13:02:43 non-existingly 13:15:10 oerjan: flower 13:15:11 s 13:15:16 (multiple/plural) 13:27:56 Harm Considered Harmful 13:28:57 http://74.125.155.132/scholar?q=cache:Dk-wWK6NAaIJ:scholar.google.com/+hello+world+considered+harmful&hl=en&as_sdt=40000000000 13:29:02 WORST. PAPER. EVAR! 13:33:57 um 13:33:58 not quite 13:34:12 try this one http://journalofcosmology.com/Mars144.html 13:35:35 There are probably a lot worse papers than those... 13:39:15 oh, i know, but that was one i was already looking at that seemed at least a little bit worse 13:39:39 so, go go gadget quick reply counterexample reflex! 13:47:46 try this one http://journalofcosmology.com/Mars144.html 13:47:47 no that's most awesome 13:48:44 i suppose. but it's amusing that it is in journal of cosmology, clearly being an analysis of human sexual relations 13:48:56 not what i usually think of as cosmology 13:49:56 i thought the message of the paper you linked was dead-on though. A lot of people teach OO very wrong. 13:50:35 quintopia: thinking that paper and its "solution" are reasonable are a sign of brain damage. 13:51:05 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 i didn't say the solution was reasonable 13:51:15 i said the message is dead-on 13:51:15 *is a 13:51:26 the message includes the solution 13:51:42 i wholeheartedly disagree with your statement 13:52:02 this is a question of pedagogy techniques, not whether or not OO is the One True Solution 13:52:23 i would rather see hello world not used at all, however 13:52:46 and actually jump right into a real problem that actually shows the purpose of OO 13:53:12 quintopia: here's an idea, maybe we shouldn't teach possibly the worst paradigm in recent history 13:53:17 (original OO I can accept, Java I cannot) 13:53:37 i agree. Smalltalk is better suited for teaching OO. 13:53:55 it's just there aren't any truly non-shitty implementations of Smalltalk 13:54:58 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 anyway smalltalk has perfectly good implementations 13:55:19 Squeak's UI is a bit stupid but it has the Smalltalk-80 lineage. 13:55:31 squeak is pretty shitty 13:55:35 or at least 13:55:39 was, the last time i used it 13:55:50 quintopia: from what do you derive that conclusion 13:56:22 that you need to tell me where i can find a non-shitty smalltalk? 13:56:31 quintopia: you fail at english 13:56:37 quintopia: from what do you derive the conclusion that squeak is pretty shitty 13:56:46 oh 13:57:14 all the problems i had with the system. i'd rather have one that didn't act like a VM, really. 13:57:20 quintopia: it is not a VM. 13:57:32 it acts like an OS being run in a VM 13:57:48 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 which is understandable considering smalltalk's origins 13:57:59 it is like saying "I wish Linux didn't act like a VM, really." 13:58:09 Smalltalk's power is /nothing/ and worthless without the integrated environment. 13:58:12 GNU Smalltalk is a joke. 13:58:20 < quintopia> which is understandable considering smalltalk's origins 13:58:27 i indicated i get all that 13:58:42 but i disagree that you need it to be implemented like /that/ 13:58:50 Feel free to disagree, but you're wrong. 13:59:04 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 feel free to disagree, but you're wrong 13:59:17 now that i can agree with 13:59:18 Thankfully Emacs is a slightly nicer environment, and is widely accepted -- but -- 13:59:19 only slightly. 13:59:31 So would you prefer it if Smalltalk booted on the bare metal? 13:59:41 That would be even less integrated with your OS, and less portable too. 13:59:50 however, i would like a smalltalk that integrates nicely into /other/ tools. i don't want it running on the bare metal. 14:00:00 i want the language itself 14:00:15 but if i had another computer 14:00:18 that was smalltalk based 14:00:22 i would be happy with it 14:00:27 like i would be happy with a lisp machine 14:00:36 quintopia: ok, so press fullscreen in a smalltalk window. :p 14:00:36 for the purposes of the /computer i have/ 14:00:51 ...they window already fills the screen :P 14:01:04 anyway, the abstraction there is way too leaky 14:01:08 so leaky it is annoying 14:01:18 i would switch to squeak if it booted on the bare metal and had drivers, probably. 14:01:26 and i could make the UI less irritating. 14:01:52 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 eh, i'd just need a browser. :p 14:03:00 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:05 quintopia: precisely. 14:03:10 he invented it. 14:03:13 but smalltalk is broken too. 14:03:25 yeah, i'm wondering where that quote comes from 14:03:34 a talk he did; the bit without smalltalk is widely quoted. 14:03:38 ironically. 14:03:58 so how does he think smalltalk is not OO? 14:04:00 quintopia: one of smalltalk's main problems is that it has inheritance, of course. 14:04:24 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 what's the proper way to do templating/code reuse in OO? 14:04:38 quintopia: composition 14:04:42 /aggregation 14:04:53 combine components to produce bigger components. 14:05:25 and the proper way to do shared interfaces/interchangeable types? 14:05:56 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:09:25 hi ais523 14:10:24 hi 14:10:45 ais523: can i ask a scapegoat-related question? 14:11:39 you just did 14:11:42 but feel free to ask a different one 14:11:59 -!- sftp has quit (Remote host closed the connection). 14:12:01 (semantic argument: are scapegoat-related-question-related questions scapegoat-related questions?) 14:12:20 ais523: only if you program Pelr 14:12:21 *Perl 14:12:24 ((1, 2), 3) = (1,2,3) 14:12:25 :-) 14:13:04 that's because array constants embed into other array constants by definition 14:13:16 it's what the , operator does when given an array and scalar, or two arrays, as arguments in list contexts 14:13:52 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:13:53 indeed 14:14:01 ugh, i've forgotten the question 14:14:11 "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:15 sounds like a smell to me 14:14:18 well i can't be here every second of the day 14:14:31 quintopia: ? 14:14:33 i was talking to ais523 14:14:34 quintopia: isn't that what an interface is, in the OO sense? 14:14:35 until i quoted you 14:14:43 oh 14:14:51 ais523: that's what i'm trying to describe yes 14:14:51 oh, I had a new esolang idea last night 14:15:03 it was basically, "make a cross between ML and Prolog" 14:15:20 the idea is sufficiently crazy to need no further complications to be eso, but I'd probably add some anyway 14:15:57 (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 elliott: what are your thoughts on contracts, in the eiffel sense? 14:17:06 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 at the moment I'm scrolling through them in less and using vi for any edits I need to make 14:17:22 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 can you answer my question? 14:17:41 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 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:50 ais523: grep? 14:18:17 it 's a situation that isn't really suited for grep 14:18:23 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 I'm trying to look at a bunch of files submitted by students and fix the ones that are malformed 14:18:35 and they come up with really creative ways to do malformed 14:18:50 quintopia: if you're passed an object as a parameter, then you use it according to some interface 14:18:52 what's the problem? 14:19:15 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 hmm, vi keeps annoying me with its nonintuitive choices of units of measurement 14:19:19 elliott: when you want to ensure that the wrong object doesn't get passed crashing your entire program 14:19:26 e.g. d2j deletes three lines, who'd have guessed? 14:19:39 ais523: directional keys 14:19:48 ais523: j is down 1 line 14:19:50 (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 elliott: well, j moves a line downwards 14:19:57 what? no 14:19:59 so d2j would delete two lines downwards, logically 14:20:18 perhaps 14:20:22 ais523: don't you mean d2d? 14:20:35 quintopia: ok, well, we're talking about where smalltalk went wrong here 14:20:40 again, perhaps, but d to mean line doesn't really make sense 14:20:40 quintopia: and duck typing is a major part of smalltalk 14:20:44 so i don't see the relevance at all 14:20:52 I keep using vim like it would be meant to work, rather than like it actually works 14:21:08 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 ais523: use traditional-vi, see what it does :p 14:21:45 I also understand why vi doesn't do major modes, after using it for a while 14:21:56 you really need to memorise things like what its definition of a word is to use it efficiently 14:22:04 and if that kept changing on you, it wouldn't really help 14:23:14 elliott: fine. so what are your thoughts on contracts, then? 14:23:24 quintopia: completely unrelated? 14:23:39 sure 14:23:53 whether they are a valuable idea in OO language design 14:24:25 quintopia: i'm uninterested in OO language design 14:24:42 oh. you don't act like it. you can understand my thinking you are. 14:24:52 quintopia: well, i know what smalltalk did wrong. 14:24:56 but i don't think OO is the way forward. 14:25:06 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:17 no opinion 14:25:19 gotta go 14:25:31 fair enough 14:25:42 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:25:49 ish. 14:26:00 I spent ages reading Apple's guidelines about Objective C memory management; they were, surprisingly, exactly the same as Perl uses internally 14:26:56 ais523: *perl, surely 14:26:57 -!- zeotrope has joined. 14:27:05 err, yes 14:27:13 I should have said perl(1) 14:27:26 it's basically refcounting with a strong convention for when you change the reference count 14:27:31 ais523: nah, it's "only perl can parse Perl", not "only perl(1) can parse Perl" 14:27:50 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 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:58 that's insane. 14:31:46 it's useful, though; the idea is that you always free an object before returning it from a function 14:32:03 and the function you returned it to allocates it again if it wants it to stick around 14:32:15 ais523: that sounds brittle :) 14:32:30 there's a defined place where everything with a refcount of 0 gets freed at once 14:32:43 it's between statements in Perl, or each iteration of the event loop in Cocoa 14:33:42 heh 14:34:10 so it's not brittle, but only works if you understand how it's meant to work 14:35:05 ais523: brittle from a human point of view, i mean 14:35:30 perhaps 14:35:39 in theory, you should be able to do it statically 14:44:12 -!- augur has quit (Remote host closed the connection). 14:44:35 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 also because i'm lazy, but want something to code 14:45:32 Don't you mean "optomized"? 14:45:48 *OPTOMIZED(TM). 14:46:19 ais523: btw, highly recommended reading: http://perl.plover.com/yak/git/ -- turns out git has a lot of *my* ideas :P 14:46:59 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 ofc, it still lacks the Scapegoat Patch Format of Wonderment 14:48:54 didn't you know git had immutable hash-based indexing? 14:49:38 -!- augur has quit (Ping timeout: 276 seconds). 14:49:45 ais523: oh, yes 14:49:52 ais523: I just didn't realise that it combined it with other parts of my design 14:50:24 ais523: it seems that about half of my scapegoat ideas are basically unintentional adaptions of git to the scapegoat model :P 14:50:29 hmm, incidentally, today as an experiment I deleted all my cookies and set Firefox to prompt before accepting them 14:50:32 (wtf spellchecker, adaptions is a word) 14:50:39 ais523: lynx does that by default, it's intensely irritating 14:50:48 and it's... surprisingly less irritating than I thought it would be 14:50:51 heh 14:50:58 ais523: tried google yet? 14:51:01 mostly because it gives me the optoin to whitelist or blacklist domains the first time it happens 14:51:02 you get like 50 cookie requests 14:51:06 I had them blacklisted already 14:51:10 heh 14:51:17 so I'm only getting one question per page request 14:51:30 if I accept any cookies from a domain, I'm probably going to want to accept all of them, after all 14:51:36 ais523: you'd like this, if it were for Firefox: https://chrome.google.com/extensions/detail/jeoacafpbcihiomhlakheieifhpjdfeo 14:51:54 ais523: completely anonymises google, disables tracking by digg, facebook, google, twitter, yahoo 14:52:38 hmm, yes, it seems a little complex 14:52:47 more or less like what I'm doing except with defaults 14:53:02 ais523: for a second there, you were zzo38 14:53:15 "That thing that does exactly what I want to do is too complex in my opinion, so I wrote my own." 14:53:22 (zzo-ly english left to the reader) 14:53:43 see with me i just write my own without justifying it :D 14:54:26 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 ais523: the web is kind of inherently irritating :P 14:56:21 yup 14:56:25 IRC's nicer in that respect 14:56:41 unfortunately, the web is kind-of hard to avoid nowadays if you use the Internet a lot 15:01:34 ais523: if you ever figure out how you're meant to use trackpads ergonomically, please tell me 15:01:41 I can't figure out how to do it without holding your wrist up uncomfortably 15:01:49 or using your thumb 15:01:52 which is not very precise 15:02:29 I use my index finger, with my wrist below the trackpad on the table 15:02:43 it works quite well, except I have to use my other hand to click 15:02:53 if I'm doing something that can't be done with a simple tap on the touchpad 15:03:06 that's how I play Enigma on this laptop, at least, and that needs quite a lot of precision 15:03:09 ais523: wrist-on-table is very uncomfortable, and also you can't do that with it in your lap 15:03:22 ("you're not meant to put it on your lap!!!!" only if it's a stupidly overly hot machine) 15:03:28 I don't have enough coordination to use a trackpad while holding the laptop 15:03:33 ais523: hold? i said lap 15:03:36 as in sitting, on your lap 15:03:44 then it'd be too low to reach 15:04:03 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 ais523: wrist-on-duvet isn't a very stable position 15:04:41 indeed 15:05:30 but I can use my other hand to help hold the laptop steady 15:05:36 ais523: heh 15:05:41 and the duvet is relatively stable because the rest of my body's holding it in place 15:05:59 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 so you could use it as a wrist-rest 15:06:34 and put the trackpad somewhere other than the centre, to stop it being knocked so easily? 15:06:52 ais523: possibly :P 15:06:53 I suppose the alternative's to use something other than a trackpad 15:06:59 or just somehow detect the hand position on the laptop 15:06:59 like a good old-fashioned trackball 15:07:02 and disable the trackpad accordingly 15:07:05 ais523: ugh, i hate trackballs 15:07:19 hmm, I think I've used most of the common pointing devices in existence now 15:07:24 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 mouse, trackpad, trackball, touchscreen, MouseKeys 15:07:41 hmm, that's interesting 15:07:50 was it a finger trackball, or a thumb trackball? 15:08:09 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:08:56 ais523: thumb 15:08:59 finger is probably nicer 15:09:02 but it was thumb 15:09:11 ais523: it was a well-regarded one, too 15:09:22 ais523: this: http://www.bluesnews.com/miscimages/tmmarble150.gif 15:09:23 hmm, I suppose it varies from person to person 15:12:53 ais523: scapegoat question: what's the algorithm to find @tip? I know how the Official Branch is defined 15:13:03 but how would scapegoat actually go about finding the right hash in a haystack of hashes? 15:13:23 it's on my @tongue... 15:13:38 * elliott swats oerjan distractedly 15:13:56 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:08 ais523: wait, what? 15:14:09 @tip is a branch 15:14:14 how can multiple branches have a @tip? 15:14:15 if there are no conflicts, you're done; otherwise, remove the chronologically newest patch and check for conflicts, etc 15:14:23 well, @tip is defined with respect to a repo and/or a branch 15:14:34 otherwise it would mean "the most current version of everything" 15:14:40 which is hilarious, but would take a while to calculate 15:14:53 ais523: hmm, fair enough 15:15:01 ais523: the design in my head has no concept of repository, it seems 15:15:06 what is a repository? 15:15:40 it's basically just a branch, but one defined by physical location 15:15:45 ais523: hmm. 15:15:56 ais523: anyway, sure, that algo would work, but I was thinking something vaguely efficient :-) 15:16:01 if you have millions of hashes that would be ... "fun" 15:16:02 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 ais523: do you have a concept of push and pull? 15:16:23 I do, in terms of whitelisting 15:16:25 in my model, pushing is just cp -R +scapegoat /another/+scapegoat 15:16:32 and pulling is just cp -R /another/+scapegoat +scapegoat 15:16:41 ok, whitelisting 15:16:51 elliott: in your model, then, your repo is the set of all hashes in the +scapegoat directory 15:16:53 forming a branch 15:17:13 ais523: fair enough; I was under the impression that +scapegoat's not having some hashes is purely an implementation detail 15:17:21 but good point 15:17:39 elliott: you were inconsistent on the point, I wasn't sure what your impression was 15:17:49 perhaps... 15:17:51 I'm just confused :) 15:18:03 ais523: ok, so are there any more efficient algorithms than you can think of than O(hashes)? :p 15:18:05 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 elliott: same algo, but optimised such that "check whether this set of hashes conflict" is efficient 15:18:46 ais523: hmm 15:18:54 in particular, I'm thinking of caching whether the set of dependencies of a given hash are mutually consistent or not 15:18:55 ais523: i can't think how to make that efficient without reading every single hash in th repo 15:18:56 ah 15:19:48 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 and reconstruct from there 15:20:06 (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 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 hmm, a forum I just logged into had two checkboxes for "remember me?", one marked yes and one marked no 16:08:05 so I checked both of them to see what would happen 16:08:10 I'll have to see if I'm still logged in tomorrow 16:27:59 hey ais 16:28:04 i have a question about monads 16:28:50 ais523: in this electronics/wires analogy for monads, what is >>= ? 16:32:07 cheater99: connecting two blocks to each other, and also taking a second connection from the output of the first 16:32:27 where does the second connection go to? 16:32:34 i think a drawing would help 16:33:05 (but i'm sure it can be explained without one) 16:33:25 well, >>= is combined with a lambda 16:33:29 as in, >>= \a. 16:33:37 it goes to wherever that lambda's connected to 16:33:38 so, anywhere 16:34:09 i don't understand :( 16:34:33 let's see... monads are just computations with a sidechannel 16:34:46 now, the computations might do nothing but interact with the sidechannel, as in IO () or whatever 16:34:51 in which case, you just connect with >> 16:34:58 however, they might also produce a result, entirely independent of the monad 16:34:58 Wait, you're using a metaphor for monads? 16:35:10 A questionable one, too. 16:35:12 in which case, you need to put the result somewhere 16:35:16 Phantom_Hoover: it doesn't extend forever 16:35:21 but I used it to teach cheater99 monads months ago 16:35:26 What about the [], Maybe or Identity monads? 16:35:42 now, >>= is like >>, but it lets you specify somewhere to put the result of the computation that the monad wraps 16:36:15 i don't know >> yet 16:36:26 oh, >> is literally just connecting two blocks together 16:36:31 do you understand do notation? 16:36:40 or do you just understand the concept but not any notation? 16:36:51 i don't know the notations 16:36:59 cheater99, a >> b = a >>= const b. 16:37:00 i may or may not understand the concepts behind them 16:37:10 i don't know const, i'm a haskell n00b 16:37:24 const == K in the SKI calculus. 16:37:29 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:37 ah, OK 16:37:50 let's see... imagine a simple computation which doesn't have a monad at all 16:37:54 yes 16:38:01 it has one input and one output 16:38:04 let a = 2 + 2 in a * 3, let's say 16:38:10 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 so for example, a box, with a "pin" on the left and a "pin" on the right 16:38:19 like a DIP with just one pin on each side 16:38:20 yep 16:38:21 yes? 16:38:22 ok 16:38:30 and a monad is a sidechannel representing that 16:38:38 wait 16:38:41 *sidechannel alongside that 16:38:45 oh ok 16:38:46 yes 16:38:53 a monad is a wire running above our box 16:38:55 yep 16:38:58 our box is not connected to it yet 16:39:00 indeed 16:39:06 ------------------ 16:39:08 nor need it be ever, depending on what we do with the monad 16:39:11 -| |- 16:39:15 yes 16:39:17 ok, now 16:39:22 what does >>= do? 16:39:37 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 so there's more than one thing to connect, and that's where the notation gets a little complex 16:40:12 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:14 so if I do a >> b 16:40:16 that's the same as 16:40:18 ------------------------ 16:40:19 ok go on 16:40:32 -| a |-o -| b |- 16:40:37 where the -o means I didn't connect it to anything 16:40:50 connecting the inputs of the boxes a and b is easy enough, as they're just functions and can take arguments 16:40:50 but the monad in your drawing isn't connected 16:40:56 the monad is, that line above is continuous 16:41:02 but the boxes below aren't connected to each other at all 16:41:10 wait let's use some sort of online whiteboard maybe 16:41:18 is there such a thing? 16:41:42 suppose I want to give inputs to a and b, still not connecting them to each other at all 16:41:46 you got java? 16:41:46 if I do (a 6) >> (b 7) 16:41:48 that gives me 16:41:50 --------------------- 16:42:02 6-| a |-o 7-| b |- 16:42:11 hmm, yes, but not the Oracle version, and it's unreliable sometimes 16:42:21 it's probably easier just to do it over IR 16:42:23 *IRC 16:43:13 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 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 are you following this so far? 16:46:01 hmm 16:46:18 i need to think about it but i just remembered i have to call someone real quick 16:46:30 i'll let you know when i'm back, ok? shouldn't take a lot of time 16:46:40 cheater99, incidentally, do you know how the Maybe monad works? It's the easiest to understand non-trivial one. 16:47:19 Phantom_Hoover: no it isn't, State is in this model 16:47:30 there are a huge number of different ways to understand monads 16:47:38 and different people learn it different ways 16:47:45 All of which don't work for at least half of them. 16:47:53 there are concepts of monads where IO is simplest, where Maybe is simplest, where State is simplest 16:48:06 there are even ways of understanding monads based on starting from the trivial monad 16:48:15 (which is, surprisingly, actually useful on occasion) 16:48:28 I mean, the category-theoretical version of monads is identical, but the metaphors you'd use are *completely* different. 16:48:46 ais523, monad transformers, isn't it? 16:49:00 That Identity is useful for? 16:49:13 not just that 16:49:25 you can use it for tagging values hungarian-notation-style, but more reliably 16:49:37 as in, "this needs to be escaped before showing to the user", etc 16:49:48 although there are other ways to do that anyway in Haskell 16:50:21 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 ais523, using the Identity monad for that seems utterly stupid. 16:51:43 perhaps 16:51:44 I mean, why not just do data EscapedString = EscapedString String, then give it a Show instance that escapes it? 16:51:51 it doesn't really do a lot, though, just tag things 16:51:58 also, ouch at making that a Show instance 16:52:12 Why? 16:52:12 and the reason is, you couldn't do things like, say, concatenate your EscapedStrings together 16:52:22 *UnescapedString, I suppose 16:53:48 you could do something as simple as liftM reverse to reverse an EscapedString if it were a monad 16:54:03 again, *UnescapedString 16:54:18 (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 Phantom_Hoover: it doesn't extend forever 16:54:18 but I used it to teach cheater99 monads months ago 16:54:21 ais523: "teach" 16:54:29 elliott: well, I think he "got" them 16:54:35 ais523, erm... Functor and fmap? 16:54:39 even though the metaphor was imperfect 16:54:42 Phantom_Hoover: well, monads are sorts of functors 16:55:02 in fact, liftM and fmap are IIRC the same function 16:55:09 ais523, yes, but why make them monads when they have no monadic properties whatsoever? 16:55:32 because they do 16:55:47 the monad version would be Tainted String, rather than UnescapedString 16:55:51 i.e. it actually takes a type as an argument 16:55:59 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 Also, you *could* just define the relevant functions yourself. 16:56:35 hmm, "unescaped" was too specific 16:56:42 I meant "untrusted", etc. 16:56:48 ais523, yes, but why make them monads when they have no monadic properties whatsoever? 16:56:52 if they're monads they should have a Monad instance 16:56:56 regardless of how useful it may seem 16:56:57 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 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 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 ais523, wait, the point here is that you /don't want a functor/. 16:57:59 no, it isn't 16:58:05 it's fine to do arbitrary operations on the untrusted data 16:58:08 so long as it remains untrusted 16:58:27 The original thing here was to escape strings, not have some general interface thing. 16:58:51 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:08 OK. 16:59:34 But you were talking about uses of the Identity monad. 16:59:39 tep 16:59:43 *yep 16:59:50 well, the point here is that Untrusted /is/ the Identity monad 17:00:04 if you work out what >>=, return, etc. are, they come to the same thing 17:02:32 ais523: i saw a post on perlmonks saying perl doesn't need monads because perl already has taint built in 17:02:48 (the example being used for monads was "look, you can do taint in it without even any language support!") 17:03:28 elliott, oh mc updated 17:03:30 elliott, interesting 17:03:38 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:47 Vorpal: not updated 17:03:50 Vorpal: he just moved some files. 17:04:05 elliott, oh? so what was that then 17:04:09 Vorpal: he just moved some files. 17:04:10 elliott, as in 17:04:17 on the server 17:04:18 elliott, changing directory structure? 17:04:21 ah okay 17:04:22 yes 17:04:26 on the server, right 17:04:30 not in ~/.minecraft it seems, i checked 17:05:20 ais523: so would a scapegoat impl cache the list of toplevel patches? 17:08:36 ais523: hi 17:09:39 ais523, out of curiosity, where does join fit into your metaphor? 17:10:41 ais523: hey 17:10:43 ais523: http://skrbl.com/156427695 17:10:46 [[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 ag [A-Za-z_0-9]. 17:10:46 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 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 ais523: i did not know this ^ 17:10:58 ais523: we start out with a simple function, Ax = 2x 17:11:23 ais523: and let's see how >>= works on things 17:11:31 -!- sebbu has quit (Ping timeout: 276 seconds). 17:11:59 elliott: I did 17:12:05 I've even used it before now 17:12:09 cheater99: hmm, OK 17:12:11 ais523: problem is, you have to do it manually 17:12:13 Phantom_Hoover, there? 17:12:15 elliott: indeed 17:12:19 Indeed. 17:12:21 Phantom_Hoover, weird track south of your place. where does it go? 17:12:22 ais523: which sort of makes the VCS a version ... creation system 17:12:24 also, it isn't language-aware, so it replaces inside comments 17:12:36 ais523: hmm, not a very useful feature, then 17:12:37 Vorpal, Mt. Hoover? Dunno. 17:12:47 To the Batmobile! 17:12:48 elliott, you involved in it? it is above ground 17:12:49 it's rather limited, yes 17:12:50 and FAAR 17:12:54 it could be much better 17:13:03 argh, skrbl is broken 17:13:06 Vorpal: what kind of track 17:13:08 cheater99: well, in Haskell notation, we'd write that a x = 2 * x 17:13:16 (capital letters are reserved for type names) 17:13:18 elliott, minecart 17:13:18 ais523: ok 17:13:21 ais523: you didn't click his fancy java whiteboard! he won't talk to you!1111 17:13:28 Vorpal: i have no idea. ride it and see 17:13:34 -!- sebbu has joined. 17:13:43 elliott, it completely lacks boosters, but it is mega-scale 17:13:47 so if we want to double a value, and double it again, we could write, say, a (a 5), and get 20 17:13:50 Vorpal: walk it then 17:13:56 Vorpal, wait for me! 17:14:09 ais523: so we have a x = 2 * x. ok. 17:14:21 now it is represented by a box with one pin on the left and one on the right. 17:14:25 yep 17:15:00 ais523: hmm, does scapegoat have an easy patch-invert algo? 17:15:04 http://dabbleboard.com/draw?b=Guest527979&i=0&c=9d321a8e4ccd7efbf770e3f5f3517f427b010b35 17:15:10 do you see a box with "a" on it here? 17:15:25 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 ais523: that dabbleboard thing is flash. 17:15:55 to save you opening a browser. 17:18:03 -!- ais523 has quit (Read error: Operation timed out). 17:18:39 well, i hope thatwasn't the whiteboard! 17:19:25 -!- ais523 has joined. 17:19:48 ais523: did the whiteboard hang up your pc? :O 17:19:48 sorry, connection dropped 17:19:50 where was I? 17:19:57 also, you didn't actually link me to the whiteboard thing 17:20:00 oh, you did 17:20:01 http://dabbleboard.com/draw?b=Guest527979&i=0&c=9d321a8e4ccd7efbf770e3f5f3517f427b010b35 17:20:05 he did, two of them, one JS, the other flash 17:20:06 dabbleboard 17:20:22 will it work for you? it's flash 17:21:15 I loaded it in my non-locked-down browser 17:21:39 OK. do you see a box with an "a" on the drawing?? 17:21:50 no 17:21:57 so I guess it isn't working 17:22:12 it loaded, but doesn't seem to have anything to do with what you're doing 17:22:15 i wish i had that kind of dedication to explaining things to trolls 17:22:18 although i'm not sure why 17:22:20 as in, seems to be independent between me and you 17:22:26 elliott: I'm a teacher, remember? it's good practice 17:22:32 -!- MigoMipo has joined. 17:22:44 ais523: well, most students aren't outright trying to waste your time ... ok maybe they are 17:23:01 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 elliott: well, it isn't their fault 17:23:17 [17:13] ais523: so we have a x = 2 * x. ok. 17:23:18 [17:13] now it is represented by a box with one pin on the left and one on the right. 17:23:19 [17:13] yep 17:23:21 [17:14] if we want to connect two of them together, we can do something like "let b = (a x) in (a b)" 17:23:22 [17:14] i.e. we've given a name to the result, and we can use the name later on 17:23:33 I think that's where we'd got to 17:23:36 ok 17:24:11 so, that's how it works with monads involved 17:24:18 now, let's wrap that one into a monad 17:24:22 monads are like burritos 17:24:22 ok 17:24:28 http://blog.plover.com/prog/burritos.html 17:24:34 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 it's the only acceptable way to explain them 17:24:46 that's the case of the sidechannel being independent of the function itself 17:24:51 ais523: ok 17:24:59 (because it's Haskell and amazing at figuring out types, we don't have to say /which/ monad) 17:25:00 ais523: how does liftM know which monad i want? 17:25:23 amazing like bread 17:25:24 (but we could, as in ((liftM a) :: Int -> State Int Int)) 17:25:43 cheater99: basically, if there's only one that works from context, it uses that one 17:25:47 and normally, there is 17:25:47 ais523: i am unconvinced your analogy has pedagogical value... although no monad analogy does 17:26:02 usually they just convey a sense of giving knowledge IMO 17:26:19 elliott: you can tell when it's worked when the other person starts disagreeing with you 17:26:25 because it shows they've slipped into a different analogy from you 17:26:31 everyone has their own mental model of things like monads 17:26:33 ais523: ok, so from context 17:26:36 yep 17:26:37 ais523: monads are like mirrored piles of dung 17:26:39 ais523: don't you agree? 17:26:47 elliott: now /you're/ trolling 17:26:57 ais523: but if you don't agree, that's proof that it worked! 17:27:25 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 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 (Haskell lets you abbreviate that a lot, but I won't because it's clearer without) 17:27:39 cheater99: yep, it wraps the function up in a monad 17:27:42 ok 17:27:55 what do you mean "give a name to the return value of a"? 17:28:08 ais523: btw, 09:25:24 (but we could, as in ((liftM a) :: Int -> State Int Int)) 17:28:10 cheater99: well, if we wanted to use it more than once, for instance 17:28:10 ais523: is not valid 17:28:10 *by 17:28:12 in the slightest 17:28:16 elliott: did I typo slightly? 17:28:16 liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r 17:28:24 oh, right 17:28:34 it'd be State Int Int -> ... 17:28:36 it should be State Int Int -> State Int Int 17:28:44 I did mean liftM, I just braintypoed for a moment 17:30:00 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 ais523: an immutariable :) 17:31:09 that's probably a better name than the usual "lambda binding" 17:31:23 ais523: i'm lost 17:31:32 ais523: "constant" would be right but unfortunately has incorrect connotations 17:31:34 how is liftM a "like assigning to a variable"? 17:32:18 and besides 17:32:20 cheater99: oh, it isn't liftM I was talking about 17:32:28 oh, what were you talking about? 17:32:35 it's the "let b = (a x) in (a b)" example, because I thought you asked me about it 17:32:43 what do you mean "give a name to the return value of a"? 17:32:50 and I mean, I named it b so I could use it later on 17:33:34 one of the issues with IRC is that you get used to having multiple conversations at once, even with the same person 17:33:39 ok ok 17:33:40 so 17:33:49 we want to connect two a's together and call them b. ok. 17:34:09 wait no 17:34:20 we want to connect two a's together and call one of them b for some unknown reason 17:34:32 we want to connect them together 17:34:34 oh, it's so that we get x 17:34:36 we call the point where we connect them b 17:34:40 let b = (a x) in (a b), alright. 17:34:48 so here, the first one takes input x, and output b 17:35:02 so (a b) == 2 * 2 * x 17:35:04 and the second one takes input b, and its output is the output of the expression as a whole 17:35:07 yep 17:35:09 ok 17:35:17 "the second one" is (a .) 17:35:18 yes? 17:35:26 where . is a "place for a variable" 17:35:28 yes 17:35:29 ok 17:35:32 let's keep going 17:35:39 our aim is to understand >> or >>= 17:35:41 yep 17:36:00 so, let's say we want to connect two (liftM a)s together, and also connect their sidechannels together 17:36:15 "our" aim? 17:36:16 hmmmmmmm. 17:36:22 >> and >>= are what we use to do the connection 17:36:48 so now, x is an integer with state as a sidechannel 17:37:44 if I feed it to one (liftM a), as in (liftM a) x, there isn't much of a problem 17:37:56 suppose I want to connect it to both the liftM as, and they have connected sidechannels 17:38:05 I need to connect the sidechannel, and connect the output as well 17:38:20 so I do (liftM a) >>= (\b. liftM a b) 17:38:25 mhm 17:38:30 just a sec 17:38:32 so, the >>= is doing two things 17:38:39 ais523: *\b -> 17:38:43 oh, right 17:38:48 *so I do (liftM a) >>= (\b -> liftM a b) 17:39:01 elliott: Haskell busy using a different notation from maths, it caught me out 17:39:17 so is ( (liftM a) >>= (\b. liftM a b)) 2 == 8? 17:39:23 ais523: (\x.e) isn't very common maths :P 17:39:26 no, because 2 doesn't have a sidechannel 17:39:27 or is it "8 with some monad stuff wrapped around it"? 17:39:30 elliott: it is for me 17:39:31 or even CS, really 17:39:39 if you gave it a 2 with state, it'd give you an 8 with the same state 17:40:50 Phantom_Hoover, down? 17:40:55 because liftM-produced monad actions aren't interfering with the sidechannel at all 17:40:59 which is why it has to be the same state 17:42:11 \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:14 ais523, how does join fit in here? 17:42:21 elliott: that's an actual quote from my most recent paper 17:42:34 also, probably the esoprogrammingiest bit of it 17:42:35 -!- tehjamezZzZz has changed nick to tehjamez. 17:42:36 ais523: can i read that paper? :p 17:42:48 um, I'm not sure, let me check if it's online somewhere 17:42:49 yeah! 17:42:52 lambda ftw 17:42:52 or is it paywalled and copyright-stolen (alternatively, if you just don't like me) 17:43:15 (copyright-stolen, n. a nonce neologism for what journals do to the copyright ownership of papers.) 17:43:26 admittedly, a pretty rubbish neologism 17:44:09 elliott, *a., surely? 17:44:19 Phantom_Hoover: erm, yes 17:44:47 elliott: I don't think it's been published yet 17:44:56 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 (in other news, online journal places have stupid URLs) 17:45:26 ais523: paywall 17:45:27 $19.95. 17:45:30 ouch 17:45:42 doesn't paywall for me, presumably because I'm inside the University, rather than because I wrote it 17:45:47 the DOI is http://dx.doi.org/10.1016/j.entcs.2010.08.018 17:46:18 oh, but it links back to the same place 17:46:20 ouch 17:46:39 elliott: $20 per read seems a little excessive for that sort of thing :) 17:47:39 ais523, does your scrupulous adherence to the law prevent you from letting us see it? 17:47:43 I'm not sure 17:47:53 I'm a little confused, because I never knowingly signed copyright over to them myself 17:47:55 it does not probably 17:48:05 but I think it comes under the writing things for your employer category 17:48:11 ais523: what most people do, that I know of, 17:48:19 ais523: is publish the final-but-one draft before submitting it 17:48:25 online 17:48:35 I think that's "more legal" 17:48:43 since you're not publishing what they're publishing 17:48:50 you're publishing a clearly inferior draft version, with three words different 17:49:13 aha: http://www.cs.bham.ac.uk/~drg/papers/mfps10.pdf 17:49:20 ais523: SO HEY SCIENCE IS FREE RIGHT 17:49:25 ais523: OPEN ACCESS, WORLD'S KNOWLEDGE FOR EVERYONE 17:49:31 PAY $19.95 TO READ MORE 17:49:35 'tis indeed different, it's missing the logo 17:49:45 ais523: oh man, without the logo why should i even bother reading it 17:49:46 and not, AFAICT, paywalled 17:49:54 indeed it's not 17:50:10 ais523: permission to upload that to filebin.ca for backup? 17:50:19 it'll be there forever 17:50:20 on the off-hand chance that you own the copyrights to that draft 17:50:24 ais523: fair enough 17:50:27 ais523: ok 17:50:31 ais523: reading 17:50:36 also, filebin.ca doesn't last forever 17:50:40 I know this from experience 17:50:47 This paper is electronically published in 17:50:47 Electronic Notes in Theoretical Computer Science 17:50:47 URL: www.elsevier.nl/locate/entcs 17:50:49 guess what that URL is? 17:50:51 answer: 404'd 17:51:13 i like this typographic awesomness of science papers... made by LaTeX 17:51:23 This “functionalised” syntax can be represented in a more conventional way. For 17:51:23 example, a program such as bool x; if (y) x=z and t else x=z or t can be 17:51:23 written using the functionalised syntax as: 17:51:23 newvar(λx.if y (asg((and(der z)(der t)), x))(asg((or((der z), (der t))), x))). 17:51:25 but obviously! 17:51:35 nooga: um you realise latex is ubiquitous? 17:51:38 elliott: we're saying that the functionalised syntax is more convenient for our purposes 17:51:42 even though it's harder to read 17:51:48 ais523: i'm just kidding :) 17:51:52 ais523: ok, so... 17:51:56 ais523: nice that the references are hyperlinked 17:51:58 don't see that much 17:52:15 ais523: we have LiftM a's connected with >>=. What does >> do? 17:52:25 what >> does is, it doesn't connect the output at all 17:52:35 this is mostly only useful if there isn't one in the first place 17:52:50 say, if you're not connecting liftM a, but, say, something that changes the state 17:53:01 which would change the sidechannel, but not produce output of its own 17:53:09 ais523: darcs pet peeve: Shall I record this change? (1/2) [ynWsfvplxdaqjk], or ? for help: 17:53:16 elliott: I like it 17:53:21 ais523: nonono, not the UI 17:53:22 and you know you can use -a, right? 17:53:30 ais523: the "[ynWsfvplxdaqjk]" 17:53:35 oh, the summary of what keys you can press? 17:53:39 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 or just have fewer keys :) 17:53:49 elliott: sure, even I use LaTeX 17:53:54 the [] is basically useless, if you forget how it works you need to use ? anyway 17:54:01 ais523: it's a pet peeve, it doesn't have to matter :) 17:54:34 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 ais523: gotta admint, it's interesting 17:55:00 it looks like this: {do b <- a x; a b} 17:55:05 ais523: wrong 17:55:10 do { b <- a x; a b } 17:55:11 I've messed it up again, haven't I 17:55:21 oh, almost write this time 17:55:22 *right 17:55:27 you can tell I haven't used Haskell for a while :) 17:55:39 Haskell and ML are two languages that I find it hard to think about simultaneously 17:56:20 ais523: hmm, doing the scapegoat first draft in haskell may be a bad idea from you-reading-it POV :) 17:56:22 *from a y 17:56:24 -ou-etc. 17:56:37 elliott: nah, I've done my little OCaml sideproject 17:56:42 and can go back to thinking in monads again 17:57:16 ais523: so if i did (LiftM a >> LiftM a) x, where x is two-with-a-state, what would i get? 17:57:20 would i get anything at all? 17:57:27 can LiftMa be >>'d with itself? 17:57:44 it's liftM with a lowercase l; and I think you'd just get an error 17:57:56 the proof is .... interesting 17:57:58 because you haven't given LiftM a an argument 17:58:12 (at least, not giving a function an argument doesn't normally cause an error in Haskell, just a partial application) 17:58:24 (but I think it'd make them not connect due to being of the wrong types) 17:58:37 MONAD... now you're thinking with monads 17:59:14 nooga: the long proof at the end, in an appendix? 17:59:19 that bit was mostly me, most of the rest was mostly Dan 17:59:35 !haskell :t liftM 17:59:37 ais523: yes, that one 17:59:38 sorry yes, lowercase l 17:59:39 it was a really annoying proof, it's something like 1000 simple cases 17:59:47 and a few that require more thought 17:59:51 it's a bit hard to read 17:59:55 ais523: do it in COQ!!1112 18:00:09 nooga: indeed 18:00:14 DON'T MAKE ME THINK ABOUT COQ 18:00:19 -!- atrapado has quit (Quit: Abandonando). 18:00:43 liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r 18:00:49 thanks ais523, it was very useful 18:00:54 i can visualize this more now 18:00:58 ais523: ugh, did you write this latex? 18:01:27 ais523, are my continued exhortations for you to explain how join fits into this growing obnoxious? 18:01:42 ais523: i think electronics are a very good parallel for functional programming 18:01:49 elliott: no, I wrote it in LaTeX, but the whole thing was retyped 18:01:59 so it isn't my LaTeX you're seeing there 18:02:05 Phantom_Hoover: I can't remember what join does 18:02:06 since electronics circuits are (in theory) pretty much like functional language programs 18:02:13 but I suspect it doens't fit the analogy too well 18:02:14 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:18 ais523, join = (>>= id) 18:02:20 there are no side effects, for example, and no state unless you introduce it 18:02:27 ais523: and \mathnormal{FORK} or however you do proper text italics in math mode (I forget) should have been used 18:02:30 cheater99: in practice too, that's what my papers are about 18:02:48 At which the analogy seems to break down since id doesn't map nicely to a box. 18:02:50 elliott: oh right, Dan's awful wrt text in math mode 18:03:06 ais523: stab him a bit for me, if you please 18:03:07 now write a compiler 18:03:10 I've known him to set \mathsf{} for an entire expression, just to write a few words in sans-serif 18:03:17 nooga: that's likely my PhD project 18:03:31 awesome! 18:03:42 ais523: well, in practice, you have problems such as ground plane interaction, capacitive coupling, ... 18:03:53 ais523: psht, no, clearly Feather is 18:03:57 cheater99: umm, I'm a qualified electronic engineer? 18:04:00 but with careful analog design those are bypassed 18:04:11 everyimre you say anaology i get a notofication 18:04:13 but we're just compiling onto FPGAs 18:04:15 because anal is a hottoipic word for me 18:04:18 tehjamez: analogy analogy analogy 18:04:23 ;) 18:04:31 tehjamez: why don't you filter it to whole words, rather than anywhere in a word? 18:04:34 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 methinks tehjamez has no idea where he is 18:04:38 because 18:04:44 what if someone says anal with a ? at the end 18:04:45 otherwise, you'll find it quite banal when people talk about analysis 18:04:52 tehjamez: ? is nonalphabetic 18:04:53 ais523: damn you, i was pulling out analysis 18:04:58 elliott: take that back! 18:04:59 oh its quite enjoyanalable 18:05:08 ais523: um... uoy nmad 18:05:13 ais523: oh fine, i take it back 18:05:16 ais523, *nanalphabetic 18:05:17 furrfu 18:05:28 tehjamez: you could use \banal\b if you're using Perl-style regular expressions for stalkwords 18:05:35 hahahah 18:05:37 ais523: but that's banal 18:05:43 rofl 18:05:58 nonanalphabetic: made out of nine letters. 18:06:07 I think we might see a banal publication in the correctly-spelled version of "Anals of Mathematics", analysing the most common analogies. 18:06:17 elliott: *Annals? 18:06:22 this is gettign hot 18:06:22 the joke doesn't work if you misspell a word 18:06:23 * Phantom_Hoover facepalms 18:06:29 ais523: no, the correctly-spelled version of Anals of Mathematics is Annals of Mathematics 18:06:36 that's why it's quoted, and corrected in the sentence 18:06:43 ah 18:06:58 It's better to say annal with one n anyways 18:07:01 ais523: hey, i have a question about verilog 18:07:05 ais523: do you use verilog at all? 18:07:10 and can you recommend learning it? 18:07:18 I grew up on VHDL, rather than Verilog, but know a bit of Verilog 18:07:20 i want to learn *something* for fpgas but not sure if verilog is the best 18:07:21 it depends on what you want to do 18:07:29 Verilog and VHDL are basically the same language with different syntax 18:07:31 well, i want to start with something simple 18:07:39 like, say, a few fifo's chained 18:07:45 with async clock 18:07:57 i.e. a different clock for incoming and a different for reading out 18:08:00 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 ais523: are they functional languages? 18:08:20 no, they're behavioural 18:08:25 what does that mean? 18:08:29 hmm, let's see 18:08:42 the main primitive in the langs in question is connecting wires 18:08:52 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 e.g. in VHDL syntax, a <= b means that b (an output) is connected to a (an input) 18:09:21 and pretty much all you do in the lang are connect components together by connecting their pins 18:09:30 ais523: whereas b => a is greater-than-or-equal-to, naturally! 18:09:43 no, it actually means something completely different, and I can't remember what offhand 18:09:48 ais523: well it /should/ be taht. 18:09:49 greater-than-or-equal-to is >= 18:09:50 *that. 18:09:54 elliott: it's unrelated to <=, anyway 18:10:07 greater-than-or-equal-to is unrelated to connecting wires! :P 18:10:24 (actually, greater-or-equal is probably something slightly different) 18:10:38 anyway, the language doesn't have statements, like some other langs do 18:10:44 it's just a whole load of "when a changes, b changes" 18:10:49 umm, "when b changes, a changes" 18:10:54 so, e.g. if you do a <= b + 5 18:11:02 then whenever b changes, a changes to the new value of b, plus 5 18:11:12 also, the change is very slightly delayed 18:11:31 ais523: what i'd like to see 18:11:39 is a semi-functional language based on "signals" 18:11:43 sort of like VHDL but with parameters 18:11:43 e.g. 18:11:47 a(n+5) <= b(n) 18:11:51 then if you had a print function you could do 18:11:52 the langs also let you do things like "when the clock has a positive edge, b changes to a" 18:11:55 print(n) <= a(n) 18:12:08 and, that's pretty much all you can do if you want it to synthesize into hardware 18:12:09 or e.g. 18:12:15 print("a =", n) <= a(n) 18:12:33 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:46 elliott, Prologgy! 18:12:52 Phantom_Hoover: similar, but not quite 18:13:09 cheater99: got that? that's basically all VHDL and Verilog are, and yet they're what people /actually use/ to program FPGAs 18:13:14 except, 18:13:17 a(n+5) <= b(n) 18:13:21 would actually be 18:13:29 a(m) <= b(n), add(n, 5, m) 18:13:35 420? 18:13:44 where add is a "virtual" signal that continuously emits every combination of A+B = C 18:13:48 valid combination, that is 18:13:55 elliott: this sounds quite a bit like Proud now 18:13:59 tehjamez: if you don't know what esoteric programming languages are, go away 18:14:06 ais523: this is computable, though (add only does that in theory) 18:14:24 except it was uncomputable due to doing things like quantifying over all functions 18:14:33 factorial_result(0) <= factorial_of(0) 18:14:47 er, wait 18:14:59 factorial(0, 1) <= tick 18:15:22 factorial(n, r) <= sub(m, 1, m'), factorial(m', r'), times(n, r', r) 18:15:38 tick could theoretically just tick at N Hz 18:15:43 back 18:15:46 but in an actual implementation, you'd probably simulate it ticking at infinity Hz 18:15:57 i.e. everything depending on tick executes immediately 18:16:01 or rather, you'd treat it as constant 18:16:15 "factorial(0, 1) <= tick" would just add a permanent entry into a table saying "yup, factorial(0, 1) is being emitted" 18:16:38 ais523: it's basically Prolog for events :) 18:16:49 you could even implement add, e.g. 18:16:55 add(n, 0, n) <= tick 18:17:41 add(n, m, r) <= add(m', 1, m), add(n, m', r'), succ(r', r) 18:17:55 succ would have to be built-in, though (assuming numbers are primitive) 18:17:55 ais523: ever used altera? 18:18:03 ais523: what fpgas DO you use? 18:18:22 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 ais523: name some non-altera, non-xilinx brand 18:18:29 ais523: oh wait, there aren't any 18:18:30 elliott: I'm not sure if there /are/ any 18:18:33 :D 18:18:55 cheater99: let's say, I spent weeks trying to get the Xilinx boards to work, and couldn't 18:19:07 so my supervisor gave the FPGA job to someone else 18:19:17 I haven't been involved since, but I notice there's an Altera board sitting on the desk now 18:19:33 do_print(n) <= some_signal(n) 18:19:40 ais523: ouch :( 18:19:44 ais523: that's not good! 18:19:48 ^ you could imagine that the platonically perfect runtime system would have a rule 18:19:53 has_been_printed(n) <= do_print(n) 18:19:54 ais523: i hope you will get back on top of it 18:20:00 cheater99: oh, no 18:20:02 it made sense to move it 18:20:04 and every program that /read/ things just set up a signal on that, etc. 18:20:10 ais523: so what are you doing now? 18:20:15 doing research >>> struggling with an FPGA board with incomplete and misleading documentation 18:20:16 so this is "functional", arguably; at least, as functional as the language's actual mechanism 18:20:20 cheater99: writing papers, rather than struggling with hardware 18:20:37 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 ais523 man, why don't you want to enjoy the INNER LOVELINESS of working with fpgas 18:20:49 i hope you can get back to fighting the IDEs!!! 18:20:55 elliott: because FPGA companies know they have no competitors 18:21:04 at least, that's the impression I get 18:21:09 ais523: I'm joking 18:21:24 ais523: (wrt cheater's response to the job being reassigned) 18:21:35 it made sense, really 18:21:44 better to put me somewhere where I can do something useful, than somewhere where I can't 18:22:30 (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 ais523: agreed, thus the joke 18:22:38 admittedly a poor one 18:23:40 (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:23:51 heh 18:24:05 I seriously doubt it's possible to write a portable FPGA program 18:24:09 fizzie: so where's our mcmap 18:24:18 if you want to interact with hardware, rather than just toggle pins on and off 18:25:04 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:25:20 heh 18:31:47 hmm 18:32:02 * cheater99 is munching on some really good panettone 18:32:07 or is it pannetone? 18:32:18 there should be a language based on the concept of panettone. 18:32:48 elliott: I also notice it's legally equivalent to all-rights-reserved, which is hilarious 18:32:52 ais523: did you answer my sg implementation question? I forget 18:33:03 also, wow, you're right 18:33:08 except, suing someone isn't very friendly 18:33:15 so i imagine it's slightly permissive in practice 18:33:46 cheater99: panettone 18:33:56 :) 18:34:00 elliott: I forget what the question was 18:34:03 you may as well ask again 18:34:03 Deewiant: pantone 18:34:14 ais523: would an sg implementation cache a list of top-level patches? 18:34:14 elliott: No 18:34:19 Deewiant: tanpone 18:34:28 elliott: No 18:34:45 elliott: I think so, it seems like the most efficient way to get things done 18:34:46 Deewiant: mascarpone 18:34:51 ais523: how would it maintain this list? 18:34:54 if there aren't too many, it might make sense even to cache their intersections 18:35:06 elliott: No 18:35:13 panacotta 18:35:16 mmm... 18:35:37 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 but the great thing is, that lets you copy one subdir over another and it just works 18:36:16 thus preserving the ehird VCS property 18:36:28 ais523: I mean, how would it know when to add or remove from the cache? 18:36:32 and how would it generate the cache the first time? 18:37:07 also, I'd likely maintain caches as e.g. cache/-toplevels, and then if there's two toplevel caches, sg discards them both and regenerates them 18:37:15 whenever you add a patch to the DB, you also add it to the cache 18:37:21 or something of that sort 18:37:28 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 ais523: that's all patches, then, isn't it? unless you remove them often 18:37:30 right 18:37:45 ais523: depends on == references a part of, right? 18:37:51 yep 18:38:19 the cache doesn't need to hold the patches themselves, incidentally, just the list 18:38:27 together with things like the most recent common ancestor of given pairs 18:38:27 ais523: the hashes 18:38:30 surely 18:38:38 yes, it holds their names 18:38:44 ais523: hmm, most common ancestor doesn't sound that hard 18:38:45 and some precalculated data 18:38:47 to do on-the-fly, I mean 18:38:57 ais523: especially lazily 18:38:59 it probably isn't 18:39:23 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 unless the most recent common ancestor is thousands of revisions back, it'll be instant 18:39:48 get lists being lazy there, that is 18:39:52 so that you only read what you need to 18:39:58 (an argument for impure lazy computation...) 18:40:29 ML does impure + lazy quite well, basically using closures that need a dummy argument to force them 18:40:40 let a = 1 + 2 calculates it now 18:40:48 ais523: indeed; scheme has basically the same thing 18:40:50 let a () = 1 + 2 calculates it each time you write a() 18:40:57 with DELAY and FORCE 18:41:07 (force (delay (+ 2 2))) => 4 18:41:34 ais523: hmm, scapegoat prototype 1 should load the whole repository into memory, I think 18:41:35 Underlambda does that too 18:41:41 seems reasonable 18:41:43 to avoid having to do lazy IO, which would be an unreliable pain in Haskell 18:42:01 on small projects, it might even be efficient and reliable 18:43:00 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 ais523: we should probably take the Varnish route in an actual implementation 18:43:01 subset of K_2 • K_1. <-- my favourite part of that proof 18:43:06 ais523: just mmap the repository 18:43:10 heh 18:43:21 that sentence took me hours to figure out 18:43:29 because it's just a list of apparently arbitrary assumptions 18:43:47 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 then I spend half a page proving that they contradict each other 18:43:59 (I've been won over by the Most Stuff Should Be In A Single DB position.) 18:44:01 ais523: :D 18:44:09 wow, this is insane: http://www.ramblesandruminations.com/2006/12/hi-im-here-for-my-panetone.html 18:44:30 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 leading to a huge explosion of objects 18:45:01 that's what a VCS is, isn't it? 18:45:04 anyway, I should go home 18:45:10 -!- ais523 has quit (Remote host closed the connection). 18:45:27 ais523: no, change != patch 18:45:42 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 hmm, repo = set of patches + irrelevant stuff like nicknames and caches 18:48:32 patches = set of changes 18:49:21 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep). 18:51:45 -!- poiuy_qwert has joined. 18:57:51 fizzie, Deewiant: down? 18:57:56 I think so, yes. 18:58:02 gah 19:01:21 Vorpal: have you seen the destruction 19:01:25 of Deewiant 19:02:14 Vorpal: so where did the ground-level minecart path go 19:04:22 -!- cheater99 has quit (Ping timeout: 240 seconds). 19:07:46 Vorpal: ? 19:13:50 elliott, to a hill to the south of Mt. Hoover. Some furnaces and a workbench at the end. 19:14:21 Phantom_Hoover: Anyone admitted to making it? 19:14:45 It was almost certainly nailor. 19:17:32 -!- cheater99 has joined. 19:17:52 Vorpal: btw yesterday I found some pumpkins in mount vorpal and took them 19:19:07 that's funny, i couldn't get gnocchi today at the italian place because they couldn't find any pumpkins 19:19:12 i think that explains it 19:19:36 elliott is a pumpkin thief 19:19:55 -!- sebbu has quit (Ping timeout: 265 seconds). 19:33:54 Vorpal: btw yesterday I found some pumpkins in mount vorpal and took them <-- if you did that I expect them back 19:34:24 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:09 elliott, heh 19:35:28 fizzie, down? 19:35:29 hi 19:35:44 elliott, built marker at (4000,4000) 19:35:52 Vorpal: so? 19:37:07 elliott, yeah you don't get it 19:37:15 Vorpal: what? 19:39:04 -!- pikhq has joined. 19:39:35 Vorpal: what? 19:40:09 Fun fact: invalid UTF-8 can make X crash. 19:40:26 a light breeze can make X crash 19:43:25 True, true. 19:47:03 Vorpal: mind if I colonise the unused peak of mt. vorpal? 19:50:42 elliott: yes 19:50:52 elliott: it isn't unused. The throne room extends below it 19:50:57 and other stuff too 19:51:29 elliott: so basically it won't be a good idea 19:51:30 Vorpal: below it, but not on top 19:51:43 elliott: I plan stuff there 19:51:55 elliott: a glass star observatorium 19:51:58 (sp) 19:52:06 observatory. 19:52:20 elliott, it already has some buildings on it 19:52:36 elliott, anyway, given your lava handling I want you NOWHERE NEAR ME 19:52:42 elliott, I don't want everything burned down 19:53:17 nor do I want a waterfall there 19:53:36 Vorpal: what have I done with lava lately?? 19:53:38 elliott, go make your class cube somewhere far away 19:53:44 elliott, up at Deewiant's place... 19:53:50 Vorpal: nothing happened 19:54:01 elliott, fuck off 19:54:31 Vorpal: btw, have you done anything to the deewiant express lately? 19:57:12 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 Vorpal: are you /ignoring me? 19:59:11 He's playing 19:59:29 Deewiant: that doesn't mean he isn't /ignoring me! 19:59:43 No, but it can explain why he's not saying anything 19:59:54 Deewiant: Does the Express still loop 20:00:05 Nah, I got rid of it 20:00:10 Deewiant: BUT WHY. 20:00:11 (The loop, not the Express) 20:00:19 Because with lag, it's hard to stop 20:00:27 I'm going to pour lava all over Mount Vorpal in protest 20:00:34 And then mine the debris 20:00:48 And then dig Vorpal down to bedrock and surround him with a ten-thick layer of obsidian. 20:00:56 And the rest up to sea level with TNT. 20:01:01 That is what you have done to me, Deewiant. 20:04:28 Deewiant just doesn't realise the horror. 20:07:29 elliott, I was not /ignoring 20:09:58 -!- hagb4rd has quit (Ping timeout: 240 seconds). 20:10:43 -!- ais523 has joined. 20:11:38 wb ais523 20:11:58 ty 20:12:50 -!- hagb4rd has joined. 20:13:08 ais523: opinion poll: "verify :: Hash -> ByteString -> Bool" or "verify :: ByteString -> Hash -> Bool" 20:13:23 elliott, down? 20:13:26 The latter 20:13:37 Vorpal: "fuck off" --you 20:13:49 elliott: it's obviously irrelevant, but I think the first is a little neater 20:13:51 elliott, yes due to denying that you messed up 20:14:04 yep, i was an evil deceiver 20:14:14 how did i think that i could possibly defeat the awesome power of screenshots that everyone has seen 20:14:19 but darnit, I had malicious intent! 20:14:26 ais523: Deewiant: you two have to duke it out to the death now 20:15:26 Of course, I'm the one with no clue what the params mean 20:16:14 Deewiant: ais523 doesn't either, but it just checks that the bytestring hashes to the given hash 20:16:18 which is sha-512, but that's irrelevant 20:16:22 and returns whether it does or not 20:17:10 With the latter, verify = (==) . sha512 20:17:33 Deewiant: Very well then. 20:17:37 Wait, what? 20:17:40 Oh, indeed. 20:17:42 Yeah, you're right. 20:17:48 -!- Sasha2 has joined. 20:18:07 Deewiant: Erm, no 20:18:09 Is it? 20:18:18 Yes, it is :-P 20:18:24 Deewiant: indeed 20:19:18 Deewiant: Know what's awesome? Two libraries, one that uses strict bytestrings, the other that uses lazy 20:19:27 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 Specifically, trying to use them both in one module 20:19:35 It's at https://github.com/fis/mcmap now. 20:19:40 (And there's a README anyway.) 20:19:49 fizzie: Thanks. If Vorpal whines I'll lava Mount Vorpal. 20:19:57 (That should be sufficient incentive, one thinks.) 20:19:59 fizzie: What's the *ware term for that condition? 20:20:08 Deewiant: Stfuware 20:20:17 Or "fuck you ware". 20:20:17 Good enough 20:20:24 That sounds reasonable, yes. 20:20:41 I'll have to add some sort of a COPYING file at some point, maybe. 20:21:14 fizzie: But until you do, it's PUBLIC DOMAIN!* 20:21:18 *lies 20:21:57 -!- Ilari_antrcomp has quit (Read error: Operation timed out). 20:22:06 I'm not expecting it to be horribly popular; it's not a very user-friendly tool. 20:22:24 fizzie: "In the most basic form, ./mcmap -r 600x600 host:port"; "Unknown option -r". 20:22:29 fizzie: (Not a whine, just a bug report.) 20:22:31 in either the readme or the C :P 20:23:11 OK, it's actually -s. 20:23:26 -!- Ilari_antrcomp has joined. 20:24:13 Oh, heh. 20:24:19 Shouldn't have done it from memory. 20:24:57 Well, I did fix at least that. 20:26:18 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:21 (Joking.) 20:26:48 Incidentally, I wonder what is with riding. It seems to go to (0,0,0) for that. 20:27:39 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 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 I guess after that it sends player motion relative to the attached entity, and then just moves the entity around. 20:28:28 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 Heh, yes. There's the --nocolor flag for that. 20:29:12 Though then it won't strip out the color codes either. 20:29:20 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 that topic was crying out to be anagrammed 20:31:17 fizzie, err, I have zlib but not in pkg-config it seems 20:31:47 Vorpal: That's not fizzie's problem 20:32:00 fizzie, just wondering why 20:32:06 fizzie, ubuntu 10.04 LTS 20:32:11 fizzie probably knows, 'cuz he's psychic. 20:32:18 And you're totally obeying the "no questions" policy. 20:32:21 elliott, I thought he used ubuntu too nowdays 20:32:30 Vorpal: sometimes I think the main difference between you and zzo38 is that you give the context 20:32:46 ais523, could be. 20:32:49 ais523: and zzo38 is too detached from what we're saying to get angry :P 20:32:56 (at us, for anything) 20:33:07 I think I'd take two zzos over one Vorpal 20:34:15 since this one is zzo38, there should be 38 before him 20:34:34 fizzie, switching to -lz for zlib works 20:35:51 $ dpkg-query -S zlib.pc 20:35:51 zlib1g-dev: /usr/lib/pkgconfig/zlib.pc 20:35:55 That's where mine is from. 20:38:12 fizzie, awesome tool 20:38:19 fizzie, I have that package 20:38:23 fizzie, but I'm on last LTS 20:39:00 -!- augur has quit (Ping timeout: 260 seconds). 20:44:39 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:01 ais523: oh btw: 20:45:02 10:44:30 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 10:44:38 leading to a huge explosion of objects 20:45:02 10:45:01 that's what a VCS is, isn't it? 20:45:02 10:45:04 anyway, I should go home 20:45:03 10:45:10 --- quit: ais523 (Remote host closed the connection) 20:45:05 10:45:27 ais523: no, change != patch 20:45:07 10:45:42 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 10:48:30 hmm, repo = set of patches + irrelevant stuff like nicknames and caches 20:45:12 10:48:32 patches = set of changes 20:45:14 chaneg ~= hunk 20:45:16 *change 20:46:39 -!- augur has joined. 20:47:50 -!- hagb4rd has joined. 20:51:11 Phantom_Hoover, stop ruining the hole 20:51:22 elliott: a patch either has exactly one change, or is a set of other patches 20:51:22 Phantom_Hoover, conclusion: in the future keep exploration silent 20:51:22 Vorpal, RUINING IT BY FIXING IT 20:51:32 Phantom_Hoover, you broke it. Lava does not belong there 20:51:46 I should probably go back to calling them turtles again 20:51:52 Vorpal, but if you were silent about your achievements how would you prop up your ego? 20:52:22 Phantom_Hoover, very droll 20:52:51 -!- elliott has quit (Quit: Leaving). 20:52:53 It's a serious point! 20:52:59 hmm, seems it didn't remember my login 21:03:30 fizzie, would it be feasible to make it render leaves transparently? 21:08:28 ah that seems to work 21:08:32 hard coded patch thoug 21:08:35 though* 21:09:03 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 fizzie, that is what I did 21:10:54 If you want to do that properly, you'll need to do that in both handle_chunk and block_change. 21:11:46 fizzie, ah just did it in handle_chunk 21:12:02 Well, the latter only matters if you go and dig out the leaves. 21:12:25 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:12:53 fizzie, iffy how? 21:13:06 fizzie, also yeah the AIR_COLOUR thing for stuff like buttons won't do much 21:13:26 That's mostly meant for the cross-section map. 21:13:31 Where it works reasonably well. 21:15:03 fizzie, why is south now down btw? 21:15:04 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:10 It's not down. 21:15:19 At least I don't think it is. 21:15:20 fizzie, s/now/not/ 21:15:24 Oh. 21:15:33 Because I've oriented myself to ineiros' maps. 21:15:43 ah 21:16:01 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 fizzie, and yes zoom would be nice, kind of hard to spot pumpkins now 21:17:32 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 fizzie, I hit some kind of redrawing bug 21:17:50 What kind of? 21:17:59 (Not that I'm going to think about it now.) 21:18:02 fizzie, vertical 1 pix wide lines 21:18:06 fizzie, when I go south 21:18:11 into unmapped 21:18:26 fizzie, note I have both a chunk at spawn, and a chunk at 4000,4000 21:18:26 I don't know about that. Screenshot? 21:18:41 fizzie, sure, could be my fault when hiding leaves. who knows 21:19:16 A surface that large will take quite a bit of memory. (61 megs or so.) 21:19:22 Link to this magic mappy thing? 21:19:59 Pleasepleaseplease? 21:20:04 /lastlog http 21:20:24 fizzie, http://sporksirc.net/~anmaster/tmp/mcmap.png 21:20:36 fizzie, and I run the mapper on a separate computer :P 21:20:43 Vorpal, where's this mapper thing? 21:21:03 Phantom_Hoover, see what Deewiant said 21:21:33 fizzie, I did enter a minecart by mistake, not sure if that affects it 21:21:59 I got some bit strange-looking surfaces when traveling by minecart, but, well, who knows. 21:23:29 Re zoom, you could just use compiz' magical zoom if you're running it on another box (that can do that). 21:24:15 I hope all the exploration won't make the server really run out of memory storing the world. 21:24:44 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 At least one could hope so. 21:25:03 -!- elliott has joined. 21:25:09 elliott: a patch either has exactly one change, or is a set of other patches 21:25:13 hmm 21:25:19 fizzie, that box has intel graphics 21:25:20 ais523: why not just do patch = set of changes 21:25:26 fizzie, I don't think compiz is a good idea there 21:25:34 -!- hagb4rd has quit (Ping timeout: 240 seconds). 21:25:45 I should probably go back to calling them turtles again 21:25:50 ais523: turtles are the file trees 21:25:52 ais523: silly 21:26:12 as in, the actual tree with all the files, belonging to a specific patch 21:26:46 no? 21:28:30 -!- hagb4rd has joined. 21:29:47 gah 21:29:50 Phantom_Hoover, down? 21:30:22 Couldn't care less. 21:30:38 Vorpal, "tough shit". 21:39:24 ais523: ping? 21:43:57 -!- zeotrope has quit (Quit: Lost terminal). 21:45:16 What's lime green in mcmap? 21:45:23 Phantom_Hoover, got it to work btw? 21:45:46 Yes, thanks to your polite and helpful advice. 21:46:06 Phantom_Hoover, lime = green cobble 21:46:13 Ah, so that's a dungeon. 21:46:48 Phantom_Hoover, probably 21:49:19 http://imgur.com/1jip7 Goodbye AltaVista and delicious. 21:49:27 Also AlltheWeb. 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:56:29 ais523: ping 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:33 ais523: ping 21:58:59 -!- pikhq_ has joined. 21:59:43 ah, tab stacking is nice 21:59:57 quartered the height of my tab bar 22:00:39 olsner: hm? 22:01:26 new feature in opera 11, allows you to combine tabs into tab groups (maybe they're called stacks) 22:03:43 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 olsner: oh, you're a stupid opera user, i forgot 22:05:18 am I stupid? really? 22:05:42 olsner: only in that you use opera :) 22:06:39 -!- yiyus_ has joined. 22:06:48 -!- Sasha2 has quit (Ping timeout: 260 seconds). 22:06:52 elliott: ok. 22:07:06 olsner: it's like, a little pocket of stupidity 22:07:13 like, if albert einstein regularly shot himself in the face 22:07:20 he'd be a stupid self-face-shooter 22:07:22 but not stupid 22:07:39 fuck you ubuntu: "The computer needs to restart to finish installing updates. Please save your work before continuing." 22:07:52 olsner: dude, even debian does that 22:08:01 (although it lets you make it go away for N times) 22:08:07 the thing is, it wants to restart *before* upgrading 22:08:07 where times = seconds, minutes, whatever 22:08:18 olsner: no, i think that's misleading wording 22:08:25 it just means "i replaced the kernel, reboot, you bum" 22:08:28 ineiros, torrenting? 22:08:30 maybe libc too 22:08:44 elliott: no, it's serious: pressing "install updates" does nothing but pops up that message 22:09:07 olsner: impressive. what. 22:09:20 olsner: not even os x does that ;) 22:09:25 Vorpal: Yes. They released another episode of Pioneer One. Shouldn't take long. 22:10:00 elliott: os x does that for many (most?) upgrades though, you have to install-and-reboot in one operation 22:10:12 olsner: true. 22:10:20 olsner: it's irritating how long it can lock you in an "upgrading lol" screen 22:10:24 it never used to do that in Tiger 22:10:49 ineiros: You may NEVER EVER use your internet connection for recreational purposes; we *depend* on Minecraft! 22:11:51 elliott: That is honestly scary. :P 22:12:01 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 ineiros: Well, if Vorpal was the only player, that would in fact be the case. 22:12:17 olsner: you could just disable them rather than uninstalling it :) 22:12:22 elliott: Maybe I should take a second connection with a better upstream and make you people pay for it. :) 22:12:33 ineiros: or just colocate :P 22:12:53 elliott: but... why would I keep it installed when I've disabled it? 22:13:07 olsner: because of the ubuntu-desktop metapackage 22:13:14 it's not as if I have infinity space to give away to useless software 22:13:18 ineiros: I keep suggesting the CloudCraft. 22:13:21 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:26 fizzie: P2PCraft 22:13:45 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 elliott: ubuntu-desktop doesn't fit :) 22:14:40 olsner: ok, i'll bite: what machine is this? 22:15:06 that's cool, i didn't know there was a parisc channel 22:15:28 hmm, actually it would fit according to the package manager's estimate of used space 22:15:46 it'd leave ~100MB of free space 22:16:08 fizzie, incidentally, what happens when Beta comes out? 22:16:14 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 elliott: it's just this one, my main desktop system 22:16:40 olsner: how much disk have you got? how much is used? :p 22:16:49 5GB used to be plenty of space for linux, apparently not so much anymore 22:16:58 (currently using 4.6GB of it) 22:16:59 Do you pick apart that protocol and reimplement mcmap? 22:17:01 Deewiant: mcmap is provided without support. :p 22:17:05 olsner: erm do you have a separate /home? 22:17:09 or do you really stuff everything into 5 gigs? 22:17:10 nope 22:17:15 elliott: I didn't ask him to fix it, I'm just informing. :-P 22:17:19 Phantom_Hoover: no, he just adds handling for server-side inventory packets. 22:17:22 Deewiant: :P 22:17:51 Deewiant: (Do French keyboards have & where 1 should be?) 22:18:10 I don't know, but SDLK_1 doesn't work for my keyboard so I have to hack it. 22:18:16 http://3.bp.blogspot.com/_z9jvYW4hF3k/Sw56ZFHSceI/AAAAAAAAAB8/OhcuW0qzRG0/s1600/titanium_azerty_keyboard.jpg 22:18:21 Looks like Frenchies have punctuation on shift. 22:18:23 And & below 1. 22:18:25 erm 22:18:28 Looks like Frenchies have digits on shift. 22:18:35 As do I. 22:19:20 Deewiant: That's 'cuz you're Finnish. 22:19:24 (The explanation for everything.) 22:20:19 Phantom_Hoover: Sure, I'll fix for beta if it breaks, assuming it's not too dissimilar. 22:20:40 Deewiant: Do the Unicode-translation chars work better? 22:21:03 fizzie: Yes, my workaround was to add SDL_EnableUNICODE and use the .unicode field for 1,2,3 22:21:08 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 fizzie: (Actually that *would* be kind of useful X-D) 22:21:24 elliott: a big part of the partition is used by my home folder though, 300MB of irc logs for example :P 22:21:32 fizzie: But upon reflection, I probably should've made it respond to !,@,# so I don't have to press shift. :-P 22:21:32 Deewiant: I'll fix it like that in the next version. 22:21:36 olsner: Consider bzipping them :P 22:21:59 Deewiant: Ooh, or a keyboard mapping config file. :p 22:22:02 fizzie: Just make it subtract (keysym of 1) from the keycode, and %3 it. 22:22:10 fizzie: Then every 3 successive keysyms on the keyboard work. 22:22:13 SCIENCE 22:22:17 elliott: !,@,# aren't successive. 22:22:27 Deewiant: Pick better keys 22:22:33 Or use multiple hands, stretched 22:22:35 elliott: THEY'RE THE DEFAULTS 22:22:41 Deewiant: Thus why 22:22:44 fizzie: Just make it subtract (keysym of 1) from the keycode, and %3 it. 22:22:44 fizzie: Then every 3 successive keysyms on the keyboard work. 22:22:45 SCIENCE 22:22:59 You could use qwe, rty, or uio! Assuming those scan properly. If not, pick other keys! 22:24:17 Deewiant passed out from the awesomeness of my idea. 22:24:26 YOU COULD EVEN USE NUMLOCK 22:24:36 -!- Sasha2_ has quit (Ping timeout: 260 seconds). 22:28:07 ais523: ping 22:28:13 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:22 elliott: pong 22:28:29 I thought that was pretty clear 22:28:35 elliott: a patch either has exactly one change, or is a set of other patches 22:28:35 hmm 22:28:35 ais523: why not just do patch = set of changes 22:28:38 I should probably go back to calling them turtles again 22:28:38 ais523: turtles are the file trees 22:28:38 ais523: silly 22:28:38 as in, the actual tree with all the files, belonging to a specific patch 22:28:39 no? 22:28:51 Deewiant: I tried localhost, which doesn't work 22:28:56 elliott: because patch = set of changes only does one level 22:29:03 Deewiant: Also :(the port we use) whereas it's always :25567 for mcmap. 22:29:07 ais523: and? :p 22:29:10 you should be able to group individual changes into a commit, individual commits into a tag, etc 22:29:20 ais523: oh, true... but does a tag have to be a patch? 22:29:21 elliott: Worked for me! 22:29:22 also, a "merge resolution" is also a set of patches, some reverts and some unreverts 22:29:26 ais523: I mean, a patch to /what/? 22:29:33 also, a "merge resolution" is also a set of patches, some reverts and some unreverts 22:29:35 ais523: then it's not a set! 22:29:36 it's a list 22:29:37 elliott: well, /everything/'s a patch to nothing 22:29:39 because the application order matters 22:29:40 elliott: no, it's a set 22:29:47 -!- zzo38 has joined. 22:29:49 howso? 22:29:56 No. 22:29:59 the rule is, you apply patches before patches that depend on them 22:30:08 ais523: hmm, fair enough 22:30:10 and if it's ambiguous even then, you have a merge conflict 22:30:26 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 which is needed for merge resolutions to make sense at all 22:30:43 ais523: I'm fairly sure that we need to reserve two hashes, BTW 22:30:49 perhaps 22:30:51 ais523: for "Start" and "End" 22:30:53 ais523: (SOF and EOF) 22:30:58 which have no valid expression as patches 22:31:06 I think that makes sense 22:31:11 ais523: I'd just do all-zeroes and all-ones, as that's a pretty unlikely hash 22:31:15 *both are pretty unlikely 22:31:18 wait, that's wrong altogether 22:31:18 OK, not unlikely in absolute senses 22:31:23 ais523: hm? 22:31:23 different files have different SOF and EOF 22:31:28 ais523: Of course. 22:31:32 ais523: But there are no files. 22:31:50 ais523: Consider: Two empty files in a directory point to the same object, the Start/End patch. 22:31:50 what do directories contain? 22:31:57 err, no 22:32:00 ais523: err, yes 22:32:06 two empty files each have their own start and their own end 22:32:10 ais523: Why? 22:32:15 otherwise, if you did "add between start and end", how would you know which file it went into? 22:32:28 ais523: you don't have to; the directory tells you what to put in what file 22:32:31 the /only/ information for an addition is what it goes between 22:32:35 elliott: that seems very backwards 22:32:47 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 then, you'd have to amend the directory every time you changed a file in it 22:32:51 not just the metadata 22:32:55 ais523: this is great because you can completely rip out FS-centrism 22:32:56 patches /do not have directory data/ 22:32:58 just by replacing directories 22:33:04 ais523: then, you'd have to amend the directory every time you changed a file in it 22:33:06 ais523: err, you do anyway 22:33:10 since the hash changes 22:33:11 no, you don't 22:33:14 since the hash changes 22:33:19 the directory doesn't depend on the files in it at all 22:33:23 see, I create an empty directory 22:33:29 then I add a file to it, that doesn't change the original hash 22:33:42 it just adds a new one, "add file to directory with hash 1298371028938" 22:33:59 ais523: *add file to directory OSDIJFSODF with hash ASOIDHASOD 22:34:06 no, no, no!!!! 22:34:22 ais523: so directories are maintained completely differently to files? 22:34:23 exciting 22:34:24 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 so directories are maintained completely the same as files 22:34:36 ais523: why can't you have a file outside a directory? 22:34:51 because then how would you know what project it was in? 22:35:02 ais523: you wouldn't 22:35:06 you seemed to understand this a couple of days ago... 22:35:13 ais523: oh, I do 22:35:25 I'm just trolling you at this point, in the hopes of making the system even more interesting 22:35:30 (OK, 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 helped, but after that I've just been trolling :)) 22:35:39 ah 22:35:50 in that case, shouldn't I just ignore you until you stop? 22:35:56 i've stopped now 22:36:08 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 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 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 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 ais523: OK, what object do those hashes point to? 22:37:31 to 239487, of course 22:37:34 as the Implementation Guy, I insist all hashes point to an actual object 22:37:39 ais523: no, because they're != 239487 22:37:46 ais523: say they're 27 and 72 respectively 22:37:49 what objects do they point do? 22:37:50 *to? 22:37:56 the start and end of 239487 22:37:56 olsner: :D 22:38:06 which are real concepts 22:38:11 ais523: so every time you create a file, you create two patch objects too? 22:38:14 yep 22:38:24 ais523: And these patch objects are "SOF" and "EOF"? 22:38:32 of that file, yes 22:38:40 ais523: OK, so "SOF " and "EOF "? 22:38:53 that would be one way to express it 22:38:59 ais523: Fair enough then. 22:39:00 but, of course, an impl detail 22:39:13 ais523: Of course; it's just that I'm the Implementation Guy looking to Actually Implement it. :) 22:39:26 (I'm still down in the trenches of the object storage layer right now, though.) 22:39:38 ais523: so, let me see 22:40:45 ais523: patch := insert between and | replace with | delete | do all of | start of file | end of file 22:40:50 ais523: except, for directories, it's 22:41:09 patch := insert | delete | do all of | empty-directory 22:41:13 *empty directory 22:41:14 Phantom_Hoover: Plain "localhost" worked just fine for me, too. 22:41:15 ais523: yes? 22:41:24 I'm checking that 22:41:55 for directories, it'd be patch := insert file | insert directory 22:41:56 And it's 25565 (not 25567) that's mcmap's (and Minecraft's) default port, unless I'm mistaken. 22:42:02 rather than just a plain insert 22:42:11 ais523: oh, make it 22:42:14 (The listening port is a command line option too.) 22:42:23 ais523: patch := insert | delete | do all of | empty directory 22:42:24 -!- oerjan has joined. 22:42:28 ais523: where fileinfo also allows symlinks, etc 22:42:32 yep, fair enough 22:42:41 I'm thinking that these types will likely eventually be pluggable anyway 22:43:04 ais523: one problem I can see right off the bat is that "start of file | end of file " is a type constraint -- those must be "insert " changes -- that is not represented within the implementation type system 22:43:07 but, then again, 22:43:09 the eventual plan is to use C 22:43:13 so I checked both of them to see what would happen 22:43:15 so we're in for that kind of pain /anyway/ :) 22:43:16 FOR SCIENCE! 22:43:49 oerjan: turns out, my login wasn't remembered 22:43:53 ah. 22:44:10 you wonder if the people in charge of the forum had ever heard of radio buttons 22:44:16 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:18 ais523: conflict? 22:44:28 that's how my apply function did it, it just wouldn't let you 22:44:31 ais523: (assuming no merge handling) 22:44:45 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:00 elliott: conflict 22:45:17 ais523: thought so 22:45:17 (because there's no way to automatically guess whether it should go before or after the weasel) 22:45:39 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 also, as for your hatred of the automatic v v v v ^ ^ ^ ^ conflict marking in files 22:45:59 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 ais523: possibly, but it shouldn't name it with the original filename 22:46:20 ais523: foo.conflicts I could accept, but not foo 22:46:28 hmm, often, in such cases, you want to edit the file into the unconflicted version 22:46:38 ais523: so mv it back afterwards? 22:46:48 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 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 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 ais523: IMO, if sg gets a merge conflict, it should refuse to update /any/ file you have *by default* 22:47:20 hmm, obviously it should work like sudoedit 22:47:32 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 ais523: indeed, since working directory wouldn't be in a consistent state 22:48:10 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 ais523: and then you'd do "sg conflicts fixed filename" 22:48:25 -!- wareya has joined. 22:48:34 ais523: and once you'd fixed all conflicts, you could do "sg conflicts commit-fix" (command names all hypothetical) 22:48:40 ais523: something like that, anyway 22:48:55 ais523: of course, this only applies to when you try and check out a conflicting revision which ... wait 22:48:58 can that ever actually happen with sg? 22:49:09 yes, if you explicitly specify a conflicting revision 22:49:15 which would make sense if, say, you wanted to fix the conflict 22:49:27 ais523: how an a revision conflict with itself? 22:49:39 well, you specify a patchset 22:49:44 if the set is internally inconsistent, that's a conflict 22:49:53 ais523: why can you checkout multiple patches? shouldn't you only be able to check out one? 22:50:14 well, indeed, but that patch might be a set of patches 22:50:18 which conflict with each other 22:50:24 and that's a perfectly sensible thing to want to do 22:50:43 people will want to resolve merge conflicts eventually, rather than leave the two version in the repo forever 22:51:01 ais523: OK, but should you really be able to commit a patch that conflicts? 22:51:09 just speaking platonically here 22:51:32 you should be able to pull a patch that conflicts, certainly 22:51:52 ais523: fair enough 22:52:02 there are a huge number of usecases for that 22:52:10 and then your repo would be inconsistent, but you probably intended that 22:52:12 elliott, does the joint mine agreement cover the spoils from dungeon crawling? 22:52:13 and then you fix the inconsistency 22:53:08 Phantom_Hoover: Not sure. 22:54:05 The iron is unambiguously shared, though, so I'll give you half of that. 23:01:05 ineiros, can you generate a new map sometime soon? 23:05:21 ais523: hmm 23:05:35 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:45 heh 23:05:50 -!- rodgort has joined. 23:06:16 ais523: I don't get darcs' patch theory 23:06:16 Vorpal: Except one in about an hour. 23:06:21 ais523: all this commuting patches and stuff 23:06:29 ais523: it's never explained why it's really useful or correct at all 23:06:39 it doesn't ever elaborate on why this is a good way to do merging 23:06:50 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 ais523: so, tl;dr: "I'm a physicist and can use LaTeX, therefore I've solved merging!"? 23:08:05 perhaps 23:08:18 ais523: (as opposed to you: "I'm a computer scientist and it's fractal, therefore I've solved merging!" :-)) 23:08:36 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:08:49 ais523: I was joking :) 23:09:33 ais523: FWIW, the model seems sound to me. 23:10:18 indeed, it's at least fully-specified 23:10:20 so it does something 23:10:28 the only way in which it could malfunction is it not doing what we want 23:10:41 ais523: indeed 23:14:03 -!- FireFly has quit (Quit: swatted to death). 23:14:18 ais523: hmm, the type system of the object store I have in mind is quite queer 23:14:20 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 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 Couple this with IPv6 routing problems and one is in for some nasty surprises... 23:15:08 ais523: Modelling this in Haskell = OH SO MUCH FUN (pain) 23:15:16 indeed 23:15:36 Ilari: Everyone sucks! 23:16:43 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 And then you write procedures to extract the keys you care about into a Haskell value. 23:16:58 (and vice versa) 23:18:18 ais523: any opinions on --and I know this is horribly implementationy-- the object store file format? 23:18:33 I can't think of any obvious features it would need 23:18:41 other than storing the data, ofc 23:18:51 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 give it a version number, so we can subsequently change the format if necessary 23:19:11 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 well, the obvious storage system is a Perl-style associative array 23:19:33 ais523: that's not much of a serialisation format, though 23:19:38 indeed 23:20:46 -!- augur has quit (Remote host closed the connection). 23:21:28 -!- augur has joined. 23:21:46 ais523: I'm not sure how B-trees let me do a random lookup like this, though, as I'm no filesystems guy... :/ 23:21:49 Any ideas? :p 23:22:56 the trick with filesystem-style things is to reduce the number of seeks you need 23:23:17 but I'm far from an expert on that sort of thing either 23:23:30 I hear B-trees are used, but *eh*, serialisation format can wait! 23:23:33 Who tracks revisions on disk anyway. 23:25:51 -!- augur has quit (Ping timeout: 260 seconds). 23:26:49 Deewiant, does the server work for you? 23:26:57 Deewiant, I get null pointer exception all the time no 23:26:58 now 23:27:06 I'm connected 23:27:06 -!- zzo38 has quit (Quit: Now I will write TeXnicard.). 23:27:23 Deewiant, I had some weird item dupe bug then got disconnected 23:27:37 I'll wait a few minutes for anything floating around there to get timed out 23:27:41 then I'll try again 23:28:00 Deewiant, if that doesn't work, do you have any way to poke the server? 23:28:41 Poke? 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 Deewiant, as in, get in contact with ineiros 23:29:41 Nope 23:29:57 Yes, I'm sure ineiros REALLY WANTS TO BE CONTACTABLE 24/7 FOR THIS. 23:30:09 In fact, Vorpal, maybe you should move in with him and watch him sleep. 23:30:19 If the server goes down you could just breathe into his face until he wakes up. 23:30:27 elliott, strawman 23:30:40 Sure, you could make an effigy of ineiros while you're there. 23:30:43 Out of straw. 23:30:44 elliott: clearly what we need here is some kind of server-dream interface 23:30:58 oh wait logic turns off when you sleep. never mind. 23:31:07 oerjan: Maybe we could just rewire ineiros's brain to connect to Minecraft when he sleeps. 23:31:14 ...hell, *I* would go for that 23:32:40 -!- augur has joined. 23:33:02 ais523: hmm, any opinions on Unicode support? 23:33:17 it's obviously better than no Unicode support 23:33:20 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 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 I'd suggest as using lines as the VCS basis to get something working, and switching to pluggable bases later 23:34:01 I will IRC, homework, and verb nouns at the same time 23:34:08 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:10 well, maybe 23:34:12 also, with patch descriptions, etc, couldn't you just store them verbatim 23:34:17 I suppose if \r isn't treated specially, it could be okay 23:34:21 certainly won't get small patches though 23:35:17 oerjan: http://esolangs.org/wiki/Talk:Tubes#Boxdrawing_symols aaargh painful to read 23:35:30 oerjan: why don't you delete that page, seeing as you're a wiki admin as we all know >:D 23:35:33 ais523: true 23:35:33 elliott: I stayed well out of that, because I couldn't understand what it was about 23:36:09 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 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 ais523: yes, which == codepage 437 23:37:47 oerjan: <3 23:38:01 (he asked me to do this yesterday if he failed the temptation) 23:38:04 i know 23:38:15 i like how you waited before pouncing 23:38:28 actually i didn't i just was web browsing :D 23:38:47 oerjan: but it LOOKED like you did 23:38:49 -!- oerjan has set channel mode: -o oerjan. 23:38:58 i think he's crying now, he isn't responding to my /msg :D 23:42:00 SORRY NO CAN DO 23:42:00 * Sgeo drowns elliott in tears 23:42:07 oerjan: you forgot to ban his clog access 23:43:16 well, night 23:43:53 <@oerjan> (he asked me to do this yesterday if he failed the temptation) <-- what temptation? 23:44:09 Vorpal: to not go to bed 23:44:12 *COUGH* 23:44:28 Vorpal: the temptation to irc when he needed to do his homework 23:44:35 -!- Mathnerd314 has joined. 23:44:36 elliott, actually I just observed it was night 23:44:37 elliott, :P 23:44:43 ais523: should object keys be Unicode? :-D 23:44:49 elliott, the observation is still accurate 23:47:03 "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:47:08 Worst sales text ever. 23:51:41 elliott: are you forgetting Enigma? 23:51:50 enigma contains different floors ! 23:51:58 ;d 23:51:58 ais523: dammit, I *did* just forget about that before you reminded me 23:52:08 now the general quality of things in my head has decreased significantly 23:52:13 i want minecraft ;f 23:52:15 still, you never know, it /could/ help 23:52:27 ais523: if I ever need to cheesy someone to death? 23:52:33 also, sorry it, I retract that statement 23:52:39 elliott: well, it's bad enough for people to talk about it 23:52:46 ais523: "Downloading of large movie clips is useful, as you will likely review them many times." 23:52:49 not /that/ one, I sure won't! 23:52:52 nooga: have you seen the Enigma trailer? it's hilarious 23:54:17 nooga: http://www.youtube.com/watch?v=WV9l26Y-mBk 23:54:35 nooga: (turn up for bad music)