00:02:50 -!- Phantom_Hoover has quit (Remote host closed the connection). 
00:03:09 -!- tromp has joined. 
00:28:31 -!- Essadon has quit (Quit: Qutting). 
00:34:54 -!- Lord_of_Life_ has joined. 
00:37:57 -!- Lord_of_Life has quit (Ping timeout: 245 seconds). 
00:37:57 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 
00:42:38 -!- tromp has quit (Remote host closed the connection). 
01:12:29 <oerjan> argh i hate web pages that steal clicks such that you accidentally follow a link when trying to do something else 
01:14:03 <kmc> a lot of porn sites do that 
01:14:53 <oerjan> this time it was SE's chat archive, of all things 
01:15:00 <zzo38> I generally disable scripts and alter CSS if necessary, so mostly is avoiding that; maybe there are other ways to make up the setting for events to control that 
01:15:42 <oerjan> it is possible i actually accidentally clicked twice. 
01:16:11 <zzo38> (One feature I would like is the ability to replace individual scripts on a webpage with my own versions.) 
01:16:14 <oerjan> (i was selecting a link with the right button to copy it, and ended up following it.) 
01:16:41 <kmc> I was reading a site that used hot pink text on white background :( 
01:16:47 <zzo38> (Including such things as replacing jQuery with my own version on any webpages that use that) 
01:16:52 <oerjan> and there are other times i _do_ want the script there, when following quoting links 
01:16:53 <kmc> the content was actually quite good and important 
01:17:02 <kmc> I fixed it with element inspector 
01:17:10 <kmc> but I wonder the best way to link it to other people 
01:17:27 <oerjan> kmc: i use that a lot to get rid of annoyingly large horizontal bars 
01:17:34 <kmc> I don't know of a way to construct a link with a custom style sheet 
01:18:03 <kmc> other than a javascript: url that you have to visit after 
01:18:13 <zzo38> I don't know of any way either, but I do often customize CSS of other webpages (although this is usually not needed if the webpage has no CSS at all) 
01:18:16 -!- tromp has joined. 
01:18:19 <kmc> perhaps I could host a page which shows it in an iframe 
01:18:42 <kmc> or just mirror the content and hope to not get in copyright trouble 
01:18:56 <kmc> or copy the entire text into my Facebook post when I share it 
01:19:08 <kmc> another solution to bad color choices is print to pdf 
01:19:44 <zzo38> (I prefer to not set any colours in making webpages, instead using the user settings; unless it needs to have some colours to indicate different kind of stuff) 
01:22:52 -!- tromp has quit (Ping timeout: 250 seconds). 
01:31:00 <oerjan> hm ais523 has on some occasions on ppcg pointed out that (hindley-milner) typed SKI calculus isn't TC, and you need Y too. but i also seem to recall something about Y _not_ being enough if you don't have arithmetic... 
01:32:03 <oerjan> vaguely recalling something about decidable halting problem... 
01:35:07 <oerjan> also i cannot seem to google this. 
01:48:50 * oerjan should get something to eat before he starts banning people for not answering. 
03:06:07 -!- tromp has joined. 
03:10:55 -!- tromp has quit (Ping timeout: 246 seconds). 
03:20:01 <oerjan> never mind, the thing i was trying to use it for won't work anyway 
03:22:02 -!- ATMunn has quit (Quit: lol rip). 
04:12:04 -!- oerjan has quit (Quit: Nite). 
04:27:17 -!- FreeFull has quit. 
05:21:06 <zzo38> I partially implemented a NNTP server software, mainly, because I could not find another one that seemed suitable to my use 
05:59:56 <esowiki> [[Ragaraja]]  https://esolangs.org/w/index.php?diff=60653&oldid=60587 * Mauriceling * (+307) /* Description of Commands / Instructions */ 
06:45:00 <esowiki> [[Ragaraja]]  https://esolangs.org/w/index.php?diff=60654&oldid=60653 * Mauriceling * (+9077) Added implementation flag 
07:44:56 -!- tromp has joined. 
07:50:48 -!- S_Gautam has joined. 
08:44:32 -!- AnotherTest has joined. 
09:42:12 -!- tromp has quit (Remote host closed the connection). 
10:12:07 -!- tromp has joined. 
10:27:02 <esowiki> [[Ragaraja]]  https://esolangs.org/w/index.php?diff=60655&oldid=60654 * Mauriceling * (+160) /* References to Biology */ 
11:13:21 <esowiki> [[Powder]]  https://esolangs.org/w/index.php?diff=60656&oldid=60638 * A * (+219) Add purpose 
11:14:15 <esowiki> [[Powder]]  https://esolangs.org/w/index.php?diff=60657&oldid=60656 * A * (+3) And sorry for making a small edit 
11:26:56 <esowiki> [[Brainfuck implementations]]  https://esolangs.org/w/index.php?diff=60658&oldid=59708 * Tromp * (+106) add interpreter written in lambda calculus 
11:44:25 -!- ocharles has quit (Ping timeout: 258 seconds). 
11:45:25 -!- ocharles has joined. 
12:35:29 -!- Lord_of_Life_ has joined. 
12:38:34 -!- Lord_of_Life has quit (Ping timeout: 250 seconds). 
12:38:34 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 
13:19:43 <esowiki> [[A]] N https://esolangs.org/w/index.php?oldid=60659 * Arcorann * (+1749) Created page with "'''A''' is a programming language that uses only the letter A in its source code. Its creation year is uncertain but no later than 2008.  == Description ==  A program with les..." 
13:23:04 <esowiki> [[A]] M https://esolangs.org/w/index.php?diff=60660&oldid=60659 * Arcorann * (+11) /* See also */ 
13:26:48 <esowiki> [[A]] M https://esolangs.org/w/index.php?diff=60661&oldid=60660 * Arcorann * (+28)  
13:40:25 -!- S_Gautam has quit (Quit: Connection closed for inactivity). 
15:01:13 -!- S_Gautam has joined. 
15:01:53 -!- sebbu has quit (Ping timeout: 268 seconds). 
15:04:05 -!- AnotherTest has quit (Ping timeout: 250 seconds). 
15:08:06 -!- sebbu has joined. 
15:33:29 -!- oerjan has joined. 
15:37:24 <oerjan> i realized an intuitive argument for why (simply/hindley-milner) typed SKIY isn't TC without infinite "basis" types: without them, the number of functions of every type you can construct is finite, so you can solve the halting problem by explicitly evaluating their CPO denotations. 
15:38:20 <oerjan> i still would like to remember the reference someone gave to this before, though. 
15:40:59 <rain1> interesting, it's not turing complete but it has programs that diverge? 
15:42:17 <oerjan> (which is just f x=f x) 
15:42:23 -!- arseniiv has joined. 
15:43:04 <int-e> oerjan: R. Statman, "The λY calculus" shows that the word problem is decidable for that calculus. 
15:43:58 <oerjan> well that does seem like the same thing. 
15:44:26 <oerjan> what i am looking for sounds wearker than that 
15:44:43 <int-e> huh, wait, I'm misrepresenting this 
15:45:09 <int-e> the halting problem is decidable; the word problem is decidable if Y is restricted to a single type (o -> o) -> o. 
15:45:14 <int-e> but not in general. 
15:46:03 <int-e> I'm not sure I get the finiteness angle though; even the simply typed lamda calculus has infinitely many inhabitants of (o -> o) -> o -> o. 
15:46:26 <Taneb> int-e: it doesn't for a specific o of finite size 
15:47:08 <int-e> Taneb: yes it does: all church numerals have that type. 
15:47:32 <int-e> oerjan's talking about models. 
15:47:34 <oerjan> the church numerals collapse 
15:47:45 <int-e> (the "CPO" didn't fully register) 
15:48:00 <Taneb> There's, like, three or four functions of type (() -> ()) -> () -> () 
15:48:07 <oerjan> for a particular set, only finitely many of them are unequal. 
15:48:58 <int-e> But I'm not sure whether this helps; the calculus operates on terms, and the main problem is distinguishing terms representing _|_ from everything else. 
15:49:18 <Taneb> (id, const id, const (const _|_)) 
15:49:49 <oerjan> int-e: for solving the halting problem, though, all you need is to evaluate with all the free variables = () 
15:50:02 <oerjan> or Bool if you like that better 
15:50:30 <int-e> Hmm I need to think about this... it sounds too good to be true. 
15:53:08 <Taneb> oerjan: is your "basis type" terminology standard? 
15:56:32 <int-e> (Of course my reference has the annoying problem that SKI and lambda calculus are not perfectly aligned.) 
16:02:26 <oerjan> Taneb: not that i know of 
16:03:24 <oerjan> int-e: denotationally they are, i should think 
16:04:06 <oerjan> also i got to thinking about because i had doubts about a proof on PPCG that haskell is TC with just ()=; 
16:04:41 <oerjan> i think that fails for this reason 
16:08:20 <Taneb> How does that work at all? 
16:10:02 <oerjan> you use (======) as identifiers 
16:11:49 <kmc> that's cute 
16:16:34 -!- b_jonas has joined. 
16:24:39 <Taneb> oerjan: could polymorphic recursion help out the proof in this case? And the fact that some terms have more than one type 
16:31:35 <arseniiv> on an unrelated subject: I have an idea to make something akin to Metamath but with more structured approach: there would still be metavariables of user-declared sorts, but formulas would be no simple strings, but terms of these sorts, and there would be language support for bound variables. Term constructors would be user-declared, and to declare binders, the language basically contains lambda-calculus, but terms of arbitrary sorts aren’t allowed,  
16:31:35 <arseniiv> so I hope their unification will be decidable 
16:33:03 <oerjan> Taneb: you need a type signature for polymorphic recursion, although i'm not sure if that's enough for TC-ness 
16:34:03 <oerjan> Taneb: i don't think more than one type helps, because you can always duplicated definition to avoid using that. 
16:34:36 <Taneb> oerjan: but eg. (===)(====)=(====) has an infinite number of types 
16:35:12 <oerjan> yes, but you'll only ever use a finite number when running a program 
16:35:38 <oerjan> (ghc defaults types to Any as i recall) 
16:35:57 <oerjan> (without polymorphic recursion) 
16:38:31 <b_jonas> It should be possible to make it TC by adding a few specific primitives, such as three list primitives and while 
16:38:59 <b_jonas> yes, probably even arithmetic and while is enough, as you say  
16:39:41 <b_jonas> although while has a generic type 
16:40:28 <oerjan> b_jonas: oh hi, that reminds me, you remember the PPCG challenge for making several quines with no characters in common, and how you suggested 3 might be possible in perl? Jo King made such an answer in perl 6 https://codegolf.stackexchange.com/a/181246/ 
16:41:23 <oerjan> b_jonas: i believe ():;1- is TC 
16:41:50 <b_jonas> oerjan: how does that work? how do you make functions? 
16:42:23 <b_jonas> I don't see how that works, but that's at least more believable 
16:42:57 <b_jonas> you can just make recursive function definitions 
16:43:12 <b_jonas> named functions, refering to themselves by name 
16:43:17 <b_jonas> like you said above with (===) 
16:43:23 <Taneb> Best thing is, you can now comment your code 
16:43:28 <oerjan> i've been trying to think of a version with 5 chars but i cannot make it work 
16:43:31 <b_jonas> only now you can use - too, so you get a slightly more conveient character set 
16:44:41 <b_jonas> oerjan: could you use ()=;: and use lists terminated by some special value consed with undef? 
16:44:46 <b_jonas> instead of arithmetic that is 
16:45:07 <b_jonas> like, lists of true and false, with the tail being undef 
16:46:20 <oerjan> b_jonas: yes, ()=;:' should work 
16:46:45 <b_jonas> why would you need char literals? 
16:47:06 <b_jonas> I mean, just use two different well-typed functions to represent true and false 
16:47:13 <oerjan> shortest way to get something to put in the lists that you can distinguish two values of 
16:47:21 <b_jonas> mytrue x y = x; myfalse x y = y; 
16:47:30 <b_jonas> then just call them to distinguish them 
16:47:33 <oerjan> b_jonas: oh maybe that does work 
16:47:43 <b_jonas> haskell rules again, so those will be polymorphic functions 
16:48:08 <oerjan> but that may give trouble with the original obstruction... 
16:48:14 -!- LKoen has joined. 
16:48:28 <oerjan> because they won't be polymorphic in a particular list 
16:49:10 <oerjan> but maybe it's close enough... 
16:49:51 -!- ais523 has joined. 
16:51:19 <b_jonas> ais523: I think you may be able to help with this discussion 
16:52:00 <b_jonas> oerjan was thinking of how he could choose a small set of characters so that Haskell with the source code containing just those characters is a turing-complete language 
16:52:26 <ais523> b_jonas: see the top answer on the PPCG question about Turing-complete subsets of languages' character sets 
16:52:27 <b_jonas> he threw in the idea that the four characters ()=; lets you define functions with names like (=====) and arguments with such names too 
16:52:38 <ais523> I believe (=); is the character set chosen, yes 
16:52:39 <b_jonas> ais523: yes, I think that's what spawned this 
16:52:46 <b_jonas> but oerjan says that it's not clear if that works 
16:52:51 <ais523> however, I'm starting to have doubts about whether SKI+fix is enough 
16:53:05 <ais523> in a strongly typed language 
16:53:07 <Taneb> ais523: oerjan is convinced that it isn't 
16:53:34 <ais523> ofc, we have more than SKI+fix here; we have the entirety of typed lambda calculus + recursion 
16:55:43 <oerjan> ais523: but that's just really syntactic sugar over SKIY 
16:56:13 <b_jonas> oerjan: I guess you're right and ()=;:' or ()=;:1 should be enough 
16:57:15 <kmc> typed church lists are a bit complicated aren't they 
16:57:20 <oerjan> a weirder idea i had was x"|>=; 
16:57:21 <kmc> the type of the list encodes the types of its elements? 
16:57:36 <oerjan> originally without the |, so it was my best idea for getting 5 
16:57:38 <kmc> I probably can't make a homogeneously-typed list without some kind of injection type :/ 
16:57:55 <b_jonas> oerjan: how does that work? 
16:58:40 <oerjan> well i'm not entirely sure it works, but you have monadic operations >>= and >> and comparisons == > >= 
16:58:55 <kmc> I tried to write fib with (=); for a while and gave up, but it's probably doable 
16:58:59 <b_jonas> oerjan: but how do you define functions or call functions or something? you have no space or parens 
16:59:02 <kmc> got into some occurs check hell 
16:59:24 <oerjan> b_jonas: x""xx=xxx>>=xxxx 
16:59:36 <kmc> adding type signatures to figure it out is tricky because a church numeral should be  type Church = forall a. (a -> a) -> a -> a, but that doesn't fly in vanilla Haskell 
16:59:54 <oerjan> i haven't thought that one all through though 
17:00:12 <b_jonas> write lambda calculus, with names like (>>>>) 
17:00:21 <b_jonas> because of the types again? 
17:00:39 <oerjan> that was the original version of another PPCG answer 
17:02:09 <oerjan> ais523: on a previous occasion someone, i think here, said that fix without something like integers is not enough in a typed LC (simply or hindley/milner, i'm not sure) although i've forgot the reference. int-e gave another above. 
17:02:32 <b_jonas> I wonder if we could use square brackets instead of parenthesis 
17:02:51 <b_jonas> define functions that take each argument in a single-element list 
17:03:01 <ais523> oerjan: I'm wondering if you can do it using the (a->a)->(a->a) type for Church numerals 
17:03:11 <ais523> b_jonas: that doesn't let you create identifiers 
17:03:16 <b_jonas> then we get empty lists and one element lists "for free" 
17:03:26 <b_jonas> ais523: yeah, that is a problem 
17:03:44 <b_jonas> yeah, that would need 5 chars 
17:04:21 <ais523> maybe you could use : rather than []? 
17:04:35 <ais523> although that might run into type issues 
17:04:48 <ais523> it'd definitely be enough in an untyped language, given that you have structure, destructure, recursion 
17:05:04 <b_jonas> ais523: you need an argument separator then 
17:05:35 <b_jonas> I think ()=;:1 works, oerjan's suggestion was ()=;:' which should work too 
17:07:15 <oerjan> <b_jonas> []=;x <-- i considered that one and the problem was no way to construct larger values 
17:08:02 <oerjan> Taneb: you can't pattern match with : then 
17:08:33 <b_jonas> oerjan: what do you mean by "larger values"? 
17:08:59 <b_jonas> you can construct [[[[[[[]]]]]]] 
17:09:14 <oerjan> yes, but that has no fixed type 
17:10:46 <oerjan> it's really quite awkward how 5 just seems to slip away for several different reasons 
17:11:21 <Taneb> > let x'x'xx=xx; xxx='x' in x'x'xxx 
17:11:29 <ais523> are there language options you can give to infer the type of Church numerals correctly? 
17:11:45 <oerjan> Taneb: alas ' is an identifier char too 
17:11:46 <kmc> what's PPCG? 
17:11:50 <ais523> :t \f x->f (f (f (f x))) 
17:11:56 <ais523> kmc: codegolf.stackexchange.com 
17:12:07 <b_jonas> Taneb: isn'tr x'x'xx a single variable? 
17:12:08 <kmc> wheres pp from 
17:12:12 <Taneb> oerjan: ...so why not x=;:" 
17:12:13 <ais523> possibly the world's largest users of esolangs? 
17:12:22 <ais523> kmc: ppcg = programming puzzles and code golf 
17:12:33 <ais523> although they basically gave up on the programming puzzles quite early on, the name didn't change 
17:12:34 <lambdabot> error: Variable not in scope: x'x'xx 
17:12:49 <ais523> (oddly, puzzling.stackexchange.com are typically quite willing to do programming puzzles) 
17:13:42 <oerjan> ais523: inferring the type of Church numerals would be ImpredicativeTypes, a ghc extension which probably never quite worked for that and has languished so long it's now essentially unsupported and broken for nearly everything. 
17:14:00 <b_jonas> ais523: and puzzling.stackexchange.com has very few questions about creating puzzles, it's almost all questions that are puzzle 
17:14:19 <ais523> b_jonas: questions about creating and solving puzzles are ontopic but rarely asked 
17:14:44 <int-e> > let add a b f x = a f (b f x); zero f x = x; one f x = f x; fibs n a b = n b (add a b); fibz a b = a; fib n = n fibs fibz zero one in let church n f x = iterate f x !! n; int n = n succ 0 in map (int . fib . church) [0..10] 
17:14:46 <lambdabot>  [0,1,1,2,3,5,8,13,21,34,55] 
17:14:52 <oerjan> <Taneb> oerjan: ...so why not x=;:" <-- no pattern matching of : in function arguments 
17:15:01 <ais523> as I discovered recently, even Stack Overflow has a similar issue; it was intended to be a collaborative build-an-FAQ site for programming but turned into a help-me-debug-this site 
17:15:32 <b_jonas> ais523: doesn't it still have lots of FAQ though? 
17:15:45 <Taneb> b_jonas: nah, they just get closed for duplicaiton ;P 
17:15:54 <b_jonas> I don't visit SO much, it's just too large for me 
17:15:54 <ais523> b_jonas: yes, there are still plenty of those around, mostly from earlier in the site's history 
17:16:47 <ais523> they added a new ask-a-question wizard recently which insists that you post code samples 
17:16:56 <ais523> it's optional, but it excludes basically any FAQ from being asked when used 
17:17:28 <b_jonas> ais523: yeah, you seem to be right 
17:18:21 <int-e> such a nice type: fib::(((((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->(((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->(a->a)->a->a 
17:20:20 <ais523> int-e: does that example show that SKIY is in fact TC in a typed lazy language? 
17:20:29 <oerjan> i suppose primitive recursion is probably possible, then. 
17:21:26 <oerjan> ais523: if a is a finite type, you can only distinguish finitely many fib types. 
17:21:29 <int-e> ais523: no. fib is primitive recursive. note that Y is not even used. 
17:21:29 <b_jonas> int-e: um, but can you get rid of the iterate and (!!) things? 
17:21:37 <int-e> b_jonas: they're just for testing 
17:22:19 <b_jonas> oh, so you're saying that even without them you can at least get primitive recursion, even deeper than the single exponential that fib does? 
17:22:29 <int-e> b_jonas: The first let defines a fibonacci function (of sorts); The second let defines conversions between Church numerals and Int. 
17:23:08 <int-e> b_jonas: yes, if you're willing to use sufficiently big types for the church numerals. 
17:23:52 <arseniiv> aren’t Church numerals basically unfolders? (so, primitive recursion) 
17:23:53 <ais523> OK, so the technique int-e used above is limited to primitive recursion, because its only control flow structure is the while loop 
17:24:21 <arseniiv> (or I remember it wrong, and some other numerals are unfolders) 
17:24:40 <arseniiv> (maybe Church—Scott if it means a different thing) 
17:25:09 <int-e> There is a result that Church numerals at type (o -> o) -> o -> o gives you something called extended polynomials only (in simply typed lambda calculus; no Y). 
17:25:36 -!- AnotherTest has joined. 
17:25:39 <b_jonas> also, EU copyright thing thing, just have to mention it on the channel, would be strange if nobody did 
17:26:27 <ais523> b_jonas: the article 11 / article 13 thing? 
17:26:40 <b_jonas> ais523: yeah, or the whole vote and stuff 
17:26:52 <b_jonas> the article 13 thing that got renumbered 
17:26:56 <ais523> I'm not 100% convinced those are bad ideas; at least, most of the examples that people have brought up as to why they're bad, I disagree with, however they may be bad for other reasons 
17:27:28 <ais523> I'd prefer a comprehensive reform to copyright law rather than just enforcing it 
17:27:32 <int-e> b_jonas: the renumbering was a normal part of the process. 
17:28:27 <b_jonas> int-e: the renumbering is so they can publish the text of the law without the content filters kicking them off because it mentions "article 13" 
17:29:17 <b_jonas> ais523: the ones that people say article 13 requires in the sense that it makes content hosters more responsible for the content of third-party materials that they host 
17:29:49 <b_jonas> which hosters can only enforce by automatic real-time content filters to accept or reject third-party content 
17:30:24 <int-e> ais523: I don't like article 13 mainly because I expect that youtubers will regularly run into their own videos being blocked by an automatic filter, without any reasonable course of remedy... those videos cost time and effort, and often money, to produce, so it will discourage that particular way of producing content. It may not actually happen but I believe that's a true risk. 
17:30:40 <ais523> int-e: this is already the case on YouTube nowadays 
17:30:49 <ais523> it has an automatic filter, and it does cause problems 
17:31:01 <b_jonas> ais523: I don't think it's relevant for youtube, because youtube is the site that already wants automated content filters, and would do it anyway regardless of that law 
17:31:17 <int-e> Yes and that will become worse. So this is another step in the wrong direction. 
17:31:18 <b_jonas> it's more relevant for other sites 
17:32:01 <int-e> And yeah, other sites will be forced to implement filters at the "industry standard" which will be defined by the likes of Google and Facebook. Yay. 
17:32:29 <ais523> actually, one of the main problems with YouTube's filters at the moment is people falsely claiming to have copyright on things and fooling the input to the filter 
17:32:42 <ais523> so that the people making the false claims end up getting all the ad revenue 
17:33:06 <ais523> if a reform made that sort of claim illegal, then it would improve the current situation for youtube-like sites 
17:33:28 -!- oerjan has quit (Quit: Later). 
17:34:11 <arseniiv> (btw someone interested in that Metamath-like thing?) 
17:34:13 <b_jonas> ais523: ok, but what happens to sites that aren't as large as youtube, but also aren't too tiny, and have third-party content? 
17:34:32 -!- Essadon has joined. 
17:34:59 <b_jonas> ais523: also, isn't that sort of claim already illegal? 
17:35:17 <int-e> The main beneficiants of the directive will be publishers and right holder's organization; to some extend Google and Facebook... creators will largely lose out slightly (more if the optional Article 16 (previously 12) is implemented), and creators who currently rely on youtube and other content sharing platforms to distribute their material. 
17:35:19 <ais523> b_jonas: no, it would be if it were a DMCA claim, but YouTube's filters allow non-DMCA claim 
17:35:27 <ais523> even then, DMCA claims have huge loopholes in them 
17:36:26 <int-e> We'll see in a couple of years how bad it'll actually be. 
17:37:51 <ais523> from my point of view, there surely has to be a better situation then a) ridiculously strict copyright rules existing and b) those same rules rarely being enforced 
17:38:01 <ais523> because that leaves law-abiding people at a major disadvantage 
17:38:03 <int-e> What really irks me is that instead of a healthy debate we got stuck on the level of name-calling... both sides accusing the other of having no clue (which, to some extent, is true, because this is a clash of different cultures.) 
17:38:26 <ais523> the EU's sugested fix probably isn't a very good one, but the situation needs fixing, so I'm at least happy that it's being discussed 
17:38:29 <b_jonas> as for finding a small set of characters that induce a TC subset of a language, that's somewhat similar to finding the smallest set of controller buttons with which you can complete a video game, as in, super mario speedwalks and the like 
17:38:34 <int-e> what's the right word actually... "beneficiaries"? 
17:39:05 <int-e> ais523: I agree... and in fact it was quite funny how the #Yes2Copyright hashtag was adopted by both sides of this campaign. 
17:39:21 <arseniiv> int-e: it seems the latter, yes 
17:39:41 <b_jonas> ais523: that's not really a good enough argument for any particular new law though 
17:40:48 <arseniiv> laws seem to look as a sort of code, usually of very bad maintainability, suspicious correctness and the like 
17:41:00 <ais523> b_jonas: well, any potential change in the law, other than outright removing copyright (which seems very unlikely to help), will have to come with better enforcement 
17:41:14 <ais523> so this may be a first step that leads to wider reform 
17:42:24 <arseniiv> so if “better code is less code”, yeah, one shouldn’t make new laws on every occasion, even if there’s some demand for a code solving/enabling a particular thing (because rarely there are no demand) 
17:44:35 <b_jonas> ais523: I still don't think that really addresses the debate. sure something has to be done, but nobody really said that nothing should be done, they just had complaints about the specific law 
17:45:58 <ais523> b_jonas: most of the attacks I've seen have been against the basic idea of the articles in question; it is entirely possible that the idea is good but the details are bad 
17:46:36 <int-e> ais523: But look at how people dealt with the advent of photocopiers, floppies, recordable CDs, big USB devices... AFAIK there's no enforcement there. In Germany, instead a part of the sales price goes to right holders' organizations. It's not ideal (in particular those organizations hold quite a lot of power as a result) but it's *very* unintrusive. Content sharing platforms are a different... 
17:46:42 <int-e> ...beast, of course, but some trade-off between enforcement and a collective pool of money (with various options for sources... consumer end (ISPs) or content sharing provider end...) should be possible. 
17:47:24 <ais523> int-e: sending part of a sales price to right holders' organizations should imply that copying data owned by those right holders is not copyright infringement 
17:47:42 <ais523> if so, then it makes sense 
17:48:03 <int-e> Also I'd like to see data. How much of the content on Youtube is there illegally? I would like to know that from both sides... uploads and views. 
17:48:51 <b_jonas> int-e: that would be hard to tell, because the content that is known to be illegal is taken down so wouldn't be in the statistics, and the ones that aren't known to be illegal are hard to count 
17:50:22 <int-e> And I can also imagine tweaks to Article 17 (13) that would make it much nicer to youtubers: rather than blocking an upload directly, what if the platform has the option to tell the user why it would be blocked, and let them override that decision, in which case liability reverts back to the user? This probably requires that the user be properly identified, but anyone who monetizes their channel... 
17:50:25 -!- S_Gautam has quit (Quit: Connection closed for inactivity). 
17:50:28 <int-e> ...probably has shared their address with the provider anyway. 
17:51:55 <int-e> (The directive has provisions for disputing infringement claims; it even mandates that a human be involved in that process. I don't see how platforms can implement this in an affordable way so I expect those processes to be very slow and convoluted.) 
17:52:38 <int-e> (So the point of my idea above is that it can easily be fully automated.) 
17:59:25 <ais523> int-e: "what proportion of YouTube" is a hard question, because there are probably huge numbers of videos that are hardly ever viewed 
17:59:33 <ais523> people using it as a backup for family photos, or whatever 
17:59:59 <int-e> ais523: yes, that's why I want the statistics for views as well 
18:00:05 <ais523> maybe asking about the proportion of YouTube /views/ is more interesting, in which case I expect the vast majority to be of copyrighted content, but often with the implicit permission of the content's owner 
18:00:29 <int-e> (those are probably the more relevant ones anyway, but both uploads and views are interesting) 
18:00:37 <kmc> a lot of record labels post their music officially 
18:00:45 <ais523> or even explicit-but-global permission (e.g. many computer games give permission to upload videos of the game on YouTube) 
18:00:49 <kmc> they get royalties 
18:01:07 <b_jonas> yes, views are the more relevant, because the uploads just scale with how quickly youtube recognizes and removes the illegal content, at which point the uploader reuploads a modified version of it 
18:01:16 <int-e> kmc: yes. and it's also good advertisement, especially for lesser known artists. 
18:01:38 <kmc> I've found quite a bit of music there that I listen to all the time now 
18:02:25 <kmc> on a tangential note, this is some amazing guitar work https://www.youtube.com/watch?v=ISS2SrHxKI4 
18:02:39 <kmc> I wouldn't have thought it possible to do an acoustic guitar cover of a drum&bass song, but not only is it possible it's amazing 
18:03:19 * kmc listens again 
18:20:03 <esowiki> [[Category theory]]  https://esolangs.org/w/index.php?diff=60662&oldid=46854 * Koyodyne * (+25) Fixed some information about identity morphisms 
18:20:41 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60663&oldid=60662 * Koyodyne * (+0) replaced a typo 
18:22:06 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60664&oldid=60663 * Koyodyne * (+2) replaced auspicious "set" with "class" 
18:23:43 -!- ZM has joined. 
18:24:39 -!- ZM has quit (Client Quit). 
19:09:23 -!- Sgeo__ has joined. 
19:12:14 -!- Sgeo_ has quit (Ping timeout: 246 seconds). 
20:10:20 <esowiki> [[Category theory]]  https://esolangs.org/w/index.php?diff=60665&oldid=60664 * Koyodyne * (+534) Added a section on higher categories 
20:12:04 <esowiki> [[Category theory]]  https://esolangs.org/w/index.php?diff=60666&oldid=60665 * Koyodyne * (+20) Added a section on higher categories 
20:28:33 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60667&oldid=60666 * Salpynx * (+23) Add category so this is linked from somewhere 
20:31:41 -!- FreeFull has joined. 
20:32:52 -!- Phantom_Hoover has joined. 
20:33:43 <arseniiv> oh this is actually very nice. If I’d known that article needs some attention… 
20:34:23 <b_jonas> everyone be prepared, this weekend we'll have the timezone offset change in most of Europe, then on Monday we'll have SIGBOVIK 
20:34:37 <arseniiv> (should I add about semicategories, the ones without identity morphisms?) 
20:36:14 <arseniiv> nah, a link to nLab should be really sufficient 
20:46:24 <ais523> arseniiv: categories are general enough as it is, why would you need to make them more general? :-D 
20:46:53 <ais523> anyway, I'm not convinced category theory is an esolang; it's fairly eso but not very lang 
20:49:25 <arseniiv> yeah, it’s a bit hard to use them for me because of that. Though there are so-called internal languages, but e. g. for arbitrary category there isn’t really anything interesting to have in that language, and I even don’t know if it’s a thing 
20:54:05 <arseniiv> ais523: ^ and also about the first I’d say “because of Haskell”, but there seemed to be a more specific answer I’ve forgot 
20:54:30 <arseniiv> and Haskell is in no relation to that AFAIR 
20:54:46 <ais523> well, Haskell is fairly close to category theory as a programming language 
20:54:48 <arseniiv> but it’s a universal argument, I should admit 
20:54:53 <ais523> it's not at all the same thing, but the same ideas get used in both 
20:56:48 <arseniiv> if only I’d get more of Edward Kmett’s packages... hm no forget it 
21:51:24 <kmc> isn't the point of category that the same ideas get used in /everything/ 
21:59:49 <ais523> yes, it lets you translate theorems from one context to another 
22:00:47 <ais523> my PhD used a categorical result to prove that the compiler I'd defined from the syntax of a language to its semantics was consistent, in the sense that sometimes it would match the same program in multiple different ways, but it'd produce the same result in each case 
22:01:00 <ais523> (this is known as a "coherence" result, in category theory) 
22:01:17 -!- fractal has quit (Ping timeout: 245 seconds). 
22:11:25 <b_jonas> !card-by-name Soulcatchers' Aerie 
22:11:39 <b_jonas> `card-by-name Soulcatchers' Aerie 
22:11:40 <HackEso> Soulcatchers' Aerie \ 1W \ Enchantment \ Whenever a Bird is put into your graveyard from the battlefield, put a feather counter on Soulcatchers' Aerie. \ Bird creatures get +1/+1 for each feather counter on Soulcatchers' Aerie. \ JUD-U 
22:16:30 <b_jonas> ais523: ^ could that work instead of Noxious Ghoul in an M:tG implementation of Waterfall Model? 
22:16:45 -!- fractal has joined. 
22:17:10 <ais523> b_jonas: you need a -/- effect somewhere; Noxious Ghoul is only used as an easily triggerable -/- effect in the The Waterfall Model impl 
22:17:15 <ais523> `card-by-name Noxious Ghoul 
22:17:16 <HackEso> Noxious Ghoul \ 3BB \ Creature -- Zombie \ 3/3 \ Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn. \ LGN-U, HOP-U 
22:17:28 <ais523> I guess you could use a damage effect instead 
22:17:48 <ais523> oh, what's that effect which pings everything when a creature ETBs called? 
22:17:52 <ais523> `card-by-name pandemonium 
22:17:52 <HackEso> Pandemonium \ 3R \ Enchantment \ Whenever a creature enters the battlefield, that creature's controller may have it deal damage equal to its power to any target of their choice. \ EX-R, TSP-S 
22:18:05 <ais523> oh, would need to be global, so not that 
22:19:32 <ais523> Forerunner of the Empire almost works but it's a "may" ability 
22:19:39 <ais523> `card-by-name forerunner of the empire 
22:19:39 <HackEso> Forerunner of the Empire \ 3R \ Creature -- Human Soldier \ 1/3 \ When Forerunner of the Empire enters the battlefield, you may search your library for a Dinosaur card, reveal it, then shuffle your library and put that card on top of it. \ Whenever a Dinosaur enters the battlefield under your control, you may have Forerunner of the Empire deal 1 damage to each creature. \ RIX-U 
22:19:51 <ais523> (you can use a protection-from-color effect to make it selective) 
22:19:57 <ais523> is there a reason you wanted to replace noxious ghoul, anyway? 
22:21:03 <b_jonas> ais523: no reason really. I was looking for cards for a different construction, but found this one and got curious 
22:21:45 <ais523> soulcatcher's aerie seems like the sort of building block that might be helpful for a TCness construction, but it doesn't fit into the TWM construction directly 
22:22:35 <ais523> you could almost use it to replace Hungry Lynx but the two creature types are the same 
22:23:11 <ais523> (also, because it affects newly created tokens proactively, it'd do weird things to the language semantics, it might still be TC but it wouldn't be TWM) 
22:23:38 <b_jonas> I was wondering on a construction where you have just one creature for each Waterfall counter; you somehow decrease the toughness of each creature by a constant each turn, I don't know how to do that; the opponent has a Fleet-Footed Monk with Lure to deal damage to the creature with 1 toughness each turn; 
22:23:52 <b_jonas> and somehow you trigger off blocking or damage, but I also don't see how to do that 
22:24:41 <b_jonas> the advantage would be that since your creatures never die or get born, they can be complicated enchanted creatures 
22:24:56 <b_jonas> they can have rules text on them, or on enchantments on them 
22:25:13 <b_jonas> which allows a larger selection of cards, but I don't find the right card needed here 
22:25:24 <ais523> the existing construction has one creature per counter, though 
22:25:45 <ais523> it uses a lot of other creatures for triggered abilities but the fact that they're creatures is irrelevant, it'd work almost as well with them as enchantments 
22:25:56 <ais523> (not quite as well because the existing setup has no way to wish for enchantments, so they'd have to be maindecked) 
22:25:59 <b_jonas> ais523: yes, but don't those creatures die and get recreated as tokens? 
22:26:07 <b_jonas> I mean, what I'd like here is that those creatures never die 
22:26:13 <b_jonas> instead they linger at toughness 1 or 3 
22:26:18 <ais523> you'd want to use tokens anyway because of deck size limits 
22:26:28 <b_jonas> above that, and get triggered when they are lowered to toughness 1 or toughness 3 
22:26:56 <ais523> triggering on a specific toughness is hard 
22:26:58 <b_jonas> ais523: well, they could be token copies, but you copy and enchant them once at the start 
22:27:16 <b_jonas> ais523: that's what the Fleet-Footed Monk is for, and there's another card that works for toughness 3 
22:27:42 <ais523> `card-by-name fleet-footed monk 
22:27:43 <HackEso> Fleet-Footed Monk \ 1W \ Creature -- Human Monk \ 1/1 \ Fleet-Footed Monk can't be blocked by creatures with power 2 or greater. \ P1-C 
22:27:57 <b_jonas> `card-by-name Goldmeadow Dodger 
22:27:58 <HackEso> Goldmeadow Dodger \ W \ Creature -- Kithkin Rogue \ 1/1 \ Goldmeadow Dodger can't be blocked by creatures with power 4 or greater. \ LRW-C 
22:28:19 <ais523> there are lots of creatures that trigger on dealing combat damage 
22:28:36 <b_jonas> ais523: yes, but we're using -1/-1 or +1/+1 effects anyway, either counters or something crazy like that Soulcatcher's Aerie, because it has to survive turn changes 
22:28:44 <ais523> maybe we could trigger on that, rather than on /not/ dealing combat damage 
22:29:01 <b_jonas> ais523: yes, that could work. is there an enchantment that gives a creature protection versus a creature type? 
22:29:17 <b_jonas> we have to give the opponent's Goldmeadow Dodger protection against everything but the one creature type 
22:29:23 <b_jonas> and have one Dodger per counter 
22:29:57 <b_jonas> would be easier with colors, but there's only 5 and that's not known to be enough with Waterfall 
22:30:43 <ais523> all the tunable protection cards I can see are color-based, not creature-type-based; runed halo is an exception, triggering on name, but it enchants players, not creatures 
22:30:52 <ais523> there's also true-name nemesis but it's hard to count that 
22:31:41 <ais523> oh, there may be specific creature type protections, rather than tunable, that we can hack 
22:31:47 <b_jonas> they don't need tunable, they can be Evolvable 
22:32:22 <b_jonas> `card-by-name Boldwyr Imitator 
22:32:33 <HackEso> Boldwyr Intimidator \ 5RR \ Creature -- Giant Warrior \ 5/5 \ Cowards can't block Warriors. \ {R}: Target creature becomes a Coward until end of turn. \ {2}{R}: Target creature becomes a Warrior until end of turn. \ FUT-U, MOR-U, CNS-U, DDS-U 
22:32:48 <b_jonas> that, and a large amount of Evolution 
22:32:51 <ais523> I was going to say, boldwyr intimidator has a different effect, but does it work for what you're looking for? 
22:33:08 <b_jonas> but there's still at least two problems 
22:33:34 <ais523> I kind-of like the way my existing setup works at split-second speed; something that involves combat can't 
22:33:39 <b_jonas> one is what exactly to trigger from it attacking 
22:33:49 <b_jonas> ais523: yes, that certainly makes it easier 
22:34:20 <b_jonas> oh, I know the other one. the other problem is how to damage the creatures every turn, but that's easy. there's a blue aura for it 
22:34:33 <b_jonas> `card-by-name Unstable Mutation 
22:34:34 <HackEso> Unstable Mutation \ U \ Enchantment -- Aura \ Enchant creature \ Enchanted creature gets +3/+3. \ At the beginning of the upkeep of enchanted creature's controller, put a -1/-1 counter on that creature. \ AN-C, RV-C, 4E-C, 5E-C, TSP-S 
22:34:46 <b_jonas> ok, so now what to trigger from the Dodgers dealing damage? 
22:34:54 <ais523> `card-by-name crackling perimeter 
22:34:55 <HackEso> Crackling Perimeter \ 1R \ Enchantment \ Tap an untapped Gate you control: Crackling Perimeter deals 1 damage to each opponent. \ GTC-U 
22:35:03 <ais523> I couldn't remember the trigger on that one 
22:35:06 <ais523> and I thought it hit creatures 
22:35:16 <ais523> I think there's a card that hits every creature once-per-turn, but I guess copied auras could also work? 
22:36:19 <b_jonas> ais523: I expect most of those would deal damage, not -1/-1, although you could perhaps animate something and give it infest 
22:37:18 <ais523> but yes, I'm used to toughness being the only relevant stat, but your construction triggers on power 
22:37:39 <b_jonas> they will probably go hand in hand 
22:38:33 <b_jonas> I was also wondering if we can somehow make our creatures actually die from dropped toughness, but respawn 
22:39:08 <b_jonas> but it doesn't seem easy to make that scale 
22:39:18 <ais523> that's basically what the existing construction does 
22:40:09 <b_jonas> yes, but it recreates a token 
22:40:19 <b_jonas> whereas I wanted to reanimate the same creature 
22:40:39 <b_jonas> it can't work with many creatures, it needs actual cards, and possibly even then it won't work 
22:41:38 <ais523> objects lose their identity when changing zones, that's one of the most fundamental rules of magic 
22:41:49 <ais523> there's one creature which keeps counters when changing zones, I think, but it's definitely a special case 
22:41:56 <ais523> `card-by-name skullbriar 
22:41:57 <HackEso> Skullbriar, the Walking Grave \ BG \ Legendary Creature -- Zombie Elemental \ 1/1 \ Haste \ Whenever Skullbriar, the Walking Grave deals combat damage to a player, put a +1/+1 counter on it. \ Counters remain on Skullbriar as it moves to any zone other than a player's hand or library. \ CMD-R 
22:42:12 <ais523> oh wow, I didn't expect to successfully remember which one it was first try 
22:42:36 -!- LKoen_ has joined. 
22:43:05 <b_jonas> ais523: yes, but there are ways to make a card respawn 
22:43:39 <b_jonas> they don't have to keep their identity if they're printed with the right creature type and the opponent has all the Evolved stuff 
22:43:55 <b_jonas> then you still need as many creature cards in your deck as there are Waterfall counters, which isn't too good 
22:44:26 <ais523> if it's not keeping its identity, why do you care about whether it's a token respawning or a token being created? is the difference even observable? 
22:44:47 <b_jonas> or at least, I shouldn't care about it 
22:45:03 <b_jonas> the problem with tokens is that you can't bring them back from the gy 
22:45:40 -!- LKoen has quit (Ping timeout: 250 seconds). 
22:45:52 <b_jonas> but yes, this doesn't work well 
22:46:55 <b_jonas> another thing I was wondering about is  
22:46:59 <b_jonas> `card-by-name Ensnaring Bridge 
22:47:00 <HackEso> Ensnaring Bridge \ 3 \ Artifact \ Creatures with power greater than the number of cards in your hand can't attack. \ ST-R, 7E-R, 8ED-R, MPS_KLD-S, A25-M 
22:47:06 <ais523> `card-by-name gift of immortality 
22:47:07 <HackEso> Gift of Immortality \ 2W \ Enchantment -- Aura \ Enchant creature \ When enchanted creature dies, return that card to the battlefield under its owner's control. Return Gift of Immortality to the battlefield attached to that creature at the beginning of the next end step. \ THS-R 
22:47:10 <b_jonas> plus a luring creature by the opponent 
22:47:22 <b_jonas> so that it's your creature that attacks, but only if it has low toughness 
22:47:24 <ais523> I don't think Gift of Immortality works on tokens? but it probably works for anything else you might be doing with this 
22:47:26 <b_jonas> the opponent has the Bridge 
22:47:51 <b_jonas> ais523: I don't think that works. once the token goes to the gy, it can't move to a new zone from there 
22:48:39 <ais523> yes, doesn't work on tokens, but would work on creature cards 
22:48:44 <b_jonas> then we'd need something like Edgar Markov, but that has an attack trigger that puts a +1/+1 counter on each creature of some _other_ type than itself 
22:49:01 <ais523> apparently the playtest version just said "enchanted creature can't die", but it got altered for rules and balance reasons 
22:50:31 <HackEso> Rage Forger \ 2R \ Creature -- Elemental Shaman \ 2/2 \ When Rage Forger enters the battlefield, put a +1/+1 counter on each other Shaman creature you control. \ Whenever a creature you control with a +1/+1 counter on it attacks, you may have that creature deal 1 damage to target player or planeswalker. \ MOR-U 
22:52:50 <b_jonas> ok, my ideas don't seem to work 
22:55:15 <b_jonas> the game designers aren't stupid, they don't make too many cards that form easy infinite loops 
22:56:19 <b_jonas> especially not mandatory ones 
22:58:02 <b_jonas> and yes, I do have a playset of Faceless Butchers in my box of blacks 
22:59:21 <ais523> LSV (a famous magic player) once pulled off the oblivion ring infinite loop on MTGO on stream, against a real opponent, on a spur-of-the-moment decision to set it up 
22:59:31 <ais523> because he was curious as to what would happen (the deck wasn't built around setting it up) 
23:01:55 <ais523> MTGO didn't handle it well, it replayed the entire game to try to figure out what had gone wrong, and then restarted it when it couldn't figure it out 
23:03:02 <b_jonas> or did the players call one? 
23:04:08 <ais523> MTGO doesn't have judges 
23:04:15 <ais523> when it breaks you can apply for a refund, but that's abotu it 
23:04:30 <b_jonas> not even for tournaments with rewards? 
23:06:24 -!- LKoen has joined. 
23:06:42 <ais523> nope; quite a few people are upset about this 
23:06:49 <b_jonas> oh, also, is it possible to golf this to one IRC line? 
23:06:50 <b_jonas> <TABLE border=0 cellspacing=0><COLGROUP span=10 width=25><TR height=25><TD bgcolor=#80C rowspan=4><TD bgcolor=#80C><TD bgcolor=#FF8 colspan=5><TD bgcolor=#4F4 colspan=3><TR height=25><TD bgcolor=#8C0 colspan=3><TD bgcolor=#44F colspan=4><TD bgcolor=#08C><TD bgcolor=#4F4 rowspan=2><TR height=25><TD bgcolor=#0C8><TD bgcolor=#0C8 rowspan=3><TD bgcolor=#8C0 colspan=2><TD bgcolor=#44F><TD bgcolor=#08C 
23:06:57 <b_jonas> colspan=3><TR height=25><TD bgcolor=#8FF><TD bgcolor=#0C8><TD bgcolor=#C08><TD bgcolor=#F44 rowspan=2><TD bgcolor=#08C><TD bgcolor=#F8F><TD bgcolor=#C80><TD bgcolor=#C80 rowspan=3><TR height=25><TD bgcolor=#8FF colspan=2 rowspan=2><TD bgcolor=#C08 colspan=2><TD bgcolor=#F8F colspan=3><TR height=25><TD bgcolor=#C08 colspan=2><TD bgcolor=#F44 colspan=3><TD bgcolor=#F8F><TD bgcolor=#C80></TABLE> 
23:07:19 <ais523> because if they reach the late stages of tournament and lose out to an MTGO malfunction, getting the entry fee refunded isn't really what they were looking for 
23:07:52 <ais523> how repeated are the colors? I was wondering if a <style> tag would help, but probably not for something that's that short 
23:08:07 <b_jonas> I think the ` height=25` could be eliminated, but that's not enough 
23:08:21 <b_jonas> and you could drop the ending </TABLE> 
23:09:07 <b_jonas> ais523: well, there are 12 colors and 28 TD elements 
23:09:43 <b_jonas> I guess we could save two bgcolor attributes if I gave the table a default bgcolor 
23:09:49 -!- LKoen_ has quit (Ping timeout: 258 seconds). 
23:10:28 <ais523> just out of interest (I know there's no actual reason required, especially in this channel), why are you trying to golf an HTML image-constructed-using-tables into a single line of IRC anyway? 
23:11:05 <ais523> is there a reason it has to be constructed using tables? it's possible that absolute-positioning divs would be shorter (not sure on that though; it's probably naturally more verbose but has more scope for golfing) 
23:11:14 <b_jonas> ais523: I dunno. the image is a packing of the 12 pentominoes into a rectangle, but the golfing is arbitrary 
23:11:30 <b_jonas> using a PNG with a data url would probably make it small enough 
23:11:41 <ais523> oh, divs wouldn't work well for that 
23:11:51 <b_jonas> scale the png up with html 
23:12:54 <b_jonas> the one irc line is arbitrary, I just thought of it because someone mentioned html tables on another channel 
23:14:08 <b_jonas> oh yeah, the style could help with both the width and heigth 
23:14:25 <b_jonas> an embedded stylesheet with a STYLE element that is 
23:14:49 <b_jonas> I thought I'd just drop the height and add non-breaking spaces to make the rows reasonably tall 
23:15:01 <b_jonas> I could even use that for width 
23:15:34 <b_jonas> also I thought I could just drop the hash marks from the colors, but it seems like that doesn't work 
23:16:36 <b_jonas> ah I see, it only works when there are six digits, not when there are only three 
23:16:44 <b_jonas> or at least the three digits aren't interpreted the same 
23:19:57 <b_jonas> also, one IRC line would work in a wisdom 
23:20:33 <b_jonas> I'll have to try with a png in a data attribute 
23:21:45 <ais523> there are golfier image formats, I think 
23:21:57 <ais523> that text-based format X uses probably wouldn't even need to be base64'd 
23:22:05 <ais523> (and would also be more readable on an IRC line) 
23:22:20 <ais523> although it has a lot of needless double quotes and commas and the like 
23:22:36 <b_jonas> sure, but this fits easier. even paletted BMP works, since I can set the number of palette elements to 12 IIRC 
23:23:11 <b_jonas> heck, even RGB BMP would work, since it's just 180 bytes of pixel data before the base64 encoding 
23:23:32 <b_jonas> then that could be produced by a script, making a random packing 
23:23:47 <b_jonas> although I think paletted would be shorter 
23:24:26 <ais523> I wonder if there's been much research on golfing image formats 
23:24:41 <ais523> PNG was designed to be portable more than golfy (it is fairly golfy for large images, but could easily be made better on small ones) 
23:24:41 <b_jonas> ais523: for small images like this, or for large ones? 
23:24:43 -!- oerjan has joined. 
23:25:28 <b_jonas> I've golfed an svg image once 
23:26:06 <b_jonas> well, not completely golfed 
23:26:19 <b_jonas> just relatively, compared to the original which was way too long 
23:26:37 <b_jonas> by adding groups that are repeated, etc 
23:28:21 <oerjan> b_jonas: i got thinking about your ()=;: suggestion while away and i think it actually works. 
23:29:11 <oerjan> because if CPS transform the program, you only need to branch on one type to church-simulate booleans 
23:30:01 -!- Phantom_Hoover has quit (Remote host closed the connection). 
23:30:25 -!- tromp has quit (Remote host closed the connection). 
23:30:27 <oerjan> so you simulate a stream of Bools as [a -> a] where a is the final type of the computation. 
23:31:27 <oerjan> the CPS transform can disrupt laziness but you don't need that for TC-ness 
23:31:52 <b_jonas> oerjan: ok, although at that point I can't claim credit for it being my suggestion 
23:32:11 <b_jonas> I don't really see why it would reduce to one type either 
23:32:47 <b_jonas> so you'd make something like a cyclic tag system? 
23:32:49 <oerjan> because if you have CPS transformed, then you can branch on a bool by applying it to two continuations. 
23:33:26 <oerjan> and they always have the same type a 
23:34:17 <b_jonas> might work, but I'm tired now 
23:34:20 <oerjan> i suppose you need a little laziness for that, but CPS doesn't destroy that 
23:34:31 <b_jonas> this is haskell, we have a little lazyness 
23:35:03 <ais523> oerjan: I'm having trouble seeing why the bool wouldn't have to have a more complex type than the continuations (meaning you couldn't store bools inside continuations) 
23:35:58 <oerjan> ais523: the type of the continuation is only the type of its final result, it doesn't prevent it from using more complicated types inside i think 
23:36:33 <ais523> oh wow, I think I see how this works 
23:36:39 <ais523> we give the arguments to the continuations /first/ 
23:37:01 <ais523> so both possible continuations for the program are already fully constructed, but because Haskell is lazy, aren't running yet 
23:37:18 <ais523> then we force only the one we want (indirectly, as the currently running function is forced) 
23:37:35 <b_jonas> what if you translate StackFlow, and the types you store on the list are functions that take each stack as the input (the function is curried to take multiple args) and the final output as the output? 
23:37:48 <ais523> this is the sort of illogical evaluation order normally only seen in declarative programming :-D 
23:38:26 <oerjan> i don't think you _need_ laziness for this. you could use [(()->a)->(()->a)->(()->a)] instead. 
23:38:36 <oerjan> and then it would work just as well in say ocaml 
23:38:40 <ais523> recently I fixed a bug in Brachylog's standard library: the command being implemented was "given a list, a function, and a value, assert that the function produces the value on every element of the list" 
23:38:56 <ais523> and the evaluation order I picked to make this work looks really bizarre to anyone not used to declarative languages 
23:39:33 <ais523> first we produce a new list of the same length of the original, then we assert that all the elements of the new list are equal, then we assert that the first element of the new list is the value, then we map the function from the old list to the new list 
23:40:04 <ais523> I guess I could have swapped the second and third steps and then it'd work in imperative languages too (although it'd require a two-list map) 
23:40:06 <b_jonas> ais523: wait, does this apply only to a finite list? 
23:40:29 <ais523> map doesn't work very well on infinite lists in most declarative languages 
23:40:44 <ais523> now I'm wondering how you could make it work 
23:40:54 <ais523> (the list wouldn't be so much /infinite/, as undefined-length) 
23:41:17 <b_jonas> ais523: map isn't the hard part, all is 
23:41:37 <kmc> why doesn't it work well? 
23:41:51 <ais523> well, the problem is that most declarative language impls record known facts about each element of a list by its index 
23:42:46 <ais523> you can see this in Brachylog: write "a list whose first element is 4 and all of whose elements are prime" and you get an immediate "that's impossible", write "a list whose last element is 4 and all of whose elements are prime" and it'll go into an infinite loop 
23:42:56 <b_jonas> ais523: I have a small prolog library that implements some such list functions using the convention we talked earlier about to represent closures 
23:43:24 <ais523> (because in the former case, the 4 has a known index, so it has somewhere to record the known fact about it; in the later case it has to fall back to backtracking) 
23:44:05 <oerjan> <b_jonas> what if you translate StackFlow [...] <-- my CPS suggestion fails if the types inside the lists are recursive (which is why you can't e.g. church encode the _whole_ list this way.) 
23:44:23 <oerjan> it works for Bools and finite Enums. 
23:44:32 -!- Essadon has quit (Read error: No route to host). 
23:45:07 <ais523> hmm, actually I'm wrong, even in the former case it seems to enter an infinite loop? this may be a bug I can fix 
23:45:32 <ais523> I can't see a logical reason why it would 
23:46:24 <b_jonas> ais523: http://dpaste.com/1N0YQK5 
23:46:46 <ais523> oh, duh, it's got confused about data types and is looking for an integer that starts with the digit 4 
23:47:30 <ais523> it uses /**/ comments and "no" rather than "false" 
23:47:54 <fizzie> I've definitely seen "no" before. 
23:48:09 <b_jonas> ais523: sicstus prolog, I think 
23:48:17 <ais523> fizzie: same, but I can't remember where 
23:48:21 <ais523> "false" seems more common IME 
23:48:26 <b_jonas> (the commercial one that works worse than gnu prolog) 
23:49:11 <fizzie> SWI-Prolog is the only one I've really used particularly much. 
23:49:20 <b_jonas> ais523: on comment syntax https://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/ref_002dsyn_002dcom.html#ref_002dsyn_002dcom 
23:49:47 <b_jonas> ais523: the "no" appears only in the output, not in the input though 
23:49:54 <fizzie> I tried to Google for examples, and there's at least one swipl example which says "yes" and "no", but also there was another one where it was saying "true" (no "false"s in the example), so maybe they've changed it over time. 
23:49:56 <ais523> b_jonas: Brachylog's written in SWI Prolog, so I've got fairly used to that 
23:50:14 <ais523> even though GNU Prolog is the one I've used most, and Borland Prolog is the first one I learned (but never used; I just liked reading manuals) 
23:50:54 <b_jonas> for input, I use false or fail 
23:51:06 <b_jonas> I don't think "no" works as input 
23:52:08 <b_jonas> ais523: gnu prolog seemed to work well for me, this one simply uses sicstus because I wrote it connected to a university course about declarative programming 
23:52:26 <b_jonas> so the professor chose the interpreter, and that choice was good enough that it wasn't worth to mess with 
23:52:27 <ais523> gnu prolog often has weird build-system-related issues IME 
23:52:59 <ais523> I thought the standard true/fail values in input were "true" and "fail" 
23:53:06 <b_jonas> ais523: maybe, but it ran my constraint logic programs fast, which matters for this course 
23:53:18 <ais523> although "\+!" is sometimes seen as a fail value, as is "1=0" (these are both golfier than "fail") 
23:53:37 <b_jonas> ais523: I think both false and fail works in multiple prologs 
23:53:38 <ais523> explicitly writing a true value is probably never useful? 
23:53:56 <ais523> maybe for use with call and friends 
23:54:14 <b_jonas> ais523: I wrote the olvashato compiler that outputs prolog code. I wouldn't say that explicit true can never be useful. 
23:54:25 <b_jonas> I'm not sure if it outputs true 
23:54:56 <b_jonas> sure, x=x would work there too 
23:55:02 <ais523> oh right, it's useful in generated code for the same reason that trailing commas on lists are 
23:55:18 <ais523> IIRC there's a 1=1 in the output of the Brachylog compiler 
23:55:31 <ais523> simply to avoid special-casing for empty lists 
23:56:29 <b_jonas> there are string constants saying "true" in the prolog part of the olvashato compiler. I won't check if it's dead code now though. 
23:57:47 <b_jonas> there are enough of them that one of them likely can be triggered 
23:57:53 <ais523> explicit fail is also a weird case; it's only relevant in code with side effects (assuming you're considering cuts to be side effects) 
23:58:01 <b_jonas> though it may need input code where you use something unnecessary 
23:58:58 <b_jonas> explicit "fail" only appears once in the compiler, for when you call the or builtin with no arguments (it's variadic) 
23:59:16 <b_jonas> it does output explicit "abort" often though 
23:59:31 <b_jonas> that's quite different of course