00:01:15 -!- ubuntu__ has changed nick to cheater. 00:04:46 ais523: git is the only VCS which gets worse the better you use it 00:04:49 except for maybe CVS and SVN 00:05:15 heh 00:05:19 SourceSafe? 00:07:28 ais523: does that even classify as a VCS? 00:08:06 it's an, umm, attempt at a VCS 00:10:15 sg. we really need sg. sg. 00:10:38 sg 00:10:54 sg. 00:11:06 ais523: did you like my idea to avoid the clash with the Unix sg? 00:11:12 (see if our argument is a group, and if so, behave like sg) 00:11:25 just don't have a group named commit 00:11:47 haha, that's ridiculous 00:12:01 Alternative: Name Scapegoat's command s🐐 00:12:38 Gregor: a little hard to type 00:12:43 Pff 00:12:52 ais523: btw, you know how you proposed hashing minichanges as hash/0, hash/1, etc.? 00:13:12 where hash is the hash of the containing changeset 00:13:28 yep 00:13:54 ais523: I figured out why that wouldn't work, which is a better objection than me just not liking it 00:14:03 ais523: the hash of the changeset /depends on the hashes of the contents/ 00:14:21 so hash_of(changeset {hash/0, hash/1}) must == hash 00:14:30 ah, hmm 00:14:33 it's possible to work around that 00:14:34 which is (a) ridiculous, (b) hopefully impossible, or the hash function picked is really weak :P 00:14:37 but I see why you might not want to 00:14:43 ais523: probably; what were you thinking? hash /without/ the contents? 00:14:52 in that case, a change with identical metadata hashes identically, despite being non-equal 00:14:56 name the contents as self/0, self/1, etc 00:14:59 rare, yes, but it means you know the guarantees are broken from the start 00:15:02 ais523: ah, ew 00:15:17 the whole point of the plan was to make the things smaller 00:15:23 well, yes 00:15:24 but still, ew 00:15:43 I think you can still avoid making them bigger 00:15:53 but I also think that we should get something that works before worrying about that 00:16:26 fair enough 00:18:34 ais523: btw, one of the most important parts of sg that we haven't figured out yet -- 00:18:37 ais523: the diff algorithm 00:18:55 as in, going from filetree A and B, and producing a scapegoat change that turns A into B, and is preferably quite intelligent, using move changes and the like 00:18:58 just using diff(1) should be enough to get something working, I think 00:19:03 it's not 00:19:11 because it doesn't handle things that are very important for sg, like moving 00:19:33 ais523: also, if there /is/ an underlying diff algorithm, I'd prefer patience diff 00:19:41 (advantages and example of betterness at http://bramcohen.livejournal.com/73318.html) 00:19:45 what's patience diff? 00:19:48 see link :P 00:19:58 it's supposedly a bit slower than traditional diff, but who cares 00:20:11 ah, hmm 00:20:16 it also links to examples 00:20:20 like http://kerneltrap.org/mailarchive/git/2009/1/2/4574424 00:23:04 does anyone know how to go to a previous verison of a moinmoin page? 00:23:07 recent changes doesn't help much 00:25:05 -!- DH____ has quit (Read error: Connection reset by peer). 00:25:14 -!- DH____ has joined. 00:25:16 ais523: so incidentally, I'd be interested in seeing how sg's merge compares to precise codeville merge 00:25:30 and whether that merge might be useful as the first thing sg tries if the standard application fails 00:25:54 (description at http://revctrl.org/PreciseCodevilleMerge, but it's partially spambotted) 00:26:04 sg's merge is very conservative; if the merge works at all, it's pretty much 100% going to be correct (anything short of 100% is an error) 00:26:21 aha 00:26:22 http://revctrl.org/PreciseCodevilleMerge?action=recall&rev=19 00:26:25 there's a non-spambot version 00:26:34 ais523: it's easy to prove it's less than 100% 00:26:45 hmm, how? 00:26:54 the only definition of "correct" is "what would be written if the changes were written by developers acting sequentially" 00:27:02 consider if someone adds A(); somewhere in file a.c 00:27:08 and someone else adds B(); somewhere in b.c 00:27:16 and it turns out that you can't call B() after A() ever, it causes a complete segfault 00:27:21 ah, I see 00:27:25 that obviously applies cleanly, but it's an incorrect merge 00:27:50 I think my definition is "the obvious combination of the two pieces of code without looking at context" 00:28:14 a program where A() and B() had that sort of dependency would be pretty unmaintainable, unless the two functions were designed to do basically the same thing and yet added in different locations for some reason 00:28:28 that's a pathological example, there are obviously others 00:28:30 hmm, in fact, suppose someone adds a call to free() at the start of a list of deallocations 00:28:36 and someone else adds a call to free() at the end 00:28:43 yep 00:28:45 i was just about to say something similar 00:28:50 I typed "for instance, two people printing the same debug info in a different manner" 00:28:52 and was going to add 00:28:55 but separated by whitespace a bit 00:28:59 I can't think of any plausible way for a VCS, not even sg, to automatically realise it should take one version not both 00:29:00 so it's not in the "same" place but it effectively is 00:29:07 without knowing the semantics of free 00:29:10 ais523: indeed; a merge algorithm is necessarily imperfect 00:29:15 TODO: tell sg the semantics of free 00:29:19 haha 00:29:32 ais523: thankfully, static analysis can catch that one 00:29:39 I bet clang warns for a double-free like that 00:30:20 ais523: but yeah, it's about minimising false positives 00:30:40 * elliott reads more about precise codeville merge 00:31:04 I think clang's overrated 00:31:09 really? 00:31:15 the kind of warnings they do are very impressive 00:31:19 I thought it was amazing based on what I heard about it, but after comparing it to gcc, gcc just looked like the better system all round 00:31:25 howso? 00:31:41 clang makes it easier to add new analyzers, so it's better for writing new sorts of warnings in 00:31:49 but gcc's internals are more flexible 00:31:51 the only place where it's inferior to gcc that I know are: some gcc extensions not implemented, and it produces slightly less speed-efficient code at gcc's best 00:31:55 clang just makes so many assumptions, it makes my head hurt 00:32:03 even if the assumptions are all correct in practice 00:32:12 -!- DHeadshot has joined. 00:32:14 -!- DH____ has quit (Read error: Connection reset by peer). 00:32:20 ais523: with all due politeness (<-- this is how I say I'm about to be rude), comparing two C compilers based on how suitable for gcc-bf they are is bullshit 00:32:30 haha 00:32:55 platonically, gcc is the only suitable compiler for gcc-bf 00:33:01 or it wouldn't be gcc-bf, but clang-bf or whatever 00:33:05 yes yes 00:33:11 "Convergence is the behavior where an identical change is made in two different branches, like this:" 00:33:17 wow, people have actually /thought/ about this? 00:33:28 elliott: git doesn't work at all unless that's implemented 00:33:49 "Currently hardly any version control system properly supports convergence." 00:33:50 heh 00:33:50 because its view of the world is broken and it needs to count changes made twice as made once to avoid breaking whenever three-way merges are done at all 00:33:57 "Convergence is sometimes referred to as 'implicit cherry-picking' because it allows cherry-picking to be done offline using diff and patch, and the system figures out what happened. This is in contrast to explicit cherry-picking, which requires the user give semantic input describing the cherry-pick to the system, which is the style supported by Darcs." 00:33:58 hmm 00:34:13 I think sg can do convergence just fine, in its "first-try" merge algorithm 00:34:20 (it's not a merge if it cleanly applies :P) 00:34:22 yep, it's just not necessary 00:34:31 well, 00:34:32 "Convergence is sometimes referred to as 'implicit cherry-picking' because it allows cherry-picking to be done offline using diff and patch, and the system figures out what happened. This is in contrast to explicit cherry-picking, which requires the user give semantic input describing the cherry-pick to the system, which is the style supported by Darcs." 00:34:33 is quiet nice 00:34:34 quite 00:34:35 as in, sg works fine without convergence being implemented 00:34:38 right 00:34:40 but convergence just makes it better 00:34:44 ais523: btw, what I was going to say but then forgot to: 00:35:11 ais523: the whole "two filetrees into a change" thing is Yet Another Example of Reifying Intent, Which Has Plagued Computing For A Long Time 00:35:31 oh dear, a Kelly misquote 00:35:50 the idea is to reconstruct the changes the user intended from the "before" and "after"; the more accurately you reify that intent, the higher-quality the result (because it merges better, etc.) 00:36:10 you can even ask the user to help it by telling the system some of the intent explicitly, e.g. "sg mv a.c b.c" 00:36:18 or "sg split bigfile.c smallfilea.c smallfileb.c" 00:36:38 (which basically means "I removed this file, created two new ones; and inside both of those new ones, there's a move change from bigfile.c" 00:36:39 ) 00:36:47 indeed 00:36:58 in fact, all Unix shell commands should be prefixable by sg 00:37:05 to tell it what you're doing 00:37:11 haha 00:37:12 imagine if you could do sg cut 00:37:14 that's probably not a good idea :P 00:37:21 and it knew that you were separating the files into columns 00:37:45 at least sg tr is a semantically sensible operation 00:42:44 ais523: incidentally, instrumenting an editor to use sg, not to commit every single change done, but to, when the time to commit comes, use its information on what editing commands were run to provide a more accurate change than a system that had to reify more intent, would work well 00:42:50 ais523: the problem is, psychology 00:43:07 what do you mean by psychology, there? 00:43:14 ais523: if I knew my editor was watching my every move to try and figure out what I'm doing, I'd be utterly paranoid not to run editing commands that "don't match my intent" 00:43:23 so I'd be slowed down immensely trying to Do The Right Thing 00:43:25 oh, I see 00:43:30 maybe it's just me, but IMO that kills the idea :) 00:43:41 which is annoying; why can't we all be robots, it'd work great then 00:45:25 incidentally, who the hell designed cpp? 00:46:10 C++, or the preprocessor? 00:46:19 preprocessor 00:46:34 I don't know, but it seems to already have been in common use by the time of K&R1 00:46:54 it's awful :( 00:46:57 the preprocessor's a hack around a lot of deficiencies of languages at the time (specifically C, but others too I think) 00:47:01 -!- MDude has quit (Read error: Connection reset by peer). 00:47:11 here, you need to suffer a bit; incoming flood 00:47:11 #define PACKET(id, cname, scmname, nfields, ...) \ 00:47:12 /* terminate the last field_num++ of the previous packet */ \ 00:47:12 ; \ 00:47:12 packet_id = id; \ 00:47:12 field_num = 0; \ 00:47:13 __VA_ARGS__ 00:47:15 #define FIELD(type, cname, scmname) \ 00:47:17 -!- MSleep has joined. 00:47:17 packet_field_symbol_names[packet_id][field_num] = scm_from_utf8_symbol(scmname); \ 00:47:20 field_num++ /* a comma appears next */ 00:47:21 #include "protocol.def" 00:47:23 /* terminate the very last field_num++ */ 00:47:25 ; 00:47:27 #undef FIELD 00:47:29 #undef PACKET 00:47:47 You can't read that? 00:47:50 haha; did you write that? 00:47:51 What's wrong with you? 00:47:55 Jafet: it's an inside-out function call, I think 00:48:10 elliott: the Secret Project has a #define / #include / #undef sequence 00:48:14 but that's to avoid name clashes in header files 00:48:36 Jafet: it's an inside-out function call, I think 00:48:45 umm, that part's a standard technique 00:48:46 Actually, the last part is quite funny 00:48:51 it's just X-Macros 00:48:54 I don't suppose protocol.def is C, is it. 00:48:57 I had to include both the kernelspace and userspace versions of a particular struct (I forget which), and they had the same name 00:49:03 Sure it is, Jafet 00:49:03 PACKET(0x00, KEEPALIVE, "keepalive", 0, 0) 00:49:03 PACKET(0x01, LOGIN, "login", 4, FIELD(FIELD_INT, ID, "id"), FIELD(FIELD_STRING, NAME, "name"), FIELD(FIELD_LONG, SEED, "seed"), FIELD(FIELD_BYTE, WORLD, "world")) 00:49:06 PACKET(0x02, HANDSHAKE, "handshake", 1, FIELD(FIELD_STRING, DATA, "data")) 00:49:07 PACKET(0x03, CHAT, "chat", 1, FIELD(FIELD_STRING, MESSAGE, "message")) 00:49:09 elliott: it may be a standard technique, but that doesn't prevent it being an inside-out function call 00:49:10 PACKET(0x04, TIME, "time", 1, FIELD(FIELD_LONG, MINUTES, "minutes")) 00:49:11 [...] 00:49:13 Like I said, X-Macros 00:49:21 ais523: true, but that's not the terrifying part 00:49:26 and yes, I wrote it 00:49:34 it was the only thing that would work :( 00:49:55 after doing that for a bit, people normally end up inventing DSLs 00:49:58 at least, I do 00:49:59 here's another great one 00:50:00 switch (p->type) 00:50:00 { 00:50:00 #define PACKET(id, cname, scmname, nfields, ...) \ 00:50:00 case id: \ 00:50:00 return sym_packet_##cname; 00:50:03 #include "protocol.def" 00:50:06 #undef PACKET 00:50:08 default: 00:50:10 wtff("Invalid packet type %u", p->type); 00:50:11 } 00:50:12 OIL improved the maintainability of C-INTERCAL's optimiser by orders of magnitude 00:50:13 ais523: a DSL that did what? compile to C? 00:50:18 yep 00:50:19 this is embedded in a bunch of other C code 00:50:27 ais523: well, protocol.def /is/ compiled 00:50:37 from protocol.txt, which just looks like 00:50:37 entity_equipment: 0x05 00:50:37 - int entity: entity ID 00:50:37 - short slot: slot (0 = held, 1..4 = armor) 00:50:37 - short item: item ID 00:50:37 - short damage: damage 00:50:38 yep, you've basically written a DSL in cpp 00:50:43 no 00:50:47 protocol.def is compiled 00:50:49 from the above 00:50:52 (well, a bunch of the above) 00:51:00 oh, I see, you're compiling from a text description to some code that cpp compiles into some other code 00:51:00 the thing is, the protocol.pl script that processed it was creating a C file and a header 00:51:10 and I needed to use the same information in a bunch of places 00:51:20 it'd suck to make it even more complicated and spit out a bunch of files 00:51:26 which would then have to be pasted slapdash with cpp into other files 00:51:32 even though the usage was strictly localised 00:51:37 so I made it spit out an X-Macro file instead 00:51:50 it's simplified everything a lot, but occasionally it gets ugly like that :P 00:51:58 OIL generates a bunch of files as its output purely to stop gcc running out of memory trying to compile it 00:52:09 incidentally, all that comma termination stuff would be unnecessary if you could turn 00:52:10 a, b, c 00:52:10 into 00:52:11 a; b; c 00:52:12 with cpp 00:52:14 I think you _can_ 00:52:16 but it'd be really ugly 00:52:43 elliott: how does a C file have "field_num++" at the end 00:52:58 elliott: you can for any finite number of fields, I think; I'm not sure about infinite numbers of fields 00:53:06 as in, unbounded 00:53:41 Jafet: the field_num++ is in that FIELD() declaration 00:53:52 read the macros more carefully, then look at my pasted snippet of protocol.def 00:53:54 (it's all like that) 00:54:00 ais523: chaos-pp does that kind of stuff 00:54:21 and various other seemingly impossible cpp things 00:54:31 "The documentation for CHAOS_PP_IS_EMPTY_NON_FUNCTION says: [quote] If __VA_ARGS__ is empty, this macro expands to 1. Otherwise, it expands to 0." 00:54:35 combined with iteration, that should make it pretty easy 00:54:56 -!- CakeProphet has quit (Ping timeout: 260 seconds). 00:55:08 hmm, that shouldn't even be possible 00:55:17 you have to specify at least one variable argument, according to C 00:55:27 oh, wait 00:55:29 you can pass an empty argument 00:55:32 which isn't the same thing as passing nothing 00:55:36 cpp has /really/ weird semantics 00:55:49 -!- DHeadshot has quit (Ping timeout: 260 seconds). 00:56:25 ais523: yikes, take a look at the macro at the bottom of http://bytes.com/topic/c/answers/541521-behavior-variadic-macro#post2113119 00:56:27 -!- CakeProphet has joined. 00:56:27 -!- CakeProphet has quit (Changing host). 00:56:27 -!- CakeProphet has joined. 00:56:30 s/macro/macros/ 00:57:43 how does it manage that without any additions? 00:58:09 oh, it seems to have dependencies on macros not mentioned, like FPP_IF 00:59:44 yep, but still, yikes 01:06:01 I'm terrible at cpp programming :( 01:06:06 -!- Jafet1 has joined. 01:06:53 one time I tried cpp programming 01:06:57 it was hellish 01:07:11 -!- Jafet has quit (Ping timeout: 276 seconds). 01:07:18 maybe I should try again 01:08:30 -!- Jafet1 has changed nick to Jafet. 01:12:07 -!- MSleep has changed nick to MDude. 01:17:22 `addquote one time I tried cpp programming ​ it was hellish ​ maybe I should try again 01:17:24 651) one time I tried cpp programming ​ it was hellish ​ maybe I should try again 01:17:55 such a great description of this channel in three lines of IRC 01:18:54 it bothers me that cpp is the one programming language ican't learn 01:19:15 s/ican't/i can't/ 01:27:31 cpp as in C preprocessor? 01:27:49 hi 01:27:54 Yes. 01:28:22 elliott: can you learn INTERCAL? 01:29:00 ais523: wow, what a zzoesque phrasing 01:29:12 but, admittedly, probably not 01:29:21 I might be able to, but it'd be a slow process 01:29:23 elliott: I know, but it wouldn't have been a correct statement if I'd phrased it more normally 01:29:30 well, correct reference in the question 01:29:38 I should teach INTERCAL 01:29:48 it really isn't as bad as it looks, although it's still quite bad 01:30:33 -!- CakeProphet has quit (Quit: Reconnecting). 01:30:52 -!- CakeProphet has joined. 01:31:14 cpp is the best language of all. 01:31:18 ais523: I'd attend 01:31:22 anyone here confident about Windows 8, btw? 01:31:28 confident howso 01:32:09 that it's going to sell well (relative to other Windows versions)? that it's going to be usable without driving you mad? that it's going to have features you'd want in an OS (or Windows version specifically)? 01:32:29 I can say that the latter is false, mostly because it's false for every OS in existence 01:32:43 (it's probably false for @ too; by no means will @ be good) 01:33:04 well, hmm, a greater proportion of the features you want than Windows typically has atm? 01:33:13 ais523: really though, the tablet-focused stuff looks nice fo a tablet, but not for a mouse 01:33:14 as in, you can think an OS is very bad but still admit it's an improvement 01:33:16 or tocuhpad 01:33:19 regarding < ais523> elliott: can you learn INTERCAL? i thought zzo too 01:33:26 I think so too 01:33:40 I have a feeling Windows 7 is somewhat of a local maxima 01:33:48 as in, the best you can make Windows without Doing Something Different 01:33:52 so I'm not surprised they're trying something radical 01:34:21 personally, I wish everyone would stop Doing Something Different, it's driving me away from Linux DEs 01:34:36 at least my Something Different is something entirely new, not an upgrade :) 01:34:47 Windows 7 was pretty Something Differenty in several ways 01:35:00 it was? 01:35:01 I was so glad when I discovered I could change the taskbar back to a reasonably XP-like style 01:35:05 it was pretty similar to Vista 01:35:14 haha, that's insane 01:35:25 the taskbar is the best taskbar in any OS, as long as Aero is on 01:35:30 (otherwise the window switch is useless) 01:35:31 although doing that causes it to break muscle memory on the quick launch area 01:35:51 elliott: it becomes unusable as soon as you open two windows of one program 01:36:11 as it then requires two clicks in order to open either of them via the taskbar, and you don't know where the second click should be until you've already made the first one 01:36:30 which is pretty much unforgivable design 01:36:35 that's acceptable for me, because the alternative is a taskbar with a hundred windows 01:36:41 so I don't know where to click... full stop 01:36:47 doing this for tabs within IE is even worse, why can I not open IE then use its normal tab-change method? 01:36:59 every browser does that now, not IE 01:37:03 but that's also incredibly useful for me 01:37:07 even worse 01:37:16 I typically have 4-6 windows open per desktop 01:37:24 I don't use desktops 01:37:25 and arrange them in a standard order on the taskbar so that muscle memory works 01:37:31 neither to I, normally 01:37:34 *do 01:37:43 but I'll use a second one to do an entirely unrelated bunch of work 01:37:45 your computer has fooled you being a manual window manager :) 01:38:00 elliott: I'm not sure if it's "fooled" 01:38:05 rather, my computer allows me to be a manual window manager 01:38:19 well, it's making you waste your time 01:38:28 that's fooling whether you think you want it or not 01:38:34 nah, I can rearrange the windows while waiting for them to load 01:38:44 loading KDE takes a while 01:38:50 umm, Qr 01:38:52 *Qt 01:39:01 together with whatever KDE stuff's needed to run KDE stuff outside its shell 01:39:13 your only windows are KDE? 01:40:03 no, but Konversation loads first 01:40:08 Evolution and Firefox take longer 01:40:24 (actually, Epiphany consistently loads first, but I don't use it until after everything else is loaded, and don't always use it anyway) 01:40:42 my windows are Konversation/Evolution/Firefox/Epiphany atm 01:40:48 sometimes there'll be a terminal window too; there was earlier 01:40:53 Have you considered using ratpoison? :p 01:41:13 I might need to change DE if Gnome have screwed up as badly as I've heard 01:41:23 but what I'm doing atm works, and doesn't take anything away from my workflow 01:41:31 also, I use Compiz features on a regular basis 01:41:33 I wsa referring to the fact that you have a constant set of windows 01:41:36 was 01:41:39 so I'm not sure I'd be happy with any other compositor 01:41:42 elliott: oh, that's only when online 01:41:48 ratpoison doesn't even composit 01:41:48 I have a completly different constant set of windows when offline 01:42:00 normally terminal/emacs/sometimes epiphany 01:42:09 and five or more, which is the game I use to pass time while compiling 01:42:18 well, with ratpoison basically just lets you have a constant set of windows full-screened... you can even create a new fullscreened window 01:42:24 and if you're /really/ daring, manually tile them 01:42:47 also, although I normally keep windows constantly fullscreened (with the exception of five or more), I rely on the ability to unfullscreen them on occasion 01:43:00 really, I suppose my case is that there are many things I do as standard 01:43:03 for what purpose, out of curiosity? 01:43:04 but I like to be able to deviate from them too 01:43:19 elliott: say I have two terminal windows, and want to turn one always-on-top and semitransparent, then line them up 01:43:22 so I can visual-diff them 01:43:31 that's awful 01:43:44 I use always-on-top a lot for watching people play NetHack in a corner of the screen while doing other things, too 01:43:49 why are you calling that awful? 01:43:57 diff via compositing 01:43:58 it's a useful operation and one that couldn't be achieved easily by other means at all 01:44:04 man diff 01:44:13 elliott: well, how else are you supposed to diff two telnet sessions? 01:44:21 or, well, more commonly ssh sessions 01:44:25 but it's the same principle 01:44:34 a compositor is clearly the right program for that 01:44:36 man expect 01:44:37 ;__________-; 01:44:40 likewise, how do you diff GUI images 01:44:41 s/-;/;/ 01:44:42 pikhq: screen-oriented 01:44:58 I could probably write an expect program combined with a VT100 parser, and spend a week or so to get something around half as useful 01:45:02 or I could just use Compix 01:45:04 *Compiz 01:46:06 So... You're having to automate screen-oriented UIs? 01:46:22 Have you considered grabbing a bludgeoning weapon and hunting down the author? 01:46:35 what? 01:46:41 ais523 never said he was automating anything 01:46:48 Oh, right. 01:47:05 Have you considered just grabbing a bludgeoning weapon regardless? 01:47:07 :P 01:47:41 pikhq: the actual use-case is that I have a NetHack game, and a map that I'd like to change that NetHack level to look like 01:47:53 so I can see a shadow of the map and can try to alter the level itself to look the same 01:48:58 can you suggest a simpler way to do that than using a compositor feature that's just perfect for the purpose? 01:49:12 (admittedly, one that leads me to occasionally invisibilise windows by mistake) 01:49:17 btw, I can't think of a better way either, and I'm going to blame it on Unix 01:49:25 because I blame almost everything on Unix 01:49:42 you /will/ shout at me for my second-most-common use of the feature, which is seeing a compile happen behind my editor 01:49:50 augh 01:49:51 giving me two full-screen programs running at once 01:49:53 it's going to be worse than shouting 01:49:58 you're in Birmingham, right? 01:50:05 yes 01:50:18 expect me 01:50:20 -!- elliott has quit (Quit: Leaving). 01:50:24 but you can't shout loud enough to reach Birmingham from Hexham 01:50:55 what would be awesome: if elliott just wanted to go to bed and thought that was a perfect moment to make an amusing exit 01:51:08 it'll take him a while to get here unless he can afford a taxi over that distance 01:51:23 most public transport doesn't work at night, and elliott doesn't have a driving license 01:51:32 -!- elliott has joined. 01:51:34 turns out there aren't trains at this time 01:51:39 No shit. :P 01:51:47 [02:51] it'll take him a while to get here unless he can afford a taxi over that distance 01:51:48 [02:52] most public transport doesn't work at night, and elliott doesn't have a driving license 01:52:00 hmm, I wonder what a taxi to Birmingham would cost? 01:52:04 It's, what, 01:00 there? 01:52:09 almost 3am 01:52:15 Blah. 01:52:19 * Sgeo mutters at planes costing a lot more than busses 01:52:19 all I know about taxi costs is, I gawp when I see the little indicator inside going up 01:52:23 at an alarming rate 01:52:26 at least it's not exponential 01:52:32 Sgeo: No... shit? 01:52:52 It would be fun to roam the world on a few dollars 01:52:57 * Gregor mutters at people pluralizing "buses" in weird ways. 01:53:12 Sgeo: people do it 01:53:12 busi 01:53:18 I don't think they use planes much 01:53:21 elliott: the thing that always amuses me is the £300 or so surcharge there is from most companies for calling a taxi on Christmas Day 01:53:32 haha 01:53:33 also, I got a taxi from Wales to England once 01:53:37 admittedly, it was just across the border 01:53:37 but seriously, how much would a taxi to Birmingham cost? 01:53:50 but even so, the taxi driver had to ring his boss and ask for permission to go that far out of usual territory 01:53:50 elliott: People who can get to a different country in less than 1,000 miles travel do. :P 01:54:02 elliott: my guess is on the order of £1000 01:54:08 Well. Sgeo's in New York. He could get to the Canadian border with much less effort. 01:54:15 ais523: wow 01:54:25 I was stung by a wasp in Canada once 01:54:35 And then I NEVER RETURNED TO THE WRETCHED PLACE 01:54:38 I like trains. 01:54:43 *smack* 01:54:45 I like trains too. 01:54:53 I wish we had some. 01:54:54 elliott, turns out to be true that I never returned to Canada 01:55:12 Sgeo: You're calling Canada a wretched place, I see. 01:55:28 elliott: interestingly, Google Maps suggests two entirely different routes from Hexham to Birmingham 01:55:41 one via the A1, the other via the M6 01:55:58 I wonder how easy it is to walk the A1 01:56:04 the A1 goes east of Leeds, whilst the M6 goes west of Manchester 01:56:12 it has a little space at the side, right 01:56:13 ? 01:56:14 also, I didn't really appreciate that Hexham was that far North 01:56:26 we're practically Scottish, with the distinct advantage that we're not Scottish 01:56:28 well, much of it's a motorway, so yes but you technically aren't allowed to walk there 01:56:38 I wonder how technical that is 01:56:50 you're at a similar latitude to Newcastle! 01:56:55 if I ever get stranded on the A1, it would be useful to know that a police car would be happy to export me to somewhere warm 01:57:00 ais523: umm, yes, we're right next to Newcastle 01:57:06 geoip says I'm in newcastle IIRC 01:57:16 that'd make sense, who'd put Hexham in a geoIP? 01:57:21 :'( 01:57:54 also, evidence that AJAX is stupid and I hate it: there's an actual "link" button that you need to click on Google Maps to get a link to what you're viewing 01:58:00 because the URL doesn't change according to what you've entered 01:58:04 ais523: that's in htmlfive 01:58:08 and current browsers implement it 01:58:09 -!- kmc has joined. 01:58:13 (changing the url appropriately and adding to history) 01:58:14 elliott: but does Google use it? 01:58:21 nope, that's evidence that google is stupid and you hate it 01:58:31 "We could not calculate directions between Hexham, UK and Birmingham, AL." 01:58:32 google... 01:58:33 fair enough, I knew that already 01:58:47 neat, I can walk to birmingham in two days and... I... 01:58:50 ais523, you have to see this 01:58:55 http://maps.google.com/maps?saddr=hexham+uk&daddr=birmingham+uk&hl=en&sll=37.0625,-95.677068&sspn=34.122306,85.869141&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFZHTIAMdKBvj_ylzcUEbLZRwSDGYee6u8P6Byg&vpsrc=0&mra=ls&t=m&z=7 01:59:04 elliott: Give it a couple decades and that will be SOlved. 01:59:07 SOLVED, even. 01:59:08 really, if you want to walk that distance, you should be using the NCN 01:59:14 ais523: http://ompldr.org/vYWI5aQ 01:59:19 ONE OF THOSE ROUTES IS VERY PRACTICAL INDEED 01:59:21 it's the /other/ Year 2000 project, the one that isn't the Millenium Dome 01:59:42 and it got only a fraction of the funding and is way more useful 01:59:50 CLICK THAT LINK 01:59:54 -!- kmc has quit (Remote host closed the connection). 01:59:58 it basically made a network of cyclepaths (that can also be walked along) connecting all the major cities in the UK 02:00:01 CLICK THAT LINK 02:00:03 and many of the minor ones 02:00:06 >:( 02:00:41 elliott, better yet: Go west to get to Asia 02:01:38 ais523: huh, I was unaware that there were cycle roads separate from car ones 02:01:58 so is everyone else, more or less 02:02:03 they have to go along car roads sometimes 02:02:07 especially in the countryside 02:02:10 but they try to make them minor ones 02:02:14 http://upload.wikimedia.org/wikipedia/commons/a/ab/Openstreetmap-ncn-20101217.jpg neat, you can cross the island with them 02:02:20 in Birmingham, they mostly go along floodplains 02:02:26 as in, placewhosenameiforgetinscotland to lands end 02:02:40 places that they can't build anything but cycle paths because they get flooded every now and then 02:02:46 haha 02:03:11 route 5 goes along Birmingham, and is mostly along the banks of the River Rea; I use it to walk to the city centre occasionally 02:04:16 wow, this Sustrans website is doing Flash-like things without Flash, it looks like it's a proper HTML thing 02:04:21 I've been to remarkably few places in the UK now that I think about it 02:04:34 ais523: flash-like things? 02:04:57 things that people normally use Flash for, like scrollable zoomable maps that react to things like the mouse wheel 02:05:28 those are almost universally google-maps based, which is js 02:05:39 or, well, yahoo maps or whatever 02:05:41 but that's js, too 02:05:52 http://www.sustrans.org.uk/map?searchKey=hexham&searchType=search&Search=Find this is not very pleasant to use 02:05:54 anyway, route 72 seems to go through hexham 02:06:08 I agree, it seems pretty awkward to use 02:06:17 hmm, I wonder if that path is part of it 02:06:23 sufficiently so that I can't figure out where else route 72 goes, or where it connects to 02:06:38 (there's a pretty wide, very long path next to the Tyne that seems to have no actual purpose; when I've been on it cyclers have passed every now and then IIRC) 02:06:45 the NCN is reasonably noticeable if you look: it has blue signs with a white bicycle symbol, and a patch of red background with a white number on 02:06:53 it doesn't seem to go anywhere, though; after hours of walking, it just ended up in some nowhere village 02:06:58 and they're relatively frequent 02:07:04 oh, I don't recall any signs though 02:07:06 heh, that sounds like an adequate description of the NCN 02:07:20 hmm, there /was/ that fork 02:07:25 maybe the interesting places was down that 02:07:27 s/was/were/ 02:07:29 s/were/are/ 02:07:53 the route seems to be mostly along the north of Hexham, and makes a small detour to visit the railway station 02:08:15 heh 02:08:22 I don't recall any cycle path at the railway station 02:08:57 elliott: 72/68/54/5 02:09:03 hi 02:09:03 that should be your walking route from Hexham to Birmingham 02:09:06 haha 02:09:11 will that take less than two days? 02:09:28 depends on how fast you walk, I guess 02:09:34 but Hexham's so far north of Birmingham that I doubt it 02:09:42 can you walk over 200 miles in two days? 02:09:59 at 4mph, a fast walking speed, that's 25 hours of walking, so I think it's doable 02:10:03 umm, 50 hours of walking 02:10:06 so probably not doable 02:10:11 three days seems possible 02:10:19 I ran five miles once when I was a kid... I think it took an hour? 02:10:24 felt like running to me, not walking 02:10:35 also I forgot to eat anything, which made the aftermath fun 02:10:39 5mph is plausible for jogging 02:10:49 I was like ... uh ... young :P 02:10:59 running's more like 15mph, but you need to be a top athlete to keep that up for even a mile 02:11:04 and sprinting faster still 02:11:38 (the difference between normal people and Olympic athletes is more in how long they can keep a speed up than maximum speed, except for sprints) 02:11:48 I have rather terrible stamina, so I expect it'd take me quite many days to get to Birmingham 02:13:36 I'm just amused that we're even discussing this 02:13:45 and that I'm giving advice, given your stated purpose for walking to Birmingham 02:13:49 if you start teaching INTERCAL, I'll make a good-faith effort to walk the distance 02:14:16 I doubt I could get it added to the syllabus 02:14:18 I don't think it's worth it just to try and stop you using translucency for that, though 02:14:26 ais523: underground INTERCAL classes 02:14:43 the classes will be held in building whatever, at midnight. please note that the door will be locked, so you may have to break the window. 02:15:15 wow, XSLT is a functional programming language 02:15:34 we could hold it in the secret underground maintenance tunnels, I suppose 02:15:38 except I have no idea where the entrance is 02:15:39 that sounds fun 02:15:42 and they're very cramped and dangerous 02:15:48 why dangerous? 02:16:01 their existence became obvious to absolutely everyone a while back as they spent several months replacing the roofs 02:16:05 and because they mostly carry hot water 02:16:10 heh 02:16:12 -!- DH____ has joined. 02:16:14 hot enough that steam came up from them constantly while the roof was removed 02:16:23 I suspect there's a good few people there anyway 02:16:28 urban exploration, and all that 02:16:39 also, they're incredibly narrow in places 02:16:49 don't worry, I'm incredibly narrow in all places 02:18:00 "Some steam tunnels have dirt floors, no efficient lighting and have temperatures upwards of 45 °C (113 °F)." 02:18:01 -!- kmc has joined. 02:18:02 Sounds like Australia. 02:18:05 [rimshot] 02:18:14 Okay that was bad. 02:18:17 I apologise. 02:19:19 I must inform you on behalf of Australia that your apology has not been accepted, and you should probably not be surprised if a large and oddly poisonous animal shows up in your bed tonight. 02:19:38 So they're punishing me by giving the honorary Australian treatment? 02:21:20 Once I was in the school one teacher was teaching computer programming. I suggested that he learn INTERCAL. 02:21:31 oh dear 02:21:46 elliott: bear in mind that zzo38's teachers probably have met zzo38 02:22:05 heh 02:22:12 "probably" 02:23:26 hmm 02:24:08 homespring is the best language 02:24:10 I don't know whether he tried to even figure out what INTERCAL is, though. 02:24:24 any other programming metaphor is obsolete. 02:26:01 -!- calamari has joined. 02:30:52 The ADOM wish program does strange things. If you type "blind" it assumes you mean "goblin", type "weapon mastery" it assumes you meant "dwarven weaponmaster", typing "sheep" it assumes you mean "banshee"; all of them summon hostile creatures of that type. "human corpses" just results in random corpses. 02:31:44 Typing "sickness" gives you a temporary speed boost (I don't know why). "kobold corpses" results in kobold corpses, but "blink dog corpse" results in live (and hostile) blink dogs. 02:32:14 probably to make cheating more exciting. 02:32:50 Maybe. 02:33:30 http://df.magmawiki.com/index.php/Fun 02:33:57 I think it's trying to match the maximum number of consecutive letters 02:34:01 Typing "visibility" does *not* result in visibility, it results in rings of invisibility. "cold" results in gold (probably in many cases it tries an approximate match, this is one such case). 02:34:18 e.g. "/blin/d" -> "go/blin/" 02:34:30 that would explain the vast majority of zzo38's cases, except the sickness one 02:34:32 ah 02:34:37 ais523: I did notice those kind of things. 02:34:39 quickness 02:34:40 ? 02:34:45 CakeProphet: aha, that must be it 02:34:50 haha 02:35:42 Some things I read elsewhere. "Thomas Biskup" results in a message saying that you should not mock the creator of this game. 02:35:44 if I made some kind of wish system or cheating tool I would make it to completely random things for typed phrases. 02:36:03 just to make life interesting. 02:36:31 While "death" apparently results in a lot of aging (not necessarily death). 02:36:44 http://www.youtube.com/watch?v=_4JTlR_ltRo LOL 02:37:21 I'd buy it 02:38:36 that's pretty exciting 02:39:23 * CakeProphet is working on an esolang that uses a completely made up particle physics oriented programming model. 02:39:27 There are also various sets of restrictions you can try. One is to win the game, but select the highest number of kills of any individual kind of creature; the lower the highest such number is, the better your score. One is again win the game but your score is the number of different kind of creatures you have killed and the high number is best. 02:39:29 best metaphor of all 02:39:37 better than homespring 02:39:58 Another is you must enter the small cave at first (no exceptions), and stay there. Do not go up or down stairs. Goal is to reach 50th experience level. 02:40:18 that's pretty exciting. 02:40:59 Another is to win with the lowest experience total. (Someone has completed the special ending with only 1 experience point.) 02:42:12 they must be really good, or the game isn't very difficult. 02:43:01 CakeProphet: it's more that it's one of those games that is difficult but gets easier with spoilers 02:43:01 Here is another: Win the game but a restriction is that you can never carry more than 100 stones worth of inventory (this counts both equipped and nonequipped equipment). If you start with more than 100 then drop some on the road before you continue. (To win the game, you need five orbs, each of which weighs 100s. This means you must place each orb individually and then get the next one; and while doing so, no other items are permitted) 02:43:59 -!- Patashu has quit (Ping timeout: 250 seconds). 02:44:21 so yesterday or so I had a good nap dream 02:44:35 Another restriction is no use of the downstairs command. Goal is reaching 50th experience level. This means the only places you can enter are wilderness encounters. 02:45:00 it's the future or something and my family and I are in outer space and one of my teeth falls out mysteriously and this troubles me so I decide I need to see a space dentist 02:45:33 but my dad drags me to space church instead and it's boring and he makes me talk to the space priest so I get up but then this child bumps into me and spills wafers everywhere 02:45:47 wow, I failed to follow the line wrap there 02:45:59 and ended up reading "This means the only places you can enter are wilderness space dentist" 02:46:09 good reading 02:46:31 the completion of eternium man is awesome 02:46:34 I help him pick up the wafers but then the priest sits down and I guess he had to be standing for me to talk to him or something? I stand up and he asks me what the matter is and I say I was just a bit late standing up. everyone finds this hilarious and laughs a lot. 02:47:05 monqy: I found that hilarious too 02:47:28 But then it gets weird: gashes open up everywhere and there are tentacles everywhere and some of the tentacles burst and my father comes to the conclusion that the place is evil and we flee 02:48:05 we don't have enough fuel to get anywhere but my dad remembers there's this woman who goes to space church who lives nearby and is a space dentist so we go to her place 02:48:34 there's a really long staircase leading up to a spall 1-room house with a glass door and an old lady inside cleaning up instead of noticing us 02:48:59 I ring the doorbell and explain I was at space church and require dental assistance so she gets her tooth inspection kit 02:50:00 while inspecting my teeth she rambles about how wonderful they are and explains how I'm her only patient with good enough teeth to see the full majesty and she shows me this chart relating teeth to flavours 02:50:15 and points out the different tooth flavour relations 02:50:26 like one tooth is for milk and another one is for strength (these are flavours) 02:50:41 then she plunges a knife into my stomach and I wake up 02:50:42 the end 02:51:18 that was a bizarre thing for her to do 02:51:25 I didn't understand it either 02:52:41 maybe it's part of space dentistry. maybe she was evil too. 02:53:25 perhaps stabbing someone is how you cure space tooth problems 02:54:54 oh is this 02:54:55 dream talk 02:54:55 me read 02:56:56 monqy: good dream 02:57:10 i liked it too 02:57:40 last night I had a really complicated dream with a huge backstory but I can't remember any of the interesting parts 02:58:02 they were about frogs 02:58:40 -!- azaq23 has joined. 03:01:41 Great, Wolfram Alpha, alternate forums 03:01:43 forms 03:01:50 Now how about giving me the answer already 03:02:25 Unless it refuses to for inconsistent systems? 03:03:59 Seems to be happy enough to give solutions to systems with unique solution 03:05:40 what are you doing 03:06:56 Linear algebra homework, wanted to check my result that the system of equations is inconsistent 03:14:17 Have you considered just implementing the algorithms and omitting the manual computation that is, of course, devoid of value? 03:15:19 Sometimes in Haskell, it is unable to deduce a type even though there is a match. Maybe there should be a type deduction command to specify more precisely how types should be derived in certain situations 03:15:29 This is the last problem in this homework. If I get more homework of this style, I'll consider it 03:15:46 Hint: you will. 03:16:17 Well, currently this involves shuffling around equations and doing what seems like will be easiest 03:16:40 Not going to try to automate that in a believable way 03:16:45 how do you abort a commit of a merge in git? 03:16:47 Although actually that might not be that heard 03:16:48 git normally aborts with no message 03:16:49 hard 03:16:54 will just deleting the automatic message work 03:16:54 ? 03:17:04 Sgeo: Um, what the fuck are you doing, precisely? 03:17:04 yep, it does 03:17:06 thanks :P 03:17:14 pikhq, the class pretty much just started 03:17:43 The question still stands. 03:19:04 Solving systems of linear equations by using elementary row operations to get an identity matrix for ... one part? and the constants on the other 03:19:46 Yeah, you're doing that for the next few months. 03:19:56 And there is a very simple algorithm for it. 03:20:25 * Sgeo hopes pikhq is joking about the "next few months" thing 03:20:46 No. 03:21:02 Computing O(n^3) algorithms by hand makes pikhq sad. 03:21:03 * Sgeo hopes that maybe his school will actually, somehow, prove to be better? 03:21:17 Though O(n!) algorithms are worse. 03:21:28 Both will happen. 03:21:56 sgeo your school is the worst you have no hope of it being better 03:22:34 * Sgeo hopes his other homework assignment won't be more of the same. Hmm, it shouldn't be. Although there will be overlap with that class and the linear algebra class near the beginning :/ 03:22:43 Sgeo: Regarding wolframalpha, you could write the system as a matrix and test if it is singular (det x = 0) 03:24:25 azaq23: He's not even learned the row reduction algorithm yet. 03:24:26 pikhq: Look at this awful crock: https://github.com/fis/mcmap/blob/guile/scheme.c#L318 03:24:32 Warning: cpp hackery. 03:24:35 It's even worse than before. 03:24:57 (void)__VA_ARGS__? 03:25:00 Gag. 03:25:05 hahaha 03:25:27 ais523: did you lok at it, or do you not even visit GitHub pages? :P 03:25:34 Sgeo: wait, do you actually now know how to row-reduce? 03:25:36 That's a lot of hackery. 03:25:37 I had to add a (void) cast and some parentheses to stop clang complaining about an unused 0 expression result 03:25:41 because -Werror 03:25:44 coppro: He just started a linear algebra class. 03:25:45 elliott: I was laughing at pikhq's line 03:25:55 hmm, actually -pedantic might be the one doing it but whatever 03:26:00 I have been known to visit github pages when there's no other option, but they often don't work anyway 03:26:12 #define PACKET(id, cname, scmname, nfields, ...) \ 03:26:12 /* terminate the last field_num++ of the previous packet */ \ 03:26:13 ; \ 03:26:13 packet_id = id; \ 03:26:13 field_num = 0; \ 03:26:13 /* packets with no fields have a dummy "0" variable argument for strict 03:26:15 C99 compliance. we use (void) here so that clang doesn't generate 03:26:17 a warning about an unused expression as it's expanded here */ \ 03:26:19 (void) __VA_ARGS__ 03:26:21 #define FIELD(type, cname, scmname) \ 03:26:23 /* parentheses around this assignment so that the previous (void) cast 03:26:25 doesn't mess it up */ 03:26:27 (packet_field_symbol_names[packet_id][field_num] = scm_from_utf8_symbol(scmname)); \ 03:26:29 field_num++ /* a comma appears next */ 03:26:31 #include "protocol.def" 03:26:35 /* terminate the very last field_num++ */ 03:26:37 ; 03:26:39 #undef FIELD 03:26:41 pikhq: haha 03:26:41 #undef PACKET 03:26:43 now you can enjoy, too 03:26:54 -!- hagb4rd has quit (Ping timeout: 260 seconds). 03:27:02 pikhq: actually, you know what the worst part is? 03:27:07 I bet he doesn't know what a vector space is 03:27:12 and they claim it's linear algebra 03:27:23 coppro: Well, that would be in the course. 03:27:32 coppro: I hope, at least. 03:27:35 Sgeo: you better know what a vector space is 03:27:53 This is like expecting someone who just started calculus to know what an integral is. :P 03:28:01 uh what 03:28:06 dude you start with vector spaces 03:28:36 In a sane course perhaps. But more generally, you start with 0 knowledge at all. 03:28:38 No, this is like expecting someone who just started "calculus" to know what a real number is 03:28:42 And he is at the 0 knowledge point. 03:28:53 Most people graduate from calculus courses without knowing what a real number is 03:29:37 I know what vectors are 03:29:44 (thumbs up) 03:29:49 * Sgeo wikis vector space 03:29:50 Sgeo: Quite different from a vector space. 03:29:58 Though it is a related concept. 03:30:29 Although my other class expected me to know what sets are. I did, but I don't remember ever learning them in school 03:30:52 proxy.c:226: error: overflow in implicit constant conversion 03:30:53 proxy.c:226: error: overflow in implicit constant conversion 03:30:53 uh oh 03:30:57 Again, I disagree 03:31:01 (with Jafet, this time) 03:31:04 target :: Entity e => Predicate e -> Target e; opponent :: Predicate Player; artifact :: Predicate Object; -- I think it won't work if "Predicate" is simply function resulting to boolean; more complicated kind of selection would be used if you are making a card game 03:31:28 Linear algebra should start by defining vector spaces, and introduce matrices as convenient representations of linear operators 03:31:34 static const char prefix[4] = { 0xc2, 0xa7, 'b', 0 }; 03:31:36 umm... what? 03:31:42 how can there be any overflow there? 03:31:46 coppro: Mathematical pedagogy is pretty dang terrible, though. 03:31:59 ais523: he;pl 03:32:01 So it introduces matrices and their operations, and then moves on to vector spaces later. 03:32:01 he;lp 03:32:29 elliott: wow, I've looked at your ping at me about 3 times trying to figure out why I had he;pl as a stalkword 03:32:36 hahahahahaha 03:32:48 I have represented a transaction in accounting as a matrix (possibly with extra information attached, such as comments) 03:33:02 elliott: 0xc2 may well overflow a signed char 03:33:14 ais523: really? 03:33:19 and thus, a plain char, if it happens to be signed 03:33:23 hmm... 03:33:26 would 03:33:28 signed char only goes up to 0x7f on an 8-bit system 03:33:35 Specify typedef unsigned char byte; and then you can use the shortcut to ensure unsigned when wanted 03:33:38 static const unsigned char prefix[4] = { 0xc2, 0xa7, 'b', 0 }; 03:33:39 work? 03:33:40 try '\xc2' 03:33:44 that'll work too, yes 03:33:52 or use unsigned chars, depending on what you want the sequence for 03:34:15 oh well, thanks clang's scan-build, although I doubt that would ever do the wrong thing :P 03:34:20 ais523: it's just 03:34:21 static const char prefix[4] = { '\xc2', '\xa7', 'b', 0 }; 03:34:21 char *cmsg = g_strjoin("", prefix, msg, NULL); 03:34:26 s/just /just/ 03:34:31 ais523: those two bytes are the UTF-eight section sign 03:34:36 which Minecraft uses for colour codes 03:34:43 how bizarre 03:34:43 (previously, it used the latin-one byte for that...) 03:34:48 but then it changed to utf 03:34:55 so I guess it automatically started doing that :DD 03:35:00 somehow I think it's doing it wrong 03:35:10 you have no idea 03:35:14 is that embedded into arbitrary text? 03:35:25 not arbitrary; the server boots you off if you use bad characters 03:35:27 like the section sign, say 03:35:34 text that should be arbitrary but isn't? 03:35:36 pikhq: not at my school! 03:35:37 also, the font only covers that one DOS codepage 03:35:43 so the Unicode is quite useless 03:35:52 also, some parts of the protocol use utf-sixteen, and others utf-eight 03:37:03 "Section sign"? 03:37:05 Why don't they use control characters for the colors and so on? And why do they use sometimes UTF-16 and UTF-8 even though Unicode is not used anyways? 03:37:23 Oh, that symbol. Didn't know what it was called ... 03:37:25 Gregor: Google it. 03:37:26 :p 03:37:27 In case of CP437 (probably others too), the section sign is one of its characters. 03:37:28 Gregor: it doesn't seem to be in my compose, but it looks like two overlapping S characters 03:37:41 compose s s is taken for ß, obviously 03:37:42 Lawyers who play Minecraft must not be amused. 03:38:14 ais523: What happen if you use uppercase "S" instead? 03:38:29 03:38:33 ais523: It's s-o 03:39:16 Gregor: Are you using some encoding other than UTF-8? (I currently have terminal emulator set to UTF-8) 03:39:27 I'm using UTF-8 03:39:39 Well, that is not a section sign in UTF-8. 03:39:43 Gregor: XChat? 03:39:48 Gregor: No yer note. 03:39:49 not. 03:39:50 It seem not valid UTF-8 code at all 03:39:55 Gregor: Go into network list, find freenode, Edit 03:40:01 Observe character set being set to "IRC" 03:40:02 I thought I configured X-Chat to be UTF-8 on Freenode >_< 03:40:05 Which is latin-one "if it would fit" 03:40:06 Otherwise utf 03:40:09 Which is THE STUPIDEST ENCODING 03:40:14 Oh, I only configured that on my desktop I guess. 03:40:34 03:40:44 Still wrong 03:40:46 Bleh 03:40:57 Try reconnecting. 03:41:07 elliott: what about UTF-8 if it'd fit and otherwise Latin-1 to save on bytes? 03:41:17 ais523: it would always fit into UTF 03:41:26 elliott: different meaning of "fit" 03:41:31 there's a 510-byte limit 03:41:32 PuTTY does not have such encoding anyways 03:41:42 03:41:47 ais523: oh, heh 03:41:47 Still wrong 03:41:51 Gregor: Try quitting :P 03:41:54 Feh 03:42:02 hmm, I'm going to compile putty on linux 03:42:03 JUST BECAUSE I CAN 03:42:10 also, because most people don't realise you can 03:42:27 And probably some people use PuTTY 03:42:33 BE UTF-8 YOU STUPID § 03:42:33 Lots of people do 03:42:43 Gregor: It is OK now. 03:42:47 Yaaaaaaaaaay 03:42:53 I just had to yell at it. 03:43:08 Yeah, PuTTY is really convenient if you want to SSH from Windows. 03:43:29 # Persuade automake to give us a copy of its install-sh. This is a 03:43:29 # pain because I don't actually want to have to _use_ automake. 03:43:29 # Instead, I construct a trivial unrelated automake project in a 03:43:29 # temporary subdirectory, run automake so that it'll copy 03:43:29 # install-sh into that directory, then copy it back out again. 03:43:30 # Hideous, but it should work. 03:43:34 ais523: PuTTY's build system sure is fun 03:43:37 elliott: OK, do so. Sometimes that is the kind of terminal emulation you need, even though it try to emulate xterm 03:43:40 echo Some news > automake-grievous-hack/NEWS 03:43:40 echo Some text > automake-grievous-hack/README 03:43:40 echo Some people > automake-grievous-hack/AUTHORS 03:43:42 echo Some changes > automake-grievous-hack/ChangeLog 03:43:46 As well as other features of PuTTY 03:44:03 elliott: why not just include a copy of install-sh? 03:44:03 elliott: You are not allowed to complain about bad build systems until you build WebKit. 03:44:23 what PuTTY's doing is equivalent to downloading it from a package manager 03:44:28 Gregor: have you built gcc? 03:44:29 Gregor: I probably will, once musl, clang and libc++ work harmoniously 03:44:34 ais523: building gcc is easy 03:44:35 -!- azaq23 has quit (Read error: Operation timed out). 03:44:37 elliott: well, OK 03:44:42 but have you looked at the build system? 03:44:48 admittedly, no :) 03:44:50 ais523: Not only have I built GCC, I've built cross-compilers with arbitrarily-screwy requirements. 03:45:08 Gregor has such an interesting life. 03:45:13 gcc's build system is basically what you get by repeatedly editing compiler output, for many years 03:45:31 haha 03:45:33 such that there's no corresponding original source, and much of it is inline asm m4 03:45:45 Not only have I built arbitrarily-screwy cross compilers, I've implemented new platforms (only OS, not arch or bin format) 03:45:54 It also predates automake. 03:46:00 Gregor: JSMIPS? :P 03:46:03 Ayup :P 03:46:09 Gregor: Jesus you are a glutton for punishment. 03:46:18 "Users could see what was happening on another's terminal (using a command called OS for "output spy"). A target of OS could detect and kill it using another command called JEDGAR, named for FBI Director J. Edgar Hoover). This facility was later disabled in an interesting way: it looked like the session was killed, but was not.[1]" 03:46:39 (/me is looking into ITS to find that open ITS telnet server to try putty on) 03:48:32 "SV is running ITS. Please be very careful." 03:48:41 My point to that whole diatribe was this: GCC's build system screwiness ain't got nothin' on WebKit. 03:48:57 At least GCC has /one build system/. 03:49:00 Gregor: I suspect WebKit is easy to build as long as you don't want to change anything 03:49:05 Are there any terminal emulators that causes ASCII DLE control code to make next character forced treated as a normal character? 03:49:11 elliott: True. 03:49:46 I don't know how people even develop gcc, or WebKit, or anything. I can't work unless I can build in less than ten seconds. 03:50:12 How can you deal waiting a minute for your build system to figure out what it has to do? 03:50:23 elliott: With WebKit, it's "change on .h file -> wait 40 minutes -> find you made the wrong change" 03:50:26 pikhq: BTW, how's musl C++ support? 03:50:30 Gregor: How many minutes is it really? :P 03:50:31 You get it right on the first try? 03:50:33 >.> 03:50:34 elliott: 40. 03:50:38 Gregor: No but really. 03:50:41 elliott: I am not exaggerating. 03:50:47 Forty? 03:50:50 Please tell me you're exaggerating. 03:50:52 Four times ten. 03:51:03 WebKit will steal four times ten minutes. 03:51:06 And that's terrible. 03:51:08 How receptive are they to patches ripping the build systems out and replacing them all with a single tup? 03:51:09 :p 03:51:34 To be fair, I suspect that's mostly not the build system, but just the fact that it's an enormous bloated C++ mess. 03:51:34 Or is that time actually spent linking things and shit? 03:51:48 It's probably at least PARTIALLY the build system, though :P 03:51:51 How many files are there in that thing? 03:52:02 If you do the Qt build, which links everything into a single library, and you have the conventional (non-gold) linker, it can take 10 minutes or so to link. 03:52:09 Wow. 03:52:18 Even with gold it takes a few minutes. 03:52:26 win 15 03:52:35 So... NetSurf, anyone? 03:52:40 As per how many files, roughly a metric fuckton. 03:52:43 Hey, it renders Wikipedia and the BBC properly. 03:52:43 How many modules do those programs have? 03:52:49 http://www.netsurf-browser.org/about/screenshots/images/gtk-bbc.png 03:52:50 Anyone? No? 03:53:29 elliott: Which skins of Wikipedia does it work with? 03:53:36 "Web standards: HTML 4.01 and CSS 2.1" 03:53:40 Probably all of them, if it does Vector. 03:53:41 Does it work with Nostalgia skin? 03:53:51 Gregor: They're RISC OS people, man, they talk weird. 03:53:58 Gregor: But that rendering ain't bad :P 03:54:03 Of course Nostalgia skin is very simple it ought to work 03:54:04 I don't think it does JS though. 03:54:16 Yeah, no JS. 03:54:27 what a shame. 03:54:44 Other programs such as Lynx also does no JS 03:55:08 JS should be replaced by HaskellScript 03:55:16 JS should be replaced by Fythe 03:55:31 JS should be @ @ @ @ @ @ @ 03:55:44 Really though, how hard is it to add JS to browsers nowadays? 03:55:48 Step one: Grab an existing JS implementation. 03:55:51 Perhaps don't use webpages and don't have to worry about it unless using other JS programs. 03:55:53 Step two: Implement the DOM API. 03:55:54 JS itself is boringly simple. 03:55:54 Step three: Uh. 03:55:55 Lots. 03:55:58 Lots of other APIs. 03:55:59 The DOM is stupidly complex. 03:56:12 OK but the BASICS could be integrated into a browser in, like, a few weeks? 03:56:17 Mostly because it's a mish-mash of incompatible APIs. 03:56:20 Not enough for gmail, but enough for simple shit :P 03:56:26 Sure, probably. 03:56:33 JavaScript (just as itself, not having specific to do with webpages or anything) is not bad, though. 03:56:39 I'm just sayin' that the language part has been beaten to death, so you can just reuse that. 03:57:22 zzo38: I disagree completely. 03:57:29 Gregor: Looks like NetSurf uses an HTML5 parser, so their main page is out of date :P 03:57:32 (Hubbub) 03:57:45 One of the major problems w.r.t. implementing JS in text browsers is that the whole DOM API assumes there are pixels. 03:57:56 NetSurf isn't a text browser, dude :P 03:58:04 No, but somebody mentioned lynx :P 03:58:10 zzo38 did :P 03:58:20 Well, w[three]m does images. :p 03:58:32 Not well 03:58:33 Heh, Hubbub is part of the NetSurf thing 04:00:25 elliott: duplicate characters in regex character class. 04:00:36 bad. 04:00:41 Shaddap 04:01:03 Gregor: Holy crap NetSurf renders quickly. 04:01:12 ^....\s...!$ 04:01:19 Is why, I will make the computer, it will have both Forth and BASIC built-in, but no web browser program (although you can still use HTTP (as well as Gopher, and possibly also FTP and Plan 9 protocol) to download programs). 04:01:20 Although it doesn't quite do the rendering of Google I'd expect :P 04:01:41 -!- azaq23 has joined. 04:01:42 It's easy to be fast when you're wrong ... 04:01:58 Gregor: It's trivial wrongness, I think mostly CSS3 stuff 04:02:09 lynx's rendering is fast ;) 04:02:14 Indeed :P 04:02:29 Unless you're running it in Terminal.app. 04:02:32 my brain renders images near instantaneously. 04:02:50 not quite so good at HTML parsing though. 04:03:06 er, "executing". displaying? what is the verb? 04:03:26 CakeProphet: Rendering :P 04:03:27 But telnet is likely to be supported, as well as gopher menus (but not all gopher types; the minimum requirements are types 0, 1, and 7; and that should be good enough) 04:03:38 -!- Jafet has quit (Ping timeout: 276 seconds). 04:03:58 so uh, what has become of Rezzo? we need more warriors. I need more time. 04:04:44 The operating system will be stored in ROM BIOS and is not readable unless you trigger NMI. 04:04:54 CakeProphet: Nothing has become of it, it's stagnating. 04:05:06 RIP Rezzo? 04:05:06 Hard drive and optical drive are also completely inaccessible unless you trigger NMI. 04:05:08 I got tired writing my warrior, because as it turns out it's an enormous pain X-D 04:05:19 elliott: It's not dead, it's stagnant! :P 04:05:47 Gregor: perhaps it could be redesigned? 04:06:03 CakeProphet: It probably could, but I'm yet to think of how. 04:06:09 (Or put any effort into thinking of how :P ) 04:06:11 Actually, network access shall also be inaccessible unless NMI. 04:06:17 probably being no 2D would make it less of a pain I think. 04:06:33 so, basically, complete redo everything. :P 04:08:06 "Being no 2D" 04:08:49 -!- Jafet has joined. 04:09:56 (And it will not be too large or too heavy to defenestrate; in case you care. But I don't recommend it unless you intend to test its physical properties) 04:10:00 Gregor: s/no/not (and Gregor is a silly dong) / 04:10:31 CakeProphet: Are you suggesting that it become 1D, which is terrible, or 3D, which is even more terrible? 04:10:44 well it could be neither. 04:10:58 as in like, redesign the objective and the environment entirely. 04:11:07 Ah :P 04:11:12 so that dimensions no longer make sense. 04:12:20 there are other possibilities, I suppose. 04:12:56 Instead, have some electromusic: http://codu.org/tmp/drell2-2011-09-11-2.ogg 04:12:57 SCM_C_HOOK_NORMAL 04:12:57 but I think adding or removing complexity from the original design will not make it more fun to write programs for. 04:12:57 Type of hook for which all the registered functions will always be called. 04:12:57 SCM_C_HOOK_OR 04:12:57 Type of hook for which the sequence of registered functions will be called only until one of them returns C true (a non-NULL pointer). 04:12:57 SCM_C_HOOK_AND 04:12:59 Type of hook for which the sequence of registered functions will be called only until one of them returns C false (a NULL pointer). 04:13:03 this isn't offered for the scheme functions wtf 04:13:42 Gregor: ten seconds in, i like this 04:13:55 "20 seconds in, it's garbage" 04:14:14 :P 04:14:55 elliott: what are you working on? 04:14:58 what tools are you using to produce this 04:15:08 CakeProphet: Rosegarden and VSTi's. 04:15:18 aspect: mcmap... it's a thing. If you don't play Minecraft, you probably don't care. 04:15:33 Gregor: have you ever tried using csound? I'm not masochistic enough... 04:15:43 CakeProphet: I have not :P 04:16:00 CakeProphet: Although I like the wonderful possibilities w.r.t. repeatability. 04:16:05 Gregor: this is nice 04:16:16 I've managed to resist minecraft since my first 16-hour exposure to it, but I'm curious about most things that involve Scheme 04:16:23 From what I have read about Csound, I like it. But there could be a preprocessor to work with MML and other kind of macros stuff too 04:16:31 Gregor: Two and a half minutes in or so, the little pulse in the background sounds remarkable like an electric guitar :P 04:16:44 Hah 04:16:57 I'm super-proud of the low-fi piano. 04:17:01 I basically munged that myself. 04:17:44 I once wrote a music synthesis program in QBASIC that make WAV file output. 04:17:56 zzo38: That ... is terrifying. 04:17:57 aspect: mcmap is basically a proxy that sits between a badly-coded Minecraft client and a badly-coded Minecraft server. (The badly-codedness is irrelevant to everything except the fact that we have to deal with it on our end). It provides a fancy map with isometricness and all sorts of deep cross-section poking. It also used to provide its most commonly-used feature, an arbitrary teleportation command, but the server code got /slightly/ better an 04:17:57 d that stopped working. I'm working on binding Guile to it, so that you'll be able to script all sorts of fun commands and automation and custom proxying. 04:18:10 There ya go :P 04:18:34 nice! thanks for the summary :) 04:18:57 The input is a text file describing instrument sound and notes to play, volume of notes, and so on; it is more limited than most programs, but does allow some things that most other program do not have, including to define any temperament. 04:19:04 Gregor: Faust is interesting in that it's a functional audio processing language. 04:19:05 So, does aspect have a highlight on "SCM" or what :P 04:19:11 I believe it has like 4 basic combinators. 04:19:19 aspect: The Scheme bit isn't really relevant to being Scheme, but all the other good-to-embed languages are terrible :P 04:19:20 I haven't actually used scheme in anger for about four years, but the recent press around guile has got me itching to build something in it and see just how good the FFI and freedesktop-y stuff actually is 04:19:30 freedesktop-y stuff is terrible, as a rule. 04:19:55 xdg-open wtf://kill/elliott 04:19:55 Guile isn't really what I'd pick for a standalone implementation, to be perfectly honest. But it has a very nice C interface. 04:20:58 Well, you know, I say nice. 04:20:59 https://github.com/fis/mcmap/blob/guile/scheme.c 04:21:01 It's not all that nice. :p 04:21:02 as a user, that much is obvious. I've a nagging hope staying with me that I can replace some of the most annoying freedesktop and dbus monstrosities with some of my own code without too much pain -- originally this was to be done in Tcl but I'm wondering if Guile will make it a bit easier 04:21:06 But it isn't hideously surprising. 04:21:08 The computer design I was discussing, it is also the idea, in Forth and BASIC, if a URL is completely omitted it assumes you meant "tape:" 04:21:18 aspect: Most of the time, you don't have to replace it. 04:21:25 It's like PulseAudio; you can just drop it and absolutely nothing gets worse. 04:22:18 Gregor: So is that electric-guitary sound meant to be piano? :P 04:22:18 without PA I don't sem to have a convenient way to default output to bluetooth iff it is present 04:22:42 aspect: I'm sure you could script that by just triggering on bluetooth state changing. 04:22:47 elliott: Nono, it /started/ as a piano. 04:22:52 Gregor: lol 04:23:07 -!- sebbu2 has joined. 04:23:26 elliott: true. But the blessed way to receive bluetooth events seems to be via dbus 04:24:52 I HAS KITTY 04:25:16 aspect: Well, dbus is relatively unavoidable, but thankfully dbus is not all that bad. 04:25:21 The rest of the xorg stuff... 04:25:50 the only things that are blessed are the objects of Perl. 04:26:01 * CakeProphet sings a Gregor-ian chant. 04:26:02 -!- sebbu has quit (Ping timeout: 252 seconds). 04:35:45 ^style europarl 04:35:45 Selected style: europarl (European Parliament speeches during approx. 1996-2006) 04:35:51 fungot: make me into flour 04:35:51 CakeProphet: mr president, commissioner, ladies and gentlemen, the alavanos, mendiluce and titley reports submitted to us on social rights and the principles which i have tried it out on other innocent parties. 04:36:45 fungot: tognuf 04:36:45 CakeProphet: madam president, i think that we must hope that a compromise will be given the opportunity to discuss the problem of farmers' quotas, would lead to legislation whereby programs used to run equipment became patentable. it would be in trouble. the applicant countries to continue giving their support. 04:37:10 fungot: tognu F. 04:37:10 CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos. 04:40:39 `addquote CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos. 04:40:40 elliott: mr president, i wish to raise, namely that it is able, to assume responsibilities and commitments in the context of an anti-smoking policy, reduce and even ban tobacco imports. it should not be done away with. it is quite definitely a greenhouse effect. recently a small movement has emerged in record time. this is the case with italy. on the proposal, not only politically responsible, but also on the question of portfo 04:40:41 652) CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos. 04:41:11 ais523: hmm, can sg merge implicitly? 04:41:14 > nub . permutations $ "elliott" 04:41:16 ["elliott","leliott","lleiott","illeott","lileott","llieott","iellott","eil... 04:41:16 or are merges only caused by a changeset? 04:41:18 I think the latter 04:41:21 but I'm not sure 04:41:26 the talk of whitelisting things seems to imply not 04:41:33 as changes would merge into a branch without a changeset commit 04:41:43 elliott: a merge is itself a patch, so it doesn't come into being spontaneously 04:42:05 whitelisting things and merging them might be bundled together into a command as it'd be a useful thing to combine 04:42:15 but the two concepts make sense on their own 04:42:15 ais523: right, but the point is that a major advantage is lost 04:42:21 which major advantage? 04:42:24 in that you can commit a bug fix to master and have it automatically merge into branches 04:42:28 without doing anything 04:42:30 because it's compatible 04:42:37 oh, that isn't even a merge 04:42:45 you only need an explicit merge if there's a conflict 04:42:51 I'm talking about merges at the lower sense 04:42:57 ah, fair enough 04:42:59 yes, those are implicit 04:43:01 how? 04:43:04 except when conflicts are involved 04:43:06 merges only happen in a changeset, you can see it in the apply function I defined 04:43:07 by having both patches involved 04:43:17 the changeset itself changes according to an algo 04:43:25 that's not an answer, there is no changeset 04:43:30 whether whitelist or take-all-from-master or etc 04:43:37 elliott: well, with no changeset, there is no repo 04:43:41 a repo /is/ a changeset, right? 04:43:47 ais523: no 04:43:53 ais523: that's not what a changeset is 04:44:00 changeset :: Set Change -> Change 04:44:06 needs moar changesetsets 04:44:11 it's how you do something more than just inserting one line in a commit 04:45:31 ais523: there's definitely a model inconsistency here 04:45:31 wait, so the set of all changes *is* a change? 04:45:47 aspect: if you don't understand scapegoat, you won't understand talk about scapegoat :) 04:45:47 elliott: well, a repo is one of those too 04:45:57 ais523: no it's not; at least if it is, it's just started being one 04:46:00 because it's never been one before 04:46:07 elliott: what was the definition before? 04:46:13 one of us is confused, and I'm willing to admit it's me 04:46:18 but I'd like evidence 04:46:30 of what? 04:46:37 me being confused rather than you 04:46:42 as in, what was the definition? 04:46:50 of what? 04:47:00 a repo 04:47:16 just an object database 04:47:24 aha, I'm thinking of a branch 04:47:31 a branch is a subset of all changes developed according to an algo 04:47:37 you are mistaking the fact that a repository contains a set of changes for the fact that there is a changetype that consists of a set of other changes 04:47:48 and the difference between a branch and a changeset is that changesets are explicit changes made by listing other changes 04:47:54 and branches are implicit and generated according to an algo 04:48:02 agreed? 04:48:30 ais523: well, yes, but this seems like "and the difference between an apple and an orange is that an orange is orange rather than green and also totally different" 04:49:31 so your "merges only happen in a changeset" is misleading, the whole point is that you can calculate the result of any set of changes 04:49:34 whether it's a changeset or not 04:49:40 so low-level merges should happen in branches too 04:50:37 ais523: well, OK 04:50:57 ais523: the problem with that is that merges might not even /appear/ in the history of a branch 04:51:07 which causes problems for (a) viewing the history, and (b) things like bisect 04:51:08 they shouldn't 04:51:25 I agree that bisect is a bit of a problem, as you're trying to bisect an unordered history 04:51:46 for proper bisection, though, instead of having merges, you should have a history of which patches were considered part of the branch 04:51:48 then bisect that history 04:51:56 why isn't that the real history? 04:52:09 in a sense, it is 04:52:12 actually, implicit merges are scary for various reasons, which is why typical branches shouldn't get them; I'm wondering if they're a good idea at /all/ 04:52:32 elliott: well, they only happen if the branch is set up to automatically include patches 04:52:41 which is something you were in favour of and I was against, IIRC 04:53:00 if you're explicitly whitelisting, you only get an implicit merge as a result of a whitelist operation 04:53:21 anyway, the problem with explicit merges is that in git, you're supposed to edit them out, and you have huge numbers of them in a normal workflow 04:53:53 you're meant to edit out branch merges in git? really? 04:53:59 * Sgeo decides not to say something stupid 04:53:59 I have like fifty of them in the Guile branch 04:54:06 Sgeo: too late, go on 04:54:38 Near impossible to use a trackpad with wet fingers, even if you tried to dry them off 04:54:41 elliott: this is part of the reason I dislike git fans 04:54:52 what is? 04:54:54 it's to "make the history neater" or something, and so that various tools will work properly 04:55:08 I agree that merge commits are ugly, but that's a tool problem, IMO 04:55:20 Tools won't work properly if you don't prettify history? 04:55:25 That's.... disturbing 04:55:31 aha, I think I know what we should do 04:55:45 a whitelist should be represented as a changeset, as they're the same concept 04:56:01 then, the dependency chains of that changeset is how you do bisection and visualise merges for the history 04:56:18 hmm, maybe a branch is just a changeset, then; or rather, a computation of a changeset 04:56:24 hmm, but wait 04:56:26 shouldn't it just be a _change_ 04:56:31 the tip is a branch; the tip is also a change 04:56:37 the dependency of that changes is the rest of the tip branch 04:56:39 and a branch can only have one head 04:56:44 that's what makes it a branch, after all 04:56:48 so a branch is a computation producing a change 04:56:53 (that change could be a changeset, though) 04:56:58 (but usually, it's just the latest commit in the branch) 04:57:03 right, that's more general and makes sense 04:57:30 hmm... a changeset is isomorphic to that changeset, plus all its dependencies 04:57:34 or indeed plus any of its dependencies 04:57:42 omg, maybe changes are groups?? 04:57:47 they're obviously monoids 04:58:03 quick, we have to make this mathematical! 04:58:19 hmm, the identity element is obviously just the null change 04:58:20 changeset {}, say 04:58:36 ais523: does every change have an inverse, such that changeset {c, c'} ~ changeset {}? 04:58:42 I think yes, and I think if the answer is no, that's a bug 04:59:18 I can't think of one that doesn't 04:59:31 ais523: what about those reassign-hash things? 04:59:50 just reassign it again 05:00:05 hmm, right 05:00:32 -!- augur has quit (Remote host closed the connection). 05:00:35 (delete C)' = C 05:00:37 heh 05:00:39 that's lovely 05:01:12 ais523: well, changes are at least an abelian group 05:01:17 that's a pretty good sign 05:01:24 I doubt they're a ring, at least I can't think of a sane + 05:01:24 yay 05:01:33 but abelian groups are still pretty good :P 05:02:00 ais523: incidentally, how does one reify an intent for a hash-reassign commit? 05:02:01 it sounds really hard 05:02:22 I think you can't produce good merge commits in sg just by giving it the final product 05:02:23 now I'm trying to remember what hash-reassign commits were for 05:02:29 ais523: solving conflicts 05:02:52 ah, right, "changes to version A should be edited into this version from version B" 05:03:12 I've always been kind of uneasy about them 05:03:27 what do you mean by "reify intent", again? 05:03:29 I wonder if they're needed at all? Changes have inverses; you could just do changeset {A, B, invert of part of A, invert of part of B, additional stufF} 05:03:53 ais523: well, it's a general term; in the context of sg, it's going from before + after to a change that tries to represent the user's intent in editing 05:04:04 but to resolve a commit, you need to produce hash-reassign commits; or at least that's the status quo 05:04:08 elliott: that was my original plan; the idea's that say we both make the same change 05:04:12 and it seems very difficult to reify that intent 05:04:19 and the merge resolves the change in favour of my version 05:04:23 at least, without an additional merge tool that takes additional info 05:04:27 elliott: aha, I know how you reify it 05:04:35 the before is two conflicting versions 05:04:38 and the after, one version 05:04:41 indeed 05:04:58 it's reified by diffing the after to each of the befores, and finding lines that are conflicting in the befores but the same in the before and the after 05:05:16 i.e. lines that were in conflict, but not changed by the conflict resolution 05:05:21 what if there are none? 05:05:37 then hash-reassign commits probably aren't needed 05:05:41 for the purpose of conflict solution 05:05:43 ah, you mean it'll apply cleanly 05:06:01 well, say we're using line-based diff 05:06:04 ais523: I've always been a bit uneasy about them, though... is there a case when they help more than just including a partial inverse? 05:06:05 and the original line is a = x; 05:06:10 and you write a = x + i; 05:06:14 and I write a = x + j; 05:06:22 and the conflict fix is a = x + i + j; 05:06:39 then there are no hash-reassign commits, because any edit to the x+i or x+j line can't easily be translated in terms of the x+i+j line 05:06:56 the obvious case when they help more is if we both make the exact same change 05:07:06 the obvious conflict fix there is to include that fix once 05:07:06 hmm 05:07:07 wait a second 05:07:09 let me diagram this out 05:07:14 -- 05:07:17 ABC: a = x; 05:07:17 -- 05:07:21 DEF: a = x + i; 05:07:23 -- 05:07:30 AEC: a = x + i + j; 05:07:31 -- 05:07:40 -!- ive has quit (Quit: leaving). 05:07:42 changeset {ABC, DEF, replace ??? with "a = x + i + j;"} 05:07:46 is ??? ABC or DEF? 05:07:55 hmm 05:08:01 changeset {ABC, DEF, delete ABC, replace DEF with "a = x + i + j;"} 05:08:06 changeset {ABC, DEF, delete DEF, replace ABC with "a = x + i + j;"} 05:08:11 ais523: the problem here, is that we want to /unify/ ABC and DEF 05:08:21 OH 05:08:22 ais523: wait 05:08:22 wait 05:08:24 changeset {ABC, DEF, delete ABC, delete DEF, insert between X1 and X2 "a = x + i + j;"} 05:08:26 bit of a eureka 05:08:29 bit of a eureka 05:08:32 ais523: yes, but that merges terribly 05:08:33 here's what we need 05:08:40 elliott: the point is it's meant to merge terribly 05:08:44 ais523: no, wait, _listen_ 05:09:11 I am 05:09:13 a change "unify A and B as C"; what it means is, A and B are deleted, _but_, whenever they are mentioned, consider it a mention to C instead 05:09:14 that's why I stopped talking 05:09:24 erm 05:09:30 a change "unify A and B as STRING"; what it means is, A and B are deleted, _but_, whenever they are mentioned, consider it a mention to this change instead 05:09:31 elliott: that's basically a special case of a hash-reassign 05:09:36 ais523: it isn't 05:09:42 because it does it to /all/ changes 05:10:00 wait, here's what it looks like: 05:10:03 so does a hash-reassign, that's the point 05:10:17 changeset {ABC, DEF, unify ABC and DEF as DEF, (DEF) insert "a = x + i + j;" between X0 and Xone} 05:10:35 ais523: how can you express that with a hash-reassign without deleting ABC or DEF? 05:10:36 err, why have you given two different commits the same hash? 05:10:41 erm 05:10:44 elliott: well, the example there shouldn't have a hash-reassign 05:10:48 changeset {ABC, DEF, unify ABC and DEF as QQQ, (QQQ) insert "a = x + i + j;" between X0 and Xone} 05:10:50 ais523: it should 05:10:52 now, say ABC and DEF are identical but for metadata 05:10:58 /then/ you should have a hash-reassign 05:11:00 because otherwise the history is broken 05:11:14 but say, someone decides to replace "a = x + i;" with "a = x + i*2;" in my version 05:11:23 sorry, but you are essentially arguing "they shouldn't merge" on no grounds other than maybe "it should break so the developer can look at it beacuse there's been a merge there" 05:11:23 should that automatically replace the whole, merged line with "a = x + i*2;" 05:11:25 obviously, no 05:11:27 that's not a good reason to tarnish the history forever 05:11:30 ABC and DEf weren't deleted 05:11:33 they were merged 05:11:56 ais523: I think, obviously yes 05:12:03 it's "wrong", but that's for the merger to fix 05:12:06 no, that's not how programming works at all 05:12:08 it overwrote your change 05:12:11 -!- MDude has changed nick to MSleep. 05:12:29 sg will inevitably overwrite changes 05:12:37 no, it won't 05:12:44 yes it will, per the Merging Full Employment Theorem 05:13:01 it shouldn't disregard a change from a file just because a different line that was merged with it was changed 05:13:03 s/Merging/Merger/ 05:13:11 ais523: I think the problem is that this example is far too small 05:13:12 if the merge of A+B produces something that's neither A nor B 05:13:23 we need an example C function to do examples on :) 05:13:26 then in general, you don't know what A'+B is 05:13:35 elliott: let me go write one in a pastebin 05:13:40 ais523: noo, I was going to 05:13:48 two, in fact 05:13:51 so you'll see what I'm getting at 05:14:01 I just meant a generic one, for all merge talks 05:15:21 I'm waiting, though 05:16:33 ...are you guys trying to make merges completely unsupervised? 05:16:46 CakeProphet: what 05:17:11 as in. you don't have to manually merge ever. 05:17:17 no. 05:19:38 http://sprunge.us/TICU?c 05:20:11 are A and B equal? 05:21:07 ais523: ? 05:21:09 yes, except for metadata 05:21:54 hmm, OK, you've defeated me :) 05:22:00 I still think we need more interesting examples of conflicts 05:22:02 over multiple lines 05:22:32 make changes to the same file in an existing repo at the same time. 05:22:33 fun and profit. 05:24:08 Why does [d| type T = $(return $ TupleT 3) |] results in error about cycle in type synonym declaration? 05:25:13 because there's a cycle in the type synonym declaration. 05:25:32 ais523: so anyway, do you still think we need hash changes? 05:25:40 I'm honestly wondering whether partial reverts are ever worse 05:26:17 CakeProphet: But there isn't. It does that regardless of type name and regardless of the expression in $() even if it is not a Q Type expression. 05:26:19 zzo38: what is the error in full? 05:26:52 elliott: how do you get the A'+B+conflict resolution 1 case without them? 05:26:54 I tried 0 instead of 3 it is same error regardless. 05:27:00 zzo38: also, is your use of return/TupleT intentional for stylistic purposes or do you not know of tupleT (Int -> Q Type)? 05:27:02 the other reason I wanted them was for move-within-file changes 05:27:12 which is an entirely different use for the same thing 05:27:17 and seeing two uses for one thing left me convinced 05:27:22 they weren't part of the original sg concept, though 05:27:24 most if not all TH constructors have versions that work something like that 05:27:52 Cycle in type synonym declarations: :1:5-33: type T = $(return $ TupleT 0) In the Template Haskell quotation [d| type T = $(return $ TupleT 0) |] In the expression: [d| type T = $(return $ TupleT 0) |] In an equation for `it': it = [d| type T = $(return $ TupleT 0) |] 05:28:02 ais523: I'm not sure, the differences are subtle enough that I find this hard to read, but I'll give it a try 05:28:10 -!- augur has joined. 05:28:29 ais523: well, let's see 05:28:37 elliott: doing it with argv is a little silly; the intended use there would be for an AIish program where you're adding more factors into an evaluation algorithm 05:28:46 ??? argv?? 05:28:55 oh 05:28:57 I see 05:29:06 I just meant that they're like switching numbers and stuff 05:29:08 so it's hard to keep track :) 05:29:08 anyway 05:29:40 changeset {A, B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE} 05:29:45 that's a+b+conflict resolution patch one 05:29:50 A' is 05:30:02 replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;" 05:30:15 ais523: hey, now _your_ algo silently wipes out that change 05:30:37 what change is it silently wiping out? 05:30:40 A' 05:31:00 A'+B+conflict res 1 is identical to A' 05:31:04 and should be, because A was identical to B 05:31:45 changeset {A, B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE} 05:31:45 that's a+b+conflict resolution patch one 05:31:46 A' is 05:31:46 replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;" 05:31:58 changeset {A',B,conflict res 1} now... oh, conflicts 05:32:01 because MAINLINE_A doesn't exist 05:32:03 no wait, yes it does 05:32:05 it was just replace 05:32:06 d 05:32:08 so it gets deleted 05:32:15 and "return atoi(argv[1])+atoi(argv[2]);" inserted in its place 05:32:21 so yes, your algorithm _can_ wipe out changes 05:32:29 what change is being wiped out? 05:32:33 replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;" 05:32:45 that change is still in the result 05:32:51 no it isn't 05:33:02 oh, I made a typo 05:33:02 changeset {A, replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;", B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE} 05:33:07 no wonder you're confused 05:33:11 it's shown as wiped out in that example 05:33:11 how is that replacement still in the result? 05:33:13 but it shouldn't be 05:33:15 >_< 05:33:21 let me repaste 05:33:53 "Suppose you are a former INTERCAL hacker and you truly miss the 05:33:54 language." 05:33:54 zzo38: in case there's no way to fix it, have you tried $(tySynD (mkName "T") [] (tupleT 0)) ? 05:33:57 didn't expect to see that 05:33:57 http://sprunge.us/iidQ?c (better?) 05:34:36 ais523: it looks OK... but I still think this one-line example is completely impossible to follow, cognitively 05:34:42 oh wait I think I did that wrong 05:35:04 I've never worked with Dec splices before. 05:35:05 gah, is anyone any good at debugging Scheme macros? 05:35:08 elliott: change that line to ten copies of itself, if you like 05:35:13 ais523: that doesn't help :) 05:35:30 ais523: but yes, OK 05:35:31 monqy: OK, but is it a bug in GHC? Even if it is supposed to be error, the error message is wrong. 05:35:32 I think it's right 05:35:33 what's the macro? I don't have much experience with debugging them but maybe I can notice something 05:35:47 monqy: 05:35:48 (define-syntax on-packet 05:35:48 (syntax-rules () 05:35:48 ((on-packet origin (type binding) ...) 05:35:48 (add-hook! 05:35:48 (packet-hook 'type) 05:35:49 (lambda (from binding) 05:35:51 (if (or (eq? 'origin 'any) (eq? from 'origin)) 05:35:53 (begin ...))))))) 05:35:54 zzo38: I'm guessing it's a problem with [d||] quotes 05:35:55 I ge 05:35:57 t 05:35:59 build/../scheme/init.scm:8:2: syntax: missing ellipsis in form (syntax (add-hook! (packet-hook (quote type)) (lambda (from binding) (if (or (eq? (quote origin) (quote any)) (eq? from (quote origin))) (begin ...))))) 05:36:09 ais523: but yes, OK, I think you're right 05:36:26 ais523: I still wish we could do without hash-changing commits though... I don't know, I realise they cause no _problems_, but they feel like a wedge in the language 05:36:32 sorry about that typo 05:36:38 because they /change the interpretation/ of commits they're not "directly" linked to, e.g. just adjacent in the same changeset 05:36:46 which means you have to keep some sort of state 05:36:48 elliott: I'd be glad to consider other solutions to the same problem 05:36:52 which does just Does Not Gel With Me 05:36:56 s/does just/just does/ 05:37:00 s/just does/just/ 05:37:16 I think I know the reason you're uneasy 05:37:18 zzo38 05:37:19 [01:36:33 AM] a shame zzo38 didn't stick around 05:37:19 [01:36:37 AM] I see what his problem was :) 05:37:21 imagine a search-and-replace commit 05:37:35 that replaces all instances of "foo" with "bar" 05:37:56 changes made in other repos that add "foo" should change to adding "bar" when merged with it 05:38:09 /but/, changes made with knowledge of the foo->bar commit that add "foo" should still add "foo" 05:38:15 and "with knowledge" isn't recorded anywhere 05:38:20 heh 05:38:30 (I don't think search-and-replace changes should exist, you probably agree but I'm just noting this) 05:38:31 elliott: I can see where the problem is, but I cannot deduce the fix because I do not know what you are trying to do. If I knew the intended syntax and result of the macro I may be able to fix it 05:38:33 so this is a general problem with change-interpretation patches 05:38:44 monqy: what's the problem, out of curiosity? 05:38:47 but the intent is: 05:38:55 bad usage of ... 05:39:00 monqy: http://sprunge.us/GPJA 05:39:06 above is syntax, below is desire 05:39:10 in the case of commits-not-directly-linked-to, the same problem doesn't occur as if you're referring to the old hash, it can only be because you don't know it's been superseded 05:39:29 ais523: But really, my main problem with it, beyond general uneasiness about ugliness and ... sheer brute-force-ness, is that it means the "apply" function must take state. 05:39:31 as you'd refer to the new one instead if you had knowledge of the hash-replacement 05:39:31 i.e. the hash remapping. 05:39:35 but you're right in that it's a bit ugly 05:39:46 Which is horrible, because source + patch should → target or failure. 05:39:49 I'm willing to consider other solutions to the same problem 05:39:53 so you said 05:39:55 I can't think of any, though 05:40:01 hmm... 05:40:09 what about "delete X with heir Y"? 05:40:11 -!- azaq23 has quit (Ping timeout: 260 seconds). 05:40:22 it deletes X, but any changes that reference X /indirectly/ use Y instead 05:40:22 actually, I'm not against search-and-replace patches if they can be made to work, but I'm not sure they can be 05:40:23 by indirectly 05:40:24 I mean 05:40:28 they don't change Y 05:40:34 so, e.g., a before or after-hash is an indirect reference 05:40:42 as is the start/end (source and destination) of a move hash 05:40:44 but not a replace, insert, delete, etc. 05:40:56 elliott: well, the operation isn't just "for X use Y" but "delete X and refer to Y instead" 05:41:22 elliot: the ... in the body of your macro doesn't correspond to any useful pattern to repeat. (begin begin begin) obviously isn't what you mean 05:41:31 ais523: indeed 05:41:35 aspect: ah 05:41:41 aspect: I'm obviously confused about how ... works... 05:41:50 I don't think that resolves the fundamental problems, though 05:41:53 -!- azaq23 has joined. 05:42:02 why not use … instead? 05:42:05 ais523: yes, it feels ugly to me too 05:42:06 ITYM (syntax-rules () ((on-packet origin (type binding) body ...) and then (begin body ...) 05:42:10 ok i have what i think is the fix: replace both instances of "..." with ". action" 05:42:13 aspect: oh, thanks 05:42:22 monqy: that seems less nice than aspect's 05:42:25 aspect's fix would work too 05:42:26 (foo body ...) is similar to (foo . tail) 05:42:47 thanks 05:42:49 but ... gives you some more flexibility on the rewrite form 05:42:50 to both of you 05:42:59 let's see if it works :P 05:43:44 hmm, not quite... but it's a weird bug so it's probably mine 05:43:54 you might run into some hygeine issues with what you're trying here 05:43:57 oh, there we go 05:44:08 * aspect strokes chin and thinks 05:44:10 aspect: Really? The only thing I bind is named in the macro usage. 05:44:12 And it works. 05:44:28 hm true, that should be ok 05:45:02 (eq? 'origin 'any) is an odd condition 05:45:18 yeah, it's so that you can say 05:45:19 and you're quoting 'type ... 05:45:22 (on-packet any (chat ...) ...) 05:45:27 quoting type is correct 05:45:46 because you say (packet-hook 'chat) 05:46:23 I probably need to put a full-brian to understanding this 05:46:30 which I can't atm with work on :/ 05:46:37 wel,l it works now, so you can just ignore it ;-) 05:46:44 but that quoting strikes me as wrong 05:46:48 oh even better :) 05:47:03 I'm pretty sure the quoting is right -- I want to check whether the passed "origin" is any 05:47:05 there is a better way 05:47:15 i can write it out 05:47:30 monqy has the power 05:49:13 monqy: im wait, 05:49:15 hm maybe it's not so better because it gets a bit messy? but the idea is to --i don't know how to describe this-- make any a keyword for the macro by putting it in the () after syntax-rules and then pattern matching against it at some point 05:49:22 but I forget how to do this cleanly 05:49:33 yeah, the problem is that I'd have to duplicate all the code, I think? 05:49:35 maybe I'm wrong 05:49:39 oh hmm I can think of a way 05:50:25 would syntax-case work? 05:50:28 that's a thing right 05:50:40 I've never used it :( 05:50:46 (define-syntax on-packet 05:50:47 (syntax-rules (any) 05:50:47 ((on-packet (any from) (type binding) body ...) 05:50:47 (add-hook! 05:50:47 (packet-hook 'type) 05:50:47 (lambda (from binding) 05:50:49 (begin body ...)))) 05:50:51 ((on-packet origin (type binding) body ...) 05:50:53 (on-packet (any from) (type binding) 05:50:56 (if (eq? from 'origin) 05:50:57 (begin body ...)))) 05:50:59 that would work 05:51:01 yuck 05:51:03 I think 05:51:06 there must be a better way 05:52:09 -!- Jafet has quit (Quit: Leaving.). 05:52:33 syntax-case can do everything, but nobodt knows how to use it, except some #scheme weirdoes. 05:52:41 :( 05:52:59 :D 05:53:02 and oleg 05:53:38 making a local macro or whatever it's called with let-syntax or something like that might be able to make it a tiny bit nicer... 05:54:17 can oleg write a program so obscure that he cannot understand it? 05:54:40 fizzie: http://www.cs.indiana.edu/~dyb/pubs/tr356.pdf 05:54:51 google sure is neat. 05:55:05 CakeProphet: lol @ being a jackass at someone clearly joking 05:55:22 monqy: what I really want is a nicer way to dereference fields... :( 05:55:27 (packet-field packet 'message) is not the most concise thing 05:56:09 hm 05:56:22 (define p-f packet-field), of course. 05:56:59 Whoop, 9 characters of conciseness for free! 05:57:22 Oh hey, the fizzie is here too. 05:57:27 I was... I was going to ask the fizzie a question. 05:57:49 Not for long; I should be bicycling to wurk right about now. 06:01:38 Oh ho, Guile manual actually has a human-readable syntax-case description, with datum->syntax "this is how you introduce a binding" examples: http://www.gnu.org/software/guile/manual/html_node/Syntax-Case.html 06:02:04 Indeedy. 06:04:42 (set! packet (lambda (arg) (packet-field packet arg))) 06:04:58 aspect: Groooooooooooooooooooss. 06:05:36 arguably prettier than record types 06:05:56 which stomp all over le hygiene 06:06:07 > let ba_ha = 2 in 2 06:06:08 2 06:06:18 if all packets come from a common source you could wrap them there, rather than mutating them like that?? 06:06:20 I_am_going_to_write_all_Haskell_identifiers_like_this_from_now_on 06:06:59 I don't think I ever see that style used. 06:07:17 best-haskell-identifier-style 06:07:27 monqy: eh? 06:07:35 Oh, I see what aspect was getting at. 06:07:48 > let what-is-this-help = 2 in what-is-this-help 06:07:48 : Parse error in pattern 06:08:04 and my line was suggesting a clean alternative 06:08:22 oh, nevermind. I was going to disagree and say that syntax errors are wonderful. 06:08:30 s/dis// 06:08:42 but now I disagree completely. 06:08:49 hm? 06:09:22 did you miss the joke? or do you disagree with the serious part? 06:11:00 what joke? I am serious business right now. 06:11:22 it not being valid haskell identifier syntax was the joke 06:11:43 and the serious part is that having identifiers like that is how I'd prefer things 06:12:34 best—haskell—identifier—style 06:12:54 best haskell identifier style 06:13:08 gross 06:13:32 yeah spaces sure are a bad delimiter for words. 06:14:33 you can use spaces in variable names in Algol 68 06:15:08 (string->symbol "The best identifier of all!") 06:15:34 the best part is you can bind a name like T to that in your code, so if you want to translate your identifier names it's a one-place operation 06:16:20 I forget what languages do this but in some you can have identifiers of the form |spaces are permitted here| 06:17:35 lisp 06:18:19 probably was 06:18:52 > let some variable=1 in some variable 06:18:52 it rings bells from scheme but apparently not in gambit, which is the only impl I seem to have installed on this laptop 06:18:53 Not in scope: `variable' 06:18:55 :< 06:19:18 > let あ=1 in あ 06:19:19 1 06:19:40 I might have encountered it in reading draft 1 of the r7rs spec? maybe? 06:19:59 would have been r6rs surely if it were scheme 06:20:08 heheh 06:20:21 * aspect got disgusted with scheme by the time r6rs was a few months old 06:20:33 So, Dash will be Google's replacement for Javascript? 06:20:40 * Sgeo hopes they don't fuck it up 06:20:41 I never payed much attention to r6rs 06:20:57 Sgeo, I hope they allow - in variable names 06:21:15 r6 made me cry 06:21:33 but then I discovered tcl and was enlightened 06:23:00 is tcl good 06:23:47 perhaps surprisingly, it's quite wonderful 06:24:11 no lambdas 06:24:16 ;_; 06:24:21 there are problems of course, but a refreshingsimplicity which gives rise to a lot of nice things 06:24:22 also, use of the worst data structure as code 06:24:32 ;_; 06:24:38 EIS 06:24:43 true homoiconicity 06:24:52 also: http://wiki.tcl.tk/22049 06:25:22 and there are lambdas of a sort, they're just not much like you expect 06:25:33 no, nothing is a string; the widespread use of strings is an artefact of our current inadequate OS ecosystems 06:25:40 and no, Jim had proper lambdas, but nobody uses lambdas 06:25:45 err 06:25:50 pikhq used to use Tcl, so he can probably make arguments better than me :) 06:25:55 Jim was fucked 06:26:07 ew strings really? ahahahahahahahahaha 06:26:08 it also had lambdas 06:26:29 there's a page on the wiki called "Jim closures", which goes on for about 500 words before pointing out they're not actually closures 06:26:33 elliott: wait weren't you trying to convince me that tcl is awesome? 06:26:38 but cam emulate them if you add references, which are actually boxes 06:26:49 CakeProphet: no, I was trying to convince you you disliked Tcl for stupid reasons 06:26:51 -!- Vorpal has joined. 06:27:01 I would argue vigorously against anyone saying that Microsoft was a baby-killing machine, too 06:27:12 you say "ew strings", but the result is a much friendlier language for metaprogramming than Scheme 06:27:25 ...I don't see how. 06:27:35 strings = flat lists = structured programs = structured 06:27:38 dealing with hygiene is a little messy .... but see syntax-case 06:27:41 06:27:54 hi Sgeo 06:28:00 hi 06:28:18 aspect: for once CakeProphet is right 06:28:32 strings + quoting = structured 06:28:43 yes you cannot deny my amazing equational reasoning 06:28:50 -!- sebbu3 has joined. 06:29:29 * Sgeo hasn't been following the discussion, but what about Picolisp? 06:29:36 see http://wiki.tcl.tk/10259 for an explication of string structure 06:30:25 also, see the first link I pasted. Less than a few hundred lines of code to turn Tcl into Scheme. Now try the reverse 06:30:28 * Sgeo wrote some ... module thingy for Picolisp 06:30:34 Never put it anyplace accessible :/ 06:30:44 doesn't look like scheme to me; anyway I never compared tcl to scheme 06:31:03 yes, I have read the Dodekalogue. please don't assume I know nothing about Tcl 06:31:06 (okay, I lack call/cc .. but with uplevel and a bit of cleverness, one could write call/cc as a procedure that re-writes its caller) 06:31:42 the dodekalogue link was more for CakeProphet 06:31:53 elliott is to blame for me getting interested in Picolisp 06:31:55 and you don't think playing-scheme looks like scheme? 06:32:24 -!- sebbu2 has quit (Ping timeout: 260 seconds). 06:32:31 since when is gensym scheme 06:33:28 * Sgeo finds his rename code 06:34:06 gensym is a scheme for generating symbols, duh 06:34:41 I... uh... what? 06:35:13 Then again, I'm easily confused 06:35:42 * aspect hopes elliott was trolling me; if not, [Number] is the example you should be looking at -- [gensym] belongs behind the curtain 06:36:08 I'm a very trolly troll. 06:38:04 your name is practically an anagram for it 06:38:56 toll tie 06:46:41 http://nyan.cat/ :3 06:47:52 please tell me that's not a real URL 06:47:57 it is. 06:48:35 :| 06:49:02 though it's buttered toast and not a pop-tart 06:49:53 oh god I just opened the youtube video and this site 06:49:56 nyanning at the same time. 06:50:02 oh god I'm going to have a seizure. 06:50:13 * CakeProphet closes one. 06:50:22 ok 06:51:43 -!- nooga has joined. 06:55:47 my goal in life: get rich off of a meme. 06:56:20 :( 06:56:48 I hope you hate people like that and are secretly mocking them 06:58:05 monqy: I'm actually not a complete idiot. 06:58:08 by the way. 06:58:43 it's hard to tell with you sorry :( 06:59:11 my sarcasm stealth is obscene. 06:59:27 or, well, stealthfully obscene. 06:59:34 though I'm pretty sure that's not possible. 07:00:02 -!- sebbu2 has joined. 07:00:02 -!- sebbu2 has quit (Changing host). 07:00:02 -!- sebbu2 has joined. 07:00:44 can something be offensive and also hidden? 07:00:47 I guess so. 07:01:28 enpvfg wbxr urer 07:01:56 !rot13 enpvfg wbxr urer 07:02:01 racist joke here 07:02:25 that would be better hidden in a dark font 07:02:36 +c :( 07:02:52 also hhehe ehehh 07:03:05 I crack the codes. I end the war. 07:03:25 -!- sebbu3 has quit (Ping timeout: 258 seconds). 07:04:08 are there any other "encryption" algorithms that are self-decrypted, besides the rot* family? 07:05:37 xor with onetime pad 07:05:54 or with multipletime pad, come to think of it, but that's not a very good encryption algo 07:05:55 anything with the property forall letters a, b; if a maps to b, b maps to a 07:06:00 (that said, nor is rot13) 07:06:27 monqy: woah, you just blew my mind. 07:06:52 ais523: what are you xoring in that algorithm? 07:06:59 the plaintext with the onetime pad 07:07:07 right what is a onetime pad... 07:07:22 basically, a key the same length as the message, that you only use once 07:07:22 * CakeProphet does not know a lot about crytography. 07:07:26 ah okay. 07:07:31 short for padlock? 07:07:37 it's theoretically perfect encryption, the issue is in distributing the keys in the first place 07:07:37 perhaps? 07:07:43 I'm not sure if it's short for anything 07:07:43 XOR with one time pad is as secure as the one time pad is. 07:08:04 There are no weaknesses. 07:08:35 A one time pad also has no inherent weaknesses; only weakness in the way the key is generated or transferred or whatever are weakness. 07:08:35 :t (.^.) 07:08:35 Not in scope: `.^.' 07:08:42 :t xor 07:08:43 forall a. (Bits a) => a -> a -> a 07:08:44 "The "pad" part of the name comes from early implementations where the key material was distributed as a pad of paper, so the top sheet could be easily torn off and destroyed after use." 07:08:55 quantum cryptography is mostly focused on ingenious ways to calculate a one-time pad in such a way that you can detect whether it's known by anyone else 07:09:01 (and not use it if it is) 07:09:05 The pad is short for pad, then. 07:09:12 fizzie: That isn't very good; you will get impressions on the next page from the writing. 07:09:27 zzo38: I think it was meant to be read rather than written on 07:09:36 > zipWith "The cats out of the bag" "oskdjfuai ofjekrisoxkzlektiqoeirskdfhwerhiuhdfiuhweiuhd" 07:09:36 Couldn't match expected type `a -> b -> c' 07:09:37 against inferred type `[... 07:09:46 > zipWith xor "The cats out of the bag" "oskdjfuai ofjekrisoxkzlektiqoeirskdfhwerhiuhdfiuhweiuhd" 07:09:46 No instance for (Data.Bits.Bits GHC.Types.Char) 07:09:46 arising from a use of `D... 07:09:48 But how can you read it if there is nothing written on there? 07:09:49 Yes; you can write first and then stample the sheets into a pad. 07:09:49 ...wat 07:09:57 I don't really understand this Bits typeclass. 07:10:01 fizzie: That would work better. 07:10:02 zzo38: the information would be printed on there in advance 07:10:16 @hoogle Char -> Word8 07:10:16 Data.ByteString.Internal c2w :: Char -> Word8 07:10:17 Unsafe.Coerce unsafeCoerce :: a -> b 07:10:17 Prelude error :: [Char] -> a 07:10:33 er, is there a better way to do that? 07:10:48 :t (chr . xor . ord) 07:10:49 What? The @hoogle does not always match types properly 07:10:49 Couldn't match expected type `Int' against inferred type `a -> a' 07:10:49 In the first argument of `(.)', namely `xor' 07:10:49 In the second argument of `(.)', namely `xor . ord' 07:10:52 oops 07:10:53 I uh 07:10:57 messed that one up 07:11:19 toEnum . fromEnum 07:11:52 > zipWith xor (ord <$> "abc") (ord <$> "efg") 07:11:53 [4,4,4] 07:12:10 ISTR 'ord' is just fromEnum type-restricted to Char. 07:12:30 ?src ord 07:12:30 Source not found. 07:12:34 oops 07:12:35 > zipwith (chr . (xor `on` ord)) "abc" "efg" 07:12:36 Not in scope: `zipwith' 07:12:41 > zipWith (chr . (xor `on` ord)) "abc" "efg" 07:12:42 Couldn't match expected type `b -> c' 07:12:42 against inferred type `GHC.Ty... 07:12:50 oh rite 07:13:53 uh, I'm bad at pointfree. :P 07:13:55 > chr <$> zipWith (xor `on` ord) "abcdef" "foobar" 07:13:56 "\a\r\f\ACK\EOT\DC4" 07:13:58 Ooh, nice escapes. 07:14:09 wait, which one is \a? alert? 07:14:14 I believe so. 07:14:19 if it's the same as C. 07:14:31 the \ACK\EOT\DC4 stuff is pretty unusual as escapes go, at least 07:14:56 isn't there a .: or something? 07:15:00 Apparently \BEL also works, but it seems to default to the one-character escapes which exist. 07:15:03 :t (.:) 07:15:04 forall a b (f :: * -> *) (g :: * -> *). (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) 07:15:45 > zipWith ( chr .: (xor `on` ord)) "hello" "GOODBYE" 07:15:47 "/*#(-" 07:16:02 > zipWith ( chr .: (xor `on` ord)) "/*#(-" "GOODBYE" 07:16:03 "hello" 07:16:07 cool. 07:16:31 @hoogle (.:) 07:16:31 No results found 07:16:35 ..what is that. 07:16:54 what is this magical nonexistant operator I just used. where is it. 07:16:55 -!- Taneb has joined. 07:17:04 Hello 07:17:08 *nonexistent 07:17:09 hi 07:17:10 hello. 07:18:18 man I wish my teacher didn't give me a participation grade for listening to a recording of the class, when the recording is partially missing. 07:19:00 -!- Taneb has quit (Client Quit). 07:19:13 -!- ais523 has quit (Remote host closed the connection). 07:20:04 help what is .: help 07:21:21 :t fmap . fmap 07:21:22 forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => (a -> b) -> f (f1 a) -> f (f1 b) 07:21:34 -!- oerjan has joined. 07:22:42 :t (fmap . fmap) id id 07:22:43 forall a (f :: * -> *). (Functor f) => f a -> f a 07:22:55 :t (id.).id 07:22:55 forall a (f :: * -> *). (Functor f) => f a -> f a 07:23:05 man I'm so bad at composition. 07:23:20 :t (id.) 07:23:20 forall a (f :: * -> *). (Functor f) => f a -> f a 07:23:35 caleskell strikes again 07:23:48 :t ((id$).) 07:23:48 forall a (f :: * -> *). (Functor f) => f a -> f a 07:23:58 :t (id P..) 07:23:59 Couldn't find qualified module. 07:24:03 :t (id Prelude..) 07:24:04 forall b a. (a -> b) -> a -> b 07:24:17 er 07:24:25 oh okay. 07:24:37 heaps of shortened moduled names, but the one you actually need most often... 07:25:12 :t ((1>) Prelude..) 07:25:12 :t ($) 07:25:12 forall t a. (Num t, Ord t) => (a -> t) -> a -> Bool 07:25:13 forall a b. (a -> b) -> a -> b 07:25:22 yeah I noticed that. 07:25:36 hmmm, okay. 07:25:53 :t (id <<<) 07:25:54 that's still a little confusing, but I know the idiom (f.).g 07:25:54 forall b a. (a -> b) -> a -> b 07:26:48 :t id 07:26:49 forall a. a -> a 07:27:01 ...oh wait I've got it. 07:27:03 > id "entical" 07:27:04 "entical" 07:27:09 I find it a bit strange that caleskell id and (.) aren't the Category id and (.) 07:27:29 monqy: i think caleskell is slightly older 07:27:32 (f.).g 1 == (f.g 1) 07:27:33 ah 07:27:34 right? 07:27:36 (.) being fmap is kind of weird 07:28:00 CakeProphet: er no? 07:28:10 ...oh okay. 07:28:14 then I don't understand. :P 07:28:36 CakeProphet: sometimes it's easier to think in terms of fmap and the Functor instance for (a ->) when constructing those sorts of things 07:28:53 @unpl ((f.).g) x y 07:28:54 (f (g x y)) 07:28:54 er, actually I mean ((f.).g) 1 == (f.g 1) 07:29:10 @unpl (f.g 1) 07:29:10 (\ c -> f (g 1 c)) 07:29:23 yeah 07:29:25 same thing. 07:29:49 okay I've got it. I just had to work out the equational substitutions. 07:29:59 ok 07:30:17 now let's see if I can to it with three arguments. 07:30:45 anything beyond two arguments and I start using fmap instead of . in a few places or just doing it pointfully. two arguments is pushing it, too. 07:31:24 > (((f.).).g) 1 2 3 07:31:25 Ambiguous type variable `a' in the constraints: 07:31:26 `SimpleReflect.FromExpr ... 07:31:31 @unpl (((f.).).g) 1 2 3 07:31:31 (f (g 1 2 3)) 07:31:36 alright. 07:32:15 I guess it's okay when all arguments are in the right order and there aren't any other arguments or anything 07:32:45 and that's... fmap (fmap (fmap f)) g ? 07:32:55 `addquote king is something women are better at than men 07:33:00 653) king is something women are better at than men 07:33:37 monqy: how would you go about flipping arguments correctly? 07:33:44 I dunno 07:33:45 * CakeProphet wants to write Haskell like pl does. For fun. 07:33:51 I forget how I'd do it :( 07:34:10 well flip g would flip the first two obviously. 07:34:36 @pl (\f g x y z -> f ( g z y x)) 07:34:36 (. (flip . (flip .) . flip)) . (.) . (.) . (.) 07:34:37 CakeProphet: hey @pl doesn't know how to use Arrow functions 07:34:51 that's fine neither do I. :P 07:34:55 well I can kind of use &&& I think. 07:34:59 actually I think the point at which I switch to fmap is when composing compositions because that's weird 07:35:05 I managed to make a program in Haskell for type-level natural numbers that allows you to do this: valcon (undefined :: Add $(3) $(4)) 07:35:09 The result will then be 7 07:35:12 @unpl (f . g) 1 2 3 07:35:12 f (g 1) 2 3 07:35:16 @pl (\f g x y z -> f ( g y x z)) 07:35:16 (. flip) . (.) . (.) . (.) 07:35:18 ok, cool 07:35:39 man that is so bad.. 07:35:49 @pl (\x y z -> f ( g y x z)) 07:35:49 ((f .) .) . flip g 07:35:53 okay that is better. 07:35:58 (It uses an instance Num (Q Type), although it is not really the proper way to make a Num instance, of course!!) 07:36:01 @pl (\x y z -> f ( g z y x)) 07:36:01 ((f .) .) . flip (flip . flip g) 07:36:10 flip 07:36:17 monqy: well right I knew I'd want flip 07:36:35 ah okay so flip . flip g 07:37:01 @pl (\x y z -> f ( g x z y)) 07:37:01 ((f .) .) . flip . g 07:37:17 yeah those make sense now. 07:37:41 Is it good, what I made with type-level natural number? Or, is strange? Or, something else? 07:38:21 zzo38: i don't recall seeing type-level programming and template haskell combined before 07:38:25 :t flip flip 07:38:26 forall (f :: * -> *) a b. (Functor f) => a -> f (a -> b) -> f b 07:38:35 but i haven't seen everything, either 07:38:40 wat 07:38:41 :t flip 07:38:41 forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b 07:38:44 what is $(3) 07:38:59 TH for a type-level natural I'd imagine. 07:39:02 oerjan: Are you sure? I have never seen it either, but it would be possible. 07:39:24 And in fact I have been able to do so. 07:39:24 zzo38: well you've just proved it is possible, it seems :P 07:39:44 I'm guessing caleskell also makes flip work on functors? 07:39:47 maybe $(3) was just zzo shorthand 07:39:50 which is why I asked 07:40:22 > flip [(+3), (+4), (+5)] 6 07:40:24 [9,10,11] 07:40:28 monqy: Actually I made it so that $(3) is valid where a type is expected. 07:40:31 monqy: there would be no reason to parenthesize 3 if it were shorthand, i think 07:40:51 :t (<*>) 07:40:51 forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b 07:40:52 It is not normally allowed for a TH splice to have only a number 07:40:58 so basically flip is <*> for functors. 07:41:12 @src flip 07:41:12 flip f x y = f y x 07:41:30 oerjan: Yes, I believe you. 07:42:47 CakeProphet: didn't you see the type signatures? 07:43:01 :t flip 07:43:02 forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b 07:43:11 Although the program uses Template Haskell only for the purpose of writing things such as $(3) and does everything else with classes and type families. 07:43:12 monqy: right but I don't believe that is the standard type signature for flip. 07:43:21 CakeProphet: also it can't be <*> for functors, for fundamental reasons 07:43:26 :t flip (fmap (flip id)) 07:43:27 forall a b a1. a1 -> (a1 -> a) -> (a -> b) -> b 07:43:27 behind <*>'s nature 07:43:30 eek 07:43:53 :t flip (fmap . flip id) 07:43:54 forall b (f :: * -> *) a. (Functor f) => f (a -> b) -> a -> f b 07:44:32 CakeProphet: the fundamental reason is that there'd be no reason to have to declare <*> in Applicative if you could write it for any old Functor 07:44:33 wait, how do you flip id. 07:44:42 @unpl flip id 07:44:43 (\ b c -> c b) 07:44:50 oh right. 07:44:54 <*> for function is the S combinator 07:45:00 (flip id) is Church exponentiation. 07:45:14 CakeProphet: the type signature difference is that the second argument of flip is of type a, whereas in (<*>) it is of f a 07:45:32 :t Prelude.flip 07:45:33 forall a b c. (a -> b -> c) -> b -> a -> c 07:45:47 okay so then what is the source for this new flip? 07:45:50 -!- GreaseMonkey has joined. 07:46:02 CakeProphet: i just showed above 07:46:08 it's recursive? 07:46:09 :t flip (fmap (flip id)) 07:46:10 forall a b a1. a1 -> (a1 -> a) -> (a -> b) -> b 07:46:31 CakeProphet: well that flip used is supposed to be the standard one, of course 07:46:32 :t ((<*>) :: (t -> t1 -> t2) -> (t -> t1) -> t -> t2) 07:46:32 forall t t1 t2. (t -> t1 -> t2) -> (t -> t1) -> t -> t2 07:46:36 oerjan: oh okay. 07:46:41 is this like sudoku for haskellers? 07:46:49 aspect: heh 07:46:59 @djinn (t -> t1 -> t2) -> (t -> t1) -> t -> t2 07:46:59 f a b c = a c (b c) 07:47:53 flip (fmap (flip id))? wasn't your definition flip (fmap . flip id)? 07:48:08 or were you doing something else there 07:48:20 monqy: gah i miscopy/pasted 07:48:26 :t flip (fmap . flip id) 07:48:27 forall b (f :: * -> *) a. (Functor f) => f (a -> b) -> a -> f b 07:48:51 -!- calamari has quit (Quit: Leaving). 07:49:04 :t (<*>.($)) 07:49:05 Not in scope: `<*>.' 07:49:08 eek 07:49:14 :t ((<*>).($)) 07:49:15 forall a b a1. (a1 -> a -> b) -> (a1 -> a) -> a1 -> b 07:49:46 :t ((<*>).(<*>)) 07:49:47 forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b 07:50:06 @djinn ((<*>).(<*>)) 07:50:06 Cannot parse command 07:50:09 :t ((<*>)<$>(<*>)) 07:50:09 forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b 07:50:19 @djinn forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b 07:50:19 f a b c = a (b c) (c (b c)) 07:50:36 exciting. 07:50:38 ?unpl ap.ap 07:50:38 (\ c h -> (\ n -> c >>= \ k -> n >>= \ j -> return (k j)) >>= \ e -> h >>= \ d -> return (e d)) 07:50:45 exciting 07:51:46 :t (<*>).(<*>).(<*>) 07:51:47 forall b a a1. (a -> a1 -> b) -> (((a -> a1) -> a) -> a -> a1) -> ((a -> a1) -> a) -> b 07:51:49 weeeee 07:52:12 @@ @do @unpl ap . ap 07:52:12 (\ c h -> do { e <- (\ n -> do { k <- c; j <- n; return (k j)}); d <- h; return (e d)}) 07:52:35 i suppose @unpl doesn't work too well with ap 07:53:15 ?. ?do ?unpl ap 07:53:15 Plugin `compose' failed with: Unknown command: "?do" 07:53:17 oops 07:53:20 ?. do unpl ap 07:53:20 (\ d e -> do { b <- d; a <- e; return (b a)}) 07:53:36 @list do 07:53:37 undo provides: undo do 07:54:09 ?unpl ap 07:54:09 (\ d e -> d >>= \ b -> e >>= \ a -> return (b a)) 07:57:38 @pl (\a b c -> a (b c) (c (b c))) 07:57:38 (`ap` ap id) . liftM2 07:58:04 you've lost my trust, @pl 07:58:32 ?unpl (`ap` ap id) . liftM2 07:58:32 (\ j -> (\ f g -> f >>= \ d -> g >>= \ c -> return (j d c)) >>= \ r -> (\ o -> (\ a -> a) >>= \ l -> o >>= \ k -> return (l k)) >>= \ q -> return (r q)) 07:58:38 thanks 07:59:10 I wonder which provides obfuscated code more often. 07:59:14 that second c probably complicates the plumbing a lot 07:59:38 @unpl ap id b c 07:59:39 ((\ a -> a) >>= \ e -> b >>= \ d -> return (e d)) c 08:00:07 oerjan: pl should just magically know that it's (<*>).(<*>) because it's an awesome cat eye operator thing. 08:00:27 pl uses ap instead of (<*>) 08:00:27 you don't say 08:00:29 I did something might be a bit strange, which is accessing a field which is incapable of ever having a value in the circumstances where the field is being accessed. (There might be possibility of the field having values, but not in the program I wrote.) 08:00:43 :t ap.ap 08:00:44 forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b 08:01:01 @@ @djinn @type ap.ap 08:01:02 f a b c = a (b c) (c (b c)) 08:01:20 oh you already did that 08:01:23 yep. 08:02:51 :t ap.ap.ap 08:02:52 forall b a a1. (a -> a1 -> b) -> (((a -> a1) -> a) -> a -> a1) -> ((a -> a1) -> a) -> b 08:02:55 :t ap.ap.ap.ap 08:02:56 forall b a a1. (a -> a1 -> b) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> (((a -> a1) -> a) -> a -> a1) -> b 08:03:02 :t ap.ap.ap.ap.ap 08:03:03 forall b a a1. (a -> a1 -> b) -> (((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> b 08:03:09 how much ap is too much ap 08:03:19 :t ap.ap.ap.ap.ap.ap.ap.ap 08:03:20 forall b a a1. (a -> a1 -> b) -> ((((((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((((a -> a1) -> a) -> a - 08:03:20 > a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ( 08:03:20 ((((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> 08:03:20 a1) -> a) -> a -> a1) -> b 08:03:36 " ais523: well, changes are at least an abelian group" <<< please elaborate 08:03:37 monqy: a lot 08:04:05 :t fix (ap.) 08:04:06 Occurs check: cannot construct the infinite type: m = (->) (m a) 08:04:06 Expected type: f (m (a -> b)) 08:04:06 Inferred type: f (m a -> m b) 08:04:57 (ap ap ap ap ap ap ap) gives a really long infinite type error 08:04:58 oklopol: how would you like me to elaborate? 08:05:00 This is program I made: http://sprunge.us/PKiW 08:05:05 :t ap ap 08:05:05 forall (m :: * -> *) a b. (Monad m) => (m (a -> b) -> m a) -> m (a -> b) -> m b 08:05:08 :t ap ap ap 08:05:09 Occurs check: cannot construct the infinite type: m = (->) (m a) 08:05:09 Probable cause: `ap' is applied to too few arguments 08:05:09 In the second argument of `ap', namely `ap' 08:05:57 elliott: what are the elements and what's the operation i guess 08:06:48 :t ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) 08:06:48 forall b. [[b -> [b]]] 08:06:52 oklopol: well changes look roughly like change := start-of-file | end-of-file | insert between and | replace with | delete | move (,) to (,) | changeset 08:07:00 okay I definitely need to obfuscate something with that line... 08:07:02 the operation is a . b = changeset {a,b} 08:07:22 the inverse is 08:07:34 where do you get that that's a group lolol 08:07:40 hmm 08:07:46 inverse(insert x between a and b) = delete (insert x between a and b) 08:07:50 inverse(delete x) = x 08:07:57 inverse(replace x with y) = delete (replace x with y) 08:08:00 inverse(move) = cba to write 08:08:05 inverse(changeset) = blah blah recurse 08:08:07 ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) <$> (<*> 3) 08:08:10 > ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) <$> (<*> 3) 08:08:10 Couldn't match expected type `a -> b' against inferred type `[b1]' 08:08:23 inverse(start-of-file) = probably changeset {}, sof and eof act as nops in practice 08:08:36 but yeah, changes are an abelian group. 08:08:43 if they're not it's a bug :P 08:09:15 one day I will be a great Haskell programmer, telling hieroglyphic stories with my programs 08:09:20 epic tales of cats and totem poles. 08:09:20 and it doesn't matter in which order you say insert two strings? 08:09:29 i suppose i have no idea what we're talking about 08:09:32 oklopol: changeset takes a set, not anything ordered, so yes. 08:09:36 the context is scapegoat 08:09:51 ais' vcs design that I'm working on him with, based around recursive changes 08:10:17 but umm do you have x * x = x when x is a value 08:10:23 or is it added twice 08:11:06 x * x = changeset {x, x} 08:11:13 = changeset {x} that's how sets fucking work :P 08:11:30 so x * x = x? 08:11:38 zzo38: couldn't you avoid the getPred field by using valcon _ = 1 + valcon (undefined :: x) ? 08:11:45 oklopol: yes. 08:11:46 then it's not a group 08:11:57 er hm oh :P 08:12:08 hmmmm 08:12:11 * oklopol saves the day and goes to work 08:12:15 x * x might actually want to conflict 08:12:25 hey oerjan help us fix scapegoat 08:12:27 > (<*> [3]) <$> ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) 08:12:29 [[[3]]] 08:12:46 does x*x -> x imply idempotent changesets? 08:12:52 oerjan: That doesn't seem to work when I tried 08:12:58 because I don't understand what you're doing, but that sounds like it would be bad 08:13:05 that's correct. 08:13:08 and right 08:13:15 but it actually just implies that {x,x} = x 08:13:18 but yes :P 08:15:37 actually it implies that x = nop for all x 08:15:39 -!- nooga has quit (Ping timeout: 260 seconds). 08:15:45 zzo38: huh. maybe the type x isn't actually in scope. i vaguely recall something about that. 08:15:51 What it seems to do is x in (undefined :: x) is a new variable 08:16:12 That is why I put getPred instead. 08:16:12 zzo38: perhaps if you add the ScopedTypeVariables extension? 08:16:26 (iirc the name) 08:16:44 @hoogle a -> [a] 08:16:44 Prelude repeat :: a -> [a] 08:16:44 Data.List repeat :: a -> [a] 08:16:44 Prelude iterate :: (a -> a) -> a -> [a] 08:16:47 Maybe it will, but it also works the way I have it. 08:16:59 :t return :: a -> [a] 08:16:59 forall a. a -> [a] 08:17:02 :t pure :: a -> [a] 08:17:02 forall a. a -> [a] 08:17:10 > repeat >=> repeat $ 3 08:17:11 [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,... 08:17:17 zzo38: ok. anyone i think that's the kind of thing that extension allows. 08:17:21 *anyhow 08:17:30 :t >=> 08:17:30 parse error on input `>=>' 08:17:34 > repeat >=> (+1) $ 3 08:17:34 No instance for (GHC.Num.Num [c]) 08:17:34 arising from a use of `e_113' at :t (>=>) 08:17:37 forall a (m :: * -> *) b c. (Monad m) => (a -> m b) -> (b -> m c) -> a -> m c 08:17:52 > (+3) >=> repeat $ 3 08:17:52 No instance for (GHC.Num.Num [b]) 08:17:52 arising from a use of `e_133' at repeat is not an acceptable return. :( 08:18:18 oerjan: OK. 08:18:19 actually it implies that x = nop for all x 08:18:24 that's certainly not true. 08:18:27 i accept it isn't a group though. 08:18:45 > repeat >=> (return.(+1)) $ 3 08:18:46 [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,... 08:19:09 Would you ever have some use of this "TypeNatural" program? 08:19:21 not I/. 08:19:55 CakeProphet: actually repeat is essentially the pure of the ZipList Applicative, which _may_ be extensible to a monad. 08:20:10 > repeat >=> (repeat.(+1)) $ 3 08:20:11 [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,... 08:20:26 but not with the same monad bind 08:20:34 ah 08:20:50 basically join for it is taking the diagonal of a matrix 08:21:13 and that satisfies the monad laws? 08:21:25 but the monad laws may subtly fail because of bottoms if you do that naively 08:21:33 ah 08:21:49 aspect: learn you a haskell for great good. 08:22:40 release the shackles of OOP, er... AOP I guess, based on your name. :P 08:22:43 monqy: i _think_ it works if you require the entire square above and to the left of a diagonal element to be filled in order for that element to be put in the join 08:22:49 i think aspect knows haskell, CakeProphet. 08:22:55 CakeProphet: cutesy-styled tutorials don't turn me on 08:22:59 during my previous experimentations 08:23:03 it's not obnoxiously cute. 08:23:03 oerjan: iirc ZipList is well known to not be a monad, but... 08:23:08 aspect: disable images 08:23:18 Is it a comonad? 08:23:22 aspect: it's not as bad as this one Ruby tutorial I read. 08:23:31 elliott: i have never seen it written up... 08:23:32 elliott: is the writing not cutsey as well? 08:23:43 CakeProphet: note: insulting why's poignant guide will cause me to travel to your house and kill you. 08:23:43 not really. it's mostly informative. 08:23:57 elliott: so i am still suspicious they just haven't defined join properly... 08:24:03 oerjan: heh 08:24:15 elliott: it was an interesting read. but... I mean 08:24:21 the huge monologues were kind of not needed. 08:24:27 no, I don't really know haskell -- certainly not OOP shackled though ... but watching @pl games in here doesn't do a lot to attract me 08:24:49 #esoteric is not really about a marketable face. 08:24:53 elliott: oh. the thing that makes me almost sure it's a monad is because it is nearly isomorphic to (Integer ->) 08:24:59 the Squiggol paper was more obvious 08:25:01 everything here is pointless, no matter what the medium. 08:25:02 well, (Nat ->) 08:25:13 oerjan: except that ZipLists can be finite. 08:25:35 aspect: just like how ioccc makes me hate c 08:26:22 oerjan: nearly isomorphic? 08:26:22 elliott: yes. so it's subtle but i haven't seen a proof that it _must_ break 08:26:29 oerjan: heh 08:26:47 monqy: if all lists involved are infinite, then it is isomorphic 08:26:56 ah 08:27:02 well, I like to see the dark corners of new things early. I gets the hate out of the way 08:27:10 l <-> (l !!) 08:27:16 aspect: pl is a very good obfuscatory / code concisor 08:27:32 *obfuscator 08:28:05 it serves both purposes well. 08:28:57 Send my program of type-level natural numbers to the Cabal or whatever, if you want to do so. It is public domain it is OK to do anything with it, modified or not, etc 08:29:30 can I modify it into a cat program? 08:30:01 CakeProphet: You probably can but it would be better to write your own cat program, since this is a completely different program 08:30:44 oerjan: so anyway, help us make scapegoat changes some itneresting structure :P 08:33:20 aspect: http://pastebin.com/yXJAs7ft here is a program I made in Haskell that outputs an infinite list of palindromes in an alphabet. 08:33:30 tetraphilomorphic streptocobordisms 08:33:32 this will either make you interested or scare you away more perhaps. 08:34:01 no, scares me away more 08:34:10 what's wrong with simple recursive equations 08:34:21 they suck 08:34:23 that's what 08:34:32 they can be rewritten as re-usable combinators. 08:34:32 or let .. in .. rather than where 08:34:40 just syntactic preference. 08:34:46 what's so bad about where 08:34:49 there's let .. in .. as well 08:34:57 it can be used. 08:35:06 monqy: hey, antezepto is still a thing that exists 08:35:07 it reverses the order I'm used to seeing things in 08:35:16 elliott: I forgot about antezepto 08:35:20 where has the nice property of not suggesting the definitions are evaluated first 08:35:22 elliott: how existing is it 08:35:38 monqy: i have almost three hundred lines of haskell purporting to be it here... 08:35:48 does it work 08:35:53 dunno, let's find out 08:36:05 apparently 08:36:08 oerjan: wow, implications about evluation order are considered a risk in haskell? : 08:37:27 monqy: i am thinking... maybe i do not need the mutability that is in this code... 08:37:29 (I probably do) 08:37:34 (I think you can't define variables without it) 08:37:35 expressions are lazily evaluated, so there isn't really a definite order of evaluation 08:37:48 CakeProphet: s/lazily/non-strictly/. 08:38:04 aspect: sometimes it's more natural/readable to have the defintions first...sometimes it isn't 08:38:24 aspect: a lot of the time I want the high-level picture first with the implementation details and helper functions after it 08:38:34 let...in is never idiomatic in haskell imo 08:38:57 I use let...in for pattern-matching chains 08:39:03 monqy: there are idioms. I never read academic papers top to bottom, for example, often the same is true of programs 08:39:10 perhaps the ones I'm used to don't work here though 08:39:28 like having operators that resemble what people might have seen elsewhere in the world and are less than three symbols long :) 08:39:32 > let y = undefined; x = f x in x 08:39:32 Ambiguous type variable `a' in the constraints: 08:39:33 `GHC.Show.Show a' 08:39:33 a... 08:39:39 > let y = undefined; x = f x in x :: Expr 08:39:40 f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (... 08:40:00 aspect: "people can skip around" is not reason to say you shouldn't strive to make things natural/sensible/easy to read and understand 08:40:31 it'd be awful to have a bunch of helper functions before the real stuff 08:40:47 I could probably rewrite palindromes to be more readable but I prefer the concise code. 08:40:57 monqy: see: Python 08:41:03 well, sometimes. 08:41:10 CakeProphet: a pity it's not very concise :( 08:41:17 monqy: could it be more concise? 08:41:21 perhaps! 08:42:09 @pl joinMirrors x y = (x++y) : map ((x++).(:y)) alphabet 08:42:09 joinMirrors = ap (ap . ((:) .) . (++)) (flip flip alphabet . (map .) . (. flip (:)) . (.) . (++)) 08:42:14 we're not friends anymore pl 08:42:18 ;_; 08:42:55 I think that's the best mixture of concise/readable that I can think of. 08:43:03 I had joinMirrors as a lambda originally 08:43:57 > let palindromes alphabet = fmap (join $ (++) . reverse) ([0..] >>= (`replicateM` alphabet)) in palindromes "abc" 08:43:59 ["","aa","bb","cc","aaaa","baab","caac","abba","bbbb","cbbc","acca","bccb",... 08:44:05 -!- zzo38 has left. 08:44:07 oops 08:44:16 that's only evens 08:44:24 yep. 08:45:03 that's close to what I had originally though. 08:45:11 and then I realized I also needed the odd ones. 08:45:18 which is what joinMirrors does. 08:47:44 @unpl (++) . reverse 08:47:44 (\ c -> (++) (reverse c)) 08:48:01 hmmm, I could use . instead of ap 08:48:07 I think. 08:48:39 @unpl flip ap (++) reverse 08:48:40 (reverse >>= \ e -> (++) >>= \ d -> return (e d)) 08:48:50 @unpl flip <*> (++) reverse 08:48:51 ((\ a b c -> a c b) <*> ((++) reverse)) 08:48:55 .. 08:51:35 hm? 08:52:46 nothing. 08:55:18 monqy: bahahaha you cannot make my code better. 08:55:32 hm???? 08:55:40 I challenge you. 08:55:42 to do it. 08:56:43 ?pl join (f `fmap` x `ap` y) 08:56:43 join (liftM2 f x y) 08:56:47 oerjan: he;lp 08:57:07 ?pl join (f `fmap` x `ap` return y) 08:57:07 join (liftM2 f x (return y)) 08:57:27 idiom brackest time??? 08:58:40 elliott: also, a delayed reply to your s/// above: is there a difference between lazy and non-strict 08:58:46 +? 08:58:47 yes. 08:58:55 call by name is non-strict, for instance. 08:59:18 so Haskell is not call-by-need? 08:59:30 no. GHC is. 08:59:42 GHC is specifically call-by-need with sharing. 08:59:49 oerjan: (with sharing isn't implicit there, right?) 09:00:10 so the Haskell Report only specifies non-strict? 09:00:13 call-by-need implies sharing, i think 09:00:26 otherwise it's just call-by-name 09:00:28 call-by-need = lazy evaluation 09:00:32 monqy: so i sketched up... what i think might be a very zepto... thing... 09:00:37 which implies sharing. 09:00:41 ooh? 09:01:11 monqy: it... may SHOCK you... 09:01:23 http://sprunge.us/WheA 09:02:17 zepto 09:02:29 monqy: oh good... i thought... you would reject it... 09:02:32 for its SYNTAX... 09:02:38 -!- BeholdMyGlory has quit (Ping timeout: 258 seconds). 09:02:41 but the rules... are simple... (I think...) 09:02:52 > forM [tail, id] (join . (++) . reverse .) =<< (`replicateM` alphabet) =<< [1..] 09:02:53 The operator `L..' [infixr 9] of a section 09:02:53 must have lower precedence ... 09:02:56 although a weird thing there is that => isn't actually done as abinary operator... 09:03:03 while + and times are 09:03:05 the only part of the syntax I'm iffy about is the special syntax for cons 09:03:05 argh wrong way 09:03:13 > forM [tail, id] ((join . (++) . reverse) .) =<< (`replicateM` alphabet) =<< [1..] 09:03:14 Not in scope: `alphabet' 09:03:21 monqy: it's actually special syntax for (list ...) 09:03:24 > forM [tail, id] ((join . (++) . reverse) .) =<< (`replicateM` "abcd") =<< [1..] 09:03:26 Occurs check: cannot construct the infinite type: m = (->) (m a) 09:03:26 or are all constructors in [] 09:03:31 gah! 09:03:33 so basically what I'm learning from this class is that software engineering is a neat way to waste a lot of time not writing code. 09:03:33 monqy: http://arcanesentiment.blogspot.com/2011/08/why-use-keywords-as-symbols.html inspired me a bit 09:03:37 monqy: basically quote isn't very usable 09:03:46 you just want a constructor, and all _sub_expression arguments to be evaluated, usually 09:03:55 so [(+ 9 9)] is (list (+ 9 9)) 09:04:11 [a b c . xs] is (lolreplacenilwith xs (list a b c)) 09:04:59 -!- BeholdMyGlory has joined. 09:05:04 :t forM [tail, id] ((join . (++) . reverse) .) 09:05:05 Occurs check: cannot construct the infinite type: m = (->) (m a) 09:05:05 Probable cause: `++' is applied to too few arguments 09:05:05 In the first argument of `(.)', namely `(++)' 09:05:08 oh so lists aren't constructed normally? 09:05:59 monqy: eh? 09:06:07 the point is that [...] isn't '(...) 09:06:09 i tried describing what i meant but that didn't work 09:06:11 it's more like (list ...) 09:06:15 all sub-expressions are evaluated 09:06:25 my gripe was a bit different... 09:06:27 than that 09:06:28 go on then 09:06:43 :t forM [tail, id] ((ap . (++) . reverse) .) 09:06:44 Couldn't match expected type `a -> b' against inferred type `[a1]' 09:06:44 In the second argument of `(.)', namely `reverse' 09:06:44 In the second argument of `(.)', namely `(++) . reverse' 09:07:30 well i guess it depends on how zepto handles its analogue to haskell data types, which I assumed it has, from the pattern matching 09:07:52 :t forM [tail, id] (ap . (++) . reverse) 09:07:53 Couldn't match expected type `[a] -> [a]' 09:07:53 against inferred type `[a1]' 09:07:53 In the second argument of `(.)', namely `reverse' 09:08:11 monqy: i'm not really decided on data types 09:08:15 ah 09:08:21 monqy: but yes, pattern matching on constructors will work "haskell-style" 09:08:26 :t ((ap . (++) . reverse) .) 09:08:27 Couldn't match expected type `a -> b' against inferred type `[a1]' 09:08:27 In the second argument of `(.)', namely `reverse' 09:08:27 In the second argument of `(.)', namely `(++) . reverse' 09:08:41 :t (((++) . reverse) .) 09:08:42 forall a (f :: * -> *). (Functor f) => f [a] -> f ([a] -> [a]) 09:08:52 monqy: also everything is immutable 09:08:57 then I don't see why (Cons x xs) must be written specially as [x . xs] unless ther'es something really special important about lists 09:09:00 immutability is good 09:09:01 and maybe even typed??? 09:09:09 monqy: look further down 09:09:09 [c '=> e] . rest => 09:09:11 that's list syntax 09:09:14 you can write 09:09:15 def foo 09:09:19 [a b c] => a + b + c 09:09:22 or 09:09:23 def foo 09:09:31 [a b c . rest] => a + b + c + sum rest 09:09:41 [x . xs] is just a special case of one element before the dot 09:10:56 ok...special cases sort of make me sad though...also how is [x . xs] different from a single-element list with a list inside of it, where x is the first element and xs is the rest of the elements 09:11:14 or did i misinterpret 'special case' 09:11:17 you misinterpreted 09:11:18 i meant that 09:11:19 [x . xs] 09:11:20 :t (ap ((++) . reverse)) 09:11:20 forall a. ([a] -> [a]) -> [a] -> [a] 09:11:22 is NOT SPECIAL SYNTAX 09:11:25 it is just a special case of list syntax 09:11:37 "also how is [x . xs] different from a single-element list with a list inside of it, where x is the first element and xs is the rest of the elements" 09:11:40 because that's not how you write it at all? 09:11:43 show me a scheme where 09:11:44 0 . 9 09:11:47 produces the pair (0 . 9) 09:11:54 :t forM [tail, id] (ap ((++) . reverse)) 09:11:55 forall a. [a] -> [[a]] 09:12:14 > forM [tail, id] (ap ((++) . reverse))) =<< (`replicateM` "abc") =<< [1..] 09:12:15 : parse error on input `)' 09:12:25 > forM [tail, id] (ap ((++) . reverse)) =<< (`replicateM` "abc") =<< [1..] 09:12:27 ["a","aa","b","bb","c","cc","aaa","aaaa","bab","baab","cac","caac","aba","a... 09:12:29 elliott: ??? 09:12:35 monqy: ugh 09:12:42 ugh??? 09:12:46 monqy: what is your complaint? you haven't said anything that makes sense 09:12:47 CakeProphet: \o/ 09:12:48 | 09:12:48 /| 09:13:17 oerjan: I'm not even sure I understand how that works... 09:13:37 what oerjan did looks like what I was working on 09:13:47 but a bit different 09:15:15 monqy: seriously, it sounds to me like you incredibly misunderstand list syntax 09:15:21 do you understand how this might work: 09:15:25 (list 'a 'b 'c) 09:15:25 ? 09:16:22 CakeProphet: lots of -> Monad 09:16:24 oh i see what you were saying. 'special' threw me off. 09:16:35 and then see how this might work 09:16:37 (list 'a 'b 'c . 'd) 09:16:38 oerjan: I'm just bad at composition still :P 09:16:39 then contract 09:16:42 (list 'a . 'd) 09:16:44 ['a . 'd] 09:16:47 but pattern match 09:16:48 [x . xs] 09:17:01 CakeProphet: well you may have noted all the errors i had underway >_< 09:17:25 oerjan: why tail? 09:17:34 monqy: does it make sense now? 09:17:40 (as i usually use "special case" to mean a case that's handled specially, and just "case" when it's a single normally-handled case) 09:17:44 i think so? 09:17:47 good :P 09:17:59 CakeProphet: to get the odd ones by removing the first element of what's appended 09:18:22 ....huh. okay. 09:18:28 I noticed yours has a different ordering so I guess that's why. 09:18:59 actually there is one thing that's throwing me off 09:19:12 about lists 09:19:30 monqy: go on 09:19:45 in map you have [f x . map f xs] but elsewhere you seem to use spaces to separate list elements? 09:20:07 I believe . is like : in Haskell and space is like , sort of 09:20:09 hm yes. that's an error 09:20:14 should be [(f x) . map f xs] 09:20:17 CakeProphet: you're wrong 09:20:20 (the spaces don't matter after a . for obvious reasons) 09:20:49 monqy: incidentally I think pairs are isomorphic to size-two vectors; [a . b . c . d] making a size-four vector 09:20:53 not decided on that though 09:22:29 CakeProphet: space is only like , if there are no .'s. if there is a . then both it and the spaces are like : 09:22:59 oerjan: wat 09:23:01 oh and also the bracketing changes 09:23:19 (a b c) -- [a,b,c] but (a b . c) -- a : b : c 09:23:39 (a b c) in a pattern is like (a:b:c:_) I think? 09:23:51 maybe I'm not really paying attention. :P 09:23:53 in when, is | alternative syntax for putting the pattern on the next line? And in cond, is nothing as a pattern the same as []? 09:24:05 i don't know lisp/scheme patterns, if they even have any 09:24:19 standard that is. 09:25:06 monqy: | is just like dollar sign in haskell 09:25:07 basically 09:25:07 -!- GreaseMonkey has quit (Quit: The Other Game). 09:25:08 f | x 09:25:09 is 09:25:10 f 09:25:10 x 09:25:15 except that 09:25:16 f | x 09:25:17 y 09:25:18 is 09:25:19 f 09:25:21 x 09:25:22 y 09:25:24 you get the idea 09:25:33 it fakes an additional layer of nesting/indentation 09:25:36 and no, nothing is not the same as [] 09:25:40 nothing handles the 0-argument case 09:26:07 oh the other case isn't matching on lists then I guess 09:26:24 that was part of what threw me off about list syntax and then I forgot about it 09:27:20 it's matching on a list, followed by other arguments 09:27:27 help make dupdog TC 09:28:01 my professor just said that object code is a living thing you can date. 09:28:50 elliott: I meant the matching on arguments. So I guess it's like list syntax but without brackets? 09:28:56 elliott: the syntax, I mean 09:28:58 CakeProphet: what 09:29:01 CakeProphet: tell your professor not to bring his ...preferences... into the class. 09:29:06 monqy: in that all pattern matching is like list pattern matching, yse. 09:29:08 yes. 09:29:22 ah, that's nice and good 09:29:44 she was talking about "artifacts" in software engineering. an artifact being something that's produced as the result of an "activity". she said object code is a tangible, living thing 09:29:51 and then said you can date, as in.... put a date on it. 09:29:56 but out of context it is quite hilarious. 09:30:17 I'm not sure why she said living though. 09:30:58 she's just preferring you for your robot overlords 09:31:01 elliott: what does eval do? 09:31:07 basically this is a terrible class and I'm probably going to fail it. 09:31:53 I do not understand this class 09:32:34 and I do not understand what she was trying to say 09:32:38 it's basically a class about all of the boring job-related planning stuff that isn't programming. 09:32:56 most of it is meaningless to me, as well. 09:32:57 yucke 09:32:58 monqy: what do you think it does 09:33:08 elliott: evals??? who knmows..... 09:33:14 I bet it evals somethingt. 09:34:29 my guess as to what it does doesn't jive with it being in cond 09:36:02 here are some questions I have to answer: 1. What is a RFP? 2. Explain a WBS 3. Explain a forever client 4. Name two informational data shown in a PERT 5. Name two informational data shown in a GANT 6. What do you understand about planning activities? 09:36:07 meaningless. acronym. meltdown. 09:36:10 monqy: note how cond is defined with fexpr 09:36:14 well defexpr but 09:36:37 oh fexprs 09:36:49 I don't know much about those :( 09:37:03 monqy: exactly like a function, but gets called by name 09:37:09 why can't I just vomit code and not worry about this stuff? :( 09:37:09 I went through one of those "software development" courses too; it was mandatory for the telecommunications minor I accidentally got. 09:37:10 as in, all parameters are the AST, not their evaluated form 09:37:21 fizzie: mandatory for my CS major. 09:37:27 things you get: non-confusing macro declarations, hygiene for free, no abstraction leak of compile vs. runtime 09:38:38 so why is e the only thing that gets evaled? im confue 09:38:59 why not? 09:39:09 do you _know_ what cond does? 09:39:13 CakeProphet: It was notable for asking several questions of the form "[a question], according to Mr X?" in the exam; where Mr X was one of the half a dozen visiting lecturers (mostly) from the Industry. 09:39:14 maybe not 09:39:29 I thought I knew what it did though..... 09:39:51 So that you couldn't give a justified answer; you just had to know what $some_random_dude thinks of it. 09:40:33 :( 09:40:51 -!- kmc has quit (Quit: Leaving). 09:44:58 "Documentation and evaluation of software architectures according to Mr. Juha Savolainen." 09:45:07 I see that latter exams on that course have been slightly more sensible. 09:45:53 monqy: (cond (a => b) (c => d)) === (if a b (if c d)) 09:45:57 ....she never explains what a request for proposal is... how am I suppose to answer this question. 09:46:10 TO WIKIPEDIA 09:46:14 -!- DH____ has quit (Read error: Connection reset by peer). 09:46:20 elliott: that's what I thought. recently I realized I might have been thinking of eval incorrectly though 09:46:24 -!- DH____ has joined. 09:46:27 eval is just eval 09:46:29 (eval 'x) === x 09:46:34 (eval '(print 99)) prints 99 09:46:37 It's when you request that someone makes a proposal. 09:46:48 elliott: where by realized I mean I always had the suspicion but I realized another thing it could be--oh I had the right idea about it originalkly???? 09:46:54 now im confused again 09:47:32 CakeProphet: is it not when you request that someone makes a proposal? 09:47:45 monqy: do you understand fexprs? 09:47:50 monqy: ok let me put it this way 09:47:52 well, I assumed she would want something more specific. 09:47:53 02:37:58 < monqy> oh fexprs 09:47:53 02:38:10 < monqy> I don't know much about those :( 09:47:57 monqy: if we used "e" directly 09:47:58 rather than eval e 09:47:59 then 09:48:06 (cond (truething => (print 99)) 09:48:07 would return the list 09:48:08 (print 99) 09:48:10 rather than printing 99 09:48:18 because 09:48:22 (cond (truething => (print 99)) 09:48:25 passes the LIST 09:48:28 (truething => (print 99)) 09:48:29 to cond 09:48:34 _no_ evaluation of arguments is done 09:48:40 right i knew that much 09:49:16 so why do you think eval should not be called? 09:49:23 i mean 09:49:27 why do you not understand why eval is called? 09:49:30 A work breakdown structure (WBS) in project management and systems engineering, is a deliverable oriented decomposition of a project into smaller components. 09:49:33 uuuuuuugh 09:49:38 note that _everything_ is runtime, there is no need to recourse to any macro-related thinking 09:49:43 can I please just write a bunch of code instead of doing this stuff? 09:49:43 right right 09:49:47 and indeed lambdas are totally implementable on top of fexprs, you just evaluate every arg and pass it on 09:51:10 elliott: I'm confused because eval is not used in any other instance in which values are introduced 09:51:22 monqy: cond is the only fexpr in that file. 09:51:25 the rest are all functions. 09:51:33 except for when? 09:51:48 you only need to eval things that are quoted. 09:51:49 also, is c not a value? 09:51:58 otherwise it is already evaluated. 09:52:03 except for when? 09:52:04 erm right 09:52:05 CakeProphet: are you paying attention 09:52:07 no 09:52:10 oh hm i may have fucked up when 09:52:26 monqy: ok yeah i apologise deeply 09:52:28 defexpr when | cond . body => 09:52:29 if cond 09:52:29 body 09:52:29 #void 09:52:29 should be 09:52:31 defexpr when | cond . body => 09:52:33 if cond 09:52:35 eval body 09:52:37 #void 09:52:45 ah ok 09:53:14 and if handles eval on cond? or am I going the wrong way here 09:53:30 oh oops 09:53:36 defexpr when | cond . body => 09:53:36 if (eval cond) 09:53:37 eval body 09:53:37 #void 09:53:38 i'm not very awake :) 09:53:43 ok it all makes sense now 09:53:52 yeah this is all my fault :( sorry for being impatient 09:54:09 even cond is broken 09:54:11 missing eval on the c 09:54:12 eugh 09:54:29 -!- Jafet has joined. 09:56:23 Haskell > Scheme 09:56:36 except when it isn't 09:56:39 If ordered by size. 09:56:50 hehehe 09:56:56 eh eh eh 09:57:00 bleigh! 09:57:10 * CakeProphet covers his face with a cape. 09:57:16 * CakeProphet turns into a bat and disappears. 09:57:28 bye 09:58:15 my professor just said depictiated. 09:59:34 > "Haskell" > "Scheme" 09:59:34 False 09:59:35 training for the work environment 09:59:44 Even the Haskell-bot agrees. 10:00:04 (That it's not.) 10:00:15 don't forget to dequote those. 10:00:24 otherwise you're just comparing strings. 10:01:12 http://www.ratemyprofessors.com/ShowRatings.jsp?tid=406506 "I can depictiate her obiquous senergy." bahahahahaha 10:01:50 !haskell data Language=Haskell|Scheme deriving(Eq,Ord);main=print$Haskell>Scheme 10:01:57 False 10:02:37 "I'm not a schemer. I try to show the schemers how pathetic their attempts to control things really are." 10:03:48 CakeProphet: good reviews 10:03:55 CakeProphet: especially that one 10:04:56 CakeProphet: she doesn't sound like such a good professor 10:05:02 I am receiving reverse education. 10:05:20 I've only had maybe 3 good professors so far. 10:05:55 I don't think there's any ratings for our school anywhere. :/ 10:06:03 my discrete math teacher was fuckign amazing. I will be taking him again for advanced mathematics and topology 10:06:14 Aha, the fizzie RETURNS. 10:06:17 oh no, 10:06:24 Oh no. 10:06:40 thanks to Dr. Griffiths I can now count things like mad. 10:06:42 10:06:44 Oh, look at the time, I think I need to be going, bye. 10:06:54 Going, uh, somewhere. 10:06:56 Over there. 10:06:57 Bye. 10:07:55 fizzie: Hi. 10:08:02 http://www.math.upenn.edu/~wilf/DownldGF.html <- that's a nice book if you want to pretend you're counting things. 10:08:08 @let subset x s = filterM (const [True, False]) s `elem` x 10:08:09 Defined. 10:08:24 :t subset 10:08:24 forall a. (Eq a) => [[[a]]] -> [a] -> Bool 10:08:28 ....no 10:08:34 @undefine 10:08:44 fizzie: SO ABOUT DEM MCMAPS 10:08:54 (Also "generatingfunctionology" is an awesome name.) 10:08:58 generatingfunctionology 10:09:01 yes 10:09:05 @let subset x s = x `elem` filterM (const [True, False]) s 10:09:05 Defined. 10:09:07 :t subset 10:09:08 forall a. (Eq a) => [a] -> [a] -> Bool 10:09:18 > subset [2,3] [1,2,3] 10:09:19 True 10:09:57 > subset [2,1] [1,2,3] -- *whistles innocently* 10:09:58 False 10:10:08 OH WHAT NOW? 10:10:10 hehehehehe 10:10:19 what does it mean to be frend 10:10:26 help list is not set? 10:10:58 > let subset x s = all (`elem` s) x in subset [2,1] [1,2,3] 10:10:58 True 10:11:12 not as elegunt 10:11:17 more elegant 10:11:20 noep 10:11:27 oyurs is disgusteing 10:11:43 better mathemathecally 10:11:44 ?pl \x s -> all (`elem` s) x 10:11:44 flip (all . flip elem) 10:11:44 mine even reads naturally...... 10:12:45 power sets are more powerful 10:13:53 > let subset x s = x `elem` (filterM (const [True, False]) . nub . permutations s) in subset [2,1] [1,2,3] 10:13:54 No instance for (GHC.Num.Num [a]) 10:13:54 arising from the literal `2' at :( 10:14:24 > let subset x s = x `elem` (filterM (const [True, False]) . nub . permutations $ s) in subset [2,1] [1,2,3] 10:14:25 No instance for (GHC.Num.Num [a]) 10:14:25 arising from the literal `2' at :( 10:14:59 man that sure is a bad idea. :P 10:15:06 instead of nubbing permuations......what if you did......conversitons to sets.......and maybe even back to lists again (but this time nubbed and sorted).......what then......... 10:15:11 :(nope 10:15:15 ;_; 10:15:33 > let subset x s = x `elem` (filterM (const [True, False]) s =<< nub . permutations) in subset [2,1] [1,2,3] 10:15:34 Couldn't match expected type `a -> GHC.Bool.Bool' 10:15:34 against inferred ... 10:15:37 baaaah 10:15:40 if you want it for Eq not Ord just go with my definition it's the best (thumbs up) 10:15:44 > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1,2,3] 10:15:46 True 10:15:48 weeee 10:16:08 mine is more efficient though. 10:16:24 good one 10:16:41 nub . permutations: efficient function for efficient people 10:16:59 filterM (const [True, False]) and >>= for lists are all very efficient. 10:17:05 > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1,2,3..1000] 10:17:06 : parse error on input `..' 10:17:11 > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1..1000] 10:17:15 mueval-core: Time limit exceeded 10:17:21 but beyond that it's a mess of inefficiency 10:17:24 what? nonbelievable!? 10:17:45 > let subset x s = all (`elem` s) x in subset [2,1] [1..1000] 10:17:45 True 10:17:48 8) 10:18:28 > 2 ^ 1000 10:18:28 107150860718626732094842504906000181056140481170553360744375038837035105112... 10:18:39 ...and that's not counting the permutations. 10:19:40 that's just the elements of the power set of [1..1000] 10:21:25 Does anyone know the intricacies of exec? 10:21:55 Does any man really know that. A question for the ages. 10:22:07 A generating function is a clothesline on which we hang up a sequence 10:22:07 of numbers for display. 10:22:17 fizzie: Good question. 10:22:27 Really I'm just trying to figure out how easy it is to implement an //upgrade in mcmap. 10:22:28 i am laughing too much 10:22:29 > product [1..1000] 10:22:30 402387260077093773543702433923003985719374864210714632543799910429938512398... 10:23:24 The "exec without closing sockets" is a nifty trick, but are you absolutely sure people's mcmap sessions are really that long-running? 10:23:34 > 2 ^ (product [1..1000]) 10:23:52 thread killed 10:24:19 fizzie: Well, no. But let's face it, it'll require a couple dozen lines of code at most, and it is _so_ _cool_. 10:24:35 fizzie: I mean, as an mcmap developer, I would very much like to be able to test my changes without restarting and reconnecting. :p 10:24:46 I suspect people might want to test their ~/.mcmap/init.scm changes just as easily. 10:24:49 'Slike emacs. 10:25:14 Yesssss.... but I don't think reloading the Scheme config necessitates a real restart, does it? 10:25:39 surely I must have some kind of talent for writing non-trivially inefficient code. 10:25:52 CakeProphet: what 10:26:01 fizzie: Well, no, but (a) having removed variables and the like staying around, and things like it re-registering hooks, is totally annoying. And re-initialising the Scheme interpreter from scratch is not really a thing that's possible, to my knowledge. Plus, (b), mcmap "starts" so quickly that an exec + jump into the main code is both cleaner and perfectly fast. 10:26:27 I know Windows doesn't have fork, but does it have the right kind of exec? 10:26:28 monqy: O(2^n!) for list subset. 10:26:45 well, worst case. 10:27:07 elliott: It'll forget all the stored world-tiles until someone does the regionfile persistence right; then you don't actually see the map until you move real far, since the server won't resend the tiles. 10:27:18 CakeProphet: by non-trivially inefficient do you mean "inefficient by a nontrivial amount" or "inefficient in a manner that is not trivial in some way (please specify way)" 10:27:24 Our university logo is a randomly selected from the three alternatives A! A? A" (and randomly of three alternative colors for the punctuation) -- some people have posed the question that since A! (factorial of A) equals A" (the second derivative of A), what is A? 10:27:39 http://users.ics.tkk.fi/htkallas/aalto.jpg -- this is unfortunately only in Finnish. 10:27:41 fizzie: Well, the regionfile persistence is at least half-done, isn't it? 10:27:43 monqy: second, as in I'm not just adding stupid computation steps that are not directly related to the goal. 10:28:02 And it's not like mcmap has much other state that you wouldn't _want_ to be reset. 10:28:25 elliott: Current map mode! 10:28:45 fizzie: So that's one command-line argument. :p 10:28:51 Current Y-level for the non-following cross-section map. 10:28:58 Current lights-on/off/night mode. 10:29:04 These are all Important Things. 10:29:09 fizzie: That's all "map shit"; it can be packed up into like three arguments. 10:29:29 -!- oerjan has quit (Quit: Later). 10:29:41 Also the current window size and position. 10:29:51 (Assuming you've dragged it somewhere.) 10:29:59 That... is not really problematic to lose. :p 10:30:05 fizzie: Obviously a "proper" state-sending mechanism would be nicer, but I don't see you writing that. :P 10:30:14 It makes the reload non-seamless, that's all it is. 10:30:32 Current "it's been moved to the floating layer from the tiled layer" state that you can't actually persist in any way from within the program. 10:30:59 (Well, except by keeping the window open, but that doesn't sound doable.) 10:31:51 Well, if windows were sockets... 10:32:38 The X connection is a socket; it's just that I don't think SDL makes keeping it alive a possibility. 10:33:10 We could try and hide the fact that we're "quitting" from SDL. 10:33:14 Then memory-write-in the fd. 10:34:48 I like how you can't actually get at the sockets from outside of the proxy. 10:34:50 the sun never sets on the haskell british empire. 10:34:55 ":?> 10:34:55 1 10:35:31 doesn't have the same ring to it 10:37:38 Wow, that crap compiled cleanly /first time/? 10:37:48 fizzie: Inca-dentistry (god I love that), irssi does this same hacky stuff. 10:37:50 don't be deceived. 10:38:00 fizzie: Try /upgrade. 10:38:02 elliott: I know, I know. 10:38:03 "Upgrade irssi to new version on-the-fly without disconnecting from server, so other people won't even notice you quit from IRC. This ONLY executes the new binary, it does NOT download/compile/whatever irssi." 10:38:18 elliott: It loses the scrollback buffer state too. :p 10:38:23 (There's a perl script to fix that.) 10:38:27 hahaha. 10:38:34 Maybe we need a Scheme script to persist window crap. 10:38:42 Have I mentioned how easy this would be with @? 10:38:45 no perl is the only tool for hacks. 10:39:30 -!- derdon has joined. 10:40:10 elliott: just use your Haskell perl interpreter thing? or wait, this is all scheme right? 10:40:28 wh 10:40:51 write a perl interpreter macro. 10:41:03 yuore uppsetting my CakeProphet 10:41:11 int err = execl(argv0, argv0, "--upgrade", g_strdup_printf("%d", sock_cli), g_strdup_printf("%d", sock_srv), NULL); 10:41:13 CakeProphet: mcmap is in c 10:41:13 elliott: As for Windows, no, I don't think it has the proper sort of exec; it's all by CreateProcess there. But at least for files you can specify SECURITY_ATTRIBUTES that let the handle be inherited by child processes; presumably that could be possible for sockets *somehow*. 10:41:14 fizzie: Look at my production-quality code. 10:41:28 CakeProphet: its scriptextended with guile scheme 10:41:40 11:42:14 [DIED] Failed to set video mode: Invalid width or height 10:41:42 Well, it's a start. 10:41:53 elliott: At least do (char *)NULL for the final value. (The absolutely most important problem!) 10:42:37 (Unless vararg function argument promotion thing made void * the right thing; not absolutely sure here.) 10:42:45 fizzie: I, um, eh? 10:42:56 11:43:31 [DIED] Unknown packet id: 0x5a 10:43:00 fizzie: Haha, we have desync issues. 10:43:18 OK, so the proxies need to be told "finish a packet, then hang". 10:43:27 VOLATILE BOOL TIME 10:43:38 volatile bool wanna_hang; 10:43:40 im matuer 10:45:10 a cleverly named variable is a wonderful thing. 10:45:21 fizzie: Holy crap, it actually kind of works. 10:45:28 Scratch that: entirely. 10:45:29 Oh, it is even explicitly defined that you can pass a void * and read it with va_arg(char *); but do cast the NULL to (char*) anyway, because "#define NULL 0" is legal, and then it'd get passed as an integer. 10:45:44 booleans, the best concurrency construct. 10:45:47 fizzie: Dude. Dude, it works. 10:45:54 WANNA TRY? 10:46:03 SO THE BEST 10:46:14 Oh, it quite thoroughly messes up the console though. 10:46:47 elliott: Not at work. Anyway, I'm pretty sure there are cases where it may fail. In particular, there are those buffers in packet_state_t; you'd really need to handle those for propriety. 10:47:00 Clearly mcmap is mission critical to your work, you know. 10:47:11 And yes, there are... a great many issues as it currently stands. :p 10:47:17 But, like, it works. 10:47:40 why scheme out of curiosity? 10:47:42 The console hack is such a hack I'm not surprised it breaks. 10:47:48 CakeProphet: As opposed to? 10:47:57 -shrug- nothing in particular. 10:48:05 fizzie: When mcmap was failing before, it dumped me to my terminal with all the raw stuff still on. That was fun. :p 10:48:34 CakeProphet: I evaluated Lua, Ruby, Python, Perl, Haskell, MiniScheme, rep, nasal, and god there must have been others. 10:48:41 Even various JavaScripts. 10:49:16 Problems with Lua: The C API is certainly convenient, but also it's quite ugly; manual stack machine munging. Also, I have this quite strong but yet somehow apathetic dislike of the language, and seemingly so does fizzie too. 10:49:20 Ruby: No. Just no. 10:49:27 Python: I don't like it, and IIRC Vorpal said the C API wasn't that nice. 10:49:29 Perl: No. 10:49:35 lol 10:49:44 (C API is unbelievably horrid, language also.) 10:49:45 Perl doesn't even qualify for a "just no", I see. 10:49:53 fizzie: Have you _seen_ XS? 10:49:54 Haskell: Just doesn't embed. At least not GHC. At all. 10:50:07 if I recall, XS is better than the cpython API 10:50:12 MiniScheme: Really exposes less than I'd like. Dunno about the portability. Not so really modern or maintained etc. Probably not a very good Scheme. 10:50:19 elliott: Yes, I have. I've also done a bit of Inline::C, which has to use some of the same stuff. 10:50:21 rep: It was okay. But quite Unix-only. 10:50:30 nasal: Practically abandoned, bad, didn't like it, nobody knows it, beh. 10:50:31 CakeProphet: If that's true, the cpython api must be something quite horrible. 10:50:40 JavaScripts: Don't like the language; C API was either awkward, or non-existent (Veight is C++ only) 10:51:07 Inline_Stack_Push(sv_2mortal(retval)); <- "what." 10:51:14 CakeProphet: Whereas Guile has a nice C API, is a pretty good, well-maintained, performant Scheme with a large collection of libraries, which constitutes a nice language, and yeah, it's a nice API. 10:51:18 you have to maintain reference counts manually for pythons api I believe. Though you may need to do this for perl as well, but I don't recall seeing anything about it. 10:51:34 Wikipedia: Operations on volatile variables are not atomic, nor do they establish a proper happens-before relationship for threading. This is according to the relevant standards (C, C++, POSIX, WIN32), and this is the matter of fact for the vast majority of current implementations. The volatile keyword is basically worthless as a portable threading construct. 10:51:35 Plus being the "official" extension language of GNU, despite its not high use for that, it's really quite thoroughly focused on making things nice on the C coders. 10:51:41 Also it supposedly even builds on Windows. 10:51:55 Uses pthreads for threads though; but there's pthreads for Windows; but who knows if that'll interoperate; but we'll see. 10:52:09 CakeProphet: You don't necessarily have to "maintain" them manually, but you certainly have to think about them all the time unless you want to leak like a sieve, or have values disappear on you. There's quite a lot of values you need to explicitly make "mortal". 10:52:22 The autogenerated XS glue does do *some* of that stuff automatically though. 10:53:02 ...whereas Guile uses Boehm GC, so all you have to do is add scm_remember_upto_here_1(smob) if you extract the data from a smob but don't later reference it. :) 10:54:53 fizzie: You know, it kind of would be nice if mcmap could keep a connection for you... 10:54:58 (re: long-runningness.) 10:55:05 What, a minecraft bouncer? 10:55:06 Minecraft is quite crashy, after all. 10:55:16 fizzie: I'm just sayin'... it wouldn't be much cod e:P 10:55:17 code :P 10:55:19 did you consider Erlang? :D 10:55:27 CakeProphet: To /embed/? 10:55:31 It's as unembeddable as GHC. 10:55:31 That would mean actually handling the login stuff. Okay, it's not *that* much code. 10:55:38 fizzie: Not really? 10:55:41 Just drop it from the client. 10:55:48 On the server, you just need to keepalive, keepalive, pong, blah. 10:55:55 elliott: You can't just "drop it", you have to respond to the client so that it continues. 10:56:00 Well, OK. 10:56:34 Though I guess it's mostly just replaying the packets the server sent. 10:58:00 fizzie: In case you're wondering, yes, my goal is to make the name "mcmap" as inaccurate as I possibly can. 10:58:18 Also the client will then do a spurious http://www.minecraft.net/game/joinserver.jsp GET (for which the server won't ever do the corresponding http://www.minecraft.net/game/checkserver.jsp GET), but I guess that probably won't hurt. 10:58:32 lol, DRM 10:59:16 I often find myself wanting emacs key combinations when in other editors/IDEs 10:59:44 OSX has global Ctrl+A/Ctrl+E, IIRC you can make Gtk have htem too 10:59:49 CakeProphet: Re the volatile quote, emphasis on "portable". mcmap's approach to portability is a bit peculiar; on one hand there's these huge unportable hacks, while on the other there's code to manually parse IEEE-754 floats/doubles in case you're on a non-IEEE-float system. 11:00:13 fizzie: Basically it's literally designed for the 90s. 11:00:38 Everyone has weirdo IRIX boxes and "oh, my sun /usr/ucb/cc is broken" but nobody bats an eye at ... interesting approaches to concurrency. 11:00:45 elliott: that's interesting. I can just use home and end for C-a and C-e though. But things like c-k and c-space are quite convenient. 11:00:53 IIRC you can get those too. 11:00:57 Well, C-k at least. 11:01:21 gotos are a little awkward though... 11:01:38 (goto line number that is) 11:02:27 [numeric arg] M-g M-g 11:02:40 I think I told MonoDevelop (when trying it out) to use Emacs-style keybindings. That made it do all kinds of "C-x (C-)s" stuff for saving, but on the other hand obviously it wasn't a "real" Emacs, so it felt like some sort of misshapen hybrid. 11:03:26 I use "M-g M-g [enter the number in the prompt]" always. 11:03:35 oh.... I didn't know that was an option. 11:03:41 that makes way more sense. :P 11:04:00 are there any other M-g commands? 11:04:26 As for the double-g, I just keep mentally saying "go! go! go!" for that. I don't recall any of the other uses of M-g, but I'm sure there are some. 11:04:43 fizzie: At least admire my diff: http://sprunge.us/bRGT 11:05:13 it took me about a week before I knew what select-all was. :P 11:06:39 I thought I might regret learning Emacs but it's been quite helpful because a lot of unix tools use similar commands. 11:06:57 elliott: usleep(500000) ooh the prettiest. Anyway, I think it would be polite to tell SDL to shut things down right before the execl; it's not going to run any of its atexit handlers and such. (Also shouldn't those common.h things have extern + definitions somewhere?) 11:07:11 fizzie: You realise this was a proof-of-concept? :-P 11:07:22 :PPPPPPPPPPPPPPPPPPPPP 11:07:26 Yes, but that's no reason not to point things out. 11:07:38 Well, yes. 11:07:49 CakeProphet: hi 11:07:56 That bouncing around in main is the funny. 11:08:00 CakeProphet: what is wrong with your face 11:08:10 too many tongues. 11:08:17 oh no 11:08:35 It's a hop and a skip and what is that a for (;;) there why doesn't it just "return;"? 11:09:09 fizzie: Um because that isn't hanging? 11:09:16 :p 11:09:46 Well, uh, I guess it's technically not, but... why would it need to busyloop in a circle instead of just stopping? 11:09:55 Because I wasn't thinking? 11:10:00 I guess the variable name makes more sense that way, that much is true. 11:10:18 fizzie: I think I might include all the original command-line arguments so that it can parse window size and all. 11:10:22 That would also avoid a goto. 11:10:43 goto label5; 11:10:53 * CakeProphet is downloading all of the text logs so that he can count the occurences of :P and :-P 11:11:03 Using rsync? 11:11:05 ...no. 11:11:09 using wget and grep. 11:11:14 Wget of where? 11:11:18 the... logs. 11:11:20 If codu, don't. 11:11:24 why? 11:11:26 You're meant to use rsync instead. 11:11:29 Gregor will get mad. 11:11:30 why? 11:11:34 why? 11:11:37 Type !logs and get the command. 11:11:41 !logs 11:11:51 >_> 11:11:56 What? 11:11:59 perhaps I am stealing all the bandwidth. 11:12:04 with my massive wget. 11:12:10 yes that must be it. 11:12:10 It's like fifty megs, so yeah. 11:12:16 CakeProphet: It comes in as a notice, you moron. 11:13:47 uh that didn't download anything. 11:13:53 you did it wrong 11:14:14 ah there we go. 11:14:21 ah but this includes the raws I didn't want those. 11:14:25 but I guess it'll be faster due to compression. 11:15:28 I am a tool and just copypaste commands, I didn't realize the source directory was left out. :P 11:16:57 -!- sebbu2 has changed nick to sebbu. 11:19:10 oh hey look rsync has an --include 11:19:12 too late. 11:19:43 FEE FI FO FUM, I SMELL THE BLOOD OF SOMEBODY WHO TRIED TO USE WGET TO DOWNLOAD ALL THE LOGS INSTEAD OF RSYNC 11:20:11 Gregor: like I was just supposed to know. 11:20:18 you could like, I dunno, put it on the page? 11:20:26 Nope 11:20:31 It's a sekrit™. 11:20:39 "dont wget please" - logs page 11:20:45 "theres a better way" - logs page 11:20:55 "but its a sekrit™" - logs page 11:20:56 "But I won't tell you what that is" - logs page 11:20:58 :P 11:21:08 Wget-spidering an entire fifty meg website: NOT CONSIDERED A GOOD THING TO DO EVEN IF NOT WARNED AGAINST? 11:21:17 ™ 11:21:21 Gregor: You might wanna use robots.txt to block wget by default. 11:21:37 -!- elliott has left ("Leaving"). 11:21:40 -!- elliott has joined. 11:22:02 ~/logs$ grep -P ":P|:-P" * | wc -l 11:22:03 44217 11:22:06 But anyway, I actually only care about the rsync issue for the /sync/ part. If you're just doing a one-time download, it's basically no different (assuming that wget supports Content-encoding: gzip) 11:22:16 CakeProphet: Here's the numbers from my own incomplete set of logs: 11:22:17 > select sum(case when body ilike '%:p%' then 1 else 0 end) as noseless, sum(case when body ilike '%:-p%' then 1 else 0 end) as noseful from event where target = (select id from target where name = '#esoteric'); 11:22:17 noseless | noseful 11:22:17 ----------+--------- 11:22:17 39989 | 5665 11:22:18 : 11:22:18 lexical error in string/character literal at chara... 11:22:29 lambdabot: What, you don't do SQL? 11:22:44 SQL, Haskell, it's all the same. 11:22:50 Received string length longer than the maximum allowed ([thirty-nine] 11:22:53 java ioexception 11:22:53 grep -P ":[)]|:-[)]" * | wc -l 11:22:54 wtf is that? 11:22:55 27804 11:22:56 fizzie? 11:23:20 ugh 11:23:21 a very wordy grep. 11:23:23 something is wrong 11:23:47 grep -P ":[(]|:-[(]" * | wc -l 11:23:48 8639 11:24:08 what's the name-distribution of :P sayers? This may be the only line in which I have said :P, but now I have said it twice. 11:24:35 elliott: Sounds like most of those are about >16-character player names, but I guess it could be some other strings. 11:25:12 fizzie: I literally just made the proxy deset the variable then return, and then changed the usleep to a while (var); 11:25:13 Then that started. 11:27:19 This logbase doesn't have name-coalescing, so the top 5 of ":P"-sayers isn't very useful: 11:27:24 > select n.name, count(*) as peeings from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' and e.body ilike '%:p%' group by n.name order by peeings desc limit 5; 11:27:24 name | peeings 11:27:24 ---------+--------- 11:27:24 elliott | 7591 11:27:24 Gregor | 4370 11:27:24 : parse error on input `,' 11:27:26 ehird | 4229 11:27:28 GregorR | 2772 11:27:29 alise | 2162 11:27:32 lambdabot: Stop *doing* that. 11:27:35 fizzie: You need :-p too. 11:27:46 Yes, but the question was about ":P sayers". 11:27:56 Pah. 11:28:19 I ... I am not the most severe offender! 11:28:50 Gregor: You do have one more thousand from GregorR-L, but still. 11:29:05 Possibly the pee-fraction is more important than absolute pee amounts, anyway. 11:29:41 :urine: 11:30:46 this is a related drawing i made: http://oi54.tinypic.com/ndr48y.jpg 11:31:05 (not just now) 11:31:14 D: 11:31:26 I do not understand this drawing 11:32:02 the blue blobs are necessarily edible looking.. 11:32:18 cmd.c: In function ‘cmd_upgrade’: 11:32:19 cmd.c:267: error: initialization makes pointer from integer without a cast 11:32:19 cmd.c:270: error: assignment makes pointer from integer without a cast 11:32:19 cmd.c:272: error: passing argument 1 of ‘execv’ makes pointer from integer without a cast 11:32:19 /usr/include/unistd.h:560: note: expected ‘const char *’ but argument is of type ‘char’ 11:32:19 I what... 11:32:31 char *argv[999] = { main_argv[0], "--upgrade", g_strdup_printf("%d", sock_cli), g_strdup_printf("%d", sock_srv) }; 11:32:31 for (int i = 1; i <= main_argc; i++) 11:32:31 { 11:32:31 argv[3+i] = main_argv[i]; 11:32:31 } 11:32:34 int err = execv(main_argv[0], argv); 11:32:38 It looks right to me. Well... rightish. 11:32:45 uh apparently ^[\s\d:]+ is not matching the timestamp? 11:33:52 What's the type of main_argv then? 11:34:38 Also I think there's some glib helpers you can use to build the new argv without that 999 in there. 11:34:43 > select n.name, sum(case when e.body ilike '%:p%' then 1.0 else 0 end)/count(*) as peefrac from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' group by n.name order by peefrac desc limit 5; 11:34:44 name | peefrac 11:34:44 ----------------+------------------------ 11:34:44 GregorLOL | 1.00000000000000000000 11:34:44 GregorR-L__ | 1.00000000000000000000 11:34:44 : parse error on input `,' 11:34:45 AMD | 1.00000000000000000000 11:34:47 whoami | 1.00000000000000000000 11:34:49 bsmntbombdood2 | 0.50000000000000000000 11:34:53 char *main_argv; 11:34:55 Oh, durrr. 11:35:00 Well, there's your there. 11:35:08 pee winners 11:35:14 The good old "include also people with no real comments" thing. 11:35:23 > XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" 11:35:23 after 113 requests (112 known processed) with 0 events remaining. 11:35:24 Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data... 11:35:25 Hmmmm. 11:35:42 monqy: simply put, it's arial 12 bold "D:" rotated 90 degrees counter-clockwise, and arial 12 bold ":P" rotated 90 degrees clockwise, with the bounded spaces coloured in 11:36:02 it all makes sense now 11:36:12 thanks 11:36:28 -!- Patashu has joined. 11:36:51 it was difficult though to get the anti aliasing right 11:37:07 > Segmentation fault 11:37:07 Not in scope: data constructor `Segmentation'Not in scope: `fault' 11:37:09 Well that ain't good. 11:37:15 monqy: One more for the road; here's the real pee-winners: 11:37:17 > select n.name, sum(case when e.body ilike '%:p%' then 1.0 else 0 end)/count(*) as peefrac from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' group by n.name having count(*) > 1000 order by peefrac desc limit 5; 11:37:17 name | peefrac 11:37:17 -----------+------------------------ 11:37:17 Gregor-W | 0.16866359447004608295 11:37:17 : parse error on input `,' 11:37:18 Gregor | 0.15765359500703488582 11:37:20 GregorR-L | 0.14097390368576809255 11:37:21 so each string character was rendered twice against two different background colours 11:37:21 GregorR | 0.12288323432928451104 11:37:24 GregorR-W | 0.11541244573082489146 11:37:26 It's a very Gregorish list. 11:37:32 > 12:38:04 [DIED] Unknown option --upgrade 11:37:32 Oh come on. 11:37:33 Not in scope: data constructor `DIED'Not in scope: data constructor `Unknow... 11:39:54 fizzie: Just to calm your nerves, I haven't actually committed any of this horrible stuff yet. 11:41:23 Yes, I've been keeping a watch on the... other channel. 11:42:08 X-D 11:42:25 Ready to revoke my commit rights? 11:43:05 What, more desync issues? 11:44:35 Well, there *are* those buffers there. If you restart in the middle of something busy, it's rather likely there's pieces of another packet stuck in there. (Plus it can also silently drop packets when there are complete packets there.) 11:45:26 Oh, right, the buffers. 11:45:55 Speaking of which, you'll also have to replay the initial spawning and somehow force the server to resend the tiles to make the "minecraft bouncer" mode work; otherwise the client won't have the world data the server thinks it already has. 11:46:04 Is there a way to tell SDL "hey, don't try to focus the window you open"? 11:46:37 perl -n -e 'BEGIN {%c=()} /^.+? <(.*?)>.*?:(P|-P|p).*$/; $c{$1}++ if $1; END {print "$_: $c{$_}\n" for keys%c}' *.txt 11:46:45 elliott: 4 11:46:48 ....wat? 11:46:57 the magic of perl 11:47:12 surely perl integers are bignums. 11:47:25 All the numbers are double-precision floats. 11:47:31 Unless you "use integer". 11:47:57 (Or "use bigint".) 11:48:19 -!- boily has joined. 11:48:23 nope still 4. must be regex then 11:48:30 fizzie: wait, perl integers are floats by default? 11:48:38 Also: $c{$1}++ if /.../. 11:48:40 I can't see how that regex could possibly have gone wrong 11:48:49 elliott: All Perl numbers, I believe. 11:48:52 Huh. 11:49:05 yet enother reason for hate 11:49:05 But doubles work as integers up to 2^52 or so. 11:49:29 Sigh, does anyone know a portable SDL way to not focus the window created? 11:49:40 Whether I have to just say "hey, show some other window" or whatever; I don't acre. 11:49:41 care. 11:49:41 -!- elliott has left ("Leaving"). 11:49:43 -!- elliott has joined. 11:49:44 care. 11:49:49 care. 11:49:56 care. 11:50:05 Care bear stare. 11:51:10 The .*$ suffix of the regex is spurious, but shouldn't hurt. 11:51:35 Well, assuming no newline problems. 11:51:50 I'm just trying to avoid matching things in < > 11:51:54 that aren't at the start. 11:52:12 Whether . matches newlines, and whether $ matches newline or real end-of-string only depends on the flags. 11:52:25 Try to drop the .*$ anyway, since it serves no purpose. 11:53:26 fizzie: How would one detect whether the buffer has a full packet in it? 11:53:56 Or can one not do one one that one. 11:54:54 I don't think you really can very well, and I'm not sure it'd really help. If you have a partial packet in the buffer, you can't (well, I guess you *can*, but it's ugly) just keep reading and hope you'll end up at a packet boundary during your half-a-second sleep. 11:55:30 Well, I can prolong that sleep indefinitely, theoretically. 11:55:42 fizzie: I guess the best thing is just to send the buffers? 11:56:01 Is there any... guarantee that argv won't clobber binary data? Oh wait, can the protocol include nul bytes? 11:56:04 http://pastebin.com/FFF9nQc4 11:56:06 here is the whole list 11:56:23 for :P | :-P | :p 11:56:34 ....though I'm not sure that matches fizzie's 11:56:37 sometimes if I am too tired I fall asleep involuntarily 11:57:06 elliott: The protocol does include lots of 0s, and those probably won't go through argv as-is. 11:57:21 fizzie: Any two-five-fives? :p 11:57:36 elliott: Any bytes, in general. Though you can of course escape. 11:57:39 I see I have only used it once in that list, presumably from refrencing it, possibly from quoting or mimicking someone else, as :P is not something I would say to emote 11:57:49 fizzie: I could Mork-encode it. 11:58:05 elliott: Or just g_base64_{en,de}code, that's in glib and it's a single function. 11:58:10 Or that, yes. 11:58:15 It's a bit over-cautious, but still. 11:58:18 (This is so perverse, I: love it.) 11:58:24 there are also countless other nicks. elliottbuntu, gregorzilla, cakeprop1et, ... 11:58:40 fizzie: Is there any guarantee you can pass like 262144 times a lot in a single argument? 11:58:42 oklofod 11:58:46 That seems... unlikely. 11:58:51 (Times a lot for basesixtyfour.) 11:59:00 EgoBot: 19 11:59:16 elliott: No; POSIX does define some minimums, but they're quite low. (Base64 only is times 1.25 though.) 11:59:17 -!- DH____ has quit (Read error: Connection reset by peer). 11:59:31 -!- DH____ has joined. 11:59:53 elliott: The alternative solution would be to serialize all relevant state into a single binary blob, and then throw that to the new process with some binary-safe mechanism, like a POSIX shm block. 12:00:24 fizzie: Well, I mean, guarantee on Linux. 12:00:46 fizzie: What if I opened a pipe, wrote a bunch of data to the write end, then passed the read end to the new process? 12:01:16 elliott: On Linux that's good for 64 kilobytes, IIRC. 12:01:39 (Size of the pipe buffer.) 12:02:03 fizzie: Hmm, what happens if you go past that? Writes just fail? 12:02:13 Writes will probably block. 12:02:30 (Waiting for the read end to empty.) 12:02:32 Well, if we fork'ed and started the new process ... :p 12:02:47 I don't suppose posix guarantees any buffer sizes there. 12:02:55 4k or something, if that. 12:03:15 Mrf. 12:03:40 http://pastebin.com/Re2Eznr4 12:03:46 total number of lines 12:04:26 well, not counting /mes and stuff. 12:04:31 just lines with 12:04:35 CakeProphet: You need to use the industry-standard merging table, dude. 12:04:44 uh, what? 12:04:53 The nick merging. 12:04:55 Vorpal has a copy. 12:05:17 o_o 12:05:21 do I have to? 12:05:25 Yes. 12:05:30 Otherwise my count is way too low. 12:05:31 If you want anyone to take you seriously, yes. 12:05:54 fizzie: I like how the net effect of this is turning EVERYTHING into a global. 12:06:09 :( 12:06:22 is there no way around this hackery 12:06:40 elliott: actually your count will be equivalent 12:06:43 as in this list you have multiple nicks. 12:06:45 :P 12:06:45 elliott: You could have blah_serialize_state/blah_deserialize_state functions for each blah.c, then just call those in sequence, concatenate the blobs, and do something for it. 12:06:48 :P 12:06:48 :p 12:06:50 :P 12:06:55 just building up my score. 12:07:01 fizzie: It... would be nice, yes. 12:07:11 fizzie: I might even do that. 12:07:17 CakeProphet: what and what 12:07:39 I don't really see how any of that is confusing. 12:08:16 it is confusing 12:08:16 to me 12:08:17 fizzie: Oh god, I'm building a fancy Generic System here, aren't I. 12:08:23 fizzie: The main problem is that we /want/ a lot of state to be dropped. 12:08:31 e.g., the whole Scheme state. 12:09:07 my goal is to beat Phantom_Hoover and Sgeo 12:09:11 in the lines race. 12:09:30 elliott: If you don't want a POSIX shm block, you could just use a g_file_open_tmp; on a sensible system it'll end up in a tmpfs anyway. 12:09:32 a good goal for good people 12:09:37 also who is tusho and why have I never seen him. 12:09:46 tusho == elliott 12:09:47 tusho is me. 12:09:56 (The file handle will stay open, and then you can seek to 0 and slurb the data back in.) 12:09:57 fizzie: It... would be nice to be _vaguely_ portable. 12:10:03 As in, might someday run on Windows. 12:10:06 "im eliot" - toshu 12:10:09 So g_file_open_tmp sounds nice. 12:10:31 fizzie: Would it be bad if I reused the jint_read/jint_write functions for this? :p 12:10:44 (Also, those should _totally_ work on buffers.) 12:10:53 Hmm, actually. 12:10:57 I can depend on endianness just fine. 12:10:58 elliott: I mean for a one-liner it does its job. No need for fancy tables. 12:11:14 CakeProphet: No it doesn't, it fails to merge the various nicks a lot of us have. 12:11:21 So its results are completely wrong. 12:11:27 wrong how? 12:11:30 -!- sllide has joined. 12:11:40 it doesn't merge the various nicks a lot of them have 12:11:44 it reports how many times a nick said a line. it is correct in that report. 12:12:09 fizzie: Are buf_start/buf_pos/buf_end all important to keep? 12:12:10 but nicks aren't very meaningufl 12:12:14 people are meanignutuflk.... 12:12:25 sure. 12:12:43 but it was a one-liner, is my defense. 12:12:49 well, a one liner with a BEGIN and END line :P 12:12:53 a Bad Perl one liner 12:13:22 took less time than the equivalent Haskell code.. 12:13:34 elliott: Outside of packet_read, I think buf_start == buf_pos or some such equivalence exists. But of course if you don't want to understand how it works, you can dump all. 12:13:44 (There'll be some useless bytes there, though.) 12:14:12 failed to kill less babies than the equivalent haskell code 12:14:20 In particular, I think it should be enough to just dump the bytes from buf_start to buf_end, and the size of that; then on reloading set buf_start = buf_pos = 0, buf_end = size, and load those bytes at the start of the buffer. 12:14:34 I'm curious as to what method you would use in Haskell. you would recursively update a Map (of strings! gah) I'd imagine 12:14:37 Incidentally, a file is also what irssi uses for /UPGRADE. (It's a hidden option called "session", defaults to ~/.irssi/session) 12:14:50 fizzie: What about that "offset" thing? 12:15:10 is a Haskell programmer more likely to use Parsec than regex for this kind of thing? 12:15:11 CakeProphet: presumably a fold for that 12:15:31 -!- azaq23 has quit (Quit: Leaving.). 12:15:37 I mean the updating the table 12:15:39 you'd use a fold 12:15:44 right 12:15:46 rather than explicit recursion 12:15:49 struct buffer result = { sizeof(struct packet_state)*2, g_malloc(sizeof(struct packet_state)*2) }; 12:15:49 memcpy(result.data, (unsigned char *) &cfg->state_cli, sizeof(struct packet_state)); 12:15:50 memcpy(result.data + sizeof(struct packet_state), (unsigned char *) &cfg->state_srv, sizeof(struct packet_state)); 12:15:51 fizzie: Pro, or pro? 12:15:53 but should you use Map String a? 12:15:59 that is one way 12:16:00 because apparently that is a sin. 12:16:16 what is that a anyway 12:16:28 elliott: You don't need to save offset[] or the internal struct packet, assuming you don't stop the proxy between the packet_read and the packet_write. 12:16:29 (Num a) => a I'm just lazy. 12:16:39 fizzie: TOO LAZY TO BOTHER LA LA LA 12:17:02 Well, I think your wanna_hang may have stopped it in the right place already. 12:17:11 wanna hang 12:17:49 struct buffer proxy_serialize_state() 12:17:49 { 12:17:49 struct buffer result = { sizeof(struct packet_state)*2, g_malloc(sizeof(struct packet_state)*2) }; 12:17:49 memcpy(result.data, (unsigned char *) &cfg->state_cli, sizeof(struct packet_state)); 12:17:49 memcpy(result.data + sizeof(struct packet_state), (unsigned char *) &cfg->state_srv, sizeof(struct packet_state)); 12:17:51 return result; 12:17:53 } 12:17:55 void proxy_deserialize_state(unsigned char *state) 12:17:57 { 12:17:59 memcpy(&cfg->state_cli, (struct packet_state *) state, sizeof(struct packet_state)); 12:18:01 memcpy(&cfg->state_srv, (struct packet_state *) (state + sizeof(struct packet_state)), sizeof(struct packet_state)); 12:18:06 } 12:18:08 fizzie: Et voilbeautifula. 12:18:21 I'm not so sure about that, but I guess it should work. 12:18:37 fizzie: The problem is skipping the init in the proxy thread creation stuff. 12:18:45 I suppose I can just pass a bool restarting. 12:19:07 Or separate out the state initialisation. 12:19:27 -!- monqy has quit (Quit: hello). 12:20:03 elliott: Yes. Though you do need to set the state_cli.sock = sock_cli; state_srv.sock = sock_srv; even when restarting. 12:20:33 (Otherwise it'll end up being copied from that state blob.) 12:20:35 fizzie: Well, actually, sockets are part of struct packet_state now... 12:20:43 And those will have the right fd. 12:20:43 So? 12:20:52 Oh, right. 12:21:01 It actually is the right fd. 12:21:22 You might not need to pass it on the command line at all, then. 12:21:52 Though I suppose duplication won't hurt. 12:22:21 fizzie: Yeah, I'm trying to make the only data be original command line args (perhaps not even those) + serialised. 12:22:33 http://sprunge.us/AVRj 12:22:38 It's starting to look suspiciously like a good design. 12:23:41 !perl print (("all nighter", "sleep")[int(rand(2))]) 12:23:43 all nighter 12:23:48 and so it shall be. 12:23:53 CakeProphet: Right now from #perl: http://p.zem.fi/t6uz -- see how you don't have to care about refcounts. (Lie.) 12:24:26 ah 12:24:44 yes I don't really know much about XS. 12:25:18 The glue between return types and parameters is mostly autoXS'd, but the process of building non-scalar Perl values from inside C code is quite messy. 12:25:24 g_file_open_tmp("mcmap.XXXXXX", NULL, NULL) -- yay 12:25:27 (Yes, I'll handle errors later.) 12:25:57 hmmm, I will perhaps need to stock up on caffeine for the adventure ahead. 12:26:52 so is mcmap an #esoteric project 12:27:26 Yes. 12:27:26 it's an #esoteric-minecraft project, I'd say. 12:27:28 >_> 12:27:33 fizzie: Can you even seek an fd? 12:27:45 elliott: Certainly; just lseek it. 12:27:47 Oh, lseek. 12:28:38 cmd.c:270: error: ignoring return value of ‘write’, declared with attribute warn_unused_result 12:28:41 fizzie: Harshing my vibe here. 12:28:44 haha, there's an energy shot called "10 hour power" 12:28:57 elliott: That's the thing that even a (void) cast won't cure. 12:29:02 fizzie: Yeah, I just tried that. 12:29:07 WTF do I have to do to make it happy? 12:29:09 (void) (void)? 12:29:23 "if (...) ;" is I think enough. 12:29:27 Hah. 12:29:38 Indeed. 12:30:04 console.c had a write like that, until people complained too noisily about how bad it was. 12:31:02 proxy.c: In function ‘proxy_initialize_socket_state’: 12:31:02 proxy.c:57: error: expected expression before ‘{’ token 12:31:02 proxy.c:58: error: expected expression before ‘{’ token 12:31:02 What. 12:31:10 -!- Sgeo has quit (Ping timeout: 260 seconds). 12:31:11 void proxy_initialize_socket_state(socket_t sock_cli, socket_t sock_srv) 12:31:11 { 12:31:11 cfg->state_cli = PACKET_STATE_INIT(sock_cli); 12:31:11 cfg->state_srv = PACKET_STATE_INIT(sock_srv); 12:31:12 } 12:31:14 I am a confuse.d 12:31:21 Oh god, don't tell me I need a (struct blah) inf ront fo that. 12:31:32 Yes, it's a struct initializer. 12:31:58 Or expands into one, anyway. 12:32:31 "Inf ront fo", sounds like a Ultima spell. 12:32:37 KAL VAS FLAM and so on. 12:33:29 Heh. 12:36:58 GLib-ERROR **: The thread system is not yet initialized. 12:36:58 aborting... 12:36:58 Aborted 12:36:59 fizzie: Good start. 12:37:14 Oh, duh. 12:38:56 13:39:18 12:38:56 > XIO: fatal IO error 9 (Bad file descriptor) on X server ":0.0" 12:38:56 after 122 requests (122 known processed) with 0 events remaining. 12:38:56 elliott@katia:~/Code/mcmap$ 12:38:57 Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data... 12:38:57 Well, 'tis a start. 12:39:16 XIO: fatal IO error 11 (Resource temporarily unavailable) on X server " o" 12:39:16 after 121 requests (121 known processed) with 0 events remaining. 12:39:19 That's no X server I ever heard of. 12:39:32 They speak X server in what? 12:39:49 > XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" 12:39:50 after 120 requests (120 known processed) with 0 events remaining. 12:39:50 X Error of failed request: BadWindow (invalid Window parameter) 12:39:50 Major opcode of failed request: 4 (X_DestroyWindow) 12:39:50 Resource id in failed request: 0x5e0000d 12:39:50 Serial number of failed request: 120 12:39:50 Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data... 12:39:52 Current serial number in output stream: 120 12:39:54 WHAT DO YOU WANT FROM ME 12:40:06 C-M-^H 12:40:21 -rw------- 1 elliott elliott 513K 2011-09-12 13:39 /tmp/mcmap.UZ850V 12:40:27 fizzie: They're not meant to be that big are they? 12:40:45 Well, a single packet_state_t is around 256K. 12:40:51 Fair enough. 12:41:00 It's a bit overdone, but it needs to hold any single packet. 12:41:25 Is that using the zlib worst-case guarantees? :p 12:41:48 It's probably well over that. 12:41:52 OK, without SDL_Quit(), //upgrade just seems to freeze the whole thing. 12:42:21 This ... is not so simple. 12:42:23 But of course that's assuming 16x16x256 is the largest chunk-update ever sent; we do (did?) support cross-chunk updates. 12:42:53 So the largest packet is... infinitely big? 12:43:03 Technically-maybe. 12:43:07 FIX IT 12:43:21 It's borderline possible that you can only "officially" do SDL_Quit from the SDL UI thread. 12:43:50 Yes but even if I don't quit it's completely broken, so. :p 12:44:09 I should may-possibly gdb it, but would that even /work/? 12:44:55 I'd guesstimate that gdb can at least optionally follow through exec's. 12:46:24 Do we actually even SDL_Quit in the "clean" shutdown? 12:46:35 (It's not atexit-registered by default.) 12:46:39 #0 0x00007ffff6beb36d in nanosleep () at ../sysdeps/unix/syscall-template.S:82 12:46:39 #1 0x00007ffff74ad984 in SDL_Delay () from /usr/lib/libSDL-1.2.so.0 12:46:39 #2 0x00007ffff746538e in SDL_WaitEvent () from /usr/lib/libSDL-1.2.so.0 12:46:39 #3 0x000000000040b73e in start_ui (map=true, scale=1, resizable=true, 12:46:39 wnd_w=512, wnd_h=512) at ui.c:112 12:46:40 Hmm. 12:46:44 fizzie: I don't know. 12:47:29 how did you segfault in there 12:47:41 Who said it was a segfault? 12:47:48 I made an ass of u and me 12:47:54 -!- cheater has quit (Remote host closed the connection). 12:50:52 fizzie: This is quite the confuzzling code; at least the proxy just stops dead. 12:55:57 * elliott plans how to get fizzie to debug it for him with tricksy thinking. 12:58:47 student: "oh, so it's the combination" professor: "no it's the composite. the summing." 12:58:59 ...even though that's exactly what he meant in that context. 12:59:22 * CakeProphet hates this class with each passing minute. 12:59:36 Hey fizzie... what if... you looked at this diff. 12:59:45 !wacro 12:59:46 CSSHLESS 12:59:50 Csshless. 13:00:01 wow 13:00:04 that one is really good 13:00:10 yes it is. 13:00:12 fizzie... fizzie... http://sprunge.us/XaIC 13:00:13 now what on earth do we use it for 13:01:07 csh blahblah | less 13:02:34 !wacro 13:02:35 HMFHC 13:02:36 !wacro 13:02:37 TEEEIM 13:02:38 !wacro 13:02:39 MZH 13:02:39 !wacro 13:02:40 SBP 13:02:41 !wacro 13:02:42 UDLMSCP 13:02:49 TEEEEIM 13:03:51 -!- chickenzilla has quit (Ping timeout: 246 seconds). 13:04:41 -!- chickenzilla has joined. 13:04:49 How did it not work again? 13:05:56 fizzie: It just sits there. 13:06:01 Minecraft times out, nothing printed on the console. 13:06:09 Ctrl+C in gdb shows it's in sdl event loop. 13:06:12 But it definitely does cross over. 13:06:21 Surprised, since he thought he declared 13:06:21 this identifier, JD searches through the source code and discovers that the 13:06:21 identifier he declared had and ‘-‘ in it and this one didn’t. He fixes the 13:06:24 error then quickly scans the rest of the source code and finds two more places 13:06:27 where he left out the ‘-‘ 13:06:31 I wonder if my professor is a Lisp programmer. 13:06:34 SDL event loop is the reasonable place, but humm. 13:06:56 fizzie: Maybe the proxy got hung by deserialising the wrong stuff and interpreting that? 13:07:16 !wacro 5000 13:07:16 ACDIGDBCUPTDRCWYEAATDFPBB 13:07:30 GDBCUP 13:08:48 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .). 13:09:43 You could at least do if (read(upgrade_fd, data, len) != len) die("OH NO!") or something. 13:10:05 fizzie: I doubt that's failing. But okay. :p 13:10:19 So far I haven't seen anything obviously wrong, no. 13:11:25 Yeah, no errors. 13:11:28 wow I wonder if my professor realizes that most people don't charge by lines of code. 13:11:32 most sane people. 13:11:48 all Haskell programmers would be homeless. 13:11:56 Aren't they? 13:12:11 My mental image of a Haskell programmer is this hairy homeless person. 13:12:13 well, I guess they would be. 13:16:51 Reached the end of the diff, still didn't see anything obviously wrong. Possibly struct proxy_config should hold either both the iq and worldq, or neither, but that's not a real problem. 13:18:11 I suppose you could just add some log_prints in various places of proxy.c to see what happens there, or figure out how to target that particular thread with gdb. I can take a closer peek at home, but that's likely to be at least three hours or so from now. 13:18:25 I'll procrasti-think on it. 13:19:18 procrasti-thinking could be probably be listed as most of my billable hours. 13:19:21 if I were paid by hour. 13:20:37 Are you instead paid by line? 13:20:53 billable hours -- 10:00-11:45 compiled code; 11:00 - 12:00 : took hookah break to procrasti-think 13:21:04 fizzie: no I'm paid in piecework currently. 13:21:13 so, I set a price for something, finish it, get paid. 13:30:50 -!- Sgeo has joined. 13:33:33 -!- cheater has joined. 13:38:58 *sigh* 13:40:09 My OS professor is making sure people understand what classes are. Not because of OS theory presumably, but to be able to write plugins for his simulator 13:42:21 Classes are abstract things which appear in your program, and are not meant to be executed. 13:43:22 Perhaps it's better to say "attended" 13:44:40 back 13:45:12 wb 13:46:41 Sgeo: I forget, have you ever used mcmap at all? 13:46:50 No 13:48:32 Lame. 13:49:43 what does his simulator simulate 13:49:54 -!- copumpkin has quit (Ping timeout: 260 seconds). 13:50:19 -!- copumpkin has joined. 13:52:03 A CPU and an OS 13:52:03 ?src minimum 13:52:04 minimum [] = undefined 13:52:04 minimum xs = foldl1 min xs 13:52:30 ?src min 13:52:30 min x y = if x <= y then x else y 13:58:15 Sgeo: You realise mcmap works on Windows, btw? 13:58:33 Now I do. But until now, I've been lazy 13:58:42 * Sgeo is in class right now 14:00:09 fizzie: Seek state of an fd would be transferred across exec,r ight? 14:02:03 Yes, it's logically speaking part of the fd. 14:04:25 Hmm, wait. 14:04:29 Does address space carry over exec()? 14:04:38 Oh, hmm, shouldn't matter 14:04:42 packet_state doesn't contain any pointers 14:04:47 Except maybe in the packet p, but that should be ignored at this point 14:04:48 I think. 14:05:30 Hmmmmmmmm. 14:05:41 Let me check that thing. 14:06:27 Yes, it should be hokay. 14:06:45 The 'offset' field is used as the packet's field_offset array, but it's reset by packet_read. 14:06:56 (state->p.field_offset = state->offset;) 14:07:49 Hokay. 14:09:06 (Same applies for the 'bytes' field of the packet, which is pointed to &state->buf[state->buf_start] in packet_read.) 14:09:39 Aways, moving home. 14:10:00 Moove. 14:10:01 Mouuuve. 14:14:16 Half the time when I raise my hand to answer a question: "Someone else" 14:18:29 nerd 14:20:43 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:20:57 half the time when i raise my hand to answer a question, pigs fly 14:22:16 :o 14:23:05 or wait, is it because you just say something random that makes no sense? 14:23:12 because that'd be cool 14:28:02 Sadly, no 14:36:27 [W]hile there are many aspects to software quality, your first quality concern must necessarily be with its defects. ... [E]ven experienced programmers typically make a mistake for every seven to ten lines of code they develop. 14:36:31 o rly? 14:36:38 but my code always runs correctly the first time. 14:37:15 BUT DOES IT HALT 14:37:36 Some people mistakenly refer to software defects as bugs. When called bugs, they seem like pesky things that should be swathed or even ignored. This trivializes a criticial problem and fosters the wrong attitude. ... Defects are more like time bombs than bugs. 14:37:44 * CakeProphet submits a time bomb report to gedit. 14:38:07 are defects like burritos 14:41:35 ...sure. 14:42:54 burritos encased in nuclear waste 14:43:17 help data form hell 14:45:36 JD again recompiles the program and gets an error message at the end of the 14:45:37 program, unmatched begin 14:45:45 ah, she's a pascal programmer. 14:46:12 -!- copumpkin has joined. 14:47:29 or perhaps Algol... 14:49:17 based on age I would guess Pascal 14:50:05 Does she write in the third person? 14:50:17 Or is this "JD" some sort of a persona? 14:50:19 -!- Sgeo has quit (Ping timeout: 258 seconds). 14:50:33 it is a hypothetical character in an example. 14:51:05 oh i thought it was the java decompiler 14:51:09 fizzie: do you want an diffs 14:51:13 with rrchecking 14:51:56 Looking at the compiler output, JD sees where the missing semicolon belongs and 14:51:59 fixes the source code 14:52:02 this is how I know it's a mad example. 14:52:13 because the compiler was helpful for finding a missing semicolon. 14:52:19 s/mad/made up/ 14:52:31 I guess typos get more interesting when you're skipping a night of sleep. 14:55:14 hmm 14:56:34 CakeProphet: once laying in a hospital bed with asthma or something i started stareing at the fabric patterns. i thought i was just tired or whatever but i did start to see some bizzare visual grammar speaking to me 14:56:59 as if i was reading the meaning of the fabric pattern 14:58:04 -!- sebbu2 has joined. 15:00:49 I often read the meaning of fabrics. 15:00:56 they speak to me in a secret script. 15:01:04 -!- sebbu has quit (Ping timeout: 260 seconds). 15:01:36 some bugs don't matter 15:01:45 saying sooth about baked dessert. 15:01:54 this is where I get all of my secrets. 15:02:18 CakeProphet: well i keep seeing the word grammar used in strange places lately 15:02:26 some bugs are actually just stupid intended features. 15:02:27 "design grammar" for example 15:02:43 like.. uhhh 15:03:11 or should I say some stupid intended features are actually just bugs. 15:05:04 being a cannibalistic doctor would be fun because you get to cure people in two senses. 15:05:32 fizzie did done run away. 15:06:05 "done did" is an acceptable idiom of some dialects of southern american english. 15:06:06 now im not sure 15:07:02 ok here we go 15:07:04 here "done" is essentially being used like "already" 15:07:15 "Axonometry, and the pictorial grammar that goes with it, has taken on a new significance with the advent of visual computing." 15:07:26 pictorial grammar :P 15:07:53 -!- Phantom_Hoover has joined. 15:08:18 yeah that doesn't make sense. 15:09:36 like... the... terminology? 15:10:03 im not sure that its supposed to make sense 15:11:01 CakeProphet: hmm.. i would say it's a liberal arts thing except mathematics and science are apparently liberal arts 15:11:02 elliott, hello I have a lab coat now. 15:11:10 itidus20, science isn't. 15:11:18 Mathematics is classed as one by weird people. 15:11:42 yeah i struggle with this wiki sentence too "The contemporary liberal arts comprise studying literature, languages, philosophy, history, mathematics, and science." 15:11:59 i was gonna say "cake, it is because you're not liberal arts type that it doesn't make sense" 15:12:09 but i wanted to check up what liberal arts means... and now i'm in a fix 15:12:16 I actually am something of a "literal arts type" though. 15:12:25 also by science it might be referring to soft sciences. 15:12:39 Phantom_Hoover: noooooooooooooooooooooooooooooooo 15:12:56 i just assumed because of the nature of this room 15:13:13 elliott, if it's any consolation, the label says 'laundry coat' because ones that say 'lab coat' cost twice as much. 15:13:25 i don't think i understand the term at all 15:13:29 actually I think my interest in programming was kind of a fluke. 15:14:27 I was probably going to be an English or Anthropology major had I not learned how to program. 15:14:35 Phantom_Hoover: Inferior. 15:14:49 I was terrible at math through about half of high school. 15:14:56 only class I failed was algebra 2. 15:15:09 CakeProphet: ok then lets say drawing has structure. it isn't just a chaotic set of lines 15:15:11 elliott, they are indistinguishable from real lab coats. 15:15:29 Phantom_Hoover: except by label. 15:15:31 i think that is part of the meaning :D 15:15:50 CakeProphet, so are all too many other programmers. 15:16:05 elliott, nah, it was the removable label held on by a bit of plastic. 15:16:22 Phantom_Hoover: still terrible at math you mean 15:16:23 ? 15:16:31 also, 15:16:35 Yes. 15:16:38 -!- maniac has joined. 15:16:41 CakeProphet: taking things even further.. analogy appears between art style and constructed language 15:16:44 since you are the person above me in lines said on IRC 15:16:50 how do you represent numbrs greater then 8 bit in bf 15:16:50 I will be competing with you 15:16:51 while you are online 15:16:53 to say more lines 15:17:01 Phantom_Hoover: DO YOU WISH TO HEAR ABOUT ALL THE WONDERFUL MCMAP IMPROVEMENTS COMING 15:17:14 maniac: difficultly 15:17:21 maniac, same way you do it in everything else with fixed-size words. 15:17:51 so i will have to respresent numbers in different bytes? 15:17:57 yep 15:18:04 nobody ever said it was easy 15:18:15 CakeProphet: well.. if you draw something in an (checks the word) axonometric projection, it means you start following some rules 15:18:35 maybe thats where the grammar part comes in 15:19:17 I'm pretty sure he's saying the terminology of axonometric projection has gained a new significance in the advent of visual computing blah blah blah 15:19:56 like, if it's a liberal arts dude, he's not thinking about formal grammars. 15:20:14 he's just thinking of nice words to say. 15:20:20 i dunno, i might be wrong here 15:20:40 i think that i have missed the point by a wide margin :D 15:21:07 itidus20: how many pixels would that margin be? 15:21:36 20 15:21:46 well, if you used em or inches, then it would depend on your display. 15:22:08 fucking CSS. 15:28:30 and, slightly related: 15:28:38 !wacro 15:28:38 TEETLP 15:28:50 It is a form in its own right. This work is unprecedented because it is constructed of purely abstract units of Mondrians new system. 15:29:09 As Paul Wood says: They constituted, so to speak, the first elements in a new pictorial grammar, from which subsequent compositions would be built up. The new abstractions were now built up from combinations of the simplest, completely abstract, pictorial units (geometrical forms: lines, rectangles, bars, later coloured planes)." 15:29:49 oh okay. 15:30:05 im quoting disparate sources about unrelated things 15:30:15 oh... okay. asshole. 15:30:21 i think. 15:30:24 so yeah 15:30:29 what can i say.. 15:33:11 !wacro 15:33:12 RSCBDKK 15:33:14 oh... okay. asshole. 15:33:15 oh... okay. asshole. 15:33:15 oh... okay. asshole. 15:33:15 oh... okay. asshole. 15:33:15 oh... okay. asshole. 15:33:18 ...lol 15:33:22 wrong line. 15:33:27 !wacro 15:33:27 SKSMSPFB 15:33:28 !wacro 15:33:29 MCPI 15:33:30 !wacro 15:33:31 MTHNTSIM 15:33:32 !wacro 15:33:32 !wacro 15:33:33 BTPL 15:33:33 TQKOBJSG 15:33:35 !wacro 15:33:35 SSAHTT 15:33:56 !wacro 3 5 15:33:57 RPPGD 15:34:17 I think most of the shorter ones are pretty believable acronyms 15:34:26 !simpleacro 3 5 15:34:42 !acro 3 5 15:34:47 BMSHEXMJSL 15:35:53 professor: "but in Vista, it gets kind of HTML... horrible." 15:36:30 distinguished scholar of our age. 15:39:29 what gets kind of HTML? 15:40:18 the... HTML gets HTML horrible, I guess. 15:43:34 CakeProphet: http://www.theparisreview.org/blog/tag/line-drawings/ 15:44:38 this link mind you is wordy article full of over-analysis and theoretical flibber flabber just to warn 15:49:56 I must capture the fizzie and use him as a debugging tool. 15:57:51 I was a dinner. 15:57:57 But now I'm at least momentarily here. 15:59:36 http://sprunge.us/ORTV 15:59:37 HAVE FUN 16:01:33 I shall: take a look. 16:02:43 fizzie: Do it on pyralspite, so I can watch the hilarious mishaps. :p 16:02:49 (Advice may not be: good.) 16:03:00 It's better than doing it on c.nerd.nu, at least. 16:03:05 Well, there's that. 16:03:21 Have you even connected to the 'spite without getting disconnected immediately yet? 16:03:22 Well, on the first attempt it did exactly what you said it would do, which was to hang. 16:03:32 Yes. Well, this was the first time. 16:04:20 If only I was running the Scheme branch, so that you could get every chat message annoyingly repeated back to you. 16:05:16 Whoops, I just misclicked disconnect. 16:05:45 hahaha 16:06:15 More like DOWNGRADE HAHAHAHAHA 16:06:16 L O L 16:13:40 Oh, I may see. 16:13:48 What doth thou see'st? 16:14:28 No, it's not because of that; never mind. 16:15:00 I'll try a thing anyhow. 16:15:13 What was it, out of curcuorourousrousrosity? 16:15:15 Cucumberosity. 16:16:01 Well, commands are picked out in proxy.c; I was temporarily worried it might call the command processor there, which of course would make the proxy-stopping not work; but they're not, they're handled in the world-updating thread like I thought they were. 16:16:59 Don't we have a thing for, you know, specifically safely killing the world thread? Mayhaps that would be good. 16:17:23 i killed you 16:21:48 Well, it's not especially safe; it's just the stop() call, which g_thread_exit(0)s instead of exit(1)ing; it only kills the world thread by virtue of being called from the world thread. The execl will kill all the threads anyway. 16:21:50 I think I may have killed fizzie in real life. 16:21:53 Oh, there we go. 16:24:16 17:24:41 also 16:24:16 17:24:42 fizzief left the game. 16:24:16 17:24:42 [INFO] Player disappeared: fizzief 16:24:16 17:24:44 have you moved from that block 16:25:20 No. :p 16:25:32 -!- FireFly has joined. 16:33:42 I like to think fizzie is just continually trying the same thing. 16:33:43 You know, insanity. 16:33:56 It's not always been quite the same thing. 16:38:46 fizzie: EGG SPAWNED BEAUTIFUL CHICKEN 16:38:50 PET 16:38:51 FRIEND 16:38:53 FOREVER 16:40:46 Okay, yes. 16:40:53 Oh? 16:41:42 Your execl() fails. You don't get the tell() out of it, because by that time the proxy thread (which does packet injection) will have already failed. The execl fails because (a) the "fd" argument is an int, not a char* to a stringized version of the fd, and (b) there's no (char *)NULL at the end of the execl. 16:41:55 The end result is that just the proxy thread dies. 16:42:02 -!- DH____ has quit (Remote host closed the connection). 16:42:04 -!- jix_ has quit (Quit: leaving). 16:42:06 haha oops 16:42:09 i can fix that 16:42:27 sorry for being a dumbo 16:42:57 I stared at the code for quite a while but didn't see it; took a bit of stepping in gdb to notice. 16:43:25 log_print should work even after console_cleanup right? 16:43:43 Well, uh. In theory, yes. In practice it depends on how clean console_cleanup is. 16:43:50 Right. 16:44:17 It does seem to set console_outfd = 1, so after that log_print should go directly to stdout. 16:44:24 > 16:44:24 Usage: 16:44:24 mcmap [OPTION…] host[:port] 16:44:28 Well, here's a new problem. 16:44:36 At least it doesn't fuck up the console now. 16:44:44 if (argv[1] && !strcmp(argv[1], "--upgrade")) 16:44:44 { 16:44:44 upgrading = true; 16:44:44 upgrade_fd = atoi(argv[2]); 16:44:44 argv[2] = argv[0]; 16:44:44 argv += 2; 16:44:46 argc -= 2; 16:44:48 } 16:44:49 !wacro 16:44:50 BVBMTS 16:44:51 Have I got an off-by-one here ir something? 16:44:58 !acro 16:45:02 XYQTSWQM 16:45:12 !fuck 16:45:18 `fuck 16:45:22 ​/hackenv/bin/fuck: line 9: sqlite3: command not found \ /hackenv/bin/fuck: line 17: sqlite3: command not found \ Congratulations! 's action has brought a beautiful new baby into the world. Isn't it adorable? 16:45:32 lol 16:45:58 elliott: I don't think you're passing the old argv[1]..argv[N] into the exec at the moment. 16:45:59 Oh hm. 16:46:08 fizzie: Yes, that's intentional, since I should just persist map state instead. But hmm. 16:46:14 Right, there's the problem, I don't skip the parsing. 16:46:21 In that case you'll want to skip that, right. 16:47:17 -!- jix has joined. 16:47:20 What the heck? Now the new parts of the map load, but all black. 16:47:23 So they load from grey into black. 16:47:52 But they still hover correctly. 16:47:59 Oh. 16:48:02 I skipped loading colours. 16:48:03 :p 16:48:12 Actually, I don't want to skip parsing. 16:48:17 Because I want to re-run the Scheme config. 16:49:11 OMG, ZOMBIES 16:49:18 Now what was that convenience function in glib you said to concatenate two null-terminated lists of strings eh fizzie? :P 16:50:25 I'm not entirely sure the real argv is legal to modify everywhere, incidentally. So it might be that you just want to build a new one in the "--upgrade" flag-check. 16:50:55 I'm pretty sure you are allowed to modify argv? 16:50:58 At least that's my perception. 16:51:02 Well, it's widely done. 16:51:11 It's hardly the biggest wart. :p 16:51:14 argv is canonically, pedantically const. 16:51:29 I don't know of a single system in existence that implements it as such though. 16:51:58 As for the other question, g_strjoinv + g_strconcat + g_strsplit, but that depends on there being a real separator that's never in any of the component strings. I thought it had more of the null-terminated-lists-of-strings functions than it had. 16:53:06 ISO/IEC 9899:TC2 §5.1.2.2.1 ¶2: 16:53:07 The parameters argc and argv and the strings pointed to by the argv array shall 16:53:10 be modifiable by the program, and retain their last-stored values between program 16:53:13 startup and program termination. 16:53:46 Well, TC2, that's like not even C99. 16:53:48 Yay. 16:54:00 I seem to recall from somewhere that POSIX and C disagree on the matter :P 16:54:11 The ELF spec makes them writable too. 16:54:18 I can't afford ISO/IEC 9899:1999 itself. 16:55:16 There's no unlink() for fds, is there? :p 16:55:40 elliott: Dear server: Please unlink your listening TCP socket. kthx. 16:55:47 Yes. Quite. 16:55:50 Well, you can't ioctl many things, too. 16:56:07 No; in any case, it's a bit debatable what it should do when the link count is more than one, too. 16:57:00 I was sort-of assuming that the glib temporary files would've come pre-unlinked when you don't ask for the name (NULL as one of those params), but the documentation didn't really say. 16:57:18 Based on all those /tmp/mcmap.FOOs, maybe not. 16:57:35 Oh, hmm, can you really unlink a file and keep using the fd properly? 16:57:54 17:58:27 [DIED] Unknown option --upgrade 16:57:59 mcmap, dude, you upgraded two times without complaint. 16:57:59 Yes, on most systems. 16:57:59 Hmm. 16:58:01 Oh, duh. 16:58:08 Not on Windows, though. :p 16:58:11 I need to set main_argc/main_argv after mutating it in my if (upgrade) code. :p 16:58:17 fizzie: Well, none of this works on Windows right now :P 16:58:20 (At least I think not on Windows.) 16:59:01 fizzie: So, um. http://sprunge.us/LMaZ 16:59:11 If you just fopen'd the file, I think the unlink would fail. 16:59:12 If I make this unlink the temporary file properly, would this be something vaguely committable? 16:59:19 There's no major ugliness in it, after all. 16:59:30 "When the file's link count becomes 0 and no process has the file open, the space occupied by the file shall be freed and the file shall no longer be accessible. If one or more processes have the file open when the last link is removed, the link shall be removed before unlink() returns, but the removal of the file contents shall be postponed until all references to the file are closed." 16:59:33 That's from POSIX. 16:59:35 And obviously it still has the "major sections of the map are black", "steals focus", ... bugs ... but it's basic upgrade. 16:59:42 fizzie: Ah, neat. 16:59:55 So the unlink-and-still-use should be POSIXly mostly-good. 17:00:16 -!- CakeProphet has quit (Ping timeout: 252 seconds). 17:00:43 On Windows you have to specifically say FILE_SHARE_DELETE in the dwShareMode of CreateFile to make that happen. 17:01:27 Also the options don't seem to be heeded yet. Hm. 17:01:46 Oh, you thought you had to close before unlinking? 17:01:52 That's Windows bullshit. 17:02:25 Gregor: I don't assume anything any more, dude; we're creating a temporary file, writing binary, machine-specific data to it, unlinking it, then execing ourselves and passing the decimal representation of the fd, 17:02:37 so that we can convert it back to a number, read the data from it, restore, then jump into our main code path. 17:02:39 I don't assume anything any more, dude. 17:02:54 ... none of that is particularly controversial. 17:03:05 Gregor: It's new to me :P 17:03:09 The arguments you pass are irrelevant so long as you don't close the FD. 17:03:39 Gregor: But, but, the serialised data /includes socket fds/ that we depend on being kept over the exec, which we then immediately start proxying on. 17:03:44 -!- maniac has changed nick to Warrior`. 17:04:02 If it just includes the FD numbers, then that's just dandy, you still haven't closed them. 17:04:14 I know it WORKS, but it still feels INSANE :P 17:04:51 fizzie: So, um, yes, about that... committing... can I... 17:04:52 I remember SMAUG (a MUD server) had a hack that you could upgrade the server without disconnecting anyone. 17:04:59 Gregor: irssi has it too :P 17:05:13 Gregor: And now finally your long-running mcmap sessions can survive a rebuild with a simple //upgrade. 17:05:18 Assuming we didn't change the upgrade format. At all. 17:05:23 Hooray 17:06:33 Gregor: But mostly it means that you can e.g. reload your Scheme configuration without it being in a weirdly inconsistent state :P 17:06:38 And without dropping your connection. 17:07:00 The file thing should work on Windows too, it just needs the proper CreateFile calls. (In particular the SECURITY_ATTRIBUTES needs bInheritHandle of true, and dwShareMode that FILE_SHARE_DELETE for the delete-before-close... and I'm not entirely sure how you pass an inherited handle. Oh, and then of course you'd have to make the sockets inheritable somehow, that might be more complicated.) 17:07:10 elliott@katia:~/Code/mcmap$ LD_LIBRARY_PATH=/usr/local/lib build/mcmap --upgrade 0 x 17:07:10 18:07:42 [INFO] Starting up... 17:07:10 99a 17:07:10 svdsf 17:07:10 18:07:44 [DIED] read_buffer failed to read data 17:07:11 "Hm." 17:07:38 For the last time, does anyone know how to tell SDL to steal the goddamn focus? X-D 17:07:47 It's kind of ruined if WHOOPS MINECRAFT IS ON THE MENU AND NOW YOU'RE FOCUSED ON THIS MAP WINDOW 17:08:54 SDL's approach to window management is somewhat minimalistic. 17:09:01 -!- nooga has joined. 17:10:11 I don't even care if I need to fuck with the X socket :P 17:10:11 Actually 17:10:12 Really 17:10:17 What I want is to not SDL_Quit at all 17:10:21 I really, really want to maintain the surface 17:10:22 Hmm 17:10:30 fizzie: What if I just serialised the surface structure along with everything else 17:10:32 Didn't SDL_Quit 17:10:34 That's so not supported it's not even funny. 17:10:35 And used it as the surface value post 17:10:38 Yes of course it isn't 17:10:47 But the only thing it'll be maintaining is state, and an fd that'll survive, right? 17:10:50 So it should work. 17:11:05 fizzie is now removing my commit rights. 17:11:15 Gregor: Are you scared yet? :P 17:11:15 Well, no. It's probably got all kinds of pointers into SDL's internal surface lists and whatevers. 17:11:31 fizzie: Weeeell, let's look, shall we? 17:11:41 2 Uint32 flags; /* Read-only */ 17:11:41 3 SDL_PixelFormat *format; /* Read-only */ 17:11:41 4 int w, h; /* Read-only */ 17:11:41 5 Uint16 pitch; /* Read-only */ 17:11:41 6 void *pixels; /* Read-write */ 17:11:42 7 SDL_Rect clip_rect; /* Read-only */ 17:11:44 8 int refcount; /* Read-mostly */ 17:11:47 pixels will be repopulated by map_repaint. 17:11:51 So all that needs to be copied is the format. 17:11:59 That's just the officially accessible parts. 17:12:02 Which is just integers plus a pointer to a palette. 17:12:04 /** Hardware-specific surface info */ 17:12:04 struct private_hwdata *hwdata; 17:12:08 fizzie: Oh BUH. 17:12:17 That in particular is not going to survive well. 17:12:20 Dood, you can totally serialize a private_hwdata * 17:12:46 fizzie: OK, so what if I used SDL's setvideomode type stuff, but then actually just ripped the fd from underneath it? 17:13:04 Maybe I'll ask hash-sdl or something. _That_ would be fun. 17:13:05 t/opic 17:14:01 fizzie: I asked. Ha ha ha. 17:14:13 Oh God they think I'm mad don't they. 17:14:16 There's also the double-buffering back-buffer which will get blown to pieces by the exec. As for using SDL_SetVideoMode, it will make a new window before you have a chance to mung around with it. 17:14:26 Yes, well, that's why I'ma sking. :p 17:14:27 asking 17:14:37 It seems easier/nicer than making a new window and doing hacks to defocus it by finding the Minecraft window. 17:14:48 They will probably be all "why do you want to do this?" 17:14:54 isbric: mod rewrite is evil? 17:14:58 Stop chatting guys. 17:15:02 mod rewrite is irrelevant 17:15:04 This has NOTHING to do with sdl. 17:15:15 fizzie: I've learnt that that's secret code for "I don't know". 17:15:16 Oh no, they're... non-topical?! 17:15:24 NON-TOPICAL CHNANELS ARE BANNED 17:15:26 YOU GUYS 17:15:26 FRENODE POLICY 17:15:28 SHUT THE FUCK UP 17:15:33 WE'RE SUPPOSED TO BE TALKING ABOUT ESOTERICA 17:15:37 its behaviour is perfectly valid 17:15:37 what you should take away from it is never to trust file extensions 17:15:39 NEVER TRUST FILE EXTENSIONS 17:15:42 THEY CREATE THE VOODOO MAGICKA 17:15:43 OF THE UH 17:15:44 GOAT SACRIFICE 17:15:47 Gregor am i doing it right 17:15:47 IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE 17:15:54 "Aethereal" X-D 17:16:05 `addquote IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE 17:16:07 654) IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE 17:16:48 prophile: true that, i feel that your a BSD or rather *NIX user :P 17:16:55 Man, my a BSD or rather nix user is aching nowadays. 17:17:15 I feel that. 17:17:19 "Is there a way to tell if a list in Haskell is infinite? The reason is that I don't want to apply functions such as length to infinite lists." 17:17:31 HahahaFAIL. 17:17:59 God, I don't think hash-SDL are even /interested/ in my question. 17:18:10 I think it's CRYSTAL ALIGNMENT okay to be off-topic GEOMANTIC VIBRATIONS as long as we CHANNELING THETANS add suitable on-topic DOWSING BREATHARIAN words in-between. 17:19:08 elliott: That's because your question is terrible :P 17:19:18 Say I wanted to maintain an SDL surface corresponding to an X window across an exec(). I understand that serialising the SDL_Surface is not really possible since it contains a bunch of pointers to internal SDL things. 17:19:18 Is there any way (hacky or not) to make SDL create a surface on an existing X windows fd? 17:19:22 IT IS A PERFECTLY OK QUESTION 17:19:31 ("or not" -- yeah right) 17:19:46 fizzie: So... what does a private_hwdata look like? 17:20:49 It depends on the display driver. 17:21:25 X. :p 17:23:02 esoteric? aleister crowley! 17:23:03 For X11, it's a struct with Display *s, Visual *s, three Windows, XIM and XIC handles, a XShmSegmentInfo handle to the corresponding X shared-memory segment if that exists, a backing XImage*, a GC on that, mouse warping settings, an SDL_Rect** list of modes, few more Visual*s, Xinerama/XRandR/XVidMode pointers, and the colormaps. 17:23:07 And quite a few other things. 17:23:15 I'm crying. 17:23:23 GOOD 17:23:28 OK, how about that de-focus thing? X-D 17:24:07 How about you just make your xmonad.hs or whatever not let mcmap ever steal the focus?-) 17:24:12 -!- Warrior` has left ("Leaving"). 17:24:29 Heh. 17:25:57 fizzie: So, ehhh, can I commit this thing? I even abstracted out the serialisation buffer reading/writing stuff, so the ugly level is really low outside the two bits of main.c and cmd.c. 17:26:52 Sure, if you want. It's not so distracting, and even if it breaks, it's the user's own fault for typing //upgrade. 17:27:10 Yesss 17:27:27 fizzie: Oh god, I have to merge it into the Guile branch 17:27:42 Yes, please; I don't want to. :p 17:27:47 HAHAHAHAHAHAHAHAHAHA SO MANY CONFLICTS 17:27:50 -!- elliott has left ("Leaving"). 17:27:53 -!- elliott has joined. 17:32:13 -!- oerjan has joined. 17:35:15 fizzie: Holy crap, I merged and //upgrade worked _first time_. 17:35:53 fizzie: You should try it, it's truly a wonder to behold. :p 17:38:28 -!- Taneb has joined. 17:39:33 Hello! 17:39:46 fizzie: Guess who just connected to c.nerd.nu with my "automatically repeat all chat" hook. 17:39:51 "Oops." 17:39:58 Phantom_Hoover: 17:40:19 elliott, are you turning into Lymee. 17:40:29 Phantom_Hoover: wat. 17:40:47 elliott: Guess who just tried to connect to [REDACTED] with the old that hook: http://p.zem.fi/m2yc 17:41:15 fizzie: You don't have to redact it; it's whitelisted. Though I guess I don't really want the domain publicly logged. 17:41:28 But yes, packet-fields now does alist, not vectors. 17:41:33 (use-modules (ice-9 regex)) 17:41:33 (define (scrub str) 17:41:34 (regexp-substitute/global #f "§." str 'pre 'post)) 17:41:34 (on-packet server (chat packet) 17:41:34 (let ((scrubbed (scrub (packet-field packet 'message)))) 17:41:35 (if (not (string-match "^" scrubbed)) 17:41:37 (chat (string-append "You said: " scrubbed))))) 17:41:39 That's the new code. 17:41:39 elliott, you're replicating Lymee's carefully honed annoying ping technique. 17:41:51 Phantom_Hoover: Ah. WEll. You know. breaking news, and all that. 17:41:57 Puncuation, who neds it. 17:42:16 elliott: That's funny, the newly created window wasn't auto-floating, unlike the old one which (with -s NxM) is. 17:42:29 fizzie: It also doesn't seem to respect the sizes, for some reason. 17:42:35 I think I'll fix the "black map parts" bug first, though. 17:42:44 Which... 17:42:45 Might be hard. 17:42:48 Other than that and the black map parts, it workeded. 17:42:50 I cna't just esrialise regions, pointers and whatnot. 17:43:02 Do you want to write map_serialize/map_deserialize? :p 17:43:05 I promise to plug it in nicely if you do. 17:43:13 There's even nice functions for it exclamation mark 17:44:31 It might be reasonably doable, except it would make one honking huge temporary file. 17:45:19 fizzie: Come to think of it, you could just finish the regionfile code, or at least make it slightly /less/ broken, and then it'd just be a few ints or whatever and no duplicated work. 17:45:31 It isn't /that/ broken, is it? 17:46:18 Fifty new exoplanets discovered! 17:46:28 Yay 17:46:32 How's Rosyarrow? 17:46:43 Still the same 17:46:46 Barely been on 17:47:58 fizzie: I mean, I don't see why the regionfile code shouldn't always be on, even if "on" means "/tmp/mcmap.region.sodijasjdois". 17:48:02 -!- sebbu2 has changed nick to sebbu. 17:48:39 Well... the existing functions could be used for the "write out everything" / "read in everything" functions, that much is true. Though again that takes very much disk space, takes quite an annoyingly long time (all that compression) and would actually require a whole temporary directory tree that'd then get cleaned up in all cases. 17:49:06 fizzie: Um, what I meant is, have regionfile code on from the start. 17:49:13 Pointed at a tmp directory if the user doesn't elect to specifically use it. 17:49:13 It's completely missing the logic of when to write chunks to disk. 17:49:19 Then it's literally just the standard restore process. 17:49:31 As in, nothing has to be done, other than telling it to use /tmp/blah. 17:49:35 Also have I already mentioned it's quite a lot of disk space? 17:49:44 I thought it was gzipped 17:49:48 It should really not be that much disk space. 17:49:57 I mean, it should not use more disk than mcmap uses ram. 17:50:08 How large is your world? 17:50:16 Infinite. 17:50:22 But I explore only finite areas. 17:50:33 Yes, I mean, "your world folder on that server". 17:50:46 Fact is, mcmap never unloads chunks, and people have about a hundred times more disk than RAM, so it should not matter at all. 17:50:57 fizzie: It's, what, twenty four, thirty megs? It's a small server. 17:50:58 minecraft again 17:50:59 But it's not very relevant. 17:51:07 /tmp is often not very large either. 17:51:08 is 1/8 out? 17:51:12 1.8* 17:51:17 fizzie: Well, ~/.mcmap/tmp then. :p 17:51:35 Really, there is no way you can have enough RAM for mcmap but not the same amount of disk. 17:51:46 You can't say two gigs is acceptable RAM usage but a ~huge~ file; it's incoherent. 17:53:10 fizzie: Also, have I mentioned, it'd make //upgrade better. :p 17:53:23 But yeah, seriously, there's no good reason not to use the regionfile stuff all the time. 17:53:46 It's not about having the disk space, it's about wasting it for something like this. Also doing the the disk IO for no benefit, if it's not going to be persisted between sessions. 17:54:05 In any case, have I mentioned there's currently no logic to decide when chunks need to be flushed to disk? 17:54:18 You have; I'm arguing under the assumption that it starts existing. 17:54:22 fizzie: Well, OK then; default to /tmp. 17:54:29 Then it's quite literally identical to in-RAM storage. 17:54:38 Yes, maybe it'll get too big; this is called tradeoff time. :p 17:55:00 But on a completely different tack, 17:55:06 Would shm or something allow the sharing of the existing addresses? 17:55:08 Without copying. 17:55:18 Or at least, only copying shm → new structures. 17:55:25 Rather than old structures → something → new structures. 17:55:38 It'll also leave all those in-/tmp world saves around, since the cleanup will never work; the standard way for mcmap to shut down is probably to crash. :p 17:55:50 Maybe for you. :p 17:55:57 But you can hook into segfaults at least. 17:55:58 SDL does. 17:56:38 It's probably not safe to do filesystem operations from a signal handler. (It's pretty much not safe to do anything from one.) 17:56:41 Aaaanyway. 17:58:23 You can have a shared memory segment that you attach to a defined address, but it of course might not work due to ASLR and such. 17:59:09 Using offsets as opposed to pointers can of course mitigate that to some extent, and probably the indirection in many cases doesn't cost all that much. 17:59:17 -!- augur has quit (Remote host closed the connection). 17:59:21 Though you can't malloc() new storage out of a shared memory segment. 17:59:44 I still think the only person who will ever have problems with regionfile-always in practice will be Vorpal, and that's because he tries to make any change to the architecture as awkward as possible. Actually maybe he should just stay on whatever revision he's on, forever. 18:00:16 I may write a lambda calculus tutorial 18:00:36 You can't turn a private memory segment into a shared one later on, though. 18:00:38 Taneb: http://codu.org/lambda/lambda.html 18:01:12 That's not a tutorial 18:01:13 At all 18:01:30 That's a calculator 18:01:37 Taneb: It would help a tutorial. 18:01:53 Oh, okay 18:01:55 Thanks! 18:01:55 fizzie: But yes, honestly, it would be nice if we could avoid copying/serialisation. 18:02:12 fizzie: What if we used MAP_ANONYMOUS and somehow made it a shared segment? 18:02:19 And then just passed the address over. 18:02:45 mcmap's permanent memory allocations come from like three places, so it's not that awkward to use a pool, or several. 18:02:56 was that lambda page created from yesterday's chat? 18:03:31 .... im guessing not 18:03:36 :P 18:04:27 then i clicked start 18:04:43 and i realized this ain't no "was that lambda page created from yesterday's chat" 18:05:25 Gregor: Your evaluation of (Yc Yc) grows indefinitely. :( 18:05:31 I think you can get it constant with some speculative evaluation. 18:05:35 I don't think you can have a MAP_ANONYMOUS mapping survive exec in any way. If you're willing to put all your stuff into a specifically allocated memory area, you can use shm_open and then mmap that into both the original process and the post-//upgrade process, but there's no real guarantee you're going to be able to do that to the same address. 18:06:00 fizzie: So there's literally no way to share memory between two processes without some kind of copying? 18:06:06 Post process-mortem. 18:06:10 elliott: It supports several evaluation strategies, although it doesn't currently present them as options :P 18:06:36 Gregor: It does sharing right? ...I THINK the untyped LC can do sharing... 18:06:37 elliott: The shm_open + mmap doesn't involve any copying; it just might be in a different location afterwards. 18:06:38 oerjan: :P 18:06:47 fizzie: Well, that's not a big deal, is it? 18:06:52 As long as there's a predictable way to get that location. 18:07:04 agh.. friggen lambda.. 18:07:05 It depends on what you put there. 18:07:14 I suppose it invalidates pointers, but you can avoid storing those. :p 18:07:23 I mean, you can just subtract the base address from any pointer. 18:07:26 What should I call this tutorial? 18:07:37 Yes: Using offsets as opposed to pointers can of course mitigate that to some extent, and probably the indirection in many cases doesn't cost all that much. 18:07:39 λWTF? 18:07:49 so, 1 = successor to zero eh 18:08:01 itidus20 discovers... THE PEANO POSTULATES 18:08:16 no i just saw a picture of it :-s 18:08:26 1 = (succ)(zero) :P 18:08:32 Gregor: You do explicit alpha renaming. :( at your evaluation strategy, :(. 18:09:24 and so.. 2 = successor to the successor of zero.. ahh what a curious thing 18:09:32 All about lambda? 18:09:33 elliott: The alpha renaming is explicit so as to maintain some vague semblence of readability. 18:09:43 Gregor: De Bruijn, man :P 18:09:52 You can convert that to explicitly-bound form at display time. 18:09:54 This tutorial isn't going to get very far without a name 18:10:07 (You can even associate names with indices in contexts so that the display is consistent wrt transforms.) 18:11:27 oerjan: :P <-- wat 18:11:52 oerjan: can pure untyped LC with no frills do sharing? 18:12:45 elliott: sure, it can do lazy evaluation which means each argument to a function is only evaluated once 18:13:39 you need frills if you want to share things defined in terms of themselves, though. 18:14:06 right 18:14:35 (i.e. when you translate let x = whatever x in x to LC using self-application, sharing disappears) 18:14:47 I take it there's a way to recover that 18:14:59 oerjan: all that's needed to reduce (Y Y) to (Y Y) rather than growing infinitely is speculative evaluation, right? 18:15:14 erm 18:15:29 i discovered this when thinking about lazy-k 18:15:41 and my idea was simply to cache self-applications 18:15:54 the Y comment was separate, btw 18:16:05 It is bad that there are two mathmeticians with places in history called Alonzo Church 18:16:11 elliott: oh and i'm not talking about infinite growth, you don't need sharing to avoid that 18:16:17 oerjan: I know that 18:16:22 like I said, it was a separate comment 18:16:34 They are related 18:16:35 Huh 18:16:49 taneb a persons date of birth is intentionally a private matter. or else it could be encoded within his name :P 18:17:10 elliott: i've thought about S I I (S I I) in that vein, and avoiding growth for that requires sometimes evaluating I x in non-head position 18:17:20 ok the word intentionally is too strong 18:17:21 i assume Y Y would be similar 18:17:44 oerjan: right, so basically speculative evaluation, no? 18:17:52 evaluating things you're not required to because you think they'll help :P 18:18:08 elliott: yeah. but you can also detect certain functions which always cheap to apply, such as I 18:18:16 *which are 18:18:21 right 18:18:44 so, general, space-and-time-efficient, non-strict LC small-step reducers 18:18:47 GOGOGOGOGO EVERYONE 18:18:59 my goal is to reduce every topic in here to research problems 18:19:06 i'll bring the coffee 18:19:43 cos, i'm not shy with the number of teaspoons of coffee 18:20:08 oerjan: he ain't shy 18:20:32 with any luck you can have panic attacks at 5am just like me 18:21:02 I still think the only person who will ever have problems with regionfile-always in practice will be Vorpal, and that's because he tries to make any change to the architecture as awkward as possible. Actually maybe he should just stay on whatever revision he's on, forever. <-- what does that change do? 18:21:21 Vorpal: It's the mcregion-bsaed caching-and-persistence system. 18:21:29 Should use less disk than mcmap uses in RAM. 18:21:31 elliott: in other words i put as much as 2 heaped teaspoons of coffee in my mug 18:21:56 elliott: fair enough. Would be a problem on a thin client, but I doubt anyone would use that for running mcmap 18:22:05 itidus20: Only 2? 18:22:14 fizzie: See, even Vorpal is 0kay with it. 18:22:21 yeah, only 2 18:22:34 Of course, I have no need for coffee, but I have a friend who takes two and a half, black, no sugar 18:22:42 elliott: in worst case I guess I could put it on tmpfs. The disk in the laptop I use for mcmap is quite slow, 5400 RPM 18:22:50 at least not an SSD 18:22:56 wow 18:22:58 I might have had a problem with it if it used ssd 18:23:05 if I used* 18:23:06 Taneb: he sounds like a badass 18:23:08 gah, tired 18:23:19 Vorpal: SSD write-cycles are not really anything to worry about any more. 18:23:26 itidus20: Nah, she just likes her coffee like that 18:23:27 But yes, /tmp would certainly work. 18:23:32 :o 18:23:36 Vorpal: The nice thing about doing it by default is that it'll make the new //upgrade work seamlessly. :p 18:23:36 dear god its a female 18:23:39 Right now it loses your map data. 18:23:40 8-19 at university today. Quite tired. 18:23:55 elliott: wait what, upgrade without reconnecting? 18:23:59 elliott: if so: why the fuck 18:24:11 My /tmp is only 512M. :/ 18:24:13 I mean, mcmap doesn't need that 18:24:22 sorry taneb, im just kidding for dramatic effect 18:24:27 Vorpal: It's already written. 18:24:34 Vorpal: I asked the very same question; apparently simply because it can be done. 18:24:39 ah 18:24:44 Vorpal: Anyway, you'll want to reload your Scheme configuration when that stuff is done. 18:24:51 elliott: is this the HA edition of mcmap 18:24:58 Might as well be a _proper_ reload that also works for upgrades, not just a deinitialise-Scheme-somehow-and-argh-I-don't-even-know hack. 18:25:04 elliott: oh right, I'm not on a scheme branch at all 18:25:15 Right, well, I don't recommend anyone be on that branch right now. 18:25:17 Or use //upgrade. 18:25:19 elliott: I haven't played mc for quite a while now, like 3 weeks 18:25:22 It's in both branches but lacks... polish. 18:25:59 elliott: anyway you need to pass on the FDs I guess. Would that even work on the windows build? 18:26:00 wow, 89 people in this room now - think that is a new record 18:26:04 AND NOBODY ANSWERING MY QUESTION 18:26:07 I mean, sure, with exec() 18:26:16 Vorpal: Apparently Windows has something for it. But no, currently the built is so broken on Windows, you have no idea. 18:26:21 (It would just be a simple ifdef to fix it again.) 18:26:25 Vorpal: 18:26:26 The file thing should work on Windows too, it just needs the proper CreateFile calls. (In particular the SECURITY_ATTRIBUTES needs bInheritHandle of true, and dwShareMode that FILE_SHARE_DELETE for the delete-before-close... and I'm not entirely sure how you pass an inherited handle. Oh, and then of course you'd have to make the sockets inheritable somehow, that might be more complicated.) 18:26:28 (But that's dignifying the Hack with such things.) 18:26:41 Vorpal: https://github.com/fis/mcmap/commit/4edb5be2f9c6625151707294ece06b2374d98ce9 18:26:45 hm 18:26:47 Vorpal: Please enjoy this terrifying yet short diff. 18:27:18 elliott: I'm kind of tired. Too tired to read C code certainly. 18:27:36 Vorpal: Sleep won't help you understand it. 18:27:45 elliott: 6 hours of lectures in one go is kind of... eugh 18:27:57 Vorpal: At least gawp at the cmd.c part at the very top. 18:28:03 It's short and the most maximally terrifying part. 18:28:09 elliott: char fd_str[256]; snprintf(fd_str, sizeof(fd_str), "%d", fd); => char *fd_str = g_strdup_printf("%d", fd); 18:28:14 first bison & lex and other things about compiler design for 2 hour, then linear algebra for 4 hours. 18:28:20 fizzie: That allocates, and I'd have to free it post-execv, which is never. 18:28:30 Memory leaks, don'tchaknow. 18:28:56 You already just throw away the proxy_serialize_state buffer, which is far larger. 18:29:10 -!- augur has joined. 18:29:12 Hmm, right, I'll fix that. 18:29:17 elliott: well cmd.c seems straightforward. I seen this trick done in IRCds before. I assume the id for the network fd is fixed? 18:29:26 oh wait there it is 18:29:26 Vorpal: No? 18:29:27 in the argument 18:29:30 Yeah. 18:29:31 yeah tired 18:29:36 Vorpal: But it's not the network fd. 18:29:42 It's an fd created from a temporary file just to pass serialised state around. 18:29:43 elliott: well that has to go somewhere. 18:29:46 The actual fds are hidden inside that byte stream. 18:29:56 Vorpal: are you a grad student? 18:29:59 elliott: ah yes, same thing as that ircd did, except it used pipes iirc. 18:30:10 elliott: The process is going to exit in a few lines, you're going to be "leaking" all the world data and everything if you insist on freeing everything for the exec. 18:30:17 itidus20: I don't remember the US system. Please convert to Swedish system or clarify yourself 18:30:21 fizzie: BUT THEY'RE NOT LOCAL LEAKS 18:30:22 oh hmm 18:30:30 do you have a degree yet? 18:30:39 itidus20: I'm a compsci student, bachelor level, third (and last) year for that. 18:30:46 elliott: WELL WHAT ABOUT WHEN THE FD IS LARGER THAN 10^256 HUH? 18:31:02 fizzie: THEN YOU'RE IN FUTURE SPACE!!!!!!!!!!!!!!!!!!! 18:31:03 vorpal, well i mean, it sounds like they have some tough classes :D 18:31:06 WHY ARE YOU PLAYING MINECRAFT GO FUTURE VR 18:31:16 itidus20: eh, isn't it just that the US education system sucks? 18:31:25 i am in AUS system which is probably like the US 18:31:29 ah 18:31:31 just look at the name 18:31:32 aUS 18:31:36 :P 18:31:37 XD 18:31:46 Vorpal: Anyway, the main issues with //upgrade right now are (a) loses your map data, (b) pops up a new map window which steals focus. :/ 18:31:56 aUS, USa .. its an anagram 18:32:11 Vorpal: Also (c) makes me connect to c.nerd.nu with my chat-repeating spamscript. 18:32:15 bbl food 18:32:21 I'm sure I'll be on the ban list within a day. 18:32:40 itidus20: Maybe a is short for the Scots auld 18:32:48 itidus20: Which means senior 18:32:56 itidus20: Which can be shortend to sr. 18:33:05 itidus20: SO YOU LIVE IN THE USSR 18:33:29 terra australis or something 18:34:15 -!- augur has quit (Remote host closed the connection). 18:34:36 **r** *us**a*is or something 18:35:20 **r** *us*****s 18:36:28 I'm sure I'll be on the ban list within a day. <-- so remove that script? 18:36:35 Vorpal: it was a one-time thing 18:36:40 I got kicked automatically within four messages 18:36:42 austr**ia 18:36:46 terror mustards 18:36:52 elliott: ah well, say sorry then or such 18:36:56 aus****** 18:37:09 Vorpal: I doubt they even noticed; have you _seen_ that thing's chat? 18:37:18 ^russia, ussr, austria, usa 18:37:20 elliott: no, never been there 18:37:24 You're missing out. 18:37:35 elliott: probably would kill my mc since I'm using improvedchat, which has scrollback 18:37:49 also it has line editing and input history 18:37:52 quite a nice mod 18:37:54 just 9 strips left until iwc 3160 aieee (and someone in the forum apparently thought it was 3150) 18:38:02 especially when working with lots of server commands 18:38:09 There's new posts in the forum? 18:38:14 Why didn't you tell me? 18:38:29 oerjan: is that the CH number? 18:38:36 elliott: yes 18:38:42 oerjan: if it ends there, we don't know. He might go for one more, to say he did *more* than that 18:38:48 Taneb: erm because i'm reading the forum only twice a week 18:38:54 oerjan: latest strip looks _somewhat_ like edging towards a conclusion 18:39:01 not that I have a good handle on IWC plotlines 18:39:19 elliott: I read IWC and I'm not sure I understand the current plot either. 18:39:22 It is rather confusing 18:39:27 but yes 18:40:09 oerjan: it's ok, you still have all those mezzacotta archives to go through... 18:40:16 elliott: ah yes. 18:40:22 and it's still updated! daily! 18:40:58 elliott: your upgrade command seems to have an issue. No version number on the data that I can spot 18:41:07 elliott: if you upgrade, the new version might have more state 18:41:16 Vorpal: The version number is, if it crashes, you need to restart it manually. 18:41:24 you need to be able to handle the old state format for true HA. 18:41:36 Erlang patches welcome 18:41:45 XD 18:42:08 elliott: actually that would be easy in erlang, there are ready made modules with code to help you do that. 18:42:29 It wouldn't be hard in mcmap either, but really it's for reloading, not particularly "major" upgrading. :p 18:42:51 elliott: anyway, worse than instant crash might be a situation where it silently corruptions the data in some subtle way. 18:43:08 But hopefully there should soon be an easy-ish way to get mcmap to prompt you to say yes to automatic pull/make if there's new changes before you even connect, bypassing the need entirely in 90 percent of upgrade cases. :p 18:43:18 elliott: anyway, reloading, as in reloading config? Or what? 18:43:19 I'm good at obsoleting my oen work. 18:43:26 Vorpal: Well, reloading "scheme shit". 18:43:29 because uh, for reloading config that sounds overkill 18:43:35 elliott: this sounds overkill for that 18:43:42 There's no way to de-initialise Guile that i know of. 18:43:46 It's hardly overkill, the diff isn't that big. 18:43:54 And it's certainly cleaner than something hacked specifically for the Scheme support. 18:43:56 elliott: nor unload specific scheme scripts? 18:44:10 elliott: besides, what if the scripts in question have state, won't that be lost? 18:44:14 That's not a thing anybody does. I don't like the Emacs model where you just run it over, and all your old variable bindings, hooks, etc. stick around. 18:44:31 Vorpal: Yes, but they'd be lost if you restarted mcmap normally anyway; nothing's going to be storing anything massively persistent without, you know, persisting it. 18:44:37 true 18:45:15 elliott: guess you need an on-reload event or such 18:45:23 or well, on-shutdown maybe 18:45:28 That's just called "your script is executing". :p 18:45:30 to allow persisting state 18:45:41 elliott: hm? There is no way to add a hook for specific events? 18:45:43 I don't see much use for persistent state in scripts but maybe that's my Lack Of Imagination. 18:45:50 Vorpal: Never said that. 18:46:04 I said that on-reload is easily detectable: if you're not loading, your script's statements aren't executing. 18:46:08 elliott: example: persistent chat history, not a good example I admit 18:46:11 Script: 18:46:14 (display "foo") (newline) 18:46:18 That displays "foo" iff we're reloading. 18:46:35 elliott: I meant before the reload 18:46:37 not after 18:46:47 elliott: as in, a hook that allows you to save your state 18:46:56 before mcmap exits or reloads or whatever 18:46:57 Well, that's a bit harder. But anyway, this is not a priority, compared to all the other things that need doing. 18:47:04 fair enough 18:47:11 Like: working regionfile code, working mostly-autoupdate code, making the Scheme stuff actually usable. 18:47:22 Making upgrade not create a new window with lost map data and stealing focus. 18:47:30 Quite higher priority. :p 18:47:56 elliott: hm what about a scheme script that did aim assist, for the bow that is. Corrected your arrow for moving mobs or such. 18:47:56 XD 18:48:08 Yes, there's all sorts of fun cheats you can do. 18:48:16 I'm personally looking forward to writing a //quarry. 18:48:19 elliott: the one I mentioned would be rather hard to write though 18:48:24 elliott: what would that one do 18:48:39 Vorpal: Dig a quarry for you at an inhuman pace. Preferably automatically handling putting things in chests, etc. 18:48:43 just dig out a hole? That is not cheat, that is automation. 18:48:49 That's cheat. 18:48:53 elliott: oh the server doesn't limit speed of digging? 18:48:57 Well, it does. 18:49:09 But there's no way a human can operate at ABSOLUTLEY optimal speed :P 18:49:13 re: automation: Not all of us are WorldEdit-creative-MinecraftCAD . 18:49:15 players. 18:49:16 elliott: not much of a cheat. 18:49:22 It is totally a cheat. 18:49:33 You get tons of resources by sitting back and doing nothing with Minecraft minimised 18:49:36 elliott: aim assist is totally a more cheaty cheat 18:49:53 Why have aim assist when mcmap could just automatically find, target, and shoot at every enemy in range? It doesn't even have to send that to the client. 18:50:00 So you just see arrows sprouting out of you and killing every enemy in sight. 18:50:01 elliott: heh 18:50:10 elliott: that would be kind of cool. 18:50:59 Or how about THIS for a hack: You type a command, and it jumps off the nearest cliff. 18:51:05 EVERYTHING IS POSSIBLE WITH MCMAP/GUILE 18:51:07 elliott: btw I tried out that water shader mod. Kind of cool, but quite buggy for me. Like random terrain around me flickering and so on. 18:51:22 -!- Wamanuz has quit (Remote host closed the connection). 18:51:38 elliott: did you enable flying on your server? I don't remember 18:51:45 brb 18:51:51 -!- Wamanuz has joined. 18:51:52 Vorpal: No. 18:51:55 ah 18:52:00 And the setting of the fly thing is irrelevant to whether fly hacks are approved of. 18:52:05 (It triggers for fences and shit sometimes.) 18:52:09 But yes, it's meant to be "legit". 18:52:34 I don't even like people using mcmap to scout out ore really, though it's not something I'd ban. Personally I've found that precision mining is incredibly boring. 18:53:42 (It triggers for fences and shit sometimes.) <-- yes, and going down a ladder while removing the backing stone blocks 18:53:51 I had that happen once 18:53:57 no clue how, couldn't reproduce it 18:54:19 elliott: anyway I found that mining in general is quite boring. 18:54:27 It is, but oh well. 18:54:31 mcmap is more fun than Minecraft. 18:54:31 i found a fascinating article and trying to apply what i saw there.. so what if anything is wrong with this? λx.λy.x+y 18:54:42 i tried to write a mod called 'extractor' 18:54:54 elliott: making a mine might be fun. As in, with lifts and winches and so on. So it looks like a real mine 18:55:32 Clearly we need dfmap. 18:55:35 Oh wait, that's DF. 18:55:37 generally it was a chest that was digging a shaft to the bedrock collecting ores 18:55:44 λm.λx.λc.m * x + c 18:55:48 nooga: I thought you hated Minecraft. 18:55:54 I have been in a mine once. A high tech one. Mostly a wide road going down inside a mountain. And lots of advanced machines. As far as I understood, that mine operates mostly automatically, AI-controlled trucks, using position markers on the walls and what not. 18:55:55 Gregor: You gonna tell itidus20 that LC has no built-in arithmetic? 18:56:07 hmm 18:56:08 Vorpal: I thought you meant in Minecraft X-D 18:56:09 Clearly we need dfmap. <-- stonesense 18:56:09 elliott: Nope. 18:56:14 and this chest would spawn other chests that did the same but horizontally 18:56:15 thanks gregor :D 18:56:16 Vorpal: No, dfmap is DF itself. :p 18:56:20 on different levels 18:56:22 * itidus20 wipes brow. 18:56:26 stonesense is more like the game that DF is the mapper for. 18:56:40 elliott: hm? Yes I meant building a mine replica in minecraft. Not a minecraft style mine, but do it creative to look like a real mine 18:56:44 that is what I'm suggesting 18:57:00 I meant 18:57:01 I have been in a mine once. A high tech one. Mostly a wide road going down inside a mountain. And lots of advanced machines. As far as I understood, that mine operates mostly automatically, AI-controlled trucks, using position markers on the walls and what not. 18:57:02 Vorpal: I thought you meant in Minecraft X-D 18:57:09 the first time i read it 18:57:12 ah 18:57:13 XD 18:57:13 I was like what, without any mods? 18:57:19 That must be some piston/minecart setup. 18:57:25 elliott: yes. I don't think LKAB used any mods XD 18:57:33 it was a guided tour. 18:57:44 of some no-longer-active parts of the mine 18:57:45 guided tours are for wusses 18:58:01 oklopol: they wouldn't let people run around freely in an operating mine 18:58:12 "let" 18:58:17 ... 18:58:21 Only applies if you ask permission :P 18:58:23 no one asked them 18:58:24 yeah 18:58:47 elliott: btw they had a kind of paternoster like thingy for moving up the iron ore to the surface. 18:59:33 did you get to see any redstone 18:59:37 ahh heres the justification in next section "Predefined constants, which act as values and operations are allowed in an impure or applied lambda calculus." 18:59:46 Gregor: Uh. 18:59:49 oerjan: :P 19:00:05 elliott: fyi, it was magnetite ore. They didn't find a sedimentary layer I guess. 19:00:34 oklopol: XD 19:00:34 Did you kill any elves. 19:01:00 elliott: didn't get the chance, it was summer, not sprint 19:01:01 spring* 19:01:47 elliott, as if Vorpal would kill elves. 19:02:09 Phantom_Hoover: he has a self-loathing streak. 19:02:18 elliott: oh and, they transport the ore on some huge trains, iirc about 1 km in length. With two or four huge locomotives pulling. 19:02:27 :O 19:03:15 http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg <-- there is one, saw that from my hotel window when I was up there, it was right next to the railway. 19:03:16 i've never been in a paternoster i should try it 19:03:19 it sounds cool 19:03:30 seems a bit shorter than what I saw 19:03:32 elliott, go to that university that has one. 19:03:42 also, 1km trains cooooooooooooooooooooooool 19:03:45 Phantom_Hoover: thx 19:04:03 elliott: that one was for ore, it had like huge buckets, not somewhere you could stand it 19:04:05 in* 19:04:24 elliott, Sheffield! 19:04:42 Leinster! 19:04:49 Vorpal: also nice landscapey thinsg in that picture 19:04:55 (By which I mean Leicester.) 19:05:01 Phantom_Hoover: I have been to Sheffield it is a place ofbadness and steel... orw a sit coal... 19:05:04 `addquote Just goes to show, the Beatles are more interesting than green vegetables. 19:05:06 655) Just goes to show, the Beatles are more interesting than green vegetables. 19:05:14 elliott: yes certainly. It is up in north Sweden. Far between inhabited areas there. 19:06:04 elliott: hours between each road crossing with the railway. Just forest and myrmark (not sure what that is, not quite "bog" but something similar I think) 19:06:10 ok in my next few posts which follow, i ask to allow for: impure or applied lambda calculus 19:06:24 oh, it is exactly bog it seems 19:06:26 Well, I've just translated a predecessor function into a BCKISW tree 19:06:30 Vorpal: so theoretically a good place to plan the demise of civilisation? 19:06:38 so i have the + operator.. "just because".. because im playing magic 19:06:39 elliott: uh? 19:06:46 just asking 19:07:13 elliott: oh btw, in some areas up there, the water is still pure enough that you can drink fresh water out of rivers without purifying it first. Though that probably won't be so for long. 19:07:26 what with all pollution. 19:07:45 so.. given, λx.λy.x+y .. is this.. λx.(λy.(x+y))? 19:07:58 itidus20: well yes. 19:08:01 Vorpal: ok that's good so if i destroyed the water supply i could still drink 19:08:06 elliott: i know it kills you :P 19:08:08 heh 19:08:13 elliott: what are you planning!? 19:08:35 Vorpal: Shhhhhhhhhhhhhhhh 19:08:48 elliott: anyway, it is cool, so different from the more densely inhabited south Sweden. Which of course would be counted as sparse by English measures. 19:09:39 elliott: also it is mostly birches up there. Few other trees can survive. 19:09:42 in england we just took about ten countries and miniaturised them 19:10:01 *compacted 19:10:05 but yes http://upload.wikimedia.org/wikipedia/commons/f/fe/IORE_beim_Tornetr%C3%A4sk.jpg is pretty I will have to find the gprs coordinates so I can walk there from here 19:10:12 just start swimmin' when I get to water 19:10:16 It's the minecraft f-three way to travel 19:10:24 elliott: /tppos 19:10:33 is that lake thing frozen or not, i can't tell 19:10:46 oh it even has the coordinates there 19:10:57 elliott: well it seems to be winter. I would assume it was frozen 19:11:10 I was up there in early summer, June or so. 19:11:29 http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4 19:11:32 hey only fifteen days walking 19:11:36 oh my sweet jesus 19:11:37 Vorpal 19:11:39 look at that route 19:11:42 it goes from hexham to the netherlands 19:11:44 TO THE UK 19:11:45 to denmark 19:11:53 its a fucking loop de loop 19:12:01 WHY DOES IT GO TO LATVIA 19:12:12 anyway this is the thing i found: http://www.cs.uiowa.edu/~slonnegr/plf/Book/Chapter5.pdf 19:12:13 i love the 200km walk back and forth 19:12:23 And the visit to Latvia 19:12:27 oklopol: which point is that 19:12:28 elliott: you don't want to go up there in late June or the rest of the summer. All those bogs. You get too many mosquitoes up there then. 19:12:30 i mean the non-ferry part 19:12:33 oh 19:12:34 lmao 19:12:47 elliott: nice route too 19:12:48 ok this is the best route 19:12:49 i'm doing this 19:12:51 cya suckas 19:13:20 elliott: anyway that is further north than what I went. If you look on your route you will spot "Kiruna", that is how far I went 19:13:35 elliott: the visit to latvia 19:13:38 Also, I think Hexham has a disproportionately large amount of esoteric programming enthusiasts 19:13:40 well I actually went out sideways from Kiruna too 19:13:56 Taneb: elliott is from there, who else? 19:14:00 Taneb 19:14:04 Me 19:14:05 oklopol: it's my european trip practically fucking planned out already 19:14:22 And as far as I am aware, we've NEVER MET 19:14:25 we were planning to walk 100km in the near future, but i guess we could extend it abit 19:14:27 *a bit 19:14:38 yeah to 2,948 miles say 19:14:43 elliott: I went here too: http://maps.google.com/maps?hl=en&ll=67.851697,19.019244&spn=0.004846,0.027058&sll=67.851697,19.019244&sspn=0.004846,0.027058&vpsrc=0&dirflg=w&t=h&z=16 19:14:54 Taneb: we have to make sure we never ever meet 19:14:58 Vorpal: in norway this year there are warnings against drinking river water because of all the lemmings 19:14:59 Agreed 19:15:00 elliott: that counts as a village btw. Like 4 hours or so. 19:15:01 it would violate the specialness 19:15:07 oerjan: really? XD 19:15:24 yep, greatest lemming infestation for decades 19:15:27 Vorpal: that's the shittiest village i've ever seen 19:15:32 And as far as I am aware, we've NEVER MET <-- how large is Hexham? 19:15:39 elliott: really? 19:15:42 12000ish people 19:15:42 Vorpal: pop. twelve thousand or so 19:15:46 ah 19:15:47 erm 19:15:49 not twelve thousand 19:15:50 what Taneb said 19:15:55 it's small 19:16:01 Which is twelve thousand 19:16:05 elliott: anyway that village is like how close you can get by car to Sweden's highest mountain 19:16:07 oh isi t 19:16:07 What we said were equivalent 19:16:13 i'm not so smart with the numbers 19:16:18 Vorpal: who needs cars when you can walk to latvia 19:16:33 XD 19:16:51 Mehamn looks like cool palce 19:17:01 elliott: is it swim or ferry? 19:17:05 ferry 19:17:07 http://en.wikipedia.org/wiki/Mehamn 19:17:10 look at that fucking location mark 19:17:33 size: 709 19:17:34 heh 19:17:43 nothing at the very tip :( 19:17:53 elliott: anyway Longyearbyen is more remote I would say 19:17:59 not sure which one is furthest north 19:18:01 `addquote Vorpal: who needs cars when you can walk to latvia 19:18:03 656) Vorpal: who needs cars when you can walk to latvia 19:18:12 Vorpal: oh i wanna visit svalbard sometime 19:18:18 doesn't really count as part of norway or anything though :P 19:18:33 elliott: it has a rather unique status, that is true 19:19:04 i used svalbard to test a weatherbot the other day 19:19:16 http://maps.google.com/maps?hl=en&sll=67.851697,19.019244&sspn=0.004846,0.027058&vpsrc=6&dirflg=w&t=h&ie=UTF8&ll=73.677264,59.677734&spn=6.659198,29.750977&z=5 wow what the fuck is this thing 19:19:25 my attitude to geography is like icp's to magnets 19:19:25 i was looking on googlemaps for a place 19:19:25 itidus20: did it work? 19:19:34 yup 19:19:40 not my weatherbot tho but someones 19:19:45 but seriously what is that thing 19:19:50 elliott: and that is Nova Zemblya (no clue about spelling) 19:19:59 elliott: used for nuclear testing by Soviet 19:20:08 is it actually that huge or is that the broken map projection google maps use 19:20:09 s 19:20:12 the Tsar Bomba was detonated there. 19:20:24 Nova Zembla Island ("New Land") is an uninhabited island in the Qikiqtaaluk Region of Nunavut, Canada. It is located in Baffin Bay off the northeastern coast of Baffin Island. Round Island is 7.4 km (4.6 mi) to the southeast.[1] 19:20:26 Nowa Ziemia 19:20:29 so exciting 19:20:30 (New Land) 19:20:32 Round Island is an uninhabited island in the Qikiqtaaluk Region of Nunavut, Canada. It is located in Baffin Bay off the northeastern coast of Baffin Island. Nova Zembla Island is 7.4 km (4.6 mi) to the northwest.[1] 19:20:37 I guess I'll visit there 19:20:41 gotta be fun, right? 19:20:46 http://upload.wikimedia.org/wikipedia/commons/c/c9/Sirmilik_Glacier_2_1997-08-06.jpg 19:20:48 oh that's cool 19:20:50 elliott: doubtful. Radiation hazard 19:20:52 I'll go there after Latvia 19:20:56 http://en.wikipedia.org/wiki/Mehamn <-- i recall mehamn from the weather forecasts during whatever summer it was when the whole of norway had a heatwave - except mehamn, which stayed stable at 9 celsius. 19:21:01 Vorpal: meh, I can deal 19:21:01 in russian: Nowya Zee-em-lya 19:21:08 oerjan: 9 seems a bit high for that place :P 19:21:14 http://en.wikipedia.org/wiki/Sirmilik_National_Park 19:21:15 dudes, let's go here 19:21:24 no radiation to my knowledge!!! 19:21:34 yeah 19:21:45 pretty good location for a meetup, nobody will _ever_ find Vorpal's body 19:22:17 http://en.wikipedia.org/wiki/Nova_Zembla_Island <-- err, wtf, a stub? 19:22:38 wait different one 19:22:45 oh it's a different one? 19:22:49 http://en.wikipedia.org/wiki/Tsar_Bomba 19:22:55 aha 19:22:56 http://en.wikipedia.org/wiki/Novaya_Zemlya 19:22:57 there we go 19:23:02 i'll visit the other one too though 19:23:07 elliott: confusingly similar names 19:23:12 http://pl.wikipedia.org/wiki/Nowa_Ziemia 19:23:20 elliott: will you visit me on your trip, that goes through turku 19:23:33 oklopol: hmmhmm yeah ok, but you have to promise to join in on the rest of the trip 19:23:38 elliott: well yeah it _is_ right next to the arctic ocean 19:23:40 i'll basically thread through the countries picking up esolangers 19:23:45 -!- Zetro has quit (*.net *.split). 19:23:46 -!- aspect has quit (*.net *.split). 19:23:46 -!- rodgort has quit (*.net *.split). 19:23:46 -!- variable has quit (*.net *.split). 19:23:46 -!- tswett has quit (*.net *.split). 19:23:47 -!- ineiros has quit (*.net *.split). 19:23:47 -!- Zwaarddi1k has quit (*.net *.split). 19:23:47 -!- myndzi has quit (*.net *.split). 19:23:51 and we'll all have adventures 19:23:52 -!- aspect has joined. 19:23:58 -!- tswett has joined. 19:24:01 -!- Zetro has joined. 19:24:01 you think i am being wacky but that would actually be a perfect life. 19:24:04 -!- ineiros has joined. 19:24:04 actually i took a bus from where the route makes a sharp turn left 19:24:08 you think i am being wacky but that would actually be a perfect life. 19:24:11 -!- iamcal has quit (Remote host closed the connection). 19:24:13 stupid netsplits 19:24:23 -!- myndzi has joined. 19:24:23 i love how fucked satellite greenland is on google maps 19:24:25 -!- Zwaarddijk has joined. 19:24:31 it's some white with harsh square corners where they pasted over the aliens 19:24:48 if you walk here, i will certainly join you for the rest of the trip 19:24:56 because there would be no limits to the awesomeness 19:24:59 -!- variable has joined. 19:25:09 i wonder how much it costs to like 19:25:15 manage to get to one of those fucking nowhere islands 19:25:28 i guess you need to like hire your own plane and get clearance and shit 19:25:32 SO COMPLICTAED OMG 19:25:36 why can't the world be like minecraft 19:25:46 With zombies and creepers? 19:25:57 on peaceful. 19:26:02 Okay 19:26:05 although i guess those would be fun too 19:26:07 Taneb: it is 19:26:09 perhaps on creative too 19:26:27 stupid netsplits <-- i assume this was connected to christel's global notices 19:26:29 oklopol: there is some part of my sleep-deprived brain that is seriously considering going on wacky sweden adventures with as many esolangers as i can pick up 19:26:34 I will let you know when sanity sets back in 19:26:39 oerjan: will you join 19:26:44 i'll walk to trondheim specially 19:26:54 hmm 19:26:55 elliott, will you punch Vorpal. 19:26:59 I should just do it without letting you know I'm actually really going to do it 19:27:03 You have often indicated your desire to do this. 19:27:03 and you'll be too shocked to say no 19:27:15 Phantom_Hoover: I don't know, are there laws against that in Sweden? Vorpal? 19:27:17 "no one cares what asia looks like" --- google 19:27:44 oklopol, we all know that Asia looks the same however you display it. 19:27:48 elliott: yes. 19:27:53 Vorpal: will you invoke them? 19:27:56 it'll just be a mild punch 19:28:03 elliott: yes I certainly would. 19:28:10 Vorpal, baby. 19:28:14 Phantom_Hoover: I'll get oklopol to punch Vorpal 19:28:15 i think you could punch Vorpal as hard as you wanted to 19:28:22 http://upload.wikimedia.org/wikipedia/commons/4/45/View_from_B%C3%A1rr%C3%A1s.jpg 19:28:28 oh man, we're going there 19:28:30 and he'd ba all like 19:28:32 *be 19:28:38 elliott: where is that? 19:28:41 finnmark 19:28:43 norway 19:28:44 oh i thought mosquito season was long gone lolololol 19:28:45 elliott: in sweden you can be arrested for punching someone even if they give you permission, if they change their mind later. 19:28:47 can my life just be hdr nature photography forever 19:28:52 elliott, so wait will you go and get Taneb before me? 19:28:59 -!- rodgort has joined. 19:28:59 Phantom_Hoover: I and Taneb can never meet. 19:29:03 I'll get you though sure, 19:29:07 oerjan: ah. 19:29:11 oerjan: eh? 19:29:14 oerjan: so will you come along for the ride 19:29:24 elliott, for the truth is....... you are the same person. 19:29:29 oerjan: so why are there still martial arts clubs? 19:29:30 Phantom_Hoover: yeah true 19:29:40 but you don't know it 19:29:42 oerjan, is this some kind of subtle commentary on Assange? 19:29:58 oh i guess you're suspecting it already 19:30:00 Phantom_Hoover: I was wondering about that, but eh, quite different situation. 19:30:15 Phantom_Hoover: you got me :P 19:30:16 oklopol: hey ask oerjan whether he's coming along or not he's not answering me. 19:30:17 Vorpal, no, punching is technically a form of rape. 19:30:18 oerjan: in sweden you can be arrested for publicly reprimanding your own, misbehaving child 19:30:37 Phantom_Hoover: pretty sure that is not the case. 19:30:53 nooga: that is true. 19:31:02 well, it was with physical attack 19:31:03 if you punch someone and they orgasm, is that rape 19:31:14 elliott: sorry, but my feet are incapable of walking much longer than to the shop 19:31:16 level of discourse is high tonight 19:31:25 penis penis penis 19:31:27 elliott, that's also a form of rape. 19:31:43 nooga: doing it verbally would be legal. Giving the child a hard slap would not. 19:31:50 Phantom_Hoover: I and Taneb can never meet. <-- wait, wouldn't it be ok as long as it is nowhere near hexham? 19:31:52 how about soft slap? :P 19:31:53 oerjan: there'll be ferries 19:31:58 oklopol: MUSHROOM MUSHROOM 19:32:16 Shall I kill some badgers in DF? 19:32:17 haxham 19:32:18 I'll take a separate root and end up in a different country 19:32:19 oerjan: what would the issue with them meeting each other be? 19:32:30 IT WOULD RUIN THE MAGIC 19:32:31 Phantom_Hoover: yes. 19:32:32 Taneb: oh my god 19:32:34 Taneb: go aroudn the world 19:32:35 the other way 19:32:37 PS everyone is required by Law™ to watch this: http://www.weebls-stuff.com/songs/Babies/ 19:32:37 and end up 19:32:38 Oh wait I already killed all the badgers. 19:32:39 at the same desitnation 19:32:45 Taneb: maybe a square root? 19:32:45 hexagonal ham 19:32:47 at the saeme time 19:32:49 Taneb: y/n (Y) 19:32:53 Q! 19:32:57 yyyyyyyyyyyyy 19:32:59 nooga, fun fact: Hexham is Borders slang for hell. 19:32:59 Phantom_Hoover: new ones can move in from outside the map I *think*, but don't quote me on that 19:33:06 Make of this what you will. 19:33:13 Vorpal, man you're really pro at DF. 19:33:18 Jesus have you even played it. 19:33:38 Hang on, which way around the world are you all going? 19:33:44 Taneb: ---> 19:33:45 Phantom_Hoover: yes. But well, I been too busy with goblins and what not to care about what the wild animals did. 19:33:51 to sweden or some nowhere island 19:33:52 or somewhere 19:33:55 -!- Vorpal has quit (*.net *.split). 19:34:07 Taneb, you'll basically just have to stay at the antipodeal point from the rest of us at all times. 19:34:26 -!- Vorpal has joined. 19:34:30 well, that was unexpected: 19:34:33 ! Server Terminating. Received SIGTERM 19:34:33 To... Australian Antarctic Territory? 19:34:40 okay 19:34:50 maybe i should just do my antarctic tour now with you guys 19:34:52 what are you guys doing? playing Google Earth? 19:34:54 i mean we're close enough 19:34:57 nooga: planning our trip 19:35:12 Taneb: Phantom_Hoover: oklopol: up for an antarctic trip? 19:35:21 Yes. 19:35:25 it's kinda cold 19:35:26 just so you know 19:35:28 As long as someone else is paying. 19:35:30 but there's penguins 19:35:31 elliott: not Arctic? 19:35:32 that you can be friends with 19:35:38 Taneb: well oklopol has lots of money right? 19:35:38 sure 19:35:42 oklopol: you'll pay right 19:35:43 yes i'm rich 19:35:44 yes 19:35:45 great 19:35:45 totally 19:35:49 Vorpal: hmm well 19:35:55 we can fly over the arctic to get to antarctica 19:35:56 um 19:35:58 spheres work like that 19:35:59 right 19:36:01 nooga: doing it verbally would be legal. Giving the child a hard slap would not. <-- same as in norway then i take. in fact i think they just made the law here stricter. (because the courts had decided they allowed light slaps or something.) 19:36:06 but seriously arctic is boring 19:36:07 no real land 19:36:09 just a bunch of glaciers 19:36:15 antarctica's big fuckin' heap o' ice 19:36:23 We could go to Phillip Island! 19:36:30 oklopol: no but seriously would you pay for this shit 19:36:33 -!- ais523 has joined. 19:36:35 it wouldn't be more than like ten thousand 19:36:37 moneys 19:36:42 and with that ais523 got terrified 19:36:42 Has the advantage of being warmer than Antarctica 19:36:46 be sure to visit Poznań 19:36:48 elliott, yes but what about Finnland^Wwhatever. 19:36:50 With cuter penguins 19:36:52 depends on the amount of moneys i guess 19:37:30 ais523: if I walk to Birmingham, will you join us on our tour of the world? 19:37:46 Phantom_Hoover, me, and oklopol are going to go to a bunch of cool places 19:37:58 elliott: probably not, I hate travel 19:38:06 ais523: ok but wait 19:38:09 ais523: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4 19:38:12 look at this route 19:38:13 ais523, OK, we can go to Manchester. 19:38:13 hm they need to do google street view in more places. Like off road. 19:38:15 tell me this route isn't geographic perfection 19:38:20 it has a fucking loop-de-loop 19:38:21 every few meters, over all the world 19:38:24 a value-add trip to latvia 19:38:30 it's the best walk ever 19:38:48 oerjan: i remember a story told by our media that norwegian social care took people's children because someone stated that he seen the parents dringing beer while their kids were at home 19:38:59 oklopol: I love how it skirts over to Finland for a bit just because it's slightly less bendy than Sweden 19:39:03 elliott, so wait I need to know. 19:39:17 Who will we eat first if it goes wrong? 19:39:21 Phantom_Hoover: you. 19:39:25 "Use caution – This route may be missing sidewalks or pedestrian paths." 19:39:26 nooga: sounds implausible... 19:39:30 ais523: :D 19:39:37 well yeah that location is just the location of um 19:39:39 where's the pic 19:39:39 Vorpal: link pic 19:39:44 elliott, but oko's bigger! 19:39:47 elliott: to what? 19:39:52 they had several stories like that, Vorpal 19:39:55 i met this woman who's kids were taken because she had been a problem child herself. she then wrote a book on this and got an official apology 19:39:57 http://upload.wikimedia.org/wikipedia/commons/f/fe/IORE_beim_Tornetr%C3%A4sk.jpg sorry ais523 for not having info link 19:40:01 http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg 19:40:01 there 19:40:02 *whose 19:40:05 recommending 2.5 miles down an A road looks wrong 19:40:07 ah 19:40:08 that's where we're going, http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg 19:40:09 elliott, also dude why didn't you include Edinburgh in the route. 19:40:11 for a walking route 19:40:17 in norway 19:40:18 Phantom_Hoover: um excuse me that is just the base route 19:40:25 elliott: they move really slowly those trains. Like 30 km/h or so iirc 19:40:32 lots and lots of power though 19:40:54 http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4 19:40:57 yep, that route makes absolutely no sense 19:40:58 OMG best route. 19:41:02 oklopol: so i figure after we reach that sweden destination we'll just like go down to helsinki, then kinda play it by ear? 19:41:06 ais523: we're still following it 19:41:11 I like the part where it crosses the channel six times. 19:41:14 oklopol: could visit iceland next maybe? 19:41:19 elliott: anyway, look at the size of the door on that locomotive. That thing is huge 19:41:22 oooh iceland 19:41:25 Phantom_Hoover: yes i linked it 19:41:26 it's 19:41:27 just the best 19:41:30 or um 19:41:33 are you seeing a different one 19:41:35 i hear there's a lot of crazy going on up there 19:41:36 because you need to click the link icon 19:41:38 at the top-right 19:41:40 to get the link 19:41:43 -!- derdon has quit (Remote host closed the connection). 19:41:49 elliott: don't go to iceland. You will get stuck there while waiting for the ash to clear. 19:41:56 the instructions in Sweden will be basically impossible to follow 19:41:58 elliott, sorry, http://maps.google.com/maps?q=from:+hexham+to:+edinburgh+to:+68.269125,19.376158&saddr=hexham&daddr=edinburgh+to:68.269125,19.376158&hl=en&ll=48.224673,1.318359&spn=31.503035,57.65625&sll=53.917281,-1.801758&sspn=6.951905,14.414062&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3BFUW0EQQdHqgnAQ&vpsrc=6&dirflg=w&t=m&z=4 19:41:59 Vorpal: capitalist propaganda 19:42:09 they're just a bunch of "turn left, turn right" with distances but no road names 19:42:14 Phantom_Hoover: ahahahahahaha 19:42:18 ais523: look at that one Phantom_Hoover linked 19:42:20 the instructions in Sweden will be basically impossible to follow <-- how so? I didn't see any issue 19:42:21 you will not regret the decision 19:42:34 ais523: ah 19:42:36 Vorpal: look at 450, etc 19:42:44 Stop posting maps.google.com links containing the string "deew" 19:42:54 Deewiant: X-D 19:42:59 That's the second time in 18 hours 19:43:05 Deewiant: why? this applies to you too 19:43:06 nooga: the norwegian child protection services are well-known for interfering too much in people's private lives and for not having enough resources to help all the children who need it. er, wait... 19:43:06 Phantom_Hoover: It looks like the map thing tried to draw a star. 19:43:08 But then it failed. 19:43:12 Deewiant: yeah wanna come on our trip? 19:43:12 Deewiant: it's not even capitalised properly 19:43:34 I can't trust people to capitalize properly if they want to highlight me 19:43:36 ais523: anyway I'm not sure those road have numbers 19:43:43 ais523: they look too small 19:43:48 Phantom_Hoover: oh my god you can just draw your own path and it mangles it 19:43:56 Vorpal: we could just walk alnogside it with a gps thing no? 19:44:10 Vorpal: roads like that in the UK normally at least have signposts 19:44:11 elliott: maybe. But do you realise the distances in Sweden? 19:44:26 Vorpal: yeah, so we'll need some food and shit 19:44:29 sleeping bags too i get 19:44:31 giving the distance in miles to various nearby insignificant villages 19:44:34 ais523: sure, if they are in urban areas. 19:44:41 but not out in the wilderness 19:44:45 15 days, 17 hours. 19:44:55 Good way to spend a fortnight. 19:44:57 the trip?? 19:45:03 that's nothing :O 19:45:05 ais523: anyway for 450, the sat image resolution is too low to be sure 19:45:19 Phantom_Hoover: oklopol: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:helsinki+to:Kiruna,+Sweden&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3B%3B&sll=67.554754,18.797607&sspn=2.773689,11.634521&vpsrc=0&hl=en&dirflg=w&mra=ls&ie=UTF8&t=m&z=4 19:45:19 i can take two weeks off like that 19:45:19 Vorpal: out in the wilderness, too 19:45:22 it's really not trying to be helpful here 19:45:27 that's why the things they point to are so insignificant 19:45:28 Phantom_Hoover: ~16 days sounds unrealistic 19:45:34 oh wait, ferries, okay maybe not 19:45:38 oh my god 19:45:39 because there's nothing else to point to 19:45:42 Phantom_Hoover: oklopol: zoom in on the finland bit 19:45:42 it just 19:45:45 i can't even explain what it does 19:46:05 http://maps.google.com/maps?saddr=hexham&daddr=edinburgh+to:Helsinki,+Finland+to:68.269125,19.376158&hl=en&ll=59.800634,10.634766&spn=31.091097,70.136719&sll=59.800634,10.195313&sspn=31.091097,70.136719 19:46:19 Just walk along that path 19:46:21 elliott: what is the issue with that bit? 19:46:26 Vorpal: it loops in on itself 19:46:34 Deewiant: fuck that bullshit 19:46:36 Deewiant: that one seems sane 19:46:39 Deewiant: wehre's my fucking latvia tour 19:46:44 where's my fucking loop de loop 19:46:46 -!- zzo38 has joined. 19:46:49 elliott: oh the ferries you mean? 19:46:52 well not strange 19:46:56 http://maps.google.com/maps?saddr=hexham&daddr=edinburgh+to:Helsinki,+Finland+to:68.269125,19.376158&hl=en&ll=59.800634,10.634766&spn=31.091097,70.136719&sll=59.800634,10.195313&sspn=31.091097,70.136719 19:46:58 oklopol: ...we might want to do a slightly saner route though :P 19:47:00 I want to come too 19:47:17 Taneb: yeah ok 19:47:25 http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:Riga,+Latvia+to:Helsinki,+Finland+to:68.269125,19.376158&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3B%3BFVQelgMdAId8ASmRBiGWxwuSRjFj9-I7hL1OzQ%3BFUW0EQQdHqgnAQ&sll=59.592995,11.21014&sspn=29.97045,93.076172&vpsrc=0&hl=en&mra=ls&ie=UTF8&t=m&z=4 19:47:27 Vorpal: Mine was giving driving directions, not the beta walking directions 19:47:29 w ecould add a loop-de-loop to this i guess 19:47:31 if it's just 2 weeks, i'm in no problem 19:47:33 Deewiant: ah 19:47:40 you lot are all mad 19:47:50 XD 19:47:53 ais523: yeah but YOU'RE not going to have any of the fun 19:47:57 what about accommodation? 19:48:04 Deewiant: probably included highways with no walking access 19:48:12 ais523: meh, not that hard; for the long trip up sweden we can just sleep in the wilderness 19:48:19 yes it does 19:48:25 i could even fly to hexham but i guess that'd defeat the purpose 19:48:27 Deewiant: no way to walk along E4 for example 19:48:31 elliott: in /Sweden/? in /September/? 19:48:37 ais523: who said september 19:48:38 Vorpal: You can walk pretty close to those typically 19:48:45 elliott: oh, this is planned for the future? 19:48:48 Just not on the road itself 19:48:50 Of course 19:49:00 ais523: i was thinking tomorrow 19:49:02 Deewiant: hm. Not on E20 near where I live. More like several km away 19:49:05 ais523: dunno, i'm cool whenever 19:49:08 ais523, of course not September, we'd have to do it over Christmas. 19:49:20 sure if you wanted to walk in a ditch, yes then you could 19:49:22 well, especially as several people are likely to have work/school 19:49:32 I know walking near a motorway is nearly always a really bad idea in the UK 19:49:36 i'm going to run a marathon on new year's eve so have to be back by then 19:49:38 as you'll have problems at every junction 19:49:50 Phantom_Hoover: can you take two weeks off for this fun trip 19:49:52 oklopol can 19:49:54 Taneb: you? 19:49:58 Vorpal: What prevents one from walking nearer 19:50:01 elliott, WHO KNOWS 19:50:02 ais523: anyway it might be possible in south Sweden in early September 19:50:03 there was a fun TV series where someone tried to walk between two points in as straight a line as possible 19:50:08 elliott: are you planning on hiking through sweden? 19:50:10 Phantom_Hoover: I don't think you're taking this seriously enough 19:50:11 Deewiant: fields. 19:50:19 Deewiant: it is just fields. Not easy to walk on 19:50:20 olsner: not hiking, just... walking 19:50:22 which involved doing things like getting permission to walk through military bases and getting boats across lakes 19:50:24 sure, possible, but not a good idea 19:50:31 olsner: latvia too 19:50:33 So, possible :-P 19:50:34 because google maps said so 19:50:39 also denmark at one point 19:50:44 and one turku bit 19:50:48 it'll be great 19:50:48 hmm, latvia and sweden are not exactly adjacent 19:50:50 I can take two weeks off for a camping trip in country that speaks a language I don't with people I've never met 19:50:54 olsner: where do you live? 19:50:58 elliott: in sweden 19:51:00 olsner: this is our base route: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:Riga,+Latvia+to:Helsinki,+Finland+to:68.269125,19.376158&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3BFWjvZAMdks9vASntPQflsM_uRjEw_vJozc8ABA%3BFVQelgMdAId8ASmRBiGWxwuSRjFj9-I7hL1OzQ%3BFUW0EQQdHqgnAQ&sll=59.592995,11.21014&sspn=29.97045,93.076172&vpsrc=6&hl=en&dirflg=w&mra=ltm&ie=UTF8&ll=59.888937, 19:51:01 12.041016&spn=29.706005,93.076172&t=m&z=4 19:51:03 yeah but where ins weden 19:51:06 ugh merge that url yourself 19:51:09 olsner: no but it did the ferry loop thingy 19:51:10 like can we pick you up to join in 19:51:16 Taneb: I get the feeling you are also subserious 19:51:21 it is ok, we will just adventure without you 19:51:30 oklopol: btw shape up that Phantom_Hoover into taking this seriously, i'm not just gonna do a two-person trip 19:51:42 elliott: eh that is even more fucked up than before 19:51:49 especially if you're walking most of it alone :D 19:51:51 Vorpal: Yeah, it doesn't like Edinburgh. 19:51:53 I'm completely serious 19:51:56 elliott, why Latvia. 19:51:56 elliott: I /hope/ you aren't serious 19:52:01 Phantom_Hoover: Google Maps wanted us to. 19:52:22 ais523: doubtful, but he is pretending to be. You won't get him to admit anything else for now. 19:52:23 ais523: you're laughing now, but who will be laughing when you hear "band of teenagers and also irresponsible adult found dead in swedish wilderness"? 19:52:40 :D 19:52:43 *found*? 19:52:44 elliott: which adult? 19:52:48 Vorpal: no no i really am perfectly sincere. well maybe the sweden trek will have to be amended to include acommodation places 19:52:53 elliott: well, trying to dissuade you from this would reduce the change of that ending 19:52:54 olsner: yeah would be tricky 19:52:54 aren't me and Taneb rougly the same age 19:52:56 i don't really like the idea of just lying down and sleeping 19:53:04 but no, trip, sounds great 19:53:04 elliott: that would be way out of the way on that trip 19:53:14 Vorpal: meh, more funtime 19:53:17 s 19:53:25 I can believe "... lost in swedish wilderness" :) 19:53:26 elliott: not that I will give you my coords 19:53:28 oklopol: Taneb's sixteen i think 19:53:32 oh. 19:53:35 olsner: yeah, found is unlikely 19:53:44 ais523: btw I think that you can call emergency services even in Swedish wilderness 19:53:45 i mean 19:53:46 I changed "data Succ" to "newtype Succ" since it is a single field 19:53:49 i'm assuming they have phone signal 19:53:49 oklopol: ever been in Norrland btw? 19:53:49 do they 19:53:50 well anyway i've done a lot of walking in the wilderness, it's not that dangerous 19:53:54 err 19:53:55 what's norrland 19:53:55 And a single constructor 19:53:56 olsner: ^ 19:53:58 not oklopol 19:54:02 oklopol: mistab, sorry 19:54:18 oklopol: anyway it is a region in Sweden 19:54:23 i've certainly been to norrland 19:54:28 oklopol: I've done a bit, but even the wilderness in England is pretty tame 19:54:37 Phantom_Hoover: Taneb: btw failure to misrepresent your correct level of sincerity will result in me banging on your door with a bunch of equipment expecting you to be ready to go 19:54:39 maybe like 5 times 19:54:43 norrland is right next to finland, so that should be familiar to oklopol 19:54:43 consider this carefully 19:54:45 elliott, yes OK. 19:54:49 ais523: well yes. UK is basically one huge urban area as far as I can tell 19:54:53 more or less 19:54:56 oklopol: they don't believe me, ha ha 19:55:04 ok but seriously i think we're all neglecting a vital elements of this trip 19:55:10 Vorpal: it isn't, except near large cities 19:55:11 elliott: You can't do that, we'd meet if you do that 19:55:19 Brugge, Den Haag, and Esbjerg 19:55:23 also Kiel and Lübeck 19:55:27 are these not the height of the trip 19:55:30 Taneb: worth ti 19:55:33 it 19:55:38 England, at least, is mostly farmland (so is Wales but it's a different sort of farmland; Scotland is mostly mountains, but people generally live in the other parts of Scotland) 19:55:53 are you sure you want to ruin a perfect strangership 19:55:55 ais523: well, it looks urban from a Swedish perspective. You won't be able to go for hours on a train in UK without seeing anything but forest and bogs. Unless you go in a circle. 19:56:01 oklopol: hmm well you know 19:56:03 trip to sweden 19:56:16 btw i don't care massively about the actual end destination, i just wanna go somewhere upwards swedenwise 19:56:20 Vorpal: that's partly because the train lines deliberately aim for cities 19:56:26 We've got to get to Northern Sweden from Hexham via Scotland, Belgium, England, Netherlands, England, Denmark, Germany, Latvia, Sweden, Estonia and Finland together without meeting 19:56:26 because that's where people like going on a train 19:56:27 although i would like to keep that loop-de-loop and the latvia part, those are the bits i have real attachments to 19:56:44 ais523: yes indeed, but you don't need to go for that to reach a city by the shortest path 19:56:49 or any path 19:56:51 oklopol: how nice is turku btw 19:56:56 -!- iamcal has joined. 19:57:10 it's the CULTURE CAPITAL of europe so...... 19:57:12 Vorpal: but you don't get straight-line trainlines 19:57:15 so crappy? 19:57:28 ais523: even with non-straight you will get that in north Sweden 19:57:33 yes, that crappy 19:57:36 ais523: that is how sparse it is up there 19:57:37 well dunno, i like it here 19:57:55 ais523: it isn't quite the outback, not that large. But that is what you should have in mind. Only wetter. 19:58:07 the outback, only wetter: description of anywhere big on earth 19:58:25 elliott: not really, it implies sparely populated too 19:58:29 and that is not true for everywhere 19:58:46 elliott: it is forest and bogs up there. Nothing much else. 19:59:25 Vorpal: so do you want to join, i forsee significant attrition 19:59:43 wrt Phantom_Hoover and/or Taneb not actually wanting to go on a fun adventure with esolangers 19:59:45 so we kinda need 19:59:47 boring but reliable backup 19:59:58 I am entirely serious! 20:00:15 yes but that's also what a non-serious person would say. 20:00:30 God, this is worse than Mafia 20:00:45 :D 20:00:57 elliott: no 20:01:05 -!- augur has joined. 20:01:22 Vorpal: rwhy not 20:01:34 elliott: They (Turku) have a sucky castle. 20:01:39 elliott: busy until 15:00 20:01:42 how is it sucky 20:01:56 oklopol: It doesn't even look like a castle, it's just this big thing. 20:02:09 fizzie: oh hey, do you want to join 20:02:15 http://en.wikipedia.org/wiki/File:Hohenschwangau_-_Schloss_Neuschwanstein1.jpg <-- see, that's a castle. 20:02:25 we need a responsible op to keep us good 20:02:28 true, but museologists like it because it hasn't sold out 20:02:48 My left ear is really hot for some reason. 20:03:10 Phantom_Hoover: trip anticipation, well known condition 20:03:13 Compare to this: http://zem.fi/g2/d/13817-2/20110402_023.jpg 20:03:25 No surprise it hasn't sold out. 20:03:27 fizzie: i take it that's a no 20:03:32 also, that sure is a nice small house 20:03:33 fizzie, nah, that's just kind of a big house. 20:03:41 This is what a castle should look like --> http://upload.wikimedia.org/wikipedia/commons/9/92/Prudhoe_Castle_2.jpg 20:03:43 Or http://zem.fi/g2/d/13820-2/20110402_024-028.jpg from the side. 20:04:02 Taneb: That's a has-been castle. 20:04:03 Now, THIS is a castle: http://en.wikipedia.org/wiki/File:EdinburghCastle.jpg 20:04:19 elliott: It's probably a "no", yes. Even though I haven't really been following. 20:04:31 Phantom_Hoover: I dislike that castle. Intensly. 20:04:36 fizzie: We're going to northern Sweden via Denmark and Latvia and Finland. 20:04:38 It's not ruined enough 20:04:50 Taneb, yes, this is because as established earlier you are stupid and bad. 20:04:54 fizzie: Phantom_Hoover, me, oklopol, Taneb. Well, at least two of those. 20:04:56 I'd show a photo of a "Helsinki Castle", but we don't even have a sucky one, like Turku. 20:05:14 That's a bit like Hexham, then 20:05:25 Well, we have that Suomenlinna thing. 20:05:31 But that's officially a fortress, not a castle. 20:05:43 We have a church 20:05:43 Even though the Finnish name says "Castle of Finland" basically. 20:06:10 http://www.suomenlinna.fi/files/5/469/Talvi_ilmakuva.jpg 20:06:15 fizzie: So that's a no then? 20:06:21 elliott: Yeah, no. 20:06:37 http://www.smbc-comics.com/index.php?id=2366 Oh SMBC. Why ya gotta be so true. 20:06:51 Taneb: we should totally attempt to arrive independently in turku without meeting each other 20:06:58 and just simultaneously meet oklopol 20:07:02 fizzie: what's fortress in finnish? 20:07:06 Taneb: We also have a church. It looks like a missile silo, and for some strange reason it's famous for that. http://en.wikipedia.org/wiki/Temppeliaukion_kirkko 20:07:18 linnoitus? 20:07:22 fizzie: What about a "castle-like structure"? http://upload.wikimedia.org/wikipedia/commons/f/fd/Kulosaari_Wihuri.jpg 20:07:39 UCO 20:07:45 Deewiant: Well, it's not worse than what they have at Turku. 20:07:47 Unidentified Castly Object. 20:08:08 It is quite a bit smaller, though. 20:08:20 But this is all irrelevant because Edinburgh Castle is so much better. 20:08:29 Deewiant: I forget, did we ask you 20:08:55 Yes; I didn't deign to answer 20:08:59 We also have that "Hotel Linna", http://www.palacekamp.fi/@Bin/6889232/Hotel%20Linna%205%20053.jpeg -- but that's even smaller. 20:09:01 I find that offensive 20:09:14 Deewiant: Did you notice and/or have you seen before: http://users.ics.tkk.fi/htkallas/aalto.jpg 20:09:23 (From the door of A339.) 20:09:25 What even is that thing 20:09:37 Yeah, I've seen that 20:10:02 elliott: Our university logo is a randomly selected from the three alternatives A! A? A" (and randomly of three alternative colors for the punctuation) -- some people have posed the question that since A! (factorial of A) equals A" (the second derivative of A), what is A? 20:10:11 Unfortunately the meat of it is only in Finnish. 20:10:20 haha 20:10:43 Goodnight 20:10:44 -!- Taneb has quit (Quit: Goodbye). 20:12:03 Basically they start with A(2010) = 3 (because there were three separate universities that were combined to form the WaveU in 2010) and A(2011) = 6 (because at the start of 2011 the former HUT was split into four schools), and from that go on to deduce that we will pretty much hit absurdly large numbers on Jan 14, 2010. 20:12:37 Thank god. 20:12:48 s/2010.$/2011./ 20:13:13 Still in the past. :p 20:13:18 Also s/\./\\./ 20:13:40 It's anchored at the end, it doesn't really need to be escaped. But the "201" part was extra. 20:13:58 And yes, still in the past, though I think the paper appeared at some point in 2010. 20:14:09 It says "we know in advance that A(2011) = 6" on one line. 20:14:39 -!- pikhq_ has joined. 20:14:51 -!- pikhq has quit (Ping timeout: 250 seconds). 20:31:25 -!- zzo38 has quit (Remote host closed the connection). 20:37:45 20:35:16: hoversegway! 20:37:50 ais523: Hoverse gway indeed. 20:38:06 when did I say that? 20:38:12 other than 20:35:16? 20:38:13 Two years ago or so. 20:38:54 what a hoverse thing to say 20:39:16 ais523 is now frantically trying to deduce the correct parsing. 20:40:40 -!- kmc has joined. 20:40:54 -!- augur has quit (Remote host closed the connection). 20:41:18 ais523: data on youtube comments being self-parodies: "thumbs up if you want to see a crap comment get lotsa thumbs up" 20:41:31 brilliant 20:41:33 is it a top comment? 20:41:53 unfortunately, no 20:41:56 hmm... I wonder if I can thumbs it up 20:42:04 there we go 20:42:06 I've done my bit 20:44:36 20:57:07: So if you live at point P on the infinite plane, and kick off the Roomba, it'll eventually come back to you. (That might be a rather long "eventually" here.) 20:48:10 The mournful tune is very mournful. 20:48:29 o 20:48:29 o 20:48:29 o 20:48:30 o 20:48:45 o 20:48:46 i just did nothing for 1.5 houts 20:48:47 *hours 20:49:00 i guess that's better than nothing 20:49:00 fizzie: Please tell me you remembered saying mournful tune from back then. 20:49:11 Also is there a video of it. 20:49:13 I want to hear th e mourn. 20:49:43 http://www.youtube.com/watch?v=a99O5xKFMDw Guh, I feel so sorry for it. It's not even clever enough to make a noise. 20:50:31 SET IT FREE YUOU HORIEBLE PERSONS 20:50:45 torture, 20:50:54 yaaaaaaaaaay 20:50:58 oh no 20:51:00 then it bash again 20:51:00 oh no 20:51:02 it is so stupid 20:51:02 oh no 20:51:08 i could not deal with one of these things 20:51:08 NO 20:51:09 NOT PACK THERE 20:51:11 NOOOOOOOOO 20:51:15 NOOOO ROOMBA 20:51:17 NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooo 20:51:56 fizzie: http://www.youtube.com/watch?v=DOwjnGPSzeg Well that's not very mournful. 20:53:27 That's not the sad tune. 20:54:01 I'll try to see if one of them youtubes has it. 20:55:20 ide po otwieracz 20:55:22 oops 20:55:45 polish conspiracy revealed 20:57:09 Meh, I just find all these Roombas with problems, but not the thing it plays sometimes. 20:57:25 wrong terminal! 20:58:12 elliott: I think it's a variant of http://www.youtube.com/watch?v=VH9ImgLSyio though I vaguely recall it being longer. 20:58:46 `addquote [from 2009] That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2". 20:58:48 657) [from 2009] That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2". 20:59:14 fizzie: :( 20:59:20 fizzie: I need to adopt one. Not to make it work or anything. 20:59:23 Just to make it happy. 20:59:38 Why "[from 2009]" 20:59:47 Deewiant: Qdb is roughly chronological 21:00:17 May I suggest "2009-11-26T13:35:38Z" 21:02:58 Deewiant: No 21:03:03 Logs provide exact precision 21:03:13 `run shuf bin/quotes >qs; mv qs bin/quotes 21:03:15 No output. 21:03:21 * oerjan sprints 21:03:35 i 21:03:36 hate 21:03:37 you 21:03:38 `help 21:03:38 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 21:03:39 Why require a full-text search when you can just annotate it 21:03:46 Deewiant: aesthetics 21:03:50 `revert 81 21:03:51 Done. 21:03:54 `paper 21:03:56 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: paper: not found 21:03:56 `quote paper 21:03:58 657) [from 2009] That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2". 21:04:02 there we go 21:05:28 cdo wins - this time 21:05:51 cdo? 21:06:03 ais523: oh, btw, oklopol proved sg changes aren't a group oops 21:06:06 because x . x = x 21:06:17 because x . x = changeset {x,x} = changeset {x} = x 21:06:20 "like ocd, but with the letters in the proper alphabetical order as they _should_ be" 21:06:22 :'( 21:06:30 they're still going to be some sort of category 21:06:35 just a different one from a group 21:06:48 ais523: thank god, they're a category 21:06:53 what a difficult standard to meet 21:06:58 heh 21:07:01 they're probably a useful sort of category 21:07:07 just because more or less everything is 21:07:37 MORP 21:08:24 `run shuf bin/quotes >qs; mv qs bin/quotes <-- nice 21:08:51 Yes, I give that around 8.9 oerjan-points out of ten. 21:09:20 yay 21:12:40 is that equivalent to 89% oerjan? 21:18:17 -!- Patashu has joined. 21:23:33 -!- elliott has quit (Ping timeout: 252 seconds). 21:34:42 -!- nooga has quit (Quit: Lost terminal). 21:44:53 `cat bin/quotes 21:44:55 ​#!/bin/sh \ allquotes | if [ "$1" ]; then \ if expr "$1" + 0 >/dev/null 2>&1; then \ sed "$1q;d" \ else \ egrep -i -- "$1" \ fi \ else shuf -n 1; fi 21:45:11 Why did he think shuffling /that/ was a good idea :P 21:47:42 oops 21:47:56 * oerjan hides under a rock 21:48:04 that's hilarious 21:48:20 what's that esolang which was invariant if you shuffled the lines? 21:48:38 (VHDL's a bit like that inside an architecture, except when processes or generates are involved) 21:48:44 -!- nooga has joined. 21:48:45 ais523: SORTED? 21:48:49 ah 21:48:56 time for Dr. Strangelove 21:48:56 oerjan: that sounds about right 21:49:14 wait, no 21:49:18 Sorted! is something else 21:49:45 (where you define all the statements you're going to use, and then say "use the fifth statement and the third statement and the sixth statement and...", except for everything) 21:50:10 ais523: also, spam 21:51:39 bleh, elliott isn't here 21:51:44 I think he'll probably want to see the content of User:QGermaineWalli 21:51:57 oh well, I'll delete it, then retrieve the deleted copy for him when he's here 21:52:49 oerjan: did I catch it all? the feed was being awkward 21:54:52 seems so 21:55:56 sortle looks promising 21:56:07 -!- ais523 has quit (Remote host closed the connection). 21:59:25 -!- FireFly has quit (Quit: FireFly). 22:01:09 There was something where the program was just a list of (guarded?) statements, of which it would always execute a random possible one. 22:01:43 Strelnokoff? 22:02:05 Also DMM's Whenever. 22:05:00 * Phantom_Hoover → sleep 22:05:01 -!- Phantom_Hoover has quit (Quit: Leaving). 22:06:55 -!- sllide has quit (Ping timeout: 260 seconds). 22:12:28 -!- monqy has joined. 22:14:44 -!- Sgeo has joined. 22:21:47 -!- aloril has quit (Ping timeout: 260 seconds). 22:31:38 -!- MSleep has changed nick to MDude. 22:38:05 -!- aloril has joined. 22:56:00 brrrrrrrrrt http://www.dream-pro.info/~lavalse/LR2IR/search.cgi?mode=ranking&bmsid=83968 23:02:30 -!- augur has joined. 23:04:35 -!- augur has quit (Remote host closed the connection). 23:05:25 -!- augur has joined. 23:22:52 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 23:24:01 -!- augur has quit (Remote host closed the connection). 23:28:17 -!- nooga has quit (Ping timeout: 260 seconds). 23:45:23 -!- Jafet has quit (Quit: Leaving.). 23:48:31 -!- oerjan has quit (Quit: Good night). 23:51:59 -!- DH____ has joined. 23:54:49 -!- DH____ has quit (Read error: Connection reset by peer). 23:54:52 -!- DHeadshot has joined. 23:57:43 -!- fizzie has quit (Ping timeout: 276 seconds). 23:57:55 -!- fungot has quit (Ping timeout: 260 seconds).