←2012-10-07 2012-10-08 2012-10-09→ ↑2012 ↑all
00:02:09 <elliott> Sgeo: yes
00:05:39 -!- jiella has quit (Quit: Leaving.).
00:14:46 -!- DHeadshot has joined.
02:01:01 <elliott> Deewiant: I forget, what do you use for AUR stuff?
02:25:06 -!- oklofok has joined.
02:28:04 -!- oklopol has quit (Ping timeout: 248 seconds).
02:33:41 -!- augur has quit (Remote host closed the connection).
02:36:56 -!- elliott_ has joined.
02:37:00 -!- elliott has quit (Read error: Connection reset by peer).
02:50:41 -!- augur has joined.
03:04:52 -!- augur has quit (Remote host closed the connection).
03:13:23 -!- augur has joined.
03:15:08 -!- augur has quit (Remote host closed the connection).
03:31:54 -!- augur has joined.
03:32:56 -!- augur has quit (Remote host closed the connection).
03:38:05 -!- augur has joined.
03:45:26 -!- augur has quit (Remote host closed the connection).
04:13:30 <zzo38> What hardware description languages specify gates explicitly instead of specifying arithmetic and assignments and so on?
04:15:51 -!- oerjan has quit (Quit: Good night).
04:31:28 <Sgeo> "If ever you are by far the best, or the most interested, student in a classroom, then you shouldfind another classroom."
04:31:31 <Sgeo> :/
04:31:38 <monqy> :/
04:31:56 * Sgeo feels like it's sort of too late to start finding another classroom
04:32:02 <zzo38> Why? And also why are the improper characters?
04:32:50 <kmc> zzo38: SPICE
04:32:57 <elliott_> Sgeo: are you still at that shitty university
04:33:01 <kmc> also JSim, the thing used by MIT 6.004
04:33:07 <Sgeo> elliott_, yes, for my last semester before I graduate.
04:33:22 <elliott_> Sgeo: do i get to gloat about how i told you so
04:33:22 <kmc> in which you design a RISC processor at the level of individual logic gates
04:33:31 <elliott_> or would that be insensitive......
04:34:57 <kmc> yeah that's good advice for jobs as well
04:35:49 * Sgeo is very used to being the best in his class
04:36:06 <Sgeo> Although Intro to Drawing is giving me a major slap in the face in that area.
04:37:38 <coppro> haha
04:40:34 <zzo38> kmc: Isn't SPICE for analog designs? What does JSim?
04:40:53 <kmc> JSim does both analog electrical and digital logical simulation
04:40:58 <kmc> it uses SPICE-like syntax for both
04:41:41 <kmc> i don't know if it is used outside of 6.004
04:41:48 -!- augur has joined.
04:41:56 <kmc> it is a pretty basic program but well-suited to the course
04:42:03 <zzo38> Can any of them be compiled to make a hardware ASIC or to program a CPLD or FPGA?
04:42:25 <kmc> not as-is
04:44:58 <zzo38> If not as-is, then how is it?
04:46:57 <kmc> well, there's no fundamental reason you couldn't write a compiler from JSim language to VHDL or something
04:47:37 <kmc> it is probably a silly thing to do
04:47:43 <zzo38> Can it not compile directly into the binary formats?
04:47:50 <kmc> JSim? no, i don't think so
04:47:53 <Jafet> Doesn't VHDL work at the gate level?
04:47:56 <kmc> it is just a simulator for teaching purposes
04:48:38 <kmc> Jafet: kinda, you specify arithmetic / logical expressions, but not how to realize them with individual gates
04:48:41 <kmc> that's my understanding
04:49:00 <elliott_> ask ais523 :P
04:58:05 -!- augur has quit (Read error: Connection reset by peer).
04:59:34 -!- augur has joined.
05:03:28 <kmc> i wonder if automatic lint/style checking can be harmful in some cases
05:03:39 <kmc> my reasoning is thus:
05:03:54 <kmc> the value of these tools isn't that style violations are actually that important
05:04:03 <kmc> it's that they catch cases where programmers are generally not paying attention
05:04:10 <kmc> bad style is just a symptom of that
05:04:52 <kmc> but if you have an automatic style check on commit, you might consider that passing the check satisfies your obligation to pay attention
05:05:04 <kmc> and the result is bad code which is harder to spot
05:06:00 <pikhq_> Besides which, style violations are easy to notice.
05:06:35 <kmc> depends
05:07:34 <kmc> when i run such a tool on a reasonable size codebase, it usually finds a bunch of violations, and a few real bugs
05:08:31 <elliott_> the real reason lint is useless is because it complains about the shit you don't care about and doesn't complain about the shit you do
05:08:38 <kmc> i'm talking about tools which don't just check, like, how many spaces you indent, but will catch undefined variables in python, accidentally global things in javascript, etc
05:08:41 <elliott_> anyway kmc your argument is also an argument against compiler warnings in general
05:08:50 <elliott_> i don't know whether pointing this out will change your opinion or not
05:09:55 <kmc> no because compiler warnings (and static typing and test cases) have a much higher hit ratio for finding important problems
05:11:58 <kmc> if you have a tool which finds lots of important problems, then for sure you want to run it all the time
05:12:53 <kmc> but with something like lint checking, maybe there's a 'false sense of security' problem, where people focus on making the lint checker's irrelevant complaints go away rather than actually reviewing their code
05:16:53 <kmc> i don't know, this is something i'm thinking about in a specific context and maybe doesn't make sense generally
05:23:04 <elliott_> what's the difference between clang's fanciest warnings and lint
05:23:10 <elliott_> sincere question
05:23:43 <kmc> i don't think there is a fundamental difference between lint checking and compiler warnings
05:23:46 <Sgeo> Can Haskell's type checking cause a false sense of security?
05:24:03 <kmc> just a practical difference in the tools we use for each
05:24:03 <coppro> yes
05:24:17 <kmc> Sgeo: yeah
05:24:18 <coppro> Sgeo: totallyInnocentFunction = unsafeCoerce
05:24:40 <kmc> there is a lot of thread-unsafe code on hackage
05:24:56 <kmc> thanks to uncareful use of C bindings
05:25:15 <kmc> this is just an example where types don't help you much
05:25:24 <kmc> also all the common partial functions like 'head' etc
05:26:59 <Jafet> “Some programmers like to use the GCC ‘-Wall’ option, and change the code whenever it issues a warning. If you want to do this, then do. Other programmers prefer not to use ‘-Wall’, because it gives warnings for valid and legitimate code which they do not want to change. If you want to do this, then do. The compiler should be your servant, not your master.”
05:28:36 <pikhq_> And then there's GNU, who stick -Werror in the CFLAGS.
05:28:53 <kmc> i think the people who like to ignore warnings will more often than not be idiot macho ninja rockstar hackers who don't have any good reason to do the weird things they do
05:29:32 <coppro> pikhq_: that's not a bad move if you carefully select your warnings
05:29:46 <coppro> Jafet: clang has -Weverything
05:29:51 <kmc> they probably do these things based on some misunderstood C folklore from 30 years ago rather than an understanding of current systems and compilers
05:29:56 <coppro> Jafet: it turns on all the warnings. all of them.
05:30:27 <pikhq_> coppro: binutils builds with -Wall -Werror by default.
05:30:51 <coppro> pikhq_: I forget what's in -Wall honestly
05:30:53 <coppro> it's a stupid flag
05:30:58 <kmc> i have done a lot of strange things with gcc and I almost always get it to build cleanly with -Wall, and feel that the solutions which make gcc happy are better
05:31:21 <pikhq_> Yes. And -Wall -Werror just adds to it.
05:31:23 <kmc> like "lol compiler, shut up about aliasing", no, lol programmer, learn the aliasing rules and when to use a union instead of pointer casts
05:31:47 <coppro> I usually have it on, granted, but it's more stupid because of the name than because of the warning
05:31:57 <coppro> kmc: yeah, that should be an error really
05:32:12 <coppro> (I know it can't be conformant and be an error, but since when has GCC cared anyway :P )
05:32:28 <elliott_> pointer casts aren't even conformant like that are they
05:32:47 <kmc> C compilers let you do so many things which are fundamentally nonsense yet basically stand up to casual testing
05:33:16 <kmc> this is a good reason to pay attention to warnings
05:33:45 <coppro> elliott_: they are conformant, but will likely lead to UB at runtime
05:34:16 <coppro> elliott_: arguably a compiler could refuse to translate a program which is guaranteed to produce UB, but if it's only a possibility, it can't refuse
05:34:17 <pikhq_> elliott_: There's rules governing how pointer casts may be performed.
05:34:51 <pikhq_> For instance, casting an arbitrary data pointer to a char pointer is *always* valid...
05:35:12 <zzo38> Some warnings are good, some warnings I don't like and want to turn off. And, some warnings I want to be errors instead (such as converting a pointer to integer without an explicit cast), but they don't seem to have options for all warnings individually
05:35:30 <pikhq_> And casting from a char pointer to another type might be valid.
05:35:36 <elliott_> pikhq_: yes i know this much
05:35:46 <elliott_> coppro: well UB is not conformant, right
05:35:53 <coppro> zzo38: clang does
05:36:02 <pikhq_> elliott_: That's a philosophical question, really. :P
05:36:07 <coppro> elliott_: Yes, but only if it will occur.
05:36:29 <coppro> elliott_: If the program won't cause UB in its execution, it must execute correctly. If it will cause UB if executed, the program can do whatever
05:36:40 <coppro> (it can even fail to do the things that would lead to the UB)
05:36:42 <zzo38> coppro: O, well, GNU doesn't and yet some targets are only supported by GNU, such as MMIX. I wanted MMIX on LLVM as well but they don't do that.
05:37:09 <elliott_> coppro: so a program which adds two signed numbers is conformant if you give it two that don't overflow, but non-conformant if you give it two that overflow?
05:37:12 <elliott_> (say it takes them from argv)
05:38:11 <coppro> elliott_: right, and if it's run with two numbers that overflow, it doesn't even need to get that far. It could exec("nethack") instead of doing anything else.
05:38:13 <pikhq_> elliott_: Yes. Hence why "UB = non-conformant" is a philosophical question.
05:38:51 <coppro> it is conformant in the sense that a conforming implementation must correctly translate it, and the result must correctly execute if it does not cause UB.
05:39:18 <coppro> If a TU is not conformant, a conforming implementation must issue a diagnostic, but then is free to do whatever
05:39:22 <elliott_> coppro: i feel there is some self-contradiction here
05:39:46 <coppro> (so a truly conforming implementation will warn about all extensions, except a few like pragmas where implementations are specifically allowed to define behaviour)
05:42:08 <pikhq_> Surely not; determining if a TU invokes UB in C is identical to the halting oracle...
05:42:27 <coppro> pikhq_: Not UB; that's conforming.
05:42:49 <pikhq_> void halts() { /* arbitrary function body that may or may not return; */; *NULL = 0; }
05:43:13 <pikhq_> Erm
05:43:15 <coppro> the implementation must translate that
05:43:53 <pikhq_> And if control flow will always hit the end, then the implementation, according to you, must issue a diagnostic.
05:44:07 <coppro> no
05:44:10 <pikhq_> That is to say, a conformant implementation must determine if arbitrary C halts.
05:44:19 <coppro> I meant for something like "int * int = 3;"
05:45:01 <pikhq_> So, you mean a conforming implementation must issue a diagnostic on *parse errors*?
05:45:19 <pikhq_> That's not what you said, you just said "if a TU is not conformant", in a context where you were saying "UB = not conformant"...
05:45:27 <coppro> No, UB is conformant.
05:45:34 <zzo38> What parse error?
05:45:35 <coppro> in that an implementation must translate it.
05:45:45 <coppro> pikhq_: A parse error or a semantic error or anything else that violates the requirements
05:45:55 <pikhq_> Okay, then. Now we're on the same page.
05:46:02 <zzo38> What semantic error, then?
05:46:12 <Sgeo> What's TU?
05:46:31 <pikhq_> Except, of course, that most C extensions would not be *parse* errors in C, but rather explicit UB.
05:46:40 <zzo38> Is it requires to specify what parse error, instead of just if it is error or not?
05:46:40 <coppro> pikhq_: __attribute__ comes to mind
05:46:42 <pikhq_> __attribute__(()) invokes undefined behavior.
05:46:45 <coppro> zzo38: No.
05:46:59 <coppro> pikhq_: what?
05:47:12 <coppro> pikhq_: that does not seem right
05:47:25 <olsner> if programs with UB were not conformant that'd make the whole concept of UB a bit meaningless I think
05:47:43 <pikhq_> __* is a reserved name; using it in any context is UB.
05:48:17 <coppro> it's unclear what 'reserved' means
05:48:26 <elliott_> Sgeo: translation unit
05:48:51 <pikhq_> "Reserved" means "using this is UB". That's what it's defined as.
05:49:08 <coppro> pikhq_: really? Not as making the code ill-formed?
05:49:41 -!- kinoSi0 has quit (Read error: Connection reset by peer).
05:50:09 -!- kinoSi has joined.
05:50:32 <coppro> pikhq_: huh
05:51:14 <coppro> pikhq_: well an example I can think of is 'signed overflow is defined'
05:51:23 <coppro> no wait, that's runtime
05:51:24 <coppro> uh
05:51:33 <pikhq_> "If the program declares or defines an identifier in a context in which it is reserved, or defines a reserved identifier as a macro name, the behavior is undefined."
05:51:36 <pikhq_> Aaaah
05:51:46 <pikhq_> So, iff you try and #define or #undef __attribute__ it's UB.
05:51:51 <pikhq_> Otherwise, it's... ?
05:53:17 <coppro> ah, GCC statement expressions are a good example
05:53:21 <olsner> if you don't define it yourself, you'd be referencing something that isn't necessarily defined?
05:53:32 <pikhq_> olsner: Right.
05:54:00 <olsner> unless by random chance magic it happens to be there, and then I guess you just have no way to know what it does
05:54:19 <coppro> sure, but a conformant compiler will tell you that something happened!
05:54:37 <coppro> of course, a diagnostic could easily be "i dont want to live any more"
05:56:56 <pikhq_> Hmm. There are in fact a decent number of syntax errors that are UB.
05:57:20 <pikhq_> "The initializer for a scalar is neither a single expression nor a single expression closed in braces" invokes UB.
05:58:13 <pikhq_> It is UB for a source file to be both nonempty and not end with a newline.
05:58:50 <coppro> a number of those UBs are, AIUI, due to old implementations with weird behaviours
05:58:51 <olsner> but an empty source file is ok?
05:58:57 <pikhq_> olsner: Yes.
05:59:06 <coppro> pikhq_: you know trigraphs?
05:59:21 <pikhq_> However, the empty quine will be UB. Because that does not define main.
05:59:23 <pikhq_> coppro: Yeah.
05:59:49 <pikhq_> It is UB for there to be an unmatched ' or "
06:00:59 <pikhq_> It is UB for an identifier to start with a digit.
06:01:16 <monqy> > length "aaaaaaaaaaaaaaaaaaaa"
06:01:17 <lambdabot> 20
06:01:24 <shachaf> > length "monqy"
06:01:25 <lambdabot> 5
06:01:26 <shachaf> > length "hi monqy"
06:01:27 <lambdabot> 8
06:01:32 <shachaf> coïncidencë?
06:01:37 <coppro> pikhq_: They are in C++11 because of IBM
06:01:47 <olsner> > length "shachaf"
06:01:48 <lambdabot> 7
06:01:50 <pikhq_> coppro: Fuck 'em
06:01:51 <olsner> > length "funpuns"
06:01:52 <lambdabot> 7
06:01:58 <pikhq_> Surely they can update to UTF-EBCDIC
06:02:03 <coppro> the IBM reps reportedly said "We're sorry. We really wish we could take them out, but we have actual code that depends on these actually being in the standard."
06:02:51 <olsner> herp, if they need their code to follow the latest standard they should just update it
06:03:14 <shachaf> olsner: Have you considered being more like oerjan?
06:03:52 <olsner> shachaf: in what way?
06:04:37 <olsner> it's not something I've considered per se, but I'm always open for suggestions if you want me to change my behavior
06:04:46 <shachaf> Maybe shuffle your nick around.
06:04:49 <shachaf> oerlsn
06:04:56 <olsner> oh, that would only be confusing
06:04:59 <elliott_> shachaf: have you considered being less like shachaf
06:05:11 <monqy> but then he wouldn't be shachaf now would he
06:05:12 <olsner> !rot13 olsner
06:05:14 <shachaf> elliott_: have you considered being more like monqy
06:05:14 <EgoBot> byfare
06:05:23 <olsner> right, I did that the other day
06:05:25 <shachaf> !rot13 monqy
06:05:25 <EgoBot> zbadl
06:05:36 <shachaf> !rot13 mrmistermonkey
06:05:36 <EgoBot> zezvfgrezbaxrl
06:05:52 <shachaf> funpuns = best nick
06:06:08 <monqy> wow zezvfgrezbaxrl is my secret name how did you know
06:06:40 <olsner> !rot13 mistermysterymonkey
06:06:41 <EgoBot> zvfgrezlfgrelzbaxrl
06:07:20 <shachaf> elementary my dear monqy
06:17:17 <coppro> huh
06:17:28 <coppro> the supreme court of canada issued "an order in the nature of mandamus"
06:17:36 <coppro> I wonder what the distinction between that and actual mandamus is
06:17:41 <elliott_> you're a mandamus
06:28:14 <coppro> that could explain a lot
06:31:31 <pikhq_> coppro: It appears that's a *US* legal term?
06:32:20 <pikhq_> I'm going to declare "fuck if I know"
06:32:53 <coppro> pikhq_: it's not purely US
06:33:02 <fizzie> "A strictly conforming program shall use only those features of the language and library specified in this International Standard.3) It shall not produce output dependent on any unspecified, undefined, or implementation-defined behavior, and shall not exceed any minimum implementation limit."
06:33:21 <coppro> pikhq_: mandamus is an order by a court to a government agency to perform some action
06:34:53 <coppro> pikhq_: most notably when a court refuses to hear a case citing lack of decision; the court has refused to hear the case so it is not a decision which can be appealed, so a higher court can issue mandamus to force it to hear the case
06:39:08 <fizzie> pikhq_: olsner: An empty source file is not ok: the syntax is "translation-unit: external-declaration | external-declaration translation-unit" and there's no way for external-declaration to be empty.
06:39:27 <fizzie> (And yes, it makes the bit about nonempty source files and newlines a bit bizarre.)
06:42:21 <fizzie> I suppose the intent is arguable, though. But at least GCC folks have interpreted it so that the translation unit as a whole must be parseable as the nonterminal called 'translation-unit', and hence rejects the empty file.
06:42:42 <coppro> pikhq_: but it can generally be used for anything. One example I can find is ordering a municipality to impose tax
06:45:11 <pikhq_> coppro: I was referring to "nature of mandamus" in particular
06:45:30 <pikhq_> "Mandamus" appears to be a UK-derivative legal system term.
06:47:35 <coppro> pikhq_: ah, no
06:48:13 <coppro> pikhq_: The context is that the court ordered the government to do something, but said it was "of the nature of mandamus"
06:48:45 <coppro> http://scc.lexum.org/en/1994/1994scr3-1100/1994scr3-1100.html
06:48:46 <coppro> what
06:49:06 <coppro> that's... terse
06:50:23 <fizzie> You mean TERSE™.
06:50:36 <fizzie> It's a trade mark of JimNeiL.
06:51:03 <coppro> thank you for that knowledge
06:51:06 <coppro> I feel smarter already
06:51:39 <pikhq_> coppro: I declare that legal systems are overly obtuse.
06:51:51 <zzo38> I think empty source files ought to be allowed in C, but they shouldn't compile into an executable since there is no main. It should just make a object file which does nothing if linked with other files, as if that file is not there.
06:51:53 <pikhq_> And that they need replaced with a suffusion of yellow.
06:52:56 <zzo38> Isn't it more logical this way?
06:53:29 <coppro> pikhq_: I'm sorry. I don't think you have the necessary jurisdiction.
06:53:40 <coppro> pikhq_: Perhaps you should ask a court to do that.
06:53:55 <fizzie> zzo38: You can have a source file that says "typedef int foo;" -- that's almost as good. It compiles into an object file, and since the typedef only has file scope and doesn't make any external-linkage objects or anything, it's quite close to "not there".
06:54:17 <fizzie> (Okay, admittedly it might end up in the debugging information.)
06:55:10 <zzo38> fizzie: Well yes I suppose you can work around in that way, but still I think it would just be more sensible to allow an empty source file.
06:55:17 <pikhq_> coppro: But I a sovereign citizen!
06:55:25 <pikhq_> I do not recognize the jurisdiction of the courts!
06:55:32 <pikhq_> I do not consent!
06:55:48 <coppro> pikhq_: how do I sign up?
06:57:04 <fizzie> zzo38: I suppose many compilers already do, since it is indeed more logical. GCC does unless compiling with "-pedantic", and as mentioned, the standard isn't very explicit about it.
06:57:39 <fizzie> clang seems to accept it always.
06:57:47 -!- ais523 has quit.
06:58:29 <zzo38> Does clang not have the pedantic mode?
06:58:36 <coppro> zzo38: it does
06:58:55 <zzo38> Then they should fix it, isn't it?
06:59:35 <fizzie> Well, their interpretation of the standard might be different. The part in the translation phases about an empty source file is arguably evidence that empty translation units should be okay too.
07:00:17 <fizzie> Actually, how coincidental.
07:00:25 <fizzie> Date: Wed Jun 6 12:25:21 2012 "Add pedantic warning -Wempty-translation-unit (C11 6.9p1)."
07:00:36 <fizzie> (My version here at work is older than that.)
07:00:57 <zzo38> OK
07:10:25 <elliott_> <fizzie> You mean TERSE™.
07:10:26 <elliott_> <fizzie> It's a trade mark of JimNeiL.
07:10:26 <elliott_> <3
07:10:40 -!- DHeadshot has quit (Read error: Connection reset by peer).
07:10:54 -!- DHeadshot has joined.
07:23:07 <zzo38> Last Dungeons&Dragons session I have played is incomplete, so no experience points yet. But still I think I have thought of what to do next in this time between sessions. It is a bit like you can in chess by mail, you have a lot of time to figure out. Except, chess doesn't have hidden information, and with chess by mail this happens after every move instead of just a session.
07:24:50 <zzo38> Therefore, some of my strategies are similar to that of chess. (But not always)
07:30:06 <zzo38> So it can include: zwischenzug, zugzwang, fork check, discovered check, smothered mate, and so on.
07:34:09 <zzo38> Since we are very outnumbered, we can use this to our advantage.
07:35:51 <zzo38> (It wouldn't work if we weren't outnumbered.)
07:39:32 <zzo38> Do you know the "grotesque" chess problem where the white has only one king and one pawn (still on the starting row), and black still has sixteen pieces, and white will win?
08:15:04 -!- zzo38 has quit (Remote host closed the connection).
08:27:53 -!- Nisstyre-laptop has quit (Read error: Connection reset by peer).
09:07:54 -!- MoALTz_ has quit (Ping timeout: 264 seconds).
09:10:19 -!- MoALTz has joined.
09:26:57 -!- monqy has quit (Quit: hello).
09:37:58 -!- DHeadshot has quit (Read error: Connection reset by peer).
09:38:03 -!- DH____ has joined.
10:02:19 -!- copumpkin has quit (Ping timeout: 260 seconds).
10:02:53 -!- copumpkin has joined.
10:54:08 -!- ais523 has joined.
11:02:29 -!- ais523 has quit (Read error: Connection reset by peer).
11:02:43 -!- ais523 has joined.
11:06:23 -!- mig22 has joined.
11:09:02 -!- barts_ has joined.
11:12:24 -!- barts has quit (Ping timeout: 260 seconds).
11:15:12 -!- ais523 has quit (Ping timeout: 246 seconds).
11:26:09 -!- epicmonkey has joined.
11:28:48 -!- ais523 has joined.
11:31:36 <elliott_> ais523: q q q qqq qq q q qqq q
11:31:58 <elliott_> pikhq_: Hey, is Nvidia or ATI better supported by Linux this month?
11:42:01 -!- elliott_ has quit (Remote host closed the connection).
11:43:43 -!- elliott has joined.
11:55:23 <ais523> hi elliott
11:55:42 <ais523> quick sanity check: is banning / and .. enough to avoid all directory traversal attacks on UNIX?
11:55:51 <ais523> working on the automarker script again, looking for exploits
11:55:54 <elliott> maybe
11:55:57 <elliott> possibly not
11:56:15 <ais523> this is in a field that's /meant/ to be an email address
11:56:19 <ais523> but you know how loose the email RFC is
11:56:28 <ais523> (specifically, the address-part of the address)
12:01:11 <ais523> oh, I guess there's NUL, but I'm pretty sure that's not allowed in an email address (and will be rejected by the email address parser I grabbed)
12:01:38 -!- Frooxius has joined.
12:03:10 <ais523> hmm, I've thought of a brilliant exploit, actually
12:03:18 <ais523> but I doubt the students will come up with it
12:03:24 <ais523> (not in the filename thing, in something else)
12:03:37 <elliott> what is it
12:04:11 <ais523> basically, the program could bypass one of its checks by outputting its own SHA-1 hash
12:04:27 <ais523> which you could accomplish with a sufficiently clever modification of a quine
12:04:45 <ais523> note that you can't use any libraries for this, so the marker would probably notice the SHA-1 code as it scrolled past
12:05:43 <elliott> I can't imagine why that would happen
12:06:08 <ais523> basically, because we're linking the student's code to provided code
12:06:14 <ais523> we want to check that the provided code has run
12:06:22 <ais523> so we give it the SHA-1 hash of the student's code
12:06:24 <ais523> to output
12:07:23 <ais523> I guess we could just use a random string
12:07:42 <ais523> "Found dependencies: Capture::Tiny, Throwable::Error, Email::Abstract, Moose"
12:07:49 <ais523> hmm, this is going to take a while to install…
12:08:04 <ais523> there are downsides to emergency use of CPAN
12:22:39 <elliott> ais523: have i told you about cpanminus
12:22:40 <elliott> i forget
12:22:48 <elliott> it has made my life less hellish
12:23:33 -!- ais523_ has joined.
12:23:44 -!- ais523 has quit (Read error: Connection reset by peer).
12:23:52 -!- ogrom has joined.
12:25:06 <elliott> ais523: have i told you about cpanminus
12:25:07 <elliott> i forget
12:25:08 <elliott> it has made my life less hellish
12:25:34 <fizzie> Less hellish, but sometimes loopy, I'd say.
12:26:09 <elliott> well ais523_ doesn't count as real fizzie
12:26:25 <fizzie> Few things count as real fizzies.
12:27:24 <elliott> how many
12:28:02 <fizzie> I don't know, I haven't counted.
12:29:20 <ais523_> elliott: I'm using cpanminus
12:29:22 <ais523_> also local::lib
12:29:23 -!- ais523_ has changed nick to ais523.
12:29:29 <ais523> luckily the two play together well
12:29:36 <ais523> although it's a pain to get initially set up without root
12:30:00 -!- Kiwitinker has joined.
12:35:50 <elliott> `welcome Kiwitinker
12:36:09 <HackEgo> Kiwitinker: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
12:37:10 <Kiwitinker> hi
12:39:02 -!- Kiwitinker has left.
12:39:20 <ais523> that was pointless
12:39:42 <fizzie> The welcoming procedure sure saves a lot of time, though.
12:39:52 <ais523> yes
12:39:59 <ais523> btw, what's that hash in the topic the hash /of/?
12:40:24 <fizzie> You will need to break SHA-3 to find out, I suppose.
12:40:40 <fizzie> (Perhaps that's why it's in the topic.)
12:40:42 <ais523> or ask someone who was present for the hashing
12:40:47 <ais523> although, that's an SHA-3 hash?
12:40:52 <ais523> I assumed those would be alphanumeric or something
12:41:01 <ais523> and it looks like an SHA-2 hash based on the length
12:41:08 <fizzie> SHA-3 lengths are equal to SHA-2.
12:41:20 <fizzie> And SHA-3 was the topic when the hash was added, so I kind of assumed.
12:41:29 <fizzie> That's what the "new hash function overlords" is referring to.
12:41:51 <ais523> yes
12:43:01 <fizzie> <pikhq_> Yup, SHA3-224.
12:43:06 <fizzie> That's what it's claimed to be.
12:44:13 <fizzie> Apparently it's a hash of "I, for one, welcome our new hash function overlords".
12:44:21 <ais523> aha
12:44:27 <ais523> was that checking the logs, or guessing the input?
12:44:42 <fizzie> Checking the logs.
12:44:51 <fizzie> To find the hash algorithm; it was mentioned, nearby.
12:49:12 <ais523> is there a nonbreaking version of &thinsp;?
12:50:55 <fizzie> &#8239; is kinda.
12:51:14 <fizzie> It's the U+202F NARROW NO-BREAK SPACE, "a narrow form of a no-break space, typically the width of a thin space or a mid space".
12:51:22 <ais523> thanks
12:51:25 <fizzie> (But that's a bit vague.)
12:52:10 -!- Phantom_Hoover has joined.
12:55:38 <ais523> fizzie: well it looks right, anyway
12:56:03 -!- ogrom has quit (Quit: Left).
12:58:42 -!- ogrom has joined.
13:02:49 -!- ais523 has quit (Read error: Connection reset by peer).
13:03:22 -!- ais523 has joined.
13:16:11 -!- ais523 has quit (Read error: Connection reset by peer).
13:16:28 -!- ais523 has joined.
13:16:32 <ais523> [14:15] <ais523> hmm, I take it Haskell doesn't have ignore in its standard library, on the basis that it's completely useless?
13:16:33 <ais523> [14:15] <ais523> or did someone put it there anyway?
13:16:35 <ais523> :t ignore
13:16:36 <lambdabot> Not in scope: `ignore'
13:16:43 <ais523> not in Prelude, at least
13:17:32 <elliott> ais523: what type?
13:26:07 <elliott> fizzie: by the way what function got chose as sha-3
13:26:10 <elliott> i assume you are Wise enough to Know
13:27:11 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
13:28:01 -!- ais523 has quit (Read error: Connection reset by peer).
13:28:08 -!- ais523_ has joined.
13:29:40 <fizzie> elliott: That kcckkaekekcakce one.
13:29:43 <fizzie> elliott: Keccak.
13:29:53 <fizzie> The one that sounds like Korean laughter.
13:32:02 -!- ais523_ has changed nick to ais523.
13:37:34 -!- heroux has quit (Ping timeout: 240 seconds).
13:46:12 <elliott> fizzie: Did that one have any ~famous names~?
13:48:33 <fizzie> elliott: I don't know who's famous in crypto-circles; but I mean it's not the Schneier one. These people were from STMicroelectronics.
13:49:02 <fizzie> Oh, and it's also not that Grøstl thing that had some reasonably known dude I believe.
13:49:03 -!- copumpkin has joined.
13:49:04 <ais523> one advantage of keccak that people are mentioning is that it's completely different from sha-2
13:49:14 <ais523> so they think it's unlikely they'll both be broken the same way
13:49:27 <fizzie> And the other is the parallelizability and efficiency in especially hardware implementations.
13:50:30 <fizzie> Keccak is one of those spongey things, so for once it's not a Merkle-Damgård construction.
13:51:00 <ais523> fizzie: is it meant to be particularly efficient or particularly inefficient?
13:51:03 <ais523> efficient, I guess
13:51:09 <fizzie> Efficient, yes.
13:51:15 <ais523> we have block ciphers for the inefficient hashes
13:51:58 <fizzie> It's got some kind of a "tree mode" thing that's supposed to be even more parallelizable; there are GPU implementations already.
13:51:59 -!- DH____ has quit (Read error: Connection reset by peer).
13:52:21 -!- DHeadshot has joined.
13:52:24 <fizzie> And supposedly it's especially efficient when it comes to speed/area considerations in dedicated hardware.
13:52:28 -!- Arc_Koen has joined.
13:53:17 <fizzie> And the software implementation, while maybe not the fastest of SHA-3 candidates, wasn't too bad either.
13:53:45 <elliott> fizzie: I guess Schneier and Bernstein are cryptofamous to me and nobody else. :p
13:53:45 <fizzie> I think I saw something like 12.5 cycles/byte mentioned.
13:53:52 <elliott> How do you pronounce Keccak anyway?
13:54:02 <elliott> Rijndael was bad enough.
13:54:24 <ais523> elliott: I think you pronounce the double c as a k, and don't let the vowels interact with each other
13:54:29 <fizzie> elliott: According to kmc, "it's pronounced 'kashyyyk'", but...
13:54:52 <fizzie> That *was* right after references to LORD KECCAK and so on.
13:54:59 <ais523> <Schneier> "8068" is the least common PIN -- that'll probably change now that the fact is published.
13:55:52 <ais523> the world's least memorable 4-digit number?
13:56:00 <oklofok> no
13:56:02 <elliott> that's easy to remember
13:56:02 <fizzie> I don't know, it's like 8086 with a swapped second pair.
13:56:04 <elliott> it's the least common PIN
13:56:08 <oklofok> least pressnice number.
13:56:10 <elliott> now I'll never forget it
13:56:12 <elliott> I should use it
13:56:25 <oklofok> if anything
13:56:26 <fizzie> You should use it as your personal PIN number.
13:56:35 <oklofok> i don't get to choose mine :/
13:56:36 <elliott> then if someone tries to spy on me while I put it in I'll say aah, you'll never get it, it's the least common PIN number in the world!
13:56:45 <elliott> fizzie: fuck you
13:56:48 <elliott> fizzie: I use PNG graphics too!!
13:56:59 <fizzie> It's good to use portable PNG graphics files.
13:57:01 <elliott> I'll put my fucking PIN number in the fucking ATM machine and you won't complain
13:57:12 <fizzie> On the network.
13:58:38 <Arc_Koen> hello
14:01:30 -!- ogrom has quit (Quit: Left).
14:11:04 <elliott> fizzie: Pungent Nocturnal Gerbils.
14:20:26 -!- augur has quit (Remote host closed the connection).
14:25:11 <oklofok> penis nads genitals lol haha
14:47:49 -!- Jafet has quit (Quit: Leaving.).
14:50:08 -!- FreeFull has joined.
14:57:40 -!- augur has joined.
15:00:59 -!- augur has quit (Remote host closed the connection).
15:01:16 -!- atriq has joined.
15:01:28 -!- Jafet has joined.
15:01:46 <atriq> @messages?
15:01:46 <lambdabot> Sorry, no messages today.
15:01:48 <atriq> Yay
15:09:52 -!- augur has joined.
15:10:45 -!- mig22 has quit (Quit: mig22).
15:15:07 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds).
15:25:12 <atriq> Did we work out what to call that category last night?
15:25:55 <elliott> friend
15:40:00 <atriq> Yay
15:40:12 <atriq> So not the Product Semigroupoid or something like that
15:43:14 -!- ogrom has joined.
15:46:11 <elliott> friend is a better name
15:47:51 <atriq> Indeed it is
15:59:10 -!- sebbu has quit (Ping timeout: 260 seconds).
15:59:55 <atriq> ...I need better friends
16:00:02 <atriq> elliott, will you be my friend?
16:02:45 <atriq> I'm experiencing Ship-to-ship combat in the TVTropes sense
16:02:49 <atriq> Of REAL PEOPLE
16:02:53 <atriq> SOME OF WHOM ARE ME
16:03:10 <elliott> I... think I will elect to not get involved.
16:03:20 <elliott> You could try being friends with fizzie??? He's nice!
16:03:30 <atriq> btw, Gay Dads is a way better ship than Alladin
16:03:36 -!- sebbu has joined.
16:04:23 <elliott> fizzie: Have fun!
16:09:21 -!- Phantom_Hoover has joined.
16:11:37 <atriq> How do OpenOffice and LibreOffice differ?
16:13:21 <FreeFull> Most of the developers moved to LibreOffice
16:13:37 <Gregor> atriq: LibreOffice was going to be “the” followup to OOo until Oracle decided to give it to Apache. It's not clear where OOo is going now, but LibreOffice has made a lot of code cleanups, and hypothetically things are much smoother (I haven't noticed any difference). Most of the developers and distros jumped ship before the OOo->Apache switchover.
16:15:52 <elliott> atriq: One has an "Open" and the other a "Libre".
16:17:42 <Sgeo> Wait, LibreOffice is no longer the followup to OOo?
16:18:31 <Gregor> Sgeo: LibreOffice came about when it looked like Oracle was just going to let it stagnate, but instead they gave the rights to the Apache foundation.
16:21:41 -!- esowiki has joined.
16:21:42 -!- glogbot has joined.
16:21:43 -!- glogbackup has left.
16:21:45 -!- esowiki has joined.
16:21:46 -!- esowiki has joined.
16:21:55 -!- FireFly has joined.
16:23:03 <Sgeo> The Apache Foundation seems to do a lot of stuff that's not web server stuff
16:23:14 <Sgeo> They maintain some sort of convenience library for I/O stuff in Java
16:23:28 <Gregor> Yeah, they do all sorts of shit.
16:23:29 <Sgeo> And ... a packaging system for Java
16:23:32 <Gregor> Emphasis on “shit”
16:23:55 <atriq> They have that Google Wave thing which was actually quite cool but nobody understood it
16:24:02 -!- zzo38 has joined.
16:24:17 <elliott> Ride the Google Wave dot Com
16:24:51 * Sgeo is sort of in the Java ecosystem now, for better or worse
16:25:21 <elliott> Sort of In the Java Ecosystem Now: The Game of the Movie
16:25:39 <Gregor> Yeah, I'm kinda in the Java ecosystem too right now.
16:25:44 <Gregor> P.S. I work at Oracle, lol
16:26:16 <elliott> Sort of In the Java Ecosystem Now/Kind of In the Java Ecosystem Now, double concept album about being resp. sort of and kind of in the Java ecosystem now.
16:27:06 <Gregor> I would buy that album.
16:27:08 <Gregor> And then return it.
16:27:45 <elliott> one day I will make it and it will be a modern masterpiece
16:28:50 <kmc> new JavaEcosystemManagerFactory().getJavaEcosystemManager(new DefaultJavaEcosystemFactoryConfig()).add(new JavaEcosystemElement(Sgeo)).add(new JavaEcosystemElement(Gregor))
16:29:05 <kmc> ;
16:29:16 <elliott> prospective song titles: Ant (What the Fuck is This Shit? Is that XML?); I Don't Fucking Understand Maven, Guess it's Back to Ant; Hey, It's Alright, I Never Cared About GUI Toolkits that Are Worth a Damn Anyway
16:29:57 <Sgeo> Leiningen is good... until you want to use a standalone .jar in your project.
16:30:01 <Gregor> kmc: new EcosystemManagerFactoryFactory(new JavaEcosystem()).createEcosystemManager(new JavaEcosystemConfiguration(JavaEcosystemConfiguration.CONFIGURATION_PARAMETERS.DEFAULT))
16:30:16 <elliott> Damn These Folks Are Some Windows-Using Bullshit
16:30:18 <Gregor> Oops, misused my factory factory.
16:30:38 <Gregor> kmc: new EcosystemManagerFactoryFactory().createEcosystemManagerFactory(new JavaEcosystem()).createEcosystemManager(new JavaEcosystemConfiguration(JavaEcosystemConfiguration.CONFIGURATION_PARAMETERS.DEFAULT))
16:30:48 <elliott> Wanting to Release a Java Package but Not Having a Domain Name to Name the Package With Blues (Pt. I)
16:30:58 <elliott> i hope you are all imagining these songs in your head
16:31:07 <Sgeo> Also, does Swing really suck that much? And if it does, is it usability issues or fundamental issues? Because if the former, there's a Clojure library called Seesaw.
16:31:07 <kmc> import static cx.goatse.*;
16:31:30 <fizzie> elliott: I don't think your suggestion "took".
16:31:41 <Gregor> Sgeo: Now if only Clojure didn't suck that much…
16:32:10 <Sgeo> :/
16:32:33 <kmc> ouch
16:33:10 <kmc> i would buy that album and then return it but first i would rip it but only to 96 kbps mp3
16:33:10 <elliott> JVM-Hosted Languages Trilogy: Pt I. Clojure (Hey, This is Almost Lisp); Pt II. Scala (Hey, This is Almost Haskell); Pt III. Conclusion (Wow, They're All Shit)
16:33:30 <kmc> you forgot rhino!!!!!!!!!111
16:33:50 <shachaf> hi is it make fun of java o'clock
16:34:07 <shachaf> gdoo mgornin etlliot
16:34:09 <elliott> kmc: Downloading an Illegal Pirated Copy of the Timeless Classic "Sort of In the Java Ecosystem Now/Kind of In the Java Ecosystem" Using HotJava
16:34:23 <elliott> if you are in the java ecosystem you have to use hotjava
16:34:26 <elliott> those are the rules
16:35:06 <elliott> kmc: also if i included rhino it wouldn't be a trilogy
16:35:10 <elliott> and i don't know what comes after trilogy
16:35:17 <elliott> i'm here to provide the soul dammit
16:35:26 <Sgeo> The HHGG trilogy is not a trilogy.
16:35:38 <shachaf> elliott is the sole provider
16:35:54 <shachaf> The first Xanth trilogy has 3³ books.
16:36:02 <shachaf> They're all pretty much the same.
16:37:38 <elliott> has anyone actually used hotjava
16:37:38 <elliott> i have
16:41:25 <Gregor> elliott: <Gregor> Clojure is your argument for the popularity of Lisp? <Gregor> All seven Clojure users thank you. <Sorella> I never said Lisp is popular eh <Sorella> But it's the only dialect that actually has got some uses outside of academia and long-forgotten companies. <Gregor> Yes, by soon-to-be-long-forgotten companies. * Sorella uses it at work D:
16:47:52 <elliott> clojure is like haskell but worse and also less popular
16:48:08 <FreeFull> Clojure isn't really like haskell
16:48:18 <elliott> it was a not entirely serious comparison
16:48:22 <elliott> they both try to do stm! only one succeeds
16:55:39 <shachaf> elliott: Do you know how MonadFix works?
16:56:00 <shachaf> And RecursiveDo.
16:56:05 -!- AnotherTest has joined.
16:56:16 <AnotherTest> Hello
16:56:35 <elliott> shachaf: Sort of.
16:56:36 <elliott> Bye.
17:01:00 -!- elliott has quit (Ping timeout: 260 seconds).
17:02:34 <AnotherTest> ais523: Have you read my suggestion for the wiki? What do you think?
17:09:40 <zzo38> I think you can make a writer monad with Codensity and it can also be done with CodensityAsk.
17:10:20 -!- kinoSi0 has joined.
17:10:22 -!- TeruFSX_ has joined.
17:10:47 -!- kinoSi has quit (Read error: Connection reset by peer).
17:12:47 -!- TeruFSX has quit (Ping timeout: 240 seconds).
17:18:01 -!- epicmonkey has quit (Ping timeout: 246 seconds).
17:18:50 <zzo38> For example: newtype X y z = X { runX :: y -> z -> z }; type Writer x = CodensityAsk (X x); write x = CodensityAsk (\(X a) f -> a x $ f ()); runWriter (CodensityAsk f) = f (X $ \a (b, c) -> (a : b, c)) ((,) []);
17:20:35 <zzo38> To make a write monad with Codensity, you could make up a "write only" class.
17:29:31 -!- ogrom has quit (Quit: Left).
17:33:48 -!- AnotherTest1 has joined.
17:34:19 -!- AnotherTest has quit (Read error: Connection reset by peer).
17:37:19 -!- variable has joined.
17:37:33 -!- augur has quit (Remote host closed the connection).
17:37:42 -!- variable has changed nick to Guest89785.
17:38:02 -!- Guest89785 has quit (Changing host).
17:38:02 -!- Guest89785 has joined.
17:38:04 -!- Guest89785 has changed nick to trout.
17:39:58 <AnotherTest1> > dec 0xbe631ff0
17:39:59 <lambdabot> Not in scope: `dec'
17:40:17 <fizzie> > 0xbe631ff0
17:40:18 <lambdabot> 3194167280
17:40:29 <FreeFull> > 0b100101
17:40:31 <lambdabot> Not in scope: `b100101'
17:40:44 <FreeFull> > 0771
17:40:45 <lambdabot> 771
17:40:51 <AnotherTest1> ^ I wanted to resize the stack to that :(
17:40:59 <fizzie> > 0o771
17:41:00 <lambdabot> 505
17:41:04 <fizzie> If you wanted octal.
17:41:23 <fizzie> Sadly, I don't think it does binary literals. But there's always the things that read strings.
17:43:51 <fizzie> > fst . head $ readInt 2 isDigit digitToInt "100101"
17:43:53 <lambdabot> 37
17:44:47 <fizzie> There only seems to be premade readOct, readDec and readHex. Poor binary numbers, nobody likes 'em.
17:45:08 <fizzie> !perl print oct("0b100101");
17:45:10 <EgoBot> 37
17:45:24 <fizzie> Except maybe Perl and a few other guys.
17:45:49 <AnotherTest1> Now that you say
17:45:55 -!- AnotherTest1 has changed nick to AnotherTest.
17:45:56 -!- augur has joined.
17:45:59 <AnotherTest> can you do that in C?
17:46:04 <kmc> happy canadian thanksgiving
17:46:12 <fizzie> AnotherTest: What, 0b000 literals? Not standardly.
17:46:29 <AnotherTest> binary numbers are being discriminated!
17:46:41 <fizzie> GCC has an extension for 0b, unsurprisingly.
17:47:38 <fizzie> No printf formatting specifiers for binary in glibc, though, as far as I know.
17:48:36 <Gregor> !c printf("%ld\n", strtol("111", NULL, 2));
17:48:39 <EgoBot> 7
17:50:08 <fizzie> Now do it the other way around.
17:50:17 <Gregor> Yeah, that's the problem, innit :)
17:51:53 <fizzie> The ##c bot has a %b that's like %o/%u/%x except with binary. (Glibc has a mechanism for hanging custom hooks on unused -- maybe used, too -- conversion specifiers.)
17:53:17 <FreeFull> !c printf("%n", *(0));
17:53:18 <EgoBot> Does not compile.
17:53:31 <FreeFull> !c printf("%n", (void *)0);
17:53:34 <EgoBot> ​./interps/gcccomp/gcccomp: line 52: 17997 Segmentation fault /tmp/compiled.$$
17:53:35 <AnotherTest> dereference (0)?
17:54:11 <Gregor> Dereferencing NULL is fun >_>
17:54:18 <fizzie> The weirdo printf specifier that writes to memory.
17:54:31 <Gregor> wut
17:54:47 <Gregor> Wow
17:54:58 <fizzie> %n does that.
17:55:04 <Gregor> Yeah, just read X-D
17:55:08 <fizzie> I believe there's been a number of related security bugs.
17:55:09 <AnotherTest> oh
17:55:28 <zzo38> Why does printf have a command to write to memory? That doesn't make sense.
17:55:46 <fizzie> zzo38: It writes the number of so-far output characters there.
17:56:05 <fizzie> zzo38: I believe it's meant for tricky aligning of things and so on.
17:56:17 <zzo38> I think it would make more sense to just use the result of printf doesn't it already do that?
17:56:30 <fizzie> Yes, but that's the total string.
17:56:39 <fizzie> You can stick %n in the middle.
17:56:58 <Deewiant> You can call printf more than once, too.
17:56:58 -!- hagb4rd has joined.
17:57:18 <fizzie> Deewiant: Sure, but it's inkonkkenient.
17:58:38 <fizzie> !c int i, j; printf("%d%n%d%n", 123, &i, 456, &j); printf(" - %d %d", i, j);
17:58:40 <EgoBot> 123456 - 3 6
17:59:26 <Deewiant> !c int i = printf("%d", 123), j = printf("%d, 456)"; printf(" - %d %d", i, j);
17:59:27 <EgoBot> Does not compile.
17:59:32 <Deewiant> Oops.
17:59:34 <Deewiant> Well, anyway.
17:59:37 <fizzie> There was some bit in the standard related to sequence points or something that was only meaningful because of %n, I think. Maybe even a footnote.
17:59:58 <fizzie> Something about there being a sequence point after each conversion specifier.
18:00:17 <Gregor> I don't see why %n would have any relevance to sequence points.
18:00:23 <fizzie> So you can have %n writing into a string later printed with %s and it's well-defined.
18:00:37 <fizzie> If crazy.
18:01:05 <Gregor> … but %n doesn't write into a string, and if you did %n%d, then the %d would receive the old value.
18:01:21 <Gregor> But that has nothing to do with %n, it's just arguments being evaluated well before it's dereferenced.
18:01:24 <fizzie> %n can write into a string of you point it at one.
18:01:34 <zzo38> Is %n allowed to write a single byte value?
18:01:48 <Gregor> fizzie: OK, but that still has nothing to do with sequence points, it just has to do with the algorithm used by printf.
18:02:19 <fizzie> Gregor: But if there wasn't a sequence point after the %n you couldn't say whether it was the old or new value.
18:02:47 <Gregor> fizzie: That's not a sequence point, sequence points define the order of evaluation of subexpressions within a single expression.
18:02:58 <Gregor> fizzie: That's just steps in the algorithm of printf.
18:03:22 <fizzie> There are sequence points between statements, you know.
18:03:23 <fizzie> Let me quote it for you.
18:03:51 <Gregor> Yes, of course there are, that's what makes statements statements, but sequence points are what define the semantics of the C /language/, not C library functions.
18:04:21 <Gregor> s/are what//
18:05:30 <fizzie> Uh, after I clean up some cat puke.
18:08:34 <fizzie> "The formatted input/output functions shall behave as if there is a sequence point after the
18:08:38 <fizzie> actions associated with each specifier.274)
18:08:39 <fizzie> 274) The fprintf functions perform writes to memory for the %n specifier.
18:08:53 <fizzie> C11 7.21.6p1 and the footnote.
18:09:03 <Gregor> Why… would they word it that way X_X
18:09:39 <Gregor> Well, I suppose that's not worse a way to word it than anything else, but it confuses a language issue with a library issue.
18:10:10 <fizzie> Since you can't know anything about what goes on in the algorithm of printf, presumably they wanted to guarantee there's a sequence point in-between. I mean, a sequence point is defined to mean that all side effects have completed.
18:10:18 <fizzie> "The presence of a sequence point
18:10:18 <fizzie> between the evaluation of expressions A and B implies that every value computation and
18:10:22 <fizzie> side effect associated with A is sequenced before every value computation and side effect
18:10:25 <fizzie> associated with B.
18:10:28 <fizzie> And so on.
18:11:54 <Gregor> “Since you can't know anything about what goes on in the algorithm of printf”
18:12:04 <Gregor> Of course you can, the C spec is defining its behavior!
18:12:46 <fizzie> I'm not sure what that means.
18:13:03 <zzo38> Do they still make ARMv2?
18:14:44 <Gregor> fizzie: You're saying that the C spec can't know anything about what goes on in the algorithm of printf, when it's /defining/ printf. It can choose to be as lax or precise in that description as it would like. This is an imperative language, it should be defining the imperatives, not trying to define it as if this were a functional language and then throwing sequence points, a trick to add precision to the language semantics, to the description of the implementat
18:14:44 <Gregor> ion of a function.
18:15:14 <fizzie> Gregor: I'm not sure how it should be "defining the imperatives" there.
18:16:18 <fizzie> Gregor: I mean, it's defining certain actions that are associated with the conversion specifiers, and some of those actions involve side effects like writing to memory, so it's defining in which order those actions are sequenced, using the terminology related to those side effects.
18:17:18 * ion of a function.
18:18:03 <fizzie> ion: "ion of function" could be your kind-of title.
18:18:16 <zzo38> Is the VAX printf only using BCD?
18:18:59 <atriq> zzo38, did you think of a name for yesterday's category?
18:19:33 <zzo38> atriq: No, I did not.
18:19:52 <AnotherTest> atriq: how's your userpage?
18:19:54 <AnotherTest> well people page
18:20:35 <atriq> Nonexistant
18:20:37 <atriq> Um
18:20:42 <atriq> I'm not very interesting
18:20:43 <atriq> Well
18:20:55 <atriq> I walked backwards to my maths lesson today for the hell of it
18:21:54 -!- hagb4rd has quit (Ping timeout: 256 seconds).
18:23:02 <AnotherTest> atriq: what did you do?
18:23:15 <AnotherTest> atriq: Physically walked backwards?
18:23:45 <ais523> Arc_Koen: are you responsible for the latest TDWTF entry?
18:23:48 <ais523> or is it a different Koen?
18:24:10 <AnotherTest> (07:05:39 PM) AnotherTest: ais523: Have you read my suggestion for the wiki? What do you think?
18:24:49 <AnotherTest> The idea was to have infoboxes
18:25:50 <atriq> AnotherTest, yes
18:26:04 <AnotherTest> atriq: explain!
18:26:09 <atriq> My ankles started hurting after a while
18:27:09 <AnotherTest> atriq: So you walked backwards through the corridors of your school or something?
18:27:12 <atriq> I walked backwards out of the library, up the staircase, waited outside a door for a bit, then into the classroom and sat down
18:27:29 <AnotherTest> aha
18:27:52 <atriq> Then after the lesson I walked backwards out of the room, down a staircase, up the staircase again, along a corridor, down a different staircase, along another corridor, and back into the library
18:28:07 <fizzie> atriq: Weren't you at all afraid that someone would videotape (uh, I mean... mpeg-4-solid-store...) your walking, and then play it backwards, generating the illusion that you were walking forward?
18:28:29 <atriq> Not really.
18:28:32 <AnotherTest> and all your friends said "oh, that's perfectly normal, no reason to put this on youtube"?
18:28:42 <atriq> There's worse videos of me on the internet
18:29:05 <atriq> 2009 and 2010 were weird years for me
18:29:20 <zzo38> Walk backwards in the hallway with clock.
18:29:51 <AnotherTest> atriq: how so?
18:30:44 <AnotherTest> a lot of backwards-walking?
18:31:19 <atriq> Do I want to tell you?
18:31:26 <atriq> Hmm
18:31:32 <fizzie> It sounds as if you do.
18:31:46 <atriq> Youtube "Cool kid plays air drums" and "Cool kid plays air drums 2"
18:32:03 <AnotherTest> aha
18:32:14 <fizzie> Ooh, you've been one of the cool kids.
18:32:16 <AnotherTest> Your lucky I don't have flash
18:32:24 <atriq> HTML 5?
18:32:33 <AnotherTest> doesn't always work
18:32:43 <AnotherTest> I hope it does
18:32:50 <AnotherTest> doesn't
18:32:56 <AnotherTest> This is bullying?
18:32:56 -!- hagb4rd has joined.
18:33:55 -!- ogrom has joined.
18:34:18 <AnotherTest> it is
18:34:35 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
18:34:42 <atriq> It was me not caring about my personal image
18:36:48 <fizzie> If you're randomly walking backwards these days, it doesn't sound all that terribly careful nowadays either.
18:37:04 <AnotherTest> Indeed
18:37:28 <AnotherTest> Maybe you should consider not doing that?
18:38:25 <zzo38> I realized RogueVM has some things similar to VAX. Unlike VAX, you are allowed to use PC as the destination and as an index, though. RogueVM can use immediates as a destination, has its own instruction set for converting numbers to ASCII (but with a different byte length!), you can use any addressing mode with any istructions, etc
18:38:25 <ais523> <AnotherTest> (07:05:39 PM) AnotherTest: ais523: Have you read my suggestion for the wiki? What do you think? ← sorry, that line is entirely too zzo38 and I'm having problems reading it as a result
18:39:08 <AnotherTest> ais523: Is having infoboxes a good idea or not?
18:39:49 <zzo38> In VAX, "Something like tstl (pc)+ can also be assembled, which is like a literal (same specifier), but reads from part of the following instruction." RogueVM also works like that for literals too
18:39:50 -!- DHeadshot has quit (Read error: Connection reset by peer).
18:40:18 <AnotherTest> ais523: on wikipedia, programming language pages (and many other stuff) have these boxes at the right side of the page. I think it would be nice to have general information about a language in there.
18:40:25 <atriq> I've since then carefully constructed a personal image based on being weird
18:40:47 <atriq> And not caring about my personal image
18:41:08 <zzo38> AnotherTest: Perhaps it might if they also have a database search so that the infoboxes can also be used in database tables and queries, perhaps?
18:41:26 <AnotherTest> zzo38: sounds good, if it's possible
18:41:40 -!- ais523 has quit.
18:41:46 -!- ais523_ has joined.
18:41:58 <AnotherTest> zzo38: I don' t know much about mediawiki software and it's features
18:44:15 <AnotherTest> I think it's useful when looking something up quickly. Eg. you want to know which languages influenced C++, in that case you can find it really fast on wikipedia
18:44:31 <AnotherTest> For esoteric languages this would be useful too
18:44:59 <zzo38> I don't think MediaWiki has it built-in but extension could be added. (With Hackiki, such extensions are just normal articles that anyone can write.)
18:45:39 <AnotherTest> Anyway, bye
18:45:53 <AnotherTest> ais523_: let me know what you think / whether it's possible
18:46:08 -!- AnotherTest has quit (Quit: Leaving.).
18:50:43 -!- hagb4rd has quit (Quit: hagb4rd).
18:59:22 -!- augur has quit (Remote host closed the connection).
18:59:49 <tswett> Hm. There exist Turing machines that halt in some models of ZFC, but not others.
19:02:09 <tswett> Isn't that annoying?
19:04:03 <FreeFull> What is ZFC in this context?
19:04:14 <FreeFull> the set theory?
19:04:31 <tswett> Yep.
19:05:06 <tswett> If a Turing machine does not halt, but ZFC cannot prove that it does not halt, then there exists a model of ZFC in which it *does* halt.
19:05:18 <zzo38> How can Turing machines half in some models of ZFC but not others?
19:05:36 <zzo38> How does that work?
19:06:31 <tswett> Define a "strange Turing machine" as one that does not halt, but, in a given model of ZFC, does halt.
19:06:46 <tswett> In such a model of ZFC, a strange Turing machine halts after a non-standard number of steps.
19:07:03 <tswett> Where a "non-standard number" is a number that exists in the model of ZFC, but not in the "real world".
19:07:19 <zzo38> OK.
19:07:35 <zzo38> Do you have examples?
19:08:16 <tswett> An example of a non-standard number? No.
19:08:33 <tswett> But here's a set theory that formally defines the predicate "standard": http://en.wikipedia.org/wiki/Internal_set_theory
19:08:42 <tswett> Or, at least, gives axioms for it.
19:09:31 <atriq> And people say maths is hard.
19:10:15 <zzo38> Not only non-standard numbers, I mean examples of strange Turing machine and such model of ZFC and so on.
19:10:22 <tswett> Ah.
19:11:17 <tswett> Well, it's impossible to prove that a Turing machine is strange, but an example of a strange Turing machine *may* be the one that searches for a counterexample to Goldbach's conjecture, and halts when it finds one.
19:12:11 -!- Phantom_Hoover has joined.
19:12:23 <tswett> That Turing machine is strange if and only if Goldbach's conjecture is both true and unprovable.
19:12:53 <tswett> If that Turing machine *is* strange, then ZFC + "Goldbach's conjecture is false" is a consistent system.
19:13:21 <FreeFull> @_@
19:14:15 <Phantom_Hoover> what does strange mean
19:14:43 <tswett> Phantom_Hoover: a "strange Turing machine" is one that does not halt, but, in some model of ZFC, does halt.
19:15:05 <Phantom_Hoover> O.o
19:15:22 <tswett> Or, more mundanely: it's one that does not halt, but which we cannot prove does not halt.
19:17:45 <atriq> Hmm
19:17:58 <atriq> If the Product type is a Semigroupoid
19:18:08 <atriq> Is the Coproduct type a Cosemigroupoid?
19:18:42 <Phantom_Hoover> it's a cosmic groupie
19:18:47 <atriq> What even is a cosemigroupoid
19:18:55 <tswett> I suddenly wish that mathematics had a sophisticated nomenclature like chemistry does.
19:19:01 <Deewiant> It's a googlewhack, for one
19:23:00 <zzo38> I don't know what a cosemigroupoid is
19:23:14 <atriq> Is a Cocategory a thing?
19:23:32 <Deewiant> Evidently
19:23:59 <zzo38> I don't know what cocategory is either
19:24:08 <atriq> How about a cogroupoid?
19:24:17 <atriq> Or for that matter, a groupoid?
19:24:23 <atriq> Would that be a category with inverse?
19:24:33 <atriq> inv :: (a ~> b) -> (b ~> a)?
19:27:59 <zzo38> Yes, I think so
19:30:14 -!- augur has joined.
19:30:40 <FreeFull> :t inv x y = y x
19:30:41 <lambdabot> parse error on input `='
19:30:46 <FreeFull> :t let inv x y = y x
19:30:48 <lambdabot> <no location info>: not an expression: `let inv x y = y x'
19:32:14 -!- oerjan has joined.
19:36:18 <atriq> :t let inv x y = y x in inv
19:36:19 <lambdabot> forall t t1. t -> (t -> t1) -> t1
19:36:23 <atriq> :t flip id
19:36:25 <lambdabot> forall a b. a -> (a -> b) -> b
19:36:53 <oerjan> :t flip
19:36:55 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
19:37:14 <atriq> :t flip (fmap (+ 1) [1,2,3])
19:37:15 <lambdabot> forall a b. (Num b) => a -> [b]
19:37:21 <atriq> > flip (fmap (+ 1) [1,2,3]) 6
19:37:23 <lambdabot> [2,3,4]
19:37:26 <atriq> :O
19:37:33 <atriq> > flip (fmap (+ 1) [1,2,3]) undefine
19:37:34 <lambdabot> Not in scope: `undefine'
19:37:35 <atriq> > flip (fmap (+ 1) [1,2,3]) undefined
19:37:37 <lambdabot> [2,3,4]
19:38:17 <oerjan> :t flip . ($)
19:38:18 <lambdabot> forall a b a1. (a1 -> a -> b) -> a -> a1 -> b
19:39:24 <oerjan> why don't you require another argument...
19:39:35 <oerjan> oh wait it's a list
19:40:19 <oerjan> :t flip (fmap (+ 1) [1,2,3])
19:40:20 <lambdabot> forall a b. (Num b) => a -> [b]
19:40:46 <oerjan> oh right it's because of lambdabot's Num (a -> b) instance
19:41:48 <atriq> @src flip
19:41:48 <lambdabot> flip f x y = f y x
19:41:52 <atriq> ...
19:41:59 <oerjan> that's not the one lambdabot uses, obviously :P
19:42:12 <atriq> :t flip
19:42:13 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
19:42:19 <atriq> :t \f a -> fmap ($ a) f
19:42:20 <lambdabot> forall a b (f :: * -> *). (Functor f) => f (a -> b) -> a -> f b
19:42:56 <atriq> :t \f -> flip fmap . id
19:42:57 <lambdabot> forall t a b (f :: * -> *). (Functor f) => t -> f a -> (a -> b) -> f b
19:43:03 <atriq> :t \f -> flip fmap f . id
19:43:05 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
19:43:22 <atriq> :t \f -> (.) (flip fmap f) id
19:43:23 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
19:43:39 <atriq> :t flip (.) id . flip fmap
19:43:41 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
19:43:45 <atriq> PERFECTION
19:43:52 <atriq> :t flip fmap id . flip fmap
19:43:53 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
19:43:59 <atriq> Wait
19:44:02 <oerjan> um...
19:44:02 <atriq> IMPERFECTION
19:44:30 -!- ogrom has quit (Read error: Connection reset by peer).
19:44:56 <oerjan> :t \f -> (. f) . fmap . ($)
19:44:57 <lambdabot> forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => f (f1 a) -> (a -> b) -> f (f1 b)
19:45:10 <oerjan> eek
19:45:38 <oerjan> oh wait
19:45:43 <oerjan> :t \f -> (. f) . fmap . flip id
19:45:44 <lambdabot> forall (f :: * -> *) b (f1 :: * -> *) a. (Functor f, Functor f1) => f (f1 (a -> b)) -> a -> f (f1 b)
19:45:46 <atriq> :t \f a -> flip fmap f ($ a)
19:45:48 <lambdabot> forall b (f :: * -> *) a. (Functor f) => f (a -> b) -> a -> f b
19:45:56 <atriq> :t \f a -> flip fmap f . ($)
19:45:57 <lambdabot> forall t a b (f :: * -> *). (Functor f) => f a -> t -> (a -> b) -> f b
19:46:01 <atriq> NO
19:46:07 <atriq> :t \f -> flip fmap f . ($)
19:46:09 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
19:46:14 <atriq> NO NO NO
19:46:28 <atriq> @pl \f a -> fmap ($ a) f
19:46:28 <lambdabot> flip (fmap . flip id)
19:46:37 <atriq> YES
19:46:48 <atriq> flip in terms of flip
19:46:49 <oerjan> OKAY
19:47:10 <oerjan> :t let flip = flip (fmap . flip id) in flip
19:47:11 <lambdabot> Occurs check: cannot construct the infinite type: f = (->) (f a)
19:47:11 <lambdabot> Probable cause: `flip' is applied to too many arguments
19:47:11 <lambdabot> In the expression: flip (fmap . flip id)
19:47:16 <oerjan> FANCY
19:48:17 <atriq> Did anyone find a use for the Product Semigroupoid?
19:48:36 <oerjan> not that i recall
19:49:03 <oerjan> although i think i found that the Product Semigroupoid is a product of semigroupoids.
19:49:04 <atriq> Is that even a remotely correct name?
19:49:31 <oerjan> well it's (,)
19:50:08 <oerjan> (those semigroupoids being Const and Dual Const, in some sense)
19:50:59 <oerjan> (just notice that the semigroupoid operation on the fst and snd elements are independent
19:51:03 <oerjan> )
19:53:09 <oerjan> <kmc> but with something like lint checking, maybe there's a 'false sense of security' problem, where people focus on making the lint checker's irrelevant complaints go away rather than actually reviewing their code
19:53:52 <oerjan> maybe it is most helpful if there is a requirement to pass lint before an _actual_ code review even starts
19:54:11 <oerjan> which would mean that code review won't be bogged down in trivialities
19:54:15 <kmc> yeah
19:54:29 <kmc> that makes a lot of sense
19:54:43 <kmc> we aren't doing code reviews currently :/
19:54:52 <oerjan> not bad for something i made up on the spot >:)
19:55:33 <oerjan> which reminds me, itidus2[01] is still absent
19:55:53 <oerjan> i hope it's nothing serious
19:56:46 * oerjan wishes freenode didn't reset the dates on the ban list
19:57:49 <oerjan> also that irssi didn't put it in the channel window
20:02:33 <kmc> well a bunch of people told him off for being full of shit
20:02:42 <kmc> which i think has happened at least 100 times before
20:02:46 <kmc> but maybe it took this time
20:03:47 <oerjan> it would have been nice if it gave him a clue rather than chase him away, though
20:04:01 <oerjan> but i guess that rarely works
20:04:43 <oerjan> hm he is on freenode somewhere.
20:06:09 <atriq> Is it possible to call C++ code from Haskell using the FFI?
20:06:24 <atriq> Or is it just C code?
20:07:30 <oerjan> atriq: not directly, no.
20:07:40 <atriq> Eugh.
20:07:44 <atriq> How about UnrealScript?
20:08:18 <oerjan> i think the general advice is to make a small C interface
20:08:33 <atriq> Heh, much, much more trouble than it's worth
20:11:43 <oerjan> "According to "The Haskell 98 Foreign Function Interface 1.0" report -- you import a C++ function by simply specifying the calling convention cplusplus. Unfortunately, no haskell compiler actually supports this calling convention, so we have to use the C calling convention instead."
20:12:06 <oerjan> "The standard method for dealing with this is to write C++ code that uses extern "C" to export the methods unmangled. Of course, you still have to uniquify the method names, but *you* get to pick the names instead of letting the compiler do whatever wacky method it wants."
20:12:23 <oerjan> and then the rest of the haskellwiki page describes something much more hairy.
20:17:01 <oerjan> atriq: my impression is that calling any other language from haskell or vice versa usually goes via their common C interface
20:17:56 <oerjan> and that this still sometimes leaves the problem of getting one of them to accept not being the main program
20:19:08 <oerjan> (well haskell doesn't have to be, but then you have to get the ghc runtime system set up with the right C calls.)
20:19:50 <Arc_Koen> ais523_: I have no idea what TDWTF is
20:19:57 <atriq> The Daily WTF
20:20:40 <Arc_Koen> yup that's what google told me
20:20:44 <oerjan> a site showcasing bad code. by what i hear, often badly :)
20:21:39 <Arc_Koen> hmmm I guess I don't use C often enough to find that "block" special
20:21:41 <kmc> if you know how your compiler is going to name-mangle C++ functions *and* if the C++ calling convention is compatible with the C one, then you can call them directly
20:21:44 <kmc> but it's not recommended
20:22:17 <Arc_Koen> (and for my defense there's another Koen on freenode)
20:22:53 -!- ais523_ has changed nick to ais523.
20:22:59 <oerjan> how can there be more than one Koen
20:23:29 <Arc_Koen> that's actually a pun on my name which works pretty well in french
20:24:39 <Arc_Koen> because it sound like "qu'une", which basically means "only one" (except une is the feminine form)
20:25:27 <oerjan> ceci n'est pas une qu'une
20:25:32 <Arc_Koen> oerjan: what about "If no variable is nonzero, skip to the matching END." for ndeql's begin
20:25:42 <Arc_Koen> oops, pardon my accidental boldness
20:26:12 <Arc_Koen> oerjan: you just said "this is not an only one"
20:27:58 <oerjan> Arc_Koen: i think that would make [-] clear all variables, right? (although using unpredictable time doing so.) which i think may mean you can somehow treat all the variables as a single bit in a usable way.
20:28:10 <oerjan> Arc_Koen: it was a pun on "Ceci n'est pas un pipe"
20:28:29 <oerjan> er
20:28:33 <oerjan> * \-/
20:28:51 <Arc_Koen> oh, ok
20:29:26 <Arc_Koen> oerjan: nope, that wouldn't
20:29:50 <oerjan> why not? it wouldn't quit the loop until they're all zero.
20:29:56 <Arc_Koen> because decrement wraps
20:30:03 <Arc_Koen> oh
20:30:05 <Arc_Koen> ohhhhh right
20:30:19 <Arc_Koen> well, yes
20:30:19 <oerjan> well yes, but i'm assuming it would statistically hit all zero _eventually_.
20:30:43 <Arc_Koen> right, so in fact any loop is either an infinite loop or a loop that sets all variables to zero
20:30:49 <oerjan> yeah
20:31:32 <oerjan> although still still doesn't make it easy to put predictable things in the deque ... _some_ variable could be zero when you try to put a nonzero there
20:31:36 <oerjan> *this still
20:31:42 <Arc_Koen> it's a queue
20:32:02 <oerjan> sorry, confusing a bit with your other language
20:32:32 <Arc_Koen> hehe
20:33:07 <Arc_Koen> adding instructions to affect the other side of the queue in ndeql would probably not change much, though
20:34:36 <Arc_Koen> hmmmmmm what about: a deque with "pop", "push", "toggle", a register, and cannot toggle inside loops
20:34:53 <Arc_Koen> (but the register is always accessible, so information can pass from one side to the other)
20:35:29 <Arc_Koen> and maybe conditionals (which don't loop) inside which you can toggle
20:37:13 <oerjan> hm i'm thinking \\-/=\ ... // might be a way to get something dequeued in a usable way...
20:40:20 <oerjan> i'm wondering if you could check if the sum of the variables is odd or even
20:40:40 <Arc_Koen> "until all variables are zero: (set them all to zero, dequeue one element (enqueuing a zero), and then until all variables are zero, do something that has no effect if the selected variable is zero, but which does what we want to do AND set all variables to zero if the selected variable is the right one )"
20:41:42 <Arc_Koen> ndeql_oracle(\--/) checks if the sum is odd or even
20:41:54 <oerjan> fancy
20:42:06 <oerjan> not _quite_ what i had in mind :)
20:43:18 <Arc_Koen> hmmm
20:43:48 <Arc_Koen> ok here's a lead: if we can find a way to determine whether a loop allows for all variables to be set to zero or not
20:44:17 <Arc_Koen> then we have proven that ndeql is not turing complete
20:45:04 <oerjan> i think my brain is overloading again
20:46:09 -!- Phantom_Hoover has quit (Ping timeout: 256 seconds).
20:47:29 <oerjan> it doesn't like to think about things that are changing underneath it.
20:48:01 <Arc_Koen> oh, yeah
20:48:05 <Arc_Koen> that's what I play go and not chess
20:48:40 <oerjan> i thought go had change, but i haven't actually played it :)
20:48:41 <Arc_Koen> (that and the fact that go is objectively SO MUCH more better than chess)
20:48:52 <oerjan> but of course
20:49:02 <Arc_Koen> weeeeeell uh there do exist several rules
20:49:15 <Arc_Koen> depending of the country you're in and the wather
20:49:17 <Arc_Koen> weather
20:49:17 * oerjan sort of got tired of chess
20:49:27 <oerjan> Arc_Koen: i meant the board changing.
20:49:31 <Arc_Koen> oh
20:49:43 <oerjan> i don't think the rules change in chess either.
20:49:56 <oerjan> wait, why am i thinking like this, i used to play nomic...
20:50:00 <zzo38> There are many variants of chess and go, some combined both, some changing the rules during the game or changing the geometry of the board, some with hidden information, etc
20:50:31 <Arc_Koen> well japanese rules and french rules for go are much closer than shogi and occidental chess are
20:50:54 <Arc_Koen> oh, this summer we tried the "phantom rengo" side tournament during the european congress
20:51:33 * oerjan considers trying to eat ->
20:51:44 <Arc_Koen> that was a lot of fun (though the rules were not exactly "symmetric" for both teams, so white always won
20:52:26 <Arc_Koen> "phantom go" means you don't see your opponent's moves (but if you try to play somewhere where there is already a stone, the referee will tell you it's a forbidden move and you can place an opponent's stone there to remember)
20:53:08 <Arc_Koen> and rengo is just go with a partner (you play once, your opponents play, your partner plays, your opponents play, then only it's your turn)
20:53:37 <Arc_Koen> so phantom rengo: you see your own moves and one of your opponent's moves, but neither your partner's moves neither your other opponent's moves
20:53:42 <Arc_Koen> that was really fun :)
20:54:23 <Arc_Koen> problem is, in phantom go it's possible to do some sort of "scams", moves that are usually stupid and easily reprehensible, but in phantom go you're hoping your opponent won't guess what you did
20:54:57 <Arc_Koen> and here in phantom rengo, if the person who plays right after you is the opponent who can see your moves, you can't do that
20:55:22 <Arc_Koen> but if it's the other opponents, then maybe he won't guess it, and maybe your partner will guess it, so scamming is possible
20:56:08 <Arc_Koen> and unfortunately you can't set the order of turns in a way that doesn't advantage one team (that is, one of the teams will be able to scam every move, and the other will never be able to)
20:56:38 <Arc_Koen> so they said "the weaker team must take white (and have that huge advantage"
20:56:48 <Arc_Koen> unsurprinsigly, the weakest team won the tournament
20:57:13 <Arc_Koen> oerjan: why did you stop playing nomic?
20:57:34 <zzo38> What if you play balanced marseillais phantom rengo?
20:58:07 <Arc_Koen> never heard of balanced go or marseillais go
21:00:50 <Arc_Koen> there are some funny stuff about the rules of go, though
21:00:57 <Arc_Koen> for instance, it is possible to repeat the position
21:01:24 <Arc_Koen> they could have just say "it's forbidden to play a move that repeats a position" but nooooo that would have been too simple
21:02:22 <Arc_Koen> so they started by saying "you cannot take back an opponent's stone immediately after it was played, in that very precise shape [diagram here]" (and the shape in question is called a ko and is the most frequent way to repeat a position
21:02:46 <Arc_Koen> but then if you combine three kos on the board, you can repeat the position without immediately taking back the stone!
21:03:11 <Arc_Koen> they could have just say "ok, it's forbidden to play a move that repeats a position" but nooooo that would have been too simple
21:03:27 <Arc_Koen> so they said "if the position is repeated three times because of a triple ko, the game is null"
21:03:32 <atriq> I want to set up a one-time cron thing
21:03:39 <atriq> Like an alarm clock
21:04:02 <Arc_Koen> BUT it's actually possible to repeat the position in other ways (though honestly I have never see them in actual games)
21:04:17 <Arc_Koen> atriq: what's a cron thing?
21:04:45 <Arc_Koen> http://esolangs.org/wiki/Alarm_Clock_Radio
21:06:17 <Arc_Koen> so eveyr country made its own set of rules, addressing all problems in a different way
21:06:33 <atriq> Arc_Koen, Linux utility used to time commands
21:09:20 <kmc> you want 'at'
21:09:39 <kmc> echo mplayer -really-quiet -loop 0 ~/wakeup.mp3 | at 09:00
21:10:29 <atriq> Thanks
21:11:17 <zzo38> I have never heard of balanced go or marseillais go either, but I have heard of balanced marseillais chess.
21:12:28 <atriq> Goodnight
21:12:29 -!- atriq has quit (Quit: Leaving).
21:17:58 -!- Phantom_Hoover has joined.
21:20:40 <Arc_Koen> oh, yes, we do that sometimes
21:20:53 <Arc_Koen> I've even played "inflation go" a few times
21:21:15 <Arc_Koen> black plays one move, white plays two, black plays three, etc.
21:21:56 <Arc_Koen> it's kind of silly though, because it becomes quickly so easy to capture that you have to waste all your moves to protect yourself
21:22:42 <zzo38> I have another idea: Three players go where each player cannot see the stones belonging to the player who plays before him in the turn order, but you can see your own and the next player's stones.
21:23:17 <Arc_Koen> nice
21:23:18 <zzo38> oerjan: What will you consider trying to eat? Go stones?
21:23:31 <Arc_Koen> well actually multiplayer go is already quite original in itself
21:23:47 <oerjan> hm i didn't get around to that eating yet.
21:23:48 <Arc_Koen> and we never play it because of that stupid "there's no third color" limitation
21:24:22 <Arc_Koen> but playing multiplayer go is definitely on my list of things to do at least one in my life
21:24:24 <zzo38> That is because you don't have the stones, I guess, then buy more stones and paint them a different color, or use the computer
21:24:33 <oerjan> it will surely be slices of bread, though.
21:24:54 <Arc_Koen> yes, another thing on my list is "write a go program that can support many many many variants"
21:25:19 <Arc_Koen> oerjan: i have CHOCOLATE
21:25:33 <oerjan> technically so do i
21:25:52 <oerjan> but i'm not going to eat that for a meal
21:25:54 <Arc_Koen> I'm not sure I want to know why there's a "technically" in that sentence
21:26:24 <zzo38> Arc_Koen: Because otherwise it looks too short. And actually you do want to know and this is the reason.
21:26:26 <oerjan> technically you may not
21:27:00 <Arc_Koen> I'm so transparent
21:27:08 <oerjan> technically i am insane
21:27:33 <oerjan> technically this is a sentence
21:27:52 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
21:29:03 <Arc_Koen> well, technically it lacked a capital and a period
21:29:20 <oerjan> technically i expected that comment
21:30:10 <Arc_Koen> well technically you got what you paid for!
21:30:15 <Arc_Koen> oh wait no you didn't
21:31:23 <oerjan> technically i don't think i paid
21:37:53 -!- pikhq has joined.
21:38:00 -!- pikhq_ has quit (Ping timeout: 252 seconds).
21:42:53 <ais523> btw, I had an interesting idea for a potentially interesting BF derivative a while back
21:42:59 <ais523> eliminate . and , because they're unnecessary
21:43:03 <ais523> then create one command that does + or - at random
21:43:11 <ais523> and one that does < or > at random
21:43:15 <ais523> leaving [ ] the same as before
21:43:31 <ais523> preferably using bignum cells, but it doesn't really matter
21:43:50 <ais523> you can zero cells with [+] and nonzero them with [+]+ so you can simulate a binary tape
21:43:55 <ais523> it's the < and > I'm less sure about
21:44:02 <ais523> (tape infinite both ways, obviously)
21:47:28 <oerjan> <ais523> [14:15] <ais523> hmm, I take it Haskell doesn't have ignore in its standard library, on the basis that it's completely useless?
21:47:37 <oerjan> what is that supposed to do
21:48:05 <Gregor> ignore x y = y
21:48:16 <oerjan> i was asking ais523
21:48:21 <Gregor> (Just making shit up, ignore me ;) )
21:48:32 <oerjan> although that would be const id
21:48:50 <zzo38> Does Haskell have a "computed NEXT FROM" monad?
21:49:12 <oerjan> ais523: ^
21:53:04 <oerjan> ais523: in the Ndeql discussion above i had the idea that you might be able to use parity, this might apply to your derivative too
21:54:52 <oerjan> [>] seeks to the nearest zero cell either to the left or to the right
21:57:10 <oerjan> [++>] seeks to an even cell, although not necessarily the closest one
21:57:17 <oerjan> *a closest
21:57:41 <kmc> :t flip const
21:57:43 <lambdabot> forall b a. a -> b -> b
21:58:42 -!- ais523 has quit.
21:58:59 <fizzie> But "const id" is more right, as evidenced by
21:59:00 * oerjan swats ais523 in absentia -----###
21:59:01 <fizzie> @. pl djinn a -> b -> b
21:59:01 <lambdabot> f = const id
21:59:24 <oerjan> i guess ais523 used ignore
22:01:58 <shachaf> @quote ddarius partial.application
22:01:58 <lambdabot> ddarius says: (f x) is a partial application iff f x == (curry (uncurry f) x)
22:02:44 <oerjan> useful.
22:02:47 -!- TeruFSX_ has quit (Read error: Connection reset by peer).
22:04:01 -!- copumpkin has joined.
22:04:03 -!- TeruFSX has joined.
22:04:29 <FreeFull> :t curry
22:04:31 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
22:09:17 <oerjan> <Arc_Koen> oerjan: why did you stop playing nomic? <-- too much real life intervening, i think.
22:09:23 <Arc_Koen> Gregor: ocaml has "ignore x = ()", though that may not be a useful combinator
22:09:52 <oerjan> if that's what he meant, then haskell _does_ have such a thing.
22:09:54 <oerjan> :t void
22:09:55 <lambdabot> Not in scope: `void'
22:10:08 <Gregor> In a pure lazy language, it's stunningly pointless :)
22:10:11 <oerjan> ... lambdabot is getting _old_.
22:10:44 <shachaf> @djinn Not (Not (Either (Not a) a))
22:10:44 <lambdabot> f a = void (a (Left (\ b -> a (Right b))))
22:10:52 <oerjan> Prelude Control.Monad> :t void
22:10:52 <oerjan> void :: Functor f => f a -> f ()
22:10:55 <oerjan> this one.
22:11:01 <oerjan> @hoogle void
22:11:01 <lambdabot> Foreign.Marshal.Error void :: IO a -> IO ()
22:11:01 <lambdabot> Control.Monad void :: Functor f => f a -> f ()
22:11:01 <lambdabot> package void
22:11:19 <shachaf> Oh, that void.
22:11:26 <shachaf> What about void :: Void -> a
22:11:40 <Gregor> Sure, at the level of /monads/ it makes sense.
22:11:42 <oerjan> that wouldn't be an ignore, would it?
22:11:51 <Arc_Koen> oerjan: I agree that [>] will set the pointer to either the nearest nonzero cell to the right or to the left
22:12:00 <Arc_Koen> but [++>] I'm not sure does what you say
22:12:21 <oerjan> Arc_Koen: i'm assuming only parity matters for the last one
22:12:24 <Arc_Koen> at least not without embarrassing side effects
22:12:29 <Arc_Koen> ohhhh ok
22:13:38 <oerjan> i'm not sure that helps much though
22:14:05 <Arc_Koen> hmmm you can emulate finite-tape brainfuck easily
22:14:22 <oerjan> Arc_Koen: how so?
22:14:48 <Arc_Koen> hum wait my brain is wrong
22:15:10 <Arc_Koen> yeah no that doesn't work at all
22:15:17 <Arc_Koen> and even if it did that would be only 2-cell brainfuck
22:15:50 <Arc_Koen> I'm not gonna explain because it doesn't make any sense anyway
22:16:29 <oerjan> i'm still slightly miffed over ais523 leaving immediately after proposing it.
22:18:03 <Arc_Koen> I think that's a nonnegligible danger about being interested in math or other sciences
22:18:24 <Arc_Koen> when someone presents you with a problem late in the evening and YOU CANNOT SOLVE IT
22:18:38 <Arc_Koen> and you know there is no way you're gonna sleep until you solve it
22:18:46 <oerjan> oh right, can ruin some sleep yeah
22:19:13 <oerjan> although in this case it's more like i'm stubbornly avoiding trying any more, because he left.
22:19:58 <Arc_Koen> when I was younger I used to go to the same place near the beach every summer; at the harbour there was (among other tourist shops) a magician
22:20:22 <Arc_Koen> he performed tricks and sold them
22:20:27 <quintopia> busking
22:20:40 <Arc_Koen> most were easy to understand (not necessarily the precise trick, but at least the idea)
22:20:43 <quintopia> a fine anglamerican tradition
22:20:58 <Arc_Koen> but there was one with a piped card deck that was just mind blowing
22:21:07 <quintopia> did you know theree is a busking forum?
22:21:17 <quintopia> with a whole subforum devoted to svengali pitch?
22:21:26 <Arc_Koen> busking, right
22:21:43 <Arc_Koen> except he was not showing his talent so much as his pre-made piped objects
22:22:10 <Arc_Koen> so this numero lasted for about a minute or two
22:22:22 <oerjan> "piped"?
22:22:30 <Arc_Koen> during which the piped card deck was laying inside its box, on the table
22:22:31 <quintopia> gaffed probably
22:22:41 <quintopia> ^oerjan
22:22:47 <Arc_Koen> are you insinuating my vocabulary is not wide enough to tell that story? :(
22:23:07 <quintopia> it's nonstandard at least
22:23:10 <quintopia> please continue
22:24:00 <Arc_Koen> yeah so the numero went on *without the magician touching the cards*
22:24:04 * oerjan swats quintopia for explaining with an equally obscure synonym -----###
22:24:15 <Arc_Koen> (so basically he was just talking)
22:24:28 <Arc_Koen> and he asked a member of the audience to think of a card
22:24:39 <quintopia> oerjan: gimmicked, then
22:24:50 <oerjan> OKAY
22:24:55 <quintopia> that card was the only face up one?
22:25:05 <Arc_Koen> EXACTLY
22:25:07 <quintopia> or face down possibly
22:25:16 <Arc_Koen> face down, actually
22:25:24 <quintopia> invisible deck then.
22:25:31 <Arc_Koen> after the first time that I saw him perform this I couldn't sleep
22:25:37 <Arc_Koen> I came back everyday
22:25:52 <Arc_Koen> that was unfortunately one of the tricks he performed the least often
22:25:59 <quintopia> well
22:26:06 <quintopia> i'm sorry about your insomnia
22:26:16 <Arc_Koen> after some time I decided to buy it
22:26:27 <Arc_Koen> so i asked if he could perform it one last time
22:26:35 <Arc_Koen> and while he did it I UNDERSTOOD
22:26:40 <Arc_Koen> and it's ruined now.
22:26:55 <quintopia> the downside of magicianhood
22:27:03 <quintopia> you can no longer be a magical spectator
22:27:08 <quintopia> unless the magician is very very good
22:27:24 <quintopia> but invisible deck is an astounding trick
22:27:28 <Arc_Koen> I mean, other tricks, you *know* that there is a trick, so I'm rarely dazzled or anything (though that didn't stop me from watching his show every year)
22:27:30 <quintopia> i have a brainwae deck myself
22:27:38 <quintopia> *brainwave
22:27:48 <Arc_Koen> but in this he didn't so much as touch the cards
22:27:53 <quintopia> g2g
22:28:15 <Arc_Koen> I've never heard of all the terms you're using
22:28:57 <oerjan> clearly the box was hollow and there was an assistant gnome hiding under the table. hth.
22:29:54 <oerjan> which is why he did it so rarely, couldn't afford the gnome all the time.
22:30:27 <Arc_Koen> oh my you just understood the most mind blowing trick I've ever seen WITHOUT EVEN WATCHING IT
22:30:35 <oerjan> i did? :P
22:30:47 <Arc_Koen> yup that's exactly how it worked
22:30:59 <Arc_Koen> well except for the part involving a gnome
22:31:00 <oerjan> XD
22:32:00 <oerjan> my jokes: now omniscient too
22:32:41 <Arc_Koen> omnijan
22:34:18 <oerjan> real food this time ->
22:34:22 <oerjan> (maybe)
22:35:40 -!- heroux has joined.
22:35:41 <Arc_Koen> funny how that "delay" instruction is so rarely included in esolangs but so present in esoprogrammers
22:38:37 <Arc_Koen> random things to do when bored: write a banana scheme program that returns true or false depending on whether the riemann hypothesis is correct or not
22:41:37 -!- Gregor has set topic: BEWARE THE ØRJANIST MØØSE | I, for one, welcome our new hash function overlords | E5081A06F9E364E179B336A2C6D6831D4B50CD7739C7E1565E03EBF2 | God made the natural numbers; all else is the work of ZARDOZ | http://codu.org/logs/_esoteric/ | http://esolangs.org/wiki.
22:41:52 <zzo38> Please read Chris Pressey's message http://esolangs.org/wiki/User_talk:Zzo38/FurryScript
22:42:12 <Arc_Koen> I think this is a good idea.
22:43:02 <zzo38> What did you think is good idea?
22:43:59 <Arc_Koen> to move furryscript to main namespace
22:44:13 <zzo38> Then write that on the talk page I linked to, please.
22:44:22 <zzo38> I think you have account, isn't it?
22:45:26 <oerjan> the only thing i was wondering is if it an esolang or not
22:45:29 <Arc_Koen> wait, are we expecting Chris Pressey to take my opinion on that matter into account? You have no idea what good it does to my self-confidence!
22:45:32 <oerjan> *+is
22:45:57 <oerjan> yeah i prove his languages TC and he barely notices
22:46:03 <zzo38> Arc_Koen: I don't know, but if you write it there, it can be decided who does and who does not take your opinion on that matter into account.
22:46:18 <zzo38> oerjan: Yes that is too what I was wondering the same thing, which is why I replied as I did there.
22:47:26 <Arc_Koen> oerjan: but you do that to everyone, maybe he'd notice if you stopped proving his languages tc!
22:47:32 <FreeFull> What makes FurryScript furry anyway
22:47:44 <Gregor> All the fur.
22:47:45 <Gregor> Duh.
22:48:17 <zzo38> FreeFull: The name of the first file which was written with it, although recently I found some more mistakes in it that I fixed; the original had many more mistakes but I fixed most of them.
22:52:15 -!- Nisstyre-laptop has joined.
22:52:35 <Arc_Koen> hey if we all go edit the page at the same time, are we gonna erase other people's edits?
22:52:59 <zzo38> Arc_Koen: I don't think so; I think MediaWiki has stuff in it to prevent that from happening.
22:53:10 <Arc_Koen> or is mediawiki gonna do something like warning us "beware, that page has already been edited since you clicked the edit link"
22:53:40 <Arc_Koen> yeah, I think I've heard that from somewhere (something about concurrent programming) but I have no idea how it can work
22:54:23 <Arc_Koen> I mean, if I make a minimal edit on one part of a page and someone makes a minimal edit on another part of that page, I could understand how both edits are "compatible" but otherwise...
22:54:58 <zzo38> It will warn you.
22:55:24 <oerjan> Arc_Koen: it _does_ try to split into compatible edits, but it will simply warn you otherwise, and you have to merge them manually.
22:56:20 <oerjan> which can be a pain.
22:56:22 <Arc_Koen> so for instance if two people add truth-machine implementations on the truth-machine page, there will be no warning?
22:57:10 <oerjan> as long as they are in separate sections, i don't think so. at least it works that way for undoing stuff.
22:57:36 <Arc_Koen> oh, you can revert an old edit without reverting more recent edits? nice
22:57:47 <oerjan> yep
22:58:12 <oerjan> i recall experiencing that if two people make the exact same edit, neither will get a warning.
22:58:47 <FreeFull> Who will it show up as?
22:58:47 <oerjan> although only the first to save is credited.
22:58:55 <FreeFull> I see
23:04:32 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds).
23:06:20 -!- Frooxius has quit (Ping timeout: 246 seconds).
23:17:03 -!- fungot has quit (Ping timeout: 245 seconds).
23:19:23 <kmc> that has happened to me with git commits as well
23:20:11 <kmc> a coworker and i both make the exact same change, they push to master, i rebase onto master
23:20:23 <kmc> instead of showing a merge conflict, git just drops my commit
23:20:41 <kmc> because it has the same git-patch-id as one of the commits it's rebasing past
23:27:30 <Sgeo> Is rebase a history mutating thing?
23:27:47 <Sgeo> Erm, well, I guess everything is, but isn't there something that tampers with history beyond just adding new stuff at the end
23:28:11 -!- monqy has joined.
23:28:23 * Sgeo mutates monkey
23:28:25 <Sgeo> monqy
23:28:41 <zzo38> Is there some way to make up the "computed NEXT FROM" monad in Haskell?
23:30:59 <oerjan> zzo38: my guess is "yes"
23:31:13 <zzo38> Do you even know how?
23:31:22 <oerjan> well, except what's NEXT FROM
23:31:43 <zzo38> It is something in CLC-INTERCAL, like COME FROM but you can return to where it came from
23:32:13 <Sgeo> If it's a control flow concept, the Cont monad exists, and out of that you can build many control structures.
23:32:41 <zzo38> I did think of that, if it is something with continuation monad
23:34:33 <oerjan> hm...
23:36:13 <oerjan> if you have something like do { label 1 (...); x <- someStatement; nextFrom (someThingEvaluatingTo1) (someStatement) } then a problem would seem to be that you cannot get a value for x if you skip over the action setting it...
23:37:07 <oerjan> so i think you'd have to restrict it to a list of resultless actions
23:37:24 <oerjan> same problem with just COME FROM and GOTO, of course
23:38:06 <zzo38> I know that if it is a Kleisli morphism it has that problem, so it would have to be a not Kleisli morphism, if you would otherwise to need like that
23:38:28 <oerjan> i don't know what that is anyway
23:40:04 <oerjan> but i think you could make something that worked with a structure like runLabels [ Label 1 (...), Unlabeled (...), NextFrom (someThingEvaluatingTo1) (...), ... ]
23:40:55 <oerjan> so that runLabels can parse the general position of everything before starting running subactions
23:42:33 <zzo38> GOTO backward may work though even with the "getCC" and stuff I have, where the function runCC = runCT <*> id; can do a goto backward to the getCC
23:43:05 <oerjan> well yes, backward jumps don't have that problem
23:45:25 <oerjan> runLabels wouldn't even need a different monad, i think. it's just a control structure that can be used in any monad.
23:45:31 <zzo38> To do forward, either you would have some kind of fake result to check and then to go back, or to make it something other than Kleisli morphisms, such as haivng nextFrom :: Label -> m x -> m x
23:46:52 -!- Phantom_Hoover has joined.
23:47:14 <zzo38> Or like nextFrom :: Label -> M x -> M x -> M x you need both monads arguments I think
23:49:26 <zzo38> Or maybe you want to be able to compute the label inside the monad too
23:49:54 <oerjan> well of course, otherwise it's not much of a computed NEXT FROM
23:50:19 <zzo38> Well yes
23:50:47 <oerjan> on the other hand you don't want the label computation to be able to mutate values
23:50:53 <oerjan> just read them
23:51:08 <zzo38> Yes, although depending on the monad it may make possible that any value it changes is not changed.
23:53:09 <zzo38> Or maybe you want: nextFrom :: M Label -> M () -> M x -> M x;
23:58:56 <oerjan> the yafgc comic seems to have got a real schedule slip
23:59:38 <kmc> Sgeo: the short answer is "yes, rebase mutates history" but to actually understand what that means you have to understand a few things about git
←2012-10-07 2012-10-08 2012-10-09→ ↑2012 ↑all