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