←2018-08-22 2018-08-23 2018-08-24→ ↑2018 ↑all
00:00:25 <ais523> { x:= f(for(a)?, for(b)?); … } unifies your syntax and mine
00:00:29 <shachaf> By the way, is there a reason many languages support multiple arguments rather than just supporting tuple arguments?
00:00:40 <shachaf> ais523: What is for() in this context?
00:00:59 <ais523> shachaf: it returns a List monad action
00:01:14 <ais523> then ? will convert that into a map operation over the rest of the block on the returned list
00:01:29 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
00:01:34 <shachaf> Hmm, can you guarantee that that compiles to efficient code?
00:01:48 <shachaf> I don't want heap allocations or laziness or anything like that.
00:01:53 <shachaf> Just a loop.
00:02:15 <ais523> well, a List monad action doesn't need to be an actual list
00:02:31 <shachaf> Sure. I guess I don't know how your monads are represented.
00:02:36 <ais523> as the only things you can /do/ with it are flatten and map, both of which can be implemented in compressed form
00:02:53 <ais523> in general, a monad action is basically just a <flatten, map> tuple
00:02:58 <ais523> where flatten and map are functions
00:03:15 <ais523> although it probably has extra metadata so that it knows how to flatten other instances of itself
00:03:38 <ais523> I guess this is easier with rust definitions, it's something which has a trait that allows it to be flattened and mapped
00:04:09 <shachaf> What about { while(p); ... }?
00:04:10 <ais523> flatten for iterators is basically just "do the first iterator, then the second, then the third…"
00:04:14 <ais523> map for iterators is obvious
00:04:16 <shachaf> Here p needs to be re-evaluated on each iteration.
00:04:31 <ais523> that doesn't work where p is eager, so it would need to be lazy
00:04:45 <shachaf> Well, it works if you can do a goto to the beginning.
00:05:24 <shachaf> { while(p); ... } --> { @loop; if(p); { ... }; repeat @loop; }
00:05:42 <ais523> laziness is a monad too, so I guess you could just say "while takes an action as argument", but { while(lazy {p}) } is pretty ugly syntax
00:05:48 <shachaf> Where @ is a syntax for naming a block, or a label. And repeat is just a restricted goto.
00:06:04 <ais523> if goto only goes backwards then it's more like a break
00:06:17 <shachaf> break goes forward
00:06:30 <ais523> but if we're using an evaluation order model, p gets evaluated before while, so while can't place a label before the evaulation of p
00:06:43 <ais523> unless we use a different evaluation order in which the function is evaluated before its arguments, I guess
00:06:56 <ais523> but then it'd look like while()(p) unless we were using unusual syntax
00:07:01 <shachaf> Well, I think this was just one of the things I was allowing these constructs to do?
00:07:26 <shachaf> They get a label pointing to the block they're at the beginning of.
00:07:41 <ais523> actually, thinking about it, break can't be implemented like this because we can't escape from blocks other than the nested block we're in
00:07:52 <ais523> so your idea is a bit more general, mostly because it has continuations
00:08:02 <shachaf> So the other thing I have is break from any block.
00:08:24 <shachaf> break-with-value from any block, even. Which is such a useful feature I'm surprised no language has it.
00:08:52 <shachaf> This kind of early exit means that you can't really use lambdas.
00:09:40 <shachaf> return is also just a special case of this.
00:10:36 <shachaf> I mentioned the other day that I figured out what break and continue are.
00:10:39 <ais523> break-with-value from any block is basically what you get when each block does an implicit call/cc (as you can use the continuation to send the value back)
00:10:52 <ais523> also, "no language has it" is wrong, you can do it just fine in INTERCAL
00:10:55 <shachaf> Well, it's not arbitrary continuations.
00:11:14 <ais523> although this is because return values in INTERCAL are just global variables, so you can write to them, and then do a RESUME #10 or whatever
00:11:19 <shachaf> There's effectively a static stack of blocks at any point.
00:11:28 <ais523> stack-allocated continuations
00:11:33 <shachaf> And you can break from any of them, up to the outermost block (which is going to be a function call frame).
00:12:15 <shachaf> If you have "cleanup" like RAII destructors or defer, early exit can know to run them, as well.
00:12:16 <ais523> why don't you break out of that into the black lagoon?
00:12:37 <shachaf> I think I'm missing a reference.
00:12:56 <ais523> http://catb.org/esr/intercal/ick.htm#E123
00:13:05 <ais523> oh, that's the wrong direction, stack overflow not underflow
00:13:16 <ais523> this one's underflow: http://catb.org/esr/intercal/ick.htm#E632
00:13:18 <shachaf> Ah.
00:14:38 <shachaf> Anyway, when you have a loop, { @outer; loop; @inner; ... }, "break" means "end @outer" and "continue" means "end @inner"
00:14:58 <ais523> I guess "continuations on the stack" is a good model for this
00:15:12 <ais523> come to think of it, that's how function calls work too
00:15:34 <ais523> I was about to say "is it possible to construct a model in which loops and function calls are the same thing" and then realised it was just tail-recursion
00:15:35 <shachaf> Python's "for x in xs: A else: B" means: { @outer { x := for(xs); @inner; A; } B; }
00:15:57 <ais523> wouldn't that run B regardless?
00:16:06 <shachaf> Not if you "end @outer"
00:16:11 <ais523> ah no, if you break out of outer
00:16:31 <ais523> "else" is a bizarre keyword for that, though; "if you don't break" is not what I think of as "else"
00:16:38 <shachaf> Right, it seems backwards to me.
00:17:24 <ais523> oddly, it would fit the meaning of the English word "finally" quite well, but the "finally" control flow operation is /also/ different from that!
00:17:49 <ais523> perhaps "then" would work best, but it likely isn't a keyword in Python
00:19:13 <ais523> ooh, completely unrelated question related to an esointerpreter I'm writing: is it possible/sane to use a single SQL-relational-database index for both "return all X with a specific Y" and "return all X with a specific Y and specific Z", where Z is a boolean?
00:19:14 <shachaf> I think the implication is that you break in the successful case.
00:19:37 <shachaf> E.g. "for x in xs: if x == y: break else: ..."
00:19:45 <shachaf> (Where the else is associated with the for, not the if.)
00:19:53 <ais523> my understanding of how SQL indexes work is that an index (X, Z, Y) would work only if, in the first case, we used a range query on the boolean specifying that it must be between false and true
00:19:57 <ais523> inclusive
00:20:10 <ais523> but that seems ridiculous, so I suspect there's a flaw in my understanding somehow
00:21:02 <ais523> err, I mean (Y, Z, X), and now I think about it, an SQL engine will get that right for both queries
00:21:15 <ais523> because I got the question wrong
00:21:34 <ais523> never mind, I'm too tired to phrase the question correctly right now
00:24:44 -!- Waggie21 has joined.
00:24:46 -!- Waggie21 has quit (K-Lined).
00:26:45 -!- Esqapezord has joined.
00:29:54 -!- Shragazord has quit (Ping timeout: 264 seconds).
00:31:11 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
00:36:36 <ais523> anyway, I found the answer for SQLite in the SQLite docs, there's something called "skip-scan" that can do this sort of conversion automatically, but it only does so if it knows that the column contains lots of booleans
00:36:41 <ais523> err, lots of duplicates
00:37:09 <ais523> which it really should for a boolean coulmn, but SQLite's handling of types is utterly insane, so it can't do that automatically without an ANALYZE run to prove it
00:39:28 <ais523> so I guess my conclusion for the question I meant to ask, even though I haven't figured out what it is yet, is "doing the optimization manually makes sense because it informs the engine that our booleans will only be false or true"
00:48:24 -!- LKoen has joined.
00:53:13 -!- LKoen has quit (Ping timeout: 260 seconds).
00:54:52 -!- ais523 has quit (Remote host closed the connection).
00:56:04 -!- ais523 has joined.
01:00:15 -!- bradcomp has joined.
01:01:39 <Sgeo> Currently in a C64 compatible MMO
01:02:01 <Sgeo> (Well, the only existent client is for C64, so I guess more than just compatible)
01:02:50 <ais523> can a game count as "massively multiplayer" if it only runs on a platform that a non-massive number of people own?
01:04:35 -!- sftp has quit (Ping timeout: 240 seconds).
01:10:06 -!- ais523 has quit (Remote host closed the connection).
01:11:21 -!- ais523 has joined.
01:11:44 <shachaf> if (p)
01:11:50 <shachaf> { stmt;
01:11:52 <shachaf> stmt;
01:11:52 <shachaf> }
01:11:59 <shachaf> this is a p. good indentation style.
01:17:09 -!- bradcomp has quit (Ping timeout: 265 seconds).
01:21:47 <Sgeo> It does run in C64 emulators. I wonder if that makes my statement "Well, the only existent client is for C64" technically inaccurate
01:22:02 <Sgeo> If you consider emulator+C64 client to itself be a client
01:22:50 <ais523> shachaf: I'd expect that style to have the } at the end of the previous line
01:23:14 <ais523> hmm, now I'm reminded of an indentation style I used for Lua once
01:23:27 <ais523> it used four-space indentation, but multiple consecutive "end"s were placed on the same line
01:23:40 <ais523> this helped readability when you have 8-10 nested for loops
01:27:21 <shachaf> Well, the inspiration for this is the style
01:27:23 <shachaf> { if(p);
01:27:26 <shachaf> ...
01:27:26 <shachaf> }
01:27:51 <shachaf> Which is meant to be similar to the same thing but with "if(p) {" on the first line.
01:28:10 <shachaf> But I kind of like having the first statement of a block on the same line as the {
01:29:02 <shachaf> This depends on two-space indentation to be very natural, though.
01:29:12 <ais523> I guess you'd at least want to stack } because that style would naturally stack nested {
01:29:18 <ais523> { { stmt;
01:29:20 <ais523> stmt;
01:29:21 <ais523> } }
01:29:33 <ais523> not that there's much purpose to nesting bare blocks in most languages, but…
01:30:12 <ais523> (it can be occasionally useful in Perl; do{{}} is not equivalent to do{} because the latter doesn't generate break/continue points and the former does)
01:30:29 <shachaf> So it's generally true in languages with blocks that { a; b; c; } means the same thing as { a; { b; { c; } } }, right?
01:30:43 <shachaf> Not in Perl apparently!
01:30:51 <ais523> in most but not quite all, I think the latter is different in Perl 6 even without break/continue
01:34:07 -!- pskosinski1 has joined.
01:37:50 -!- ais523 has quit (Remote host closed the connection).
01:37:58 -!- callforjudgement has joined.
01:38:05 <callforjudgement> shachaf: in Perl 6, { my $c = $^a; $^b + $c } takes two arguments, whereas { my $c = $^a; {$^b + $c} } takes one argument and appears to cause a type error if you call it
01:38:07 <callforjudgement> I'd /expected/ it to be a curried version of the first block
01:38:12 -!- callforjudgement has changed nick to ais523.
01:38:20 <ais523> that said, I'm cheating by using implicit argument syntax here
01:38:35 -!- pskosinski1 has quit (Remote host closed the connection).
01:40:02 <shachaf> Does Perl 6 have a notion of block arguments?
01:40:09 <shachaf> Or block values?
01:41:40 <ais523> yes
01:41:49 <ais523> `! perl6 "test".say
01:41:50 <HackEso> ​/hackenv/bin/!: 4: exec: ibin/perl6: not found
01:41:55 <ais523> bleh, was hoping I could use HackEso for this
01:41:59 <ais523> `` perl6 --version
01:42:00 <HackEso> ​/hackenv/bin/`: line 5: perl6: command not found
01:42:52 <ais523> although I think blocks have to be run explicitly to get at their values; if you try to use them in expression context they turn lazy
01:43:17 <ais523> $ perl6 -e '-> $a {$a+1}.(3).say'
01:43:19 <ais523> 4
01:43:25 <ais523> actually, the more I use Perl 6 the less I like it
01:45:39 -!- bradcomp has joined.
01:50:09 -!- bradcomp has quit (Ping timeout: 252 seconds).
02:22:04 -!- shikhin_ has joined.
02:22:51 -!- shikhin_ has quit (Changing host).
02:22:51 -!- shikhin_ has joined.
02:29:38 -!- Lord_of_Life has quit (*.net *.split).
02:29:40 -!- fungot has quit (*.net *.split).
02:29:41 -!- shikhin has quit (*.net *.split).
02:29:42 -!- paul2520 has quit (*.net *.split).
02:29:43 -!- Deewiant has quit (*.net *.split).
02:32:55 -!- fungot has joined.
02:33:57 -!- fractal has quit (Ping timeout: 240 seconds).
02:36:22 -!- Deewiant has joined.
02:36:41 -!- paul2520 has joined.
02:36:41 -!- paul2520 has quit (Changing host).
02:36:41 -!- paul2520 has joined.
02:40:54 -!- Lord_of_Life has joined.
02:45:48 -!- shikhin_ has changed nick to shikhin.
02:49:02 -!- LKoen has joined.
02:53:59 -!- LKoen has quit (Ping timeout: 268 seconds).
02:59:30 -!- fractal has joined.
03:04:22 -!- bradcomp has joined.
03:09:08 -!- bradcomp has quit (Ping timeout: 260 seconds).
03:13:54 -!- ais523 has quit (Quit: quit).
03:16:28 -!- johnlage17 has joined.
03:25:27 -!- johnlage17 has quit (Ping timeout: 240 seconds).
04:02:57 -!- imode has quit (Ping timeout: 240 seconds).
04:41:27 -!- bradcomp has joined.
04:49:57 -!- LKoen has joined.
04:54:27 -!- LKoen has quit (Ping timeout: 240 seconds).
05:39:22 -!- j-bot has quit (Remote host closed the connection).
05:39:38 -!- j-bot has joined.
05:47:49 -!- imode has joined.
06:20:13 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:36:57 -!- Esqapezord has quit (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.).
06:50:35 -!- LKoen has joined.
06:55:44 -!- LKoen has quit (Ping timeout: 256 seconds).
07:27:57 -!- AnotherTest has joined.
07:30:15 -!- bradcomp has quit (Ping timeout: 268 seconds).
07:50:59 -!- AnotherTest has quit (Ping timeout: 276 seconds).
08:12:14 -!- imode has quit (Ping timeout: 256 seconds).
08:18:36 -!- AnotherTest has joined.
08:27:00 -!- simon_-_17 has joined.
08:34:54 -!- simon_-_17 has quit (Ping timeout: 256 seconds).
08:44:17 -!- wob_jonas has joined.
08:44:23 -!- wob_jonas has quit (Read error: No route to host).
08:44:54 -!- wob_jonas has joined.
08:47:22 <wob_jonas> shachaf: about that {if(x);stmt} thing, I know it's not very relevant, but I had pointed you to https://esolangs.org/wiki/Geo right? it has some similar syntax for conditionals and loops.
08:47:30 <wob_jonas> but no macros or anything
08:47:35 <wob_jonas> ideally it should have ordinary functions
08:50:54 <shachaf> It looks pretty different?
08:50:58 <shachaf> I don't remember seeing it before.
08:51:08 <wob_jonas> and perhaps it should be extended to support labelled loops and labelled breaks
08:51:23 -!- LKoen has joined.
08:53:34 <wob_jonas> shachaf: it has a syntax that allows you to have statements that conditionally break out of the innermost block, returning a value from that block, since every block can be used as an expression and can have value the value. the condition and return value themselves can be blocks if you want.
08:53:44 <wob_jonas> and blocks can be normal or infinitely looping.
08:53:54 <shachaf> You should invent + implement my language for me.
08:54:08 <shachaf> Since I thought of it I constantly see places where I wish I had these constructs.
08:54:11 <wob_jonas> so if(x); would translate to x!; in geo
08:54:41 <shachaf> Hmm, your blocks are explicit, it looks like?
08:54:56 <shachaf> So (a; b; c) is different from (a; (b; c))
08:54:58 <wob_jonas> {if(x);stmt1;stmt2;} is written like (x!;stmt1;stmt2;) in geo
08:55:19 <shachaf> How is {stmt1; if(x); stmt2;} written?
08:55:25 <wob_jonas> {while(x);stmt1;stmt2;} is written like (x!;stmt1;stmt2;*)
08:55:41 <wob_jonas> {stmt1;if(x);stmt2;} is written as (stmt1;x!;stmt2;)
08:55:47 <wob_jonas> the ! is just a negated ? by the way
08:56:11 <wob_jonas> so {if(!x);stmt1;} translates to (x?;stmt1;)
08:56:22 <wob_jonas> provided that ! negates a boolean in your language
08:56:26 -!- LKoen has quit (Ping timeout: 256 seconds).
08:56:53 <wob_jonas> and C's do{stmt1;stmt2;}while(x) translates to (stmt1;stmt1;x!;*) in geo
08:58:56 <wob_jonas> there would be a straightforward translation from geo to rust control structures: (stmt1;stmt2;expr) translates to {stmt1;stmt2;expr} , (stmt1;stmt2;*) trnaslates to loop{stmt1;stmt2;} , cond?expr translates to if !cond {break expr} , and cond!expr translates to if cond {break expr}
08:59:26 <shachaf> wob_jonas: Wait, is it?
08:59:30 <wob_jonas> only geo is dynamically typed and rust is strongly typed, so the builtin array manipulation and arithmetic in geo might be a bit tricky to translate
08:59:39 <wob_jonas> um no, sorry
08:59:51 <shachaf> To be clear, in my language, {stmt1;if(x);stmt2;} means { stmt1; if(x) { stmt2; } } in C
09:00:02 <wob_jonas> (stmt1;stmt2;expr) would have to be translated to loop{stmt1;stmt2;break expr} in rust
09:00:25 <wob_jonas> I was wrong above about its rust translation
09:00:27 <fizzie> shachaf: If you allow any control flow (goto, or setjmp/longjmp) to get back to an earlier statement, { a; b; c; } isn't strictly equivalent to { a; { b; { c; } } } in C either, because the lifetimes of objects with automatic storage duration (and non-VLA type) start from the entry into the associated block, not from the declaration.
09:00:54 <wob_jonas> shachaf: yes. C's { stmt1; if(x) { stmt2; } } translates to geo's (stmt1; x!; stmt2;)
09:01:12 <wob_jonas> I also didn't mention that you can declare variables that are local to a block, just like in C
09:01:18 <wob_jonas> just like in C99 in fact
09:03:18 <wob_jonas> and also C's {if(x) stmt1; else { stmt2; stmt3; }} translates to (x?stmt1;stmt2;stmt3;); #note semicolon
09:04:00 <wob_jonas> and C's { if(x) { stmt1; stmt2; } else { stmt3; stmt4; } } translates to geo's (x?(stmt1;stmt2;);stmt3;stmt4;)
09:04:12 <shachaf> fizzie: Is that also true in C++?
09:04:14 <wob_jonas> and then stmt1 and stmt3 could be a local variable declaration and the translation still works
09:05:23 <shachaf> wob_jonas: OK, inferred too much from "(stmt0; ...; stmtN; cond!; *)"
09:05:29 <shachaf> I
09:05:38 <wob_jonas> shachaf: it would be possible to extend geo with rust-like label blocks and labeled breaks, and with functions that have an argument list and return value, but I have never tried to implement that, and frankly back then I didn't even think of labeled blocks much.
09:06:29 <wob_jonas> shachaf: the https://esolangs.org/wiki/Geo page gives a rather concise but probably precise description. it doesn't give all details of the arithmetic operators' behavior, but that part is easy to modify in the source code anyway.
09:10:26 <wob_jonas> it also doesn't tell that [] returns a new array allocated on the heap, whose size you can later expand on the right with indexing, and [expr0,expr1,expr2] returns a newly allocated array pre-filled with three elements
09:10:38 <wob_jonas> I should mention something about this
09:11:40 <wob_jonas> I'll add a bit
09:12:29 <shachaf> wob_jonas: Hmm, conditional exit was the main primitive I was thinking of defining things in terms of.
09:12:59 <shachaf> I'm not sure what primitives are best.
09:13:15 <shachaf> Conditional exit and repeat?
09:14:05 <wob_jonas> shachaf: geo is turing-complete, but not very convenient, because it doesn't have user-defined functions.
09:14:41 <shachaf> I didn't figure out a great way to handle if-else, either.
09:15:48 <shachaf> I mean if (p) { ... } else { ... }
09:16:19 <shachaf> Though I figured out some variants of switch-case etc. that were pretty neat.
09:17:14 <shachaf> So for C's (p ? x : y), you use something like { endif(p, x); end y; }
09:17:22 <shachaf> Of course it's nicer with your syntax.
09:17:53 <fizzie> shachaf: I don't know, but probably not. Non-trivial initialization and all that. In C11 it's 6.2.4p6.
09:18:52 <shachaf> fizzie: Should it work that way or is it just that it does work that way?
09:28:49 <wob_jonas> I'm extending the geo page on the wiki now, but the control structures are already explained.
09:37:51 <shachaf> wob_jonas: Do you have a good answer for if-else?
09:38:06 <shachaf> The nice thing about C if-else is that you only have one level of {}
09:42:21 <wob_jonas> shachaf: what's wrong with what I said above?
09:42:36 <wob_jonas> C's {if(x) stmt1; else { stmt2; stmt3; }} translates to geo (x?stmt1;stmt2;stmt3;); #note semicolon
09:42:43 <wob_jonas> and C's { if(x) { stmt1; stmt2; } else { stmt3; stmt4; } } translates to geo's (x?(stmt1;stmt2;);stmt3;stmt4;)
09:42:54 <wob_jonas> and then in the latter, stmt1 and stmt3 could be a local variable declaration and the translation still works
09:44:04 <shachaf> The trouble is double nesting.
09:44:16 <shachaf> Worse, the if and else aren't even at the same level of nesting.
09:44:24 <wob_jonas> what double nesting? can you give an example?
09:44:27 <shachaf> I mean stmt1 and stmt3
09:44:37 <shachaf> There are two levels of parentheses there.
09:44:49 <wob_jonas> if you want symmetry, you can write (x?(stmt1;stmt2;);(stmt3;stmt4;))
09:44:52 <wob_jonas> that's still fine
09:45:01 <shachaf> Yes, but you still have two layers of parentheses.
09:45:22 <shachaf> In C, you can write "if (p) { ... }" and it's fine.
09:45:31 <wob_jonas> yes. but only if you have more than one statement for the then-branch. you need braces in C for that case.
09:45:36 <shachaf> And later if you want to do something in the other case, you can extend it to "if (p) { ... } else { ... }"
09:45:49 <wob_jonas> you can write elseif cascades easily:
09:45:56 <shachaf> Yes, I know.
09:47:13 <shachaf> So I have something like { cond; { when(p); ... }; { when(q); ... } }
09:47:27 <shachaf> Where "when(p)" implicitly breaks out of the surrounding "cond".
09:48:09 <shachaf> One nice thing is that you can write { cond; { when(p); ... }; { c := for(cs); when(x == c); ... } }
09:49:49 -!- ep100 has joined.
09:57:41 -!- arseniiv has joined.
10:08:36 -!- SopaXorzTaker has joined.
10:13:49 -!- sins- has joined.
10:17:01 -!- sins- has quit (Remote host closed the connection).
10:20:04 -!- Lord_of_Life has quit (Changing host).
10:20:04 -!- Lord_of_Life has joined.
10:20:04 -!- Lord_of_Life has quit (Changing host).
10:20:04 -!- Lord_of_Life has joined.
10:33:00 -!- Shragazord has joined.
10:40:48 <wob_jonas> I in fact now have no clue how arrays and localization work in geo, and I've read some of the code
10:44:18 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
10:45:46 -!- oerjan has joined.
10:46:06 -!- Debiller777 has joined.
10:52:18 -!- LKoen has joined.
10:56:57 -!- LKoen has quit (Ping timeout: 240 seconds).
10:59:53 <fizzie> shachaf: If you're asking for a personal opinion, it's a little odd that there's a difference between VLAs and non-VLAs, and I can't think of any particularly reasonable use cases for using an automatic storage duration object before the declaration, so I wouldn't mind if the lifetime started from the declaration for all types.
11:01:37 <oerjan> `wc quotes
11:01:38 <HackEso> ​ 1327 26733 160077 quotes
11:02:01 <oerjan> . o O ( just 10 more till int-e gets annoyed )
11:02:34 <oerjan> if i remember the right person
11:02:42 <fizzie> Surely he'll be delighted after 10, and annoyed after 11?
11:03:32 <oerjan> hm i interpreted him that 10 was bad too
11:03:44 <fizzie> Well, maybe.
11:04:18 <fizzie> There's still time for someone to update `addquote to drop the least important quote when it would exceed whatever the comfortable number was. (Determining the least important quote left as an exercise.)
11:04:46 <Taneb> `quote
11:04:47 <HackEso> 961) <Sgeo> I think pastaquote should just quote me
11:05:07 <oerjan> we do have the 5 quote tradition, it just doesn't get used much, as there aren't that many bad quotes left
11:05:17 <arseniiv> HaskEso had given me the same quote two times in a row
11:05:39 <oerjan> arseniiv: did you use a parameter with `quote ?
11:05:50 <oerjan> then it's actually deterministic and lists all hits
11:06:32 <oerjan> i think there's `randquote for when you want to get around that
11:06:36 <oerjan> `randquote beer
11:06:37 <HackEso> 356) <olsner> as always in sweden everything goes to a fixed pattern: thursday is queueing at systembolaget to get beer and schnaps, friday is pickled herring, schnaps and dancing the frog dance around the phallos, saturday is dedicated to being hung over
11:06:46 <arseniiv> oerjan: of course no
11:06:51 <oerjan> `randquote beer
11:06:52 <HackEso> 1253) <hppavilion[1]> izabera: It's sort of like the principal, as far as I know. <hppavilion[1]> Except It only prints "<N> BOTTLES OF BEER ON THE WALL!" Counting down from 99 to 0. With no line breaks.
11:07:42 <oerjan> fizzie: personally i want to get to 1400 to ease my triskaidekaphobia
11:09:42 <FireFly> `quote sweden
11:09:43 <HackEso> 356) <olsner> as always in sweden everything goes to a fixed pattern: thursday is queueing at systembolaget to get beer and schnaps, friday is pickled herring, schnaps and dancing the frog dance around the phallos, saturday is dedicated to being hung over \ 650) <Phantom_Hoover> (I vehemently oppose the SNP because they want closer ties with Sweden.) \ 662) <fizzie> oerjan: Hey, what's your country code for telephonistic dialling from the outside world? <
11:10:06 <FireFly> `quote 662
11:10:09 <HackEso> 662) <fizzie> oerjan: Hey, what's your country code for telephonistic dialling from the outside world? <oerjan> fizzie: +47 <fizzie> oerjan: Ooh, you're, like, right next to Sweden there. <fizzie> I... guess you are geographically, too.
11:10:19 <olsner> `randquote sweden
11:10:20 <HackEso> 662) <fizzie> oerjan: Hey, what's your country code for telephonistic dialling from the outside world? <oerjan> fizzie: +47 <fizzie> oerjan: Ooh, you're, like, right next to Sweden there. <fizzie> I... guess you are geographically, too.
11:10:31 <FireFly> `randquote olsner
11:10:31 <HackEso> 894) <olsner> Gregor: are you in the brony documentary?
11:10:57 <olsner> `randquote FireFly
11:10:58 <HackEso> 831) <olsner> FireFly: oh, did you see ion's police reindeer? that was ... at least as on-topic as this discussion
11:11:46 -!- Cale_ has joined.
11:12:48 <oerjan> hm wob_jonas complained that HackEso wasn't answering his private messages, then later said it does, and indeed it now does, but still isn't registered?
11:14:44 <oerjan> and i'm still +R. must be some automatic excepting after i message it, or something.
11:16:15 <oerjan> perhaps wob_jonas changed client from one which doesn't have that feature...
11:28:27 <oerjan> oh maybe fizzie took off the +R for HackEso
11:29:29 <fizzie> I haven't done anything special.
11:30:02 <fizzie> But it's working for me, which is odd.
11:30:18 <oerjan> oh or maybe wob_jonas wasn't registered himself
11:30:53 <oerjan> fizzie: perhaps freenode have done something to reduce the effect of +R
11:31:25 <fizzie> Yeah, maybe they implicitly allow replies now or something.
11:32:09 <fizzie> HackEso itself probably still has +R on, so it wouldn't get the initial message from a non-registered sender.
11:32:24 <oerjan> yeah
11:35:40 <fizzie> Yep, that's it: https://github.com/freenode/ircd-seven/pull/135
11:36:12 <oerjan> ah indeed, i just found that HackEso is on my /accept list
11:36:57 <fizzie> Mine as well. Fancy.
11:43:07 <oerjan> @tell wob_jonas <wob_jonas> oerjan: hackeso doesn't reply to my private messages. is this deliberate? <-- Freenode has default set all users +R because of the spammers, but also https://github.com/freenode/ircd-seven/pull/135 so it's transparent when a registered user messages a non-registered one (e.g. HackEso) first.
11:43:07 <lambdabot> Consider it noted.
11:44:32 <oerjan> @tell wob_jonas HackEso itself hasn't changed.
11:44:32 <lambdabot> Consider it noted.
11:46:45 <oerjan> hm the underlying github issue isn't public
11:46:48 <oerjan> oh well
11:47:49 -!- xkapastel has joined.
11:48:33 <oerjan> . o O ( wob_jonas _really_ doesn
11:48:47 <oerjan> 't want to learn HackEso's convenience commands... )
11:49:04 <oerjan> also, apostrophes are evilly placed on this keyboard.
11:51:02 <oerjan> `doat bin/quotes
11:51:04 <HackEso> 0:2012-02-16 Initïal import. \ 10027:2016-12-25 <oerjän> ` cp bin/quote{,s} # add rng improv
11:51:47 <oerjan> @tell wob_jonas also, please learn to use the `doag etc. commands for HackEso log search, they are designed not to ping users.
11:51:47 <lambdabot> Consider it noted.
11:52:19 <oerjan> @tell wob_jonas well, the committers, anyway.
11:52:19 <lambdabot> Consider it noted.
11:52:55 <oerjan> `? `doag
11:52:56 <HackEso> ​`doag? ¯\(°​_o)/¯
11:53:16 <oerjan> that's not very helpful i guess.
11:53:25 <oerjan> `? `hoag
11:53:26 <HackEso> ​`[hd]o[aw][gt] [<filename>] is a set of commands for querying HackEgo hg logs. `hoag is the basic version. d adds revision numbers and dates, w looks only in wisdom, and t lists oldest first.
11:54:04 <oerjan> `learn `doag: See `hoag
11:54:09 <HackEso> Learned '`doag': `doag: See `hoag
11:54:40 <oerjan> `learn `doat: See `hoag
11:54:42 <HackEso> Learned '`doat': `doat: See `hoag
11:54:59 <oerjan> `learn `dowt: See `hoag
11:55:01 <HackEso> Learned '`dowt': `dowt: See `hoag
11:55:20 <oerjan> `learn `dowg: See `hoag
11:55:22 <HackEso> Learned '`dowg': `dowg: See `hoag
11:55:55 <oerjan> does anyone use the h versions any longer
12:00:08 <oerjan> `` for i in hoat howg howt; do learn "$i"': See `hoag'; done
12:00:14 <HackEso> Learned 'hoat': hoat: See `hoag \ Learned 'howg': howg: See `hoag \ Learned 'howt': howt: See `hoag
12:00:21 <oerjan> oops
12:00:24 <oerjan> `revert
12:00:25 <HackEso> Done.
12:00:39 <oerjan> `` for i in hoat howg howt; do learn \`"$i"': See `hoag'; done
12:00:42 <HackEso> Learned '`hoat': `hoat: See `hoag \ Learned '`howg': `howg: See `hoag \ Learned '`howt': `howt: See `hoag
12:01:29 <oerjan> `? `hlnp
12:01:30 <HackEso> ​`hlnp? ¯\(°​_o)/¯
12:01:39 <oerjan> `cat bin/hlnp
12:01:40 <HackEso> scowrevs="$(/usr/bin/paste -sd'|' /hackenv/share/scowrevs)"; hg log -r "tip:0 & ! ($scowrevs)" "$@" | sed 's/\(\(^\| \)[<Itb][^ ]*\)\([^ ][^ ]\)/\1̈\3/'
12:05:11 <oerjan> `doag bin/quotes
12:05:12 <HackEso> 10027:2016-12-25 <oerjän> ` cp bin/quote{,s} # add rng improv \ 0:2012-02-16 Initïal import.
12:05:39 <oerjan> wait what
12:05:44 <oerjan> oh
12:05:51 <oerjan> `doag quotes
12:05:52 <HackEso> 11610:2018-08-22 <arseniïv> addquote <wob_jonas> that real-world complexity doesn\'t fit my simple model of English <wob_jonas> must be that darned Higgs-boson or some other symmetry-breaking mechanism \ 11589:2018-08-08 <oerjän> addquote <wob_jonas> and at least don\'t put Hofstadter next to the time cube guy without at least a semicolon, that\'s insulting Hofstadter \ 11585:2018-07-21 <oerjän> addquote <Aearnus> i\'m sending this from within a com
12:06:05 <oerjan> hm indeed only the committers
12:27:01 -!- Debiller777 has quit (Quit: Page closed).
12:28:12 -!- Cale_ has quit (Remote host closed the connection).
12:44:07 <int-e> `?
12:44:08 <HackEso> ​? ¯\(°​_o)/¯
12:44:35 <int-e> `wisdom
12:44:36 <HackEso> disflagrate//disflagrate v.t.perf.: a traditional technique from Poland (earliest attestation c. 1042) used to separate szoups. Nowadays, commercial production is entirely mechanized.
12:44:56 <int-e> `wisdom
12:44:57 <HackEso> alg. ii//Algae II, the successor class to Algae I. Discusses hydroponics and such.
12:45:08 <int-e> mmm
12:52:55 -!- LKoen has joined.
12:53:25 <arseniiv> `? alg. i
12:53:26 <HackEso> alg. i? ¯\(°​_o)/¯
12:57:35 -!- LKoen has quit (Ping timeout: 240 seconds).
12:57:43 <esowiki> [[Special:Log/newusers]] create * Andrew3335 * New user account
13:00:48 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=57421&oldid=57397 * Andrew3335 * (+230)
13:02:34 -!- oerjan has quit (Quit: Later).
13:03:20 -!- andrew3334 has joined.
13:04:42 -!- andrew3334 has quit (Client Quit).
13:06:19 <esowiki> [[User:Andrew3335]] N https://esolangs.org/w/index.php?oldid=57422 * Andrew3335 * (+2) Created page with "I."
13:24:32 -!- sleepnap has joined.
13:26:19 <arseniiv> so do you think we (and I mean myself ;) need to describe that functional-combinatorian tarpit?
13:31:59 <arseniiv> I think it should be named Ⅎ
13:37:06 <esowiki> [[User:Arseniiv]] M https://esolangs.org/w/index.php?diff=57423&oldid=54934 * Arseniiv * (+127) !
13:56:18 -!- wob_jonas has joined.
13:57:14 <wob_jonas> oerjan: I haven't registered the wob_jonas nick, but I'm logged in to my b_jonas account (as you can see if you whois or whox me) to be able to speak here
13:58:08 <wob_jonas> oerjan: sorry, you're right. I tried to use private messages to not ping users
13:59:36 <wob_jonas> but you're right, I shouldn't have pinged them
14:11:31 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
14:45:37 -!- Shragazord has quit (Ping timeout: 268 seconds).
14:53:18 -!- impomatic has quit (Ping timeout: 260 seconds).
14:53:41 -!- LKoen has joined.
14:58:42 -!- LKoen has quit (Ping timeout: 264 seconds).
15:17:52 -!- SopaXorzTaker has quit (Remote host closed the connection).
15:23:52 -!- bradcomp has joined.
15:30:06 -!- S_Gautam has joined.
15:37:05 -!- clog_ has quit (Quit: ^C).
15:37:17 -!- clog has joined.
15:47:09 -!- AnotherTest has quit (Ping timeout: 265 seconds).
15:50:44 <esowiki> [[]] N https://esolangs.org/w/index.php?oldid=57424 * Arseniiv * (+2477) unctional!
15:51:40 <arseniiv> _now_ I’m finally at rest
15:52:18 <arseniiv> oh, my IRC client/font doesn’t display an article name
15:53:31 <arseniiv> oh no it’s actually unlogged!
16:00:22 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=57425&oldid=57419 * Arseniiv * (+10) added
16:03:51 <arseniiv> so it’s maybe a bug in esowiki bot, as you should be able to see Ⅎ when it’s written in this post, and in that one too
16:21:48 -!- sftp has joined.
16:23:34 <esowiki> [[Special:Log/newusers]] create * Cheesepizza2 * New user account
16:26:49 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=57426&oldid=57421 * Cheesepizza2 * (+328) /* Introductions */
16:27:23 <esowiki> [[GHOST]] https://esolangs.org/w/index.php?diff=57427&oldid=45105 * Cheesepizza2 * (-85) /* WARNING */
16:33:57 <esowiki> [[F-PULSE]] https://esolangs.org/w/index.php?diff=57428&oldid=49971 * Cheesepizza2 * (+27) /* Operands */
16:37:50 -!- LKoen has joined.
16:53:39 <esowiki> [[GHOST]] https://esolangs.org/w/index.php?diff=57429&oldid=57427 * Cheesepizza2 * (+9)
16:56:37 -!- LKoen_ has joined.
16:56:46 -!- LKoen has quit (Read error: Connection reset by peer).
16:57:14 -!- imode has joined.
17:06:07 -!- LKoen_ has quit (Remote host closed the connection).
17:20:48 -!- AnotherTest has joined.
17:22:28 -!- Phantom_Hoover has joined.
17:22:29 -!- Phantom_Hoover has quit (Changing host).
17:22:29 -!- Phantom_Hoover has joined.
17:24:07 <arseniiv> is there a page on wiki which lists useful templates?
17:32:18 -!- MDude has quit (Ping timeout: 264 seconds).
18:01:56 -!- LKoen has joined.
18:10:30 -!- SopaXorzTaker has joined.
18:11:37 -!- lynn_ has quit (Read error: Connection reset by peer).
18:12:06 -!- lynn_ has joined.
18:18:38 -!- Cale has quit (Ping timeout: 260 seconds).
18:29:43 -!- atslash has quit (Quit: This computer has gone to sleep).
18:30:40 -!- Cale has joined.
18:38:15 -!- sprocklem has quit (Quit: brb).
18:38:33 -!- sprocklem has joined.
19:27:13 -!- SopaXorzTaker has quit (Remote host closed the connection).
19:58:53 -!- Fogity has quit (Ping timeout: 268 seconds).
20:02:13 -!- Fogity has joined.
20:36:14 -!- LKoen has quit (Remote host closed the connection).
20:39:27 -!- imode has quit (Ping timeout: 252 seconds).
20:47:18 -!- ep100 has quit (Ping timeout: 265 seconds).
20:48:57 -!- ep100 has joined.
20:59:20 <arseniiv> someone interested in a numeric computation puzzle about optimizing generation of special random vectors?
21:31:11 -!- sprocklem has quit (Ping timeout: 252 seconds).
21:32:00 -!- ep100 has quit (Ping timeout: 268 seconds).
21:37:11 -!- LKoen has joined.
21:44:09 -!- sprocklem has joined.
22:00:03 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”).
22:18:29 <esowiki> [[Special:Log/newusers]] create * Sharpjaws * New user account
22:18:38 -!- Remavas has joined.
22:31:49 -!- AnotherTest has quit (Ping timeout: 268 seconds).
22:32:47 -!- atslash has joined.
22:45:21 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=57430&oldid=57426 * Sharpjaws * (+202)
22:47:59 <shachaf> Sgeo: Have you considered that ALGOL 68 should be the new Sgeolang?
22:48:07 <shachaf> Ada might not be the ticket.
22:48:21 <shachaf> `? sgeolang
22:48:23 <HackEso> Sgeolang used to change frequently, but eventually it rusted in place.
22:52:00 -!- imode has joined.
23:00:04 -!- sleepnap has left.
23:04:35 -!- mt13 has joined.
23:05:24 -!- mt13 has quit (Read error: Connection reset by peer).
23:08:04 -!- Remavas has quit (Quit: Leaving).
23:14:02 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:19:20 <arseniiv> Xperia wallpapers took their toll on me: https://s22.postimg.cc/8g3zzxz8h/anim-24082018_T041317.gif
23:34:23 -!- arseniiv has quit (Ping timeout: 252 seconds).
23:41:43 -!- bradcomp has quit (Ping timeout: 260 seconds).
23:53:10 -!- boily has joined.
←2018-08-22 2018-08-23 2018-08-24→ ↑2018 ↑all